<?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>212954</bug_id>
          
          <creation_ts>2020-06-08 21:33:31 -0700</creation_ts>
          <short_desc>[JSC] Simplify get*PropertyNames() methods and EnumerationMode</short_desc>
          <delta_ts>2021-01-07 20:39:02 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=212956</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=212909</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>219926</blocked>
    
    <blocked>189034</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Alexey Shvayka">ashvayka</assigned_to>
          <cc>alecflett</cc>
    
    <cc>ashvayka</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>hi</cc>
    
    <cc>joepeck</cc>
    
    <cc>jsbell</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1660565</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-08 21:33:31 -0700</bug_when>
    <thetext>JSAPIValueWrapper doesn&apos;t override any of the forms of getPropertyNames.  Hence, there probably is no reason to have this flag, but we should investigate deeper before removing it.

If the flag can be remove, then we can strengthen the assertion for overridesAnyFormOfGetPropertyNames() in Structure::validateFlags().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660574</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-08 21:57:53 -0700</bug_when>
    <thetext>Ditto for JSGlobalObject.  We should investigate whether the flag is really needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1661052</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-09 19:05:29 -0700</bug_when>
    <thetext>Closed the wrong bug.  Re-opening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714948</commentid>
    <comment_count>3</comment_count>
      <attachid>416300</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-12-15 15:26:29 -0800</bug_when>
    <thetext>Created attachment 416300
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714949</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-12-15 15:27:18 -0800</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #3)
&gt; Created attachment 416300 [details]
&gt; Patch

                                       r270393                    patch

object-get-own-property-symbols    64.6840+-0.9261     ^     61.2901+-0.6377        ^ definitely 1.0554x faster
object-keys-cloned-arguments       64.2298+-0.9984     ^     52.0452+-1.3066        ^ definitely 1.2341x faster
object-keys-error-object          392.5292+-9.7568     ^     77.6232+-1.5012        ^ definitely 5.0569x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1715377</commentid>
    <comment_count>5</comment_count>
      <attachid>416418</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-12-17 07:11:49 -0800</bug_when>
    <thetext>Created attachment 416418
Patch

Fix early return condition in getNonReifiedStaticPropertyNames() and export getOwnSpecialPropertyNames().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1716797</commentid>
    <comment_count>6</comment_count>
      <attachid>416418</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-12-28 19:42:37 -0800</bug_when>
    <thetext>Comment on attachment 416418
Patch

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

r=me

&gt; Source/JavaScriptCore/runtime/JSObject.cpp:2384
&gt; +constexpr unsigned maximumPrototypeChainDepth = 40000;

Let&apos;s put `static ` before this. And maybe, defining it in JSObject&apos;s class static field (JSObject::maximumPrototypeChainDepth) is better.

&gt; Source/JavaScriptCore/runtime/JSPropertyNameEnumerator.cpp:110
&gt; +        // Inlined JSObject::getOwnNonIndexPropertyNames()
&gt; +        base-&gt;methodTable(vm)-&gt;getOwnSpecialPropertyNames(base, globalObject, propertyNames, DontEnumPropertiesMode::Exclude);
&gt; +        RETURN_IF_EXCEPTION(scope, void());
&gt; +
&gt; +        base-&gt;getNonReifiedStaticPropertyNames(vm, propertyNames, DontEnumPropertiesMode::Exclude);
&gt; +        unsigned nonStructurePropertyCount = propertyNames.size();
&gt; +        structure-&gt;getPropertyNamesFromStructure(vm, propertyNames, DontEnumPropertiesMode::Exclude);
&gt; +        scope.assertNoException();
&gt; +
&gt; +        // |propertyNames| contains properties exclusively from the structure.
&gt; +        if (!nonStructurePropertyCount)
&gt; +            structurePropertyCount = propertyNames.size();

This means that, if non-reified property exists, we cannot use fast path (since nonStructurePropertyCount is non-zero, and structurePropertyCount is always zero).
Is it the same in the old code? If the old code can use the fast path even if non-reified static property exists, can you change the new code to the same state?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1716968</commentid>
    <comment_count>7</comment_count>
      <attachid>416886</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-01-01 17:42:51 -0800</bug_when>
    <thetext>Created attachment 416886
Patch

Use JSObject::maximumPrototypeChainDepth and add a test case for non-reified static properties.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1716969</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-01-01 17:43:19 -0800</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #6)
&gt; This means that, if non-reified property exists, we cannot use fast path
&gt; (since nonStructurePropertyCount is non-zero, and structurePropertyCount is
&gt; always zero).
&gt; Is it the same in the old code? If the old code can use the fast path even
&gt; if non-reified static property exists, can you change the new code to the
&gt; same state?

Yes, right, this is very intentional improvement over old code: to match the order required by the spec, structure properties should come after non-reified static properties, which isn&apos;t possible on the fast path because structure loop comes before generic loop.

This change is performance-neutral because slow path is taken only if there is an [[Enumerable]] non-reified or special property, which is extremely rare.
In JSC, only `WebAssembly` and `WebAssembly.Module` objects have [[Enumerable]] non-reified properties.
However, even they, as well as WebIDL interfaces like `Element.prototype`, never passed the canAccessPropertiesQuicklyForEnumeration() check because of accessors.

I&apos;ve added a test for for/in with `WebAssembly`, which used to fail before https://bugs.webkit.org/show_bug.cgi?id=214908.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1716972</commentid>
    <comment_count>9</comment_count>
      <attachid>416888</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-01-01 20:15:25 -0800</bug_when>
    <thetext>Created attachment 416888
Patch

Guard stress test with `WebAssembly` check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717825</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-01-06 18:17:06 -0800</bug_when>
    <thetext>Tools/Scripts/svn-apply failed to apply attachment 416888 to trunk.
Please resolve the conflicts and upload a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718126</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-01-07 15:56:42 -0800</bug_when>
    <thetext>Committed r271269: &lt;https://trac.webkit.org/changeset/271269&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718127</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-01-07 15:57:16 -0800</bug_when>
    <thetext>&lt;rdar://problem/72908707&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416300</attachid>
            <date>2020-12-15 15:26:29 -0800</date>
            <delta_ts>2020-12-17 07:11:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212954-20201216012627.patch</filename>
            <type>text/plain</type>
            <size>214198</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzA4NjkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIwIEBACisyMDIwLTEyLTE1ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBbSlNDXSBTaW1wbGlmeSBnZXQqUHJvcGVydHlOYW1lcygp
IG1ldGhvZHMgYW5kIEVudW1lcmF0aW9uTW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyOTU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBDaGFrcmFDb3JlLnlhbWw6CisgICAgICAgICogQ2hha3Jh
Q29yZS90ZXN0L0Jhc2ljcy9lbnVtLmJhc2VsaW5lLWpzYzogUmVtb3ZlZC4KKyAgICAgICAgKiBt
aWNyb2JlbmNobWFya3MvZm9yLWluLW9uLW9iamVjdC13aXRoLWxhemlseS1tYXRlcmlhbGl6ZWQt
cHJvcGVydGllcy5qczoKKyAgICAgICAgUmVtb3ZlZCBiZWNhdXNlIEVycm9ySW5zdGFuY2Ugbm8g
bG9uZ2VyIG1hdGVyaWFsaXplcyBwcm9wZXJ0aWVzIGR1cmluZyBmb3IvaW4gZW51bWVyYXRpb24u
CisKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3Mvb2JqZWN0LWtleXMtY2xvbmVkLWFyZ3VtZW50
cy5qczogQWRkZWQuCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL29iamVjdC1rZXlzLWVycm9y
LW9iamVjdC5qczogQWRkZWQuCisgICAgICAgICogc3RyZXNzL2FyZ3VtZW50cy1wcm9wZXJ0aWVz
LW9yZGVyLmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3MvZm9yLWluLXR5cGVkLWFycmF5Lmpz
OgorCiAyMDIwLTEyLTE1ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAg
ICAgICAgU3VwcHJlc3Mgbm9pc2UgZnJvbSBKU1Rlc3RzL3N0cmVzcy9sYXJzLXNhYi13b3JrZXJz
LmpzCkluZGV4OiBKU1Rlc3RzL0NoYWtyYUNvcmUueWFtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3Rz
L0NoYWtyYUNvcmUueWFtbAkocmV2aXNpb24gMjcwODY2KQorKysgSlNUZXN0cy9DaGFrcmFDb3Jl
LnlhbWwJKHdvcmtpbmcgY29weSkKQEAgLTMwMyw3ICszMDMsNyBAQAogLSBwYXRoOiBDaGFrcmFD
b3JlL3Rlc3QvQmFzaWNzL3NjYW4uanMKICAgY21kOiBydW5DaGFrcmEgOmJhc2VsaW5lLCAiTm9F
eGNlcHRpb24iLCAic2Nhbi5iYXNlbGluZS1qc2MiLCBbXQogLSBwYXRoOiBDaGFrcmFDb3JlL3Rl
c3QvQmFzaWNzL2VudW0uanMKLSAgY21kOiBydW5DaGFrcmEgOmJhc2VsaW5lLCAiTm9FeGNlcHRp
b24iLCAiZW51bS5iYXNlbGluZS1qc2MiLCBbXQorICBjbWQ6IHJ1bkNoYWtyYSA6cGFzcywgIk5v
RXhjZXB0aW9uIiwgIiIsIFtdCiAtIHBhdGg6IENoYWtyYUNvcmUvdGVzdC9CYXNpY3Mvd2l0aDMu
anMKICAgY21kOiBydW5DaGFrcmEgOmJhc2VsaW5lLCAiTm9FeGNlcHRpb24iLCAid2l0aDMuYmFz
ZWxpbmUtanNjIiwgW10KIC0gcGF0aDogQ2hha3JhQ29yZS90ZXN0L0Jhc2ljcy9jcm9zc19zaXRl
X2FjY2Vzc29yX21haW4uanMKSW5kZXg6IEpTVGVzdHMvQ2hha3JhQ29yZS90ZXN0L0Jhc2ljcy9l
bnVtLmJhc2VsaW5lLWpzYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL0NoYWtyYUNvcmUvdGVzdC9C
YXNpY3MvZW51bS5iYXNlbGluZS1qc2MJKHJldmlzaW9uIDI3MDg2NikKKysrIEpTVGVzdHMvQ2hh
a3JhQ29yZS90ZXN0L0Jhc2ljcy9lbnVtLmJhc2VsaW5lLWpzYwkobm9uZXhpc3RlbnQpCkBAIC0x
LDExNyArMCwwIEBACi14OmEueAotcTphLnEKLXU6YS5xCi16OmYucC56Ci1yOmYucC5yCi15Om8u
cC55Ci1PYmplY3QgYQoteAoteQotdQotegotTWF0aAotdQoteAoteQotegotQXJyYXkKLXUKLXgK
LXkKLXoKLUFycmF5LnByb3RvdHlwZQotdQoteAoteQotegotRGF0ZQotdQoteAoteQotegotTnVt
YmVyCi11Ci14Ci15Ci16Ci1TdHJpbmcKLXUKLXgKLXkKLXoKLU9iamVjdC5wcm90b3R5cGUKLXUK
LXgKLXkKLXoKLU9iamVjdAotdQoteAoteQotegotQXJyYXkucHJvdG90eXBlLnNvcnQKLXUKLXgK
LXkKLXoKLWZ1bmN0aW9uIGZvbwotdQoteAoteQotegoteAotdQoteQotegotbWUgaGVyZQotcHJv
dG90eXBlIGNoYWluCi11Ci14Ci15Ci16Ci1MaXRlcmFsIFN0cmluZwotMAotMQotMgotMwotNAot
NQotNgotNwotOAotOQotenoKLXUKLXgKLXkKLXoKLVN0cmluZyBPYmplY3QKLXh4Ci15eQotMAot
MQotMgotMwotNAotNQotNgotNwotOAotOQotMTAKLTExCi16egotdQoteAoteQotegotNQotdQot
eAoteQotegotMwotdQoteAoteQotegpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9y
LWluLW9uLW9iamVjdC13aXRoLWxhemlseS1tYXRlcmlhbGl6ZWQtcHJvcGVydGllcy5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4tb24tb2JqZWN0LXdpdGgt
bGF6aWx5LW1hdGVyaWFsaXplZC1wcm9wZXJ0aWVzLmpzCShyZXZpc2lvbiAyNzA4NjYpCisrKyBK
U1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4tb24tb2JqZWN0LXdpdGgtbGF6aWx5LW1hdGVy
aWFsaXplZC1wcm9wZXJ0aWVzLmpzCShub25leGlzdGVudCkKQEAgLTEsMTUgKzAsMCBAQAotLy9A
IHNraXAgaWYgJG1vZGVsID09ICJBcHBsZSBXYXRjaCBTZXJpZXMgMyIgIyBhZGRlZCBieSBtYXJr
LWpzYy1zdHJlc3MtdGVzdC5weQotZnVuY3Rpb24gZm9vKG8pIHsKLSAgICB2YXIgY291bnQgPSAw
OwotICAgIGZvciAodmFyIHAgaW4gbykgewotICAgICAgICBpZiAob1twXSkKLSAgICAgICAgICAg
IGNvdW50ICsrOwotICAgIH0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci1ub0lubGluZShmb28pOwot
Ci12YXIgdG90YWwgPSAwOwotZm9yIChsZXQgaiA9IDA7IGogPCAxMDAwMDA7ICsraikKLSAgICB0
b3RhbCArPSBmb28obmV3IEVycm9yKTsKLQpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFya3Mv
b2JqZWN0LWtleXMtY2xvbmVkLWFyZ3VtZW50cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21p
Y3JvYmVuY2htYXJrcy9vYmplY3Qta2V5cy1jbG9uZWQtYXJndW1lbnRzLmpzCShub25leGlzdGVu
dCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL29iamVjdC1rZXlzLWNsb25lZC1hcmd1bWVu
dHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5IEBACitub0lubGluZShPYmplY3Qua2V5
cyk7CisKK2Z1bmN0aW9uIGdldEFyZ3MoYSwgYiwgYykgeworICAgICJ1c2Ugc3RyaWN0IjsKKyAg
ICByZXR1cm4gYXJndW1lbnRzOworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDJlNTsgKytpKQor
ICAgIE9iamVjdC5rZXlzKGdldEFyZ3MoMSwgMiwgMykpOwpJbmRleDogSlNUZXN0cy9taWNyb2Jl
bmNobWFya3Mvb2JqZWN0LWtleXMtZXJyb3Itb2JqZWN0LmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVz
dHMvbWljcm9iZW5jaG1hcmtzL29iamVjdC1rZXlzLWVycm9yLW9iamVjdC5qcwkobm9uZXhpc3Rl
bnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9vYmplY3Qta2V5cy1lcnJvci1vYmplY3Qu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACitub0lubGluZShPYmplY3Qua2V5cyk7
CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMmU1OyArK2kpCisgICAgT2JqZWN0LmtleXMobmV3IEVy
cm9yKCkpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvYXJndW1lbnRzLXByb3BlcnRpZXMtb3JkZXIu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvYXJndW1lbnRzLXByb3BlcnRpZXMtb3Jk
ZXIuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvYXJndW1lbnRzLXByb3BlcnRp
ZXMtb3JkZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OSBAQAorZnVuY3Rpb24gZ2V0
TWFwcGVkQXJndW1lbnRzKGEsIGIpIHsgcmV0dXJuIGFyZ3VtZW50czsgfQorZnVuY3Rpb24gZ2V0
VW5tYXBwZWRBcmd1bWVudHMoYSwgYikgeyAidXNlIHN0cmljdCI7IHJldHVybiBhcmd1bWVudHM7
IH0KKworZnVuY3Rpb24gc2hvdWxkQmVBcnJheShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAgdmFy
IGlzRXF1YWwgPQorICAgICAgICBhY3R1YWwubGVuZ3RoID09PSBleHBlY3RlZC5sZW5ndGggJiYK
KyAgICAgICAgYWN0dWFsLmV2ZXJ5KChpdGVtLCBpbmRleCkgPT4gaXRlbSA9PT0gZXhwZWN0ZWRb
aW5kZXhdKTsKKyAgICBpZiAoIWlzRXF1YWwpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhw
ZWN0ZWQgWyR7YWN0dWFsLm1hcChTdHJpbmcpfV0gdG8gZXF1YWwgWyR7ZXhwZWN0ZWQubWFwKFN0
cmluZyl9XWApOworfQorCitmdW5jdGlvbiBmb3JJbihvYmplY3QpIHsKKyAgICB2YXIga2V5cyA9
IFtdOworICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpCisgICAgICAgIGtleXMucHVzaChrZXkp
OworICAgIHJldHVybiBrZXlzOworfQorCitub0lubGluZShnZXRNYXBwZWRBcmd1bWVudHMpOwor
bm9JbmxpbmUoZ2V0VW5tYXBwZWRBcmd1bWVudHMpOworbm9JbmxpbmUoZm9ySW4pOworCisoZnVu
Y3Rpb24oKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICB2
YXIgbWFwcGVkQXJndW1lbnRzID0gZ2V0TWFwcGVkQXJndW1lbnRzKDAsIDEsIDIpOworICAgICAg
ICBzaG91bGRCZUFycmF5KGZvckluKG1hcHBlZEFyZ3VtZW50cyksIFsiMCIsICIxIiwgIjIiXSk7
CisgICAgICAgIHNob3VsZEJlQXJyYXkoT2JqZWN0LmtleXMobWFwcGVkQXJndW1lbnRzKSwgWyIw
IiwgIjEiLCAiMiJdKTsKKyAgICAgICAgc2hvdWxkQmVBcnJheShSZWZsZWN0Lm93bktleXMobWFw
cGVkQXJndW1lbnRzKSwgWyIwIiwgIjEiLCAiMiIsICJsZW5ndGgiLCAiY2FsbGVlIiwgU3ltYm9s
Lml0ZXJhdG9yXSk7CisKKyAgICAgICAgdmFyIHVubWFwcGVkQXJndW1lbnRzID0gZ2V0VW5tYXBw
ZWRBcmd1bWVudHMoMCk7CisgICAgICAgIHNob3VsZEJlQXJyYXkoZm9ySW4odW5tYXBwZWRBcmd1
bWVudHMpLCBbIjAiXSk7CisgICAgICAgIHNob3VsZEJlQXJyYXkoT2JqZWN0LmtleXModW5tYXBw
ZWRBcmd1bWVudHMpLCBbIjAiXSk7CisgICAgICAgIHNob3VsZEJlQXJyYXkoUmVmbGVjdC5vd25L
ZXlzKHVubWFwcGVkQXJndW1lbnRzKSwgWyIwIiwgImxlbmd0aCIsICJjYWxsZWUiLCBTeW1ib2wu
aXRlcmF0b3JdKTsKKyAgICB9Cit9KSgpOworCisoZnVuY3Rpb24oKSB7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICB2YXIgbWFwcGVkQXJndW1lbnRzID0gZ2V0
TWFwcGVkQXJndW1lbnRzKDAsIDEpOworICAgICAgICBtYXBwZWRBcmd1bWVudHNbOF0gPSA4Owor
ICAgICAgICBtYXBwZWRBcmd1bWVudHNbMl0gPSAyOworICAgICAgICBzaG91bGRCZUFycmF5KGZv
ckluKG1hcHBlZEFyZ3VtZW50cyksIFsiMCIsICIxIiwgIjIiLCAiOCJdKTsKKyAgICAgICAgc2hv
dWxkQmVBcnJheShPYmplY3Qua2V5cyhtYXBwZWRBcmd1bWVudHMpLCBbIjAiLCAiMSIsICIyIiwg
IjgiXSk7CisgICAgICAgIHNob3VsZEJlQXJyYXkoUmVmbGVjdC5vd25LZXlzKG1hcHBlZEFyZ3Vt
ZW50cyksIFsiMCIsICIxIiwgIjIiLCAiOCIsICJsZW5ndGgiLCAiY2FsbGVlIiwgU3ltYm9sLml0
ZXJhdG9yXSk7CisKKyAgICAgICAgdmFyIHVubWFwcGVkQXJndW1lbnRzID0gZ2V0VW5tYXBwZWRB
cmd1bWVudHMoKTsKKyAgICAgICAgdW5tYXBwZWRBcmd1bWVudHNbMTJdID0gMTI7CisgICAgICAg
IHVubWFwcGVkQXJndW1lbnRzWzNdID0gMzsKKyAgICAgICAgc2hvdWxkQmVBcnJheShmb3JJbih1
bm1hcHBlZEFyZ3VtZW50cyksIFsiMyIsICIxMiJdKTsKKyAgICAgICAgc2hvdWxkQmVBcnJheShP
YmplY3Qua2V5cyh1bm1hcHBlZEFyZ3VtZW50cyksIFsiMyIsICIxMiJdKTsKKyAgICAgICAgc2hv
dWxkQmVBcnJheShSZWZsZWN0Lm93bktleXModW5tYXBwZWRBcmd1bWVudHMpLCBbIjMiLCAiMTIi
LCAibGVuZ3RoIiwgImNhbGxlZSIsIFN5bWJvbC5pdGVyYXRvcl0pOworICAgIH0KK30pKCk7CisK
KyhmdW5jdGlvbigpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAg
ICAgIHZhciBtYXBwZWRBcmd1bWVudHMgPSBnZXRNYXBwZWRBcmd1bWVudHMoMCk7CisgICAgICAg
IG1hcHBlZEFyZ3VtZW50cy5mb28gPSAxOworICAgICAgICBtYXBwZWRBcmd1bWVudHMuYmFyID0g
MjsKKyAgICAgICAgc2hvdWxkQmVBcnJheShmb3JJbihtYXBwZWRBcmd1bWVudHMpLCBbIjAiLCAi
Zm9vIiwgImJhciJdKTsKKyAgICAgICAgc2hvdWxkQmVBcnJheShPYmplY3Qua2V5cyhtYXBwZWRB
cmd1bWVudHMpLCBbIjAiLCAiZm9vIiwgImJhciJdKTsKKyAgICAgICAgLy8gRklYTUU6IFN5bWJv
bC5pdGVyYXRvciBzaG91bGQgY29tZSBhZnRlciAiZm9vIiBhbmQgImJhciIgCisgICAgICAgIC8v
IHNob3VsZEJlQXJyYXkoUmVmbGVjdC5vd25LZXlzKG1hcHBlZEFyZ3VtZW50cyksIFsiMCIsICJs
ZW5ndGgiLCAiY2FsbGVlIiwgImZvbyIsICJiYXIiLCBTeW1ib2wuaXRlcmF0b3JdKTsKKworICAg
ICAgICB2YXIgdW5tYXBwZWRBcmd1bWVudHMgPSBnZXRVbm1hcHBlZEFyZ3VtZW50cygwLCAxLCAy
KTsKKyAgICAgICAgdW5tYXBwZWRBcmd1bWVudHMuZm9vID0gMTsKKyAgICAgICAgdW5tYXBwZWRB
cmd1bWVudHMuYmFyID0gMjsKKyAgICAgICAgc2hvdWxkQmVBcnJheShmb3JJbih1bm1hcHBlZEFy
Z3VtZW50cyksIFsiMCIsICIxIiwgIjIiLCAiZm9vIiwgImJhciJdKTsKKyAgICAgICAgc2hvdWxk
QmVBcnJheShPYmplY3Qua2V5cyh1bm1hcHBlZEFyZ3VtZW50cyksIFsiMCIsICIxIiwgIjIiLCAi
Zm9vIiwgImJhciJdKTsKKyAgICAgICAgLy8gRklYTUU6ICJjYWxsZWUiIHNob3VsZCBjb21lIGJl
Zm9yZSAiZm9vIiBhbmQgImJhciIKKyAgICAgICAgLy8gc2hvdWxkQmVBcnJheShSZWZsZWN0Lm93
bktleXModW5tYXBwZWRBcmd1bWVudHMpLCBbIjAiLCAiMSIsICIyIiwgImxlbmd0aCIsICJjYWxs
ZWUiLCAiZm9vIiwgImJhciIsIFN5bWJvbC5pdGVyYXRvcl0pOworICAgIH0KK30pKCk7CisKKy8v
IEZJWE1FOiBBZGQgbW9yZSB0ZXN0cywgY292ZXJpbmc6CisvLyAqIGFkZGVkIHN5bWJvbCBwcm9w
ZXJ0aWVzOworLy8gKiBhZGRlZCB0b2dldGhlciBpbmRleCwgbm9uLWluZGV4LCBhbmQgc3ltYm9s
IHByb3BlcnRpZXM7CisvLyAqIGRlbGV0ZWQsIHJlLWFkZGVkLCBhbmQgcmVkZWZpbmVkIGFzIERv
bnRFbnVtIGluZGV4IHByb3BlcnRpZXMsIGJvdGggd2l0aGluIGFuZCBiZXlvbmQgImxlbmd0aCI7
CisvLyAqIGRlbGV0ZWQsIHJlLWFkZGVkLCBhbmQgcmVkZWZpbmVkIGFzIERvbnRFbnVtICJsZW5n
dGgiLCAiY2FsbGVlIiwgYW5kIFN5bWJvbC5pdGVyYXRvciBwcm9wZXJ0aWVzLgpJbmRleDogSlNU
ZXN0cy9zdHJlc3MvZm9yLWluLXR5cGVkLWFycmF5LmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMv
c3RyZXNzL2Zvci1pbi10eXBlZC1hcnJheS5qcwkocmV2aXNpb24gMjcwODY2KQorKysgSlNUZXN0
cy9zdHJlc3MvZm9yLWluLXR5cGVkLWFycmF5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNiwzICsx
NiwyNSBAQAogICAgIH0KICAgICBmb28obnVsbCk7CiB9KSgpOworCisoZnVuY3Rpb24oKSB7Cisg
ICAgZnVuY3Rpb24gZm9ySW4oKSB7CisgICAgICAgIHZhciBhID0gbmV3IEludDMyQXJyYXkoNCk7
CisgICAgICAgIGEuZm9vID0gMTsKKyAgICAgICAgYS5iYXIgPSAyOworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpCisgICAgICAgICAgICBhW2ldID0gaTsKKworICAg
ICAgICB2YXIga2V5cyA9IFtdOworICAgICAgICBmb3IgKHZhciBrIGluIGEpCisgICAgICAgICAg
ICBrZXlzLnB1c2goayk7CisgICAgICAgIHJldHVybiBrZXlzLmpvaW4oInwiKTsKKyAgICB9Cisg
ICAgbm9JbmxpbmUoZm9ySW4pOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkg
eworICAgICAgICB2YXIga2V5cyA9IGZvckluKCk7CisgICAgICAgIGlmIChrZXlzICE9PSAiMHwx
fDJ8M3xmb298YmFyIikKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIHJlc3VsdDog
JHtrZXlzfWApOworICAgIH0KK30pKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyMTcgQEAKKzIwMjAtMTItMTUgIEFsZXhleSBTaHZheWthICA8
c2h2YWlrYWxlc2hAZ21haWwuY29tPgorCisgICAgICAgIFtKU0NdIFNpbXBsaWZ5IGdldCpQcm9w
ZXJ0eU5hbWVzKCkgbWV0aG9kcyBhbmQgRW51bWVyYXRpb25Nb2RlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI5NTQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCZWZvcmUgdGhpcyBjaGFuZ2UsIFtbT3du
UHJvcGVydHlLZXlzXV0gb3ZlcnJpZGVzIHdlcmUgc29tZXRpbWVzIGltcGxlbWVudGVkCisgICAg
ICAgIGluY29uc2lzdGVudGx5LCB2aWEgZGlmZmVyZW50IGdldCpQcm9wZXJ0eU5hbWVzKCkgbWV0
aG9kcyB0aGF0IGR1cGxpY2F0ZWQgbG9naWMKKyAgICAgICAgKGUuZy4gRXJyb3JJbnN0YW5jZSwg
UmVnRXhwT2JqZWN0LCBhbmQgU3RyaW5nT2JqZWN0KS4KKworICAgICAgICBUaGlzIHBhdGNoOgor
CisgICAgICAgIDEuIEludHJvZHVjZXMgYSBjbGVhciBjb252ZW50aW9uIHRvIGltcGxlbWVudCBb
W093blByb3BlcnR5S2V5c11dIG92ZXJyaWRlczoKKyAgICAgICAgICAgaWYgaXQncyBkZWZpbmVk
IGJ5IHRoZSBzcGVjLCBnZXRPd25Qcm9wZXJ0eU5hbWVzKCkgbWV0aG9kIHNob3VsZCBiZSB1c2Vk
OworICAgICAgICAgICBvdGhlcndpc2UsIGdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKCkgc2hv
dWxkIGJlIG92ZXJyaWRlbi4KKworICAgICAgICAgICBSZW1vdmVzIGdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcygpIGZyb20gdGhlIG1ldGhvZCB0YWJsZSBhbmQgY29udmVydHMgaXQgdG8KKyAg
ICAgICAgICAgaW5zdGFuY2UgbWV0aG9kOyBpdHMgb3ZlcnJpZGVzIHdlcmUgcmVuYW1lZCB0byBn
ZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcygpCisgICAgICAgICAgIGFuZCBleGVtcHRlZCBmcm9t
IGNhbGxpbmcgdGhlIG5vLW9wIGJhc2UgbWV0aG9kLgorCisgICAgICAgICAgIFRoaXMgYXBwcm9h
Y2ggd2FzIGNob3NlbiwgaW5zdGVhZCBvZiBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoKSBv
dmVycmlkZSwKKyAgICAgICAgICAgYmVjYXVzZSBmb3IvaW4gZW51bWVyYXRpb24gbXVzdCBiZSBz
dXJlIHRoZXJlIGFyZSBubyBlbnVtZXJhYmxlIHByb3BlcnRpZXMgCisgICAgICAgICAgIGJldHdl
ZW4gZ2V0RW51bWVyYWJsZUxlbmd0aCgpIGFuZCB0aGUgZmlyc3Qgc3RydWN0dXJlIHByb3BlcnR5
LgorCisgICAgICAgICAgIEFsc28sIHJlbW92ZXMgZ2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcygp
IGZyb20gdGhlIG1ldGhvZCB0YWJsZSBhcyBpdCdzCisgICAgICAgICAgIHVucmVhc29uYWJsZSB0
byBvdmVycmlkZSBpdC4KKworICAgICAgICAyLiBFeHRyYWN0cyBKU09iamVjdDo6Z2V0T3duSW5k
ZXhQcm9wZXJ0eU5hbWVzKCkgaW5zdGFuY2UgbWV0aG9kIHRvIGVuZm9yY2UKKyAgICAgICAgICAg
Y29ycmVjdCBlbnVtZXJhdGlvbiBvcmRlciBpbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKCkgb3ZlcnJp
ZGVzOgorICAgICAgICAgICBzcGVjaWFsIGluZGljZXMgPT4gc3RydWN0dXJlIGluZGljZXMgPT4g
c3BlY2lhbCBwcm9wZXJ0aWVzID0+IHN0cnVjdHVyZSBwcm9wZXJ0aWVzLgorCisgICAgICAgICAg
IExvb3NlIG1vZGUgYGFyZ3VtZW50c2Agd2VyZSBmaXhlZCB0byBlbnVtZXJhdGUgc3RydWN0dXJl
IGluZGljZXMgYmVmb3JlCisgICAgICAgICAgIHNwZWNpYWwgcHJvcGVydGllcyBbMV0sIGFsaWdu
aW5nIEpTQyB3aXRoIFY4IGFuZCBTcGlkZXJNb25rZXkuCisKKyAgICAgICAgMy4gUmV3b3JrcyBm
b3IvaW4gZW51bWVyYXRpb24gc28gdGhlIHNwZWNpYWwgcHJvcGVydGllcyBhbHdheXMgY29tZSBi
ZWZvcmUgc3RydWN0dXJlIG9uZXMsCisgICAgICAgICAgIGFsaWduaW5nIGVudW1lcmF0aW9uIG9y
ZGVyIG9mIFN0cmluZyBvYmplY3RzIFsyXSBhbmQgdHlwZWQgYXJyYXlzIFszXSB0aGF0IGhhdmUg
ZXhwYW5kbworICAgICAgICAgICBwcm9wZXJ0aWVzIHdpdGggdGhlIHNwZWMsIFY4LCBhbmQgU3Bp
ZGVyTW9ua2V5LgorCisgICAgICAgICAgIFJlbW92ZXMgZ2V0UHJvcGVydHlOYW1lcygpIGFuZCBn
ZXRHZW5lcmljUHJvcGVydHlOYW1lcygpIGZyb20gdGhlIG1ldGhvZCB0YWJsZSwgYWxvbmcKKyAg
ICAgICAgICAgd2l0aCB0aGVpciBvdmVycmlkZXMsIGJlY2F1c2UgRVM3IGRpc2FibGVkIGN1c3Rv
bWl6YXRpb24gb2YgZm9yL2luIGVudW1lcmF0aW9uIFs0XS4KKyAgICAgICAgICAgSW5zdGVhZCwg
SlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoKSBpbnN0YW5jZSBtZXRob2QgYW5kIGdldEVudW1l
cmFibGVQcm9wZXJ0eU5hbWVzKCkKKyAgICAgICAgICAgYXJlIGludHJvZHVjZWQsIGZlYXR1cmlu
ZyBhIGxvb3AgaW5zdGVhZCBvZiByZWN1cnNpb24uCisKKyAgICAgICAgICAgQWxzbywgdGhpcyBl
bmFibGVkIGRyb3BwaW5nIGhhcmQtdG8tZm9sbG93IEpTT2JqZWN0UHJvcGVydGllc01vZGUgYml0
IGFuZCBzaW1wbGlmeWluZworICAgICAgICAgICBFbnVtZXJhdGlvbk1vZGUgdG8gYW4gZW51bS4K
KworICAgICAgICBmb3IvaW4gYW5kIE9iamVjdC5rZXlzIG1pY3JvYmVuY2htYXJrcyBhcmUgbmV1
dHJhbC4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWZmZWN0CisgICAgICAgIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciBjYWNoaW5nLCBub3IgZmFzdCBwYXRocyBvZiBpdHMgYnl0ZWNvZGVzLgorCisg
ICAgICAgIFsxXTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVtYXBwZWRhcmd1
bWVudHNvYmplY3QgKHN0ZXBzIDE1LTE2IGFuZCAyMC0yMSkKKyAgICAgICAgWzJdOiBodHRwczov
L3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy1leG90aWMtb2JqZWN0cy1vd25wcm9wZXJ0eWtl
eXMKKyAgICAgICAgWzNdOiBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWludGVnZXItaW5k
ZXhlZC1leG90aWMtb2JqZWN0cy1vd25wcm9wZXJ0eWtleXMKKyAgICAgICAgWzRdOiBodHRwczov
L2dpdGh1Yi5jb20vdGMzOS9lY21hMjYyL3B1bGwvMzY3CisKKyAgICAgICAgKiBBUEkvSlNBUElW
YWx1ZVdyYXBwZXIuaDoKKyAgICAgICAgUmVtb3ZlIE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3Bl
cnR5TmFtZXMgc3RydWN0dXJlIGZsYWcgYXMgaXQgc2hvdWxkIG5ldmVyIGJlIHF1ZXJpZWQKKyAg
ICAgICAgZnJvbSBKU0NlbGwgaW5zdGFuY2VzLgorCisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tP
YmplY3QuaDoKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oOgorICAg
ICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93blNwZWNpYWxQcm9wZXJ0
eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAqIEFQSS9KU09iamVjdFJl
Zi5jcHA6CisgICAgICAgIChKU09iamVjdENvcHlQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBi
aW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OmpzVG9JbnNwZWN0
b3JWYWx1ZSk6CisgICAgICAgICogYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6Ok9iamVjdEFsbG9jYXRpb25Qcm9maWxlQmFzZTxEZXJpdmVk
Pjo6cG9zc2libGVEZWZhdWx0UHJvcGVydHlDb3VudCk6CisgICAgICAgIFVzZSBEb250RW51bVBy
b3BlcnR5TW9kZTo6SW5jbHVkZSBhcyB0aGUgaW50ZW50IGlzIHRvIGNvdW50IGFsbCBwcm9wZXJ0
aWVzLCBldmVuCisgICAgICAgIHByaXZhdGUgc3ltYm9scy4gRW51bWVyYXRpb25Nb2RlKCkgZGVm
YXVsdHMgZGlkIGV4Y2x1ZGUgbm9uLWVudW1lcmFibGUgcHJvcGVydGllcy4KKworICAgICAgICAq
IGRlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3Bl
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlclNjb3Bl
Lmg6CisgICAgICAgICogcnVudGltZS9DbGFzc0luZm8uaDoKKyAgICAgICAgKiBydW50aW1lL0Ns
b25lZEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OkNsb25lZEFyZ3VtZW50czo6Z2V0T3du
U3BlY2lhbFByb3BlcnR5TmFtZXMpOgorICAgICAgICBEb24ndCBtYXRlcmlhbGl6ZSBEb250RW51
bSBwcm9wZXJ0aWVzIHVubGVzcyBpdCdzIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUs
CisgICAgICAgIGFkdmFuY2luZyBwcm92aWRlZCBtaWNyb2JlbmNobWFyayBieSB+MjMlLgorCisg
ICAgICAgIChKU0M6OkNsb25lZEFyZ3VtZW50czo6Z2V0T3duUHJvcGVydHlOYW1lcyk6IERlbGV0
ZWQuCisgICAgICAgICogcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaDoKKyAgICAgICAgKiBydW50
aW1lL0VudW1lcmF0aW9uTW9kZS5oOgorICAgICAgICBFeHBsaWNpdGx5IHNwZWNpZnkgZW51bSB0
eXBlIHRvIHJlZHVjZSBpdHMgc2l6ZS4KKworICAgICAgICAoSlNDOjpFbnVtZXJhdGlvbk1vZGU6
OkVudW1lcmF0aW9uTW9kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkVudW1lcmF0aW9uTW9k
ZTo6aW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkVu
dW1lcmF0aW9uTW9kZTo6aW5jbHVkZUpTT2JqZWN0UHJvcGVydGllcyk6IERlbGV0ZWQuCisgICAg
ICAgICogcnVudGltZS9FcnJvckluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6RXJyb3JJbnN0
YW5jZTo6Z2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMpOgorICAgICAgICBEb24ndCBtYXRlcmlh
bGl6ZSBEb250RW51bSBwcm9wZXJ0aWVzIHVubGVzcyBpdCdzIERvbnRFbnVtUHJvcGVydGllc01v
ZGU6OkluY2x1ZGUsCisgICAgICAgIGFkdmFuY2luZyBwcm92aWRlZCBtaWNyb2JlbmNobWFyayBi
eSBhIGZhY3RvciBvZiA1LgorCisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OmdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkVycm9ySW5zdGFu
Y2U6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRp
bWUvRXJyb3JJbnN0YW5jZS5oOgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5o
OgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAg
ICAgICogcnVudGltZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0T3du
U3BlY2lhbFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5o
OgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRPd25TcGVjaWFs
UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRQcm9wZXJ0eU5h
bWVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0
eU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRHZW5lcmljUHJvcGVy
dHlOYW1lcyk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAg
KiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRP
d25TcGVjaWFsUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0Z1
bmN0aW9uLmg6CisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIFJl
bW92ZSBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHN0cnVjdHVyZSBmbGFnIGFz
IGl0J3MgaW5oZXJpdGVkIGZyb20KKyAgICAgICAgSlNTeW1ib2xUYWJsZU9iamVjdCwgYW5kIEpT
R2xvYmFsT2JqZWN0IGl0c2VsZiBkb2Vzbid0IG92ZXJyaWRlIGdldE93bipQcm9wZXJ0eU5hbWVz
KCkuCisKKyAgICAgICAgKiBydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNMZXhpY2FsRW52aXJvbm1lbnQ6OmdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKEpTQzo6SlNMZXhpY2FsRW52aXJvbm1lbnQ6OmdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0xleGljYWxFbnZpcm9u
bWVudC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHA6CisgICAg
ICAgIChKU0M6OkpTTW9kdWxlRW52aXJvbm1lbnQ6OmdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVFbnZpcm9ubWVudDo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlRW52aXJvbm1l
bnQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMp
OgorICAgICAgICBDYWxsIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcygpIGRpcmVjdGx5LCBn
dWFyZGVkIGJ5IGluY2x1ZGVTeW1ib2xQcm9wZXJ0aWVzKCkgY2hlY2ssCisgICAgICAgIHNpbmNl
IG1vZHVsZSBuYW1lc3BhY2Ugb2JqZWN0cyBjYW4ndCBoYXZlIHN0cmluZyBwcm9wZXJ0aWVzIGJl
c2lkZXMgbV9uYW1lcy4KKyAgICAgICAgKFNlZSBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2Vj
LW1vZHVsZS1uYW1lc3BhY2UtZXhvdGljLW9iamVjdHMtZGVmaW5lb3ducHJvcGVydHktcC1kZXNj
KQorCisgICAgICAgICogcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjpI
b2xkZXI6OmFwcGVuZE5leHRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OldhbGtlcjo6d2Fsayk6
CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpnZXROb25SZWlmaWVkU3RhdGljUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blBy
b3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duSW5kZXhlZFByb3Bl
cnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzKToKKyAgICAgICAgKEpTQzo6Z2V0Q2xhc3NQcm9wZXJ0eU5hbWVzKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMpOiBE
ZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pT
UHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OmdldEVudW1lcmFibGVQ
cm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRv
ci5oOgorICAgICAgICAoSlNDOjpwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKiBy
dW50aW1lL0pTUHJveHkuY3BwOgorICAgICAgICAoSlNDOjpKU1Byb3h5OjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNQcm94eTo6Z2V0UHJvcGVydHlOYW1lcyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkpTUHJveHk6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpKU1Byb3h5OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyk6
IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU1Byb3h5Lmg6CisgICAgICAgICogcnVudGlt
ZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9i
amVjdDo6Z2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU1N5bWJv
bFRhYmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAg
ICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUv
SlNUeXBlSW5mby5oOgorICAgICAgICAoSlNDOjpUeXBlSW5mbzo6b3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlOYW1lcyBjb25zdCk6CisgICAgICAgIChKU0M6OlR5cGVJbmZvOjpvdmVycmlkZXNHZXRP
d25TcGVjaWFsUHJvcGVydHlOYW1lcyBjb25zdCk6CisgICAgICAgIChKU0M6OlR5cGVJbmZvOjpv
dmVycmlkZXNBbnlGb3JtT2ZHZXRPd25Qcm9wZXJ0eU5hbWVzIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6VHlwZUluZm86Om92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpUeXBlSW5mbzo6b3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1l
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5j
cHA6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlw
dG9ycyk6CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAg
IChKU0M6OmRlZmluZVByb3BlcnRpZXMpOgorICAgICAgICAoSlNDOjpzZXRJbnRlZ3JpdHlMZXZl
bCk6CisgICAgICAgIChKU0M6OnRlc3RJbnRlZ3JpdHlMZXZlbCk6CisgICAgICAgIChKU0M6Om93
blByb3BlcnR5S2V5cyk6CisgICAgICAgICogcnVudGltZS9Qcm94eU9iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAg
ICAgIChKU0M6OlByb3h5T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpT
Qzo6UHJveHlPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpQcm94eU9iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMp
OiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvUHJveHlPYmplY3QuaDoKKyAgICAgICAgUmVt
b3ZlIElzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRGb3JFbnVtZXJhdGlvbiBmbGFnIGZyb20g
UHJveHlPYmplY3QncyBzdHJ1Y3R1cmUKKyAgICAgICAgc2luY2UgY2FuQWNjZXNzUHJvcGVydGll
c1F1aWNrbHlGb3JFbnVtZXJhdGlvbigpIG5vdyBjaGVja3MgZm9yIG1ldGhvZCBvdmVycmlkZXMu
CisKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlJl
Z0V4cE9iamVjdDo6Z2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpS
ZWdFeHBPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMpOiBEZWxldGVk
LgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9T
dHJpbmdPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6OmdldE93blByb3Bl
cnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6OmdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmplY3QuaDoK
KyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6dmFsaWRhdGVGbGFncyk6CisgICAgICAgIFN0cmVuZ3RoZW4gb3ZlcnJpZGVzR2V0T3duKlBy
b3BlcnR5TmFtZXMgYW5kIG92ZXJyaWRlc0dldFByb3RvdHlwZSBhc3NlcnRzIGludG8KKyAgICAg
ICAgZXF1aXZhbGVuY2UgdGVzdHMuCisKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpnZXRQcm9w
ZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2FuQWNj
ZXNzUHJvcGVydGllc1F1aWNrbHlGb3JFbnVtZXJhdGlvbiBjb25zdCk6CisgICAgICAgICogcnVu
dGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjYW5DYWNoZU93blByb3BlcnR5TmFtZXMgY29uc3Qp
OgorICAgICAgICAqIHRvb2xzL0pTRG9sbGFyVk0uY3BwOgorICAgICAgICBSZW1vdmUgT3ZlcnJp
ZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyBzdHJ1Y3R1cmUgZmxhZyBhcyBpdCdzIGluaGVy
aXRlZCBmcm9tCisgICAgICAgIEpTQXJyYXksIGFuZCBSdW50aW1lQXJyYXkgaXRzZWxmIGRvZXNu
J3Qgb3ZlcnJpZGUgZ2V0T3duKlByb3BlcnR5TmFtZXMoKS4KKwogMjAyMC0xMi0xNSAgQ29tbWl0
IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cmV2ZXJ0aW5nIHIyNzA4NjAuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJ
VmFsdWVXcmFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0FQSVZhbHVlV3JhcHBlci5oCShyZXZpc2lvbiAyNzA4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQVBJVmFsdWVXcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEzICsz
Myw3IEBAIGNsYXNzIEpTQVBJVmFsdWVXcmFwcGVyIGZpbmFsIDogcHVibGljIEoKICAgICBmcmll
bmQgSlNWYWx1ZSBqc0FQSVZhbHVlV3JhcHBlcihKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwog
cHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU0NlbGw7Ci0KLSAgICAvLyBPdmVycmlkZXNBbnlG
b3JtT2ZHZXRQcm9wZXJ0eU5hbWVzICh3aGljaCB1c2VkIHRvIGJlIE92ZXJyaWRlc0dldFByb3Bl
cnR5TmFtZXMpIHdhcyBoZXJlCi0gICAgLy8gc2luY2UgYW5jaWVudCB0aW1lcyBiYWNrIHdoZW4g
d2UgcGVzc2ltaXN0aWNhbGx5IGNob29zZSB0byBhcHBseSB0aGlzIGZsYWcuIEkgdGhpbmsgd2UK
LSAgICAvLyBjYW4gcmVtb3ZlIGl0LCBidXQgd2Ugc2hvdWxkIGRvIG1vcmUgdGVzdGluZyBiZWZv
cmUgd2UgZG8gc28uCi0gICAgLy8gUmVmOiBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNl
dC80OTY5NC93ZWJraXQjZmlsZTkKLSAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxMjk1NAotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0FueUZvcm1P
ZkdldFByb3BlcnR5TmFtZXMgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOworICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0
cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVj
dC5oCShyZXZpc2lvbiAyNzA4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSw3IEBAIHRlbXBsYXRl
IDxjbGFzcyBQYXJlbnQ+CiBjbGFzcyBKU0NhbGxiYWNrT2JqZWN0IGZpbmFsIDogcHVibGljIFBh
cmVudCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IFBhcmVudDsKLSAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBQ
cm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJ
bnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJv
IHwgSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgT3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlO
YW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRhOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzIHwgT3Zl
cnJpZGVzR2V0Q2FsbERhdGEgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgUHJvaGliaXRz
UHJvcGVydHlDYWNoaW5nOwogICAgIHN0YXRpY19hc3NlcnQoIShTdHJ1Y3R1cmVGbGFncyAmIElt
cGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCAidXNpbmcgY3VzdG9tSGFzSW5zdGFuY2UiKTsK
IAogICAgIH5KU0NhbGxiYWNrT2JqZWN0KCk7CkBAIC0yMTEsNyArMjExLDcgQEAgcHJpdmF0ZToK
IAogICAgIHN0YXRpYyBib29sIGN1c3RvbUhhc0luc3RhbmNlKEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlKTsKIAotICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBF
bnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93blNwZWNpYWxQcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRF
bnVtUHJvcGVydGllc01vZGUpOwogCiAgICAgc3RhdGljIENhbGxEYXRhIGdldENvbnN0cnVjdERh
dGEoSlNDZWxsKik7CiAgICAgc3RhdGljIENhbGxEYXRhIGdldENhbGxEYXRhKEpTQ2VsbCopOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2Jq
ZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjQs
NyArNTY0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OgogfQog
CiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50Pgotdm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46
OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3du
U3BlY2lhbFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJv
cGVydGllc01vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwog
ICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVj
dCo+KG9iamVjdCk7CkBAIC01ODMsNyArNTgzLDcgQEAgdm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBh
cmVudD46OmdldE93bk5vbgogICAgICAgICAgICAgZm9yIChpdGVyYXRvciBpdCA9IHN0YXRpY1Zh
bHVlcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAgICAgU3RyaW5n
SW1wbCogbmFtZSA9IGl0LT5rZXkuZ2V0KCk7CiAgICAgICAgICAgICAgICAgU3RhdGljVmFsdWVF
bnRyeSogZW50cnkgPSBpdC0+dmFsdWUuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGVudHJ5
LT5nZXRQcm9wZXJ0eSAmJiAoIShlbnRyeS0+YXR0cmlidXRlcyAmIGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udEVudW0pIHx8IG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKSkgeworICAg
ICAgICAgICAgICAgIGlmIChlbnRyeS0+Z2V0UHJvcGVydHkgJiYgKG1vZGUgPT0gRG9udEVudW1Q
cm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSB8fCAhKGVudHJ5LT5hdHRyaWJ1dGVzICYga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RW51bSkpKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbmFt
ZS0+aXNTeW1ib2woKSk7CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFN0cmluZyhuYW1lKSkpOwogICAgICAgICAgICAgICAg
IH0KQEAgLTU5NiwxNSArNTk2LDEzIEBAIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+Ojpn
ZXRPd25Ob24KICAgICAgICAgICAgIGZvciAoaXRlcmF0b3IgaXQgPSBzdGF0aWNGdW5jdGlvbnMt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgICAgIFN0cmluZ0ltcGwq
IG5hbWUgPSBpdC0+a2V5LmdldCgpOwogICAgICAgICAgICAgICAgIFN0YXRpY0Z1bmN0aW9uRW50
cnkqIGVudHJ5ID0gaXQtPnZhbHVlLmdldCgpOwotICAgICAgICAgICAgICAgIGlmICghKGVudHJ5
LT5hdHRyaWJ1dGVzICYga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RW51bSkgfHwgbW9kZS5pbmNs
dWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSBE
b250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlIHx8ICEoZW50cnktPmF0dHJpYnV0ZXMgJiBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtKSkgewogICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoIW5hbWUtPmlzU3ltYm9sKCkpOwogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVz
LmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBTdHJpbmcobmFtZSkpKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgUGFy
ZW50OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCShyZXZpc2lvbiAy
NzA4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODA4LDcgKzgwOCw3IEBAIEpTUHJvcGVydHlOYW1lQXJyYXlSZWYgSlNP
YmplY3RDb3B5UHJvcGUKICAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7CiAg
ICAgSlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBwcm9wZXJ0eU5hbWVzID0gbmV3IE9wYXF1ZUpTUHJv
cGVydHlOYW1lQXJyYXkoJnZtKTsKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBhcnJheSh2bSwgUHJv
cGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwotICAg
IGpzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldFByb3BlcnR5TmFtZXMoanNPYmplY3QsIGds
b2JhbE9iamVjdCwgYXJyYXksIEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBqc09iamVjdC0+Z2V0
UHJvcGVydHlOYW1lcyhnbG9iYWxPYmplY3QsIGFycmF5LCBEb250RW51bVByb3BlcnRpZXNNb2Rl
OjpFeGNsdWRlKTsKIAogICAgIHNpemVfdCBzaXplID0gYXJyYXkuc2l6ZSgpOwogICAgIHByb3Bl
cnR5TmFtZXMtPmFycmF5LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9u
IDI3MDg2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgc3RhdGljIFJlZlB0cjxKU09OOjpW
YWx1ZT4ganNUb0luc3BlY3RvcgogICAgICAgICBhdXRvIGluc3BlY3Rvck9iamVjdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIGF1dG8mIG9iamVjdCA9ICp2YWx1ZS5nZXRPYmpl
Y3QoKTsKICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyh2bSwgUHJvcGVy
dHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwotICAgICAg
ICBvYmplY3QubWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKCZvYmplY3QsIGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOworICAgICAgICBv
YmplY3QubWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKCZvYmplY3QsIGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7
CiAgICAgICAgIGZvciAoYXV0byYgbmFtZSA6IHByb3BlcnR5TmFtZXMpIHsKICAgICAgICAgICAg
IGF1dG8gaW5zcGVjdG9yVmFsdWUgPSBqc1RvSW5zcGVjdG9yVmFsdWUoZ2xvYmFsT2JqZWN0LCBv
YmplY3QuZ2V0KGdsb2JhbE9iamVjdCwgbmFtZSksIG1heERlcHRoKTsKICAgICAgICAgICAgIGlm
ICghaW5zcGVjdG9yVmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oCShy
ZXZpc2lvbiAyNzA4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw3ICsxNDcs
NyBAQCBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIE9iamVjdEFsbG9jYXRpb25QCiAKICAgICBzaXpl
X3QgY291bnQgPSAwOwogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZUFycmF5KHZt
LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scywgUHJpdmF0ZVN5bWJvbE1vZGU6
OkluY2x1ZGUpOwotICAgIHByb3RvdHlwZS0+c3RydWN0dXJlKHZtKS0+Z2V0UHJvcGVydHlOYW1l
c0Zyb21TdHJ1Y3R1cmUodm0sIHByb3BlcnR5TmFtZUFycmF5LCBFbnVtZXJhdGlvbk1vZGUoKSk7
CisgICAgcHJvdG90eXBlLT5zdHJ1Y3R1cmUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVj
dHVyZSh2bSwgcHJvcGVydHlOYW1lQXJyYXksIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1
ZGUpOwogICAgIFByb3BlcnR5TmFtZUFycmF5RGF0YTo6UHJvcGVydHlOYW1lVmVjdG9yJiBwcm9w
ZXJ0eU5hbWVWZWN0b3IgPSBwcm9wZXJ0eU5hbWVBcnJheS5kYXRhKCktPnByb3BlcnR5TmFtZVZl
Y3RvcigpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvcGVydHlOYW1lVmVjdG9yLnNp
emUoKTsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBwcm90b3R5cGUtPmdldERpcmVj
dCh2bSwgcHJvcGVydHlOYW1lVmVjdG9yW2ldKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAJKHJldmlzaW9uIDI3MDg2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM4LDE0ICsxMzgsMTQgQEAgYm9vbCBEZWJ1Z2dlclNjb3BlOjpkZWxldGVQ
cm9wZXJ0eShKU0NlbAogICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZShnbG9iYWxP
YmplY3QtPnZtKCkpLT5kZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLXZvaWQgRGVidWdnZXJTY29wZTo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2
b2lkIERlYnVnZ2VyU2NvcGU6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBEZWJ1Z2dlclNjb3Bl
KiBzY29wZSA9IGpzQ2FzdDxEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKICAgICBBU1NFUlQoc2Nv
cGUtPmlzVmFsaWQoKSk7CiAgICAgaWYgKCFzY29wZS0+aXNWYWxpZCgpKQogICAgICAgICByZXR1
cm47CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBKU1Njb3BlOjpvYmplY3RBdFNjb3BlKHNj
b3BlLT5qc1Njb3BlKCkpOwotICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKGdsb2JhbE9iamVj
dC0+dm0oKSktPmdldFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICB0aGlzT2JqZWN0LT5nZXRQcm9wZXJ0eU5hbWVzKGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIGJvb2wgRGVidWdnZXJTY29wZTo6
ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCShyZXZpc2lvbiAyNzA4NjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIEpTU2NvcGU7CiBjbGFzcyBEZWJ1Z2dlclNj
b3BlIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIHVzaW5n
IEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXM7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlOYW1lczsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vz
cyBtb2RlPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpAQCAt
NTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OwogICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZGVsZXRl
UHJvcGVydHkoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIERlbGV0ZVBy
b3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwog
ICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmpl
Y3QqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxk
VGhyb3cpOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lvbiAyNzA4NjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtODAs
MjEgKzgwLDEzIEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdXNpbmcgRGVmYXVsdFZhbHVl
RnVuY3Rpb25QdHIgPSBKU1ZhbHVlICgqKShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSk7CiAgICAgRGVmYXVsdFZhbHVlRnVuY3Rpb25QdHIg
TUVUSE9EX1RBQkxFX0VOVFJZKGRlZmF1bHRWYWx1ZSk7CiAKLSAgICB1c2luZyBHZXRPd25Qcm9w
ZXJ0eU5hbWVzRnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHVzaW5nIEdldE93
blByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciA9IHZvaWQgKCopKEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAg
IEdldE93blByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZ2V0T3du
UHJvcGVydHlOYW1lcyk7Ci0KLSAgICB1c2luZyBHZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXNG
dW5jdGlvblB0ciA9IHZvaWQgKCopKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgR2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKGdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyk7Ci0KLSAgICB1c2luZyBHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgPSB2b2lk
ICgqKShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOwotICAgIEdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBNRVRIT0RfVEFC
TEVfRU5UUlkoZ2V0UHJvcGVydHlOYW1lcyk7CisgICAgR2V0T3duUHJvcGVydHlOYW1lc0Z1bmN0
aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyk7CiAK
ICAgICB1c2luZyBHZXRFbnVtZXJhYmxlTGVuZ3RoRnVuY3Rpb25QdHIgPSB1aW50MzJfdCAoKiko
SlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCopOwogICAgIEdldEVudW1lcmFibGVMZW5ndGhGdW5j
dGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZ2V0RW51bWVyYWJsZUxlbmd0aCk7CiAKLSAgICBH
ZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKGdldFN0cnVjdHVy
ZVByb3BlcnR5TmFtZXMpOwotICAgIEdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBNRVRIT0Rf
VEFCTEVfRU5UUlkoZ2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMpOwotCiAgICAgdXNpbmcgQ2xhc3NO
YW1lRnVuY3Rpb25QdHIgPSBTdHJpbmcgKCopKGNvbnN0IEpTT2JqZWN0KiwgVk0mKTsKICAgICBD
bGFzc05hbWVGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoY2xhc3NOYW1lKTsKIApAQCAt
MTY4LDExICsxNjAsOCBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgICAgICAmQ2xhc3NOYW1l
Ojp0b1RoaXMsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZGVmYXVsdFZhbHVlLCBcCiAgICAgICAg
ICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5TmFtZXMsIFwKLSAgICAgICAgJkNsYXNzTmFtZTo6
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzLCBcCi0gICAgICAgICZDbGFzc05hbWU6OmdldFBy
b3BlcnR5TmFtZXMsIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duU3BlY2lhbFByb3BlcnR5
TmFtZXMsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0RW51bWVyYWJsZUxlbmd0aCwgXAotICAg
ICAgICAmQ2xhc3NOYW1lOjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzLCBcCi0gICAgICAgICZD
bGFzc05hbWU6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzLCBcCiAgICAgICAgICZDbGFzc05hbWU6
OmNsYXNzTmFtZSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjp0b1N0cmluZ05hbWUsIFwKICAgICAg
ICAgJkNsYXNzTmFtZTo6Y3VzdG9tSGFzSW5zdGFuY2UsIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjcw
ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDExICsxOTcsMTEgQEAgYm9vbCBDbG9uZWRBcmd1bWVu
dHM6OmdldE93blByb3BlcnR5U2xvdAogICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNs
b3QodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBpZGVudCwgc2xvdCk7CiB9CiAKLXZvaWQgQ2xv
bmVkQXJndW1lbnRzOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCit2b2lkIENsb25lZEFyZ3VtZW50czo6Z2V0T3duU3BlY2lhbFByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAg
Q2xvbmVkQXJndW1lbnRzKiB0aGlzT2JqZWN0ID0ganNDYXN0PENsb25lZEFyZ3VtZW50cyo+KG9i
amVjdCk7Ci0gICAgdGhpc09iamVjdC0+bWF0ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KGds
b2JhbE9iamVjdCk7Ci0gICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBn
bG9iYWxPYmplY3QsIGFycmF5LCBtb2RlKTsKKyAgICBpZiAobW9kZSA9PSBEb250RW51bVByb3Bl
cnRpZXNNb2RlOjpJbmNsdWRlKQorICAgICAgICB0aGlzT2JqZWN0LT5tYXRlcmlhbGl6ZVNwZWNp
YWxzSWZOZWNlc3NhcnkoZ2xvYmFsT2JqZWN0KTsKIH0KIAogYm9vbCBDbG9uZWRBcmd1bWVudHM6
OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5
TmFtZSBpZGVudCwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmgJKHJl
dmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFy
Z3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogY2xhc3MgQ2xvbmVkQXJndW1lbnRzIGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qg
ewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwotICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFBy
b3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
T3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXM7CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKQEAgLTcwLDcgKzcwLDcgQEAgcHJpdmF0ZToKICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUgcHJvdG90eXBlLCBJbmRleGluZ1R5cGUpOwogCiAgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNN
b2RlKTsKICAgICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGRl
bGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxl
dGVQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09i
amVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2Ny
aXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0VudW1lcmF0aW9uTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0VudW1lcmF0aW9uTW9kZS5oCShyZXZpc2lvbiAyNzA4NjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FbnVtZXJhdGlvbk1vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNTYgKzI3LDIwIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1lbnVtIGNsYXNzIFBy
b3BlcnR5TmFtZU1vZGUgeworZW51bSBjbGFzcyBQcm9wZXJ0eU5hbWVNb2RlIDogdWludDhfdCB7
CiAgICAgU3ltYm9scyA9IDEgPDwgMCwKICAgICBTdHJpbmdzID0gMSA8PCAxLAogICAgIFN0cmlu
Z3NBbmRTeW1ib2xzID0gU3ltYm9scyB8IFN0cmluZ3MsCiB9OwogCi1lbnVtIGNsYXNzIFByaXZh
dGVTeW1ib2xNb2RlIHsKK2VudW0gY2xhc3MgUHJpdmF0ZVN5bWJvbE1vZGUgOiB1aW50OF90IHsK
ICAgICBJbmNsdWRlLAogICAgIEV4Y2x1ZGUKIH07CiAKLWVudW0gY2xhc3MgRG9udEVudW1Qcm9w
ZXJ0aWVzTW9kZSB7CitlbnVtIGNsYXNzIERvbnRFbnVtUHJvcGVydGllc01vZGUgOiB1aW50OF90
IHsKICAgICBJbmNsdWRlLAogICAgIEV4Y2x1ZGUKIH07CiAKLWVudW0gY2xhc3MgSlNPYmplY3RQ
cm9wZXJ0aWVzTW9kZSB7Ci0gICAgSW5jbHVkZSwKLSAgICBFeGNsdWRlCi19OwotCi1jbGFzcyBF
bnVtZXJhdGlvbk1vZGUgewotcHVibGljOgotICAgIEVudW1lcmF0aW9uTW9kZShEb250RW51bVBy
b3BlcnRpZXNNb2RlIGRvbnRFbnVtUHJvcGVydGllc01vZGUgPSBEb250RW51bVByb3BlcnRpZXNN
b2RlOjpFeGNsdWRlLCBKU09iamVjdFByb3BlcnRpZXNNb2RlIGpzT2JqZWN0UHJvcGVydGllc01v
ZGUgPSBKU09iamVjdFByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKQotICAgICAgICA6IG1fZG9udEVu
dW1Qcm9wZXJ0aWVzTW9kZShkb250RW51bVByb3BlcnRpZXNNb2RlKQotICAgICAgICAsIG1fanNP
YmplY3RQcm9wZXJ0aWVzTW9kZShqc09iamVjdFByb3BlcnRpZXNNb2RlKQotICAgIHsKLSAgICB9
Ci0KLSAgICBFbnVtZXJhdGlvbk1vZGUoY29uc3QgRW51bWVyYXRpb25Nb2RlJiBtb2RlLCBKU09i
amVjdFByb3BlcnRpZXNNb2RlIGpzT2JqZWN0UHJvcGVydGllc01vZGUpCi0gICAgICAgIDogbV9k
b250RW51bVByb3BlcnRpZXNNb2RlKG1vZGUubV9kb250RW51bVByb3BlcnRpZXNNb2RlKQotICAg
ICAgICAsIG1fanNPYmplY3RQcm9wZXJ0aWVzTW9kZShqc09iamVjdFByb3BlcnRpZXNNb2RlKQot
ICAgIHsKLSAgICB9Ci0KLSAgICAvLyBBZGQgb3RoZXIgY29uc3RydWN0b3JzIGFzIG5lZWRlZCBm
b3IgY29udmVuaWVuY2UKLQotICAgIGJvb2wgaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpCi0g
ICAgewotICAgICAgICByZXR1cm4gbV9kb250RW51bVByb3BlcnRpZXNNb2RlID09IERvbnRFbnVt
UHJvcGVydGllc01vZGU6OkluY2x1ZGU7Ci0gICAgfQotCi0gICAgYm9vbCBpbmNsdWRlSlNPYmpl
Y3RQcm9wZXJ0aWVzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2pzT2JqZWN0UHJvcGVydGll
c01vZGUgPT0gSlNPYmplY3RQcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZTsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtX2RvbnRFbnVtUHJvcGVydGllc01vZGU7
Ci0gICAgSlNPYmplY3RQcm9wZXJ0aWVzTW9kZSBtX2pzT2JqZWN0UHJvcGVydGllc01vZGU7Ci19
OwotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Vycm9ySW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyNzA4NjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYwLDIwICsyNjAsMTIgQEAgYm9vbCBFcnJvckluc3RhbmNlOjpnZXRPd25Qcm9wZXJ0eVNs
b3QoSgogICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZ2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi12b2lkIEVycm9ySW5zdGFuY2U6
OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lQXJyYXks
IEVudW1lcmF0aW9uTW9kZSBlbnVtZXJhdGlvbk1vZGUpCit2b2lkIEVycm9ySW5zdGFuY2U6Omdl
dE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9k
ZSBtb2RlKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBFcnJvcklu
c3RhbmNlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEVycm9ySW5zdGFuY2UqPihvYmplY3QpOwotICAg
IHRoaXNPYmplY3QtPm1hdGVyaWFsaXplRXJyb3JJbmZvSWZOZWVkZWQodm0pOwotICAgIEJhc2U6
OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZUFycmF5LCBlbnVtZXJhdGlvbk1vZGUpOwotfQotCi12b2lkIEVycm9ySW5zdGFu
Y2U6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZUFycmF5
LCBFbnVtZXJhdGlvbk1vZGUgZW51bWVyYXRpb25Nb2RlKQotewotICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKLSAgICBFcnJvckluc3RhbmNlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEVy
cm9ySW5zdGFuY2UqPihvYmplY3QpOwotICAgIHRoaXNPYmplY3QtPm1hdGVyaWFsaXplRXJyb3JJ
bmZvSWZOZWVkZWQodm0pOwotICAgIEJhc2U6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXModGhp
c09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVBcnJheSwgZW51bWVyYXRpb25Nb2Rl
KTsKKyAgICBpZiAobW9kZSA9PSBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKQorICAg
ICAgICB0aGlzT2JqZWN0LT5tYXRlcmlhbGl6ZUVycm9ySW5mb0lmTmVlZGVkKHZtKTsKIH0KIAog
Ym9vbCBFcnJvckluc3RhbmNlOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBj
b25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCShy
ZXZpc2lvbiAyNzA4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvcklu
c3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiBjbGFzcyBFcnJvckluc3RhbmNlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGlj
OgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFt
ZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVz
R2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXM7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwq
IGNlbGwpCkBAIC05Myw4ICs5Myw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmLCBTb3VyY2VBcHBlbmRlciA9
IG51bGxwdHIsIFJ1bnRpbWVUeXBlID0gVHlwZU5vdGhpbmcsIGJvb2wgdXNlQ3VycmVudEZyYW1l
ID0gdHJ1ZSk7CiAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3Qq
LCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgc3Rh
dGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgc3RhdGlj
IHZvaWQgZ2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lk
IGdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIHN0YXRpYyBi
b29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAg
IHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwg
SlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVy
dHkoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5
U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3Vt
ZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
aWNBcmd1bWVudHMuaAkocmV2aXNpb24gMjcwODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CiBjbGFzcyBHZW5lcmljQXJndW1lbnRzIDogcHVi
bGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNOb25GaW5hbE9i
amVjdCBCYXNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IElu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8g
fCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBJ
bnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJv
OwogCiBwcm90ZWN0ZWQ6CiAgICAgR2VuZXJpY0FyZ3VtZW50cyhWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQpAQCAtNDcsNyArNDcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwog
ICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgcHV0QnlJbmRl
eChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlND
ZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5l
cmljQXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAyNzA4NjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC05MCw3ICs5MCw3IEBAIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJv
cGUKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLXZvaWQgR2VuZXJpY0FyZ3VtZW50czxU
eXBlPjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5
TmFtZUFycmF5JiBhcnJheSwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0
PFR5cGUqPihvYmplY3QpOwpAQCAtMTAxLDE1ICsxMDEsMTUgQEAgdm9pZCBHZW5lcmljQXJndW1l
bnRzPFR5cGU+OjpnZXRPd25Qcm9wZQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgYXJyYXkuYWRkKElkZW50aWZpZXI6OmZyb20odm0sIGkpKTsKICAgICAgICAgfQorICAg
ICAgICB0aGlzT2JqZWN0LT5nZXRPd25JbmRleGVkUHJvcGVydHlOYW1lcyhnbG9iYWxPYmplY3Qs
IGFycmF5LCBtb2RlKTsKICAgICB9CiAKLSAgICBpZiAobW9kZS5pbmNsdWRlRG9udEVudW1Qcm9w
ZXJ0aWVzKCkgJiYgIXRoaXNPYmplY3QtPm92ZXJyb2RlVGhpbmdzKCkpIHsKKyAgICBpZiAobW9k
ZSA9PSBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlICYmICF0aGlzT2JqZWN0LT5vdmVy
cm9kZVRoaW5ncygpKSB7CiAgICAgICAgIGFycmF5LmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5sZW5n
dGgpOwogICAgICAgICBhcnJheS5hZGQodm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlKTsKLSAgICAg
ICAgaWYgKGFycmF5LmluY2x1ZGVTeW1ib2xQcm9wZXJ0aWVzKCkpCi0gICAgICAgICAgICBhcnJh
eS5hZGQodm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wpOworICAgICAgICBhcnJheS5h
ZGQodm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wpOwogICAgIH0KLSAgICBCYXNlOjpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgYXJyYXksIG1vZGUp
OworICAgIHRoaXNPYmplY3QtPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhnbG9iYWxPYmpl
Y3QsIGFycmF5LCBtb2RlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAyNzA4NjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgzLDE1ICsyODMsMTEgQEAgc3RhdGljIGludCBjb21wYXJlS2V5c0ZvclFTb3J0
KGNvbnN0IHZvaQogICAgIHJldHVybiAoZGEgPiBkYikgLSAoZGEgPCBkYik7CiB9CiAKLXZvaWQg
SlNBcnJheTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNBcnJheTo6Z2V0T3duU3BlY2lhbFBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2Rl
KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBKU0FycmF5KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihvYmplY3QpOwotCi0gICAgaWYgKG1vZGUuaW5jbHVk
ZURvbnRFbnVtUHJvcGVydGllcygpKQorICAgIGlmIChtb2RlID09IERvbnRFbnVtUHJvcGVydGll
c01vZGU6OkluY2x1ZGUpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKHZtLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCk7Ci0KLSAgICBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIC8v
IFRoaXMgbWV0aG9kIG1ha2VzIHJvb20gaW4gdGhlIHZlY3RvciwgYnV0IGxlYXZlcyB0aGUgbmV3
IHNwYWNlIGZvciBjb3VudCBzbG90cyB1bmNsZWFyZWQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAyNzA4NjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcg
QEAgY2xhc3MgSlNBcnJheSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IAogCiBwdWJsaWM6CiAg
ICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lczsK
KyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRP
d25TcGVjaWFsUHJvcGVydHlOYW1lczsKIAogICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNp
emUoQ2hlY2tlZDxzaXplX3Q+IGlubGluZUNhcGFjaXR5KQogICAgIHsKQEAgLTE4OSw3ICsxODks
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgIHN0
YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRp
ZXNNb2RlKTsKIAogcHJpdmF0ZToKICAgICBib29sIGlzTGVuZ3RoV3JpdGFibGUoKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lvbiAyNzA4NjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDYsMTIgKzIwNiwxMiBAQCB2b2lkIEpTQ2VsbDo6ZG9QdXRQcm9wZXJ0eVNlY3Vy
aXR5Q2hlY2soCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBK
U0NlbGw6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFBy
b3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKQordm9pZCBKU0NlbGw6OmdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5
JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogfQogCi12b2lkIEpTQ2VsbDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSkKK3ZvaWQgSlNDZWxsOjpnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNN
b2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CkBAIC0yMzMsMTEg
KzIzMyw2IEBAIGNvbnN0IGNoYXIqIEpTQ2VsbDo6Y2xhc3NOYW1lKFZNJiB2bSkgY28KICAgICBy
ZXR1cm4gY2xhc3NJbmZvKHZtKS0+Y2xhc3NOYW1lOwogfQogCi12b2lkIEpTQ2VsbDo6Z2V0UHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBFbnVtZXJhdGlvbk1vZGUpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LX0KLQogYm9vbCBKU0NlbGw6OmN1c3RvbUhhc0luc3RhbmNlKEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlKQogewogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBA
IC0yNTYsMTYgKzI1MSw2IEBAIHVpbnQzMl90IEpTQ2VsbDo6Z2V0RW51bWVyYWJsZUxlbmd0aChK
U0cKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBKU0NlbGw6OmdldFN0cnVjdHVyZVByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKQotewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0K
LXZvaWQgSlNDZWxsOjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCi17Ci0gICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQogYm9vbCBKU0NlbGw6OnByZXZlbnRFeHRl
bnNpb25zKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKQogewogICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwu
aAkocmV2aXNpb24gMjcwODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
ZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0NCwxMyArMjQ0LDEwIEBAIHByb3RlY3RlZDoKIAog
ICAgIC8vIER1bW15IGltcGxlbWVudGF0aW9ucyBvZiBvdmVycmlkZS1hYmxlIHN0YXRpYyBmdW5j
dGlvbnMgZm9yIGNsYXNzZXMgdG8gcHV0IGluIHRoZWlyIE1ldGhvZFRhYmxlCiAgICAgc3RhdGlj
IEpTVmFsdWUgZGVmYXVsdFZhbHVlKGNvbnN0IEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQ
cmVmZXJyZWRQcmltaXRpdmVUeXBlKTsKLSAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFT
SCB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFBy
b3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICBzdGF0aWMgTk9fUkVUVVJO
X0RVRV9UT19DUkFTSCB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwot
ICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUpOworICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKKyAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19D
UkFTSCB2b2lkIGdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogCiAg
ICAgc3RhdGljIHVpbnQzMl90IGdldEVudW1lcmFibGVMZW5ndGgoSlNHbG9iYWxPYmplY3QqLCBK
U09iamVjdCopOwotICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0U3Ry
dWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwotICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RP
X0NSQVNIIHZvaWQgZ2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBzdGF0aWMg
Tk9fUkVUVVJOX0RVRV9UT19DUkFTSCBib29sIHByZXZlbnRFeHRlbnNpb25zKEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCBib29s
IGlzRXh0ZW5zaWJsZShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIE5P
X1JFVFVSTl9EVUVfVE9fQ1JBU0ggYm9vbCBzZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUsIGJvb2wpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTQs
MTMgKzQ5NCwxMyBAQCBib29sIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5U2xvdChKU09iCiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhp
c09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKTsKIH0KIAotdm9pZCBK
U0Z1bmN0aW9uOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0Z1bmN0aW9uOjpnZXRPd25TcGVj
aWFsUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0
aWVzTW9kZSBtb2RlKQogewogICAgIEpTRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNG
dW5jdGlvbio+KG9iamVjdCk7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmIChtb2RlLmlu
Y2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkgeworICAgIGlmIChtb2RlID09IERvbnRFbnVtUHJv
cGVydGllc01vZGU6OkluY2x1ZGUpIHsKICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc0hvc3RP
ckJ1aWx0aW5GdW5jdGlvbigpKSB7CiAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgcHJvdG90eXBl
IGhhcyBiZWVuIHJlaWZpZWQuCiAgICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2Jq
ZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5LCAmdm0pOwpA
QCAtNTI0LDcgKzUyNCw2IEBAIHZvaWQgSlNGdW5jdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU4KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBn
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpKTsKIH0KIAogYm9vbCBKU0Z1bmN0aW9u
OjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZp
c2lvbiAyNzA4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgcHVibGljOgogICAgIH0KICAgICAK
ICAgICB0eXBlZGVmIEpTQ2FsbGVlIEJhc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJy
aWRlc0dldENhbGxEYXRhOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0Q2Fs
bERhdGE7CiAKICAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKENoZWNrZWQ8c2l6ZV90
PiBpbmxpbmVDYXBhY2l0eSkKICAgICB7CkBAIC0xNzMsNyArMTczLDcgQEAgcHJvdGVjdGVkOgog
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIAogICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlID0gRW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93blNwZWNp
YWxQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93
blByb3BlcnR5KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0
IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogCiAgICAgc3RhdGljIGJv
b2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMjcwODY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcu
aAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFz
ZSA9IEpTQXJyYXlCdWZmZXJWaWV3OwogICAgIHR5cGVkZWYgdHlwZW5hbWUgQWRhcHRvcjo6VHlw
ZSBFbGVtZW50VHlwZTsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3Bl
cnR5TmFtZXMgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOworICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFt
ZXMgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNO
b3RaZXJvOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9IHNp
emVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsKIApAQCAtMzA0LDcgKzMwNCw3IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAg
c3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKICAgICAKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJh
eSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51
bVByb3BlcnRpZXNNb2RlKTsKIAogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0Nl
bGwqLCBWTSYpOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAyNzA4
NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDY0LDcgKzQ2NCw3IEBAIGJvb2wgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmQKIAogdGVtcGxhdGU8dHlwZW5hbWUgQWRh
cHRvcj4KIHZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3Bl
cnR5TmFtZXMoCi0gICAgSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKKyAg
ICBKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hbWVBcnJheSYgYXJyYXksIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOwpA
QCAtNDc0LDcgKzQ3NCw3IEBAIHZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46
OmcKICAgICAgICAgICAgIGFycmF5LmFkZChJZGVudGlmaWVyOjpmcm9tKHZtLCBpKSk7CiAgICAg
fQogICAgIAotICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xv
YmFsT2JqZWN0LCBhcnJheSwgbW9kZSk7CisgICAgdGhpc09iamVjdC0+Z2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eU5hbWVzKGdsb2JhbE9iamVjdCwgYXJyYXksIG1vZGUpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyNzA4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NzEsOSAr
NTcxLDcgQEAgcHVibGljOgogICAgICAgICAKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdDsKLSAgICAvLyBEbyB3ZSByZWFseSBuZWVkIE92ZXJyaWRl
c0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgaGVyZT8KLSAgICAvLyBGSVhNRTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjk1NAotICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0
YXRpY1Byb3BlcnR5VGFibGUgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlk
ZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNP
YmplY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZSB8IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IElzSW1tdXRhYmxlUHJvdG90eXBlRXhvdGljT2JqZWN0OwogCiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25t
ZW50LmNwcAkocmV2aXNpb24gMjcwODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3
IEBAIHZvaWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmFuYWx5emVIZWFwKEoKICAgICB9CiB9CiAK
LXZvaWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhK
U09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTTGV4
aWNhbEVudmlyb25tZW50OjpnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIEpTTGV4aWNh
bEVudmlyb25tZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTGV4aWNhbEVudmlyb25tZW50Kj4o
b2JqZWN0KTsKIApAQCAtNzMsNyArNzMsNyBAQCB2b2lkIEpTTGV4aWNhbEVudmlyb25tZW50Ojpn
ZXRPd25Ob25JbmRlCiAgICAgICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGVuZCA9IHRo
aXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmVuZChsb2NrZXIpOwogICAgICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIGZvciAoU3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0
b3IgaXQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5iZWdpbihsb2NrZXIpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChpdC0+dmFsdWUuZ2V0QXR0cmlidXRlcygpICYg
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtICYmICFtb2RlLmluY2x1ZGVEb250RW51bVByb3Bl
cnRpZXMoKSkKKyAgICAgICAgICAgIGlmIChtb2RlID09IERvbnRFbnVtUHJvcGVydGllc01vZGU6
OkV4Y2x1ZGUgJiYgaXQtPnZhbHVlLmlzRG9udEVudW0oKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIGlmICghdGhpc09iamVjdC0+aXNWYWxpZFNjb3BlT2Zmc2V0KGl0
LT52YWx1ZS5zY29wZU9mZnNldCgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTgy
LDggKzgyLDYgQEAgdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6Z2V0T3duTm9uSW5kZQogICAg
ICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgaXQtPmtl
eS5nZXQoKSkpOwogICAgICAgICB9CiAgICAgfQotICAgIC8vIFNraXAgdGhlIEpTU3ltYm9sVGFi
bGVPYmplY3QncyBpbXBsZW1lbnRhdGlvbiBvZiBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMK
LSAgICBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIGJvb2wgSlNMZXhpY2FsRW52
aXJvbm1lbnQ6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxF
bnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHJldmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHVzaW5nIEJhc2UgPSBKU1N5
bWJvbFRhYmxlT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5
TmFtZXM7CiAKICAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiB2YXJpYWJsZXMoKQogICAg
IHsKQEAgLTEwNiw3ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgICAgICAKICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duU3BlY2lhbFBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5
JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAKICAgICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxs
KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xv
dCYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmly
b25tZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZUVudmlyb25tZW50LmNwcAkocmV2aXNpb24gMjcwODY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk2LDcgKzk2LDcgQEAgYm9vbCBKU01vZHVsZUVudmlyb25tZW50OjpnZXRPd25Qcm9wZXJ0
eQogICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZ2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi12b2lkIEpTTW9kdWxlRW52aXJvbm1l
bnQ6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogY2VsbCwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXNBcnJh
eSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OmdldE93
blNwZWNpYWxQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBjZWxsLCBKU0dsb2JhbE9iamVjdCosIFBy
b3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzQXJyYXksIERvbnRFbnVtUHJvcGVydGllc01v
ZGUpCiB7CiAgICAgSlNNb2R1bGVFbnZpcm9ubWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01v
ZHVsZUVudmlyb25tZW50Kj4oY2VsbCk7CiAgICAgaWYgKHByb3BlcnR5TmFtZXNBcnJheS5pbmNs
dWRlU3RyaW5nUHJvcGVydGllcygpKSB7CkBAIC0xMDYsNyArMTA2LDYgQEAgdm9pZCBKU01vZHVs
ZUVudmlyb25tZW50OjpnZXRPd25Ob25JbmRleAogICAgICAgICAgICAgICAgIHByb3BlcnR5TmFt
ZXNBcnJheS5hZGQoaW1wb3J0RW50cnkubG9jYWxOYW1lKTsKICAgICAgICAgfQogICAgIH0KLSAg
ICByZXR1cm4gQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lc0FycmF5LCBtb2RlKTsKIH0KIAogYm9vbCBKU01vZHVs
ZUVudmlyb25tZW50OjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVs
ZUVudmlyb25tZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAyNzA4NjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgSlNNb2R1bGVFbnZpcm9ubWVudCBmaW5hbCA6IHB1Ymxp
YwogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBwdWJsaWM6CiAgICAg
dXNpbmcgQmFzZSA9IEpTTGV4aWNhbEVudmlyb25tZW50OwotICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXM7
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0
T3duU3BlY2lhbFByb3BlcnR5TmFtZXM7CiAKICAgICBzdGF0aWMgSlNNb2R1bGVFbnZpcm9ubWVu
dCogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTY29wZSog
Y3VycmVudFNjb3BlLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIEpTVmFsdWUgaW5pdGlhbFZh
bHVlLCBBYnN0cmFjdE1vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkKQogICAgIHsKQEAgLTczLDcg
KzczLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNN
b2RlKTsKICAgICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGRl
bGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxl
dGVQcm9wZXJ0eVNsb3QmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAkocmV2aXNpb24gMjcw
ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsNyArMjE3LDcgQEAgYm9vbCBKU01vZHVs
ZU5hbWVzcGFjZU9iamVjdDo6ZGVsZXRlUHJvcAogICAgIHJldHVybiAhdGhpc09iamVjdC0+bV9l
eHBvcnRzLmNvbnRhaW5zKHByb3BlcnR5TmFtZS51aWQoKSk7CiB9CiAKLXZvaWQgSlNNb2R1bGVO
YW1lc3BhY2VPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIGNlbGwsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVz
LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRp
ZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTIyNSw3ICsyMjUsNyBAQCB2
b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpnZXRPd25Qcm9wCiAgICAgLy8gaHR0cHM6Ly90
YzM5LmVzL2VjbWEyNjIvI3NlYy1tb2R1bGUtbmFtZXNwYWNlLWV4b3RpYy1vYmplY3RzLW93bnBy
b3BlcnR5a2V5cwogICAgIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kj4oY2VsbCk7CiAgICAgZm9yIChjb25zdCBhdXRv
JiBuYW1lIDogdGhpc09iamVjdC0+bV9uYW1lcykgewotICAgICAgICBpZiAoIW1vZGUuaW5jbHVk
ZURvbnRFbnVtUHJvcGVydGllcygpKSB7CisgICAgICAgIGlmIChtb2RlID09IERvbnRFbnVtUHJv
cGVydGllc01vZGU6OkV4Y2x1ZGUpIHsKICAgICAgICAgICAgIC8vIFBlcmZvcm0gW1tHZXRPd25Q
cm9wZXJ0eV1dIHRvIHRocm93IFJlZmVyZW5jZUVycm9yIGlmIGJpbmRpbmcgaXMgdW5pbml0aWFs
aXplZC4KICAgICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KGNlbGwsIFByb3BlcnR5U2xvdDo6
SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7CiAgICAgICAgICAgICB0aGlzT2Jq
ZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oZ2xvYmFsT2JqZWN0LCBuYW1lLmltcGwoKSwg
c2xvdCk7CkBAIC0yMzMsNyArMjMzLDggQEAgdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6
Z2V0T3duUHJvcAogICAgICAgICB9CiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKG5hbWUuaW1w
bCgpKTsKICAgICB9Ci0gICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBn
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIGlmIChwcm9wZXJ0eU5hbWVz
LmluY2x1ZGVTeW1ib2xQcm9wZXJ0aWVzKCkpCisgICAgICAgIHRoaXNPYmplY3QtPmdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyhnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwog
fQogCiBib29sIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09i
amVjdCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNo
b3VsZFRocm93KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVO
YW1lc3BhY2VPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCShyZXZpc2lvbiAyNzA4NjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNNb2R1
bGVOYW1lc3BhY2VPYmplY3QgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJs
aWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3Bl
cnR5TmFtZXMgfCBHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8
IElzSW1tdXRhYmxlUHJvdG90eXBlRXhvdGljT2JqZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBJbnRl
cmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwg
R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBJc0ltbXV0YWJs
ZVByb3RvdHlwZUV4b3RpY09iamVjdDsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwpA
QCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJv
b2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBwdXRC
eUluZGV4KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
Ym9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCos
IFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9v
bCBzaG91bGRUaHJvdyk7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJldmlzaW9uIDI3MDg2
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MDAsNyArNTAwLDcgQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjph
cHBlbmROZXh0UHJvcAogICAgICAgICAgICAgICAgIG1fcHJvcGVydHlOYW1lcyA9IHN0cmluZ2lm
aWVyLm1fYXJyYXlSZXBsYWNlclByb3BlcnR5TmFtZXMuZGF0YSgpOwogICAgICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgb2JqZWN0UHJvcGVydHlOYW1l
cyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1
ZGUpOwotICAgICAgICAgICAgICAgIG1fb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blBy
b3BlcnR5TmFtZXMobV9vYmplY3QsIGdsb2JhbE9iamVjdCwgb2JqZWN0UHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlKCkpOworICAgICAgICAgICAgICAgIG1fb2JqZWN0LT5tZXRob2RUYWJs
ZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMobV9vYmplY3QsIGdsb2JhbE9iamVjdCwgb2JqZWN0
UHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7CiAgICAgICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICAgICAg
ICAgIG1fcHJvcGVydHlOYW1lcyA9IG9iamVjdFByb3BlcnR5TmFtZXMucmVsZWFzZURhdGEoKTsK
ICAgICAgICAgICAgIH0KQEAgLTcxOSw3ICs3MTksNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBX
YWxrZXI6OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAgICAgbWFya2VkU3RhY2suYXBwZW5kV2l0
aENyYXNoT25PdmVyZmxvdyhvYmplY3QpOwogICAgICAgICAgICAgICAgIGluZGV4U3RhY2suYXBw
ZW5kKDApOwogICAgICAgICAgICAgICAgIHByb3BlcnR5U3RhY2suYXBwZW5kKFByb3BlcnR5TmFt
ZUFycmF5KHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6
RXhjbHVkZSkpOwotICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRP
d25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbV9nbG9iYWxPYmplY3QsIHByb3BlcnR5U3RhY2subGFz
dCgpLCBFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RU
YWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBtX2dsb2JhbE9iamVjdCwgcHJv
cGVydHlTdGFjay5sYXN0KCksIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpOwogICAg
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBvYmplY3RTdGFydFZpc2l0TWVtYmVyOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjcwODY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MiwxOCArNzIsMTkgQEAgY29uc3QgQ2xhc3NJbmZvIEpTT2JqZWN0OjpzX2luZm8gPSB7
ICJPYgogCiBjb25zdCBDbGFzc0luZm8gSlNGaW5hbE9iamVjdDo6c19pbmZvID0geyAiT2JqZWN0
IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U0ZpbmFsT2JqZWN0KSB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0Q2xhc3NQcm9wZXJ0eU5h
bWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJ
bmZvLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1v
ZGUpCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmdldE5vblJlaWZpZWRTdGF0aWNQcm9w
ZXJ0eU5hbWVzKFZNJiB2bSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRF
bnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgaWYgKCFzdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCh2bSkpCisgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIEFkZCBwcm9wZXJ0aWVzIGZyb20gdGhlIHN0YXRpYyBoYXNodGFibGVzIG9m
IHByb3BlcnRpZXMKLSAgICBmb3IgKDsgY2xhc3NJbmZvOyBjbGFzc0luZm8gPSBjbGFzc0luZm8t
PnBhcmVudENsYXNzKSB7Ci0gICAgICAgIGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBjbGFzc0lu
Zm8tPnN0YXRpY1Byb3BIYXNoVGFibGU7CisgICAgZm9yIChjb25zdCBDbGFzc0luZm8qIGluZm8g
PSBjbGFzc0luZm8odm0pOyBpbmZvOyBpbmZvID0gaW5mby0+cGFyZW50Q2xhc3MpIHsKKyAgICAg
ICAgY29uc3QgSGFzaFRhYmxlKiB0YWJsZSA9IGluZm8tPnN0YXRpY1Byb3BIYXNoVGFibGU7CiAg
ICAgICAgIGlmICghdGFibGUpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBmb3Ig
KGF1dG8gaXRlciA9IHRhYmxlLT5iZWdpbigpOyBpdGVyICE9IHRhYmxlLT5lbmQoKTsgKytpdGVy
KSB7Ci0gICAgICAgICAgICBpZiAoIShpdGVyLT5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pIHx8IG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKQorICAg
ICAgICAgICAgaWYgKG1vZGUgPT0gRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSB8fCAh
KGl0ZXItPmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpCiAgICAg
ICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
aXRlci5rZXkoKSkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjM3MSw1MiArMjM3Miw0NSBAQCBK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04ob2JqZWN0UHJpdmF0ZUZ1CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4oSlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5jZShnbG9iYWxP
YmplY3QsIHZhbHVlLCBwcm90bykpKTsKIH0KIAotdm9pZCBKU09iamVjdDo6Z2V0UHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCitjb25z
dGV4cHIgdW5zaWduZWQgbWF4aW11bVByb3RvdHlwZUNoYWluRGVwdGggPSA0MDAwMDsKK3ZvaWQg
SlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUg
bW9kZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKFVOTElLRUxZKCF2bS5pc1Nh
ZmVUb1JlY3Vyc2VTb2Z0KCkpKSB7Ci0gICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEpTT2JqZWN0
KiBvYmplY3QgPSB0aGlzOworICAgIHVuc2lnbmVkIHByb3RvdHlwZUNvdW50ID0gMDsKIAotICAg
IG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB2b2lkKCkpOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIG9iamVjdC0+bWV0
aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
dm9pZCgpKTsKIAotICAgIEpTVmFsdWUgbmV4dFByb3RvID0gb2JqZWN0LT5nZXRQcm90b3R5cGUo
dm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgp
KTsKLSAgICBpZiAobmV4dFByb3RvLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47CisgICAgICAg
IEpTVmFsdWUgcHJvdG90eXBlID0gb2JqZWN0LT5nZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVj
dCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAgICAg
IGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCisgICAgICAgICAgICBicmVhazsKIAotICAgIEpTT2Jq
ZWN0KiBwcm90b3R5cGUgPSBhc09iamVjdChuZXh0UHJvdG8pOwotICAgIHdoaWxlKDEpIHsKLSAg
ICAgICAgaWYgKHByb3RvdHlwZS0+c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5vdmVycmlkZXNH
ZXRQcm9wZXJ0eU5hbWVzKCkpIHsKLSAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAg
ICAgICAgIHByb3RvdHlwZS0+bWV0aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzKHByb3Rv
dHlwZSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICAgICAgaWYgKFVO
TElLRUxZKCsrcHJvdG90eXBlQ291bnQgPiBtYXhpbXVtUHJvdG90eXBlQ2hhaW5EZXB0aCkpIHsK
KyAgICAgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHByb3RvdHlwZS0+bWV0
aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvdHlwZSwgZ2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKLSAgICAgICAgbmV4dFByb3RvID0gcHJvdG90eXBlLT5nZXRQcm90b3R5cGUo
dm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7Ci0gICAgICAgIGlmIChuZXh0UHJvdG8uaXNOdWxsKCkpCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgcHJvdG90eXBlID0gYXNPYmplY3QobmV4dFByb3RvKTsKKworICAgICAgICBv
YmplY3QgPSBhc09iamVjdChwcm90b3R5cGUpOwogICAgIH0KIH0KIAotdm9pZCBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlIG1vZGUpCit2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7Ci0gICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGlmICghbW9kZS5pbmNsdWRlSlNPYmplY3RQcm9w
ZXJ0aWVzKCkpIHsKLSAgICAgICAgLy8gV2Ugc3RpbGwgaGF2ZSB0byBnZXQgbm9uLWluZGV4ZWQg
cHJvcGVydGllcyBmcm9tIGFueSBzdWJjbGFzc2VzIG9mIEpTT2JqZWN0IHRoYXQgaGF2ZSB0aGVt
LgotICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzKG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBvYmplY3QtPmdldE93bkluZGV4ZWRQcm9wZXJ0eU5hbWVz
KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgb2JqZWN0LT5nZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsK
K30KKwordm9pZCBKU09iamVjdDo6Z2V0T3duSW5kZXhlZFByb3BlcnR5TmFtZXMoSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0
aWVzTW9kZSBtb2RlKQoreworICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0aGlzOwogCiAgICAgaWYg
KHByb3BlcnR5TmFtZXMuaW5jbHVkZVN0cmluZ1Byb3BlcnRpZXMoKSkgewotICAgICAgICAvLyBB
ZGQgbnVtZXJpYyBwcm9wZXJ0aWVzIGZpcnN0LiBUaGF0IGFwcGVhcnMgdG8gYmUgdGhlIGFjY2Vw
dGVkIGNvbnZlbnRpb24uCisgICAgICAgIC8vIEFkZCBudW1lcmljIHByb3BlcnRpZXMgZmlyc3Qg
cGVyIHN0ZXAgMiBvZiBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5b3ducHJv
cGVydHlrZXlzCiAgICAgICAgIC8vIEZJWE1FOiBGaWxsaW5nIFByb3BlcnR5TmFtZUFycmF5IHdp
dGggYW4gaWRlbnRpZmllciBmb3IgZXZlcnkgaW50ZWdlcgogICAgICAgICAvLyBpcyBpbmNyZWRp
Ymx5IGluZWZmaWNpZW50IGZvciBsYXJnZSBhcnJheXMuIFdlIG5lZWQgYSBkaWZmZXJlbnQgYXBw
cm9hY2gsCiAgICAgICAgIC8vIHdoaWNoIGFsbW9zdCBjZXJ0YWlubHkgbWVhbnMgYSBkaWZmZXJl
bnQgc3RydWN0dXJlIGZvciBQcm9wZXJ0eU5hbWVBcnJheS4KQEAgLTI0NjQsNyArMjQ1OCw3IEBA
IHZvaWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmoKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtYXAtPmVuZCgpOwogICAgICAgICAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICAgICAgICAgICAgICBpZiAobW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkg
fHwgIShpdC0+dmFsdWUuYXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGUgPT0gRG9udEVudW1Qcm9wZXJ0aWVzTW9k
ZTo6SW5jbHVkZSB8fCAhKGl0LT52YWx1ZS5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pKQogICAgICAgICAgICAgICAgICAgICAgICAga2V5cy51bmNoZWNrZWRBcHBl
bmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5rZXkpKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgCkBAIC0yNDc5LDIwICsyNDczLDE5IEBAIHZvaWQgSlNPYmplY3Q6Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZt
KS0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAotdm9pZCBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
K3ZvaWQgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVu
dW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKLSAgICBpZiAoIW9iamVjdC0+c3RhdGljUHJvcGVydGllc1JlaWZpZWQodm0pKQotICAgICAg
ICBnZXRDbGFzc1Byb3BlcnR5TmFtZXMoZ2xvYmFsT2JqZWN0LCBvYmplY3QtPmNsYXNzSW5mbyh2
bSksIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAotICAgIGlmICghbW9kZS5pbmNsdWRlSlNPYmplY3RQcm9wZXJ0aWVzKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBvYmplY3QtPnN0cnVjdHVyZSh2bSktPmdldFBy
b3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKHZtLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBt
ZXRob2RUYWJsZSh2bSktPmdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKHRoaXMsIGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKKworICAgIGdldE5vblJlaWZpZWRTdGF0aWNQcm9wZXJ0eU5hbWVzKHZtLCBw
cm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBzdHJ1Y3R1cmUodm0pLT5nZXRQcm9wZXJ0eU5hbWVz
RnJvbVN0cnVjdHVyZSh2bSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgc2NvcGUuYXNzZXJ0
Tm9FeGNlcHRpb24oKTsKIH0KIAogZG91YmxlIEpTT2JqZWN0Ojp0b051bWJlcihKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdApAQCAtMzgyNiw0MSArMzgxOSw2IEBAIHVpbnQzMl90
IEpTT2JqZWN0OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKEoKICAgICB9CiB9CiAKLXZvaWQgSlNPYmpl
Y3Q6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZSBtb2RlKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
LSAgICBvYmplY3QtPnN0cnVjdHVyZSh2bSktPmdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJl
KHZtLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLX0KLQotdm9pZCBKU09iamVjdDo6Z2V0R2VuZXJp
Y1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBt
b2RlKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSkt
PmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMs
IEVudW1lcmF0aW9uTW9kZShtb2RlLCBKU09iamVjdFByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKSk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLQotICAgIEpTVmFsdWUg
bmV4dFByb3RvID0gb2JqZWN0LT5nZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICBpZiAobmV4dFByb3RvLmlz
TnVsbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBKU09iamVjdCogcHJvdG90eXBlID0gYXNP
YmplY3QobmV4dFByb3RvKTsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBpZiAocHJvdG90
eXBlLT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMo
KSkgewotICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICAgICAgcHJvdG90eXBl
LT5tZXRob2RUYWJsZSh2bSktPmdldFByb3BlcnR5TmFtZXMocHJvdG90eXBlLCBnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIHByb3RvdHlwZS0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVz
KHByb3RvdHlwZSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLSAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICAgICAgbmV4dFByb3RvID0g
cHJvdG90eXBlLT5nZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgICAgIGlmIChuZXh0UHJvdG8uaXNO
dWxsKCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgcHJvdG90eXBlID0gYXNPYmplY3Qo
bmV4dFByb3RvKTsKLSAgICB9Ci19Ci0KIC8vIEltcGxlbWVudHMgR2V0TWV0aG9kKE8sIFApIGlu
IHNlY3Rpb24gNy4zLjkgb2YgdGhlIHNwZWMuCiAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRp
b25hbC5vcmcvZWNtYS0yNjIvNi4wL2luZGV4Lmh0bWwjc2VjLWdldG1ldGhvZAogSlNWYWx1ZSBK
U09iamVjdDo6Z2V0TWV0aG9kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxEYXRh
JiBjYWxsRGF0YSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFN0cmluZyYgZXJyb3JN
ZXNzYWdlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShy
ZXZpc2lvbiAyNzA4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NzQsMTMgKzY3NCwxNCBAQCBwdWJsaWM6CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgYm9vbCBoYXNJbnN0YW5jZShKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUp
OwogICAgIHN0YXRpYyBib29sIGRlZmF1bHRIYXNJbnN0YW5jZShKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlUHJvcGVydHkpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwotICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUp
OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNP
YmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRp
ZXNNb2RlKSB7IH0KKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGdldFByb3BlcnR5TmFtZXMo
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01v
ZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVu
dW1Qcm9wZXJ0aWVzTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBnZXRPd25JbmRl
eGVkUHJvcGVydHlOYW1lcyhKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IERvbnRFbnVtUHJvcGVydGllc01vZGUpOworICAgIHZvaWQgZ2V0Tm9uUmVpZmllZFN0YXRpY1By
b3BlcnR5TmFtZXMoVk0mLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01v
ZGUpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHVpbnQzMl90IGdldEVudW1lcmFi
bGVMZW5ndGgoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCopOwotICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIGdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSB0b1ByaW1pdGl2ZShKU0dsb2Jh
bE9iamVjdCosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNvbnN0Owog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGRvdWJsZSB0b051bWJlcihKU0dsb2JhbE9iamVjdCopIGNv
bnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCShyZXZpc2lvbiAyNzA4NjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04Nyw0ICs4Nyw1MCBAQCB2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6dmlzaXRDaGlsCiAgICAgfQogfQogCit2b2lkIGdldEVudW1lcmFibGVQcm9wZXJ0eU5h
bWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlLCBQcm9wZXJ0
eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgdWludDMyX3QmIGluZGV4ZWRMZW5ndGgsIHVpbnQz
Ml90JiBzdHJ1Y3R1cmVQcm9wZXJ0eUNvdW50KQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7CisgICAgaWYgKHN0
cnVjdHVyZS0+Y2FuQWNjZXNzUHJvcGVydGllc1F1aWNrbHlGb3JFbnVtZXJhdGlvbigpICYmIGlu
ZGV4ZWRMZW5ndGggPT0gYmFzZS0+Z2V0QXJyYXlMZW5ndGgoKSkgeworICAgICAgICAvLyBJbmxp
bmVkIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoKQorICAgICAgICBiYXNl
LT5tZXRob2RUYWJsZSh2bSktPmdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKGJhc2UsIGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyAgICAgICAg
YmFzZS0+Z2V0Tm9uUmVpZmllZFN0YXRpY1Byb3BlcnR5TmFtZXModm0sIHByb3BlcnR5TmFtZXMs
IERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpOworICAgICAgICB1bnNpZ25lZCBub25T
dHJ1Y3R1cmVQcm9wZXJ0eUNvdW50ID0gcHJvcGVydHlOYW1lcy5zaXplKCk7CisgICAgICAgIHN0
cnVjdHVyZS0+Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUodm0sIHByb3BlcnR5TmFtZXMs
IERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpOworICAgICAgICBzY29wZS5hc3NlcnRO
b0V4Y2VwdGlvbigpOworCisgICAgICAgIC8vIHxwcm9wZXJ0eU5hbWVzfCBjb250YWlucyBwcm9w
ZXJ0aWVzIGV4Y2x1c2l2ZWx5IGZyb20gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgaWYgKCFub25T
dHJ1Y3R1cmVQcm9wZXJ0eUNvdW50KQorICAgICAgICAgICAgc3RydWN0dXJlUHJvcGVydHlDb3Vu
dCA9IHByb3BlcnR5TmFtZXMuc2l6ZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2UtPm1l
dGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhiYXNlLCBnbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpOworICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOworICAgICAgICAvLyB8cHJvcGVydHlO
YW1lc3wgY29udGFpbnMgYWxsIGluZGV4ZWQgcHJvcGVydGllcywgc28gZGlzYWJsZSBlbnVtZXJh
dGlvbiBiYXNlZCBvbiBnZXRFbnVtZXJhYmxlTGVuZ3RoKCkuCisgICAgICAgIGluZGV4ZWRMZW5n
dGggPSAwOworICAgIH0KKworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBiYXNlOworICAgIHVuc2ln
bmVkIHByb3RvdHlwZUNvdW50ID0gMDsKKworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIEpT
VmFsdWUgcHJvdG90eXBlID0gb2JqZWN0LT5nZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAgICAgIGlm
IChwcm90b3R5cGUuaXNOdWxsKCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAo
VU5MSUtFTFkoKytwcm90b3R5cGVDb3VudCA+IG1heGltdW1Qcm90b3R5cGVDaGFpbkRlcHRoKSkg
eworICAgICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBvYmplY3QgPSBh
c09iamVjdChwcm90b3R5cGUpOworICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0
T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgRG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5oCShyZXZpc2lvbiAyNzA4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MTAxLDYgKzEwMSw4IEBAIHByaXZhdGU6CiAgICAgdWludDMyX3QgbV9jYWNoZWRJbmxpbmVDYXBh
Y2l0eTsKIH07CiAKK3ZvaWQgZ2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMoSlNHbG9iYWxPYmpl
Y3QqLCBKU09iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgdWludDMyX3QmIGluZGV4ZWRMZW5n
dGgsIHVpbnQzMl90JiBzdHJ1Y3R1cmVQcm9wZXJ0eUNvdW50KTsKKwogaW5saW5lIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvciogcHJvcGVydHlOYW1lRW51bWVyYXRvcihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZSkKIHsKICAgICBWTSYgdm0gPSBnZXRWTShnbG9i
YWxPYmplY3QpOwpAQCAtMTE3LDIyICsxMTksOCBAQCBpbmxpbmUgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKiBwcm9wZXJ0CiAgICAgICAgIHJldHVybiBlbnVtZXJhdG9yOwogCiAgICAgdWludDMy
X3QgbnVtYmVyU3RydWN0dXJlUHJvcGVydGllcyA9IDA7Ci0KICAgICBQcm9wZXJ0eU5hbWVBcnJh
eSBwcm9wZXJ0eU5hbWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3lt
Ym9sTW9kZTo6RXhjbHVkZSk7Ci0KLSAgICBpZiAoc3RydWN0dXJlLT5jYW5BY2Nlc3NQcm9wZXJ0
aWVzUXVpY2tseUZvckVudW1lcmF0aW9uKCkgJiYgaW5kZXhlZExlbmd0aCA9PSBiYXNlLT5nZXRB
cnJheUxlbmd0aCgpKSB7Ci0gICAgICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0U3RydWN0
dXJlUHJvcGVydHlOYW1lcyhiYXNlLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSgpKTsKLSAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLQotICAg
ICAgICBudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0aWVzID0gcHJvcGVydHlOYW1lcy5zaXplKCk7Ci0K
LSAgICAgICAgYmFzZS0+bWV0aG9kVGFibGUodm0pLT5nZXRHZW5lcmljUHJvcGVydHlOYW1lcyhi
YXNlLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICAvLyBHZW5lcmljIHByb3BlcnR5IG5hbWVzIHZlY3RvciBjb250
YWlucyBhbGwgaW5kZXhlZCBwcm9wZXJ0eSBuYW1lcy4KLSAgICAgICAgLy8gU28gZGlzYWJsZSBp
bmRleGVkIHByb3BlcnR5IGVudW1lcmF0aW9uIHBoYXNlIGJ5IHNldHRpbmcgfGluZGV4ZWRMZW5n
dGh8IHRvIDAuCi0gICAgICAgIGluZGV4ZWRMZW5ndGggPSAwOwotICAgICAgICBiYXNlLT5tZXRo
b2RUYWJsZSh2bSktPmdldFByb3BlcnR5TmFtZXMoYmFzZSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7Ci0gICAgfQorICAgIGdldEVudW1lcmFibGVQcm9w
ZXJ0eU5hbWVzKGdsb2JhbE9iamVjdCwgYmFzZSwgcHJvcGVydHlOYW1lcywgaW5kZXhlZExlbmd0
aCwgbnVtYmVyU3RydWN0dXJlUHJvcGVydGllcyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CiAKICAgICBBU1NFUlQocHJvcGVydHlOYW1lcy5zaXplKCkgPCBVSU5U
MzJfTUFYKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3Bw
CShyZXZpc2lvbiAyNzA4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDMyICsxMTUsMTMgQEAgYm9vbCBKU1Byb3h5
OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZQogICAgIHJldHVybiB0aGlzT2JqZWN0LT50YXJn
ZXQoKS0+bWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0LT52bSgpKS0+ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KHRoaXNPYmplY3QtPnRhcmdldCgpLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7CiB9
CiAKLXZvaWQgSlNQcm94eTo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCi17Ci0gICAgSlNQcm94eSogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1Byb3h5Kj4ob2JqZWN0KTsKLSAgICB0aGlzT2JqZWN0LT50YXJnZXQoKS0+bWV0aG9k
VGFibGUoZ2xvYmFsT2JqZWN0LT52bSgpKS0+Z2V0UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LT50
YXJnZXQoKSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLX0KLQogdWludDMy
X3QgSlNQcm94eTo6Z2V0RW51bWVyYWJsZUxlbmd0aChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU09iamVjdCogb2JqZWN0KQogewogICAgIEpTUHJveHkqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNQcm94eSo+KG9iamVjdCk7CiAgICAgcmV0dXJuIHRoaXNPYmplY3QtPnRhcmdldCgpLT5t
ZXRob2RUYWJsZShnbG9iYWxPYmplY3QtPnZtKCkpLT5nZXRFbnVtZXJhYmxlTGVuZ3RoKGdsb2Jh
bE9iamVjdCwgdGhpc09iamVjdC0+dGFyZ2V0KCkpOwogfQogCi12b2lkIEpTUHJveHk6OmdldFN0
cnVjdHVyZVByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKQotewotICAgIC8vIFNraXAgdGhlIHN0cnVjdHVy
ZSBsb29wLCBzaW5jZSBpdCBpcyBpbnZhbGlkIGZvciBwcm94aWVzLgotfQotCi12b2lkIEpTUHJv
eHk6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKLXsKLSAgICBKU1Byb3h5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
UHJveHkqPihvYmplY3QpOwotICAgIC8vIEdldCAqYWxsKiBvZiB0aGUgcHJvcGVydHkgbmFtZXMs
IG5vdCBqdXN0IHRoZSBnZW5lcmljIG9uZXMsIHNpbmNlIHdlIHNraXBwZWQgdGhlIHN0cnVjdHVy
ZQotICAgIC8vIG9uZXMgYWJvdmUuCi0gICAgdGhpc09iamVjdC0+dGFyZ2V0KCktPm1ldGhvZFRh
YmxlKGdsb2JhbE9iamVjdC0+dm0oKSktPmdldFByb3BlcnR5TmFtZXModGhpc09iamVjdC0+dGFy
Z2V0KCksIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7Ci19Ci0KLXZvaWQgSlNQ
cm94eTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTUHJveHk6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBK
U1Byb3h5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJveHkqPihvYmplY3QpOwogICAgIHRoaXNP
YmplY3QtPnRhcmdldCgpLT5tZXRob2RUYWJsZShnbG9iYWxPYmplY3QtPnZtKCkpLT5nZXRPd25Q
cm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QtPnRhcmdldCgpLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZXMsIG1vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHku
aAkocmV2aXNpb24gMjcwODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
Y2xhc3MgSlNQcm94eSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1
c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzQW55
Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldFByb3RvdHlwZSB8IEludGVyY2Vw
dHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldFByb3RvdHlwZSB8IEludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIElzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCkBAIC05NSwxMSArOTUsOCBAQCBwcm90ZWN0ZWQ6CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0NlbGwqLCBKU0dsb2Jh
bE9iamVjdCosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEpT
R2xvYmFsT2JqZWN0KiwgdW5zaWduZWQpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdWludDMyX3QgZ2V0RW51bWVyYWJsZUxlbmd0aChKU0ds
b2JhbE9iamVjdCosIEpTT2JqZWN0Kik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgZ2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwotICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIGdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwg
Ym9vbCBzaG91bGRUaHJvdyk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgc2V0
UHJvdG90eXBlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBib29sIHNob3Vs
ZFRocm93SWZDYW50U2V0KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNWYWx1ZSBn
ZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJ
KHJldmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3lt
Ym9sVGFibGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIGJvb2wg
SlNTeW1ib2xUYWJsZU9iamVjdDo6ZGVsZXRlUHJvcGVydHkKICAgICByZXR1cm4gQmFzZTo6ZGVs
ZXRlUHJvcGVydHkodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OwogfQogCi12b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lk
IEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KG9iamVjdCk7CkBAIC02MSwxNSAr
NjEsMTMgQEAgdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleAogICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPm1f
bG9jayk7CiAgICAgICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGVuZCA9IHRoaXNPYmpl
Y3QtPnN5bWJvbFRhYmxlKCktPmVuZChsb2NrZXIpOwogICAgICAgICBmb3IgKFN5bWJvbFRhYmxl
OjpNYXA6Oml0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+YmVnaW4obG9j
a2VyKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoIShpdC0+dmFsdWUuZ2V0
QXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSB8fCBtb2RlLmluY2x1
ZGVEb250RW51bVByb3BlcnRpZXMoKSkgeworICAgICAgICAgICAgaWYgKG1vZGUgPT0gRG9udEVu
dW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSB8fCAhaXQtPnZhbHVlLmlzRG9udEVudW0oKSkgewog
ICAgICAgICAgICAgICAgIGlmIChpdC0+a2V5LT5pc1N5bWJvbCgpICYmICFwcm9wZXJ0eU5hbWVz
LmluY2x1ZGVTeW1ib2xQcm9wZXJ0aWVzKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21VaWQo
dm0sIGl0LT5rZXkuZ2V0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLQot
ICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxl
T2JqZWN0LmgJKHJldmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTIgKzM5LDEy
IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNTeW1ib2xUYWJsZU9iamVjdCA6IHB1YmxpYyBK
U1Njb3BlIHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNTY29wZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJy
aWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzOwogCiAgICAgU3ltYm9sVGFibGUqIHN5bWJv
bFRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zeW1ib2xUYWJsZS5nZXQoKTsgfQogICAgIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmKTsKLSAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25TcGVjaWFs
UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICAKICAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mU3ltYm9sVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNTeW1ib2xU
YWJsZU9iamVjdCwgbV9zeW1ib2xUYWJsZSk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNUeXBlSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVHlwZUluZm8uaAkocmV2aXNpb24gMjcwODY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwx
MyArNDgsOCBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFR5cGVJbmZvUGVyQ2VsCiAvLyBP
dXQgb2YgbGluZSBmbGFncy4KIAogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBJbXBsZW1lbnRz
SGFzSW5zdGFuY2UgPSAxIDw8IDg7Ci1zdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIE92ZXJyaWRl
c0dldFByb3BlcnR5TmFtZXMgPSAxIDw8IDk7Ci0vLyBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9w
ZXJ0eU5hbWVzIG1lYW5zIHRoYXQgd2UgY2Fubm90IG1ha2UgYXNzdW1wdGlvbnMgYWJvdXQKLS8v
IHRoZSBjYWNoZWFiaWxpdHkgb3IgZW51bWVyYWJpbGl0eSBvZiBwcm9wZXJ0eSBuYW1lcywgYW5k
IHRoZXJlZm9yZSwgd2UnbGwgbmVlZAotLy8gdG8gZGlzYWJsZSBjZXJ0YWluIG9wdGltaXphdGlv
bnMuIFRoaXMgZmxhZyBzaG91bGQgYmUgc2V0IGlmIG9uZSBvciBtb3JlIG9mIHRoZQotLy8gZm9s
bG93aW5nIE9iamVjdCBtZXRob2RzIGFyZSBvdmVycmlkZGVuOgotLy8gICAgIGdldE93blByb3Bl
cnR5TmFtZXMsIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcywgZ2V0UHJvcGVydHlOYW1lcwot
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5h
bWVzID0gMSA8PCAxMDsKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlOYW1lcyA9IDEgPDwgOTsKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgT3ZlcnJp
ZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMgPSAxIDw8IDEwOwogc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcgPSAxIDw8IDExOwogc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSA9IDEgPDwgMTI7CiBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIE5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50
cyA9IDEgPDwgMTM7CkBAIC0xMDMsOCArOTgsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wg
cGVyQ2VsbEJpdChJbmxpbmVUeXBlRmxhZ3MgZmxhZ3MpIHsgcmV0dXJuIGZsYWdzICYgVHlwZUlu
Zm9QZXJDZWxsQml0OyB9CiAgICAgYm9vbCBvdmVycmlkZXNUb1RoaXMoKSBjb25zdCB7IHJldHVy
biBpc1NldE9uRmxhZ3MxPE92ZXJyaWRlc1RvVGhpcz4oKTsgfQogICAgIGJvb2wgc3RydWN0dXJl
SXNJbW1vcnRhbCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8U3RydWN0dXJlSXNJbW1v
cnRhbD4oKTsgfQotICAgIGJvb2wgb3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcygpIGNvbnN0IHsg
cmV0dXJuIGlzU2V0T25GbGFnczI8T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcz4oKTsgfQotICAg
IGJvb2wgb3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJu
IGlzU2V0T25GbGFnczI8T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcz4oKTsgfQor
ICAgIGJvb2wgb3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuIGlz
U2V0T25GbGFnczI8T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcz4oKTsgfQorICAgIGJvb2wg
b3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiBpc1Nl
dE9uRmxhZ3MyPE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzPigpOyB9CisgICAg
Ym9vbCBvdmVycmlkZXNBbnlGb3JtT2ZHZXRPd25Qcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1
cm4gb3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcygpIHx8IG92ZXJyaWRlc0dldE93blNwZWNp
YWxQcm9wZXJ0eU5hbWVzKCk7IH0KICAgICBib29sIG92ZXJyaWRlc0dldFByb3RvdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8T3ZlcnJpZGVzR2V0UHJvdG90eXBlPigpOyB9CiAg
ICAgYm9vbCBwcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSBjb25zdCB7IHJldHVybiBpc1NldE9u
RmxhZ3MyPFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZz4oKTsgfQogICAgIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90SXNJbXB1cmUoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPEdldE93blBy
b3BlcnR5U2xvdElzSW1wdXJlPigpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyNzA4NjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4Niw3ICsxODYsNyBAQCBKU1ZhbHVlIG9iamVjdENvbnN0cnVjdG9y
R2V0T3duUHJvcGVydHlECiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBQcm9wZXJ0eU5hbWVBcnJh
eSBwcm9wZXJ0aWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scywgUHJp
dmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5n
ZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0aWVzLCBFbnVt
ZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAgIG9iamVj
dC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0aWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgSlNPYmplY3QqIGRlc2NyaXB0
b3JzID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2JqZWN0KTsKQEAgLTI5NCw3ICsyOTQs
NyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04ob2JqZWN0Q29uc3RydWN0CiAgICAgICAgICAg
ICBhdXRvIGNhblBlcmZvcm1GYXN0UHJvcGVydHlFbnVtZXJhdGlvbkZvck9iamVjdEFzc2lnbiA9
IFtdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgewogICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1
cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KCkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT50
eXBlSW5mbygpLm92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMoKSkKKyAgICAgICAg
ICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJyaWRlc0FueUZvcm1PZkdldE93
blByb3BlcnR5TmFtZXMoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBJbmRleGVkIHByb3BlcnRpZXMgY2FuIGJlIGhhbmRsZWQu
CiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4NTM1OApAQCAtMzU3LDcgKzM1Nyw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihv
YmplY3RDb25zdHJ1Y3QKICAgICAgICAgdGFyZ2V0Q2FuUGVyZm9ybUZhc3RQdXQgPSBmYWxzZTsK
IAogICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKHZtLCBQcm9wZXJ0eU5hbWVN
b2RlOjpTdHJpbmdzQW5kU3ltYm9scywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwotICAg
ICAgICBzb3VyY2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2Us
IGdsb2JhbE9iamVjdCwgcHJvcGVydGllcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVy
dGllc01vZGU6OkluY2x1ZGUpKTsKKyAgICAgICAgc291cmNlLT5tZXRob2RUYWJsZSh2bSktPmdl
dE93blByb3BlcnR5TmFtZXMoc291cmNlLCBnbG9iYWxPYmplY3QsIHByb3BlcnRpZXMsIERvbnRF
bnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogCiAgICAgICAgIHVuc2lnbmVkIG51bVByb3BlcnRpZXMgPSBwcm9wZXJ0
aWVzLnNpemUoKTsKQEAgLTQwMyw3ICs0MDMsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
b2JqZWN0Q29uc3RydWN0CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAog
ICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0
cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKLSAgICB0YXJnZXQtPm1ldGhvZFRh
YmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQsIGdsb2JhbE9iamVjdCwgcHJvcGVy
dGllcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsK
KyAgICB0YXJnZXQtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQs
IGdsb2JhbE9iamVjdCwgcHJvcGVydGllcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVk
ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIHVuc2lnbmVk
IGluZGV4ID0gMDsKQEAgLTU1Nyw3ICs1NTcsNyBAQCBzdGF0aWMgSlNWYWx1ZSBkZWZpbmVQcm9w
ZXJ0aWVzKEpTR2xvYmFsCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyh2bSwgUHJvcGVydHlOYW1l
TW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKLSAg
ICBhc09iamVjdChwcm9wZXJ0aWVzKS0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5h
bWVzKGFzT2JqZWN0KHByb3BlcnRpZXMpLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKSk7CisgICAgYXNP
YmplY3QocHJvcGVydGllcyktPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhh
c09iamVjdChwcm9wZXJ0aWVzKSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBEb250RW51
bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgIHNpemVfdCBudW1Qcm9wZXJ0aWVzID0gcHJvcGVydHlOYW1lcy5zaXplKCk7
CiAgICAgVmVjdG9yPFByb3BlcnR5RGVzY3JpcHRvcj4gZGVzY3JpcHRvcnM7CkBAIC02NDgsNyAr
NjQ4LDcgQEAgYm9vbCBzZXRJbnRlZ3JpdHlMZXZlbChKU0dsb2JhbE9iamVjdCogZwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKHZtLCBQ
cm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4
Y2x1ZGUpOwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVz
KG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVu
dW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0p
LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0aWVzLCBE
b250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBmYWxzZSk7CiAKICAgICBQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gcHJvcGVydGllcy5lbmQoKTsKQEAgLTY5NSw3ICs2OTUsNyBAQCBib29sIHRlc3RJbnRl
Z3JpdHlMZXZlbChKU0dsb2JhbE9iamVjdCogCiAKICAgICAvLyA2LiBMZXQga2V5cyBiZSA/IE8u
W1tPd25Qcm9wZXJ0eUtleXNdXSgpLgogICAgIFByb3BlcnR5TmFtZUFycmF5IGtleXModm0sIFBy
b3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhj
bHVkZSk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMo
b2JqZWN0LCBnbG9iYWxPYmplY3QsIGtleXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3Bl
cnRpZXNNb2RlOjpJbmNsdWRlKSk7CisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93
blByb3BlcnR5TmFtZXMob2JqZWN0LCBnbG9iYWxPYmplY3QsIGtleXMsIERvbnRFbnVtUHJvcGVy
dGllc01vZGU6OkluY2x1ZGUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAKICAgICAvLyA3LiBGb3IgZWFjaCBlbGVtZW50IGsgb2Yga2V5cywgZG8KQEAgLTg3Nyw3ICs4
NzcsNyBAQCBKU0FycmF5KiBvd25Qcm9wZXJ0eUtleXMoSlNHbG9iYWxPYmplY3QqCiAgICAgfQog
CiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyh2bSwgcHJvcGVydHlOYW1lTW9kZSwg
UHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0p
LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0aWVzLCBF
bnVtZXJhdGlvbk1vZGUoZG9udEVudW1Qcm9wZXJ0aWVzTW9kZSkpOworICAgIG9iamVjdC0+bWV0
aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0aWVzLCBkb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIGlmIChwcm9wZXJ0eU5hbWVNb2RlICE9IFByb3Bl
cnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCShyZXZpc2lvbiAyNzA4NjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg5MCwxMCArODkwLDkgQEAgdm9pZCBQcm94eU9iamVjdDo6cGVyZm9ybUdldE93blBy
b3BlcnR5TgogICAgIEpTVmFsdWUgb3duS2V5c01ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChn
bG9iYWxPYmplY3QsIGNhbGxEYXRhLCBtYWtlSWRlbnRpZmllcih2bSwgIm93bktleXMiKSwgIidv
d25LZXlzJyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFibGUi
X3MpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgSlNPYmpl
Y3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwotICAgIEVudW1lcmF0aW9uTW9kZSBlbnVtZXJh
dGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSk7CiAgICAgaWYgKG93bktl
eXNNZXRob2QuaXNVbmRlZmluZWQoKSkgewogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAg
ICAgIHRhcmdldC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCwg
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBlbnVtZXJhdGlvbk1vZGUpOworICAgICAgICB0
YXJnZXQtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQsIGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTk0Niw3ICs5NDUsNyBAQCB2b2lkIFByb3h5
T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVydHlOCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgdm9pZCgpKTsKIAogICAgIFByb3BlcnR5TmFtZUFycmF5IHRhcmdldEtleXModm0sIFBy
b3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhj
bHVkZSk7Ci0gICAgdGFyZ2V0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMo
dGFyZ2V0LCBnbG9iYWxPYmplY3QsIHRhcmdldEtleXMsIGVudW1lcmF0aW9uTW9kZSk7CisgICAg
dGFyZ2V0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0LCBnbG9i
YWxPYmplY3QsIHRhcmdldEtleXMsIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgVmVjdG9yPFVuaXF1
ZWRTdHJpbmdJbXBsKj4gdGFyZ2V0Q29uZmlndXJhYmxlS2V5czsKICAgICBWZWN0b3I8VW5pcXVl
ZFN0cmluZ0ltcGwqPiB0YXJnZXROb25Db25maWd1cmFibGVLZXlzOwpAQCAtMTAxMywzNyArMTAx
MiwxNSBAQCB2b2lkIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duRW51bWVyYWJsCiAgICAgfQog
fQogCi12b2lkIFByb3h5T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9w
ZXJ0eU5hbWVBcnJheSwgRW51bWVyYXRpb25Nb2RlIGVudW1lcmF0aW9uTW9kZSkKK3ZvaWQgUHJv
eHlPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZUFycmF5
LCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgUHJveHlPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihvYmplY3QpOwotICAgIGlmIChlbnVtZXJhdGlv
bk1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKQorICAgIGlmIChtb2RlID09IERvbnRF
bnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpCiAgICAgICAgIHRoaXNPYmplY3QtPnBlcmZvcm1H
ZXRPd25Qcm9wZXJ0eU5hbWVzKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lQXJyYXkpOwogICAg
IGVsc2UKICAgICAgICAgdGhpc09iamVjdC0+cGVyZm9ybUdldE93bkVudW1lcmFibGVQcm9wZXJ0
eU5hbWVzKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lQXJyYXkpOwogfQogCi12b2lkIFByb3h5
T2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVBcnJheSwgRW51
bWVyYXRpb25Nb2RlIGVudW1lcmF0aW9uTW9kZSkKLXsKLSAgICBOT19UQUlMX0NBTExTKCk7Ci0g
ICAgSlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMob2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZUFycmF5LCBlbnVtZXJhdGlvbk1vZGUpOwotfQotCi12b2lkIFByb3h5T2JqZWN0Ojpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFBy
b3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKQotewotICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgUHJveHlPYmplY3Q6OmdldFN0cnVjdHVyZVByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKQotewotICAgIC8vIFdlIHNob3VsZCBhbHdheXMgZ28gZG93biB0aGUg
Z2V0T3duUHJvcGVydHlOYW1lcyBwYXRoLgotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci19Ci0KLXZvaWQgUHJveHlPYmplY3Q6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCiBib29sIFByb3h5
T2JqZWN0OjpwZXJmb3JtU2V0UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlLCBib29sIHNob3VsZFRocm93SWZDYW50U2V0KQogewogICAgIE5P
X1RBSUxfQ0FMTFMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
eHlPYmplY3QuaAkocmV2aXNpb24gMjcwODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJveHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBjbGFz
cyBQcm94eU9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU05vbkZpCiBwdWJsaWM6CiAgICAgdHlwZWRl
ZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRDYWxsRGF0YSB8IEludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBPdmVycmlkZXNHZXRQcm9w
ZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRl
c0dldFByb3RvdHlwZSB8IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVz
IHwgT3ZlcnJpZGVzR2V0UHJvdG90eXBlIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBJbnRlcmNl
cHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgUHJv
aGliaXRzUHJvcGVydHlDYWNoaW5nOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IFN1YnNwYWNlQWNjZXNzIG1vZGU+CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCkBAIC01Nyw3ICs1Nyw2IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKGlzQ2FsbGFi
bGUpCiAgICAgICAgICAgICBmbGFncyB8PSAoSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgSW1wbGVt
ZW50c0RlZmF1bHRIYXNJbnN0YW5jZSk7CiAgICAgICAgIFN0cnVjdHVyZSogcmVzdWx0ID0gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhQcm94
eU9iamVjdFR5cGUsIGZsYWdzKSwgaW5mbygpLCBOb25BcnJheSB8IE1heUhhdmVJbmRleGVkQWNj
ZXNzb3JzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRJc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2Vk
Rm9yRW51bWVyYXRpb24oZmFsc2UpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0LT5j
YW5BY2Nlc3NQcm9wZXJ0aWVzUXVpY2tseUZvckVudW1lcmF0aW9uKCkpOwogICAgICAgICBSRUxF
QVNFX0FTU0VSVCghcmVzdWx0LT5jYW5DYWNoZVByb3BlcnR5TmFtZUVudW1lcmF0b3Iodm0pKTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTg5LDExICs4OCw3IEBAIHByaXZhdGU6CiAgICAg
c3RhdGljIGJvb2wgcHJldmVudEV4dGVuc2lvbnMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCop
OwogICAgIHN0YXRpYyBib29sIGlzRXh0ZW5zaWJsZShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
Kik7CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBz
aG91bGRUaHJvdyk7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUp
OwotICAgIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICBzdGF0aWMg
Tk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUpOwotICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0U3RydWN0
dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwotICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NS
QVNIIHZvaWQgZ2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVj
dCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9p
ZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIHN0YXRpYyBib29sIHNl
dFByb3RvdHlwZShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUs
IGJvb2wgc2hvdWxkVGhyb3dJZkNhbnRTZXQpOwogICAgIHN0YXRpYyBKU1ZhbHVlIGdldFByb3Rv
dHlwZShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiAyNzA4NjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03NSwyOCArNzUsMTEgQEAgYm9vbCBSZWdFeHBPYmplY3Q6OmRlbGV0ZVByb3BlcnR5
KEpTQ2VsbAogICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eShjZWxsLCBnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLXZvaWQgUmVnRXhwT2JqZWN0OjpnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQordm9pZCBSZWdFeHBPYmplY3Q6OmdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgaWYgKG1vZGUuaW5jbHVkZURvbnRFbnVt
UHJvcGVydGllcygpKQorICAgIGlmIChtb2RlID09IERvbnRFbnVtUHJvcGVydGllc01vZGU6Oklu
Y2x1ZGUpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKHZtLnByb3BlcnR5TmFtZXMtPmxhc3RJ
bmRleCk7Ci0gICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLX0KLQotdm9pZCBSZWdFeHBPYmplY3Q6
OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBpZiAobW9k
ZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KHZtLnByb3BlcnR5TmFtZXMtPmxhc3RJbmRleCk7Ci0gICAgQmFzZTo6Z2V0UHJvcGVydHlOYW1l
cyhvYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7Ci19Ci0KLXZvaWQg
UmVnRXhwT2JqZWN0OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCi17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwotICAgIGlmIChtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkKLSAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQodm0ucHJvcGVydHlOYW1lcy0+bGFzdEluZGV4KTsKLSAgICBC
YXNlOjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhvYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lcywgbW9kZSk7CiB9CiAKIGJvb2wgUmVnRXhwT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0
eShKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3Is
IGJvb2wgc2hvdWxkVGhyb3cpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24gMjcwODY2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBSZWdFeHBPYmplY3QgZmluYWwgOiBwdWJsaWMgSlNO
b25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmpl
Y3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVz
R2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXM7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3du
U3BlY2lhbFByb3BlcnR5TmFtZXM7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKQEAgLTE0Niw5ICsxNDYsNyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmKTsKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0R2VuZXJpY1Byb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRP
d25TcGVjaWFsUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3Vs
ZFRocm93KTsKIAogICAgIE1hdGNoUmVzdWx0IG1hdGNoSW5saW5lKEpTR2xvYmFsT2JqZWN0Kiwg
SlNTdHJpbmcqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nT2JqZWN0LmNwcAkocmV2aXNpb24gMjcwODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDcgKzE0NSw3
IEBAIGJvb2wgU3RyaW5nT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgKICAgICByZXR1cm4g
SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3Qs
IGkpOwogfQogCi12b2lkIFN0cmluZ09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIFN0cmluZ09iamVj
dDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Q
cm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RyaW5nT2JqZWN0Kj4ob2Jq
ZWN0KTsKQEAgLTE1MywxNyArMTUzLDExIEBAIHZvaWQgU3RyaW5nT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEoKICAgICAgICAgaW50IHNpemUgPSB0aGlzT2JqZWN0LT5pbnRlcm5hbFZhbHVl
KCktPmxlbmd0aCgpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKICAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20odm0sIGkpKTsKKyAg
ICAgICAgdGhpc09iamVjdC0+Z2V0T3duSW5kZXhlZFByb3BlcnR5TmFtZXMoZ2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKICAgICB9Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywg
bW9kZSk7Ci19Ci0KLXZvaWQgU3RyaW5nT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQotewotICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8U3RyaW5nT2JqZWN0Kj4ob2JqZWN0KTsKLSAgICBpZiAobW9kZS5pbmNsdWRl
RG9udEVudW1Qcm9wZXJ0aWVzKCkpCisgICAgaWYgKG1vZGUgPT0gRG9udEVudW1Qcm9wZXJ0aWVz
TW9kZTo6SW5jbHVkZSkKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQodm0ucHJvcGVydHlOYW1l
cy0+bGVuZ3RoKTsKLSAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAg
IHRoaXNPYmplY3QtPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhnbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiBTdHJpbmcgU3RyaW5nT2JqZWN0Ojp0b1N0cmluZ05h
bWUoY29uc3QgSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkocmV2aXNpb24gMjcwODY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDcgKzI4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBTdHJpbmdPYmplY3Qg
OiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNX
cmFwcGVyT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFpl
cm8gfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMg
fCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3Ra
ZXJvOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CiAgICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkBAIC01OSw4ICs1OSw3IEBA
IHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3Bl
cnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0
eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0
eUJ5SW5kZXgoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUp
OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmpl
Y3QqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxk
VGhyb3cpOwogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyNzA4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsMzIgKzE5NCwy
MCBAQCB2b2lkIFN0cnVjdHVyZTo6dmFsaWRhdGVGbGFncygpCiAgICAgICAgICYmIG1ldGhvZFRh
YmxlLmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrICE9IEpTQ2VsbDo6ZG9QdXRQcm9wZXJ0eVNl
Y3VyaXR5Q2hlY2s7CiAgICAgUkVMRUFTRV9BU1NFUlQob3ZlcnJpZGVzUHV0UHJvcGVydHlTZWN1
cml0eUNoZWNrID09IHR5cGVJbmZvKCkuaGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKCkpOwog
Ci0gICAgYm9vbCBvdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzID0KLSAgICAgICAgbWV0aG9kVGFi
bGUuZ2V0UHJvcGVydHlOYW1lcyAhPSBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcwotICAgICAg
ICAmJiBtZXRob2RUYWJsZS5nZXRQcm9wZXJ0eU5hbWVzICE9IEpTQ2VsbDo6Z2V0UHJvcGVydHlO
YW1lczsKICAgICBib29sIG92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgPQogICAgICAgICBt
ZXRob2RUYWJsZS5nZXRPd25Qcm9wZXJ0eU5hbWVzICE9IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eU5hbWVzCiAgICAgICAgICYmIG1ldGhvZFRhYmxlLmdldE93blByb3BlcnR5TmFtZXMgIT0gSlND
ZWxsOjpnZXRPd25Qcm9wZXJ0eU5hbWVzOwotICAgIGJvb2wgb3ZlcnJpZGVzR2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzID0KLSAgICAgICAgbWV0aG9kVGFibGUuZ2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzICE9IEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMKLSAgICAg
ICAgJiYgbWV0aG9kVGFibGUuZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzICE9IEpTQ2VsbDo6
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzOwotCi0gICAgUkVMRUFTRV9BU1NFUlQob3ZlcnJp
ZGVzR2V0UHJvcGVydHlOYW1lcyA9PSB0eXBlSW5mbygpLm92ZXJyaWRlc0dldFByb3BlcnR5TmFt
ZXMoKSk7Ci0KLSAgICAvLyBXZSBjYW4gc3RyZW5ndGhlbiB0aGlzIGludG8gYW4gZXF1aXZhbGVu
Y2UgdGVzdCBpZiB0aGVyZSBhcmUgbm8gY2xhc3NlcwotICAgIC8vIHRoYXQgc3BlY2lmaWVzIHRo
aXMgZmxhZyB3aXRob3V0IG92ZXJyaWRpbmcgYW55IG9mIHRoZSBmb3JtcyBvZiBnZXRQcm9wZXJ0
eU5hbWVzLgotICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjEyOTU0Ci0gICAgaWYgKG92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMKLSAgICAgICAg
fHwgb3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcwotICAgICAgICB8fCBvdmVycmlkZXNHZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXMpCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHR5cGVJbmZv
KCkub3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcygpKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzID09IHR5cGVJbmZvKCkub3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlOYW1lcygpKTsKKworICAgIGJvb2wgb3ZlcnJpZGVzR2V0T3duU3BlY2lh
bFByb3BlcnR5TmFtZXMgPQorICAgICAgICBtZXRob2RUYWJsZS5nZXRPd25TcGVjaWFsUHJvcGVy
dHlOYW1lcyAhPSBKU09iamVjdDo6Z2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMKKyAgICAgICAg
JiYgbWV0aG9kVGFibGUuZ2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMgIT0gSlNDZWxsOjpnZXRP
d25TcGVjaWFsUHJvcGVydHlOYW1lczsKKyAgICBSRUxFQVNFX0FTU0VSVChvdmVycmlkZXNHZXRP
d25TcGVjaWFsUHJvcGVydHlOYW1lcyA9PSB0eXBlSW5mbygpLm92ZXJyaWRlc0dldE93blNwZWNp
YWxQcm9wZXJ0eU5hbWVzKCkpOwogCiAgICAgYm9vbCBvdmVycmlkZXNHZXRQcm90b3R5cGUgPQog
ICAgICAgICBtZXRob2RUYWJsZS5nZXRQcm90b3R5cGUgIT0gc3RhdGljX2Nhc3Q8TWV0aG9kVGFi
bGU6OkdldFByb3RvdHlwZUZ1bmN0aW9uUHRyPihKU09iamVjdDo6Z2V0UHJvdG90eXBlKQogICAg
ICAgICAmJiBtZXRob2RUYWJsZS5nZXRQcm90b3R5cGUgIT0gSlNDZWxsOjpnZXRQcm90b3R5cGU7
Ci0KLSAgICBpZiAob3ZlcnJpZGVzR2V0UHJvdG90eXBlKQotICAgICAgICBSRUxFQVNFX0FTU0VS
VCh0eXBlSW5mbygpLm92ZXJyaWRlc0dldFByb3RvdHlwZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VS
VChvdmVycmlkZXNHZXRQcm90b3R5cGUgPT0gdHlwZUluZm8oKS5vdmVycmlkZXNHZXRQcm90b3R5
cGUoKSk7CiB9CiAjZWxzZQogaW5saW5lIHZvaWQgU3RydWN0dXJlOjp2YWxpZGF0ZUZsYWdzKCkg
eyB9CkBAIC0xMjAzLDcgKzExOTEsNyBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmF0dHJp
YnV0ZUNoYW5nCiAgICAgICAgIH0pOwogfQogCi12b2lkIFN0cnVjdHVyZTo6Z2V0UHJvcGVydHlO
YW1lc0Zyb21TdHJ1Y3R1cmUoVk0mIHZtLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIFN0cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1l
c0Zyb21TdHJ1Y3R1cmUoVk0mIHZtLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywg
RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIFByb3BlcnR5VGFibGUqIHRhYmxl
ID0gZW5zdXJlUHJvcGVydHlUYWJsZUlmTm90RW1wdHkodm0pOwogICAgIGlmICghdGFibGUpCkBA
IC0xMjEzLDcgKzEyMDEsNyBAQCB2b2lkIFN0cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21T
dHJ1CiAgICAgYm9vbCBmb3VuZFN5bWJvbCA9IGZhbHNlOwogCiAgICAgYXV0byBjaGVja0RvbnRF
bnVtQW5kQWRkID0gWyZdKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIpIHsKLSAgICAgICAg
aWYgKCEoaXRlci0+YXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkgfHwg
bW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0g
RG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSB8fCAhKGl0ZXItPmF0dHJpYnV0ZXMgJiBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKSB7CiAgICAgICAgICAgICBpZiAoa25vd25Vbmlx
dWUpCiAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGRVbmNoZWNrZWQoaXRlci0+a2V5
KTsKICAgICAgICAgICAgIGVsc2UKQEAgLTE0ODksNiArMTQ3Nyw4IEBAIGJvb2wgU3RydWN0dXJl
OjpjYW5BY2Nlc3NQcm9wZXJ0aWVzUXVpY2sKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlm
IChpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKHR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcygpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAyNzA4NjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNTMw
LDcgKzUzMCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENhY2hlZFByb3BlcnR5TmFtZXMoVk0m
LCBDYWNoZWRQcm9wZXJ0eU5hbWVzS2luZCwgSlNJbW11dGFibGVCdXR0ZXJmbHkqKTsKICAgICBi
b29sIGNhbkNhY2hlT3duUHJvcGVydHlOYW1lcygpIGNvbnN0OwogCi0gICAgdm9pZCBnZXRQcm9w
ZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShWTSYsIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKTsKKyAgICB2b2lkIGdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKFZNJiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKIAogICAgIEpTVmFsdWUg
Y2FjaGVkU3BlY2lhbFByb3BlcnR5KENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleSBrZXkpCiAgICAg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlu
bGluZXMuaAkocmV2aXNpb24gMjcwODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzUsNyArMjc1LDcgQEAg
aW5saW5lIGJvb2wgU3RydWN0dXJlOjpjYW5DYWNoZU93blByb3BlcgogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaWYgKGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICh0eXBlSW5mbygpLm92ZXJyaWRlc0FueUZvcm1P
ZkdldFByb3BlcnR5TmFtZXMoKSkKKyAgICBpZiAodHlwZUluZm8oKS5vdmVycmlkZXNBbnlGb3Jt
T2ZHZXRPd25Qcm9wZXJ0eU5hbWVzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZN
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJW
TS5jcHAJKHJldmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9K
U0RvbGxhclZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQzLDcgKzU0Myw3IEBAIHN0YXRpYyBK
U0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHJ1bnRpbWUKIGNsYXNzIFJ1bnRpbWVBcnJheSA6IHB1
YmxpYyBKU0FycmF5IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQXJyYXkgQmFzZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJv
cGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgT3ZlcnJpZGVzQW55Rm9y
bU9mR2V0UHJvcGVydHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3Ro
SXNOb3RaZXJvOwogCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVudXNlZC1jb25zdC12YXJpYWJs
ZSIpCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSBmYWxzZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBACisyMDIwLTEyLTE1ICBBbGV4ZXkg
U2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAgICAgICBbSlNDXSBTaW1wbGlm
eSBnZXQqUHJvcGVydHlOYW1lcygpIG1ldGhvZHMgYW5kIEVudW1lcmF0aW9uTW9kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyOTU0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRqdXN0IGZvciBjaGFu
Z2VzIGluIEpTQydzIE1ldGhvZFRhYmxlLCBUeXBlSW5mbywgYW5kIEVudW1lcmF0aW9uTW9kZS4K
KworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAq
IGFuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcm9jZXNz
S2V5ZnJhbWVMaWtlT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRS
ZWNvcmQuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU0xvY2F0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1JlbW90
ZURPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFs
aXplcjo6c2VyaWFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlR2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAg
IChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTLyo6
IFVwZGF0ZWQuCisgICAgICAgICogYnJpZGdlL05QX2pzb2JqZWN0LmNwcDoKKyAgICAgICAgKiBi
cmlkZ2UvcnVudGltZV9hcnJheS5jcHA6CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6Z2V0
T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6Z2V0T3duUHJv
cGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6UnVudGltZUFycmF5OjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9hcnJheS5oOgorICAgICAgICAq
IGJyaWRnZS9ydW50aW1lX29iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpSdW50
aW1lT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGlt
ZV9vYmplY3QuaDoKKwogMjAyMC0xMi0xNSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFw
cGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMjU5MTM3KTogQ2xpcC1wYXRoIHJlbmRl
cmluZyByZWdyZXNzaW9uIHdoZW4gZWxlbWVudCBjb250YWlucyB0cmFuc2Zvcm1lZCBjaGlsZApJ
bmRleDogU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwCShyZXZp
c2lvbiAyNzA4NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzgsNyArMjM4LDcgQEAgc3RhdGljIGlubGluZSBFeGNl
cHRpb25PcjxLZXlmcmFtZUVmZmVjdAogCiAgICAgLy8gMy4gTGV0IGlucHV0IHByb3BlcnRpZXMg
YmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBFbnVtZXJhYmxlT3duTmFtZXMgb3BlcmF0aW9u
IHdpdGgga2V5ZnJhbWUgaW5wdXQgYXMgdGhlIG9iamVjdC4KICAgICBQcm9wZXJ0eU5hbWVBcnJh
eSBpbnB1dFByb3BlcnRpZXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVT
eW1ib2xNb2RlOjpFeGNsdWRlKTsKLSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhr
ZXlmcmFtZXNJbnB1dC5nZXQoKSwgJmxleGljYWxHbG9iYWxPYmplY3QsIGlucHV0UHJvcGVydGll
cywgRW51bWVyYXRpb25Nb2RlKCkpOworICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KGtleWZyYW1lc0lucHV0LmdldCgpLCAmbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5wdXRQcm9wZXJ0
aWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKTsKIAogICAgIC8vIDQuIE1ha2Ug
dXAgYSBuZXcgbGlzdCBhbmltYXRpb24gcHJvcGVydGllcyB0aGF0IGNvbnNpc3RzIG9mIGFsbCBv
ZiB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBpbiBib3RoIGlucHV0IHByb3BlcnRpZXMgYW5kIGFu
aW1hdGFibGUKICAgICAvLyAgICBwcm9wZXJ0aWVzLCBvciB3aGljaCBhcmUgaW4gaW5wdXQgcHJv
cGVydGllcyBhbmQgY29uZm9ybSB0byB0aGUgPGN1c3RvbS1wcm9wZXJ0eS1uYW1lPiBwcm9kdWN0
aW9uLgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0UmVjb3Jk
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0
UmVjb3JkLmgJKHJldmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQ29udmVydFJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAg
cHJpdmF0ZToKICAgICAKICAgICAgICAgLy8gNC4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVy
dHlLZXlzXV0oKS4KICAgICAgICAgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKHZtLCBKU0M6
OlByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIEpTQzo6UHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1
ZGUpOwotICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1l
cyhvYmplY3QsICZsZXhpY2FsR2xvYmFsT2JqZWN0LCBrZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9k
ZShKU0M6OkRvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKKyAgICAgICAgb2JqZWN0
LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCAmbGV4aWNhbEds
b2JhbE9iamVjdCwga2V5cywgSlNDOjpEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKTsK
IAogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCkBAIC0xMTMsNyAr
MTEzLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5k
ZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6CiAKLSAgICAgICAgICAgIC8v
IEl0J3MgbmVjZXNzYXJ5IHRvIGZpbHRlciBlbnVtZXJhYmxlIGhlcmUgcmF0aGVyIHRoYW4gdXNp
bmcgdGhlIGRlZmF1bHQgRW51bWVyYXRpb25Nb2RlLAorICAgICAgICAgICAgLy8gSXQncyBuZWNl
c3NhcnkgdG8gZmlsdGVyIGVudW1lcmFibGUgaGVyZSByYXRoZXIgdGhhbiB1c2luZyBEb250RW51
bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlLAogICAgICAgICAgICAgLy8gdG8gcHJldmVudCBhbiBv
YnNlcnZhYmxlIGV4dHJhIFtbR2V0T3duUHJvcGVydHldXSBvcGVyYXRpb24gaW4gdGhlIGNhc2Ug
b2YgUHJveHlPYmplY3QgcmVjb3Jkcy4KICAgICAgICAgICAgIGlmIChkaWRHZXREZXNjcmlwdG9y
ICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gMS4gTGV0
IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5j
cHAJKHJldmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
V2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU0LDE0ICs0NTQsMTQgQEAgc3Rh
dGljIHZvaWQgYWRkU2NvcGVkQ2hpbGRyZW5JbmRleGVzKEpTRwogfQogCiAvLyBodHRwczovL2h0
bWwuc3BlYy53aGF0d2cub3JnLyN3aW5kb3dwcm94eS1vd25wcm9wZXJ0eWtleXMKLXZvaWQgSlNE
T01XaW5kb3c6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNET01XaW5kb3c6OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRp
ZXNNb2RlIG1vZGUpCiB7CiAgICAgSlNET01XaW5kb3cqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNE
T01XaW5kb3cqPihvYmplY3QpOwogCiAgICAgYWRkU2NvcGVkQ2hpbGRyZW5JbmRleGVzKCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LT53cmFwcGVkKCksIHByb3BlcnR5TmFtZXMpOwog
CiAgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3co
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdC0+d3JhcHBlZCgpLCBEb05vdFJlcG9ydFNl
Y3VyaXR5RXJyb3IpKSB7Ci0gICAgICAgIGlmIChtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRp
ZXMoKSkKKyAgICAgICAgaWYgKG1vZGUgPT0gRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVk
ZSkKICAgICAgICAgICAgIGFkZENyb3NzT3JpZ2luT3duUHJvcGVydHlOYW1lczxDcm9zc09yaWdp
bk9iamVjdDo6V2luZG93PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcyk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0xvY2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMjcwODY2KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4OCwxMSArMTg4LDExIEBAIGJvb2wgSlNMb2NhdGlvbjo6ZGVsZXRlUHJvcGVydHlCeUluZGV4
KEoKICAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGxl
eGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7CiB9CiAKLXZvaWQgSlNMb2NhdGlvbjo6
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0xvY2F0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2Rl
KQogewogICAgIEpTTG9jYXRpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMb2NhdGlvbio+KG9i
amVjdCk7CiAgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01X
aW5kb3cobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdC0+d3JhcHBlZCgpLndpbmRvdygp
LCBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3IpKSB7Ci0gICAgICAgIGlmIChtb2RlLmluY2x1ZGVE
b250RW51bVByb3BlcnRpZXMoKSkKKyAgICAgICAgaWYgKG1vZGUgPT0gRG9udEVudW1Qcm9wZXJ0
aWVzTW9kZTo6SW5jbHVkZSkKICAgICAgICAgICAgIGFkZENyb3NzT3JpZ2luT3duUHJvcGVydHlO
YW1lczxDcm9zc09yaWdpbk9iamVjdDo6TG9jYXRpb24+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWVzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVtb3Rl
RE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDExICsxMDAsMTEgQEAg
Ym9vbCBKU1JlbW90ZURPTVdpbmRvdzo6ZGVsZXRlUHJvcGVydHlCeQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotdm9pZCBKU1JlbW90ZURPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTUmVtb3Rl
RE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBE
b250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgLy8gRklYTUU6IEFkZCBzY29wZWQg
Y2hpbGRyZW4gaW5kZXhlcy4KIAotICAgIGlmIChtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRp
ZXMoKSkKKyAgICBpZiAobW9kZSA9PSBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKQog
ICAgICAgICBhZGRDcm9zc09yaWdpbk93blByb3BlcnR5TmFtZXM8Q3Jvc3NPcmlnaW5PYmplY3Q6
OldpbmRvdz4oKmxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHAJKHJldmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MjgsNyArMTcy
OCw3IEBAIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIENsb25lU2VyaWFsaXplcjoKICAgICAgICAg
ICAgICAgICAgICAgbGVuZ3RoU3RhY2sucmVtb3ZlTGFzdCgpOwogCiAgICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5U3RhY2suYXBwZW5kKFByb3BlcnR5TmFtZUFycmF5KHZtLCBQcm9wZXJ0eU5h
bWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSkpOwotICAgICAgICAg
ICAgICAgICAgICBhcnJheS0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMoYXJyYXksIG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlTdGFjay5sYXN0KCks
IEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYXJyYXktPmdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyhtX2xleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5U3RhY2su
bGFzdCgpLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKHByb3BlcnR5U3RhY2subGFzdCgpLnNpemUoKSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgd3JpdGUoTm9uSW5kZXhQcm9wZXJ0aWVzVGFnKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4U3RhY2suYXBwZW5kKDApOwpAQCAtMTc3OCw3ICsxNzc4LDcgQEAgU2VyaWFs
aXphdGlvblJldHVybkNvZGUgQ2xvbmVTZXJpYWxpemVyOgogICAgICAgICAgICAgICAgIGlucHV0
T2JqZWN0U3RhY2suYXBwZW5kKGluT2JqZWN0KTsKICAgICAgICAgICAgICAgICBpbmRleFN0YWNr
LmFwcGVuZCgwKTsKICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0YWNrLmFwcGVuZChQcm9wZXJ0
eU5hbWVBcnJheSh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1v
ZGU6OkV4Y2x1ZGUpKTsKLSAgICAgICAgICAgICAgICBpbk9iamVjdC0+bWV0aG9kVGFibGUodm0p
LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluT2JqZWN0LCBtX2xleGljYWxHbG9iYWxPYmplY3QsIHBy
b3BlcnR5U3RhY2subGFzdCgpLCBFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgICAgICAgICAgICAg
aW5PYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhpbk9iamVjdCwg
bV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRG9udEVudW1Qcm9w
ZXJ0aWVzTW9kZTo6RXhjbHVkZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBvYmplY3RT
dGFydFZpc2l0TWVtYmVyOgogICAgICAgICAgICAgRkFMTFRIUk9VR0g7CkBAIC0xODQ2LDcgKzE4
NDYsNyBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBDbG9uZVNlcmlhbGl6ZXI6CiAgICAgICAg
ICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBpbnB1dE9iamVjdFN0YWNrLmxhc3QoKTsK
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNNYXAqPih2bSwgb2Jq
ZWN0KSk7CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RhY2suYXBwZW5kKFByb3BlcnR5
TmFtZUFycmF5KHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9k
ZTo6RXhjbHVkZSkpOwotICAgICAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZt
KS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJv
cGVydHlTdGFjay5sYXN0KCksIEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBt
X2xleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5U3RhY2subGFzdCgpLCBEb250RW51bVByb3Bl
cnRpZXNNb2RlOjpFeGNsdWRlKTsKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoTm9uTWFwUHJv
cGVydGllc1RhZyk7CiAgICAgICAgICAgICAgICAgICAgIGluZGV4U3RhY2suYXBwZW5kKDApOwog
ICAgICAgICAgICAgICAgICAgICBnb3RvIG9iamVjdFN0YXJ0VmlzaXRNZW1iZXI7CkBAIC0xODkw
LDcgKzE4OTAsNyBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBDbG9uZVNlcmlhbGl6ZXI6CiAg
ICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBpbnB1dE9iamVjdFN0YWNrLmxh
c3QoKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNTZXQqPih2
bSwgb2JqZWN0KSk7CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RhY2suYXBwZW5kKFBy
b3BlcnR5TmFtZUFycmF5KHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3lt
Ym9sTW9kZTo6RXhjbHVkZSkpOwotICAgICAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIG1fbGV4aWNhbEdsb2JhbE9iamVj
dCwgcHJvcGVydHlTdGFjay5sYXN0KCksIEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2Jq
ZWN0LCBtX2xleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5U3RhY2subGFzdCgpLCBEb250RW51
bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKTsKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoTm9u
U2V0UHJvcGVydGllc1RhZyk7CiAgICAgICAgICAgICAgICAgICAgIGluZGV4U3RhY2suYXBwZW5k
KDApOwogICAgICAgICAgICAgICAgICAgICBnb3RvIG9iamVjdFN0YXJ0VmlzaXRNZW1iZXI7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQkocmV2aXNpb24gMjcwODY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTExMjIsNyArMTEyMiw3
IEBAIHN1YiBHZW5lcmF0ZUdldE93blByb3BlcnR5TmFtZXMKICAgICBteSAkbmFtZWRHZXR0ZXJP
cGVyYXRpb24gPSBHZXROYW1lZEdldHRlck9wZXJhdGlvbigkaW50ZXJmYWNlKTsKICAgICBteSAk
aW5kZXhlZEdldHRlck9wZXJhdGlvbiA9IEdldEluZGV4ZWRHZXR0ZXJPcGVyYXRpb24oJGludGVy
ZmFjZSk7CiAgICAgCi0gICAgcHVzaChAJG91dHB1dEFycmF5LCAidm9pZCAke2NsYXNzTmFtZX06
OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSlcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInZvaWQgJHtj
bGFzc05hbWV9OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKVxuIik7CiAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAie1xuIik7CiAgICAgaWYgKCRpbmRleGVkR2V0dGVyT3BlcmF0aW9uIHx8ICRuYW1l
ZEdldHRlck9wZXJhdGlvbikgewogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgVk0m
IHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTtcbiIpOwpAQCAtMTE0OCw3ICsx
MTQ4LDcgQEAgc3ViIEdlbmVyYXRlR2V0T3duUHJvcGVydHlOYW1lcwogICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVj
dC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSlcbiIpOwogICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTtcbiIpOwogICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChtb2RlLmluY2x1ZGVEb250
RW51bVByb3BlcnRpZXMoKSkge1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgaWYgKG1vZGUgPT0gRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkge1xuIik7
CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIGZvciAoYXV0byYgcHJv
cGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMo
KSlcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICAgICAgcHJv
cGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7
XG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG4iKTsKQEAgLTI5
ODAsOCArMjk4MCw4IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIH0KICAgICAKICAgICBpZiAo
SW5zdGFuY2VPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzKCRpbnRlcmZhY2UpKSB7Ci0gICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlO
YW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlO
YW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkp
O1xuIik7Ci0gICAgICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZH
ZXRQcm9wZXJ0eU5hbWVzIn0gPSAxOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAg
IHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpEb250RW51bVByb3Bl
cnRpZXNNb2RlKTtcbiIpOworICAgICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlOYW1lcyJ9ID0gMTsKICAgICB9CiAgICAgCiAgICAgaWYgKEluc3RhbmNl
T3ZlcnJpZGVzUHV0KCRpbnRlcmZhY2UpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5j
cHAJKHJldmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOCw3ICsy
MDgsNyBAQCBib29sIEpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRPd25Qcm9wZXJ0eVNsCiAgICAgcmV0
dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEds
b2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpTVGVzdEV2ZW50VGFyZ2V0Ojpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9k
ZSBtb2RlKQogewogICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RFdmVudFRhcmdldCo+KG9iamVj
dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
RXZlbnRUYXJnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuaAkocmV2aXNpb24gMjcwODY2KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0
RXZlbnRUYXJnZXQqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYp
OwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJh
dGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAKICAg
ICBERUNMQVJFX0lORk87CiAKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VGVzdEV2ZW50VGFyZ2V0Jj4oQmFzZTo6d3JhcHBlZCgpKTsKICAgICB9
CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZv
clByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCB8
IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90
SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RFdmVudFRhcmdl
dChKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RFdmVudFRhcmdl
dD4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRl
bnRpZmllci5jcHAJKHJldmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTc4LDcgKzE3OCw3IEBAIGJvb2wgSlNUZXN0SW5kZXhlZFNldHRlck5v
SWRlbnRpZmllcjo6Z2UKICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZv
aWQgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9p
ZCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2Rl
KQogewogICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
Kj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXIuaAkocmV2aXNpb24gMjcwODY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFRlc3RJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0
eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6
RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIHZv
aWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkRvbnRFbnVtUHJvcGVydGllc01vZGUp
OwogICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYp
OwogICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3cpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJv
cGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CkBAIC02NCw3ICs2NCw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBB
bmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVz
QW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlO
YW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OwogcHJvdGVjdGVkOgogICAg
IEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUds
b2JhbE9iamVjdCYsIFJlZjxUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcj4mJik7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24uY3BwCShyZXZpc2lvbiAyNzA4NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTc4LDcgKzE3OCw3IEBAIGJvb2wgSlNUZXN0SW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW8KICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAK
LXZvaWQgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1v
ZGUpCit2b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVy
dGllc01vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJKHJldmlzaW9uIDI3MDg2NikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIFRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24q
IHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRp
YyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBK
U0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5h
bWVBcnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGljIGJvb2wg
cHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1l
LCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wg
cHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgc3RhdGlj
IGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBi
b29sIHNob3VsZFRocm93KTsKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBK
U0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRp
YyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0
eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CisgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
SlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNO
b3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0SW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBS
ZWY8VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4mJik7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCShyZXZp
c2lvbiAyNzA4NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTg1LDcgKzE4NSw3IEBAIGJvb2wgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjoK
ICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNUZXN0SW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTVGVzdEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBW
TSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKj4ob2JqZWN0
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyLmgJKHJldmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFRlc3RJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXIqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5
U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVj
dCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpF
bnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9p
ZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7
CiAgICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7
CiAgICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRU
aHJvdyk7CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCos
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9w
ZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKQEAgLTY0LDcgKzY0LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFu
YWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJv
cGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNB
bnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5h
bWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CiBwcm90ZWN0ZWQ6CiAgICAg
SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKEpTQzo6U3RydWN0dXJlKiwgSlNET01H
bG9iYWxPYmplY3QmLCBSZWY8VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4mJik7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdh
Y3lPdmVycmlkZUJ1aWx0SW5zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAJKHJl
dmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5
LDcgKzE5OSw3IEBAIGJvb2wgSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6Z2V0T3cKICAg
ICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNUZXN0TGVnYWN5T3Zl
cnJpZGVCdWlsdEluczo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3RMZWdhY3lPdmVycmlk
ZUJ1aWx0SW5zOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9IEpTQzo6
Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0
SW5zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaAkocmV2aXNpb24gMjcwODY2KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU92ZXJy
aWRlQnVpbHRJbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIFRlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKiB0b1dyYXBwZWQoSlNDOjpWTSYs
IEpTQzo6SlNWYWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6
SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6
UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0
eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUo
KSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkRvbnRF
bnVtUHJvcGVydGllc01vZGUpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwq
KTsKIAogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAg
IHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSB8IEpT
Qzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90
WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6T3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVy
dHlTbG90SXNJbXB1cmUgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFt
ZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKIHByb3RlY3RlZDoKICAgICBK
U1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxP
YmplY3QmLCBSZWY8VGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM+JiYpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyLmNwcAkocmV2aXNpb24gMjcwODY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwNyw3ICsyMDcsNyBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlck5vSWRlbnRpCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQog
Ci12b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQordm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51
bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcio+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5oCShy
ZXZpc2lvbiAyNzA4NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7
CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7
CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0
KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9w
ZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNP
YmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpT
Qzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGlj
IHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkRvbnRFbnVtUHJvcGVydGllc01v
ZGUpOwogICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xv
dCYpOwogICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6
UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CkBAIC02NCw3ICs2NCw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6Okhl
YXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlT
bG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0Fu
eUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0
T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2Vw
dHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6
Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAg
IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcihKU0M6OlN0cnVjdHVyZSos
IEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXI+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI3MDg2
NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIwNyw3ICsyMDcsNyBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5n
CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwg
bGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lk
IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0
aWVzTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24uaAkocmV2aXNpb24gMjcwODY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qIHRvV3JhcHBlZChKU0M6OlZN
JiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlND
OjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlND
OjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3Bl
cnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3Bl
cnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9k
ZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6UHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0M6OkpT
Q2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6
SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJv
cGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5
TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsK
QEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFw
KEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlND
OjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8
IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5j
ZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7
CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24oSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+JiYpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
ci5jcHAJKHJldmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIxNiw3ICsyMTYsNyBAQCBib29sIEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlcldpdGhJZGVuCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQog
Ci12b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlIG1vZGUpCit2b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KG9iamVjdCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyV2l0aElkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXIuaAkocmV2aXNpb24gMjcwODY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIqIHRvV3JhcHBlZChKU0M6OlZNJiwg
SlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpK
U09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQ
cm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5
TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5
TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgp
KTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RG9udEVu
dW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6
UHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0M6OkpTQ2Vs
bCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNW
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVy
dHkoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFt
ZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKQEAg
LTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpT
Q2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpH
ZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpT
Qzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8
IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElz
Tm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBw
cm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIo
SlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXI+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjcwODY2KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlck5v
SWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MCw3ICsxOTAsNyBAQCBib29sIEpT
VGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6Z2V0CiAgICAgcmV0dXJuIEpTT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5k
ZXgsIHNsb3QpOwogfQogCi12b2lkIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0
aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6OmdldE93
blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVBy
b3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkRGVs
ZXRlck5vSWRlbnRpZmllcio+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkRGVsZXRlck5vSWRlbnRpZmllci5oCShyZXZpc2lvbiAyNzA4NjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlm
aWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6
SlNWYWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVy
dHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6
OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVB
cnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7Cisg
ICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkRvbnRFbnVtUHJv
cGVydGllc01vZGUpOwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQzo6SlNDZWxs
KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkRlbGV0ZVBy
b3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0M6
OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCk7CiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwpAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAg
ICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9y
UHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9w
ZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpT
Qzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90
WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkRGVsZXRlck5v
SWRlbnRpZmllcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RO
YW1lZERlbGV0ZXJOb0lkZW50aWZpZXI+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI3MDg2
NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MCw3ICsx
OTAsNyBAQCBib29sIEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uCiAgICAgcmV0
dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEds
b2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpTVGVzdE5hbWVkRGVsZXRlclRo
cm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTVGVzdE5hbWVkRGVsZXRl
clRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3Qs
IEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIFZNJiB2
bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KG9iamVjdCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNl
cHRpb24uaAkocmV2aXNpb24gMjcwODY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0TmFtZWRE
ZWxldGVyVGhyb3dpbmdFeGNlcHRpb24qIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVl
KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3Qm
KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlBy
b3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpK
U09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5Jiwg
SlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0
aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVz
TW9kZSk7CiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDOjpKU0NlbGwqLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6RGVsZXRlUHJvcGVydHlT
bG90Jik7CiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQzo6SlNDZWxs
KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQzo6SlNDZWxsKik7CkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
SlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0
aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGlj
OgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0
eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFt
ZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6
OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRl
cmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwg
SlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3Q7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdF
eGNlcHRpb24oSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFt
ZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI3MDg2NikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERl
bGV0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw3ICsxOTYsNyBA
QCBib29sIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjpnCiAgICAgcmV0dXJuIEpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9i
amVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVu
dGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVu
dGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9IEpTQzo6Z2V0
Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcio+KG9iamVjdCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElk
ZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuaAkocmV2aXNpb24gMjcw
ODY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIqIHRv
V3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlBy
b3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2
b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6
OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVB
cnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGljIGJvb2wgZGVs
ZXRlUHJvcGVydHkoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9w
ZXJ0eU5hbWUsIEpTQzo6RGVsZXRlUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZGVs
ZXRlUHJvcGVydHlCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVu
c2lnbmVkKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CkBAIC02Myw3
ICs2Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwq
LCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3du
UHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNH
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92
ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJl
Rm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CiBwcm90ZWN0ZWQ6CiAg
ICAgSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RP
TUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI+JiYpOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhl
ZEdldHRlci5jcHAJKHJldmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwNyw3ICsyMDcsNyBAQCBib29sIEpTVGVzdE5hbWVkRGVsZXRl
cldpdGhJbmRleGVkR2V0dGVyCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQog
Ci12b2lkIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1v
ZGUpCit2b2lkIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyOjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0
aWVzTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZERlbGV0ZXJX
aXRoSW5kZXhlZEdldHRlcio+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuaAkocmV2aXNpb24gMjcwODY2KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRl
cldpdGhJbmRleGVkR2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIqIHRvV3Jh
cHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3Bl
cnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lk
IGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVu
dW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJh
eSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGljIGJvb2wgZGVsZXRl
UHJvcGVydHkoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0
eU5hbWUsIEpTQzo6RGVsZXRlUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZGVsZXRl
UHJvcGVydHlCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2ln
bmVkKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CkBAIC02Myw3ICs2
Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJ
bXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBK
U0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJv
cGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJy
aWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9y
UHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5h
bWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CiBwcm90ZWN0ZWQ6CiAgICAg
SlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RP
TUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI+JiYp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRHZXR0ZXJDYWxsV2l0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguY3BwCShyZXZp
c2lvbiAyNzA4NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MCw3ICsx
OTAsNyBAQCBib29sIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OmdldE93blByCiAgICAgcmV0
dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEds
b2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpTVGVzdE5hbWVkR2V0dGVyQ2Fs
bFdpdGg6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVz
LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRF
bnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFt
ZWRHZXR0ZXJDYWxsV2l0aCo+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdl
dHRlckNhbGxXaXRoLmgJKHJldmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0TmFtZWRHZXR0
ZXJDYWxsV2l0aCogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7
Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0
aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93
blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAKICAgICBERUNMQVJFX0lORk87CkBA
IC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChK
U0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6
R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVy
Y2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBK
U0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElz
SW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlT
bG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CiBwcm90ZWN0
ZWQ6CiAgICAgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aChKU0M6OlN0cnVjdHVyZSosIEpTRE9N
R2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZEdldHRlckNhbGxXaXRoPiYmKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVy
Tm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lv
biAyNzA4NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNyAr
MTkwLDcgQEAgYm9vbCBKU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllcjo6Z2V0TwogICAgIHJl
dHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxH
bG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZEdldHRlck5v
SWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3ROYW1lZEdldHRlck5vSWRl
bnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBKU0M6Omdl
dFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIqPihvYmplY3QpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlm
aWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3MDg2NikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRl
ck5vSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyKiB0b1dyYXBwZWQoSlNDOjpW
TSYsIEpTQzo6SlNWYWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpT
Qzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9w
ZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1v
ZGUoKSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0
KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkRv
bnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0Nl
bGwqKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwog
ICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZv
clByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJv
cGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBK
U0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZEdldHRlck5v
SWRlbnRpZmllcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RO
YW1lZEdldHRlck5vSWRlbnRpZmllcj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI3MDg2NikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldp
dGhJZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDcgKzE5Niw3IEBAIGJvb2wg
SlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2UKICAgICByZXR1cm4gSlNPYmplY3Q6
OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBp
bmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVu
dW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1l
ZEdldHRlcldpdGhJZGVudGlmaWVyKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuaAkocmV2aXNpb24gMjcwODY2KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0
aElkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIFRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyKiB0b1dyYXBwZWQoSlNDOjpW
TSYsIEpTQzo6SlNWYWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpT
Qzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9w
ZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1v
ZGUoKSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0
KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkRv
bnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0Nl
bGwqKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwog
ICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZv
clByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJv
cGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBK
U0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZEdldHRlcldp
dGhJZGVudGlmaWVyKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVz
dE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI3MDg2NikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5v
SWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MCw3ICsxOTAsNyBAQCBib29sIEpT
VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPCiAgICAgcmV0dXJuIEpTT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5k
ZXgsIHNsb3QpOwogfQogCi12b2lkIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRp
b25Nb2RlIG1vZGUpCit2b2lkIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9w
ZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRl
ck5vSWRlbnRpZmllcio+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRT
ZXR0ZXJOb0lkZW50aWZpZXIuaAkocmV2aXNpb24gMjcwODY2KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0
TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVl
KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3Qm
KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlBy
b3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpK
U09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5Jiwg
SlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0
aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVz
TW9kZSk7CiAgICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlT
bG90Jik7CiAgICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBz
aG91bGRUaHJvdyk7CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09i
amVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlND
OjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKQEAgLTY0LDcgKzY0LDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6
SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0
eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVz
QW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpH
ZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpT
Qzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAg
ICAgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUds
b2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI+JiYpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24u
Y3BwCShyZXZpc2lvbiAyNzA4NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE5MCw3ICsxOTAsNyBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb246CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpT
VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQg
SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9k
ZSkKIHsKICAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbio+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
clRocm93aW5nRXhjZXB0aW9uLmgJKHJldmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiogdG9XcmFwcGVkKEpTQzo6Vk0mLCBK
U0M6OkpTVmFsdWUpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpT
T2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlBy
b3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
SlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlO
YW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlO
YW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkp
OworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpEb250RW51
bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQ
dXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQzo6SlNDZWxs
KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1Zh
bHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0
eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1l
LCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwpAQCAt
NjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlND
ZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Okdl
dE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNl
cHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlND
OjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwg
SlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNO
b3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKIHBy
b3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uKEpTQzo6U3Ry
dWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
V2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNzA4NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw3ICsxOTYsNyBAQCBib29sIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aElkZW50aWZpZXI6OmdlCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwog
fQogCi12b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9k
ZSkKK3ZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01v
ZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRl
bnRpZmllcio+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
cldpdGhJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0
TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllciogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFs
dWUpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xv
dCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09i
amVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6
UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6
OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkm
LCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0
YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpEb250RW51bVByb3BlcnRp
ZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0
eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29s
IHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpT
T2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBjb25zdCBK
U0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwpAQCAtNjQsNyArNjQs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlND
OjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3Bl
cnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlk
ZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6
OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRl
cmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwg
SlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKIHByb3RlY3RlZDoK
ICAgICBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyKEpTQzo6U3RydWN0dXJlKiwgSlNE
T01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI+JiYpOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXIuY3BwCShyZXZpc2lvbiAyNzA4NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIxNiw3ICsyMTYsNyBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXI6CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12
b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6OmdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
K3ZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01v
ZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlcio+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmgJKHJldmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlciogdG9XcmFwcGVkKEpTQzo6
Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChK
U0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBK
U0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJv
cGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJv
cGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25N
b2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVj
dCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpE
b250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwq
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwg
SlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQzo6
SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlND
OjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Q
cm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVy
dHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cp
OwpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhl
YXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBK
U0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJ
bnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJv
IHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNl
bmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVu
Z3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGlu
ZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyKEpT
Qzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXI+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuY3BwCShyZXZpc2lv
biAyNzA4NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxNiw3ICsyMTYsNyBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXJBCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9i
amVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpTVGVz
dE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OmdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
K3ZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJv
cGVydGllc01vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcio+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlckFuZFNldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0
dGVyLmgJKHJldmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlciogdG9XcmFwcGVkKEpTQzo6Vk0m
LCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6
OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6
OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVy
dHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVy
dHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2Rl
KCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCos
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpEb250
RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlND
OjpQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQzo6SlND
ZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpK
U1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9w
ZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlO
YW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwpA
QCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAo
SlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6
OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRl
cmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwg
SlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNl
IHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3Ro
SXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsK
IHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0
dGVyKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3Zl
cnJpZGVCdWlsdElucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJ
bnMuY3BwCShyZXZpc2lvbiAyNzA4NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MCw3ICsxOTAsNyBAQCBib29sIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeU92ZXJyaWRlCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwog
fQogCi12b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJh
dGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVC
dWlsdEluczo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBKU0M6Omdl
dFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucyo+KG9iamVjdCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdh
Y3lPdmVycmlkZUJ1aWx0SW5zLmgJKHJldmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVy
cmlkZUJ1aWx0SW5zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucyogdG9X
cmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJv
cGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZv
aWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6
RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMo
SlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFy
cmF5JiwgSlNDOjpEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBwdXQo
SlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBwdXRC
eUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgYm9v
bCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6UHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wg
c2hvdWxkVGhyb3cpOwpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZv
aWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlIHwgSlNDOjpJbnRlcmNl
cHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlND
OjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlIHwgSlNDOjpJbnRlcmNlcHRzR2V0
T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rl
c3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKEpTQzo6U3RydWN0dXJlKiwg
SlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRl
QnVpbHRJbnM+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmNwcAkocmV2
aXNpb24gMjcwODY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIxNCw3ICsyMTQsNyBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeVVuZm9yZ2VhCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12
b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllczo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0
aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJs
ZVByb3BlcnRpZXM6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0gSlND
OjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcyo+KG9i
amVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5oCShyZXZpc2lvbiAyNzA4NjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0TmFtZWRTZXR0ZXJXaXRoTGVn
YWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1
ZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90
Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQ
cm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6
SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYs
IEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3Rh
dGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkRvbnRFbnVtUHJvcGVydGll
c01vZGUpOwogICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5
U2xvdCYpOwogICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNP
YmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpT
Qzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CkBAIC02NCw3ICs2NCw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6
OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVy
dHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6Okhhc1N0YXRpY1Byb3BlcnR5
VGFibGUgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMg
fCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVy
dHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVG
b3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6Okhhc1N0YXRpY1Byb3BlcnR5VGFibGUgfCBKU0M6Oklu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8g
fCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVk
OgogICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcyhK
U0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXM+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5m
b3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVp
bHRJbnMuY3BwCShyZXZpc2lvbiAyNzA4NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9w
ZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIx
NCw3ICsyMTQsNyBAQCBib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhCiAg
ICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4
aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJ
bnM6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5m
b3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGll
c01vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRo
TGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucyo+KG9i
amVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3Zl
cnJpZGVCdWlsdElucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3Bl
cnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmgJKHJldmlzaW9uIDI3MDg2NikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0
TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJp
ZGVCdWlsdElucyogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7
Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0
aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93
blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBz
dGF0aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQ
cm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBz
dGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsK
ICAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVz
Y3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7
CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXIm
KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJl
IHwgSlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJv
cGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNB
bnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Okdl
dE93blByb3BlcnR5U2xvdElzSW1wdXJlIHwgSlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwg
SlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNO
b3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKIHBy
b3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3Bl
cnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9i
YWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVy
dGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2
aXNpb24gMjcwODY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MzAsNyArMjUzMCw3IEBAIGJvb2wg
SlNUZXN0T2JqOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGUKICAgICByZXR1cm4gSlNPYmplY3Q6
OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBp
bmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNUZXN0T2JqOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lk
IEpTVGVzdE9iajo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBKU0M6
OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNUZXN0T2JqKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgJKHJldmlzaW9uIDI3MDg2NikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAkod29y
a2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFRlc3RPYmoq
IHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRp
YyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBK
U0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5h
bWVBcnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGljIEpTQzo6
Q2FsbERhdGEgZ2V0Q2FsbERhdGEoSlNDOjpKU0NlbGwqKTsKIAogICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDOjpKU0NlbGwqKTsKQEAgLTg1LDcgKzg1LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgdGVzdFN0YXRpY0N1c3RvbVByb21pc2VGdW5jdGlvbihKU0M6OkpTR2xv
YmFsT2JqZWN0JiwgSlNDOjpDYWxsRnJhbWUmLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKICAg
ICBKU0M6OkpTVmFsdWUgdGVzdEN1c3RvbVJldHVybnNPd25Qcm9taXNlRnVuY3Rpb24oSlNDOjpK
U0dsb2JhbE9iamVjdCYsIEpTQzo6Q2FsbEZyYW1lJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
SlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlG
b3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRDYWxsRGF0YSB8IEpTQzo6
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SGFzU3RhdGlj
UHJvcGVydHlUYWJsZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhF
dmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBKU0M6
Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RPYmooSlNDOjpTdHJ1Y3R1cmUqLCBKU0RP
TUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0T2JqPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
YnJpZGdlL05QX2pzb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlk
Z2UvTlBfanNvYmplY3QuY3BwCShyZXZpc2lvbiAyNzA4NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvTlBfanNvYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODcsNyArNDg3LDcgQEAg
Ym9vbCBfTlBOX0VudW1lcmF0ZShOUFAsIE5QT2JqZWN0KiBvLCBOUAogICAgICAgICBKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGdsb2JhbE9iamVjdDsKICAgICAgICAgUHJv
cGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5n
cywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwogCi0gICAgICAgIG9iai0+aW1wLT5tZXRo
b2RUYWJsZSh2bSktPmdldFByb3BlcnR5TmFtZXMob2JqLT5pbXAsIGxleGljYWxHbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAgb2JqLT5pbXAt
PmdldFByb3BlcnR5TmFtZXMobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgRG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7CiAgICAgICAgIHVuc2lnbmVkIHNpemUgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4ocHJvcGVydHlOYW1lcy5zaXplKCkpOwogICAgICAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgcmVhbGx5IGNhbGwgTlBOX01lbUFsbG9jIGJ1dCB0aGF0J3MgaW4g
V2ViS2l0CiAgICAgICAgIE5QSWRlbnRpZmllciogaWRlbnRpZmllcnMgPSBzdGF0aWNfY2FzdDxO
UElkZW50aWZpZXIqPihtYWxsb2Moc2l6ZW9mKE5QSWRlbnRpZmllcikgKiBzaXplKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwCShyZXZpc2lvbiAyNzA4NjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc1LDcgKzc1LDcgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGFycmF5TGVuZ3Ro
R2V0dAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIodGhpc09iamVjdC0+Z2V0
TGVuZ3RoKCkpKTsKIH0KIAotdm9pZCBSdW50aW1lQXJyYXk6OmdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFBy
b3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3Zv
aWQgUnVudGltZUFycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9
IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgUnVudGltZUFycmF5KiB0aGlzT2JqZWN0
ID0ganNDYXN0PFJ1bnRpbWVBcnJheSo+KG9iamVjdCk7CkBAIC04MywxMCArODMsMTAgQEAgdm9p
ZCBSdW50aW1lQXJyYXk6OmdldE93blByb3BlcnR5TmFtZXMoSgogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRp
Zmllcjo6ZnJvbSh2bSwgaSkpOwogCi0gICAgaWYgKG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVy
dGllcygpKQorICAgIGlmIChtb2RlID09IERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUp
CiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCk7CiAK
LSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICB0aGlzT2JqZWN0LT5nZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywg
bW9kZSk7CiB9CiAKIGJvb2wgUnVudGltZUFycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmpl
Y3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKQEAgLTEwMCw3ICsxMDAsNyBA
QCBib29sIFJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpTCiAgICAgCiAgICAgT3B0
aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpOwogICAgIGlm
IChpbmRleCAmJiBpbmRleC52YWx1ZSgpIDwgdGhpc09iamVjdC0+Z2V0TGVuZ3RoKCkpIHsKLSAg
ICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERl
bGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSwKKyAgICAgICAgc2xvdC5zZXRWYWx1
ZSh0aGlzT2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnREZWxldGUpLAogICAgICAgICAgICAgdGhpc09iamVjdC0+Z2V0Q29uY3JldGVBcnJheSgpLT52
YWx1ZUF0KGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LnZhbHVlKCkpKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpAQCAtMTEyLDcgKzExMiw3IEBAIGJvb2wgUnVudGltZUFycmF5Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUkKIHsKICAgICBSdW50aW1lQXJyYXkqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8UnVudGltZUFycmF5Kj4ob2JqZWN0KTsKICAgICBpZiAoaW5kZXggPCB0aGlzT2JqZWN0
LT5nZXRMZW5ndGgoKSkgewotICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtLAor
ICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSksCiAgICAgICAgICAgICB0aGlzT2JqZWN0LT5n
ZXRDb25jcmV0ZUFycmF5KCktPnZhbHVlQXQobGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgpKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdl
L3J1bnRpbWVfYXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVu
dGltZV9hcnJheS5oCShyZXZpc2lvbiAyNzA4NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
cnVudGltZV9hcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogY2xhc3MgUnVudGltZUFycmF5IGZpbmFsIDogcHVibGljIEpTQXJyYXkgewogcHVi
bGljOgogICAgIHVzaW5nIEJhc2UgPSBKU0FycmF5OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm8gfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVz
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5TmFtZXMgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rl
c3RydWN0aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6
OlN1YnNwYWNlQWNjZXNzPgpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgflJ1bnRpbWVB
cnJheSgpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICBzdGF0aWMg
dm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09i
amVjdCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0
YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVu
dGltZV9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50
aW1lX29iamVjdC5jcHAJKHJldmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9ydW50aW1lX29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MCw3ICsyODAsNyBAQCBD
YWxsRGF0YSBSdW50aW1lT2JqZWN0OjpnZXRDb25zdHJ1Y3REYXRhCiAgICAgcmV0dXJuIGNvbnN0
cnVjdERhdGE7CiB9CiAKLXZvaWQgUnVudGltZU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSkKK3ZvaWQgUnVu
dGltZU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUpCiB7CiAgICAgVk0mIHZtID0gbGV4aWNhbEds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuaAkocmV2aXNpb24g
MjcwODY2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgRXhjZXB0aW9uKiB0aHJvd1J1bnRpbWVPYmplY3RJ
bnZhbGlkQWNjZQogY2xhc3MgV0VCQ09SRV9FWFBPUlQgUnVudGltZU9iamVjdCA6IHB1YmxpYyBK
U05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9i
amVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlk
ZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGE7CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRhOwogICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIENhbGxEYXRhIGdldENhbGxEYXRhKEpTQ2VsbCopOwogICAgIHN0YXRpYyBDYWxs
RGF0YSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCopOwogCi0gICAgc3RhdGljIHZvaWQgZ2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVu
dW1Qcm9wZXJ0aWVzTW9kZSk7CiAKICAgICB2b2lkIGludmFsaWRhdGUoKTsKIApJbmRleDogU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cJKHJldmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjAtMTItMTUgIEFsZXhleSBTaHZheWthICA8c2h2
YWlrYWxlc2hAZ21haWwuY29tPgorCisgICAgICAgIFtKU0NdIFNpbXBsaWZ5IGdldCpQcm9wZXJ0
eU5hbWVzKCkgbWV0aG9kcyBhbmQgRW51bWVyYXRpb25Nb2RlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI5NTQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGp1c3QgZm9yIGNoYW5nZXMgaW4gSlNDJ3Mg
TWV0aG9kVGFibGUsIFR5cGVJbmZvLCBhbmQgRW51bWVyYXRpb25Nb2RlLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9Q
bHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpKU05QT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUvSlNOUE9iamVjdC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9OUEpTT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6ZW51bWVy
YXRlKToKKwogMjAyMC0xMi0xNSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNv
bT4KIAogICAgICAgICBJbWFnZSBleHRyYWN0aW9uIGludGVyYWN0aW9uIHNob3VsZCByZW1haW4g
YWN0aXZlIHdoaWxlIHNjcm9sbGluZwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1Bs
dWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAJKHJldmlzaW9uIDI3
MDg2NikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjUsNyArNDI1LDcgQEAgYm9vbCBKU05QT2Jq
ZWN0OjpkZWxldGVQcm9wZXJ0eShKU0dsb2JhbAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IEpTTlBPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVBcnJheSwgRW51bWVyYXRpb25Nb2RlKQordm9pZCBKU05QT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lQXJyYXksIERvbnRFbnVtUHJv
cGVydGllc01vZGUpCiB7CiAgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVj
dC5oCShyZXZpc2lvbiAyNzA4NjYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9KU05QT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAg
Y2xhc3MgTlBSdW50aW1lT2JqZWN0TWFwOwogY2xhc3MgSlNOUE9iamVjdCBmaW5hbCA6IHB1Ymxp
YyBKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0g
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Ok92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1l
cyB8IEpTQzo6T3ZlcnJpZGVzR2V0Q2FsbERhdGE7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMg
fCBKU0M6Ok92ZXJyaWRlc0dldENhbGxEYXRhOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQpAQCAtOTksNyArOTksNyBAQCBwcml2YXRlOgogCiAg
ICAgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgTlBJZGVudGlmaWVy
IHByb3BlcnR5TmFtZSk7CiAKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJh
eSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0
eU5hbWVBcnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAKICAgICBOUFJ1bnRp
bWVPYmplY3RNYXAqIG1fb2JqZWN0TWFwOwogICAgIE5QT2JqZWN0KiBtX25wT2JqZWN0OwpJbmRl
eDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvTlBKU09iamVjdC5jcHAJKHJldmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTMsNyArMjUzLDcgQEAgYm9vbCBOUEpTT2JqZWN0OjplbnVtZXJhdGUoTlBJZGVudGlmaWVy
KgogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKIAogICAgIFByb3BlcnR5TmFtZUFycmF5IHBy
b3BlcnR5TmFtZXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xN
b2RlOjpFeGNsdWRlKTsKLSAgICBtX2pzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldFByb3Bl
cnR5TmFtZXMobV9qc09iamVjdC5nZXQoKSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOworICAgIG1fanNPYmplY3QtPmdldFByb3BlcnR5TmFt
ZXMobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVz
TW9kZTo6RXhjbHVkZSk7CiAKICAgICBOUElkZW50aWZpZXIqIG5hbWVJZGVudGlmaWVycyA9IG5w
bk1lbU5ld0FycmF5PE5QSWRlbnRpZmllcj4ocHJvcGVydHlOYW1lcy5zaXplKCkpOwogCkluZGV4
OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzA4NjYpCisrKyBTb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBA
QAorMjAyMC0xMi0xNSAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CisK
KyAgICAgICAgW0pTQ10gU2ltcGxpZnkgZ2V0KlByb3BlcnR5TmFtZXMoKSBtZXRob2RzIGFuZCBF
bnVtZXJhdGlvbk1vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxMjk1NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tOgor
ICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmVudW1lcmF0ZSk6
CisKIDIwMjAtMTItMTQgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3MDc2OC4KSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHJldmlzaW9uIDI3MDg2NikKKysrIFNvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTI3Myw3ICsxMjczLDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6OmVudW1lcgogICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0ID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKTsKICAK
ICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2Rl
OjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7Ci0gICAgb2JqZWN0LT5tZXRo
b2RUYWJsZSh2bSktPmdldFByb3BlcnR5TmFtZXMob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgb2JqZWN0LT5nZXRQcm9w
ZXJ0eU5hbWVzKGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJv
cGVydGllc01vZGU6OkV4Y2x1ZGUpOwogCiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBh
cnJheSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0eU5hbWVzLnNpemUoKTsgaSsrKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416418</attachid>
            <date>2020-12-17 07:11:49 -0800</date>
            <delta_ts>2021-01-01 17:42:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212954-20201217171147.patch</filename>
            <type>text/plain</type>
            <size>213863</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzA5MzIpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIwIEBACisyMDIwLTEyLTE3ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBbSlNDXSBTaW1wbGlmeSBnZXQqUHJvcGVydHlOYW1lcygp
IG1ldGhvZHMgYW5kIEVudW1lcmF0aW9uTW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyOTU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBDaGFrcmFDb3JlLnlhbWw6CisgICAgICAgICogQ2hha3Jh
Q29yZS90ZXN0L0Jhc2ljcy9lbnVtLmJhc2VsaW5lLWpzYzogUmVtb3ZlZC4KKyAgICAgICAgKiBt
aWNyb2JlbmNobWFya3MvZm9yLWluLW9uLW9iamVjdC13aXRoLWxhemlseS1tYXRlcmlhbGl6ZWQt
cHJvcGVydGllcy5qczoKKyAgICAgICAgUmVtb3ZlZCBiZWNhdXNlIEVycm9ySW5zdGFuY2Ugbm8g
bG9uZ2VyIG1hdGVyaWFsaXplcyBwcm9wZXJ0aWVzIGR1cmluZyBmb3IvaW4gZW51bWVyYXRpb24u
CisKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3Mvb2JqZWN0LWtleXMtY2xvbmVkLWFyZ3VtZW50
cy5qczogQWRkZWQuCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL29iamVjdC1rZXlzLWVycm9y
LW9iamVjdC5qczogQWRkZWQuCisgICAgICAgICogc3RyZXNzL2FyZ3VtZW50cy1wcm9wZXJ0aWVz
LW9yZGVyLmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3MvZm9yLWluLXR5cGVkLWFycmF5Lmpz
OgorCiAyMDIwLTEyLTE1ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAg
ICAgICAgW0pTQ10gQWNjZXB0IGFyYml0cmFyeSBtb2R1bGUgbmFtZXNwYWNlIGlkZW50aWZpZXIg
bmFtZXMKSW5kZXg6IEpTVGVzdHMvQ2hha3JhQ29yZS55YW1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVz
dHMvQ2hha3JhQ29yZS55YW1sCShyZXZpc2lvbiAyNzA5MzIpCisrKyBKU1Rlc3RzL0NoYWtyYUNv
cmUueWFtbAkod29ya2luZyBjb3B5KQpAQCAtMzAzLDcgKzMwMyw3IEBACiAtIHBhdGg6IENoYWty
YUNvcmUvdGVzdC9CYXNpY3Mvc2Nhbi5qcwogICBjbWQ6IHJ1bkNoYWtyYSA6YmFzZWxpbmUsICJO
b0V4Y2VwdGlvbiIsICJzY2FuLmJhc2VsaW5lLWpzYyIsIFtdCiAtIHBhdGg6IENoYWtyYUNvcmUv
dGVzdC9CYXNpY3MvZW51bS5qcwotICBjbWQ6IHJ1bkNoYWtyYSA6YmFzZWxpbmUsICJOb0V4Y2Vw
dGlvbiIsICJlbnVtLmJhc2VsaW5lLWpzYyIsIFtdCisgIGNtZDogcnVuQ2hha3JhIDpwYXNzLCAi
Tm9FeGNlcHRpb24iLCAiIiwgW10KIC0gcGF0aDogQ2hha3JhQ29yZS90ZXN0L0Jhc2ljcy93aXRo
My5qcwogICBjbWQ6IHJ1bkNoYWtyYSA6YmFzZWxpbmUsICJOb0V4Y2VwdGlvbiIsICJ3aXRoMy5i
YXNlbGluZS1qc2MiLCBbXQogLSBwYXRoOiBDaGFrcmFDb3JlL3Rlc3QvQmFzaWNzL2Nyb3NzX3Np
dGVfYWNjZXNzb3JfbWFpbi5qcwpJbmRleDogSlNUZXN0cy9DaGFrcmFDb3JlL3Rlc3QvQmFzaWNz
L2VudW0uYmFzZWxpbmUtanNjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hha3JhQ29yZS90ZXN0
L0Jhc2ljcy9lbnVtLmJhc2VsaW5lLWpzYwkocmV2aXNpb24gMjcwOTMyKQorKysgSlNUZXN0cy9D
aGFrcmFDb3JlL3Rlc3QvQmFzaWNzL2VudW0uYmFzZWxpbmUtanNjCShub25leGlzdGVudCkKQEAg
LTEsMTE3ICswLDAgQEAKLXg6YS54Ci1xOmEucQotdTphLnEKLXo6Zi5wLnoKLXI6Zi5wLnIKLXk6
by5wLnkKLU9iamVjdCBhCi14Ci15Ci11Ci16Ci1NYXRoCi11Ci14Ci15Ci16Ci1BcnJheQotdQot
eAoteQotegotQXJyYXkucHJvdG90eXBlCi11Ci14Ci15Ci16Ci1EYXRlCi11Ci14Ci15Ci16Ci1O
dW1iZXIKLXUKLXgKLXkKLXoKLVN0cmluZwotdQoteAoteQotegotT2JqZWN0LnByb3RvdHlwZQot
dQoteAoteQotegotT2JqZWN0Ci11Ci14Ci15Ci16Ci1BcnJheS5wcm90b3R5cGUuc29ydAotdQot
eAoteQotegotZnVuY3Rpb24gZm9vCi11Ci14Ci15Ci16Ci14Ci11Ci15Ci16Ci1tZSBoZXJlCi1w
cm90b3R5cGUgY2hhaW4KLXUKLXgKLXkKLXoKLUxpdGVyYWwgU3RyaW5nCi0wCi0xCi0yCi0zCi00
Ci01Ci02Ci03Ci04Ci05Ci16egotdQoteAoteQotegotU3RyaW5nIE9iamVjdAoteHgKLXl5Ci0w
Ci0xCi0yCi0zCi00Ci01Ci02Ci03Ci04Ci05Ci0xMAotMTEKLXp6Ci11Ci14Ci15Ci16Ci01Ci11
Ci14Ci15Ci16Ci0zCi11Ci14Ci15Ci16CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9m
b3ItaW4tb24tb2JqZWN0LXdpdGgtbGF6aWx5LW1hdGVyaWFsaXplZC1wcm9wZXJ0aWVzLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1vbi1vYmplY3Qtd2l0
aC1sYXppbHktbWF0ZXJpYWxpemVkLXByb3BlcnRpZXMuanMJKHJldmlzaW9uIDI3MDkzMikKKysr
IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1vbi1vYmplY3Qtd2l0aC1sYXppbHktbWF0
ZXJpYWxpemVkLXByb3BlcnRpZXMuanMJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNSArMCwwIEBACi0v
L0Agc2tpcCBpZiAkbW9kZWwgPT0gIkFwcGxlIFdhdGNoIFNlcmllcyAzIiAjIGFkZGVkIGJ5IG1h
cmstanNjLXN0cmVzcy10ZXN0LnB5Ci1mdW5jdGlvbiBmb28obykgewotICAgIHZhciBjb3VudCA9
IDA7Ci0gICAgZm9yICh2YXIgcCBpbiBvKSB7Ci0gICAgICAgIGlmIChvW3BdKQotICAgICAgICAg
ICAgY291bnQgKys7Ci0gICAgfQotICAgIHJldHVybiBjb3VudDsKLX0KLW5vSW5saW5lKGZvbyk7
Ci0KLXZhciB0b3RhbCA9IDA7Ci1mb3IgKGxldCBqID0gMDsgaiA8IDEwMDAwMDsgKytqKQotICAg
IHRvdGFsICs9IGZvbyhuZXcgRXJyb3IpOwotCkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJr
cy9vYmplY3Qta2V5cy1jbG9uZWQtYXJndW1lbnRzLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMv
bWljcm9iZW5jaG1hcmtzL29iamVjdC1rZXlzLWNsb25lZC1hcmd1bWVudHMuanMJKG5vbmV4aXN0
ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3Mvb2JqZWN0LWtleXMtY2xvbmVkLWFyZ3Vt
ZW50cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkgQEAKK25vSW5saW5lKE9iamVjdC5r
ZXlzKTsKKworZnVuY3Rpb24gZ2V0QXJncyhhLCBiLCBjKSB7CisgICAgInVzZSBzdHJpY3QiOwor
ICAgIHJldHVybiBhcmd1bWVudHM7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMmU1OyArK2kp
CisgICAgT2JqZWN0LmtleXMoZ2V0QXJncygxLCAyLCAzKSk7CkluZGV4OiBKU1Rlc3RzL21pY3Jv
YmVuY2htYXJrcy9vYmplY3Qta2V5cy1lcnJvci1vYmplY3QuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNU
ZXN0cy9taWNyb2JlbmNobWFya3Mvb2JqZWN0LWtleXMtZXJyb3Itb2JqZWN0LmpzCShub25leGlz
dGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL29iamVjdC1rZXlzLWVycm9yLW9iamVj
dC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKK25vSW5saW5lKE9iamVjdC5rZXlz
KTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAyZTU7ICsraSkKKyAgICBPYmplY3Qua2V5cyhuZXcg
RXJyb3IoKSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9hcmd1bWVudHMtcHJvcGVydGllcy1vcmRl
ci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9hcmd1bWVudHMtcHJvcGVydGllcy1v
cmRlci5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9hcmd1bWVudHMtcHJvcGVy
dGllcy1vcmRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc5IEBACitmdW5jdGlvbiBn
ZXRNYXBwZWRBcmd1bWVudHMoYSwgYikgeyByZXR1cm4gYXJndW1lbnRzOyB9CitmdW5jdGlvbiBn
ZXRVbm1hcHBlZEFyZ3VtZW50cyhhLCBiKSB7ICJ1c2Ugc3RyaWN0IjsgcmV0dXJuIGFyZ3VtZW50
czsgfQorCitmdW5jdGlvbiBzaG91bGRCZUFycmF5KGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICB2
YXIgaXNFcXVhbCA9CisgICAgICAgIGFjdHVhbC5sZW5ndGggPT09IGV4cGVjdGVkLmxlbmd0aCAm
JgorICAgICAgICBhY3R1YWwuZXZlcnkoKGl0ZW0sIGluZGV4KSA9PiBpdGVtID09PSBleHBlY3Rl
ZFtpbmRleF0pOworICAgIGlmICghaXNFcXVhbCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBF
eHBlY3RlZCBbJHthY3R1YWwubWFwKFN0cmluZyl9XSB0byBlcXVhbCBbJHtleHBlY3RlZC5tYXAo
U3RyaW5nKX1dYCk7Cit9CisKK2Z1bmN0aW9uIGZvckluKG9iamVjdCkgeworICAgIHZhciBrZXlz
ID0gW107CisgICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkKKyAgICAgICAga2V5cy5wdXNoKGtl
eSk7CisgICAgcmV0dXJuIGtleXM7Cit9CisKK25vSW5saW5lKGdldE1hcHBlZEFyZ3VtZW50cyk7
Citub0lubGluZShnZXRVbm1hcHBlZEFyZ3VtZW50cyk7Citub0lubGluZShmb3JJbik7CisKKyhm
dW5jdGlvbigpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAg
IHZhciBtYXBwZWRBcmd1bWVudHMgPSBnZXRNYXBwZWRBcmd1bWVudHMoMCwgMSwgMik7CisgICAg
ICAgIHNob3VsZEJlQXJyYXkoZm9ySW4obWFwcGVkQXJndW1lbnRzKSwgWyIwIiwgIjEiLCAiMiJd
KTsKKyAgICAgICAgc2hvdWxkQmVBcnJheShPYmplY3Qua2V5cyhtYXBwZWRBcmd1bWVudHMpLCBb
IjAiLCAiMSIsICIyIl0pOworICAgICAgICBzaG91bGRCZUFycmF5KFJlZmxlY3Qub3duS2V5cyht
YXBwZWRBcmd1bWVudHMpLCBbIjAiLCAiMSIsICIyIiwgImxlbmd0aCIsICJjYWxsZWUiLCBTeW1i
b2wuaXRlcmF0b3JdKTsKKworICAgICAgICB2YXIgdW5tYXBwZWRBcmd1bWVudHMgPSBnZXRVbm1h
cHBlZEFyZ3VtZW50cygwKTsKKyAgICAgICAgc2hvdWxkQmVBcnJheShmb3JJbih1bm1hcHBlZEFy
Z3VtZW50cyksIFsiMCJdKTsKKyAgICAgICAgc2hvdWxkQmVBcnJheShPYmplY3Qua2V5cyh1bm1h
cHBlZEFyZ3VtZW50cyksIFsiMCJdKTsKKyAgICAgICAgc2hvdWxkQmVBcnJheShSZWZsZWN0Lm93
bktleXModW5tYXBwZWRBcmd1bWVudHMpLCBbIjAiLCAibGVuZ3RoIiwgImNhbGxlZSIsIFN5bWJv
bC5pdGVyYXRvcl0pOworICAgIH0KK30pKCk7CisKKyhmdW5jdGlvbigpIHsKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIHZhciBtYXBwZWRBcmd1bWVudHMgPSBn
ZXRNYXBwZWRBcmd1bWVudHMoMCwgMSk7CisgICAgICAgIG1hcHBlZEFyZ3VtZW50c1s4XSA9IDg7
CisgICAgICAgIG1hcHBlZEFyZ3VtZW50c1syXSA9IDI7CisgICAgICAgIHNob3VsZEJlQXJyYXko
Zm9ySW4obWFwcGVkQXJndW1lbnRzKSwgWyIwIiwgIjEiLCAiMiIsICI4Il0pOworICAgICAgICBz
aG91bGRCZUFycmF5KE9iamVjdC5rZXlzKG1hcHBlZEFyZ3VtZW50cyksIFsiMCIsICIxIiwgIjIi
LCAiOCJdKTsKKyAgICAgICAgc2hvdWxkQmVBcnJheShSZWZsZWN0Lm93bktleXMobWFwcGVkQXJn
dW1lbnRzKSwgWyIwIiwgIjEiLCAiMiIsICI4IiwgImxlbmd0aCIsICJjYWxsZWUiLCBTeW1ib2wu
aXRlcmF0b3JdKTsKKworICAgICAgICB2YXIgdW5tYXBwZWRBcmd1bWVudHMgPSBnZXRVbm1hcHBl
ZEFyZ3VtZW50cygpOworICAgICAgICB1bm1hcHBlZEFyZ3VtZW50c1sxMl0gPSAxMjsKKyAgICAg
ICAgdW5tYXBwZWRBcmd1bWVudHNbM10gPSAzOworICAgICAgICBzaG91bGRCZUFycmF5KGZvcklu
KHVubWFwcGVkQXJndW1lbnRzKSwgWyIzIiwgIjEyIl0pOworICAgICAgICBzaG91bGRCZUFycmF5
KE9iamVjdC5rZXlzKHVubWFwcGVkQXJndW1lbnRzKSwgWyIzIiwgIjEyIl0pOworICAgICAgICBz
aG91bGRCZUFycmF5KFJlZmxlY3Qub3duS2V5cyh1bm1hcHBlZEFyZ3VtZW50cyksIFsiMyIsICIx
MiIsICJsZW5ndGgiLCAiY2FsbGVlIiwgU3ltYm9sLml0ZXJhdG9yXSk7CisgICAgfQorfSkoKTsK
KworKGZ1bmN0aW9uKCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAg
ICAgICAgdmFyIG1hcHBlZEFyZ3VtZW50cyA9IGdldE1hcHBlZEFyZ3VtZW50cygwKTsKKyAgICAg
ICAgbWFwcGVkQXJndW1lbnRzLmZvbyA9IDE7CisgICAgICAgIG1hcHBlZEFyZ3VtZW50cy5iYXIg
PSAyOworICAgICAgICBzaG91bGRCZUFycmF5KGZvckluKG1hcHBlZEFyZ3VtZW50cyksIFsiMCIs
ICJmb28iLCAiYmFyIl0pOworICAgICAgICBzaG91bGRCZUFycmF5KE9iamVjdC5rZXlzKG1hcHBl
ZEFyZ3VtZW50cyksIFsiMCIsICJmb28iLCAiYmFyIl0pOworICAgICAgICAvLyBGSVhNRTogU3lt
Ym9sLml0ZXJhdG9yIHNob3VsZCBjb21lIGFmdGVyICJmb28iIGFuZCAiYmFyIiAKKyAgICAgICAg
Ly8gc2hvdWxkQmVBcnJheShSZWZsZWN0Lm93bktleXMobWFwcGVkQXJndW1lbnRzKSwgWyIwIiwg
Imxlbmd0aCIsICJjYWxsZWUiLCAiZm9vIiwgImJhciIsIFN5bWJvbC5pdGVyYXRvcl0pOworCisg
ICAgICAgIHZhciB1bm1hcHBlZEFyZ3VtZW50cyA9IGdldFVubWFwcGVkQXJndW1lbnRzKDAsIDEs
IDIpOworICAgICAgICB1bm1hcHBlZEFyZ3VtZW50cy5mb28gPSAxOworICAgICAgICB1bm1hcHBl
ZEFyZ3VtZW50cy5iYXIgPSAyOworICAgICAgICBzaG91bGRCZUFycmF5KGZvckluKHVubWFwcGVk
QXJndW1lbnRzKSwgWyIwIiwgIjEiLCAiMiIsICJmb28iLCAiYmFyIl0pOworICAgICAgICBzaG91
bGRCZUFycmF5KE9iamVjdC5rZXlzKHVubWFwcGVkQXJndW1lbnRzKSwgWyIwIiwgIjEiLCAiMiIs
ICJmb28iLCAiYmFyIl0pOworICAgICAgICAvLyBGSVhNRTogImNhbGxlZSIgc2hvdWxkIGNvbWUg
YmVmb3JlICJmb28iIGFuZCAiYmFyIgorICAgICAgICAvLyBzaG91bGRCZUFycmF5KFJlZmxlY3Qu
b3duS2V5cyh1bm1hcHBlZEFyZ3VtZW50cyksIFsiMCIsICIxIiwgIjIiLCAibGVuZ3RoIiwgImNh
bGxlZSIsICJmb28iLCAiYmFyIiwgU3ltYm9sLml0ZXJhdG9yXSk7CisgICAgfQorfSkoKTsKKwor
Ly8gRklYTUU6IEFkZCBtb3JlIHRlc3RzLCBjb3ZlcmluZzoKKy8vICogYWRkZWQgc3ltYm9sIHBy
b3BlcnRpZXM7CisvLyAqIGFkZGVkIHRvZ2V0aGVyIGluZGV4LCBub24taW5kZXgsIGFuZCBzeW1i
b2wgcHJvcGVydGllczsKKy8vICogZGVsZXRlZCwgcmUtYWRkZWQsIGFuZCByZWRlZmluZWQgYXMg
RG9udEVudW0gaW5kZXggcHJvcGVydGllcywgYm90aCB3aXRoaW4gYW5kIGJleW9uZCAibGVuZ3Ro
IjsKKy8vICogZGVsZXRlZCwgcmUtYWRkZWQsIGFuZCByZWRlZmluZWQgYXMgRG9udEVudW0gImxl
bmd0aCIsICJjYWxsZWUiLCBhbmQgU3ltYm9sLml0ZXJhdG9yIHByb3BlcnRpZXMuCkluZGV4OiBK
U1Rlc3RzL3N0cmVzcy9mb3ItaW4tdHlwZWQtYXJyYXkuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0
cy9zdHJlc3MvZm9yLWluLXR5cGVkLWFycmF5LmpzCShyZXZpc2lvbiAyNzA5MzIpCisrKyBKU1Rl
c3RzL3N0cmVzcy9mb3ItaW4tdHlwZWQtYXJyYXkuanMJKHdvcmtpbmcgY29weSkKQEAgLTE2LDMg
KzE2LDI1IEBACiAgICAgfQogICAgIGZvbyhudWxsKTsKIH0pKCk7CisKKyhmdW5jdGlvbigpIHsK
KyAgICBmdW5jdGlvbiBmb3JJbigpIHsKKyAgICAgICAgdmFyIGEgPSBuZXcgSW50MzJBcnJheSg0
KTsKKyAgICAgICAgYS5mb28gPSAxOworICAgICAgICBhLmJhciA9IDI7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGFbaV0gPSBpOworCisg
ICAgICAgIHZhciBrZXlzID0gW107CisgICAgICAgIGZvciAodmFyIGsgaW4gYSkKKyAgICAgICAg
ICAgIGtleXMucHVzaChrKTsKKyAgICAgICAgcmV0dXJuIGtleXMuam9pbigifCIpOworICAgIH0K
KyAgICBub0lubGluZShmb3JJbik7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytp
KSB7CisgICAgICAgIHZhciBrZXlzID0gZm9ySW4oKTsKKyAgICAgICAgaWYgKGtleXMgIT09ICIw
fDF8MnwzfGZvb3xiYXIiKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgcmVzdWx0
OiAke2tleXN9YCk7CisgICAgfQorfSkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwko
cmV2aXNpb24gMjcwOTMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDIxOSBAQAorMjAyMC0xMi0xNyAgQWxleGV5IFNodmF5a2Eg
IDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CisKKyAgICAgICAgW0pTQ10gU2ltcGxpZnkgZ2V0KlBy
b3BlcnR5TmFtZXMoKSBtZXRob2RzIGFuZCBFbnVtZXJhdGlvbk1vZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjk1NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZm9yZSB0aGlzIGNoYW5nZSwgW1tP
d25Qcm9wZXJ0eUtleXNdXSBvdmVycmlkZXMgd2VyZSBzb21ldGltZXMgaW1wbGVtZW50ZWQKKyAg
ICAgICAgaW5jb25zaXN0ZW50bHksIHZpYSBkaWZmZXJlbnQgZ2V0KlByb3BlcnR5TmFtZXMoKSBt
ZXRob2RzIHRoYXQgZHVwbGljYXRlZCBsb2dpYworICAgICAgICAoZS5nLiBFcnJvckluc3RhbmNl
LCBSZWdFeHBPYmplY3QsIGFuZCBTdHJpbmdPYmplY3QpLgorCisgICAgICAgIFRoaXMgcGF0Y2g6
CisKKyAgICAgICAgMS4gSW50cm9kdWNlcyBhIGNsZWFyIGNvbnZlbnRpb24gdG8gaW1wbGVtZW50
IFtbT3duUHJvcGVydHlLZXlzXV0gb3ZlcnJpZGVzOgorICAgICAgICAgICBpZiBpdCdzIGRlZmlu
ZWQgYnkgdGhlIHNwZWMsIGdldE93blByb3BlcnR5TmFtZXMoKSBtZXRob2QgaXMgdXNlZDsgb3Ro
ZXJ3aXNlLAorICAgICAgICAgICBub24tbWF0ZXJpYWxpemVkIHByb3BlcnRpZXMgYXJlIGVudW1l
cmF0ZWQgLyByZWlmaWVkIGluIGdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKCkuCisgICAgICAg
ICAgIFdoaWxlIG5vIGNsYXNzIHNob3VsZCBkZWZpbmUgYm90aCBtZXRob2RzLCB3ZSBkb24ndCBh
c3NlcnQgdGhpcyB0byBzdXBwb3J0IGluaGVyaXRhbmNlLgorCisgICAgICAgICAgIFJlbW92ZXMg
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKCkgZnJvbSB0aGUgbWV0aG9kIHRhYmxlIGFuZCBj
b252ZXJ0cyBpdCB0byBpbnN0YW5jZQorICAgICAgICAgICBtZXRob2Q7IGl0cyBvdmVycmlkZXMg
d2VyZSByZW5hbWVkIHRvIGdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKCkgYW5kIGV4ZW1wdGVk
IGZyb20KKyAgICAgICAgICAgY2FsbGluZyB0aGUgbm8tb3AgYmFzZSBtZXRob2QuCisKKyAgICAg
ICAgICAgVGhpcyBhcHByb2FjaCB3YXMgY2hvc2VuLCBpbnN0ZWFkIG9mIGdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcygpIG92ZXJyaWRlLCBiZWNhdXNlCisgICAgICAgICAgIGZvci9pbiBlbnVt
ZXJhdGlvbiBtdXN0IGJlIHN1cmUgdGhlcmUgYXJlIG5vIGVudW1lcmFibGUgcHJvcGVydGllcyBi
ZXR3ZWVuCisgICAgICAgICAgIGdldEVudW1lcmFibGVMZW5ndGgoKSBhbmQgdGhlIGZpcnN0IHN0
cnVjdHVyZSBwcm9wZXJ0eS4KKworICAgICAgICAgICBBbHNvLCByZW1vdmVzIGdldFN0cnVjdHVy
ZVByb3BlcnR5TmFtZXMoKSBmcm9tIHRoZSBtZXRob2QgdGFibGUgYXMgaXQncyB1bnJlYXNvbmFi
bGUKKyAgICAgICAgICAgdG8gb3ZlcnJpZGUgaXQuCisKKyAgICAgICAgMi4gRXh0cmFjdHMgSlNP
YmplY3Q6OmdldE93bkluZGV4UHJvcGVydHlOYW1lcygpIGluc3RhbmNlIG1ldGhvZCB0byBlbmZv
cmNlCisgICAgICAgICAgIGNvcnJlY3QgZW51bWVyYXRpb24gb3JkZXIgaW4gZ2V0T3duUHJvcGVy
dHlOYW1lcygpIG92ZXJyaWRlczogc3BlY2lhbCBpbmRpY2VzID0+CisgICAgICAgICAgIGJ1dHRl
cmZseSBzdG9yYWdlID0+IHNwZWNpYWwgcHJvcGVydGllcyA9PiBub24tcmVpZmllZCBzdGF0aWMg
PT4gc3RydWN0dXJlIHByb3BlcnRpZXMuCisKKyAgICAgICAgICAgTG9vc2UgbW9kZSBgYXJndW1l
bnRzYCB3ZXJlIGZpeGVkIHRvIGVudW1lcmF0ZSBpbmRpY2VzIGZyb20gYnV0dGVyZmx5IHN0b3Jh
Z2UgYmVmb3JlCisgICAgICAgICAgIHNwZWNpYWwgcHJvcGVydGllcyBbMV0sIGFsaWduaW5nIEpT
QyB3aXRoIFY4IGFuZCBTcGlkZXJNb25rZXkuCisKKyAgICAgICAgMy4gUmV3b3JrcyBmb3IvaW4g
ZW51bWVyYXRpb24gc28gdGhlIHNwZWNpYWwgcHJvcGVydGllcyBhbHdheXMgY29tZSBiZWZvcmUg
c3RydWN0dXJlIG9uZXMsCisgICAgICAgICAgIGFsaWduaW5nIGVudW1lcmF0aW9uIG9yZGVyIG9m
IFN0cmluZyBvYmplY3RzIFsyXSBhbmQgdHlwZWQgYXJyYXlzIFszXSB0aGF0IGhhdmUgZXhwYW5k
bworICAgICAgICAgICBwcm9wZXJ0aWVzIHdpdGggdGhlIHNwZWMsIFY4LCBhbmQgU3BpZGVyTW9u
a2V5LgorCisgICAgICAgICAgIFJlbW92ZXMgZ2V0UHJvcGVydHlOYW1lcygpIGFuZCBnZXRHZW5l
cmljUHJvcGVydHlOYW1lcygpIGZyb20gdGhlIG1ldGhvZCB0YWJsZSwgYWxvbmcKKyAgICAgICAg
ICAgd2l0aCB0aGVpciBvdmVycmlkZXMsIGJlY2F1c2UgRVM3IGRpc2FibGVkIGN1c3RvbWl6YXRp
b24gb2YgZm9yL2luIGVudW1lcmF0aW9uIFs0XS4KKyAgICAgICAgICAgSW5zdGVhZCwgSlNPYmpl
Y3Q6OmdldFByb3BlcnR5TmFtZXMoKSBpbnN0YW5jZSBtZXRob2QgYW5kIGdldEVudW1lcmFibGVQ
cm9wZXJ0eU5hbWVzKCkKKyAgICAgICAgICAgYXJlIGludHJvZHVjZWQsIGZlYXR1cmluZyBhIGxv
b3AgaW5zdGVhZCBvZiByZWN1cnNpb24uCisKKyAgICAgICAgICAgQWxzbywgdGhpcyBlbmFibGVk
IGRyb3BwaW5nIGhhcmQtdG8tZm9sbG93IEpTT2JqZWN0UHJvcGVydGllc01vZGUgYml0IGFuZCBz
aW1wbGlmeWluZworICAgICAgICAgICBFbnVtZXJhdGlvbk1vZGUgdG8gYW4gZW51bS4KKworICAg
ICAgICBmb3IvaW4gYW5kIE9iamVjdC5rZXlzIG1pY3JvYmVuY2htYXJrcyBhcmUgbmV1dHJhbC4g
VGhpcyBjaGFuZ2UgZG9lcyBub3QgYWZmZWN0CisgICAgICAgIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvciBjYWNoaW5nLCBub3IgZmFzdCBwYXRocyBvZiBpdHMgYnl0ZWNvZGVzLgorCisgICAgICAg
IFsxXTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVtYXBwZWRhcmd1bWVudHNv
YmplY3QgKHN0ZXBzIDE1LTE2IGFuZCAyMC0yMSkKKyAgICAgICAgWzJdOiBodHRwczovL3RjMzku
ZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy1leG90aWMtb2JqZWN0cy1vd25wcm9wZXJ0eWtleXMKKyAg
ICAgICAgWzNdOiBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWludGVnZXItaW5kZXhlZC1l
eG90aWMtb2JqZWN0cy1vd25wcm9wZXJ0eWtleXMKKyAgICAgICAgWzRdOiBodHRwczovL2dpdGh1
Yi5jb20vdGMzOS9lY21hMjYyL3B1bGwvMzY3CisKKyAgICAgICAgKiBBUEkvSlNBUElWYWx1ZVdy
YXBwZXIuaDoKKyAgICAgICAgUmVtb3ZlIE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFt
ZXMgc3RydWN0dXJlIGZsYWcgYXMgaXQgc2hvdWxkIG5ldmVyIGJlIHF1ZXJpZWQKKyAgICAgICAg
ZnJvbSBKU0NlbGwgaW5zdGFuY2VzLgorCisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3Qu
aDoKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oOgorICAgICAgICAo
SlNDOjpKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAqIEFQSS9KU09iamVjdFJlZi5jcHA6
CisgICAgICAgIChKU09iamVjdENvcHlQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBiaW5kaW5n
cy9TY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OmpzVG9JbnNwZWN0b3JWYWx1
ZSk6CisgICAgICAgICogYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmg6
CisgICAgICAgIChKU0M6Ok9iamVjdEFsbG9jYXRpb25Qcm9maWxlQmFzZTxEZXJpdmVkPjo6cG9z
c2libGVEZWZhdWx0UHJvcGVydHlDb3VudCk6CisgICAgICAgIFVzZSBEb250RW51bVByb3BlcnR5
TW9kZTo6SW5jbHVkZSBhcyB0aGUgaW50ZW50IGlzIHRvIGNvdW50IGFsbCBwcm9wZXJ0aWVzLCBl
dmVuCisgICAgICAgIHByaXZhdGUgc3ltYm9scy4gRW51bWVyYXRpb25Nb2RlKCkgZGVmYXVsdHMg
ZGlkIGV4Y2x1ZGUgbm9uLWVudW1lcmFibGUgcHJvcGVydGllcy4KKworICAgICAgICAqIGRlYnVn
Z2VyL0RlYnVnZ2VyU2NvcGUuY3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmg6Cisg
ICAgICAgICogcnVudGltZS9DbGFzc0luZm8uaDoKKyAgICAgICAgKiBydW50aW1lL0Nsb25lZEFy
Z3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OkNsb25lZEFyZ3VtZW50czo6Z2V0T3duU3BlY2lh
bFByb3BlcnR5TmFtZXMpOgorICAgICAgICBEb24ndCBtYXRlcmlhbGl6ZSBEb250RW51bSBwcm9w
ZXJ0aWVzIHVubGVzcyBpdCdzIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUsCisgICAg
ICAgIGFkdmFuY2luZyBwcm92aWRlZCBtaWNyb2JlbmNobWFyayBieSB+MjMlLgorCisgICAgICAg
IChKU0M6OkNsb25lZEFyZ3VtZW50czo6Z2V0T3duUHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisg
ICAgICAgICogcnVudGltZS9DbG9uZWRBcmd1bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1lL0Vu
dW1lcmF0aW9uTW9kZS5oOgorICAgICAgICBFeHBsaWNpdGx5IHNwZWNpZnkgZW51bSB0eXBlIHRv
IHJlZHVjZSBpdHMgc2l6ZS4KKworICAgICAgICAoSlNDOjpFbnVtZXJhdGlvbk1vZGU6OkVudW1l
cmF0aW9uTW9kZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkVudW1lcmF0aW9uTW9kZTo6aW5j
bHVkZURvbnRFbnVtUHJvcGVydGllcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkVudW1lcmF0
aW9uTW9kZTo6aW5jbHVkZUpTT2JqZWN0UHJvcGVydGllcyk6IERlbGV0ZWQuCisgICAgICAgICog
cnVudGltZS9FcnJvckluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6
Z2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMpOgorICAgICAgICBEb24ndCBtYXRlcmlhbGl6ZSBE
b250RW51bSBwcm9wZXJ0aWVzIHVubGVzcyBpdCdzIERvbnRFbnVtUHJvcGVydGllc01vZGU6Oklu
Y2x1ZGUsCisgICAgICAgIGFkdmFuY2luZyBwcm92aWRlZCBtaWNyb2JlbmNobWFyayBieSBhIGZh
Y3RvciBvZiA1LgorCisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OmdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6Omdl
dFN0cnVjdHVyZVByb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvRXJy
b3JJbnN0YW5jZS5oOgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oOgorICAg
ICAgICAqIHJ1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICog
cnVudGltZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duU3BlY2lh
bFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRPd25TcGVjaWFsUHJvcGVy
dHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRQcm9wZXJ0eU5hbWVzKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVz
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRHZW5lcmljUHJvcGVydHlOYW1l
cyk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKiBydW50
aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRPd25TcGVj
aWFsUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9u
Lmg6CisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIFJlbW92ZSBP
dmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHN0cnVjdHVyZSBmbGFnIGFzIGl0J3Mg
aW5oZXJpdGVkIGZyb20KKyAgICAgICAgSlNTeW1ib2xUYWJsZU9iamVjdCwgYW5kIEpTR2xvYmFs
T2JqZWN0IGl0c2VsZiBkb2Vzbid0IG92ZXJyaWRlIGdldE93bipQcm9wZXJ0eU5hbWVzKCkuCisK
KyAgICAgICAgKiBydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNMZXhpY2FsRW52aXJvbm1lbnQ6OmdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKToKKyAg
ICAgICAgKEpTQzo6SlNMZXhpY2FsRW52aXJvbm1lbnQ6OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5o
OgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHA6CisgICAgICAgIChK
U0M6OkpTTW9kdWxlRW52aXJvbm1lbnQ6OmdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKToKKyAg
ICAgICAgKEpTQzo6SlNNb2R1bGVFbnZpcm9ubWVudDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaDoK
KyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcDoKKyAgICAgICAg
KEpTQzo6SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAg
ICAgICBDYWxsIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcygpIGRpcmVjdGx5LCBndWFyZGVk
IGJ5IGluY2x1ZGVTeW1ib2xQcm9wZXJ0aWVzKCkgY2hlY2ssCisgICAgICAgIHNpbmNlIG1vZHVs
ZSBuYW1lc3BhY2Ugb2JqZWN0cyBjYW4ndCBoYXZlIHN0cmluZyBwcm9wZXJ0aWVzIGJlc2lkZXMg
bV9uYW1lcy4KKyAgICAgICAgKFNlZSBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1vZHVs
ZS1uYW1lc3BhY2UtZXhvdGljLW9iamVjdHMtZGVmaW5lb3ducHJvcGVydHktcC1kZXNjKQorCisg
ICAgICAgICogcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oOgorICAgICAgICAqIHJ1
bnRpbWUvSlNPTk9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjpIb2xkZXI6
OmFwcGVuZE5leHRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OldhbGtlcjo6d2Fsayk6CisgICAg
ICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRO
b25SZWlmaWVkU3RhdGljUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpn
ZXRQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5
TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duU3BlY2lhbFByb3BlcnR5TmFt
ZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duSW5kZXhlZFByb3BlcnR5TmFtZXMp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToK
KyAgICAgICAgKEpTQzo6Z2V0Q2xhc3NQcm9wZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMpOiBEZWxldGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdl
dE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OmdldEVudW1lcmFibGVQcm9wZXJ0eU5h
bWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oOgorICAg
ICAgICAoSlNDOjpwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pT
UHJveHkuY3BwOgorICAgICAgICAoSlNDOjpKU1Byb3h5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToK
KyAgICAgICAgKEpTQzo6SlNQcm94eTo6Z2V0UHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpTUHJveHk6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpKU1Byb3h5OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyk6IERlbGV0ZWQu
CisgICAgICAgICogcnVudGltZS9KU1Byb3h5Lmg6CisgICAgICAgICogcnVudGltZS9KU1N5bWJv
bFRhYmxlT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0
T3duU3BlY2lhbFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxlT2Jq
ZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAqIHJ1
bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlSW5m
by5oOgorICAgICAgICAoSlNDOjpUeXBlSW5mbzo6b3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1l
cyBjb25zdCk6CisgICAgICAgIChKU0M6OlR5cGVJbmZvOjpvdmVycmlkZXNHZXRPd25TcGVjaWFs
UHJvcGVydHlOYW1lcyBjb25zdCk6CisgICAgICAgIChKU0M6OlR5cGVJbmZvOjpvdmVycmlkZXNB
bnlGb3JtT2ZHZXRPd25Qcm9wZXJ0eU5hbWVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VHlwZUlu
Zm86Om92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpUeXBlSW5mbzo6b3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyk6Cisg
ICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgIChKU0M6OmRl
ZmluZVByb3BlcnRpZXMpOgorICAgICAgICAoSlNDOjpzZXRJbnRlZ3JpdHlMZXZlbCk6CisgICAg
ICAgIChKU0M6OnRlc3RJbnRlZ3JpdHlMZXZlbCk6CisgICAgICAgIChKU0M6Om93blByb3BlcnR5
S2V5cyk6CisgICAgICAgICogcnVudGltZS9Qcm94eU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6
OlByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6
OlByb3h5T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6UHJveHlP
YmplY3Q6OmdldFByb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQcm94eU9i
amVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6UHJveHlPYmplY3Q6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpQcm94eU9iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMpOiBEZWxldGVk
LgorICAgICAgICAqIHJ1bnRpbWUvUHJveHlPYmplY3QuaDoKKyAgICAgICAgUmVtb3ZlIElzUXVp
Y2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRGb3JFbnVtZXJhdGlvbiBmbGFnIGZyb20gUHJveHlPYmpl
Y3QncyBzdHJ1Y3R1cmUKKyAgICAgICAgc2luY2UgY2FuQWNjZXNzUHJvcGVydGllc1F1aWNrbHlG
b3JFbnVtZXJhdGlvbigpIG5vdyBjaGVja3MgZm9yIG1ldGhvZCBvdmVycmlkZXMuCisKKyAgICAg
ICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVj
dDo6Z2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmpl
Y3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OlJlZ0V4cE9iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OlJlZ0V4cE9iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmpl
Y3QuY3BwOgorICAgICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMp
OgorICAgICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmplY3QuaDoKKyAgICAgICAg
KiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dmFsaWRh
dGVGbGFncyk6CisgICAgICAgIFN0cmVuZ3RoZW4gb3ZlcnJpZGVzR2V0T3duKlByb3BlcnR5TmFt
ZXMgYW5kIG92ZXJyaWRlc0dldFByb3RvdHlwZSBhc3NlcnRzIGludG8KKyAgICAgICAgZXF1aXZh
bGVuY2UgdGVzdHMuCisKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpnZXRQcm9wZXJ0eU5hbWVz
RnJvbVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2FuQWNjZXNzUHJvcGVy
dGllc1F1aWNrbHlGb3JFbnVtZXJhdGlvbiBjb25zdCk6CisgICAgICAgICogcnVudGltZS9TdHJ1
Y3R1cmUuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjpjYW5DYWNoZU93blByb3BlcnR5TmFtZXMgY29uc3QpOgorICAgICAg
ICAqIHRvb2xzL0pTRG9sbGFyVk0uY3BwOgorICAgICAgICBSZW1vdmUgT3ZlcnJpZGVzQW55Rm9y
bU9mR2V0UHJvcGVydHlOYW1lcyBzdHJ1Y3R1cmUgZmxhZyBhcyBpdCdzIGluaGVyaXRlZCBmcm9t
CisgICAgICAgIEpTQXJyYXksIGFuZCBSdW50aW1lQXJyYXkgaXRzZWxmIGRvZXNuJ3Qgb3ZlcnJp
ZGUgZ2V0T3duKlByb3BlcnR5TmFtZXMoKS4KKwogMjAyMC0xMi0xNiAgWXVzdWtlIFN1enVraSAg
PHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIE5vdCB1c2luZyBKSVRDYWdlIHRy
YW1wb2xpbmUgZm9yIG5vbiBKSVRDYWdlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0FQSVZhbHVlV3JhcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNBUElWYWx1ZVdyYXBwZXIuaAkocmV2aXNpb24gMjcwOTMyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVZhbHVlV3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMywxMyArMzMsNyBAQCBjbGFzcyBKU0FQSVZhbHVlV3JhcHBlciBmaW5hbCA6IHB1YmxpYyBK
CiAgICAgZnJpZW5kIEpTVmFsdWUganNBUElWYWx1ZVdyYXBwZXIoSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlKTsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNDZWxsOwotCi0gICAgLy8gT3Zl
cnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyAod2hpY2ggdXNlZCB0byBiZSBPdmVycmlk
ZXNHZXRQcm9wZXJ0eU5hbWVzKSB3YXMgaGVyZQotICAgIC8vIHNpbmNlIGFuY2llbnQgdGltZXMg
YmFjayB3aGVuIHdlIHBlc3NpbWlzdGljYWxseSBjaG9vc2UgdG8gYXBwbHkgdGhpcyBmbGFnLiBJ
IHRoaW5rIHdlCi0gICAgLy8gY2FuIHJlbW92ZSBpdCwgYnV0IHdlIHNob3VsZCBkbyBtb3JlIHRl
c3RpbmcgYmVmb3JlIHdlIGRvIHNvLgotICAgIC8vIFJlZjogaHR0cDovL3RyYWMud2Via2l0Lm9y
Zy9jaGFuZ2VzZXQvNDk2OTQvd2Via2l0I2ZpbGU5Ci0gICAgLy8gRklYTUU6IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI5NTQKLSAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlk
ZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKKyAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJh
Y2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2Fs
bGJhY2tPYmplY3QuaAkocmV2aXNpb24gMjcwOTMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw3ICsxMjUsNyBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgogY2xhc3MgSlNDYWxsYmFja09iamVjdCBmaW5hbCA6
IHB1YmxpYyBQYXJlbnQgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBQYXJlbnQ7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybyB8IEltcGxlbWVudHNIYXNJbnN0YW5jZSB8IE92ZXJyaWRlc0FueUZvcm1PZkdl
dFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRDYWxsRGF0YTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlO
YW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRhIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xv
dEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEltcGxlbWVudHNIYXNJbnN0YW5jZSB8
IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKICAgICBzdGF0aWNfYXNzZXJ0KCEoU3RydWN0dXJl
RmxhZ3MgJiBJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgInVzaW5nIGN1c3RvbUhhc0lu
c3RhbmNlIik7CiAKICAgICB+SlNDYWxsYmFja09iamVjdCgpOwpAQCAtMjExLDcgKzIxMSw3IEBA
IHByaXZhdGU6CiAKICAgICBzdGF0aWMgYm9vbCBjdXN0b21IYXNJbnN0YW5jZShKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25TcGVjaWFs
UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKIAogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRD
b25zdHJ1Y3REYXRhKEpTQ2VsbCopOwogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRDYWxsRGF0YShK
U0NlbGwqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVj
dEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
YWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiAyNzA5MzIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtNTY5LDcgKzU2OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8UGFy
ZW50PjoKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KLXZvaWQgSlNDYWxsYmFja09iamVj
dDxQYXJlbnQ+OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVu
dD46OmdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBE
b250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFs
T2JqZWN0KTsKICAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQ2Fs
bGJhY2tPYmplY3QqPihvYmplY3QpOwpAQCAtNTg4LDcgKzU4OCw3IEBAIHZvaWQgSlNDYWxsYmFj
a09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob24KICAgICAgICAgICAgIGZvciAoaXRlcmF0b3IgaXQg
PSBzdGF0aWNWYWx1ZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAg
ICAgIFN0cmluZ0ltcGwqIG5hbWUgPSBpdC0+a2V5LmdldCgpOwogICAgICAgICAgICAgICAgIFN0
YXRpY1ZhbHVlRW50cnkqIGVudHJ5ID0gaXQtPnZhbHVlLmdldCgpOwotICAgICAgICAgICAgICAg
IGlmIChlbnRyeS0+Z2V0UHJvcGVydHkgJiYgKCEoZW50cnktPmF0dHJpYnV0ZXMgJiBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnRFbnVtKSB8fCBtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMo
KSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZW50cnktPmdldFByb3BlcnR5ICYmIChtb2RlID09
IERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUgfHwgIShlbnRyeS0+YXR0cmlidXRlcyAm
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udEVudW0pKSkgewogICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoIW5hbWUtPmlzU3ltYm9sKCkpOwogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5h
bWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBTdHJpbmcobmFtZSkpKTsKICAgICAg
ICAgICAgICAgICB9CkBAIC02MDEsMTUgKzYwMSwxMyBAQCB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8
UGFyZW50Pjo6Z2V0T3duTm9uCiAgICAgICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gc3RhdGlj
RnVuY3Rpb25zLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICBT
dHJpbmdJbXBsKiBuYW1lID0gaXQtPmtleS5nZXQoKTsKICAgICAgICAgICAgICAgICBTdGF0aWNG
dW5jdGlvbkVudHJ5KiBlbnRyeSA9IGl0LT52YWx1ZS5nZXQoKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIShlbnRyeS0+YXR0cmlidXRlcyAmIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udEVudW0pIHx8
IG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKSB7CisgICAgICAgICAgICAgICAgaWYg
KG1vZGUgPT0gRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSB8fCAhKGVudHJ5LT5hdHRy
aWJ1dGVzICYga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RW51bSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKCFuYW1lLT5pc1N5bWJvbCgpKTsKICAgICAgICAgICAgICAgICAgICAgcHJv
cGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgU3RyaW5nKG5hbWUpKSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAg
IAotICAgIFBhcmVudDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQ
YXJlbnQ+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAko
cmV2aXNpb24gMjcwOTMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJl
Zi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwOCw3ICs4MDgsNyBAQCBKU1Byb3BlcnR5TmFtZUFy
cmF5UmVmIEpTT2JqZWN0Q29weVByb3BlCiAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhv
YmplY3QpOwogICAgIEpTUHJvcGVydHlOYW1lQXJyYXlSZWYgcHJvcGVydHlOYW1lcyA9IG5ldyBP
cGFxdWVKU1Byb3BlcnR5TmFtZUFycmF5KCZ2bSk7CiAgICAgUHJvcGVydHlOYW1lQXJyYXkgYXJy
YXkodm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNs
dWRlKTsKLSAgICBqc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzKGpz
T2JqZWN0LCBnbG9iYWxPYmplY3QsIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAganNP
YmplY3QtPmdldFByb3BlcnR5TmFtZXMoZ2xvYmFsT2JqZWN0LCBhcnJheSwgRG9udEVudW1Qcm9w
ZXJ0aWVzTW9kZTo6RXhjbHVkZSk7CiAKICAgICBzaXplX3Qgc2l6ZSA9IGFycmF5LnNpemUoKTsK
ICAgICBwcm9wZXJ0eU5hbWVzLT5hcnJheS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuY3Bw
CShyZXZpc2lvbiAyNzA5MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2Ny
aXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHN0YXRpYyBSZWZQ
dHI8SlNPTjo6VmFsdWU+IGpzVG9JbnNwZWN0b3IKICAgICAgICAgYXV0byBpbnNwZWN0b3JPYmpl
Y3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBhdXRvJiBvYmplY3QgPSAqdmFs
dWUuZ2V0T2JqZWN0KCk7CiAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMo
dm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRl
KTsKLSAgICAgICAgb2JqZWN0Lm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcygm
b2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsK
KyAgICAgICAgb2JqZWN0Lm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcygmb2Jq
ZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGU6
OkV4Y2x1ZGUpOwogICAgICAgICBmb3IgKGF1dG8mIG5hbWUgOiBwcm9wZXJ0eU5hbWVzKSB7CiAg
ICAgICAgICAgICBhdXRvIGluc3BlY3RvclZhbHVlID0ganNUb0luc3BlY3RvclZhbHVlKGdsb2Jh
bE9iamVjdCwgb2JqZWN0LmdldChnbG9iYWxPYmplY3QsIG5hbWUpLCBtYXhEZXB0aCk7CiAgICAg
ICAgICAgICBpZiAoIWluc3BlY3RvclZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlu
bGluZXMuaAkocmV2aXNpb24gMjcwOTMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDcsNyArMTQ3LDcgQEAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBPYmplY3RBbGxvY2F0aW9uUAog
CiAgICAgc2l6ZV90IGNvdW50ID0gMDsKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5h
bWVBcnJheSh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMsIFByaXZhdGVT
eW1ib2xNb2RlOjpJbmNsdWRlKTsKLSAgICBwcm90b3R5cGUtPnN0cnVjdHVyZSh2bSktPmdldFBy
b3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKHZtLCBwcm9wZXJ0eU5hbWVBcnJheSwgRW51bWVyYXRp
b25Nb2RlKCkpOworICAgIHByb3RvdHlwZS0+c3RydWN0dXJlKHZtKS0+Z2V0UHJvcGVydHlOYW1l
c0Zyb21TdHJ1Y3R1cmUodm0sIHByb3BlcnR5TmFtZUFycmF5LCBEb250RW51bVByb3BlcnRpZXNN
b2RlOjpJbmNsdWRlKTsKICAgICBQcm9wZXJ0eU5hbWVBcnJheURhdGE6OlByb3BlcnR5TmFtZVZl
Y3RvciYgcHJvcGVydHlOYW1lVmVjdG9yID0gcHJvcGVydHlOYW1lQXJyYXkuZGF0YSgpLT5wcm9w
ZXJ0eU5hbWVWZWN0b3IoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3BlcnR5TmFt
ZVZlY3Rvci5zaXplKCk7ICsraSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gcHJvdG90eXBl
LT5nZXREaXJlY3Qodm0sIHByb3BlcnR5TmFtZVZlY3RvcltpXSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwCShyZXZpc2lvbiAy
NzA5MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOCwxNCArMTM4LDE0IEBAIGJvb2wgRGVidWdnZXJTY29w
ZTo6ZGVsZXRlUHJvcGVydHkoSlNDZWwKICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFi
bGUoZ2xvYmFsT2JqZWN0LT52bSgpKS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZ2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi12b2lkIERlYnVnZ2VyU2NvcGU6Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQordm9pZCBEZWJ1Z2dlclNjb3BlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgRGVi
dWdnZXJTY29wZSogc2NvcGUgPSBqc0Nhc3Q8RGVidWdnZXJTY29wZSo+KG9iamVjdCk7CiAgICAg
QVNTRVJUKHNjb3BlLT5pc1ZhbGlkKCkpOwogICAgIGlmICghc2NvcGUtPmlzVmFsaWQoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gSlNTY29wZTo6b2JqZWN0
QXRTY29wZShzY29wZS0+anNTY29wZSgpKTsKLSAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZShn
bG9iYWxPYmplY3QtPnZtKCkpLT5nZXRQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgdGhpc09iamVjdC0+Z2V0UHJvcGVydHlO
YW1lcyhnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiBib29sIERlYnVn
Z2VyU2NvcGU6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkocmV2aXNpb24g
MjcwOTMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBKU1Njb3BlOwogY2xhc3Mg
RGVidWdnZXJTY29wZSBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoK
ICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVz
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5TmFtZXM7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3Qq
LCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBi
b29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
LCBEZWxldGVQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRp
ZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBi
b29sIHNob3VsZFRocm93KTsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMjcwOTMyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTgwLDIxICs4MCwxMyBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgIHVzaW5nIERl
ZmF1bHRWYWx1ZUZ1bmN0aW9uUHRyID0gSlNWYWx1ZSAoKikoY29uc3QgSlNPYmplY3QqLCBKU0ds
b2JhbE9iamVjdCosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpOwogICAgIERlZmF1bHRWYWx1ZUZ1
bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShkZWZhdWx0VmFsdWUpOwogCi0gICAgdXNpbmcg
R2V0T3duUHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyID0gdm9pZCAoKikoSlNPYmplY3QqLCBKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICB1
c2luZyBHZXRPd25Qcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNN
b2RlKTsKICAgICBHZXRPd25Qcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VO
VFJZKGdldE93blByb3BlcnR5TmFtZXMpOwotCi0gICAgdXNpbmcgR2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzRnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwotICAgIEdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXMpOwotCi0gICAgdXNpbmcgR2V0UHJvcGVydHlOYW1lc0Z1bmN0aW9u
UHRyID0gdm9pZCAoKikoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICBHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIg
TUVUSE9EX1RBQkxFX0VOVFJZKGdldFByb3BlcnR5TmFtZXMpOworICAgIEdldE93blByb3BlcnR5
TmFtZXNGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZ2V0T3duU3BlY2lhbFByb3BlcnR5
TmFtZXMpOwogCiAgICAgdXNpbmcgR2V0RW51bWVyYWJsZUxlbmd0aEZ1bmN0aW9uUHRyID0gdWlu
dDMyX3QgKCopKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqKTsKICAgICBHZXRFbnVtZXJhYmxl
TGVuZ3RoRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKGdldEVudW1lcmFibGVMZW5ndGgp
OwogCi0gICAgR2V0UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShn
ZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKTsKLSAgICBHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25Q
dHIgTUVUSE9EX1RBQkxFX0VOVFJZKGdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKTsKLQogICAgIHVz
aW5nIENsYXNzTmFtZUZ1bmN0aW9uUHRyID0gU3RyaW5nICgqKShjb25zdCBKU09iamVjdCosIFZN
Jik7CiAgICAgQ2xhc3NOYW1lRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKGNsYXNzTmFt
ZSk7CiAKQEAgLTE2OCwxMSArMTYwLDggQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICAgICAg
JkNsYXNzTmFtZTo6dG9UaGlzLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmRlZmF1bHRWYWx1ZSwg
XAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Qcm9wZXJ0eU5hbWVzLCBcCi0gICAgICAgICZD
bGFzc05hbWU6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcywgXAotICAgICAgICAmQ2xhc3NO
YW1lOjpnZXRQcm9wZXJ0eU5hbWVzLCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldE93blNwZWNp
YWxQcm9wZXJ0eU5hbWVzLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldEVudW1lcmFibGVMZW5n
dGgsIFwKLSAgICAgICAgJkNsYXNzTmFtZTo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcywgXAot
ICAgICAgICAmQ2xhc3NOYW1lOjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcywgXAogICAgICAgICAm
Q2xhc3NOYW1lOjpjbGFzc05hbWUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6dG9TdHJpbmdOYW1l
LCBcCiAgICAgICAgICZDbGFzc05hbWU6OmN1c3RvbUhhc0luc3RhbmNlLCBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAJKHJl
dmlzaW9uIDI3MDkzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFy
Z3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NywxMSArMTk3LDExIEBAIGJvb2wgQ2xv
bmVkQXJndW1lbnRzOjpnZXRPd25Qcm9wZXJ0eVNsb3QKICAgICByZXR1cm4gQmFzZTo6Z2V0T3du
UHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgaWRlbnQsIHNsb3QpOwogfQog
Ci12b2lkIENsb25lZEFyZ3VtZW50czo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJy
YXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBDbG9uZWRBcmd1bWVudHM6OmdldE93blNw
ZWNpYWxQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2Rl
KQogewogICAgIENsb25lZEFyZ3VtZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxDbG9uZWRBcmd1
bWVudHMqPihvYmplY3QpOwotICAgIHRoaXNPYmplY3QtPm1hdGVyaWFsaXplU3BlY2lhbHNJZk5l
Y2Vzc2FyeShnbG9iYWxPYmplY3QpOwotICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhp
c09iamVjdCwgZ2xvYmFsT2JqZWN0LCBhcnJheSwgbW9kZSk7CisgICAgaWYgKG1vZGUgPT0gRG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkKKyAgICAgICAgdGhpc09iamVjdC0+bWF0ZXJp
YWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KGdsb2JhbE9iamVjdCk7CiB9CiAKIGJvb2wgQ2xvbmVk
QXJndW1lbnRzOjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBQcm9wZXJ0eU5hbWUgaWRlbnQsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3Vt
ZW50cy5oCShyZXZpc2lvbiAyNzA5MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DbG9uZWRBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIGNsYXNzIENsb25lZEFyZ3VtZW50cyBmaW5hbCA6IHB1YmxpYyBKU05vbkZp
bmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsK
LSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNBbnlG
b3JtT2ZHZXRQcm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzOwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CiAgICAgc3RhdGlj
IElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkBAIC03MCw3ICs3MCw3IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgSW5kZXhpbmdUeXBlKTsKIAogICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Q
cm9wZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0
aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJv
cGVydHkoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJv
cGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FbnVtZXJhdGlvbk1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FbnVtZXJhdGlvbk1vZGUuaAkocmV2aXNpb24gMjcwOTMy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRW51bWVyYXRpb25Nb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDU2ICsyNywyMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotZW51
bSBjbGFzcyBQcm9wZXJ0eU5hbWVNb2RlIHsKK2VudW0gY2xhc3MgUHJvcGVydHlOYW1lTW9kZSA6
IHVpbnQ4X3QgewogICAgIFN5bWJvbHMgPSAxIDw8IDAsCiAgICAgU3RyaW5ncyA9IDEgPDwgMSwK
ICAgICBTdHJpbmdzQW5kU3ltYm9scyA9IFN5bWJvbHMgfCBTdHJpbmdzLAogfTsKIAotZW51bSBj
bGFzcyBQcml2YXRlU3ltYm9sTW9kZSB7CitlbnVtIGNsYXNzIFByaXZhdGVTeW1ib2xNb2RlIDog
dWludDhfdCB7CiAgICAgSW5jbHVkZSwKICAgICBFeGNsdWRlCiB9OwogCi1lbnVtIGNsYXNzIERv
bnRFbnVtUHJvcGVydGllc01vZGUgeworZW51bSBjbGFzcyBEb250RW51bVByb3BlcnRpZXNNb2Rl
IDogdWludDhfdCB7CiAgICAgSW5jbHVkZSwKICAgICBFeGNsdWRlCiB9OwogCi1lbnVtIGNsYXNz
IEpTT2JqZWN0UHJvcGVydGllc01vZGUgewotICAgIEluY2x1ZGUsCi0gICAgRXhjbHVkZQotfTsK
LQotY2xhc3MgRW51bWVyYXRpb25Nb2RlIHsKLXB1YmxpYzoKLSAgICBFbnVtZXJhdGlvbk1vZGUo
RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBkb250RW51bVByb3BlcnRpZXNNb2RlID0gRG9udEVudW1Q
cm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSwgSlNPYmplY3RQcm9wZXJ0aWVzTW9kZSBqc09iamVjdFBy
b3BlcnRpZXNNb2RlID0gSlNPYmplY3RQcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkKLSAgICAgICAg
OiBtX2RvbnRFbnVtUHJvcGVydGllc01vZGUoZG9udEVudW1Qcm9wZXJ0aWVzTW9kZSkKLSAgICAg
ICAgLCBtX2pzT2JqZWN0UHJvcGVydGllc01vZGUoanNPYmplY3RQcm9wZXJ0aWVzTW9kZSkKLSAg
ICB7Ci0gICAgfQotCi0gICAgRW51bWVyYXRpb25Nb2RlKGNvbnN0IEVudW1lcmF0aW9uTW9kZSYg
bW9kZSwgSlNPYmplY3RQcm9wZXJ0aWVzTW9kZSBqc09iamVjdFByb3BlcnRpZXNNb2RlKQotICAg
ICAgICA6IG1fZG9udEVudW1Qcm9wZXJ0aWVzTW9kZShtb2RlLm1fZG9udEVudW1Qcm9wZXJ0aWVz
TW9kZSkKLSAgICAgICAgLCBtX2pzT2JqZWN0UHJvcGVydGllc01vZGUoanNPYmplY3RQcm9wZXJ0
aWVzTW9kZSkKLSAgICB7Ci0gICAgfQotCi0gICAgLy8gQWRkIG90aGVyIGNvbnN0cnVjdG9ycyBh
cyBuZWVkZWQgZm9yIGNvbnZlbmllbmNlCi0KLSAgICBib29sIGluY2x1ZGVEb250RW51bVByb3Bl
cnRpZXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZG9udEVudW1Qcm9wZXJ0aWVzTW9kZSA9
PSBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlOwotICAgIH0KLQotICAgIGJvb2wgaW5j
bHVkZUpTT2JqZWN0UHJvcGVydGllcygpCi0gICAgewotICAgICAgICByZXR1cm4gbV9qc09iamVj
dFByb3BlcnRpZXNNb2RlID09IEpTT2JqZWN0UHJvcGVydGllc01vZGU6OkluY2x1ZGU7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIERvbnRFbnVtUHJvcGVydGllc01vZGUgbV9kb250RW51bVByb3Bl
cnRpZXNNb2RlOwotICAgIEpTT2JqZWN0UHJvcGVydGllc01vZGUgbV9qc09iamVjdFByb3BlcnRp
ZXNNb2RlOwotfTsKLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAkocmV2aXNpb24gMjcwOTMyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2MCwyMCArMjYwLDEyIEBAIGJvb2wgRXJyb3JJbnN0YW5jZTo6Z2V0T3du
UHJvcGVydHlTbG90KEoKICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNP
YmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotdm9pZCBFcnJv
ckluc3RhbmNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZUFycmF5LCBFbnVtZXJhdGlvbk1vZGUgZW51bWVyYXRpb25Nb2RlKQordm9pZCBFcnJvcklu
c3RhbmNlOjpnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJv
cGVydGllc01vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAg
ICAgRXJyb3JJbnN0YW5jZSogdGhpc09iamVjdCA9IGpzQ2FzdDxFcnJvckluc3RhbmNlKj4ob2Jq
ZWN0KTsKLSAgICB0aGlzT2JqZWN0LT5tYXRlcmlhbGl6ZUVycm9ySW5mb0lmTmVlZGVkKHZtKTsK
LSAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZ2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWVBcnJheSwgZW51bWVyYXRpb25Nb2RlKTsKLX0KLQotdm9pZCBF
cnJvckluc3RhbmNlOjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3Qs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVBcnJheSwgRW51bWVyYXRpb25Nb2RlIGVudW1lcmF0aW9uTW9kZSkKLXsKLSAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgRXJyb3JJbnN0YW5jZSogdGhpc09iamVjdCA9
IGpzQ2FzdDxFcnJvckluc3RhbmNlKj4ob2JqZWN0KTsKLSAgICB0aGlzT2JqZWN0LT5tYXRlcmlh
bGl6ZUVycm9ySW5mb0lmTmVlZGVkKHZtKTsKLSAgICBCYXNlOjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0
eU5hbWVzKHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lQXJyYXksIGVudW1l
cmF0aW9uTW9kZSk7CisgICAgaWYgKG1vZGUgPT0gRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5j
bHVkZSkKKyAgICAgICAgdGhpc09iamVjdC0+bWF0ZXJpYWxpemVFcnJvckluZm9JZk5lZWRlZCh2
bSk7CiB9CiAKIGJvb2wgRXJyb3JJbnN0YW5jZTo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3Qq
IG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3Vs
ZFRocm93KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5j
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5z
dGFuY2UuaAkocmV2aXNpb24gMjcwOTMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXJyb3JJbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogY2xhc3MgRXJyb3JJbnN0YW5jZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0
IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKLSAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQ
cm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzOwogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIAogICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDZWxsKiBjZWxsKQpAQCAtOTMsOCArOTMsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiwgU291cmNl
QXBwZW5kZXIgPSBudWxscHRyLCBSdW50aW1lVHlwZSA9IFR5cGVOb3RoaW5nLCBib29sIHVzZUN1
cnJlbnRGcmFtZSA9IHRydWUpOwogCiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OwotICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwot
ICAgIHN0YXRpYyB2b2lkIGdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBz
dGF0aWMgdm9pZCBnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAg
ICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRo
cm93KTsKICAgICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGRl
bGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxl
dGVQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
bmVyaWNBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZW5lcmljQXJndW1lbnRzLmgJKHJldmlzaW9uIDI3MDkzMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzYsNyArMzYsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgogY2xhc3MgR2VuZXJpY0FyZ3Vt
ZW50cyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpT
Tm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3Ro
SXNOb3RaZXJvIHwgT3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lczsKKyAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eU5hbWVzIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybzsKIAogcHJvdGVjdGVkOgogICAgIEdlbmVyaWNBcmd1bWVudHMoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTQ3LDcgKzQ3LDcgQEAgcHJvdGVjdGVkOgogICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRp
ZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29s
IHB1dEJ5SW5kZXgoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVBy
b3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQcm9w
ZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNB
cmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMjcwOTMyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46
OmdldE93blByb3BlCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci12b2lkIEdlbmVyaWNB
cmd1bWVudHM8VHlwZT46OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkK
IHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgVHlwZSogdGhpc09iamVj
dCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKQEAgLTEwMSwxNSArMTAxLDE1IEBAIHZvaWQgR2Vu
ZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGUKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIGFycmF5LmFkZChJZGVudGlmaWVyOjpmcm9tKHZtLCBpKSk7CiAgICAg
ICAgIH0KKyAgICAgICAgdGhpc09iamVjdC0+Z2V0T3duSW5kZXhlZFByb3BlcnR5TmFtZXMoZ2xv
YmFsT2JqZWN0LCBhcnJheSwgbW9kZSk7CiAgICAgfQogCi0gICAgaWYgKG1vZGUuaW5jbHVkZURv
bnRFbnVtUHJvcGVydGllcygpICYmICF0aGlzT2JqZWN0LT5vdmVycm9kZVRoaW5ncygpKSB7Cisg
ICAgaWYgKG1vZGUgPT0gRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSAmJiAhdGhpc09i
amVjdC0+b3ZlcnJvZGVUaGluZ3MoKSkgewogICAgICAgICBhcnJheS5hZGQodm0ucHJvcGVydHlO
YW1lcy0+bGVuZ3RoKTsKICAgICAgICAgYXJyYXkuYWRkKHZtLnByb3BlcnR5TmFtZXMtPmNhbGxl
ZSk7Ci0gICAgICAgIGlmIChhcnJheS5pbmNsdWRlU3ltYm9sUHJvcGVydGllcygpKQotICAgICAg
ICAgICAgYXJyYXkuYWRkKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sKTsKKyAgICAg
ICAgYXJyYXkuYWRkKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sKTsKICAgICB9Ci0g
ICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIGFy
cmF5LCBtb2RlKTsKKyAgICB0aGlzT2JqZWN0LT5nZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
Z2xvYmFsT2JqZWN0LCBhcnJheSwgbW9kZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNp
b24gMjcwOTMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4MywxNSArMjgzLDExIEBAIHN0YXRpYyBpbnQgY29tcGFyZUtl
eXNGb3JRU29ydChjb25zdCB2b2kKICAgICByZXR1cm4gKGRhID4gZGIpIC0gKGRhIDwgZGIpOwog
fQogCi12b2lkIEpTQXJyYXk6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTQXJyYXk6OmdldE93
blNwZWNpYWxQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGll
c01vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgSlNB
cnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4ob2JqZWN0KTsKLQotICAgIGlmICht
b2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkKKyAgICBpZiAobW9kZSA9PSBEb250RW51
bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZCh2bS5w
cm9wZXJ0eU5hbWVzLT5sZW5ndGgpOwotCi0gICAgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUp
OwogfQogCiAvLyBUaGlzIG1ldGhvZCBtYWtlcyByb29tIGluIHRoZSB2ZWN0b3IsIGJ1dCBsZWF2
ZXMgdGhlIG5ldyBzcGFjZSBmb3IgY291bnQgc2xvdHMgdW5jbGVhcmVkLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMjcwOTMyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MCw3ICs0MCw3IEBAIGNsYXNzIEpTQXJyYXkgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCAKIAog
cHVibGljOgogICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3Bl
cnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3Zl
cnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXM7CiAKICAgICBzdGF0aWMgc2l6ZV90IGFs
bG9jYXRpb25TaXplKENoZWNrZWQ8c2l6ZV90PiBpbmxpbmVDYXBhY2l0eSkKICAgICB7CkBAIC0x
ODksNyArMTg5LDcgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7
CiAKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBKU0dsb2JhbE9iamVj
dCosIFByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7Ci0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duU3BlY2lhbFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVu
dW1Qcm9wZXJ0aWVzTW9kZSk7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBpc0xlbmd0aFdyaXRhYmxl
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNp
b24gMjcwOTMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjA2LDEyICsyMDYsMTIgQEAgdm9pZCBKU0NlbGw6OmRvUHV0UHJv
cGVydHlTZWN1cml0eUNoZWNrKAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9
CiAKLXZvaWQgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSkKK3ZvaWQgSlNDZWxs
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpCiB7CiAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBKU0NlbGw6OmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBF
bnVtZXJhdGlvbk1vZGUpCit2b2lkIEpTQ2VsbDo6Z2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Q
cm9wZXJ0aWVzTW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQpA
QCAtMjMzLDExICsyMzMsNiBAQCBjb25zdCBjaGFyKiBKU0NlbGw6OmNsYXNzTmFtZShWTSYgdm0p
IGNvCiAgICAgcmV0dXJuIGNsYXNzSW5mbyh2bSktPmNsYXNzTmFtZTsKIH0KIAotdm9pZCBKU0Nl
bGw6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKQotewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci19Ci0KIGJvb2wgSlNDZWxsOjpjdXN0b21IYXNJbnN0YW5jZShKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpAQCAtMjU2LDE2ICsyNTEsNiBAQCB1aW50MzJfdCBKU0NlbGw6OmdldEVudW1lcmFi
bGVMZW5ndGgoSlNHCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgSlNDZWxsOjpnZXRTdHJ1Y3R1
cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotfQotCi12b2lkIEpTQ2VsbDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3Qq
LCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKQot
ewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KIGJvb2wgSlNDZWxsOjpw
cmV2ZW50RXh0ZW5zaW9ucyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KikKIHsKICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmgJKHJldmlzaW9uIDI3MDkzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDQsMTMgKzI0NCwxMCBAQCBwcm90
ZWN0ZWQ6CiAKICAgICAvLyBEdW1teSBpbXBsZW1lbnRhdGlvbnMgb2Ygb3ZlcnJpZGUtYWJsZSBz
dGF0aWMgZnVuY3Rpb25zIGZvciBjbGFzc2VzIHRvIHB1dCBpbiB0aGVpciBNZXRob2RUYWJsZQog
ICAgIHN0YXRpYyBKU1ZhbHVlIGRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSk7Ci0gICAgc3RhdGljIE5PX1JFVFVSTl9E
VUVfVE9fQ1JBU0ggdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgc3RhdGlj
IE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKTsKLSAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldFByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lk
IGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CisgICAgc3RhdGljIE5PX1JFVFVS
Tl9EVUVfVE9fQ1JBU0ggdm9pZCBnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNN
b2RlKTsKIAogICAgIHN0YXRpYyB1aW50MzJfdCBnZXRFbnVtZXJhYmxlTGVuZ3RoKEpTR2xvYmFs
T2JqZWN0KiwgSlNPYmplY3QqKTsKLSAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2
b2lkIGdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICBzdGF0aWMgTk9fUkVU
VVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAg
ICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggYm9vbCBwcmV2ZW50RXh0ZW5zaW9ucyhK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9f
Q1JBU0ggYm9vbCBpc0V4dGVuc2libGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwogICAg
IHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIGJvb2wgc2V0UHJvdG90eXBlKEpTT2JqZWN0
KiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBib29sKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNzA5MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDk0LDEzICs0OTQsMTMgQEAgYm9vbCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNPYgogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgQmFzZTo6Z2V0T3duUHJvcGVy
dHlTbG90KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSk7CiB9
CiAKLXZvaWQgSlNGdW5jdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNGdW5jdGlvbjo6
Z2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRF
bnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBKU0Z1bmN0aW9uKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTRnVuY3Rpb24qPihvYmplY3QpOwogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBp
ZiAobW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpIHsKKyAgICBpZiAobW9kZSA9PSBE
b250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSB7CiAgICAgICAgIGlmICghdGhpc09iamVj
dC0+aXNIb3N0T3JCdWlsdGluRnVuY3Rpb24oKSkgewogICAgICAgICAgICAgLy8gTWFrZSBzdXJl
IHByb3RvdHlwZSBoYXMgYmVlbiByZWlmaWVkLgogICAgICAgICAgICAgUHJvcGVydHlTbG90IHNs
b3QodGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWly
eSwgJnZtKTsKQEAgLTUyNCw3ICs1MjQsNiBAQCB2b2lkIEpTRnVuY3Rpb246OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhp
c09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKSk7CiB9CiAKIGJvb2wg
SlNGdW5jdGlvbjo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlT
bG90JiBzbG90KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b24uaAkocmV2aXNpb24gMjcwOTMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIHB1YmxpYzoKICAg
ICB9CiAgICAgCiAgICAgdHlwZWRlZiBKU0NhbGxlZSBCYXNlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFt
ZXMgfCBPdmVycmlkZXNHZXRDYWxsRGF0YTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyB8IE92ZXJy
aWRlc0dldENhbGxEYXRhOwogCiAgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShDaGVj
a2VkPHNpemVfdD4gaW5saW5lQ2FwYWNpdHkpCiAgICAgewpAQCAtMTczLDcgKzE3Myw3IEBAIHBy
b3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAKICAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IEVudW1lcmF0aW9uTW9kZSA9IEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBn
ZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMgYm9v
bCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIAogICAg
IHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwg
SlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9u
IDI3MDkzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogICAg
IHVzaW5nIEJhc2UgPSBKU0FycmF5QnVmZmVyVmlldzsKICAgICB0eXBlZGVmIHR5cGVuYW1lIEFk
YXB0b3I6OlR5cGUgRWxlbWVudFR5cGU7CiAKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNBbnlGb3Jt
T2ZHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybzsKKyAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eU5hbWVzIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hl
bkxlbmd0aElzTm90WmVybzsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgZWxlbWVu
dFNpemUgPSBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7CiAKQEAgLTMwNCw3ICszMDQs
NyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDZWxsKiwgSlNHbG9i
YWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhy
b3cpOwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBKU0ds
b2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CiAgICAgCi0gICAgc3RhdGljIHZv
aWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5
JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRl
ZFNpemUoSlNDZWxsKiwgVk0mKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2
aXNpb24gMjcwOTMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2NCw3ICs0NjQsNyBA
QCBib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkCiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEFkYXB0b3I+CiB2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKAotICAgIEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCisgICAgSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUp
CiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4o
b2JqZWN0KTsKQEAgLTQ3NCw3ICs0NzQsNyBAQCB2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+OjpnCiAgICAgICAgICAgICBhcnJheS5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwg
aSkpOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhv
YmplY3QsIGdsb2JhbE9iamVjdCwgYXJyYXksIG1vZGUpOworICAgIHRoaXNPYmplY3QtPmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhnbG9iYWxPYmplY3QsIGFycmF5LCBtb2RlKTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjcwOTMyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtNTcxLDkgKzU3MSw3IEBAIHB1YmxpYzoKICAgICAgICAgCiBwdWJsaWM6CiAgICAgdXNpbmcg
QmFzZSA9IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q7Ci0gICAgLy8gRG8gd2UgcmVhbHkgbmVl
ZCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIGhlcmU/Ci0gICAgLy8gRklYTUU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI5NTQKLSAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgT3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IElzSW1tdXRhYmxlUHJvdG90
eXBlRXhvdGljT2JqZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGUgfCBP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJc0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09i
amVjdDsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1
ZTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGlj
YWxFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDI3MDkzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjQsNyArNjQsNyBAQCB2b2lkIEpTTGV4aWNhbEVudmlyb25tZW50OjphbmFseXplSGVhcChKCiAg
ICAgfQogfQogCi12b2lkIEpTTGV4aWNhbEVudmlyb25tZW50OjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQor
dm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6Z2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAg
ICBKU0xleGljYWxFbnZpcm9ubWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xleGljYWxFbnZp
cm9ubWVudCo+KG9iamVjdCk7CiAKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBKU0xleGljYWxFbnZp
cm9ubWVudDo6Z2V0T3duTm9uSW5kZQogICAgICAgICBTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRv
ciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5lbmQobG9ja2VyKTsKICAgICAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgICAgICBmb3IgKFN5bWJvbFRhYmxlOjpN
YXA6Oml0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+YmVnaW4obG9ja2Vy
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoaXQtPnZhbHVlLmdldEF0dHJp
YnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSAmJiAhbW9kZS5pbmNsdWRlRG9u
dEVudW1Qcm9wZXJ0aWVzKCkpCisgICAgICAgICAgICBpZiAobW9kZSA9PSBEb250RW51bVByb3Bl
cnRpZXNNb2RlOjpFeGNsdWRlICYmIGl0LT52YWx1ZS5pc0RvbnRFbnVtKCkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAoIXRoaXNPYmplY3QtPmlzVmFsaWRTY29w
ZU9mZnNldChpdC0+dmFsdWUuc2NvcGVPZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CkBAIC04Miw4ICs4Miw2IEBAIHZvaWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmdldE93bk5v
bkluZGUKICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21VaWQo
dm0sIGl0LT5rZXkuZ2V0KCkpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAvLyBTa2lwIHRoZSBK
U1N5bWJvbFRhYmxlT2JqZWN0J3MgaW1wbGVtZW50YXRpb24gb2YgZ2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzCi0gICAgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlz
T2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiBib29sIEpT
TGV4aWNhbEVudmlyb25tZW50OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNMZXhpY2FsRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCShyZXZpc2lvbiAyNzA5MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB1c2luZyBC
YXNlID0gSlNTeW1ib2xUYWJsZU9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzOworICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNp
YWxQcm9wZXJ0eU5hbWVzOwogCiAgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogdmFyaWFi
bGVzKCkKICAgICB7CkBAIC0xMDYsNyArMTA2LDcgQEAgcHVibGljOgogICAgIH0KICAgICAgICAg
CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93
blNwZWNpYWxQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogCiAgICAgc3RhdGljIGJvb2wg
cHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
b2R1bGVFbnZpcm9ubWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDI3MDkzMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIGJvb2wgSlNNb2R1bGVFbnZpcm9ubWVudDo6Z2V0
T3duUHJvcGVydHkKICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmpl
Y3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotdm9pZCBKU01vZHVs
ZUVudmlyb25tZW50OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIGNlbGws
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVzQXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU01vZHVsZUVudmlyb25t
ZW50OjpnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyhKU09iamVjdCogY2VsbCwgSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lc0FycmF5LCBEb250RW51bVBy
b3BlcnRpZXNNb2RlKQogewogICAgIEpTTW9kdWxlRW52aXJvbm1lbnQqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNNb2R1bGVFbnZpcm9ubWVudCo+KGNlbGwpOwogICAgIGlmIChwcm9wZXJ0eU5hbWVz
QXJyYXkuaW5jbHVkZVN0cmluZ1Byb3BlcnRpZXMoKSkgewpAQCAtMTA2LDcgKzEwNiw2IEBAIHZv
aWQgSlNNb2R1bGVFbnZpcm9ubWVudDo6Z2V0T3duTm9uSW5kZXgKICAgICAgICAgICAgICAgICBw
cm9wZXJ0eU5hbWVzQXJyYXkuYWRkKGltcG9ydEVudHJ5LmxvY2FsTmFtZSk7CiAgICAgICAgIH0K
ICAgICB9Ci0gICAgcmV0dXJuIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlz
T2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXNBcnJheSwgbW9kZSk7CiB9CiAKIGJv
b2wgSlNNb2R1bGVFbnZpcm9ubWVudDo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwg
UHV0UHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaAkocmV2aXNpb24gMjcwOTMyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIEpTTW9kdWxlRW52aXJvbm1lbnQgZmlu
YWwgOiBwdWJsaWMKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogcHVi
bGljOgogICAgIHVzaW5nIEJhc2UgPSBKU0xleGljYWxFbnZpcm9ubWVudDsKLSAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9w
ZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92
ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzOwogCiAgICAgc3RhdGljIEpTTW9kdWxl
RW52aXJvbm1lbnQqIGNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTU2NvcGUqIGN1cnJlbnRTY29wZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBKU1ZhbHVl
IGluaXRpYWxWYWx1ZSwgQWJzdHJhY3RNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCkKICAgICB7
CkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Q
cm9wZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0
aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJKHJl
dmlzaW9uIDI3MDkzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDcgKzIxNyw3IEBAIGJv
b2wgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmRlbGV0ZVByb3AKICAgICByZXR1cm4gIXRoaXNP
YmplY3QtPm1fZXhwb3J0cy5jb250YWlucyhwcm9wZXJ0eU5hbWUudWlkKCkpOwogfQogCi12b2lk
IEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBj
ZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTTW9kdWxlTmFtZXNwYWNl
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBjZWxsLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVu
dW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0yMjUsNyAr
MjI1LDcgQEAgdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6Z2V0T3duUHJvcAogICAgIC8v
IGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbW9kdWxlLW5hbWVzcGFjZS1leG90aWMtb2Jq
ZWN0cy1vd25wcm9wZXJ0eWtleXMKICAgICBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU01vZHVsZU5hbWVzcGFjZU9iamVjdCo+KGNlbGwpOwogICAgIGZvciAo
Y29uc3QgYXV0byYgbmFtZSA6IHRoaXNPYmplY3QtPm1fbmFtZXMpIHsKLSAgICAgICAgaWYgKCFt
b2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkgeworICAgICAgICBpZiAobW9kZSA9PSBE
b250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKSB7CiAgICAgICAgICAgICAvLyBQZXJmb3Jt
IFtbR2V0T3duUHJvcGVydHldXSB0byB0aHJvdyBSZWZlcmVuY2VFcnJvciBpZiBiaW5kaW5nIGlz
IHVuaW5pdGlhbGl6ZWQuCiAgICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChjZWxsLCBQcm9w
ZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOwogICAgICAgICAg
ICAgdGhpc09iamVjdC0+Z2V0T3duUHJvcGVydHlTbG90Q29tbW9uKGdsb2JhbE9iamVjdCwgbmFt
ZS5pbXBsKCksIHNsb3QpOwpAQCAtMjMzLDcgKzIzMyw4IEBAIHZvaWQgSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3Q6OmdldE93blByb3AKICAgICAgICAgfQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFk
ZChuYW1lLmltcGwoKSk7CiAgICAgfQotICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhp
c09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBpZiAocHJv
cGVydHlOYW1lcy5pbmNsdWRlU3ltYm9sUHJvcGVydGllcygpKQorICAgICAgICB0aGlzT2JqZWN0
LT5nZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVz
LCBtb2RlKTsKIH0KIAogYm9vbCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6ZGVmaW5lT3duUHJv
cGVydHkoSlNPYmplY3QqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
ciwgYm9vbCBzaG91bGRUaHJvdykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAkocmV2aXNpb24gMjcwOTMy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNs
YXNzIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0IGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmpl
Y3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwotICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBPdmVycmlkZXNBbnlGb3Jt
T2ZHZXRQcm9wZXJ0eU5hbWVzIHwgR2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0
eUFic2VuY2UgfCBJc0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVjdDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5h
bWVzIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElz
Tm90WmVybyB8IEdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwg
SXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNPYmplY3Q7CiAKICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShK
U0NlbGwqKTsKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwg
SlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IGJvb2wgcHV0QnlJbmRleChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVj
dCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2Jq
ZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3Jp
cHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCShyZXZp
c2lvbiAyNzA5MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAwLDcgKzUwMCw3IEBAIGJvb2wgU3RyaW5naWZpZXI6
OkhvbGRlcjo6YXBwZW5kTmV4dFByb3AKICAgICAgICAgICAgICAgICBtX3Byb3BlcnR5TmFtZXMg
PSBzdHJpbmdpZmllci5tX2FycmF5UmVwbGFjZXJQcm9wZXJ0eU5hbWVzLmRhdGEoKTsKICAgICAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5IG9iamVjdFBy
b3BlcnR5TmFtZXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xN
b2RlOjpFeGNsdWRlKTsKLSAgICAgICAgICAgICAgICBtX29iamVjdC0+bWV0aG9kVGFibGUodm0p
LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG1fb2JqZWN0LCBnbG9iYWxPYmplY3QsIG9iamVjdFByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAgICAgICAgICBtX29iamVjdC0+
bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG1fb2JqZWN0LCBnbG9iYWxPYmpl
Y3QsIG9iamVjdFByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUp
OwogICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAg
ICAgICAgICAgICAgICBtX3Byb3BlcnR5TmFtZXMgPSBvYmplY3RQcm9wZXJ0eU5hbWVzLnJlbGVh
c2VEYXRhKCk7CiAgICAgICAgICAgICB9CkBAIC03MTksNyArNzE5LDcgQEAgTkVWRVJfSU5MSU5F
IEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpTVmFsdQogICAgICAgICAgICAgICAgIG1hcmtlZFN0YWNr
LmFwcGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3cob2JqZWN0KTsKICAgICAgICAgICAgICAgICBpbmRl
eFN0YWNrLmFwcGVuZCgwKTsKICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0YWNrLmFwcGVuZChQ
cm9wZXJ0eU5hbWVBcnJheSh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5
bWJvbE1vZGU6OkV4Y2x1ZGUpKTsKLSAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxl
KHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIG1fZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eVN0YWNrLmxhc3QoKSwgRW51bWVyYXRpb25Nb2RlKCkpOworICAgICAgICAgICAgICAgIG9iamVj
dC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbV9nbG9iYWxP
YmplY3QsIHByb3BlcnR5U3RhY2subGFzdCgpLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNs
dWRlKTsKICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjoKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDI3
MDkzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzIsMTggKzcyLDE5IEBAIGNvbnN0IENsYXNzSW5mbyBKU09iamVjdDo6
c19pbmZvID0geyAiT2IKIAogY29uc3QgQ2xhc3NJbmZvIEpTRmluYWxPYmplY3Q6OnNfaW5mbyA9
IHsgIk9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRI
T0RfVEFCTEUoSlNGaW5hbE9iamVjdCkgfTsKIAotc3RhdGljIGlubGluZSB2b2lkIGdldENsYXNz
UHJvcGVydHlOYW1lcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBDbGFzc0lu
Zm8qIGNsYXNzSW5mbywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0
aW9uTW9kZSBtb2RlKQorQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0OjpnZXROb25SZWlmaWVk
U3RhdGljUHJvcGVydHlOYW1lcyhWTSYgdm0sIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7Ci0gICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGlmIChzdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCh2bSkpCisgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIEFkZCBwcm9wZXJ0aWVzIGZyb20gdGhlIHN0YXRpYyBoYXNo
dGFibGVzIG9mIHByb3BlcnRpZXMKLSAgICBmb3IgKDsgY2xhc3NJbmZvOyBjbGFzc0luZm8gPSBj
bGFzc0luZm8tPnBhcmVudENsYXNzKSB7Ci0gICAgICAgIGNvbnN0IEhhc2hUYWJsZSogdGFibGUg
PSBjbGFzc0luZm8tPnN0YXRpY1Byb3BIYXNoVGFibGU7CisgICAgZm9yIChjb25zdCBDbGFzc0lu
Zm8qIGluZm8gPSBjbGFzc0luZm8odm0pOyBpbmZvOyBpbmZvID0gaW5mby0+cGFyZW50Q2xhc3Mp
IHsKKyAgICAgICAgY29uc3QgSGFzaFRhYmxlKiB0YWJsZSA9IGluZm8tPnN0YXRpY1Byb3BIYXNo
VGFibGU7CiAgICAgICAgIGlmICghdGFibGUpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAg
ICAgICBmb3IgKGF1dG8gaXRlciA9IHRhYmxlLT5iZWdpbigpOyBpdGVyICE9IHRhYmxlLT5lbmQo
KTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAoIShpdGVyLT5hdHRyaWJ1dGVzKCkgJiBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pIHx8IG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGll
cygpKQorICAgICAgICAgICAgaWYgKG1vZGUgPT0gRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5j
bHVkZSB8fCAhKGl0ZXItPmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSkpCiAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgaXRlci5rZXkoKSkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjM4MCw1NCArMjM4
MSw1MCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04ob2JqZWN0UHJpdmF0ZUZ1CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oSlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5j
ZShnbG9iYWxPYmplY3QsIHZhbHVlLCBwcm90bykpKTsKIH0KIAotLy8gRklYTUU6IEFzc2VydCB0
aGF0IHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgZ2V0T3duUHJvcGVydHlOYW1lcygpIGFyZSByZXBv
cnRlZCBlbnVtZXJhYmxlIGJ5IGdldE93blByb3BlcnR5U2xvdCgpLgotLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxOTkyNgotdm9pZCBKU09iamVjdDo6Z2V0UHJv
cGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUp
Citjb25zdGV4cHIgdW5zaWduZWQgbWF4aW11bVByb3RvdHlwZUNoYWluRGVwdGggPSA0MDAwMDsK
K3ZvaWQgSlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGll
c01vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKFVOTElLRUxZKCF2
bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkpKSB7Ci0gICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEpT
T2JqZWN0KiBvYmplY3QgPSB0aGlzOworICAgIHVuc2lnbmVkIHByb3RvdHlwZUNvdW50ID0gMDsK
IAotICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVj
dCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIG9iamVj
dC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgdm9pZCgpKTsKIAotICAgIEpTVmFsdWUgbmV4dFByb3RvID0gb2JqZWN0LT5nZXRQcm90
b3R5cGUodm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
dm9pZCgpKTsKLSAgICBpZiAobmV4dFByb3RvLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gb2JqZWN0LT5nZXRQcm90b3R5cGUodm0sIGdsb2Jh
bE9iamVjdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Cisg
ICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCisgICAgICAgICAgICBicmVhazsKIAotICAg
IEpTT2JqZWN0KiBwcm90b3R5cGUgPSBhc09iamVjdChuZXh0UHJvdG8pOwotICAgIHdoaWxlKDEp
IHsKLSAgICAgICAgaWYgKHByb3RvdHlwZS0+c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5vdmVy
cmlkZXNHZXRQcm9wZXJ0eU5hbWVzKCkpIHsKLSAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsK
LSAgICAgICAgICAgIHByb3RvdHlwZS0+bWV0aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVz
KHByb3RvdHlwZSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICAgICAg
aWYgKFVOTElLRUxZKCsrcHJvdG90eXBlQ291bnQgPiBtYXhpbXVtUHJvdG90eXBlQ2hhaW5EZXB0
aCkpIHsKKyAgICAgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHByb3RvdHlw
ZS0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvdHlwZSwgZ2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgdm9pZCgpKTsKLSAgICAgICAgbmV4dFByb3RvID0gcHJvdG90eXBlLT5nZXRQcm90
b3R5cGUodm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHZvaWQoKSk7Ci0gICAgICAgIGlmIChuZXh0UHJvdG8uaXNOdWxsKCkpCi0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgcHJvdG90eXBlID0gYXNPYmplY3QobmV4dFByb3RvKTsKKworICAg
ICAgICBvYmplY3QgPSBhc09iamVjdChwcm90b3R5cGUpOwogICAgIH0KIH0KIAotdm9pZCBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7Ci0gICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGlmICghbW9kZS5pbmNsdWRlSlNPYmpl
Y3RQcm9wZXJ0aWVzKCkpIHsKLSAgICAgICAgLy8gV2Ugc3RpbGwgaGF2ZSB0byBnZXQgbm9uLWlu
ZGV4ZWQgcHJvcGVydGllcyBmcm9tIGFueSBzdWJjbGFzc2VzIG9mIEpTT2JqZWN0IHRoYXQgaGF2
ZSB0aGVtLgotICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBvYmplY3QtPmdldE93bkluZGV4ZWRQcm9wZXJ0
eU5hbWVzKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgb2JqZWN0LT5n
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKK30KKwordm9pZCBKU09iamVjdDo6Z2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMoSlNP
YmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9w
ZXJ0aWVzTW9kZSkKK3sKKyAgICAvLyBTdHJ1Y3R1cmU6OnZhbGlkYXRlRmxhZ3MoKSBicmVha3Mg
aWYgdGhpcyBtZXRob2QgaXNuJ3QgZXhwb3J0ZWQsIHdoaWNoIGlzIGltcG9zc2libGUgaWYgaXQn
cyBpbmxpbmVkLgorfQorCit2b2lkIEpTT2JqZWN0OjpnZXRPd25JbmRleGVkUHJvcGVydHlOYW1l
cyhKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250
RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCit7CisgICAgSlNPYmplY3QqIG9iamVjdCA9IHRoaXM7
CiAKICAgICBpZiAocHJvcGVydHlOYW1lcy5pbmNsdWRlU3RyaW5nUHJvcGVydGllcygpKSB7Ci0g
ICAgICAgIC8vIEFkZCBudW1lcmljIHByb3BlcnRpZXMgZmlyc3QuIFRoYXQgYXBwZWFycyB0byBi
ZSB0aGUgYWNjZXB0ZWQgY29udmVudGlvbi4KKyAgICAgICAgLy8gQWRkIG51bWVyaWMgcHJvcGVy
dGllcyBmaXJzdCBwZXIgc3RlcCAyIG9mIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3Jk
aW5hcnlvd25wcm9wZXJ0eWtleXMKICAgICAgICAgLy8gRklYTUU6IEZpbGxpbmcgUHJvcGVydHlO
YW1lQXJyYXkgd2l0aCBhbiBpZGVudGlmaWVyIGZvciBldmVyeSBpbnRlZ2VyCiAgICAgICAgIC8v
IGlzIGluY3JlZGlibHkgaW5lZmZpY2llbnQgZm9yIGxhcmdlIGFycmF5cy4gV2UgbmVlZCBhIGRp
ZmZlcmVudCBhcHByb2FjaCwKICAgICAgICAgLy8gd2hpY2ggYWxtb3N0IGNlcnRhaW5seSBtZWFu
cyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgZm9yIFByb3BlcnR5TmFtZUFycmF5LgpAQCAtMjQ3NSw3
ICsyNDcyLDcgQEAgdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CiAgICAgICAgICAgICAgICAgZm9yIChTcGFyc2VB
cnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtb2RlLmluY2x1ZGVEb250RW51bVBy
b3BlcnRpZXMoKSB8fCAhKGl0LT52YWx1ZS5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pKQorICAgICAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSBEb250RW51bVBy
b3BlcnRpZXNNb2RlOjpJbmNsdWRlIHx8ICEoaXQtPnZhbHVlLmF0dHJpYnV0ZXMoKSAmIFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzLnVu
Y2hlY2tlZEFwcGVuZChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaXQtPmtleSkpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTI0OTAsMjAgKzI0ODcsMTkgQEAgdm9pZCBK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAgIH0KLQotICAgIG9iamVjdC0+bWV0
aG9kVGFibGUodm0pLT5nZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMob2JqZWN0LCBnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCi12b2lkIEpTT2JqZWN0OjpnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQordm9pZCBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwotICAgIGlmICghb2JqZWN0LT5zdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCh2
bSkpCi0gICAgICAgIGdldENsYXNzUHJvcGVydHlOYW1lcyhnbG9iYWxPYmplY3QsIG9iamVjdC0+
Y2xhc3NJbmZvKHZtKSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCFtb2RlLmluY2x1ZGVKU09iamVjdFBy
b3BlcnRpZXMoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG9iamVjdC0+c3RydWN0dXJl
KHZtKS0+Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUodm0sIHByb3BlcnR5TmFtZXMsIG1v
ZGUpOworICAgIG1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXModGhp
cywgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOworCisgICAgZ2V0Tm9uUmVpZmllZFN0YXRpY1Byb3BlcnR5
TmFtZXModm0sIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIHN0cnVjdHVyZSh2bSktPmdldFBy
b3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKHZtLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBz
Y29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogfQogCiBkb3VibGUgSlNPYmplY3Q6OnRvTnVtYmVy
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0CkBAIC0zODM3LDQxICszODMzLDYg
QEAgdWludDMyX3QgSlNPYmplY3Q6OmdldEVudW1lcmFibGVMZW5ndGgoSgogICAgIH0KIH0KIAot
dm9pZCBKU09iamVjdDo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCi17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwotICAgIG9iamVjdC0+c3RydWN0dXJlKHZtKS0+Z2V0UHJvcGVydHlOYW1lc0Zy
b21TdHJ1Y3R1cmUodm0sIHByb3BlcnR5TmFtZXMsIG1vZGUpOwotfQotCi12b2lkIEpTT2JqZWN0
OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCi17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBvYmplY3QtPm1ldGhv
ZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKG1vZGUsIEpTT2JqZWN0UHJvcGVydGllc01vZGU6
OkV4Y2x1ZGUpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotCi0g
ICAgSlNWYWx1ZSBuZXh0UHJvdG8gPSBvYmplY3QtPmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2Jq
ZWN0KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgIGlmIChu
ZXh0UHJvdG8uaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEpTT2JqZWN0KiBwcm90
b3R5cGUgPSBhc09iamVjdChuZXh0UHJvdG8pOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAg
IGlmIChwcm90b3R5cGUtPnN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0UHJv
cGVydHlOYW1lcygpKSB7Ci0gICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgICAg
ICBwcm90b3R5cGUtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0UHJvcGVydHlOYW1lcyhwcm90b3R5cGUs
IGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgcHJvdG90eXBlLT5tZXRob2RUYWJsZSh2bSktPmdldE93blBy
b3BlcnR5TmFtZXMocHJvdG90eXBlLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUp
OwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgICAgICBu
ZXh0UHJvdG8gPSBwcm90b3R5cGUtPmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KTsKLSAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICAgICAgaWYgKG5l
eHRQcm90by5pc051bGwoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBwcm90b3R5cGUg
PSBhc09iamVjdChuZXh0UHJvdG8pOwotICAgIH0KLX0KLQogLy8gSW1wbGVtZW50cyBHZXRNZXRo
b2QoTywgUCkgaW4gc2VjdGlvbiA3LjMuOSBvZiB0aGUgc3BlYy4KIC8vIGh0dHA6Ly93d3cuZWNt
YS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtZ2V0bWV0aG9k
CiBKU1ZhbHVlIEpTT2JqZWN0OjpnZXRNZXRob2QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbERhdGEmIGNhbGxEYXRhLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgJKHJldmlzaW9uIDI3MDkzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY3NCwxMyArNjc0LDE0IEBAIHB1Ymxp
YzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGhhc0luc3RhbmNlKEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZGVmYXVsdEhhc0luc3RhbmNlKEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVQcm9wZXJ0eSk7CiAKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVy
dHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBF
bnVtZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ2V0UHJvcGVydHlO
YW1lcyhKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0
aWVzTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBE
b250RW51bVByb3BlcnRpZXNNb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCBnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGdldE93bkluZGV4ZWRQcm9wZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CisgICAg
dm9pZCBnZXROb25SZWlmaWVkU3RhdGljUHJvcGVydHlOYW1lcyhWTSYsIFByb3BlcnR5TmFtZUFy
cmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdWludDMyX3QgZ2V0RW51bWVyYWJsZUxlbmd0aChKU0dsb2JhbE9iamVjdCosIEpTT2Jq
ZWN0Kik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0U3RydWN0dXJlUHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBFbnVtZXJhdGlvbk1vZGUpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdl
dEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBK
U1ZhbHVlIHRvUHJpbWl0aXZlKEpTR2xvYmFsT2JqZWN0KiwgUHJlZmVycmVkUHJpbWl0aXZlVHlw
ZSA9IE5vUHJlZmVyZW5jZSkgY29uc3Q7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRv
TnVtYmVyKEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAJ
KHJldmlzaW9uIDI3MDkzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
cGVydHlOYW1lRW51bWVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDQgKzg3LDUyIEBA
IHZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp2aXNpdENoaWwKICAgICB9CiB9CiAKKy8v
IEZJWE1FOiBBc3NlcnQgdGhhdCBwcm9wZXJ0aWVzIHJldHVybmVkIGJ5IGdldE93blByb3BlcnR5
TmFtZXMoKSBhcmUgcmVwb3J0ZWQgZW51bWVyYWJsZSBieSBnZXRPd25Qcm9wZXJ0eVNsb3QoKS4K
Ky8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTk5MjYKK3ZvaWQg
Z2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNPYmplY3QqIGJhc2UsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCB1aW50MzJf
dCYgaW5kZXhlZExlbmd0aCwgdWludDMyX3QmIHN0cnVjdHVyZVByb3BlcnR5Q291bnQpCit7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3Ry
dWN0dXJlKHZtKTsKKyAgICBpZiAoc3RydWN0dXJlLT5jYW5BY2Nlc3NQcm9wZXJ0aWVzUXVpY2ts
eUZvckVudW1lcmF0aW9uKCkgJiYgaW5kZXhlZExlbmd0aCA9PSBiYXNlLT5nZXRBcnJheUxlbmd0
aCgpKSB7CisgICAgICAgIC8vIElubGluZWQgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcygpCisgICAgICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duU3BlY2lhbFBy
b3BlcnR5TmFtZXMoYmFzZSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVBy
b3BlcnRpZXNNb2RlOjpFeGNsdWRlKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKKworICAgICAgICBiYXNlLT5nZXROb25SZWlmaWVkU3RhdGljUHJvcGVydHlO
YW1lcyh2bSwgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7
CisgICAgICAgIHVuc2lnbmVkIG5vblN0cnVjdHVyZVByb3BlcnR5Q291bnQgPSBwcm9wZXJ0eU5h
bWVzLnNpemUoKTsKKyAgICAgICAgc3RydWN0dXJlLT5nZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVj
dHVyZSh2bSwgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7
CisgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisKKyAgICAgICAgLy8gfHByb3Bl
cnR5TmFtZXN8IGNvbnRhaW5zIHByb3BlcnRpZXMgZXhjbHVzaXZlbHkgZnJvbSB0aGUgc3RydWN0
dXJlLgorICAgICAgICBpZiAoIW5vblN0cnVjdHVyZVByb3BlcnR5Q291bnQpCisgICAgICAgICAg
ICBzdHJ1Y3R1cmVQcm9wZXJ0eUNvdW50ID0gcHJvcGVydHlOYW1lcy5zaXplKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgYmFzZS0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVz
KGJhc2UsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9k
ZTo6RXhjbHVkZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7
CisgICAgICAgIC8vIHxwcm9wZXJ0eU5hbWVzfCBjb250YWlucyBhbGwgaW5kZXhlZCBwcm9wZXJ0
aWVzLCBzbyBkaXNhYmxlIGVudW1lcmF0aW9uIGJhc2VkIG9uIGdldEVudW1lcmFibGVMZW5ndGgo
KS4KKyAgICAgICAgaW5kZXhlZExlbmd0aCA9IDA7CisgICAgfQorCisgICAgSlNPYmplY3QqIG9i
amVjdCA9IGJhc2U7CisgICAgdW5zaWduZWQgcHJvdG90eXBlQ291bnQgPSAwOworCisgICAgd2hp
bGUgKHRydWUpIHsKKyAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBvYmplY3QtPmdldFByb3Rv
dHlwZSh2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKKyAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGlmIChVTkxJS0VMWSgrK3Byb3RvdHlwZUNvdW50ID4gbWF4aW11
bVByb3RvdHlwZUNoYWluRGVwdGgpKSB7CisgICAgICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dF
cnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIG9iamVjdCA9IGFzT2JqZWN0KHByb3RvdHlwZSk7CisgICAgICAgIG9iamVj
dC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKTsKKyAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAgICB9Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHJldmlzaW9uIDI3MDkzMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNiArMTAxLDggQEAgcHJpdmF0ZToKICAgICB1aW50
MzJfdCBtX2NhY2hlZElubGluZUNhcGFjaXR5OwogfTsKIAordm9pZCBnZXRFbnVtZXJhYmxlUHJv
cGVydHlOYW1lcyhKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkm
LCB1aW50MzJfdCYgaW5kZXhlZExlbmd0aCwgdWludDMyX3QmIHN0cnVjdHVyZVByb3BlcnR5Q291
bnQpOworCiBpbmxpbmUgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBwcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlKQogewog
ICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CkBAIC0xMTcsMjIgKzExOSw4IEBAIGlu
bGluZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHByb3BlcnQKICAgICAgICAgcmV0dXJuIGVu
dW1lcmF0b3I7CiAKICAgICB1aW50MzJfdCBudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0aWVzID0gMDsK
LQogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXModm0sIFByb3BlcnR5TmFtZU1v
ZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKLQotICAgIGlmIChzdHJ1
Y3R1cmUtPmNhbkFjY2Vzc1Byb3BlcnRpZXNRdWlja2x5Rm9yRW51bWVyYXRpb24oKSAmJiBpbmRl
eGVkTGVuZ3RoID09IGJhc2UtPmdldEFycmF5TGVuZ3RoKCkpIHsKLSAgICAgICAgYmFzZS0+bWV0
aG9kVGFibGUodm0pLT5nZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKGJhc2UsIGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwotICAgICAgICBzY29wZS5hc3Nl
cnROb0V4Y2VwdGlvbigpOwotCi0gICAgICAgIG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMgPSBw
cm9wZXJ0eU5hbWVzLnNpemUoKTsKLQotICAgICAgICBiYXNlLT5tZXRob2RUYWJsZSh2bSktPmdl
dEdlbmVyaWNQcm9wZXJ0eU5hbWVzKGJhc2UsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEdlbmVyaWMgcHJv
cGVydHkgbmFtZXMgdmVjdG9yIGNvbnRhaW5zIGFsbCBpbmRleGVkIHByb3BlcnR5IG5hbWVzLgot
ICAgICAgICAvLyBTbyBkaXNhYmxlIGluZGV4ZWQgcHJvcGVydHkgZW51bWVyYXRpb24gcGhhc2Ug
Ynkgc2V0dGluZyB8aW5kZXhlZExlbmd0aHwgdG8gMC4KLSAgICAgICAgaW5kZXhlZExlbmd0aCA9
IDA7Ci0gICAgICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0UHJvcGVydHlOYW1lcyhiYXNl
LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKLSAgICB9
CisgICAgZ2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMoZ2xvYmFsT2JqZWN0LCBiYXNlLCBwcm9w
ZXJ0eU5hbWVzLCBpbmRleGVkTGVuZ3RoLCBudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0aWVzKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIEFTU0VSVChwcm9w
ZXJ0eU5hbWVzLnNpemUoKSA8IFVJTlQzMl9NQVgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJKHJldmlzaW9uIDI3MDkzMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMzIg
KzExNSwxMyBAQCBib29sIEpTUHJveHk6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlCiAgICAg
cmV0dXJuIHRoaXNPYmplY3QtPnRhcmdldCgpLT5tZXRob2RUYWJsZShnbG9iYWxPYmplY3QtPnZt
KCkpLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdC0+dGFyZ2V0KCksIGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lKTsKIH0KIAotdm9pZCBKU1Byb3h5OjpnZXRQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKLXsKLSAgICBK
U1Byb3h5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJveHkqPihvYmplY3QpOwotICAgIHRoaXNP
YmplY3QtPnRhcmdldCgpLT5tZXRob2RUYWJsZShnbG9iYWxPYmplY3QtPnZtKCkpLT5nZXRQcm9w
ZXJ0eU5hbWVzKHRoaXNPYmplY3QtPnRhcmdldCgpLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZXMsIG1vZGUpOwotfQotCiB1aW50MzJfdCBKU1Byb3h5OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgSlNQ
cm94eSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3h5Kj4ob2JqZWN0KTsKICAgICByZXR1cm4g
dGhpc09iamVjdC0+dGFyZ2V0KCktPm1ldGhvZFRhYmxlKGdsb2JhbE9iamVjdC0+dm0oKSktPmdl
dEVudW1lcmFibGVMZW5ndGgoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LT50YXJnZXQoKSk7CiB9
CiAKLXZvaWQgSlNQcm94eTo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCi17Ci0g
ICAgLy8gU2tpcCB0aGUgc3RydWN0dXJlIGxvb3AsIHNpbmNlIGl0IGlzIGludmFsaWQgZm9yIHBy
b3hpZXMuCi19Ci0KLXZvaWQgSlNQcm94eTo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQotewotICAgIEpTUHJveHkq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm94eSo+KG9iamVjdCk7Ci0gICAgLy8gR2V0ICphbGwq
IG9mIHRoZSBwcm9wZXJ0eSBuYW1lcywgbm90IGp1c3QgdGhlIGdlbmVyaWMgb25lcywgc2luY2Ug
d2Ugc2tpcHBlZCB0aGUgc3RydWN0dXJlCi0gICAgLy8gb25lcyBhYm92ZS4KLSAgICB0aGlzT2Jq
ZWN0LT50YXJnZXQoKS0+bWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0LT52bSgpKS0+Z2V0UHJvcGVy
dHlOYW1lcyh0aGlzT2JqZWN0LT50YXJnZXQoKSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVz
LCBtb2RlKTsKLX0KLQotdm9pZCBKU1Byb3h5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNQcm94eTo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0
aWVzTW9kZSBtb2RlKQogewogICAgIEpTUHJveHkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm94
eSo+KG9iamVjdCk7CiAgICAgdGhpc09iamVjdC0+dGFyZ2V0KCktPm1ldGhvZFRhYmxlKGdsb2Jh
bE9iamVjdC0+dm0oKSktPmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdC0+dGFyZ2V0KCks
IGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCShyZXZpc2lvbiAyNzA5MzIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMy
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBKU1Byb3h5IDogcHVibGljIEpTTm9uRmluYWxP
YmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwotICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3Bl
cnR5TmFtZXMgfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVz
R2V0UHJvdG90eXBlIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hl
bkxlbmd0aElzTm90WmVybzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0UHJvdG90eXBl
IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90
WmVybzsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vzcz4K
ICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKQEAgLTk1LDExICs5
NSw4IEBAIHByb3RlY3RlZDoKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBwdXRC
eUluZGV4KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQsIEpTVmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVBy
b3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQcm9w
ZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCk7Ci0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVt
UHJvcGVydGllc01vZGUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB1aW50MzJfdCBn
ZXRFbnVtZXJhYmxlTGVuZ3RoKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqKTsKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0R2VuZXJpY1Byb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVP
d25Qcm9wZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBjb25z
dCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgYm9vbCBzZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3dJZkNhbnRTZXQpOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBKU1ZhbHVlIGdldFByb3RvdHlwZShKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0Kik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxl
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMjcwOTMyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDcgKzUzLDcgQEAgYm9vbCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpkZWxldGVQcm9wZXJ0
eQogICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLXZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duU3BlY2lh
bFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGll
c01vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNT
eW1ib2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0
Kj4ob2JqZWN0KTsKQEAgLTYxLDE1ICs2MSwxMyBAQCB2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6
OmdldE93bk5vbkluZGV4CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIodGhpc09i
amVjdC0+c3ltYm9sVGFibGUoKS0+bV9sb2NrKTsKICAgICAgICAgU3ltYm9sVGFibGU6Ok1hcDo6
aXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+ZW5kKGxvY2tlcik7CiAg
ICAgICAgIGZvciAoU3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0b3IgaXQgPSB0aGlzT2JqZWN0LT5z
eW1ib2xUYWJsZSgpLT5iZWdpbihsb2NrZXIpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
ICAgIGlmICghKGl0LT52YWx1ZS5nZXRBdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pIHx8IG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKSB7CisgICAgICAg
ICAgICBpZiAobW9kZSA9PSBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlIHx8ICFpdC0+
dmFsdWUuaXNEb250RW51bSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGl0LT5rZXktPmlzU3lt
Ym9sKCkgJiYgIXByb3BlcnR5TmFtZXMuaW5jbHVkZVN5bWJvbFByb3BlcnRpZXMoKSkKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgaXQtPmtleS5nZXQoKSkpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQotCi0gICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTeW1ib2xUYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkocmV2aXNpb24gMjcwOTMyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSwxMiArMzksMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBKU1N5bWJv
bFRhYmxlT2JqZWN0IDogcHVibGljIEpTU2NvcGUgewogcHVibGljOgogICAgIHVzaW5nIEJhc2Ug
PSBKU1Njb3BlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFt
ZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXM7CiAK
ICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUoKSBjb25zdCB7IHJldHVybiBtX3N5bWJvbFRh
YmxlLmdldCgpOyB9CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVs
ZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIERlbGV0
ZVByb3BlcnR5U2xvdCYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIGdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAg
IAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTeW1ib2xUYWJsZSgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihKU1N5bWJvbFRhYmxlT2JqZWN0LCBtX3N5bWJvbFRhYmxlKTsgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlSW5mby5oCShyZXZpc2lv
biAyNzA5MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDEzICs0OCw4IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgVHlwZUluZm9QZXJDZWwKIC8vIE91dCBvZiBsaW5lIGZsYWdzLgogCiBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIEltcGxlbWVudHNIYXNJbnN0YW5jZSA9IDEgPDwgODsKLXN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyA9IDEgPDwgOTsKLS8vIE92
ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgbWVhbnMgdGhhdCB3ZSBjYW5ub3QgbWFr
ZSBhc3N1bXB0aW9ucyBhYm91dAotLy8gdGhlIGNhY2hlYWJpbGl0eSBvciBlbnVtZXJhYmlsaXR5
IG9mIHByb3BlcnR5IG5hbWVzLCBhbmQgdGhlcmVmb3JlLCB3ZSdsbCBuZWVkCi0vLyB0byBkaXNh
YmxlIGNlcnRhaW4gb3B0aW1pemF0aW9ucy4gVGhpcyBmbGFnIHNob3VsZCBiZSBzZXQgaWYgb25l
IG9yIG1vcmUgb2YgdGhlCi0vLyBmb2xsb3dpbmcgT2JqZWN0IG1ldGhvZHMgYXJlIG92ZXJyaWRk
ZW46Ci0vLyAgICAgZ2V0T3duUHJvcGVydHlOYW1lcywgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzLCBnZXRQcm9wZXJ0eU5hbWVzCi1zdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIE92ZXJyaWRl
c0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgPSAxIDw8IDEwOworc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzID0gMSA8PCA5Oworc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyA9IDEg
PDwgMTA7CiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFByb2hpYml0c1Byb3BlcnR5Q2FjaGlu
ZyA9IDEgPDwgMTE7CiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIEdldE93blByb3BlcnR5U2xv
dElzSW1wdXJlID0gMSA8PCAxMjsKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgTmV3SW1wdXJl
UHJvcGVydHlGaXJlc1dhdGNocG9pbnRzID0gMSA8PCAxMzsKQEAgLTEwMyw4ICs5OCw5IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgYm9vbCBwZXJDZWxsQml0KElubGluZVR5cGVGbGFncyBmbGFncykg
eyByZXR1cm4gZmxhZ3MgJiBUeXBlSW5mb1BlckNlbGxCaXQ7IH0KICAgICBib29sIG92ZXJyaWRl
c1RvVGhpcygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczE8T3ZlcnJpZGVzVG9UaGlzPigp
OyB9CiAgICAgYm9vbCBzdHJ1Y3R1cmVJc0ltbW9ydGFsKCkgY29uc3QgeyByZXR1cm4gaXNTZXRP
bkZsYWdzMjxTdHJ1Y3R1cmVJc0ltbW9ydGFsPigpOyB9Ci0gICAgYm9vbCBvdmVycmlkZXNHZXRQ
cm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxPdmVycmlkZXNHZXRQ
cm9wZXJ0eU5hbWVzPigpOyB9Ci0gICAgYm9vbCBvdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0
eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxPdmVycmlkZXNBbnlGb3JtT2ZH
ZXRQcm9wZXJ0eU5hbWVzPigpOyB9CisgICAgYm9vbCBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5h
bWVzKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eU5hbWVzPigpOyB9CisgICAgYm9vbCBvdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1l
cygpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8T3ZlcnJpZGVzR2V0T3duU3BlY2lhbFBy
b3BlcnR5TmFtZXM+KCk7IH0KKyAgICBib29sIG92ZXJyaWRlc0FueUZvcm1PZkdldE93blByb3Bl
cnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzKCkg
fHwgb3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMoKTsgfQogICAgIGJvb2wgb3Zl
cnJpZGVzR2V0UHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxPdmVycmlk
ZXNHZXRQcm90b3R5cGU+KCk7IH0KICAgICBib29sIHByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygp
IGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nPigp
OyB9CiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSgpIGNvbnN0IHsgcmV0dXJu
IGlzU2V0T25GbGFnczI8R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmU+KCk7IH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDI3MDkzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09i
amVjdENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDcgKzE4Niw3IEBAIEpT
VmFsdWUgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eUQKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXModm0sIFByb3BlcnR5TmFtZU1vZGU6
OlN0cmluZ3NBbmRTeW1ib2xzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7Ci0gICAgb2Jq
ZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBnbG9iYWxP
YmplY3QsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2Rl
OjpJbmNsdWRlKSk7CisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5
TmFtZXMob2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnRpZXMsIERvbnRFbnVtUHJvcGVydGll
c01vZGU6OkluY2x1ZGUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAK
ICAgICBKU09iamVjdCogZGVzY3JpcHRvcnMgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxP
YmplY3QpOwpAQCAtMjk0LDcgKzI5NCw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihvYmpl
Y3RDb25zdHJ1Y3QKICAgICAgICAgICAgIGF1dG8gY2FuUGVyZm9ybUZhc3RQcm9wZXJ0eUVudW1l
cmF0aW9uRm9yT2JqZWN0QXNzaWduID0gW10gKFN0cnVjdHVyZSogc3RydWN0dXJlKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJv
cGVydHlOYW1lcygpKQorICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCku
b3ZlcnJpZGVzQW55Rm9ybU9mR2V0T3duUHJvcGVydHlOYW1lcygpKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEluZGV4ZWQgcHJv
cGVydGllcyBjYW4gYmUgaGFuZGxlZC4KICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1MzU4CkBAIC0zNTcsNyArMzU3LDcgQEAgSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKG9iamVjdENvbnN0cnVjdAogICAgICAgICB0YXJnZXRDYW5Q
ZXJmb3JtRmFzdFB1dCA9IGZhbHNlOwogCiAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3Bl
cnRpZXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzLCBQcml2YXRlU3lt
Ym9sTW9kZTo6RXhjbHVkZSk7Ci0gICAgICAgIHNvdXJjZS0+bWV0aG9kVGFibGUodm0pLT5nZXRP
d25Qcm9wZXJ0eU5hbWVzKHNvdXJjZSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0aWVzLCBFbnVtZXJh
dGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAgICAgICBzb3Vy
Y2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2UsIGdsb2JhbE9i
amVjdCwgcHJvcGVydGllcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICAgICAgdW5zaWduZWQg
bnVtUHJvcGVydGllcyA9IHByb3BlcnRpZXMuc2l6ZSgpOwpAQCAtNDAzLDcgKzQwMyw3IEBAIEpT
Q19ERUZJTkVfSE9TVF9GVU5DVElPTihvYmplY3RDb25zdHJ1Y3QKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyh2
bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUp
OwotICAgIHRhcmdldC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdl
dCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9w
ZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAgIHRhcmdldC0+bWV0aG9kVGFibGUodm0pLT5nZXRP
d25Qcm9wZXJ0eU5hbWVzKHRhcmdldCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0aWVzLCBEb250RW51
bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogCiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwpAQCAtNTU3LDcgKzU1Nyw3IEBAIHN0
YXRpYyBKU1ZhbHVlIGRlZmluZVByb3BlcnRpZXMoSlNHbG9iYWwKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0
eU5hbWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scywgUHJpdmF0ZVN5
bWJvbE1vZGU6OkV4Y2x1ZGUpOwotICAgIGFzT2JqZWN0KHByb3BlcnRpZXMpLT5tZXRob2RUYWJs
ZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMoYXNPYmplY3QocHJvcGVydGllcyksIGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01v
ZGU6OkV4Y2x1ZGUpKTsKKyAgICBhc09iamVjdChwcm9wZXJ0aWVzKS0+bWV0aG9kVGFibGUodm0p
LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKGFzT2JqZWN0KHByb3BlcnRpZXMpLCBnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgc2l6ZV90IG51bVByb3BlcnRpZXMg
PSBwcm9wZXJ0eU5hbWVzLnNpemUoKTsKICAgICBWZWN0b3I8UHJvcGVydHlEZXNjcmlwdG9yPiBk
ZXNjcmlwdG9yczsKQEAgLTY0OCw3ICs2NDgsNyBAQCBib29sIHNldEludGVncml0eUxldmVsKEpT
R2xvYmFsT2JqZWN0KiBnCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFByb3BlcnR5TmFt
ZUFycmF5IHByb3BlcnRpZXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xz
LCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2
bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnRpZXMs
IEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CisgICAg
b2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBnbG9i
YWxPYmplY3QsIHByb3BlcnRpZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAogICAgIFByb3BlcnR5TmFt
ZUFycmF5Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcm9wZXJ0aWVzLmVuZCgpOwpAQCAtNjk1LDcg
KzY5NSw3IEBAIGJvb2wgdGVzdEludGVncml0eUxldmVsKEpTR2xvYmFsT2JqZWN0KiAKIAogICAg
IC8vIDYuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuCiAgICAgUHJvcGVy
dHlOYW1lQXJyYXkga2V5cyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMs
IFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZt
KS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGdsb2JhbE9iamVjdCwga2V5cywgRW51bWVy
YXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKKyAgICBvYmplY3Qt
Pm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGdsb2JhbE9iamVj
dCwga2V5cywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIC8vIDcuIEZvciBlYWNoIGVsZW1lbnQgayBv
ZiBrZXlzLCBkbwpAQCAtODc3LDcgKzg3Nyw3IEBAIEpTQXJyYXkqIG93blByb3BlcnR5S2V5cyhK
U0dsb2JhbE9iamVjdCoKICAgICB9CiAKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVz
KHZtLCBwcm9wZXJ0eU5hbWVNb2RlLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7Ci0gICAg
b2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBnbG9i
YWxPYmplY3QsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShkb250RW51bVByb3BlcnRpZXNN
b2RlKSk7CisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMo
b2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnRpZXMsIGRvbnRFbnVtUHJvcGVydGllc01vZGUp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgaWYgKHBy
b3BlcnR5TmFtZU1vZGUgIT0gUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJ
KHJldmlzaW9uIDI3MDkzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODkwLDEwICs4OTAsOSBAQCB2b2lkIFByb3h5
T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVydHlOCiAgICAgSlNWYWx1ZSBvd25LZXlzTWV0aG9k
ID0gaGFuZGxlci0+Z2V0TWV0aG9kKGdsb2JhbE9iamVjdCwgY2FsbERhdGEsIG1ha2VJZGVudGlm
aWVyKHZtLCAib3duS2V5cyIpLCAiJ293bktleXMnIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5k
bGVyIHNob3VsZCBiZSBjYWxsYWJsZSJfcyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKICAgICBKU09iamVjdCogdGFyZ2V0ID0gdGhpcy0+dGFyZ2V0KCk7Ci0gICAg
RW51bWVyYXRpb25Nb2RlIGVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJ
bmNsdWRlKTsKICAgICBpZiAob3duS2V5c01ldGhvZC5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAg
IHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgdGFyZ2V0LT5tZXRob2RUYWJsZSh2bSktPmdldE93
blByb3BlcnR5TmFtZXModGFyZ2V0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIGVudW1l
cmF0aW9uTW9kZSk7CisgICAgICAgIHRhcmdldC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9w
ZXJ0eU5hbWVzKHRhcmdldCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVBy
b3BlcnRpZXNNb2RlOjpJbmNsdWRlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTQ2
LDcgKzk0NSw3IEBAIHZvaWQgUHJveHlPYmplY3Q6OnBlcmZvcm1HZXRPd25Qcm9wZXJ0eU4KICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCiAgICAgUHJvcGVydHlOYW1l
QXJyYXkgdGFyZ2V0S2V5cyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMs
IFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKLSAgICB0YXJnZXQtPm1ldGhvZFRhYmxlKHZt
KS0+Z2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQsIGdsb2JhbE9iamVjdCwgdGFyZ2V0S2V5cywg
ZW51bWVyYXRpb25Nb2RlKTsKKyAgICB0YXJnZXQtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJv
cGVydHlOYW1lcyh0YXJnZXQsIGdsb2JhbE9iamVjdCwgdGFyZ2V0S2V5cywgRG9udEVudW1Qcm9w
ZXJ0aWVzTW9kZTo6SW5jbHVkZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9p
ZCgpKTsKICAgICBWZWN0b3I8VW5pcXVlZFN0cmluZ0ltcGwqPiB0YXJnZXRDb25maWd1cmFibGVL
ZXlzOwogICAgIFZlY3RvcjxVbmlxdWVkU3RyaW5nSW1wbCo+IHRhcmdldE5vbkNvbmZpZ3VyYWJs
ZUtleXM7CkBAIC0xMDEzLDM3ICsxMDEyLDE1IEBAIHZvaWQgUHJveHlPYmplY3Q6OnBlcmZvcm1H
ZXRPd25FbnVtZXJhYmwKICAgICB9CiB9CiAKLXZvaWQgUHJveHlPYmplY3Q6OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZUFycmF5LCBFbnVtZXJhdGlvbk1vZGUgZW51
bWVyYXRpb25Nb2RlKQordm9pZCBQcm94eU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09i
amVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lQXJyYXksIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsK
ICAgICBQcm94eU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm94eU9iamVjdCo+KG9iamVj
dCk7Ci0gICAgaWYgKGVudW1lcmF0aW9uTW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkp
CisgICAgaWYgKG1vZGUgPT0gRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkKICAgICAg
ICAgdGhpc09iamVjdC0+cGVyZm9ybUdldE93blByb3BlcnR5TmFtZXMoZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWVBcnJheSk7CiAgICAgZWxzZQogICAgICAgICB0aGlzT2JqZWN0LT5wZXJmb3Jt
R2V0T3duRW51bWVyYWJsZVByb3BlcnR5TmFtZXMoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVB
cnJheSk7CiB9CiAKLXZvaWQgUHJveHlPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkm
IHByb3BlcnR5TmFtZUFycmF5LCBFbnVtZXJhdGlvbk1vZGUgZW51bWVyYXRpb25Nb2RlKQotewot
ICAgIE5PX1RBSUxfQ0FMTFMoKTsKLSAgICBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhvYmpl
Y3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lQXJyYXksIGVudW1lcmF0aW9uTW9kZSk7Ci19
Ci0KLXZvaWQgUHJveHlPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUp
Ci17Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBQcm94eU9i
amVjdDo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCi17Ci0gICAgLy8gV2Ugc2hv
dWxkIGFsd2F5cyBnbyBkb3duIHRoZSBnZXRPd25Qcm9wZXJ0eU5hbWVzIHBhdGguCi0gICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBQcm94eU9iamVjdDo6Z2V0R2Vu
ZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKQotewotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci19Ci0KIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1TZXRQcm90b3R5cGUoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIGJvb2wgc2hvdWxkVGhy
b3dJZkNhbnRTZXQpCiB7CiAgICAgTk9fVEFJTF9DQUxMUygpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCShyZXZpc2lvbiAyNzA5MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw3ICszNCw3IEBAIGNsYXNzIFByb3h5T2JqZWN0IGZpbmFsIDogcHVibGljIEpTTm9u
RmkKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKIAotICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldENhbGxEYXRh
IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90
WmVybyB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQ
cm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0UHJvdG90eXBlIHwgUHJvaGliaXRzUHJvcGVydHlD
YWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJy
aWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRQcm90b3R5cGUgfCBPdmVycmlk
ZXNHZXRDYWxsRGF0YSB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm8gfCBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKQEAgLTU3LDcgKzU3LDYgQEAgcHVibGlj
OgogICAgICAgICBpZiAoaXNDYWxsYWJsZSkKICAgICAgICAgICAgIGZsYWdzIHw9IChJbXBsZW1l
bnRzSGFzSW5zdGFuY2UgfCBJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKTsKICAgICAgICAg
U3RydWN0dXJlKiByZXN1bHQgPSBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKFByb3h5T2JqZWN0VHlwZSwgZmxhZ3MpLCBpbmZvKCksIE5vbkFy
cmF5IHwgTWF5SGF2ZUluZGV4ZWRBY2Nlc3NvcnMpOwotICAgICAgICByZXN1bHQtPnNldElzUXVp
Y2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRGb3JFbnVtZXJhdGlvbihmYWxzZSk7CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFyZXN1bHQtPmNhbkFjY2Vzc1Byb3BlcnRpZXNRdWlja2x5Rm9yRW51bWVy
YXRpb24oKSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1bHQtPmNhbkNhY2hlUHJvcGVy
dHlOYW1lRW51bWVyYXRvcih2bSkpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtODksMTEg
Kzg4LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBwcmV2ZW50RXh0ZW5zaW9ucyhKU09i
amVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIGJvb2wgaXNFeHRlbnNpYmxlKEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9w
ZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKLSAgICBzdGF0aWMgdm9pZCBnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOwotICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgc3RhdGljIE5PX1JFVFVSTl9EVUVf
VE9fQ1JBU0ggdm9pZCBnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgc3Rh
dGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9k
ZSk7CiAgICAgc3RhdGljIGJvb2wgc2V0UHJvdG90eXBlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCk7CiAgICAg
c3RhdGljIEpTVmFsdWUgZ2V0UHJvdG90eXBlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsK
ICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJ
KHJldmlzaW9uIDI3MDkzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDI4ICs3NSwxMSBAQCBib29sIFJlZ0V4
cE9iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsCiAgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVBy
b3BlcnR5KGNlbGwsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotdm9p
ZCBSZWdFeHBPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIFJlZ0V4cE9iamVjdDo6Z2V0
T3duU3BlY2lhbFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0
aWVzTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBp
ZiAobW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpCisgICAgaWYgKG1vZGUgPT0gRG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
dm0ucHJvcGVydHlOYW1lcy0+bGFzdEluZGV4KTsKLSAgICBCYXNlOjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMob2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwot
fQotCi12b2lkIFJlZ0V4cE9iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCi17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwotICAgIGlmIChtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkKLSAg
ICAgICAgcHJvcGVydHlOYW1lcy5hZGQodm0ucHJvcGVydHlOYW1lcy0+bGFzdEluZGV4KTsKLSAg
ICBCYXNlOjpnZXRQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWVzLCBtb2RlKTsKLX0KLQotdm9pZCBSZWdFeHBPYmplY3Q6OmdldEdlbmVyaWNQcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKLXsKLSAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgaWYgKG1vZGUuaW5jbHVkZURvbnRF
bnVtUHJvcGVydGllcygpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZCh2bS5wcm9wZXJ0eU5h
bWVzLT5sYXN0SW5kZXgpOwotICAgIEJhc2U6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKG9iamVj
dCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogYm9vbCBSZWdFeHBP
YmplY3Q6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCShyZXZpc2lvbiAyNzA5MzIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIFJlZ0V4cE9i
amVjdCBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2lu
ZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzQW55Rm9y
bU9mR2V0UHJvcGVydHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lczsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgogICAgIHN0YXRpYyBJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpAQCAtMTQ2LDkgKzE0Niw3IEBAIHByaXZh
dGU6CiAgICAgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJv
cGVydHkoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIERlbGV0ZVByb3Bl
cnR5U2xvdCYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgdm9pZCBnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIGdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01v
ZGUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5
KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogCiAgICAgTWF0Y2hSZXN1bHQgbWF0Y2hJ
bmxpbmUoSlNHbG9iYWxPYmplY3QqLCBKU1N0cmluZyopOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCShyZXZpc2lvbiAyNzA5MzIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDUsNyArMTQ1LDcgQEAgYm9vbCBTdHJpbmdPYmplY3Q6OmRlbGV0ZVByb3Bl
cnR5QnlJbmRleAogICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRo
aXNPYmplY3QsIGdsb2JhbE9iamVjdCwgaSk7CiB9CiAKLXZvaWQgU3RyaW5nT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKK3ZvaWQgU3RyaW5nT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIFN0cmluZ09iamVjdCogdGhpc09iamVjdCA9IGpz
Q2FzdDxTdHJpbmdPYmplY3QqPihvYmplY3QpOwpAQCAtMTUzLDE3ICsxNTMsMTEgQEAgdm9pZCBT
dHJpbmdPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSgogICAgICAgICBpbnQgc2l6ZSA9IHRo
aXNPYmplY3QtPmludGVybmFsVmFsdWUoKS0+bGVuZ3RoKCk7CiAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRp
Zmllcjo6ZnJvbSh2bSwgaSkpOworICAgICAgICB0aGlzT2JqZWN0LT5nZXRPd25JbmRleGVkUHJv
cGVydHlOYW1lcyhnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogICAgIH0KLSAg
ICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZ2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLX0KLQotdm9pZCBTdHJpbmdPYmplY3Q6Omdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCi17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAg
IFN0cmluZ09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJpbmdPYmplY3QqPihvYmplY3Qp
OwotICAgIGlmIChtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkKKyAgICBpZiAobW9k
ZSA9PSBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKQogICAgICAgICBwcm9wZXJ0eU5h
bWVzLmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOwotICAgIHJldHVybiBKU09iamVjdDo6
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lcywgbW9kZSk7CisgICAgdGhpc09iamVjdC0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIFN0cmluZyBT
dHJpbmdPYmplY3Q6OnRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5o
CShyZXZpc2lvbiAyNzA5MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIGNsYXNzIFN0cmluZ09iamVjdCA6IHB1YmxpYyBKU1dyYXBwZXJPYmplY3QgewogcHVibGlj
OgogICAgIHVzaW5nIEJhc2UgPSBKU1dyYXBwZXJPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5
TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vi
c3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKQEAgLTU5LDggKzU5LDcgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9k
ZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHko
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlE
ZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmlu
Z05hbWUoY29uc3QgSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDI3MDkzMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE5NCwzMiArMTk0LDIwIEBAIHZvaWQgU3RydWN0dXJlOjp2YWxpZGF0ZUZsYWdz
KCkKICAgICAgICAgJiYgbWV0aG9kVGFibGUuZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sgIT0g
SlNDZWxsOjpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjazsKICAgICBSRUxFQVNFX0FTU0VSVChv
dmVycmlkZXNQdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2sgPT0gdHlwZUluZm8oKS5oYXNQdXRQcm9w
ZXJ0eVNlY3VyaXR5Q2hlY2soKSk7CiAKLSAgICBib29sIG92ZXJyaWRlc0dldFByb3BlcnR5TmFt
ZXMgPQotICAgICAgICBtZXRob2RUYWJsZS5nZXRQcm9wZXJ0eU5hbWVzICE9IEpTT2JqZWN0Ojpn
ZXRQcm9wZXJ0eU5hbWVzCi0gICAgICAgICYmIG1ldGhvZFRhYmxlLmdldFByb3BlcnR5TmFtZXMg
IT0gSlNDZWxsOjpnZXRQcm9wZXJ0eU5hbWVzOwogICAgIGJvb2wgb3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlOYW1lcyA9CiAgICAgICAgIG1ldGhvZFRhYmxlLmdldE93blByb3BlcnR5TmFtZXMgIT0g
SlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMKICAgICAgICAgJiYgbWV0aG9kVGFibGUuZ2V0
T3duUHJvcGVydHlOYW1lcyAhPSBKU0NlbGw6OmdldE93blByb3BlcnR5TmFtZXM7Ci0gICAgYm9v
bCBvdmVycmlkZXNHZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMgPQotICAgICAgICBtZXRob2RU
YWJsZS5nZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMgIT0gSlNPYmplY3Q6OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcwotICAgICAgICAmJiBtZXRob2RUYWJsZS5nZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMgIT0gSlNDZWxsOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXM7Ci0KLSAg
ICBSRUxFQVNFX0FTU0VSVChvdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzID09IHR5cGVJbmZvKCku
b3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcygpKTsKLQotICAgIC8vIFdlIGNhbiBzdHJlbmd0aGVu
IHRoaXMgaW50byBhbiBlcXVpdmFsZW5jZSB0ZXN0IGlmIHRoZXJlIGFyZSBubyBjbGFzc2VzCi0g
ICAgLy8gdGhhdCBzcGVjaWZpZXMgdGhpcyBmbGFnIHdpdGhvdXQgb3ZlcnJpZGluZyBhbnkgb2Yg
dGhlIGZvcm1zIG9mIGdldFByb3BlcnR5TmFtZXMuCi0gICAgLy8gRklYTUU6IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI5NTQKLSAgICBpZiAob3ZlcnJpZGVzR2V0
UHJvcGVydHlOYW1lcwotICAgICAgICB8fCBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzCi0g
ICAgICAgIHx8IG92ZXJyaWRlc0dldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcykKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQodHlwZUluZm8oKS5vdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5h
bWVzKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMg
PT0gdHlwZUluZm8oKS5vdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzKCkpOworCisgICAgYm9v
bCBvdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyA9CisgICAgICAgIG1ldGhvZFRh
YmxlLmdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzICE9IEpTT2JqZWN0OjpnZXRPd25TcGVjaWFs
UHJvcGVydHlOYW1lcworICAgICAgICAmJiBtZXRob2RUYWJsZS5nZXRPd25TcGVjaWFsUHJvcGVy
dHlOYW1lcyAhPSBKU0NlbGw6OmdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzOworICAgIFJFTEVB
U0VfQVNTRVJUKG92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzID09IHR5cGVJbmZv
KCkub3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMoKSk7CiAKICAgICBib29sIG92
ZXJyaWRlc0dldFByb3RvdHlwZSA9CiAgICAgICAgIG1ldGhvZFRhYmxlLmdldFByb3RvdHlwZSAh
PSBzdGF0aWNfY2FzdDxNZXRob2RUYWJsZTo6R2V0UHJvdG90eXBlRnVuY3Rpb25QdHI+KEpTT2Jq
ZWN0OjpnZXRQcm90b3R5cGUpCiAgICAgICAgICYmIG1ldGhvZFRhYmxlLmdldFByb3RvdHlwZSAh
PSBKU0NlbGw6OmdldFByb3RvdHlwZTsKLQotICAgIGlmIChvdmVycmlkZXNHZXRQcm90b3R5cGUp
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0UHJvdG90eXBl
KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG92ZXJyaWRlc0dldFByb3RvdHlwZSA9PSB0eXBlSW5m
bygpLm92ZXJyaWRlc0dldFByb3RvdHlwZSgpKTsKIH0KICNlbHNlCiBpbmxpbmUgdm9pZCBTdHJ1
Y3R1cmU6OnZhbGlkYXRlRmxhZ3MoKSB7IH0KQEAgLTEyMDMsNyArMTE5MSw3IEBAIFByb3BlcnR5
T2Zmc2V0IFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmcKICAgICAgICAgfSk7CiB9CiAKLXZvaWQg
U3RydWN0dXJlOjpnZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShWTSYgdm0sIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgU3Ry
dWN0dXJlOjpnZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShWTSYgdm0sIFByb3BlcnR5TmFt
ZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAg
ICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxlSWZOb3RFbXB0eSh2
bSk7CiAgICAgaWYgKCF0YWJsZSkKQEAgLTEyMTMsNyArMTIwMSw3IEBAIHZvaWQgU3RydWN0dXJl
OjpnZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnUKICAgICBib29sIGZvdW5kU3ltYm9sID0gZmFsc2U7
CiAKICAgICBhdXRvIGNoZWNrRG9udEVudW1BbmRBZGQgPSBbJl0oUHJvcGVydHlUYWJsZTo6aXRl
cmF0b3IgaXRlcikgewotICAgICAgICBpZiAoIShpdGVyLT5hdHRyaWJ1dGVzICYgUHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKSB8fCBtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkg
eworICAgICAgICBpZiAobW9kZSA9PSBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlIHx8
ICEoaXRlci0+YXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpIHsKICAg
ICAgICAgICAgIGlmIChrbm93blVuaXF1ZSkKICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVz
LmFkZFVuY2hlY2tlZChpdGVyLT5rZXkpOwogICAgICAgICAgICAgZWxzZQpAQCAtMTQ4OSw2ICsx
NDc3LDggQEAgYm9vbCBTdHJ1Y3R1cmU6OmNhbkFjY2Vzc1Byb3BlcnRpZXNRdWljawogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAodHlwZUluZm8oKS5vdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eU5hbWVzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlz
aW9uIDI3MDkzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MzAsNyArNTMwLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
Q2FjaGVkUHJvcGVydHlOYW1lcyhWTSYsIENhY2hlZFByb3BlcnR5TmFtZXNLaW5kLCBKU0ltbXV0
YWJsZUJ1dHRlcmZseSopOwogICAgIGJvb2wgY2FuQ2FjaGVPd25Qcm9wZXJ0eU5hbWVzKCkgY29u
c3Q7CiAKLSAgICB2b2lkIGdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKFZNJiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHZvaWQgZ2V0UHJvcGVydHlOYW1l
c0Zyb21TdHJ1Y3R1cmUoVk0mLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGll
c01vZGUpOwogCiAgICAgSlNWYWx1ZSBjYWNoZWRTcGVjaWFsUHJvcGVydHkoQ2FjaGVkU3BlY2lh
bFByb3BlcnR5S2V5IGtleSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCShyZXZpc2lvbiAyNzA5MzIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3NSw3ICsyNzUsNyBAQCBpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6OmNhbkNhY2hlT3du
UHJvcGVyCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoaGFzSW5kZXhlZFByb3BlcnRp
ZXMoaW5kZXhpbmdUeXBlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHR5cGVJ
bmZvKCkub3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcygpKQorICAgIGlmICh0eXBl
SW5mbygpLm92ZXJyaWRlc0FueUZvcm1PZkdldE93blByb3BlcnR5TmFtZXMoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkocmV2aXNpb24gMjcwOTMyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NDMsNyArNTQzLDcgQEAgc3RhdGljIEpTQ19ERUNMQVJFX0NVU1RPTV9HRVRURVIocnVudGltZQog
Y2xhc3MgUnVudGltZUFycmF5IDogcHVibGljIEpTQXJyYXkgewogcHVibGljOgogICAgIHR5cGVk
ZWYgSlNBcnJheSBCYXNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm8gfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAKIElHTk9SRV9XQVJOSU5HU19CRUdJ
TigidW51c2VkLWNvbnN0LXZhcmlhYmxlIikKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNEZXN0cnVjdGlvbiA9IGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjcwOTMyKQor
KysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcg
QEAKKzIwMjAtMTItMTcgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgor
CisgICAgICAgIFtKU0NdIFNpbXBsaWZ5IGdldCpQcm9wZXJ0eU5hbWVzKCkgbWV0aG9kcyBhbmQg
RW51bWVyYXRpb25Nb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTI5NTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGp1c3QgZm9yIGNoYW5nZXMgaW4gSlNDJ3MgTWV0aG9kVGFibGUsIFR5cGVJbmZv
LCBhbmQgRW51bWVyYXRpb25Nb2RlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZp
b3IgY2hhbmdlLgorCisgICAgICAgICogYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnByb2Nlc3NLZXlmcmFtZUxpa2VPYmplY3QpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRE9NQ29udmVydFJlY29yZC5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
RE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OmdldE93blByb3BlcnR5TmFtZXMp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTUmVtb3RlRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpzZXJpYWxpemUpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVHZXRPd25Q
cm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEdlbmVyYXRlSGVhZGVyKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvKjogVXBkYXRlZC4KKyAgICAgICAgKiBicmlkZ2UvTlBfanNv
YmplY3QuY3BwOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX2FycmF5LmNwcDoKKyAgICAgICAg
KEpTQzo6UnVudGltZUFycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBicmlk
Z2UvcnVudGltZV9hcnJheS5oOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX29iamVjdC5jcHA6
CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpSdW50aW1lT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9vYmplY3QuaDoKKwogMjAyMC0xMi0xNyAg
Um9iIEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIE1ha2UgRm9udENhc2NhZGU6
OkNvZGVQYXRoIGFuIGVudW0gY2xhc3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9L
ZXlmcmFtZUVmZmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYW5pbWF0aW9u
L0tleWZyYW1lRWZmZWN0LmNwcAkocmV2aXNpb24gMjcwOTMyKQorKysgU291cmNlL1dlYkNvcmUv
YW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM4LDcgKzIz
OCw3IEBAIHN0YXRpYyBpbmxpbmUgRXhjZXB0aW9uT3I8S2V5ZnJhbWVFZmZlY3QKIAogICAgIC8v
IDMuIExldCBpbnB1dCBwcm9wZXJ0aWVzIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgRW51
bWVyYWJsZU93bk5hbWVzIG9wZXJhdGlvbiB3aXRoIGtleWZyYW1lIGlucHV0IGFzIHRoZSBvYmpl
Y3QuCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgaW5wdXRQcm9wZXJ0aWVzKHZtLCBQcm9wZXJ0eU5h
bWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7Ci0gICAgSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5TmFtZXMoa2V5ZnJhbWVzSW5wdXQuZ2V0KCksICZsZXhpY2FsR2xv
YmFsT2JqZWN0LCBpbnB1dFByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhrZXlmcmFtZXNJbnB1dC5nZXQoKSwgJmxleGljYWxH
bG9iYWxPYmplY3QsIGlucHV0UHJvcGVydGllcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhj
bHVkZSk7CiAKICAgICAvLyA0LiBNYWtlIHVwIGEgbmV3IGxpc3QgYW5pbWF0aW9uIHByb3BlcnRp
ZXMgdGhhdCBjb25zaXN0cyBvZiBhbGwgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgaW4gYm90
aCBpbnB1dCBwcm9wZXJ0aWVzIGFuZCBhbmltYXRhYmxlCiAgICAgLy8gICAgcHJvcGVydGllcywg
b3Igd2hpY2ggYXJlIGluIGlucHV0IHByb3BlcnRpZXMgYW5kIGNvbmZvcm0gdG8gdGhlIDxjdXN0
b20tcHJvcGVydHktbmFtZT4gcHJvZHVjdGlvbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQ29udmVydFJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFJlY29yZC5oCShyZXZpc2lvbiAyNzA5MzIpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRSZWNvcmQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgICAgIC8vIDQuIExl
dCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuCiAgICAgICAgIEpTQzo6UHJvcGVy
dHlOYW1lQXJyYXkga2V5cyh2bSwgSlNDOjpQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBKU0M6
OlByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKLSAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJs
ZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCAmbGV4aWNhbEdsb2JhbE9iamVjdCwg
a2V5cywgSlNDOjpFbnVtZXJhdGlvbk1vZGUoSlNDOjpEb250RW51bVByb3BlcnRpZXNNb2RlOjpJ
bmNsdWRlKSk7CisgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0
eU5hbWVzKG9iamVjdCwgJmxleGljYWxHbG9iYWxPYmplY3QsIGtleXMsIEpTQzo6RG9udEVudW1Q
cm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSk7CiAKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKIApAQCAtMTEzLDcgKzExMyw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAg
IC8vIDIuIElmIGRlc2MgaXMgbm90IHVuZGVmaW5lZCBhbmQgZGVzYy5bW0VudW1lcmFibGVdXSBp
cyB0cnVlOgogCi0gICAgICAgICAgICAvLyBJdCdzIG5lY2Vzc2FyeSB0byBmaWx0ZXIgZW51bWVy
YWJsZSBoZXJlIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBkZWZhdWx0IEVudW1lcmF0aW9uTW9kZSwK
KyAgICAgICAgICAgIC8vIEl0J3MgbmVjZXNzYXJ5IHRvIGZpbHRlciBlbnVtZXJhYmxlIGhlcmUg
cmF0aGVyIHRoYW4gdXNpbmcgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSwKICAgICAg
ICAgICAgIC8vIHRvIHByZXZlbnQgYW4gb2JzZXJ2YWJsZSBleHRyYSBbW0dldE93blByb3BlcnR5
XV0gb3BlcmF0aW9uIGluIHRoZSBjYXNlIG9mIFByb3h5T2JqZWN0IHJlY29yZHMuCiAgICAgICAg
ICAgICBpZiAoZGlkR2V0RGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkgewog
ICAgICAgICAgICAgICAgIC8vIDEuIExldCB0eXBlZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFu
IElETCB2YWx1ZSBvZiB0eXBlIEsuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiAyNzA5MzIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ1NCwxNCArNDU0LDE0IEBAIHN0YXRpYyB2b2lkIGFkZFNjb3BlZENoaWxkcmVuSW5kZXhl
cyhKU0cKIH0KIAogLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jd2luZG93cHJveHkt
b3ducHJvcGVydHlrZXlzCi12b2lkIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lk
IEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIEpTRE9NV2luZG93
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4ob2JqZWN0KTsKIAogICAgIGFkZFNj
b3BlZENoaWxkcmVuSW5kZXhlcygqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdC0+d3Jh
cHBlZCgpLCBwcm9wZXJ0eU5hbWVzKTsKIAogICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91
bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3Qt
PndyYXBwZWQoKSwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yKSkgewotICAgICAgICBpZiAobW9k
ZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpCisgICAgICAgIGlmIChtb2RlID09IERvbnRF
bnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpCiAgICAgICAgICAgICBhZGRDcm9zc09yaWdpbk93
blByb3BlcnR5TmFtZXM8Q3Jvc3NPcmlnaW5PYmplY3Q6OldpbmRvdz4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHJldmlz
aW9uIDI3MDkzMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsMTEgKzE4OCwxMSBAQCBib29sIEpTTG9jYXRp
b246OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKCiAgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3Bl
cnR5QnlJbmRleCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUp
OwogfQogCi12b2lkIEpTTG9jYXRpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9i
amVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNMb2NhdGlv
bjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERv
bnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBKU0xvY2F0aW9uKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTTG9jYXRpb24qPihvYmplY3QpOwogICAgIGlmICghQmluZGluZ1NlY3VyaXR5
OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNP
YmplY3QtPndyYXBwZWQoKS53aW5kb3coKSwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yKSkgewot
ICAgICAgICBpZiAobW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpCisgICAgICAgIGlm
IChtb2RlID09IERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpCiAgICAgICAgICAgICBh
ZGRDcm9zc09yaWdpbk93blByb3BlcnR5TmFtZXM8Q3Jvc3NPcmlnaW5PYmplY3Q6OkxvY2F0aW9u
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcyk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRv
d0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNS
ZW1vdGVET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiAyNzA5MzIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMCwxMSArMTAwLDExIEBAIGJvb2wgSlNSZW1vdGVET01XaW5kb3c6OmRlbGV0ZVBy
b3BlcnR5QnkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgSlNSZW1vdGVET01XaW5kb3c6
OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQordm9pZCBKU1JlbW90ZURPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewog
ICAgIC8vIEZJWE1FOiBBZGQgc2NvcGVkIGNoaWxkcmVuIGluZGV4ZXMuCiAKLSAgICBpZiAobW9k
ZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpCisgICAgaWYgKG1vZGUgPT0gRG9udEVudW1Q
cm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkKICAgICAgICAgYWRkQ3Jvc3NPcmlnaW5Pd25Qcm9wZXJ0
eU5hbWVzPENyb3NzT3JpZ2luT2JqZWN0OjpXaW5kb3c+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWVzKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiAyNzA5MzIpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzI4LDcgKzE3MjgsNyBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBD
bG9uZVNlcmlhbGl6ZXI6CiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aFN0YWNrLnJlbW92ZUxh
c3QoKTsKIAogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0YWNrLmFwcGVuZChQcm9wZXJ0
eU5hbWVBcnJheSh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1v
ZGU6OkV4Y2x1ZGUpKTsKLSAgICAgICAgICAgICAgICAgICAgYXJyYXktPm1ldGhvZFRhYmxlKHZt
KS0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKGFycmF5LCBtX2xleGljYWxHbG9iYWxPYmpl
Y3QsIHByb3BlcnR5U3RhY2subGFzdCgpLCBFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgICAgICAg
ICAgICAgICAgIGFycmF5LT5nZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMobV9sZXhpY2FsR2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6
RXhjbHVkZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eVN0YWNrLmxhc3QoKS5z
aXplKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlKE5vbkluZGV4UHJvcGVydGll
c1RhZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFN0YWNrLmFwcGVuZCgwKTsKQEAg
LTE3NzgsNyArMTc3OCw3IEBAIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIENsb25lU2VyaWFsaXpl
cjoKICAgICAgICAgICAgICAgICBpbnB1dE9iamVjdFN0YWNrLmFwcGVuZChpbk9iamVjdCk7CiAg
ICAgICAgICAgICAgICAgaW5kZXhTdGFjay5hcHBlbmQoMCk7CiAgICAgICAgICAgICAgICAgcHJv
cGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXkodm0sIFByb3BlcnR5TmFtZU1vZGU6
OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKSk7Ci0gICAgICAgICAgICAgICAg
aW5PYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhpbk9iamVjdCwg
bV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRW51bWVyYXRpb25N
b2RlKCkpOworICAgICAgICAgICAgICAgIGluT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93
blByb3BlcnR5TmFtZXMoaW5PYmplY3QsIG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlT
dGFjay5sYXN0KCksIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjoKICAgICAgICAgICAgIEZB
TExUSFJPVUdIOwpAQCAtMTg0Niw3ICsxODQ2LDcgQEAgU2VyaWFsaXphdGlvblJldHVybkNvZGUg
Q2xvbmVTZXJpYWxpemVyOgogICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0g
aW5wdXRPYmplY3RTdGFjay5sYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChqc0R5
bmFtaWNDYXN0PEpTTWFwKj4odm0sIG9iamVjdCkpOwogICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eVN0YWNrLmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJheSh2bSwgUHJvcGVydHlOYW1lTW9kZTo6
U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpKTsKLSAgICAgICAgICAgICAgICAg
ICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBt
X2xleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5U3RhY2subGFzdCgpLCBFbnVtZXJhdGlvbk1v
ZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRP
d25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eVN0
YWNrLmxhc3QoKSwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7CiAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlKE5vbk1hcFByb3BlcnRpZXNUYWcpOwogICAgICAgICAgICAgICAgICAg
ICBpbmRleFN0YWNrLmFwcGVuZCgwKTsKICAgICAgICAgICAgICAgICAgICAgZ290byBvYmplY3RT
dGFydFZpc2l0TWVtYmVyOwpAQCAtMTg5MCw3ICsxODkwLDcgQEAgU2VyaWFsaXphdGlvblJldHVy
bkNvZGUgQ2xvbmVTZXJpYWxpemVyOgogICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gaW5wdXRPYmplY3RTdGFjay5sYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChqc0R5bmFtaWNDYXN0PEpTU2V0Kj4odm0sIG9iamVjdCkpOwogICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eVN0YWNrLmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJheSh2bSwgUHJvcGVydHlOYW1l
TW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpKTsKLSAgICAgICAgICAg
ICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2Jq
ZWN0LCBtX2xleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5U3RhY2subGFzdCgpLCBFbnVtZXJh
dGlvbk1vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0p
LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eVN0YWNrLmxhc3QoKSwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7CiAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlKE5vblNldFByb3BlcnRpZXNUYWcpOwogICAgICAgICAgICAg
ICAgICAgICBpbmRleFN0YWNrLmFwcGVuZCgwKTsKICAgICAgICAgICAgICAgICAgICAgZ290byBv
YmplY3RTdGFydFZpc2l0TWVtYmVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDI3MDkzMikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTIyLDcgKzExMjIsNyBAQCBzdWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eU5h
bWVzCiAgICAgbXkgJG5hbWVkR2V0dGVyT3BlcmF0aW9uID0gR2V0TmFtZWRHZXR0ZXJPcGVyYXRp
b24oJGludGVyZmFjZSk7CiAgICAgbXkgJGluZGV4ZWRHZXR0ZXJPcGVyYXRpb24gPSBHZXRJbmRl
eGVkR2V0dGVyT3BlcmF0aW9uKCRpbnRlcmZhY2UpOwogICAgIAotICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgInZvaWQgJHtjbGFzc05hbWV9OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpXG4iKTsKKyAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICJ2b2lkICR7Y2xhc3NOYW1lfTo6Z2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9k
ZSlcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwogICAgIGlmICgkaW5kZXhl
ZEdldHRlck9wZXJhdGlvbiB8fCAkbmFtZWRHZXR0ZXJPcGVyYXRpb24pIHsKICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9i
amVjdCk7XG4iKTsKQEAgLTExNDgsNyArMTE0OCw3IEBAIHN1YiBHZW5lcmF0ZUdldE93blByb3Bl
cnR5TmFtZXMKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBmb3IgKGF1dG8m
IHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5h
bWVzKCkpXG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcHJv
cGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlOYW1lKSk7
XG4iKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBpZiAobW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpIHtcbiIpOworICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChtb2RlID09IERvbnRFbnVtUHJvcGVy
dGllc01vZGU6OkluY2x1ZGUpIHtcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQo
KS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpXG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIHByb3BlcnR5TmFtZSkpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgfVxuIik7CkBAIC0yOTgwLDggKzI5ODAsOCBAQCBzdWIgR2VuZXJhdGVIZWFk
ZXIKICAgICB9CiAgICAgCiAgICAgaWYgKEluc3RhbmNlT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlO
YW1lcygkaW50ZXJmYWNlKSkgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0
YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUg
PSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTtcbiIpOwotICAgICAgICAkc3RydWN0dXJlRmxhZ3N7
IkpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyJ9ID0gMTsKKyAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVB
cnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7XG4iKTsKKyAgICAgICAgJHN0cnVj
dHVyZUZsYWdzeyJKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMifSA9IDE7CiAgICAg
fQogICAgIAogICAgIGlmIChJbnN0YW5jZU92ZXJyaWRlc1B1dCgkaW50ZXJmYWNlKSkgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFy
Z2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCShyZXZpc2lvbiAyNzA5MzIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMDgsNyArMjA4LDcgQEAgYm9vbCBKU1Rlc3RFdmVudFRhcmdldDo6
Z2V0T3duUHJvcGVydHlTbAogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAot
dm9pZCBKU1Rlc3RFdmVudFRhcmdldDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3RFdmVu
dFRhcmdldDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBKU0M6Omdl
dFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNUZXN0RXZlbnRUYXJnZXQqPihvYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmgJ
KHJldmlzaW9uIDI3MDkzMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RFdmVudFRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdEV2ZW50VGFyZ2V0KiB0b1dyYXBwZWQoSlNDOjpWTSYs
IEpTQzo6SlNWYWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6
SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6
UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0
eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUo
KSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkRvbnRF
bnVtUHJvcGVydGllc01vZGUpOwogCiAgICAgREVDTEFSRV9JTkZPOwogCkBAIC02Niw3ICs2Niw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRlc3RFdmVudFRhcmdldCY+
KEJhc2U6OndyYXBwZWQoKSk7CiAgICAgfQogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0
T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2Vw
dHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6
Ok1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3Bl
cnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlND
OjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3Ra
ZXJvIHwgSlNDOjpNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CiBwcm90ZWN0
ZWQ6CiAgICAgSlNUZXN0RXZlbnRUYXJnZXQoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9i
amVjdCYsIFJlZjxUZXN0RXZlbnRUYXJnZXQ+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNzA5MzIpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw3ICsxNzgsNyBAQCBi
b29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdlCiAgICAgcmV0dXJuIEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVj
dCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmll
cjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERv
bnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcio+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3MDkzMikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciogdG9XcmFwcGVkKEpT
Qzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1l
LCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3du
UHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRp
b25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09i
amVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlND
OjpEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0Nl
bGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1
ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpT
Qzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgYm9vbCBkZWZpbmVP
d25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJv
cGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhy
b3cpOwpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6
ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJ
c05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6
Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkludGVyY2Vw
dHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6
Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXI+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjcwOTMyKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw3ICsxNzgsNyBA
QCBib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvCiAgICAgcmV0dXJuIEpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9i
amVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9w
ZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0g
SlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KG9iamVjdCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhl
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbi5oCShyZXZpc2lvbiAyNzA5MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0SW5kZXhl
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1
ZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90
Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQ
cm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6
SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYs
IEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3Rh
dGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkRvbnRFbnVtUHJvcGVydGll
c01vZGUpOwogICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5
U2xvdCYpOwogICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNP
YmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpT
Qzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CkBAIC02NCw3ICs2NCw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6
OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW50ZXJjZXB0c0dl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3Zl
cnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xv
dEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OwogcHJvdGVjdGVk
OgogICAgIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbihKU0M6OlN0cnVjdHVy
ZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjcwOTMyKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw3ICsxODUsNyBAQCBib29sIEpTVGVzdEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3Qp
OwogfQogCi12b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQordm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3Bl
cnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllcio+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCShyZXZpc2lvbiAyNzA5MzIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKiB0b1dyYXBwZWQoSlND
OjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUs
IEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQ
cm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlv
bk1vZGUoKSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6
OkRvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2Vs
bCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVl
LCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlND
OjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBK
U0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93
blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9w
ZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJv
dyk7CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXpl
SGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElz
Tm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW50ZXJjZXB0
c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
cihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXI+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2Fj
eU92ZXJyaWRlQnVpbHRJbnMuY3BwCShyZXZpc2lvbiAyNzA5MzIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw3ICsxOTksNyBAQCBib29sIEpTVGVzdExlZ2FjeU92
ZXJyaWRlQnVpbHRJbnM6OmdldE93CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwog
fQogCi12b2lkIEpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OmdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
K3ZvaWQgSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6Z2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9k
ZSkKIHsKICAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucyo+
KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5z
LmgJKHJldmlzaW9uIDI3MDkzMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0TGVnYWN5T3ZlcnJpZGVCdWls
dElucyogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAg
c3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9k
ZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3Bl
cnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3Bl
cnR5TmFtZUFycmF5JiwgSlNDOjpEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAKICAgICBERUNMQVJFX0lORk87CkBAIC02MSw3
ICs2MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwq
LCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3du
UHJvcGVydHlTbG90SXNJbXB1cmUgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdl
dFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKKyAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlIHwgSlNDOjpJbnRlcmNlcHRz
R2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3Q7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucyhKU0M6
OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RMZWdhY3lPdmVycmlkZUJ1
aWx0SW5zPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI3MDkzMikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsNyArMjA3LDcg
QEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aQogICAgIHJldHVybiBK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxP
YmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9w
ZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIFZN
JiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihv
YmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAkocmV2aXNpb24gMjcwOTMyKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5v
SWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciogdG9XcmFwcGVk
KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlO
YW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0
T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVy
YXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpK
U09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5Jiwg
SlNDOjpEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpK
U0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNW
YWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4
KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgYm9vbCBkZWZp
bmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
UHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxk
VGhyb3cpOwpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5h
bHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwg
SlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNO
b3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGlu
ZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVy
dHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5X
aGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwg
SlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5
Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24uY3BwCShyZXZpc2lvbiAyNzA5MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsNyArMjA3LDcgQEAgYm9vbCBKU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZwogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90
KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBK
U0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihvYmpl
Y3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJKHJldmlzaW9uIDI3MDkzMikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAg
ICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25N
b2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJv
cGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJv
cGVydHlOYW1lQXJyYXkmLCBKU0M6OkRvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIHN0YXRp
YyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3Bl
cnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRp
YyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAg
IHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlw
dG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAg
ICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwog
cHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQ
cm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3Bl
cnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGli
aXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90
SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6
UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9i
YWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
PiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNzA5MzIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNyArMjE2LDcg
QEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbgogICAgIHJldHVybiBK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxP
YmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHBy
b3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAg
ICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXIqPihvYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3MDkzMikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBz
dGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2Rl
ID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVy
dHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVy
dHlOYW1lQXJyYXkmLCBKU0M6OkRvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIHN0YXRpYyBi
b29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5
TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBi
b29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIHN0
YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9y
JiwgYm9vbCBzaG91bGRUaHJvdyk7CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBz
dGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVi
bGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9w
ZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5
TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRz
UHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJ
bXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blBy
b3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJv
aGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmpl
Y3QmLCBSZWY8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPiYmKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
RGVsZXRlck5vSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllci5jcHAJ
KHJldmlzaW9uIDI3MDkzMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTAsNyArMTkwLDcgQEAgYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6Omdl
dAogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3Qs
IGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1l
ZERlbGV0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0TmFtZWRE
ZWxldGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3Qs
IEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIFZNJiB2
bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIqPihvYmplY3QpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVs
ZXRlck5vSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuaAkocmV2aXNp
b24gMjcwOTMyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0
MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllciog
dG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGlj
IHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpT
Qzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFt
ZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFt
ZUFycmF5JiwgSlNDOjpEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBk
ZWxldGVQcm9wZXJ0eShKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlBy
b3BlcnR5TmFtZSwgSlNDOjpEZWxldGVQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
dW5zaWduZWQpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKQEAgLTYz
LDcgKzYzLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2Vs
bCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRP
d25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0
c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6
T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1
cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3Bl
cnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKIHByb3RlY3RlZDoK
ICAgICBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RP
TUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyPiYmKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
RGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNl
cHRpb24uY3BwCShyZXZpc2lvbiAyNzA5MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTAsNyArMTkwLDcgQEAgYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJU
aHJvd2luZ0V4Y2VwdGlvbgogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAot
dm9pZCBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2Rl
KQordm9pZCBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGll
c01vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWREZWxldGVyVGhy
b3dpbmdFeGNlcHRpb24qPihvYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmgJKHJldmlzaW9uIDI3MDkzMikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJU
aHJvd2luZ0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uKiB0b1dyYXBw
ZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0
eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVt
ZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6
OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkm
LCBKU0M6OkRvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVBy
b3BlcnR5KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlO
YW1lLCBKU0M6OkRlbGV0ZVByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVBy
b3BlcnR5QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25l
ZCk7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwpAQCAtNjMsNyArNjMs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlND
OjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3Bl
cnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlk
ZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclBy
b3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhF
dmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1l
cyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OwogcHJvdGVjdGVkOgogICAgIEpT
VGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uKEpTQzo6U3RydWN0dXJlKiwgSlNET01H
bG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uPiYmKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZp
ZXIuY3BwCShyZXZpc2lvbiAyNzA5MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTYsNyArMTk2LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRl
bnRpZmllcjo6ZwogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBK
U1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09i
amVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBK
U1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09i
amVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkK
IHsKICAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIq
PihvYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJ
ZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3MDkzMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVk
RGVsZXRlcldpdGhJZGVudGlmaWVyKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7
CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7
CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0
KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9w
ZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNP
YmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpT
Qzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGlj
IHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkRvbnRFbnVtUHJvcGVydGllc01v
ZGUpOwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQzo6SlNDZWxsKiwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkRlbGV0ZVByb3BlcnR5U2xv
dCYpOwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0M6OkpTQ2VsbCos
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCk7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0M6OkpTQ2VsbCopOwpAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpT
Qzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGlj
IHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlB
YnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVu
TGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVz
IHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpH
ZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpT
Qzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlm
aWVyKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkRGVs
ZXRlcldpdGhJZGVudGlmaWVyPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCShyZXZpc2lvbiAyNzA5MzIpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxl
dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsNyArMjA3LDcg
QEAgYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcgogICAgIHJldHVybiBK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxP
YmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5k
ZXhlZEdldHRlcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRo
SW5kZXhlZEdldHRlcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBK
U0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIqPihvYmplY3QpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVs
ZXRlcldpdGhJbmRleGVkR2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVy
LmgJKHJldmlzaW9uIDI3MDkzMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkRGVsZXRl
cldpdGhJbmRleGVkR2V0dGVyKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0
eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6
RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIHZv
aWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkRvbnRFbnVtUHJvcGVydGllc01vZGUp
OwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkRlbGV0ZVByb3BlcnR5U2xvdCYp
OwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0M6OkpTQ2VsbCosIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCk7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShK
U0M6OkpTQ2VsbCopOwpAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZv
aWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNl
bmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVu
Z3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwg
SlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRP
d25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0
c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0
dGVyKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkRGVs
ZXRlcldpdGhJbmRleGVkR2V0dGVyPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZEdldHRlckNhbGxXaXRoLmNwcAkocmV2aXNpb24gMjcwOTMyKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTAsNyArMTkwLDcgQEAgYm9vbCBKU1Rlc3ROYW1lZEdldHRlckNh
bGxXaXRoOjpnZXRPd25QcgogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAot
dm9pZCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpT
VGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9i
amVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAg
Vk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgqPihvYmplY3QpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0
dGVyQ2FsbFdpdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5oCShyZXZpc2lvbiAyNzA5MzIp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRH
ZXR0ZXJDYWxsV2l0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgqIHRvV3JhcHBlZChKU0M6OlZNJiwg
SlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpK
U09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQ
cm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5
TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5
TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgp
KTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RG9udEVu
dW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCop
OwogCiAgICAgREVDTEFSRV9JTkZPOwpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAg
c3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJv
cGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0
eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CisgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
SlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6
SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVy
byB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdp
dGgoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRHZXR0
ZXJDYWxsV2l0aD4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVy
Tm9JZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjcwOTMyKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBAIGJvb2wgSlNUZXN0TmFtZWRHZXR0ZXJO
b0lkZW50aWZpZXI6OmdldE8KICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAK
LXZvaWQgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFBy
b3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3Zv
aWQgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUp
CiB7CiAgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyKj4o
b2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmll
ci5oCShyZXZpc2lvbiAyNzA5MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFRlc3ROYW1lZEdldHRlck5vSWRl
bnRpZmllciogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0g
ICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9u
TW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93blBy
b3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlBy
b3BlcnR5TmFtZUFycmF5JiwgSlNDOjpEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAKICAgICBERUNMQVJFX0lORk87CkBAIC02
MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0Nl
bGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0
T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2Vw
dHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6
Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1w
dXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90
QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CiBwcm90ZWN0ZWQ6
CiAgICAgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RP
TUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI+JiYpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuY3Bw
CShyZXZpc2lvbiAyNzA5MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE5Niw3ICsxOTYsNyBAQCBib29sIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6
OmdlCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVj
dCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpTVGVzdE5h
bWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9i
amVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0TmFt
ZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBW
TSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcio+KG9iamVjdCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmgJ
KHJldmlzaW9uIDI3MDkzMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0TmFtZWRHZXR0ZXJXaXRoSWRl
bnRpZmllciogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0g
ICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9u
TW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93blBy
b3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlBy
b3BlcnR5TmFtZUFycmF5JiwgSlNDOjpEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAKICAgICBERUNMQVJFX0lORk87CkBAIC02
MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0Nl
bGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0
T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2Vw
dHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6
Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1w
dXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90
QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CiBwcm90ZWN0ZWQ6
CiAgICAgSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcihKU0M6OlN0cnVjdHVyZSosIEpT
RE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyPiYmKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3Bw
CShyZXZpc2lvbiAyNzA5MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTAsNyArMTkwLDcgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0
TwogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3Qs
IGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1l
ZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkm
IHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3ROYW1lZFNl
dHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHBy
b3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0g
PSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihvYmplY3QpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
Tm9JZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3
MDkzMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlck5vSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKiB0b1dyYXBw
ZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0
eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVt
ZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6
OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkm
LCBKU0M6OkRvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIHN0YXRpYyBib29sIHB1dChKU0M6
OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpK
U1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIHB1dEJ5SW5k
ZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIHN0YXRpYyBib29sIGRl
ZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91
bGRUaHJvdyk7CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBh
bmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2Ug
fCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJ
c05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6
Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNo
aW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9w
ZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMg
fCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVy
dHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVy
KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkU2V0dGVy
Tm9JZGVudGlmaWVyPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjcwOTMyKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNyArMTkwLDcgQEAgYm9vbCBK
U1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOgogICAgIHJldHVybiBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGlu
ZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9u
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBE
b250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0gSlNDOjpnZXRWTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihvYmplY3QpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCShyZXZpc2lvbiAy
NzA5MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0
MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24qIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0
YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUg
PSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0
eU5hbWVBcnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGljIGJv
b2wgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlO
YW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJv
b2wgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgc3Rh
dGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3Im
LCBib29sIHNob3VsZFRocm93KTsKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0
YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3Bl
cnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlO
YW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQ
cm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0lt
cHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xv
dEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9o
aWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVm
PFRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiYmKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50
aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjcw
OTMyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYsNyArMTk2
LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZQogICAgIHJldHVy
biBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9i
YWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElk
ZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0gSlNDOjpn
ZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihvYmplY3QpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElk
ZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCShyZXZpc2lvbiAyNzA5
MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIqIHRvV3Jh
cHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3Bl
cnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lk
IGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVu
dW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJh
eSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGljIGJvb2wgcHV0KEpT
Qzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6
OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgcHV0QnlJ
bmRleChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgc3RhdGljIGJvb2wg
ZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNo
b3VsZFRocm93KTsKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lk
IGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5j
ZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IEpT
Qzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNh
Y2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclBy
b3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhF
dmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1l
cyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9w
ZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRp
ZmllcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZFNl
dHRlcldpdGhJZGVudGlmaWVyPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAkocmV2aXNpb24gMjcwOTMyKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNyArMjE2LDcgQEAg
Ym9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOgogICAgIHJldHVybiBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmpl
Y3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVk
R2V0dGVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0gSlNDOjpn
ZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIqPihvYmplY3QpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5oCShyZXZp
c2lvbiAyNzA5MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXIqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwot
ICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlv
bk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQ
cm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3Rh
dGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJv
cGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3Rh
dGljIGJvb2wgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAg
ICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2Ny
aXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwog
ICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZv
clByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJv
cGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9o
aWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNs
b3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlND
OjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSW5kZXhlZEdldHRlcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0
JiwgUmVmPFRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyPiYmKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0
dGVyQW5kU2V0dGVyLmNwcAkocmV2aXNpb24gMjcwOTMyKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJB
bmRTZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNyArMjE2LDcgQEAgYm9vbCBKU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQQogICAgIHJldHVybiBKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4
LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5k
U2V0dGVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXJBbmRTZXR0ZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZt
ID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIqPihv
YmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5oCShyZXZpc2lvbiAyNzA5MzIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlckFuZFNldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRT
ZXR0ZXIqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAg
IHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1v
ZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9w
ZXJ0eU5hbWVBcnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGlj
IGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVy
dHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGlj
IGJvb2wgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAg
c3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0
b3ImLCBib29sIHNob3VsZFRocm93KTsKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAg
IHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclBy
b3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhF
dmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVy
dHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJp
dHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJ
c0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5
U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQ
cm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFs
T2JqZWN0JiwgUmVmPFRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyPiYm
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
cldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAkocmV2aXNpb24gMjcwOTMyKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNyArMTkw
LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZQogICAgIHJldHVy
biBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9i
YWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhM
ZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTVGVzdE5hbWVk
U2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OmdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUp
CiB7CiAgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJy
aWRlQnVpbHRJbnMqPihvYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCShyZXZpc2lvbiAy
NzA5MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeU92ZXJyaWRlQnVpbHRJbnMqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsK
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsK
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3Bl
cnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09i
amVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlND
OjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMg
dm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9k
ZSk7CiAgICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90
Jik7CiAgICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91
bGRUaHJvdyk7CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVj
dCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQ
cm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKQEAgLTY0LDcgKzY0LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVh
cEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNs
b3RJc0ltcHVyZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlO
YW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQ
cm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0lt
cHVyZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxl
bmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hp
bmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVC
dWlsdElucyhKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zPiYmKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eVVuZm9yZ2VhYmxlUHJvcGVydGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9y
Z2VhYmxlUHJvcGVydGllcy5jcHAJKHJldmlzaW9uIDI3MDkzMikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZv
cmdlYWJsZVByb3BlcnRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNyArMjE0LDcgQEAg
Ym9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYQogICAgIHJldHVybiBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmpl
Y3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lV
bmZvcmdlYWJsZVByb3BlcnRpZXM6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzOjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBt
b2RlKQogewogICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lV
bmZvcmdlYWJsZVByb3BlcnRpZXMqPihvYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2Vh
YmxlUHJvcGVydGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3Bl
cnRpZXMuaAkocmV2aXNpb24gMjcwOTMyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVy
dGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcyogdG9XcmFw
cGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVy
dHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQg
Z2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51
bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlND
OjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5
JiwgSlNDOjpEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBwdXQoSlND
OjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6
SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBwdXRCeUlu
ZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgYm9vbCBk
ZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6UHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hv
dWxkVGhyb3cpOwpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQg
YW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNl
IHwgSlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJv
cGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNB
bnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Okdl
dE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpIYXNTdGF0
aWNQcm9wZXJ0eVRhYmxlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5h
bWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1By
b3BlcnR5Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdh
Y3lVbmZvcmdlYWJsZVByb3BlcnRpZXMoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVj
dCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzPiYm
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJy
aWRlQnVpbHRJbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3Bl
cnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAkocmV2aXNpb24gMjcwOTMyKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
V2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNyArMjE0LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhMZWdhY3lVbmZvcmdlYQogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsK
IH0KIAotdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRp
ZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJy
aWRlQnVpbHRJbnM6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0gSlND
OjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExl
Z2FjeU92ZXJyaWRlQnVpbHRJbnMqPihvYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2Vh
YmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5o
CShyZXZpc2lvbiAyNzA5MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5k
TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxl
UHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMqIHRvV3JhcHBlZChKU0M6OlZNJiwg
SlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpK
U09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQ
cm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5
TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5
TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgp
KTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RG9udEVu
dW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6
UHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0M6OkpTQ2Vs
bCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNW
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVy
dHkoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFt
ZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKQEAg
LTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpT
Q2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpH
ZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSB8IEpTQzo6SGFzU3RhdGljUHJvcGVydHlUYWJsZSB8
IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElz
Tm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hp
bmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSB8IEpTQzo6
SGFzU3RhdGljUHJvcGVydHlUYWJsZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xv
dEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9o
aWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucyhK
U0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zPiYm
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHJldmlzaW9uIDI3MDkzMikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTMwLDcgKzI1MzAsNyBAQCBib29sIEpTVGVzdE9iajo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRlCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVj
dCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpTVGVzdE9i
ajo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3RPYmo6OmdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFBy
b3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1v
ZGUpCiB7CiAgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE9iaio+KG9iamVjdCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5oCShyZXZpc2lvbiAyNzA5MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T2JqLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBUZXN0T2JqKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1
ZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90
Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQ
cm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6
SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYs
IEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3Rh
dGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkRvbnRFbnVtUHJvcGVydGll
c01vZGUpOwogICAgIHN0YXRpYyBKU0M6OkNhbGxEYXRhIGdldENhbGxEYXRhKEpTQzo6SlNDZWxs
Kik7CiAKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CkBAIC04NSw3ICs4
NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIHRlc3RTdGF0aWNDdXN0b21Q
cm9taXNlRnVuY3Rpb24oSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6Q2FsbEZyYW1lJiwgUmVm
PERlZmVycmVkUHJvbWlzZT4mJik7CiAgICAgSlNDOjpKU1ZhbHVlIHRlc3RDdXN0b21SZXR1cm5z
T3duUHJvbWlzZUZ1bmN0aW9uKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkNhbGxGcmFtZSYp
OwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SGFzU3RhdGljUHJvcGVydHlUYWJsZSB8IEpT
Qzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90
WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6T3Zl
cnJpZGVzR2V0Q2FsbERhdGEgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBKU0M6Okhhc1N0YXRpY1Byb3BlcnR5VGFibGUgfCBKU0M6OkludGVyY2VwdHNH
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92
ZXJyaWRlc0dldENhbGxEYXRhIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwg
SlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0
T2JqKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE9iaj4mJik7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAkocmV2aXNpb24gMjcw
OTMyKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDg3LDcgKzQ4Nyw3IEBAIGJvb2wgX05QTl9FbnVtZXJhdGUoTlBQLCBOUE9iamVj
dCogbywgTlAKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBn
bG9iYWxPYmplY3Q7CiAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXModm0s
IFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsK
IAotICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzKG9i
ai0+aW1wLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1v
ZGUoKSk7CisgICAgICAgIG9iai0+aW1wLT5nZXRQcm9wZXJ0eU5hbWVzKGxleGljYWxHbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpOwog
ICAgICAgICB1bnNpZ25lZCBzaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHByb3BlcnR5TmFt
ZXMuc2l6ZSgpKTsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJlYWxseSBjYWxsIE5Q
Tl9NZW1BbGxvYyBidXQgdGhhdCdzIGluIFdlYktpdAogICAgICAgICBOUElkZW50aWZpZXIqIGlk
ZW50aWZpZXJzID0gc3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVyKj4obWFsbG9jKHNpemVvZihOUElk
ZW50aWZpZXIpICogc2l6ZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVf
YXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2Fy
cmF5LmNwcAkocmV2aXNpb24gMjcwOTMyKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRp
bWVfYXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIEpTQ19ERUZJTkVf
Q1VTVE9NX0dFVFRFUihhcnJheUxlbmd0aEdldHQKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVtYmVyKHRoaXNPYmplY3QtPmdldExlbmd0aCgpKSk7CiB9CiAKLXZvaWQgUnVudGltZUFy
cmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIFJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01v
ZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IFJ1bnRpbWVBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxSdW50aW1lQXJyYXkqPihvYmplY3Qp
OwpAQCAtODMsMTAgKzgzLDEwIEBAIHZvaWQgUnVudGltZUFycmF5OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKEoKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAg
IHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20odm0sIGkpKTsKIAotICAgIGlmICht
b2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkKKyAgICBpZiAobW9kZSA9PSBEb250RW51
bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZCh2bS5w
cm9wZXJ0eU5hbWVzLT5sZW5ndGgpOwogCi0gICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFt
ZXModGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7
CisgICAgdGhpc09iamVjdC0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKGxleGljYWxHbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiBib29sIFJ1bnRpbWVBcnJheTo6
Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgJKHJldmlzaW9u
IDI3MDkzMikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBSdW50aW1l
QXJyYXkgZmluYWwgOiBwdWJsaWMgSlNBcnJheSB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9
IEpTQXJyYXk7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8
IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IElu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+CkBAIC01
OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICB+UnVudGltZUFycmF5KCk7CiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVy
YXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGll
c01vZGUpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3Qq
LCB1bnNpZ25lZCwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCos
IEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAkocmV2aXNp
b24gMjcwOTMyKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgwLDcgKzI4MCw3IEBAIENhbGxEYXRhIFJ1bnRpbWVPYmplY3Q6
OmdldENvbnN0cnVjdERhdGEKICAgICByZXR1cm4gY29uc3RydWN0RGF0YTsKIH0KIAotdm9pZCBS
dW50aW1lT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKQordm9pZCBSdW50aW1lT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0
aWVzTW9kZSkKIHsKICAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9ydW50aW1lX29iamVjdC5oCShyZXZpc2lvbiAyNzA5MzIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcs
NyBAQCBFeGNlcHRpb24qIHRocm93UnVudGltZU9iamVjdEludmFsaWRBY2NlCiBjbGFzcyBXRUJD
T1JFX0VYUE9SVCBSdW50aW1lT2JqZWN0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVi
bGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwotICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5
TmFtZXMgfCBPdmVycmlkZXNHZXRDYWxsRGF0YTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVz
R2V0Q2FsbERhdGE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24g
PSB0cnVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VB
Y2Nlc3M+CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ2FsbERhdGEgZ2V0
Q2FsbERhdGEoSlNDZWxsKik7CiAgICAgc3RhdGljIENhbGxEYXRhIGdldENvbnN0cnVjdERhdGEo
SlNDZWxsKik7CiAKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7
CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKIAog
ICAgIHZvaWQgaW52YWxpZGF0ZSgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjcwOTMyKQor
KysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBA
QAorMjAyMC0xMi0xNyAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CisK
KyAgICAgICAgW0pTQ10gU2ltcGxpZnkgZ2V0KlByb3BlcnR5TmFtZXMoKSBtZXRob2RzIGFuZCBF
bnVtZXJhdGlvbk1vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxMjk1NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkanVzdCBmb3IgY2hhbmdlcyBpbiBKU0MncyBNZXRob2RUYWJsZSwgVHlwZUluZm8s
IGFuZCBFbnVtZXJhdGlvbk1vZGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlv
ciBjaGFuZ2UuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9i
amVjdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmdldE93blByb3BlcnR5TmFt
ZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0Lmg6
CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0OjplbnVtZXJhdGUpOgorCiAyMDIwLTEyLTE3ICBS
b2IgQnVpcyAgPHJidWlzQGlnYWxpYS5jb20+CiAKICAgICAgICAgTWFrZSBGb250Q2FzY2FkZTo6
Q29kZVBhdGggYW4gZW51bSBjbGFzcwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1Bs
dWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAJKHJldmlzaW9uIDI3
MDkzMikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjUsNyArNDI1LDcgQEAgYm9vbCBKU05QT2Jq
ZWN0OjpkZWxldGVQcm9wZXJ0eShKU0dsb2JhbAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IEpTTlBPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVBcnJheSwgRW51bWVyYXRpb25Nb2RlKQordm9pZCBKU05QT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lQXJyYXksIERvbnRFbnVtUHJv
cGVydGllc01vZGUpCiB7CiAgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVj
dC5oCShyZXZpc2lvbiAyNzA5MzIpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9KU05QT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAg
Y2xhc3MgTlBSdW50aW1lT2JqZWN0TWFwOwogY2xhc3MgSlNOUE9iamVjdCBmaW5hbCA6IHB1Ymxp
YyBKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0g
SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Ok92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1l
cyB8IEpTQzo6T3ZlcnJpZGVzR2V0Q2FsbERhdGE7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMg
fCBKU0M6Ok92ZXJyaWRlc0dldENhbGxEYXRhOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQpAQCAtOTksNyArOTksNyBAQCBwcml2YXRlOgogCiAg
ICAgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgTlBJZGVudGlmaWVy
IHByb3BlcnR5TmFtZSk7CiAKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJh
eSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0
eU5hbWVBcnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAKICAgICBOUFJ1bnRp
bWVPYmplY3RNYXAqIG1fb2JqZWN0TWFwOwogICAgIE5QT2JqZWN0KiBtX25wT2JqZWN0OwpJbmRl
eDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvTlBKU09iamVjdC5jcHAJKHJldmlzaW9uIDI3MDkzMikKKysrIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTMsNyArMjUzLDcgQEAgYm9vbCBOUEpTT2JqZWN0OjplbnVtZXJhdGUoTlBJZGVudGlmaWVy
KgogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKIAogICAgIFByb3BlcnR5TmFtZUFycmF5IHBy
b3BlcnR5TmFtZXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xN
b2RlOjpFeGNsdWRlKTsKLSAgICBtX2pzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldFByb3Bl
cnR5TmFtZXMobV9qc09iamVjdC5nZXQoKSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOworICAgIG1fanNPYmplY3QtPmdldFByb3BlcnR5TmFt
ZXMobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVz
TW9kZTo6RXhjbHVkZSk7CiAKICAgICBOUElkZW50aWZpZXIqIG5hbWVJZGVudGlmaWVycyA9IG5w
bk1lbU5ld0FycmF5PE5QSWRlbnRpZmllcj4ocHJvcGVydHlOYW1lcy5zaXplKCkpOwogCkluZGV4
OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzA5MzIpCisrKyBTb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBA
QAorMjAyMC0xMi0xNyAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CisK
KyAgICAgICAgW0pTQ10gU2ltcGxpZnkgZ2V0KlByb3BlcnR5TmFtZXMoKSBtZXRob2RzIGFuZCBF
bnVtZXJhdGlvbk1vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxMjk1NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tOgor
ICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmVudW1lcmF0ZSk6
CisKIDIwMjAtMTItMTcgIFJvYiBCdWlzICA8cmJ1aXNAaWdhbGlhLmNvbT4KIAogICAgICAgICBN
YWtlIEZvbnRDYXNjYWRlOjpDb2RlUGF0aCBhbiBlbnVtIGNsYXNzCkluZGV4OiBTb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHku
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQv
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCShyZXZpc2lvbiAyNzA5MzIpCisrKyBTb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHkubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyNzMsNyArMTI3Myw3IEBAIGJvb2wgTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5OjplbnVtZXIKICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQo
KSk7CiAgCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyh2bSwgUHJvcGVydHlO
YW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwotICAgIG9iamVj
dC0+bWV0aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzKG9iamVjdCwgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOworICAgIG9iamVjdC0+
Z2V0UHJvcGVydHlOYW1lcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBEb250
RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKTsKIAogICAgIFJldGFpblB0cjxOU011dGFibGVB
cnJheT4gYXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVydHlOYW1lcy5zaXplKCk7IGkrKykgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416886</attachid>
            <date>2021-01-01 17:42:51 -0800</date>
            <delta_ts>2021-01-01 20:15:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212954-20210102034249.patch</filename>
            <type>text/plain</type>
            <size>214841</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzExMTcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIxIEBACisyMDIxLTAxLTAxICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBbSlNDXSBTaW1wbGlmeSBnZXQqUHJvcGVydHlOYW1lcygp
IG1ldGhvZHMgYW5kIEVudW1lcmF0aW9uTW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyOTU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtl
IFN1enVraS4KKworICAgICAgICAqIENoYWtyYUNvcmUueWFtbDoKKyAgICAgICAgKiBDaGFrcmFD
b3JlL3Rlc3QvQmFzaWNzL2VudW0uYmFzZWxpbmUtanNjOiBSZW1vdmVkLgorICAgICAgICAqIG1p
Y3JvYmVuY2htYXJrcy9mb3ItaW4tb24tb2JqZWN0LXdpdGgtbGF6aWx5LW1hdGVyaWFsaXplZC1w
cm9wZXJ0aWVzLmpzOgorICAgICAgICBSZW1vdmVkIGJlY2F1c2UgRXJyb3JJbnN0YW5jZSBubyBs
b25nZXIgbWF0ZXJpYWxpemVzIHByb3BlcnRpZXMgZHVyaW5nIGZvci9pbiBlbnVtZXJhdGlvbi4K
KworICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9vYmplY3Qta2V5cy1jbG9uZWQtYXJndW1lbnRz
LmpzOiBBZGRlZC4KKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3Mvb2JqZWN0LWtleXMtZXJyb3It
b2JqZWN0LmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3MvYXJndW1lbnRzLXByb3BlcnRpZXMt
b3JkZXIuanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVzcy9mb3ItaW4tdGVzdHMuanM6CisgICAg
ICAgICogc3RyZXNzL2Zvci1pbi10eXBlZC1hcnJheS5qczoKKwogMjAyMC0xMi0zMSAgQWxleGV5
IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgSlNGdW5jdGlvbjo6
ZGVsZXRlUHJvcGVydHkoKSBmYWlscyB0byBkZWxldGUgYSBub24tZXhpc3RlbnQgInByb3RvdHlw
ZSIgcHJvcGVydHkKSW5kZXg6IEpTVGVzdHMvQ2hha3JhQ29yZS55YW1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEpTVGVzdHMvQ2hha3JhQ29yZS55YW1sCShyZXZpc2lvbiAyNzExMTYpCisrKyBKU1Rlc3RzL0No
YWtyYUNvcmUueWFtbAkod29ya2luZyBjb3B5KQpAQCAtMzAzLDcgKzMwMyw3IEBACiAtIHBhdGg6
IENoYWtyYUNvcmUvdGVzdC9CYXNpY3Mvc2Nhbi5qcwogICBjbWQ6IHJ1bkNoYWtyYSA6YmFzZWxp
bmUsICJOb0V4Y2VwdGlvbiIsICJzY2FuLmJhc2VsaW5lLWpzYyIsIFtdCiAtIHBhdGg6IENoYWty
YUNvcmUvdGVzdC9CYXNpY3MvZW51bS5qcwotICBjbWQ6IHJ1bkNoYWtyYSA6YmFzZWxpbmUsICJO
b0V4Y2VwdGlvbiIsICJlbnVtLmJhc2VsaW5lLWpzYyIsIFtdCisgIGNtZDogcnVuQ2hha3JhIDpw
YXNzLCAiTm9FeGNlcHRpb24iLCAiIiwgW10KIC0gcGF0aDogQ2hha3JhQ29yZS90ZXN0L0Jhc2lj
cy93aXRoMy5qcwogICBjbWQ6IHJ1bkNoYWtyYSA6YmFzZWxpbmUsICJOb0V4Y2VwdGlvbiIsICJ3
aXRoMy5iYXNlbGluZS1qc2MiLCBbXQogLSBwYXRoOiBDaGFrcmFDb3JlL3Rlc3QvQmFzaWNzL2Ny
b3NzX3NpdGVfYWNjZXNzb3JfbWFpbi5qcwpJbmRleDogSlNUZXN0cy9DaGFrcmFDb3JlL3Rlc3Qv
QmFzaWNzL2VudW0uYmFzZWxpbmUtanNjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hha3JhQ29y
ZS90ZXN0L0Jhc2ljcy9lbnVtLmJhc2VsaW5lLWpzYwkocmV2aXNpb24gMjcxMTE2KQorKysgSlNU
ZXN0cy9DaGFrcmFDb3JlL3Rlc3QvQmFzaWNzL2VudW0uYmFzZWxpbmUtanNjCShub25leGlzdGVu
dCkKQEAgLTEsMTE3ICswLDAgQEAKLXg6YS54Ci1xOmEucQotdTphLnEKLXo6Zi5wLnoKLXI6Zi5w
LnIKLXk6by5wLnkKLU9iamVjdCBhCi14Ci15Ci11Ci16Ci1NYXRoCi11Ci14Ci15Ci16Ci1BcnJh
eQotdQoteAoteQotegotQXJyYXkucHJvdG90eXBlCi11Ci14Ci15Ci16Ci1EYXRlCi11Ci14Ci15
Ci16Ci1OdW1iZXIKLXUKLXgKLXkKLXoKLVN0cmluZwotdQoteAoteQotegotT2JqZWN0LnByb3Rv
dHlwZQotdQoteAoteQotegotT2JqZWN0Ci11Ci14Ci15Ci16Ci1BcnJheS5wcm90b3R5cGUuc29y
dAotdQoteAoteQotegotZnVuY3Rpb24gZm9vCi11Ci14Ci15Ci16Ci14Ci11Ci15Ci16Ci1tZSBo
ZXJlCi1wcm90b3R5cGUgY2hhaW4KLXUKLXgKLXkKLXoKLUxpdGVyYWwgU3RyaW5nCi0wCi0xCi0y
Ci0zCi00Ci01Ci02Ci03Ci04Ci05Ci16egotdQoteAoteQotegotU3RyaW5nIE9iamVjdAoteHgK
LXl5Ci0wCi0xCi0yCi0zCi00Ci01Ci02Ci03Ci04Ci05Ci0xMAotMTEKLXp6Ci11Ci14Ci15Ci16
Ci01Ci11Ci14Ci15Ci16Ci0zCi11Ci14Ci15Ci16CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9mb3ItaW4tb24tb2JqZWN0LXdpdGgtbGF6aWx5LW1hdGVyaWFsaXplZC1wcm9wZXJ0aWVz
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1vbi1vYmpl
Y3Qtd2l0aC1sYXppbHktbWF0ZXJpYWxpemVkLXByb3BlcnRpZXMuanMJKHJldmlzaW9uIDI3MTEx
NikKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1vbi1vYmplY3Qtd2l0aC1sYXpp
bHktbWF0ZXJpYWxpemVkLXByb3BlcnRpZXMuanMJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNSArMCww
IEBACi0vL0Agc2tpcCBpZiAkbW9kZWwgPT0gIkFwcGxlIFdhdGNoIFNlcmllcyAzIiAjIGFkZGVk
IGJ5IG1hcmstanNjLXN0cmVzcy10ZXN0LnB5Ci1mdW5jdGlvbiBmb28obykgewotICAgIHZhciBj
b3VudCA9IDA7Ci0gICAgZm9yICh2YXIgcCBpbiBvKSB7Ci0gICAgICAgIGlmIChvW3BdKQotICAg
ICAgICAgICAgY291bnQgKys7Ci0gICAgfQotICAgIHJldHVybiBjb3VudDsKLX0KLW5vSW5saW5l
KGZvbyk7Ci0KLXZhciB0b3RhbCA9IDA7Ci1mb3IgKGxldCBqID0gMDsgaiA8IDEwMDAwMDsgKytq
KQotICAgIHRvdGFsICs9IGZvbyhuZXcgRXJyb3IpOwotCkluZGV4OiBKU1Rlc3RzL21pY3JvYmVu
Y2htYXJrcy9vYmplY3Qta2V5cy1jbG9uZWQtYXJndW1lbnRzLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpT
VGVzdHMvbWljcm9iZW5jaG1hcmtzL29iamVjdC1rZXlzLWNsb25lZC1hcmd1bWVudHMuanMJKG5v
bmV4aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3Mvb2JqZWN0LWtleXMtY2xvbmVk
LWFyZ3VtZW50cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkgQEAKK25vSW5saW5lKE9i
amVjdC5rZXlzKTsKKworZnVuY3Rpb24gZ2V0QXJncyhhLCBiLCBjKSB7CisgICAgInVzZSBzdHJp
Y3QiOworICAgIHJldHVybiBhcmd1bWVudHM7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMmU1
OyArK2kpCisgICAgT2JqZWN0LmtleXMoZ2V0QXJncygxLCAyLCAzKSk7CkluZGV4OiBKU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9vYmplY3Qta2V5cy1lcnJvci1vYmplY3QuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3Mvb2JqZWN0LWtleXMtZXJyb3Itb2JqZWN0LmpzCShu
b25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL29iamVjdC1rZXlzLWVycm9y
LW9iamVjdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKK25vSW5saW5lKE9iamVj
dC5rZXlzKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAyZTU7ICsraSkKKyAgICBPYmplY3Qua2V5
cyhuZXcgRXJyb3IoKSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9hcmd1bWVudHMtcHJvcGVydGll
cy1vcmRlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9hcmd1bWVudHMtcHJvcGVy
dGllcy1vcmRlci5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9hcmd1bWVudHMt
cHJvcGVydGllcy1vcmRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc5IEBACitmdW5j
dGlvbiBnZXRNYXBwZWRBcmd1bWVudHMoYSwgYikgeyByZXR1cm4gYXJndW1lbnRzOyB9CitmdW5j
dGlvbiBnZXRVbm1hcHBlZEFyZ3VtZW50cyhhLCBiKSB7ICJ1c2Ugc3RyaWN0IjsgcmV0dXJuIGFy
Z3VtZW50czsgfQorCitmdW5jdGlvbiBzaG91bGRCZUFycmF5KGFjdHVhbCwgZXhwZWN0ZWQpIHsK
KyAgICB2YXIgaXNFcXVhbCA9CisgICAgICAgIGFjdHVhbC5sZW5ndGggPT09IGV4cGVjdGVkLmxl
bmd0aCAmJgorICAgICAgICBhY3R1YWwuZXZlcnkoKGl0ZW0sIGluZGV4KSA9PiBpdGVtID09PSBl
eHBlY3RlZFtpbmRleF0pOworICAgIGlmICghaXNFcXVhbCkKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKGBFeHBlY3RlZCBbJHthY3R1YWwubWFwKFN0cmluZyl9XSB0byBlcXVhbCBbJHtleHBlY3Rl
ZC5tYXAoU3RyaW5nKX1dYCk7Cit9CisKK2Z1bmN0aW9uIGZvckluKG9iamVjdCkgeworICAgIHZh
ciBrZXlzID0gW107CisgICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkKKyAgICAgICAga2V5cy5w
dXNoKGtleSk7CisgICAgcmV0dXJuIGtleXM7Cit9CisKK25vSW5saW5lKGdldE1hcHBlZEFyZ3Vt
ZW50cyk7Citub0lubGluZShnZXRVbm1hcHBlZEFyZ3VtZW50cyk7Citub0lubGluZShmb3JJbik7
CisKKyhmdW5jdGlvbigpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7Cisg
ICAgICAgIHZhciBtYXBwZWRBcmd1bWVudHMgPSBnZXRNYXBwZWRBcmd1bWVudHMoMCwgMSwgMik7
CisgICAgICAgIHNob3VsZEJlQXJyYXkoZm9ySW4obWFwcGVkQXJndW1lbnRzKSwgWyIwIiwgIjEi
LCAiMiJdKTsKKyAgICAgICAgc2hvdWxkQmVBcnJheShPYmplY3Qua2V5cyhtYXBwZWRBcmd1bWVu
dHMpLCBbIjAiLCAiMSIsICIyIl0pOworICAgICAgICBzaG91bGRCZUFycmF5KFJlZmxlY3Qub3du
S2V5cyhtYXBwZWRBcmd1bWVudHMpLCBbIjAiLCAiMSIsICIyIiwgImxlbmd0aCIsICJjYWxsZWUi
LCBTeW1ib2wuaXRlcmF0b3JdKTsKKworICAgICAgICB2YXIgdW5tYXBwZWRBcmd1bWVudHMgPSBn
ZXRVbm1hcHBlZEFyZ3VtZW50cygwKTsKKyAgICAgICAgc2hvdWxkQmVBcnJheShmb3JJbih1bm1h
cHBlZEFyZ3VtZW50cyksIFsiMCJdKTsKKyAgICAgICAgc2hvdWxkQmVBcnJheShPYmplY3Qua2V5
cyh1bm1hcHBlZEFyZ3VtZW50cyksIFsiMCJdKTsKKyAgICAgICAgc2hvdWxkQmVBcnJheShSZWZs
ZWN0Lm93bktleXModW5tYXBwZWRBcmd1bWVudHMpLCBbIjAiLCAibGVuZ3RoIiwgImNhbGxlZSIs
IFN5bWJvbC5pdGVyYXRvcl0pOworICAgIH0KK30pKCk7CisKKyhmdW5jdGlvbigpIHsKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIHZhciBtYXBwZWRBcmd1bWVu
dHMgPSBnZXRNYXBwZWRBcmd1bWVudHMoMCwgMSk7CisgICAgICAgIG1hcHBlZEFyZ3VtZW50c1s4
XSA9IDg7CisgICAgICAgIG1hcHBlZEFyZ3VtZW50c1syXSA9IDI7CisgICAgICAgIHNob3VsZEJl
QXJyYXkoZm9ySW4obWFwcGVkQXJndW1lbnRzKSwgWyIwIiwgIjEiLCAiMiIsICI4Il0pOworICAg
ICAgICBzaG91bGRCZUFycmF5KE9iamVjdC5rZXlzKG1hcHBlZEFyZ3VtZW50cyksIFsiMCIsICIx
IiwgIjIiLCAiOCJdKTsKKyAgICAgICAgc2hvdWxkQmVBcnJheShSZWZsZWN0Lm93bktleXMobWFw
cGVkQXJndW1lbnRzKSwgWyIwIiwgIjEiLCAiMiIsICI4IiwgImxlbmd0aCIsICJjYWxsZWUiLCBT
eW1ib2wuaXRlcmF0b3JdKTsKKworICAgICAgICB2YXIgdW5tYXBwZWRBcmd1bWVudHMgPSBnZXRV
bm1hcHBlZEFyZ3VtZW50cygpOworICAgICAgICB1bm1hcHBlZEFyZ3VtZW50c1sxMl0gPSAxMjsK
KyAgICAgICAgdW5tYXBwZWRBcmd1bWVudHNbM10gPSAzOworICAgICAgICBzaG91bGRCZUFycmF5
KGZvckluKHVubWFwcGVkQXJndW1lbnRzKSwgWyIzIiwgIjEyIl0pOworICAgICAgICBzaG91bGRC
ZUFycmF5KE9iamVjdC5rZXlzKHVubWFwcGVkQXJndW1lbnRzKSwgWyIzIiwgIjEyIl0pOworICAg
ICAgICBzaG91bGRCZUFycmF5KFJlZmxlY3Qub3duS2V5cyh1bm1hcHBlZEFyZ3VtZW50cyksIFsi
MyIsICIxMiIsICJsZW5ndGgiLCAiY2FsbGVlIiwgU3ltYm9sLml0ZXJhdG9yXSk7CisgICAgfQor
fSkoKTsKKworKGZ1bmN0aW9uKCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kp
IHsKKyAgICAgICAgdmFyIG1hcHBlZEFyZ3VtZW50cyA9IGdldE1hcHBlZEFyZ3VtZW50cygwKTsK
KyAgICAgICAgbWFwcGVkQXJndW1lbnRzLmZvbyA9IDE7CisgICAgICAgIG1hcHBlZEFyZ3VtZW50
cy5iYXIgPSAyOworICAgICAgICBzaG91bGRCZUFycmF5KGZvckluKG1hcHBlZEFyZ3VtZW50cyks
IFsiMCIsICJmb28iLCAiYmFyIl0pOworICAgICAgICBzaG91bGRCZUFycmF5KE9iamVjdC5rZXlz
KG1hcHBlZEFyZ3VtZW50cyksIFsiMCIsICJmb28iLCAiYmFyIl0pOworICAgICAgICAvLyBGSVhN
RTogU3ltYm9sLml0ZXJhdG9yIHNob3VsZCBjb21lIGFmdGVyICJmb28iIGFuZCAiYmFyIiAKKyAg
ICAgICAgLy8gc2hvdWxkQmVBcnJheShSZWZsZWN0Lm93bktleXMobWFwcGVkQXJndW1lbnRzKSwg
WyIwIiwgImxlbmd0aCIsICJjYWxsZWUiLCAiZm9vIiwgImJhciIsIFN5bWJvbC5pdGVyYXRvcl0p
OworCisgICAgICAgIHZhciB1bm1hcHBlZEFyZ3VtZW50cyA9IGdldFVubWFwcGVkQXJndW1lbnRz
KDAsIDEsIDIpOworICAgICAgICB1bm1hcHBlZEFyZ3VtZW50cy5mb28gPSAxOworICAgICAgICB1
bm1hcHBlZEFyZ3VtZW50cy5iYXIgPSAyOworICAgICAgICBzaG91bGRCZUFycmF5KGZvckluKHVu
bWFwcGVkQXJndW1lbnRzKSwgWyIwIiwgIjEiLCAiMiIsICJmb28iLCAiYmFyIl0pOworICAgICAg
ICBzaG91bGRCZUFycmF5KE9iamVjdC5rZXlzKHVubWFwcGVkQXJndW1lbnRzKSwgWyIwIiwgIjEi
LCAiMiIsICJmb28iLCAiYmFyIl0pOworICAgICAgICAvLyBGSVhNRTogImNhbGxlZSIgc2hvdWxk
IGNvbWUgYmVmb3JlICJmb28iIGFuZCAiYmFyIgorICAgICAgICAvLyBzaG91bGRCZUFycmF5KFJl
ZmxlY3Qub3duS2V5cyh1bm1hcHBlZEFyZ3VtZW50cyksIFsiMCIsICIxIiwgIjIiLCAibGVuZ3Ro
IiwgImNhbGxlZSIsICJmb28iLCAiYmFyIiwgU3ltYm9sLml0ZXJhdG9yXSk7CisgICAgfQorfSko
KTsKKworLy8gRklYTUU6IEFkZCBtb3JlIHRlc3RzLCBjb3ZlcmluZzoKKy8vICogYWRkZWQgc3lt
Ym9sIHByb3BlcnRpZXM7CisvLyAqIGFkZGVkIHRvZ2V0aGVyIGluZGV4LCBub24taW5kZXgsIGFu
ZCBzeW1ib2wgcHJvcGVydGllczsKKy8vICogZGVsZXRlZCwgcmUtYWRkZWQsIGFuZCByZWRlZmlu
ZWQgYXMgRG9udEVudW0gaW5kZXggcHJvcGVydGllcywgYm90aCB3aXRoaW4gYW5kIGJleW9uZCAi
bGVuZ3RoIjsKKy8vICogZGVsZXRlZCwgcmUtYWRkZWQsIGFuZCByZWRlZmluZWQgYXMgRG9udEVu
dW0gImxlbmd0aCIsICJjYWxsZWUiLCBhbmQgU3ltYm9sLml0ZXJhdG9yIHByb3BlcnRpZXMuCklu
ZGV4OiBKU1Rlc3RzL3N0cmVzcy9mb3ItaW4tdGVzdHMuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0
cy9zdHJlc3MvZm9yLWluLXRlc3RzLmpzCShyZXZpc2lvbiAyNzExMTYpCisrKyBKU1Rlc3RzL3N0
cmVzcy9mb3ItaW4tdGVzdHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTg4LDYgKzg4LDIxIEBAIGZ1
bmN0aW9uIHNob3VsZFRocm93U3ludGF4RXJyb3Ioc2NyaXB0KSAKICAgICBmb28obnVsbCk7CiB9
KSgpOwogKGZ1bmN0aW9uKCkgeworICAgIC8vIEl0ZXJhdGUgb3ZlciBhbiBvYmplY3Qgd2l0aCBu
b24tcmVpZmllZCBzdGF0aWMgcHJvcGVydHkgbmFtZXMgJiBzdHJ1Y3R1cmUgcHJvcGVydHkKKyAg
ICBXZWJBc3NlbWJseS5mb28gPSAxOworCisgICAgZnVuY3Rpb24gZm9ySW4oKSB7CisgICAgICAg
IGZvciAodmFyIGtleSBpbiBXZWJBc3NlbWJseSkge30KKyAgICAgICAgcmV0dXJuIGtleTsKKyAg
ICB9CisgICAgbm9JbmxpbmUoZm9ySW4pOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAw
MDsgKytpKSB7CisgICAgICAgIGlmIChmb3JJbigpICE9PSAiZm9vIikKKyAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiYmFkIHJlc3VsdCIpOworICAgIH0KK30pKCk7CisoZnVuY3Rpb24oKSB7
CiAgICAgdmFyIGZvbyA9IGZ1bmN0aW9uKGEsIGIpIHsKICAgICAgICAgZm9yICh2YXIgcCBpbiBi
KSB7CiAgICAgICAgICAgICB2YXIgZjEgPSBhW3BdOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvZm9y
LWluLXR5cGVkLWFycmF5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2Zvci1pbi10
eXBlZC1hcnJheS5qcwkocmV2aXNpb24gMjcxMTE2KQorKysgSlNUZXN0cy9zdHJlc3MvZm9yLWlu
LXR5cGVkLWFycmF5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNiwzICsxNiwyNSBAQAogICAgIH0K
ICAgICBmb28obnVsbCk7CiB9KSgpOworCisoZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rpb24gZm9y
SW4oKSB7CisgICAgICAgIHZhciBhID0gbmV3IEludDMyQXJyYXkoNCk7CisgICAgICAgIGEuZm9v
ID0gMTsKKyAgICAgICAgYS5iYXIgPSAyOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEu
bGVuZ3RoOyArK2kpCisgICAgICAgICAgICBhW2ldID0gaTsKKworICAgICAgICB2YXIga2V5cyA9
IFtdOworICAgICAgICBmb3IgKHZhciBrIGluIGEpCisgICAgICAgICAgICBrZXlzLnB1c2goayk7
CisgICAgICAgIHJldHVybiBrZXlzLmpvaW4oInwiKTsKKyAgICB9CisgICAgbm9JbmxpbmUoZm9y
SW4pOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICB2YXIg
a2V5cyA9IGZvckluKCk7CisgICAgICAgIGlmIChrZXlzICE9PSAiMHwxfDJ8M3xmb298YmFyIikK
KyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIHJlc3VsdDogJHtrZXlzfWApOworICAg
IH0KK30pKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MTExNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwyMTkgQEAKKzIwMjEtMDEtMDEgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21h
aWwuY29tPgorCisgICAgICAgIFtKU0NdIFNpbXBsaWZ5IGdldCpQcm9wZXJ0eU5hbWVzKCkgbWV0
aG9kcyBhbmQgRW51bWVyYXRpb25Nb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTI5NTQKKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6
dWtpLgorCisgICAgICAgIEJlZm9yZSB0aGlzIGNoYW5nZSwgW1tPd25Qcm9wZXJ0eUtleXNdXSBv
dmVycmlkZXMgd2VyZSBzb21ldGltZXMgaW1wbGVtZW50ZWQKKyAgICAgICAgaW5jb25zaXN0ZW50
bHksIHZpYSBkaWZmZXJlbnQgZ2V0KlByb3BlcnR5TmFtZXMoKSBtZXRob2RzIHRoYXQgZHVwbGlj
YXRlZCBsb2dpYworICAgICAgICAoZS5nLiBFcnJvckluc3RhbmNlLCBSZWdFeHBPYmplY3QsIGFu
ZCBTdHJpbmdPYmplY3QpLgorCisgICAgICAgIFRoaXMgcGF0Y2g6CisKKyAgICAgICAgMS4gSW50
cm9kdWNlcyBhIGNsZWFyIGNvbnZlbnRpb24gdG8gaW1wbGVtZW50IFtbT3duUHJvcGVydHlLZXlz
XV0gb3ZlcnJpZGVzOgorICAgICAgICAgICBpZiBpdCdzIGRlZmluZWQgYnkgdGhlIHNwZWMsIGdl
dE93blByb3BlcnR5TmFtZXMoKSBtZXRob2QgaXMgdXNlZDsgb3RoZXJ3aXNlLAorICAgICAgICAg
ICBub24tbWF0ZXJpYWxpemVkIHByb3BlcnRpZXMgYXJlIGVudW1lcmF0ZWQgLyByZWlmaWVkIGlu
IGdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKCkuCisgICAgICAgICAgIFdoaWxlIG5vIGNsYXNz
IHNob3VsZCBkZWZpbmUgYm90aCBtZXRob2RzLCB3ZSBkb24ndCBhc3NlcnQgdGhpcyB0byBzdXBw
b3J0IGluaGVyaXRhbmNlLgorCisgICAgICAgICAgIFJlbW92ZXMgZ2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKCkgZnJvbSB0aGUgbWV0aG9kIHRhYmxlIGFuZCBjb252ZXJ0cyBpdCB0byBpbnN0
YW5jZQorICAgICAgICAgICBtZXRob2Q7IGl0cyBvdmVycmlkZXMgd2VyZSByZW5hbWVkIHRvIGdl
dE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKCkgYW5kIGV4ZW1wdGVkIGZyb20KKyAgICAgICAgICAg
Y2FsbGluZyB0aGUgbm8tb3AgYmFzZSBtZXRob2QuCisKKyAgICAgICAgICAgVGhpcyBhcHByb2Fj
aCB3YXMgY2hvc2VuLCBpbnN0ZWFkIG9mIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcygpIG92
ZXJyaWRlLCBiZWNhdXNlCisgICAgICAgICAgIGZvci9pbiBlbnVtZXJhdGlvbiBtdXN0IGJlIHN1
cmUgdGhlcmUgYXJlIG5vIGVudW1lcmFibGUgcHJvcGVydGllcyBiZXR3ZWVuCisgICAgICAgICAg
IGdldEVudW1lcmFibGVMZW5ndGgoKSBhbmQgdGhlIGZpcnN0IHN0cnVjdHVyZSBwcm9wZXJ0eS4K
KworICAgICAgICAgICBBbHNvLCByZW1vdmVzIGdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoKSBm
cm9tIHRoZSBtZXRob2QgdGFibGUgYXMgaXQncyB1bnJlYXNvbmFibGUKKyAgICAgICAgICAgdG8g
b3ZlcnJpZGUgaXQuCisKKyAgICAgICAgMi4gRXh0cmFjdHMgSlNPYmplY3Q6OmdldE93bkluZGV4
UHJvcGVydHlOYW1lcygpIGluc3RhbmNlIG1ldGhvZCB0byBlbmZvcmNlCisgICAgICAgICAgIGNv
cnJlY3QgZW51bWVyYXRpb24gb3JkZXIgaW4gZ2V0T3duUHJvcGVydHlOYW1lcygpIG92ZXJyaWRl
czogc3BlY2lhbCBpbmRpY2VzID0+CisgICAgICAgICAgIGJ1dHRlcmZseSBzdG9yYWdlID0+IHNw
ZWNpYWwgcHJvcGVydGllcyA9PiBub24tcmVpZmllZCBzdGF0aWMgPT4gc3RydWN0dXJlIHByb3Bl
cnRpZXMuCisKKyAgICAgICAgICAgTG9vc2UgbW9kZSBgYXJndW1lbnRzYCB3ZXJlIGZpeGVkIHRv
IGVudW1lcmF0ZSBpbmRpY2VzIGZyb20gYnV0dGVyZmx5IHN0b3JhZ2UgYmVmb3JlCisgICAgICAg
ICAgIHNwZWNpYWwgcHJvcGVydGllcyBbMV0sIGFsaWduaW5nIEpTQyB3aXRoIFY4IGFuZCBTcGlk
ZXJNb25rZXkuCisKKyAgICAgICAgMy4gUmV3b3JrcyBmb3IvaW4gZW51bWVyYXRpb24gc28gdGhl
IHNwZWNpYWwgcHJvcGVydGllcyBhbHdheXMgY29tZSBiZWZvcmUgc3RydWN0dXJlIG9uZXMsCisg
ICAgICAgICAgIGFsaWduaW5nIGVudW1lcmF0aW9uIG9yZGVyIG9mIFN0cmluZyBvYmplY3RzIFsy
XSBhbmQgdHlwZWQgYXJyYXlzIFszXSB0aGF0IGhhdmUgZXhwYW5kbworICAgICAgICAgICBwcm9w
ZXJ0aWVzIHdpdGggdGhlIHNwZWMsIFY4LCBhbmQgU3BpZGVyTW9ua2V5LgorCisgICAgICAgICAg
IFJlbW92ZXMgZ2V0UHJvcGVydHlOYW1lcygpIGFuZCBnZXRHZW5lcmljUHJvcGVydHlOYW1lcygp
IGZyb20gdGhlIG1ldGhvZCB0YWJsZSwgYWxvbmcKKyAgICAgICAgICAgd2l0aCB0aGVpciBvdmVy
cmlkZXMsIGJlY2F1c2UgRVM3IGRpc2FibGVkIGN1c3RvbWl6YXRpb24gb2YgZm9yL2luIGVudW1l
cmF0aW9uIFs0XS4KKyAgICAgICAgICAgSW5zdGVhZCwgSlNPYmplY3Q6OmdldFByb3BlcnR5TmFt
ZXMoKSBpbnN0YW5jZSBtZXRob2QgYW5kIGdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKCkKKyAg
ICAgICAgICAgYXJlIGludHJvZHVjZWQsIGZlYXR1cmluZyBhIGxvb3AgaW5zdGVhZCBvZiByZWN1
cnNpb24uCisKKyAgICAgICAgICAgQWxzbywgdGhpcyBlbmFibGVkIGRyb3BwaW5nIGhhcmQtdG8t
Zm9sbG93IEpTT2JqZWN0UHJvcGVydGllc01vZGUgYml0IGFuZCBzaW1wbGlmeWluZworICAgICAg
ICAgICBFbnVtZXJhdGlvbk1vZGUgdG8gYW4gZW51bS4KKworICAgICAgICBmb3IvaW4gYW5kIE9i
amVjdC5rZXlzIG1pY3JvYmVuY2htYXJrcyBhcmUgbmV1dHJhbC4gVGhpcyBjaGFuZ2UgZG9lcyBu
b3QgYWZmZWN0CisgICAgICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciBjYWNoaW5nLCBub3Ig
ZmFzdCBwYXRocyBvZiBpdHMgYnl0ZWNvZGVzLgorCisgICAgICAgIFsxXTogaHR0cHM6Ly90YzM5
LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVtYXBwZWRhcmd1bWVudHNvYmplY3QgKHN0ZXBzIDE1LTE2
IGFuZCAyMC0yMSkKKyAgICAgICAgWzJdOiBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0
cmluZy1leG90aWMtb2JqZWN0cy1vd25wcm9wZXJ0eWtleXMKKyAgICAgICAgWzNdOiBodHRwczov
L3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWludGVnZXItaW5kZXhlZC1leG90aWMtb2JqZWN0cy1vd25w
cm9wZXJ0eWtleXMKKyAgICAgICAgWzRdOiBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9lY21hMjYy
L3B1bGwvMzY3CisKKyAgICAgICAgKiBBUEkvSlNBUElWYWx1ZVdyYXBwZXIuaDoKKyAgICAgICAg
UmVtb3ZlIE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgc3RydWN0dXJlIGZsYWcg
YXMgaXQgc2hvdWxkIG5ldmVyIGJlIHF1ZXJpZWQKKyAgICAgICAgZnJvbSBKU0NlbGwgaW5zdGFu
Y2VzLgorCisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3QuaDoKKyAgICAgICAgKiBBUEkv
SlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2Jq
ZWN0PFBhcmVudD46OmdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6
SlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOiBE
ZWxldGVkLgorICAgICAgICAqIEFQSS9KU09iamVjdFJlZi5jcHA6CisgICAgICAgIChKU09iamVj
dENvcHlQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHA6
CisgICAgICAgIChJbnNwZWN0b3I6OmpzVG9JbnNwZWN0b3JWYWx1ZSk6CisgICAgICAgICogYnl0
ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok9i
amVjdEFsbG9jYXRpb25Qcm9maWxlQmFzZTxEZXJpdmVkPjo6cG9zc2libGVEZWZhdWx0UHJvcGVy
dHlDb3VudCk6CisgICAgICAgIFVzZSBEb250RW51bVByb3BlcnR5TW9kZTo6SW5jbHVkZSBhcyB0
aGUgaW50ZW50IGlzIHRvIGNvdW50IGFsbCBwcm9wZXJ0aWVzLCBldmVuCisgICAgICAgIHByaXZh
dGUgc3ltYm9scy4gRW51bWVyYXRpb25Nb2RlKCkgZGVmYXVsdHMgZGlkIGV4Y2x1ZGUgbm9uLWVu
dW1lcmFibGUgcHJvcGVydGllcy4KKworICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUu
Y3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlclNjb3BlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToK
KyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmg6CisgICAgICAgICogcnVudGltZS9D
bGFzc0luZm8uaDoKKyAgICAgICAgKiBydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHA6CisgICAg
ICAgIChKU0M6OkNsb25lZEFyZ3VtZW50czo6Z2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMpOgor
ICAgICAgICBEb24ndCBtYXRlcmlhbGl6ZSBEb250RW51bSBwcm9wZXJ0aWVzIHVubGVzcyBpdCdz
IERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUsCisgICAgICAgIGFkdmFuY2luZyBwcm92
aWRlZCBtaWNyb2JlbmNobWFyayBieSB+MjMlLgorCisgICAgICAgIChKU0M6OkNsb25lZEFyZ3Vt
ZW50czo6Z2V0T3duUHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9D
bG9uZWRBcmd1bWVudHMuaDoKKyAgICAgICAgKiBydW50aW1lL0VudW1lcmF0aW9uTW9kZS5oOgor
ICAgICAgICBFeHBsaWNpdGx5IHNwZWNpZnkgZW51bSB0eXBlIHRvIHJlZHVjZSBpdHMgc2l6ZS4K
KworICAgICAgICAoSlNDOjpFbnVtZXJhdGlvbk1vZGU6OkVudW1lcmF0aW9uTW9kZSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkVudW1lcmF0aW9uTW9kZTo6aW5jbHVkZURvbnRFbnVtUHJvcGVy
dGllcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkVudW1lcmF0aW9uTW9kZTo6aW5jbHVkZUpT
T2JqZWN0UHJvcGVydGllcyk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9FcnJvckluc3Rh
bmNlLmNwcDoKKyAgICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6Z2V0T3duU3BlY2lhbFByb3Bl
cnR5TmFtZXMpOgorICAgICAgICBEb24ndCBtYXRlcmlhbGl6ZSBEb250RW51bSBwcm9wZXJ0aWVz
IHVubGVzcyBpdCdzIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUsCisgICAgICAgIGFk
dmFuY2luZyBwcm92aWRlZCBtaWNyb2JlbmNobWFyayBieSBhIGZhY3RvciBvZiA1LgorCisgICAg
ICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OmdldFN0cnVjdHVyZVByb3BlcnR5
TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JJbnN0YW5jZS5oOgorICAg
ICAgICAqIHJ1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oOgorICAgICAgICAqIHJ1bnRpbWUvR2Vu
ZXJpY0FyZ3VtZW50c0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxU
eXBlPjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOiBEZWxl
dGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlND
ZWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAg
ICAgICAgKEpTQzo6SlNDZWxsOjpnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyk6CisgICAgICAg
IChKU0M6OkpTQ2VsbDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6SlNDZWxsOjpnZXRQcm9wZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6SlNDZWxsOjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SlNDZWxsOjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisgICAg
ICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3Bw
OgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyk6
CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6
IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6CisgICAgICAgICogcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50
aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIFJlbW92ZSBPdmVycmlkZXNBbnlGb3JtT2ZH
ZXRQcm9wZXJ0eU5hbWVzIHN0cnVjdHVyZSBmbGFnIGFzIGl0J3MgaW5oZXJpdGVkIGZyb20KKyAg
ICAgICAgSlNTeW1ib2xUYWJsZU9iamVjdCwgYW5kIEpTR2xvYmFsT2JqZWN0IGl0c2VsZiBkb2Vz
bid0IG92ZXJyaWRlIGdldE93bipQcm9wZXJ0eU5hbWVzKCkuCisKKyAgICAgICAgKiBydW50aW1l
L0pTTGV4aWNhbEVudmlyb25tZW50LmNwcDoKKyAgICAgICAgKEpTQzo6SlNMZXhpY2FsRW52aXJv
bm1lbnQ6OmdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNMZXhp
Y2FsRW52aXJvbm1lbnQ6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisg
ICAgICAgICogcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oOgorICAgICAgICAqIHJ1bnRp
bWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHA6CisgICAgICAgIChKU0M6OkpTTW9kdWxlRW52aXJv
bm1lbnQ6OmdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNNb2R1
bGVFbnZpcm9ubWVudDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaDoKKyAgICAgICAgKiBydW50aW1l
L0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVOYW1l
c3BhY2VPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICBDYWxsIGdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcygpIGRpcmVjdGx5LCBndWFyZGVkIGJ5IGluY2x1ZGVTeW1ib2xQ
cm9wZXJ0aWVzKCkgY2hlY2ssCisgICAgICAgIHNpbmNlIG1vZHVsZSBuYW1lc3BhY2Ugb2JqZWN0
cyBjYW4ndCBoYXZlIHN0cmluZyBwcm9wZXJ0aWVzIGJlc2lkZXMgbV9uYW1lcy4KKyAgICAgICAg
KFNlZSBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1vZHVsZS1uYW1lc3BhY2UtZXhvdGlj
LW9iamVjdHMtZGVmaW5lb3ducHJvcGVydHktcC1kZXNjKQorCisgICAgICAgICogcnVudGltZS9K
U01vZHVsZU5hbWVzcGFjZU9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5j
cHA6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wZXJ0
eSk6CisgICAgICAgIChKU0M6OldhbGtlcjo6d2Fsayk6CisgICAgICAgICogcnVudGltZS9KU09i
amVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXROb25SZWlmaWVkU3RhdGljUHJv
cGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6Z2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Z2V0T3duSW5kZXhlZFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6Z2V0
Q2xhc3NQcm9wZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdl
dFN0cnVjdHVyZVByb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUv
SlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blNwZWNpYWxQcm9wZXJ0
eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6OmdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBy
dW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oOgorICAgICAgICAoSlNDOjpwcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJveHkuY3BwOgorICAgICAg
ICAoSlNDOjpKU1Byb3h5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNQ
cm94eTo6Z2V0UHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTUHJveHk6
OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1By
b3h5OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGlt
ZS9KU1Byb3h5Lmg6CisgICAgICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duU3BlY2lhbFByb3BlcnR5
TmFtZXMpOgorICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJs
ZU9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlSW5mby5oOgorICAgICAgICAoSlND
OjpUeXBlSW5mbzo6b3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyBjb25zdCk6CisgICAgICAg
IChKU0M6OlR5cGVJbmZvOjpvdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyBjb25z
dCk6CisgICAgICAgIChKU0M6OlR5cGVJbmZvOjpvdmVycmlkZXNBbnlGb3JtT2ZHZXRPd25Qcm9w
ZXJ0eU5hbWVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VHlwZUluZm86Om92ZXJyaWRlc0dldFBy
b3BlcnR5TmFtZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpUeXBlSW5mbzo6b3Zl
cnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6Om9iamVjdENv
bnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyk6CisgICAgICAgIChKU0M6OkpTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTik6CisgICAgICAgIChKU0M6OmRlZmluZVByb3BlcnRpZXMpOgor
ICAgICAgICAoSlNDOjpzZXRJbnRlZ3JpdHlMZXZlbCk6CisgICAgICAgIChKU0M6OnRlc3RJbnRl
Z3JpdHlMZXZlbCk6CisgICAgICAgIChKU0M6Om93blByb3BlcnR5S2V5cyk6CisgICAgICAgICog
cnVudGltZS9Qcm94eU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpwZXJm
b3JtR2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OmdldFByb3BlcnR5
TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6Omdl
dFN0cnVjdHVyZVByb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQcm94eU9i
amVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRp
bWUvUHJveHlPYmplY3QuaDoKKyAgICAgICAgUmVtb3ZlIElzUXVpY2tQcm9wZXJ0eUFjY2Vzc0Fs
bG93ZWRGb3JFbnVtZXJhdGlvbiBmbGFnIGZyb20gUHJveHlPYmplY3QncyBzdHJ1Y3R1cmUKKyAg
ICAgICAgc2luY2UgY2FuQWNjZXNzUHJvcGVydGllc1F1aWNrbHlGb3JFbnVtZXJhdGlvbigpIG5v
dyBjaGVja3MgZm9yIG1ldGhvZCBvdmVycmlkZXMuCisKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4
cE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6Z2V0T3duU3BlY2lhbFBy
b3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OmdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6Z2V0
UHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6Z2V0
R2VuZXJpY1Byb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhw
T2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjpTdHJpbmdPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpT
dHJpbmdPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisgICAg
ICAgICogcnVudGltZS9TdHJpbmdPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dmFsaWRhdGVGbGFncyk6CisgICAgICAg
IFN0cmVuZ3RoZW4gb3ZlcnJpZGVzR2V0T3duKlByb3BlcnR5TmFtZXMgYW5kIG92ZXJyaWRlc0dl
dFByb3RvdHlwZSBhc3NlcnRzIGludG8KKyAgICAgICAgZXF1aXZhbGVuY2UgdGVzdHMuCisKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjpnZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2FuQWNjZXNzUHJvcGVydGllc1F1aWNrbHlGb3JFbnVt
ZXJhdGlvbiBjb25zdCk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAg
KiBydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpj
YW5DYWNoZU93blByb3BlcnR5TmFtZXMgY29uc3QpOgorICAgICAgICAqIHRvb2xzL0pTRG9sbGFy
Vk0uY3BwOgorICAgICAgICBSZW1vdmUgT3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1l
cyBzdHJ1Y3R1cmUgZmxhZyBhcyBpdCdzIGluaGVyaXRlZCBmcm9tCisgICAgICAgIEpTQXJyYXks
IGFuZCBSdW50aW1lQXJyYXkgaXRzZWxmIGRvZXNuJ3Qgb3ZlcnJpZGUgZ2V0T3duKlByb3BlcnR5
TmFtZXMoKS4KKwogMjAyMC0xMi0zMSAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFp
bC5jb20+CiAKICAgICAgICAgSlNGdW5jdGlvbjo6ZGVsZXRlUHJvcGVydHkoKSBmYWlscyB0byBk
ZWxldGUgYSBub24tZXhpc3RlbnQgInByb3RvdHlwZSIgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNBUElWYWx1ZVdyYXBwZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJVmFsdWVXcmFwcGVyLmgJKHJldmlzaW9uIDI3MTEx
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElWYWx1ZVdyYXBwZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzMsMTMgKzMzLDcgQEAgY2xhc3MgSlNBUElWYWx1ZVdyYXBwZXIgZmlu
YWwgOiBwdWJsaWMgSgogICAgIGZyaWVuZCBKU1ZhbHVlIGpzQVBJVmFsdWVXcmFwcGVyKEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTQ2VsbDsK
LQotICAgIC8vIE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgKHdoaWNoIHVzZWQg
dG8gYmUgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcykgd2FzIGhlcmUKLSAgICAvLyBzaW5jZSBh
bmNpZW50IHRpbWVzIGJhY2sgd2hlbiB3ZSBwZXNzaW1pc3RpY2FsbHkgY2hvb3NlIHRvIGFwcGx5
IHRoaXMgZmxhZy4gSSB0aGluayB3ZQotICAgIC8vIGNhbiByZW1vdmUgaXQsIGJ1dCB3ZSBzaG91
bGQgZG8gbW9yZSB0ZXN0aW5nIGJlZm9yZSB3ZSBkbyBzby4KLSAgICAvLyBSZWY6IGh0dHA6Ly90
cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzQ5Njk0L3dlYmtpdCNmaWxlOQotICAgIC8vIEZJWE1F
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyOTU0Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgT3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IFN0cnVjdHVyZUlzSW1t
b3J0YWw7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgogICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjUsNyArMTI1LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KIGNsYXNzIEpTQ2FsbGJhY2tP
YmplY3QgZmluYWwgOiBwdWJsaWMgUGFyZW50IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0g
UGFyZW50OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyB8IE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBPdmVycmlk
ZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGE7CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3Bl
Y2lhbFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRDYWxsRGF0YSB8IEludGVyY2VwdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBJbXBsZW1lbnRz
SGFzSW5zdGFuY2UgfCBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiAgICAgc3RhdGljX2Fzc2Vy
dCghKFN0cnVjdHVyZUZsYWdzICYgSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksICJ1c2lu
ZyBjdXN0b21IYXNJbnN0YW5jZSIpOwogCiAgICAgfkpTQ2FsbGJhY2tPYmplY3QoKTsKQEAgLTIx
MSw3ICsyMTEsNyBAQCBwcml2YXRlOgogCiAgICAgc3RhdGljIGJvb2wgY3VzdG9tSGFzSW5zdGFu
Y2UoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCi0gICAgc3RhdGljIHZv
aWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3Qq
LCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQg
Z2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFBy
b3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAKICAgICBzdGF0aWMg
Q2FsbERhdGEgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqKTsKICAgICBzdGF0aWMgQ2FsbERhdGEg
Z2V0Q2FsbERhdGEoSlNDZWxsKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMjcxMTE2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU2OSw3ICs1NjksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NhbGxi
YWNrT2JqZWN0PFBhcmVudD46CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+Ci12b2lkIEpT
Q2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNDYWxsYmFj
a09iamVjdDxQYXJlbnQ+OjpnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9
IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAgSlNDYWxsYmFja09iamVjdCogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0NhbGxiYWNrT2JqZWN0Kj4ob2JqZWN0KTsKQEAgLTU4OCw3ICs1ODgsNyBAQCB2
b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duTm9uCiAgICAgICAgICAgICBmb3Ig
KGl0ZXJhdG9yIGl0ID0gc3RhdGljVmFsdWVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
ICAgICAgICAgICAgICAgICBTdHJpbmdJbXBsKiBuYW1lID0gaXQtPmtleS5nZXQoKTsKICAgICAg
ICAgICAgICAgICBTdGF0aWNWYWx1ZUVudHJ5KiBlbnRyeSA9IGl0LT52YWx1ZS5nZXQoKTsKLSAg
ICAgICAgICAgICAgICBpZiAoZW50cnktPmdldFByb3BlcnR5ICYmICghKGVudHJ5LT5hdHRyaWJ1
dGVzICYga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RW51bSkgfHwgbW9kZS5pbmNsdWRlRG9udEVu
dW1Qcm9wZXJ0aWVzKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGVudHJ5LT5nZXRQcm9wZXJ0
eSAmJiAobW9kZSA9PSBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlIHx8ICEoZW50cnkt
PmF0dHJpYnV0ZXMgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtKSkpIHsKICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKCFuYW1lLT5pc1N5bWJvbCgpKTsKICAgICAgICAgICAgICAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgU3RyaW5nKG5h
bWUpKSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjAxLDE1ICs2MDEsMTMgQEAgdm9pZCBKU0Nh
bGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93bk5vbgogICAgICAgICAgICAgZm9yIChpdGVyYXRv
ciBpdCA9IHN0YXRpY0Z1bmN0aW9ucy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAg
ICAgICAgICAgICAgU3RyaW5nSW1wbCogbmFtZSA9IGl0LT5rZXkuZ2V0KCk7CiAgICAgICAgICAg
ICAgICAgU3RhdGljRnVuY3Rpb25FbnRyeSogZW50cnkgPSBpdC0+dmFsdWUuZ2V0KCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCEoZW50cnktPmF0dHJpYnV0ZXMgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnRFbnVtKSB8fCBtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkgeworICAgICAg
ICAgICAgICAgIGlmIChtb2RlID09IERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUgfHwg
IShlbnRyeS0+YXR0cmlidXRlcyAmIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udEVudW0pKSB7CiAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbmFtZS0+aXNTeW1ib2woKSk7CiAgICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFN0
cmluZyhuYW1lKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KLSAgICAKLSAgICBQYXJlbnQ6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0
aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiB0ZW1w
bGF0ZSA8Y2xhc3MgUGFyZW50PgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09i
amVjdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09i
amVjdFJlZi5jcHAJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNPYmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDgsNyArODA4LDcgQEAgSlNQ
cm9wZXJ0eU5hbWVBcnJheVJlZiBKU09iamVjdENvcHlQcm9wZQogICAgIEpTT2JqZWN0KiBqc09i
amVjdCA9IHRvSlMob2JqZWN0KTsKICAgICBKU1Byb3BlcnR5TmFtZUFycmF5UmVmIHByb3BlcnR5
TmFtZXMgPSBuZXcgT3BhcXVlSlNQcm9wZXJ0eU5hbWVBcnJheSgmdm0pOwogICAgIFByb3BlcnR5
TmFtZUFycmF5IGFycmF5KHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3lt
Ym9sTW9kZTo6RXhjbHVkZSk7Ci0gICAganNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0UHJv
cGVydHlOYW1lcyhqc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBhcnJheSwgRW51bWVyYXRpb25Nb2Rl
KCkpOworICAgIGpzT2JqZWN0LT5nZXRQcm9wZXJ0eU5hbWVzKGdsb2JhbE9iamVjdCwgYXJyYXks
IERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpOwogCiAgICAgc2l6ZV90IHNpemUgPSBh
cnJheS5zaXplKCk7CiAgICAgcHJvcGVydHlOYW1lcy0+YXJyYXkucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShzaXplKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1Nj
cmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBA
QCBzdGF0aWMgUmVmUHRyPEpTT046OlZhbHVlPiBqc1RvSW5zcGVjdG9yCiAgICAgICAgIGF1dG8g
aW5zcGVjdG9yT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgYXV0byYg
b2JqZWN0ID0gKnZhbHVlLmdldE9iamVjdCgpOwogICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheSBw
cm9wZXJ0eU5hbWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9s
TW9kZTo6RXhjbHVkZSk7Ci0gICAgICAgIG9iamVjdC5tZXRob2RUYWJsZSh2bSktPmdldE93blBy
b3BlcnR5TmFtZXMoJm9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJh
dGlvbk1vZGUoKSk7CisgICAgICAgIG9iamVjdC5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3Bl
cnR5TmFtZXMoJm9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVBy
b3BlcnRpZXNNb2RlOjpFeGNsdWRlKTsKICAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogcHJvcGVy
dHlOYW1lcykgewogICAgICAgICAgICAgYXV0byBpbnNwZWN0b3JWYWx1ZSA9IGpzVG9JbnNwZWN0
b3JWYWx1ZShnbG9iYWxPYmplY3QsIG9iamVjdC5nZXQoZ2xvYmFsT2JqZWN0LCBuYW1lKSwgbWF4
RGVwdGgpOwogICAgICAgICAgICAgaWYgKCFpbnNwZWN0b3JWYWx1ZSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGVJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZUlubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgT2JqZWN0
QWxsb2NhdGlvblAKIAogICAgIHNpemVfdCBjb3VudCA9IDA7CiAgICAgUHJvcGVydHlOYW1lQXJy
YXkgcHJvcGVydHlOYW1lQXJyYXkodm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1i
b2xzLCBQcml2YXRlU3ltYm9sTW9kZTo6SW5jbHVkZSk7Ci0gICAgcHJvdG90eXBlLT5zdHJ1Y3R1
cmUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSh2bSwgcHJvcGVydHlOYW1lQXJy
YXksIEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBwcm90b3R5cGUtPnN0cnVjdHVyZSh2bSktPmdl
dFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKHZtLCBwcm9wZXJ0eU5hbWVBcnJheSwgRG9udEVu
dW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSk7CiAgICAgUHJvcGVydHlOYW1lQXJyYXlEYXRhOjpQ
cm9wZXJ0eU5hbWVWZWN0b3ImIHByb3BlcnR5TmFtZVZlY3RvciA9IHByb3BlcnR5TmFtZUFycmF5
LmRhdGEoKS0+cHJvcGVydHlOYW1lVmVjdG9yKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBwcm9wZXJ0eU5hbWVWZWN0b3Iuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IHByb3RvdHlwZS0+Z2V0RGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWVWZWN0b3JbaV0pOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNw
cAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsMTQgKzEzOCwxNCBAQCBib29s
IERlYnVnZ2VyU2NvcGU6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsCiAgICAgcmV0dXJuIHRoaXNPYmpl
Y3QtPm1ldGhvZFRhYmxlKGdsb2JhbE9iamVjdC0+dm0oKSktPmRlbGV0ZVByb3BlcnR5KHRoaXNP
YmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotdm9pZCBEZWJ1
Z2dlclNjb3BlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgRGVidWdnZXJTY29wZTo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2Rl
KQogewogICAgIERlYnVnZ2VyU2NvcGUqIHNjb3BlID0ganNDYXN0PERlYnVnZ2VyU2NvcGUqPihv
YmplY3QpOwogICAgIEFTU0VSVChzY29wZS0+aXNWYWxpZCgpKTsKICAgICBpZiAoIXNjb3BlLT5p
c1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IEpT
U2NvcGU6Om9iamVjdEF0U2NvcGUoc2NvcGUtPmpzU2NvcGUoKSk7Ci0gICAgdGhpc09iamVjdC0+
bWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0LT52bSgpKS0+Z2V0UHJvcGVydHlOYW1lcyh0aGlzT2Jq
ZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIHRoaXNPYmplY3Qt
PmdldFByb3BlcnR5TmFtZXMoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0K
IAogYm9vbCBEZWJ1Z2dlclNjb3BlOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3Bl
LmgJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlclNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgSlNT
Y29wZTsKIGNsYXNzIERlYnVnZ2VyU2NvcGUgZmluYWwgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVj
dCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzQW55Rm9ybU9mR2V0
UHJvcGVydHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvcihWTSYgdm0pCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsK
ICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCos
IFByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHko
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlE
ZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZP
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlz
aW9uIDI3MTExNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC04MCwyMSArODAsMTMgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsK
ICAgICB1c2luZyBEZWZhdWx0VmFsdWVGdW5jdGlvblB0ciA9IEpTVmFsdWUgKCopKGNvbnN0IEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKTsKICAgICBE
ZWZhdWx0VmFsdWVGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZGVmYXVsdFZhbHVlKTsK
IAotICAgIHVzaW5nIEdldE93blByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciA9IHZvaWQgKCopKEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7CisgICAgdXNpbmcgR2V0T3duUHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyID0gdm9pZCAo
KikoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVu
dW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgR2V0T3duUHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIE1F
VEhPRF9UQUJMRV9FTlRSWShnZXRPd25Qcm9wZXJ0eU5hbWVzKTsKLQotICAgIHVzaW5nIEdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyID0gdm9pZCAoKikoSlNPYmplY3QqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAg
ICBHZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5U
UlkoZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKTsKLQotICAgIHVzaW5nIEdldFByb3BlcnR5
TmFtZXNGdW5jdGlvblB0ciA9IHZvaWQgKCopKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgR2V0UHJvcGVydHlOYW1l
c0Z1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShnZXRQcm9wZXJ0eU5hbWVzKTsKKyAgICBH
ZXRPd25Qcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKGdldE93blNw
ZWNpYWxQcm9wZXJ0eU5hbWVzKTsKIAogICAgIHVzaW5nIEdldEVudW1lcmFibGVMZW5ndGhGdW5j
dGlvblB0ciA9IHVpbnQzMl90ICgqKShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0Kik7CiAgICAg
R2V0RW51bWVyYWJsZUxlbmd0aEZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShnZXRFbnVt
ZXJhYmxlTGVuZ3RoKTsKIAotICAgIEdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBNRVRIT0Rf
VEFCTEVfRU5UUlkoZ2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyk7Ci0gICAgR2V0UHJvcGVydHlO
YW1lc0Z1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShnZXRHZW5lcmljUHJvcGVydHlOYW1l
cyk7Ci0KICAgICB1c2luZyBDbGFzc05hbWVGdW5jdGlvblB0ciA9IFN0cmluZyAoKikoY29uc3Qg
SlNPYmplY3QqLCBWTSYpOwogICAgIENsYXNzTmFtZUZ1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9F
TlRSWShjbGFzc05hbWUpOwogCkBAIC0xNjgsMTEgKzE2MCw4IEBAIHN0cnVjdCBNZXRob2RUYWJs
ZSB7CiAgICAgICAgICZDbGFzc05hbWU6OnRvVGhpcywgXAogICAgICAgICAmQ2xhc3NOYW1lOjpk
ZWZhdWx0VmFsdWUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJvcGVydHlOYW1lcywg
XAotICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMsIFwKLSAg
ICAgICAgJkNsYXNzTmFtZTo6Z2V0UHJvcGVydHlOYW1lcywgXAorICAgICAgICAmQ2xhc3NOYW1l
OjpnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcywgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRF
bnVtZXJhYmxlTGVuZ3RoLCBcCi0gICAgICAgICZDbGFzc05hbWU6OmdldFN0cnVjdHVyZVByb3Bl
cnR5TmFtZXMsIFwKLSAgICAgICAgJkNsYXNzTmFtZTo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMs
IFwKICAgICAgICAgJkNsYXNzTmFtZTo6Y2xhc3NOYW1lLCBcCiAgICAgICAgICZDbGFzc05hbWU6
OnRvU3RyaW5nTmFtZSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpjdXN0b21IYXNJbnN0YW5jZSwg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9uZWRBcmd1
bWVudHMuY3BwCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsMTEgKzE5Nywx
MSBAQCBib29sIENsb25lZEFyZ3VtZW50czo6Z2V0T3duUHJvcGVydHlTbG90CiAgICAgcmV0dXJu
IEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIGlkZW50
LCBzbG90KTsKIH0KIAotdm9pZCBDbG9uZWRBcmd1bWVudHM6OmdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlO
YW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgQ2xvbmVkQXJndW1l
bnRzOjpnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVy
dGllc01vZGUgbW9kZSkKIHsKICAgICBDbG9uZWRBcmd1bWVudHMqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8Q2xvbmVkQXJndW1lbnRzKj4ob2JqZWN0KTsKLSAgICB0aGlzT2JqZWN0LT5tYXRlcmlhbGl6
ZVNwZWNpYWxzSWZOZWNlc3NhcnkoZ2xvYmFsT2JqZWN0KTsKLSAgICBCYXNlOjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgYXJyYXksIG1vZGUpOworICAgIGlm
IChtb2RlID09IERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpCisgICAgICAgIHRoaXNP
YmplY3QtPm1hdGVyaWFsaXplU3BlY2lhbHNJZk5lY2Vzc2FyeShnbG9iYWxPYmplY3QpOwogfQog
CiBib29sIENsb25lZEFyZ3VtZW50czo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIGlkZW50LCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbG9u
ZWRBcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DbG9uZWRBcmd1bWVudHMuaAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcg
KzQwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDbG9uZWRBcmd1bWVudHMgZmluYWwgOiBw
dWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9u
RmluYWxPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1l
czsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2Rl
PgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpAQCAtNzAsNyAr
NzAsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUsIEluZGV4aW5nVHlwZSk7CiAK
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93blNwZWNpYWxQ
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJh
eSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwq
LCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90
Jik7CiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNHbG9iYWxPYmpl
Y3QqLCBQcm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29s
IGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRW51bWVyYXRpb25Nb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRW51bWVyYXRpb25Nb2RlLmgJKHJl
dmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0VudW1lcmF0
aW9uTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw1NiArMjcsMjAgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLWVudW0gY2xhc3MgUHJvcGVydHlOYW1lTW9kZSB7CitlbnVtIGNsYXNzIFByb3Bl
cnR5TmFtZU1vZGUgOiB1aW50OF90IHsKICAgICBTeW1ib2xzID0gMSA8PCAwLAogICAgIFN0cmlu
Z3MgPSAxIDw8IDEsCiAgICAgU3RyaW5nc0FuZFN5bWJvbHMgPSBTeW1ib2xzIHwgU3RyaW5ncywK
IH07CiAKLWVudW0gY2xhc3MgUHJpdmF0ZVN5bWJvbE1vZGUgeworZW51bSBjbGFzcyBQcml2YXRl
U3ltYm9sTW9kZSA6IHVpbnQ4X3QgewogICAgIEluY2x1ZGUsCiAgICAgRXhjbHVkZQogfTsKIAot
ZW51bSBjbGFzcyBEb250RW51bVByb3BlcnRpZXNNb2RlIHsKK2VudW0gY2xhc3MgRG9udEVudW1Q
cm9wZXJ0aWVzTW9kZSA6IHVpbnQ4X3QgewogICAgIEluY2x1ZGUsCiAgICAgRXhjbHVkZQogfTsK
IAotZW51bSBjbGFzcyBKU09iamVjdFByb3BlcnRpZXNNb2RlIHsKLSAgICBJbmNsdWRlLAotICAg
IEV4Y2x1ZGUKLX07Ci0KLWNsYXNzIEVudW1lcmF0aW9uTW9kZSB7Ci1wdWJsaWM6Ci0gICAgRW51
bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGUgZG9udEVudW1Qcm9wZXJ0aWVzTW9k
ZSA9IERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUsIEpTT2JqZWN0UHJvcGVydGllc01v
ZGUganNPYmplY3RQcm9wZXJ0aWVzTW9kZSA9IEpTT2JqZWN0UHJvcGVydGllc01vZGU6OkluY2x1
ZGUpCi0gICAgICAgIDogbV9kb250RW51bVByb3BlcnRpZXNNb2RlKGRvbnRFbnVtUHJvcGVydGll
c01vZGUpCi0gICAgICAgICwgbV9qc09iamVjdFByb3BlcnRpZXNNb2RlKGpzT2JqZWN0UHJvcGVy
dGllc01vZGUpCi0gICAgewotICAgIH0KLQotICAgIEVudW1lcmF0aW9uTW9kZShjb25zdCBFbnVt
ZXJhdGlvbk1vZGUmIG1vZGUsIEpTT2JqZWN0UHJvcGVydGllc01vZGUganNPYmplY3RQcm9wZXJ0
aWVzTW9kZSkKLSAgICAgICAgOiBtX2RvbnRFbnVtUHJvcGVydGllc01vZGUobW9kZS5tX2RvbnRF
bnVtUHJvcGVydGllc01vZGUpCi0gICAgICAgICwgbV9qc09iamVjdFByb3BlcnRpZXNNb2RlKGpz
T2JqZWN0UHJvcGVydGllc01vZGUpCi0gICAgewotICAgIH0KLQotICAgIC8vIEFkZCBvdGhlciBj
b25zdHJ1Y3RvcnMgYXMgbmVlZGVkIGZvciBjb252ZW5pZW5jZQotCi0gICAgYm9vbCBpbmNsdWRl
RG9udEVudW1Qcm9wZXJ0aWVzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2RvbnRFbnVtUHJv
cGVydGllc01vZGUgPT0gRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZTsKLSAgICB9Ci0K
LSAgICBib29sIGluY2x1ZGVKU09iamVjdFByb3BlcnRpZXMoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fanNPYmplY3RQcm9wZXJ0aWVzTW9kZSA9PSBKU09iamVjdFByb3BlcnRpZXNNb2RlOjpJ
bmNsdWRlOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBEb250RW51bVByb3BlcnRpZXNNb2RlIG1f
ZG9udEVudW1Qcm9wZXJ0aWVzTW9kZTsKLSAgICBKU09iamVjdFByb3BlcnRpZXNNb2RlIG1fanNP
YmplY3RQcm9wZXJ0aWVzTW9kZTsKLX07Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAJKHJldmlz
aW9uIDI3MTExNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFu
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjAsMjAgKzI2MCwxMiBAQCBib29sIEVycm9ySW5z
dGFuY2U6OmdldE93blByb3BlcnR5U2xvdChKCiAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3Bl
cnR5U2xvdCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9
CiAKLXZvaWQgRXJyb3JJbnN0YW5jZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVBcnJheSwgRW51bWVyYXRpb25Nb2RlIGVudW1lcmF0aW9uTW9kZSkK
K3ZvaWQgRXJyb3JJbnN0YW5jZTo6Z2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkm
LCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIEVycm9ySW5zdGFuY2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXJyb3JJ
bnN0YW5jZSo+KG9iamVjdCk7Ci0gICAgdGhpc09iamVjdC0+bWF0ZXJpYWxpemVFcnJvckluZm9J
Zk5lZWRlZCh2bSk7Ci0gICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNP
YmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lQXJyYXksIGVudW1lcmF0aW9uTW9kZSk7
Ci19Ci0KLXZvaWQgRXJyb3JJbnN0YW5jZTo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09i
amVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lQXJyYXksIEVudW1lcmF0aW9uTW9kZSBlbnVtZXJhdGlvbk1vZGUp
Ci17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEVycm9ySW5zdGFuY2Uq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXJyb3JJbnN0YW5jZSo+KG9iamVjdCk7Ci0gICAgdGhpc09i
amVjdC0+bWF0ZXJpYWxpemVFcnJvckluZm9JZk5lZWRlZCh2bSk7Ci0gICAgQmFzZTo6Z2V0U3Ry
dWN0dXJlUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZUFycmF5LCBlbnVtZXJhdGlvbk1vZGUpOworICAgIGlmIChtb2RlID09IERvbnRFbnVtUHJvcGVy
dGllc01vZGU6OkluY2x1ZGUpCisgICAgICAgIHRoaXNPYmplY3QtPm1hdGVyaWFsaXplRXJyb3JJ
bmZvSWZOZWVkZWQodm0pOwogfQogCiBib29sIEVycm9ySW5zdGFuY2U6OmRlZmluZU93blByb3Bl
cnR5KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
ciwgYm9vbCBzaG91bGRUaHJvdykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Vycm9ySW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FcnJvckluc3RhbmNlLmgJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyAr
MjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEVycm9ySW5zdGFuY2UgOiBwdWJsaWMgSlNO
b25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmpl
Y3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVz
QW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lczsKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKICAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCogY2VsbCkKQEAgLTkzLDggKzkzLDcgQEAgcHJvdGVjdGVk
OgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0
cmluZyYsIFNvdXJjZUFwcGVuZGVyID0gbnVsbHB0ciwgUnVudGltZVR5cGUgPSBUeXBlTm90aGlu
ZywgYm9vbCB1c2VDdXJyZW50RnJhbWUgPSB0cnVlKTsKIAogICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVy
YXRpb25Nb2RlKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0
aWVzTW9kZSk7CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwg
Ym9vbCBzaG91bGRUaHJvdyk7CiAgICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBz
dGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCShyZXZpc2lvbiAyNzExMTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KIGNsYXNz
IEdlbmVyaWNBcmd1bWVudHMgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAg
ICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhF
dmVuV2hlbkxlbmd0aElzTm90WmVybyB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFt
ZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlOYW1lcyB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAKIHByb3RlY3RlZDoKICAgICBHZW5lcmljQXJndW1l
bnRzKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC00Nyw3ICs0Nyw3IEBAIHByb3Rl
Y3RlZDoKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAg
ICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMg
Ym9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHJldmlzaW9uIDI3
MTExNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAgYm9vbCBHZW5lcmljQXJn
dW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgot
dm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5
JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlw
ZT46OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBEb250RW51bVByb3BlcnRp
ZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIFR5
cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7CkBAIC0xMDEsMTUgKzEwMSwx
NSBAQCB2b2lkIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93blByb3BlCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICBhcnJheS5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2
bSwgaSkpOwogICAgICAgICB9CisgICAgICAgIHRoaXNPYmplY3QtPmdldE93bkluZGV4ZWRQcm9w
ZXJ0eU5hbWVzKGdsb2JhbE9iamVjdCwgYXJyYXksIG1vZGUpOwogICAgIH0KIAotICAgIGlmICht
b2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSAmJiAhdGhpc09iamVjdC0+b3ZlcnJvZGVU
aGluZ3MoKSkgeworICAgIGlmIChtb2RlID09IERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1
ZGUgJiYgIXRoaXNPYmplY3QtPm92ZXJyb2RlVGhpbmdzKCkpIHsKICAgICAgICAgYXJyYXkuYWRk
KHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCk7CiAgICAgICAgIGFycmF5LmFkZCh2bS5wcm9wZXJ0
eU5hbWVzLT5jYWxsZWUpOwotICAgICAgICBpZiAoYXJyYXkuaW5jbHVkZVN5bWJvbFByb3BlcnRp
ZXMoKSkKLSAgICAgICAgICAgIGFycmF5LmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5
bWJvbCk7CisgICAgICAgIGFycmF5LmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJv
bCk7CiAgICAgfQotICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZ2xv
YmFsT2JqZWN0LCBhcnJheSwgbW9kZSk7CisgICAgdGhpc09iamVjdC0+Z2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eU5hbWVzKGdsb2JhbE9iamVjdCwgYXJyYXksIG1vZGUpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUeXBlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5jcHAJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODMsMTUgKzI4MywxMSBAQCBzdGF0aWMg
aW50IGNvbXBhcmVLZXlzRm9yUVNvcnQoY29uc3Qgdm9pCiAgICAgcmV0dXJuIChkYSA+IGRiKSAt
IChkYSA8IGRiKTsKIH0KIAotdm9pZCBKU0FycmF5OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBK
U0FycmF5OjpnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250
RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwotICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KG9iamVjdCk7
Ci0KLSAgICBpZiAobW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpCisgICAgaWYgKG1v
ZGUgPT0gRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkKICAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQodm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKTsKLQotICAgIEpTT2JqZWN0OjpnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWVzLCBtb2RlKTsKIH0KIAogLy8gVGhpcyBtZXRob2QgbWFrZXMgcm9vbSBpbiB0aGUgdmVj
dG9yLCBidXQgbGVhdmVzIHRoZSBuZXcgc3BhY2UgZm9yIGNvdW50IHNsb3RzIHVuY2xlYXJlZC4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDI3
MTExNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBjbGFzcyBKU0FycmF5IDogcHVibGljIEpTTm9uRmlu
YWxPYmplY3QgCiAKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNBbnlG
b3JtT2ZHZXRQcm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzOwogCiAgICAgc3Rh
dGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShDaGVja2VkPHNpemVfdD4gaW5saW5lQ2FwYWNpdHkp
CiAgICAgewpAQCAtMTg5LDcgKzE4OSw3IEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgYm9vbCBw
dXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYpOwogCiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYpOwotICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blNwZWNp
YWxQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogCiBwcml2YXRlOgogICAgIGJvb2wgaXNM
ZW5ndGhXcml0YWJsZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5jcHAJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiwxMiArMjA2LDEyIEBAIHZvaWQgSlND
ZWxsOjpkb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjaygKICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQogCi12b2lkIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUp
Cit2b2lkIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKQogewogICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgSlNDZWxsOjpnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKQordm9pZCBKU0NlbGw6OmdldE93blNwZWNpYWxQ
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJh
eSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KQEAgLTIzMywxMSArMjMzLDYgQEAgY29uc3QgY2hhciogSlNDZWxsOjpjbGFz
c05hbWUoVk0mIHZtKSBjbwogICAgIHJldHVybiBjbGFzc0luZm8odm0pLT5jbGFzc05hbWU7CiB9
CiAKLXZvaWQgSlNDZWxsOjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmpl
Y3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSkKLXsKLSAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCiBib29sIEpTQ2VsbDo6Y3VzdG9tSGFzSW5zdGFu
Y2UoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI1NiwxNiArMjUxLDYgQEAgdWludDMyX3QgSlNDZWxs
OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKEpTRwogICAgIHJldHVybiAwOwogfQogCi12b2lkIEpTQ2Vs
bDo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCi17Ci0gICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBKU0NlbGw6OmdldEdlbmVyaWNQcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCiBi
b29sIEpTQ2VsbDo6cHJldmVudEV4dGVuc2lvbnMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCop
CiB7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ0LDEzICsy
NDQsMTAgQEAgcHJvdGVjdGVkOgogCiAgICAgLy8gRHVtbXkgaW1wbGVtZW50YXRpb25zIG9mIG92
ZXJyaWRlLWFibGUgc3RhdGljIGZ1bmN0aW9ucyBmb3IgY2xhc3NlcyB0byBwdXQgaW4gdGhlaXIg
TWV0aG9kVGFibGUKICAgICBzdGF0aWMgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoY29uc3QgSlNPYmpl
Y3QqLCBKU0dsb2JhbE9iamVjdCosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpOwotICAgIHN0YXRp
YyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUp
OwotICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJh
eSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0gg
dm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVf
VE9fQ1JBU0ggdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmpl
Y3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOworICAgIHN0
YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0T3duU3BlY2lhbFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVu
dW1Qcm9wZXJ0aWVzTW9kZSk7CiAKICAgICBzdGF0aWMgdWludDMyX3QgZ2V0RW51bWVyYWJsZUxl
bmd0aChKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0Kik7Ci0gICAgc3RhdGljIE5PX1JFVFVSTl9E
VUVfVE9fQ1JBU0ggdm9pZCBnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAg
c3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBnZXRHZW5lcmljUHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOwogICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIGJvb2wgcHJldmVu
dEV4dGVuc2lvbnMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyBOT19S
RVRVUk5fRFVFX1RPX0NSQVNIIGJvb2wgaXNFeHRlbnNpYmxlKEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqKTsKICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCBib29sIHNldFByb3Rv
dHlwZShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSwgYm9vbCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24g
MjcxMTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5NCwxMyArNDk0LDEzIEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0
T3duUHJvcGVydHlTbG90KEpTT2IKICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEJhc2U6
OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSwgc2xvdCkpOwogfQogCi12b2lkIEpTRnVuY3Rpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lk
IEpTRnVuY3Rpb246OmdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3Qs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgSlNGdW5jdGlvbiog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4ob2JqZWN0KTsKICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCi0gICAgaWYgKG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKSB7CisgICAg
aWYgKG1vZGUgPT0gRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkgewogICAgICAgICBp
ZiAoIXRoaXNPYmplY3QtPmlzSG9zdE9yQnVpbHRpbkZ1bmN0aW9uKCkpIHsKICAgICAgICAgICAg
IC8vIE1ha2Ugc3VyZSBwcm90b3R5cGUgaGFzIGJlZW4gcmVpZmllZC4KICAgICAgICAgICAgIFBy
b3BlcnR5U2xvdCBzbG90KHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RU
eXBlOjpWTUlucXVpcnksICZ2bSk7CkBAIC01MjQsNyArNTI0LDYgQEAgdm9pZCBKU0Z1bmN0aW9u
OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSkp
OwogfQogCiBib29sIEpTRnVuY3Rpb246OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBA
QCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHR5cGVkZWYgSlNDYWxsZWUgQmFzZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNBbnlGb3JtT2ZH
ZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGE7CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5
TmFtZXMgfCBPdmVycmlkZXNHZXRDYWxsRGF0YTsKIAogICAgIHN0YXRpYyBzaXplX3QgYWxsb2Nh
dGlvblNpemUoQ2hlY2tlZDxzaXplX3Q+IGlubGluZUNhcGFjaXR5KQogICAgIHsKQEAgLTE3Myw3
ICsxNzMsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogCiAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmpl
Y3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUgPSBFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAg
c3RhdGljIHZvaWQgZ2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAg
ICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVj
dCosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRU
aHJvdyk7CiAKICAgICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
dy5oCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBA
IHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNBcnJheUJ1ZmZlclZpZXc7CiAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIEVsZW1lbnRUeXBlOwogCi0gICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3Zl
cnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJ
c05vdFplcm87CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAKICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIGVsZW1lbnRTaXplID0gc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpOwogCkBA
IC0zMDQsNyArMzA0LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpT
Q2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBi
b29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgo
SlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwogICAgIAot
ICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMg
dm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogCiAgICAgc3RhdGljIHNp
emVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJ
bmxpbmVzLmgJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NjQsNyArNDY0LDcgQEAgYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZAog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgogdm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dzxBZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlOYW1lcygKLSAgICBKU09iamVjdCogb2JqZWN0LCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVu
dW1lcmF0aW9uTW9kZSBtb2RlKQorICAgIEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRG9udEVudW1Qcm9wZXJ0
aWVzTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlldyo+KG9iamVjdCk7CkBAIC00NzQsNyArNDc0LDcgQEAgdm9pZCBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZwogICAgICAgICAgICAgYXJyYXkuYWRkKElkZW50aWZp
ZXI6OmZyb20odm0sIGkpKTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIEJhc2U6OmdldE93blBy
b3BlcnR5TmFtZXMob2JqZWN0LCBnbG9iYWxPYmplY3QsIGFycmF5LCBtb2RlKTsKKyAgICB0aGlz
T2JqZWN0LT5nZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoZ2xvYmFsT2JqZWN0LCBhcnJheSwg
bW9kZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI3MTEx
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTU3MSw5ICs1NzEsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogcHVibGlj
OgogICAgIHVzaW5nIEJhc2UgPSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OwotICAgIC8vIERv
IHdlIHJlYWx5IG5lZWQgT3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyBoZXJlPwot
ICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEy
OTU0Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZSB8IE92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBJc0lt
bXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVjdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBIYXNTdGF0aWNQcm9w
ZXJ0eVRhYmxlIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSXNJbW11dGFibGVQcm90
b3R5cGVFeG90aWNPYmplY3Q7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNEZXN0
cnVjdGlvbiA9IHRydWU7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNl
QWNjZXNzIG1vZGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGlj
YWxFbnZpcm9ubWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6YW5h
bHl6ZUhlYXAoSgogICAgIH0KIH0KIAotdm9pZCBKU0xleGljYWxFbnZpcm9ubWVudDo6Z2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSkKK3ZvaWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmdldE93blNwZWNpYWxQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2Rl
IG1vZGUpCiB7CiAgICAgSlNMZXhpY2FsRW52aXJvbm1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNMZXhpY2FsRW52aXJvbm1lbnQqPihvYmplY3QpOwogCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQg
SlNMZXhpY2FsRW52aXJvbm1lbnQ6OmdldE93bk5vbkluZGUKICAgICAgICAgU3ltYm9sVGFibGU6
Ok1hcDo6aXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+ZW5kKGxvY2tl
cik7CiAgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICAgICAgZm9yIChT
eW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCkt
PmJlZ2luKGxvY2tlcik7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKGl0LT52
YWx1ZS5nZXRBdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gJiYgIW1v
ZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKQorICAgICAgICAgICAgaWYgKG1vZGUgPT0g
RG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSAmJiBpdC0+dmFsdWUuaXNEb250RW51bSgp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCF0aGlzT2JqZWN0
LT5pc1ZhbGlkU2NvcGVPZmZzZXQoaXQtPnZhbHVlLnNjb3BlT2Zmc2V0KCkpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwpAQCAtODIsOCArODIsNiBAQCB2b2lkIEpTTGV4aWNhbEVudmlyb25t
ZW50OjpnZXRPd25Ob25JbmRlCiAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlm
aWVyOjpmcm9tVWlkKHZtLCBpdC0+a2V5LmdldCgpKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAg
Ly8gU2tpcCB0aGUgSlNTeW1ib2xUYWJsZU9iamVjdCdzIGltcGxlbWVudGF0aW9uIG9mIGdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcwotICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXModGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsK
IH0KIAogYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2Jq
ZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaAkocmV2aXNpb24g
MjcxMTE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJv
bm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgdXNpbmcgQmFzZSA9IEpTU3ltYm9sVGFibGVPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlO
YW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlk
ZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lczsKIAogICAgIFdyaXRlQmFycmllckJhc2U8VW5r
bm93bj4qIHZhcmlhYmxlcygpCiAgICAgewpAQCAtMTA2LDcgKzEwNiw3IEBAIHB1YmxpYzoKICAg
ICB9CiAgICAgICAgIAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVj
dCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBz
dGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0
aWMgdm9pZCBnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKIAogICAg
IHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwg
SlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAy
NzExMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25t
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBib29sIEpTTW9kdWxlRW52
aXJvbm1lbnQ6OmdldE93blByb3BlcnR5CiAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5
U2xvdCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAK
LXZvaWQgSlNNb2R1bGVFbnZpcm9ubWVudDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lc0FycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNN
b2R1bGVFbnZpcm9ubWVudDo6Z2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIGNl
bGwsIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXNBcnJh
eSwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSkKIHsKICAgICBKU01vZHVsZUVudmlyb25tZW50KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTTW9kdWxlRW52aXJvbm1lbnQqPihjZWxsKTsKICAgICBpZiAo
cHJvcGVydHlOYW1lc0FycmF5LmluY2x1ZGVTdHJpbmdQcm9wZXJ0aWVzKCkpIHsKQEAgLTEwNiw3
ICsxMDYsNiBAQCB2b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OmdldE93bk5vbkluZGV4CiAgICAg
ICAgICAgICAgICAgcHJvcGVydHlOYW1lc0FycmF5LmFkZChpbXBvcnRFbnRyeS5sb2NhbE5hbWUp
OwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBCYXNlOjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXModGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzQXJyYXksIG1v
ZGUpOwogfQogCiBib29sIEpTTW9kdWxlRW52aXJvbm1lbnQ6OnB1dChKU0NlbGwqIGNlbGwsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmgJKHJldmlzaW9u
IDI3MTExNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJv
bm1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBjbGFzcyBKU01vZHVsZUVu
dmlyb25tZW50IGZpbmFsIDogcHVibGljCiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4
dHJhY3RvcjsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNMZXhpY2FsRW52aXJvbm1lbnQ7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzQW55
Rm9ybU9mR2V0UHJvcGVydHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lczsKIAogICAgIHN0
YXRpYyBKU01vZHVsZUVudmlyb25tZW50KiBjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1Njb3BlKiBjdXJyZW50U2NvcGUsIFN5bWJvbFRhYmxlKiBzeW1ib2xU
YWJsZSwgSlNWYWx1ZSBpbml0aWFsVmFsdWUsIEFic3RyYWN0TW9kdWxlUmVjb3JkKiBtb2R1bGVS
ZWNvcmQpCiAgICAgewpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93blNwZWNpYWxQ
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJh
eSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwq
LCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90
Jik7CiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNHbG9iYWxPYmpl
Y3QqLCBQcm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QuY3BwCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNyw3
ICsyMTcsNyBAQCBib29sIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpkZWxldGVQcm9wCiAgICAg
cmV0dXJuICF0aGlzT2JqZWN0LT5tX2V4cG9ydHMuY29udGFpbnMocHJvcGVydHlOYW1lLnVpZCgp
KTsKIH0KIAotdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlO
YW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU01v
ZHVsZU5hbWVzcGFjZU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogY2VsbCwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwpAQCAtMjI1LDcgKzIyNSw3IEBAIHZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmdldE93
blByb3AKICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1vZHVsZS1uYW1lc3Bh
Y2UtZXhvdGljLW9iamVjdHMtb3ducHJvcGVydHlrZXlzCiAgICAgSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QqPihjZWxs
KTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIG5hbWUgOiB0aGlzT2JqZWN0LT5tX25hbWVzKSB7Ci0g
ICAgICAgIGlmICghbW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpIHsKKyAgICAgICAg
aWYgKG1vZGUgPT0gRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkgewogICAgICAgICAg
ICAgLy8gUGVyZm9ybSBbW0dldE93blByb3BlcnR5XV0gdG8gdGhyb3cgUmVmZXJlbmNlRXJyb3Ig
aWYgYmluZGluZyBpcyB1bmluaXRpYWxpemVkLgogICAgICAgICAgICAgUHJvcGVydHlTbG90IHNs
b3QoY2VsbCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5
KTsKICAgICAgICAgICAgIHRoaXNPYmplY3QtPmdldE93blByb3BlcnR5U2xvdENvbW1vbihnbG9i
YWxPYmplY3QsIG5hbWUuaW1wbCgpLCBzbG90KTsKQEAgLTIzMyw3ICsyMzMsOCBAQCB2b2lkIEpT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpnZXRPd25Qcm9wCiAgICAgICAgIH0KICAgICAgICAgcHJv
cGVydHlOYW1lcy5hZGQobmFtZS5pbXBsKCkpOwogICAgIH0KLSAgICBCYXNlOjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7
CisgICAgaWYgKHByb3BlcnR5TmFtZXMuaW5jbHVkZVN5bWJvbFByb3BlcnRpZXMoKSkKKyAgICAg
ICAgdGhpc09iamVjdC0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKGdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIGJvb2wgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6
OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgJKHJl
dmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiBjbGFzcyBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCBmaW5hbCA6IHB1YmxpYyBK
U05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9i
amVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNl
cHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgT3Zl
cnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IEdldE93blByb3BlcnR5U2xvdElzSW1w
dXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNPYmplY3Q7
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlOYW1lcyB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm8gfCBHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3Bl
cnR5QWJzZW5jZSB8IElzSW1tdXRhYmxlUHJvdG90eXBlRXhvdGljT2JqZWN0OwogCiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKik7CkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmKTsKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3Bl
cnRpZXNNb2RlKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Q
cm9wZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIAogICAgIERFQ0xBUkVfRVhQ
T1JUX0lORk87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPTk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwMCw3ICs1MDAsNyBAQCBib29s
IFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wCiAgICAgICAgICAgICAgICAgbV9w
cm9wZXJ0eU5hbWVzID0gc3RyaW5naWZpZXIubV9hcnJheVJlcGxhY2VyUHJvcGVydHlOYW1lcy5k
YXRhKCk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBQcm9wZXJ0eU5hbWVB
cnJheSBvYmplY3RQcm9wZXJ0eU5hbWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQ
cml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7Ci0gICAgICAgICAgICAgICAgbV9vYmplY3QtPm1l
dGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhtX29iamVjdCwgZ2xvYmFsT2JqZWN0
LCBvYmplY3RQcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgICAgICAgICAg
ICAgbV9vYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhtX29iamVj
dCwgZ2xvYmFsT2JqZWN0LCBvYmplY3RQcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNN
b2RlOjpFeGNsdWRlKTsKICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgbV9wcm9wZXJ0eU5hbWVzID0gb2JqZWN0UHJvcGVy
dHlOYW1lcy5yZWxlYXNlRGF0YSgpOwogICAgICAgICAgICAgfQpAQCAtNzE5LDcgKzcxOSw3IEBA
IE5FVkVSX0lOTElORSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUKICAgICAgICAgICAgICAg
ICBtYXJrZWRTdGFjay5hcHBlbmRXaXRoQ3Jhc2hPbk92ZXJmbG93KG9iamVjdCk7CiAgICAgICAg
ICAgICAgICAgaW5kZXhTdGFjay5hcHBlbmQoMCk7CiAgICAgICAgICAgICAgICAgcHJvcGVydHlT
dGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXkodm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmlu
Z3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKSk7Ci0gICAgICAgICAgICAgICAgb2JqZWN0
LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBtX2dsb2JhbE9i
amVjdCwgcHJvcGVydHlTdGFjay5sYXN0KCksIEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAg
ICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmpl
Y3QsIG1fZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRG9udEVudW1Qcm9wZXJ0
aWVzTW9kZTo6RXhjbHVkZSk7CiAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG9iamVjdFN0YXJ0VmlzaXRN
ZW1iZXI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3Bw
CShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDE4ICs3MiwxOSBAQCBjb25zdCBDbGFzc0lu
Zm8gSlNPYmplY3Q6OnNfaW5mbyA9IHsgIk9iCiAKIGNvbnN0IENsYXNzSW5mbyBKU0ZpbmFsT2Jq
ZWN0OjpzX2luZm8gPSB7ICJPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRmluYWxPYmplY3QpIH07CiAKLXN0YXRpYyBpbmxpbmUg
dm9pZCBnZXRDbGFzc1Byb3BlcnR5TmFtZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6
Z2V0Tm9uUmVpZmllZFN0YXRpY1Byb3BlcnR5TmFtZXMoVk0mIHZtLCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewotICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBpZiAoc3RhdGljUHJvcGVydGllc1JlaWZp
ZWQodm0pKQorICAgICAgICByZXR1cm47CiAKICAgICAvLyBBZGQgcHJvcGVydGllcyBmcm9tIHRo
ZSBzdGF0aWMgaGFzaHRhYmxlcyBvZiBwcm9wZXJ0aWVzCi0gICAgZm9yICg7IGNsYXNzSW5mbzsg
Y2xhc3NJbmZvID0gY2xhc3NJbmZvLT5wYXJlbnRDbGFzcykgewotICAgICAgICBjb25zdCBIYXNo
VGFibGUqIHRhYmxlID0gY2xhc3NJbmZvLT5zdGF0aWNQcm9wSGFzaFRhYmxlOworICAgIGZvciAo
Y29uc3QgQ2xhc3NJbmZvKiBpbmZvID0gY2xhc3NJbmZvKHZtKTsgaW5mbzsgaW5mbyA9IGluZm8t
PnBhcmVudENsYXNzKSB7CisgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBpbmZvLT5z
dGF0aWNQcm9wSGFzaFRhYmxlOwogICAgICAgICBpZiAoIXRhYmxlKQogICAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSB0YWJsZS0+YmVnaW4oKTsgaXRlciAh
PSB0YWJsZS0+ZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAgaWYgKCEoaXRlci0+YXR0cmli
dXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSB8fCBtb2RlLmluY2x1ZGVEb250
RW51bVByb3BlcnRpZXMoKSkKKyAgICAgICAgICAgIGlmIChtb2RlID09IERvbnRFbnVtUHJvcGVy
dGllc01vZGU6OkluY2x1ZGUgfHwgIShpdGVyLT5hdHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pKQogICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIGl0ZXIua2V5KCkpKTsKICAgICAgICAgfQogICAgIH0KQEAg
LTIzODAsNTQgKzIzODEsNDkgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKG9iamVjdFByaXZh
dGVGdQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKEpTT2JqZWN0OjpkZWZh
dWx0SGFzSW5zdGFuY2UoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwgcHJvdG8pKSk7CiB9CiAKLS8vIEZJ
WE1FOiBBc3NlcnQgdGhhdCBwcm9wZXJ0aWVzIHJldHVybmVkIGJ5IGdldE93blByb3BlcnR5TmFt
ZXMoKSBhcmUgcmVwb3J0ZWQgZW51bWVyYWJsZSBieSBnZXRPd25Qcm9wZXJ0eVNsb3QoKS4KLS8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTk5MjYKLXZvaWQgSlNP
YmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0
aW9uTW9kZSBtb2RlKQordm9pZCBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBp
ZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSkpIHsKLSAgICAgICAgdGhyb3dT
dGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgSlNPYmplY3QqIG9iamVjdCA9IHRoaXM7CisgICAgdW5zaWduZWQgcHJvdG90
eXBlQ291bnQgPSAwOwogCi0gICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3Bl
cnR5TmFtZXMob2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAgd2hpbGUgKHRydWUpIHsK
KyAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2Jq
ZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogCi0gICAgSlNWYWx1ZSBuZXh0UHJvdG8gPSBv
YmplY3QtPmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgIGlmIChuZXh0UHJvdG8uaXNOdWxsKCkpCi0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBvYmplY3QtPmdldFByb3Rv
dHlwZSh2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKKyAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKKyAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IGFzT2JqZWN0KG5leHRQcm90byk7
Ci0gICAgd2hpbGUoMSkgewotICAgICAgICBpZiAocHJvdG90eXBlLT5zdHJ1Y3R1cmUodm0pLT50
eXBlSW5mbygpLm92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMoKSkgewotICAgICAgICAgICAgc2Nv
cGUucmVsZWFzZSgpOwotICAgICAgICAgICAgcHJvdG90eXBlLT5tZXRob2RUYWJsZSh2bSktPmdl
dFByb3BlcnR5TmFtZXMocHJvdG90eXBlLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1v
ZGUpOworICAgICAgICBpZiAoVU5MSUtFTFkoKytwcm90b3R5cGVDb3VudCA+IG1heGltdW1Qcm90
b3R5cGVDaGFpbkRlcHRoKSkgeworICAgICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgcHJvdG90eXBlLT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMocHJv
dG90eXBlLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwotICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwotICAgICAgICBuZXh0UHJvdG8gPSBwcm90
b3R5cGUtPmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICAgICAgaWYgKG5leHRQcm90by5pc051bGwo
KSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBwcm90b3R5cGUgPSBhc09iamVjdChuZXh0
UHJvdG8pOworCisgICAgICAgIG9iamVjdCA9IGFzT2JqZWN0KHByb3RvdHlwZSk7CiAgICAgfQog
fQogCi12b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3Qs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUg
bW9kZSkKIHsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgaWYgKCFtb2Rl
LmluY2x1ZGVKU09iamVjdFByb3BlcnRpZXMoKSkgewotICAgICAgICAvLyBXZSBzdGlsbCBoYXZl
IHRvIGdldCBub24taW5kZXhlZCBwcm9wZXJ0aWVzIGZyb20gYW55IHN1YmNsYXNzZXMgb2YgSlNP
YmplY3QgdGhhdCBoYXZlIHRoZW0uCi0gICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5n
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMob2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZXMsIG1vZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIG9iamVjdC0+Z2V0T3du
SW5kZXhlZFByb3BlcnR5TmFtZXMoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsK
KyAgICBvYmplY3QtPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhnbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZXMsIG1vZGUpOworfQorCit2b2lkIEpTT2JqZWN0OjpnZXRPd25TcGVjaWFsUHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBEb250RW51bVByb3BlcnRpZXNNb2RlKQoreworICAgIC8vIFN0cnVjdHVyZTo6dmFsaWRhdGVG
bGFncygpIGJyZWFrcyBpZiB0aGlzIG1ldGhvZCBpc24ndCBleHBvcnRlZCwgd2hpY2ggaXMgaW1w
b3NzaWJsZSBpZiBpdCdzIGlubGluZWQuCit9CisKK3ZvaWQgSlNPYmplY3Q6OmdldE93bkluZGV4
ZWRQcm9wZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKK3sKKyAgICBKU09iamVjdCog
b2JqZWN0ID0gdGhpczsKIAogICAgIGlmIChwcm9wZXJ0eU5hbWVzLmluY2x1ZGVTdHJpbmdQcm9w
ZXJ0aWVzKCkpIHsKLSAgICAgICAgLy8gQWRkIG51bWVyaWMgcHJvcGVydGllcyBmaXJzdC4gVGhh
dCBhcHBlYXJzIHRvIGJlIHRoZSBhY2NlcHRlZCBjb252ZW50aW9uLgorICAgICAgICAvLyBBZGQg
bnVtZXJpYyBwcm9wZXJ0aWVzIGZpcnN0IHBlciBzdGVwIDIgb2YgaHR0cHM6Ly90YzM5LmVzL2Vj
bWEyNjIvI3NlYy1vcmRpbmFyeW93bnByb3BlcnR5a2V5cwogICAgICAgICAvLyBGSVhNRTogRmls
bGluZyBQcm9wZXJ0eU5hbWVBcnJheSB3aXRoIGFuIGlkZW50aWZpZXIgZm9yIGV2ZXJ5IGludGVn
ZXIKICAgICAgICAgLy8gaXMgaW5jcmVkaWJseSBpbmVmZmljaWVudCBmb3IgbGFyZ2UgYXJyYXlz
LiBXZSBuZWVkIGEgZGlmZmVyZW50IGFwcHJvYWNoLAogICAgICAgICAvLyB3aGljaCBhbG1vc3Qg
Y2VydGFpbmx5IG1lYW5zIGEgZGlmZmVyZW50IHN0cnVjdHVyZSBmb3IgUHJvcGVydHlOYW1lQXJy
YXkuCkBAIC0yNDc1LDcgKzI0NzEsNyBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICAgICAgICAgICAg
ICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGUuaW5j
bHVkZURvbnRFbnVtUHJvcGVydGllcygpIHx8ICEoaXQtPnZhbHVlLmF0dHJpYnV0ZXMoKSAmIFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpCisgICAgICAgICAgICAgICAgICAgIGlmIChtb2Rl
ID09IERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUgfHwgIShpdC0+dmFsdWUuYXR0cmli
dXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGtleXMudW5jaGVja2VkQXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpdC0+a2V5
KSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMjQ5MCwyMCArMjQ4
NiwxOSBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqCiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgfQotCi0g
ICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhv
YmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKLXZvaWQgSlNP
YmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgaWYgKCFvYmplY3QtPnN0YXRpY1Byb3Bl
cnRpZXNSZWlmaWVkKHZtKSkKLSAgICAgICAgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzKGdsb2JhbE9i
amVjdCwgb2JqZWN0LT5jbGFzc0luZm8odm0pLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBpZiAoIW1vZGUuaW5j
bHVkZUpTT2JqZWN0UHJvcGVydGllcygpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgb2Jq
ZWN0LT5zdHJ1Y3R1cmUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSh2bSwgcHJv
cGVydHlOYW1lcywgbW9kZSk7CisgICAgbWV0aG9kVGFibGUodm0pLT5nZXRPd25TcGVjaWFsUHJv
cGVydHlOYW1lcyh0aGlzLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyAgICBnZXROb25SZWlmaWVk
U3RhdGljUHJvcGVydHlOYW1lcyh2bSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgc3RydWN0
dXJlKHZtKS0+Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUodm0sIHByb3BlcnR5TmFtZXMs
IG1vZGUpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CiB9CiAKIGRvdWJsZSBKU09i
amVjdDo6dG9OdW1iZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKQEAgLTM4
MzcsNDEgKzM4MzIsNiBAQCB1aW50MzJfdCBKU09iamVjdDo6Z2V0RW51bWVyYWJsZUxlbmd0aChK
CiAgICAgfQogfQogCi12b2lkIEpTT2JqZWN0OjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFt
ZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKLXsKLSAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5nZXRQ
cm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSh2bSwgcHJvcGVydHlOYW1lcywgbW9kZSk7Ci19Ci0K
LXZvaWQgSlNPYmplY3Q6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3Qs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUobW9kZSwgSlNPYmplY3RQ
cm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHZvaWQoKSk7Ci0KLSAgICBKU1ZhbHVlIG5leHRQcm90byA9IG9iamVjdC0+Z2V0UHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQo
KSk7Ci0gICAgaWYgKG5leHRQcm90by5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
SlNPYmplY3QqIHByb3RvdHlwZSA9IGFzT2JqZWN0KG5leHRQcm90byk7Ci0gICAgd2hpbGUgKHRy
dWUpIHsKLSAgICAgICAgaWYgKHByb3RvdHlwZS0+c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5v
dmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzKCkpIHsKLSAgICAgICAgICAgIHNjb3BlLnJlbGVhc2Uo
KTsKLSAgICAgICAgICAgIHByb3RvdHlwZS0+bWV0aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5h
bWVzKHByb3RvdHlwZSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBwcm90b3R5cGUtPm1ldGhvZFRhYmxl
KHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhwcm90b3R5cGUsIGdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lcywgbW9kZSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQo
KSk7Ci0gICAgICAgIG5leHRQcm90byA9IHByb3RvdHlwZS0+Z2V0UHJvdG90eXBlKHZtLCBnbG9i
YWxPYmplY3QpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwot
ICAgICAgICBpZiAobmV4dFByb3RvLmlzTnVsbCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIHByb3RvdHlwZSA9IGFzT2JqZWN0KG5leHRQcm90byk7Ci0gICAgfQotfQotCiAvLyBJbXBs
ZW1lbnRzIEdldE1ldGhvZChPLCBQKSBpbiBzZWN0aW9uIDcuMy45IG9mIHRoZSBzcGVjLgogLy8g
aHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1s
I3NlYy1nZXRtZXRob2QKIEpTVmFsdWUgSlNPYmplY3Q6OmdldE1ldGhvZChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRGF0YSYgY2FsbERhdGEsIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjc0LDEzICs2
NzQsMTUgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaGFzSW5zdGFuY2Uo
SlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBkZWZhdWx0SGFzSW5z
dGFuY2UoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZVByb3BlcnR5
KTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVy
YXRpb25Nb2RlKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBtYXhpbXVtUHJvdG90eXBlQ2hhaW5EZXB0aCA9IDQwMDAwOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3Bl
cnRpZXNNb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGdldE93bkluZGV4ZWRQcm9w
ZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVBy
b3BlcnRpZXNNb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyhKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVu
dW1Qcm9wZXJ0aWVzTW9kZSk7CisgICAgdm9pZCBnZXROb25SZWlmaWVkU3RhdGljUHJvcGVydHlO
YW1lcyhWTSYsIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdWludDMyX3QgZ2V0RW51bWVyYWJsZUxlbmd0
aChKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0Kik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgZ2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwotICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIHRvUHJpbWl0aXZlKEpTR2xvYmFsT2JqZWN0
KiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSA9IE5vUHJlZmVyZW5jZSkgY29uc3Q7CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvTnVtYmVyKEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
cGVydHlOYW1lRW51bWVyYXRvci5jcHAJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg3LDQgKzg3LDUyIEBAIHZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp2
aXNpdENoaWwKICAgICB9CiB9CiAKKy8vIEZJWE1FOiBBc3NlcnQgdGhhdCBwcm9wZXJ0aWVzIHJl
dHVybmVkIGJ5IGdldE93blByb3BlcnR5TmFtZXMoKSBhcmUgcmVwb3J0ZWQgZW51bWVyYWJsZSBi
eSBnZXRPd25Qcm9wZXJ0eVNsb3QoKS4KKy8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTk5MjYKK3ZvaWQgZ2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2UsIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzLCB1aW50MzJfdCYgaW5kZXhlZExlbmd0aCwgdWludDMyX3QmIHN0cnVj
dHVyZVByb3BlcnR5Q291bnQpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKHZtKTsKKyAgICBpZiAoc3RydWN0dXJlLT5j
YW5BY2Nlc3NQcm9wZXJ0aWVzUXVpY2tseUZvckVudW1lcmF0aW9uKCkgJiYgaW5kZXhlZExlbmd0
aCA9PSBiYXNlLT5nZXRBcnJheUxlbmd0aCgpKSB7CisgICAgICAgIC8vIElubGluZWQgSlNPYmpl
Y3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcygpCisgICAgICAgIGJhc2UtPm1ldGhvZFRh
YmxlKHZtKS0+Z2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMoYmFzZSwgZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKworICAgICAgICBiYXNlLT5nZXRO
b25SZWlmaWVkU3RhdGljUHJvcGVydHlOYW1lcyh2bSwgcHJvcGVydHlOYW1lcywgRG9udEVudW1Q
cm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7CisgICAgICAgIHVuc2lnbmVkIG5vblN0cnVjdHVyZVBy
b3BlcnR5Q291bnQgPSBwcm9wZXJ0eU5hbWVzLnNpemUoKTsKKyAgICAgICAgc3RydWN0dXJlLT5n
ZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSh2bSwgcHJvcGVydHlOYW1lcywgRG9udEVudW1Q
cm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7CisgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9u
KCk7CisKKyAgICAgICAgLy8gfHByb3BlcnR5TmFtZXN8IGNvbnRhaW5zIHByb3BlcnRpZXMgZXhj
bHVzaXZlbHkgZnJvbSB0aGUgc3RydWN0dXJlLgorICAgICAgICBpZiAoIW5vblN0cnVjdHVyZVBy
b3BlcnR5Q291bnQpCisgICAgICAgICAgICBzdHJ1Y3R1cmVQcm9wZXJ0eUNvdW50ID0gcHJvcGVy
dHlOYW1lcy5zaXplKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmFzZS0+bWV0aG9kVGFibGUo
dm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKGJhc2UsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
cywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAgICAgIC8vIHxwcm9wZXJ0eU5hbWVzfCBjb250
YWlucyBhbGwgaW5kZXhlZCBwcm9wZXJ0aWVzLCBzbyBkaXNhYmxlIGVudW1lcmF0aW9uIGJhc2Vk
IG9uIGdldEVudW1lcmFibGVMZW5ndGgoKS4KKyAgICAgICAgaW5kZXhlZExlbmd0aCA9IDA7Cisg
ICAgfQorCisgICAgSlNPYmplY3QqIG9iamVjdCA9IGJhc2U7CisgICAgdW5zaWduZWQgcHJvdG90
eXBlQ291bnQgPSAwOworCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgSlNWYWx1ZSBwcm90
b3R5cGUgPSBvYmplY3QtPmdldFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAgICAgICAgaWYgKHByb3RvdHlw
ZS5pc051bGwoKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChVTkxJS0VMWSgr
K3Byb3RvdHlwZUNvdW50ID4gSlNPYmplY3Q6Om1heGltdW1Qcm90b3R5cGVDaGFpbkRlcHRoKSkg
eworICAgICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBvYmplY3QgPSBh
c09iamVjdChwcm90b3R5cGUpOworICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0
T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgRG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5oCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MTAxLDYgKzEwMSw4IEBAIHByaXZhdGU6CiAgICAgdWludDMyX3QgbV9jYWNoZWRJbmxpbmVDYXBh
Y2l0eTsKIH07CiAKK3ZvaWQgZ2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMoSlNHbG9iYWxPYmpl
Y3QqLCBKU09iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgdWludDMyX3QmIGluZGV4ZWRMZW5n
dGgsIHVpbnQzMl90JiBzdHJ1Y3R1cmVQcm9wZXJ0eUNvdW50KTsKKwogaW5saW5lIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvciogcHJvcGVydHlOYW1lRW51bWVyYXRvcihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZSkKIHsKICAgICBWTSYgdm0gPSBnZXRWTShnbG9i
YWxPYmplY3QpOwpAQCAtMTE3LDIyICsxMTksOCBAQCBpbmxpbmUgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKiBwcm9wZXJ0CiAgICAgICAgIHJldHVybiBlbnVtZXJhdG9yOwogCiAgICAgdWludDMy
X3QgbnVtYmVyU3RydWN0dXJlUHJvcGVydGllcyA9IDA7Ci0KICAgICBQcm9wZXJ0eU5hbWVBcnJh
eSBwcm9wZXJ0eU5hbWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3lt
Ym9sTW9kZTo6RXhjbHVkZSk7Ci0KLSAgICBpZiAoc3RydWN0dXJlLT5jYW5BY2Nlc3NQcm9wZXJ0
aWVzUXVpY2tseUZvckVudW1lcmF0aW9uKCkgJiYgaW5kZXhlZExlbmd0aCA9PSBiYXNlLT5nZXRB
cnJheUxlbmd0aCgpKSB7Ci0gICAgICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0U3RydWN0
dXJlUHJvcGVydHlOYW1lcyhiYXNlLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSgpKTsKLSAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKLQotICAg
ICAgICBudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0aWVzID0gcHJvcGVydHlOYW1lcy5zaXplKCk7Ci0K
LSAgICAgICAgYmFzZS0+bWV0aG9kVGFibGUodm0pLT5nZXRHZW5lcmljUHJvcGVydHlOYW1lcyhi
YXNlLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICAvLyBHZW5lcmljIHByb3BlcnR5IG5hbWVzIHZlY3RvciBjb250
YWlucyBhbGwgaW5kZXhlZCBwcm9wZXJ0eSBuYW1lcy4KLSAgICAgICAgLy8gU28gZGlzYWJsZSBp
bmRleGVkIHByb3BlcnR5IGVudW1lcmF0aW9uIHBoYXNlIGJ5IHNldHRpbmcgfGluZGV4ZWRMZW5n
dGh8IHRvIDAuCi0gICAgICAgIGluZGV4ZWRMZW5ndGggPSAwOwotICAgICAgICBiYXNlLT5tZXRo
b2RUYWJsZSh2bSktPmdldFByb3BlcnR5TmFtZXMoYmFzZSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7Ci0gICAgfQorICAgIGdldEVudW1lcmFibGVQcm9w
ZXJ0eU5hbWVzKGdsb2JhbE9iamVjdCwgYmFzZSwgcHJvcGVydHlOYW1lcywgaW5kZXhlZExlbmd0
aCwgbnVtYmVyU3RydWN0dXJlUHJvcGVydGllcyk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CiAKICAgICBBU1NFUlQocHJvcGVydHlOYW1lcy5zaXplKCkgPCBVSU5U
MzJfTUFYKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3Bw
CShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDMyICsxMTUsMTMgQEAgYm9vbCBKU1Byb3h5
OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZQogICAgIHJldHVybiB0aGlzT2JqZWN0LT50YXJn
ZXQoKS0+bWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0LT52bSgpKS0+ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KHRoaXNPYmplY3QtPnRhcmdldCgpLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7CiB9
CiAKLXZvaWQgSlNQcm94eTo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCi17Ci0gICAgSlNQcm94eSogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1Byb3h5Kj4ob2JqZWN0KTsKLSAgICB0aGlzT2JqZWN0LT50YXJnZXQoKS0+bWV0aG9k
VGFibGUoZ2xvYmFsT2JqZWN0LT52bSgpKS0+Z2V0UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LT50
YXJnZXQoKSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLX0KLQogdWludDMy
X3QgSlNQcm94eTo6Z2V0RW51bWVyYWJsZUxlbmd0aChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU09iamVjdCogb2JqZWN0KQogewogICAgIEpTUHJveHkqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNQcm94eSo+KG9iamVjdCk7CiAgICAgcmV0dXJuIHRoaXNPYmplY3QtPnRhcmdldCgpLT5t
ZXRob2RUYWJsZShnbG9iYWxPYmplY3QtPnZtKCkpLT5nZXRFbnVtZXJhYmxlTGVuZ3RoKGdsb2Jh
bE9iamVjdCwgdGhpc09iamVjdC0+dGFyZ2V0KCkpOwogfQogCi12b2lkIEpTUHJveHk6OmdldFN0
cnVjdHVyZVByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKQotewotICAgIC8vIFNraXAgdGhlIHN0cnVjdHVy
ZSBsb29wLCBzaW5jZSBpdCBpcyBpbnZhbGlkIGZvciBwcm94aWVzLgotfQotCi12b2lkIEpTUHJv
eHk6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKLXsKLSAgICBKU1Byb3h5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
UHJveHkqPihvYmplY3QpOwotICAgIC8vIEdldCAqYWxsKiBvZiB0aGUgcHJvcGVydHkgbmFtZXMs
IG5vdCBqdXN0IHRoZSBnZW5lcmljIG9uZXMsIHNpbmNlIHdlIHNraXBwZWQgdGhlIHN0cnVjdHVy
ZQotICAgIC8vIG9uZXMgYWJvdmUuCi0gICAgdGhpc09iamVjdC0+dGFyZ2V0KCktPm1ldGhvZFRh
YmxlKGdsb2JhbE9iamVjdC0+dm0oKSktPmdldFByb3BlcnR5TmFtZXModGhpc09iamVjdC0+dGFy
Z2V0KCksIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7Ci19Ci0KLXZvaWQgSlNQ
cm94eTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTUHJveHk6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBK
U1Byb3h5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJveHkqPihvYmplY3QpOwogICAgIHRoaXNP
YmplY3QtPnRhcmdldCgpLT5tZXRob2RUYWJsZShnbG9iYWxPYmplY3QtPnZtKCkpLT5nZXRPd25Q
cm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QtPnRhcmdldCgpLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZXMsIG1vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHku
aAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
Y2xhc3MgSlNQcm94eSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1
c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzQW55
Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldFByb3RvdHlwZSB8IEludGVyY2Vw
dHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldFByb3RvdHlwZSB8IEludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm87CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIElzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihWTSYgdm0pCkBAIC05NSwxMSArOTUsOCBAQCBwcm90ZWN0ZWQ6CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0NlbGwqLCBKU0dsb2Jh
bE9iamVjdCosIHVuc2lnbmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEpT
R2xvYmFsT2JqZWN0KiwgdW5zaWduZWQpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdWludDMyX3QgZ2V0RW51bWVyYWJsZUxlbmd0aChKU0ds
b2JhbE9iamVjdCosIEpTT2JqZWN0Kik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgZ2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwotICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIGdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwg
Ym9vbCBzaG91bGRUaHJvdyk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgc2V0
UHJvdG90eXBlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlLCBib29sIHNob3Vs
ZFRocm93SWZDYW50U2V0KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNWYWx1ZSBn
ZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJ
KHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3lt
Ym9sVGFibGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIGJvb2wg
SlNTeW1ib2xUYWJsZU9iamVjdDo6ZGVsZXRlUHJvcGVydHkKICAgICByZXR1cm4gQmFzZTo6ZGVs
ZXRlUHJvcGVydHkodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OwogfQogCi12b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lk
IEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KG9iamVjdCk7CkBAIC02MSwxNSAr
NjEsMTMgQEAgdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleAogICAgICAg
ICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPm1f
bG9jayk7CiAgICAgICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGVuZCA9IHRoaXNPYmpl
Y3QtPnN5bWJvbFRhYmxlKCktPmVuZChsb2NrZXIpOwogICAgICAgICBmb3IgKFN5bWJvbFRhYmxl
OjpNYXA6Oml0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+YmVnaW4obG9j
a2VyKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoIShpdC0+dmFsdWUuZ2V0
QXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSB8fCBtb2RlLmluY2x1
ZGVEb250RW51bVByb3BlcnRpZXMoKSkgeworICAgICAgICAgICAgaWYgKG1vZGUgPT0gRG9udEVu
dW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSB8fCAhaXQtPnZhbHVlLmlzRG9udEVudW0oKSkgewog
ICAgICAgICAgICAgICAgIGlmIChpdC0+a2V5LT5pc1N5bWJvbCgpICYmICFwcm9wZXJ0eU5hbWVz
LmluY2x1ZGVTeW1ib2xQcm9wZXJ0aWVzKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21VaWQo
dm0sIGl0LT5rZXkuZ2V0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLQot
ICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxl
T2JqZWN0LmgJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTIgKzM5LDEy
IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNTeW1ib2xUYWJsZU9iamVjdCA6IHB1YmxpYyBK
U1Njb3BlIHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNTY29wZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJy
aWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzOwogCiAgICAgU3ltYm9sVGFibGUqIHN5bWJv
bFRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zeW1ib2xUYWJsZS5nZXQoKTsgfQogICAgIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmKTsKLSAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25TcGVjaWFs
UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICAKICAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mU3ltYm9sVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNTeW1ib2xU
YWJsZU9iamVjdCwgbV9zeW1ib2xUYWJsZSk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNUeXBlSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVHlwZUluZm8uaAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwx
MyArNDgsOCBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFR5cGVJbmZvUGVyQ2VsCiAvLyBP
dXQgb2YgbGluZSBmbGFncy4KIAogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBJbXBsZW1lbnRz
SGFzSW5zdGFuY2UgPSAxIDw8IDg7Ci1zdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIE92ZXJyaWRl
c0dldFByb3BlcnR5TmFtZXMgPSAxIDw8IDk7Ci0vLyBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9w
ZXJ0eU5hbWVzIG1lYW5zIHRoYXQgd2UgY2Fubm90IG1ha2UgYXNzdW1wdGlvbnMgYWJvdXQKLS8v
IHRoZSBjYWNoZWFiaWxpdHkgb3IgZW51bWVyYWJpbGl0eSBvZiBwcm9wZXJ0eSBuYW1lcywgYW5k
IHRoZXJlZm9yZSwgd2UnbGwgbmVlZAotLy8gdG8gZGlzYWJsZSBjZXJ0YWluIG9wdGltaXphdGlv
bnMuIFRoaXMgZmxhZyBzaG91bGQgYmUgc2V0IGlmIG9uZSBvciBtb3JlIG9mIHRoZQotLy8gZm9s
bG93aW5nIE9iamVjdCBtZXRob2RzIGFyZSBvdmVycmlkZGVuOgotLy8gICAgIGdldE93blByb3Bl
cnR5TmFtZXMsIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcywgZ2V0UHJvcGVydHlOYW1lcwot
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5h
bWVzID0gMSA8PCAxMDsKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlOYW1lcyA9IDEgPDwgOTsKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgT3ZlcnJp
ZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMgPSAxIDw8IDEwOwogc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcgPSAxIDw8IDExOwogc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSA9IDEgPDwgMTI7CiBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIE5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50
cyA9IDEgPDwgMTM7CkBAIC0xMDMsOCArOTgsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wg
cGVyQ2VsbEJpdChJbmxpbmVUeXBlRmxhZ3MgZmxhZ3MpIHsgcmV0dXJuIGZsYWdzICYgVHlwZUlu
Zm9QZXJDZWxsQml0OyB9CiAgICAgYm9vbCBvdmVycmlkZXNUb1RoaXMoKSBjb25zdCB7IHJldHVy
biBpc1NldE9uRmxhZ3MxPE92ZXJyaWRlc1RvVGhpcz4oKTsgfQogICAgIGJvb2wgc3RydWN0dXJl
SXNJbW1vcnRhbCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8U3RydWN0dXJlSXNJbW1v
cnRhbD4oKTsgfQotICAgIGJvb2wgb3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcygpIGNvbnN0IHsg
cmV0dXJuIGlzU2V0T25GbGFnczI8T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcz4oKTsgfQotICAg
IGJvb2wgb3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJu
IGlzU2V0T25GbGFnczI8T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcz4oKTsgfQor
ICAgIGJvb2wgb3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuIGlz
U2V0T25GbGFnczI8T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcz4oKTsgfQorICAgIGJvb2wg
b3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiBpc1Nl
dE9uRmxhZ3MyPE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzPigpOyB9CisgICAg
Ym9vbCBvdmVycmlkZXNBbnlGb3JtT2ZHZXRPd25Qcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1
cm4gb3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcygpIHx8IG92ZXJyaWRlc0dldE93blNwZWNp
YWxQcm9wZXJ0eU5hbWVzKCk7IH0KICAgICBib29sIG92ZXJyaWRlc0dldFByb3RvdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIGlzU2V0T25GbGFnczI8T3ZlcnJpZGVzR2V0UHJvdG90eXBlPigpOyB9CiAg
ICAgYm9vbCBwcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSBjb25zdCB7IHJldHVybiBpc1NldE9u
RmxhZ3MyPFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZz4oKTsgfQogICAgIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90SXNJbXB1cmUoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPEdldE93blBy
b3BlcnR5U2xvdElzSW1wdXJlPigpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyNzExMTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4Niw3ICsxODYsNyBAQCBKU1ZhbHVlIG9iamVjdENvbnN0cnVjdG9y
R2V0T3duUHJvcGVydHlECiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBQcm9wZXJ0eU5hbWVBcnJh
eSBwcm9wZXJ0aWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scywgUHJp
dmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5n
ZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0aWVzLCBFbnVt
ZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAgIG9iamVj
dC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0aWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgSlNPYmplY3QqIGRlc2NyaXB0
b3JzID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2JqZWN0KTsKQEAgLTI5NCw3ICsyOTQs
NyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04ob2JqZWN0Q29uc3RydWN0CiAgICAgICAgICAg
ICBhdXRvIGNhblBlcmZvcm1GYXN0UHJvcGVydHlFbnVtZXJhdGlvbkZvck9iamVjdEFzc2lnbiA9
IFtdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgewogICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1
cmUtPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KCkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT50
eXBlSW5mbygpLm92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMoKSkKKyAgICAgICAg
ICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJyaWRlc0FueUZvcm1PZkdldE93
blByb3BlcnR5TmFtZXMoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBJbmRleGVkIHByb3BlcnRpZXMgY2FuIGJlIGhhbmRsZWQu
CiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4NTM1OApAQCAtMzU3LDcgKzM1Nyw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihv
YmplY3RDb25zdHJ1Y3QKICAgICAgICAgdGFyZ2V0Q2FuUGVyZm9ybUZhc3RQdXQgPSBmYWxzZTsK
IAogICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKHZtLCBQcm9wZXJ0eU5hbWVN
b2RlOjpTdHJpbmdzQW5kU3ltYm9scywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwotICAg
ICAgICBzb3VyY2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2Us
IGdsb2JhbE9iamVjdCwgcHJvcGVydGllcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVy
dGllc01vZGU6OkluY2x1ZGUpKTsKKyAgICAgICAgc291cmNlLT5tZXRob2RUYWJsZSh2bSktPmdl
dE93blByb3BlcnR5TmFtZXMoc291cmNlLCBnbG9iYWxPYmplY3QsIHByb3BlcnRpZXMsIERvbnRF
bnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwogCiAgICAgICAgIHVuc2lnbmVkIG51bVByb3BlcnRpZXMgPSBwcm9wZXJ0
aWVzLnNpemUoKTsKQEAgLTQwMyw3ICs0MDMsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
b2JqZWN0Q29uc3RydWN0CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAog
ICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0
cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKLSAgICB0YXJnZXQtPm1ldGhvZFRh
YmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQsIGdsb2JhbE9iamVjdCwgcHJvcGVy
dGllcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsK
KyAgICB0YXJnZXQtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQs
IGdsb2JhbE9iamVjdCwgcHJvcGVydGllcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVk
ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIHVuc2lnbmVk
IGluZGV4ID0gMDsKQEAgLTU1Nyw3ICs1NTcsNyBAQCBzdGF0aWMgSlNWYWx1ZSBkZWZpbmVQcm9w
ZXJ0aWVzKEpTR2xvYmFsCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyh2bSwgUHJvcGVydHlOYW1l
TW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKLSAg
ICBhc09iamVjdChwcm9wZXJ0aWVzKS0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5h
bWVzKGFzT2JqZWN0KHByb3BlcnRpZXMpLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKSk7CisgICAgYXNP
YmplY3QocHJvcGVydGllcyktPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhh
c09iamVjdChwcm9wZXJ0aWVzKSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBEb250RW51
bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgIHNpemVfdCBudW1Qcm9wZXJ0aWVzID0gcHJvcGVydHlOYW1lcy5zaXplKCk7
CiAgICAgVmVjdG9yPFByb3BlcnR5RGVzY3JpcHRvcj4gZGVzY3JpcHRvcnM7CkBAIC02NDgsNyAr
NjQ4LDcgQEAgYm9vbCBzZXRJbnRlZ3JpdHlMZXZlbChKU0dsb2JhbE9iamVjdCogZwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKHZtLCBQ
cm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4
Y2x1ZGUpOwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVz
KG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVu
dW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0p
LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0aWVzLCBE
b250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBmYWxzZSk7CiAKICAgICBQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gcHJvcGVydGllcy5lbmQoKTsKQEAgLTY5NSw3ICs2OTUsNyBAQCBib29sIHRlc3RJbnRl
Z3JpdHlMZXZlbChKU0dsb2JhbE9iamVjdCogCiAKICAgICAvLyA2LiBMZXQga2V5cyBiZSA/IE8u
W1tPd25Qcm9wZXJ0eUtleXNdXSgpLgogICAgIFByb3BlcnR5TmFtZUFycmF5IGtleXModm0sIFBy
b3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhj
bHVkZSk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMo
b2JqZWN0LCBnbG9iYWxPYmplY3QsIGtleXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3Bl
cnRpZXNNb2RlOjpJbmNsdWRlKSk7CisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93
blByb3BlcnR5TmFtZXMob2JqZWN0LCBnbG9iYWxPYmplY3QsIGtleXMsIERvbnRFbnVtUHJvcGVy
dGllc01vZGU6OkluY2x1ZGUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAKICAgICAvLyA3LiBGb3IgZWFjaCBlbGVtZW50IGsgb2Yga2V5cywgZG8KQEAgLTg3Nyw3ICs4
NzcsNyBAQCBKU0FycmF5KiBvd25Qcm9wZXJ0eUtleXMoSlNHbG9iYWxPYmplY3QqCiAgICAgfQog
CiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyh2bSwgcHJvcGVydHlOYW1lTW9kZSwg
UHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0p
LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0aWVzLCBF
bnVtZXJhdGlvbk1vZGUoZG9udEVudW1Qcm9wZXJ0aWVzTW9kZSkpOworICAgIG9iamVjdC0+bWV0
aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0aWVzLCBkb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIGlmIChwcm9wZXJ0eU5hbWVNb2RlICE9IFByb3Bl
cnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCShyZXZpc2lvbiAyNzExMTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg5MCwxMCArODkwLDkgQEAgdm9pZCBQcm94eU9iamVjdDo6cGVyZm9ybUdldE93blBy
b3BlcnR5TgogICAgIEpTVmFsdWUgb3duS2V5c01ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChn
bG9iYWxPYmplY3QsIGNhbGxEYXRhLCBtYWtlSWRlbnRpZmllcih2bSwgIm93bktleXMiKSwgIidv
d25LZXlzJyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFibGUi
X3MpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgSlNPYmpl
Y3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwotICAgIEVudW1lcmF0aW9uTW9kZSBlbnVtZXJh
dGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSk7CiAgICAgaWYgKG93bktl
eXNNZXRob2QuaXNVbmRlZmluZWQoKSkgewogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAg
ICAgIHRhcmdldC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCwg
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBlbnVtZXJhdGlvbk1vZGUpOworICAgICAgICB0
YXJnZXQtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQsIGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTk0Niw3ICs5NDUsNyBAQCB2b2lkIFByb3h5
T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVydHlOCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgdm9pZCgpKTsKIAogICAgIFByb3BlcnR5TmFtZUFycmF5IHRhcmdldEtleXModm0sIFBy
b3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhj
bHVkZSk7Ci0gICAgdGFyZ2V0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMo
dGFyZ2V0LCBnbG9iYWxPYmplY3QsIHRhcmdldEtleXMsIGVudW1lcmF0aW9uTW9kZSk7CisgICAg
dGFyZ2V0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0LCBnbG9i
YWxPYmplY3QsIHRhcmdldEtleXMsIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgVmVjdG9yPFVuaXF1
ZWRTdHJpbmdJbXBsKj4gdGFyZ2V0Q29uZmlndXJhYmxlS2V5czsKICAgICBWZWN0b3I8VW5pcXVl
ZFN0cmluZ0ltcGwqPiB0YXJnZXROb25Db25maWd1cmFibGVLZXlzOwpAQCAtMTAxMywzNyArMTAx
MiwxNSBAQCB2b2lkIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duRW51bWVyYWJsCiAgICAgfQog
fQogCi12b2lkIFByb3h5T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9w
ZXJ0eU5hbWVBcnJheSwgRW51bWVyYXRpb25Nb2RlIGVudW1lcmF0aW9uTW9kZSkKK3ZvaWQgUHJv
eHlPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZUFycmF5
LCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgUHJveHlPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihvYmplY3QpOwotICAgIGlmIChlbnVtZXJhdGlv
bk1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKQorICAgIGlmIChtb2RlID09IERvbnRF
bnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpCiAgICAgICAgIHRoaXNPYmplY3QtPnBlcmZvcm1H
ZXRPd25Qcm9wZXJ0eU5hbWVzKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lQXJyYXkpOwogICAg
IGVsc2UKICAgICAgICAgdGhpc09iamVjdC0+cGVyZm9ybUdldE93bkVudW1lcmFibGVQcm9wZXJ0
eU5hbWVzKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lQXJyYXkpOwogfQogCi12b2lkIFByb3h5
T2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVBcnJheSwgRW51
bWVyYXRpb25Nb2RlIGVudW1lcmF0aW9uTW9kZSkKLXsKLSAgICBOT19UQUlMX0NBTExTKCk7Ci0g
ICAgSlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMob2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZUFycmF5LCBlbnVtZXJhdGlvbk1vZGUpOwotfQotCi12b2lkIFByb3h5T2JqZWN0Ojpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFBy
b3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKQotewotICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgUHJveHlPYmplY3Q6OmdldFN0cnVjdHVyZVByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKQotewotICAgIC8vIFdlIHNob3VsZCBhbHdheXMgZ28gZG93biB0aGUg
Z2V0T3duUHJvcGVydHlOYW1lcyBwYXRoLgotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci19Ci0KLXZvaWQgUHJveHlPYmplY3Q6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCiBib29sIFByb3h5
T2JqZWN0OjpwZXJmb3JtU2V0UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlLCBib29sIHNob3VsZFRocm93SWZDYW50U2V0KQogewogICAgIE5P
X1RBSUxfQ0FMTFMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
eHlPYmplY3QuaAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJveHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBjbGFz
cyBQcm94eU9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU05vbkZpCiBwdWJsaWM6CiAgICAgdHlwZWRl
ZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRDYWxsRGF0YSB8IEludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBPdmVycmlkZXNHZXRQcm9w
ZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRl
c0dldFByb3RvdHlwZSB8IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVz
IHwgT3ZlcnJpZGVzR2V0UHJvdG90eXBlIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBJbnRlcmNl
cHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgUHJv
aGliaXRzUHJvcGVydHlDYWNoaW5nOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUs
IFN1YnNwYWNlQWNjZXNzIG1vZGU+CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZv
cihWTSYgdm0pCkBAIC01Nyw3ICs1Nyw2IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKGlzQ2FsbGFi
bGUpCiAgICAgICAgICAgICBmbGFncyB8PSAoSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgSW1wbGVt
ZW50c0RlZmF1bHRIYXNJbnN0YW5jZSk7CiAgICAgICAgIFN0cnVjdHVyZSogcmVzdWx0ID0gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhQcm94
eU9iamVjdFR5cGUsIGZsYWdzKSwgaW5mbygpLCBOb25BcnJheSB8IE1heUhhdmVJbmRleGVkQWNj
ZXNzb3JzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRJc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2Vk
Rm9yRW51bWVyYXRpb24oZmFsc2UpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0LT5j
YW5BY2Nlc3NQcm9wZXJ0aWVzUXVpY2tseUZvckVudW1lcmF0aW9uKCkpOwogICAgICAgICBSRUxF
QVNFX0FTU0VSVCghcmVzdWx0LT5jYW5DYWNoZVByb3BlcnR5TmFtZUVudW1lcmF0b3Iodm0pKTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTg5LDExICs4OCw3IEBAIHByaXZhdGU6CiAgICAg
c3RhdGljIGJvb2wgcHJldmVudEV4dGVuc2lvbnMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCop
OwogICAgIHN0YXRpYyBib29sIGlzRXh0ZW5zaWJsZShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
Kik7CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBz
aG91bGRUaHJvdyk7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUp
OwotICAgIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICBzdGF0aWMg
Tk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUpOwotICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0U3RydWN0
dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwotICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NS
QVNIIHZvaWQgZ2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVj
dCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9p
ZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIHN0YXRpYyBib29sIHNl
dFByb3RvdHlwZShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUs
IGJvb2wgc2hvdWxkVGhyb3dJZkNhbnRTZXQpOwogICAgIHN0YXRpYyBKU1ZhbHVlIGdldFByb3Rv
dHlwZShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiAyNzExMTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03NSwyOCArNzUsMTEgQEAgYm9vbCBSZWdFeHBPYmplY3Q6OmRlbGV0ZVByb3BlcnR5
KEpTQ2VsbAogICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eShjZWxsLCBnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLXZvaWQgUmVnRXhwT2JqZWN0OjpnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQordm9pZCBSZWdFeHBPYmplY3Q6OmdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgaWYgKG1vZGUuaW5jbHVkZURvbnRFbnVt
UHJvcGVydGllcygpKQorICAgIGlmIChtb2RlID09IERvbnRFbnVtUHJvcGVydGllc01vZGU6Oklu
Y2x1ZGUpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKHZtLnByb3BlcnR5TmFtZXMtPmxhc3RJ
bmRleCk7Ci0gICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLX0KLQotdm9pZCBSZWdFeHBPYmplY3Q6
OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBpZiAobW9k
ZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KHZtLnByb3BlcnR5TmFtZXMtPmxhc3RJbmRleCk7Ci0gICAgQmFzZTo6Z2V0UHJvcGVydHlOYW1l
cyhvYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7Ci19Ci0KLXZvaWQg
UmVnRXhwT2JqZWN0OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCi17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwotICAgIGlmIChtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkKLSAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQodm0ucHJvcGVydHlOYW1lcy0+bGFzdEluZGV4KTsKLSAgICBC
YXNlOjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhvYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lcywgbW9kZSk7CiB9CiAKIGJvb2wgUmVnRXhwT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0
eShKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3Is
IGJvb2wgc2hvdWxkVGhyb3cpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBSZWdFeHBPYmplY3QgZmluYWwgOiBwdWJsaWMgSlNO
b25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmpl
Y3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVz
R2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXM7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3du
U3BlY2lhbFByb3BlcnR5TmFtZXM7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwg
U3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KFZNJiB2bSkKQEAgLTE0Niw5ICsxNDYsNyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmKTsKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0R2VuZXJpY1Byb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRP
d25TcGVjaWFsUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3Vs
ZFRocm93KTsKIAogICAgIE1hdGNoUmVzdWx0IG1hdGNoSW5saW5lKEpTR2xvYmFsT2JqZWN0Kiwg
SlNTdHJpbmcqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nT2JqZWN0LmNwcAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDcgKzE0NSw3
IEBAIGJvb2wgU3RyaW5nT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgKICAgICByZXR1cm4g
SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3Qs
IGkpOwogfQogCi12b2lkIFN0cmluZ09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIFN0cmluZ09iamVj
dDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Q
cm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RyaW5nT2JqZWN0Kj4ob2Jq
ZWN0KTsKQEAgLTE1MywxNyArMTUzLDExIEBAIHZvaWQgU3RyaW5nT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEoKICAgICAgICAgaW50IHNpemUgPSB0aGlzT2JqZWN0LT5pbnRlcm5hbFZhbHVl
KCktPmxlbmd0aCgpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKICAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20odm0sIGkpKTsKKyAg
ICAgICAgdGhpc09iamVjdC0+Z2V0T3duSW5kZXhlZFByb3BlcnR5TmFtZXMoZ2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKICAgICB9Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywg
bW9kZSk7Ci19Ci0KLXZvaWQgU3RyaW5nT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQotewotICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8U3RyaW5nT2JqZWN0Kj4ob2JqZWN0KTsKLSAgICBpZiAobW9kZS5pbmNsdWRl
RG9udEVudW1Qcm9wZXJ0aWVzKCkpCisgICAgaWYgKG1vZGUgPT0gRG9udEVudW1Qcm9wZXJ0aWVz
TW9kZTo6SW5jbHVkZSkKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQodm0ucHJvcGVydHlOYW1l
cy0+bGVuZ3RoKTsKLSAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAg
IHRoaXNPYmplY3QtPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhnbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiBTdHJpbmcgU3RyaW5nT2JqZWN0Ojp0b1N0cmluZ05h
bWUoY29uc3QgSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkocmV2aXNpb24gMjcxMTE2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDcgKzI4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBTdHJpbmdPYmplY3Qg
OiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNX
cmFwcGVyT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFpl
cm8gfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMg
fCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3Ra
ZXJvOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CiAgICAg
c3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCkBAIC01OSw4ICs1OSw3IEBA
IHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3Bl
cnR5KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0
eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0
eUJ5SW5kZXgoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUp
OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmpl
Y3QqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxk
VGhyb3cpOwogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsMzIgKzE5NCwy
MCBAQCB2b2lkIFN0cnVjdHVyZTo6dmFsaWRhdGVGbGFncygpCiAgICAgICAgICYmIG1ldGhvZFRh
YmxlLmRvUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrICE9IEpTQ2VsbDo6ZG9QdXRQcm9wZXJ0eVNl
Y3VyaXR5Q2hlY2s7CiAgICAgUkVMRUFTRV9BU1NFUlQob3ZlcnJpZGVzUHV0UHJvcGVydHlTZWN1
cml0eUNoZWNrID09IHR5cGVJbmZvKCkuaGFzUHV0UHJvcGVydHlTZWN1cml0eUNoZWNrKCkpOwog
Ci0gICAgYm9vbCBvdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzID0KLSAgICAgICAgbWV0aG9kVGFi
bGUuZ2V0UHJvcGVydHlOYW1lcyAhPSBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcwotICAgICAg
ICAmJiBtZXRob2RUYWJsZS5nZXRQcm9wZXJ0eU5hbWVzICE9IEpTQ2VsbDo6Z2V0UHJvcGVydHlO
YW1lczsKICAgICBib29sIG92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgPQogICAgICAgICBt
ZXRob2RUYWJsZS5nZXRPd25Qcm9wZXJ0eU5hbWVzICE9IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eU5hbWVzCiAgICAgICAgICYmIG1ldGhvZFRhYmxlLmdldE93blByb3BlcnR5TmFtZXMgIT0gSlND
ZWxsOjpnZXRPd25Qcm9wZXJ0eU5hbWVzOwotICAgIGJvb2wgb3ZlcnJpZGVzR2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzID0KLSAgICAgICAgbWV0aG9kVGFibGUuZ2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzICE9IEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMKLSAgICAg
ICAgJiYgbWV0aG9kVGFibGUuZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzICE9IEpTQ2VsbDo6
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzOwotCi0gICAgUkVMRUFTRV9BU1NFUlQob3ZlcnJp
ZGVzR2V0UHJvcGVydHlOYW1lcyA9PSB0eXBlSW5mbygpLm92ZXJyaWRlc0dldFByb3BlcnR5TmFt
ZXMoKSk7Ci0KLSAgICAvLyBXZSBjYW4gc3RyZW5ndGhlbiB0aGlzIGludG8gYW4gZXF1aXZhbGVu
Y2UgdGVzdCBpZiB0aGVyZSBhcmUgbm8gY2xhc3NlcwotICAgIC8vIHRoYXQgc3BlY2lmaWVzIHRo
aXMgZmxhZyB3aXRob3V0IG92ZXJyaWRpbmcgYW55IG9mIHRoZSBmb3JtcyBvZiBnZXRQcm9wZXJ0
eU5hbWVzLgotICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjEyOTU0Ci0gICAgaWYgKG92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMKLSAgICAgICAg
fHwgb3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcwotICAgICAgICB8fCBvdmVycmlkZXNHZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXMpCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHR5cGVJbmZv
KCkub3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcygpKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzID09IHR5cGVJbmZvKCkub3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlOYW1lcygpKTsKKworICAgIGJvb2wgb3ZlcnJpZGVzR2V0T3duU3BlY2lh
bFByb3BlcnR5TmFtZXMgPQorICAgICAgICBtZXRob2RUYWJsZS5nZXRPd25TcGVjaWFsUHJvcGVy
dHlOYW1lcyAhPSBKU09iamVjdDo6Z2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMKKyAgICAgICAg
JiYgbWV0aG9kVGFibGUuZ2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMgIT0gSlNDZWxsOjpnZXRP
d25TcGVjaWFsUHJvcGVydHlOYW1lczsKKyAgICBSRUxFQVNFX0FTU0VSVChvdmVycmlkZXNHZXRP
d25TcGVjaWFsUHJvcGVydHlOYW1lcyA9PSB0eXBlSW5mbygpLm92ZXJyaWRlc0dldE93blNwZWNp
YWxQcm9wZXJ0eU5hbWVzKCkpOwogCiAgICAgYm9vbCBvdmVycmlkZXNHZXRQcm90b3R5cGUgPQog
ICAgICAgICBtZXRob2RUYWJsZS5nZXRQcm90b3R5cGUgIT0gc3RhdGljX2Nhc3Q8TWV0aG9kVGFi
bGU6OkdldFByb3RvdHlwZUZ1bmN0aW9uUHRyPihKU09iamVjdDo6Z2V0UHJvdG90eXBlKQogICAg
ICAgICAmJiBtZXRob2RUYWJsZS5nZXRQcm90b3R5cGUgIT0gSlNDZWxsOjpnZXRQcm90b3R5cGU7
Ci0KLSAgICBpZiAob3ZlcnJpZGVzR2V0UHJvdG90eXBlKQotICAgICAgICBSRUxFQVNFX0FTU0VS
VCh0eXBlSW5mbygpLm92ZXJyaWRlc0dldFByb3RvdHlwZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VS
VChvdmVycmlkZXNHZXRQcm90b3R5cGUgPT0gdHlwZUluZm8oKS5vdmVycmlkZXNHZXRQcm90b3R5
cGUoKSk7CiB9CiAjZWxzZQogaW5saW5lIHZvaWQgU3RydWN0dXJlOjp2YWxpZGF0ZUZsYWdzKCkg
eyB9CkBAIC0xMjAzLDcgKzExOTEsNyBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmF0dHJp
YnV0ZUNoYW5nCiAgICAgICAgIH0pOwogfQogCi12b2lkIFN0cnVjdHVyZTo6Z2V0UHJvcGVydHlO
YW1lc0Zyb21TdHJ1Y3R1cmUoVk0mIHZtLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIFN0cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1l
c0Zyb21TdHJ1Y3R1cmUoVk0mIHZtLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywg
RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIFByb3BlcnR5VGFibGUqIHRhYmxl
ID0gZW5zdXJlUHJvcGVydHlUYWJsZUlmTm90RW1wdHkodm0pOwogICAgIGlmICghdGFibGUpCkBA
IC0xMjEzLDcgKzEyMDEsNyBAQCB2b2lkIFN0cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21T
dHJ1CiAgICAgYm9vbCBmb3VuZFN5bWJvbCA9IGZhbHNlOwogCiAgICAgYXV0byBjaGVja0RvbnRF
bnVtQW5kQWRkID0gWyZdKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIpIHsKLSAgICAgICAg
aWYgKCEoaXRlci0+YXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkgfHwg
bW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0g
RG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSB8fCAhKGl0ZXItPmF0dHJpYnV0ZXMgJiBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKSB7CiAgICAgICAgICAgICBpZiAoa25vd25Vbmlx
dWUpCiAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGRVbmNoZWNrZWQoaXRlci0+a2V5
KTsKICAgICAgICAgICAgIGVsc2UKQEAgLTE0OTIsNiArMTQ4MCw4IEBAIGJvb2wgU3RydWN0dXJl
OjpjYW5BY2Nlc3NQcm9wZXJ0aWVzUXVpY2sKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlm
IChpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKHR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcygpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNTMw
LDcgKzUzMCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENhY2hlZFByb3BlcnR5TmFtZXMoVk0m
LCBDYWNoZWRQcm9wZXJ0eU5hbWVzS2luZCwgSlNJbW11dGFibGVCdXR0ZXJmbHkqKTsKICAgICBi
b29sIGNhbkNhY2hlT3duUHJvcGVydHlOYW1lcygpIGNvbnN0OwogCi0gICAgdm9pZCBnZXRQcm9w
ZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShWTSYsIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKTsKKyAgICB2b2lkIGdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKFZNJiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKIAogICAgIEpTVmFsdWUg
Y2FjaGVkU3BlY2lhbFByb3BlcnR5KENhY2hlZFNwZWNpYWxQcm9wZXJ0eUtleSBrZXkpCiAgICAg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlu
bGluZXMuaAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzUsNyArMjc1LDcgQEAg
aW5saW5lIGJvb2wgU3RydWN0dXJlOjpjYW5DYWNoZU93blByb3BlcgogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaWYgKGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICh0eXBlSW5mbygpLm92ZXJyaWRlc0FueUZvcm1P
ZkdldFByb3BlcnR5TmFtZXMoKSkKKyAgICBpZiAodHlwZUluZm8oKS5vdmVycmlkZXNBbnlGb3Jt
T2ZHZXRPd25Qcm9wZXJ0eU5hbWVzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZN
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJW
TS5jcHAJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9K
U0RvbGxhclZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQzLDcgKzU0Myw3IEBAIHN0YXRpYyBK
U0NfREVDTEFSRV9DVVNUT01fR0VUVEVSKHJ1bnRpbWUKIGNsYXNzIFJ1bnRpbWVBcnJheSA6IHB1
YmxpYyBKU0FycmF5IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQXJyYXkgQmFzZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJv
cGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgT3ZlcnJpZGVzQW55Rm9y
bU9mR2V0UHJvcGVydHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3Ro
SXNOb3RaZXJvOwogCiBJR05PUkVfV0FSTklOR1NfQkVHSU4oInVudXNlZC1jb25zdC12YXJpYWJs
ZSIpCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSBmYWxzZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDIxLTAxLTAxICBBbGV4ZXkg
U2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAgICAgICBbSlNDXSBTaW1wbGlm
eSBnZXQqUHJvcGVydHlOYW1lcygpIG1ldGhvZHMgYW5kIEVudW1lcmF0aW9uTW9kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyOTU0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAgICAgICBBZGp1c3QgZm9yIGNoYW5n
ZXMgaW4gSlNDJ3MgTWV0aG9kVGFibGUsIFR5cGVJbmZvLCBhbmQgRW51bWVyYXRpb25Nb2RlLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICog
YW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByb2Nlc3NL
ZXlmcmFtZUxpa2VPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydFJl
Y29yZC5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTTG9jYXRpb246OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTUmVtb3RlRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUmVtb3Rl
RE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxp
emVyOjpzZXJpYWxpemUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAg
KEdlbmVyYXRlSGVhZGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvKjog
VXBkYXRlZC4KKyAgICAgICAgKiBicmlkZ2UvTlBfanNvYmplY3QuY3BwOgorICAgICAgICAqIGJy
aWRnZS9ydW50aW1lX2FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6UnVudGltZUFycmF5OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9hcnJheS5oOgorICAg
ICAgICAqIGJyaWRnZS9ydW50aW1lX29iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdz
OjpSdW50aW1lT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBicmlkZ2Uv
cnVudGltZV9vYmplY3QuaDoKKwogMjAyMC0xMi0zMSAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFtMRkNdW0lGQ10gSG9yaXpvbnRhbCBwYWRkaW5nL2JvcmRlciBt
YWtlcyB0aGUgaW5saW5lIGJveCBub24tZW1wdHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FuaW1h
dGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYW5p
bWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL1dl
YkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM4
LDcgKzIzOCw3IEBAIHN0YXRpYyBpbmxpbmUgRXhjZXB0aW9uT3I8S2V5ZnJhbWVFZmZlY3QKIAog
ICAgIC8vIDMuIExldCBpbnB1dCBwcm9wZXJ0aWVzIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0
aGUgRW51bWVyYWJsZU93bk5hbWVzIG9wZXJhdGlvbiB3aXRoIGtleWZyYW1lIGlucHV0IGFzIHRo
ZSBvYmplY3QuCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgaW5wdXRQcm9wZXJ0aWVzKHZtLCBQcm9w
ZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7Ci0gICAg
SlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoa2V5ZnJhbWVzSW5wdXQuZ2V0KCksICZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBpbnB1dFByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKKyAg
ICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhrZXlmcmFtZXNJbnB1dC5nZXQoKSwgJmxl
eGljYWxHbG9iYWxPYmplY3QsIGlucHV0UHJvcGVydGllcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9k
ZTo6RXhjbHVkZSk7CiAKICAgICAvLyA0LiBNYWtlIHVwIGEgbmV3IGxpc3QgYW5pbWF0aW9uIHBy
b3BlcnRpZXMgdGhhdCBjb25zaXN0cyBvZiBhbGwgb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUg
aW4gYm90aCBpbnB1dCBwcm9wZXJ0aWVzIGFuZCBhbmltYXRhYmxlCiAgICAgLy8gICAgcHJvcGVy
dGllcywgb3Igd2hpY2ggYXJlIGluIGlucHV0IHByb3BlcnRpZXMgYW5kIGNvbmZvcm0gdG8gdGhl
IDxjdXN0b20tcHJvcGVydHktbmFtZT4gcHJvZHVjdGlvbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFJlY29yZC5oCShyZXZpc2lvbiAyNzExMTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRSZWNvcmQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgICAgIC8v
IDQuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuCiAgICAgICAgIEpTQzo6
UHJvcGVydHlOYW1lQXJyYXkga2V5cyh2bSwgSlNDOjpQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdz
LCBKU0M6OlByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKLSAgICAgICAgb2JqZWN0LT5tZXRo
b2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCAmbGV4aWNhbEdsb2JhbE9i
amVjdCwga2V5cywgSlNDOjpFbnVtZXJhdGlvbk1vZGUoSlNDOjpEb250RW51bVByb3BlcnRpZXNN
b2RlOjpJbmNsdWRlKSk7CisgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Q
cm9wZXJ0eU5hbWVzKG9iamVjdCwgJmxleGljYWxHbG9iYWxPYmplY3QsIGtleXMsIEpTQzo6RG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSk7CiAKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKIApAQCAtMTEzLDcgKzExMyw3IEBAIHByaXZhdGU6CiAKICAgICAg
ICAgICAgIC8vIDIuIElmIGRlc2MgaXMgbm90IHVuZGVmaW5lZCBhbmQgZGVzYy5bW0VudW1lcmFi
bGVdXSBpcyB0cnVlOgogCi0gICAgICAgICAgICAvLyBJdCdzIG5lY2Vzc2FyeSB0byBmaWx0ZXIg
ZW51bWVyYWJsZSBoZXJlIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBkZWZhdWx0IEVudW1lcmF0aW9u
TW9kZSwKKyAgICAgICAgICAgIC8vIEl0J3MgbmVjZXNzYXJ5IHRvIGZpbHRlciBlbnVtZXJhYmxl
IGhlcmUgcmF0aGVyIHRoYW4gdXNpbmcgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSwK
ICAgICAgICAgICAgIC8vIHRvIHByZXZlbnQgYW4gb2JzZXJ2YWJsZSBleHRyYSBbW0dldE93blBy
b3BlcnR5XV0gb3BlcmF0aW9uIGluIHRoZSBjYXNlIG9mIFByb3h5T2JqZWN0IHJlY29yZHMuCiAg
ICAgICAgICAgICBpZiAoZGlkR2V0RGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUo
KSkgewogICAgICAgICAgICAgICAgIC8vIDEuIExldCB0eXBlZEtleSBiZSBrZXkgY29udmVydGVk
IHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiAyNzExMTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1NCwxNCArNDU0LDE0IEBAIHN0YXRpYyB2b2lkIGFkZFNjb3BlZENoaWxkcmVu
SW5kZXhlcyhKU0cKIH0KIAogLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jd2luZG93
cHJveHktb3ducHJvcGVydHlrZXlzCi12b2lkIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUp
Cit2b2lkIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3Qs
IEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIEpTRE9N
V2luZG93KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4ob2JqZWN0KTsKIAogICAg
IGFkZFNjb3BlZENoaWxkcmVuSW5kZXhlcygqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVj
dC0+d3JhcHBlZCgpLCBwcm9wZXJ0eU5hbWVzKTsKIAogICAgIGlmICghQmluZGluZ1NlY3VyaXR5
OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNP
YmplY3QtPndyYXBwZWQoKSwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yKSkgewotICAgICAgICBp
ZiAobW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpCisgICAgICAgIGlmIChtb2RlID09
IERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpCiAgICAgICAgICAgICBhZGRDcm9zc09y
aWdpbk93blByb3BlcnR5TmFtZXM8Q3Jvc3NPcmlnaW5PYmplY3Q6OldpbmRvdz4oKmxleGljYWxH
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJ
KHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRp
b25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsMTEgKzE3NiwxMSBAQCBib29sIEpT
TG9jYXRpb246OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKCiAgICAgcmV0dXJuIEJhc2U6OmRlbGV0
ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUpOwogfQogCi12b2lkIEpTTG9jYXRpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNM
b2NhdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBKU0xvY2F0aW9uKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTTG9jYXRpb24qPihvYmplY3QpOwogICAgIGlmICghQmluZGluZ1Nl
Y3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNPYmplY3QtPndyYXBwZWQoKS53aW5kb3coKSwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9y
KSkgewotICAgICAgICBpZiAobW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpCisgICAg
ICAgIGlmIChtb2RlID09IERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpCiAgICAgICAg
ICAgICBhZGRDcm9zc09yaWdpbk93blByb3BlcnR5TmFtZXM8Q3Jvc3NPcmlnaW5PYmplY3Q6Okxv
Y2F0aW9uPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcyk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURP
TVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNSZW1vdGVET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMCwxMSArMTAwLDExIEBAIGJvb2wgSlNSZW1vdGVET01XaW5kb3c6OmRl
bGV0ZVByb3BlcnR5QnkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgSlNSZW1vdGVET01X
aW5kb3c6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1JlbW90ZURPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2Rl
KQogewogICAgIC8vIEZJWE1FOiBBZGQgc2NvcGVkIGNoaWxkcmVuIGluZGV4ZXMuCiAKLSAgICBp
ZiAobW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpCisgICAgaWYgKG1vZGUgPT0gRG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkKICAgICAgICAgYWRkQ3Jvc3NPcmlnaW5Pd25Q
cm9wZXJ0eU5hbWVzPENyb3NzT3JpZ2luT2JqZWN0OjpXaW5kb3c+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWVzKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiAyNzExMTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzI4LDcgKzE3MjgsNyBAQCBTZXJpYWxpemF0aW9uUmV0dXJu
Q29kZSBDbG9uZVNlcmlhbGl6ZXI6CiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aFN0YWNrLnJl
bW92ZUxhc3QoKTsKIAogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0YWNrLmFwcGVuZChQ
cm9wZXJ0eU5hbWVBcnJheSh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5
bWJvbE1vZGU6OkV4Y2x1ZGUpKTsKLSAgICAgICAgICAgICAgICAgICAgYXJyYXktPm1ldGhvZFRh
YmxlKHZtKS0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKGFycmF5LCBtX2xleGljYWxHbG9i
YWxPYmplY3QsIHByb3BlcnR5U3RhY2subGFzdCgpLCBFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGFycmF5LT5nZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMobV9sZXhp
Y2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRG9udEVudW1Qcm9wZXJ0aWVz
TW9kZTo6RXhjbHVkZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eVN0YWNrLmxh
c3QoKS5zaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlKE5vbkluZGV4UHJv
cGVydGllc1RhZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFN0YWNrLmFwcGVuZCgw
KTsKQEAgLTE3NzgsNyArMTc3OCw3IEBAIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIENsb25lU2Vy
aWFsaXplcjoKICAgICAgICAgICAgICAgICBpbnB1dE9iamVjdFN0YWNrLmFwcGVuZChpbk9iamVj
dCk7CiAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5hcHBlbmQoMCk7CiAgICAgICAgICAgICAg
ICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXkodm0sIFByb3BlcnR5TmFt
ZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKSk7Ci0gICAgICAgICAg
ICAgICAgaW5PYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhpbk9i
amVjdCwgbV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRW51bWVy
YXRpb25Nb2RlKCkpOworICAgICAgICAgICAgICAgIGluT2JqZWN0LT5tZXRob2RUYWJsZSh2bSkt
PmdldE93blByb3BlcnR5TmFtZXMoaW5PYmplY3QsIG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJv
cGVydHlTdGFjay5sYXN0KCksIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjoKICAgICAgICAg
ICAgIEZBTExUSFJPVUdIOwpAQCAtMTg0Niw3ICsxODQ2LDcgQEAgU2VyaWFsaXphdGlvblJldHVy
bkNvZGUgQ2xvbmVTZXJpYWxpemVyOgogICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gaW5wdXRPYmplY3RTdGFjay5sYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChqc0R5bmFtaWNDYXN0PEpTTWFwKj4odm0sIG9iamVjdCkpOwogICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eVN0YWNrLmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJheSh2bSwgUHJvcGVydHlOYW1l
TW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpKTsKLSAgICAgICAgICAg
ICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2Jq
ZWN0LCBtX2xleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5U3RhY2subGFzdCgpLCBFbnVtZXJh
dGlvbk1vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0p
LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eVN0YWNrLmxhc3QoKSwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7CiAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlKE5vbk1hcFByb3BlcnRpZXNUYWcpOwogICAgICAgICAgICAg
ICAgICAgICBpbmRleFN0YWNrLmFwcGVuZCgwKTsKICAgICAgICAgICAgICAgICAgICAgZ290byBv
YmplY3RTdGFydFZpc2l0TWVtYmVyOwpAQCAtMTg5MCw3ICsxODkwLDcgQEAgU2VyaWFsaXphdGlv
blJldHVybkNvZGUgQ2xvbmVTZXJpYWxpemVyOgogICAgICAgICAgICAgICAgICAgICBKU09iamVj
dCogb2JqZWN0ID0gaW5wdXRPYmplY3RTdGFjay5sYXN0KCk7CiAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTU2V0Kj4odm0sIG9iamVjdCkpOwogICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eVN0YWNrLmFwcGVuZChQcm9wZXJ0eU5hbWVBcnJheSh2bSwgUHJvcGVy
dHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpKTsKLSAgICAg
ICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFt
ZXMob2JqZWN0LCBtX2xleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5U3RhY2subGFzdCgpLCBF
bnVtZXJhdGlvbk1vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFi
bGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbV9sZXhpY2FsR2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7
CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKE5vblNldFByb3BlcnRpZXNUYWcpOwogICAgICAg
ICAgICAgICAgICAgICBpbmRleFN0YWNrLmFwcGVuZCgwKTsKICAgICAgICAgICAgICAgICAgICAg
Z290byBvYmplY3RTdGFydFZpc2l0TWVtYmVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDI3MTExNikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTIyLDcgKzExMjIsNyBAQCBzdWIgR2VuZXJhdGVHZXRPd25Qcm9w
ZXJ0eU5hbWVzCiAgICAgbXkgJG5hbWVkR2V0dGVyT3BlcmF0aW9uID0gR2V0TmFtZWRHZXR0ZXJP
cGVyYXRpb24oJGludGVyZmFjZSk7CiAgICAgbXkgJGluZGV4ZWRHZXR0ZXJPcGVyYXRpb24gPSBH
ZXRJbmRleGVkR2V0dGVyT3BlcmF0aW9uKCRpbnRlcmZhY2UpOwogICAgIAotICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgInZvaWQgJHtjbGFzc05hbWV9OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpXG4iKTsKKyAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICJ2b2lkICR7Y2xhc3NOYW1lfTo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01v
ZGUgbW9kZSlcbiIpOwogICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwogICAgIGlmICgk
aW5kZXhlZEdldHRlck9wZXJhdGlvbiB8fCAkbmFtZWRHZXR0ZXJPcGVyYXRpb24pIHsKICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEds
b2JhbE9iamVjdCk7XG4iKTsKQEAgLTExNDgsNyArMTE0OCw3IEBAIHN1YiBHZW5lcmF0ZUdldE93
blByb3BlcnR5TmFtZXMKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBmb3Ig
KGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9w
ZXJ0eU5hbWVzKCkpXG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHlO
YW1lKSk7XG4iKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBpZiAobW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpIHtcbiIpOwor
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChtb2RlID09IERvbnRFbnVt
UHJvcGVydGllc01vZGU6OkluY2x1ZGUpIHtcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndy
YXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpXG4iKTsKICAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sIHByb3BlcnR5TmFtZSkpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgfVxuIik7CkBAIC0yOTgwLDggKzI5ODAsOCBAQCBzdWIgR2VuZXJh
dGVIZWFkZXIKICAgICB9CiAgICAgCiAgICAgaWYgKEluc3RhbmNlT3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlOYW1lcygkaW50ZXJmYWNlKSkgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlv
bk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTtcbiIpOwotICAgICAgICAkc3RydWN0dXJl
RmxhZ3N7IkpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyJ9ID0gMTsKKyAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0
eU5hbWVBcnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7XG4iKTsKKyAgICAgICAg
JHN0cnVjdHVyZUZsYWdzeyJKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMifSA9IDE7
CiAgICAgfQogICAgIAogICAgIGlmIChJbnN0YW5jZU92ZXJyaWRlc1B1dCgkaW50ZXJmYWNlKSkg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2
ZW50VGFyZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCShyZXZpc2lvbiAyNzExMTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsNyArMjA4LDcgQEAgYm9vbCBKU1Rlc3RFdmVudFRh
cmdldDo6Z2V0T3duUHJvcGVydHlTbAogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsK
IH0KIAotdm9pZCBKU1Rlc3RFdmVudFRhcmdldDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlO
YW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rl
c3RFdmVudFRhcmdldDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBK
U0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNUZXN0RXZlbnRUYXJnZXQqPihvYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFy
Z2V0LmgJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0
Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdEV2ZW50VGFyZ2V0KiB0b1dyYXBwZWQoSlND
OjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUs
IEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQ
cm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlv
bk1vZGUoKSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6
OkRvbnRFbnVtUHJvcGVydGllc01vZGUpOwogCiAgICAgREVDTEFSRV9JTkZPOwogCkBAIC02Niw3
ICs2Niw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRlc3RFdmVudFRh
cmdldCY+KEJhc2U6OndyYXBwZWQoKSk7CiAgICAgfQogcHVibGljOgotICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpT
Qzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6Oklu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8g
fCBKU0M6Ok1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdl
dFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKKyAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNl
IHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3Ro
SXNOb3RaZXJvIHwgSlNDOjpNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIHwgSlNDOjpPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CiBw
cm90ZWN0ZWQ6CiAgICAgSlNUZXN0RXZlbnRUYXJnZXQoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUds
b2JhbE9iamVjdCYsIFJlZjxUZXN0RXZlbnRUYXJnZXQ+JiYpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRp
Zmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNzEx
MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw3ICsxNzgs
NyBAQCBib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdlCiAgICAgcmV0dXJu
IEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRl
bnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBKU0M6Omdl
dFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcio+KG9iamVjdCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRl
bnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3MTEx
NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciogdG9XcmFw
cGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVy
dHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQg
Z2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51
bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlND
OjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5
JiwgSlNDOjpEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBwdXQoSlND
OjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6
SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBwdXRCeUlu
ZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgYm9vbCBk
ZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6UHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hv
dWxkVGhyb3cpOwpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNv
U3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQg
YW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMg
fCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Oklu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8g
fCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXI+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjcxMTE2
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw3ICsx
NzgsNyBAQCBib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvCiAgICAgcmV0
dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEds
b2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHBy
b3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3RJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0m
IHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KG9iamVj
dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbi5oCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6
SlNWYWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVy
dHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6
OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVB
cnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7Cisg
ICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkRvbnRFbnVtUHJv
cGVydGllc01vZGUpOwogICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFBy
b3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNv
bnN0IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CkBAIC02NCw3
ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwq
LCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpT
Qzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OwogcHJv
dGVjdGVkOgogICAgIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbihKU0M6OlN0
cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw3ICsxODUsNyBAQCBib29sIEpTVGVz
dEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgs
IHNsb3QpOwogfQogCi12b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0
aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51
bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCShyZXZpc2lvbiAyNzExMTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKiB0b1dyYXBw
ZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0
eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVt
ZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6
OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkm
LCBKU0M6OkRvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIHN0YXRpYyBib29sIHB1dChKU0M6
OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpK
U1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIHB1dEJ5SW5k
ZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIHN0YXRpYyBib29sIGRl
ZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91
bGRUaHJvdyk7CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBh
bmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxl
bmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OworICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXI+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWls
dElucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw3ICsxOTksNyBAQCBib29sIEpTVGVzdExl
Z2FjeU92ZXJyaWRlQnVpbHRJbnM6OmdldE93CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNs
b3QpOwogfQogCi12b2lkIEpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKK3ZvaWQgSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01v
ZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWls
dElucyo+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lPdmVycmlkZUJ1
aWx0SW5zLmgJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0TGVnYWN5T3ZlcnJp
ZGVCdWlsdElucyogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7
Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0
aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93
blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAKICAgICBERUNMQVJFX0lORk87CkBA
IC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChK
U0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6
R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmUgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZv
cm1PZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsK
KyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlIHwgSlNDOjpJbnRl
cmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwg
SlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3Q7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElu
cyhKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RMZWdhY3lPdmVy
cmlkZUJ1aWx0SW5zPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI3MTExNikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsNyAr
MjA3LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aQogICAgIHJl
dHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxH
bG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewog
ICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXIqPihvYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciogdG9X
cmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJv
cGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZv
aWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6
RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMo
SlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFy
cmF5JiwgSlNDOjpEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBwdXQo
SlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBwdXRC
eUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgYm9v
bCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6UHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wg
c2hvdWxkVGhyb3cpOwpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZv
aWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNl
bmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVu
Z3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwg
SlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5
Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9y
UHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5h
bWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1By
b3BlcnR5Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPiYmKTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsNyArMjA3LDcgQEAgYm9vbCBKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZwogICAgIHJldHVybiBKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4
LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkm
IHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBWTSYg
dm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24q
PihvYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJKHJldmlzaW9uIDI3MTExNikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0
MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3Qm
KTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVy
YXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIHZvaWQgZ2V0
T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkRvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAg
IHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwogICAg
IHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cp
OwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlE
ZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXpl
ciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1
cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdl
dFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6
UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVy
dHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRl
c0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKEpTQzo6U3RydWN0dXJlKiwgSlNE
T01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNzExMTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNyAr
MjE2LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbgogICAgIHJl
dHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxH
bG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09i
amVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkK
IHsKICAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXIqPihvYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3MTExNikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0
MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0ds
b2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsK
LSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRp
b25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3du
UHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkRvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIHN0
YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlBy
b3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0
YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwog
ICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlEZXNj
cmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsK
ICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYp
OwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVG
b3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFBy
b3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJv
aGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlT
bG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dl
dE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpT
Qzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9i
YWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPiYm
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkRGVsZXRlck5vSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmll
ci5jcHAJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTAsNyArMTkwLDcgQEAgYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZp
ZXI6OmdldAogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChv
YmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rl
c3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFt
ZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0
TmFtZWREZWxldGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAg
IFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIqPihvYmplY3Qp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkRGVsZXRlck5vSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuaAko
cmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRp
ZmllciogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAg
c3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9k
ZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3Bl
cnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3Bl
cnR5TmFtZUFycmF5JiwgSlNDOjpEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMg
Ym9vbCBkZWxldGVQcm9wZXJ0eShKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlByb3BlcnR5TmFtZSwgSlNDOjpEZWxldGVQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMg
Ym9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgdW5zaWduZWQpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsK
QEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFw
KEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlND
OjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8
IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90
SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKIHByb3Rl
Y3RlZDoKICAgICBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUq
LCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyPiYm
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dp
bmdFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNyArMTkwLDcgQEAgYm9vbCBKU1Rlc3ROYW1lZERl
bGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbgogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsK
IH0KIAotdm9pZCBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQordm9pZCBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJv
cGVydGllc01vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWREZWxl
dGVyVGhyb3dpbmdFeGNlcHRpb24qPihvYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmgJKHJldmlzaW9uIDI3MTExNikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERl
bGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uKiB0
b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQ
cm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMg
dm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlND
OjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1l
cyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1l
QXJyYXkmLCBKU0M6OkRvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIHN0YXRpYyBib29sIGRl
bGV0ZVByb3BlcnR5KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJv
cGVydHlOYW1lLCBKU0M6OkRlbGV0ZVByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGRl
bGV0ZVByb3BlcnR5QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1
bnNpZ25lZCk7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwpAQCAtNjMs
NyArNjMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNl
Rm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxs
KiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93
blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRz
R2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpP
dmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVy
ZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OwogcHJvdGVjdGVkOgog
ICAgIEpTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uKEpTQzo6U3RydWN0dXJlKiwg
SlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9u
PiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElk
ZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTYsNyArMTk2LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJX
aXRoSWRlbnRpZmllcjo6ZwogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAot
dm9pZCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQor
dm9pZCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUg
bW9kZSkKIHsKICAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50
aWZpZXIqPihvYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRl
cldpdGhJZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVz
dE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNW
YWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlT
bG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpT
T2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlND
OjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJh
eSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAg
c3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkRvbnRFbnVtUHJvcGVy
dGllc01vZGUpOwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQzo6SlNDZWxsKiwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkRlbGV0ZVByb3Bl
cnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0M6OkpT
Q2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCk7CiAgICAgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0M6OkpTQ2VsbCopOwpAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAg
c3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJv
cGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0
eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CisgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
SlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6
SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVy
byB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJ
ZGVudGlmaWVyKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5h
bWVkRGVsZXRlcldpdGhJZGVudGlmaWVyPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCShyZXZpc2lvbiAyNzEx
MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsNyAr
MjA3LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcgogICAgIHJl
dHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxH
bG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZERlbGV0ZXJX
aXRoSW5kZXhlZEdldHRlcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHBy
b3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3ROYW1lZERlbGV0
ZXJXaXRoSW5kZXhlZEdldHRlcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkm
IHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBWTSYg
dm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIqPihvYmplY3Qp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVk
R2V0dGVyLmgJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVk
RGVsZXRlcldpdGhJbmRleGVkR2V0dGVyKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1
ZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90
Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQ
cm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6
SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYs
IEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3Rh
dGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkRvbnRFbnVtUHJvcGVydGll
c01vZGUpOwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQzo6SlNDZWxsKiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkRlbGV0ZVByb3BlcnR5
U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0M6OkpTQ2Vs
bCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCk7CiAgICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0M6OkpTQ2VsbCopOwpAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3Rh
dGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVy
dHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5X
aGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5h
bWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlND
OjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRl
eGVkR2V0dGVyKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5h
bWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZEdldHRlckNhbGxXaXRoLmNwcAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNyArMTkwLDcgQEAgYm9vbCBKU1Rlc3ROYW1lZEdl
dHRlckNhbGxXaXRoOjpnZXRPd25QcgogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsK
IH0KIAotdm9pZCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2
b2lkIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7
CiAgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgqPihvYmplY3Qp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkR2V0dGVyQ2FsbFdpdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5oCShyZXZpc2lvbiAy
NzExMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRHZXR0ZXJDYWxsV2l0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGgqIHRvV3JhcHBlZChKU0M6
OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwg
SlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blBy
b3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlBy
b3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9u
TW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6
RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpT
Q2VsbCopOwogCiAgICAgREVDTEFSRV9JTkZPOwpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7
CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXIm
KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJl
Rm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQ
cm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8
IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElz
Tm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkR2V0dGVy
Q2FsbFdpdGgoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFt
ZWRHZXR0ZXJDYWxsV2l0aD4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
R2V0dGVyTm9JZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBAIGJvb2wgSlNUZXN0TmFtZWRH
ZXR0ZXJOb0lkZW50aWZpZXI6OmdldE8KICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7
CiB9CiAKLXZvaWQgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9k
ZSkKK3ZvaWQgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2Rl
IG1vZGUpCiB7CiAgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlm
aWVyKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRl
bnRpZmllci5oCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFRlc3ROYW1lZEdldHRl
ck5vSWRlbnRpZmllciogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90
Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1l
cmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdl
dE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAKICAgICBERUNMQVJFX0lORk87
CkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVh
cChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpT
Qzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6Oklu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8g
fCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xv
dElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CiBwcm90
ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUq
LCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXI+JiYp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZp
ZXIuY3BwCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE5Niw3ICsxOTYsNyBAQCBib29sIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50
aWZpZXI6OmdlCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpT
VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNU
ZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlO
YW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsK
ICAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcio+KG9i
amVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlm
aWVyLmgJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0TmFtZWRHZXR0ZXJX
aXRoSWRlbnRpZmllciogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90
Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1l
cmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdl
dE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAKICAgICBERUNMQVJFX0lORk87
CkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSog
c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVh
cChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpT
Qzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6Oklu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8g
fCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xv
dElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CiBwcm90
ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcihKU0M6OlN0cnVjdHVy
ZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVy
PiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZp
ZXIuY3BwCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTAsNyArMTkwLDcgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmll
cjo6Z2V0TwogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChv
YmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rl
c3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3RO
YW1lZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBW
TSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihvYmplY3QpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyTm9JZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmgJKHJldmlz
aW9uIDI3MTExNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0
MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKiB0
b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQ
cm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMg
dm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlND
OjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1l
cyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1l
QXJyYXkmLCBKU0M6OkRvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIHN0YXRpYyBib29sIHB1
dChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwg
SlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIHB1
dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIHN0YXRpYyBi
b29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9v
bCBzaG91bGRUaHJvdyk7CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlND
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMg
dm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgot
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFi
c2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMg
fCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVy
dHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVG
b3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5
TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRz
UHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVu
dGlmaWVyKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVk
U2V0dGVyTm9JZGVudGlmaWVyPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjcxMTE2KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNyArMTkwLDcgQEAg
Ym9vbCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOgogICAgIHJldHVybiBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmpl
Y3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0gSlNDOjpn
ZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihvYmplY3QpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCShyZXZp
c2lvbiAyNzExMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24qIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwot
ICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlv
bk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQ
cm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3Rh
dGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJv
cGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3Rh
dGljIGJvb2wgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAg
ICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2Ny
aXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwog
ICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZv
clByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJv
cGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9o
aWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNs
b3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlND
OjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0
JiwgUmVmPFRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiYmKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0
aElkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkocmV2aXNp
b24gMjcxMTE2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYs
NyArMTk2LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZQogICAg
IHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGlj
YWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZFNldHRl
cldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTVGVzdE5hbWVkU2V0dGVy
V2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9w
ZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0g
SlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihvYmplY3QpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
V2l0aElkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCShyZXZpc2lv
biAyNzExMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0
MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIq
IHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRp
YyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBK
U0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5h
bWVBcnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGljIGJvb2wg
cHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1l
LCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wg
cHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgc3RhdGlj
IGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBi
b29sIHNob3VsZFRocm93KTsKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBK
U0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRp
YyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5
QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hl
bkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1l
cyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9w
ZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVy
ZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJp
dHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RO
YW1lZFNldHRlcldpdGhJZGVudGlmaWVyPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAkocmV2aXNpb24gMjcxMTE2
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNyArMjE2
LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyOgogICAgIHJldHVy
biBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9i
YWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9w
ZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0g
SlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIqPihvYmplY3QpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5o
CShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXIqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xv
dCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCos
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVt
ZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAg
ICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CiAg
ICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJv
dyk7CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0
eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5
emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0lt
cHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xv
dEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9m
R2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlND
OjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9w
ZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93
blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFs
T2JqZWN0JiwgUmVmPFRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyPiYmKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyQW5kU2V0dGVyLmNwcAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXJBbmRTZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNyArMjE2LDcgQEAgYm9v
bCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQQogICAgIHJldHVybiBKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3Qs
IGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0
dGVyQW5kU2V0dGVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9i
amVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAg
Vk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0
ZXIqPihvYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5oCShyZXZpc2lvbiAyNzExMTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0
MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0
ZXJBbmRTZXR0ZXIqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYp
OwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJh
dGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAg
c3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CiAgICAg
c3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7
CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURl
c2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
OwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVy
Jik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVy
ZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0
UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQ
cm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0
eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
SlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcihKU0M6OlN0cnVjdHVyZSosIEpTRE9N
R2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0
dGVyPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAkocmV2aXNpb24gMjcxMTE2KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAs
NyArMTkwLDcgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZQogICAg
IHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGlj
YWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZFNldHRl
cldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OmdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2Rl
IG1vZGUpCiB7CiAgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eU92ZXJyaWRlQnVpbHRJbnMqPihvYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVp
bHRJbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCShyZXZp
c2lvbiAyNzExMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkU2V0dGVy
V2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1Zh
bHVlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCos
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNs
b3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNP
YmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6
OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlND
OjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5
JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBz
dGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0
aWVzTW9kZSk7CiAgICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVy
dHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9v
bCBzaG91bGRUaHJvdyk7CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpK
U09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3Qg
SlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKQEAgLTY0LDcgKzY0
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcklt
cGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpT
Qzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9w
ZXJ0eVNsb3RJc0ltcHVyZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJv
cGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9o
aWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNs
b3RJc0ltcHVyZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0
eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3Zl
cnJpZGVCdWlsdElucyhKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRl
c3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zPiYmKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0
aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2Fj
eVVuZm9yZ2VhYmxlUHJvcGVydGllcy5jcHAJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdh
Y3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNyArMjE0
LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYQogICAgIHJldHVy
biBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9i
YWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhM
ZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXM6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFt
ZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVz
TW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhM
ZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMqPihvYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVu
Zm9yZ2VhYmxlUHJvcGVydGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJs
ZVByb3BlcnRpZXMuaAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxl
UHJvcGVydGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllcyog
dG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGlj
IHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpT
Qzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFt
ZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFt
ZUFycmF5JiwgSlNDOjpEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBw
dXQoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUs
IEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBw
dXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMg
Ym9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6UHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJv
b2wgc2hvdWxkVGhyb3cpOwpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpT
Qzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGlj
IHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlB
YnNlbmNlIHwgSlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwgSlNDOjpJbnRlcmNlcHRzR2V0
T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVy
cmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBK
U0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpI
YXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90
QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hp
Yml0c1Byb3BlcnR5Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2Jh
bE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0
aWVzPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2Fj
eU92ZXJyaWRlQnVpbHRJbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJs
ZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAkocmV2aXNpb24gMjcxMTE2
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVp
bHRJbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNyArMjE0LDcgQEAgYm9vbCBKU1Rlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYQogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBz
bG90KTsKIH0KIAotdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVBy
b3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lk
IEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2Fj
eU92ZXJyaWRlQnVpbHRJbnM6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZt
ID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGll
c0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMqPihvYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVu
Zm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWls
dElucy5oCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0
aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0
MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9y
Z2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMqIHRvV3JhcHBlZChKU0M6
OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwg
SlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blBy
b3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlBy
b3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9u
TW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6
RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxs
KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUs
IEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0M6
OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpT
Qzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3du
UHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3Bl
cnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93
KTsKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVI
ZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
SlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSB8IEpTQzo6SGFzU3RhdGljUHJvcGVydHlU
YWJsZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxl
bmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0
eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSB8
IEpTQzo6SGFzU3RhdGljUHJvcGVydHlUYWJsZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlND
OjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWls
dElucyhKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZFNl
dHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0
SW5zPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNTMwLDcgKzI1MzAsNyBAQCBib29sIEpTVGVzdE9iajo6Z2V0T3duUHJvcGVydHlT
bG90QnlJbmRlCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgsIHNsb3QpOwogfQogCi12b2lkIEpT
VGVzdE9iajo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3RPYmo6OmdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNN
b2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE9iaio+KG9iamVjdCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5oCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0T2JqKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6
SlNWYWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVy
dHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6
OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVB
cnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7Cisg
ICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkRvbnRFbnVtUHJv
cGVydGllc01vZGUpOwogICAgIHN0YXRpYyBKU0M6OkNhbGxEYXRhIGdldENhbGxEYXRhKEpTQzo6
SlNDZWxsKik7CiAKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CkBAIC04
NSw3ICs4NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIHRlc3RTdGF0aWND
dXN0b21Qcm9taXNlRnVuY3Rpb24oSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6Q2FsbEZyYW1l
JiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CiAgICAgSlNDOjpKU1ZhbHVlIHRlc3RDdXN0b21S
ZXR1cm5zT3duUHJvbWlzZUZ1bmN0aW9uKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkNhbGxG
cmFtZSYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SGFzU3RhdGljUHJvcGVydHlUYWJs
ZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IEpT
Qzo6T3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBKU0M6Okhhc1N0YXRpY1Byb3BlcnR5VGFibGUgfCBKU0M6OkludGVy
Y2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBK
U0M6Ok92ZXJyaWRlc0dldENhbGxEYXRhIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5h
bWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CiBwcm90ZWN0ZWQ6CiAgICAg
SlNUZXN0T2JqKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE9i
aj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAkocmV2aXNp
b24gMjcxMTE2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDg3LDcgKzQ4Nyw3IEBAIGJvb2wgX05QTl9FbnVtZXJhdGUoTlBQLCBO
UE9iamVjdCogbywgTlAKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QgPSBnbG9iYWxPYmplY3Q7CiAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFt
ZXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNs
dWRlKTsKIAotICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5h
bWVzKG9iai0+aW1wLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJh
dGlvbk1vZGUoKSk7CisgICAgICAgIG9iai0+aW1wLT5nZXRQcm9wZXJ0eU5hbWVzKGxleGljYWxH
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1
ZGUpOwogICAgICAgICB1bnNpZ25lZCBzaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHByb3Bl
cnR5TmFtZXMuc2l6ZSgpKTsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJlYWxseSBj
YWxsIE5QTl9NZW1BbGxvYyBidXQgdGhhdCdzIGluIFdlYktpdAogICAgICAgICBOUElkZW50aWZp
ZXIqIGlkZW50aWZpZXJzID0gc3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVyKj4obWFsbG9jKHNpemVv
ZihOUElkZW50aWZpZXIpICogc2l6ZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1
bnRpbWVfYXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50
aW1lX2FycmF5LmNwcAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdl
L3J1bnRpbWVfYXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIEpTQ19E
RUZJTkVfQ1VTVE9NX0dFVFRFUihhcnJheUxlbmd0aEdldHQKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmdldExlbmd0aCgpKSk7CiB9CiAKLXZvaWQgUnVu
dGltZUFycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIFJ1bnRpbWVBcnJheTo6Z2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVy
dGllc01vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIFJ1bnRpbWVBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxSdW50aW1lQXJyYXkqPihv
YmplY3QpOwpAQCAtODMsMTAgKzgzLDEwIEBAIHZvaWQgUnVudGltZUFycmF5OjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEoKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCiAg
ICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20odm0sIGkpKTsKIAotICAg
IGlmIChtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkKKyAgICBpZiAobW9kZSA9PSBE
b250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFk
ZCh2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOwogCi0gICAgSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5TmFtZXModGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywg
bW9kZSk7CisgICAgdGhpc09iamVjdC0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKGxleGlj
YWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiBib29sIFJ1bnRpbWVB
cnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgJKHJl
dmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBS
dW50aW1lQXJyYXkgZmluYWwgOiBwdWJsaWMgSlNBcnJheSB7CiBwdWJsaWM6CiAgICAgdXNpbmcg
QmFzZSA9IEpTQXJyYXk7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90
WmVybyB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1l
cyB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm87CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVl
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+
CkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICB+UnVudGltZUFycmF5KCk7CiAgICAgc3Rh
dGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJv
cGVydGllc01vZGUpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVj
dCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqLCB1bnNpZ25lZCwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgcHV0KEpT
Q2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAko
cmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgwLDcgKzI4MCw3IEBAIENhbGxEYXRhIFJ1bnRpbWVP
YmplY3Q6OmdldENvbnN0cnVjdERhdGEKICAgICByZXR1cm4gY29uc3RydWN0RGF0YTsKIH0KIAot
dm9pZCBSdW50aW1lT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3Qs
IEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKQordm9pZCBSdW50aW1lT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Q
cm9wZXJ0aWVzTW9kZSkKIHsKICAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5oCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzcs
NyArMzcsNyBAQCBFeGNlcHRpb24qIHRocm93UnVudGltZU9iamVjdEludmFsaWRBY2NlCiBjbGFz
cyBXRUJDT1JFX0VYUE9SVCBSdW50aW1lT2JqZWN0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qg
ewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OwotICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFBy
b3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRDYWxsRGF0YTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgT3Zl
cnJpZGVzR2V0Q2FsbERhdGE7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1
Y3Rpb24gPSB0cnVlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vi
c3BhY2VBY2Nlc3M+CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ2FsbERh
dGEgZ2V0Q2FsbERhdGEoSlNDZWxsKik7CiAgICAgc3RhdGljIENhbGxEYXRhIGdldENvbnN0cnVj
dERhdGEoSlNDZWxsKik7CiAKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2Rl
KTsKIAogICAgIHZvaWQgaW52YWxpZGF0ZSgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjcx
MTE2KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwyMCBAQAorMjAyMS0wMS0wMSAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5j
b20+CisKKyAgICAgICAgW0pTQ10gU2ltcGxpZnkgZ2V0KlByb3BlcnR5TmFtZXMoKSBtZXRob2Rz
IGFuZCBFbnVtZXJhdGlvbk1vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxMjk1NAorCisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1a2ku
CisKKyAgICAgICAgQWRqdXN0IGZvciBjaGFuZ2VzIGluIEpTQydzIE1ldGhvZFRhYmxlLCBUeXBl
SW5mbywgYW5kIEVudW1lcmF0aW9uTW9kZS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJl
aGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9K
U05QT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6Z2V0T3duUHJvcGVy
dHlOYW1lcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmpl
Y3QuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5QSlNPYmplY3Q6OmVudW1lcmF0ZSk6CisKIDIwMjAtMTIt
MjMgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CiAKICAgICAgICAgW0dQVSBQ
cm9jZXNzXTogRG9uJ3QgY2FsbCBmbHVzaERyYXdpbmdDb250ZXh0KCkgaW4gdGhlIG1pZGRsZSBv
ZiByZWNvcmRpbmcgZHJhd2luZyBjb21tYW5kcwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAJKHJldmlz
aW9uIDI3MTExNikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBl
L0pTTlBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjUsNyArNDI1LDcgQEAgYm9vbCBK
U05QT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0dsb2JhbAogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIEpTTlBPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVBcnJheSwgRW51bWVyYXRpb25Nb2RlKQordm9pZCBKU05QT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lQXJyYXksIERvbnRF
bnVtUHJvcGVydGllc01vZGUpCiB7CiAgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNO
UE9iamVjdC5oCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0
LDcgQEAgY2xhc3MgTlBSdW50aW1lT2JqZWN0TWFwOwogY2xhc3MgSlNOUE9iamVjdCBmaW5hbCA6
IHB1YmxpYyBKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBC
YXNlID0gSlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVy
dHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0Q2FsbERhdGE7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5
TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldENhbGxEYXRhOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQpAQCAtOTksNyArOTksNyBAQCBwcml2YXRl
OgogCiAgICAgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgTlBJZGVu
dGlmaWVyIHByb3BlcnR5TmFtZSk7CiAKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5h
bWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQ
cm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAKICAgICBO
UFJ1bnRpbWVPYmplY3RNYXAqIG1fb2JqZWN0TWFwOwogICAgIE5QT2JqZWN0KiBtX25wT2JqZWN0
OwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUvTlBKU09iamVjdC5jcHAJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNTMsNyArMjUzLDcgQEAgYm9vbCBOUEpTT2JqZWN0OjplbnVtZXJhdGUoTlBJZGVu
dGlmaWVyKgogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKIAogICAgIFByb3BlcnR5TmFtZUFy
cmF5IHByb3BlcnR5TmFtZXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVT
eW1ib2xNb2RlOjpFeGNsdWRlKTsKLSAgICBtX2pzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdl
dFByb3BlcnR5TmFtZXMobV9qc09iamVjdC5nZXQoKSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOworICAgIG1fanNPYmplY3QtPmdldFByb3Bl
cnR5TmFtZXMobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9w
ZXJ0aWVzTW9kZTo6RXhjbHVkZSk7CiAKICAgICBOUElkZW50aWZpZXIqIG5hbWVJZGVudGlmaWVy
cyA9IG5wbk1lbU5ld0FycmF5PE5QSWRlbnRpZmllcj4ocHJvcGVydHlOYW1lcy5zaXplKCkpOwog
CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzExMTYpCisrKyBT
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxMyBAQAorMjAyMS0wMS0wMSAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5j
b20+CisKKyAgICAgICAgW0pTQ10gU2ltcGxpZnkgZ2V0KlByb3BlcnR5TmFtZXMoKSBtZXRob2Rz
IGFuZCBFbnVtZXJhdGlvbk1vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxMjk1NAorCisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1a2ku
CisKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHku
bW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZW51bWVy
YXRlKToKKwogMjAyMC0xMi0xOSAgUm9iIEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29tPgogCiAgICAg
ICAgIE1vdmUgRnJhbWVMb2FkZXI6OmFyZVBsdWdpbnNFbmFibGVkIHRvIEZyYW1lCkluZGV4OiBT
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lu
cy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCShyZXZpc2lvbiAyNzExMTYp
CisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHkubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyNzMsNyArMTI3Myw3IEBAIGJv
b2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjplbnVtZXIKICAgICBKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1
Z2luV29ybGQoKSk7CiAgCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyh2bSwg
UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwot
ICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzKG9iamVjdCwgbGV4
aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOworICAg
IG9iamVjdC0+Z2V0UHJvcGVydHlOYW1lcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKTsKIAogICAgIFJldGFpblB0cjxO
U011dGFibGVBcnJheT4gYXJyYXkgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRdKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVydHlOYW1lcy5zaXplKCk7
IGkrKykgewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416888</attachid>
            <date>2021-01-01 20:15:25 -0800</date>
            <delta_ts>2021-01-06 18:17:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212954-20210102061523.patch</filename>
            <type>text/plain</type>
            <size>214905</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzExMTcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIxIEBACisyMDIxLTAxLTAxICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBbSlNDXSBTaW1wbGlmeSBnZXQqUHJvcGVydHlOYW1lcygp
IG1ldGhvZHMgYW5kIEVudW1lcmF0aW9uTW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyOTU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtl
IFN1enVraS4KKworICAgICAgICAqIENoYWtyYUNvcmUueWFtbDoKKyAgICAgICAgKiBDaGFrcmFD
b3JlL3Rlc3QvQmFzaWNzL2VudW0uYmFzZWxpbmUtanNjOiBSZW1vdmVkLgorICAgICAgICAqIG1p
Y3JvYmVuY2htYXJrcy9mb3ItaW4tb24tb2JqZWN0LXdpdGgtbGF6aWx5LW1hdGVyaWFsaXplZC1w
cm9wZXJ0aWVzLmpzOgorICAgICAgICBSZW1vdmVkIGJlY2F1c2UgRXJyb3JJbnN0YW5jZSBubyBs
b25nZXIgbWF0ZXJpYWxpemVzIHByb3BlcnRpZXMgZHVyaW5nIGZvci9pbiBlbnVtZXJhdGlvbi4K
KworICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9vYmplY3Qta2V5cy1jbG9uZWQtYXJndW1lbnRz
LmpzOiBBZGRlZC4KKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3Mvb2JqZWN0LWtleXMtZXJyb3It
b2JqZWN0LmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3MvYXJndW1lbnRzLXByb3BlcnRpZXMt
b3JkZXIuanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVzcy9mb3ItaW4tdGVzdHMuanM6CisgICAg
ICAgICogc3RyZXNzL2Zvci1pbi10eXBlZC1hcnJheS5qczoKKwogMjAyMC0xMi0zMSAgQWxleGV5
IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgSlNGdW5jdGlvbjo6
ZGVsZXRlUHJvcGVydHkoKSBmYWlscyB0byBkZWxldGUgYSBub24tZXhpc3RlbnQgInByb3RvdHlw
ZSIgcHJvcGVydHkKSW5kZXg6IEpTVGVzdHMvQ2hha3JhQ29yZS55YW1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEpTVGVzdHMvQ2hha3JhQ29yZS55YW1sCShyZXZpc2lvbiAyNzExMTYpCisrKyBKU1Rlc3RzL0No
YWtyYUNvcmUueWFtbAkod29ya2luZyBjb3B5KQpAQCAtMzAzLDcgKzMwMyw3IEBACiAtIHBhdGg6
IENoYWtyYUNvcmUvdGVzdC9CYXNpY3Mvc2Nhbi5qcwogICBjbWQ6IHJ1bkNoYWtyYSA6YmFzZWxp
bmUsICJOb0V4Y2VwdGlvbiIsICJzY2FuLmJhc2VsaW5lLWpzYyIsIFtdCiAtIHBhdGg6IENoYWty
YUNvcmUvdGVzdC9CYXNpY3MvZW51bS5qcwotICBjbWQ6IHJ1bkNoYWtyYSA6YmFzZWxpbmUsICJO
b0V4Y2VwdGlvbiIsICJlbnVtLmJhc2VsaW5lLWpzYyIsIFtdCisgIGNtZDogcnVuQ2hha3JhIDpw
YXNzLCAiTm9FeGNlcHRpb24iLCAiIiwgW10KIC0gcGF0aDogQ2hha3JhQ29yZS90ZXN0L0Jhc2lj
cy93aXRoMy5qcwogICBjbWQ6IHJ1bkNoYWtyYSA6YmFzZWxpbmUsICJOb0V4Y2VwdGlvbiIsICJ3
aXRoMy5iYXNlbGluZS1qc2MiLCBbXQogLSBwYXRoOiBDaGFrcmFDb3JlL3Rlc3QvQmFzaWNzL2Ny
b3NzX3NpdGVfYWNjZXNzb3JfbWFpbi5qcwpJbmRleDogSlNUZXN0cy9DaGFrcmFDb3JlL3Rlc3Qv
QmFzaWNzL2VudW0uYmFzZWxpbmUtanNjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hha3JhQ29y
ZS90ZXN0L0Jhc2ljcy9lbnVtLmJhc2VsaW5lLWpzYwkocmV2aXNpb24gMjcxMTE2KQorKysgSlNU
ZXN0cy9DaGFrcmFDb3JlL3Rlc3QvQmFzaWNzL2VudW0uYmFzZWxpbmUtanNjCShub25leGlzdGVu
dCkKQEAgLTEsMTE3ICswLDAgQEAKLXg6YS54Ci1xOmEucQotdTphLnEKLXo6Zi5wLnoKLXI6Zi5w
LnIKLXk6by5wLnkKLU9iamVjdCBhCi14Ci15Ci11Ci16Ci1NYXRoCi11Ci14Ci15Ci16Ci1BcnJh
eQotdQoteAoteQotegotQXJyYXkucHJvdG90eXBlCi11Ci14Ci15Ci16Ci1EYXRlCi11Ci14Ci15
Ci16Ci1OdW1iZXIKLXUKLXgKLXkKLXoKLVN0cmluZwotdQoteAoteQotegotT2JqZWN0LnByb3Rv
dHlwZQotdQoteAoteQotegotT2JqZWN0Ci11Ci14Ci15Ci16Ci1BcnJheS5wcm90b3R5cGUuc29y
dAotdQoteAoteQotegotZnVuY3Rpb24gZm9vCi11Ci14Ci15Ci16Ci14Ci11Ci15Ci16Ci1tZSBo
ZXJlCi1wcm90b3R5cGUgY2hhaW4KLXUKLXgKLXkKLXoKLUxpdGVyYWwgU3RyaW5nCi0wCi0xCi0y
Ci0zCi00Ci01Ci02Ci03Ci04Ci05Ci16egotdQoteAoteQotegotU3RyaW5nIE9iamVjdAoteHgK
LXl5Ci0wCi0xCi0yCi0zCi00Ci01Ci02Ci03Ci04Ci05Ci0xMAotMTEKLXp6Ci11Ci14Ci15Ci16
Ci01Ci11Ci14Ci15Ci16Ci0zCi11Ci14Ci15Ci16CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9mb3ItaW4tb24tb2JqZWN0LXdpdGgtbGF6aWx5LW1hdGVyaWFsaXplZC1wcm9wZXJ0aWVz
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1vbi1vYmpl
Y3Qtd2l0aC1sYXppbHktbWF0ZXJpYWxpemVkLXByb3BlcnRpZXMuanMJKHJldmlzaW9uIDI3MTEx
NikKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1vbi1vYmplY3Qtd2l0aC1sYXpp
bHktbWF0ZXJpYWxpemVkLXByb3BlcnRpZXMuanMJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNSArMCww
IEBACi0vL0Agc2tpcCBpZiAkbW9kZWwgPT0gIkFwcGxlIFdhdGNoIFNlcmllcyAzIiAjIGFkZGVk
IGJ5IG1hcmstanNjLXN0cmVzcy10ZXN0LnB5Ci1mdW5jdGlvbiBmb28obykgewotICAgIHZhciBj
b3VudCA9IDA7Ci0gICAgZm9yICh2YXIgcCBpbiBvKSB7Ci0gICAgICAgIGlmIChvW3BdKQotICAg
ICAgICAgICAgY291bnQgKys7Ci0gICAgfQotICAgIHJldHVybiBjb3VudDsKLX0KLW5vSW5saW5l
KGZvbyk7Ci0KLXZhciB0b3RhbCA9IDA7Ci1mb3IgKGxldCBqID0gMDsgaiA8IDEwMDAwMDsgKytq
KQotICAgIHRvdGFsICs9IGZvbyhuZXcgRXJyb3IpOwotCkluZGV4OiBKU1Rlc3RzL21pY3JvYmVu
Y2htYXJrcy9vYmplY3Qta2V5cy1jbG9uZWQtYXJndW1lbnRzLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpT
VGVzdHMvbWljcm9iZW5jaG1hcmtzL29iamVjdC1rZXlzLWNsb25lZC1hcmd1bWVudHMuanMJKG5v
bmV4aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3Mvb2JqZWN0LWtleXMtY2xvbmVk
LWFyZ3VtZW50cy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkgQEAKK25vSW5saW5lKE9i
amVjdC5rZXlzKTsKKworZnVuY3Rpb24gZ2V0QXJncyhhLCBiLCBjKSB7CisgICAgInVzZSBzdHJp
Y3QiOworICAgIHJldHVybiBhcmd1bWVudHM7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMmU1
OyArK2kpCisgICAgT2JqZWN0LmtleXMoZ2V0QXJncygxLCAyLCAzKSk7CkluZGV4OiBKU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9vYmplY3Qta2V5cy1lcnJvci1vYmplY3QuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3Mvb2JqZWN0LWtleXMtZXJyb3Itb2JqZWN0LmpzCShu
b25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL29iamVjdC1rZXlzLWVycm9y
LW9iamVjdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKK25vSW5saW5lKE9iamVj
dC5rZXlzKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAyZTU7ICsraSkKKyAgICBPYmplY3Qua2V5
cyhuZXcgRXJyb3IoKSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9hcmd1bWVudHMtcHJvcGVydGll
cy1vcmRlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9hcmd1bWVudHMtcHJvcGVy
dGllcy1vcmRlci5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9hcmd1bWVudHMt
cHJvcGVydGllcy1vcmRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc5IEBACitmdW5j
dGlvbiBnZXRNYXBwZWRBcmd1bWVudHMoYSwgYikgeyByZXR1cm4gYXJndW1lbnRzOyB9CitmdW5j
dGlvbiBnZXRVbm1hcHBlZEFyZ3VtZW50cyhhLCBiKSB7ICJ1c2Ugc3RyaWN0IjsgcmV0dXJuIGFy
Z3VtZW50czsgfQorCitmdW5jdGlvbiBzaG91bGRCZUFycmF5KGFjdHVhbCwgZXhwZWN0ZWQpIHsK
KyAgICB2YXIgaXNFcXVhbCA9CisgICAgICAgIGFjdHVhbC5sZW5ndGggPT09IGV4cGVjdGVkLmxl
bmd0aCAmJgorICAgICAgICBhY3R1YWwuZXZlcnkoKGl0ZW0sIGluZGV4KSA9PiBpdGVtID09PSBl
eHBlY3RlZFtpbmRleF0pOworICAgIGlmICghaXNFcXVhbCkKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKGBFeHBlY3RlZCBbJHthY3R1YWwubWFwKFN0cmluZyl9XSB0byBlcXVhbCBbJHtleHBlY3Rl
ZC5tYXAoU3RyaW5nKX1dYCk7Cit9CisKK2Z1bmN0aW9uIGZvckluKG9iamVjdCkgeworICAgIHZh
ciBrZXlzID0gW107CisgICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkKKyAgICAgICAga2V5cy5w
dXNoKGtleSk7CisgICAgcmV0dXJuIGtleXM7Cit9CisKK25vSW5saW5lKGdldE1hcHBlZEFyZ3Vt
ZW50cyk7Citub0lubGluZShnZXRVbm1hcHBlZEFyZ3VtZW50cyk7Citub0lubGluZShmb3JJbik7
CisKKyhmdW5jdGlvbigpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7Cisg
ICAgICAgIHZhciBtYXBwZWRBcmd1bWVudHMgPSBnZXRNYXBwZWRBcmd1bWVudHMoMCwgMSwgMik7
CisgICAgICAgIHNob3VsZEJlQXJyYXkoZm9ySW4obWFwcGVkQXJndW1lbnRzKSwgWyIwIiwgIjEi
LCAiMiJdKTsKKyAgICAgICAgc2hvdWxkQmVBcnJheShPYmplY3Qua2V5cyhtYXBwZWRBcmd1bWVu
dHMpLCBbIjAiLCAiMSIsICIyIl0pOworICAgICAgICBzaG91bGRCZUFycmF5KFJlZmxlY3Qub3du
S2V5cyhtYXBwZWRBcmd1bWVudHMpLCBbIjAiLCAiMSIsICIyIiwgImxlbmd0aCIsICJjYWxsZWUi
LCBTeW1ib2wuaXRlcmF0b3JdKTsKKworICAgICAgICB2YXIgdW5tYXBwZWRBcmd1bWVudHMgPSBn
ZXRVbm1hcHBlZEFyZ3VtZW50cygwKTsKKyAgICAgICAgc2hvdWxkQmVBcnJheShmb3JJbih1bm1h
cHBlZEFyZ3VtZW50cyksIFsiMCJdKTsKKyAgICAgICAgc2hvdWxkQmVBcnJheShPYmplY3Qua2V5
cyh1bm1hcHBlZEFyZ3VtZW50cyksIFsiMCJdKTsKKyAgICAgICAgc2hvdWxkQmVBcnJheShSZWZs
ZWN0Lm93bktleXModW5tYXBwZWRBcmd1bWVudHMpLCBbIjAiLCAibGVuZ3RoIiwgImNhbGxlZSIs
IFN5bWJvbC5pdGVyYXRvcl0pOworICAgIH0KK30pKCk7CisKKyhmdW5jdGlvbigpIHsKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIHZhciBtYXBwZWRBcmd1bWVu
dHMgPSBnZXRNYXBwZWRBcmd1bWVudHMoMCwgMSk7CisgICAgICAgIG1hcHBlZEFyZ3VtZW50c1s4
XSA9IDg7CisgICAgICAgIG1hcHBlZEFyZ3VtZW50c1syXSA9IDI7CisgICAgICAgIHNob3VsZEJl
QXJyYXkoZm9ySW4obWFwcGVkQXJndW1lbnRzKSwgWyIwIiwgIjEiLCAiMiIsICI4Il0pOworICAg
ICAgICBzaG91bGRCZUFycmF5KE9iamVjdC5rZXlzKG1hcHBlZEFyZ3VtZW50cyksIFsiMCIsICIx
IiwgIjIiLCAiOCJdKTsKKyAgICAgICAgc2hvdWxkQmVBcnJheShSZWZsZWN0Lm93bktleXMobWFw
cGVkQXJndW1lbnRzKSwgWyIwIiwgIjEiLCAiMiIsICI4IiwgImxlbmd0aCIsICJjYWxsZWUiLCBT
eW1ib2wuaXRlcmF0b3JdKTsKKworICAgICAgICB2YXIgdW5tYXBwZWRBcmd1bWVudHMgPSBnZXRV
bm1hcHBlZEFyZ3VtZW50cygpOworICAgICAgICB1bm1hcHBlZEFyZ3VtZW50c1sxMl0gPSAxMjsK
KyAgICAgICAgdW5tYXBwZWRBcmd1bWVudHNbM10gPSAzOworICAgICAgICBzaG91bGRCZUFycmF5
KGZvckluKHVubWFwcGVkQXJndW1lbnRzKSwgWyIzIiwgIjEyIl0pOworICAgICAgICBzaG91bGRC
ZUFycmF5KE9iamVjdC5rZXlzKHVubWFwcGVkQXJndW1lbnRzKSwgWyIzIiwgIjEyIl0pOworICAg
ICAgICBzaG91bGRCZUFycmF5KFJlZmxlY3Qub3duS2V5cyh1bm1hcHBlZEFyZ3VtZW50cyksIFsi
MyIsICIxMiIsICJsZW5ndGgiLCAiY2FsbGVlIiwgU3ltYm9sLml0ZXJhdG9yXSk7CisgICAgfQor
fSkoKTsKKworKGZ1bmN0aW9uKCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kp
IHsKKyAgICAgICAgdmFyIG1hcHBlZEFyZ3VtZW50cyA9IGdldE1hcHBlZEFyZ3VtZW50cygwKTsK
KyAgICAgICAgbWFwcGVkQXJndW1lbnRzLmZvbyA9IDE7CisgICAgICAgIG1hcHBlZEFyZ3VtZW50
cy5iYXIgPSAyOworICAgICAgICBzaG91bGRCZUFycmF5KGZvckluKG1hcHBlZEFyZ3VtZW50cyks
IFsiMCIsICJmb28iLCAiYmFyIl0pOworICAgICAgICBzaG91bGRCZUFycmF5KE9iamVjdC5rZXlz
KG1hcHBlZEFyZ3VtZW50cyksIFsiMCIsICJmb28iLCAiYmFyIl0pOworICAgICAgICAvLyBGSVhN
RTogU3ltYm9sLml0ZXJhdG9yIHNob3VsZCBjb21lIGFmdGVyICJmb28iIGFuZCAiYmFyIiAKKyAg
ICAgICAgLy8gc2hvdWxkQmVBcnJheShSZWZsZWN0Lm93bktleXMobWFwcGVkQXJndW1lbnRzKSwg
WyIwIiwgImxlbmd0aCIsICJjYWxsZWUiLCAiZm9vIiwgImJhciIsIFN5bWJvbC5pdGVyYXRvcl0p
OworCisgICAgICAgIHZhciB1bm1hcHBlZEFyZ3VtZW50cyA9IGdldFVubWFwcGVkQXJndW1lbnRz
KDAsIDEsIDIpOworICAgICAgICB1bm1hcHBlZEFyZ3VtZW50cy5mb28gPSAxOworICAgICAgICB1
bm1hcHBlZEFyZ3VtZW50cy5iYXIgPSAyOworICAgICAgICBzaG91bGRCZUFycmF5KGZvckluKHVu
bWFwcGVkQXJndW1lbnRzKSwgWyIwIiwgIjEiLCAiMiIsICJmb28iLCAiYmFyIl0pOworICAgICAg
ICBzaG91bGRCZUFycmF5KE9iamVjdC5rZXlzKHVubWFwcGVkQXJndW1lbnRzKSwgWyIwIiwgIjEi
LCAiMiIsICJmb28iLCAiYmFyIl0pOworICAgICAgICAvLyBGSVhNRTogImNhbGxlZSIgc2hvdWxk
IGNvbWUgYmVmb3JlICJmb28iIGFuZCAiYmFyIgorICAgICAgICAvLyBzaG91bGRCZUFycmF5KFJl
ZmxlY3Qub3duS2V5cyh1bm1hcHBlZEFyZ3VtZW50cyksIFsiMCIsICIxIiwgIjIiLCAibGVuZ3Ro
IiwgImNhbGxlZSIsICJmb28iLCAiYmFyIiwgU3ltYm9sLml0ZXJhdG9yXSk7CisgICAgfQorfSko
KTsKKworLy8gRklYTUU6IEFkZCBtb3JlIHRlc3RzLCBjb3ZlcmluZzoKKy8vICogYWRkZWQgc3lt
Ym9sIHByb3BlcnRpZXM7CisvLyAqIGFkZGVkIHRvZ2V0aGVyIGluZGV4LCBub24taW5kZXgsIGFu
ZCBzeW1ib2wgcHJvcGVydGllczsKKy8vICogZGVsZXRlZCwgcmUtYWRkZWQsIGFuZCByZWRlZmlu
ZWQgYXMgRG9udEVudW0gaW5kZXggcHJvcGVydGllcywgYm90aCB3aXRoaW4gYW5kIGJleW9uZCAi
bGVuZ3RoIjsKKy8vICogZGVsZXRlZCwgcmUtYWRkZWQsIGFuZCByZWRlZmluZWQgYXMgRG9udEVu
dW0gImxlbmd0aCIsICJjYWxsZWUiLCBhbmQgU3ltYm9sLml0ZXJhdG9yIHByb3BlcnRpZXMuCklu
ZGV4OiBKU1Rlc3RzL3N0cmVzcy9mb3ItaW4tdGVzdHMuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0
cy9zdHJlc3MvZm9yLWluLXRlc3RzLmpzCShyZXZpc2lvbiAyNzExMTYpCisrKyBKU1Rlc3RzL3N0
cmVzcy9mb3ItaW4tdGVzdHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTg4LDYgKzg4LDI0IEBAIGZ1
bmN0aW9uIHNob3VsZFRocm93U3ludGF4RXJyb3Ioc2NyaXB0KSAKICAgICBmb28obnVsbCk7CiB9
KSgpOwogKGZ1bmN0aW9uKCkgeworICAgIC8vIEl0ZXJhdGUgb3ZlciBhbiBvYmplY3Qgd2l0aCBu
b24tcmVpZmllZCBzdGF0aWMgcHJvcGVydHkgbmFtZXMgJiBzdHJ1Y3R1cmUgcHJvcGVydHkKKyAg
ICBpZiAodHlwZW9mIFdlYkFzc2VtYmx5ID09PSAidW5kZWZpbmVkIikKKyAgICAgICAgcmV0dXJu
OworCisgICAgV2ViQXNzZW1ibHkuZm9vID0gMTsKKworICAgIGZ1bmN0aW9uIGZvckluKCkgewor
ICAgICAgICBmb3IgKHZhciBrZXkgaW4gV2ViQXNzZW1ibHkpIHt9CisgICAgICAgIHJldHVybiBr
ZXk7CisgICAgfQorICAgIG5vSW5saW5lKGZvckluKTsKKworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgMTAwMDA7ICsraSkgeworICAgICAgICBpZiAoZm9ySW4oKSAhPT0gImZvbyIpCisgICAgICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCByZXN1bHQiKTsKKyAgICB9Cit9KSgpOworKGZ1bmN0
aW9uKCkgewogICAgIHZhciBmb28gPSBmdW5jdGlvbihhLCBiKSB7CiAgICAgICAgIGZvciAodmFy
IHAgaW4gYikgewogICAgICAgICAgICAgdmFyIGYxID0gYVtwXTsKSW5kZXg6IEpTVGVzdHMvc3Ry
ZXNzL2Zvci1pbi10eXBlZC1hcnJheS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9m
b3ItaW4tdHlwZWQtYXJyYXkuanMJKHJldmlzaW9uIDI3MTExNikKKysrIEpTVGVzdHMvc3RyZXNz
L2Zvci1pbi10eXBlZC1hcnJheS5qcwkod29ya2luZyBjb3B5KQpAQCAtMTYsMyArMTYsMjUgQEAK
ICAgICB9CiAgICAgZm9vKG51bGwpOwogfSkoKTsKKworKGZ1bmN0aW9uKCkgeworICAgIGZ1bmN0
aW9uIGZvckluKCkgeworICAgICAgICB2YXIgYSA9IG5ldyBJbnQzMkFycmF5KDQpOworICAgICAg
ICBhLmZvbyA9IDE7CisgICAgICAgIGEuYmFyID0gMjsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBhLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgYVtpXSA9IGk7CisKKyAgICAgICAgdmFy
IGtleXMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgayBpbiBhKQorICAgICAgICAgICAga2V5cy5w
dXNoKGspOworICAgICAgICByZXR1cm4ga2V5cy5qb2luKCJ8Iik7CisgICAgfQorICAgIG5vSW5s
aW5lKGZvckluKTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAg
ICAgdmFyIGtleXMgPSBmb3JJbigpOworICAgICAgICBpZiAoa2V5cyAhPT0gIjB8MXwyfDN8Zm9v
fGJhciIpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCByZXN1bHQ6ICR7a2V5c31g
KTsKKyAgICB9Cit9KSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
NzExMTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjE5IEBACisyMDIxLTAxLTAxICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2Fs
ZXNoQGdtYWlsLmNvbT4KKworICAgICAgICBbSlNDXSBTaW1wbGlmeSBnZXQqUHJvcGVydHlOYW1l
cygpIG1ldGhvZHMgYW5kIEVudW1lcmF0aW9uTW9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyOTU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVz
dWtlIFN1enVraS4KKworICAgICAgICBCZWZvcmUgdGhpcyBjaGFuZ2UsIFtbT3duUHJvcGVydHlL
ZXlzXV0gb3ZlcnJpZGVzIHdlcmUgc29tZXRpbWVzIGltcGxlbWVudGVkCisgICAgICAgIGluY29u
c2lzdGVudGx5LCB2aWEgZGlmZmVyZW50IGdldCpQcm9wZXJ0eU5hbWVzKCkgbWV0aG9kcyB0aGF0
IGR1cGxpY2F0ZWQgbG9naWMKKyAgICAgICAgKGUuZy4gRXJyb3JJbnN0YW5jZSwgUmVnRXhwT2Jq
ZWN0LCBhbmQgU3RyaW5nT2JqZWN0KS4KKworICAgICAgICBUaGlzIHBhdGNoOgorCisgICAgICAg
IDEuIEludHJvZHVjZXMgYSBjbGVhciBjb252ZW50aW9uIHRvIGltcGxlbWVudCBbW093blByb3Bl
cnR5S2V5c11dIG92ZXJyaWRlczoKKyAgICAgICAgICAgaWYgaXQncyBkZWZpbmVkIGJ5IHRoZSBz
cGVjLCBnZXRPd25Qcm9wZXJ0eU5hbWVzKCkgbWV0aG9kIGlzIHVzZWQ7IG90aGVyd2lzZSwKKyAg
ICAgICAgICAgbm9uLW1hdGVyaWFsaXplZCBwcm9wZXJ0aWVzIGFyZSBlbnVtZXJhdGVkIC8gcmVp
ZmllZCBpbiBnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcygpLgorICAgICAgICAgICBXaGlsZSBu
byBjbGFzcyBzaG91bGQgZGVmaW5lIGJvdGggbWV0aG9kcywgd2UgZG9uJ3QgYXNzZXJ0IHRoaXMg
dG8gc3VwcG9ydCBpbmhlcml0YW5jZS4KKworICAgICAgICAgICBSZW1vdmVzIGdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcygpIGZyb20gdGhlIG1ldGhvZCB0YWJsZSBhbmQgY29udmVydHMgaXQg
dG8gaW5zdGFuY2UKKyAgICAgICAgICAgbWV0aG9kOyBpdHMgb3ZlcnJpZGVzIHdlcmUgcmVuYW1l
ZCB0byBnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcygpIGFuZCBleGVtcHRlZCBmcm9tCisgICAg
ICAgICAgIGNhbGxpbmcgdGhlIG5vLW9wIGJhc2UgbWV0aG9kLgorCisgICAgICAgICAgIFRoaXMg
YXBwcm9hY2ggd2FzIGNob3NlbiwgaW5zdGVhZCBvZiBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoKSBvdmVycmlkZSwgYmVjYXVzZQorICAgICAgICAgICBmb3IvaW4gZW51bWVyYXRpb24gbXVz
dCBiZSBzdXJlIHRoZXJlIGFyZSBubyBlbnVtZXJhYmxlIHByb3BlcnRpZXMgYmV0d2VlbgorICAg
ICAgICAgICBnZXRFbnVtZXJhYmxlTGVuZ3RoKCkgYW5kIHRoZSBmaXJzdCBzdHJ1Y3R1cmUgcHJv
cGVydHkuCisKKyAgICAgICAgICAgQWxzbywgcmVtb3ZlcyBnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5h
bWVzKCkgZnJvbSB0aGUgbWV0aG9kIHRhYmxlIGFzIGl0J3MgdW5yZWFzb25hYmxlCisgICAgICAg
ICAgIHRvIG92ZXJyaWRlIGl0LgorCisgICAgICAgIDIuIEV4dHJhY3RzIEpTT2JqZWN0OjpnZXRP
d25JbmRleFByb3BlcnR5TmFtZXMoKSBpbnN0YW5jZSBtZXRob2QgdG8gZW5mb3JjZQorICAgICAg
ICAgICBjb3JyZWN0IGVudW1lcmF0aW9uIG9yZGVyIGluIGdldE93blByb3BlcnR5TmFtZXMoKSBv
dmVycmlkZXM6IHNwZWNpYWwgaW5kaWNlcyA9PgorICAgICAgICAgICBidXR0ZXJmbHkgc3RvcmFn
ZSA9PiBzcGVjaWFsIHByb3BlcnRpZXMgPT4gbm9uLXJlaWZpZWQgc3RhdGljID0+IHN0cnVjdHVy
ZSBwcm9wZXJ0aWVzLgorCisgICAgICAgICAgIExvb3NlIG1vZGUgYGFyZ3VtZW50c2Agd2VyZSBm
aXhlZCB0byBlbnVtZXJhdGUgaW5kaWNlcyBmcm9tIGJ1dHRlcmZseSBzdG9yYWdlIGJlZm9yZQor
ICAgICAgICAgICBzcGVjaWFsIHByb3BlcnRpZXMgWzFdLCBhbGlnbmluZyBKU0Mgd2l0aCBWOCBh
bmQgU3BpZGVyTW9ua2V5LgorCisgICAgICAgIDMuIFJld29ya3MgZm9yL2luIGVudW1lcmF0aW9u
IHNvIHRoZSBzcGVjaWFsIHByb3BlcnRpZXMgYWx3YXlzIGNvbWUgYmVmb3JlIHN0cnVjdHVyZSBv
bmVzLAorICAgICAgICAgICBhbGlnbmluZyBlbnVtZXJhdGlvbiBvcmRlciBvZiBTdHJpbmcgb2Jq
ZWN0cyBbMl0gYW5kIHR5cGVkIGFycmF5cyBbM10gdGhhdCBoYXZlIGV4cGFuZG8KKyAgICAgICAg
ICAgcHJvcGVydGllcyB3aXRoIHRoZSBzcGVjLCBWOCwgYW5kIFNwaWRlck1vbmtleS4KKworICAg
ICAgICAgICBSZW1vdmVzIGdldFByb3BlcnR5TmFtZXMoKSBhbmQgZ2V0R2VuZXJpY1Byb3BlcnR5
TmFtZXMoKSBmcm9tIHRoZSBtZXRob2QgdGFibGUsIGFsb25nCisgICAgICAgICAgIHdpdGggdGhl
aXIgb3ZlcnJpZGVzLCBiZWNhdXNlIEVTNyBkaXNhYmxlZCBjdXN0b21pemF0aW9uIG9mIGZvci9p
biBlbnVtZXJhdGlvbiBbNF0uCisgICAgICAgICAgIEluc3RlYWQsIEpTT2JqZWN0OjpnZXRQcm9w
ZXJ0eU5hbWVzKCkgaW5zdGFuY2UgbWV0aG9kIGFuZCBnZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1l
cygpCisgICAgICAgICAgIGFyZSBpbnRyb2R1Y2VkLCBmZWF0dXJpbmcgYSBsb29wIGluc3RlYWQg
b2YgcmVjdXJzaW9uLgorCisgICAgICAgICAgIEFsc28sIHRoaXMgZW5hYmxlZCBkcm9wcGluZyBo
YXJkLXRvLWZvbGxvdyBKU09iamVjdFByb3BlcnRpZXNNb2RlIGJpdCBhbmQgc2ltcGxpZnlpbmcK
KyAgICAgICAgICAgRW51bWVyYXRpb25Nb2RlIHRvIGFuIGVudW0uCisKKyAgICAgICAgZm9yL2lu
IGFuZCBPYmplY3Qua2V5cyBtaWNyb2JlbmNobWFya3MgYXJlIG5ldXRyYWwuIFRoaXMgY2hhbmdl
IGRvZXMgbm90IGFmZmVjdAorICAgICAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IgY2FjaGlu
Zywgbm9yIGZhc3QgcGF0aHMgb2YgaXRzIGJ5dGVjb2Rlcy4KKworICAgICAgICBbMV06IGh0dHBz
Oi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlbWFwcGVkYXJndW1lbnRzb2JqZWN0IChzdGVw
cyAxNS0xNiBhbmQgMjAtMjEpCisgICAgICAgIFsyXTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIv
I3NlYy1zdHJpbmctZXhvdGljLW9iamVjdHMtb3ducHJvcGVydHlrZXlzCisgICAgICAgIFszXTog
aHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pbnRlZ2VyLWluZGV4ZWQtZXhvdGljLW9iamVj
dHMtb3ducHJvcGVydHlrZXlzCisgICAgICAgIFs0XTogaHR0cHM6Ly9naXRodWIuY29tL3RjMzkv
ZWNtYTI2Mi9wdWxsLzM2NworCisgICAgICAgICogQVBJL0pTQVBJVmFsdWVXcmFwcGVyLmg6Cisg
ICAgICAgIFJlbW92ZSBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHN0cnVjdHVy
ZSBmbGFnIGFzIGl0IHNob3VsZCBuZXZlciBiZSBxdWVyaWVkCisgICAgICAgIGZyb20gSlNDZWxs
IGluc3RhbmNlcy4KKworICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0Lmg6CisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6SlNDYWxs
YmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyk6CisgICAgICAg
IChKU0M6OkpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBBUEkvSlNPYmplY3RSZWYuY3BwOgorICAgICAgICAo
SlNPYmplY3RDb3B5UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogYmluZGluZ3MvU2NyaXB0VmFs
dWUuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpqc1RvSW5zcGVjdG9yVmFsdWUpOgorICAgICAg
ICAqIGJ5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oOgorICAgICAgICAo
SlNDOjpPYmplY3RBbGxvY2F0aW9uUHJvZmlsZUJhc2U8RGVyaXZlZD46OnBvc3NpYmxlRGVmYXVs
dFByb3BlcnR5Q291bnQpOgorICAgICAgICBVc2UgRG9udEVudW1Qcm9wZXJ0eU1vZGU6OkluY2x1
ZGUgYXMgdGhlIGludGVudCBpcyB0byBjb3VudCBhbGwgcHJvcGVydGllcywgZXZlbgorICAgICAg
ICBwcml2YXRlIHN5bWJvbHMuIEVudW1lcmF0aW9uTW9kZSgpIGRlZmF1bHRzIGRpZCBleGNsdWRl
IG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMuCisKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dl
clNjb3BlLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJTY29wZTo6Z2V0T3duUHJvcGVydHlO
YW1lcyk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJTY29wZS5oOgorICAgICAgICAqIHJ1
bnRpbWUvQ2xhc3NJbmZvLmg6CisgICAgICAgICogcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3Bw
OgorICAgICAgICAoSlNDOjpDbG9uZWRBcmd1bWVudHM6OmdldE93blNwZWNpYWxQcm9wZXJ0eU5h
bWVzKToKKyAgICAgICAgRG9uJ3QgbWF0ZXJpYWxpemUgRG9udEVudW0gcHJvcGVydGllcyB1bmxl
c3MgaXQncyBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlLAorICAgICAgICBhZHZhbmNp
bmcgcHJvdmlkZWQgbWljcm9iZW5jaG1hcmsgYnkgfjIzJS4KKworICAgICAgICAoSlNDOjpDbG9u
ZWRBcmd1bWVudHM6OmdldE93blByb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAqIHJ1
bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmg6CisgICAgICAgICogcnVudGltZS9FbnVtZXJhdGlvbk1v
ZGUuaDoKKyAgICAgICAgRXhwbGljaXRseSBzcGVjaWZ5IGVudW0gdHlwZSB0byByZWR1Y2UgaXRz
IHNpemUuCisKKyAgICAgICAgKEpTQzo6RW51bWVyYXRpb25Nb2RlOjpFbnVtZXJhdGlvbk1vZGUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFbnVtZXJhdGlvbk1vZGU6OmluY2x1ZGVEb250RW51
bVByb3BlcnRpZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFbnVtZXJhdGlvbk1vZGU6Omlu
Y2x1ZGVKU09iamVjdFByb3BlcnRpZXMpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvRXJy
b3JJbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OmdldE93blNwZWNp
YWxQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgRG9uJ3QgbWF0ZXJpYWxpemUgRG9udEVudW0gcHJv
cGVydGllcyB1bmxlc3MgaXQncyBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlLAorICAg
ICAgICBhZHZhbmNpbmcgcHJvdmlkZWQgbWljcm9iZW5jaG1hcmsgYnkgYSBmYWN0b3Igb2YgNS4K
KworICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNlOjpnZXRTdHJ1Y3R1cmVQ
cm9wZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2Uu
aDoKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaDoKKyAgICAgICAgKiBydW50
aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkdlbmVyaWNBcmd1
bWVudHM8VHlwZT46OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNB
cnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93blNwZWNpYWxQcm9wZXJ0eU5h
bWVzKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKiBydW50
aW1lL0pTQ2VsbC5jcHA6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Z2V0T3duUHJvcGVydHlOYW1l
cyk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Z2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMpOgor
ICAgICAgICAoSlNDOjpKU0NlbGw6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkpTQ2VsbDo6Z2V0UHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkpTQ2VsbDo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMpOiBEZWxldGVk
LgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0
aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Z2V0T3duU3BlY2lhbFByb3BlcnR5
TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaDoKKyAgICAgICAgKiBydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAg
ICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICBSZW1vdmUgT3ZlcnJpZGVzQW55
Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyBzdHJ1Y3R1cmUgZmxhZyBhcyBpdCdzIGluaGVyaXRlZCBm
cm9tCisgICAgICAgIEpTU3ltYm9sVGFibGVPYmplY3QsIGFuZCBKU0dsb2JhbE9iamVjdCBpdHNl
bGYgZG9lc24ndCBvdmVycmlkZSBnZXRPd24qUHJvcGVydHlOYW1lcygpLgorCisgICAgICAgICog
cnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHA6CisgICAgICAgIChKU0M6OkpTTGV4aWNh
bEVudmlyb25tZW50OjpnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6
OkpTTGV4aWNhbEVudmlyb25tZW50OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOiBEZWxl
dGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuaDoKKyAgICAgICAg
KiBydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwOgorICAgICAgICAoSlNDOjpKU01vZHVs
ZUVudmlyb25tZW50OjpnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6
OkpTTW9kdWxlRW52aXJvbm1lbnQ6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6IERlbGV0
ZWQuCisgICAgICAgICogcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50Lmg6CisgICAgICAgICog
cnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTTW9k
dWxlTmFtZXNwYWNlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgQ2FsbCBn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoKSBkaXJlY3RseSwgZ3VhcmRlZCBieSBpbmNsdWRl
U3ltYm9sUHJvcGVydGllcygpIGNoZWNrLAorICAgICAgICBzaW5jZSBtb2R1bGUgbmFtZXNwYWNl
IG9iamVjdHMgY2FuJ3QgaGF2ZSBzdHJpbmcgcHJvcGVydGllcyBiZXNpZGVzIG1fbmFtZXMuCisg
ICAgICAgIChTZWUgaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tb2R1bGUtbmFtZXNwYWNl
LWV4b3RpYy1vYmplY3RzLWRlZmluZW93bnByb3BlcnR5LXAtZGVzYykKKworICAgICAgICAqIHJ1
bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTT05P
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpXYWxrZXI6OndhbGspOgorICAgICAgICAqIHJ1bnRp
bWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0Tm9uUmVpZmllZFN0
YXRpY1Byb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0UHJvcGVydHlO
YW1lcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmdldE93bkluZGV4ZWRQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChK
U0M6OmdldENsYXNzUHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBy
dW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25TcGVjaWFs
UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuY3BwOgorICAgICAgICAoSlNDOjpnZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lcyk6CisgICAg
ICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6
cHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisgICAgICAgICogcnVudGltZS9KU1Byb3h5LmNwcDoK
KyAgICAgICAgKEpTQzo6SlNQcm94eTo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChK
U0M6OkpTUHJveHk6OmdldFByb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpK
U1Byb3h5OjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6SlNQcm94eTo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvSlNQcm94eS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVj
dC5jcHA6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93blNwZWNpYWxQ
cm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTU3lt
Ym9sVGFibGVPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTVHlwZUluZm8uaDoKKyAgICAg
ICAgKEpTQzo6VHlwZUluZm86Om92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgY29uc3QpOgor
ICAgICAgICAoSlNDOjpUeXBlSW5mbzo6b3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFt
ZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpUeXBlSW5mbzo6b3ZlcnJpZGVzQW55Rm9ybU9mR2V0
T3duUHJvcGVydHlOYW1lcyBjb25zdCk6CisgICAgICAgIChKU0M6OlR5cGVJbmZvOjpvdmVycmlk
ZXNHZXRQcm9wZXJ0eU5hbWVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VHlwZUlu
Zm86Om92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpv
YmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpOgorICAgICAgICAoSlND
OjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorICAgICAgICAoSlNDOjpkZWZpbmVQcm9wZXJ0
aWVzKToKKyAgICAgICAgKEpTQzo6c2V0SW50ZWdyaXR5TGV2ZWwpOgorICAgICAgICAoSlNDOjp0
ZXN0SW50ZWdyaXR5TGV2ZWwpOgorICAgICAgICAoSlNDOjpvd25Qcm9wZXJ0eUtleXMpOgorICAg
ICAgICAqIHJ1bnRpbWUvUHJveHlPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpQcm94eU9iamVj
dDo6cGVyZm9ybUdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpQcm94eU9iamVj
dDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpnZXRQ
cm9wZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlByb3h5T2Jq
ZWN0OjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
UHJveHlPYmplY3Q6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAg
KiBydW50aW1lL1Byb3h5T2JqZWN0Lmg6CisgICAgICAgIFJlbW92ZSBJc1F1aWNrUHJvcGVydHlB
Y2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24gZmxhZyBmcm9tIFByb3h5T2JqZWN0J3Mgc3RydWN0
dXJlCisgICAgICAgIHNpbmNlIGNhbkFjY2Vzc1Byb3BlcnRpZXNRdWlja2x5Rm9yRW51bWVyYXRp
b24oKSBub3cgY2hlY2tzIGZvciBtZXRob2Qgb3ZlcnJpZGVzLgorCisgICAgICAgICogcnVudGlt
ZS9SZWdFeHBPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OmdldE93blNw
ZWNpYWxQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpSZWdFeHBPYmpl
Y3Q6OmdldFByb3BlcnR5TmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpSZWdFeHBPYmpl
Y3Q6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1l
L1JlZ0V4cE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcDoKKyAg
ICAgICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAg
KEpTQzo6U3RyaW5nT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOiBEZWxldGVk
LgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9T
dHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnZhbGlkYXRlRmxhZ3MpOgor
ICAgICAgICBTdHJlbmd0aGVuIG92ZXJyaWRlc0dldE93bipQcm9wZXJ0eU5hbWVzIGFuZCBvdmVy
cmlkZXNHZXRQcm90b3R5cGUgYXNzZXJ0cyBpbnRvCisgICAgICAgIGVxdWl2YWxlbmNlIHRlc3Rz
LgorCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNhbkFjY2Vzc1Byb3BlcnRpZXNRdWlja2x5
Rm9yRW51bWVyYXRpb24gY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6Cisg
ICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6Y2FuQ2FjaGVPd25Qcm9wZXJ0eU5hbWVzIGNvbnN0KToKKyAgICAgICAgKiB0b29scy9K
U0RvbGxhclZNLmNwcDoKKyAgICAgICAgUmVtb3ZlIE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3Bl
cnR5TmFtZXMgc3RydWN0dXJlIGZsYWcgYXMgaXQncyBpbmhlcml0ZWQgZnJvbQorICAgICAgICBK
U0FycmF5LCBhbmQgUnVudGltZUFycmF5IGl0c2VsZiBkb2Vzbid0IG92ZXJyaWRlIGdldE93bipQ
cm9wZXJ0eU5hbWVzKCkuCisKIDIwMjAtMTItMzEgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxl
c2hAZ21haWwuY29tPgogCiAgICAgICAgIEpTRnVuY3Rpb246OmRlbGV0ZVByb3BlcnR5KCkgZmFp
bHMgdG8gZGVsZXRlIGEgbm9uLWV4aXN0ZW50ICJwcm90b3R5cGUiIHByb3BlcnR5CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJVmFsdWVXcmFwcGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVZhbHVlV3JhcHBlci5oCShyZXZpc2lv
biAyNzExMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJVmFsdWVXcmFwcGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEzICszMyw3IEBAIGNsYXNzIEpTQVBJVmFsdWVXcmFw
cGVyIGZpbmFsIDogcHVibGljIEoKICAgICBmcmllbmQgSlNWYWx1ZSBqc0FQSVZhbHVlV3JhcHBl
cihKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBK
U0NlbGw7Ci0KLSAgICAvLyBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzICh3aGlj
aCB1c2VkIHRvIGJlIE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMpIHdhcyBoZXJlCi0gICAgLy8g
c2luY2UgYW5jaWVudCB0aW1lcyBiYWNrIHdoZW4gd2UgcGVzc2ltaXN0aWNhbGx5IGNob29zZSB0
byBhcHBseSB0aGlzIGZsYWcuIEkgdGhpbmsgd2UKLSAgICAvLyBjYW4gcmVtb3ZlIGl0LCBidXQg
d2Ugc2hvdWxkIGRvIG1vcmUgdGVzdGluZyBiZWZvcmUgd2UgZG8gc28uCi0gICAgLy8gUmVmOiBo
dHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC80OTY5NC93ZWJraXQjZmlsZTkKLSAgICAv
LyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjk1NAot
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBTdHJ1Y3R1
cmVJc0ltbW9ydGFsOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0
aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCShyZXZpc2lvbiAyNzExMTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMTI1LDcgKzEyNSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBQYXJlbnQ+CiBjbGFzcyBKU0Nh
bGxiYWNrT2JqZWN0IGZpbmFsIDogcHVibGljIFBhcmVudCB7CiBwdWJsaWM6CiAgICAgdXNpbmcg
QmFzZSA9IFBhcmVudDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcgfCBP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90
QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSW1wbGVtZW50c0hhc0luc3RhbmNlIHwg
T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRh
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dl
dE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBJbnRlcmNl
cHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSW1w
bGVtZW50c0hhc0luc3RhbmNlIHwgUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogICAgIHN0YXRp
Y19hc3NlcnQoIShTdHJ1Y3R1cmVGbGFncyAmIEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2Up
LCAidXNpbmcgY3VzdG9tSGFzSW5zdGFuY2UiKTsKIAogICAgIH5KU0NhbGxiYWNrT2JqZWN0KCk7
CkBAIC0yMTEsNyArMjExLDcgQEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyBib29sIGN1c3RvbUhh
c0luc3RhbmNlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAotICAgIHN0
YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRp
YyB2b2lkIGdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmpl
Y3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogCiAgICAg
c3RhdGljIENhbGxEYXRhIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKik7CiAgICAgc3RhdGljIENh
bGxEYXRhIGdldENhbGxEYXRhKEpTQ2VsbCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDI3
MTExNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0
aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjksNyArNTY5LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OgogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50Pgot
dm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpT
Q2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBW
TSYgdm0gPSBnZXRWTShnbG9iYWxPYmplY3QpOwogICAgIEpTQ2FsbGJhY2tPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNDYWxsYmFja09iamVjdCo+KG9iamVjdCk7CkBAIC01ODgsNyArNTg4
LDcgQEAgdm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93bk5vbgogICAgICAgICAg
ICAgZm9yIChpdGVyYXRvciBpdCA9IHN0YXRpY1ZhbHVlcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nSW1wbCogbmFtZSA9IGl0LT5rZXkuZ2V0KCk7
CiAgICAgICAgICAgICAgICAgU3RhdGljVmFsdWVFbnRyeSogZW50cnkgPSBpdC0+dmFsdWUuZ2V0
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGVudHJ5LT5nZXRQcm9wZXJ0eSAmJiAoIShlbnRyeS0+
YXR0cmlidXRlcyAmIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udEVudW0pIHx8IG1vZGUuaW5jbHVk
ZURvbnRFbnVtUHJvcGVydGllcygpKSkgeworICAgICAgICAgICAgICAgIGlmIChlbnRyeS0+Z2V0
UHJvcGVydHkgJiYgKG1vZGUgPT0gRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSB8fCAh
KGVudHJ5LT5hdHRyaWJ1dGVzICYga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RW51bSkpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbmFtZS0+aXNTeW1ib2woKSk7CiAgICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIFN0
cmluZyhuYW1lKSkpOwogICAgICAgICAgICAgICAgIH0KQEAgLTYwMSwxNSArNjAxLDEzIEBAIHZv
aWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob24KICAgICAgICAgICAgIGZvciAo
aXRlcmF0b3IgaXQgPSBzdGF0aWNGdW5jdGlvbnMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewogICAgICAgICAgICAgICAgIFN0cmluZ0ltcGwqIG5hbWUgPSBpdC0+a2V5LmdldCgpOwogICAg
ICAgICAgICAgICAgIFN0YXRpY0Z1bmN0aW9uRW50cnkqIGVudHJ5ID0gaXQtPnZhbHVlLmdldCgp
OwotICAgICAgICAgICAgICAgIGlmICghKGVudHJ5LT5hdHRyaWJ1dGVzICYga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RW51bSkgfHwgbW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNs
dWRlIHx8ICEoZW50cnktPmF0dHJpYnV0ZXMgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVt
KSkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5hbWUtPmlzU3ltYm9sKCkpOwogICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCBTdHJpbmcobmFtZSkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgUGFyZW50OjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXModGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0K
IAogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNPYmplY3RSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNPYmplY3RSZWYuY3BwCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODA4LDcgKzgwOCw3
IEBAIEpTUHJvcGVydHlOYW1lQXJyYXlSZWYgSlNPYmplY3RDb3B5UHJvcGUKICAgICBKU09iamVj
dCoganNPYmplY3QgPSB0b0pTKG9iamVjdCk7CiAgICAgSlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBw
cm9wZXJ0eU5hbWVzID0gbmV3IE9wYXF1ZUpTUHJvcGVydHlOYW1lQXJyYXkoJnZtKTsKICAgICBQ
cm9wZXJ0eU5hbWVBcnJheSBhcnJheSh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJp
dmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwotICAgIGpzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSkt
PmdldFByb3BlcnR5TmFtZXMoanNPYmplY3QsIGdsb2JhbE9iamVjdCwgYXJyYXksIEVudW1lcmF0
aW9uTW9kZSgpKTsKKyAgICBqc09iamVjdC0+Z2V0UHJvcGVydHlOYW1lcyhnbG9iYWxPYmplY3Qs
IGFycmF5LCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKTsKIAogICAgIHNpemVfdCBz
aXplID0gYXJyYXkuc2l6ZSgpOwogICAgIHByb3BlcnR5TmFtZXMtPmFycmF5LnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoc2l6ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mv
U2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5k
aW5ncy9TY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcg
Kzc3LDcgQEAgc3RhdGljIFJlZlB0cjxKU09OOjpWYWx1ZT4ganNUb0luc3BlY3RvcgogICAgICAg
ICBhdXRvIGluc3BlY3Rvck9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAg
IGF1dG8mIG9iamVjdCA9ICp2YWx1ZS5nZXRPYmplY3QoKTsKICAgICAgICAgUHJvcGVydHlOYW1l
QXJyYXkgcHJvcGVydHlOYW1lcyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0
ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwotICAgICAgICBvYmplY3QubWV0aG9kVGFibGUodm0pLT5n
ZXRPd25Qcm9wZXJ0eU5hbWVzKCZvYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlKCkpOworICAgICAgICBvYmplY3QubWV0aG9kVGFibGUodm0pLT5nZXRP
d25Qcm9wZXJ0eU5hbWVzKCZvYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgRG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7CiAgICAgICAgIGZvciAoYXV0byYgbmFtZSA6
IHByb3BlcnR5TmFtZXMpIHsKICAgICAgICAgICAgIGF1dG8gaW5zcGVjdG9yVmFsdWUgPSBqc1Rv
SW5zcGVjdG9yVmFsdWUoZ2xvYmFsT2JqZWN0LCBvYmplY3QuZ2V0KGdsb2JhbE9iamVjdCwgbmFt
ZSksIG1heERlcHRoKTsKICAgICAgICAgICAgIGlmICghaW5zcGVjdG9yVmFsdWUpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVj
dEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0Nyw3ICsxNDcsNyBAQCBBTFdBWVNfSU5MSU5FIHVuc2lnbmVk
IE9iamVjdEFsbG9jYXRpb25QCiAKICAgICBzaXplX3QgY291bnQgPSAwOwogICAgIFByb3BlcnR5
TmFtZUFycmF5IHByb3BlcnR5TmFtZUFycmF5KHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdz
QW5kU3ltYm9scywgUHJpdmF0ZVN5bWJvbE1vZGU6OkluY2x1ZGUpOwotICAgIHByb3RvdHlwZS0+
c3RydWN0dXJlKHZtKS0+Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUodm0sIHByb3BlcnR5
TmFtZUFycmF5LCBFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgcHJvdG90eXBlLT5zdHJ1Y3R1cmUo
dm0pLT5nZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSh2bSwgcHJvcGVydHlOYW1lQXJyYXks
IERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpOwogICAgIFByb3BlcnR5TmFtZUFycmF5
RGF0YTo6UHJvcGVydHlOYW1lVmVjdG9yJiBwcm9wZXJ0eU5hbWVWZWN0b3IgPSBwcm9wZXJ0eU5h
bWVBcnJheS5kYXRhKCktPnByb3BlcnR5TmFtZVZlY3RvcigpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcHJvcGVydHlOYW1lVmVjdG9yLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBwcm90b3R5cGUtPmdldERpcmVjdCh2bSwgcHJvcGVydHlOYW1lVmVjdG9yW2ld
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJT
Y29wZS5jcHAJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1
Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDE0ICsxMzgsMTQg
QEAgYm9vbCBEZWJ1Z2dlclNjb3BlOjpkZWxldGVQcm9wZXJ0eShKU0NlbAogICAgIHJldHVybiB0
aGlzT2JqZWN0LT5tZXRob2RUYWJsZShnbG9iYWxPYmplY3QtPnZtKCkpLT5kZWxldGVQcm9wZXJ0
eSh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLXZv
aWQgRGVidWdnZXJTY29wZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIERlYnVnZ2VyU2NvcGU6OmdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01v
ZGUgbW9kZSkKIHsKICAgICBEZWJ1Z2dlclNjb3BlKiBzY29wZSA9IGpzQ2FzdDxEZWJ1Z2dlclNj
b3BlKj4ob2JqZWN0KTsKICAgICBBU1NFUlQoc2NvcGUtPmlzVmFsaWQoKSk7CiAgICAgaWYgKCFz
Y29wZS0+aXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CiAgICAgSlNPYmplY3QqIHRoaXNPYmpl
Y3QgPSBKU1Njb3BlOjpvYmplY3RBdFNjb3BlKHNjb3BlLT5qc1Njb3BlKCkpOwotICAgIHRoaXNP
YmplY3QtPm1ldGhvZFRhYmxlKGdsb2JhbE9iamVjdC0+dm0oKSktPmdldFByb3BlcnR5TmFtZXMo
dGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICB0aGlz
T2JqZWN0LT5nZXRQcm9wZXJ0eU5hbWVzKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9k
ZSk7CiB9CiAKIGJvb2wgRGVidWdnZXJTY29wZTo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3Qq
IG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3Vs
ZFRocm93KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2Nv
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXJTY29wZS5oCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVi
dWdnZXIvRGVidWdnZXJTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIGNs
YXNzIEpTU2NvcGU7CiBjbGFzcyBEZWJ1Z2dlclNjb3BlIGZpbmFsIDogcHVibGljIEpTTm9uRmlu
YWxPYmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0Owot
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0FueUZv
cm1PZkdldFByb3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lczsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgogICAgIHN0YXRpYyBJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3Qq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIHB1dChKU0Nl
bGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlT
bG90Jik7CiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNHbG9iYWxP
YmplY3QqLCBQcm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2
b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJh
eSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blBy
b3BlcnR5KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFBy
b3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogCiAgICAgREVDTEFSRV9FWFBP
UlRfSU5GTzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5o
CShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFz
c0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtODAsMjEgKzgwLDEzIEBAIHN0cnVjdCBNZXRob2RU
YWJsZSB7CiAgICAgdXNpbmcgRGVmYXVsdFZhbHVlRnVuY3Rpb25QdHIgPSBKU1ZhbHVlICgqKShj
b25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSk7
CiAgICAgRGVmYXVsdFZhbHVlRnVuY3Rpb25QdHIgTUVUSE9EX1RBQkxFX0VOVFJZKGRlZmF1bHRW
YWx1ZSk7CiAKLSAgICB1c2luZyBHZXRPd25Qcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgPSB2b2lk
ICgqKShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOworICAgIHVzaW5nIEdldE93blByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciA9
IHZvaWQgKCopKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIEdldE93blByb3BlcnR5TmFtZXNGdW5jdGlv
blB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZ2V0T3duUHJvcGVydHlOYW1lcyk7Ci0KLSAgICB1c2lu
ZyBHZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciA9IHZvaWQgKCopKEpTT2Jq
ZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7Ci0gICAgR2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgTUVUSE9EX1RB
QkxFX0VOVFJZKGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk7Ci0KLSAgICB1c2luZyBHZXRQ
cm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgPSB2b2lkICgqKShKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwotICAgIEdldFByb3Bl
cnR5TmFtZXNGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZ2V0UHJvcGVydHlOYW1lcyk7
CisgICAgR2V0T3duUHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIE1FVEhPRF9UQUJMRV9FTlRSWShn
ZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyk7CiAKICAgICB1c2luZyBHZXRFbnVtZXJhYmxlTGVu
Z3RoRnVuY3Rpb25QdHIgPSB1aW50MzJfdCAoKikoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCop
OwogICAgIEdldEVudW1lcmFibGVMZW5ndGhGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlko
Z2V0RW51bWVyYWJsZUxlbmd0aCk7CiAKLSAgICBHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIg
TUVUSE9EX1RBQkxFX0VOVFJZKGdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMpOwotICAgIEdldFBy
b3BlcnR5TmFtZXNGdW5jdGlvblB0ciBNRVRIT0RfVEFCTEVfRU5UUlkoZ2V0R2VuZXJpY1Byb3Bl
cnR5TmFtZXMpOwotCiAgICAgdXNpbmcgQ2xhc3NOYW1lRnVuY3Rpb25QdHIgPSBTdHJpbmcgKCop
KGNvbnN0IEpTT2JqZWN0KiwgVk0mKTsKICAgICBDbGFzc05hbWVGdW5jdGlvblB0ciBNRVRIT0Rf
VEFCTEVfRU5UUlkoY2xhc3NOYW1lKTsKIApAQCAtMTY4LDExICsxNjAsOCBAQCBzdHJ1Y3QgTWV0
aG9kVGFibGUgewogICAgICAgICAmQ2xhc3NOYW1lOjp0b1RoaXMsIFwKICAgICAgICAgJkNsYXNz
TmFtZTo6ZGVmYXVsdFZhbHVlLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5
TmFtZXMsIFwKLSAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
LCBcCi0gICAgICAgICZDbGFzc05hbWU6OmdldFByb3BlcnR5TmFtZXMsIFwKKyAgICAgICAgJkNs
YXNzTmFtZTo6Z2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMsIFwKICAgICAgICAgJkNsYXNzTmFt
ZTo6Z2V0RW51bWVyYWJsZUxlbmd0aCwgXAotICAgICAgICAmQ2xhc3NOYW1lOjpnZXRTdHJ1Y3R1
cmVQcm9wZXJ0eU5hbWVzLCBcCi0gICAgICAgICZDbGFzc05hbWU6OmdldEdlbmVyaWNQcm9wZXJ0
eU5hbWVzLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmNsYXNzTmFtZSwgXAogICAgICAgICAmQ2xh
c3NOYW1lOjp0b1N0cmluZ05hbWUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Y3VzdG9tSGFzSW5z
dGFuY2UsIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3Vt
ZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xv
bmVkQXJndW1lbnRzLmNwcAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDEx
ICsxOTcsMTEgQEAgYm9vbCBDbG9uZWRBcmd1bWVudHM6OmdldE93blByb3BlcnR5U2xvdAogICAg
IHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0
LCBpZGVudCwgc2xvdCk7CiB9CiAKLXZvaWQgQ2xvbmVkQXJndW1lbnRzOjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBy
b3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIENsb25l
ZEFyZ3VtZW50czo6Z2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51
bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgQ2xvbmVkQXJndW1lbnRzKiB0aGlzT2JqZWN0
ID0ganNDYXN0PENsb25lZEFyZ3VtZW50cyo+KG9iamVjdCk7Ci0gICAgdGhpc09iamVjdC0+bWF0
ZXJpYWxpemVTcGVjaWFsc0lmTmVjZXNzYXJ5KGdsb2JhbE9iamVjdCk7Ci0gICAgQmFzZTo6Z2V0
T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIGFycmF5LCBtb2RlKTsK
KyAgICBpZiAobW9kZSA9PSBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKQorICAgICAg
ICB0aGlzT2JqZWN0LT5tYXRlcmlhbGl6ZVNwZWNpYWxzSWZOZWNlc3NhcnkoZ2xvYmFsT2JqZWN0
KTsKIH0KIAogYm9vbCBDbG9uZWRBcmd1bWVudHM6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBpZGVudCwgSlNWYWx1ZSB2YWx1ZSwg
UHV0UHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2xvbmVkQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2xvbmVkQXJndW1lbnRzLmgJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nsb25lZEFyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ2xvbmVkQXJndW1lbnRzIGZp
bmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2Ug
PSBKU05vbkZpbmFsT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3Bl
cnR5TmFtZXM7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKQEAg
LTcwLDcgKzcwLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlLCBJbmRleGluZ1R5
cGUpOwogCiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2
b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25T
cGVjaWFsUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBwdXQo
SlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0
aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0VudW1lcmF0aW9uTW9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0VudW1lcmF0aW9uTW9k
ZS5oCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
bnVtZXJhdGlvbk1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNTYgKzI3LDIwIEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi1lbnVtIGNsYXNzIFByb3BlcnR5TmFtZU1vZGUgeworZW51bSBjbGFz
cyBQcm9wZXJ0eU5hbWVNb2RlIDogdWludDhfdCB7CiAgICAgU3ltYm9scyA9IDEgPDwgMCwKICAg
ICBTdHJpbmdzID0gMSA8PCAxLAogICAgIFN0cmluZ3NBbmRTeW1ib2xzID0gU3ltYm9scyB8IFN0
cmluZ3MsCiB9OwogCi1lbnVtIGNsYXNzIFByaXZhdGVTeW1ib2xNb2RlIHsKK2VudW0gY2xhc3Mg
UHJpdmF0ZVN5bWJvbE1vZGUgOiB1aW50OF90IHsKICAgICBJbmNsdWRlLAogICAgIEV4Y2x1ZGUK
IH07CiAKLWVudW0gY2xhc3MgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSB7CitlbnVtIGNsYXNzIERv
bnRFbnVtUHJvcGVydGllc01vZGUgOiB1aW50OF90IHsKICAgICBJbmNsdWRlLAogICAgIEV4Y2x1
ZGUKIH07CiAKLWVudW0gY2xhc3MgSlNPYmplY3RQcm9wZXJ0aWVzTW9kZSB7Ci0gICAgSW5jbHVk
ZSwKLSAgICBFeGNsdWRlCi19OwotCi1jbGFzcyBFbnVtZXJhdGlvbk1vZGUgewotcHVibGljOgot
ICAgIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlIGRvbnRFbnVtUHJvcGVy
dGllc01vZGUgPSBEb250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlLCBKU09iamVjdFByb3Bl
cnRpZXNNb2RlIGpzT2JqZWN0UHJvcGVydGllc01vZGUgPSBKU09iamVjdFByb3BlcnRpZXNNb2Rl
OjpJbmNsdWRlKQotICAgICAgICA6IG1fZG9udEVudW1Qcm9wZXJ0aWVzTW9kZShkb250RW51bVBy
b3BlcnRpZXNNb2RlKQotICAgICAgICAsIG1fanNPYmplY3RQcm9wZXJ0aWVzTW9kZShqc09iamVj
dFByb3BlcnRpZXNNb2RlKQotICAgIHsKLSAgICB9Ci0KLSAgICBFbnVtZXJhdGlvbk1vZGUoY29u
c3QgRW51bWVyYXRpb25Nb2RlJiBtb2RlLCBKU09iamVjdFByb3BlcnRpZXNNb2RlIGpzT2JqZWN0
UHJvcGVydGllc01vZGUpCi0gICAgICAgIDogbV9kb250RW51bVByb3BlcnRpZXNNb2RlKG1vZGUu
bV9kb250RW51bVByb3BlcnRpZXNNb2RlKQotICAgICAgICAsIG1fanNPYmplY3RQcm9wZXJ0aWVz
TW9kZShqc09iamVjdFByb3BlcnRpZXNNb2RlKQotICAgIHsKLSAgICB9Ci0KLSAgICAvLyBBZGQg
b3RoZXIgY29uc3RydWN0b3JzIGFzIG5lZWRlZCBmb3IgY29udmVuaWVuY2UKLQotICAgIGJvb2wg
aW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpCi0gICAgewotICAgICAgICByZXR1cm4gbV9kb250
RW51bVByb3BlcnRpZXNNb2RlID09IERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGU7Ci0g
ICAgfQotCi0gICAgYm9vbCBpbmNsdWRlSlNPYmplY3RQcm9wZXJ0aWVzKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2pzT2JqZWN0UHJvcGVydGllc01vZGUgPT0gSlNPYmplY3RQcm9wZXJ0aWVz
TW9kZTo6SW5jbHVkZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgRG9udEVudW1Qcm9wZXJ0aWVz
TW9kZSBtX2RvbnRFbnVtUHJvcGVydGllc01vZGU7Ci0gICAgSlNPYmplY3RQcm9wZXJ0aWVzTW9k
ZSBtX2pzT2JqZWN0UHJvcGVydGllc01vZGU7Ci19OwotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3Bw
CShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJv
ckluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDIwICsyNjAsMTIgQEAgYm9vbCBF
cnJvckluc3RhbmNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSgogICAgIHJldHVybiBCYXNlOjpnZXRP
d25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNs
b3QpOwogfQogCi12b2lkIEVycm9ySW5zdGFuY2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lQXJyYXksIEVudW1lcmF0aW9uTW9kZSBlbnVtZXJhdGlv
bk1vZGUpCit2b2lkIEVycm9ySW5zdGFuY2U6OmdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFt
ZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBFcnJvckluc3RhbmNlKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEVycm9ySW5zdGFuY2UqPihvYmplY3QpOwotICAgIHRoaXNPYmplY3QtPm1hdGVyaWFsaXplRXJy
b3JJbmZvSWZOZWVkZWQodm0pOwotICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZUFycmF5LCBlbnVtZXJhdGlv
bk1vZGUpOwotfQotCi12b2lkIEVycm9ySW5zdGFuY2U6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZUFycmF5LCBFbnVtZXJhdGlvbk1vZGUgZW51bWVyYXRp
b25Nb2RlKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBFcnJvcklu
c3RhbmNlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEVycm9ySW5zdGFuY2UqPihvYmplY3QpOwotICAg
IHRoaXNPYmplY3QtPm1hdGVyaWFsaXplRXJyb3JJbmZvSWZOZWVkZWQodm0pOwotICAgIEJhc2U6
OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWVBcnJheSwgZW51bWVyYXRpb25Nb2RlKTsKKyAgICBpZiAobW9kZSA9PSBEb250RW51
bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKQorICAgICAgICB0aGlzT2JqZWN0LT5tYXRlcmlhbGl6
ZUVycm9ySW5mb0lmTmVlZGVkKHZtKTsKIH0KIAogYm9vbCBFcnJvckluc3RhbmNlOjpkZWZpbmVP
d25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FcnJvckluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDcgKzI5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBFcnJvckluc3RhbmNlIDogcHVi
bGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZp
bmFsT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92
ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXM7
CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCiAg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC05Myw4ICs5Myw3IEBAIHBy
b3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBj
b25zdCBTdHJpbmcmLCBTb3VyY2VBcHBlbmRlciA9IG51bGxwdHIsIFJ1bnRpbWVUeXBlID0gVHlw
ZU5vdGhpbmcsIGJvb2wgdXNlQ3VycmVudEZyYW1lID0gdHJ1ZSk7CiAKICAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgc3RhdGljIHZvaWQgZ2V0U3RydWN0dXJlUHJvcGVydHlO
YW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVt
UHJvcGVydGllc01vZGUpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2Jq
ZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3Jp
cHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7
CiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3Qq
LCBQcm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHMuaAkocmV2aXNpb24gMjcx
MTE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+
CiBjbGFzcyBHZW5lcmljQXJndW1lbnRzIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVi
bGljOgogICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9w
ZXJ0eU5hbWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92
ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90
QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOwogCiBwcm90ZWN0ZWQ6CiAgICAgR2VuZXJp
Y0FyZ3VtZW50cyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtNDcsNyArNDcsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmpl
Y3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRpYyB2
b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJh
eSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwq
LCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90
Jik7CiAgICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAg
c3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShyZXZp
c2lvbiAyNzExMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJn
dW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIGJvb2wgR2Vu
ZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGUKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
VHlwZT4KLXZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWVBcnJheSYgYXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBHZW5lcmljQXJndW1l
bnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRG9udEVudW1Q
cm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmplY3QpOwpAQCAtMTAxLDE1
ICsxMDEsMTUgQEAgdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgYXJyYXkuYWRkKElkZW50aWZpZXI6
OmZyb20odm0sIGkpKTsKICAgICAgICAgfQorICAgICAgICB0aGlzT2JqZWN0LT5nZXRPd25JbmRl
eGVkUHJvcGVydHlOYW1lcyhnbG9iYWxPYmplY3QsIGFycmF5LCBtb2RlKTsKICAgICB9CiAKLSAg
ICBpZiAobW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkgJiYgIXRoaXNPYmplY3QtPm92
ZXJyb2RlVGhpbmdzKCkpIHsKKyAgICBpZiAobW9kZSA9PSBEb250RW51bVByb3BlcnRpZXNNb2Rl
OjpJbmNsdWRlICYmICF0aGlzT2JqZWN0LT5vdmVycm9kZVRoaW5ncygpKSB7CiAgICAgICAgIGFy
cmF5LmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOwogICAgICAgICBhcnJheS5hZGQodm0u
cHJvcGVydHlOYW1lcy0+Y2FsbGVlKTsKLSAgICAgICAgaWYgKGFycmF5LmluY2x1ZGVTeW1ib2xQ
cm9wZXJ0aWVzKCkpCi0gICAgICAgICAgICBhcnJheS5hZGQodm0ucHJvcGVydHlOYW1lcy0+aXRl
cmF0b3JTeW1ib2wpOworICAgICAgICBhcnJheS5hZGQodm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0
b3JTeW1ib2wpOwogICAgIH0KLSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmpl
Y3QsIGdsb2JhbE9iamVjdCwgYXJyYXksIG1vZGUpOworICAgIHRoaXNPYmplY3QtPmdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyhnbG9iYWxPYmplY3QsIGFycmF5LCBtb2RlKTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgVHlwZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgzLDE1ICsyODMsMTEgQEAg
c3RhdGljIGludCBjb21wYXJlS2V5c0ZvclFTb3J0KGNvbnN0IHZvaQogICAgIHJldHVybiAoZGEg
PiBkYikgLSAoZGEgPCBkYik7CiB9CiAKLXZvaWQgSlNBcnJheTo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
K3ZvaWQgSlNBcnJheTo6Z2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKLSAgICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihv
YmplY3QpOwotCi0gICAgaWYgKG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKQorICAg
IGlmIChtb2RlID09IERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpCiAgICAgICAgIHBy
b3BlcnR5TmFtZXMuYWRkKHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCk7Ci0KLSAgICBKU09iamVj
dDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIC8vIFRoaXMgbWV0aG9kIG1ha2VzIHJvb20gaW4g
dGhlIHZlY3RvciwgYnV0IGxlYXZlcyB0aGUgbmV3IHNwYWNlIGZvciBjb3VudCBzbG90cyB1bmNs
ZWFyZWQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZp
c2lvbiAyNzExMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgSlNBcnJheSA6IHB1YmxpYyBK
U05vbkZpbmFsT2JqZWN0IAogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0
IEJhc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJp
ZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lczsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lczsKIAog
ICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoQ2hlY2tlZDxzaXplX3Q+IGlubGluZUNh
cGFjaXR5KQogICAgIHsKQEAgLTE4OSw3ICsxODksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGlj
IGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpT
Q2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3Qm
KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRP
d25TcGVjaWFsUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKIAogcHJpdmF0ZToKICAgICBi
b29sIGlzTGVuZ3RoV3JpdGFibGUoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGwuY3BwCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsMTIgKzIwNiwxMiBAQCB2
b2lkIEpTQ2VsbDo6ZG9QdXRQcm9wZXJ0eVNlY3VyaXR5Q2hlY2soCiAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBKU0NlbGw6OmdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKQordm9pZCBKU0NlbGw6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSkK
IHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIEpTQ2VsbDo6
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSkKK3ZvaWQgSlNDZWxsOjpnZXRPd25T
cGVjaWFsUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CkBAIC0yMzMsMTEgKzIzMyw2IEBAIGNvbnN0IGNoYXIqIEpTQ2Vs
bDo6Y2xhc3NOYW1lKFZNJiB2bSkgY28KICAgICByZXR1cm4gY2xhc3NJbmZvKHZtKS0+Y2xhc3NO
YW1lOwogfQogCi12b2lkIEpTQ2VsbDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCi17Ci0gICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQogYm9vbCBKU0NlbGw6OmN1c3RvbUhh
c0luc3RhbmNlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKQogewogICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yNTYsMTYgKzI1MSw2IEBAIHVpbnQzMl90
IEpTQ2VsbDo6Z2V0RW51bWVyYWJsZUxlbmd0aChKU0cKICAgICByZXR1cm4gMDsKIH0KIAotdm9p
ZCBKU0NlbGw6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKQotewotICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgSlNDZWxsOjpnZXRHZW5lcmljUHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBFbnVtZXJhdGlvbk1vZGUpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LX0KLQogYm9vbCBKU0NlbGw6OnByZXZlbnRFeHRlbnNpb25zKEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqKQogewogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMjcxMTE2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0
NCwxMyArMjQ0LDEwIEBAIHByb3RlY3RlZDoKIAogICAgIC8vIER1bW15IGltcGxlbWVudGF0aW9u
cyBvZiBvdmVycmlkZS1hYmxlIHN0YXRpYyBmdW5jdGlvbnMgZm9yIGNsYXNzZXMgdG8gcHV0IGlu
IHRoZWlyIE1ldGhvZFRhYmxlCiAgICAgc3RhdGljIEpTVmFsdWUgZGVmYXVsdFZhbHVlKGNvbnN0
IEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKTsKLSAg
ICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKTsKLSAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwotICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RP
X0NSQVNIIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyBOT19SRVRV
Uk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsK
KyAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldE93blNwZWNpYWxQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IERvbnRFbnVtUHJvcGVydGllc01vZGUpOwogCiAgICAgc3RhdGljIHVpbnQzMl90IGdldEVudW1l
cmFibGVMZW5ndGgoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCopOwotICAgIHN0YXRpYyBOT19S
RVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUp
OwotICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0R2VuZXJpY1Byb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKTsKICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCBib29s
IHByZXZlbnRFeHRlbnNpb25zKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0
aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCBib29sIGlzRXh0ZW5zaWJsZShKU09iamVjdCosIEpT
R2xvYmFsT2JqZWN0Kik7CiAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggYm9vbCBz
ZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUsIGJvb2wpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJl
dmlzaW9uIDI3MTExNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTQsMTMgKzQ5NCwxMyBAQCBib29sIEpTRnVuY3Rp
b246OmdldE93blByb3BlcnR5U2xvdChKU09iCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpKTsKIH0KIAotdm9pZCBKU0Z1bmN0aW9uOjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2Rl
KQordm9pZCBKU0Z1bmN0aW9uOjpnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIEpTRnVu
Y3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KG9iamVjdCk7CiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAotICAgIGlmIChtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkg
eworICAgIGlmIChtb2RlID09IERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpIHsKICAg
ICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc0hvc3RPckJ1aWx0aW5GdW5jdGlvbigpKSB7CiAgICAg
ICAgICAgICAvLyBNYWtlIHN1cmUgcHJvdG90eXBlIGhhcyBiZWVuIHJlaWZpZWQuCiAgICAgICAg
ICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFs
TWV0aG9kVHlwZTo6Vk1JbnF1aXJ5LCAmdm0pOwpAQCAtNTI0LDcgKzUyNCw2IEBAIHZvaWQgSlNG
dW5jdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU4KICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEJhc2U6OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMs
IG1vZGUpKTsKIH0KIAogYm9vbCBKU0Z1bmN0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcg
KzcwLDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0eXBlZGVmIEpTQ2FsbGVlIEJhc2U7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzQW55
Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldENhbGxEYXRhOworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blNwZWNpYWxQ
cm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGE7CiAKICAgICBzdGF0aWMgc2l6ZV90
IGFsbG9jYXRpb25TaXplKENoZWNrZWQ8c2l6ZV90PiBpbmxpbmVDYXBhY2l0eSkKICAgICB7CkBA
IC0xNzMsNyArMTczLDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
KTsKIAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9p
ZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlID0gRW51bWVyYXRpb25Nb2RlKCkp
OworICAgIHN0YXRpYyB2b2lkIGdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01v
ZGUpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wg
c2hvdWxkVGhyb3cpOwogCiAgICAgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcuaAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyAr
OTYsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTQXJyYXlCdWZmZXJWaWV3OwogICAg
IHR5cGVkZWYgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSBFbGVtZW50VHlwZTsKIAotICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVu
TGVuZ3RoSXNOb3RaZXJvOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOwogCiAgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9IHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBl
KTsKIApAQCAtMzA0LDcgKzMwNCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgcHV0QnlJ
bmRleChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlC
eUluZGV4KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsK
ICAgICAKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAg
c3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKIAogICAgIHN0
YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtNDY0LDcgKzQ2NCw3IEBAIGJvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OmQKIAogdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KIHZvaWQgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5TmFtZXMoCi0gICAgSlNPYmplY3QqIG9i
amVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIGFy
cmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKKyAgICBKU09iamVjdCogb2JqZWN0LCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIERvbnRFbnVt
UHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5l
cmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOwpAQCAtNDc0LDcgKzQ3NCw3IEBAIHZvaWQgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmcKICAgICAgICAgICAgIGFycmF5LmFkZChJ
ZGVudGlmaWVyOjpmcm9tKHZtLCBpKSk7CiAgICAgfQogICAgIAotICAgIHJldHVybiBCYXNlOjpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBhcnJheSwgbW9kZSk7Cisg
ICAgdGhpc09iamVjdC0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKGdsb2JhbE9iamVjdCwg
YXJyYXksIG1vZGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lv
biAyNzExMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NzEsOSArNTcxLDcgQEAgcHVibGljOgogICAgICAgICAK
IHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDsKLSAg
ICAvLyBEbyB3ZSByZWFseSBuZWVkIE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMg
aGVyZT8KLSAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxMjk1NAotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGUgfCBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVz
IHwgSXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNPYmplY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3Rh
dGljUHJvcGVydHlUYWJsZSB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IElzSW1tdXRh
YmxlUHJvdG90eXBlRXhvdGljT2JqZWN0OwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBT
dWJzcGFjZUFjY2VzcyBtb2RlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAkocmV2aXNpb24gMjcxMTE2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHZvaWQgSlNMZXhpY2FsRW52aXJvbm1l
bnQ6OmFuYWx5emVIZWFwKEoKICAgICB9CiB9CiAKLXZvaWQgSlNMZXhpY2FsRW52aXJvbm1lbnQ6
OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTTGV4aWNhbEVudmlyb25tZW50OjpnZXRPd25TcGVj
aWFsUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0
aWVzTW9kZSBtb2RlKQogewogICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTTGV4aWNhbEVudmlyb25tZW50Kj4ob2JqZWN0KTsKIApAQCAtNzMsNyArNzMsNyBA
QCB2b2lkIEpTTGV4aWNhbEVudmlyb25tZW50OjpnZXRPd25Ob25JbmRlCiAgICAgICAgIFN5bWJv
bFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGVuZCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmVu
ZChsb2NrZXIpOwogICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAg
IGZvciAoU3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0b3IgaXQgPSB0aGlzT2JqZWN0LT5zeW1ib2xU
YWJsZSgpLT5iZWdpbihsb2NrZXIpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlm
IChpdC0+dmFsdWUuZ2V0QXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
ICYmICFtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkKKyAgICAgICAgICAgIGlmICht
b2RlID09IERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUgJiYgaXQtPnZhbHVlLmlzRG9u
dEVudW0oKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICghdGhp
c09iamVjdC0+aXNWYWxpZFNjb3BlT2Zmc2V0KGl0LT52YWx1ZS5zY29wZU9mZnNldCgpKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTgyLDggKzgyLDYgQEAgdm9pZCBKU0xleGljYWxF
bnZpcm9ubWVudDo6Z2V0T3duTm9uSW5kZQogICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgaXQtPmtleS5nZXQoKSkpOwogICAgICAgICB9CiAgICAg
fQotICAgIC8vIFNraXAgdGhlIEpTU3ltYm9sVGFibGVPYmplY3QncyBpbXBsZW1lbnRhdGlvbiBv
ZiBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMKLSAgICBKU09iamVjdDo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywg
bW9kZSk7CiB9CiAKIGJvb2wgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmdldE93blByb3BlcnR5U2xv
dChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmgJKHJl
dmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNh
bEVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgog
ICAgIH0KIAogICAgIHVzaW5nIEJhc2UgPSBKU1N5bWJvbFRhYmxlT2JqZWN0OwotICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFBy
b3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
T3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXM7CiAKICAgICBXcml0ZUJhcnJpZXJC
YXNlPFVua25vd24+KiB2YXJpYWJsZXMoKQogICAgIHsKQEAgLTEwNiw3ICsxMDYsNyBAQCBwdWJs
aWM6CiAgICAgfQogICAgICAgICAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7
Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Cisg
ICAgc3RhdGljIHZvaWQgZ2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7
CiAKICAgICBzdGF0aWMgYm9vbCBwdXQoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAkocmV2
aXNpb24gMjcxMTE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVF
bnZpcm9ubWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgYm9vbCBKU01v
ZHVsZUVudmlyb25tZW50OjpnZXRPd25Qcm9wZXJ0eQogICAgIHJldHVybiBCYXNlOjpnZXRPd25Q
cm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OwogfQogCi12b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyhKU09iamVjdCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXNBcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2
b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OmdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBjZWxsLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzQXJyYXksIERvbnRFbnVtUHJvcGVydGllc01vZGUpCiB7CiAgICAgSlNNb2R1bGVFbnZpcm9u
bWVudCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01vZHVsZUVudmlyb25tZW50Kj4oY2VsbCk7CiAg
ICAgaWYgKHByb3BlcnR5TmFtZXNBcnJheS5pbmNsdWRlU3RyaW5nUHJvcGVydGllcygpKSB7CkBA
IC0xMDYsNyArMTA2LDYgQEAgdm9pZCBKU01vZHVsZUVudmlyb25tZW50OjpnZXRPd25Ob25JbmRl
eAogICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXNBcnJheS5hZGQoaW1wb3J0RW50cnkubG9j
YWxOYW1lKTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gQmFzZTo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lc0Fy
cmF5LCBtb2RlKTsKIH0KIAogYm9vbCBKU01vZHVsZUVudmlyb25tZW50OjpwdXQoSlNDZWxsKiBj
ZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5oCShy
ZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVs
ZUVudmlyb25tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgSlNN
b2R1bGVFbnZpcm9ubWVudCBmaW5hbCA6IHB1YmxpYwogICAgIGZyaWVuZCBjbGFzcyBMTEludE9m
ZnNldHNFeHRyYWN0b3I7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTGV4aWNhbEVudmly
b25tZW50OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJy
aWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXM7CiAK
ICAgICBzdGF0aWMgSlNNb2R1bGVFbnZpcm9ubWVudCogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNTY29wZSogY3VycmVudFNjb3BlLCBTeW1ib2xUYWJsZSog
c3ltYm9sVGFibGUsIEpTVmFsdWUgaW5pdGlhbFZhbHVlLCBBYnN0cmFjdE1vZHVsZVJlY29yZCog
bW9kdWxlUmVjb3JkKQogICAgIHsKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgIH0KIAog
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25T
cGVjaWFsUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBwdXQo
SlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0LmNwcAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTcsNyArMjE3LDcgQEAgYm9vbCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6ZGVsZXRlUHJv
cAogICAgIHJldHVybiAhdGhpc09iamVjdC0+bV9leHBvcnRzLmNvbnRhaW5zKHByb3BlcnR5TmFt
ZS51aWQoKSk7CiB9CiAKLXZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBy
b3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3Zv
aWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKQEAgLTIyNSw3ICsyMjUsNyBAQCB2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
OjpnZXRPd25Qcm9wCiAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tb2R1bGUt
bmFtZXNwYWNlLWV4b3RpYy1vYmplY3RzLW93bnByb3BlcnR5a2V5cwogICAgIEpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
Kj4oY2VsbCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBuYW1lIDogdGhpc09iamVjdC0+bV9uYW1l
cykgewotICAgICAgICBpZiAoIW1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKSB7Cisg
ICAgICAgIGlmIChtb2RlID09IERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpIHsKICAg
ICAgICAgICAgIC8vIFBlcmZvcm0gW1tHZXRPd25Qcm9wZXJ0eV1dIHRvIHRocm93IFJlZmVyZW5j
ZUVycm9yIGlmIGJpbmRpbmcgaXMgdW5pbml0aWFsaXplZC4KICAgICAgICAgICAgIFByb3BlcnR5
U2xvdCBzbG90KGNlbGwsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Q
cm9wZXJ0eSk7CiAgICAgICAgICAgICB0aGlzT2JqZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3RDb21t
b24oZ2xvYmFsT2JqZWN0LCBuYW1lLmltcGwoKSwgc2xvdCk7CkBAIC0yMzMsNyArMjMzLDggQEAg
dm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6Z2V0T3duUHJvcAogICAgICAgICB9CiAgICAg
ICAgIHByb3BlcnR5TmFtZXMuYWRkKG5hbWUuaW1wbCgpKTsKICAgICB9Ci0gICAgQmFzZTo6Z2V0
T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMs
IG1vZGUpOworICAgIGlmIChwcm9wZXJ0eU5hbWVzLmluY2x1ZGVTeW1ib2xQcm9wZXJ0aWVzKCkp
CisgICAgICAgIHRoaXNPYmplY3QtPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiBib29sIEpTTW9kdWxlTmFtZXNwYWNl
T2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogY2VsbCwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVj
dC5oCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZU5hbWVzcGFjZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBA
IG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QgZmluYWwgOiBw
dWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9u
RmluYWxPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVy
byB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBHZXRPd25Qcm9wZXJ0eVNs
b3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IElzSW1tdXRhYmxlUHJvdG90eXBlRXhvdGlj
T2JqZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJy
aWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgR2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVG
b3JQcm9wZXJ0eUFic2VuY2UgfCBJc0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVjdDsKIAog
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwpAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgcHV0KEpTQ2VsbCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQ2VsbCosIEpTR2xvYmFsT2Jq
ZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwq
LCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVu
dW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVm
aW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwg
Y29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAKICAgICBERUNM
QVJFX0VYUE9SVF9JTkZPOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
Tk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPTk9iamVjdC5jcHAJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDAsNyArNTAwLDcg
QEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcAogICAgICAgICAgICAg
ICAgIG1fcHJvcGVydHlOYW1lcyA9IHN0cmluZ2lmaWVyLm1fYXJyYXlSZXBsYWNlclByb3BlcnR5
TmFtZXMuZGF0YSgpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgUHJvcGVy
dHlOYW1lQXJyYXkgb2JqZWN0UHJvcGVydHlOYW1lcyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3Ry
aW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwotICAgICAgICAgICAgICAgIG1fb2Jq
ZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMobV9vYmplY3QsIGdsb2Jh
bE9iamVjdCwgb2JqZWN0UHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOworICAgICAg
ICAgICAgICAgIG1fb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMo
bV9vYmplY3QsIGdsb2JhbE9iamVjdCwgb2JqZWN0UHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9w
ZXJ0aWVzTW9kZTo6RXhjbHVkZSk7CiAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgIG1fcHJvcGVydHlOYW1lcyA9IG9iamVj
dFByb3BlcnR5TmFtZXMucmVsZWFzZURhdGEoKTsKICAgICAgICAgICAgIH0KQEAgLTcxOSw3ICs3
MTksNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiAgICAgICAg
ICAgICAgICAgbWFya2VkU3RhY2suYXBwZW5kV2l0aENyYXNoT25PdmVyZmxvdyhvYmplY3QpOwog
ICAgICAgICAgICAgICAgIGluZGV4U3RhY2suYXBwZW5kKDApOwogICAgICAgICAgICAgICAgIHBy
b3BlcnR5U3RhY2suYXBwZW5kKFByb3BlcnR5TmFtZUFycmF5KHZtLCBQcm9wZXJ0eU5hbWVNb2Rl
OjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSkpOwotICAgICAgICAgICAgICAg
IG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbV9n
bG9iYWxPYmplY3QsIHByb3BlcnR5U3RhY2subGFzdCgpLCBFbnVtZXJhdGlvbk1vZGUoKSk7Cisg
ICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFt
ZXMob2JqZWN0LCBtX2dsb2JhbE9iamVjdCwgcHJvcGVydHlTdGFjay5sYXN0KCksIERvbnRFbnVt
UHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpOwogICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBvYmplY3RTdGFy
dFZpc2l0TWVtYmVyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MiwxOCArNzIsMTkgQEAgY29uc3Qg
Q2xhc3NJbmZvIEpTT2JqZWN0OjpzX2luZm8gPSB7ICJPYgogCiBjb25zdCBDbGFzc0luZm8gSlNG
aW5hbE9iamVjdDo6c19pbmZvID0geyAiT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwg
bnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0ZpbmFsT2JqZWN0KSB9OwogCi1zdGF0aWMg
aW5saW5lIHZvaWQgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNP
YmplY3Q6OmdldE5vblJlaWZpZWRTdGF0aWNQcm9wZXJ0eU5hbWVzKFZNJiB2bSwgUHJvcGVydHlO
YW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsK
LSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgaWYgKHN0YXRpY1Byb3BlcnRp
ZXNSZWlmaWVkKHZtKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQWRkIHByb3BlcnRpZXMg
ZnJvbSB0aGUgc3RhdGljIGhhc2h0YWJsZXMgb2YgcHJvcGVydGllcwotICAgIGZvciAoOyBjbGFz
c0luZm87IGNsYXNzSW5mbyA9IGNsYXNzSW5mby0+cGFyZW50Q2xhc3MpIHsKLSAgICAgICAgY29u
c3QgSGFzaFRhYmxlKiB0YWJsZSA9IGNsYXNzSW5mby0+c3RhdGljUHJvcEhhc2hUYWJsZTsKKyAg
ICBmb3IgKGNvbnN0IENsYXNzSW5mbyogaW5mbyA9IGNsYXNzSW5mbyh2bSk7IGluZm87IGluZm8g
PSBpbmZvLT5wYXJlbnRDbGFzcykgeworICAgICAgICBjb25zdCBIYXNoVGFibGUqIHRhYmxlID0g
aW5mby0+c3RhdGljUHJvcEhhc2hUYWJsZTsKICAgICAgICAgaWYgKCF0YWJsZSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGZvciAoYXV0byBpdGVyID0gdGFibGUtPmJlZ2luKCk7
IGl0ZXIgIT0gdGFibGUtPmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIGlmICghKGl0ZXIt
PmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkgfHwgbW9kZS5pbmNs
dWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpCisgICAgICAgICAgICBpZiAobW9kZSA9PSBEb250RW51
bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlIHx8ICEoaXRlci0+YXR0cmlidXRlcygpICYgUHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSkKICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFk
ZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBpdGVyLmtleSgpKSk7CiAgICAgICAgIH0KICAg
ICB9CkBAIC0yMzgwLDU0ICsyMzgxLDQ5IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihvYmpl
Y3RQcml2YXRlRnUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihKU09iamVj
dDo6ZGVmYXVsdEhhc0luc3RhbmNlKGdsb2JhbE9iamVjdCwgdmFsdWUsIHByb3RvKSkpOwogfQog
Ci0vLyBGSVhNRTogQXNzZXJ0IHRoYXQgcHJvcGVydGllcyByZXR1cm5lZCBieSBnZXRPd25Qcm9w
ZXJ0eU5hbWVzKCkgYXJlIHJlcG9ydGVkIGVudW1lcmFibGUgYnkgZ2V0T3duUHJvcGVydHlTbG90
KCkuCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5OTI2Ci12
b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
Ci0gICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkpKSB7Ci0gICAgICAg
IHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0aGlzOworICAgIHVuc2lnbmVk
IHByb3RvdHlwZUNvdW50ID0gMDsKIAotICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRP
d25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2Rl
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOworICAgIHdoaWxlICh0
cnVlKSB7CisgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5h
bWVzKG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKIAotICAgIEpTVmFsdWUgbmV4dFBy
b3RvID0gb2JqZWN0LT5nZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICBpZiAobmV4dFByb3RvLmlzTnVsbCgp
KQotICAgICAgICByZXR1cm47CisgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gb2JqZWN0LT5n
ZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7CisgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCisgICAg
ICAgICAgICBicmVhazsKIAotICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBhc09iamVjdChuZXh0
UHJvdG8pOwotICAgIHdoaWxlKDEpIHsKLSAgICAgICAgaWYgKHByb3RvdHlwZS0+c3RydWN0dXJl
KHZtKS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzKCkpIHsKLSAgICAgICAg
ICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIHByb3RvdHlwZS0+bWV0aG9kVGFibGUo
dm0pLT5nZXRQcm9wZXJ0eU5hbWVzKHByb3RvdHlwZSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWVzLCBtb2RlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCsrcHJvdG90eXBlQ291bnQgPiBtYXhp
bXVtUHJvdG90eXBlQ2hhaW5EZXB0aCkpIHsKKyAgICAgICAgICAgIHRocm93U3RhY2tPdmVyZmxv
d0Vycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIHByb3RvdHlwZS0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5h
bWVzKHByb3RvdHlwZSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLSAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICAgICAgbmV4dFByb3Rv
ID0gcHJvdG90eXBlLT5nZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgICAgIGlmIChuZXh0UHJvdG8u
aXNOdWxsKCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgcHJvdG90eXBlID0gYXNPYmpl
Y3QobmV4dFByb3RvKTsKKworICAgICAgICBvYmplY3QgPSBhc09iamVjdChwcm90b3R5cGUpOwog
ICAgIH0KIH0KIAotdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRp
ZXNNb2RlIG1vZGUpCiB7Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGlm
ICghbW9kZS5pbmNsdWRlSlNPYmplY3RQcm9wZXJ0aWVzKCkpIHsKLSAgICAgICAgLy8gV2Ugc3Rp
bGwgaGF2ZSB0byBnZXQgbm9uLWluZGV4ZWQgcHJvcGVydGllcyBmcm9tIGFueSBzdWJjbGFzc2Vz
IG9mIEpTT2JqZWN0IHRoYXQgaGF2ZSB0aGVtLgotICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxl
KHZtKS0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWVzLCBtb2RlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBvYmplY3Qt
PmdldE93bkluZGV4ZWRQcm9wZXJ0eU5hbWVzKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywg
bW9kZSk7CisgICAgb2JqZWN0LT5nZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKK30KKwordm9pZCBKU09iamVjdDo6Z2V0T3duU3Bl
Y2lhbFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSkKK3sKKyAgICAvLyBTdHJ1Y3R1cmU6OnZh
bGlkYXRlRmxhZ3MoKSBicmVha3MgaWYgdGhpcyBtZXRob2QgaXNuJ3QgZXhwb3J0ZWQsIHdoaWNo
IGlzIGltcG9zc2libGUgaWYgaXQncyBpbmxpbmVkLgorfQorCit2b2lkIEpTT2JqZWN0OjpnZXRP
d25JbmRleGVkUHJvcGVydHlOYW1lcyhKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCit7CisgICAgSlNP
YmplY3QqIG9iamVjdCA9IHRoaXM7CiAKICAgICBpZiAocHJvcGVydHlOYW1lcy5pbmNsdWRlU3Ry
aW5nUHJvcGVydGllcygpKSB7Ci0gICAgICAgIC8vIEFkZCBudW1lcmljIHByb3BlcnRpZXMgZmly
c3QuIFRoYXQgYXBwZWFycyB0byBiZSB0aGUgYWNjZXB0ZWQgY29udmVudGlvbi4KKyAgICAgICAg
Ly8gQWRkIG51bWVyaWMgcHJvcGVydGllcyBmaXJzdCBwZXIgc3RlcCAyIG9mIGh0dHBzOi8vdGMz
OS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnlvd25wcm9wZXJ0eWtleXMKICAgICAgICAgLy8gRklY
TUU6IEZpbGxpbmcgUHJvcGVydHlOYW1lQXJyYXkgd2l0aCBhbiBpZGVudGlmaWVyIGZvciBldmVy
eSBpbnRlZ2VyCiAgICAgICAgIC8vIGlzIGluY3JlZGlibHkgaW5lZmZpY2llbnQgZm9yIGxhcmdl
IGFycmF5cy4gV2UgbmVlZCBhIGRpZmZlcmVudCBhcHByb2FjaCwKICAgICAgICAgLy8gd2hpY2gg
YWxtb3N0IGNlcnRhaW5seSBtZWFucyBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgZm9yIFByb3BlcnR5
TmFtZUFycmF5LgpAQCAtMjQ3NSw3ICsyNDcxLDcgQEAgdm9pZCBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlOYW1lcyhKU09iagogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CiAgICAgICAg
ICAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1h
cC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICht
b2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSB8fCAhKGl0LT52YWx1ZS5hdHRyaWJ1dGVz
KCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKQorICAgICAgICAgICAgICAgICAgICBp
ZiAobW9kZSA9PSBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlIHx8ICEoaXQtPnZhbHVl
LmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBrZXlzLnVuY2hlY2tlZEFwcGVuZChzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
aXQtPmtleSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTI0OTAs
MjAgKzI0ODYsMTkgQEAgdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogICAg
IH0KLQotICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMob2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCi12
b2lkIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU09iamVjdDo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGlmICghb2JqZWN0LT5zdGF0
aWNQcm9wZXJ0aWVzUmVpZmllZCh2bSkpCi0gICAgICAgIGdldENsYXNzUHJvcGVydHlOYW1lcyhn
bG9iYWxPYmplY3QsIG9iamVjdC0+Y2xhc3NJbmZvKHZtKSwgcHJvcGVydHlOYW1lcywgbW9kZSk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCFt
b2RlLmluY2x1ZGVKU09iamVjdFByb3BlcnRpZXMoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIG9iamVjdC0+c3RydWN0dXJlKHZtKS0+Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUo
dm0sIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIG1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duU3Bl
Y2lhbFByb3BlcnR5TmFtZXModGhpcywgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2Rl
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOworCisgICAgZ2V0Tm9u
UmVpZmllZFN0YXRpY1Byb3BlcnR5TmFtZXModm0sIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAg
IHN0cnVjdHVyZSh2bSktPmdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKHZtLCBwcm9wZXJ0
eU5hbWVzLCBtb2RlKTsKKyAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwogfQogCiBkb3Vi
bGUgSlNPYmplY3Q6OnRvTnVtYmVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0
CkBAIC0zODM3LDQxICszODMyLDYgQEAgdWludDMyX3QgSlNPYmplY3Q6OmdldEVudW1lcmFibGVM
ZW5ndGgoSgogICAgIH0KIH0KIAotdm9pZCBKU09iamVjdDo6Z2V0U3RydWN0dXJlUHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCi17Ci0g
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIG9iamVjdC0+c3RydWN0dXJlKHZt
KS0+Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUodm0sIHByb3BlcnR5TmFtZXMsIG1vZGUp
OwotfQotCi12b2lkIEpTT2JqZWN0OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCi17Ci0gICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmpl
Y3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKG1vZGUsIEpT
T2JqZWN0UHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB2b2lkKCkpOwotCi0gICAgSlNWYWx1ZSBuZXh0UHJvdG8gPSBvYmplY3QtPmdldFBy
b3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOwotICAgIGlmIChuZXh0UHJvdG8uaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBhc09iamVjdChuZXh0UHJvdG8pOwotICAgIHdo
aWxlICh0cnVlKSB7Ci0gICAgICAgIGlmIChwcm90b3R5cGUtPnN0cnVjdHVyZSh2bSktPnR5cGVJ
bmZvKCkub3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcygpKSB7Ci0gICAgICAgICAgICBzY29wZS5y
ZWxlYXNlKCk7Ci0gICAgICAgICAgICBwcm90b3R5cGUtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0UHJv
cGVydHlOYW1lcyhwcm90b3R5cGUsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgcHJvdG90eXBlLT5tZXRo
b2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMocHJvdG90eXBlLCBnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZXMsIG1vZGUpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOwotICAgICAgICBuZXh0UHJvdG8gPSBwcm90b3R5cGUtPmdldFByb3RvdHlwZSh2
bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9p
ZCgpKTsKLSAgICAgICAgaWYgKG5leHRQcm90by5pc051bGwoKSkKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBwcm90b3R5cGUgPSBhc09iamVjdChuZXh0UHJvdG8pOwotICAgIH0KLX0KLQog
Ly8gSW1wbGVtZW50cyBHZXRNZXRob2QoTywgUCkgaW4gc2VjdGlvbiA3LjMuOSBvZiB0aGUgc3Bl
Yy4KIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5k
ZXguaHRtbCNzZWMtZ2V0bWV0aG9kCiBKU1ZhbHVlIEpTT2JqZWN0OjpnZXRNZXRob2QoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbERhdGEmIGNhbGxEYXRhLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY3
NCwxMyArNjc0LDE1IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGhhc0lu
c3RhbmNlKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZGVmYXVs
dEhhc0luc3RhbmNlKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVQ
cm9wZXJ0eSk7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgbWF4aW11bVByb3RvdHlwZUNoYWluRGVwdGggPSA0MDAwMDsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNHbG9iYWxPYmplY3QqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01vZGUpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2Jh
bE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duU3BlY2lhbFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVu
dW1Qcm9wZXJ0aWVzTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBnZXRPd25JbmRl
eGVkUHJvcGVydHlOYW1lcyhKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IERvbnRFbnVtUHJvcGVydGllc01vZGUpOworICAgIHZvaWQgZ2V0Tm9uUmVpZmllZFN0YXRpY1By
b3BlcnR5TmFtZXMoVk0mLCBQcm9wZXJ0eU5hbWVBcnJheSYsIERvbnRFbnVtUHJvcGVydGllc01v
ZGUpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHVpbnQzMl90IGdldEVudW1lcmFi
bGVMZW5ndGgoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCopOwotICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIGdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSB0b1ByaW1pdGl2ZShKU0dsb2Jh
bE9iamVjdCosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNvbnN0Owog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGRvdWJsZSB0b051bWJlcihKU0dsb2JhbE9iamVjdCopIGNv
bnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04Nyw0ICs4Nyw1MiBAQCB2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6dmlzaXRDaGlsCiAgICAgfQogfQogCisvLyBGSVhNRTogQXNzZXJ0IHRoYXQgcHJvcGVy
dGllcyByZXR1cm5lZCBieSBnZXRPd25Qcm9wZXJ0eU5hbWVzKCkgYXJlIHJlcG9ydGVkIGVudW1l
cmFibGUgYnkgZ2V0T3duUHJvcGVydHlTbG90KCkuCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE5OTI2Cit2b2lkIGdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVz
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlLCBQcm9wZXJ0eU5h
bWVBcnJheSYgcHJvcGVydHlOYW1lcywgdWludDMyX3QmIGluZGV4ZWRMZW5ndGgsIHVpbnQzMl90
JiBzdHJ1Y3R1cmVQcm9wZXJ0eUNvdW50KQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7CisgICAgaWYgKHN0cnVj
dHVyZS0+Y2FuQWNjZXNzUHJvcGVydGllc1F1aWNrbHlGb3JFbnVtZXJhdGlvbigpICYmIGluZGV4
ZWRMZW5ndGggPT0gYmFzZS0+Z2V0QXJyYXlMZW5ndGgoKSkgeworICAgICAgICAvLyBJbmxpbmVk
IEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoKQorICAgICAgICBiYXNlLT5t
ZXRob2RUYWJsZSh2bSktPmdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKGJhc2UsIGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisKKyAgICAgICAgYmFz
ZS0+Z2V0Tm9uUmVpZmllZFN0YXRpY1Byb3BlcnR5TmFtZXModm0sIHByb3BlcnR5TmFtZXMsIERv
bnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpOworICAgICAgICB1bnNpZ25lZCBub25TdHJ1
Y3R1cmVQcm9wZXJ0eUNvdW50ID0gcHJvcGVydHlOYW1lcy5zaXplKCk7CisgICAgICAgIHN0cnVj
dHVyZS0+Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUodm0sIHByb3BlcnR5TmFtZXMsIERv
bnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpOworICAgICAgICBzY29wZS5hc3NlcnROb0V4
Y2VwdGlvbigpOworCisgICAgICAgIC8vIHxwcm9wZXJ0eU5hbWVzfCBjb250YWlucyBwcm9wZXJ0
aWVzIGV4Y2x1c2l2ZWx5IGZyb20gdGhlIHN0cnVjdHVyZS4KKyAgICAgICAgaWYgKCFub25TdHJ1
Y3R1cmVQcm9wZXJ0eUNvdW50KQorICAgICAgICAgICAgc3RydWN0dXJlUHJvcGVydHlDb3VudCA9
IHByb3BlcnR5TmFtZXMuc2l6ZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2UtPm1ldGhv
ZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhiYXNlLCBnbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOworICAgICAgICAvLyB8cHJvcGVydHlOYW1l
c3wgY29udGFpbnMgYWxsIGluZGV4ZWQgcHJvcGVydGllcywgc28gZGlzYWJsZSBlbnVtZXJhdGlv
biBiYXNlZCBvbiBnZXRFbnVtZXJhYmxlTGVuZ3RoKCkuCisgICAgICAgIGluZGV4ZWRMZW5ndGgg
PSAwOworICAgIH0KKworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBiYXNlOworICAgIHVuc2lnbmVk
IHByb3RvdHlwZUNvdW50ID0gMDsKKworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIEpTVmFs
dWUgcHJvdG90eXBlID0gb2JqZWN0LT5nZXRQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAgICAgIGlmIChw
cm90b3R5cGUuaXNOdWxsKCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoVU5M
SUtFTFkoKytwcm90b3R5cGVDb3VudCA+IEpTT2JqZWN0OjptYXhpbXVtUHJvdG90eXBlQ2hhaW5E
ZXB0aCkpIHsKKyAgICAgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgb2Jq
ZWN0ID0gYXNPYmplY3QocHJvdG90eXBlKTsKKyAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2
bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IuaAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMSw2ICsxMDEsOCBAQCBwcml2YXRlOgogICAgIHVpbnQzMl90IG1fY2FjaGVkSW5s
aW5lQ2FwYWNpdHk7CiB9OwogCit2b2lkIGdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKEpTR2xv
YmFsT2JqZWN0KiwgSlNPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIHVpbnQzMl90JiBpbmRl
eGVkTGVuZ3RoLCB1aW50MzJfdCYgc3RydWN0dXJlUHJvcGVydHlDb3VudCk7CisKIGlubGluZSBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHByb3BlcnR5TmFtZUVudW1lcmF0b3IoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2UpCiB7CiAgICAgVk0mIHZtID0gZ2V0
Vk0oZ2xvYmFsT2JqZWN0KTsKQEAgLTExNywyMiArMTE5LDggQEAgaW5saW5lIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvciogcHJvcGVydAogICAgICAgICByZXR1cm4gZW51bWVyYXRvcjsKIAogICAg
IHVpbnQzMl90IG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMgPSAwOwotCiAgICAgUHJvcGVydHlO
YW1lQXJyYXkgcHJvcGVydHlOYW1lcyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJp
dmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUpOwotCi0gICAgaWYgKHN0cnVjdHVyZS0+Y2FuQWNjZXNz
UHJvcGVydGllc1F1aWNrbHlGb3JFbnVtZXJhdGlvbigpICYmIGluZGV4ZWRMZW5ndGggPT0gYmFz
ZS0+Z2V0QXJyYXlMZW5ndGgoKSkgewotICAgICAgICBiYXNlLT5tZXRob2RUYWJsZSh2bSktPmdl
dFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoYmFzZSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVz
LCBFbnVtZXJhdGlvbk1vZGUoKSk7Ci0gICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7
Ci0KLSAgICAgICAgbnVtYmVyU3RydWN0dXJlUHJvcGVydGllcyA9IHByb3BlcnR5TmFtZXMuc2l6
ZSgpOwotCi0gICAgICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0R2VuZXJpY1Byb3BlcnR5
TmFtZXMoYmFzZSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUo
KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gR2VuZXJpYyBwcm9wZXJ0eSBuYW1lcyB2ZWN0
b3IgY29udGFpbnMgYWxsIGluZGV4ZWQgcHJvcGVydHkgbmFtZXMuCi0gICAgICAgIC8vIFNvIGRp
c2FibGUgaW5kZXhlZCBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBwaGFzZSBieSBzZXR0aW5nIHxpbmRl
eGVkTGVuZ3RofCB0byAwLgotICAgICAgICBpbmRleGVkTGVuZ3RoID0gMDsKLSAgICAgICAgYmFz
ZS0+bWV0aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzKGJhc2UsIGdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwotICAgIH0KKyAgICBnZXRFbnVtZXJh
YmxlUHJvcGVydHlOYW1lcyhnbG9iYWxPYmplY3QsIGJhc2UsIHByb3BlcnR5TmFtZXMsIGluZGV4
ZWRMZW5ndGgsIG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgQVNTRVJUKHByb3BlcnR5TmFtZXMuc2l6ZSgp
IDwgVUlOVDMyX01BWCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b3h5LmNwcAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSwzMiArMTE1LDEzIEBAIGJvb2wg
SlNQcm94eTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2UKICAgICByZXR1cm4gdGhpc09iamVj
dC0+dGFyZ2V0KCktPm1ldGhvZFRhYmxlKGdsb2JhbE9iamVjdC0+dm0oKSktPmRlbGV0ZVByb3Bl
cnR5QnlJbmRleCh0aGlzT2JqZWN0LT50YXJnZXQoKSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWUpOwogfQogCi12b2lkIEpTUHJveHk6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQotewotICAgIEpTUHJveHkqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNQcm94eSo+KG9iamVjdCk7Ci0gICAgdGhpc09iamVjdC0+dGFyZ2V0KCkt
Pm1ldGhvZFRhYmxlKGdsb2JhbE9iamVjdC0+dm0oKSktPmdldFByb3BlcnR5TmFtZXModGhpc09i
amVjdC0+dGFyZ2V0KCksIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7Ci19Ci0K
IHVpbnQzMl90IEpTUHJveHk6OmdldEVudW1lcmFibGVMZW5ndGgoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNPYmplY3QqIG9iamVjdCkKIHsKICAgICBKU1Byb3h5KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTUHJveHkqPihvYmplY3QpOwogICAgIHJldHVybiB0aGlzT2JqZWN0LT50YXJn
ZXQoKS0+bWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0LT52bSgpKS0+Z2V0RW51bWVyYWJsZUxlbmd0
aChnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPnRhcmdldCgpKTsKIH0KIAotdm9pZCBKU1Byb3h5
OjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSkKLXsKLSAgICAvLyBTa2lwIHRoZSBz
dHJ1Y3R1cmUgbG9vcCwgc2luY2UgaXQgaXMgaW52YWxpZCBmb3IgcHJveGllcy4KLX0KLQotdm9p
ZCBKU1Byb3h5OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCi17Ci0gICAgSlNQcm94eSogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1Byb3h5Kj4ob2JqZWN0KTsKLSAgICAvLyBHZXQgKmFsbCogb2YgdGhlIHByb3BlcnR5
IG5hbWVzLCBub3QganVzdCB0aGUgZ2VuZXJpYyBvbmVzLCBzaW5jZSB3ZSBza2lwcGVkIHRoZSBz
dHJ1Y3R1cmUKLSAgICAvLyBvbmVzIGFib3ZlLgotICAgIHRoaXNPYmplY3QtPnRhcmdldCgpLT5t
ZXRob2RUYWJsZShnbG9iYWxPYmplY3QtPnZtKCkpLT5nZXRQcm9wZXJ0eU5hbWVzKHRoaXNPYmpl
Y3QtPnRhcmdldCgpLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwotfQotCi12
b2lkIEpTUHJveHk6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMs
IEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Byb3h5OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7
CiAgICAgSlNQcm94eSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3h5Kj4ob2JqZWN0KTsKICAg
ICB0aGlzT2JqZWN0LT50YXJnZXQoKS0+bWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0LT52bSgpKS0+
Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LT50YXJnZXQoKSwgZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWVzLCBtb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb3h5LmgJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIGNsYXNzIEpTUHJveHkgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6
CiAgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmluYWxPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJy
aWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRQcm90b3R5cGUgfCBJ
bnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJv
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dl
dE93blByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRQcm90b3R5cGUgfCBJbnRlcmNlcHRzR2V0
T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvOwogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzPgogICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpAQCAtOTUsMTEgKzk1LDggQEAgcHJvdGVjdGVk
OgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDZWxsKiwg
SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIERlbGV0ZVByb3BlcnR5U2xvdCYpOwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0Nl
bGwqLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3Qq
LCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHVpbnQzMl90IGdldEVudW1lcmFibGVMZW5n
dGgoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCopOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIGdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9i
amVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2Jq
ZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3Jp
cHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBi
b29sIHNldFByb3RvdHlwZShKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSwgYm9v
bCBzaG91bGRUaHJvd0lmQ2FudFNldCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpT
VmFsdWUgZ2V0UHJvdG90eXBlKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmpl
Y3QuY3BwCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBA
QCBib29sIEpTU3ltYm9sVGFibGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5CiAgICAgcmV0dXJuIEJh
c2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
LCBzbG90KTsKIH0KIAotdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2Rl
KQordm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcyhK
U09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU1N5bWJvbFRhYmxlT2JqZWN0
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihvYmplY3QpOwpAQCAt
NjEsMTUgKzYxLDEzIEBAIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duTm9uSW5kZXgK
ICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcih0aGlzT2JqZWN0LT5zeW1ib2xUYWJs
ZSgpLT5tX2xvY2spOwogICAgICAgICBTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBlbmQgPSB0
aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5lbmQobG9ja2VyKTsKICAgICAgICAgZm9yIChTeW1i
b2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmJl
Z2luKGxvY2tlcik7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKCEoaXQtPnZh
bHVlLmdldEF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkgfHwgbW9k
ZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpIHsKKyAgICAgICAgICAgIGlmIChtb2RlID09
IERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUgfHwgIWl0LT52YWx1ZS5pc0RvbnRFbnVt
KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoaXQtPmtleS0+aXNTeW1ib2woKSAmJiAhcHJvcGVy
dHlOYW1lcy5pbmNsdWRlU3ltYm9sUHJvcGVydGllcygpKQogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpm
cm9tVWlkKHZtLCBpdC0+a2V5LmdldCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9Ci0KLSAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwg
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1i
b2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEy
ICszOSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEpTU3ltYm9sVGFibGVPYmplY3QgOiBw
dWJsaWMgSlNTY29wZSB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTU2NvcGU7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgT3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lczsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lczsKIAogICAgIFN5bWJvbFRhYmxl
KiBzeW1ib2xUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ltYm9sVGFibGUuZ2V0KCk7IH0KICAg
ICAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0Nl
bGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3du
U3BlY2lhbFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgCiAgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZlN5bWJvbFRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpT
U3ltYm9sVGFibGVPYmplY3QsIG1fc3ltYm9sVGFibGUpOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmgJKHJldmlzaW9uIDI3MTExNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZUluZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtNDgsMTMgKzQ4LDggQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBUeXBlSW5mb1BlckNl
bAogLy8gT3V0IG9mIGxpbmUgZmxhZ3MuCiAKIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgSW1w
bGVtZW50c0hhc0luc3RhbmNlID0gMSA8PCA4Owotc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBP
dmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzID0gMSA8PCA5OwotLy8gT3ZlcnJpZGVzQW55Rm9ybU9m
R2V0UHJvcGVydHlOYW1lcyBtZWFucyB0aGF0IHdlIGNhbm5vdCBtYWtlIGFzc3VtcHRpb25zIGFi
b3V0Ci0vLyB0aGUgY2FjaGVhYmlsaXR5IG9yIGVudW1lcmFiaWxpdHkgb2YgcHJvcGVydHkgbmFt
ZXMsIGFuZCB0aGVyZWZvcmUsIHdlJ2xsIG5lZWQKLS8vIHRvIGRpc2FibGUgY2VydGFpbiBvcHRp
bWl6YXRpb25zLiBUaGlzIGZsYWcgc2hvdWxkIGJlIHNldCBpZiBvbmUgb3IgbW9yZSBvZiB0aGUK
LS8vIGZvbGxvd2luZyBPYmplY3QgbWV0aG9kcyBhcmUgb3ZlcnJpZGRlbjoKLS8vICAgICBnZXRP
d25Qcm9wZXJ0eU5hbWVzLCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMsIGdldFByb3BlcnR5
TmFtZXMKLXN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgT3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJv
cGVydHlOYW1lcyA9IDEgPDwgMTA7CitzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIE92ZXJyaWRl
c0dldE93blByb3BlcnR5TmFtZXMgPSAxIDw8IDk7CitzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IE92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzID0gMSA8PCAxMDsKIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgUHJvaGliaXRzUHJvcGVydHlDYWNoaW5nID0gMSA8PCAxMTsKIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgR2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmUgPSAxIDw8
IDEyOwogc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBOZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0
Y2hwb2ludHMgPSAxIDw8IDEzOwpAQCAtMTAzLDggKzk4LDkgQEAgcHVibGljOgogICAgIHN0YXRp
YyBib29sIHBlckNlbGxCaXQoSW5saW5lVHlwZUZsYWdzIGZsYWdzKSB7IHJldHVybiBmbGFncyAm
IFR5cGVJbmZvUGVyQ2VsbEJpdDsgfQogICAgIGJvb2wgb3ZlcnJpZGVzVG9UaGlzKCkgY29uc3Qg
eyByZXR1cm4gaXNTZXRPbkZsYWdzMTxPdmVycmlkZXNUb1RoaXM+KCk7IH0KICAgICBib29sIHN0
cnVjdHVyZUlzSW1tb3J0YWwoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPFN0cnVjdHVy
ZUlzSW1tb3J0YWw+KCk7IH0KLSAgICBib29sIG92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMoKSBj
b25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXM+KCk7
IH0KLSAgICBib29sIG92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMoKSBjb25zdCB7
IHJldHVybiBpc1NldE9uRmxhZ3MyPE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXM+
KCk7IH0KKyAgICBib29sIG92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJl
dHVybiBpc1NldE9uRmxhZ3MyPE92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXM+KCk7IH0KKyAg
ICBib29sIG92ZXJyaWRlc0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1
cm4gaXNTZXRPbkZsYWdzMjxPdmVycmlkZXNHZXRPd25TcGVjaWFsUHJvcGVydHlOYW1lcz4oKTsg
fQorICAgIGJvb2wgb3ZlcnJpZGVzQW55Rm9ybU9mR2V0T3duUHJvcGVydHlOYW1lcygpIGNvbnN0
IHsgcmV0dXJuIG92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMoKSB8fCBvdmVycmlkZXNHZXRP
d25TcGVjaWFsUHJvcGVydHlOYW1lcygpOyB9CiAgICAgYm9vbCBvdmVycmlkZXNHZXRQcm90b3R5
cGUoKSBjb25zdCB7IHJldHVybiBpc1NldE9uRmxhZ3MyPE92ZXJyaWRlc0dldFByb3RvdHlwZT4o
KTsgfQogICAgIGJvb2wgcHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkgY29uc3QgeyByZXR1cm4g
aXNTZXRPbkZsYWdzMjxQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc+KCk7IH0KICAgICBib29sIGdl
dE93blByb3BlcnR5U2xvdElzSW1wdXJlKCkgY29uc3QgeyByZXR1cm4gaXNTZXRPbkZsYWdzMjxH
ZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZT4oKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjcx
MTE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDcgQEAgSlNWYWx1ZSBvYmplY3RDb25z
dHJ1Y3RvckdldE93blByb3BlcnR5RAogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgUHJvcGVydHlO
YW1lQXJyYXkgcHJvcGVydGllcyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJv
bHMsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxl
KHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydGll
cywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKKyAg
ICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGds
b2JhbE9iamVjdCwgcHJvcGVydGllcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIEpTT2JqZWN0KiBk
ZXNjcmlwdG9ycyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCk7CkBAIC0yOTQs
NyArMjk0LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKG9iamVjdENvbnN0cnVjdAogICAg
ICAgICAgICAgYXV0byBjYW5QZXJmb3JtRmFzdFByb3BlcnR5RW51bWVyYXRpb25Gb3JPYmplY3RB
c3NpZ24gPSBbXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgICAgICBpZiAo
c3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgpKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cnVj
dHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzKCkpCisg
ICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNBbnlGb3Jt
T2ZHZXRPd25Qcm9wZXJ0eU5hbWVzKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW5kZXhlZCBwcm9wZXJ0aWVzIGNhbiBiZSBo
YW5kbGVkLgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xODUzNTgKQEAgLTM1Nyw3ICszNTcsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04ob2JqZWN0Q29uc3RydWN0CiAgICAgICAgIHRhcmdldENhblBlcmZvcm1GYXN0UHV0ID0g
ZmFsc2U7CiAKICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyh2bSwgUHJvcGVy
dHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRl
KTsKLSAgICAgICAgc291cmNlLT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMo
c291cmNlLCBnbG9iYWxPYmplY3QsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51
bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CisgICAgICAgIHNvdXJjZS0+bWV0aG9kVGFibGUo
dm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0aWVz
LCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgICAgICB1bnNpZ25lZCBudW1Qcm9wZXJ0aWVzID0g
cHJvcGVydGllcy5zaXplKCk7CkBAIC00MDMsNyArNDAzLDcgQEAgSlNDX0RFRklORV9IT1NUX0ZV
TkNUSU9OKG9iamVjdENvbnN0cnVjdAogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKHZtLCBQcm9wZXJ0eU5hbWVN
b2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7Ci0gICAgdGFyZ2V0LT5t
ZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0LCBnbG9iYWxPYmplY3Qs
IHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNs
dWRlKSk7CisgICAgdGFyZ2V0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMo
dGFyZ2V0LCBnbG9iYWxPYmplY3QsIHByb3BlcnRpZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGU6
OkluY2x1ZGUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICB1
bnNpZ25lZCBpbmRleCA9IDA7CkBAIC01NTcsNyArNTU3LDcgQEAgc3RhdGljIEpTVmFsdWUgZGVm
aW5lUHJvcGVydGllcyhKU0dsb2JhbAogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXModm0sIFByb3Bl
cnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVk
ZSk7Ci0gICAgYXNPYmplY3QocHJvcGVydGllcyktPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJv
cGVydHlOYW1lcyhhc09iamVjdChwcm9wZXJ0aWVzKSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkpOwor
ICAgIGFzT2JqZWN0KHByb3BlcnRpZXMpLT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5
TmFtZXMoYXNPYmplY3QocHJvcGVydGllcyksIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywg
RG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKICAgICBzaXplX3QgbnVtUHJvcGVydGllcyA9IHByb3BlcnR5TmFtZXMu
c2l6ZSgpOwogICAgIFZlY3RvcjxQcm9wZXJ0eURlc2NyaXB0b3I+IGRlc2NyaXB0b3JzOwpAQCAt
NjQ4LDcgKzY0OCw3IEBAIGJvb2wgc2V0SW50ZWdyaXR5TGV2ZWwoSlNHbG9iYWxPYmplY3QqIGcK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGll
cyh2bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMsIFByaXZhdGVTeW1ib2xN
b2RlOjpFeGNsdWRlKTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVy
dHlOYW1lcyhvYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydGllcywgRW51bWVyYXRpb25Nb2Rl
KERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKKyAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVy
dGllcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZmFsc2UpOwogCiAgICAgUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IHByb3BlcnRpZXMuZW5kKCk7CkBAIC02OTUsNyArNjk1LDcgQEAgYm9vbCB0
ZXN0SW50ZWdyaXR5TGV2ZWwoSlNHbG9iYWxPYmplY3QqIAogCiAgICAgLy8gNi4gTGV0IGtleXMg
YmUgPyBPLltbT3duUHJvcGVydHlLZXlzXV0oKS4KICAgICBQcm9wZXJ0eU5hbWVBcnJheSBrZXlz
KHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scywgUHJpdmF0ZVN5bWJvbE1v
ZGU6OkV4Y2x1ZGUpOwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0
eU5hbWVzKG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBrZXlzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVu
dW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0p
LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xvYmFsT2JqZWN0LCBrZXlzLCBEb250RW51
bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogCiAgICAgLy8gNy4gRm9yIGVhY2ggZWxlbWVudCBrIG9mIGtleXMsIGRvCkBAIC04
NzcsNyArODc3LDcgQEAgSlNBcnJheSogb3duUHJvcGVydHlLZXlzKEpTR2xvYmFsT2JqZWN0Kgog
ICAgIH0KIAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXModm0sIHByb3BlcnR5TmFt
ZU1vZGUsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKTsKLSAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGdsb2JhbE9iamVjdCwgcHJvcGVy
dGllcywgRW51bWVyYXRpb25Nb2RlKGRvbnRFbnVtUHJvcGVydGllc01vZGUpKTsKKyAgICBvYmpl
Y3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGdsb2JhbE9i
amVjdCwgcHJvcGVydGllcywgZG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICBpZiAocHJvcGVydHlOYW1lTW9kZSAh
PSBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scykgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkocmV2aXNpb24gMjcxMTE2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OTAsMTAgKzg5MCw5IEBAIHZvaWQgUHJveHlPYmplY3Q6OnBlcmZvcm1H
ZXRPd25Qcm9wZXJ0eU4KICAgICBKU1ZhbHVlIG93bktleXNNZXRob2QgPSBoYW5kbGVyLT5nZXRN
ZXRob2QoZ2xvYmFsT2JqZWN0LCBjYWxsRGF0YSwgbWFrZUlkZW50aWZpZXIodm0sICJvd25LZXlz
IiksICInb3duS2V5cycgcHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNh
bGxhYmxlIl9zKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAg
IEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsKLSAgICBFbnVtZXJhdGlvbk1vZGUg
ZW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpOwogICAgIGlm
IChvd25LZXlzTWV0aG9kLmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgc2NvcGUucmVsZWFzZSgp
OwotICAgICAgICB0YXJnZXQtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyh0
YXJnZXQsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgZW51bWVyYXRpb25Nb2RlKTsKKyAg
ICAgICAgdGFyZ2V0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0
LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGU6Oklu
Y2x1ZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC05NDYsNyArOTQ1LDcgQEAgdm9p
ZCBQcm94eU9iamVjdDo6cGVyZm9ybUdldE93blByb3BlcnR5TgogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHZvaWQoKSk7CiAKICAgICBQcm9wZXJ0eU5hbWVBcnJheSB0YXJnZXRLZXlz
KHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scywgUHJpdmF0ZVN5bWJvbE1v
ZGU6OkV4Y2x1ZGUpOwotICAgIHRhcmdldC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0
eU5hbWVzKHRhcmdldCwgZ2xvYmFsT2JqZWN0LCB0YXJnZXRLZXlzLCBlbnVtZXJhdGlvbk1vZGUp
OworICAgIHRhcmdldC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdl
dCwgZ2xvYmFsT2JqZWN0LCB0YXJnZXRLZXlzLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNs
dWRlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIFZlY3Rv
cjxVbmlxdWVkU3RyaW5nSW1wbCo+IHRhcmdldENvbmZpZ3VyYWJsZUtleXM7CiAgICAgVmVjdG9y
PFVuaXF1ZWRTdHJpbmdJbXBsKj4gdGFyZ2V0Tm9uQ29uZmlndXJhYmxlS2V5czsKQEAgLTEwMTMs
MzcgKzEwMTIsMTUgQEAgdm9pZCBQcm94eU9iamVjdDo6cGVyZm9ybUdldE93bkVudW1lcmFibAog
ICAgIH0KIH0KIAotdm9pZCBQcm94eU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lQXJyYXksIEVudW1lcmF0aW9uTW9kZSBlbnVtZXJhdGlvbk1vZGUpCit2
b2lkIFByb3h5T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVBcnJheSwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIFByb3h5T2JqZWN0
KiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5T2JqZWN0Kj4ob2JqZWN0KTsKLSAgICBpZiAoZW51
bWVyYXRpb25Nb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkKKyAgICBpZiAobW9kZSA9
PSBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKQogICAgICAgICB0aGlzT2JqZWN0LT5w
ZXJmb3JtR2V0T3duUHJvcGVydHlOYW1lcyhnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZUFycmF5
KTsKICAgICBlbHNlCiAgICAgICAgIHRoaXNPYmplY3QtPnBlcmZvcm1HZXRPd25FbnVtZXJhYmxl
UHJvcGVydHlOYW1lcyhnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZUFycmF5KTsKIH0KIAotdm9p
ZCBQcm94eU9iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lQXJy
YXksIEVudW1lcmF0aW9uTW9kZSBlbnVtZXJhdGlvbk1vZGUpCi17Ci0gICAgTk9fVEFJTF9DQUxM
UygpOwotICAgIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZ2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWVBcnJheSwgZW51bWVyYXRpb25Nb2RlKTsKLX0KLQotdm9pZCBQcm94eU9i
amVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmpl
Y3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSkKLXsKLSAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIFByb3h5T2JqZWN0OjpnZXRTdHJ1Y3R1
cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSkKLXsKLSAgICAvLyBXZSBzaG91bGQgYWx3YXlzIGdvIGRv
d24gdGhlIGdldE93blByb3BlcnR5TmFtZXMgcGF0aC4KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotfQotCi12b2lkIFByb3h5T2JqZWN0OjpnZXRHZW5lcmljUHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQogYm9v
bCBQcm94eU9iamVjdDo6cGVyZm9ybVNldFByb3RvdHlwZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCkKIHsK
ICAgICBOT19UQUlMX0NBTExTKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm94eU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3h5T2JqZWN0LmgJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcg
QEAgY2xhc3MgUHJveHlPYmplY3QgZmluYWwgOiBwdWJsaWMgSlNOb25GaQogcHVibGljOgogICAg
IHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGEgfCBJbnRlcmNlcHRzR2V0
T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgT3ZlcnJpZGVz
R2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBP
dmVycmlkZXNHZXRQcm90b3R5cGUgfCBQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlOYW1lcyB8IE92ZXJyaWRlc0dldFByb3RvdHlwZSB8IE92ZXJyaWRlc0dldENhbGxEYXRhIHwg
SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVy
byB8IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQpAQCAtNTcsNyArNTcsNiBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChp
c0NhbGxhYmxlKQogICAgICAgICAgICAgZmxhZ3MgfD0gKEltcGxlbWVudHNIYXNJbnN0YW5jZSB8
IEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpOwogICAgICAgICBTdHJ1Y3R1cmUqIHJlc3Vs
dCA9IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oUHJveHlPYmplY3RUeXBlLCBmbGFncyksIGluZm8oKSwgTm9uQXJyYXkgfCBNYXlIYXZlSW5k
ZXhlZEFjY2Vzc29ycyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0SXNRdWlja1Byb3BlcnR5QWNjZXNz
QWxsb3dlZEZvckVudW1lcmF0aW9uKGZhbHNlKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJl
c3VsdC0+Y2FuQWNjZXNzUHJvcGVydGllc1F1aWNrbHlGb3JFbnVtZXJhdGlvbigpKTsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdC0+Y2FuQ2FjaGVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KHZtKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC04OSwxMSArODgsNyBAQCBwcml2YXRl
OgogICAgIHN0YXRpYyBib29sIHByZXZlbnRFeHRlbnNpb25zKEpTT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqKTsKICAgICBzdGF0aWMgYm9vbCBpc0V4dGVuc2libGUoSlNPYmplY3QqLCBKU0dsb2Jh
bE9iamVjdCopOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0Kiwg
SlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYs
IGJvb2wgc2hvdWxkVGhyb3cpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAg
c3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKLSAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdl
dFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICBzdGF0aWMgTk9fUkVUVVJOX0RV
RV9UT19DUkFTSCB2b2lkIGdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3Rh
dGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMg
Ym9vbCBzZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJv
dG90eXBlLCBib29sIHNob3VsZFRocm93SWZDYW50U2V0KTsKICAgICBzdGF0aWMgSlNWYWx1ZSBn
ZXRQcm90b3R5cGUoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMjcxMTE2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzUsMjggKzc1LDExIEBAIGJvb2wgUmVnRXhwT2JqZWN0OjpkZWxldGVQ
cm9wZXJ0eShKU0NlbGwKICAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkoY2VsbCwgZ2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCi12b2lkIFJlZ0V4cE9iamVjdDo6
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgUmVnRXhwT2JqZWN0OjpnZXRPd25TcGVjaWFsUHJvcGVy
dHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7
CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGlmIChtb2RlLmluY2x1ZGVE
b250RW51bVByb3BlcnRpZXMoKSkKKyAgICBpZiAobW9kZSA9PSBEb250RW51bVByb3BlcnRpZXNN
b2RlOjpJbmNsdWRlKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZCh2bS5wcm9wZXJ0eU5hbWVz
LT5sYXN0SW5kZXgpOwotICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhvYmpl
Y3QsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7Ci19Ci0KLXZvaWQgUmVnRXhw
T2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJh
dGlvbk1vZGUgbW9kZSkKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAg
aWYgKG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKQotICAgICAgICBwcm9wZXJ0eU5h
bWVzLmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5sYXN0SW5kZXgpOwotICAgIEJhc2U6OmdldFByb3Bl
cnR5TmFtZXMob2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwotfQot
Ci12b2lkIFJlZ0V4cE9iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9i
amVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHBy
b3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQotewotICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKLSAgICBpZiAobW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkp
Ci0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKHZtLnByb3BlcnR5TmFtZXMtPmxhc3RJbmRleCk7
Ci0gICAgQmFzZTo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMob2JqZWN0LCBnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiBib29sIFJlZ0V4cE9iamVjdDo6ZGVmaW5lT3du
UHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yLCBib29sIHNob3VsZFRocm93KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3
ICszMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgUmVnRXhwT2JqZWN0IGZpbmFsIDogcHVi
bGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU05vbkZp
bmFsT2JqZWN0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92
ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5h
bWVzOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRl
c0dldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCkBAIC0xNDYsOSArMTQ2LDcgQEAgcHJpdmF0ZToKICAgICB9CiAKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7Ci0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0
aW9uTW9kZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlO
YW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldEdlbmVy
aWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgZ2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCos
IFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBKU0ds
b2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9v
bCBzaG91bGRUaHJvdyk7CiAKICAgICBNYXRjaFJlc3VsdCBtYXRjaElubGluZShKU0dsb2JhbE9i
amVjdCosIEpTU3RyaW5nKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJpbmdPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ09iamVjdC5jcHAJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw3
ICsxNDUsNyBAQCBib29sIFN0cmluZ09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4CiAgICAg
cmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZ2xvYmFs
T2JqZWN0LCBpKTsKIH0KIAotdm9pZCBTdHJpbmdPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlO
YW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBTdHJp
bmdPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERv
bnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgU3RyaW5nT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cmluZ09iamVj
dCo+KG9iamVjdCk7CkBAIC0xNTMsMTcgKzE1MywxMSBAQCB2b2lkIFN0cmluZ09iamVjdDo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKCiAgICAgICAgIGludCBzaXplID0gdGhpc09iamVjdC0+aW50ZXJu
YWxWYWx1ZSgpLT5sZW5ndGgoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyAr
K2kpCiAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKHZtLCBp
KSk7CisgICAgICAgIHRoaXNPYmplY3QtPmdldE93bkluZGV4ZWRQcm9wZXJ0eU5hbWVzKGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiAgICAgfQotICAgIHJldHVybiBKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZXMsIG1vZGUpOwotfQotCi12b2lkIFN0cmluZ09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
LXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgU3RyaW5nT2JqZWN0KiB0
aGlzT2JqZWN0ID0ganNDYXN0PFN0cmluZ09iamVjdCo+KG9iamVjdCk7Ci0gICAgaWYgKG1vZGUu
aW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKQorICAgIGlmIChtb2RlID09IERvbnRFbnVtUHJv
cGVydGllc01vZGU6OkluY2x1ZGUpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKHZtLnByb3Bl
cnR5TmFtZXMtPmxlbmd0aCk7Ci0gICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXModGhpc09iamVjdCwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2Rl
KTsKKyAgICB0aGlzT2JqZWN0LT5nZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogU3RyaW5nIFN0cmluZ09iamVjdDo6dG9T
dHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgJKHJldmlzaW9uIDI3MTEx
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgU3RyaW5n
T2JqZWN0IDogcHVibGljIEpTV3JhcHBlck9iamVjdCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFz
ZSA9IEpTV3JhcHBlck9iamVjdDsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3Ro
SXNOb3RaZXJvIHwgT3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lczsKKyAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eU5hbWVzIHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybzsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBTdWJzcGFjZUFjY2VzcyBtb2Rl
PgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQpAQCAtNTksOCAr
NTksNyBAQCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxl
dGVQcm9wZXJ0eShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgRGVsZXRl
UHJvcGVydHlTbG90Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRl
UHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29s
IHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09i
amVjdCosIEpTR2xvYmFsT2JqZWN0Kik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDMy
ICsxOTQsMjAgQEAgdm9pZCBTdHJ1Y3R1cmU6OnZhbGlkYXRlRmxhZ3MoKQogICAgICAgICAmJiBt
ZXRob2RUYWJsZS5kb1B1dFByb3BlcnR5U2VjdXJpdHlDaGVjayAhPSBKU0NlbGw6OmRvUHV0UHJv
cGVydHlTZWN1cml0eUNoZWNrOwogICAgIFJFTEVBU0VfQVNTRVJUKG92ZXJyaWRlc1B1dFByb3Bl
cnR5U2VjdXJpdHlDaGVjayA9PSB0eXBlSW5mbygpLmhhc1B1dFByb3BlcnR5U2VjdXJpdHlDaGVj
aygpKTsKIAotICAgIGJvb2wgb3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyA9Ci0gICAgICAgIG1l
dGhvZFRhYmxlLmdldFByb3BlcnR5TmFtZXMgIT0gSlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMK
LSAgICAgICAgJiYgbWV0aG9kVGFibGUuZ2V0UHJvcGVydHlOYW1lcyAhPSBKU0NlbGw6OmdldFBy
b3BlcnR5TmFtZXM7CiAgICAgYm9vbCBvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzID0KICAg
ICAgICAgbWV0aG9kVGFibGUuZ2V0T3duUHJvcGVydHlOYW1lcyAhPSBKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlOYW1lcwogICAgICAgICAmJiBtZXRob2RUYWJsZS5nZXRPd25Qcm9wZXJ0eU5hbWVz
ICE9IEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlOYW1lczsKLSAgICBib29sIG92ZXJyaWRlc0dldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyA9Ci0gICAgICAgIG1ldGhvZFRhYmxlLmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyAhPSBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
Ci0gICAgICAgICYmIG1ldGhvZFRhYmxlLmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyAhPSBK
U0NlbGw6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lczsKLQotICAgIFJFTEVBU0VfQVNTRVJU
KG92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgPT0gdHlwZUluZm8oKS5vdmVycmlkZXNHZXRQcm9w
ZXJ0eU5hbWVzKCkpOwotCi0gICAgLy8gV2UgY2FuIHN0cmVuZ3RoZW4gdGhpcyBpbnRvIGFuIGVx
dWl2YWxlbmNlIHRlc3QgaWYgdGhlcmUgYXJlIG5vIGNsYXNzZXMKLSAgICAvLyB0aGF0IHNwZWNp
ZmllcyB0aGlzIGZsYWcgd2l0aG91dCBvdmVycmlkaW5nIGFueSBvZiB0aGUgZm9ybXMgb2YgZ2V0
UHJvcGVydHlOYW1lcy4KLSAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxMjk1NAotICAgIGlmIChvdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzCi0g
ICAgICAgIHx8IG92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMKLSAgICAgICAgfHwgb3ZlcnJp
ZGVzR2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKQotICAgICAgICBSRUxFQVNFX0FTU0VSVCh0
eXBlSW5mbygpLm92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMoKSk7CisgICAgUkVM
RUFTRV9BU1NFUlQob3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyA9PSB0eXBlSW5mbygpLm92
ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMoKSk7CisKKyAgICBib29sIG92ZXJyaWRlc0dldE93
blNwZWNpYWxQcm9wZXJ0eU5hbWVzID0KKyAgICAgICAgbWV0aG9kVGFibGUuZ2V0T3duU3BlY2lh
bFByb3BlcnR5TmFtZXMgIT0gSlNPYmplY3Q6OmdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzCisg
ICAgICAgICYmIG1ldGhvZFRhYmxlLmdldE93blNwZWNpYWxQcm9wZXJ0eU5hbWVzICE9IEpTQ2Vs
bDo6Z2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXM7CisgICAgUkVMRUFTRV9BU1NFUlQob3ZlcnJp
ZGVzR2V0T3duU3BlY2lhbFByb3BlcnR5TmFtZXMgPT0gdHlwZUluZm8oKS5vdmVycmlkZXNHZXRP
d25TcGVjaWFsUHJvcGVydHlOYW1lcygpKTsKIAogICAgIGJvb2wgb3ZlcnJpZGVzR2V0UHJvdG90
eXBlID0KICAgICAgICAgbWV0aG9kVGFibGUuZ2V0UHJvdG90eXBlICE9IHN0YXRpY19jYXN0PE1l
dGhvZFRhYmxlOjpHZXRQcm90b3R5cGVGdW5jdGlvblB0cj4oSlNPYmplY3Q6OmdldFByb3RvdHlw
ZSkKICAgICAgICAgJiYgbWV0aG9kVGFibGUuZ2V0UHJvdG90eXBlICE9IEpTQ2VsbDo6Z2V0UHJv
dG90eXBlOwotCi0gICAgaWYgKG92ZXJyaWRlc0dldFByb3RvdHlwZSkKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQodHlwZUluZm8oKS5vdmVycmlkZXNHZXRQcm90b3R5cGUoKSk7CisgICAgUkVMRUFT
RV9BU1NFUlQob3ZlcnJpZGVzR2V0UHJvdG90eXBlID09IHR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0
UHJvdG90eXBlKCkpOwogfQogI2Vsc2UKIGlubGluZSB2b2lkIFN0cnVjdHVyZTo6dmFsaWRhdGVG
bGFncygpIHsgfQpAQCAtMTIwMyw3ICsxMTkxLDcgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJl
OjphdHRyaWJ1dGVDaGFuZwogICAgICAgICB9KTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmU6OmdldFBy
b3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKFZNJiB2bSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBTdHJ1Y3R1cmU6OmdldFByb3Bl
cnR5TmFtZXNGcm9tU3RydWN0dXJlKFZNJiB2bSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAgICBQcm9wZXJ0eVRhYmxl
KiB0YWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGVJZk5vdEVtcHR5KHZtKTsKICAgICBpZiAoIXRh
YmxlKQpAQCAtMTIxMyw3ICsxMjAxLDcgQEAgdm9pZCBTdHJ1Y3R1cmU6OmdldFByb3BlcnR5TmFt
ZXNGcm9tU3RydQogICAgIGJvb2wgZm91bmRTeW1ib2wgPSBmYWxzZTsKIAogICAgIGF1dG8gY2hl
Y2tEb250RW51bUFuZEFkZCA9IFsmXShQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyKSB7Ci0g
ICAgICAgIGlmICghKGl0ZXItPmF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pIHx8IG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKSB7CisgICAgICAgIGlmICht
b2RlID09IERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUgfHwgIShpdGVyLT5hdHRyaWJ1
dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSkgewogICAgICAgICAgICAgaWYgKGtu
b3duVW5pcXVlKQogICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkVW5jaGVja2VkKGl0
ZXItPmtleSk7CiAgICAgICAgICAgICBlbHNlCkBAIC0xNDkyLDYgKzE0ODAsOCBAQCBib29sIFN0
cnVjdHVyZTo6Y2FuQWNjZXNzUHJvcGVydGllc1F1aWNrCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpZiAoaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmICh0eXBlSW5mbygpLm92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjcxMTE2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUzMCw3ICs1MzAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDYWNoZWRQcm9wZXJ0eU5h
bWVzKFZNJiwgQ2FjaGVkUHJvcGVydHlOYW1lc0tpbmQsIEpTSW1tdXRhYmxlQnV0dGVyZmx5Kik7
CiAgICAgYm9vbCBjYW5DYWNoZU93blByb3BlcnR5TmFtZXMoKSBjb25zdDsKIAotICAgIHZvaWQg
Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoVk0mLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7CisgICAgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShW
TSYsIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAKICAgICBK
U1ZhbHVlIGNhY2hlZFNwZWNpYWxQcm9wZXJ0eShDYWNoZWRTcGVjaWFsUHJvcGVydHlLZXkga2V5
KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjc1LDcgKzI3
NSw3IEBAIGlubGluZSBib29sIFN0cnVjdHVyZTo6Y2FuQ2FjaGVPd25Qcm9wZXIKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGlmIChoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUo
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAodHlwZUluZm8oKS5vdmVycmlkZXNB
bnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzKCkpCisgICAgaWYgKHR5cGVJbmZvKCkub3ZlcnJpZGVz
QW55Rm9ybU9mR2V0T3duUHJvcGVydHlOYW1lcygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNE
b2xsYXJWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pT
RG9sbGFyVk0uY3BwCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvSlNEb2xsYXJWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0Myw3ICs1NDMsNyBAQCBz
dGF0aWMgSlNDX0RFQ0xBUkVfQ1VTVE9NX0dFVFRFUihydW50aW1lCiBjbGFzcyBSdW50aW1lQXJy
YXkgOiBwdWJsaWMgSlNBcnJheSB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0FycmF5IEJhc2U7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IE92ZXJyaWRl
c0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXM7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hl
bkxlbmd0aElzTm90WmVybzsKIAogSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnVzZWQtY29uc3Qt
dmFyaWFibGUiKQogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0g
ZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNyBAQAorMjAyMS0wMS0wMSAg
QWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CisKKyAgICAgICAgW0pTQ10g
U2ltcGxpZnkgZ2V0KlByb3BlcnR5TmFtZXMoKSBtZXRob2RzIGFuZCBFbnVtZXJhdGlvbk1vZGUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjk1NAor
CisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgQWRqdXN0IGZv
ciBjaGFuZ2VzIGluIEpTQydzIE1ldGhvZFRhYmxlLCBUeXBlSW5mbywgYW5kIEVudW1lcmF0aW9u
TW9kZS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAg
ICAgICAqIGFuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpw
cm9jZXNzS2V5ZnJhbWVMaWtlT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNv
bnZlcnRSZWNvcmQuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlOYW1lcyk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU0xvY2F0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U1JlbW90ZURPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25l
U2VyaWFsaXplcjo6c2VyaWFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlR2V0T3duUHJvcGVydHlOYW1lcyk6Cisg
ICAgICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTLyo6IFVwZGF0ZWQuCisgICAgICAgICogYnJpZGdlL05QX2pzb2JqZWN0LmNwcDoKKyAgICAg
ICAgKiBicmlkZ2UvcnVudGltZV9hcnJheS5jcHA6CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJh
eTo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfYXJyYXku
aDoKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9vYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpC
aW5kaW5nczo6UnVudGltZU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICog
YnJpZGdlL3J1bnRpbWVfb2JqZWN0Lmg6CisKIDIwMjAtMTItMzEgIFphbGFuIEJ1anRhcyAgPHph
bGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIEhvcml6b250YWwgcGFkZGluZy9i
b3JkZXIgbWFrZXMgdGhlIGlubGluZSBib3ggbm9uLWVtcHR5CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAJKHJldmlzaW9uIDI3MTExNikKKysrIFNv
dXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIzOCw3ICsyMzgsNyBAQCBzdGF0aWMgaW5saW5lIEV4Y2VwdGlvbk9yPEtleWZyYW1lRWZm
ZWN0CiAKICAgICAvLyAzLiBMZXQgaW5wdXQgcHJvcGVydGllcyBiZSB0aGUgcmVzdWx0IG9mIGNh
bGxpbmcgdGhlIEVudW1lcmFibGVPd25OYW1lcyBvcGVyYXRpb24gd2l0aCBrZXlmcmFtZSBpbnB1
dCBhcyB0aGUgb2JqZWN0LgogICAgIFByb3BlcnR5TmFtZUFycmF5IGlucHV0UHJvcGVydGllcyh2
bSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgUHJpdmF0ZVN5bWJvbE1vZGU6OkV4Y2x1ZGUp
OwotICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKGtleWZyYW1lc0lucHV0LmdldCgp
LCAmbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5wdXRQcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUo
KSk7CisgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoa2V5ZnJhbWVzSW5wdXQuZ2V0
KCksICZsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbnB1dFByb3BlcnRpZXMsIERvbnRFbnVtUHJvcGVy
dGllc01vZGU6OkV4Y2x1ZGUpOwogCiAgICAgLy8gNC4gTWFrZSB1cCBhIG5ldyBsaXN0IGFuaW1h
dGlvbiBwcm9wZXJ0aWVzIHRoYXQgY29uc2lzdHMgb2YgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzIHRo
YXQgYXJlIGluIGJvdGggaW5wdXQgcHJvcGVydGllcyBhbmQgYW5pbWF0YWJsZQogICAgIC8vICAg
IHByb3BlcnRpZXMsIG9yIHdoaWNoIGFyZSBpbiBpbnB1dCBwcm9wZXJ0aWVzIGFuZCBjb25mb3Jt
IHRvIHRoZSA8Y3VzdG9tLXByb3BlcnR5LW5hbWU+IHByb2R1Y3Rpb24uCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRSZWNvcmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRSZWNvcmQuaAkocmV2aXNpb24g
MjcxMTE2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0UmVjb3Jk
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBwcml2YXRlOgogICAgIAogICAg
ICAgICAvLyA0LiBMZXQga2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNdXSgpLgogICAgICAg
ICBKU0M6OlByb3BlcnR5TmFtZUFycmF5IGtleXModm0sIEpTQzo6UHJvcGVydHlOYW1lTW9kZTo6
U3RyaW5ncywgSlNDOjpQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7Ci0gICAgICAgIG9iamVj
dC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgJmxleGljYWxH
bG9iYWxPYmplY3QsIGtleXMsIEpTQzo6RW51bWVyYXRpb25Nb2RlKEpTQzo6RG9udEVudW1Qcm9w
ZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+
Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsICZsZXhpY2FsR2xvYmFsT2JqZWN0LCBrZXlzLCBK
U0M6OkRvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpOwogCiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKQEAgLTExMyw3ICsxMTMsNyBAQCBwcml2YXRlOgog
CiAgICAgICAgICAgICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRlc2MuW1tF
bnVtZXJhYmxlXV0gaXMgdHJ1ZToKIAotICAgICAgICAgICAgLy8gSXQncyBuZWNlc3NhcnkgdG8g
ZmlsdGVyIGVudW1lcmFibGUgaGVyZSByYXRoZXIgdGhhbiB1c2luZyB0aGUgZGVmYXVsdCBFbnVt
ZXJhdGlvbk1vZGUsCisgICAgICAgICAgICAvLyBJdCdzIG5lY2Vzc2FyeSB0byBmaWx0ZXIgZW51
bWVyYWJsZSBoZXJlIHJhdGhlciB0aGFuIHVzaW5nIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4
Y2x1ZGUsCiAgICAgICAgICAgICAvLyB0byBwcmV2ZW50IGFuIG9ic2VydmFibGUgZXh0cmEgW1tH
ZXRPd25Qcm9wZXJ0eV1dIG9wZXJhdGlvbiBpbiB0aGUgY2FzZSBvZiBQcm94eU9iamVjdCByZWNv
cmRzLgogICAgICAgICAgICAgaWYgKGRpZEdldERlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVt
ZXJhYmxlKCkpIHsKICAgICAgICAgICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNv
bnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLgpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxMTE2
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NTQsMTQgKzQ1NCwxNCBAQCBzdGF0aWMgdm9pZCBhZGRTY29wZWRD
aGlsZHJlbkluZGV4ZXMoSlNHCiB9CiAKIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcv
I3dpbmRvd3Byb3h5LW93bnByb3BlcnR5a2V5cwotdm9pZCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQordm9pZCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKICAg
ICBKU0RPTVdpbmRvdyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRvdyo+KG9iamVjdCk7
CiAKICAgICBhZGRTY29wZWRDaGlsZHJlbkluZGV4ZXMoKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNPYmplY3QtPndyYXBwZWQoKSwgcHJvcGVydHlOYW1lcyk7CiAKICAgICBpZiAoIUJpbmRpbmdT
ZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aGlzT2JqZWN0LT53cmFwcGVkKCksIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcikpIHsKLSAg
ICAgICAgaWYgKG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKQorICAgICAgICBpZiAo
bW9kZSA9PSBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKQogICAgICAgICAgICAgYWRk
Q3Jvc3NPcmlnaW5Pd25Qcm9wZXJ0eU5hbWVzPENyb3NzT3JpZ2luT2JqZWN0OjpXaW5kb3c+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0
b20uY3BwCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0xvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDExICsxNzYsMTEgQEAg
Ym9vbCBKU0xvY2F0aW9uOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSgogICAgIHJldHVybiBCYXNl
OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lKTsKIH0KIAotdm9pZCBKU0xvY2F0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2
b2lkIEpTTG9jYXRpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9w
ZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgSlNMb2NhdGlv
biogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xvY2F0aW9uKj4ob2JqZWN0KTsKICAgICBpZiAoIUJp
bmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzT2JqZWN0LT53cmFwcGVkKCkud2luZG93KCksIERvTm90UmVwb3J0U2VjdXJp
dHlFcnJvcikpIHsKLSAgICAgICAgaWYgKG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygp
KQorICAgICAgICBpZiAobW9kZSA9PSBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKQog
ICAgICAgICAgICAgYWRkQ3Jvc3NPcmlnaW5Pd25Qcm9wZXJ0eU5hbWVzPENyb3NzT3JpZ2luT2Jq
ZWN0OjpMb2NhdGlvbj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNS
ZW1vdGVET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMjcxMTE2KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZW1vdGVET01XaW5kb3dDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsMTEgKzEwMCwxMSBAQCBib29sIEpTUmVtb3RlRE9NV2lu
ZG93OjpkZWxldGVQcm9wZXJ0eUJ5CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEpTUmVt
b3RlRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVz
LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNSZW1vdGVET01XaW5kb3c6OmdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01v
ZGUgbW9kZSkKIHsKICAgICAvLyBGSVhNRTogQWRkIHNjb3BlZCBjaGlsZHJlbiBpbmRleGVzLgog
Ci0gICAgaWYgKG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKQorICAgIGlmIChtb2Rl
ID09IERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpCiAgICAgICAgIGFkZENyb3NzT3Jp
Z2luT3duUHJvcGVydHlOYW1lczxDcm9zc09yaWdpbk9iamVjdDo6V2luZG93PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24g
MjcxMTE2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyOCw3ICsxNzI4LDcgQEAgU2VyaWFsaXphdGlv
blJldHVybkNvZGUgQ2xvbmVTZXJpYWxpemVyOgogICAgICAgICAgICAgICAgICAgICBsZW5ndGhT
dGFjay5yZW1vdmVMYXN0KCk7CiAKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdGFjay5h
cHBlbmQoUHJvcGVydHlOYW1lQXJyYXkodm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFBy
aXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKSk7Ci0gICAgICAgICAgICAgICAgICAgIGFycmF5LT5t
ZXRob2RUYWJsZSh2bSktPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhhcnJheSwgbV9sZXhp
Y2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRW51bWVyYXRpb25Nb2RlKCkp
OworICAgICAgICAgICAgICAgICAgICBhcnJheS0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlTdGFjay5sYXN0KCksIERvbnRFbnVtUHJv
cGVydGllc01vZGU6OkV4Y2x1ZGUpOwogICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlT
dGFjay5sYXN0KCkuc2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZShOb25J
bmRleFByb3BlcnRpZXNUYWcpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5h
cHBlbmQoMCk7CkBAIC0xNzc4LDcgKzE3NzgsNyBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBD
bG9uZVNlcmlhbGl6ZXI6CiAgICAgICAgICAgICAgICAgaW5wdXRPYmplY3RTdGFjay5hcHBlbmQo
aW5PYmplY3QpOwogICAgICAgICAgICAgICAgIGluZGV4U3RhY2suYXBwZW5kKDApOwogICAgICAg
ICAgICAgICAgIHByb3BlcnR5U3RhY2suYXBwZW5kKFByb3BlcnR5TmFtZUFycmF5KHZtLCBQcm9w
ZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSkpOwotICAg
ICAgICAgICAgICAgIGluT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFt
ZXMoaW5PYmplY3QsIG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlTdGFjay5sYXN0KCks
IEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAgICAgICAgICBpbk9iamVjdC0+bWV0aG9kVGFi
bGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluT2JqZWN0LCBtX2xleGljYWxHbG9iYWxPYmpl
Y3QsIHByb3BlcnR5U3RhY2subGFzdCgpLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRl
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG9iamVjdFN0YXJ0VmlzaXRNZW1iZXI6CiAg
ICAgICAgICAgICBGQUxMVEhST1VHSDsKQEAgLTE4NDYsNyArMTg0Niw3IEBAIFNlcmlhbGl6YXRp
b25SZXR1cm5Db2RlIENsb25lU2VyaWFsaXplcjoKICAgICAgICAgICAgICAgICAgICAgSlNPYmpl
Y3QqIG9iamVjdCA9IGlucHV0T2JqZWN0U3RhY2subGFzdCgpOwogICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU01hcCo+KHZtLCBvYmplY3QpKTsKICAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXkodm0sIFByb3Bl
cnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5h
bWVzKG9iamVjdCwgbV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwg
RW51bWVyYXRpb25Nb2RlKCkpOworICAgICAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIG1fbGV4aWNhbEdsb2JhbE9iamVj
dCwgcHJvcGVydHlTdGFjay5sYXN0KCksIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUp
OwogICAgICAgICAgICAgICAgICAgICB3cml0ZShOb25NYXBQcm9wZXJ0aWVzVGFnKTsKICAgICAg
ICAgICAgICAgICAgICAgaW5kZXhTdGFjay5hcHBlbmQoMCk7CiAgICAgICAgICAgICAgICAgICAg
IGdvdG8gb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjsKQEAgLTE4OTAsNyArMTg5MCw3IEBAIFNlcmlh
bGl6YXRpb25SZXR1cm5Db2RlIENsb25lU2VyaWFsaXplcjoKICAgICAgICAgICAgICAgICAgICAg
SlNPYmplY3QqIG9iamVjdCA9IGlucHV0T2JqZWN0U3RhY2subGFzdCgpOwogICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU1NldCo+KHZtLCBvYmplY3QpKTsKICAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXkodm0s
IFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNsdWRlKSk7
Ci0gICAgICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9w
ZXJ0eU5hbWVzKG9iamVjdCwgbV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eVN0YWNrLmxh
c3QoKSwgRW51bWVyYXRpb25Nb2RlKCkpOworICAgICAgICAgICAgICAgICAgICBvYmplY3QtPm1l
dGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIG1fbGV4aWNhbEdsb2Jh
bE9iamVjdCwgcHJvcGVydHlTdGFjay5sYXN0KCksIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4
Y2x1ZGUpOwogICAgICAgICAgICAgICAgICAgICB3cml0ZShOb25TZXRQcm9wZXJ0aWVzVGFnKTsK
ICAgICAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5hcHBlbmQoMCk7CiAgICAgICAgICAgICAg
ICAgICAgIGdvdG8gb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAy
NzExMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQkod29ya2luZyBjb3B5KQpAQCAtMTEyMiw3ICsxMTIyLDcgQEAgc3ViIEdlbmVyYXRlR2V0
T3duUHJvcGVydHlOYW1lcwogICAgIG15ICRuYW1lZEdldHRlck9wZXJhdGlvbiA9IEdldE5hbWVk
R2V0dGVyT3BlcmF0aW9uKCRpbnRlcmZhY2UpOwogICAgIG15ICRpbmRleGVkR2V0dGVyT3BlcmF0
aW9uID0gR2V0SW5kZXhlZEdldHRlck9wZXJhdGlvbigkaW50ZXJmYWNlKTsKICAgICAKLSAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICJ2b2lkICR7Y2xhc3NOYW1lfTo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKVxu
Iik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAidm9pZCAke2NsYXNzTmFtZX06OmdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3Bl
cnRpZXNNb2RlIG1vZGUpXG4iKTsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKICAg
ICBpZiAoJGluZGV4ZWRHZXR0ZXJPcGVyYXRpb24gfHwgJG5hbWVkR2V0dGVyT3BlcmF0aW9uKSB7
CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxl
eGljYWxHbG9iYWxPYmplY3QpO1xuIik7CkBAIC0xMTQ4LDcgKzExNDgsNyBAQCBzdWIgR2VuZXJh
dGVHZXRPd25Qcm9wZXJ0eU5hbWVzCiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9y
dGVkUHJvcGVydHlOYW1lcygpKVxuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHBy
b3BlcnR5TmFtZSkpO1xuIik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgaWYgKG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKSB7
XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAobW9kZSA9PSBE
b250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSB7XG4iKTsKICAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpKVxuIik7CiAgICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eU5hbWUpKTtcbiIpOwogICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIpOwpAQCAtMjk4MCw4ICsyOTgwLDggQEAgc3Vi
IEdlbmVyYXRlSGVhZGVyCiAgICAgfQogICAgIAogICAgIGlmIChJbnN0YW5jZU92ZXJyaWRlc0dl
dE93blByb3BlcnR5TmFtZXMoJGludGVyZmFjZSkpIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51
bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7XG4iKTsKLSAgICAgICAgJHN0
cnVjdHVyZUZsYWdzeyJKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMifSA9
IDE7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgZ2V0T3du
UHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkRvbnRFbnVtUHJvcGVydGllc01vZGUpO1xuIik7Cisg
ICAgICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVz
In0gPSAxOwogICAgIH0KICAgICAKICAgICBpZiAoSW5zdGFuY2VPdmVycmlkZXNQdXQoJGludGVy
ZmFjZSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMjcxMTE2
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50
VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDcgKzIwOCw3IEBAIGJvb2wgSlNUZXN0
RXZlbnRUYXJnZXQ6OmdldE93blByb3BlcnR5U2wKICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwg
c2xvdCk7CiB9CiAKLXZvaWQgSlNUZXN0RXZlbnRUYXJnZXQ6OmdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFBy
b3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3Zv
aWQgSlNUZXN0RXZlbnRUYXJnZXQ6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0m
IHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTVGVzdEV2ZW50VGFyZ2V0Kj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RF
dmVudFRhcmdldC5oCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFRlc3RFdmVudFRhcmdldCogdG9XcmFw
cGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVy
dHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQg
Z2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51
bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlND
OjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5
JiwgSlNDOjpEb250RW51bVByb3BlcnRpZXNNb2RlKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKIApA
QCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXN0
RXZlbnRUYXJnZXQmPihCYXNlOjp3cmFwcGVkKCkpOwogICAgIH0KIHB1YmxpYzoKLSAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwg
SlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNO
b3RaZXJvIHwgSlNDOjpNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIHwgSlNDOjpPdmVycmlkZXNBbnlG
b3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5
QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hl
bkxlbmd0aElzTm90WmVybyB8IEpTQzo6TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCB8IEpTQzo6T3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdEV2ZW50VGFyZ2V0KEpTQzo6U3RydWN0dXJlKiwg
SlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdEV2ZW50VGFyZ2V0PiYmKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkocmV2aXNp
b24gMjcxMTE2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgs
NyArMTc4LDcgQEAgYm9vbCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZQogICAg
IHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGlj
YWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3RJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTVGVzdEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9w
ZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0g
SlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihvYmplY3QpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5oCShyZXZpc2lv
biAyNzExMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0
MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIq
IHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0YXRp
YyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBK
U0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5h
bWVBcnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGljIGJvb2wg
cHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1l
LCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wg
cHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgc3RhdGlj
IGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBi
b29sIHNob3VsZFRocm93KTsKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBK
U0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRp
YyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0
eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CisgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
SlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNO
b3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0SW5kZXhlZFNldHRl
ck5vSWRlbnRpZmllcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRl
c3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9u
IDI3MTExNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzgsNyArMTc4LDcgQEAgYm9vbCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpbwog
ICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxl
eGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3RJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9i
amVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0SW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewog
ICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24q
PihvYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb24uaAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiogdG9XcmFwcGVkKEpTQzo6Vk0m
LCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6
OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6
OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVy
dHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVy
dHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2Rl
KCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCos
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpEb250
RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlND
OjpQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQzo6SlND
ZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpK
U1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9w
ZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlO
YW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwpA
QCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAo
SlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6
OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFpl
cm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkludGVyY2VwdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24o
SlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0SW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI3MTExNikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsNyArMTg1LDcgQEAgYm9v
bCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OgogICAgIHJldHVybiBKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3Qs
IGluZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywg
RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0o
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rl
c3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihvYmplY3QpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAkocmV2aXNpb24gMjcx
MTE2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciog
dG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGlj
IHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpT
Qzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFt
ZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFt
ZUFycmF5JiwgSlNDOjpEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBw
dXQoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUs
IEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBw
dXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMg
Ym9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6UHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJv
b2wgc2hvdWxkVGhyb3cpOwpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpT
Qzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGlj
IHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5
TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKKyAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBK
U0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3RJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxU
ZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAkocmV2aXNpb24gMjcxMTE2KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU92ZXJy
aWRlQnVpbHRJbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNyArMTk5LDcgQEAgYm9vbCBK
U1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjpnZXRPdwogICAgIHJldHVybiBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGlu
ZGV4LCBzbG90KTsKIH0KIAotdm9pZCBKU1Rlc3RMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRp
b25Nb2RlIG1vZGUpCit2b2lkIEpTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnM6OmdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3Bl
cnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdExlZ2FjeU92ZXJy
aWRlQnVpbHRJbnMqPihvYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5T3Zl
cnJpZGVCdWlsdElucy5oCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TGVnYWN5T3ZlcnJpZGVCdWlsdElucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdExlZ2Fj
eU92ZXJyaWRlQnVpbHRJbnMqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5
U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVj
dCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpF
bnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9p
ZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7
CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogCiAgICAgREVDTEFSRV9J
TkZPOwpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6
ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3Mg
fCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlk
ZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSB8IEpT
Qzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90
WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdExlZ2FjeU92ZXJyaWRl
QnVpbHRJbnMoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TGVn
YWN5T3ZlcnJpZGVCdWlsdElucz4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAy
NzExMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjA3LDcgKzIwNyw3IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGkK
ICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9k
ZSkKIHsKICAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmgJKHJldmlzaW9uIDI3MTExNikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXIqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAgIHN0
YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUg
PSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0
eU5hbWVBcnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGljIGJv
b2wgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlO
YW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJv
b2wgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgc3Rh
dGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3Im
LCBib29sIHNob3VsZFRocm93KTsKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0
YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3Bl
cnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlO
YW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQ
cm9wZXJ0eUNhY2hpbmc7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0lt
cHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xv
dEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9o
aWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3Qm
LCBSZWY8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcj4mJik7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDcgKzIwNyw3IEBAIGJv
b2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmcKICAgICByZXR1cm4gSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9w
ZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFt
ZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAg
ICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCShyZXZpc2lvbiAyNzEx
MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbiogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwog
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwog
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCos
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVy
dHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6
OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2
b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpEb250RW51bVByb3BlcnRpZXNNb2Rl
KTsKICAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3Qm
KTsKICAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3Vs
ZFRocm93KTsKICAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0
KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlBy
b3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwpAQCAtNjQsNyArNjQsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6
OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFw
QW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xv
dElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlG
b3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93
blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRz
R2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBK
U1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbihKU0M6OlN0cnVjdHVy
ZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjcx
MTE2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjE2LDcgKzIxNiw3IEBAIGJvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW4K
ICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2Rl
IG1vZGUpCiB7CiAgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCShyZXZpc2lvbiAy
NzExMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllciogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlT
bG90Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0
KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVu
dW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lk
IGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpEb250RW51bVByb3BlcnRpZXNNb2RlKTsK
ICAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsK
ICAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRo
cm93KTsKICAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3Bl
cnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwpAQCAtNjQsNyArNjQsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZN
JiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5h
bHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElz
SW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlT
bG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3Jt
T2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBK
U0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blBy
b3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0
T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBKU0M6OlByb2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcihKU0M6OlN0cnVjdHVyZSosIEpT
RE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllcj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJOb0lk
ZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBAIGJvb2wgSlNUZXN0TmFtZWREZWxldGVyTm9J
ZGVudGlmaWVyOjpnZXQKICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZv
aWQgSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lk
IEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09i
amVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkK
IHsKICAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyKj4o
b2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlm
aWVyLmgJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFRlc3ROYW1lZERlbGV0ZXJO
b0lkZW50aWZpZXIqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYp
OwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJh
dGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAg
c3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6RGVsZXRlUHJvcGVydHlTbG90Jik7CiAgICAg
c3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0ds
b2JhbE9iamVjdCosIHVuc2lnbmVkKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlND
ZWxsKik7CkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFs
eXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBK
U0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3Bl
cnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7
CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyKEpTQzo6U3Ry
dWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkRGVsZXRlck5vSWRlbnRp
Zmllcj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRl
clRocm93aW5nRXhjZXB0aW9uLmNwcAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhj
ZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBAIGJvb2wgSlNUZXN0
TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24KICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwg
c2xvdCk7CiB9CiAKLXZvaWQgSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb246Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJh
dGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb246
OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250
RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5h
bWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4
Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCShyZXZpc2lvbiAy
NzExMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyAr
NDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbiogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAg
c3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9k
ZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3Bl
cnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3Bl
cnR5TmFtZUFycmF5JiwgSlNDOjpEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMg
Ym9vbCBkZWxldGVQcm9wZXJ0eShKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlByb3BlcnR5TmFtZSwgSlNDOjpEZWxldGVQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMg
Ym9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgdW5zaWduZWQpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsK
QEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBz
dWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFw
KEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlND
OjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8
IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90
SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKIHByb3Rl
Y3RlZDoKICAgICBKU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbihKU0M6OlN0cnVj
dHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4
Y2VwdGlvbj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRl
cldpdGhJZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDcgKzE5Niw3IEBAIGJvb2wgSlNUZXN0TmFtZWRE
ZWxldGVyV2l0aElkZW50aWZpZXI6OmcKICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7
CiB9CiAKLXZvaWQgSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKK3ZvaWQgSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRp
ZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkRGVsZXRlcldp
dGhJZGVudGlmaWVyKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZERlbGV0ZXJXaXRoSWRlbnRpZmllci5oCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50
aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIFRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllciogdG9XcmFwcGVkKEpTQzo6Vk0mLCBK
U0M6OkpTVmFsdWUpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpT
T2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlBy
b3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
SlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlO
YW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlO
YW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkp
OworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpEb250RW51
bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0M6OkpT
Q2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpEZWxl
dGVQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgo
SlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQpOwogICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0p
OwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVy
Jik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVy
ZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0
UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OworICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2Ug
fCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJ
c05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZERlbGV0
ZXJXaXRoSWRlbnRpZmllcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVm
PFRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhl
ZEdldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAkocmV2aXNp
b24gMjcxMTE2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjA3LDcgKzIwNyw3IEBAIGJvb2wgSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIK
ICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNUZXN0TmFtZWRE
ZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9i
amVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0TmFt
ZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFt
ZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAg
ICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyKj4o
b2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRo
SW5kZXhlZEdldHRlci5oCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFRl
c3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlciogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6
OkpTVmFsdWUpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3Bl
cnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlND
OjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1l
cyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1l
QXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOwor
ICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpEb250RW51bVBy
b3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0M6OkpTQ2Vs
bCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpEZWxldGVQ
cm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlND
OjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQpOwogICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwog
ICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZv
clByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJv
cGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBK
U0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZERlbGV0ZXJX
aXRoSW5kZXhlZEdldHRlcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVm
PFRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcj4mJik7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aC5jcHAJKHJldmlzaW9uIDI3MTExNikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlckNh
bGxXaXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBAIGJvb2wgSlNUZXN0
TmFtZWRHZXR0ZXJDYWxsV2l0aDo6Z2V0T3duUHIKICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwg
c2xvdCk7CiB9CiAKLXZvaWQgSlNUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aDo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBt
b2RlKQordm9pZCBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBt
b2RlKQogewogICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoKj4o
b2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguaAkocmV2
aXNpb24gMjcxMTE2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGguaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFRlc3ROYW1lZEdldHRlckNhbGxXaXRoKiB0b1dyYXBw
ZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0
eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVt
ZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6
OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkm
LCBKU0M6OkRvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3ko
SlNDOjpKU0NlbGwqKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTYxLDcgKzYxLDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pOwogICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFu
YWx5emVyJik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJ
c0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5
U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzQW55Rm9y
bU9mR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90Owor
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFi
c2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6
Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1l
ZEdldHRlckNhbGxXaXRoKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8
VGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZEdldHRlck5vSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlck5vSWRl
bnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MCw3ICsxOTAsNyBAQCBib29sIEpTVGVz
dE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPCiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgs
IHNsb3QpOwogfQogCi12b2lkIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlIG1vZGUpCit2b2lkIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0
aWVzTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEdldHRlck5v
SWRlbnRpZmllcio+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0
ZXJOb0lkZW50aWZpZXIuaAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0TmFt
ZWRHZXR0ZXJOb0lkZW50aWZpZXIqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsK
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsK
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3Bl
cnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09i
amVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlND
OjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMg
dm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9k
ZSk7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogCiAgICAgREVDTEFS
RV9JTkZPOwpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5h
bHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwg
SlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNO
b3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9w
ZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93
blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyKEpTQzo6U3Ry
dWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlm
aWVyPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJ
ZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTYsNyArMTk2LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZEdldHRlcldp
dGhJZGVudGlmaWVyOjpnZQogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAot
dm9pZCBKU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2
b2lkIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFBy
b3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1v
ZGUpCiB7CiAgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZp
ZXIqPihvYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRo
SWRlbnRpZmllci5oCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVk
R2V0dGVyV2l0aElkZW50aWZpZXIqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsK
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsK
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3Bl
cnR5U2xvdCYpOwotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09i
amVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlND
OjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMg
dm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9k
ZSk7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwogCiAgICAgREVDTEFS
RV9JTkZPOwpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAgc3RhdGljIHZvaWQgYW5h
bHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwg
SlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNO
b3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9w
ZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93
blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
OwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIoSlNDOjpT
dHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRHZXR0ZXJXaXRoSWRl
bnRpZmllcj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9J
ZGVudGlmaWVyLmNwcAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXI6OmdldE8KICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZv
aWQgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQg
SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7
CiAgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKj4ob2Jq
ZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5o
CShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFRlc3ROYW1lZFNldHRlck5vSWRlbnRp
ZmllciogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAg
c3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9k
ZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3Bl
cnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3Bl
cnR5TmFtZUFycmF5JiwgSlNDOjpEb250RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMg
Ym9vbCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0
eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMg
Ym9vbCBwdXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBz
dGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRv
ciYsIGJvb2wgc2hvdWxkVGhyb3cpOwpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CiAgICAg
c3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJv
cGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0
eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlByb2hpYml0
c1Byb3BlcnR5Q2FjaGluZzsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkdldE93blByb3BlcnR5U2xvdElz
SW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlT
bG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6OlBy
b2hpYml0c1Byb3BlcnR5Q2FjaGluZzsKIHByb3RlY3RlZDoKICAgICBKU1Rlc3ROYW1lZFNldHRl
ck5vSWRlbnRpZmllcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRl
c3ROYW1lZFNldHRlck5vSWRlbnRpZmllcj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHJldmlzaW9uIDI3MTEx
NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5
MCw3IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjoKICAgICByZXR1
cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3ROYW1lZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9
IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24u
aAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFRlc3ROYW1lZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNs
b3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51
bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIHZvaWQg
Z2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkRvbnRFbnVtUHJvcGVydGllc01vZGUpOwog
ICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwog
ICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhy
b3cpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVy
dHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CkBAIC02NCw3ICs2NCw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFs
eXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJ
bXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1P
ZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpT
Qzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJv
cGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpTVGVz
dE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24oSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2Jh
bE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4mJik7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNl
dHRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJ
KHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTk2LDcgKzE5Niw3IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6
Z2UKICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0
LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3ROYW1l
ZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIFZN
JiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyKj4ob2JqZWN0KTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZFNldHRlcldpdGhJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAko
cmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFRlc3ROYW1lZFNldHRlcldpdGhJZGVu
dGlmaWVyKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAg
ICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25N
b2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJv
cGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJv
cGVydHlOYW1lQXJyYXkmLCBKU0M6OkRvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIHN0YXRp
YyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3Bl
cnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRp
YyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAg
IHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlw
dG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAg
ICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwog
cHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQ
cm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3Bl
cnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGli
aXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90
SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6
UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aElkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJl
ZjxUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVk
R2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAJKHJldmlzaW9u
IDI3MTExNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE2
LDcgKzIxNiw3IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjoKICAg
ICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkm
IHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIFZN
JiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyKj4ob2JqZWN0
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXIuaAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFRlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7
CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7
CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0
KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9w
ZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNP
YmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpT
Qzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGlj
IHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkRvbnRFbnVtUHJvcGVydGllc01v
ZGUpOwogICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xv
dCYpOwogICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6
UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CkBAIC02NCw3ICs2NCw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpT
Qzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6Okhl
YXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlT
bG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0Fu
eUZvcm1PZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0
T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2Vw
dHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6
Ok92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAg
IEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RP
TUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcj4mJik7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHAJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE2LDcgKzIxNiw3
IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckEKICAgICByZXR1cm4g
SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlckFuZFNldHRlcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkm
IHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQog
ewogICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVy
QW5kU2V0dGVyKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuaAkocmV2aXNpb24gMjcx
MTE2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFRlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyQW5kU2V0dGVyKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0
eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6
RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIHZv
aWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkRvbnRFbnVtUHJvcGVydGllc01vZGUp
OwogICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYp
OwogICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3cpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJv
cGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CkBAIC02NCw3ICs2NCw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBB
bmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90
SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZv
cm1PZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3du
UHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNH
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92
ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIoSlNDOjpTdHJ1Y3R1cmUq
LCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRl
ckFuZFNldHRlcj4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAJKHJldmlzaW9uIDI3
MTExNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTkwLDcgKzE5MCw3IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJp
ZGUKICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0
LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6Z2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9p
ZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0
aWVzTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lPdmVy
cmlkZUJ1aWx0SW5zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMu
aAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaAkod29y
a2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFRlc3ROYW1l
ZFNldHRlcldpdGhMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpT
Qzo6SlNWYWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNP
YmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJv
cGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChK
U0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5h
bWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7
CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkRvbnRFbnVt
UHJvcGVydGllc01vZGUpOwogICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1
dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwq
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0eU5hbWUs
IGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CkBAIC02
NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0Nl
bGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0
T3duUHJvcGVydHlTbG90SXNJbXB1cmUgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1P
ZkdldFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpT
Qzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJv
cGVydHlTbG90SXNJbXB1cmUgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5
TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRz
UHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aExl
Z2FjeU92ZXJyaWRlQnVpbHRJbnMoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYs
IFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5T3ZlcnJpZGVCdWlsdElucz4mJik7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNl
dHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldp
dGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuY3BwCShyZXZpc2lvbiAyNzExMTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0
LDcgKzIxNCw3IEBAIGJvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWEKICAg
ICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBpbmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lk
IEpTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllczo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJv
cGVydGllc01vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0
ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhM
ZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5m
b3JnZWFibGVQcm9wZXJ0aWVzLmgJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZv
cmdlYWJsZVByb3BlcnRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIFRlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3Bl
cnRpZXMqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwotICAg
IHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1v
ZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9w
ZXJ0eU5hbWVBcnJheSYsIEpTQzo6RG9udEVudW1Qcm9wZXJ0aWVzTW9kZSk7CiAgICAgc3RhdGlj
IGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVy
dHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGlj
IGJvb2wgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAg
c3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0
b3ImLCBib29sIHNob3VsZFRocm93KTsKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOwogICAg
IHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclBy
b3BlcnR5QWJzZW5jZSB8IEpTQzo6SGFzU3RhdGljUHJvcGVydHlUYWJsZSB8IEpTQzo6SW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpT
Qzo6T3ZlcnJpZGVzQW55Rm9ybU9mR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgSlNDOjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8
IEpTQzo6SGFzU3RhdGljUHJvcGVydHlUYWJsZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlND
OjpQcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmc7CiBwcm90ZWN0ZWQ6CiAgICAgSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzKEpTQzo6U3RydWN0dXJlKiwgSlNE
T01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxl
UHJvcGVydGllcz4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNB
bmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5m
b3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdElucy5jcHAJKHJldmlzaW9u
IDI3MTExNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVy
cmlkZUJ1aWx0SW5zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDcgKzIxNCw3IEBAIGJvb2wg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWEKICAgICByZXR1cm4gSlNPYmplY3Q6
OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBp
bmRleCwgc2xvdCk7CiB9CiAKLXZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3Jn
ZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJpZGVCdWlsdEluczo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2Rl
KQordm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNB
bmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBtb2RlKQogewogICAg
IFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhMZWdhY3lVbmZvcmdlYWJsZVBy
b3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhM
ZWdhY3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJy
aWRlQnVpbHRJbnMuaAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxl
UHJvcGVydGllc0FuZExlZ2FjeU92ZXJyaWRlQnVpbHRJbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFRlc3ROYW1lZFNldHRlcldpdGhMZWdh
Y3lVbmZvcmdlYWJsZVByb3BlcnRpZXNBbmRMZWdhY3lPdmVycmlkZUJ1aWx0SW5zKiB0b1dyYXBw
ZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpQcm9wZXJ0
eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICBzdGF0aWMgdm9pZCBn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVt
ZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6
OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkm
LCBKU0M6OkRvbnRFbnVtUHJvcGVydGllc01vZGUpOwogICAgIHN0YXRpYyBib29sIHB1dChKU0M6
OkpTQ2VsbCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpK
U1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIHB1dEJ5SW5k
ZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIHN0YXRpYyBib29sIGRl
ZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91
bGRUaHJvdyk7CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKICAgICBzdGF0aWMgdm9pZCBh
bmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwogcHVibGljOgotICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmUgfCBKU0M6Okhhc1N0YXRpY1By
b3BlcnR5VGFibGUgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5
TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6UHJvaGliaXRz
UHJvcGVydHlDYWNoaW5nOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJ
bXB1cmUgfCBKU0M6Okhhc1N0YXRpY1Byb3BlcnR5VGFibGUgfCBKU0M6OkludGVyY2VwdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEpTQzo6UHJvaGliaXRzUHJvcGVydHlDYWNoaW5nOwogcHJvdGVjdGVkOgogICAgIEpTVGVz
dE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYmxlUHJvcGVydGllc0FuZExlZ2FjeU92ZXJy
aWRlQnVpbHRJbnMoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0
TmFtZWRTZXR0ZXJXaXRoTGVnYWN5VW5mb3JnZWFibGVQcm9wZXJ0aWVzQW5kTGVnYWN5T3ZlcnJp
ZGVCdWlsdElucz4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCShyZXZpc2lvbiAyNzExMTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjUzMCw3ICsyNTMwLDcgQEAgYm9vbCBKU1Rlc3RPYmo6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZQogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIGluZGV4LCBzbG90KTsKIH0KIAot
dm9pZCBKU1Rlc3RPYmo6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9w
ZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNUZXN0T2JqOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRG9udEVudW1Qcm9w
ZXJ0aWVzTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihvYmpl
Y3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPYmouaAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3
ICs0NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE9iaiogdG9XcmFwcGVkKEpTQzo6Vk0m
LCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6
OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6
OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVy
dHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvcGVy
dHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2Rl
KCkpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCos
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpEb250
RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMgSlNDOjpDYWxsRGF0YSBnZXRDYWxsRGF0
YShKU0M6OkpTQ2VsbCopOwogCiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCop
OwpAQCAtODUsNyArODUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSB0ZXN0
U3RhdGljQ3VzdG9tUHJvbWlzZUZ1bmN0aW9uKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkNh
bGxGcmFtZSYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwogICAgIEpTQzo6SlNWYWx1ZSB0ZXN0
Q3VzdG9tUmV0dXJuc093blByb21pc2VGdW5jdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlND
OjpDYWxsRnJhbWUmKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Okhhc1N0YXRpY1Byb3Bl
cnR5VGFibGUgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdldFByb3BlcnR5TmFt
ZXMgfCBKU0M6Ok92ZXJyaWRlc0dldENhbGxEYXRhIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwgSlND
OjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3Ra
ZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRDYWxsRGF0YSB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlOYW1lcyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OwogcHJvdGVjdGVk
OgogICAgIEpTVGVzdE9iaihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVm
PFRlc3RPYmo+JiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAJ
KHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Nyw3ICs0ODcsNyBAQCBib29sIF9OUE5fRW51bWVyYXRl
KE5QUCwgTlBPYmplY3QqIG8sIE5QCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0OwogICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9w
ZXJ0eU5hbWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQcml2YXRlU3ltYm9sTW9k
ZTo6RXhjbHVkZSk7CiAKLSAgICAgICAgb2JqLT5pbXAtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0UHJv
cGVydHlOYW1lcyhvYmotPmltcCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlKCkpOworICAgICAgICBvYmotPmltcC0+Z2V0UHJvcGVydHlOYW1lcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBEb250RW51bVByb3BlcnRpZXNNb2Rl
OjpFeGNsdWRlKTsKICAgICAgICAgdW5zaWduZWQgc2l6ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
Pihwcm9wZXJ0eU5hbWVzLnNpemUoKSk7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBy
ZWFsbHkgY2FsbCBOUE5fTWVtQWxsb2MgYnV0IHRoYXQncyBpbiBXZWJLaXQKICAgICAgICAgTlBJ
ZGVudGlmaWVyKiBpZGVudGlmaWVycyA9IHN0YXRpY19jYXN0PE5QSWRlbnRpZmllcio+KG1hbGxv
YyhzaXplb2YoTlBJZGVudGlmaWVyKSAqIHNpemUpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9ydW50aW1lX2FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlk
Z2UvcnVudGltZV9hcnJheS5jcHAJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9ydW50aW1lX2FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBA
QCBKU0NfREVGSU5FX0NVU1RPTV9HRVRURVIoYXJyYXlMZW5ndGhHZXR0CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcih0aGlzT2JqZWN0LT5nZXRMZW5ndGgoKSkpOwogfQogCi12
b2lkIFJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHBy
b3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBSdW50aW1lQXJyYXk6Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBEb250RW51
bVByb3BlcnRpZXNNb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBSdW50aW1lQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UnVudGltZUFy
cmF5Kj4ob2JqZWN0KTsKQEAgLTgzLDEwICs4MywxMCBAQCB2b2lkIFJ1bnRpbWVBcnJheTo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKHZtLCBpKSk7
CiAKLSAgICBpZiAobW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpCisgICAgaWYgKG1v
ZGUgPT0gRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkKICAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQodm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKTsKIAotICAgIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZXMsIG1vZGUpOworICAgIHRoaXNPYmplY3QtPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogYm9vbCBS
dW50aW1lQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVf
YXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJh
eS5oCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9h
cnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
Y2xhc3MgUnVudGltZUFycmF5IGZpbmFsIDogcHVibGljIEpTQXJyYXkgewogcHVibGljOgogICAg
IHVzaW5nIEJhc2UgPSBKU0FycmF5OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5n
dGhJc05vdFplcm8gfCBPdmVycmlkZXNBbnlGb3JtT2ZHZXRQcm9wZXJ0eU5hbWVzOworICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldE93blByb3Bl
cnR5TmFtZXMgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVu
Z3RoSXNOb3RaZXJvOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0Rlc3RydWN0aW9u
ID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNl
QWNjZXNzPgpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgflJ1bnRpbWVBcnJheSgpOwog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICBzdGF0aWMgdm9pZCBnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBEb250
RW51bVByb3BlcnRpZXNNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7
CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCosIEpT
R2xvYmFsT2JqZWN0KiwgdW5zaWduZWQsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29s
IHB1dChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0
UHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVj
dC5jcHAJKHJldmlzaW9uIDI3MTExNikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1l
X29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MCw3ICsyODAsNyBAQCBDYWxsRGF0YSBS
dW50aW1lT2JqZWN0OjpnZXRDb25zdHJ1Y3REYXRhCiAgICAgcmV0dXJuIGNvbnN0cnVjdERhdGE7
CiB9CiAKLXZvaWQgUnVudGltZU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCog
b2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSkKK3ZvaWQgUnVudGltZU9iamVj
dDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERv
bnRFbnVtUHJvcGVydGllc01vZGUpCiB7CiAgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuaAkocmV2aXNpb24gMjcxMTE2KQor
KysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDcgKzM3LDcgQEAgRXhjZXB0aW9uKiB0aHJvd1J1bnRpbWVPYmplY3RJbnZhbGlkQWNj
ZQogY2xhc3MgV0VCQ09SRV9FWFBPUlQgUnVudGltZU9iamVjdCA6IHB1YmxpYyBKU05vbkZpbmFs
T2JqZWN0IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKLSAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNBbnlGb3Jt
T2ZHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0Q2FsbERhdGE7CisgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlOYW1l
cyB8IE92ZXJyaWRlc0dldENhbGxEYXRhOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0Rlc3RydWN0aW9uID0gdHJ1ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBK
U0M6OlN1YnNwYWNlQWNjZXNzPgpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IENhbGxEYXRhIGdldENhbGxEYXRhKEpTQ2VsbCopOwogICAgIHN0YXRpYyBDYWxsRGF0YSBnZXRD
b25zdHJ1Y3REYXRhKEpTQ2VsbCopOwogCi0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgRG9udEVudW1Qcm9wZXJ0
aWVzTW9kZSk7CiAKICAgICB2b2lkIGludmFsaWRhdGUoKTsKIApJbmRleDogU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI3MTExNikKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMjEtMDEtMDEgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hA
Z21haWwuY29tPgorCisgICAgICAgIFtKU0NdIFNpbXBsaWZ5IGdldCpQcm9wZXJ0eU5hbWVzKCkg
bWV0aG9kcyBhbmQgRW51bWVyYXRpb25Nb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI5NTQKKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2Ug
U3V6dWtpLgorCisgICAgICAgIEFkanVzdCBmb3IgY2hhbmdlcyBpbiBKU0MncyBNZXRob2RUYWJs
ZSwgVHlwZUluZm8sIGFuZCBFbnVtZXJhdGlvbk1vZGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LCBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0
c2NhcGUvSlNOUE9iamVjdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkpTTlBPYmplY3Q6OmdldE93
blByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9K
U05QT2JqZWN0Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNP
YmplY3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0OjplbnVtZXJhdGUpOgorCiAy
MDIwLTEyLTIzICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgogCiAgICAgICAg
IFtHUFUgUHJvY2Vzc106IERvbid0IGNhbGwgZmx1c2hEcmF3aW5nQ29udGV4dCgpIGluIHRoZSBt
aWRkbGUgb2YgcmVjb3JkaW5nIGRyYXdpbmcgY29tbWFuZHMKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3Bw
CShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9O
ZXRzY2FwZS9KU05QT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI1LDcgKzQyNSw3IEBA
IGJvb2wgSlNOUE9iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNHbG9iYWwKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBKU05QT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lQXJyYXksIEVudW1lcmF0aW9uTW9kZSkKK3ZvaWQgSlNOUE9iamVj
dDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZUFycmF5
LCBEb250RW51bVByb3BlcnRpZXNNb2RlKQogewogICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpJ
bmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNj
YXBlL0pTTlBPYmplY3QuaAkocmV2aXNpb24gMjcxMTE2KQorKysgU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NCw3ICs0NCw3IEBAIGNsYXNzIE5QUnVudGltZU9iamVjdE1hcDsKIGNsYXNzIEpTTlBPYmplY3Qg
ZmluYWwgOiBwdWJsaWMgSlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAg
dXNpbmcgQmFzZSA9IEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3Q7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlND
OjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc0FueUZvcm1PZkdl
dFByb3BlcnR5TmFtZXMgfCBKU0M6Ok92ZXJyaWRlc0dldENhbGxEYXRhOworICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eU5hbWVzIHwgSlNDOjpPdmVycmlkZXNHZXRDYWxsRGF0YTsKIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgogICAgIHN0YXRpYyBKU0M6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKQEAgLTk5LDcgKzk5LDcgQEAg
cHJpdmF0ZToKIAogICAgIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDOjpKU0dsb2JhbE9iamVjdCos
IE5QSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpOwogCi0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJv
cGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJv
cGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQg
Z2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkRvbnRFbnVtUHJvcGVydGllc01vZGUpOwog
CiAgICAgTlBSdW50aW1lT2JqZWN0TWFwKiBtX29iamVjdE1hcDsKICAgICBOUE9iamVjdCogbV9u
cE9iamVjdDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBl
L05QSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Q
bHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyNzExMTYpCisrKyBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjUzLDcgKzI1Myw3IEBAIGJvb2wgTlBKU09iamVjdDo6ZW51bWVyYXRl
KE5QSWRlbnRpZmllcioKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAKICAgICBQcm9wZXJ0
eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKHZtLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzLCBQ
cml2YXRlU3ltYm9sTW9kZTo6RXhjbHVkZSk7Ci0gICAgbV9qc09iamVjdC0+bWV0aG9kVGFibGUo
dm0pLT5nZXRQcm9wZXJ0eU5hbWVzKG1fanNPYmplY3QuZ2V0KCksIGxleGljYWxHbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBtX2pzT2JqZWN0LT5n
ZXRQcm9wZXJ0eU5hbWVzKGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIERvbnRF
bnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpOwogCiAgICAgTlBJZGVudGlmaWVyKiBuYW1lSWRl
bnRpZmllcnMgPSBucG5NZW1OZXdBcnJheTxOUElkZW50aWZpZXI+KHByb3BlcnR5TmFtZXMuc2l6
ZSgpKTsKIApJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMjcxMTE2
KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMjEtMDEtMDEgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hA
Z21haWwuY29tPgorCisgICAgICAgIFtKU0NdIFNpbXBsaWZ5IGdldCpQcm9wZXJ0eU5hbWVzKCkg
bWV0aG9kcyBhbmQgRW51bWVyYXRpb25Nb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI5NTQKKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2Ug
U3V6dWtpLgorCisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
OmVudW1lcmF0ZSk6CisKIDIwMjAtMTItMTkgIFJvYiBCdWlzICA8cmJ1aXNAaWdhbGlhLmNvbT4K
IAogICAgICAgICBNb3ZlIEZyYW1lTG9hZGVyOjphcmVQbHVnaW5zRW5hYmxlZCB0byBGcmFtZQpJ
bmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQkocmV2aXNpb24g
MjcxMTE2KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjczLDcgKzEyNzMs
NyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZW51bWVyCiAgICAgSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2Jq
ZWN0KHBsdWdpbldvcmxkKCkpOwogIAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFt
ZXModm0sIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIFByaXZhdGVTeW1ib2xNb2RlOjpFeGNs
dWRlKTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0UHJvcGVydHlOYW1lcyhvYmpl
Y3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgp
KTsKKyAgICBvYmplY3QtPmdldFByb3BlcnR5TmFtZXMobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lcywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSk7CiAKICAgICBSZXRh
aW5QdHI8TlNNdXRhYmxlQXJyYXk+IGFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0XSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnR5TmFtZXMu
c2l6ZSgpOyBpKyspIHsK
</data>
<flag name="commit-queue"
          id="434494"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>