<?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>193531</bug_id>
          
          <creation_ts>2019-01-17 00:49:10 -0800</creation_ts>
          <short_desc>[WHLSL] Implement Metal code generation</short_desc>
          <delta_ts>2019-01-21 12:08:40 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>achristensen</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jonlee</cc>
    
    <cc>justin_fan</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1495424</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-17 00:49:10 -0800</bug_when>
    <thetext>[WHLSL] Implement Metal code generation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1495425</commentid>
    <comment_count>1</comment_count>
      <attachid>359362</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-17 01:02:47 -0800</bug_when>
    <thetext>Created attachment 359362
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1495585</commentid>
    <comment_count>2</comment_count>
      <attachid>359401</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-17 12:07:41 -0800</bug_when>
    <thetext>Created attachment 359401
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1495766</commentid>
    <comment_count>3</comment_count>
      <attachid>359459</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-18 00:54:37 -0800</bug_when>
    <thetext>Created attachment 359459
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1495773</commentid>
    <comment_count>4</comment_count>
      <attachid>359463</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-18 02:00:12 -0800</bug_when>
    <thetext>Created attachment 359463
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1495796</commentid>
    <comment_count>5</comment_count>
      <attachid>359473</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-18 04:52:23 -0800</bug_when>
    <thetext>Created attachment 359473
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1495797</commentid>
    <comment_count>6</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-18 04:55:22 -0800</bug_when>
    <thetext>Attachment 359473 did not pass style-queue:


ERROR: Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:513:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 2 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496335</commentid>
    <comment_count>7</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-20 11:57:47 -0800</bug_when>
    <thetext>(In reply to Myles C. Maxfield from comment #5)
&gt; Created attachment 359473 [details]
&gt; Patch

This patch has some basic packing &amp; unpacking logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496360</commentid>
    <comment_count>8</comment_count>
      <attachid>359643</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-20 13:03:39 -0800</bug_when>
    <thetext>Created attachment 359643
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496363</commentid>
    <comment_count>9</comment_count>
      <attachid>359644</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-20 13:09:43 -0800</bug_when>
    <thetext>Created attachment 359644
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496373</commentid>
    <comment_count>10</comment_count>
      <attachid>359646</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-20 13:37:05 -0800</bug_when>
    <thetext>Created attachment 359646
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496376</commentid>
    <comment_count>11</comment_count>
      <attachid>359647</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-20 13:41:55 -0800</bug_when>
    <thetext>Created attachment 359647
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496380</commentid>
    <comment_count>12</comment_count>
      <attachid>359647</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-20 13:47:48 -0800</bug_when>
    <thetext>Comment on attachment 359647
Patch

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

&gt; Source/WebCore/ChangeLog:44
&gt; +              standard library, texture functions, and HLSL&apos;s half &lt;-&gt; int functions.

s/library/library)/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496382</commentid>
    <comment_count>13</comment_count>
      <attachid>359647</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-20 13:49:51 -0800</bug_when>
    <thetext>Comment on attachment 359647
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        on it&apos;s own, though.

s/it&apos;s/its/

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:208
&gt; +        m_stringBuilder.append(&quot;[[clang::fallthrough]];\n&quot;); // FIXME: Make sure this is okay. Alternatively, we could do thing and just return here instead.

s/thing/nothing/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496387</commentid>
    <comment_count>14</comment_count>
      <attachid>359647</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-20 14:00:22 -0800</bug_when>
    <thetext>Comment on attachment 359647
Patch

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

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:141
&gt; +            checkErrorAndVisit(functionDefinition.block());

ASSERT() the stack is empty

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:156
&gt; +            checkErrorAndVisit(functionDefinition.block());

ASSERT() the stack is empty

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:227
&gt; +            checkErrorAndVisit(*forLoop.increment());

make sure to call .takeLast()

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:249
&gt; +                m_stringBuilder.append(m_entryPointScaffolding-&gt;pack(variableName));

Make sure to call m_stack.takeLast() here

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:295
&gt; +        auto name = ([](String input) -&gt; String {
&gt; +            if (input == &quot;Add&quot;)
&gt; +                return &quot;fetch_add&quot;_str;
&gt; +            if (input == &quot;And&quot;)
&gt; +                return &quot;fetch_and&quot;_str;
&gt; +            if (input == &quot;Exchange&quot;)
&gt; +                return &quot;exchange&quot;_str;
&gt; +            if (input == &quot;Max&quot;)
&gt; +                return &quot;fetch_max&quot;_str;
&gt; +            if (input == &quot;Min&quot;)
&gt; +                return &quot;fetch_min&quot;_str;
&gt; +            if (input == &quot;Or&quot;)
&gt; +                return &quot;fetch_or&quot;_str;
&gt; +            ASSERT(input == &quot;Xor&quot;);
&gt; +            return &quot;fetch_xor&quot;_str;
&gt; +        })(nativeFunctionDeclaration.name().substring(&quot;Interlocked&quot;_str.length()));

Consider promoting this to a real function</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496455</commentid>
    <comment_count>15</comment_count>
      <attachid>359647</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-01-20 17:21:54 -0800</bug_when>
    <thetext>Comment on attachment 359647
Patch

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

This is mostly a rubber-stamp for such a huge patch :(

&gt; Source/WebCore/ChangeLog:4
&gt; +        [WHLSL] Implement Metal code generation
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=193531

It&apos;s a shame we haven&apos;t got any tests for this. I hope the entry point is behind ENABLE(WEBGPU).

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:139
&gt; +            m_stringBuilder.append(makeString(m_entryPointScaffolding-&gt;signature(), &quot; {&quot;));

I wonder if it is better to
.append(m_entryPointsScaffolding-&gt;signature());
.append(&quot; {&quot;);
since you already have the string builder.

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:197
&gt; +        m_stringBuilder.append(makeString(&quot;if (!&quot;, m_stack.takeLast(), &quot;) break;\n&quot;));
&gt; +        m_stringBuilder.append(makeString(&quot;} while(true);\n&quot;));

Why not use the while condition?

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:223
&gt; +        m_stringBuilder.append(&quot;for ( ; ; ) {\n&quot;);
&gt; +        if (forLoop.condition()) {
&gt; +            checkErrorAndVisit(*forLoop.condition());
&gt; +            m_stringBuilder.append(makeString(&quot;if (!&quot;, m_stack.takeLast(), &quot;) break;\n&quot;));

Same here. I assume because any variables declared in the first statement inside for() are given unique names.

And another q about whether multiple calls to append are better than makestring.

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:461
&gt; +        m_stringBuilder.append(makeString(m_typeNamer.mangledNameForType(*logicalExpression.resolvedType()), &apos; &apos;, variableName, &quot; = &quot;, left, &apos; &apos;));

Get rid of that last &apos; &apos;, use &quot; &amp;&amp; &quot;/&quot; || &quot;, and remove the space before right?

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLMetalCodeGenerator.cpp:44
&gt; +    stringBuilder.append(&quot;// This was generated by WebKit&apos;s WHLSL -&gt; MSL code generator. Do not edit!\n&quot;);

I don&apos;t think this is necessary.

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:105
&gt; +    if (nativeFunctionDeclaration.name().startsWith(&quot;operator.&quot;_str)) {
&gt; +        if (nativeFunctionDeclaration.name().endsWith(&quot;=&quot;_str)) {

I think using _s is slightly better here (but I&apos;m not sure).

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:167
&gt; +};
&gt; +
&gt; +}
&gt; +
&gt; +}
&gt; +
&gt; +}
&gt; +
&gt; +#define SPECIALIZE_TYPE_TRAITS_WHLSL_BASE_TYPE_NAMED_NODE(ToValueTypeName, predicate) \
&gt; +SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::WHLSL::Metal::ToValueTypeName) \
&gt; +    static bool isType(const WebCore::WHLSL::Metal::BaseTypeNameNode&amp; type) { return type.predicate; } \
&gt; +SPECIALIZE_TYPE_TRAITS_END()
&gt; +
&gt; +SPECIALIZE_TYPE_TRAITS_WHLSL_BASE_TYPE_NAMED_NODE(ArrayTypeNameNode, isArrayTypeNameNode())
&gt; +
&gt; +SPECIALIZE_TYPE_TRAITS_WHLSL_BASE_TYPE_NAMED_NODE(ArrayReferenceTypeNameNode, isArrayReferenceTypeNameNode())
&gt; +
&gt; +SPECIALIZE_TYPE_TRAITS_WHLSL_BASE_TYPE_NAMED_NODE(PointerTypeNameNode, isPointerTypeNameNode())
&gt; +
&gt; +SPECIALIZE_TYPE_TRAITS_WHLSL_BASE_TYPE_NAMED_NODE(ReferenceTypeNameNode, isReferenceTypeNameNode())
&gt; +
&gt; +namespace WebCore {
&gt; +
&gt; +namespace WHLSL {
&gt; +
&gt; +namespace Metal {

I wonder if the macros should go at the end to avoid opening and closing three namespaces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496518</commentid>
    <comment_count>16</comment_count>
      <attachid>359647</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-20 21:47:54 -0800</bug_when>
    <thetext>Comment on attachment 359647
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:4
&gt;&gt; +        https://bugs.webkit.org/show_bug.cgi?id=193531
&gt; 
&gt; It&apos;s a shame we haven&apos;t got any tests for this. I hope the entry point is behind ENABLE(WEBGPU).

The next patch will have enough for tests! 🎉🎉🎉

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:139
&gt;&gt; +            m_stringBuilder.append(makeString(m_entryPointScaffolding-&gt;signature(), &quot; {&quot;));
&gt; 
&gt; I wonder if it is better to
&gt; .append(m_entryPointsScaffolding-&gt;signature());
&gt; .append(&quot; {&quot;);
&gt; since you already have the string builder.

I had this originally, but I replaced it with this style. The addition of new lines of code made some of the more complicated parts of this patch super long (vertically) and difficult to understand. The makeString() calls for each line make it more readable.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:197
&gt;&gt; +        m_stringBuilder.append(makeString(&quot;} while(true);\n&quot;));
&gt; 
&gt; Why not use the while condition?

The ChangeLog explains this. Each condition turns into multiple expressions, which means it can&apos;t go inside a while condition.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:105
&gt;&gt; +        if (nativeFunctionDeclaration.name().endsWith(&quot;=&quot;_str)) {
&gt; 
&gt; I think using _s is slightly better here (but I&apos;m not sure).

It turns out that endsWith() supports string literals, so this should just be endsWith(&quot;=&quot;)

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:167
&gt;&gt; +namespace Metal {
&gt; 
&gt; I wonder if the macros should go at the end to avoid opening and closing three namespaces.

They have to be defined before the is&lt;&gt;() and downcast&lt;&gt;() calls below.

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:265
&gt; +String TypeNamer::mangledNameForType(AST::NativeTypeDeclaration&amp; nativeTypeDeclaration)

This should be in its own file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496531</commentid>
    <comment_count>17</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-20 23:31:36 -0800</bug_when>
    <thetext>Committed r240230: &lt;https://trac.webkit.org/changeset/240230&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496532</commentid>
    <comment_count>18</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-01-20 23:32:52 -0800</bug_when>
    <thetext>&lt;rdar://problem/47421993&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1496627</commentid>
    <comment_count>19</comment_count>
      <attachid>359647</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-21 12:08:40 -0800</bug_when>
    <thetext>Comment on attachment 359647
Patch

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

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:176
&gt; +            checkErrorAndVisit(statement);

What would an error at this point be? Stack overflow?

&gt;&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:197
&gt;&gt;&gt; +        m_stringBuilder.append(makeString(&quot;} while(true);\n&quot;));
&gt;&gt; 
&gt;&gt; Why not use the while condition?
&gt; 
&gt; The ChangeLog explains this. Each condition turns into multiple expressions, which means it can&apos;t go inside a while condition.

Seems weird to internally generate a do-while then. Why not just make all loops consistently “for (;;)” or “while (true)”</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359362</attachid>
            <date>2019-01-17 01:02:47 -0800</date>
            <delta_ts>2019-01-17 12:07:40 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-193531-20190117010246.patch</filename>
            <type>text/plain</type>
            <size>37435</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwMTAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmRkOWQ1MGZlNjM2Mjg4
MTk1ZjQ1OGViNTE4NDg1MTllYzY1YTk5My4uZTY1ZjZiNWU5NDc2ODIwZGEyYWI4MDI3MmMzOTk3
YWEwNGU5NzcyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE5LTAxLTE3ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgTWV0YWwgY29kZSBnZW5lcmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTM1MzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAq
IE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkJhc2VUeXBlTmFtZU5vZGU6OkJhc2VUeXBl
TmFtZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpCYXNlVHlwZU5hbWVO
b2RlOjppc0FycmF5VHlwZU5hbWVOb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpNZXRhbDo6QmFzZVR5cGVOYW1lTm9kZTo6aXNBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkJhc2VUeXBlTmFtZU5vZGU6
OmlzUG9pbnRlclR5cGVOYW1lTm9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
TWV0YWw6OkJhc2VUeXBlTmFtZU5vZGU6OmlzUmVmZXJlbmNlVHlwZU5hbWVOb2RlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6QXJyYXlUeXBlTmFtZU5vZGU6OkFycmF5
VHlwZU5hbWVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6QXJyYXlUeXBl
TmFtZU5vZGU6Om51bUVsZW1lbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpN
ZXRhbDo6QXJyYXlUeXBlTmFtZU5vZGU6OmNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpNZXRhbDo6QXJyYXlUeXBlTmFtZU5vZGU6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6TWV0YWw6OkFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlOjpBcnJheVJlZmVyZW5j
ZVR5cGVOYW1lTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkFycmF5UmVm
ZXJlbmNlVHlwZU5hbWVOb2RlOjphZGRyZXNzU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6Ok1ldGFsOjpBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZTo6Y2hpbGRyZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9k
ZTo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UG9pbnRlclR5cGVO
YW1lTm9kZTo6UG9pbnRlclR5cGVOYW1lTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
TWV0YWw6OlBvaW50ZXJUeXBlTmFtZU5vZGU6OmFkZHJlc3NTcGFjZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlBvaW50ZXJUeXBlTmFtZU5vZGU6OmNoaWxkcmVuKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UG9pbnRlclR5cGVOYW1lTm9kZTo6YXBw
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UmVmZXJlbmNlVHlwZU5hbWVO
b2RlOjpSZWZlcmVuY2VUeXBlTmFtZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1l
dGFsOjpSZWZlcmVuY2VUeXBlTmFtZU5vZGU6Om5hbWVkVHlwZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6Z2VuZXJhdGVOZXh0TmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6YnVpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6Omluc2VydCk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6TWV0YWw6OnR5cGVOYW1lcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuaDogQWRkZWQuCisgICAgICAgICogU291cmNlcy50
eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE5
LTAxLTE2ICBKdXN0aW4gRmFuICA8anVzdGluX2ZhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dl
YkdQVV0gVXBkYXRlIHZlcnRleC1idWZmZXItdHJpYW5nbGUtc3RyaXAuaHRtbCB0byBhY3R1YWxs
eSB1c2UgdmVydGV4IGJ1ZmZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBm
YmVjNGIxNzEzNDU2Y2VmYTQ2MDg5NmJmMjgwMzA5NDE0NmE0ODQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1l
ci5jcHAKQEAgLTAsMCArMSwzNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV0hMU0xUeXBlTmFtZXIuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNp
bmNsdWRlICJXSExTTEFkZHJlc3NTcGFjZS5oIgorI2luY2x1ZGUgIldITFNMQXJyYXlSZWZlcmVu
Y2VUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xBcnJheVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEVu
dW1lcmF0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgorI2luY2x1ZGUgIldITFNMU3Ry
dWN0dXJlRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVHlwZURlZmluaXRpb24uaCIKKyNp
bmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIK
KyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9V
bmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQ29uY2F0ZW5hdGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0
ZU51bWJlcnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgTWV0YWwgeworCitj
bGFzcyBCYXNlVHlwZU5hbWVOb2RlIHsKK3B1YmxpYzoKKyAgICBCYXNlVHlwZU5hbWVOb2RlKFN0
cmluZyYmIG1hbmdsZWROYW1lKQorICAgICAgICA6IG1fbWFuZ2xlZE5hbWUobWFuZ2xlZE5hbWUp
CisgICAgeworICAgIH0KKyAgICB2aXJ0dWFsIH5CYXNlVHlwZU5hbWVOb2RlKCkgPSBkZWZhdWx0
OworICAgIHZpcnR1YWwgYm9vbCBpc0FycmF5VHlwZU5hbWVOb2RlKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZSgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzUG9pbnRlclR5cGVO
YW1lTm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzUmVm
ZXJlbmNlVHlwZU5hbWVOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworcHJpdmF0ZToK
KyAgICBTdHJpbmcgbV9tYW5nbGVkTmFtZTsKK307CisKK2NsYXNzIEFycmF5VHlwZU5hbWVOb2Rl
IDogcHVibGljIEJhc2VUeXBlTmFtZU5vZGUgeworcHVibGljOgorICAgIEFycmF5VHlwZU5hbWVO
b2RlKFN0cmluZyYmIG1hbmdsZWROYW1lLCB1bnNpZ25lZCBudW1FbGVtZW50cykKKyAgICAgICAg
OiBCYXNlVHlwZU5hbWVOb2RlKFdURk1vdmUobWFuZ2xlZE5hbWUpKQorICAgICAgICAsIG1fbnVt
RWxlbWVudHMobnVtRWxlbWVudHMpCisgICAgeworICAgIH0KKyAgICB2aXJ0dWFsIH5BcnJheVR5
cGVOYW1lTm9kZSgpID0gZGVmYXVsdDsKKyAgICBib29sIGlzQXJyYXlUeXBlTmFtZU5vZGUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdW5zaWduZWQgbnVtRWxlbWVudHMo
KSBjb25zdCB7IHJldHVybiBtX251bUVsZW1lbnRzOyB9CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxC
YXNlVHlwZU5hbWVOb2RlPj4mIGNoaWxkcmVuKCkgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQorICAg
IHZvaWQgYXBwZW5kKFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPiYmIGNoaWxkKQorICAgIHsK
KyAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShjaGlsZCkpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+PiBtX2NoaWxkcmVu
OworICAgIHVuc2lnbmVkIG1fbnVtRWxlbWVudHM7Cit9OworCitjbGFzcyBBcnJheVJlZmVyZW5j
ZVR5cGVOYW1lTm9kZSA6IHB1YmxpYyBCYXNlVHlwZU5hbWVOb2RlIHsKK3B1YmxpYzoKKyAgICBB
cnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZShTdHJpbmcmJiBtYW5nbGVkTmFtZSwgQVNUOjpBZGRy
ZXNzU3BhY2UgYWRkcmVzc1NwYWNlKQorICAgICAgICA6IEJhc2VUeXBlTmFtZU5vZGUoV1RGTW92
ZShtYW5nbGVkTmFtZSkpCisgICAgICAgICwgbV9hZGRyZXNzU3BhY2UoYWRkcmVzc1NwYWNlKQor
ICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+QXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUoKSA9
IGRlZmF1bHQ7CisgICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIEFTVDo6QWRkcmVzc1NwYWNlIGFkZHJlc3NT
cGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWRkcmVzc1NwYWNlOyB9CisgICAgVmVjdG9yPFVuaXF1
ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPj4mIGNoaWxkcmVuKCkgeyByZXR1cm4gbV9jaGlsZHJlbjsg
fQorICAgIHZvaWQgYXBwZW5kKFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPiYmIGNoaWxkKQor
ICAgIHsKKyAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShjaGlsZCkpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+PiBtX2No
aWxkcmVuOworICAgIEFTVDo6QWRkcmVzc1NwYWNlIG1fYWRkcmVzc1NwYWNlOworfTsKKworY2xh
c3MgUG9pbnRlclR5cGVOYW1lTm9kZSA6IHB1YmxpYyBCYXNlVHlwZU5hbWVOb2RlIHsKK3B1Ymxp
YzoKKyAgICBQb2ludGVyVHlwZU5hbWVOb2RlKFN0cmluZyYmIG1hbmdsZWROYW1lLCBBU1Q6OkFk
ZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UpCisgICAgICAgIDogQmFzZVR5cGVOYW1lTm9kZShXVEZN
b3ZlKG1hbmdsZWROYW1lKSkKKyAgICAgICAgLCBtX2FkZHJlc3NTcGFjZShhZGRyZXNzU3BhY2Up
CisgICAgeworICAgIH0KKyAgICB2aXJ0dWFsIH5Qb2ludGVyVHlwZU5hbWVOb2RlKCkgPSBkZWZh
dWx0OworICAgIGJvb2wgaXNQb2ludGVyVHlwZU5hbWVOb2RlKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIEFTVDo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYWRkcmVzc1NwYWNlOyB9CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxCYXNlVHlw
ZU5hbWVOb2RlPj4mIGNoaWxkcmVuKCkgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQorICAgIHZvaWQg
YXBwZW5kKFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPiYmIGNoaWxkKQorICAgIHsKKyAgICAg
ICAgbV9jaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShjaGlsZCkpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+PiBtX2NoaWxkcmVuOworICAg
IEFTVDo6QWRkcmVzc1NwYWNlIG1fYWRkcmVzc1NwYWNlOworfTsKKworY2xhc3MgUmVmZXJlbmNl
VHlwZU5hbWVOb2RlIDogcHVibGljIEJhc2VUeXBlTmFtZU5vZGUgeworcHVibGljOgorICAgIFJl
ZmVyZW5jZVR5cGVOYW1lTm9kZShTdHJpbmcmJiBtYW5nbGVkTmFtZSwgQVNUOjpOYW1lZFR5cGUm
IG5hbWVkVHlwZSkKKyAgICAgICAgOiBCYXNlVHlwZU5hbWVOb2RlKFdURk1vdmUobWFuZ2xlZE5h
bWUpKQorICAgICAgICAsIG1fbmFtZWRUeXBlKG5hbWVkVHlwZSkKKyAgICB7CisgICAgfQorICAg
IHZpcnR1YWwgflJlZmVyZW5jZVR5cGVOYW1lTm9kZSgpID0gZGVmYXVsdDsKKyAgICBib29sIGlz
UmVmZXJlbmNlVHlwZU5hbWVOb2RlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIGNvbnN0IEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUoKSBjb25zdCB7IHJldHVybiBtX25h
bWVkVHlwZTsgfQorCitwcml2YXRlOgorICAgIEFTVDo6TmFtZWRUeXBlJiBtX25hbWVkVHlwZTsK
K307CisKK30KKworfQorCit9CisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExT
TF9CQVNFX1RZUEVfTkFNRURfTk9ERShUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlRvVmFsdWVU
eXBlTmFtZSkgXAorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpXSExTTDo6
TWV0YWw6OkJhc2VUeXBlTmFtZU5vZGUmIHR5cGUpIHsgcmV0dXJuIHR5cGUucHJlZGljYXRlOyB9
IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19XSExTTF9CQVNFX1RZUEVfTkFNRURfTk9ERShBcnJheVR5cGVOYW1lTm9kZSwgaXNBcnJheVR5
cGVOYW1lTm9kZSgpKQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0JBU0VfVFlQRV9O
QU1FRF9OT0RFKEFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlLCBpc0FycmF5UmVmZXJlbmNlVHlw
ZU5hbWVOb2RlKCkpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfQkFTRV9UWVBFX05B
TUVEX05PREUoUG9pbnRlclR5cGVOYW1lTm9kZSwgaXNQb2ludGVyVHlwZU5hbWVOb2RlKCkpCisK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfQkFTRV9UWVBFX05BTUVEX05PREUoUmVmZXJl
bmNlVHlwZU5hbWVOb2RlLCBpc1JlZmVyZW5jZVR5cGVOYW1lTm9kZSgpKQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBNZXRhbCB7CisKK2Ns
YXNzIFR5cGVOYW1lciA6IHB1YmxpYyBWaXNpdG9yIHsKK3ByaXZhdGU6CisgICAgdm9pZCB2aXNp
dChBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGluc2VydCh1bm5hbWVkVHlwZSwgbV90cmllLCBudWxscHRyKTsKKyAgICB9CisKKyAgICB2b2lk
IHZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24p
IG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbmFtZWRUeXBlTWFw
cGluZy5hZGQoJmVudW1lcmF0aW9uRGVmaW5pdGlvbiwgZ2VuZXJhdGVOZXh0TmFtZSgpKTsKKyAg
ICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAg
ICAgICAgVmlzaXRvcjo6dmlzaXQoZW51bWVyYXRpb25EZWZpbml0aW9uKTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJikgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIC8vIE5hdGl2ZSB0eXBlIGRlY2xhcmF0aW9ucyBhbHJlYWR5IGhhdmUgbmFtZXMs
IGFuZCBhcmUgYWxyZWFkeSBkZWNsYXJlZCBpbiBNZXRhbC4KKyAgICB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uYW1l
ZFR5cGVNYXBwaW5nLmFkZCgmc3RydWN0dXJlRGVmaW5pdGlvbiwgZ2VuZXJhdGVOZXh0TmFtZSgp
KTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdF
bnRyeSk7CisgICAgICAgIH0KKyAgICAgICAgVmlzaXRvcjo6dmlzaXQoc3RydWN0dXJlRGVmaW5p
dGlvbik7CisgICAgICAgIHsKKyAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPEFTVDo6VHlwZT4+IG5laWdoYm9yczsKKyAgICAgICAgICAgIGZvciAoYXV0byYgc3RydWN0
dXJlRWxlbWVudCA6IHN0cnVjdHVyZURlZmluaXRpb24uc3RydWN0dXJlRWxlbWVudHMoKSkKKyAg
ICAgICAgICAgICAgICBuZWlnaGJvcnMuYXBwZW5kKHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpKTsK
KyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9kZXBlbmRlbmN5R3JhcGguYWRkKCZzdHJ1
Y3R1cmVEZWZpbml0aW9uLCBXVEZNb3ZlKG5laWdoYm9ycykpOworICAgICAgICAgICAgQVNTRVJU
X1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmluaXRpb24p
IG92ZXJyaWRlCisgICAgeworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9
IG1fbmFtZWRUeXBlTWFwcGluZy5hZGQoJnR5cGVEZWZpbml0aW9uLCBnZW5lcmF0ZU5leHROYW1l
KCkpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05l
d0VudHJ5KTsKKyAgICAgICAgfQorICAgICAgICBWaXNpdG9yOjp2aXNpdCh0eXBlRGVmaW5pdGlv
bik7CisgICAgICAgIHsKKyAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PEFTVDo6VHlwZT4+IG5laWdoYm9ycyA9IHsgdHlwZURlZmluaXRpb24udHlwZSgpIH07CisgICAg
ICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZGVwZW5kZW5jeUdyYXBoLmFkZCgmdHlwZURlZmlu
aXRpb24sIFdURk1vdmUobmVpZ2hib3JzKSk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFk
ZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICB9CisgICAgfQorCisgICAg
U3RyaW5nIGdlbmVyYXRlTmV4dE5hbWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJp
bmcoJ3QnLCBtX3R5cGVDb3VudCsrKTsKKyAgICB9CisKKyAgICBVbmlxdWVSZWY8QmFzZVR5cGVO
YW1lTm9kZT4gYnVpbGQoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpCisgICAgeworICAg
ICAgICBpZiAoaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkpIHsKKyAgICAgICAg
ICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBkb3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVu
bmFtZWRUeXBlKTsKKyAgICAgICAgICAgIGF1dG8qIHJlc29sdmVkVHlwZSA9IHR5cGVSZWZlcmVu
Y2UucmVzb2x2ZWRUeXBlKCk7CisgICAgICAgICAgICBBU1NFUlQocmVzb2x2ZWRUeXBlKTsKKyAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZVJlZjxSZWZlcmVuY2VUeXBlTmFtZU5v
ZGU+KGdlbmVyYXRlTmV4dE5hbWUoKSwgKnJlc29sdmVkVHlwZSk7CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3VubmFtZWRUeXBlTWFwcGluZy5hZGQo
JnVubmFtZWRUeXBlLCAmcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFk
ZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6
VHlwZT4+IG5laWdoYm9ycyA9IHsgKnJlc29sdmVkVHlwZSB9OworICAgICAgICAgICAgICAgIGF1
dG8gYWRkUmVzdWx0ID0gbV9kZXBlbmRlbmN5R3JhcGguYWRkKCZ0eXBlUmVmZXJlbmNlLCBXVEZN
b3ZlKG5laWdoYm9ycykpOworICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0
LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1
bm5hbWVkVHlwZSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHBvaW50ZXJUeXBlID0gZG93bmNhc3Q8
QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpOworICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBtYWtlVW5pcXVlUmVmPFBvaW50ZXJUeXBlTmFtZU5vZGU+KGdlbmVyYXRlTmV4dE5hbWUoKSwg
cG9pbnRlclR5cGUuYWRkcmVzc1NwYWNlKCkpOworICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV91bm5hbWVkVHlwZU1hcHBpbmcuYWRkKCZ1bm5hbWVkVHlw
ZSwgJnJlc3VsdCk7CisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFk
ZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OlR5cGU+PiBuZWln
aGJvcnMgPSB7IHBvaW50ZXJUeXBlLmVsZW1lbnRUeXBlKCkgfTsKKyAgICAgICAgICAgICAgICBh
dXRvIGFkZFJlc3VsdCA9IG1fZGVwZW5kZW5jeUdyYXBoLmFkZCgmcG9pbnRlclR5cGUsIFdURk1v
dmUobmVpZ2hib3JzKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQs
IGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlc3Vs
dC0+YXBwZW5kKGJ1aWxkKHBvaW50ZXJUeXBlLmVsZW1lbnRUeXBlKCkpKTsKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZl
cmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpIHsKKyAgICAgICAgICAgIGF1dG8mIGFycmF5UmVmZXJl
bmNlVHlwZSA9IGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSk7
CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1ha2VVbmlxdWVSZWY8QXJyYXlSZWZlcmVuY2VU
eXBlTmFtZU5vZGU+KGdlbmVyYXRlTmV4dE5hbWUoKSwgYXJyYXlSZWZlcmVuY2VUeXBlLmFkZHJl
c3NTcGFjZSgpKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIGFkZFJlc3Vs
dCA9IG1fdW5uYW1lZFR5cGVNYXBwaW5nLmFkZCgmdW5uYW1lZFR5cGUsICZyZXN1bHQpOworICAg
ICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRy
eSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpUeXBlPj4gbmVpZ2hib3JzID0geyBhcnJheVJl
ZmVyZW5jZVR5cGUuZWxlbWVudFR5cGUoKSB9OworICAgICAgICAgICAgICAgIGF1dG8gYWRkUmVz
dWx0ID0gbV9kZXBlbmRlbmN5R3JhcGguYWRkKCZhcnJheVJlZmVyZW5jZVR5cGUsIFdURk1vdmUo
bmVpZ2hib3JzKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFk
ZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlc3VsdC0+
YXBwZW5kKGJ1aWxkKGFycmF5UmVmZXJlbmNlVHlwZS5lbGVtZW50VHlwZSgpKSk7CisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIEFTU0VSVChpczxBU1Q6OkFy
cmF5VHlwZT4odW5uYW1lZFR5cGUpKTsKKyAgICAgICAgYXV0byYgYXJyYXlUeXBlID0gZG93bmNh
c3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBt
YWtlVW5pcXVlUmVmPEFycmF5VHlwZU5hbWVOb2RlPihnZW5lcmF0ZU5leHROYW1lKCksIGFycmF5
VHlwZS5udW1FbGVtZW50cygpKTsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBhZGRSZXN1
bHQgPSBtX3VubmFtZWRUeXBlTWFwcGluZy5hZGQoJnVubmFtZWRUeXBlLCAmcmVzdWx0KTsKKyAg
ICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7
CisgICAgICAgIH0KKyAgICAgICAgeworICAgICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8QVNUOjpUeXBlPj4gbmVpZ2hib3JzID0geyBhcnJheVR5cGUudHlwZSgpIH07Cisg
ICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZGVwZW5kZW5jeUdyYXBoLmFkZCgmYXJyYXlU
eXBlLCBXVEZNb3ZlKG5laWdoYm9ycykpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRS
ZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQt
PmFwcGVuZChidWlsZChhcnJheVR5cGUudHlwZSgpKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCisgICAgdm9pZCBpbnNlcnQoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUs
IFZlY3RvcjxVbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4+JiB0eXBlcywgQVNUOjpVbm5hbWVk
VHlwZSogcHJldmlvdXMpCisgICAgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gc3RkOjpmaW5k
X2lmKHR5cGVzLmJlZ2luKCksIHR5cGVzLmVuZCgpLCBbJl0oQmFzZVR5cGVOYW1lTm9kZSYgYmFz
ZVR5cGVOYW1lTm9kZSkgLT4gYm9vbCB7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpUeXBlUmVm
ZXJlbmNlPih1bm5hbWVkVHlwZSkgJiYgaXM8UmVmZXJlbmNlVHlwZU5hbWVOb2RlPihiYXNlVHlw
ZU5hbWVOb2RlKSkgeworICAgICAgICAgICAgICAgIGF1dG8qIHJlc29sdmVkVHlwZSA9IGRvd25j
YXN0PEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpLnJlc29sdmVkVHlwZSgpOworICAg
ICAgICAgICAgICAgIEFTU0VSVChyZXNvbHZlZFR5cGUpOworICAgICAgICAgICAgICAgIHJldHVy
biByZXNvbHZlZFR5cGUgPT0gJmRvd25jYXN0PFJlZmVyZW5jZVR5cGVOYW1lTm9kZT4oYmFzZVR5
cGVOYW1lTm9kZSkubmFtZWRUeXBlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
aXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpICYmIGlzPFBvaW50ZXJUeXBlTmFtZU5v
ZGU+KGJhc2VUeXBlTmFtZU5vZGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxB
U1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkuYWRkcmVzc1NwYWNlKCkgPT0gZG93bmNhc3Q8
UG9pbnRlclR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9kZSkuYWRkcmVzc1NwYWNlKCk7Cisg
ICAgICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSAm
JiBpczxBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9kZSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5h
bWVkVHlwZSkuYWRkcmVzc1NwYWNlKCkgPT0gZG93bmNhc3Q8QXJyYXlSZWZlcmVuY2VUeXBlTmFt
ZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpLmFkZHJlc3NTcGFjZSgpOworICAgICAgICAgICAgaWYg
KGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkgJiYgaXM8QXJyYXlUeXBlTmFtZU5vZGU+
KGJhc2VUeXBlTmFtZU5vZGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxBU1Q6
OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpLm51bUVsZW1lbnRzKCkgPT0gZG93bmNhc3Q8QXJyYXlU
eXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpLm51bUVsZW1lbnRzKCk7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0pOworICAgICAgICBpZiAoaXRlcmF0b3IgPT0gdHlw
ZXMuZW5kKCkpIHsKKyAgICAgICAgICAgIHR5cGVzLmFwcGVuZChidWlsZCh1bm5hbWVkVHlwZSkp
OworICAgICAgICAgICAgaWYgKHByZXZpb3VzKSB7CisgICAgICAgICAgICAgICAgVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpUeXBlPj4gbmVpZ2hib3JzID0geyB1bm5hbWVkVHlw
ZSB9OworICAgICAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9kZXBlbmRlbmN5R3JhcGgu
YWRkKHByZXZpb3VzLCBXVEZNb3ZlKG5laWdoYm9ycykpOworICAgICAgICAgICAgICAgIEFTU0VS
VF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdW5uYW1l
ZFR5cGVNYXBwaW5nLmFkZCgmdW5uYW1lZFR5cGUsICYqaXRlcmF0b3IpOworICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAg
ICAgIGlmIChpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRUeXBlKSkgeworICAgICAgICAg
ICAgICAgIC8vIEknbSBkb25lLgorICAgICAgICAgICAgfSBlbHNlIGlmIChpczxBU1Q6OlBvaW50
ZXJUeXBlPih1bm5hbWVkVHlwZSkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBwb2ludGVyVHlw
ZSA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKTsKKyAgICAgICAgICAg
ICAgICBpbnNlcnQocG9pbnRlclR5cGUuZWxlbWVudFR5cGUoKSwgZG93bmNhc3Q8UG9pbnRlclR5
cGVOYW1lTm9kZT4oc3RhdGljX2Nhc3Q8QmFzZVR5cGVOYW1lTm9kZSY+KCppdGVyYXRvcikpLmNo
aWxkcmVuKCksICZwb2ludGVyVHlwZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzPEFTVDo6
QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpIHsKKyAgICAgICAgICAgICAgICBhdXRv
JiBhcnJheVJlZmVyZW5jZVR5cGUgPSBkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4o
dW5uYW1lZFR5cGUpOworICAgICAgICAgICAgICAgIGluc2VydChhcnJheVJlZmVyZW5jZVR5cGUu
ZWxlbWVudFR5cGUoKSwgZG93bmNhc3Q8QXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGU+KHN0YXRp
Y19jYXN0PEJhc2VUeXBlTmFtZU5vZGUmPigqaXRlcmF0b3IpKS5jaGlsZHJlbigpLCAmYXJyYXlS
ZWZlcmVuY2VUeXBlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQVNT
RVJUKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpOworICAgICAgICAgICAgICAgIGF1
dG8mIGFycmF5VHlwZSA9IGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSk7Cisg
ICAgICAgICAgICAgICAgaW5zZXJ0KGFycmF5VHlwZS50eXBlKCksIGRvd25jYXN0PEFycmF5VHlw
ZU5hbWVOb2RlPihzdGF0aWNfY2FzdDxCYXNlVHlwZU5hbWVOb2RlJj4oKml0ZXJhdG9yKSkuY2hp
bGRyZW4oKSwgJmFycmF5VHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+PiBtX3RyaWU7CisgICAgSGFz
aE1hcDxBU1Q6OlVubmFtZWRUeXBlKiwgQmFzZVR5cGVOYW1lTm9kZSo+IG1fdW5uYW1lZFR5cGVN
YXBwaW5nOworICAgIEhhc2hNYXA8QVNUOjpOYW1lZFR5cGUqLCBTdHJpbmc+IG1fbmFtZWRUeXBl
TWFwcGluZzsKKyAgICBIYXNoTWFwPEFTVDo6VHlwZSosIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPEFTVDo6VHlwZT4+PiBtX2RlcGVuZGVuY3lHcmFwaDsKKyAgICB1bnNpZ25lZCBtX3R5
cGVDb3VudCB7IDAgfTsKK307CisKK3ZvaWQgdHlwZU5hbWVzKFByb2dyYW0mIHByb2dyYW0pCit7
CisgICAgVHlwZU5hbWVyIHR5cGVOYW1lcjsKKyAgICB0eXBlTmFtZXIuVmlzaXRvcjo6dmlzaXQo
cHJvZ3JhbSk7Cit9CisKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOGQ1ODI2MTA5MWE5ODc4NTYwNDhiYThkNzA1MjcyNTA1ZThkYjJhNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFs
L1dITFNMVHlwZU5hbWVyLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1l
c3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCituYW1lc3BhY2UgTWV0YWwgeworCit2
b2lkIHR5cGVOYW1lcyhQcm9ncmFtJik7CisKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAppbmRleCBiNjEyNDE5MmNlOTQ0NTJmNmQxZmU0YmJmMzA5ZmNkYWM0MWI0NzJhLi43YjQx
ZWJlMWI1OTcxNTUwNTk1MWQyYzdhMmQ1OGE1NjNiOTViZTI2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAt
MzI2LDYgKzMyNiw3IEBAIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAKIE1v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGl0ZXJhbFR5cGVDaGVja2VyLmNwcAogTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xIaWdoWm9tYmllRmluZGVyLmNwcAogTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xMb29wQ2hlY2tlci5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
VHlwZU5hbWVyLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xGdW5jdGlvblN0YWdlQ2hl
Y2tlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVBcmd1bWVudC5jcHAK
IE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBj
NDk4ZmE4YTJiZmVmZDVjNzkwMzExNWJmMjM3MDg5NjZmOTI0MTE1Li40Zjk5ODIzMmE5OTMwMjhh
NmIyMGQwZTI3ZmQ1MjFkZGE4YTA5N2IyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NDI3LDE3ICs2NDI3LDE2IEBACiAJCTFD
ODQwQjlBMjFFQzQwMDkwMEQwNTAwRCAvKiBXSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQzg0MEI5QjIxRUM0MDA5MDBEMDUwMEQgLyogV0hMU0xDaGVja2Vy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMQ2hlY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFDOTA0REY5MEJBOUQyQzgwMDgxRTlEMCAvKiBWZXJzaW9uLnhjY29u
ZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IFZlcnNpb24ueGNjb25maWc7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFDQTBDMkU0MjFFRUQxMkEwMEExMTg2MCAvKiBX
SExTTEZ1bmN0aW9uU3RhZ2VDaGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMRnVu
Y3Rpb25TdGFnZUNoZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQ0Ew
QzJFNTIxRUVEMTJBMDBBMTE4NjAgLyogV0hMU0xGdW5jdGlvblN0YWdlQ2hlY2tlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXSExTTEZ1bmN0aW9uU3RhZ2VDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTFDOUFFNUNBMjFFRDlERjUwMDY5RDVGMiAvKiBXSExTTEhpZ2hab21iaWVG
aW5kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xIaWdoWm9tYmllRmluZGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM5QUU1Q0IyMUVEOURGNTAwNjlENUYyIC8q
IFdITFNMSGlnaFpvbWJpZUZpbmRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEhpZ2hab21iaWVG
aW5kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBMEMyREUyMUVFQjVGNDAw
QTExODYwIC8qIFdITFNMUmVjdXJzaW9uQ2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFJl
Y3Vyc2lvbkNoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBMEMyRTAy
MUVFQjVGNTAwQTExODYwIC8qIFdITFNMUmVjdXJzaW9uQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXSExTTFJlY3Vyc2lvbkNoZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxQ0EwQzJFNDIxRUVEMTJBMDBBMTE4NjAgLyogV0hMU0xGdW5jdGlvblN0YWdlQ2hl
Y2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTEZ1bmN0aW9uU3RhZ2VDaGVja2VyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNBMEMyRTUyMUVFRDEyQTAwQTExODYw
IC8qIFdITFNMRnVuY3Rpb25TdGFnZUNoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xGdW5j
dGlvblN0YWdlQ2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0EwQzJF
QTIxRUVENkY1MDBBMTE4NjAgLyogV0hMU0xMaXRlcmFsVHlwZUNoZWNrZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0hMU0xMaXRlcmFsVHlwZUNoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUNBMEMyRUMyMUVFRDZGNjAwQTExODYwIC8qIFdITFNMTGl0ZXJhbFR5cGVDaGVja2Vy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMTGl0ZXJhbFR5cGVDaGVja2VyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUM5QUU1Q0EyMUVEOURGNTAwNjlENUYyIC8qIFdI
TFNMSGlnaFpvbWJpZUZpbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTEhpZ2hab21i
aWVGaW5kZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQzlBRTVDQjIxRUQ5
REY1MDA2OUQ1RjIgLyogV0hMU0xIaWdoWm9tYmllRmluZGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdI
TFNMSGlnaFpvbWJpZUZpbmRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0Ew
QzJGNDIxRUVEQUQwMDBBMTE4NjAgLyogV0hMU0xMb29wQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXSExTTExvb3BDaGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUNBMEMyRjUyMUVFREFEMTAwQTExODYwIC8qIFdITFNMTG9vcENoZWNrZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0hMU0xMb29wQ2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkxQ0EwQzJGNjIxRUVEQUQyMDBBMTE4NjAgLyogQVNUICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZm9sZGVyOyBwYXRoID0gQVNUOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQ0ExOUUwMzBEQzI1NTk1MDA2NUE5OTQgLyogRXZlbnRMb29w
TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRXZlbnRMb29w
TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0ExOUUxNTBEQzI1NUNBMDA2
NUE5OTQgLyogRXZlbnRMb29wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2
ZW50TG9vcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0FGMzQ3RTBBNkM0MDUy
MDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYlNjcmlwdE9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTMzODcsNiArMTMzODYsOCBAQAogCQlDMjQ1OEU2MTFGRTg5NzlFMDA1OTQ3NTkgLyogRm9udENh
Y2hlQ29yZVRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udENhY2hlQ29yZVRleHQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI2MDE3QTExQzcyREM5OTAwRjc0QTE2IC8qIENTU0Zv
bnRGYWNlU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0Zv
bnRGYWNlU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI2MDE3QTIxQzcy
REM5OTAwRjc0QTE2IC8qIENTU0ZvbnRGYWNlU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENTU0ZvbnRGYWNlU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUMyNkQyQzcwMjFGMDVENTUwMDQ5Nzg5OSAvKiBXSExTTFR5cGVOYW1lci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXSExTTFR5cGVOYW1lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUMyNkQyQzcxMjFGMDVENTUwMDQ5Nzg5OSAvKiBXSExTTFR5cGVOYW1lci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXSExTTFR5cGVOYW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MjgwODMzQzFDNkRCMTk0MDAxNDUxQjYgLyogRm9udEZhY2UuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IEZvbnRGYWNlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4MDgz
M0QxQzZEQzIyQzAwMTQ1MUI2IC8qIEpTRm9udEZhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gSlNGb250RmFjZS5jcHA7IHBhdGggPSBEZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0pTRm9udEZhY2UuY3BwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OwogCQlDMjgwODMzRTFDNkRDMjJDMDAxNDUxQjYgLyogSlNGb250RmFjZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBKU0ZvbnRGYWNlLmg7IHBhdGggPSBEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTRm9udEZhY2UuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKQEAgLTE3MDMyLDYgKzE3MDMzLDEwMCBAQAogCQkJdGFiV2lkdGggPSA4OwogCQkJdXNlc1Rh
YnMgPSAwOwogCQl9OworCQkxQ0EwQzJGNjIxRUVEQUQyMDBBMTE4NjAgLyogQVNUICovID0gewor
CQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkxQzg0MEI5MDIxRUMzMEY5
MDBEMDUwMEQgLyogV0hMU0xBZGRyZXNzU3BhY2UuaCAqLywKKwkJCQlDMjFCRjcyNTIxQ0Q4OUUy
MDAyMjc5NzkgLyogV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCAqLywKKwkJCQlDMjFCRjcwOTIx
Q0Q4OUNBMDAyMjc5NzkgLyogV0hMU0xBcnJheVR5cGUuaCAqLywKKwkJCQlDMjFCRjczMDIxQ0Q4
OUVEMDAyMjc5NzkgLyogV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oICovLAorCQkJCUMyMUJG
NzBBMjFDRDg5Q0IwMDIyNzk3OSAvKiBXSExTTEJhc2VGdW5jdGlvbkF0dHJpYnV0ZS5oICovLAor
CQkJCUMyMUJGNkZBMjFDRDg5QkUwMDIyNzk3OSAvKiBXSExTTEJhc2VTZW1hbnRpYy5oICovLAor
CQkJCUMyMUJGNzFFMjFDRDg5REMwMDIyNzk3OSAvKiBXSExTTEJsb2NrLmggKi8sCisJCQkJQzIx
QkY2RjYyMUNEODlCNzAwMjI3OTc5IC8qIFdITFNMQm9vbGVhbkxpdGVyYWwuaCAqLywKKwkJCQlD
MjFCRjcxQTIxQ0Q4OUQ4MDAyMjc5NzkgLyogV0hMU0xCcmVhay5oICovLAorCQkJCUMyMTM4QTEz
MjFEREVDRDMwMEY1MTZCQSAvKiBXSExTTEJ1aWx0SW5TZW1hbnRpYy5jcHAgKi8sCisJCQkJQzIx
QkY3MjIyMUNEODlERjAwMjI3OTc5IC8qIFdITFNMQnVpbHRJblNlbWFudGljLmggKi8sCisJCQkJ
QzIxQkY3MTYyMUNEODlENTAwMjI3OTc5IC8qIFdITFNMQ2FsbEV4cHJlc3Npb24uaCAqLywKKwkJ
CQlDMjFCRjcwNjIxQ0Q4OUM3MDAyMjc5NzkgLyogV0hMU0xDb21tYUV4cHJlc3Npb24uaCAqLywK
KwkJCQlDMjFCRjczMzIxQ0Q4OUYwMDAyMjc5NzkgLyogV0hMU0xDb25zdGFudEV4cHJlc3Npb24u
aCAqLywKKwkJCQlDMjFCRjZGNTIxQ0Q4OUI1MDAyMjc5NzkgLyogV0hMU0xDb250aW51ZS5oICov
LAorCQkJCUMyMUJGNzAxMjFDRDg5QzQwMDIyNzk3OSAvKiBXSExTTERlcmVmZXJlbmNlRXhwcmVz
c2lvbi5oICovLAorCQkJCUMyMUJGNzE4MjFDRDg5RDcwMDIyNzk3OSAvKiBXSExTTERvdEV4cHJl
c3Npb24uaCAqLywKKwkJCQlDMjFCRjZGQjIxQ0Q4OUJFMDAyMjc5NzkgLyogV0hMU0xEb1doaWxl
TG9vcC5oICovLAorCQkJCUMyMUJGNzI4MjFDRDg5RTUwMDIyNzk3OSAvKiBXSExTTEVmZmVjdGZ1
bEV4cHJlc3Npb25TdGF0ZW1lbnQuaCAqLywKKwkJCQkxQzg0MEI3RDIxRUJFMEI4MDBEMDUwMEQg
LyogV0hMU0xFbnRyeVBvaW50VHlwZS5oICovLAorCQkJCUMyMUJGNzIwMjFDRDg5REQwMDIyNzk3
OSAvKiBXSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oICovLAorCQkJCUMyMUJGNzI2MjFDRDg5
RTMwMDIyNzk3OSAvKiBXSExTTEVudW1lcmF0aW9uTWVtYmVyLmggKi8sCisJCQkJQzIxQkY3MDIy
MUNEODlDNDAwMjI3OTc5IC8qIFdITFNMRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmggKi8sCisJ
CQkJQzIxQkY3MEMyMUNEODlDQzAwMjI3OTc5IC8qIFdITFNMRXhwcmVzc2lvbi5oICovLAorCQkJ
CUMyMUJGNzAwMjFDRDg5QzIwMDIyNzk3OSAvKiBXSExTTEZhbGx0aHJvdWdoLmggKi8sCisJCQkJ
QzIxQkY3MzUyMUNEODlGMjAwMjI3OTc5IC8qIFdITFNMRmxvYXRMaXRlcmFsLmggKi8sCisJCQkJ
MUNCNjlCMzgyMURGMDNFMTAwNkU4NDZBIC8qIFdITFNMRmxvYXRMaXRlcmFsVHlwZS5jcHAgKi8s
CisJCQkJMUNCNjlCMzQyMURFRDYzQTAwNkU4NDZBIC8qIFdITFNMRmxvYXRMaXRlcmFsVHlwZS5o
ICovLAorCQkJCUMyMUJGNzM0MjFDRDg5RjEwMDIyNzk3OSAvKiBXSExTTEZvckxvb3AuaCAqLywK
KwkJCQlDMjFCRjcwNTIxQ0Q4OUM3MDAyMjc5NzkgLyogV0hMU0xGdW5jdGlvbkF0dHJpYnV0ZS5o
ICovLAorCQkJCUMyMUJGNkZEMjFDRDg5QzAwMDIyNzk3OSAvKiBXSExTTEZ1bmN0aW9uRGVjbGFy
YXRpb24uaCAqLywKKwkJCQlDMjFCRjZGNDIxQ0Q4OUIzMDAyMjc5NzkgLyogV0hMU0xGdW5jdGlv
bkRlZmluaXRpb24uaCAqLywKKwkJCQlDMjFCRjZGRjIxQ0Q4OUMyMDAyMjc5NzkgLyogV0hMU0xJ
ZlN0YXRlbWVudC5oICovLAorCQkJCUMyMUJGNkY3MjFDRDg5QjkwMDIyNzk3OSAvKiBXSExTTElu
ZGV4RXhwcmVzc2lvbi5oICovLAorCQkJCUMyMEY0RjY2MjFERkYyMzYwMDcwQzQ1QSAvKiBXSExT
TEludGVnZXJMaXRlcmFsLmNwcCAqLywKKwkJCQlDMjFCRjZGODIxQ0Q4OUJCMDAyMjc5NzkgLyog
V0hMU0xJbnRlZ2VyTGl0ZXJhbC5oICovLAorCQkJCTFDQjY5QjM5MjFERjAzRjMwMDZFODQ2QSAv
KiBXSExTTEludGVnZXJMaXRlcmFsVHlwZS5jcHAgKi8sCisJCQkJMUNCNjlCMzUyMURFRDY0OTAw
NkU4NDZBIC8qIFdITFNMSW50ZWdlckxpdGVyYWxUeXBlLmggKi8sCisJCQkJQzIxQkY3MzIyMUNE
ODlFRjAwMjI3OTc5IC8qIFdITFNMTG9naWNhbEV4cHJlc3Npb24uaCAqLywKKwkJCQlDMjFCRjcx
NTIxQ0Q4OUQ0MDAyMjc5NzkgLyogV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oICovLAorCQkJ
CUMyMUJGNzJEMjFDRDg5RTkwMDIyNzk3OSAvKiBXSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24uaCAqLywKKwkJCQlDMjFCRjcyQzIxQ0Q4OUU5MDAyMjc5NzkgLyogV0hMU0xNYWtlUG9p
bnRlckV4cHJlc3Npb24uaCAqLywKKwkJCQkxQzMzMjc3MTIxQ0YwQkUxMDAwREM5RjIgLyogV0hM
U0xOYW1lZFR5cGUuaCAqLywKKwkJCQlDMjFCRjcyMzIxQ0Q4OUUxMDAyMjc5NzkgLyogV0hMU0xO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmggKi8sCisJCQkJQzIxQkY3MkEyMUNEODlFNzAwMjI3
OTc5IC8qIFdITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmggKi8sCisJCQkJQzIxQkY3MjQyMUNE
ODlFMTAwMjI3OTc5IC8qIFdITFNMTm9kZS5oICovLAorCQkJCUMyMUJGNzA3MjFDRDg5QzgwMDIy
Nzk3OSAvKiBXSExTTE51bGxMaXRlcmFsLmggKi8sCisJCQkJMUNCNjlCM0EyMURGMDQwMzAwNkU4
NDZBIC8qIFdITFNMTnVsbExpdGVyYWxUeXBlLmNwcCAqLywKKwkJCQkxQ0I2OUIzNjIxREVENjU3
MDA2RTg0NkEgLyogV0hMU0xOdWxsTGl0ZXJhbFR5cGUuaCAqLywKKwkJCQlDMjFCRjcyMTIxQ0Q4
OURFMDAyMjc5NzkgLyogV0hMU0xOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUuaCAqLywKKwkJ
CQlDMjFCRjcyRjIxQ0Q4OUVDMDAyMjc5NzkgLyogV0hMU0xQb2ludGVyVHlwZS5oICovLAorCQkJ
CUMyMUJGNzJFMjFDRDg5RUEwMDIyNzk3OSAvKiBXSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bi5oICovLAorCQkJCUMyMUJGNzBCMjFDRDg5Q0MwMDIyNzk3OSAvKiBXSExTTFF1YWxpZmllci5o
ICovLAorCQkJCUMyMUJGNzFCMjFDRDg5RDkwMDIyNzk3OSAvKiBXSExTTFJlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24uaCAqLywKKwkJCQlDMjFCRjcwRDIxQ0Q4OUNEMDAyMjc5NzkgLyogV0hMU0xS
ZWZlcmVuY2VUeXBlLmggKi8sCisJCQkJMUNCNjlCMzIyMURFRDQwQjAwNkU4NDZBIC8qIFdITFNM
UmVzb2x2YWJsZVR5cGUuaCAqLywKKwkJCQlDMjEzOEExNTIxRERFQ0U5MDBGNTE2QkEgLyogV0hM
U0xSZXNvdXJjZVNlbWFudGljLmNwcCAqLywKKwkJCQlDMjFCRjcwODIxQ0Q4OUM5MDAyMjc5Nzkg
LyogV0hMU0xSZXNvdXJjZVNlbWFudGljLmggKi8sCisJCQkJQzIxQkY3MDMyMUNEODlDNTAwMjI3
OTc5IC8qIFdITFNMUmV0dXJuLmggKi8sCisJCQkJQzIxQkY2RjkyMUNEODlCRDAwMjI3OTc5IC8q
IFdITFNMU2VtYW50aWMuaCAqLywKKwkJCQlDMjEzOEExNjIxRERFQ0ZCMDBGNTE2QkEgLyogV0hM
U0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuY3BwICovLAorCQkJCUMyMUJGNzM2MjFD
RDg5RjMwMDIyNzk3OSAvKiBXSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5oICov
LAorCQkJCUMyMTM4QTE3MjFEREVEMEQwMEY1MTZCQSAvKiBXSExTTFN0YWdlSW5PdXRTZW1hbnRp
Yy5jcHAgKi8sCisJCQkJQzIxQkY3MEUyMUNEODlDRTAwMjI3OTc5IC8qIFdITFNMU3RhZ2VJbk91
dFNlbWFudGljLmggKi8sCisJCQkJQzIxQkY3MTIyMUNEODlEMTAwMjI3OTc5IC8qIFdITFNMU3Rh
dGVtZW50LmggKi8sCisJCQkJQzIxQkY3MjcyMUNEODlFNDAwMjI3OTc5IC8qIFdITFNMU3RydWN0
dXJlRGVmaW5pdGlvbi5oICovLAorCQkJCUMyMUJGNkZFMjFDRDg5QzEwMDIyNzk3OSAvKiBXSExT
TFN0cnVjdHVyZUVsZW1lbnQuaCAqLywKKwkJCQlDMjFCRjcxOTIxQ0Q4OUQ3MDAyMjc5NzkgLyog
V0hMU0xTd2l0Y2hDYXNlLmggKi8sCisJCQkJQzIxQkY3MzEyMUNEODlFRTAwMjI3OTc5IC8qIFdI
TFNMU3dpdGNoU3RhdGVtZW50LmggKi8sCisJCQkJQzIxQkY3MUMyMUNEODlEQTAwMjI3OTc5IC8q
IFdITFNMVGVybmFyeUV4cHJlc3Npb24uaCAqLywKKwkJCQlDMjFCRjZGMzIxQ0Q4OUFEMDAyMjc5
NzkgLyogV0hMU0xUcmFwLmggKi8sCisJCQkJQzIxQkY3MUQyMUNEODlEQjAwMjI3OTc5IC8qIFdI
TFNMVHlwZS5oICovLAorCQkJCUMyODhDNzJEMjFDOTkxREEwMDJERjVDQSAvKiBXSExTTFR5cGVB
cmd1bWVudC5jcHAgKi8sCisJCQkJQzIxQkY3MTEyMUNEODlEMTAwMjI3OTc5IC8qIFdITFNMVHlw
ZUFyZ3VtZW50LmggKi8sCisJCQkJQzIxQkY3MjkyMUNEODlFNjAwMjI3OTc5IC8qIFdITFNMVHlw
ZURlZmluaXRpb24uaCAqLywKKwkJCQlDMjBGNEY2NDIxREZCRTVDMDA3MEM0NUEgLyogV0hMU0xU
eXBlUmVmZXJlbmNlLmNwcCAqLywKKwkJCQlDMjFCRjcxRjIxQ0Q4OURDMDAyMjc5NzkgLyogV0hM
U0xUeXBlUmVmZXJlbmNlLmggKi8sCisJCQkJMUMzMzI3NzIyMUNGMEQyRTAwMERDOUYyIC8qIFdI
TFNMVW5uYW1lZFR5cGUuaCAqLywKKwkJCQlDMjBGNEY2NzIxREZGM0E3MDA3MEM0NUEgLyogV0hM
U0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmNwcCAqLywKKwkJCQlDMjFCRjcyQjIxQ0Q4OUU4MDAy
Mjc5NzkgLyogV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmggKi8sCisJCQkJMUNCNjlCM0Iy
MURGMDQxRTAwNkU4NDZBIC8qIFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwICov
LAorCQkJCTFDQjY5QjM3MjFERUQ2NkIwMDZFODQ2QSAvKiBXSExTTFVuc2lnbmVkSW50ZWdlckxp
dGVyYWxUeXBlLmggKi8sCisJCQkJQzIxQkY2RkMyMUNEODlCRjAwMjI3OTc5IC8qIFdITFNMVmFs
dWUuaCAqLywKKwkJCQlDMjFCRjcxMDIxQ0Q4OUQwMDAyMjc5NzkgLyogV0hMU0xWYXJpYWJsZURl
Y2xhcmF0aW9uLmggKi8sCisJCQkJQzIxQkY3MTQyMUNEODlEMzAwMjI3OTc5IC8qIFdITFNMVmFy
aWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCAqLywKKwkJCQlDMjFCRjcxMzIxQ0Q4OUQyMDAy
Mjc5NzkgLyogV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oICovLAorCQkJCUMyMUJGNzA0MjFDRDg5
QzYwMDIyNzk3OSAvKiBXSExTTFdoaWxlTG9vcC5oICovLAorCQkJKTsKKwkJCXBhdGggPSBBU1Q7
CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQkxQ0RENDQ2NjBCQTlDODAwMDBG
OTAxNDcgLyogQ29uZmlndXJhdGlvbnMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKApAQCAtMjU0NTksNiArMjU1NTQsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKIAkJCQkxQ0EwQzJGNjIxRUVEQUQyMDBBMTE4NjAgLyogQVNUICovLAor
CQkJCUMyNkQyQzZFMjFGMDVDREUwMDQ5Nzg5OSAvKiBNZXRhbCAqLywKIAkJCQlDMjM0QTlCMjIx
RTkyQzFGMDAzQzk4NEQgLyogV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAgKi8sCiAJ
CQkJQzIzNEE5QUUyMUU5MkMxQTAwM0M5ODREIC8qIFdITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlv
bnMuaCAqLywKIAkJCQkxQzg0MEI5QjIxRUM0MDA5MDBEMDUwMEQgLyogV0hMU0xDaGVja2VyLmNw
cCAqLywKQEAgLTI1NTA4LDk4ICsyNTYwNCwxMyBAQAogCQkJcGF0aCA9IFdITFNMOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJMUNBMEMyRjYyMUVFREFEMjAwQTExODYwIC8q
IEFTVCAqLyA9IHsKKwkJQzI2RDJDNkUyMUYwNUNERTAwNDk3ODk5IC8qIE1ldGFsICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkxQzg0MEI5MDIxRUMzMEY5
MDBEMDUwMEQgLyogV0hMU0xBZGRyZXNzU3BhY2UuaCAqLywKLQkJCQlDMjFCRjcyNTIxQ0Q4OUUy
MDAyMjc5NzkgLyogV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCAqLywKLQkJCQlDMjFCRjcwOTIx
Q0Q4OUNBMDAyMjc5NzkgLyogV0hMU0xBcnJheVR5cGUuaCAqLywKLQkJCQlDMjFCRjczMDIxQ0Q4
OUVEMDAyMjc5NzkgLyogV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oICovLAotCQkJCUMyMUJG
NzBBMjFDRDg5Q0IwMDIyNzk3OSAvKiBXSExTTEJhc2VGdW5jdGlvbkF0dHJpYnV0ZS5oICovLAot
CQkJCUMyMUJGNkZBMjFDRDg5QkUwMDIyNzk3OSAvKiBXSExTTEJhc2VTZW1hbnRpYy5oICovLAot
CQkJCUMyMUJGNzFFMjFDRDg5REMwMDIyNzk3OSAvKiBXSExTTEJsb2NrLmggKi8sCi0JCQkJQzIx
QkY2RjYyMUNEODlCNzAwMjI3OTc5IC8qIFdITFNMQm9vbGVhbkxpdGVyYWwuaCAqLywKLQkJCQlD
MjFCRjcxQTIxQ0Q4OUQ4MDAyMjc5NzkgLyogV0hMU0xCcmVhay5oICovLAotCQkJCUMyMTM4QTEz
MjFEREVDRDMwMEY1MTZCQSAvKiBXSExTTEJ1aWx0SW5TZW1hbnRpYy5jcHAgKi8sCi0JCQkJQzIx
QkY3MjIyMUNEODlERjAwMjI3OTc5IC8qIFdITFNMQnVpbHRJblNlbWFudGljLmggKi8sCi0JCQkJ
QzIxQkY3MTYyMUNEODlENTAwMjI3OTc5IC8qIFdITFNMQ2FsbEV4cHJlc3Npb24uaCAqLywKLQkJ
CQlDMjFCRjcwNjIxQ0Q4OUM3MDAyMjc5NzkgLyogV0hMU0xDb21tYUV4cHJlc3Npb24uaCAqLywK
LQkJCQlDMjFCRjczMzIxQ0Q4OUYwMDAyMjc5NzkgLyogV0hMU0xDb25zdGFudEV4cHJlc3Npb24u
aCAqLywKLQkJCQlDMjFCRjZGNTIxQ0Q4OUI1MDAyMjc5NzkgLyogV0hMU0xDb250aW51ZS5oICov
LAotCQkJCUMyMUJGNzAxMjFDRDg5QzQwMDIyNzk3OSAvKiBXSExTTERlcmVmZXJlbmNlRXhwcmVz
c2lvbi5oICovLAotCQkJCUMyMUJGNzE4MjFDRDg5RDcwMDIyNzk3OSAvKiBXSExTTERvdEV4cHJl
c3Npb24uaCAqLywKLQkJCQlDMjFCRjZGQjIxQ0Q4OUJFMDAyMjc5NzkgLyogV0hMU0xEb1doaWxl
TG9vcC5oICovLAotCQkJCUMyMUJGNzI4MjFDRDg5RTUwMDIyNzk3OSAvKiBXSExTTEVmZmVjdGZ1
bEV4cHJlc3Npb25TdGF0ZW1lbnQuaCAqLywKLQkJCQkxQzg0MEI3RDIxRUJFMEI4MDBEMDUwMEQg
LyogV0hMU0xFbnRyeVBvaW50VHlwZS5oICovLAotCQkJCUMyMUJGNzIwMjFDRDg5REQwMDIyNzk3
OSAvKiBXSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oICovLAotCQkJCUMyMUJGNzI2MjFDRDg5
RTMwMDIyNzk3OSAvKiBXSExTTEVudW1lcmF0aW9uTWVtYmVyLmggKi8sCi0JCQkJQzIxQkY3MDIy
MUNEODlDNDAwMjI3OTc5IC8qIFdITFNMRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmggKi8sCi0J
CQkJQzIxQkY3MEMyMUNEODlDQzAwMjI3OTc5IC8qIFdITFNMRXhwcmVzc2lvbi5oICovLAotCQkJ
CUMyMUJGNzAwMjFDRDg5QzIwMDIyNzk3OSAvKiBXSExTTEZhbGx0aHJvdWdoLmggKi8sCi0JCQkJ
QzIxQkY3MzUyMUNEODlGMjAwMjI3OTc5IC8qIFdITFNMRmxvYXRMaXRlcmFsLmggKi8sCi0JCQkJ
MUNCNjlCMzgyMURGMDNFMTAwNkU4NDZBIC8qIFdITFNMRmxvYXRMaXRlcmFsVHlwZS5jcHAgKi8s
Ci0JCQkJMUNCNjlCMzQyMURFRDYzQTAwNkU4NDZBIC8qIFdITFNMRmxvYXRMaXRlcmFsVHlwZS5o
ICovLAotCQkJCUMyMUJGNzM0MjFDRDg5RjEwMDIyNzk3OSAvKiBXSExTTEZvckxvb3AuaCAqLywK
LQkJCQlDMjFCRjcwNTIxQ0Q4OUM3MDAyMjc5NzkgLyogV0hMU0xGdW5jdGlvbkF0dHJpYnV0ZS5o
ICovLAotCQkJCUMyMUJGNkZEMjFDRDg5QzAwMDIyNzk3OSAvKiBXSExTTEZ1bmN0aW9uRGVjbGFy
YXRpb24uaCAqLywKLQkJCQlDMjFCRjZGNDIxQ0Q4OUIzMDAyMjc5NzkgLyogV0hMU0xGdW5jdGlv
bkRlZmluaXRpb24uaCAqLywKLQkJCQlDMjFCRjZGRjIxQ0Q4OUMyMDAyMjc5NzkgLyogV0hMU0xJ
ZlN0YXRlbWVudC5oICovLAotCQkJCUMyMUJGNkY3MjFDRDg5QjkwMDIyNzk3OSAvKiBXSExTTElu
ZGV4RXhwcmVzc2lvbi5oICovLAotCQkJCUMyMEY0RjY2MjFERkYyMzYwMDcwQzQ1QSAvKiBXSExT
TEludGVnZXJMaXRlcmFsLmNwcCAqLywKLQkJCQlDMjFCRjZGODIxQ0Q4OUJCMDAyMjc5NzkgLyog
V0hMU0xJbnRlZ2VyTGl0ZXJhbC5oICovLAotCQkJCTFDQjY5QjM5MjFERjAzRjMwMDZFODQ2QSAv
KiBXSExTTEludGVnZXJMaXRlcmFsVHlwZS5jcHAgKi8sCi0JCQkJMUNCNjlCMzUyMURFRDY0OTAw
NkU4NDZBIC8qIFdITFNMSW50ZWdlckxpdGVyYWxUeXBlLmggKi8sCi0JCQkJQzIxQkY3MzIyMUNE
ODlFRjAwMjI3OTc5IC8qIFdITFNMTG9naWNhbEV4cHJlc3Npb24uaCAqLywKLQkJCQlDMjFCRjcx
NTIxQ0Q4OUQ0MDAyMjc5NzkgLyogV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oICovLAotCQkJ
CUMyMUJGNzJEMjFDRDg5RTkwMDIyNzk3OSAvKiBXSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24uaCAqLywKLQkJCQlDMjFCRjcyQzIxQ0Q4OUU5MDAyMjc5NzkgLyogV0hMU0xNYWtlUG9p
bnRlckV4cHJlc3Npb24uaCAqLywKLQkJCQkxQzMzMjc3MTIxQ0YwQkUxMDAwREM5RjIgLyogV0hM
U0xOYW1lZFR5cGUuaCAqLywKLQkJCQlDMjFCRjcyMzIxQ0Q4OUUxMDAyMjc5NzkgLyogV0hMU0xO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmggKi8sCi0JCQkJQzIxQkY3MkEyMUNEODlFNzAwMjI3
OTc5IC8qIFdITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmggKi8sCi0JCQkJQzIxQkY3MjQyMUNE
ODlFMTAwMjI3OTc5IC8qIFdITFNMTm9kZS5oICovLAotCQkJCUMyMUJGNzA3MjFDRDg5QzgwMDIy
Nzk3OSAvKiBXSExTTE51bGxMaXRlcmFsLmggKi8sCi0JCQkJMUNCNjlCM0EyMURGMDQwMzAwNkU4
NDZBIC8qIFdITFNMTnVsbExpdGVyYWxUeXBlLmNwcCAqLywKLQkJCQkxQ0I2OUIzNjIxREVENjU3
MDA2RTg0NkEgLyogV0hMU0xOdWxsTGl0ZXJhbFR5cGUuaCAqLywKLQkJCQlDMjFCRjcyMTIxQ0Q4
OURFMDAyMjc5NzkgLyogV0hMU0xOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUuaCAqLywKLQkJ
CQlDMjFCRjcyRjIxQ0Q4OUVDMDAyMjc5NzkgLyogV0hMU0xQb2ludGVyVHlwZS5oICovLAotCQkJ
CUMyMUJGNzJFMjFDRDg5RUEwMDIyNzk3OSAvKiBXSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bi5oICovLAotCQkJCUMyMUJGNzBCMjFDRDg5Q0MwMDIyNzk3OSAvKiBXSExTTFF1YWxpZmllci5o
ICovLAotCQkJCUMyMUJGNzFCMjFDRDg5RDkwMDIyNzk3OSAvKiBXSExTTFJlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24uaCAqLywKLQkJCQlDMjFCRjcwRDIxQ0Q4OUNEMDAyMjc5NzkgLyogV0hMU0xS
ZWZlcmVuY2VUeXBlLmggKi8sCi0JCQkJMUNCNjlCMzIyMURFRDQwQjAwNkU4NDZBIC8qIFdITFNM
UmVzb2x2YWJsZVR5cGUuaCAqLywKLQkJCQlDMjEzOEExNTIxRERFQ0U5MDBGNTE2QkEgLyogV0hM
U0xSZXNvdXJjZVNlbWFudGljLmNwcCAqLywKLQkJCQlDMjFCRjcwODIxQ0Q4OUM5MDAyMjc5Nzkg
LyogV0hMU0xSZXNvdXJjZVNlbWFudGljLmggKi8sCi0JCQkJQzIxQkY3MDMyMUNEODlDNTAwMjI3
OTc5IC8qIFdITFNMUmV0dXJuLmggKi8sCi0JCQkJQzIxQkY2RjkyMUNEODlCRDAwMjI3OTc5IC8q
IFdITFNMU2VtYW50aWMuaCAqLywKLQkJCQlDMjEzOEExNjIxRERFQ0ZCMDBGNTE2QkEgLyogV0hM
U0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuY3BwICovLAotCQkJCUMyMUJGNzM2MjFD
RDg5RjMwMDIyNzk3OSAvKiBXSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5oICov
LAotCQkJCUMyMTM4QTE3MjFEREVEMEQwMEY1MTZCQSAvKiBXSExTTFN0YWdlSW5PdXRTZW1hbnRp
Yy5jcHAgKi8sCi0JCQkJQzIxQkY3MEUyMUNEODlDRTAwMjI3OTc5IC8qIFdITFNMU3RhZ2VJbk91
dFNlbWFudGljLmggKi8sCi0JCQkJQzIxQkY3MTIyMUNEODlEMTAwMjI3OTc5IC8qIFdITFNMU3Rh
dGVtZW50LmggKi8sCi0JCQkJQzIxQkY3MjcyMUNEODlFNDAwMjI3OTc5IC8qIFdITFNMU3RydWN0
dXJlRGVmaW5pdGlvbi5oICovLAotCQkJCUMyMUJGNkZFMjFDRDg5QzEwMDIyNzk3OSAvKiBXSExT
TFN0cnVjdHVyZUVsZW1lbnQuaCAqLywKLQkJCQlDMjFCRjcxOTIxQ0Q4OUQ3MDAyMjc5NzkgLyog
V0hMU0xTd2l0Y2hDYXNlLmggKi8sCi0JCQkJQzIxQkY3MzEyMUNEODlFRTAwMjI3OTc5IC8qIFdI
TFNMU3dpdGNoU3RhdGVtZW50LmggKi8sCi0JCQkJQzIxQkY3MUMyMUNEODlEQTAwMjI3OTc5IC8q
IFdITFNMVGVybmFyeUV4cHJlc3Npb24uaCAqLywKLQkJCQlDMjFCRjZGMzIxQ0Q4OUFEMDAyMjc5
NzkgLyogV0hMU0xUcmFwLmggKi8sCi0JCQkJQzIxQkY3MUQyMUNEODlEQjAwMjI3OTc5IC8qIFdI
TFNMVHlwZS5oICovLAotCQkJCUMyODhDNzJEMjFDOTkxREEwMDJERjVDQSAvKiBXSExTTFR5cGVB
cmd1bWVudC5jcHAgKi8sCi0JCQkJQzIxQkY3MTEyMUNEODlEMTAwMjI3OTc5IC8qIFdITFNMVHlw
ZUFyZ3VtZW50LmggKi8sCi0JCQkJQzIxQkY3MjkyMUNEODlFNjAwMjI3OTc5IC8qIFdITFNMVHlw
ZURlZmluaXRpb24uaCAqLywKLQkJCQlDMjBGNEY2NDIxREZCRTVDMDA3MEM0NUEgLyogV0hMU0xU
eXBlUmVmZXJlbmNlLmNwcCAqLywKLQkJCQlDMjFCRjcxRjIxQ0Q4OURDMDAyMjc5NzkgLyogV0hM
U0xUeXBlUmVmZXJlbmNlLmggKi8sCi0JCQkJMUMzMzI3NzIyMUNGMEQyRTAwMERDOUYyIC8qIFdI
TFNMVW5uYW1lZFR5cGUuaCAqLywKLQkJCQlDMjBGNEY2NzIxREZGM0E3MDA3MEM0NUEgLyogV0hM
U0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmNwcCAqLywKLQkJCQlDMjFCRjcyQjIxQ0Q4OUU4MDAy
Mjc5NzkgLyogV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmggKi8sCi0JCQkJMUNCNjlCM0Iy
MURGMDQxRTAwNkU4NDZBIC8qIFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwICov
LAotCQkJCTFDQjY5QjM3MjFERUQ2NkIwMDZFODQ2QSAvKiBXSExTTFVuc2lnbmVkSW50ZWdlckxp
dGVyYWxUeXBlLmggKi8sCi0JCQkJQzIxQkY2RkMyMUNEODlCRjAwMjI3OTc5IC8qIFdITFNMVmFs
dWUuaCAqLywKLQkJCQlDMjFCRjcxMDIxQ0Q4OUQwMDAyMjc5NzkgLyogV0hMU0xWYXJpYWJsZURl
Y2xhcmF0aW9uLmggKi8sCi0JCQkJQzIxQkY3MTQyMUNEODlEMzAwMjI3OTc5IC8qIFdITFNMVmFy
aWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCAqLywKLQkJCQlDMjFCRjcxMzIxQ0Q4OUQyMDAy
Mjc5NzkgLyogV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oICovLAotCQkJCUMyMUJGNzA0MjFDRDg5
QzYwMDIyNzk3OSAvKiBXSExTTFdoaWxlTG9vcC5oICovLAorCQkJCUMyNkQyQzcwMjFGMDVENTUw
MDQ5Nzg5OSAvKiBXSExTTFR5cGVOYW1lci5jcHAgKi8sCisJCQkJQzI2RDJDNzEyMUYwNUQ1NTAw
NDk3ODk5IC8qIFdITFNMVHlwZU5hbWVyLmggKi8sCiAJCQkpOwotCQkJcGF0aCA9IEFTVDsKKwkJ
CXBhdGggPSBNZXRhbDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CiAJCUM5NkY1
RUJGMUI1ODcyMjYwMDkxRUE5RCAvKiBtZWRpYXNlc3Npb24gKi8gPSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359401</attachid>
            <date>2019-01-17 12:07:41 -0800</date>
            <delta_ts>2019-01-18 00:54:36 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-193531-20190117120740.patch</filename>
            <type>text/plain</type>
            <size>43500</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwMTAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmRkOWQ1MGZlNjM2Mjg4
MTk1ZjQ1OGViNTE4NDg1MTllYzY1YTk5My4uZTY1ZjZiNWU5NDc2ODIwZGEyYWI4MDI3MmMzOTk3
YWEwNGU5NzcyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE5LTAxLTE3ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgTWV0YWwgY29kZSBnZW5lcmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTM1MzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAq
IE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkJhc2VUeXBlTmFtZU5vZGU6OkJhc2VUeXBl
TmFtZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpCYXNlVHlwZU5hbWVO
b2RlOjppc0FycmF5VHlwZU5hbWVOb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpNZXRhbDo6QmFzZVR5cGVOYW1lTm9kZTo6aXNBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkJhc2VUeXBlTmFtZU5vZGU6
OmlzUG9pbnRlclR5cGVOYW1lTm9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
TWV0YWw6OkJhc2VUeXBlTmFtZU5vZGU6OmlzUmVmZXJlbmNlVHlwZU5hbWVOb2RlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6QXJyYXlUeXBlTmFtZU5vZGU6OkFycmF5
VHlwZU5hbWVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6QXJyYXlUeXBl
TmFtZU5vZGU6Om51bUVsZW1lbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpN
ZXRhbDo6QXJyYXlUeXBlTmFtZU5vZGU6OmNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpNZXRhbDo6QXJyYXlUeXBlTmFtZU5vZGU6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6TWV0YWw6OkFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlOjpBcnJheVJlZmVyZW5j
ZVR5cGVOYW1lTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkFycmF5UmVm
ZXJlbmNlVHlwZU5hbWVOb2RlOjphZGRyZXNzU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6Ok1ldGFsOjpBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZTo6Y2hpbGRyZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9k
ZTo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UG9pbnRlclR5cGVO
YW1lTm9kZTo6UG9pbnRlclR5cGVOYW1lTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
TWV0YWw6OlBvaW50ZXJUeXBlTmFtZU5vZGU6OmFkZHJlc3NTcGFjZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlBvaW50ZXJUeXBlTmFtZU5vZGU6OmNoaWxkcmVuKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UG9pbnRlclR5cGVOYW1lTm9kZTo6YXBw
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UmVmZXJlbmNlVHlwZU5hbWVO
b2RlOjpSZWZlcmVuY2VUeXBlTmFtZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1l
dGFsOjpSZWZlcmVuY2VUeXBlTmFtZU5vZGU6Om5hbWVkVHlwZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6Z2VuZXJhdGVOZXh0TmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6YnVpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6Omluc2VydCk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6TWV0YWw6OnR5cGVOYW1lcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuaDogQWRkZWQuCisgICAgICAgICogU291cmNlcy50
eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE5
LTAxLTE2ICBKdXN0aW4gRmFuICA8anVzdGluX2ZhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dl
YkdQVV0gVXBkYXRlIHZlcnRleC1idWZmZXItdHJpYW5nbGUtc3RyaXAuaHRtbCB0byBhY3R1YWxs
eSB1c2UgdmVydGV4IGJ1ZmZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJk
MGQ2NDEwMDZjZDkwNmQ2MzExMGJjMGQzYmJmNDMyNWFkYTQ1NTcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1l
ci5jcHAKQEAgLTAsMCArMSw0MTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV0hMU0xUeXBlTmFtZXIuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNp
bmNsdWRlICJXSExTTEFkZHJlc3NTcGFjZS5oIgorI2luY2x1ZGUgIldITFNMQXJyYXlSZWZlcmVu
Y2VUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xBcnJheVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEVu
dW1lcmF0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25NZW1iZXIu
aCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldI
TFNMUG9pbnRlclR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCIK
KyNpbmNsdWRlICJXSExTTFR5cGVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVm
ZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisjaW5jbHVkZSA8YWxnb3JpdGht
PgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgTWV0
YWwgeworCitjbGFzcyBCYXNlVHlwZU5hbWVOb2RlIHsKK3B1YmxpYzoKKyAgICBCYXNlVHlwZU5h
bWVOb2RlKFN0cmluZyYmIG1hbmdsZWROYW1lKQorICAgICAgICA6IG1fbWFuZ2xlZE5hbWUobWFu
Z2xlZE5hbWUpCisgICAgeworICAgIH0KKyAgICB2aXJ0dWFsIH5CYXNlVHlwZU5hbWVOb2RlKCkg
PSBkZWZhdWx0OworICAgIHZpcnR1YWwgYm9vbCBpc0FycmF5VHlwZU5hbWVOb2RlKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNBcnJheVJlZmVyZW5jZVR5cGVO
YW1lTm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzUG9p
bnRlclR5cGVOYW1lTm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBi
b29sIGlzUmVmZXJlbmNlVHlwZU5hbWVOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICBWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+PiYgY2hpbGRyZW4oKSB7IHJldHVy
biBtX2NoaWxkcmVuOyB9CisgICAgdm9pZCBhcHBlbmQoVW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5v
ZGU+JiYgY2hpbGQpCisgICAgeworICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChXVEZNb3ZlKGNo
aWxkKSk7CisgICAgfQorICAgIGNvbnN0IFN0cmluZyYgbWFuZ2xlZE5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX21hbmdsZWROYW1lOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxC
YXNlVHlwZU5hbWVOb2RlPj4gbV9jaGlsZHJlbjsKKyAgICBTdHJpbmcgbV9tYW5nbGVkTmFtZTsK
K307CisKK2NsYXNzIEFycmF5VHlwZU5hbWVOb2RlIDogcHVibGljIEJhc2VUeXBlTmFtZU5vZGUg
eworcHVibGljOgorICAgIEFycmF5VHlwZU5hbWVOb2RlKFN0cmluZyYmIG1hbmdsZWROYW1lLCB1
bnNpZ25lZCBudW1FbGVtZW50cykKKyAgICAgICAgOiBCYXNlVHlwZU5hbWVOb2RlKFdURk1vdmUo
bWFuZ2xlZE5hbWUpKQorICAgICAgICAsIG1fbnVtRWxlbWVudHMobnVtRWxlbWVudHMpCisgICAg
eworICAgIH0KKyAgICB2aXJ0dWFsIH5BcnJheVR5cGVOYW1lTm9kZSgpID0gZGVmYXVsdDsKKyAg
ICBib29sIGlzQXJyYXlUeXBlTmFtZU5vZGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CisgICAgdW5zaWduZWQgbnVtRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUVsZW1l
bnRzOyB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9udW1FbGVtZW50czsKK307CisKK2Ns
YXNzIEFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlIDogcHVibGljIEJhc2VUeXBlTmFtZU5vZGUg
eworcHVibGljOgorICAgIEFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlKFN0cmluZyYmIG1hbmds
ZWROYW1lLCBBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UpCisgICAgICAgIDogQmFzZVR5
cGVOYW1lTm9kZShXVEZNb3ZlKG1hbmdsZWROYW1lKSkKKyAgICAgICAgLCBtX2FkZHJlc3NTcGFj
ZShhZGRyZXNzU3BhY2UpCisgICAgeworICAgIH0KKyAgICB2aXJ0dWFsIH5BcnJheVJlZmVyZW5j
ZVR5cGVOYW1lTm9kZSgpID0gZGVmYXVsdDsKKyAgICBib29sIGlzQXJyYXlSZWZlcmVuY2VUeXBl
TmFtZU5vZGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgQVNUOjpBZGRy
ZXNzU3BhY2UgYWRkcmVzc1NwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9hZGRyZXNzU3BhY2U7IH0K
KworcHJpdmF0ZToKKyAgICBBU1Q6OkFkZHJlc3NTcGFjZSBtX2FkZHJlc3NTcGFjZTsKK307CisK
K2NsYXNzIFBvaW50ZXJUeXBlTmFtZU5vZGUgOiBwdWJsaWMgQmFzZVR5cGVOYW1lTm9kZSB7Citw
dWJsaWM6CisgICAgUG9pbnRlclR5cGVOYW1lTm9kZShTdHJpbmcmJiBtYW5nbGVkTmFtZSwgQVNU
OjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKQorICAgICAgICA6IEJhc2VUeXBlTmFtZU5vZGUo
V1RGTW92ZShtYW5nbGVkTmFtZSkpCisgICAgICAgICwgbV9hZGRyZXNzU3BhY2UoYWRkcmVzc1Nw
YWNlKQorICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+UG9pbnRlclR5cGVOYW1lTm9kZSgpID0g
ZGVmYXVsdDsKKyAgICBib29sIGlzUG9pbnRlclR5cGVOYW1lTm9kZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KKyAgICBBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UoKSBj
b25zdCB7IHJldHVybiBtX2FkZHJlc3NTcGFjZTsgfQorCitwcml2YXRlOgorICAgIEFTVDo6QWRk
cmVzc1NwYWNlIG1fYWRkcmVzc1NwYWNlOworfTsKKworY2xhc3MgUmVmZXJlbmNlVHlwZU5hbWVO
b2RlIDogcHVibGljIEJhc2VUeXBlTmFtZU5vZGUgeworcHVibGljOgorICAgIFJlZmVyZW5jZVR5
cGVOYW1lTm9kZShTdHJpbmcmJiBtYW5nbGVkTmFtZSwgQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlw
ZSkKKyAgICAgICAgOiBCYXNlVHlwZU5hbWVOb2RlKFdURk1vdmUobWFuZ2xlZE5hbWUpKQorICAg
ICAgICAsIG1fbmFtZWRUeXBlKG5hbWVkVHlwZSkKKyAgICB7CisgICAgfQorICAgIHZpcnR1YWwg
flJlZmVyZW5jZVR5cGVOYW1lTm9kZSgpID0gZGVmYXVsdDsKKyAgICBib29sIGlzUmVmZXJlbmNl
VHlwZU5hbWVOb2RlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGNvbnN0
IEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUoKSBjb25zdCB7IHJldHVybiBtX25hbWVkVHlwZTsg
fQorCitwcml2YXRlOgorICAgIEFTVDo6TmFtZWRUeXBlJiBtX25hbWVkVHlwZTsKK307CisKK30K
KworfQorCit9CisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9CQVNFX1RZ
UEVfTkFNRURfTk9ERShUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlRvVmFsdWVUeXBlTmFtZSkg
XAorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkJh
c2VUeXBlTmFtZU5vZGUmIHR5cGUpIHsgcmV0dXJuIHR5cGUucHJlZGljYXRlOyB9IFwKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9C
QVNFX1RZUEVfTkFNRURfTk9ERShBcnJheVR5cGVOYW1lTm9kZSwgaXNBcnJheVR5cGVOYW1lTm9k
ZSgpKQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0JBU0VfVFlQRV9OQU1FRF9OT0RF
KEFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlLCBpc0FycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2Rl
KCkpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfQkFTRV9UWVBFX05BTUVEX05PREUo
UG9pbnRlclR5cGVOYW1lTm9kZSwgaXNQb2ludGVyVHlwZU5hbWVOb2RlKCkpCisKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfV0hMU0xfQkFTRV9UWVBFX05BTUVEX05PREUoUmVmZXJlbmNlVHlwZU5h
bWVOb2RlLCBpc1JlZmVyZW5jZVR5cGVOYW1lTm9kZSgpKQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBNZXRhbCB7CisKK1R5cGVOYW1lcjo6
VHlwZU5hbWVyKFByb2dyYW0mIHByb2dyYW0pCisgICAgOiBtX3Byb2dyYW0ocHJvZ3JhbSkKK3sK
K30KKworVHlwZU5hbWVyOjp+VHlwZU5hbWVyKCkgPSBkZWZhdWx0OworCit2b2lkIFR5cGVOYW1l
cjo6dmlzaXQoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpCit7CisgICAgaW5zZXJ0KHVu
bmFtZWRUeXBlLCBtX3RyaWUpOworfQorCit2b2lkIFR5cGVOYW1lcjo6dmlzaXQoQVNUOjpFbnVt
ZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBhdXRvIGFk
ZFJlc3VsdCA9IG1fbmFtZWRUeXBlTWFwcGluZy5hZGQoJmVudW1lcmF0aW9uRGVmaW5pdGlvbiwg
Z2VuZXJhdGVOZXh0VHlwZU5hbWUoKSk7CisgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFk
ZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uTWVtYmVyIDog
ZW51bWVyYXRpb25EZWZpbml0aW9uLmVudW1lcmF0aW9uTWVtYmVycygpKSB7CisgICAgICAgIGF1
dG8gYWRkUmVzdWx0ID0gbV9lbnVtZXJhdGlvbk1lbWJlck1hcHBpbmcuYWRkKCZzdGF0aWNfY2Fz
dDxBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJj4oZW51bWVyYXRpb25NZW1iZXIpLCBnZW5lcmF0ZU5l
eHRFbnVtZXJhdGlvbk1lbWJlck5hbWUoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVz
dWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorICAgIFZpc2l0b3I6OnZpc2l0KGVu
dW1lcmF0aW9uRGVmaW5pdGlvbik7Cit9CisKK3ZvaWQgVHlwZU5hbWVyOjp2aXNpdChBU1Q6Ok5h
dGl2ZVR5cGVEZWNsYXJhdGlvbiYpCit7CisgICAgLy8gTmF0aXZlIHR5cGUgZGVjbGFyYXRpb25z
IGFscmVhZHkgaGF2ZSBuYW1lcywgYW5kIGFyZSBhbHJlYWR5IGRlY2xhcmVkIGluIE1ldGFsLgor
fQorCitzdGF0aWMgVmVjdG9yPFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPj46Oml0ZXJhdG9y
IGZpbmRJblZlY3RvcihBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgVmVjdG9yPFVuaXF1
ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPj4mIHR5cGVzKQoreworICAgIHJldHVybiBzdGQ6OmZpbmRf
aWYodHlwZXMuYmVnaW4oKSwgdHlwZXMuZW5kKCksIFsmXShCYXNlVHlwZU5hbWVOb2RlJiBiYXNl
VHlwZU5hbWVOb2RlKSAtPiBib29sIHsKKyAgICAgICAgaWYgKGlzPEFTVDo6VHlwZVJlZmVyZW5j
ZT4odW5uYW1lZFR5cGUpICYmIGlzPFJlZmVyZW5jZVR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1l
Tm9kZSkpIHsKKyAgICAgICAgICAgIGF1dG8qIHJlc29sdmVkVHlwZSA9IGRvd25jYXN0PEFTVDo6
VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpLnJlc29sdmVkVHlwZSgpOworICAgICAgICAgICAg
QVNTRVJUKHJlc29sdmVkVHlwZSk7CisgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWRUeXBlID09
ICZkb3duY2FzdDxSZWZlcmVuY2VUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpLm5hbWVk
VHlwZSgpOworICAgICAgICB9CisgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5h
bWVkVHlwZSkgJiYgaXM8UG9pbnRlclR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9kZSkpCisg
ICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUp
LmFkZHJlc3NTcGFjZSgpID09IGRvd25jYXN0PFBvaW50ZXJUeXBlTmFtZU5vZGU+KGJhc2VUeXBl
TmFtZU5vZGUpLmFkZHJlc3NTcGFjZSgpOworICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVy
ZW5jZVR5cGU+KHVubmFtZWRUeXBlKSAmJiBpczxBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZT4o
YmFzZVR5cGVOYW1lTm9kZSkpCisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8QVNUOjpBcnJh
eVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKS5hZGRyZXNzU3BhY2UoKSA9PSBkb3duY2FzdDxB
cnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9kZSkuYWRkcmVzc1NwYWNl
KCk7CisgICAgICAgIGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpICYmIGlzPEFy
cmF5VHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBk
b3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpLm51bUVsZW1lbnRzKCkgPT0gZG93
bmNhc3Q8QXJyYXlUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpLm51bUVsZW1lbnRzKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9KTsKK30KKworc3RhdGljIEJhc2VUeXBlTmFt
ZU5vZGUmIGZpbmQoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIFZlY3RvcjxVbmlxdWVS
ZWY8QmFzZVR5cGVOYW1lTm9kZT4+JiB0eXBlcykKK3sKKyAgICBhdXRvJiB2ZWN0b3JUb1NlYXJj
aCA9IChbJl0oKSAtPiBWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+PiYgeworICAg
ICAgICBpZiAoaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAg
ICByZXR1cm4gdHlwZXM7CisgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVk
VHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmluZChkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBl
Pih1bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKSwgdHlwZXMpLmNoaWxkcmVuKCk7CisgICAgICAg
IGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAg
ICAgcmV0dXJuIGZpbmQoZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRU
eXBlKS5lbGVtZW50VHlwZSgpLCB0eXBlcykuY2hpbGRyZW4oKTsKKyAgICAgICAgQVNTRVJUKGlz
PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpOworICAgICAgICByZXR1cm4gZmluZChkb3du
Y2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpLnR5cGUoKSwgdHlwZXMpLmNoaWxkcmVu
KCk7CisgICAgfSkoKTsKKyAgICBhdXRvIGl0ZXJhdG9yID0gZmluZEluVmVjdG9yKHVubmFtZWRU
eXBlLCB2ZWN0b3JUb1NlYXJjaCk7CisgICAgQVNTRVJUKGl0ZXJhdG9yICE9IHR5cGVzLmVuZCgp
KTsKKyAgICByZXR1cm4gKml0ZXJhdG9yOworfQorCit2b2lkIFR5cGVOYW1lcjo6dmlzaXQoQVNU
OjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQoreworICAgIHsKKyAg
ICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX25hbWVkVHlwZU1hcHBpbmcuYWRkKCZzdHJ1Y3R1cmVE
ZWZpbml0aW9uLCBnZW5lcmF0ZU5leHRUeXBlTmFtZSgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNF
RChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisgICAgVmlzaXRvcjo6
dmlzaXQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgeworICAgICAgICBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxCYXNlVHlwZU5hbWVOb2RlPj4gbmVpZ2hib3JzOworICAgICAgICBm
b3IgKGF1dG8mIHN0cnVjdHVyZUVsZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLnN0cnVjdHVy
ZUVsZW1lbnRzKCkpCisgICAgICAgICAgICBuZWlnaGJvcnMuYXBwZW5kKGZpbmQoc3RydWN0dXJl
RWxlbWVudC50eXBlKCksIG1fdHJpZSkpOworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZGVw
ZW5kZW5jeUdyYXBoLmFkZCgmc3RydWN0dXJlRGVmaW5pdGlvbiwgV1RGTW92ZShuZWlnaGJvcnMp
KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5
KTsKKyAgICB9Cit9CisKK3ZvaWQgVHlwZU5hbWVyOjp2aXNpdChBU1Q6OlR5cGVEZWZpbml0aW9u
JiB0eXBlRGVmaW5pdGlvbikKK3sKKyAgICB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9u
YW1lZFR5cGVNYXBwaW5nLmFkZCgmdHlwZURlZmluaXRpb24sIGdlbmVyYXRlTmV4dFR5cGVOYW1l
KCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50
cnkpOworICAgIH0KKyAgICBWaXNpdG9yOjp2aXNpdCh0eXBlRGVmaW5pdGlvbik7CisgICAgewor
ICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxCYXNlVHlwZU5hbWVOb2RlPj4g
bmVpZ2hib3JzID0geyBmaW5kKHR5cGVEZWZpbml0aW9uLnR5cGUoKSwgbV90cmllKSB9OworICAg
ICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZGVwZW5kZW5jeUdyYXBoLmFkZCgmdHlwZURlZmluaXRp
b24sIFdURk1vdmUobmVpZ2hib3JzKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0
LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorfQorCitTdHJpbmcgVHlwZU5hbWVyOjpt
YW5nbGVkTmFtZUZvclR5cGUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKQoreworICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KK30KKworVW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+
IFR5cGVOYW1lcjo6Y3JlYXRlTmFtZU5vZGUoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUp
Cit7CisgICAgaWYgKGlzPEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpKSB7CisgICAg
ICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBkb3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVu
bmFtZWRUeXBlKTsKKyAgICAgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkp
OworICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxSZWZlcmVuY2VUeXBlTmFtZU5vZGU+KGdl
bmVyYXRlTmV4dFR5cGVOYW1lKCksICp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAg
ICB9CisgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkgeworICAgICAg
ICBhdXRvJiBwb2ludGVyVHlwZSA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRU
eXBlKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8UG9pbnRlclR5cGVOYW1lTm9kZT4o
Z2VuZXJhdGVOZXh0VHlwZU5hbWUoKSwgcG9pbnRlclR5cGUuYWRkcmVzc1NwYWNlKCkpOworICAg
IH0KKyAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkgewor
ICAgICAgICBhdXRvJiBhcnJheVJlZmVyZW5jZVR5cGUgPSBkb3duY2FzdDxBU1Q6OkFycmF5UmVm
ZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpOworICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxB
cnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZT4oZ2VuZXJhdGVOZXh0VHlwZU5hbWUoKSwgYXJyYXlS
ZWZlcmVuY2VUeXBlLmFkZHJlc3NTcGFjZSgpKTsKKyAgICB9CisgICAgQVNTRVJUKGlzPEFTVDo6
QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpOworICAgIGF1dG8mIGFycmF5VHlwZSA9IGRvd25jYXN0
PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8
QXJyYXlUeXBlTmFtZU5vZGU+KGdlbmVyYXRlTmV4dFR5cGVOYW1lKCksIGFycmF5VHlwZS5udW1F
bGVtZW50cygpKTsKK30KKworc2l6ZV90IFR5cGVOYW1lcjo6aW5zZXJ0KEFTVDo6VW5uYW1lZFR5
cGUmIHVubmFtZWRUeXBlLCBWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+PiYgdHlw
ZXMpCit7CisgICAgYXV0byYgdmVjdG9yVG9JbnNlcnRJbnRvID0gKFsmXSgpIC0+IFZlY3RvcjxV
bmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4+JiB7CisgICAgICAgIGlmIChpczxBU1Q6OlR5cGVS
ZWZlcmVuY2U+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiB0eXBlczsKKyAgICAg
ICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHJl
dHVybiB0eXBlc1tpbnNlcnQoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUp
LmVsZW1lbnRUeXBlKCksIHR5cGVzKV0tPmNoaWxkcmVuKCk7CisgICAgICAgIGlmIChpczxBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHR5
cGVzW2luc2VydChkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUp
LmVsZW1lbnRUeXBlKCksIHR5cGVzKV0tPmNoaWxkcmVuKCk7CisgICAgICAgIEFTU0VSVChpczxB
U1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKTsKKyAgICAgICAgcmV0dXJuIHR5cGVzW2luc2Vy
dChkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpLnR5cGUoKSwgdHlwZXMpXS0+
Y2hpbGRyZW4oKTsKKyAgICB9KSgpOworICAgIGF1dG8gaXRlcmF0b3IgPSBmaW5kSW5WZWN0b3Io
dW5uYW1lZFR5cGUsIHZlY3RvclRvSW5zZXJ0SW50byk7CisgICAgaWYgKGl0ZXJhdG9yID09IHZl
Y3RvclRvSW5zZXJ0SW50by5lbmQoKSkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZU5h
bWVOb2RlKHVubmFtZWRUeXBlKTsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBhZGRSZXN1
bHQgPSBtX3VubmFtZWRUeXBlTWFwcGluZy5hZGQoJnVubmFtZWRUeXBlLCAmcmVzdWx0KTsKKyAg
ICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7
CisgICAgICAgIH0KKyAgICAgICAgdmVjdG9yVG9JbnNlcnRJbnRvLmFwcGVuZChXVEZNb3ZlKHJl
c3VsdCkpOworICAgICAgICByZXR1cm4gdmVjdG9yVG9JbnNlcnRJbnRvLnNpemUoKSAtIDE7Cisg
ICAgfQorICAgIGF1dG8gYWRkUmVzdWx0ID0gbV91bm5hbWVkVHlwZU1hcHBpbmcuYWRkKCZ1bm5h
bWVkVHlwZSwgJippdGVyYXRvcik7CisgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJl
c3VsdC5pc05ld0VudHJ5KTsKKyAgICByZXR1cm4gaXRlcmF0b3IgLSB2ZWN0b3JUb0luc2VydElu
dG8uYmVnaW4oKTsKK30KKworY2xhc3MgTWV0YWxUeXBlRGVjbGFyYXRpb25Xcml0ZXIgOiBwdWJs
aWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgTWV0YWxUeXBlRGVjbGFyYXRpb25Xcml0ZXIoc3Rk
OjpmdW5jdGlvbjxTdHJpbmcoQVNUOjpOYW1lZFR5cGUmKT4mJiBtYW5nbGVkTmFtZUZvck5hbWVk
VHlwZSwgc3RkOjpmdW5jdGlvbjxTdHJpbmcoQVNUOjpVbm5hbWVkVHlwZSYpPiYmIG1hbmdsZWRO
YW1lRm9yVW5uYW1lZFR5cGUsIHN0ZDo6ZnVuY3Rpb248U3RyaW5nKEFTVDo6RW51bWVyYXRpb25N
ZW1iZXImKT4mJiBtYW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVtYmVyLCBzdGQ6OmZ1bmN0aW9u
PFN0cmluZyhBU1Q6OlN0cnVjdHVyZUVsZW1lbnQmKT4mJiBtYW5nbGVkTmFtZUZvclN0cnVjdHVy
ZUVsZW1lbnQpCisgICAgICAgIDogbV9tYW5nbGVkTmFtZUZvck5hbWVkVHlwZShXVEZNb3ZlKG1h
bmdsZWROYW1lRm9yTmFtZWRUeXBlKSkKKyAgICAgICAgLCBtX21hbmdsZWROYW1lRm9yVW5uYW1l
ZFR5cGUoV1RGTW92ZShtYW5nbGVkTmFtZUZvclVubmFtZWRUeXBlKSkKKyAgICAgICAgLCBtX21h
bmdsZWROYW1lRm9yRW51bWVyYXRpb25NZW1iZXIoV1RGTW92ZShtYW5nbGVkTmFtZUZvckVudW1l
cmF0aW9uTWVtYmVyKSkKKyAgICAgICAgLCBtX21hbmdsZWROYW1lRm9yU3RydWN0dXJlRWxlbWVu
dChXVEZNb3ZlKG1hbmdsZWROYW1lRm9yU3RydWN0dXJlRWxlbWVudCkpCisgICAgeworICAgIH0K
KworICAgIFN0cmluZyB0b1N0cmluZygpIHsgcmV0dXJuIG1fc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5p
dGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQorICAgIHsKKyAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZCgiZW51bSBjbGFzcyAiKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChtX21hbmdsZWROYW1lRm9yTmFtZWRUeXBlKGVudW1lcmF0aW9uRGVmaW5pdGlvbikpOworICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIgOiAiKTsKKyAgICAgICAgYXV0byYgYmFzZVR5
cGUgPSBlbnVtZXJhdGlvbkRlZmluaXRpb24udHlwZSgpLnVuaWZ5Tm9kZSgpOworICAgICAgICBB
U1NFUlQoaXM8QVNUOjpOYW1lZFR5cGU+KGJhc2VUeXBlKSk7CisgICAgICAgIG1fc3RyaW5nQnVp
bGRlci5hcHBlbmQobV9tYW5nbGVkTmFtZUZvck5hbWVkVHlwZShkb3duY2FzdDxBU1Q6Ok5hbWVk
VHlwZT4oYmFzZVR5cGUpKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiB7XG4i
KTsKKyAgICAgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbk1lbWJlciA6IGVudW1lcmF0aW9uRGVm
aW5pdGlvbi5lbnVtZXJhdGlvbk1lbWJlcnMoKSkgeworICAgICAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZChtX21hbmdsZWROYW1lRm9yRW51bWVyYXRpb25NZW1iZXIoZW51bWVyYXRpb25N
ZW1iZXIpKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIixcbiIpOworICAg
ICAgICB9CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgIH0KKwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0
aW9uKQorICAgIHsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgic3RydWN0ICIpOwor
ICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1fbWFuZ2xlZE5hbWVGb3JOYW1lZFR5cGUo
c3RydWN0dXJlRGVmaW5pdGlvbikpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIg
e1xuIik7CisgICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJlRWxlbWVudCA6IHN0cnVjdHVyZURl
ZmluaXRpb24uc3RydWN0dXJlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZChtX21hbmdsZWROYW1lRm9yVW5uYW1lZFR5cGUoc3RydWN0dXJlRWxlbWVudC50
eXBlKCkpKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAiKTsKKyAgICAg
ICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobV9tYW5nbGVkTmFtZUZvclN0cnVjdHVyZUVs
ZW1lbnQoc3RydWN0dXJlRWxlbWVudCkpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZCgiO1xuIik7CisgICAgICAgIH0KKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgi
fVxuIik7CisgICAgfQorCisgICAgc3RkOjpmdW5jdGlvbjxTdHJpbmcoQVNUOjpOYW1lZFR5cGUm
KT4gbV9tYW5nbGVkTmFtZUZvck5hbWVkVHlwZTsKKyAgICBzdGQ6OmZ1bmN0aW9uPFN0cmluZyhB
U1Q6OlVubmFtZWRUeXBlJik+IG1fbWFuZ2xlZE5hbWVGb3JVbm5hbWVkVHlwZTsKKyAgICBzdGQ6
OmZ1bmN0aW9uPFN0cmluZyhBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJik+JiYgbV9tYW5nbGVkTmFt
ZUZvckVudW1lcmF0aW9uTWVtYmVyOworICAgIHN0ZDo6ZnVuY3Rpb248U3RyaW5nKEFTVDo6U3Ry
dWN0dXJlRWxlbWVudCYpPiYmIG1fbWFuZ2xlZE5hbWVGb3JTdHJ1Y3R1cmVFbGVtZW50OworICAg
IFN0cmluZ0J1aWxkZXIgbV9zdHJpbmdCdWlsZGVyOworfTsKKworU3RyaW5nIFR5cGVOYW1lcjo6
bWV0YWxUeXBlRGVmaW5pdGlvbnMoKQoreworICAgIE1ldGFsVHlwZURlY2xhcmF0aW9uV3JpdGVy
IG1ldGFsVHlwZURlY2xhcmF0aW9uV3JpdGVyKFsmXShBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBl
KSAtPiBTdHJpbmcgeworICAgICAgICByZXR1cm4gbWFuZ2xlZE5hbWVGb3JUeXBlKG5hbWVkVHlw
ZSk7CisgICAgfSwgWyZdKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKSAtPiBTdHJpbmcg
eworICAgICAgICByZXR1cm4gbWFuZ2xlZE5hbWVGb3JUeXBlKHVubmFtZWRUeXBlKTsKKyAgICB9
LCBbJl0oQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIpIC0+IFN0cmlu
ZyB7CisgICAgICAgIHJldHVybiBtYW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVtYmVyKGVudW1l
cmF0aW9uTWVtYmVyKTsKKyAgICB9LCBbJl0oQVNUOjpTdHJ1Y3R1cmVFbGVtZW50JiBzdHJ1Y3R1
cmVFbGVtZW50KSAtPiBTdHJpbmcgeworICAgICAgICByZXR1cm4gbWFuZ2xlZE5hbWVGb3JTdHJ1
Y3R1cmVFbGVtZW50KHN0cnVjdHVyZUVsZW1lbnQpOworICAgIH0pOworICAgIG1ldGFsVHlwZURl
Y2xhcmF0aW9uV3JpdGVyLlZpc2l0b3I6OnZpc2l0KG1fcHJvZ3JhbSk7CisgICAgcmV0dXJuIG1l
dGFsVHlwZURlY2xhcmF0aW9uV3JpdGVyLnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBUeXBlTmFt
ZXI6Om1hbmdsZWROYW1lRm9yVHlwZShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkKK3sK
KyAgICByZXR1cm4gZmluZCh1bm5hbWVkVHlwZSwgbV90cmllKS5tYW5nbGVkTmFtZSgpOworfQor
CitTdHJpbmcgVHlwZU5hbWVyOjptYW5nbGVkTmFtZUZvclR5cGUoQVNUOjpOYW1lZFR5cGUmIG5h
bWVkVHlwZSkKK3sKKyAgICBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVk
VHlwZSkpCisgICAgICAgIHJldHVybiBtYW5nbGVkTmFtZUZvclR5cGUoZG93bmNhc3Q8QVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpOworICAgIGF1dG8gaXRlcmF0b3IgPSBt
X25hbWVkVHlwZU1hcHBpbmcuZmluZCgmbmFtZWRUeXBlKTsKKyAgICBBU1NFUlQoaXRlcmF0b3Ig
IT0gbV9uYW1lZFR5cGVNYXBwaW5nLmVuZCgpKTsKKyAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVl
OworfQorCisKK1N0cmluZyBUeXBlTmFtZXI6Om1hbmdsZWROYW1lRm9yRW51bWVyYXRpb25NZW1i
ZXIoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIpCit7CisgICAgYXV0
byBpdGVyYXRvciA9IG1fZW51bWVyYXRpb25NZW1iZXJNYXBwaW5nLmZpbmQoJmVudW1lcmF0aW9u
TWVtYmVyKTsKKyAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9lbnVtZXJhdGlvbk1lbWJlck1hcHBp
bmcuZW5kKCkpOworICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7Cit9CisKK1N0cmluZyBUeXBl
TmFtZXI6Om1hbmdsZWROYW1lRm9yU3RydWN0dXJlRWxlbWVudChBU1Q6OlN0cnVjdHVyZUVsZW1l
bnQmIHN0cnVjdHVyZUVsZW1lbnQpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fc3RydWN0dXJl
RWxlbWVudE1hcHBpbmcuZmluZCgmc3RydWN0dXJlRWxlbWVudCk7CisgICAgQVNTRVJUKGl0ZXJh
dG9yICE9IG1fc3RydWN0dXJlRWxlbWVudE1hcHBpbmcuZW5kKCkpOworICAgIHJldHVybiBpdGVy
YXRvci0+dmFsdWU7Cit9CisKK3ZvaWQgdHlwZU5hbWVzKFByb2dyYW0mIHByb2dyYW0pCit7Cisg
ICAgVHlwZU5hbWVyIHR5cGVOYW1lcihwcm9ncmFtKTsKKyAgICB0eXBlTmFtZXIuVmlzaXRvcjo6
dmlzaXQocHJvZ3JhbSk7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKHR5cGVOYW1lci5tZXRhbFR5cGVEZWZpbml0aW9ucygpKTsKKyAg
ICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIHdpdGggdGhlIHJlc3VsdC4KK30KKworfQorCit9CisK
K30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xODk4NDc1ODlkZTQ4
ZWEwNWMxZGUwYWU2ZjYzMjA3N2MyODY4MmM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuaApAQCAtMCww
ICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQ
VSkKKworI2luY2x1ZGUgIldITFNMVmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0NvbmNhdGVuYXRlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1i
ZXJzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIEVu
dW1lcmF0aW9uRGVmaW5pdGlvbjsKK2NsYXNzIEVudW1lcmF0aW9uTWVtYmVyOworY2xhc3MgTmFt
ZWRUeXBlOworY2xhc3MgTmF0aXZlVHlwZURlY2xhcmF0aW9uOworY2xhc3MgU3RydWN0dXJlRGVm
aW5pdGlvbjsKK2NsYXNzIFR5cGVEZWZpbml0aW9uOworY2xhc3MgVW5uYW1lZFR5cGU7CisKK30K
KworY2xhc3MgUHJvZ3JhbTsKKworbmFtZXNwYWNlIE1ldGFsIHsKKworY2xhc3MgQmFzZVR5cGVO
YW1lTm9kZTsKKworY2xhc3MgVHlwZU5hbWVyIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgor
ICAgIFR5cGVOYW1lcihQcm9ncmFtJik7CisgICAgdmlydHVhbCB+VHlwZU5hbWVyKCk7CisKKyAg
ICBTdHJpbmcgbWV0YWxUeXBlRGVmaW5pdGlvbnMoKTsKKworICAgIFN0cmluZyBtYW5nbGVkTmFt
ZUZvclR5cGUoQVNUOjpVbm5hbWVkVHlwZSYpOworICAgIFN0cmluZyBtYW5nbGVkTmFtZUZvclR5
cGUoQVNUOjpOYW1lZFR5cGUmKTsKKyAgICBTdHJpbmcgbWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlv
bk1lbWJlcihBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJik7CisgICAgU3RyaW5nIG1hbmdsZWROYW1l
Rm9yU3RydWN0dXJlRWxlbWVudChBU1Q6OlN0cnVjdHVyZUVsZW1lbnQmKTsKKworcHJpdmF0ZToK
KyAgICB2b2lkIHZpc2l0KEFTVDo6VW5uYW1lZFR5cGUmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZp
c2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNp
dChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQo
QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6
OlR5cGVEZWZpbml0aW9uJikgb3ZlcnJpZGU7CisKKyAgICBTdHJpbmcgZ2VuZXJhdGVOZXh0VHlw
ZU5hbWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoInR5cGUiLCBtX3R5cGVD
b3VudCsrKTsKKyAgICB9CisKKyAgICBTdHJpbmcgZ2VuZXJhdGVOZXh0RW51bWVyYXRpb25NZW1i
ZXJOYW1lKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJlbnVtZXJhdGlvbk1l
bWJlciIsIG1fZW51bWVyYXRpb25NZW1iZXJDb3VudCsrKTsKKyAgICB9CisKKyAgICBTdHJpbmcg
Z2VuZXJhdGVOZXh0U3RydWN0dXJlRWxlbWVudE5hbWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1ha2VTdHJpbmcoInN0cnVjdHVyZUVsZW1lbnQiLCBtX3N0cnVjdHVyZUVsZW1lbnRDb3VudCsr
KTsKKyAgICB9CisKKyAgICBTdHJpbmcgbWFuZ2xlZE5hbWVGb3JUeXBlKEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uJik7CisKKyAgICBVbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4gY3JlYXRl
TmFtZU5vZGUoQVNUOjpVbm5hbWVkVHlwZSYpOworICAgIHNpemVfdCBpbnNlcnQoQVNUOjpVbm5h
bWVkVHlwZSYsIFZlY3RvcjxVbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4+Jik7CisKKyAgICBQ
cm9ncmFtJiBtX3Byb2dyYW07CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2Rl
Pj4gbV90cmllOworICAgIEhhc2hNYXA8QVNUOjpVbm5hbWVkVHlwZSosIEJhc2VUeXBlTmFtZU5v
ZGUqPiBtX3VubmFtZWRUeXBlTWFwcGluZzsKKyAgICBIYXNoTWFwPEFTVDo6TmFtZWRUeXBlKiwg
U3RyaW5nPiBtX25hbWVkVHlwZU1hcHBpbmc7CisgICAgSGFzaE1hcDxBU1Q6Ok5hbWVkVHlwZSos
IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEJhc2VUeXBlTmFtZU5vZGU+Pj4gbV9kZXBl
bmRlbmN5R3JhcGg7CisgICAgSGFzaE1hcDxBU1Q6OkVudW1lcmF0aW9uTWVtYmVyKiwgU3RyaW5n
PiBtX2VudW1lcmF0aW9uTWVtYmVyTWFwcGluZzsKKyAgICBIYXNoTWFwPEFTVDo6U3RydWN0dXJl
RWxlbWVudCosIFN0cmluZz4gbV9zdHJ1Y3R1cmVFbGVtZW50TWFwcGluZzsKKyAgICB1bnNpZ25l
ZCBtX3R5cGVDb3VudCB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2VudW1lcmF0aW9uTWVtYmVyQ291
bnQgeyAwIH07CisgICAgdW5zaWduZWQgbV9zdHJ1Y3R1cmVFbGVtZW50Q291bnQgeyAwIH07Cit9
OworCit2b2lkIHR5cGVOYW1lcyhQcm9ncmFtJik7CisKK30KKworfQorCit9CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVj
a2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tl
ci5jcHAKaW5kZXggNjBiMGVmZWVjYWMyNDYzZTUxYThlYzEyM2RjY2Y3YTIwYTQ2ZjllNi4uM2M3
ZTg5MzAyMzM1ODY3YmZjNzFhNTlmNGM4Y2M1ZjdlNWVmNTQ5ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCkBAIC02MTIs
MTYgKzYxMiwxMiBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0
aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCiAgICAgYXV0byogYmFzZVR5cGUgPSAoWyZdKCkg
LT4gQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIHsKICAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGVudW1lcmF0aW9uRGVmaW5pdGlvbi50eXBlKCkpOwogICAgICAgICBhdXRvJiBiYXNlVHlw
ZSA9IGVudW1lcmF0aW9uRGVmaW5pdGlvbi50eXBlKCkudW5pZnlOb2RlKCk7Ci0gICAgICAgIGlm
ICghaXM8QVNUOjpVbm5hbWVkVHlwZT4oYmFzZVR5cGUpKQorICAgICAgICBpZiAoIWlzPEFTVDo6
TmFtZWRUeXBlPihiYXNlVHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgYXV0byYgdW5uYW1lZEJhc2UgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPihiYXNlVHlw
ZSk7Ci0gICAgICAgIGlmICghaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkQmFzZSkpCisg
ICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPihiYXNlVHlw
ZSk7CisgICAgICAgIGlmICghaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlw
ZSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgYXV0byYgdHlwZVJlZmVy
ZW5jZUJhc2UgPSBkb3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRCYXNlKTsKLSAg
ICAgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2VCYXNlLnJlc29sdmVkVHlwZSgpKTsKLSAgICAgICAg
aWYgKCFpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVuY2VCYXNlLnJl
c29sdmVkVHlwZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBhdXRv
JiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbj4oKnR5cGVSZWZlcmVuY2VCYXNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgYXV0byYg
bmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24+KG5hbWVkVHlwZSk7CiAgICAgICAgIGlmICghbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzSW50
KCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuICZuYXRpdmVU
eXBlRGVjbGFyYXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGI2MTI0MTkyY2U5NDQ1MmY2ZDFmZTRi
YmYzMDlmY2RhYzQxYjQ3MmEuLjdiNDFlYmUxYjU5NzE1NTA1OTUxZDJjN2EyZDU4YTU2M2I5NWJl
MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0zMjYsNiArMzI2LDcgQEAgTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xWaXNpdG9yLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMaXRlcmFsVHlw
ZUNoZWNrZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEhpZ2hab21iaWVGaW5kZXIu
Y3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExvb3BDaGVja2VyLmNwcAorTW9kdWxlcy93
ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTEZ1bmN0aW9uU3RhZ2VDaGVja2VyLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMVHlwZUFyZ3VtZW50LmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVp
bHRJblNlbWFudGljLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGM0OThmYThhMmJmZWZkNWM3OTAzMTE1YmYyMzcwODk2NmY5
MjQxMTUuLjRmOTk4MjMyYTk5MzAyOGE2YjIwZDBlMjdmZDUyMWRkYThhMDk3YjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY0
MjcsMTcgKzY0MjcsMTYgQEAKIAkJMUM4NDBCOUEyMUVDNDAwOTAwRDA1MDBEIC8qIFdITFNMR2F0
aGVyRW50cnlQb2ludEl0ZW1zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMR2F0aGVyRW50cnlQb2lu
dEl0ZW1zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDODQwQjlCMjFFQzQwMDkw
MEQwNTAwRCAvKiBXSExTTENoZWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xDaGVj
a2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM5MDRERjkwQkE5RDJDODAw
ODFFOUQwIC8qIFZlcnNpb24ueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRo
ID0gVmVyc2lvbi54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUNBMEMy
RTQyMUVFRDEyQTAwQTExODYwIC8qIFdITFNMRnVuY3Rpb25TdGFnZUNoZWNrZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV0hMU0xGdW5jdGlvblN0YWdlQ2hlY2tlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTFDQTBDMkU1MjFFRUQxMkEwMEExMTg2MCAvKiBXSExTTEZ1bmN0
aW9uU3RhZ2VDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMRnVuY3Rpb25TdGFnZUNoZWNr
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM5QUU1Q0EyMUVEOURGNTAwNjlE
NUYyIC8qIFdITFNMSGlnaFpvbWJpZUZpbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExT
TEhpZ2hab21iaWVGaW5kZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzlB
RTVDQjIxRUQ5REY1MDA2OUQ1RjIgLyogV0hMU0xIaWdoWm9tYmllRmluZGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdITFNMSGlnaFpvbWJpZUZpbmRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQ0EwQzJERTIxRUVCNUY0MDBBMTE4NjAgLyogV0hMU0xSZWN1cnNpb25DaGVja2VyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdITFNMUmVjdXJzaW9uQ2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQ0EwQzJFMDIxRUVCNUY1MDBBMTE4NjAgLyogV0hMU0xSZWN1cnNpb25D
aGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMUmVjdXJzaW9uQ2hlY2tlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQTBDMkU0MjFFRUQxMkEwMEExMTg2MCAv
KiBXSExTTEZ1bmN0aW9uU3RhZ2VDaGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNM
RnVuY3Rpb25TdGFnZUNoZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkx
Q0EwQzJFNTIxRUVEMTJBMDBBMTE4NjAgLyogV0hMU0xGdW5jdGlvblN0YWdlQ2hlY2tlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXSExTTEZ1bmN0aW9uU3RhZ2VDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFDQTBDMkVBMjFFRUQ2RjUwMEExMTg2MCAvKiBXSExTTExpdGVyYWxU
eXBlQ2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTExpdGVyYWxUeXBlQ2hlY2tlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0EwQzJFQzIxRUVENkY2MDBBMTE4NjAgLyog
V0hMU0xMaXRlcmFsVHlwZUNoZWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xMaXRl
cmFsVHlwZUNoZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQzlBRTVD
QTIxRUQ5REY1MDA2OUQ1RjIgLyogV0hMU0xIaWdoWm9tYmllRmluZGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdITFNMSGlnaFpvbWJpZUZpbmRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTFDOUFFNUNCMjFFRDlERjUwMDY5RDVGMiAvKiBXSExTTEhpZ2hab21iaWVGaW5k
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xIaWdoWm9tYmllRmluZGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFDQTBDMkY0MjFFRURBRDAwMEExMTg2MCAvKiBXSExTTExvb3BD
aGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMTG9vcENoZWNrZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0EwQzJGNTIxRUVEQUQxMDBBMTE4NjAgLyogV0hM
U0xMb29wQ2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTExvb3BDaGVja2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFDQTBDMkY2MjFFRURBRDIwMEExMTg2MCAvKiBBU1Qg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmb2xkZXI7
IHBhdGggPSBBU1Q7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQTE5RTAzMERDMjU1
OTUwMDY1QTk5NCAvKiBFdmVudExvb3BNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBFdmVudExvb3BNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFDQTE5RTE1MERDMjU1Q0EwMDY1QTk5NCAvKiBFdmVudExvb3AuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRXZlbnRMb29wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFDQUYzNDdFMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU2NyaXB0T2JqZWN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzM4Nyw2ICsxMzM4Niw4IEBACiAJCUMyNDU4RTYxMUZF
ODk3OUUwMDU5NDc1OSAvKiBGb250Q2FjaGVDb3JlVGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250
Q2FjaGVDb3JlVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjYwMTdBMTFD
NzJEQzk5MDBGNzRBMTYgLyogQ1NTRm9udEZhY2VTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ1NTRm9udEZhY2VTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDMjYwMTdBMjFDNzJEQzk5MDBGNzRBMTYgLyogQ1NTRm9udEZhY2VTZXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRm9udEZhY2VTZXQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzI2RDJDNzAyMUYwNUQ1NTAwNDk3ODk5IC8qIFdITFNM
VHlwZU5hbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMVHlwZU5hbWVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzI2RDJDNzEyMUYwNUQ1NTAwNDk3ODk5IC8qIFdI
TFNMVHlwZU5hbWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMVHlwZU5hbWVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyODA4MzNDMUM2REIxOTQwMDE0NTFCNiAvKiBGb250RmFj
ZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRm9udEZhY2UuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDMjgwODMzRDFDNkRDMjJDMDAxNDUxQjYgLyogSlNGb250RmFjZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU0ZvbnRGYWNlLmNwcDsg
cGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGb250RmFjZS5jcHA7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUMyODA4MzNFMUM2REMyMkMwMDE0NTFCNiAvKiBK
U0ZvbnRGYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTRm9udEZhY2Uu
aDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGb250RmFjZS5oOyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtMTcwMzIsNiArMTcwMzMsMTAwIEBACiAJCQl0
YWJXaWR0aCA9IDg7CiAJCQl1c2VzVGFicyA9IDA7CiAJCX07CisJCTFDQTBDMkY2MjFFRURBRDIw
MEExMTg2MCAvKiBBU1QgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0g
KAorCQkJCTFDODQwQjkwMjFFQzMwRjkwMEQwNTAwRCAvKiBXSExTTEFkZHJlc3NTcGFjZS5oICov
LAorCQkJCUMyMUJGNzI1MjFDRDg5RTIwMDIyNzk3OSAvKiBXSExTTEFycmF5UmVmZXJlbmNlVHlw
ZS5oICovLAorCQkJCUMyMUJGNzA5MjFDRDg5Q0EwMDIyNzk3OSAvKiBXSExTTEFycmF5VHlwZS5o
ICovLAorCQkJCUMyMUJGNzMwMjFDRDg5RUQwMDIyNzk3OSAvKiBXSExTTEFzc2lnbm1lbnRFeHBy
ZXNzaW9uLmggKi8sCisJCQkJQzIxQkY3MEEyMUNEODlDQjAwMjI3OTc5IC8qIFdITFNMQmFzZUZ1
bmN0aW9uQXR0cmlidXRlLmggKi8sCisJCQkJQzIxQkY2RkEyMUNEODlCRTAwMjI3OTc5IC8qIFdI
TFNMQmFzZVNlbWFudGljLmggKi8sCisJCQkJQzIxQkY3MUUyMUNEODlEQzAwMjI3OTc5IC8qIFdI
TFNMQmxvY2suaCAqLywKKwkJCQlDMjFCRjZGNjIxQ0Q4OUI3MDAyMjc5NzkgLyogV0hMU0xCb29s
ZWFuTGl0ZXJhbC5oICovLAorCQkJCUMyMUJGNzFBMjFDRDg5RDgwMDIyNzk3OSAvKiBXSExTTEJy
ZWFrLmggKi8sCisJCQkJQzIxMzhBMTMyMURERUNEMzAwRjUxNkJBIC8qIFdITFNMQnVpbHRJblNl
bWFudGljLmNwcCAqLywKKwkJCQlDMjFCRjcyMjIxQ0Q4OURGMDAyMjc5NzkgLyogV0hMU0xCdWls
dEluU2VtYW50aWMuaCAqLywKKwkJCQlDMjFCRjcxNjIxQ0Q4OUQ1MDAyMjc5NzkgLyogV0hMU0xD
YWxsRXhwcmVzc2lvbi5oICovLAorCQkJCUMyMUJGNzA2MjFDRDg5QzcwMDIyNzk3OSAvKiBXSExT
TENvbW1hRXhwcmVzc2lvbi5oICovLAorCQkJCUMyMUJGNzMzMjFDRDg5RjAwMDIyNzk3OSAvKiBX
SExTTENvbnN0YW50RXhwcmVzc2lvbi5oICovLAorCQkJCUMyMUJGNkY1MjFDRDg5QjUwMDIyNzk3
OSAvKiBXSExTTENvbnRpbnVlLmggKi8sCisJCQkJQzIxQkY3MDEyMUNEODlDNDAwMjI3OTc5IC8q
IFdITFNMRGVyZWZlcmVuY2VFeHByZXNzaW9uLmggKi8sCisJCQkJQzIxQkY3MTgyMUNEODlENzAw
MjI3OTc5IC8qIFdITFNMRG90RXhwcmVzc2lvbi5oICovLAorCQkJCUMyMUJGNkZCMjFDRDg5QkUw
MDIyNzk3OSAvKiBXSExTTERvV2hpbGVMb29wLmggKi8sCisJCQkJQzIxQkY3MjgyMUNEODlFNTAw
MjI3OTc5IC8qIFdITFNMRWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5oICovLAorCQkJCTFD
ODQwQjdEMjFFQkUwQjgwMEQwNTAwRCAvKiBXSExTTEVudHJ5UG9pbnRUeXBlLmggKi8sCisJCQkJ
QzIxQkY3MjAyMUNEODlERDAwMjI3OTc5IC8qIFdITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgg
Ki8sCisJCQkJQzIxQkY3MjYyMUNEODlFMzAwMjI3OTc5IC8qIFdITFNMRW51bWVyYXRpb25NZW1i
ZXIuaCAqLywKKwkJCQlDMjFCRjcwMjIxQ0Q4OUM0MDAyMjc5NzkgLyogV0hMU0xFbnVtZXJhdGlv
bk1lbWJlckxpdGVyYWwuaCAqLywKKwkJCQlDMjFCRjcwQzIxQ0Q4OUNDMDAyMjc5NzkgLyogV0hM
U0xFeHByZXNzaW9uLmggKi8sCisJCQkJQzIxQkY3MDAyMUNEODlDMjAwMjI3OTc5IC8qIFdITFNM
RmFsbHRocm91Z2guaCAqLywKKwkJCQlDMjFCRjczNTIxQ0Q4OUYyMDAyMjc5NzkgLyogV0hMU0xG
bG9hdExpdGVyYWwuaCAqLywKKwkJCQkxQ0I2OUIzODIxREYwM0UxMDA2RTg0NkEgLyogV0hMU0xG
bG9hdExpdGVyYWxUeXBlLmNwcCAqLywKKwkJCQkxQ0I2OUIzNDIxREVENjNBMDA2RTg0NkEgLyog
V0hMU0xGbG9hdExpdGVyYWxUeXBlLmggKi8sCisJCQkJQzIxQkY3MzQyMUNEODlGMTAwMjI3OTc5
IC8qIFdITFNMRm9yTG9vcC5oICovLAorCQkJCUMyMUJGNzA1MjFDRDg5QzcwMDIyNzk3OSAvKiBX
SExTTEZ1bmN0aW9uQXR0cmlidXRlLmggKi8sCisJCQkJQzIxQkY2RkQyMUNEODlDMDAwMjI3OTc5
IC8qIFdITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oICovLAorCQkJCUMyMUJGNkY0MjFDRDg5QjMw
MDIyNzk3OSAvKiBXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oICovLAorCQkJCUMyMUJGNkZGMjFD
RDg5QzIwMDIyNzk3OSAvKiBXSExTTElmU3RhdGVtZW50LmggKi8sCisJCQkJQzIxQkY2RjcyMUNE
ODlCOTAwMjI3OTc5IC8qIFdITFNMSW5kZXhFeHByZXNzaW9uLmggKi8sCisJCQkJQzIwRjRGNjYy
MURGRjIzNjAwNzBDNDVBIC8qIFdITFNMSW50ZWdlckxpdGVyYWwuY3BwICovLAorCQkJCUMyMUJG
NkY4MjFDRDg5QkIwMDIyNzk3OSAvKiBXSExTTEludGVnZXJMaXRlcmFsLmggKi8sCisJCQkJMUNC
NjlCMzkyMURGMDNGMzAwNkU4NDZBIC8qIFdITFNMSW50ZWdlckxpdGVyYWxUeXBlLmNwcCAqLywK
KwkJCQkxQ0I2OUIzNTIxREVENjQ5MDA2RTg0NkEgLyogV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUu
aCAqLywKKwkJCQlDMjFCRjczMjIxQ0Q4OUVGMDAyMjc5NzkgLyogV0hMU0xMb2dpY2FsRXhwcmVz
c2lvbi5oICovLAorCQkJCUMyMUJGNzE1MjFDRDg5RDQwMDIyNzk3OSAvKiBXSExTTExvZ2ljYWxO
b3RFeHByZXNzaW9uLmggKi8sCisJCQkJQzIxQkY3MkQyMUNEODlFOTAwMjI3OTc5IC8qIFdITFNM
TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oICovLAorCQkJCUMyMUJGNzJDMjFDRDg5RTkw
MDIyNzk3OSAvKiBXSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oICovLAorCQkJCTFDMzMyNzcx
MjFDRjBCRTEwMDBEQzlGMiAvKiBXSExTTE5hbWVkVHlwZS5oICovLAorCQkJCUMyMUJGNzIzMjFD
RDg5RTEwMDIyNzk3OSAvKiBXSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaCAqLywKKwkJ
CQlDMjFCRjcyQTIxQ0Q4OUU3MDAyMjc5NzkgLyogV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24u
aCAqLywKKwkJCQlDMjFCRjcyNDIxQ0Q4OUUxMDAyMjc5NzkgLyogV0hMU0xOb2RlLmggKi8sCisJ
CQkJQzIxQkY3MDcyMUNEODlDODAwMjI3OTc5IC8qIFdITFNMTnVsbExpdGVyYWwuaCAqLywKKwkJ
CQkxQ0I2OUIzQTIxREYwNDAzMDA2RTg0NkEgLyogV0hMU0xOdWxsTGl0ZXJhbFR5cGUuY3BwICov
LAorCQkJCTFDQjY5QjM2MjFERUQ2NTcwMDZFODQ2QSAvKiBXSExTTE51bGxMaXRlcmFsVHlwZS5o
ICovLAorCQkJCUMyMUJGNzIxMjFDRDg5REUwMDIyNzk3OSAvKiBXSExTTE51bVRocmVhZHNGdW5j
dGlvbkF0dHJpYnV0ZS5oICovLAorCQkJCUMyMUJGNzJGMjFDRDg5RUMwMDIyNzk3OSAvKiBXSExT
TFBvaW50ZXJUeXBlLmggKi8sCisJCQkJQzIxQkY3MkUyMUNEODlFQTAwMjI3OTc5IC8qIFdITFNM
UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmggKi8sCisJCQkJQzIxQkY3MEIyMUNEODlDQzAwMjI3
OTc5IC8qIFdITFNMUXVhbGlmaWVyLmggKi8sCisJCQkJQzIxQkY3MUIyMUNEODlEOTAwMjI3OTc5
IC8qIFdITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oICovLAorCQkJCUMyMUJGNzBEMjFD
RDg5Q0QwMDIyNzk3OSAvKiBXSExTTFJlZmVyZW5jZVR5cGUuaCAqLywKKwkJCQkxQ0I2OUIzMjIx
REVENDBCMDA2RTg0NkEgLyogV0hMU0xSZXNvbHZhYmxlVHlwZS5oICovLAorCQkJCUMyMTM4QTE1
MjFEREVDRTkwMEY1MTZCQSAvKiBXSExTTFJlc291cmNlU2VtYW50aWMuY3BwICovLAorCQkJCUMy
MUJGNzA4MjFDRDg5QzkwMDIyNzk3OSAvKiBXSExTTFJlc291cmNlU2VtYW50aWMuaCAqLywKKwkJ
CQlDMjFCRjcwMzIxQ0Q4OUM1MDAyMjc5NzkgLyogV0hMU0xSZXR1cm4uaCAqLywKKwkJCQlDMjFC
RjZGOTIxQ0Q4OUJEMDAyMjc5NzkgLyogV0hMU0xTZW1hbnRpYy5oICovLAorCQkJCUMyMTM4QTE2
MjFEREVDRkIwMEY1MTZCQSAvKiBXSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5j
cHAgKi8sCisJCQkJQzIxQkY3MzYyMUNEODlGMzAwMjI3OTc5IC8qIFdITFNMU3BlY2lhbGl6YXRp
b25Db25zdGFudFNlbWFudGljLmggKi8sCisJCQkJQzIxMzhBMTcyMURERUQwRDAwRjUxNkJBIC8q
IFdITFNMU3RhZ2VJbk91dFNlbWFudGljLmNwcCAqLywKKwkJCQlDMjFCRjcwRTIxQ0Q4OUNFMDAy
Mjc5NzkgLyogV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuaCAqLywKKwkJCQlDMjFCRjcxMjIxQ0Q4
OUQxMDAyMjc5NzkgLyogV0hMU0xTdGF0ZW1lbnQuaCAqLywKKwkJCQlDMjFCRjcyNzIxQ0Q4OUU0
MDAyMjc5NzkgLyogV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmggKi8sCisJCQkJQzIxQkY2RkUy
MUNEODlDMTAwMjI3OTc5IC8qIFdITFNMU3RydWN0dXJlRWxlbWVudC5oICovLAorCQkJCUMyMUJG
NzE5MjFDRDg5RDcwMDIyNzk3OSAvKiBXSExTTFN3aXRjaENhc2UuaCAqLywKKwkJCQlDMjFCRjcz
MTIxQ0Q4OUVFMDAyMjc5NzkgLyogV0hMU0xTd2l0Y2hTdGF0ZW1lbnQuaCAqLywKKwkJCQlDMjFC
RjcxQzIxQ0Q4OURBMDAyMjc5NzkgLyogV0hMU0xUZXJuYXJ5RXhwcmVzc2lvbi5oICovLAorCQkJ
CUMyMUJGNkYzMjFDRDg5QUQwMDIyNzk3OSAvKiBXSExTTFRyYXAuaCAqLywKKwkJCQlDMjFCRjcx
RDIxQ0Q4OURCMDAyMjc5NzkgLyogV0hMU0xUeXBlLmggKi8sCisJCQkJQzI4OEM3MkQyMUM5OTFE
QTAwMkRGNUNBIC8qIFdITFNMVHlwZUFyZ3VtZW50LmNwcCAqLywKKwkJCQlDMjFCRjcxMTIxQ0Q4
OUQxMDAyMjc5NzkgLyogV0hMU0xUeXBlQXJndW1lbnQuaCAqLywKKwkJCQlDMjFCRjcyOTIxQ0Q4
OUU2MDAyMjc5NzkgLyogV0hMU0xUeXBlRGVmaW5pdGlvbi5oICovLAorCQkJCUMyMEY0RjY0MjFE
RkJFNUMwMDcwQzQ1QSAvKiBXSExTTFR5cGVSZWZlcmVuY2UuY3BwICovLAorCQkJCUMyMUJGNzFG
MjFDRDg5REMwMDIyNzk3OSAvKiBXSExTTFR5cGVSZWZlcmVuY2UuaCAqLywKKwkJCQkxQzMzMjc3
MjIxQ0YwRDJFMDAwREM5RjIgLyogV0hMU0xVbm5hbWVkVHlwZS5oICovLAorCQkJCUMyMEY0RjY3
MjFERkYzQTcwMDcwQzQ1QSAvKiBXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuY3BwICovLAor
CQkJCUMyMUJGNzJCMjFDRDg5RTgwMDIyNzk3OSAvKiBXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVy
YWwuaCAqLywKKwkJCQkxQ0I2OUIzQjIxREYwNDFFMDA2RTg0NkEgLyogV0hMU0xVbnNpZ25lZElu
dGVnZXJMaXRlcmFsVHlwZS5jcHAgKi8sCisJCQkJMUNCNjlCMzcyMURFRDY2QjAwNkU4NDZBIC8q
IFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuaCAqLywKKwkJCQlDMjFCRjZGQzIxQ0Q4
OUJGMDAyMjc5NzkgLyogV0hMU0xWYWx1ZS5oICovLAorCQkJCUMyMUJGNzEwMjFDRDg5RDAwMDIy
Nzk3OSAvKiBXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCAqLywKKwkJCQlDMjFCRjcxNDIxQ0Q4
OUQzMDAyMjc5NzkgLyogV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oICovLAor
CQkJCUMyMUJGNzEzMjFDRDg5RDIwMDIyNzk3OSAvKiBXSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgg
Ki8sCisJCQkJQzIxQkY3MDQyMUNEODlDNjAwMjI3OTc5IC8qIFdITFNMV2hpbGVMb29wLmggKi8s
CisJCQkpOworCQkJcGF0aCA9IEFTVDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07
CiAJCTFDREQ0NDY2MEJBOUM4MDAwMEY5MDE0NyAvKiBDb25maWd1cmF0aW9ucyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yNTQ1OSw2ICsyNTU1NCw3IEBA
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTFDQTBDMkY2MjFFRURB
RDIwMEExMTg2MCAvKiBBU1QgKi8sCisJCQkJQzI2RDJDNkUyMUYwNUNERTAwNDk3ODk5IC8qIE1l
dGFsICovLAogCQkJCUMyMzRBOUIyMjFFOTJDMUYwMDNDOTg0RCAvKiBXSExTTENoZWNrRHVwbGlj
YXRlRnVuY3Rpb25zLmNwcCAqLywKIAkJCQlDMjM0QTlBRTIxRTkyQzFBMDAzQzk4NEQgLyogV0hM
U0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oICovLAogCQkJCTFDODQwQjlCMjFFQzQwMDkwMEQw
NTAwRCAvKiBXSExTTENoZWNrZXIuY3BwICovLApAQCAtMjU1MDgsOTggKzI1NjA0LDEzIEBACiAJ
CQlwYXRoID0gV0hMU0w7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQkxQ0Ew
QzJGNjIxRUVEQUQyMDBBMTE4NjAgLyogQVNUICovID0geworCQlDMjZEMkM2RTIxRjA1Q0RFMDA0
OTc4OTkgLyogTWV0YWwgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAotCQkJCTFDODQwQjkwMjFFQzMwRjkwMEQwNTAwRCAvKiBXSExTTEFkZHJlc3NTcGFjZS5oICov
LAotCQkJCUMyMUJGNzI1MjFDRDg5RTIwMDIyNzk3OSAvKiBXSExTTEFycmF5UmVmZXJlbmNlVHlw
ZS5oICovLAotCQkJCUMyMUJGNzA5MjFDRDg5Q0EwMDIyNzk3OSAvKiBXSExTTEFycmF5VHlwZS5o
ICovLAotCQkJCUMyMUJGNzMwMjFDRDg5RUQwMDIyNzk3OSAvKiBXSExTTEFzc2lnbm1lbnRFeHBy
ZXNzaW9uLmggKi8sCi0JCQkJQzIxQkY3MEEyMUNEODlDQjAwMjI3OTc5IC8qIFdITFNMQmFzZUZ1
bmN0aW9uQXR0cmlidXRlLmggKi8sCi0JCQkJQzIxQkY2RkEyMUNEODlCRTAwMjI3OTc5IC8qIFdI
TFNMQmFzZVNlbWFudGljLmggKi8sCi0JCQkJQzIxQkY3MUUyMUNEODlEQzAwMjI3OTc5IC8qIFdI
TFNMQmxvY2suaCAqLywKLQkJCQlDMjFCRjZGNjIxQ0Q4OUI3MDAyMjc5NzkgLyogV0hMU0xCb29s
ZWFuTGl0ZXJhbC5oICovLAotCQkJCUMyMUJGNzFBMjFDRDg5RDgwMDIyNzk3OSAvKiBXSExTTEJy
ZWFrLmggKi8sCi0JCQkJQzIxMzhBMTMyMURERUNEMzAwRjUxNkJBIC8qIFdITFNMQnVpbHRJblNl
bWFudGljLmNwcCAqLywKLQkJCQlDMjFCRjcyMjIxQ0Q4OURGMDAyMjc5NzkgLyogV0hMU0xCdWls
dEluU2VtYW50aWMuaCAqLywKLQkJCQlDMjFCRjcxNjIxQ0Q4OUQ1MDAyMjc5NzkgLyogV0hMU0xD
YWxsRXhwcmVzc2lvbi5oICovLAotCQkJCUMyMUJGNzA2MjFDRDg5QzcwMDIyNzk3OSAvKiBXSExT
TENvbW1hRXhwcmVzc2lvbi5oICovLAotCQkJCUMyMUJGNzMzMjFDRDg5RjAwMDIyNzk3OSAvKiBX
SExTTENvbnN0YW50RXhwcmVzc2lvbi5oICovLAotCQkJCUMyMUJGNkY1MjFDRDg5QjUwMDIyNzk3
OSAvKiBXSExTTENvbnRpbnVlLmggKi8sCi0JCQkJQzIxQkY3MDEyMUNEODlDNDAwMjI3OTc5IC8q
IFdITFNMRGVyZWZlcmVuY2VFeHByZXNzaW9uLmggKi8sCi0JCQkJQzIxQkY3MTgyMUNEODlENzAw
MjI3OTc5IC8qIFdITFNMRG90RXhwcmVzc2lvbi5oICovLAotCQkJCUMyMUJGNkZCMjFDRDg5QkUw
MDIyNzk3OSAvKiBXSExTTERvV2hpbGVMb29wLmggKi8sCi0JCQkJQzIxQkY3MjgyMUNEODlFNTAw
MjI3OTc5IC8qIFdITFNMRWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5oICovLAotCQkJCTFD
ODQwQjdEMjFFQkUwQjgwMEQwNTAwRCAvKiBXSExTTEVudHJ5UG9pbnRUeXBlLmggKi8sCi0JCQkJ
QzIxQkY3MjAyMUNEODlERDAwMjI3OTc5IC8qIFdITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgg
Ki8sCi0JCQkJQzIxQkY3MjYyMUNEODlFMzAwMjI3OTc5IC8qIFdITFNMRW51bWVyYXRpb25NZW1i
ZXIuaCAqLywKLQkJCQlDMjFCRjcwMjIxQ0Q4OUM0MDAyMjc5NzkgLyogV0hMU0xFbnVtZXJhdGlv
bk1lbWJlckxpdGVyYWwuaCAqLywKLQkJCQlDMjFCRjcwQzIxQ0Q4OUNDMDAyMjc5NzkgLyogV0hM
U0xFeHByZXNzaW9uLmggKi8sCi0JCQkJQzIxQkY3MDAyMUNEODlDMjAwMjI3OTc5IC8qIFdITFNM
RmFsbHRocm91Z2guaCAqLywKLQkJCQlDMjFCRjczNTIxQ0Q4OUYyMDAyMjc5NzkgLyogV0hMU0xG
bG9hdExpdGVyYWwuaCAqLywKLQkJCQkxQ0I2OUIzODIxREYwM0UxMDA2RTg0NkEgLyogV0hMU0xG
bG9hdExpdGVyYWxUeXBlLmNwcCAqLywKLQkJCQkxQ0I2OUIzNDIxREVENjNBMDA2RTg0NkEgLyog
V0hMU0xGbG9hdExpdGVyYWxUeXBlLmggKi8sCi0JCQkJQzIxQkY3MzQyMUNEODlGMTAwMjI3OTc5
IC8qIFdITFNMRm9yTG9vcC5oICovLAotCQkJCUMyMUJGNzA1MjFDRDg5QzcwMDIyNzk3OSAvKiBX
SExTTEZ1bmN0aW9uQXR0cmlidXRlLmggKi8sCi0JCQkJQzIxQkY2RkQyMUNEODlDMDAwMjI3OTc5
IC8qIFdITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oICovLAotCQkJCUMyMUJGNkY0MjFDRDg5QjMw
MDIyNzk3OSAvKiBXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oICovLAotCQkJCUMyMUJGNkZGMjFD
RDg5QzIwMDIyNzk3OSAvKiBXSExTTElmU3RhdGVtZW50LmggKi8sCi0JCQkJQzIxQkY2RjcyMUNE
ODlCOTAwMjI3OTc5IC8qIFdITFNMSW5kZXhFeHByZXNzaW9uLmggKi8sCi0JCQkJQzIwRjRGNjYy
MURGRjIzNjAwNzBDNDVBIC8qIFdITFNMSW50ZWdlckxpdGVyYWwuY3BwICovLAotCQkJCUMyMUJG
NkY4MjFDRDg5QkIwMDIyNzk3OSAvKiBXSExTTEludGVnZXJMaXRlcmFsLmggKi8sCi0JCQkJMUNC
NjlCMzkyMURGMDNGMzAwNkU4NDZBIC8qIFdITFNMSW50ZWdlckxpdGVyYWxUeXBlLmNwcCAqLywK
LQkJCQkxQ0I2OUIzNTIxREVENjQ5MDA2RTg0NkEgLyogV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUu
aCAqLywKLQkJCQlDMjFCRjczMjIxQ0Q4OUVGMDAyMjc5NzkgLyogV0hMU0xMb2dpY2FsRXhwcmVz
c2lvbi5oICovLAotCQkJCUMyMUJGNzE1MjFDRDg5RDQwMDIyNzk3OSAvKiBXSExTTExvZ2ljYWxO
b3RFeHByZXNzaW9uLmggKi8sCi0JCQkJQzIxQkY3MkQyMUNEODlFOTAwMjI3OTc5IC8qIFdITFNM
TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oICovLAotCQkJCUMyMUJGNzJDMjFDRDg5RTkw
MDIyNzk3OSAvKiBXSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oICovLAotCQkJCTFDMzMyNzcx
MjFDRjBCRTEwMDBEQzlGMiAvKiBXSExTTE5hbWVkVHlwZS5oICovLAotCQkJCUMyMUJGNzIzMjFD
RDg5RTEwMDIyNzk3OSAvKiBXSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaCAqLywKLQkJ
CQlDMjFCRjcyQTIxQ0Q4OUU3MDAyMjc5NzkgLyogV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24u
aCAqLywKLQkJCQlDMjFCRjcyNDIxQ0Q4OUUxMDAyMjc5NzkgLyogV0hMU0xOb2RlLmggKi8sCi0J
CQkJQzIxQkY3MDcyMUNEODlDODAwMjI3OTc5IC8qIFdITFNMTnVsbExpdGVyYWwuaCAqLywKLQkJ
CQkxQ0I2OUIzQTIxREYwNDAzMDA2RTg0NkEgLyogV0hMU0xOdWxsTGl0ZXJhbFR5cGUuY3BwICov
LAotCQkJCTFDQjY5QjM2MjFERUQ2NTcwMDZFODQ2QSAvKiBXSExTTE51bGxMaXRlcmFsVHlwZS5o
ICovLAotCQkJCUMyMUJGNzIxMjFDRDg5REUwMDIyNzk3OSAvKiBXSExTTE51bVRocmVhZHNGdW5j
dGlvbkF0dHJpYnV0ZS5oICovLAotCQkJCUMyMUJGNzJGMjFDRDg5RUMwMDIyNzk3OSAvKiBXSExT
TFBvaW50ZXJUeXBlLmggKi8sCi0JCQkJQzIxQkY3MkUyMUNEODlFQTAwMjI3OTc5IC8qIFdITFNM
UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmggKi8sCi0JCQkJQzIxQkY3MEIyMUNEODlDQzAwMjI3
OTc5IC8qIFdITFNMUXVhbGlmaWVyLmggKi8sCi0JCQkJQzIxQkY3MUIyMUNEODlEOTAwMjI3OTc5
IC8qIFdITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oICovLAotCQkJCUMyMUJGNzBEMjFD
RDg5Q0QwMDIyNzk3OSAvKiBXSExTTFJlZmVyZW5jZVR5cGUuaCAqLywKLQkJCQkxQ0I2OUIzMjIx
REVENDBCMDA2RTg0NkEgLyogV0hMU0xSZXNvbHZhYmxlVHlwZS5oICovLAotCQkJCUMyMTM4QTE1
MjFEREVDRTkwMEY1MTZCQSAvKiBXSExTTFJlc291cmNlU2VtYW50aWMuY3BwICovLAotCQkJCUMy
MUJGNzA4MjFDRDg5QzkwMDIyNzk3OSAvKiBXSExTTFJlc291cmNlU2VtYW50aWMuaCAqLywKLQkJ
CQlDMjFCRjcwMzIxQ0Q4OUM1MDAyMjc5NzkgLyogV0hMU0xSZXR1cm4uaCAqLywKLQkJCQlDMjFC
RjZGOTIxQ0Q4OUJEMDAyMjc5NzkgLyogV0hMU0xTZW1hbnRpYy5oICovLAotCQkJCUMyMTM4QTE2
MjFEREVDRkIwMEY1MTZCQSAvKiBXSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5j
cHAgKi8sCi0JCQkJQzIxQkY3MzYyMUNEODlGMzAwMjI3OTc5IC8qIFdITFNMU3BlY2lhbGl6YXRp
b25Db25zdGFudFNlbWFudGljLmggKi8sCi0JCQkJQzIxMzhBMTcyMURERUQwRDAwRjUxNkJBIC8q
IFdITFNMU3RhZ2VJbk91dFNlbWFudGljLmNwcCAqLywKLQkJCQlDMjFCRjcwRTIxQ0Q4OUNFMDAy
Mjc5NzkgLyogV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuaCAqLywKLQkJCQlDMjFCRjcxMjIxQ0Q4
OUQxMDAyMjc5NzkgLyogV0hMU0xTdGF0ZW1lbnQuaCAqLywKLQkJCQlDMjFCRjcyNzIxQ0Q4OUU0
MDAyMjc5NzkgLyogV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmggKi8sCi0JCQkJQzIxQkY2RkUy
MUNEODlDMTAwMjI3OTc5IC8qIFdITFNMU3RydWN0dXJlRWxlbWVudC5oICovLAotCQkJCUMyMUJG
NzE5MjFDRDg5RDcwMDIyNzk3OSAvKiBXSExTTFN3aXRjaENhc2UuaCAqLywKLQkJCQlDMjFCRjcz
MTIxQ0Q4OUVFMDAyMjc5NzkgLyogV0hMU0xTd2l0Y2hTdGF0ZW1lbnQuaCAqLywKLQkJCQlDMjFC
RjcxQzIxQ0Q4OURBMDAyMjc5NzkgLyogV0hMU0xUZXJuYXJ5RXhwcmVzc2lvbi5oICovLAotCQkJ
CUMyMUJGNkYzMjFDRDg5QUQwMDIyNzk3OSAvKiBXSExTTFRyYXAuaCAqLywKLQkJCQlDMjFCRjcx
RDIxQ0Q4OURCMDAyMjc5NzkgLyogV0hMU0xUeXBlLmggKi8sCi0JCQkJQzI4OEM3MkQyMUM5OTFE
QTAwMkRGNUNBIC8qIFdITFNMVHlwZUFyZ3VtZW50LmNwcCAqLywKLQkJCQlDMjFCRjcxMTIxQ0Q4
OUQxMDAyMjc5NzkgLyogV0hMU0xUeXBlQXJndW1lbnQuaCAqLywKLQkJCQlDMjFCRjcyOTIxQ0Q4
OUU2MDAyMjc5NzkgLyogV0hMU0xUeXBlRGVmaW5pdGlvbi5oICovLAotCQkJCUMyMEY0RjY0MjFE
RkJFNUMwMDcwQzQ1QSAvKiBXSExTTFR5cGVSZWZlcmVuY2UuY3BwICovLAotCQkJCUMyMUJGNzFG
MjFDRDg5REMwMDIyNzk3OSAvKiBXSExTTFR5cGVSZWZlcmVuY2UuaCAqLywKLQkJCQkxQzMzMjc3
MjIxQ0YwRDJFMDAwREM5RjIgLyogV0hMU0xVbm5hbWVkVHlwZS5oICovLAotCQkJCUMyMEY0RjY3
MjFERkYzQTcwMDcwQzQ1QSAvKiBXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuY3BwICovLAot
CQkJCUMyMUJGNzJCMjFDRDg5RTgwMDIyNzk3OSAvKiBXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVy
YWwuaCAqLywKLQkJCQkxQ0I2OUIzQjIxREYwNDFFMDA2RTg0NkEgLyogV0hMU0xVbnNpZ25lZElu
dGVnZXJMaXRlcmFsVHlwZS5jcHAgKi8sCi0JCQkJMUNCNjlCMzcyMURFRDY2QjAwNkU4NDZBIC8q
IFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuaCAqLywKLQkJCQlDMjFCRjZGQzIxQ0Q4
OUJGMDAyMjc5NzkgLyogV0hMU0xWYWx1ZS5oICovLAotCQkJCUMyMUJGNzEwMjFDRDg5RDAwMDIy
Nzk3OSAvKiBXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCAqLywKLQkJCQlDMjFCRjcxNDIxQ0Q4
OUQzMDAyMjc5NzkgLyogV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oICovLAot
CQkJCUMyMUJGNzEzMjFDRDg5RDIwMDIyNzk3OSAvKiBXSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgg
Ki8sCi0JCQkJQzIxQkY3MDQyMUNEODlDNjAwMjI3OTc5IC8qIFdITFNMV2hpbGVMb29wLmggKi8s
CisJCQkJQzI2RDJDNzAyMUYwNUQ1NTAwNDk3ODk5IC8qIFdITFNMVHlwZU5hbWVyLmNwcCAqLywK
KwkJCQlDMjZEMkM3MTIxRjA1RDU1MDA0OTc4OTkgLyogV0hMU0xUeXBlTmFtZXIuaCAqLywKIAkJ
CSk7Ci0JCQlwYXRoID0gQVNUOworCQkJcGF0aCA9IE1ldGFsOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKIAkJfTsKIAkJQzk2RjVFQkYxQjU4NzIyNjAwOTFFQTlEIC8qIG1lZGlhc2Vzc2lv
biAqLyA9IHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359459</attachid>
            <date>2019-01-18 00:54:37 -0800</date>
            <delta_ts>2019-01-18 02:00:11 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-193531-20190118005436.patch</filename>
            <type>text/plain</type>
            <size>108430</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwMTMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2MyMTljODM2OGUyNjA4
YTM3NTFiODczZDFlOTJjMDRkZTVjYzY4MS4uMjQxZGU5OTBkOGRlYTRjMDlkZmI0ZDU5MGExYmQ3
NDNkNzNlMGEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE5LTAxLTE3ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgTWV0YWwgY29kZSBnZW5lcmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTM1MzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAq
IE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkJhc2VUeXBlTmFtZU5vZGU6OkJhc2VUeXBl
TmFtZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpCYXNlVHlwZU5hbWVO
b2RlOjppc0FycmF5VHlwZU5hbWVOb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpNZXRhbDo6QmFzZVR5cGVOYW1lTm9kZTo6aXNBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkJhc2VUeXBlTmFtZU5vZGU6
OmlzUG9pbnRlclR5cGVOYW1lTm9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
TWV0YWw6OkJhc2VUeXBlTmFtZU5vZGU6OmlzUmVmZXJlbmNlVHlwZU5hbWVOb2RlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6QXJyYXlUeXBlTmFtZU5vZGU6OkFycmF5
VHlwZU5hbWVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6QXJyYXlUeXBl
TmFtZU5vZGU6Om51bUVsZW1lbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpN
ZXRhbDo6QXJyYXlUeXBlTmFtZU5vZGU6OmNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpNZXRhbDo6QXJyYXlUeXBlTmFtZU5vZGU6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6TWV0YWw6OkFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlOjpBcnJheVJlZmVyZW5j
ZVR5cGVOYW1lTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkFycmF5UmVm
ZXJlbmNlVHlwZU5hbWVOb2RlOjphZGRyZXNzU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6Ok1ldGFsOjpBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZTo6Y2hpbGRyZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9k
ZTo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UG9pbnRlclR5cGVO
YW1lTm9kZTo6UG9pbnRlclR5cGVOYW1lTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
TWV0YWw6OlBvaW50ZXJUeXBlTmFtZU5vZGU6OmFkZHJlc3NTcGFjZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlBvaW50ZXJUeXBlTmFtZU5vZGU6OmNoaWxkcmVuKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UG9pbnRlclR5cGVOYW1lTm9kZTo6YXBw
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UmVmZXJlbmNlVHlwZU5hbWVO
b2RlOjpSZWZlcmVuY2VUeXBlTmFtZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1l
dGFsOjpSZWZlcmVuY2VUeXBlTmFtZU5vZGU6Om5hbWVkVHlwZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6Z2VuZXJhdGVOZXh0TmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6YnVpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6Omluc2VydCk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6TWV0YWw6OnR5cGVOYW1lcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuaDogQWRkZWQuCisgICAgICAgICogU291cmNlcy50
eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE5
LTAxLTE3ICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KIAogICAgICAg
ICBVbnJldmlld2VkIFdpbkNhaXJvIGZpeCAtLSBodW5kcmVkcyBvZiB0ZXN0cyBjcmFzaCBhZnRl
ciByMjQwMDMxLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oCmluZGV4IDhmZWY2Mjk1OWQ3MzYzZTFmMWJiYjIz
ZDczMzk4ZjhhMmQ0OGJkZTEuLjAxZjJmZmI4MDZhMDU3NmJjNjA1NmUwNjFhYjE3MmJlMjY0NjE2
ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogCiAgICAg
Y29uc3QgTGV4ZXI6OlRva2VuJiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQog
Ci0gICAgVW5uYW1lZFR5cGUqIHR5cGUoKSB7IHJldHVybiBtX3R5cGUgPyAmKm1fdHlwZSA6IG51
bGxwdHI7IH0KKyAgICBVbm5hbWVkVHlwZSogcmVzb2x2ZWRUeXBlKCkgeyByZXR1cm4gbV90eXBl
ID8gJiptX3R5cGUgOiBudWxscHRyOyB9CiAKICAgICB2b2lkIHNldFR5cGUoVW5pcXVlUmVmPFVu
bmFtZWRUeXBlPiYmIHR5cGUpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlv
bi5oCmluZGV4IDUwODI4NTg0NjA3MDU3N2Q4OTRjNTM0YTM5NzRiY2UwYWJiMjFmMTEuLmMxNTQ2
NmE3MGJiYmFhYTc1ZjE3MGUxMjZlYjUyZGM4OGI4NDgxNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5j
dGlvbkRlY2xhcmF0aW9uLmgKQEAgLTcwLDYgKzcwLDcgQEAgcHVibGljOgogICAgIGNvbnN0IFVu
bmFtZWRUeXBlJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgVW5uYW1lZFR5
cGUmIHR5cGUoKSB7IHJldHVybiBtX3R5cGU7IH0KICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBj
b25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX25h
bWU7IH0KICAgICBib29sIGlzQ2FzdCgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZSA9PSAib3BlcmF0
b3IgY2FzdCI7IH0KICAgICBjb25zdCBWYXJpYWJsZURlY2xhcmF0aW9ucyYgcGFyYW1ldGVycygp
IGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVyczsgfQogICAgIFZhcmlhYmxlRGVjbGFyYXRpb25z
JiBwYXJhbWV0ZXJzKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVu
Y3Rpb25Xcml0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiZmM2YjY0NjMzMjMzNzU1N2ZmMGU4NjdlYmRm
NDNjZGUyZmQ2NGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcApAQCAtMCwwICsxLDg5MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTEZ1bmN0
aW9uV3JpdGVyLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xBcnJh
eVJlZmVyZW5jZVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xCb29sZWFuTGl0ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMQ2FsbEV4
cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTENvbW1hRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUg
IldITFNMRGVyZWZlcmVuY2VFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xEb1doaWxlTG9v
cC5oIgorI2luY2x1ZGUgIldITFNMRWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5oIgorI2lu
Y2x1ZGUgIldITFNMRmxvYXRMaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xGb3JMb29wLmgiCisj
aW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5j
dGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTElmU3RhdGVtZW50LmgiCisjaW5jbHVk
ZSAiV0hMU0xJbnRlZ2VyTGl0ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMTG9naWNhbEV4cHJlc3Np
b24uaCIKKyNpbmNsdWRlICJXSExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAi
V0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xNYWtl
UG9pbnRlckV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgorI2luY2x1
ZGUgIldITFNMUG9pbnRlclR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNs
dWRlICJXSExTTFJldHVybi5oIgorI2luY2x1ZGUgIldITFNMU3dpdGNoQ2FzZS5oIgorI2luY2x1
ZGUgIldITFNMU3dpdGNoU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xUZXJuYXJ5RXhwcmVz
c2lvbi5oIgorI2luY2x1ZGUgIldITFNMVHlwZU5hbWVyLmgiCisjaW5jbHVkZSAiV0hMU0xVbnNp
Z25lZEludGVnZXJMaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9u
LmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oIgorI2lu
Y2x1ZGUgIldITFNMVmFyaWFibGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTFZpc2l0b3Iu
aCIKKyNpbmNsdWRlICJXSExTTFdoaWxlTG9vcC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBNZXRhbCB7CisKK2NsYXNzIEZ1
bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXIgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAg
RnVuY3Rpb25EZWNsYXJhdGlvbldyaXRlcihUeXBlTmFtZXImIHR5cGVOYW1lciwgSGFzaE1hcDxB
U1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qLCBTdHJpbmc+JiBmdW5jdGlvbk1hcHBpbmcpCisgICAg
ICAgIDogbV90eXBlTmFtZXIodHlwZU5hbWVyKQorICAgICAgICAsIG1fZnVuY3Rpb25NYXBwaW5n
KGZ1bmN0aW9uTWFwcGluZykKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+RnVuY3Rpb25E
ZWNsYXJhdGlvbldyaXRlcigpID0gZGVmYXVsdDsKKworICAgIFN0cmluZyB0b1N0cmluZygpIHsg
cmV0dXJuIG1fc3RyaW5nQnVpbGRlci50b1N0cmluZygpOyB9CisgICAgdm9pZCB2aXNpdChBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGZ1bmN0aW9uRGVjbGFyYXRpb24pIG92ZXJyaWRlCisgICAg
eworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9mdW5jdGlvbk1hcHBpbmcuZmluZCgmZnVuY3Rp
b25EZWNsYXJhdGlvbik7CisgICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX2Z1bmN0aW9uTWFw
cGluZy5lbmQoKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyht
X3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkp
LCAnICcsIGl0ZXJhdG9yLT52YWx1ZSwgJygnKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgIGlmIChpKQorICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
IiwgIik7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1fdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZSgqZnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlw
ZSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKTtcbiIp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBUeXBlTmFtZXImIG1fdHlwZU5hbWVyOworICAgIEhh
c2hNYXA8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiwgU3RyaW5nPiYgbV9mdW5jdGlvbk1hcHBp
bmc7CisgICAgU3RyaW5nQnVpbGRlciBtX3N0cmluZ0J1aWxkZXI7Cit9OworCitjbGFzcyBGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXIgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgRnVu
Y3Rpb25EZWZpbml0aW9uV3JpdGVyKFR5cGVOYW1lciYgdHlwZU5hbWVyLCBIYXNoTWFwPEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbiosIFN0cmluZz4mIGZ1bmN0aW9uTWFwcGluZykKKyAgICAgICAg
OiBtX3R5cGVOYW1lcih0eXBlTmFtZXIpCisgICAgICAgICwgbV9mdW5jdGlvbk1hcHBpbmcoZnVu
Y3Rpb25NYXBwaW5nKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5GdW5jdGlvbkRlZmlu
aXRpb25Xcml0ZXIoKSA9IGRlZmF1bHQ7CisKKyAgICBTdHJpbmcgdG9TdHJpbmcoKSB7IHJldHVy
biBtX3N0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6Ok5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pIG92ZXJy
aWRlCisgICAgeworICAgICAgICBhdXRvIGdldE5hdGl2ZU5hbWUgPSBbJl0oQVNUOjpVbm5hbWVk
VHlwZSYgdW5uYW1lZFR5cGUpIC0+IFN0cmluZyB7CisgICAgICAgICAgICBBU1NFUlQoaXM8QVNU
OjpOYW1lZFR5cGU+KHVubmFtZWRUeXBlLnVuaWZ5Tm9kZSgpKSk7CisgICAgICAgICAgICBhdXRv
JiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5uYW1lZFR5cGUudW5pZnlO
b2RlKCkpOworICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
PihuYW1lZFR5cGUpKTsKKyAgICAgICAgICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9
IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpOworICAgICAg
ICAgICAgcmV0dXJuIG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVUeXBlRGVj
bGFyYXRpb24pOworICAgICAgICB9OworICAgICAgICBhdXRvIG1hcEZ1bmN0aW9uTmFtZSA9IFtd
KFN0cmluZyYgZnVuY3Rpb25OYW1lKSAtPiBTdHJpbmcgeworICAgICAgICAgICAgaWYgKGZ1bmN0
aW9uTmFtZSA9PSAiZGR4IikKKyAgICAgICAgICAgICAgICByZXR1cm4gImRmZHgiX3N0cjsKKyAg
ICAgICAgICAgIGlmIChmdW5jdGlvbk5hbWUgPT0gImRkeSIpCisgICAgICAgICAgICAgICAgcmV0
dXJuICJkZmR5Il9zdHI7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25OYW1lID09ICJhc2ludCIp
CisgICAgICAgICAgICAgICAgcmV0dXJuICJhc190eXBlPGludDMyX3Q+Il9zdHI7CisgICAgICAg
ICAgICBpZiAoZnVuY3Rpb25OYW1lID09ICJhc3VpbnQiKQorICAgICAgICAgICAgICAgIHJldHVy
biAiYXNfdHlwZTx1aW50MzJfdD4iX3N0cjsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbk5hbWUg
PT0gImFzZmxvYXQiKQorICAgICAgICAgICAgICAgIHJldHVybiAiYXNfdHlwZTxmbG9hdD4iX3N0
cjsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbk5hbWU7CisgICAgICAgIH07CisgICAgICAg
IGF1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9uTWFwcGluZy5maW5kKCZuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uKTsKKyAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fZnVuY3Rpb25NYXBwaW5n
LmVuZCgpKTsKKyAgICAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaXNDYXN0KCkp
IHsKKyAgICAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKS5zaXplKCkgPT0gMSk7CisgICAgICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9
IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBd
LnR5cGUoKSk7CisgICAgICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IGdldE5hdGl2ZU5h
bWUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOworICAgICAgICAgICAgaWYgKG1l
dGFsUGFyYW1ldGVyTmFtZSAhPSAiYXRvbWljX2ludCJfc3RyICYmIG1ldGFsUGFyYW1ldGVyTmFt
ZSAhPSAiYXRvbWljX3VpbnQiX3N0cikgeworICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgaXRlcmF0b3ItPnZhbHVl
LCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIngpIHtcbiIpKTsKKyAgICAgICAgICAgICAgICBt
X3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
IiwgbWV0YWxSZXR1cm5OYW1lLCAiPih4KTtcbiIpKTsKKyAgICAgICAgICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwg
JyAnLCBpdGVyYXRvci0+dmFsdWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAieCkge1xuIikp
OworICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICByZXR1cm4gYXRv
bWljX2xvYWRfZXhwbGljaXQoJngsIG1lbW9yeV9vcmRlcl9yZWxheGVkKTtcbiIpOworICAgICAg
ICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN0YXJ0
c1dpdGgoIm9wZXJhdG9yLiJfc3RyKSkgeworICAgICAgICAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ubmFtZSgpLmVuZHNXaXRoKCI9Il9zdHIpKSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAy
KTsKKyAgICAgICAgICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSBnZXROYXRpdmVO
YW1lKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOwor
ICAgICAgICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IGdldE5hdGl2ZU5hbWUo
Km5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSk7CisgICAg
ICAgICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSBnZXROYXRpdmVOYW1lKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGZpZWxkTmFt
ZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygib3BlcmF0b3Iu
Il9zdHIubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkTmFtZS5z
dWJzdHJpbmcoMCwgZmllbGROYW1lLmxlbmd0aCgpIC0gMSk7CisgICAgICAgICAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBpdGVy
YXRvci0+dmFsdWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgInYsICIsIG1ldGFsUGFyYW1l
dGVyMk5hbWUsICIgbikge1xuIikpOworICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZygiICAgIHYuIiwgZmllbGROYW1lLCAiID0gbjtcbiIpKTsKKyAgICAg
ICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4g
djtcbiIpKTsKKyAgICAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7CisgICAgICAgICAgICAgICAgYXV0
byBtZXRhbFJldHVybk5hbWUgPSBnZXROYXRpdmVOYW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24udHlwZSgpKTsKKyAgICAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIGl0ZXJhdG9yLT52YWx1ZSwgJygnLCBtZXRhbFBh
cmFtZXRlck5hbWUsICJ2KSB7XG4iKSk7CisgICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuIHYuIiwgbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJvcGVyYXRvci4iX3N0ci5sZW5ndGgoKSksICI7XG4iKSk7
CisgICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1l
KCkgPT0gIm9wZXJhdG9yW10iKSB7CisgICAgICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIpOworICAgICAgICAgICAgYXV0byBt
ZXRhbFBhcmFtZXRlcjFOYW1lID0gZ2V0TmF0aXZlTmFtZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKKyAgICAgICAgICAgIGF1dG8gbWV0YWxQYXJh
bWV0ZXIyTmFtZSA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpWzFdLnR5cGUoKSk7CisgICAgICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9
IGdldE5hdGl2ZU5hbWUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOworICAgICAg
ICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwg
JyAnLCBpdGVyYXRvci0+dmFsdWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIm0sICIsIG1l
dGFsUGFyYW1ldGVyMk5hbWUsICIgaSkge1xuIikpOworICAgICAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuIG1baV07XG4iKSk7CisgICAgICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAgICAgfSBlbHNlIGlmIChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3JbXT0iKSB7CisgICAgICAg
ICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgp
ID09IDMpOworICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gZ2V0TmF0aXZl
TmFtZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsK
KyAgICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IGdldE5hdGl2ZU5hbWUoKm5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSk7CisgICAgICAg
ICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyM05hbWUgPSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsyXS50eXBlKCkpOworICAgICAgICAgICAgYXV0
byBtZXRhbFJldHVybk5hbWUgPSBnZXROYXRpdmVOYW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24udHlwZSgpKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZyhtZXRhbFJldHVybk5hbWUsICcgJywgaXRlcmF0b3ItPnZhbHVlLCAnKCcsIG1ldGFsUGFyYW1l
dGVyMU5hbWUsICJtLCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIGksICIsIG1ldGFsUGFyYW1l
dGVyM05hbWUsICIgdikge1xuIikpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKCIgICAgbVtpXSA9IHY7XG4iKSk7CisgICAgICAgICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gbTtcbiIpKTsKKyAgICAgICAgICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgICAgICB9IGVsc2UgaWYgKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaXNPcGVyYXRvcigpKSB7CisgICAgICAgICAgICBpZiAobmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvIG9wZXJhdG9yTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpLnN1YnN0cmluZygib3BlcmF0b3IiX3N0ci5sZW5ndGgoKSk7CisgICAgICAgICAgICAg
ICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOworICAgICAgICAgICAgICAgIGF1
dG8gbWV0YWxSZXR1cm5OYW1lID0gZ2V0TmF0aXZlTmFtZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnR5cGUoKSk7CisgICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBpdGVyYXRvci0+dmFsdWUsICcoJywgbWV0YWxQ
YXJhbWV0ZXJOYW1lLCAieCkge1xuIikpOworICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiAiLCBvcGVyYXRvck5hbWUsICJ4O1xuIikp
OworICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIpOworICAgICAgICAgICAgICAgIGF1dG8g
b3BlcmF0b3JOYW1lID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5n
KCJvcGVyYXRvciJfc3RyLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIG1ldGFsUGFy
YW1ldGVyMU5hbWUgPSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKVswXS50eXBlKCkpOworICAgICAgICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0
ZXIyTmFtZSA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1l
dGVycygpWzFdLnR5cGUoKSk7CisgICAgICAgICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUg
PSBnZXROYXRpdmVOYW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAg
ICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5O
YW1lLCAnICcsIGl0ZXJhdG9yLT52YWx1ZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAieCwg
IiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiB5KSB7XG4iKSk7CisgICAgICAgICAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuIHggIiwgb3BlcmF0b3JO
YW1lLCAiIHk7XG4iKSk7CisgICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgi
fVxuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAobmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5uYW1lKCkgPT0gImNvcyIKKyAgICAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ubmFtZSgpID09ICJzaW4iCisgICAgICAgICAgICB8fCBuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAidGFuIgorICAgICAgICAgICAgfHwgbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImFjb3MiCisgICAgICAgICAgICB8fCBuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYXNpbiIKKyAgICAgICAgICAgIHx8IG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJhdGFuIgorICAgICAgICAgICAgfHwgbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImNvc2giCisgICAgICAgICAgICB8fCBuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAic2luaCIKKyAgICAgICAgICAgIHx8IG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJ0YW5oIgorICAgICAgICAgICAgfHwg
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImNlaWwiCisgICAgICAgICAgICB8
fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiZXhwIgorICAgICAgICAgICAg
fHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImZsb29yIgorICAgICAgICAg
ICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImxvZyIKKyAgICAgICAg
ICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJyb3VuZCIKKyAgICAg
ICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJ0cnVuYyIKKyAg
ICAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJkZHgiCisg
ICAgICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiZGR5Igor
ICAgICAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImlzbm9y
bWFsIgorICAgICAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0g
ImlzZmluaXRlIgorICAgICAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1l
KCkgPT0gImlzaW5mIgorICAgICAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5u
YW1lKCkgPT0gImlzbmFuIgorICAgICAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5uYW1lKCkgPT0gImFzaW50IgorICAgICAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5uYW1lKCkgPT0gImFzdWludCIKKyAgICAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ubmFtZSgpID09ICJhc2Zsb2F0IikgeworICAgICAgICAgICAgQVNTRVJUKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKTsKKyAgICAgICAg
ICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gZ2V0TmF0aXZlTmFtZSgqbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKKyAgICAgICAgICAgIGF1dG8g
bWV0YWxSZXR1cm5OYW1lID0gZ2V0TmF0aXZlTmFtZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnR5cGUoKSk7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
bWV0YWxSZXR1cm5OYW1lLCAnICcsIGl0ZXJhdG9yLT52YWx1ZSwgJygnLCBtZXRhbFBhcmFtZXRl
ck5hbWUsICJ4KSB7XG4iKSk7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1h
a2VTdHJpbmcoIiAgICByZXR1cm4gIiwgbWFwRnVuY3Rpb25OYW1lKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ubmFtZSgpKSwgIih4KTtcbiIpKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIn1cbiIpOworICAgICAgICB9IGVsc2UgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ubmFtZSgpID09ICJwb3ciIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgp
ID09ICJhdGFuMiIpIHsKKyAgICAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7CisgICAgICAgICAgICBhdXRvIG1ldGFsUGFy
YW1ldGVyMU5hbWUgPSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKVswXS50eXBlKCkpOworICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJO
YW1lID0gZ2V0TmF0aXZlTmFtZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KClbMV0udHlwZSgpKTsKKyAgICAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gZ2V0TmF0
aXZlTmFtZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAgICAgICAgICBt
X3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIGl0
ZXJhdG9yLT52YWx1ZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAieCwgIiwgbWV0YWxQYXJh
bWV0ZXIyTmFtZSwgIiB5KSB7XG4iKSk7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gIiwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5u
YW1lKCksICIoeCwgeSk7XG4iKSk7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KCJ9XG4iKTsKKyAgICAgICAgfSBlbHNlIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5h
bWUoKSA9PSAiZjE2dG9mMzIiIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09
ICJmMzJ0b2YxNiIpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcworICAg
ICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfSBlbHNlIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKSA9PSAiQWxsTWVtb3J5QmFycmllcldpdGhHcm91cFN5bmMiKSB7CisgICAg
ICAgICAgICBBU1NFUlQoIW5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNp
emUoKSk7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInZv
aWQgIiwgaXRlcmF0b3ItPnZhbHVlLCAiKCkge1xuIikpOworICAgICAgICAgICAgbV9zdHJpbmdC
dWlsZGVyLmFwcGVuZCgiICAgIHRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjptZW1fZGV2
aWNlKTtcbiIpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiICAgIHRocmVh
ZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjptZW1fdGhyZWFkZ3JvdXApO1xuIik7CisgICAgICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgdGhyZWFkZ3JvdXBfYmFycmllcihtZW1f
ZmxhZ3M6Om1lbV90ZXh0dXJlKTtcbiIpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZCgifVxuIik7CisgICAgICAgIH0gZWxzZSBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5uYW1lKCkgPT0gIkRldmljZU1lbW9yeUJhcnJpZXJXaXRoR3JvdXBTeW5jIikgeworICAgICAg
ICAgICAgQVNTRVJUKCFuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXpl
KCkpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ2b2lk
ICIsIGl0ZXJhdG9yLT52YWx1ZSwgIigpIHtcbiIpKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVp
bGRlci5hcHBlbmQoIiAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX2Rldmlj
ZSk7XG4iKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAg
ICAgICB9IGVsc2UgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJHcm91
cE1lbW9yeUJhcnJpZXJXaXRoR3JvdXBTeW5jIikgeworICAgICAgICAgICAgQVNTRVJUKCFuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkpOworICAgICAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ2b2lkICIsIGl0ZXJhdG9yLT52YWx1
ZSwgIigpIHtcbiIpKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICB0
aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX3RocmVhZGdyb3VwKTtcbiIpOworICAg
ICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgICAgIH0gZWxzZSBp
ZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3RhcnRzV2l0aCgiSW50ZXJsb2Nr
ZWQiX3N0cikpIHsKKyAgICAgICAgICAgIGF1dG8gY29udmVydEFkZHJlc3NTcGFjZSA9IFtdKEFT
VDo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSkgLT4gU3RyaW5nIHsKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKGFkZHJlc3NTcGFjZSkgeworICAgICAgICAgICAgICAgIGNhc2UgQVNUOjpBZGRy
ZXNzU3BhY2U6OkNvbnN0YW50OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gImNvbnN0YW50
Il9zdHI7CisgICAgICAgICAgICAgICAgY2FzZSBBU1Q6OkFkZHJlc3NTcGFjZTo6RGV2aWNlOgor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gImRldmljZSJfc3RyOworICAgICAgICAgICAgICAg
IGNhc2UgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZGdyb3VwOgorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gInRocmVhZGdyb3VwIl9zdHI7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKGFkZHJlc3NTcGFjZSA9PSBBU1Q6OkFkZHJlc3NTcGFj
ZTo6VGhyZWFkKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJ0aHJlYWQiX3N0cjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICAgICAgaWYgKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZSIp
IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKCkuc2l6ZSgpID09IDQpOworICAgICAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OlBv
aW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlw
ZSgpKSk7CisgICAgICAgICAgICAgICAgYXV0byYgZmlyc3RBcmd1bWVudFBvaW50ZXIgPSBkb3du
Y2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKClbMF0udHlwZSgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGZpcnN0QXJndW1lbnRBZGRy
ZXNzU3BhY2UgPSBmaXJzdEFyZ3VtZW50UG9pbnRlci5hZGRyZXNzU3BhY2UoKTsKKyAgICAgICAg
ICAgICAgICBhdXRvIGZpcnN0QXJndW1lbnRQb2ludGVlID0gZ2V0TmF0aXZlTmFtZShmaXJzdEFy
Z3VtZW50UG9pbnRlci5lbGVtZW50VHlwZSgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHNlY29u
ZEFyZ3VtZW50ID0gZ2V0TmF0aXZlTmFtZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMV0udHlwZSgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHRoaXJkQXJndW1lbnQg
PSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsy
XS50eXBlKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OlBvaW50ZXJUeXBlPigq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbM10udHlwZSgpKSk7CisgICAg
ICAgICAgICAgICAgYXV0byYgZm91cnRoQXJndW1lbnRQb2ludGVyID0gZG93bmNhc3Q8QVNUOjpQ
b2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzNdLnR5
cGUoKSk7CisgICAgICAgICAgICAgICAgYXV0byBmb3VydGhBcmd1bWVudEFkZHJlc3NTcGFjZSA9
IGZvdXJ0aEFyZ3VtZW50UG9pbnRlci5hZGRyZXNzU3BhY2UoKTsKKyAgICAgICAgICAgICAgICBh
dXRvIGZvdXJ0aEFyZ3VtZW50UG9pbnRlZSA9IGdldE5hdGl2ZU5hbWUoZm91cnRoQXJndW1lbnRQ
b2ludGVyLmVsZW1lbnRUeXBlKCkpOworICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZygidm9pZCAiLCBpdGVyYXRvci0+dmFsdWUsICcoJywgY29udmVydEFk
ZHJlc3NTcGFjZShmaXJzdEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwgJyAnLCBmaXJzdEFyZ3VtZW50
UG9pbnRlZSwgIiogb2JqZWN0LCAiLCBzZWNvbmRBcmd1bWVudCwgIiBjb21wYXJlLCAiLCB0aGly
ZEFyZ3VtZW50LCAiIGRlc2lyZWQsICIsIGNvbnZlcnRBZGRyZXNzU3BhY2UoZm91cnRoQXJndW1l
bnRBZGRyZXNzU3BhY2UpLCAnICcsIGZvdXJ0aEFyZ3VtZW50UG9pbnRlZSwgIiogb3V0KSB7XG4i
KSk7CisgICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiICAgIGF0b21pY19j
b21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQob2JqZWN0LCAmY29tcGFyZSwgZGVzaXJlZCwg
bWVtb3J5X29yZGVyX3JlbGF4ZWQpO1xuIik7CisgICAgICAgICAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZCgiICAgICpvdXQgPSBjb21wYXJlO1xuIik7CisgICAgICAgICAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5z
aXplKCkgPT0gMyk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9pbnRlclR5cGU+
KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpKTsKKyAg
ICAgICAgICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFTVDo6
UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50
eXBlKCkpOworICAgICAgICAgICAgICAgIGF1dG8gZmlyc3RBcmd1bWVudEFkZHJlc3NTcGFjZSA9
IGZpcnN0QXJndW1lbnRQb2ludGVyLmFkZHJlc3NTcGFjZSgpOworICAgICAgICAgICAgICAgIGF1
dG8gZmlyc3RBcmd1bWVudFBvaW50ZWUgPSBnZXROYXRpdmVOYW1lKGZpcnN0QXJndW1lbnRQb2lu
dGVyLmVsZW1lbnRUeXBlKCkpOworICAgICAgICAgICAgICAgIGF1dG8gc2Vjb25kQXJndW1lbnQg
PSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsx
XS50eXBlKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OlBvaW50ZXJUeXBlPigq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0udHlwZSgpKSk7CisgICAg
ICAgICAgICAgICAgYXV0byYgdGhpcmRBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBv
aW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0udHlw
ZSgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHRoaXJkQXJndW1lbnRBZGRyZXNzU3BhY2UgPSB0
aGlyZEFyZ3VtZW50UG9pbnRlci5hZGRyZXNzU3BhY2UoKTsKKyAgICAgICAgICAgICAgICBhdXRv
IHRoaXJkQXJndW1lbnRQb2ludGVlID0gZ2V0TmF0aXZlTmFtZSh0aGlyZEFyZ3VtZW50UG9pbnRl
ci5lbGVtZW50VHlwZSgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIG5hbWUgPSAoW10oU3RyaW5n
IGlucHV0KSAtPiBTdHJpbmcgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gIkFk
ZCIpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZldGNoX2FkZCJfc3RyOworICAg
ICAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gIkFuZCIpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gImZldGNoX2FuZCJfc3RyOworICAgICAgICAgICAgICAgICAgICBpZiAoaW5w
dXQgPT0gIkV4Y2hhbmdlIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZXhjaGFu
Z2UiX3N0cjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0ID09ICJNYXgiKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICJmZXRjaF9tYXgiX3N0cjsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGlucHV0ID09ICJNaW4iKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICJmZXRjaF9taW4iX3N0cjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0ID09ICJPciIp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZldGNoX29yIl9zdHI7CisgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSAiWG9yIik7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiAiZmV0Y2hfeG9yIl9zdHI7CisgICAgICAgICAgICAgICAgfSkobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJJbnRlcmxvY2tlZCJfc3RyLmxlbmd0aCgp
KSk7CisgICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ2
b2lkICIsIGl0ZXJhdG9yLT52YWx1ZSwgJygnLCBjb252ZXJ0QWRkcmVzc1NwYWNlKGZpcnN0QXJn
dW1lbnRBZGRyZXNzU3BhY2UpLCAnICcsIGZpcnN0QXJndW1lbnRQb2ludGVlLCAiKiBvYmplY3Qs
ICIsIHNlY29uZEFyZ3VtZW50LCAiIG9wZXJhbmQsICIsIGNvbnZlcnRBZGRyZXNzU3BhY2UodGhp
cmRBcmd1bWVudEFkZHJlc3NTcGFjZSksICcgJywgdGhpcmRBcmd1bWVudFBvaW50ZWUsICIqIG91
dCkge1xuIikpOworICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZygiICAgICpvdXQgPSBhdG9taWNfZmV0Y2hfIiwgbmFtZSwgIl9leHBsaWNpdChvYmplY3Qs
IG9wZXJhbmQsIG1lbW9yeV9vcmRlcl9yZWxheGVkKTtcbiIpKTsKKyAgICAgICAgICAgICAgICBt
X3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiU2FtcGxlIikgewor
ICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgfSBlbHNlIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9
PSAiTG9hZCIpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICAg
ICAgICAgIENSQVNIKCk7CisgICAgICAgIH0gZWxzZSBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5uYW1lKCkgPT0gIkdldERpbWVuc2lvbnMiKSB7CisgICAgICAgICAgICAvLyBGSVhNRTog
SW1wbGVtZW50IHRoaXMuCisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9IGVsc2UgaWYg
KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJTYW1wbGVCaWFzIikgeworICAg
ICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgICAgICAgICAgQ1JBU0goKTsK
KyAgICAgICAgfSBlbHNlIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
U2FtcGxlR3JhZCIpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAg
ICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0gZWxzZSBpZiAobmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5uYW1lKCkgPT0gIlNhbXBsZUxldmVsIikgeworICAgICAgICAgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0aGlzLgorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfSBlbHNlIGlm
IChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiR2F0aGVyIikgeworICAgICAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgICAgICAgICAgQ1JBU0goKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiR2F0
aGVyUmVkIikgeworICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgICAg
ICAgICAgQ1JBU0goKTsKKyAgICAgICAgfSBlbHNlIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLm5hbWUoKSA9PSAiU2FtcGxlQ21wIikgeworICAgICAgICAgICAgLy8gRklYTUU6IEltcGxl
bWVudCB0aGlzLgorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfSBlbHNlIGlmIChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiU2FtcGxlQ21wTGV2ZWxaZXJvIikgewor
ICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgfSBlbHNlIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9
PSAiU3RvcmUiKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAg
ICAgICAgICBDUkFTSCgpOworICAgICAgICB9IGVsc2UgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ubmFtZSgpID09ICJHYXRoZXJBbHBoYSIpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcy4KKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0gZWxzZSBpZiAo
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkdhdGhlckJsdWUiKSB7CisgICAg
ICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgICAgICAgICBDUkFTSCgpOwor
ICAgICAgICB9IGVsc2UgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJH
YXRoZXJDbXAiKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAg
ICAgICAgICBDUkFTSCgpOworICAgICAgICB9IGVsc2UgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ubmFtZSgpID09ICJHYXRoZXJDbXBSZWQiKSB7CisgICAgICAgICAgICAvLyBGSVhNRTog
SW1wbGVtZW50IHRoaXMuCisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9IGVsc2UgaWYg
KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJHYXRoZXJHcmVlbiIpIHsKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICAgICAgICAgIENSQVNIKCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0
aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoZnVu
Y3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsKKyAgICAgICAgICAgICNlcnJvciBl
bWl0IGN1c3RvbSBhcmd1bWVudHMgYW5kIHJldHVybiB0eXBlCisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9mdW5jdGlvbk1hcHBpbmcuZmluZCgmZnVuY3Rp
b25EZWZpbml0aW9uKTsKKyAgICAgICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX2Z1bmN0aW9u
TWFwcGluZy5lbmQoKSk7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGZ1bmN0aW9uRGVmaW5pdGlvbi50
eXBlKCkpLCAnICcsIGl0ZXJhdG9yLT52YWx1ZSwgJygnKSk7CisgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoaSkKKyAgICAgICAgICAgICAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZCgiLCAiKTsKKyAgICAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqZnVuY3Rpb25EZWZpbml0aW9u
LnBhcmFtZXRlcnMoKVtpXS50eXBlKCkpKTsKKyAgICAgICAgICAgICAgICAjZXJyb3IgZW1pdCB2
YXJpYWJsZSBuYW1lcworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZCgiKSB7XG4iKTsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlv
bkRlZmluaXRpb24uYmxvY2soKSk7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KCJ9XG4iKTsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHZpc2l0KEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3RhdGVtZW50JiBz
dGF0ZW1lbnQpIG92ZXJyaWRlCisgICAgeworICAgICAgICBWaXNpdG9yOjp2aXNpdChzdGF0ZW1l
bnQpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpCbG9jayYgYmxvY2spIG92ZXJyaWRl
CisgICAgeworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ7XG4iKTsKKyAgICAgICAg
Zm9yIChhdXRvJiBzdGF0ZW1lbnQgOiBibG9jay5zdGF0ZW1lbnRzKCkpCisgICAgICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQoc3RhdGVtZW50KTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZCgifVxuIik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkJyZWFrJikgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoImJyZWFrO1xuIik7Cisg
ICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkNvbnRpbnVlJikgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoImNvbnRpbnVlO1xuIik7CisgICAgfQorCisg
ICAgdm9pZCB2aXNpdChBU1Q6OkRvV2hpbGVMb29wJiBkb1doaWxlTG9vcCkgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgICNlcnJvciBsYW1iZGEKKyAgICAgICAgYXV0byBsYW1iZGFOYW1lID0gZ2Vu
ZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZygiYXV0byAiLCBsYW1iZGFOYW1lLCAiID0gWyZdKCkge1xuIikpOworICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoZG9XaGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7CisgICAgICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygicmV0dXJuICIsIG1fc3RhY2sudGFr
ZUxhc3QoKSwgIjtcbn07XG4iKSk7CisKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgi
ZG8ge1xuIik7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb1doaWxlTG9vcC5ib2R5KCkp
OworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIn0gd2hpbGUoIiwg
bGFtYmRhTmFtZSwgIigpKTtcbiIpKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RWZm
ZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCYgZWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChlZmZlY3RmdWxFeHBy
ZXNzaW9uU3RhdGVtZW50LmVmZmVjdGZ1bEV4cHJlc3Npb24oKSk7CisgICAgICAgIG1fc3RhY2su
dGFrZUxhc3QoKTsgLy8gVGhlIHN0YXRlbWVudCBpcyBhbHJlYWR5IGVmZmVjdGZ1bCwgc28gd2Ug
ZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyB3aXRoIHRoZSByZXN1bHQuCisgICAgfQorCisgICAg
dm9pZCB2aXNpdChBU1Q6OkZhbGx0aHJvdWdoJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQoIltbY2xhbmc6OmZhbGx0aHJvdWdoXV07XG4iKTsgLy8gRklY
TUU6IE1ha2Ugc3VyZSB0aGlzIGlzIG9rYXkuIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIGRvIHRo
aW5nIGFuZCBqdXN0IHJldHVybiBoZXJlIGluc3RlYWQuCisgICAgfQorCisgICAgdm9pZCB2aXNp
dChBU1Q6OkZvckxvb3AmIGZvckxvb3ApIG92ZXJyaWRlCisgICAgeworICAgICAgICBXVEY6OnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1l
bnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KSB7CisgICAgICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpOworICAgICAgICB9LCBb
Jl0oVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mIGV4cHJlc3Npb24pIHsKKyAgICAgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9uKTsKKyAgICAgICAgICAgIG1fc3RhY2sudGFr
ZUxhc3QoKTsgLy8gV2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyB3aXRoIHRoZSByZXN1bHQu
CisgICAgICAgIH0pLCBmb3JMb29wLmluaXRpYWxpemF0aW9uKCkpOworCisgICAgICAgICNlcnJv
ciBsYW1iZGEKKyAgICAgICAgYXV0byBjb25kaXRpb25MYW1iZGFOYW1lID0gZ2VuZXJhdGVOZXh0
VmFyaWFibGVOYW1lKCk7CisgICAgICAgIGlmIChmb3JMb29wLmNvbmRpdGlvbigpKSB7CisgICAg
ICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImF1dG8gIiwgY29uZGl0
aW9uTGFtYmRhTmFtZSwgIiA9IFsmXSgpIHtcbiIpKTsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCgqZm9yTG9vcC5jb25kaXRpb24oKSk7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKCJyZXR1cm4gIik7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KG1ha2VTdHJpbmcobV9zdGFjay50YWtlTGFzdCgpLCAiO1xufTtcbiIpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGF1dG8gaW5jcmVtZW50TGFtYmRhTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxl
TmFtZSgpOworICAgICAgICBpZiAoZm9yTG9vcC5pbmNyZW1lbnQoKSkgeworICAgICAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJhdXRvICIsIGNvbmRpdGlvbkxhbWJk
YU5hbWUsICIgPSBbJl0oKSB7XG4iKSk7CisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
KmZvckxvb3AuaW5jcmVtZW50KCkpOworICAgICAgICAgICAgbV9zdGFjay50YWtlTGFzdCgpOyAv
LyBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdC4KKyAgICAgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn07XG4iKTsKKyAgICAgICAgfQorCisgICAgICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoImZvciAoIDsgIik7CisgICAgICAgIGlmIChmb3JMb29w
LmNvbmRpdGlvbigpKQorICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKGNvbmRpdGlvbkxhbWJkYU5hbWUsICIoKSAiKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIjsgIik7CisgICAgICAgIGlmIChmb3JMb29wLmluY3JlbWVudCgpKQorICAgICAg
ICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKGluY3JlbWVudExhbWJkYU5h
bWUsICIoKSAiKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIikge1xuIik7Cisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmb3JMb29wLmJvZHkoKSk7CisgICAgICAgIG1fc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpJ
ZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpIG92ZXJyaWRlCisgICAgeworICAgICAgICAjZXJyb3Ig
bGFtYmRhCisgICAgICAgIGF1dG8gY29uZGl0aW9uYWxMYW1iZGFOYW1lID0gZ2VuZXJhdGVOZXh0
VmFyaWFibGVOYW1lKCk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZygiYXV0byAiLCBjb25kaXRpb25hbExhbWJkYU5hbWUsICIgPSBbJl0oKSB7XG4iKSk7CisgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRlbWVudC5jb25kaXRpb25hbCgpKTsKKyAgICAg
ICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJyZXR1cm4gIiwgbV9zdGFjay50
YWtlTGFzdCgpLCAiO1xufTtcbiIpKTsKKworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KG1ha2VTdHJpbmcoImlmICgiLCBjb25kaXRpb25hbExhbWJkYU5hbWUsICIoKSB7XG4iKSk7Cisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRlbWVudC5ib2R5KCkpOworICAgICAgICBp
ZiAoaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSkgeworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZCgifSBlbHNlIHtcbiIpOworICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpp
ZlN0YXRlbWVudC5lbHNlQm9keSgpKTsKKyAgICAgICAgfQorICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6UmV0dXJuJiBy
ZXR1cm5TdGF0ZW1lbnQpIG92ZXJyaWRlCisgICAgeworICAgICAgICAjZXJyb3IgZGV0ZWN0IGlm
IHdlJ3JlIHJldHVybmluZyBmcm9tIGFuIGVudHJ5IHBvaW50LCBhbmQgZml4dXAgdGhlIHJlc3Vs
dAorICAgICAgICBpZiAocmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpIHsKKyAgICAgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdCgqcmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpOworICAgICAgICAgICAg
YXV0byB2YWx1ZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVp
bGRlci5hcHBlbmQobWFrZVN0cmluZygicmV0dXJuICIsIHZhbHVlLCAiO1xuIikpOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoInJldHVybjtcbiIp
OworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQmIHN3aXRjaFN0
YXRlbWVudCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgICNlcnJvciBsYW1iZGEKKyAgICAgICAg
YXV0byB2YWx1ZUxhbWJkYU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAg
ICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJhdXRvICIsIHZhbHVlTGFtYmRh
TmFtZSwgIiA9IFsmXSgpIHtcbiIpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN3aXRj
aFN0YXRlbWVudC52YWx1ZSgpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKCJyZXR1cm4gIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiO1xufTtcbiIpKTsKKworICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInN3aXRjaCAoIiwgdmFsdWVM
YW1iZGFOYW1lLCAiKCkpIHsiKSk7CisgICAgICAgIGZvciAoYXV0byYgc3dpdGNoQ2FzZSA6IHN3
aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNlcygpKQorICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KHN3aXRjaENhc2UpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsK
KyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSkgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGlmIChzd2l0Y2hDYXNlLnZhbHVlKCkpCisgICAgICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImNhc2UgIiwgY29uc3RhbnRFeHBy
ZXNzaW9uU3RyaW5nKCpzd2l0Y2hDYXNlLnZhbHVlKCkpLCAiOlxuIikpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJkZWZhdWx0OlxuIik7CisgICAg
ICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IHdoZXRoZXIgd2UgbmVlZCB0byBicmVhayBvciBmYWxs
dGhyb3VnaC4KKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN3aXRjaENhc2UuYmxvY2soKSk7
CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlRyYXAmKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzCisgICAgICAgIENSQVNIKCk7CisgICAgfQor
CisgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJp
YWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFZpc2l0
b3I6OnZpc2l0KHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KTsKKyAgICB9CisKKyAgICB2
b2lkIHZpc2l0KEFTVDo6V2hpbGVMb29wJiB3aGlsZUxvb3ApIG92ZXJyaWRlCisgICAgeworICAg
ICAgICAjZXJyb3IgbGFtYmRhCisgICAgICAgIGF1dG8gbGFtYmRhTmFtZSA9IGdlbmVyYXRlTmV4
dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcoImF1dG8gIiwgbGFtYmRhTmFtZSwgIiA9IFsmXSgpIHtcbiIpKTsKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KHdoaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKKyAgICAgICAgbV9zdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJyZXR1cm4gIiwgbV9zdGFjay50YWtlTGFzdCgpLCAi
O1xufTtcbiIpKTsKKworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
IndoaWxlICgiLCBsYW1iZGFOYW1lLCAiKCkpIHtcbiIpKTsKKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KHdoaWxlTG9vcC5ib2R5KCkpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KCJ9XG4iKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6SW50ZWdlckxpdGVyYWwmIGlu
dGVnZXJMaXRlcmFsKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKGludGVnZXJMaXRl
cmFsLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0
ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmludGVnZXJMaXRlcmFsLnJlc29sdmVkVHlwZSgp
KTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBl
TmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSBzdGF0aWNfY2FzdDwiLCBtYW5nbGVkVHlwZU5h
bWUsICI+KCIsIGludGVnZXJMaXRlcmFsLnZhbHVlKCksICIpO1xuIikpOworICAgICAgICBtX3N0
YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpV
bnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKHVuc2lnbmVkSW50ZWdlckxpdGVyYWwucmVzb2x2ZWRUeXBl
KCkpOworICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFt
ZSgpOworICAgICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CisgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcg
JywgdmFyaWFibGVOYW1lLCAiID0gc3RhdGljX2Nhc3Q8IiwgbWFuZ2xlZFR5cGVOYW1lLCAiPigi
LCB1bnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVlKCksICIpO1xuIikpOworICAgICAgICBtX3N0
YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpG
bG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VS
VChmbG9hdExpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBhdXRvIHZhcmlhYmxlTmFt
ZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBhdXRvIG1hbmdsZWRUeXBl
TmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqZmxvYXRMaXRlcmFsLnJlc29s
dmVkVHlwZSgpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1h
bmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSBzdGF0aWNfY2FzdDwiLCBtYW5n
bGVkVHlwZU5hbWUsICI+KCIsIGZsb2F0TGl0ZXJhbC52YWx1ZSgpLCAiKTtcbiIpKTsKKyAgICAg
ICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6TnVsbExpdGVyYWwmIG51bGxMaXRlcmFsKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG51bGxMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgYXV0byYgdW5pZnlO
b2RlID0gbnVsbExpdGVyYWwucmVzb2x2ZWRUeXBlKCktPnVuaWZ5Tm9kZSgpOworICAgICAgICBB
U1NFUlQoaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSk7CisgICAgICAgIGF1dG8mIHVu
bmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAg
ICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSA9IGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBl
Pih1bm5hbWVkVHlwZSk7CisKKyAgICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5l
eHRWYXJpYWJsZU5hbWUoKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbnVsbExpdGVyYWwucmVzb2x2ZWRU
eXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIpKTsKKyAgICAgICAgaWYgKGlzQXJyYXlS
ZWZlcmVuY2VUeXBlKQorICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgieyBudWxs
cHRyLCAwIH0iKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZCgibnVsbHB0ciIpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCI7XG4iKTsK
KyAgICAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICB9CisKKyAgICB2b2lk
IHZpc2l0KEFTVDo6Qm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5MaXRlcmFsKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGJvb2xlYW5MaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKKyAgICAg
ICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAg
ICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
KmJvb2xlYW5MaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIg
PSBzdGF0aWNfY2FzdDwiLCBtYW5nbGVkVHlwZU5hbWUsICI+KCIsIGJvb2xlYW5MaXRlcmFsLnZh
bHVlKCkgPyAidHJ1ZSIgOiAiZmFsc2UiLCAiKTtcbiIpKTsKKyAgICAgICAgbV9zdGFjay5hcHBl
bmQodmFyaWFibGVOYW1lKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRp
b25NZW1iZXJMaXRlcmFsJiBlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLnJlc29sdmVkVHlwZSgp
KTsKKyAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbkRl
ZmluaXRpb24oKSk7CisgICAgICAgIEFTU0VSVChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51
bWVyYXRpb25EZWZpbml0aW9uKCkpOworICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVy
YXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1f
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLnJl
c29sdmVkVHlwZSgpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSAiLCBtYW5nbGVkVHlwZU5h
bWUsICcuJywgbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJlcigqZW51
bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uTWVtYmVyKCkpLCAiO1xuIikpOworICAg
ICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIH0KKworICAgIHZvaWQgdmlz
aXQoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
VmlzaXRvcjo6dmlzaXQoZXhwcmVzc2lvbik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6
OkRvdEV4cHJlc3Npb24mKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgLy8gVGhpcyBzaG91bGQg
YmUgbG93ZXJlZCBhbHJlYWR5LgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJikgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIGxvd2VyZWQgYWxyZWFkeS4KKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbiYpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
biYgdmFyaWFibGVEZWNsYXJhdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVCh2
YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAgICAgIGlmICh2YXJpYWJsZURlY2xhcmF0
aW9uLmluaXRpYWxpemVyKCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnZhcmlh
YmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIoKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgLy8gRklYTUU6IFplcm8tZmlsbCB0aGUgdmFyaWFibGUuCisgICAgICAgICAgICBDUkFTSCgp
OworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcXVhbGlmaWVycy4KKyAg
ICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAg
ICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3ZhcmlhYmxlTWFwcGluZy5hZGQoJnZhcmlhYmxlRGVj
bGFyYXRpb24sIHZhcmlhYmxlTmFtZSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0
LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKnZhcmlhYmxlRGVjbGFy
YXRpb24udHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSAiLCBtX3N0YWNrLnRha2VMYXN0
KCksICI7XG4iKSk7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAg
fQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50
RXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChh
c3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkpOworICAgICAgICBhdXRvIGxlZnROYW1lID0gbV9z
dGFjay50YWtlTGFzdCgpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4
cHJlc3Npb24ucmlnaHQoKSk7CisgICAgICAgIGF1dG8gcmlnaHROYW1lID0gbV9zdGFjay50YWtl
TGFzdCgpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobGVmdE5h
bWUsICIgPSAiLCByaWdodE5hbWUsICI7XG4iKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChB
U1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIFZlY3RvcjxTdHJpbmc+IGFyZ3VtZW50TmFtZXM7CisgICAgICAgIGZvciAoYXV0byYgYXJn
dW1lbnQgOiBjYWxsRXhwcmVzc2lvbi5hcmd1bWVudHMoKSkgeworICAgICAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGFyZ3VtZW50KTsKKyAgICAgICAgICAgIGFyZ3VtZW50TmFtZXMuYXBwZW5k
KG1fc3RhY2sudGFrZUxhc3QoKSk7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGNhbGxFeHBy
ZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgQVNTRVJUKGNhbGxFeHByZXNzaW9uLmZ1
bmN0aW9uKCkpOworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9mdW5jdGlvbk1hcHBpbmcuZmlu
ZChjYWxsRXhwcmVzc2lvbi5mdW5jdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9
IG1fZnVuY3Rpb25NYXBwaW5nLmVuZCgpKTsKKyAgICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBn
ZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqY2FsbEV4cHJlc3Np
b24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIsIGl0ZXJhdG9yLT52
YWx1ZSwgJygnKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnROYW1l
cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGkpCisgICAgICAgICAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZCgiLCAiKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQoYXJndW1lbnROYW1lc1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZCgiKTtcbiIpOworICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUp
OworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24mIGNvbW1hRXhw
cmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFN0cmluZyByZXN1bHQ7CisgICAgICAg
IGZvciAoYXV0byYgZXhwcmVzc2lvbiA6IGNvbW1hRXhwcmVzc2lvbi5saXN0KCkpIHsKKyAgICAg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9uKTsKKyAgICAgICAgICAgIHJlc3Vs
dCA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgfQorICAgICAgICBtX3N0YWNrLmFwcGVu
ZChyZXN1bHQpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4cHJl
c3Npb24mIGRlcmVmZXJlbmNlRXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChkZXJlZmVyZW5jZUV4cHJlc3Npb24ucG9pbnRlcigpKTsKKyAgICAg
ICAgYXV0byByaWdodCA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgQVNTRVJUKGRlcmVm
ZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIGF1dG8gdmFyaWFibGVO
YW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmRlcmVm
ZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0g
KiIsIHJpZ2h0LCAiO1xuIikpOworICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUp
OworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpMb2dpY2FsRXhwcmVzc2lvbiYgbG9naWNh
bEV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
bG9naWNhbEV4cHJlc3Npb24ubGVmdCgpKTsKKyAgICAgICAgYXV0byBsZWZ0ID0gbV9zdGFjay50
YWtlTGFzdCgpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQobG9naWNhbEV4cHJlc3Npb24u
cmlnaHQoKSk7CisgICAgICAgIGF1dG8gcmlnaHQgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAg
ICAgIEFTU0VSVChsb2dpY2FsRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIGF1
dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKmxvZ2ljYWxFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5h
bWUsICIgPSAiLCBsZWZ0LCAnICcpKTsKKyAgICAgICAgc3dpdGNoIChsb2dpY2FsRXhwcmVzc2lv
bi50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uOjpUeXBlOjpB
bmQ6CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCImJiIpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlQobG9naWNhbEV4
cHJlc3Npb24udHlwZSgpID09IEFTVDo6TG9naWNhbEV4cHJlc3Npb246OlR5cGU6Ok9yKTsKKyAg
ICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoInx8Iik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
JyAnLCByaWdodCwgIjtcbiIpKTsKKyAgICAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1l
KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24mIGxv
Z2ljYWxOb3RFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KGxvZ2ljYWxOb3RFeHByZXNzaW9uLm9wZXJhbmQoKSk7CisgICAgICAgIGF1dG8gb3Bl
cmFuZCA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgQVNTRVJUKGxvZ2ljYWxOb3RFeHBy
ZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5l
cmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbG9naWNhbE5vdEV4cHJl
c3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICEiLCBvcGVyYW5k
LCAiO1xuIikpOworICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIH0K
KworICAgIHZvaWQgdmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtl
QXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubFZhbHVlKCkpOworICAg
ICAgICBhdXRvIGxWYWx1ZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgQVNTRVJUKG1h
a2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBhdXRv
IHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBhdXRv
IG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbWFrZUFy
cmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIGlmIChpczxB
U1Q6OlBvaW50ZXJUeXBlPigqbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5
cGUoKSkpCisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFu
Z2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHsgIiwgbFZhbHVlLCAiLCAxIH07
XG4iKSk7CisgICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPigqbWFrZUFycmF5UmVm
ZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSkpIHsKKyAgICAgICAgICAgIGF1dG8mIGFy
cmF5VHlwZSA9IGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPigqbWFrZUFycmF5UmVmZXJlbmNlRXhw
cmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHsg
JigiLCBsVmFsdWUsICJbMF0pLCAiLCBhcnJheVR5cGUubnVtRWxlbWVudHMoKSwgIiB9O1xuIikp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0geyAmIiwgbFZh
bHVlLCAiLCAxIH07XG4iKSk7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7
CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYgbWFr
ZVBvaW50ZXJFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAgICAgIGF1dG8gbFZh
bHVlID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgICAgICBBU1NFUlQobWFrZVBvaW50ZXJFeHBy
ZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5l
cmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbWFrZVBvaW50ZXJFeHBy
ZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSAmIiwgbFZhbHVl
LCAiO1xuIikpOworICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIH0K
KworICAgIHZvaWQgdmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJikgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIGxvd2VyZWQgYWxyZWFkeS4KKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6
OlRlcm5hcnlFeHByZXNzaW9uJiB0ZXJuYXJ5RXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5wcmVkaWNhdGUoKSk7
CisgICAgICAgIGF1dG8gY2hlY2sgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisKKyAgICAgICAgQVNT
RVJUKHRlcm5hcnlFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgYXV0byB2YXJp
YWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAgICAgbV9zdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgq
dGVybmFyeUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIjtc
biIpKTsKKworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICgi
LCBjaGVjaywgIikge1xuIikpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodGVybmFyeUV4
cHJlc3Npb24uYm9keUV4cHJlc3Npb24oKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZyh2YXJpYWJsZU5hbWUsICIgPSAiLCBtX3N0YWNrLnRha2VMYXN0KCksICI7
XG4iKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn0gZWxzZSB7XG4iKTsKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLmVsc2VFeHByZXNzaW9u
KCkpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcodmFyaWFibGVO
YW1lLCAiID0gIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiO1xuIikpOworICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVO
YW1lKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmIHZh
cmlhYmxlUmVmZXJlbmNlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKHZhcmlhYmxl
UmVmZXJlbmNlLnZhcmlhYmxlKCkpOworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV92YXJpYWJs
ZU1hcHBpbmcuZmluZCh2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpKTsKKyAgICAgICAgQVNT
RVJUKGl0ZXJhdG9yICE9IG1fdmFyaWFibGVNYXBwaW5nLmVuZCgpKTsKKyAgICAgICAgbV9zdGFj
ay5hcHBlbmQoaXRlcmF0b3ItPnZhbHVlKTsKKyAgICB9CisKKyAgICBTdHJpbmcgY29uc3RhbnRF
eHByZXNzaW9uU3RyaW5nKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4cHJlc3Np
b24pCisgICAgeworICAgICAgICBTdHJpbmcgcmVzdWx0OworICAgICAgICBjb25zdGFudEV4cHJl
c3Npb24udmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50
ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1ha2VTdHJpbmcoIiIsIGludGVn
ZXJMaXRlcmFsLnZhbHVlKCkpOworICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJM
aXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICByZXN1bHQgPSBt
YWtlU3RyaW5nKCIiLCB1bnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVlKCkpOworICAgICAgICB9
LCBbJl0oQVNUOjpGbG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkgeworICAgICAgICAgICAgcmVz
dWx0ID0gbWFrZVN0cmluZygiIiwgZmxvYXRMaXRlcmFsLnZhbHVlKCkpOworICAgICAgICB9LCBb
Jl0oQVNUOjpOdWxsTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9ICJudWxscHRyIl9z
dHI7CisgICAgICAgIH0sIFsmXShBU1Q6OkJvb2xlYW5MaXRlcmFsJiBib29sZWFuTGl0ZXJhbCkg
eworICAgICAgICAgICAgcmVzdWx0ID0gYm9vbGVhbkxpdGVyYWwudmFsdWUoKSA/ICJ0cnVlIl9z
dHIgOiAiZmFsc2UiX3N0cjsKKyAgICAgICAgfSwgWyZdKEFTVDo6RW51bWVyYXRpb25NZW1iZXJM
aXRlcmFsJiBlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwpIHsKKyAgICAgICAgICAgIEFTU0VSVChl
bnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25EZWZpbml0aW9uKCkpOworICAgICAg
ICAgICAgQVNTRVJUKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbkRlZmluaXRp
b24oKSk7CisgICAgICAgICAgICByZXN1bHQgPSBtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZSgqZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uRGVmaW5p
dGlvbigpKSwgJy4nLCBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVtYmVy
KCplbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25NZW1iZXIoKSkpOworICAgICAg
ICB9KSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgU3RyaW5nIGdlbmVy
YXRlTmV4dFZhcmlhYmxlTmFtZSgpCisgICAgeworICAgICAgICByZXR1cm4gbWFrZVN0cmluZygi
dmFyaWFibGUiLCBtX3ZhcmlhYmxlQ291bnQrKyk7CisgICAgfQorCitwcml2YXRlOgorICAgIFR5
cGVOYW1lciYgbV90eXBlTmFtZXI7CisgICAgSGFzaE1hcDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24qLCBTdHJpbmc+JiBtX2Z1bmN0aW9uTWFwcGluZzsKKyAgICBIYXNoTWFwPEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbiosIFN0cmluZz4gbV92YXJpYWJsZU1hcHBpbmc7CisgICAgU3RyaW5nQnVp
bGRlciBtX3N0cmluZ0J1aWxkZXI7CisgICAgVmVjdG9yPFN0cmluZz4gbV9zdGFjazsKKyAgICB1
bnNpZ25lZCBtX3ZhcmlhYmxlQ291bnQgeyAwIH07Cit9OworCitTdHJpbmcgbWV0YWxGdW5jdGlv
bnMoUHJvZ3JhbSYgcHJvZ3JhbSwgVHlwZU5hbWVyJiB0eXBlTmFtZXIpCit7CisgICAgU3RyaW5n
QnVpbGRlciBzdHJpbmdCdWlsZGVyOworCisgICAgdW5zaWduZWQgbnVtRnVuY3Rpb25zID0gMDsK
KyAgICBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIFN0cmluZz4gZnVuY3Rpb25N
YXBwaW5nOworICAgIGZvciAoYXV0byYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dy
YW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSkgeworICAgICAgICBhdXRvIGFkZFJlc3Vs
dCA9IGZ1bmN0aW9uTWFwcGluZy5hZGQoJm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24sIG1ha2VT
dHJpbmcoImZ1bmN0aW9uIiwgbnVtRnVuY3Rpb25zKyspKTsKKyAgICAgICAgQVNTRVJUX1VOVVNF
RChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisgICAgZm9yIChhdXRv
JiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkgewor
ICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IGZ1bmN0aW9uTWFwcGluZy5hZGQoJmZ1bmN0aW9uRGVm
aW5pdGlvbiwgbWFrZVN0cmluZygiZnVuY3Rpb24iLCBudW1GdW5jdGlvbnMrKykpOworICAgICAg
ICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0K
KworICAgIHsKKyAgICAgICAgRnVuY3Rpb25EZWNsYXJhdGlvbldyaXRlciBmdW5jdGlvbkRlY2xh
cmF0aW9uV3JpdGVyKHR5cGVOYW1lciwgZnVuY3Rpb25NYXBwaW5nKTsKKyAgICAgICAgZm9yIChh
dXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9ucygpKQorICAgICAgICAgICAgZnVuY3Rpb25EZWNsYXJhdGlvbldyaXRlci52aXNp
dChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKTsKKyAgICAgICAgZm9yIChhdXRvJiBmdW5jdGlv
bkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkgeworICAgICAgICAg
ICAgaWYgKCFmdW5jdGlvbkRlZmluaXRpb24tPmVudHJ5UG9pbnRUeXBlKCkpCisgICAgICAgICAg
ICAgICAgZnVuY3Rpb25EZWNsYXJhdGlvbldyaXRlci52aXNpdChmdW5jdGlvbkRlZmluaXRpb24p
OworICAgICAgICB9CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGZ1bmN0aW9uRGVjbGFy
YXRpb25Xcml0ZXIudG9TdHJpbmcoKSk7CisgICAgfQorCisgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoJ1xuJyk7CisKKyAgICB7CisgICAgICAgIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlciBmdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXIodHlwZU5hbWVyLCBmdW5jdGlvbk1hcHBpbmcpOworICAgICAg
ICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb25zKCkpCisgICAgICAgICAgICBmdW5jdGlvbkRlZmluaXRpb25Xcml0
ZXIudmlzaXQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7CisgICAgICAgIGZvciAoYXV0byYg
ZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpCisgICAg
ICAgICAgICBmdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIudmlzaXQoZnVuY3Rpb25EZWZpbml0aW9u
KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZnVuY3Rpb25EZWZpbml0aW9uV3JpdGVy
LnRvU3RyaW5nKCkpOworICAgIH0KKworICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5n
KCk7Cit9CisKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRl
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjBkMGRmYzhjYzdmZDBjMzUwNzQxYzBkMzZmNGJlZDE4Mzk1YmUwMjUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9N
ZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCituYW1lc3BhY2UgTWV0
YWwgeworCitjbGFzcyBUeXBlTmFtZXI7CisKKy8vIG1ldGFsX3N0ZGxpYiwgbWV0YWxfYXRvbWlj
LCBtZXRhbF9tYXRoLCBtZXRhbF9yZWxhdGlvbmFsLCBtZXRhbF9jb21wdXRlCitTdHJpbmcgbWV0
YWxGdW5jdGlvbnMoUHJvZ3JhbSYsIFR5cGVOYW1lciYpOworCit9CisKK30KKworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFs
L1dITFNMVHlwZU5hbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNmYyMDhmNWU1ZDk2ZjZhMDI2
NjAzMDAzZmU4NDRkZTlmMjUyNGY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwCkBAIC0wLDAgKzEs
NzA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNM
VHlwZU5hbWVyLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xBZGRy
ZXNzU3BhY2UuaCIKKyNpbmNsdWRlICJXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oIgorI2luY2x1
ZGUgIldITFNMQXJyYXlUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRp
b24uaCIKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uTWVtYmVyLmgiCisjaW5jbHVkZSAiV0hM
U0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgi
CisjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xU
eXBlRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgorI2luY2x1
ZGUgIldITFNMVmlzaXRvci5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxmdW5j
dGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgTWV0
YWwgeworCitjbGFzcyBCYXNlVHlwZU5hbWVOb2RlIHsKK3B1YmxpYzoKKyAgICBCYXNlVHlwZU5h
bWVOb2RlKEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVudCwgU3RyaW5nJiYgbWFuZ2xlZE5hbWUpCisg
ICAgICAgIDogbV9wYXJlbnQocGFyZW50KQorICAgICAgICAsIG1fbWFuZ2xlZE5hbWUobWFuZ2xl
ZE5hbWUpCisgICAgeworICAgIH0KKyAgICB2aXJ0dWFsIH5CYXNlVHlwZU5hbWVOb2RlKCkgPSBk
ZWZhdWx0OworICAgIHZpcnR1YWwgYm9vbCBpc0FycmF5VHlwZU5hbWVOb2RlKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNBcnJheVJlZmVyZW5jZVR5cGVOYW1l
Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzUG9pbnRl
clR5cGVOYW1lTm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29s
IGlzUmVmZXJlbmNlVHlwZU5hbWVOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBW
ZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+PiYgY2hpbGRyZW4oKSB7IHJldHVybiBt
X2NoaWxkcmVuOyB9CisgICAgdm9pZCBhcHBlbmQoVW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+
JiYgY2hpbGQpCisgICAgeworICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChXVEZNb3ZlKGNoaWxk
KSk7CisgICAgfQorICAgIEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVudCgpIHsgcmV0dXJuIG1fcGFy
ZW50OyB9CisgICAgY29uc3QgU3RyaW5nJiBtYW5nbGVkTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bWFuZ2xlZE5hbWU7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBl
TmFtZU5vZGU+PiBtX2NoaWxkcmVuOworICAgIEJhc2VUeXBlTmFtZU5vZGUqIG1fcGFyZW50Owor
ICAgIFN0cmluZyBtX21hbmdsZWROYW1lOworfTsKKworY2xhc3MgQXJyYXlUeXBlTmFtZU5vZGUg
OiBwdWJsaWMgQmFzZVR5cGVOYW1lTm9kZSB7CitwdWJsaWM6CisgICAgQXJyYXlUeXBlTmFtZU5v
ZGUoQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50LCBTdHJpbmcmJiBtYW5nbGVkTmFtZSwgdW5zaWdu
ZWQgbnVtRWxlbWVudHMpCisgICAgICAgIDogQmFzZVR5cGVOYW1lTm9kZShwYXJlbnQsIFdURk1v
dmUobWFuZ2xlZE5hbWUpKQorICAgICAgICAsIG1fbnVtRWxlbWVudHMobnVtRWxlbWVudHMpCisg
ICAgeworICAgIH0KKyAgICB2aXJ0dWFsIH5BcnJheVR5cGVOYW1lTm9kZSgpID0gZGVmYXVsdDsK
KyAgICBib29sIGlzQXJyYXlUeXBlTmFtZU5vZGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0
cnVlOyB9CisgICAgdW5zaWduZWQgbnVtRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUVs
ZW1lbnRzOyB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9udW1FbGVtZW50czsKK307CisK
K2NsYXNzIEFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlIDogcHVibGljIEJhc2VUeXBlTmFtZU5v
ZGUgeworcHVibGljOgorICAgIEFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlKEJhc2VUeXBlTmFt
ZU5vZGUqIHBhcmVudCwgU3RyaW5nJiYgbWFuZ2xlZE5hbWUsIEFTVDo6QWRkcmVzc1NwYWNlIGFk
ZHJlc3NTcGFjZSkKKyAgICAgICAgOiBCYXNlVHlwZU5hbWVOb2RlKHBhcmVudCwgV1RGTW92ZSht
YW5nbGVkTmFtZSkpCisgICAgICAgICwgbV9hZGRyZXNzU3BhY2UoYWRkcmVzc1NwYWNlKQorICAg
IHsKKyAgICB9CisgICAgdmlydHVhbCB+QXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUoKSA9IGRl
ZmF1bHQ7CisgICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIEFTVDo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWRkcmVzc1NwYWNlOyB9CisKK3ByaXZhdGU6CisgICAgQVNU
OjpBZGRyZXNzU3BhY2UgbV9hZGRyZXNzU3BhY2U7Cit9OworCitjbGFzcyBQb2ludGVyVHlwZU5h
bWVOb2RlIDogcHVibGljIEJhc2VUeXBlTmFtZU5vZGUgeworcHVibGljOgorICAgIFBvaW50ZXJU
eXBlTmFtZU5vZGUoQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50LCBTdHJpbmcmJiBtYW5nbGVkTmFt
ZSwgQVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKQorICAgICAgICA6IEJhc2VUeXBlTmFt
ZU5vZGUocGFyZW50LCBXVEZNb3ZlKG1hbmdsZWROYW1lKSkKKyAgICAgICAgLCBtX2FkZHJlc3NT
cGFjZShhZGRyZXNzU3BhY2UpCisgICAgeworICAgIH0KKyAgICB2aXJ0dWFsIH5Qb2ludGVyVHlw
ZU5hbWVOb2RlKCkgPSBkZWZhdWx0OworICAgIGJvb2wgaXNQb2ludGVyVHlwZU5hbWVOb2RlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIEFTVDo6QWRkcmVzc1NwYWNlIGFk
ZHJlc3NTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWRkcmVzc1NwYWNlOyB9CisKK3ByaXZhdGU6
CisgICAgQVNUOjpBZGRyZXNzU3BhY2UgbV9hZGRyZXNzU3BhY2U7Cit9OworCitjbGFzcyBSZWZl
cmVuY2VUeXBlTmFtZU5vZGUgOiBwdWJsaWMgQmFzZVR5cGVOYW1lTm9kZSB7CitwdWJsaWM6Cisg
ICAgUmVmZXJlbmNlVHlwZU5hbWVOb2RlKEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVudCwgU3RyaW5n
JiYgbWFuZ2xlZE5hbWUsIEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUpCisgICAgICAgIDogQmFz
ZVR5cGVOYW1lTm9kZShwYXJlbnQsIFdURk1vdmUobWFuZ2xlZE5hbWUpKQorICAgICAgICAsIG1f
bmFtZWRUeXBlKG5hbWVkVHlwZSkKKyAgICB7CisgICAgfQorICAgIHZpcnR1YWwgflJlZmVyZW5j
ZVR5cGVOYW1lTm9kZSgpID0gZGVmYXVsdDsKKyAgICBib29sIGlzUmVmZXJlbmNlVHlwZU5hbWVO
b2RlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIEFTVDo6TmFtZWRUeXBl
JiBuYW1lZFR5cGUoKSB7IHJldHVybiBtX25hbWVkVHlwZTsgfQorCitwcml2YXRlOgorICAgIEFT
VDo6TmFtZWRUeXBlJiBtX25hbWVkVHlwZTsKK307CisKK30KKworfQorCit9CisKKyNkZWZpbmUg
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9CQVNFX1RZUEVfTkFNRURfTk9ERShUb1ZhbHVl
VHlwZU5hbWUsIHByZWRpY2F0ZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJD
b3JlOjpXSExTTDo6TWV0YWw6OlRvVmFsdWVUeXBlTmFtZSkgXAorICAgIHN0YXRpYyBib29sIGlz
VHlwZShjb25zdCBXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkJhc2VUeXBlTmFtZU5vZGUmIHR5cGUp
IHsgcmV0dXJuIHR5cGUucHJlZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5E
KCkKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9CQVNFX1RZUEVfTkFNRURfTk9ERShB
cnJheVR5cGVOYW1lTm9kZSwgaXNBcnJheVR5cGVOYW1lTm9kZSgpKQorCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX1dITFNMX0JBU0VfVFlQRV9OQU1FRF9OT0RFKEFycmF5UmVmZXJlbmNlVHlwZU5h
bWVOb2RlLCBpc0FycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlKCkpCisKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfV0hMU0xfQkFTRV9UWVBFX05BTUVEX05PREUoUG9pbnRlclR5cGVOYW1lTm9kZSwg
aXNQb2ludGVyVHlwZU5hbWVOb2RlKCkpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xf
QkFTRV9UWVBFX05BTUVEX05PREUoUmVmZXJlbmNlVHlwZU5hbWVOb2RlLCBpc1JlZmVyZW5jZVR5
cGVOYW1lTm9kZSgpKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7
CisKK25hbWVzcGFjZSBNZXRhbCB7CisKK1R5cGVOYW1lcjo6VHlwZU5hbWVyKFByb2dyYW0mIHBy
b2dyYW0pCisgICAgOiBtX3Byb2dyYW0ocHJvZ3JhbSkKK3sKK30KKworVHlwZU5hbWVyOjp+VHlw
ZU5hbWVyKCkgPSBkZWZhdWx0OworCit2b2lkIFR5cGVOYW1lcjo6dmlzaXQoQVNUOjpVbm5hbWVk
VHlwZSYgdW5uYW1lZFR5cGUpCit7CisgICAgaW5zZXJ0KHVubmFtZWRUeXBlLCBtX3RyaWUpOwor
fQorCit2b2lkIFR5cGVOYW1lcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVu
dW1lcmF0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbmFtZWRUeXBl
TWFwcGluZy5hZGQoJmVudW1lcmF0aW9uRGVmaW5pdGlvbiwgZ2VuZXJhdGVOZXh0VHlwZU5hbWUo
KSk7CisgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsK
KyAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uTWVtYmVyIDogZW51bWVyYXRpb25EZWZpbml0aW9u
LmVudW1lcmF0aW9uTWVtYmVycygpKSB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9lbnVt
ZXJhdGlvbk1lbWJlck1hcHBpbmcuYWRkKCZzdGF0aWNfY2FzdDxBU1Q6OkVudW1lcmF0aW9uTWVt
YmVyJj4oZW51bWVyYXRpb25NZW1iZXIpLCBnZW5lcmF0ZU5leHRFbnVtZXJhdGlvbk1lbWJlck5h
bWUoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdF
bnRyeSk7CisgICAgfQorICAgIFZpc2l0b3I6OnZpc2l0KGVudW1lcmF0aW9uRGVmaW5pdGlvbik7
Cit9CisKK3ZvaWQgVHlwZU5hbWVyOjp2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYp
Cit7CisgICAgLy8gTmF0aXZlIHR5cGUgZGVjbGFyYXRpb25zIGFscmVhZHkgaGF2ZSBuYW1lcywg
YW5kIGFyZSBhbHJlYWR5IGRlY2xhcmVkIGluIE1ldGFsLgorfQorCitzdGF0aWMgVmVjdG9yPFVu
aXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPj46Oml0ZXJhdG9yIGZpbmRJblZlY3RvcihBU1Q6OlVu
bmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgVmVjdG9yPFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2Rl
Pj4mIHR5cGVzKQoreworICAgIHJldHVybiBzdGQ6OmZpbmRfaWYodHlwZXMuYmVnaW4oKSwgdHlw
ZXMuZW5kKCksIFsmXShCYXNlVHlwZU5hbWVOb2RlJiBiYXNlVHlwZU5hbWVOb2RlKSAtPiBib29s
IHsKKyAgICAgICAgaWYgKGlzPEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpICYmIGlz
PFJlZmVyZW5jZVR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9kZSkpIHsKKyAgICAgICAgICAg
IGF1dG8qIHJlc29sdmVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1l
ZFR5cGUpLnJlc29sdmVkVHlwZSgpOworICAgICAgICAgICAgQVNTRVJUKHJlc29sdmVkVHlwZSk7
CisgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWRUeXBlID09ICZkb3duY2FzdDxSZWZlcmVuY2VU
eXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpLm5hbWVkVHlwZSgpOworICAgICAgICB9Cisg
ICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkgJiYgaXM8UG9pbnRl
clR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9kZSkpCisgICAgICAgICAgICByZXR1cm4gZG93
bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpLmFkZHJlc3NTcGFjZSgpID09IGRv
d25jYXN0PFBvaW50ZXJUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpLmFkZHJlc3NTcGFj
ZSgpOworICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBl
KSAmJiBpczxBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9kZSkpCisg
ICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFt
ZWRUeXBlKS5hZGRyZXNzU3BhY2UoKSA9PSBkb3duY2FzdDxBcnJheVJlZmVyZW5jZVR5cGVOYW1l
Tm9kZT4oYmFzZVR5cGVOYW1lTm9kZSkuYWRkcmVzc1NwYWNlKCk7CisgICAgICAgIGlmIChpczxB
U1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpICYmIGlzPEFycmF5VHlwZU5hbWVOb2RlPihiYXNl
VHlwZU5hbWVOb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxBU1Q6OkFycmF5VHlw
ZT4odW5uYW1lZFR5cGUpLm51bUVsZW1lbnRzKCkgPT0gZG93bmNhc3Q8QXJyYXlUeXBlTmFtZU5v
ZGU+KGJhc2VUeXBlTmFtZU5vZGUpLm51bUVsZW1lbnRzKCk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9KTsKK30KKworc3RhdGljIEJhc2VUeXBlTmFtZU5vZGUmIGZpbmQoQVNUOjpVbm5h
bWVkVHlwZSYgdW5uYW1lZFR5cGUsIFZlY3RvcjxVbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4+
JiB0eXBlcykKK3sKKyAgICBhdXRvJiB2ZWN0b3JUb1NlYXJjaCA9IChbJl0oKSAtPiBWZWN0b3I8
VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+PiYgeworICAgICAgICBpZiAoaXM8QVNUOjpUeXBl
UmVmZXJlbmNlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICByZXR1cm4gdHlwZXM7CisgICAg
ICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmluZChkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkuZWxlbWVu
dFR5cGUoKSwgdHlwZXMpLmNoaWxkcmVuKCk7CisgICAgICAgIGlmIChpczxBU1Q6OkFycmF5UmVm
ZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZpbmQoZG93bmNh
c3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKS5lbGVtZW50VHlwZSgpLCB0
eXBlcykuY2hpbGRyZW4oKTsKKyAgICAgICAgQVNTRVJUKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5h
bWVkVHlwZSkpOworICAgICAgICByZXR1cm4gZmluZChkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4o
dW5uYW1lZFR5cGUpLnR5cGUoKSwgdHlwZXMpLmNoaWxkcmVuKCk7CisgICAgfSkoKTsKKyAgICBh
dXRvIGl0ZXJhdG9yID0gZmluZEluVmVjdG9yKHVubmFtZWRUeXBlLCB2ZWN0b3JUb1NlYXJjaCk7
CisgICAgQVNTRVJUKGl0ZXJhdG9yICE9IHR5cGVzLmVuZCgpKTsKKyAgICByZXR1cm4gKml0ZXJh
dG9yOworfQorCit2b2lkIFR5cGVOYW1lcjo6dmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9u
JiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQoreworICAgIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQg
PSBtX25hbWVkVHlwZU1hcHBpbmcuYWRkKCZzdHJ1Y3R1cmVEZWZpbml0aW9uLCBnZW5lcmF0ZU5l
eHRUeXBlTmFtZSgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3Vs
dC5pc05ld0VudHJ5KTsKKyAgICB9CisgICAgVmlzaXRvcjo6dmlzaXQoc3RydWN0dXJlRGVmaW5p
dGlvbik7CisgICAgeworICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxCYXNl
VHlwZU5hbWVOb2RlPj4gbmVpZ2hib3JzOworICAgICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZUVs
ZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLnN0cnVjdHVyZUVsZW1lbnRzKCkpIHsKKyAgICAg
ICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9zdHJ1Y3R1cmVFbGVtZW50TWFwcGluZy5hZGQoJnN0
cnVjdHVyZUVsZW1lbnQsIGdlbmVyYXRlTmV4dFN0cnVjdHVyZUVsZW1lbnROYW1lKCkpOworICAg
ICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsK
KyAgICAgICAgICAgIG5laWdoYm9ycy5hcHBlbmQoZmluZChzdHJ1Y3R1cmVFbGVtZW50LnR5cGUo
KSwgbV90cmllKSk7CisgICAgICAgIH0KKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2RlcGVu
ZGVuY3lHcmFwaC5hZGQoJnN0cnVjdHVyZURlZmluaXRpb24sIFdURk1vdmUobmVpZ2hib3JzKSk7
CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7
CisgICAgfQorfQorCit2b2lkIFR5cGVOYW1lcjo6dmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlvbiYg
dHlwZURlZmluaXRpb24pCit7CisgICAgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbmFt
ZWRUeXBlTWFwcGluZy5hZGQoJnR5cGVEZWZpbml0aW9uLCBnZW5lcmF0ZU5leHRUeXBlTmFtZSgp
KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5
KTsKKyAgICB9CisgICAgVmlzaXRvcjo6dmlzaXQodHlwZURlZmluaXRpb24pOworICAgIHsKKyAg
ICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QmFzZVR5cGVOYW1lTm9kZT4+IG5l
aWdoYm9ycyA9IHsgZmluZCh0eXBlRGVmaW5pdGlvbi50eXBlKCksIG1fdHJpZSkgfTsKKyAgICAg
ICAgYXV0byBhZGRSZXN1bHQgPSBtX2RlcGVuZGVuY3lHcmFwaC5hZGQoJnR5cGVEZWZpbml0aW9u
LCBXVEZNb3ZlKG5laWdoYm9ycykpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwg
YWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KK30KKworU3RyaW5nIFR5cGVOYW1lcjo6bWFu
Z2xlZE5hbWVGb3JUeXBlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVj
bGFyYXRpb24pCit7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInZv
aWQiKQorICAgICAgICByZXR1cm4gInZvaWQiX3N0cjsKKyAgICBpZiAobmF0aXZlVHlwZURlY2xh
cmF0aW9uLm5hbWUoKSA9PSAiYm9vbCIpCisgICAgICAgIHJldHVybiAiYm9vbCJfc3RyOworICAg
IGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJ1Y2hhciIpCisgICAgICAgIHJl
dHVybiAidWludDhfdCJfc3RyOworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgp
ID09ICJ1c2hvcnQiKQorICAgICAgICByZXR1cm4gInVpbnQxNl90Il9zdHI7CisgICAgaWYgKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInVpbnQiKQorICAgICAgICByZXR1cm4gInVp
bnQzMl90Il9zdHI7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImNo
YXIiKQorICAgICAgICByZXR1cm4gImludDhfdCJfc3RyOworICAgIGlmIChuYXRpdmVUeXBlRGVj
bGFyYXRpb24ubmFtZSgpID09ICJzaG9ydCIpCisgICAgICAgIHJldHVybiAiaW50MTZfdCJfc3Ry
OworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJpbnQiKQorICAgICAg
ICByZXR1cm4gImludDMyX3QiX3N0cjsKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5h
bWUoKSA9PSAiaGFsZiIpCisgICAgICAgIHJldHVybiAiaGFsZiJfc3RyOworICAgIGlmIChuYXRp
dmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJmbG9hdCIpCisgICAgICAgIHJldHVybiAiZmxv
YXQiX3N0cjsKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYXRvbWlj
X2ludCIpCisgICAgICAgIHJldHVybiAiYXRvbWljX2ludCJfc3RyOworICAgIGlmIChuYXRpdmVU
eXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJhdG9taWNfdWludCIpCisgICAgICAgIHJldHVybiAi
YXRvbWljX3VpbnQiX3N0cjsKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9
PSAic2FtcGxlciIpCisgICAgICAgIHJldHVybiAic2FtcGxlciJfc3RyOworICAgIGlmIChuYXRp
dmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJ2ZWN0b3IiKSB7CisgICAgICAgIEFTU0VSVChu
YXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAyKTsKKyAgICAg
ICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VW5pcXVlUmVmPFR5cGVSZWZlcmVuY2U+
PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgICAgIGF1
dG8mIHR5cGVSZWZlcmVuY2UgPSBXVEY6OmdldDxVbmlxdWVSZWY8VHlwZVJlZmVyZW5jZT4+KG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pOworICAgICAgICBhdXRvJiB1
bmlmeU5vZGUgPSB0eXBlUmVmZXJlbmNlLnVuaWZ5Tm9kZSgpOworICAgICAgICBBU1NFUlQoaXM8
QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpCisgICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRv
d25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeW5vZGUpOworICAgICAgICBBU1NFUlQoaXM8QVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpOworICAgICAgICBhdXRvJiBwYXJh
bWV0ZXJUeXBlID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlw
ZSk7CisgICAgICAgIGF1dG8gcHJlZml4ID0gKFsmXSgpIC0+IFN0cmluZyB7CisgICAgICAgICAg
ICBpZiAocGFyYW1ldGVyVHlwZS5uYW1lKCkgPT0gImJvb2wiKQorICAgICAgICAgICAgICAgIHJl
dHVybiAiYm9vbCI7CisgICAgICAgICAgICBpZiAocGFyYW1ldGVyVHlwZS5uYW1lKCkgPT0gInVj
aGFyIikKKyAgICAgICAgICAgICAgICByZXR1cm4gInVjaGFyIjsKKyAgICAgICAgICAgIGlmIChw
YXJhbWV0ZXJUeXBlLm5hbWUoKSA9PSAidXNob3J0IikKKyAgICAgICAgICAgICAgICByZXR1cm4g
InVzaG9ydCI7CisgICAgICAgICAgICBpZiAocGFyYW1ldGVyVHlwZS5uYW1lKCkgPT0gInVpbnQi
KQorICAgICAgICAgICAgICAgIHJldHVybiAidWludCI7CisgICAgICAgICAgICBpZiAocGFyYW1l
dGVyVHlwZS5uYW1lKCkgPT0gImNoYXIiKQorICAgICAgICAgICAgICAgIHJldHVybiAiY2hhciI7
CisgICAgICAgICAgICBpZiAocGFyYW1ldGVyVHlwZS5uYW1lKCkgPT0gInNob3J0IikKKyAgICAg
ICAgICAgICAgICByZXR1cm4gInNob3J0IjsKKyAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJUeXBl
Lm5hbWUoKSA9PSAiaW50IikKKyAgICAgICAgICAgICAgICByZXR1cm4gImludCI7CisgICAgICAg
ICAgICBpZiAocGFyYW1ldGVyVHlwZS5uYW1lKCkgPT0gImhhbGYiKQorICAgICAgICAgICAgICAg
IHJldHVybiAiaGFsZiI7CisgICAgICAgICAgICBBU1NFUlQocGFyYW1ldGVyVHlwZS5uYW1lKCkg
PT0gImZsb2F0Iik7CisgICAgICAgICAgICByZXR1cm4gImZsb2F0IjsKKyAgICAgICAgfSkoKTsK
KyAgICAgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29uc3RhbnRFeHByZXNzaW9u
PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzFdKSk7CisgICAgICAgIGF1
dG8mIGNvbnN0YW50RXhwcmVzc2lvbiA9IFdURjo6Z2V0PENvbnN0YW50RXhwcmVzc2lvbj4obmF0
aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSk7CisgICAgICAgIGF1dG8mIGlu
dGVnZXJMaXRlcmFsID0gY29uc3RhbnRFeHByZXNzaW9uLmludGVnZXJMaXRlcmFsKCk7CisgICAg
ICAgIGF1dG8gc3VmZml4ID0gKFsmXSgpIC0+IFN0cmluZyB7CisgICAgICAgICAgICBzd2l0Y2gg
KGludGVnZXJMaXRlcmFsLnZhbHVlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gIjIiX3N0cjsKKyAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gIjMiX3N0cjsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgQVNTRVJUKGludGVnZXJMaXRlcmFsLnZhbHVlKCkgPT0gNCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuICI0Il9zdHI7CisgICAgICAgICAgICB9CisgICAgICAgIH0pKCk7CisgICAgICAgIHJl
dHVybiBtYWtlU3RyaW5nKHByZWZpeCwgc3VmZml4KTsKKyAgICB9CisgICAgaWYgKG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIm1hdHJpeCIpIHsKKyAgICAgICAgQVNTRVJUKG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDMpOworICAgICAgICBB
U1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxVbmlxdWVSZWY8VHlwZVJlZmVyZW5jZT4+KG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsKKyAgICAgICAgYXV0byYg
dHlwZVJlZmVyZW5jZSA9IFdURjo6Z2V0PFVuaXF1ZVJlZjxUeXBlUmVmZXJlbmNlPj4obmF0aXZl
VHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSk7CisgICAgICAgIGF1dG8mIHVuaWZ5
Tm9kZSA9IHR5cGVSZWZlcmVuY2UudW5pZnlOb2RlKCk7CisgICAgICAgIEFTU0VSVChpczxBU1Q6
Ok5hbWVkVHlwZT4odW5pZnlOb2RlKSkKKyAgICAgICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNh
c3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5bm9kZSk7CisgICAgICAgIEFTU0VSVChpczxBU1Q6Ok5h
dGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKSk7CisgICAgICAgIGF1dG8mIHBhcmFtZXRl
clR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKTsK
KyAgICAgICAgYXV0byBwcmVmaXggPSAoWyZdKCkgLT4gU3RyaW5nIHsKKyAgICAgICAgICAgIGlm
IChwYXJhbWV0ZXJUeXBlLm5hbWUoKSA9PSAiaGFsZiIpCisgICAgICAgICAgICAgICAgcmV0dXJu
ICJoYWxmIjsKKyAgICAgICAgICAgIEFTU0VSVChwYXJhbWV0ZXJUeXBlLm5hbWUoKSA9PSAiZmxv
YXQiKTsKKyAgICAgICAgICAgIHJldHVybiAiZmxvYXQiOworICAgICAgICB9KSgpOworICAgICAg
ICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMV0pKTsKKyAgICAgICAgYXV0byYgY29u
c3RhbnRFeHByZXNzaW9uMSA9IFdURjo6Z2V0PENvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlw
ZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSk7CisgICAgICAgIGF1dG8mIGludGVnZXJM
aXRlcmFsMSA9IGNvbnN0YW50RXhwcmVzc2lvbi5pbnRlZ2VyTGl0ZXJhbCgpOworICAgICAgICBh
dXRvIG1pZGRsZSA9IChbJl0oKSAtPiBTdHJpbmcgeworICAgICAgICAgICAgc3dpdGNoIChpbnRl
Z2VyTGl0ZXJhbDEudmFsdWUoKSkgeworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAg
ICAgIHJldHVybiAiMiJfc3RyOworICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAg
IHJldHVybiAiMyJfc3RyOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBB
U1NFUlQoaW50ZWdlckxpdGVyYWwxLnZhbHVlKCkgPT0gNCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuICI0Il9zdHI7CisgICAgICAgICAgICB9CisgICAgICAgIH0pKCk7CisgICAgICAgIEFTU0VS
VChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsyXSkpOworICAgICAgICBhdXRvJiBjb25zdGFudEV4
cHJlc3Npb24yID0gV1RGOjpnZXQ8Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFy
YXRpb24udHlwZUFyZ3VtZW50cygpWzBdKTsKKyAgICAgICAgYXV0byYgaW50ZWdlckxpdGVyYWwy
ID0gY29uc3RhbnRFeHByZXNzaW9uLmludGVnZXJMaXRlcmFsKCk7CisgICAgICAgIGF1dG8gc3Vm
Zml4ID0gKFsmXSgpIC0+IFN0cmluZyB7CisgICAgICAgICAgICBzd2l0Y2ggKGludGVnZXJMaXRl
cmFsMi52YWx1ZSgpKSB7CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgcmV0
dXJuICIyIl9zdHI7CisgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgcmV0dXJu
ICIzIl9zdHI7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVChp
bnRlZ2VyTGl0ZXJhbDIudmFsdWUoKSA9PSA0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gIjQi
X3N0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSkoKTsKKyAgICAgICAgcmV0dXJuIG1ha2VT
dHJpbmcocHJlZml4LCBtaWRkbGUsICd4Jywgc3VmZml4KTsKKyAgICB9CisgICAgQVNTRVJUKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDEpOworICAgIEFT
U0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1ZVJlZjxUeXBlUmVmZXJlbmNlPj4obmF0
aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOworICAgIGF1dG8mIHR5cGVS
ZWZlcmVuY2UgPSBXVEY6OmdldDxVbmlxdWVSZWY8VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pOworICAgIGF1dG8gcHJlZml4ID0gKFsmXSgp
IC0+IFN0cmluZyB7CisgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09
ICJUZXh0dXJlMUQiKQorICAgICAgICAgICAgcmV0dXJuICJ0ZXh0dXJlMWQiX3N0cjsKKyAgICAg
ICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlJXVGV4dHVyZTFEIikKKyAg
ICAgICAgICAgIHJldHVybiAidGV4dHVyZTFkIl9zdHI7CisgICAgICAgIGlmIChuYXRpdmVUeXBl
RGVjbGFyYXRpb24ubmFtZSgpID09ICJUZXh0dXJlMURBcnJheSIpCisgICAgICAgICAgICByZXR1
cm4gInRleHR1cmUxZF9hcnJheSJfc3RyOworICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0
aW9uLm5hbWUoKSA9PSAiUldUZXh0dXJlMURBcnJheSIpCisgICAgICAgICAgICByZXR1cm4gInRl
eHR1cmUxZF9hcnJheSJfc3RyOworICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5h
bWUoKSA9PSAiVGV4dHVyZTJEIikKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZTJkIl9zdHI7
CisgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJSV1RleHR1cmUy
RCIpCisgICAgICAgICAgICByZXR1cm4gInRleHR1cmUyZCJfc3RyOworICAgICAgICBpZiAobmF0
aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiVGV4dHVyZTJEQXJyYXkiKQorICAgICAgICAg
ICAgcmV0dXJuICJ0ZXh0dXJlMmRfYXJyYXkiX3N0cjsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlJXVGV4dHVyZTJEQXJyYXkiKQorICAgICAgICAgICAgcmV0
dXJuICJ0ZXh0dXJlMmRfYXJyYXkiX3N0cjsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5uYW1lKCkgPT0gIlRleHR1cmUzRCIpCisgICAgICAgICAgICByZXR1cm4gInRleHR1cmUz
ZCJfc3RyOworICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiUldU
ZXh0dXJlM0QiKQorICAgICAgICAgICAgcmV0dXJuICJ0ZXh0dXJlM2QiX3N0cjsKKyAgICAgICAg
aWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlRleHR1cmVDdWJlIikKKyAgICAg
ICAgICAgIHJldHVybiAidGV4dHVyZWN1YmUiX3N0cjsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlRleHR1cmVEZXB0aDJEIikKKyAgICAgICAgICAgIHJldHVy
biAiZGVwdGgyZCJfc3RyOworICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUo
KSA9PSAiUldUZXh0dXJlRGVwdGgyRCIpCisgICAgICAgICAgICByZXR1cm4gImRlcHRoMmQiX3N0
cjsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlRleHR1cmVE
ZXB0aDJEQXJyYXkiKQorICAgICAgICAgICAgcmV0dXJuICJkZXB0aDJkX2FycmF5Il9zdHI7Cisg
ICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJSV1RleHR1cmVEZXB0
aDJEQXJyYXkiKQorICAgICAgICAgICAgcmV0dXJuICJkZXB0aDJkX2FycmF5Il9zdHI7CisgICAg
ICAgIEFTU0VSVChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJUZXh0dXJlRGVwdGhD
dWJlIik7CisgICAgICAgIHJldHVybiAiZGVwdGhjdWJlIl9zdHI7CisgICAgfSkoKTsKKyAgICBh
dXRvIGlubmVyVHlwZSA9IChbJl0oKSAtPiBTdHJpbmcgeworICAgICAgICBpZiAodHlwZVJlZmVy
ZW5jZS5uYW1lID09ICJ1c2hvcnQiKQorICAgICAgICAgICAgcmV0dXJuICJ1c2hvcnQiX3N0cjsK
KyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UubmFtZSA9PSAidXNob3J0MiIpCisgICAgICAgICAg
ICByZXR1cm4gInVzaG9ydCJfc3RyOworICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS5uYW1lID09
ICJ1c2hvcnQzIikKKyAgICAgICAgICAgIHJldHVybiAidXNob3J0Il9zdHI7CisgICAgICAgIGlm
ICh0eXBlUmVmZXJlbmNlLm5hbWUgPT0gInVzaG9ydDQiKQorICAgICAgICAgICAgcmV0dXJuICJ1
c2hvcnQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UubmFtZSA9PSAidWludCIpCisg
ICAgICAgICAgICByZXR1cm4gInVpbnQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2Uu
bmFtZSA9PSAidWludDIiKQorICAgICAgICAgICAgcmV0dXJuICJ1aW50Il9zdHI7CisgICAgICAg
IGlmICh0eXBlUmVmZXJlbmNlLm5hbWUgPT0gInVpbnQzIikKKyAgICAgICAgICAgIHJldHVybiAi
dWludCJfc3RyOworICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS5uYW1lID09ICJ1aW50NCIpCisg
ICAgICAgICAgICByZXR1cm4gInVpbnQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2Uu
bmFtZSA9PSAic2hvcnQiKQorICAgICAgICAgICAgcmV0dXJuICJzaG9ydCJfc3RyOworICAgICAg
ICBpZiAodHlwZVJlZmVyZW5jZS5uYW1lID09ICJzaG9ydDIiKQorICAgICAgICAgICAgcmV0dXJu
ICJzaG9ydCJfc3RyOworICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS5uYW1lID09ICJzaG9ydDMi
KQorICAgICAgICAgICAgcmV0dXJuICJzaG9ydCJfc3RyOworICAgICAgICBpZiAodHlwZVJlZmVy
ZW5jZS5uYW1lID09ICJzaG9ydDQiKQorICAgICAgICAgICAgcmV0dXJuICJzaG9ydCJfc3RyOwor
ICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS5uYW1lID09ICJpbnQiKQorICAgICAgICAgICAgcmV0
dXJuICJpbnQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UubmFtZSA9PSAiaW50MiIp
CisgICAgICAgICAgICByZXR1cm4gImludCJfc3RyOworICAgICAgICBpZiAodHlwZVJlZmVyZW5j
ZS5uYW1lID09ICJpbnQzIikKKyAgICAgICAgICAgIHJldHVybiAiaW50Il9zdHI7CisgICAgICAg
IGlmICh0eXBlUmVmZXJlbmNlLm5hbWUgPT0gImludDQiKQorICAgICAgICAgICAgcmV0dXJuICJp
bnQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UubmFtZSA9PSAiaGFsZiIpCisgICAg
ICAgICAgICByZXR1cm4gImhhbGYiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UubmFt
ZSA9PSAiaGFsZjIiKQorICAgICAgICAgICAgcmV0dXJuICJoYWxmIl9zdHI7CisgICAgICAgIGlm
ICh0eXBlUmVmZXJlbmNlLm5hbWUgPT0gImhhbGYzIikKKyAgICAgICAgICAgIHJldHVybiAiaGFs
ZiJfc3RyOworICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS5uYW1lID09ICJoYWxmNCIpCisgICAg
ICAgICAgICByZXR1cm4gImhhbGYiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UubmFt
ZSA9PSAiZmxvYXQiKQorICAgICAgICAgICAgcmV0dXJuICJmbG9hdCJfc3RyOworICAgICAgICBp
ZiAodHlwZVJlZmVyZW5jZS5uYW1lID09ICJmbG9hdDIiKQorICAgICAgICAgICAgcmV0dXJuICJm
bG9hdCJfc3RyOworICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS5uYW1lID09ICJmbG9hdDMiKQor
ICAgICAgICAgICAgcmV0dXJuICJmbG9hdCJfc3RyOworICAgICAgICBBU1NFUlQodHlwZVJlZmVy
ZW5jZS5uYW1lID09ICJmbG9hdDQiKTsKKyAgICAgICAgcmV0dXJuICJmbG9hdCJfc3RyOworICAg
IH0pKCk7CisgICAgLy8gRklYTUU6IFNwZWNpZnkgdGhlIHNlY29uZCB0ZW1wbGF0ZSBhcmd1bWVu
dCB0byBNZXRhbCB0ZXh0dXJlIHR5cGVzLgorICAgIHJldHVybiBtYWtlU3RyaW5nKHByZWZpeCwg
JzwnLCBpbm5lclR5cGUsICc+Jyk7Cit9CisKK1VuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPiBU
eXBlTmFtZXI6OmNyZWF0ZU5hbWVOb2RlKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBC
YXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQpCit7CisgICAgaWYgKGlzPEFTVDo6VHlwZVJlZmVyZW5j
ZT4odW5uYW1lZFR5cGUpKSB7CisgICAgICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBkb3duY2Fz
dDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRUeXBlKTsKKyAgICAgICAgQVNTRVJUKHR5cGVS
ZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxS
ZWZlcmVuY2VUeXBlTmFtZU5vZGU+KHBhcmVudCwgZ2VuZXJhdGVOZXh0VHlwZU5hbWUoKSwgKnR5
cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgIH0KKyAgICBpZiAoaXM8QVNUOjpQb2lu
dGVyVHlwZT4odW5uYW1lZFR5cGUpKSB7CisgICAgICAgIGF1dG8mIHBvaW50ZXJUeXBlID0gZG93
bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpOworICAgICAgICByZXR1cm4gbWFr
ZVVuaXF1ZVJlZjxQb2ludGVyVHlwZU5hbWVOb2RlPihwYXJlbnQsIGdlbmVyYXRlTmV4dFR5cGVO
YW1lKCksIHBvaW50ZXJUeXBlLmFkZHJlc3NTcGFjZSgpKTsKKyAgICB9CisgICAgaWYgKGlzPEFT
VDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpIHsKKyAgICAgICAgYXV0byYgYXJy
YXlSZWZlcmVuY2VUeXBlID0gZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFt
ZWRUeXBlKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8QXJyYXlSZWZlcmVuY2VUeXBl
TmFtZU5vZGU+KHBhcmVudCwgZ2VuZXJhdGVOZXh0VHlwZU5hbWUoKSwgYXJyYXlSZWZlcmVuY2VU
eXBlLmFkZHJlc3NTcGFjZSgpKTsKKyAgICB9CisgICAgQVNTRVJUKGlzPEFTVDo6QXJyYXlUeXBl
Pih1bm5hbWVkVHlwZSkpOworICAgIGF1dG8mIGFycmF5VHlwZSA9IGRvd25jYXN0PEFTVDo6QXJy
YXlUeXBlPih1bm5hbWVkVHlwZSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8QXJyYXlUeXBl
TmFtZU5vZGU+KHBhcmVudCwgZ2VuZXJhdGVOZXh0VHlwZU5hbWUoKSwgYXJyYXlUeXBlLm51bUVs
ZW1lbnRzKCkpOworfQorCitzaXplX3QgVHlwZU5hbWVyOjppbnNlcnQoQVNUOjpVbm5hbWVkVHlw
ZSYgdW5uYW1lZFR5cGUsIFZlY3RvcjxVbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4+JiB0eXBl
cykKK3sKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+PiogdmVjdG9yVG9J
bnNlcnRJbnRvIHsgbnVsbHB0ciB9OworICAgIEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVudCB7IG51
bGxwdHIgfTsKKyAgICBpZiAoaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkpIHsK
KyAgICAgICAgdmVjdG9yVG9JbnNlcnRJbnRvID0gJnR5cGVzOworICAgICAgICBwYXJlbnQgPSBu
dWxscHRyOworICAgIH0gZWxzZSBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUp
KSB7CisgICAgICAgIGF1dG8mIGl0ZW0gPSB0eXBlc1tpbnNlcnQoZG93bmNhc3Q8QVNUOjpQb2lu
dGVyVHlwZT4odW5uYW1lZFR5cGUpLmVsZW1lbnRUeXBlKCksIHR5cGVzKV07CisgICAgICAgIHZl
Y3RvclRvSW5zZXJ0SW50byA9ICZpdGVtLT5jaGlsZHJlbigpOworICAgICAgICBwYXJlbnQgPSAm
aXRlbTsKKyAgICB9IGVsc2UgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVk
VHlwZSkpIHsKKyAgICAgICAgYXV0byYgaXRlbSA9IHR5cGVzW2luc2VydChkb3duY2FzdDxBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpLmVsZW1lbnRUeXBlKCksIHR5cGVzKV07
CisgICAgICAgIHZlY3RvclRvSW5zZXJ0SW50byA9ICZpdGVtLT5jaGlsZHJlbigpOworICAgICAg
ICBwYXJlbnQgPSAmaXRlbTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoaXM8QVNUOjpB
cnJheVR5cGU+KHVubmFtZWRUeXBlKSk7CisgICAgICAgIGF1dG8mIGl0ZW0gPSB0eXBlc1tpbnNl
cnQoZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKS50eXBlKCksIHR5cGVzKV07
CisgICAgICAgIHZlY3RvclRvSW5zZXJ0SW50byA9ICZpdGVtLT5jaGlsZHJlbigpOworICAgICAg
ICBwYXJlbnQgPSAmaXRlbTsKKyAgICB9CisgICAgQVNTRVJUKHZlY3RvclRvSW5zZXJ0SW50byk7
CisKKyAgICBhdXRvIGl0ZXJhdG9yID0gZmluZEluVmVjdG9yKHVubmFtZWRUeXBlLCAqdmVjdG9y
VG9JbnNlcnRJbnRvKTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gdmVjdG9yVG9JbnNlcnRJbnRvLT5l
bmQoKSkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZU5hbWVOb2RlKHVubmFtZWRUeXBl
LCBwYXJlbnQpOworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdW5u
YW1lZFR5cGVNYXBwaW5nLmFkZCgmdW5uYW1lZFR5cGUsICZyZXN1bHQpOworICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAg
fQorICAgICAgICB2ZWN0b3JUb0luc2VydEludG8tPmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwor
ICAgICAgICByZXR1cm4gdmVjdG9yVG9JbnNlcnRJbnRvLT5zaXplKCkgLSAxOworICAgIH0KKyAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fdW5uYW1lZFR5cGVNYXBwaW5nLmFkZCgmdW5uYW1lZFR5cGUs
ICYqaXRlcmF0b3IpOworICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNO
ZXdFbnRyeSk7CisgICAgcmV0dXJuIGl0ZXJhdG9yIC0gdmVjdG9yVG9JbnNlcnRJbnRvLT5iZWdp
bigpOworfQorCitjbGFzcyBNZXRhbFR5cGVEZWNsYXJhdGlvbldyaXRlciA6IHB1YmxpYyBWaXNp
dG9yIHsKK3B1YmxpYzoKKyAgICBNZXRhbFR5cGVEZWNsYXJhdGlvbldyaXRlcihzdGQ6OmZ1bmN0
aW9uPFN0cmluZyhBU1Q6Ok5hbWVkVHlwZSYpPiYmIG1hbmdsZWROYW1lRm9yTmFtZWRUeXBlLCBz
dGQ6OmZ1bmN0aW9uPFN0cmluZyhBU1Q6OlVubmFtZWRUeXBlJik+JiYgbWFuZ2xlZE5hbWVGb3JV
bm5hbWVkVHlwZSwgc3RkOjpmdW5jdGlvbjxTdHJpbmcoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYp
PiYmIG1hbmdsZWROYW1lRm9yRW51bWVyYXRpb25NZW1iZXIpCisgICAgICAgIDogbV9tYW5nbGVk
TmFtZUZvck5hbWVkVHlwZShXVEZNb3ZlKG1hbmdsZWROYW1lRm9yTmFtZWRUeXBlKSkKKyAgICAg
ICAgLCBtX21hbmdsZWROYW1lRm9yVW5uYW1lZFR5cGUoV1RGTW92ZShtYW5nbGVkTmFtZUZvclVu
bmFtZWRUeXBlKSkKKyAgICAgICAgLCBtX21hbmdsZWROYW1lRm9yRW51bWVyYXRpb25NZW1iZXIo
V1RGTW92ZShtYW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVtYmVyKSkKKyAgICB7CisgICAgfQor
CisgICAgU3RyaW5nIHRvU3RyaW5nKCkgeyByZXR1cm4gbV9zdHJpbmdCdWlsZGVyLnRvU3RyaW5n
KCk7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0
aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCisgICAgeworICAgICAgICBhdXRvJiBiYXNlVHlw
ZSA9IGVudW1lcmF0aW9uRGVmaW5pdGlvbi50eXBlKCkudW5pZnlOb2RlKCk7CisgICAgICAgIEFT
U0VSVChpczxBU1Q6Ok5hbWVkVHlwZT4oYmFzZVR5cGUpKTsKKyAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJlbnVtIGNsYXNzICIsIG1fbWFuZ2xlZE5hbWVGb3JOYW1l
ZFR5cGUoZW51bWVyYXRpb25EZWZpbml0aW9uKSwgIiA6ICIsIG1fbWFuZ2xlZE5hbWVGb3JOYW1l
ZFR5cGUoZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KGJhc2VUeXBlKSksICIge1xuIikpOworICAg
ICAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uTWVtYmVyIDogZW51bWVyYXRpb25EZWZpbml0aW9u
LmVudW1lcmF0aW9uTWVtYmVycygpKQorICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKCIgICAgIiwgbV9tYW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVtYmVyKGVu
dW1lcmF0aW9uTWVtYmVyKSwgIixcbiIpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZCgifVxuIik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRp
b24mIHN0cnVjdHVyZURlZmluaXRpb24pCisgICAgeworICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcoInN0cnVjdCAiLCBtX21hbmdsZWROYW1lRm9yTmFtZWRUeXBlKHN0
cnVjdHVyZURlZmluaXRpb24pLCAiO1xuIikpOworICAgIH0KKworICAgIHN0ZDo6ZnVuY3Rpb248
U3RyaW5nKEFTVDo6TmFtZWRUeXBlJik+IG1fbWFuZ2xlZE5hbWVGb3JOYW1lZFR5cGU7CisgICAg
c3RkOjpmdW5jdGlvbjxTdHJpbmcoQVNUOjpVbm5hbWVkVHlwZSYpPiBtX21hbmdsZWROYW1lRm9y
VW5uYW1lZFR5cGU7CisgICAgc3RkOjpmdW5jdGlvbjxTdHJpbmcoQVNUOjpFbnVtZXJhdGlvbk1l
bWJlciYpPiYmIG1fbWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJlcjsKKyAgICBTdHJpbmdC
dWlsZGVyIG1fc3RyaW5nQnVpbGRlcjsKK307CisKK1N0cmluZyBUeXBlTmFtZXI6Om1ldGFsVHlw
ZURlY2xhcmF0aW9ucygpCit7CisgICAgTWV0YWxUeXBlRGVjbGFyYXRpb25Xcml0ZXIgbWV0YWxU
eXBlRGVjbGFyYXRpb25Xcml0ZXIoWyZdKEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUpIC0+IFN0
cmluZyB7CisgICAgICAgIHJldHVybiBtYW5nbGVkTmFtZUZvclR5cGUobmFtZWRUeXBlKTsKKyAg
ICB9LCBbJl0oQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpIC0+IFN0cmluZyB7CisgICAg
ICAgIHJldHVybiBtYW5nbGVkTmFtZUZvclR5cGUodW5uYW1lZFR5cGUpOworICAgIH0sIFsmXShB
U1Q6OkVudW1lcmF0aW9uTWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJlcikgLT4gU3RyaW5nIHsKKyAg
ICAgICAgcmV0dXJuIG1hbmdsZWROYW1lRm9yRW51bWVyYXRpb25NZW1iZXIoZW51bWVyYXRpb25N
ZW1iZXIpOworICAgIH0pOworICAgIG1ldGFsVHlwZURlY2xhcmF0aW9uV3JpdGVyLlZpc2l0b3I6
OnZpc2l0KG1fcHJvZ3JhbSk7CisgICAgcmV0dXJuIG1ldGFsVHlwZURlY2xhcmF0aW9uV3JpdGVy
LnRvU3RyaW5nKCk7Cit9CisKK3N0YXRpYyBTdHJpbmcgdG9TdHJpbmcoQVNUOjpBZGRyZXNzU3Bh
Y2UgYWRkcmVzc1NwYWNlKQoreworICAgIHN3aXRjaCAoYWRkcmVzc1NwYWNlKSB7CisgICAgY2Fz
ZSBBU1Q6OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ6CisgICAgICAgIHJldHVybiAiY29uc3RhbnQi
X3N0cjsKKyAgICBjYXNlIEFTVDo6QWRkcmVzc1NwYWNlOjpEZXZpY2U6CisgICAgICAgIHJldHVy
biAiZGV2aWNlIl9zdHI7CisgICAgY2FzZSBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkZ3JvdXA6
CisgICAgICAgIHJldHVybiAidGhyZWFkZ3JvdXAiX3N0cjsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlQoYWRkcmVzc1NwYWNlID09IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQpOworICAg
ICAgICByZXR1cm4gInRocmVhZCJfc3RyOworICAgIH0KK30KKwordm9pZCBUeXBlTmFtZXI6OmVt
aXRVbm5hbWVkVHlwZURlZmluaXRpb24oQmFzZVR5cGVOYW1lTm9kZSYgYmFzZVR5cGVOYW1lTm9k
ZSwgSGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+JiBlbWl0dGVkTmFtZWRUeXBlcywgSGFzaFNldDxC
YXNlVHlwZU5hbWVOb2RlKj4mIGVtaXR0ZWRVbm5hbWVkVHlwZXMsIFN0cmluZ0J1aWxkZXImIHN0
cmluZ0J1aWxkZXIpCit7CisgICAgaWYgKGVtaXR0ZWRVbm5hbWVkVHlwZXMuY29udGFpbnMoJmJh
c2VUeXBlTmFtZU5vZGUpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGJhc2VUeXBlTmFtZU5v
ZGUucGFyZW50KCkpCisgICAgICAgIGVtaXRVbm5hbWVkVHlwZURlZmluaXRpb24oKmJhc2VUeXBl
TmFtZU5vZGUucGFyZW50KCksIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVz
LCBzdHJpbmdCdWlsZGVyKTsKKyAgICBpZiAoaXM8UmVmZXJlbmNlVHlwZU5hbWVOb2RlPihiYXNl
VHlwZU5hbWVOb2RlKSkgeworICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxSZWZl
cmVuY2VUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpLm5hbWVkVHlwZSgpOworICAgICAg
ICBlbWl0TmFtZWRUeXBlRGVmaW5pdGlvbihuYW1lZFR5cGUsIGVtaXR0ZWROYW1lZFR5cGVzLCBl
bWl0dGVkVW5uYW1lZFR5cGVzLCBzdHJpbmdCdWlsZGVyKTsKKyAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWFrZVN0cmluZygidHlwZWRlZiAiLCBtYW5nbGVkTmFtZUZvclR5cGUobmFtZWRU
eXBlKSwgJyAnLCBiYXNlVHlwZU5hbWVOb2RlLm1hbmdsZWROYW1lKCksICI7XG4iKSk7CisgICAg
fSBlbHNlIGlmIChpczxQb2ludGVyVHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKSkgewor
ICAgICAgICBhdXRvJiBwb2ludGVyVHlwZSA9IGRvd25jYXN0PFBvaW50ZXJUeXBlTmFtZU5vZGU+
KGJhc2VUeXBlTmFtZU5vZGUpOworICAgICAgICBBU1NFUlQoYmFzZVR5cGVOYW1lTm9kZS5wYXJl
bnQoKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInR5cGVkZWYg
IiwgdG9TdHJpbmcocG9pbnRlclR5cGUuYWRkcmVzc1NwYWNlKCkpLCAiICIsIHBvaW50ZXJUeXBl
LnBhcmVudCgpLT5tYW5nbGVkTmFtZSgpLCAiKiAiLCBwb2ludGVyVHlwZS5tYW5nbGVkTmFtZSgp
LCAiO1xuIikpOworICAgIH0gZWxzZSBpZiAoaXM8QXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGU+
KGJhc2VUeXBlTmFtZU5vZGUpKSB7CisgICAgICAgIGF1dG8mIGFycmF5UmVmZXJlbmNlVHlwZSA9
IGRvd25jYXN0PEFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKTsK
KyAgICAgICAgQVNTRVJUKGJhc2VUeXBlTmFtZU5vZGUucGFyZW50KCkpOworICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJzdHJ1Y3QgIiwgYXJyYXlSZWZlcmVuY2VUeXBl
Lm1hbmdsZWROYW1lKCksICJ7IFxuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKCIgICAgIiwgdG9TdHJpbmcoYXJyYXlSZWZlcmVuY2VUeXBlLmFkZHJlc3NTcGFj
ZSgpKSwgIiAiLCBhcnJheVJlZmVyZW5jZVR5cGUucGFyZW50KCktPm1hbmdsZWROYW1lKCksICIq
IHBvaW50ZXI7XG4iKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgdW5zaWdu
ZWQgbGVuZ3RoO1xuIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoaXM8QXJyYXlUeXBlTmFtZU5vZGU+KGJhc2VUeXBl
TmFtZU5vZGUpKTsKKyAgICAgICAgYXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8QXJyYXlUeXBl
TmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpOworICAgICAgICBBU1NFUlQoYmFzZVR5cGVOYW1l
Tm9kZS5wYXJlbnQoKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
InR5cGVkZWYgQXJyYXk8IiwgYXJyYXlUeXBlLnBhcmVudCgpLT5tYW5nbGVkTmFtZSgpLCAiLCAi
LCBhcnJheVR5cGUubnVtRWxlbWVudHMoKSwgIj4gIiwgYXJyYXlUeXBlLm1hbmdsZWROYW1lKCks
ICI7XG4iKSk7CisgICAgfQorICAgIGVtaXR0ZWRVbm5hbWVkVHlwZXMuYWRkKCZiYXNlVHlwZU5h
bWVOb2RlKTsKK30KKwordm9pZCBUeXBlTmFtZXI6OmVtaXROYW1lZFR5cGVEZWZpbml0aW9uKEFT
VDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUsIEhhc2hTZXQ8QVNUOjpOYW1lZFR5cGUqPiYgZW1pdHRl
ZE5hbWVkVHlwZXMsIEhhc2hTZXQ8QmFzZVR5cGVOYW1lTm9kZSo+JiBlbWl0dGVkVW5uYW1lZFR5
cGVzLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQoreworICAgIGlmIChlbWl0dGVkTmFt
ZWRUeXBlcy5jb250YWlucygmbmFtZWRUeXBlKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8g
aXRlcmF0b3IgPSBtX2RlcGVuZGVuY3lHcmFwaC5maW5kKCZuYW1lZFR5cGUpOworICAgIEFTU0VS
VChpdGVyYXRvciAhPSBtX2RlcGVuZGVuY3lHcmFwaC5lbmQoKSk7CisgICAgZm9yIChhdXRvJiBi
YXNlVHlwZU5hbWVOb2RlIDogaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICBlbWl0VW5uYW1lZFR5
cGVEZWZpbml0aW9uKGJhc2VUeXBlTmFtZU5vZGUsIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVk
VW5uYW1lZFR5cGVzLCBzdHJpbmdCdWlsZGVyKTsKKyAgICBpZiAoaXM8QVNUOjpFbnVtZXJhdGlv
bkRlZmluaXRpb24+KG5hbWVkVHlwZSkpIHsKKyAgICAgICAgLy8gV2UgYWxyZWFkeSBlbWl0dGVk
IHRoaXMgaW4gdGhlIHR5cGUgZGVjbGFyYXRpb24gc2VjdGlvbi4gVGhlcmUncyBub3RoaW5nIHRv
IGRvLgorICAgIH0gZWxzZSBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVk
VHlwZSkpIHsKKyAgICAgICAgLy8gTmF0aXZlIHR5cGVzIGFscmVhZHkgaGF2ZSBkZWZpbml0aW9u
cy4gVGhlcmUncyBub3RoaW5nIHRvIGRvLgorICAgIH0gZWxzZSBpZiAoaXM8QVNUOjpTdHJ1Y3R1
cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpKSB7CisgICAgICAgIGF1dG8mIHN0cnVjdHVyZURlZmlu
aXRpb24gPSBkb3duY2FzdDxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSk7Cisg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInN0cnVjdCAiLCBtYW5nbGVk
TmFtZUZvclR5cGUoc3RydWN0dXJlRGVmaW5pdGlvbiksICIge1xuIikpOworICAgICAgICBmb3Ig
KGF1dG8mIHN0cnVjdHVyZUVsZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLnN0cnVjdHVyZUVs
ZW1lbnRzKCkpCisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIg
ICAgIiwgbWFuZ2xlZE5hbWVGb3JUeXBlKHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpKSwgJyAnLCBt
YW5nbGVkTmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoc3RydWN0dXJlRWxlbWVudCksICI7XG4iKSk7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9O1xuIik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgQVNTRVJUKGlzPEFTVDo6VHlwZURlZmluaXRpb24+KG5hbWVkVHlwZSkpOworICAgICAg
ICBhdXRvJiB0eXBlRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6VHlwZURlZmluaXRpb24+KG5h
bWVkVHlwZSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInR5cGVk
ZWYgIiwgbWFuZ2xlZE5hbWVGb3JUeXBlKHR5cGVEZWZpbml0aW9uLnR5cGUoKSksICcgJywgbWFu
Z2xlZE5hbWVGb3JUeXBlKHR5cGVEZWZpbml0aW9uKSwgIjtcbiIpKTsKKyAgICB9CisgICAgZW1p
dHRlZE5hbWVkVHlwZXMuYWRkKCZuYW1lZFR5cGUpOworfQorCitTdHJpbmcgVHlwZU5hbWVyOjpt
ZXRhbFR5cGVEZWZpbml0aW9ucygpCit7CisgICAgSGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+IGVt
aXR0ZWROYW1lZFR5cGVzOworICAgIEhhc2hTZXQ8QmFzZVR5cGVOYW1lTm9kZSo+IGVtaXR0ZWRV
bm5hbWVkVHlwZXM7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIGZvciAo
YXV0byYga2V5VmFsdWVQYWlyIDogbV9kZXBlbmRlbmN5R3JhcGgpCisgICAgICAgIGVtaXROYW1l
ZFR5cGVEZWZpbml0aW9uKCprZXlWYWx1ZVBhaXIua2V5LCBlbWl0dGVkTmFtZWRUeXBlcywgZW1p
dHRlZFVubmFtZWRUeXBlcywgc3RyaW5nQnVpbGRlcik7CisgICAgZm9yIChhdXRvJiBiYXNlVHlw
ZU5hbWVOb2RlIDogbV90cmllKQorICAgICAgICBlbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKGJh
c2VUeXBlTmFtZU5vZGUsIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVzLCBz
dHJpbmdCdWlsZGVyKTsKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQor
CitTdHJpbmcgVHlwZU5hbWVyOjptYW5nbGVkTmFtZUZvclR5cGUoQVNUOjpVbm5hbWVkVHlwZSYg
dW5uYW1lZFR5cGUpCit7CisgICAgcmV0dXJuIGZpbmQodW5uYW1lZFR5cGUsIG1fdHJpZSkubWFu
Z2xlZE5hbWUoKTsKK30KKworU3RyaW5nIFR5cGVOYW1lcjo6bWFuZ2xlZE5hbWVGb3JUeXBlKEFT
VDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUpCit7CisgICAgaWYgKGlzPEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uPihuYW1lZFR5cGUpKQorICAgICAgICByZXR1cm4gbWFuZ2xlZE5hbWVGb3JUeXBl
KGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKTsKKyAgICBh
dXRvIGl0ZXJhdG9yID0gbV9uYW1lZFR5cGVNYXBwaW5nLmZpbmQoJm5hbWVkVHlwZSk7CisgICAg
QVNTRVJUKGl0ZXJhdG9yICE9IG1fbmFtZWRUeXBlTWFwcGluZy5lbmQoKSk7CisgICAgcmV0dXJu
IGl0ZXJhdG9yLT52YWx1ZTsKK30KKworCitTdHJpbmcgVHlwZU5hbWVyOjptYW5nbGVkTmFtZUZv
ckVudW1lcmF0aW9uTWVtYmVyKEFTVDo6RW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVt
YmVyKQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBtX2VudW1lcmF0aW9uTWVtYmVyTWFwcGluZy5m
aW5kKCZlbnVtZXJhdGlvbk1lbWJlcik7CisgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fZW51bWVy
YXRpb25NZW1iZXJNYXBwaW5nLmVuZCgpKTsKKyAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlOwor
fQorCitTdHJpbmcgVHlwZU5hbWVyOjptYW5nbGVkTmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoQVNU
OjpTdHJ1Y3R1cmVFbGVtZW50JiBzdHJ1Y3R1cmVFbGVtZW50KQoreworICAgIGF1dG8gaXRlcmF0
b3IgPSBtX3N0cnVjdHVyZUVsZW1lbnRNYXBwaW5nLmZpbmQoJnN0cnVjdHVyZUVsZW1lbnQpOwor
ICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX3N0cnVjdHVyZUVsZW1lbnRNYXBwaW5nLmVuZCgpKTsK
KyAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlOworfQorCitTdHJpbmcgVHlwZU5hbWVyOjptZXRh
bFR5cGVzKCkKK3sKKyAgICBWaXNpdG9yOjp2aXNpdChtX3Byb2dyYW0pOworICAgIFN0cmluZ0J1
aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtZXRhbFR5cGVE
ZWNsYXJhdGlvbnMoKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQobWV0YWxUeXBlRGVmaW5pdGlvbnMoKSk7CisgICAgcmV0dXJuIHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30KKworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5
cGVOYW1lci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hM
U0xUeXBlTmFtZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNzI3YTJkMzRiMjJlYmFkN2RlOTJmNjI0Y2FkNThm
YWZlMWY4MGU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuaApAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldI
TFNMVmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRl
bmF0ZU51bWJlcnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKwor
Y2xhc3MgRW51bWVyYXRpb25EZWZpbml0aW9uOworY2xhc3MgRW51bWVyYXRpb25NZW1iZXI7Citj
bGFzcyBOYW1lZFR5cGU7CitjbGFzcyBOYXRpdmVUeXBlRGVjbGFyYXRpb247CitjbGFzcyBTdHJ1
Y3R1cmVEZWZpbml0aW9uOworY2xhc3MgVHlwZURlZmluaXRpb247CitjbGFzcyBVbm5hbWVkVHlw
ZTsKKworfQorCitjbGFzcyBQcm9ncmFtOworCituYW1lc3BhY2UgTWV0YWwgeworCitjbGFzcyBC
YXNlVHlwZU5hbWVOb2RlOworCitjbGFzcyBUeXBlTmFtZXIgOiBwcml2YXRlIFZpc2l0b3Igewor
cHVibGljOgorICAgIFR5cGVOYW1lcihQcm9ncmFtJik7CisgICAgdmlydHVhbCB+VHlwZU5hbWVy
KCk7CisKKyAgICBTdHJpbmcgbWV0YWxUeXBlcygpOworCisgICAgLy8gTXVzdCBiZSBjYWxsZWQg
YWZ0ZXIgY2FsbGluZyBtZXRhbFR5cGVzKCkuCisgICAgU3RyaW5nIG1hbmdsZWROYW1lRm9yVHlw
ZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworICAgIFN0cmluZyBtYW5nbGVkTmFtZUZv
clR5cGUoQVNUOjpVbm5hbWVkVHlwZSYpOworICAgIFN0cmluZyBtYW5nbGVkTmFtZUZvclR5cGUo
QVNUOjpOYW1lZFR5cGUmKTsKKyAgICBTdHJpbmcgbWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1l
bWJlcihBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJik7CisgICAgU3RyaW5nIG1hbmdsZWROYW1lRm9y
U3RydWN0dXJlRWxlbWVudChBU1Q6OlN0cnVjdHVyZUVsZW1lbnQmKTsKKworcHJpdmF0ZToKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6VW5uYW1lZFR5cGUmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0
KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNU
OjpTdHJ1Y3R1cmVEZWZpbml0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlR5
cGVEZWZpbml0aW9uJikgb3ZlcnJpZGU7CisKKyAgICBTdHJpbmcgZ2VuZXJhdGVOZXh0VHlwZU5h
bWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoInR5cGUiLCBtX3R5cGVDb3Vu
dCsrKTsKKyAgICB9CisKKyAgICBTdHJpbmcgZ2VuZXJhdGVOZXh0RW51bWVyYXRpb25NZW1iZXJO
YW1lKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJlbnVtZXJhdGlvbk1lbWJl
ciIsIG1fZW51bWVyYXRpb25NZW1iZXJDb3VudCsrKTsKKyAgICB9CisKKyAgICBTdHJpbmcgZ2Vu
ZXJhdGVOZXh0U3RydWN0dXJlRWxlbWVudE5hbWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1h
a2VTdHJpbmcoInN0cnVjdHVyZUVsZW1lbnQiLCBtX3N0cnVjdHVyZUVsZW1lbnRDb3VudCsrKTsK
KyAgICB9CisKKworICAgIHZvaWQgZW1pdE5hbWVkVHlwZURlZmluaXRpb24oQVNUOjpOYW1lZFR5
cGUmLCBIYXNoU2V0PEFTVDo6TmFtZWRUeXBlKj4mIGVtaXR0ZWROYW1lZFR5cGVzLCBIYXNoU2V0
PEJhc2VUeXBlTmFtZU5vZGUqPiYgZW1pdHRlZFVubmFtZWRUeXBlcywgU3RyaW5nQnVpbGRlciYp
OworICAgIHZvaWQgZW1pdFVubmFtZWRUeXBlRGVmaW5pdGlvbihCYXNlVHlwZU5hbWVOb2RlJiwg
SGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+JiBlbWl0dGVkTmFtZWRUeXBlcywgSGFzaFNldDxCYXNl
VHlwZU5hbWVOb2RlKj4mIGVtaXR0ZWRVbm5hbWVkVHlwZXMsIFN0cmluZ0J1aWxkZXImKTsKKyAg
ICBTdHJpbmcgbWV0YWxUeXBlRGVjbGFyYXRpb25zKCk7CisgICAgU3RyaW5nIG1ldGFsVHlwZURl
ZmluaXRpb25zKCk7CisKKyAgICBVbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4gY3JlYXRlTmFt
ZU5vZGUoQVNUOjpVbm5hbWVkVHlwZSYsIEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVudCk7CisgICAg
c2l6ZV90IGluc2VydChBU1Q6OlVubmFtZWRUeXBlJiwgVmVjdG9yPFVuaXF1ZVJlZjxCYXNlVHlw
ZU5hbWVOb2RlPj4mKTsKKworICAgIFByb2dyYW0mIG1fcHJvZ3JhbTsKKyAgICBWZWN0b3I8VW5p
cXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+PiBtX3RyaWU7CisgICAgSGFzaE1hcDxBU1Q6OlVubmFt
ZWRUeXBlKiwgQmFzZVR5cGVOYW1lTm9kZSo+IG1fdW5uYW1lZFR5cGVNYXBwaW5nOworICAgIEhh
c2hNYXA8QVNUOjpOYW1lZFR5cGUqLCBTdHJpbmc+IG1fbmFtZWRUeXBlTWFwcGluZzsKKyAgICBI
YXNoTWFwPEFTVDo6TmFtZWRUeXBlKiwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QmFz
ZVR5cGVOYW1lTm9kZT4+PiBtX2RlcGVuZGVuY3lHcmFwaDsKKyAgICBIYXNoTWFwPEFTVDo6RW51
bWVyYXRpb25NZW1iZXIqLCBTdHJpbmc+IG1fZW51bWVyYXRpb25NZW1iZXJNYXBwaW5nOworICAg
IEhhc2hNYXA8QVNUOjpTdHJ1Y3R1cmVFbGVtZW50KiwgU3RyaW5nPiBtX3N0cnVjdHVyZUVsZW1l
bnRNYXBwaW5nOworICAgIHVuc2lnbmVkIG1fdHlwZUNvdW50IHsgMCB9OworICAgIHVuc2lnbmVk
IG1fZW51bWVyYXRpb25NZW1iZXJDb3VudCB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX3N0cnVjdHVy
ZUVsZW1lbnRDb3VudCB7IDAgfTsKK307CisKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAK
aW5kZXggNjBiMGVmZWVjYWMyNDYzZTUxYThlYzEyM2RjY2Y3YTIwYTQ2ZjllNi4uM2M3ZTg5MzAy
MzM1ODY3YmZjNzFhNTlmNGM4Y2M1ZjdlNWVmNTQ5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCkBAIC02MTIsMTYgKzYx
MiwxMiBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBl
bnVtZXJhdGlvbkRlZmluaXRpb24pCiAgICAgYXV0byogYmFzZVR5cGUgPSAoWyZdKCkgLT4gQVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIHsKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGVu
dW1lcmF0aW9uRGVmaW5pdGlvbi50eXBlKCkpOwogICAgICAgICBhdXRvJiBiYXNlVHlwZSA9IGVu
dW1lcmF0aW9uRGVmaW5pdGlvbi50eXBlKCkudW5pZnlOb2RlKCk7Ci0gICAgICAgIGlmICghaXM8
QVNUOjpVbm5hbWVkVHlwZT4oYmFzZVR5cGUpKQorICAgICAgICBpZiAoIWlzPEFTVDo6TmFtZWRU
eXBlPihiYXNlVHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgYXV0
byYgdW5uYW1lZEJhc2UgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPihiYXNlVHlwZSk7Ci0g
ICAgICAgIGlmICghaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkQmFzZSkpCisgICAgICAg
IGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPihiYXNlVHlwZSk7Cisg
ICAgICAgIGlmICghaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgYXV0byYgdHlwZVJlZmVyZW5jZUJh
c2UgPSBkb3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRCYXNlKTsKLSAgICAgICAg
QVNTRVJUKHR5cGVSZWZlcmVuY2VCYXNlLnJlc29sdmVkVHlwZSgpKTsKLSAgICAgICAgaWYgKCFp
czxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVuY2VCYXNlLnJlc29sdmVk
VHlwZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBhdXRvJiBuYXRp
dmVUeXBlRGVjbGFyYXRpb24gPSBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4o
KnR5cGVSZWZlcmVuY2VCYXNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgYXV0byYgbmF0aXZl
VHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5h
bWVkVHlwZSk7CiAgICAgICAgIGlmICghbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzSW50KCkpCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuICZuYXRpdmVUeXBlRGVj
bGFyYXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGI2MTI0MTkyY2U5NDQ1MmY2ZDFmZTRiYmYzMDlm
Y2RhYzQxYjQ3MmEuLmVhNzY4NGU4MzZkMmUwMWFkY2E4YTY3YjU3YzEyYzczNTJlNThiZWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CkBAIC0zMjYsNiArMzI2LDggQEAgTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xWaXNpdG9yLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMaXRlcmFsVHlwZUNoZWNr
ZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEhpZ2hab21iaWVGaW5kZXIuY3BwCiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExvb3BDaGVja2VyLmNwcAorTW9kdWxlcy93ZWJncHUv
V0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xGdW5j
dGlvblN0YWdlQ2hlY2tlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVB
cmd1bWVudC5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRp
Yy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA1ZWEwOWIwYmM3YjFjZTExNTg0ZjJkNjg5ODM0ZGIyNzU0ODY0YmE0Li44NmU3
NjlkYjg5NmQwMTRiMWI0OTcyNTY2OGI4ZmU2ZjBkZTJmODQyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NDMwLDE3ICs2NDMw
LDE2IEBACiAJCTFDODQwQjlBMjFFQzQwMDkwMEQwNTAwRCAvKiBXSExTTEdhdGhlckVudHJ5UG9p
bnRJdGVtcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzg0MEI5QjIxRUM0MDA5MDBEMDUwMEQgLyog
V0hMU0xDaGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMQ2hlY2tlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDOTA0REY5MEJBOUQyQzgwMDgxRTlEMCAvKiBW
ZXJzaW9uLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IFZlcnNpb24u
eGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFDQTBDMkU0MjFFRUQxMkEw
MEExMTg2MCAvKiBXSExTTEZ1bmN0aW9uU3RhZ2VDaGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdITFNMRnVuY3Rpb25TdGFnZUNoZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkxQ0EwQzJFNTIxRUVEMTJBMDBBMTE4NjAgLyogV0hMU0xGdW5jdGlvblN0YWdlQ2hl
Y2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEZ1bmN0aW9uU3RhZ2VDaGVja2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDOUFFNUNBMjFFRDlERjUwMDY5RDVGMiAvKiBXSExT
TEhpZ2hab21iaWVGaW5kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xIaWdoWm9tYmll
RmluZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM5QUU1Q0IyMUVEOURG
NTAwNjlENUYyIC8qIFdITFNMSGlnaFpvbWJpZUZpbmRlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExT
TEhpZ2hab21iaWVGaW5kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBMEMy
REUyMUVFQjVGNDAwQTExODYwIC8qIFdITFNMUmVjdXJzaW9uQ2hlY2tlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXSExTTFJlY3Vyc2lvbkNoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUNBMEMyRTAyMUVFQjVGNTAwQTExODYwIC8qIFdITFNMUmVjdXJzaW9uQ2hlY2tlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFJlY3Vyc2lvbkNoZWNrZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxQ0EwQzJFNDIxRUVEMTJBMDBBMTE4NjAgLyogV0hMU0xGdW5j
dGlvblN0YWdlQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTEZ1bmN0aW9uU3Rh
Z2VDaGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNBMEMyRTUyMUVF
RDEyQTAwQTExODYwIC8qIFdITFNMRnVuY3Rpb25TdGFnZUNoZWNrZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0hMU0xGdW5jdGlvblN0YWdlQ2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQ0EwQzJFQTIxRUVENkY1MDBBMTE4NjAgLyogV0hMU0xMaXRlcmFsVHlwZUNoZWNrZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xMaXRlcmFsVHlwZUNoZWNrZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUNBMEMyRUMyMUVFRDZGNjAwQTExODYwIC8qIFdITFNMTGl0ZXJh
bFR5cGVDaGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMTGl0ZXJhbFR5cGVDaGVj
a2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUM5QUU1Q0EyMUVEOURGNTAw
NjlENUYyIC8qIFdITFNMSGlnaFpvbWJpZUZpbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
SExTTEhpZ2hab21iaWVGaW5kZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkx
QzlBRTVDQjIxRUQ5REY1MDA2OUQ1RjIgLyogV0hMU0xIaWdoWm9tYmllRmluZGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdITFNMSGlnaFpvbWJpZUZpbmRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQ0EwQzJGNDIxRUVEQUQwMDBBMTE4NjAgLyogV0hMU0xMb29wQ2hlY2tlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTExvb3BDaGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUNBMEMyRjUyMUVFREFEMTAwQTExODYwIC8qIFdITFNMTG9vcENoZWNr
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xMb29wQ2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkxQ0EwQzJGNjIxRUVEQUQyMDBBMTE4NjAgLyogQVNUICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZm9sZGVyOyBwYXRoID0gQVNU
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0ExOUUwMzBEQzI1NTk1MDA2NUE5OTQg
LyogRXZlbnRMb29wTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gRXZlbnRMb29wTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0ExOUUx
NTBEQzI1NUNBMDA2NUE5OTQgLyogRXZlbnRMb29wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEV2ZW50TG9vcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0FG
MzQ3RTBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNjcmlwdE9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNjQ1Nyw2ICs2NDU2LDggQEAKIAkJMUNCNjlCM0IyMURGMDQxRTAwNkU4NDZB
IC8qIFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFDQjZCNEY4MjE3QjgzOTMwMDkzQjlDRCAvKiBUZXh0RGVjb3JhdGlvblRo
aWNrbmVzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0RGVjb3JhdGlvblRoaWNrbmVzcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0I2QjRGQjIxN0I4Mzk0MDA5M0I5Q0QgLyogVGV4
dFVuZGVybGluZU9mZnNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0VW5kZXJsaW5lT2Zmc2V0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQzgzREUxMjFGMTVEM0QwMDY0MDQyRSAv
KiBXSExTTEZ1bmN0aW9uV3JpdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMRnVuY3Rp
b25Xcml0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0M4M0RFMjIxRjE1
RDNEMDA2NDA0MkUgLyogV0hMU0xGdW5jdGlvbldyaXRlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExT
TEZ1bmN0aW9uV3JpdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQ0RGNUJC
MTk5MDMzMjQwMEJDRUJBRCAvKiBTVkdUb09URkZvbnRDb252ZXJzaW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0NERjVCQzE5OTAzMzI0MDBCQ0VCQUQgLyog
U1ZHVG9PVEZGb250Q29udmVyc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTVkdUb09URkZvbnRDb252ZXJzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFDREQ0NUU0MEJBOUM4NDYwMEY5MDE0NyAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gRGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMzOTEsNiArMTMzOTIsOCBAQAogCQlDMjQ1OEU2MTFG
RTg5NzlFMDA1OTQ3NTkgLyogRm9udENhY2hlQ29yZVRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9u
dENhY2hlQ29yZVRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI2MDE3QTEx
QzcyREM5OTAwRjc0QTE2IC8qIENTU0ZvbnRGYWNlU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZvbnRGYWNlU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQzI2MDE3QTIxQzcyREM5OTAwRjc0QTE2IC8qIENTU0ZvbnRGYWNlU2V0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0ZvbnRGYWNlU2V0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyNkQyQzcwMjFGMDVENTUwMDQ5Nzg5OSAvKiBXSExT
TFR5cGVOYW1lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFR5cGVOYW1lci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyNkQyQzcxMjFGMDVENTUwMDQ5Nzg5OSAvKiBX
SExTTFR5cGVOYW1lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFR5cGVOYW1lci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDMjgwODMzQzFDNkRCMTk0MDAxNDUxQjYgLyogRm9udEZh
Y2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEZvbnRGYWNlLmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQzI4MDgzM0QxQzZEQzIyQzAwMTQ1MUI2IC8qIEpTRm9udEZhY2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNGb250RmFjZS5jcHA7
IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRm9udEZhY2UuY3BwOyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlDMjgwODMzRTFDNkRDMjJDMDAxNDUxQjYgLyog
SlNGb250RmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU0ZvbnRGYWNl
Lmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRm9udEZhY2UuaDsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTE3MDM4LDYgKzE3MDQxLDEwMCBAQAogCQkJ
dGFiV2lkdGggPSA4OwogCQkJdXNlc1RhYnMgPSAwOwogCQl9OworCQkxQ0EwQzJGNjIxRUVEQUQy
MDBBMTE4NjAgLyogQVNUICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQkxQzg0MEI5MDIxRUMzMEY5MDBEMDUwMEQgLyogV0hMU0xBZGRyZXNzU3BhY2UuaCAq
LywKKwkJCQlDMjFCRjcyNTIxQ0Q4OUUyMDAyMjc5NzkgLyogV0hMU0xBcnJheVJlZmVyZW5jZVR5
cGUuaCAqLywKKwkJCQlDMjFCRjcwOTIxQ0Q4OUNBMDAyMjc5NzkgLyogV0hMU0xBcnJheVR5cGUu
aCAqLywKKwkJCQlDMjFCRjczMDIxQ0Q4OUVEMDAyMjc5NzkgLyogV0hMU0xBc3NpZ25tZW50RXhw
cmVzc2lvbi5oICovLAorCQkJCUMyMUJGNzBBMjFDRDg5Q0IwMDIyNzk3OSAvKiBXSExTTEJhc2VG
dW5jdGlvbkF0dHJpYnV0ZS5oICovLAorCQkJCUMyMUJGNkZBMjFDRDg5QkUwMDIyNzk3OSAvKiBX
SExTTEJhc2VTZW1hbnRpYy5oICovLAorCQkJCUMyMUJGNzFFMjFDRDg5REMwMDIyNzk3OSAvKiBX
SExTTEJsb2NrLmggKi8sCisJCQkJQzIxQkY2RjYyMUNEODlCNzAwMjI3OTc5IC8qIFdITFNMQm9v
bGVhbkxpdGVyYWwuaCAqLywKKwkJCQlDMjFCRjcxQTIxQ0Q4OUQ4MDAyMjc5NzkgLyogV0hMU0xC
cmVhay5oICovLAorCQkJCUMyMTM4QTEzMjFEREVDRDMwMEY1MTZCQSAvKiBXSExTTEJ1aWx0SW5T
ZW1hbnRpYy5jcHAgKi8sCisJCQkJQzIxQkY3MjIyMUNEODlERjAwMjI3OTc5IC8qIFdITFNMQnVp
bHRJblNlbWFudGljLmggKi8sCisJCQkJQzIxQkY3MTYyMUNEODlENTAwMjI3OTc5IC8qIFdITFNM
Q2FsbEV4cHJlc3Npb24uaCAqLywKKwkJCQlDMjFCRjcwNjIxQ0Q4OUM3MDAyMjc5NzkgLyogV0hM
U0xDb21tYUV4cHJlc3Npb24uaCAqLywKKwkJCQlDMjFCRjczMzIxQ0Q4OUYwMDAyMjc5NzkgLyog
V0hMU0xDb25zdGFudEV4cHJlc3Npb24uaCAqLywKKwkJCQlDMjFCRjZGNTIxQ0Q4OUI1MDAyMjc5
NzkgLyogV0hMU0xDb250aW51ZS5oICovLAorCQkJCUMyMUJGNzAxMjFDRDg5QzQwMDIyNzk3OSAv
KiBXSExTTERlcmVmZXJlbmNlRXhwcmVzc2lvbi5oICovLAorCQkJCUMyMUJGNzE4MjFDRDg5RDcw
MDIyNzk3OSAvKiBXSExTTERvdEV4cHJlc3Npb24uaCAqLywKKwkJCQlDMjFCRjZGQjIxQ0Q4OUJF
MDAyMjc5NzkgLyogV0hMU0xEb1doaWxlTG9vcC5oICovLAorCQkJCUMyMUJGNzI4MjFDRDg5RTUw
MDIyNzk3OSAvKiBXSExTTEVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQuaCAqLywKKwkJCQkx
Qzg0MEI3RDIxRUJFMEI4MDBEMDUwMEQgLyogV0hMU0xFbnRyeVBvaW50VHlwZS5oICovLAorCQkJ
CUMyMUJGNzIwMjFDRDg5REQwMDIyNzk3OSAvKiBXSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5o
ICovLAorCQkJCUMyMUJGNzI2MjFDRDg5RTMwMDIyNzk3OSAvKiBXSExTTEVudW1lcmF0aW9uTWVt
YmVyLmggKi8sCisJCQkJQzIxQkY3MDIyMUNEODlDNDAwMjI3OTc5IC8qIFdITFNMRW51bWVyYXRp
b25NZW1iZXJMaXRlcmFsLmggKi8sCisJCQkJQzIxQkY3MEMyMUNEODlDQzAwMjI3OTc5IC8qIFdI
TFNMRXhwcmVzc2lvbi5oICovLAorCQkJCUMyMUJGNzAwMjFDRDg5QzIwMDIyNzk3OSAvKiBXSExT
TEZhbGx0aHJvdWdoLmggKi8sCisJCQkJQzIxQkY3MzUyMUNEODlGMjAwMjI3OTc5IC8qIFdITFNM
RmxvYXRMaXRlcmFsLmggKi8sCisJCQkJMUNCNjlCMzgyMURGMDNFMTAwNkU4NDZBIC8qIFdITFNM
RmxvYXRMaXRlcmFsVHlwZS5jcHAgKi8sCisJCQkJMUNCNjlCMzQyMURFRDYzQTAwNkU4NDZBIC8q
IFdITFNMRmxvYXRMaXRlcmFsVHlwZS5oICovLAorCQkJCUMyMUJGNzM0MjFDRDg5RjEwMDIyNzk3
OSAvKiBXSExTTEZvckxvb3AuaCAqLywKKwkJCQlDMjFCRjcwNTIxQ0Q4OUM3MDAyMjc5NzkgLyog
V0hMU0xGdW5jdGlvbkF0dHJpYnV0ZS5oICovLAorCQkJCUMyMUJGNkZEMjFDRDg5QzAwMDIyNzk3
OSAvKiBXSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaCAqLywKKwkJCQlDMjFCRjZGNDIxQ0Q4OUIz
MDAyMjc5NzkgLyogV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCAqLywKKwkJCQlDMjFCRjZGRjIx
Q0Q4OUMyMDAyMjc5NzkgLyogV0hMU0xJZlN0YXRlbWVudC5oICovLAorCQkJCUMyMUJGNkY3MjFD
RDg5QjkwMDIyNzk3OSAvKiBXSExTTEluZGV4RXhwcmVzc2lvbi5oICovLAorCQkJCUMyMEY0RjY2
MjFERkYyMzYwMDcwQzQ1QSAvKiBXSExTTEludGVnZXJMaXRlcmFsLmNwcCAqLywKKwkJCQlDMjFC
RjZGODIxQ0Q4OUJCMDAyMjc5NzkgLyogV0hMU0xJbnRlZ2VyTGl0ZXJhbC5oICovLAorCQkJCTFD
QjY5QjM5MjFERjAzRjMwMDZFODQ2QSAvKiBXSExTTEludGVnZXJMaXRlcmFsVHlwZS5jcHAgKi8s
CisJCQkJMUNCNjlCMzUyMURFRDY0OTAwNkU4NDZBIC8qIFdITFNMSW50ZWdlckxpdGVyYWxUeXBl
LmggKi8sCisJCQkJQzIxQkY3MzIyMUNEODlFRjAwMjI3OTc5IC8qIFdITFNMTG9naWNhbEV4cHJl
c3Npb24uaCAqLywKKwkJCQlDMjFCRjcxNTIxQ0Q4OUQ0MDAyMjc5NzkgLyogV0hMU0xMb2dpY2Fs
Tm90RXhwcmVzc2lvbi5oICovLAorCQkJCUMyMUJGNzJEMjFDRDg5RTkwMDIyNzk3OSAvKiBXSExT
TE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaCAqLywKKwkJCQlDMjFCRjcyQzIxQ0Q4OUU5
MDAyMjc5NzkgLyogV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaCAqLywKKwkJCQkxQzMzMjc3
MTIxQ0YwQkUxMDAwREM5RjIgLyogV0hMU0xOYW1lZFR5cGUuaCAqLywKKwkJCQlDMjFCRjcyMzIx
Q0Q4OUUxMDAyMjc5NzkgLyogV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmggKi8sCisJ
CQkJQzIxQkY3MkEyMUNEODlFNzAwMjI3OTc5IC8qIFdITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9u
LmggKi8sCisJCQkJQzIxQkY3MjQyMUNEODlFMTAwMjI3OTc5IC8qIFdITFNMTm9kZS5oICovLAor
CQkJCUMyMUJGNzA3MjFDRDg5QzgwMDIyNzk3OSAvKiBXSExTTE51bGxMaXRlcmFsLmggKi8sCisJ
CQkJMUNCNjlCM0EyMURGMDQwMzAwNkU4NDZBIC8qIFdITFNMTnVsbExpdGVyYWxUeXBlLmNwcCAq
LywKKwkJCQkxQ0I2OUIzNjIxREVENjU3MDA2RTg0NkEgLyogV0hMU0xOdWxsTGl0ZXJhbFR5cGUu
aCAqLywKKwkJCQlDMjFCRjcyMTIxQ0Q4OURFMDAyMjc5NzkgLyogV0hMU0xOdW1UaHJlYWRzRnVu
Y3Rpb25BdHRyaWJ1dGUuaCAqLywKKwkJCQlDMjFCRjcyRjIxQ0Q4OUVDMDAyMjc5NzkgLyogV0hM
U0xQb2ludGVyVHlwZS5oICovLAorCQkJCUMyMUJGNzJFMjFDRDg5RUEwMDIyNzk3OSAvKiBXSExT
TFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oICovLAorCQkJCUMyMUJGNzBCMjFDRDg5Q0MwMDIy
Nzk3OSAvKiBXSExTTFF1YWxpZmllci5oICovLAorCQkJCUMyMUJGNzFCMjFDRDg5RDkwMDIyNzk3
OSAvKiBXSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaCAqLywKKwkJCQlDMjFCRjcwRDIx
Q0Q4OUNEMDAyMjc5NzkgLyogV0hMU0xSZWZlcmVuY2VUeXBlLmggKi8sCisJCQkJMUNCNjlCMzIy
MURFRDQwQjAwNkU4NDZBIC8qIFdITFNMUmVzb2x2YWJsZVR5cGUuaCAqLywKKwkJCQlDMjEzOEEx
NTIxRERFQ0U5MDBGNTE2QkEgLyogV0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcCAqLywKKwkJCQlD
MjFCRjcwODIxQ0Q4OUM5MDAyMjc5NzkgLyogV0hMU0xSZXNvdXJjZVNlbWFudGljLmggKi8sCisJ
CQkJQzIxQkY3MDMyMUNEODlDNTAwMjI3OTc5IC8qIFdITFNMUmV0dXJuLmggKi8sCisJCQkJQzIx
QkY2RjkyMUNEODlCRDAwMjI3OTc5IC8qIFdITFNMU2VtYW50aWMuaCAqLywKKwkJCQlDMjEzOEEx
NjIxRERFQ0ZCMDBGNTE2QkEgLyogV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMu
Y3BwICovLAorCQkJCUMyMUJGNzM2MjFDRDg5RjMwMDIyNzk3OSAvKiBXSExTTFNwZWNpYWxpemF0
aW9uQ29uc3RhbnRTZW1hbnRpYy5oICovLAorCQkJCUMyMTM4QTE3MjFEREVEMEQwMEY1MTZCQSAv
KiBXSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5jcHAgKi8sCisJCQkJQzIxQkY3MEUyMUNEODlDRTAw
MjI3OTc5IC8qIFdITFNMU3RhZ2VJbk91dFNlbWFudGljLmggKi8sCisJCQkJQzIxQkY3MTIyMUNE
ODlEMTAwMjI3OTc5IC8qIFdITFNMU3RhdGVtZW50LmggKi8sCisJCQkJQzIxQkY3MjcyMUNEODlF
NDAwMjI3OTc5IC8qIFdITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oICovLAorCQkJCUMyMUJGNkZF
MjFDRDg5QzEwMDIyNzk3OSAvKiBXSExTTFN0cnVjdHVyZUVsZW1lbnQuaCAqLywKKwkJCQlDMjFC
RjcxOTIxQ0Q4OUQ3MDAyMjc5NzkgLyogV0hMU0xTd2l0Y2hDYXNlLmggKi8sCisJCQkJQzIxQkY3
MzEyMUNEODlFRTAwMjI3OTc5IC8qIFdITFNMU3dpdGNoU3RhdGVtZW50LmggKi8sCisJCQkJQzIx
QkY3MUMyMUNEODlEQTAwMjI3OTc5IC8qIFdITFNMVGVybmFyeUV4cHJlc3Npb24uaCAqLywKKwkJ
CQlDMjFCRjZGMzIxQ0Q4OUFEMDAyMjc5NzkgLyogV0hMU0xUcmFwLmggKi8sCisJCQkJQzIxQkY3
MUQyMUNEODlEQjAwMjI3OTc5IC8qIFdITFNMVHlwZS5oICovLAorCQkJCUMyODhDNzJEMjFDOTkx
REEwMDJERjVDQSAvKiBXSExTTFR5cGVBcmd1bWVudC5jcHAgKi8sCisJCQkJQzIxQkY3MTEyMUNE
ODlEMTAwMjI3OTc5IC8qIFdITFNMVHlwZUFyZ3VtZW50LmggKi8sCisJCQkJQzIxQkY3MjkyMUNE
ODlFNjAwMjI3OTc5IC8qIFdITFNMVHlwZURlZmluaXRpb24uaCAqLywKKwkJCQlDMjBGNEY2NDIx
REZCRTVDMDA3MEM0NUEgLyogV0hMU0xUeXBlUmVmZXJlbmNlLmNwcCAqLywKKwkJCQlDMjFCRjcx
RjIxQ0Q4OURDMDAyMjc5NzkgLyogV0hMU0xUeXBlUmVmZXJlbmNlLmggKi8sCisJCQkJMUMzMzI3
NzIyMUNGMEQyRTAwMERDOUYyIC8qIFdITFNMVW5uYW1lZFR5cGUuaCAqLywKKwkJCQlDMjBGNEY2
NzIxREZGM0E3MDA3MEM0NUEgLyogV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmNwcCAqLywK
KwkJCQlDMjFCRjcyQjIxQ0Q4OUU4MDAyMjc5NzkgLyogV0hMU0xVbnNpZ25lZEludGVnZXJMaXRl
cmFsLmggKi8sCisJCQkJMUNCNjlCM0IyMURGMDQxRTAwNkU4NDZBIC8qIFdITFNMVW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbFR5cGUuY3BwICovLAorCQkJCTFDQjY5QjM3MjFERUQ2NkIwMDZFODQ2QSAv
KiBXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmggKi8sCisJCQkJQzIxQkY2RkMyMUNE
ODlCRjAwMjI3OTc5IC8qIFdITFNMVmFsdWUuaCAqLywKKwkJCQlDMjFCRjcxMDIxQ0Q4OUQwMDAy
Mjc5NzkgLyogV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmggKi8sCisJCQkJQzIxQkY3MTQyMUNE
ODlEMzAwMjI3OTc5IC8qIFdITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCAqLywK
KwkJCQlDMjFCRjcxMzIxQ0Q4OUQyMDAyMjc5NzkgLyogV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5o
ICovLAorCQkJCUMyMUJGNzA0MjFDRDg5QzYwMDIyNzk3OSAvKiBXSExTTFdoaWxlTG9vcC5oICov
LAorCQkJKTsKKwkJCXBhdGggPSBBU1Q7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9
OwogCQkxQ0RENDQ2NjBCQTlDODAwMDBGOTAxNDcgLyogQ29uZmlndXJhdGlvbnMgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjU0NjYsNiArMjU1NjMsNyBA
QAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkxQ0EwQzJGNjIxRUVE
QUQyMDBBMTE4NjAgLyogQVNUICovLAorCQkJCUMyNkQyQzZFMjFGMDVDREUwMDQ5Nzg5OSAvKiBN
ZXRhbCAqLywKIAkJCQlDMjM0QTlCMjIxRTkyQzFGMDAzQzk4NEQgLyogV0hMU0xDaGVja0R1cGxp
Y2F0ZUZ1bmN0aW9ucy5jcHAgKi8sCiAJCQkJQzIzNEE5QUUyMUU5MkMxQTAwM0M5ODREIC8qIFdI
TFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaCAqLywKIAkJCQkxQzg0MEI5QjIxRUM0MDA5MDBE
MDUwMEQgLyogV0hMU0xDaGVja2VyLmNwcCAqLywKQEAgLTI1NTE1LDk4ICsyNTYxMywxNSBAQAog
CQkJcGF0aCA9IFdITFNMOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJMUNB
MEMyRjYyMUVFREFEMjAwQTExODYwIC8qIEFTVCAqLyA9IHsKKwkJQzI2RDJDNkUyMUYwNUNERTAw
NDk3ODk5IC8qIE1ldGFsICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKLQkJCQkxQzg0MEI5MDIxRUMzMEY5MDBEMDUwMEQgLyogV0hMU0xBZGRyZXNzU3BhY2UuaCAq
LywKLQkJCQlDMjFCRjcyNTIxQ0Q4OUUyMDAyMjc5NzkgLyogV0hMU0xBcnJheVJlZmVyZW5jZVR5
cGUuaCAqLywKLQkJCQlDMjFCRjcwOTIxQ0Q4OUNBMDAyMjc5NzkgLyogV0hMU0xBcnJheVR5cGUu
aCAqLywKLQkJCQlDMjFCRjczMDIxQ0Q4OUVEMDAyMjc5NzkgLyogV0hMU0xBc3NpZ25tZW50RXhw
cmVzc2lvbi5oICovLAotCQkJCUMyMUJGNzBBMjFDRDg5Q0IwMDIyNzk3OSAvKiBXSExTTEJhc2VG
dW5jdGlvbkF0dHJpYnV0ZS5oICovLAotCQkJCUMyMUJGNkZBMjFDRDg5QkUwMDIyNzk3OSAvKiBX
SExTTEJhc2VTZW1hbnRpYy5oICovLAotCQkJCUMyMUJGNzFFMjFDRDg5REMwMDIyNzk3OSAvKiBX
SExTTEJsb2NrLmggKi8sCi0JCQkJQzIxQkY2RjYyMUNEODlCNzAwMjI3OTc5IC8qIFdITFNMQm9v
bGVhbkxpdGVyYWwuaCAqLywKLQkJCQlDMjFCRjcxQTIxQ0Q4OUQ4MDAyMjc5NzkgLyogV0hMU0xC
cmVhay5oICovLAotCQkJCUMyMTM4QTEzMjFEREVDRDMwMEY1MTZCQSAvKiBXSExTTEJ1aWx0SW5T
ZW1hbnRpYy5jcHAgKi8sCi0JCQkJQzIxQkY3MjIyMUNEODlERjAwMjI3OTc5IC8qIFdITFNMQnVp
bHRJblNlbWFudGljLmggKi8sCi0JCQkJQzIxQkY3MTYyMUNEODlENTAwMjI3OTc5IC8qIFdITFNM
Q2FsbEV4cHJlc3Npb24uaCAqLywKLQkJCQlDMjFCRjcwNjIxQ0Q4OUM3MDAyMjc5NzkgLyogV0hM
U0xDb21tYUV4cHJlc3Npb24uaCAqLywKLQkJCQlDMjFCRjczMzIxQ0Q4OUYwMDAyMjc5NzkgLyog
V0hMU0xDb25zdGFudEV4cHJlc3Npb24uaCAqLywKLQkJCQlDMjFCRjZGNTIxQ0Q4OUI1MDAyMjc5
NzkgLyogV0hMU0xDb250aW51ZS5oICovLAotCQkJCUMyMUJGNzAxMjFDRDg5QzQwMDIyNzk3OSAv
KiBXSExTTERlcmVmZXJlbmNlRXhwcmVzc2lvbi5oICovLAotCQkJCUMyMUJGNzE4MjFDRDg5RDcw
MDIyNzk3OSAvKiBXSExTTERvdEV4cHJlc3Npb24uaCAqLywKLQkJCQlDMjFCRjZGQjIxQ0Q4OUJF
MDAyMjc5NzkgLyogV0hMU0xEb1doaWxlTG9vcC5oICovLAotCQkJCUMyMUJGNzI4MjFDRDg5RTUw
MDIyNzk3OSAvKiBXSExTTEVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQuaCAqLywKLQkJCQkx
Qzg0MEI3RDIxRUJFMEI4MDBEMDUwMEQgLyogV0hMU0xFbnRyeVBvaW50VHlwZS5oICovLAotCQkJ
CUMyMUJGNzIwMjFDRDg5REQwMDIyNzk3OSAvKiBXSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5o
ICovLAotCQkJCUMyMUJGNzI2MjFDRDg5RTMwMDIyNzk3OSAvKiBXSExTTEVudW1lcmF0aW9uTWVt
YmVyLmggKi8sCi0JCQkJQzIxQkY3MDIyMUNEODlDNDAwMjI3OTc5IC8qIFdITFNMRW51bWVyYXRp
b25NZW1iZXJMaXRlcmFsLmggKi8sCi0JCQkJQzIxQkY3MEMyMUNEODlDQzAwMjI3OTc5IC8qIFdI
TFNMRXhwcmVzc2lvbi5oICovLAotCQkJCUMyMUJGNzAwMjFDRDg5QzIwMDIyNzk3OSAvKiBXSExT
TEZhbGx0aHJvdWdoLmggKi8sCi0JCQkJQzIxQkY3MzUyMUNEODlGMjAwMjI3OTc5IC8qIFdITFNM
RmxvYXRMaXRlcmFsLmggKi8sCi0JCQkJMUNCNjlCMzgyMURGMDNFMTAwNkU4NDZBIC8qIFdITFNM
RmxvYXRMaXRlcmFsVHlwZS5jcHAgKi8sCi0JCQkJMUNCNjlCMzQyMURFRDYzQTAwNkU4NDZBIC8q
IFdITFNMRmxvYXRMaXRlcmFsVHlwZS5oICovLAotCQkJCUMyMUJGNzM0MjFDRDg5RjEwMDIyNzk3
OSAvKiBXSExTTEZvckxvb3AuaCAqLywKLQkJCQlDMjFCRjcwNTIxQ0Q4OUM3MDAyMjc5NzkgLyog
V0hMU0xGdW5jdGlvbkF0dHJpYnV0ZS5oICovLAotCQkJCUMyMUJGNkZEMjFDRDg5QzAwMDIyNzk3
OSAvKiBXSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaCAqLywKLQkJCQlDMjFCRjZGNDIxQ0Q4OUIz
MDAyMjc5NzkgLyogV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCAqLywKLQkJCQlDMjFCRjZGRjIx
Q0Q4OUMyMDAyMjc5NzkgLyogV0hMU0xJZlN0YXRlbWVudC5oICovLAotCQkJCUMyMUJGNkY3MjFD
RDg5QjkwMDIyNzk3OSAvKiBXSExTTEluZGV4RXhwcmVzc2lvbi5oICovLAotCQkJCUMyMEY0RjY2
MjFERkYyMzYwMDcwQzQ1QSAvKiBXSExTTEludGVnZXJMaXRlcmFsLmNwcCAqLywKLQkJCQlDMjFC
RjZGODIxQ0Q4OUJCMDAyMjc5NzkgLyogV0hMU0xJbnRlZ2VyTGl0ZXJhbC5oICovLAotCQkJCTFD
QjY5QjM5MjFERjAzRjMwMDZFODQ2QSAvKiBXSExTTEludGVnZXJMaXRlcmFsVHlwZS5jcHAgKi8s
Ci0JCQkJMUNCNjlCMzUyMURFRDY0OTAwNkU4NDZBIC8qIFdITFNMSW50ZWdlckxpdGVyYWxUeXBl
LmggKi8sCi0JCQkJQzIxQkY3MzIyMUNEODlFRjAwMjI3OTc5IC8qIFdITFNMTG9naWNhbEV4cHJl
c3Npb24uaCAqLywKLQkJCQlDMjFCRjcxNTIxQ0Q4OUQ0MDAyMjc5NzkgLyogV0hMU0xMb2dpY2Fs
Tm90RXhwcmVzc2lvbi5oICovLAotCQkJCUMyMUJGNzJEMjFDRDg5RTkwMDIyNzk3OSAvKiBXSExT
TE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaCAqLywKLQkJCQlDMjFCRjcyQzIxQ0Q4OUU5
MDAyMjc5NzkgLyogV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaCAqLywKLQkJCQkxQzMzMjc3
MTIxQ0YwQkUxMDAwREM5RjIgLyogV0hMU0xOYW1lZFR5cGUuaCAqLywKLQkJCQlDMjFCRjcyMzIx
Q0Q4OUUxMDAyMjc5NzkgLyogV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmggKi8sCi0J
CQkJQzIxQkY3MkEyMUNEODlFNzAwMjI3OTc5IC8qIFdITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9u
LmggKi8sCi0JCQkJQzIxQkY3MjQyMUNEODlFMTAwMjI3OTc5IC8qIFdITFNMTm9kZS5oICovLAot
CQkJCUMyMUJGNzA3MjFDRDg5QzgwMDIyNzk3OSAvKiBXSExTTE51bGxMaXRlcmFsLmggKi8sCi0J
CQkJMUNCNjlCM0EyMURGMDQwMzAwNkU4NDZBIC8qIFdITFNMTnVsbExpdGVyYWxUeXBlLmNwcCAq
LywKLQkJCQkxQ0I2OUIzNjIxREVENjU3MDA2RTg0NkEgLyogV0hMU0xOdWxsTGl0ZXJhbFR5cGUu
aCAqLywKLQkJCQlDMjFCRjcyMTIxQ0Q4OURFMDAyMjc5NzkgLyogV0hMU0xOdW1UaHJlYWRzRnVu
Y3Rpb25BdHRyaWJ1dGUuaCAqLywKLQkJCQlDMjFCRjcyRjIxQ0Q4OUVDMDAyMjc5NzkgLyogV0hM
U0xQb2ludGVyVHlwZS5oICovLAotCQkJCUMyMUJGNzJFMjFDRDg5RUEwMDIyNzk3OSAvKiBXSExT
TFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oICovLAotCQkJCUMyMUJGNzBCMjFDRDg5Q0MwMDIy
Nzk3OSAvKiBXSExTTFF1YWxpZmllci5oICovLAotCQkJCUMyMUJGNzFCMjFDRDg5RDkwMDIyNzk3
OSAvKiBXSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaCAqLywKLQkJCQlDMjFCRjcwRDIx
Q0Q4OUNEMDAyMjc5NzkgLyogV0hMU0xSZWZlcmVuY2VUeXBlLmggKi8sCi0JCQkJMUNCNjlCMzIy
MURFRDQwQjAwNkU4NDZBIC8qIFdITFNMUmVzb2x2YWJsZVR5cGUuaCAqLywKLQkJCQlDMjEzOEEx
NTIxRERFQ0U5MDBGNTE2QkEgLyogV0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcCAqLywKLQkJCQlD
MjFCRjcwODIxQ0Q4OUM5MDAyMjc5NzkgLyogV0hMU0xSZXNvdXJjZVNlbWFudGljLmggKi8sCi0J
CQkJQzIxQkY3MDMyMUNEODlDNTAwMjI3OTc5IC8qIFdITFNMUmV0dXJuLmggKi8sCi0JCQkJQzIx
QkY2RjkyMUNEODlCRDAwMjI3OTc5IC8qIFdITFNMU2VtYW50aWMuaCAqLywKLQkJCQlDMjEzOEEx
NjIxRERFQ0ZCMDBGNTE2QkEgLyogV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMu
Y3BwICovLAotCQkJCUMyMUJGNzM2MjFDRDg5RjMwMDIyNzk3OSAvKiBXSExTTFNwZWNpYWxpemF0
aW9uQ29uc3RhbnRTZW1hbnRpYy5oICovLAotCQkJCUMyMTM4QTE3MjFEREVEMEQwMEY1MTZCQSAv
KiBXSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5jcHAgKi8sCi0JCQkJQzIxQkY3MEUyMUNEODlDRTAw
MjI3OTc5IC8qIFdITFNMU3RhZ2VJbk91dFNlbWFudGljLmggKi8sCi0JCQkJQzIxQkY3MTIyMUNE
ODlEMTAwMjI3OTc5IC8qIFdITFNMU3RhdGVtZW50LmggKi8sCi0JCQkJQzIxQkY3MjcyMUNEODlF
NDAwMjI3OTc5IC8qIFdITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oICovLAotCQkJCUMyMUJGNkZF
MjFDRDg5QzEwMDIyNzk3OSAvKiBXSExTTFN0cnVjdHVyZUVsZW1lbnQuaCAqLywKLQkJCQlDMjFC
RjcxOTIxQ0Q4OUQ3MDAyMjc5NzkgLyogV0hMU0xTd2l0Y2hDYXNlLmggKi8sCi0JCQkJQzIxQkY3
MzEyMUNEODlFRTAwMjI3OTc5IC8qIFdITFNMU3dpdGNoU3RhdGVtZW50LmggKi8sCi0JCQkJQzIx
QkY3MUMyMUNEODlEQTAwMjI3OTc5IC8qIFdITFNMVGVybmFyeUV4cHJlc3Npb24uaCAqLywKLQkJ
CQlDMjFCRjZGMzIxQ0Q4OUFEMDAyMjc5NzkgLyogV0hMU0xUcmFwLmggKi8sCi0JCQkJQzIxQkY3
MUQyMUNEODlEQjAwMjI3OTc5IC8qIFdITFNMVHlwZS5oICovLAotCQkJCUMyODhDNzJEMjFDOTkx
REEwMDJERjVDQSAvKiBXSExTTFR5cGVBcmd1bWVudC5jcHAgKi8sCi0JCQkJQzIxQkY3MTEyMUNE
ODlEMTAwMjI3OTc5IC8qIFdITFNMVHlwZUFyZ3VtZW50LmggKi8sCi0JCQkJQzIxQkY3MjkyMUNE
ODlFNjAwMjI3OTc5IC8qIFdITFNMVHlwZURlZmluaXRpb24uaCAqLywKLQkJCQlDMjBGNEY2NDIx
REZCRTVDMDA3MEM0NUEgLyogV0hMU0xUeXBlUmVmZXJlbmNlLmNwcCAqLywKLQkJCQlDMjFCRjcx
RjIxQ0Q4OURDMDAyMjc5NzkgLyogV0hMU0xUeXBlUmVmZXJlbmNlLmggKi8sCi0JCQkJMUMzMzI3
NzIyMUNGMEQyRTAwMERDOUYyIC8qIFdITFNMVW5uYW1lZFR5cGUuaCAqLywKLQkJCQlDMjBGNEY2
NzIxREZGM0E3MDA3MEM0NUEgLyogV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmNwcCAqLywK
LQkJCQlDMjFCRjcyQjIxQ0Q4OUU4MDAyMjc5NzkgLyogV0hMU0xVbnNpZ25lZEludGVnZXJMaXRl
cmFsLmggKi8sCi0JCQkJMUNCNjlCM0IyMURGMDQxRTAwNkU4NDZBIC8qIFdITFNMVW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbFR5cGUuY3BwICovLAotCQkJCTFDQjY5QjM3MjFERUQ2NkIwMDZFODQ2QSAv
KiBXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmggKi8sCi0JCQkJQzIxQkY2RkMyMUNE
ODlCRjAwMjI3OTc5IC8qIFdITFNMVmFsdWUuaCAqLywKLQkJCQlDMjFCRjcxMDIxQ0Q4OUQwMDAy
Mjc5NzkgLyogV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmggKi8sCi0JCQkJQzIxQkY3MTQyMUNE
ODlEMzAwMjI3OTc5IC8qIFdITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCAqLywK
LQkJCQlDMjFCRjcxMzIxQ0Q4OUQyMDAyMjc5NzkgLyogV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5o
ICovLAotCQkJCUMyMUJGNzA0MjFDRDg5QzYwMDIyNzk3OSAvKiBXSExTTFdoaWxlTG9vcC5oICov
LAorCQkJCTFDQzgzREUxMjFGMTVEM0QwMDY0MDQyRSAvKiBXSExTTEZ1bmN0aW9uV3JpdGVyLmNw
cCAqLywKKwkJCQkxQ0M4M0RFMjIxRjE1RDNEMDA2NDA0MkUgLyogV0hMU0xGdW5jdGlvbldyaXRl
ci5oICovLAorCQkJCUMyNkQyQzcwMjFGMDVENTUwMDQ5Nzg5OSAvKiBXSExTTFR5cGVOYW1lci5j
cHAgKi8sCisJCQkJQzI2RDJDNzEyMUYwNUQ1NTAwNDk3ODk5IC8qIFdITFNMVHlwZU5hbWVyLmgg
Ki8sCiAJCQkpOwotCQkJcGF0aCA9IEFTVDsKKwkJCXBhdGggPSBNZXRhbDsKIAkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CiAJCX07CiAJCUM5NkY1RUJGMUI1ODcyMjYwMDkxRUE5RCAvKiBtZWRp
YXNlc3Npb24gKi8gPSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359463</attachid>
            <date>2019-01-18 02:00:12 -0800</date>
            <delta_ts>2019-01-18 04:52:21 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-193531-20190118020011.patch</filename>
            <type>text/plain</type>
            <size>114644</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwMTMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2MyMTljODM2OGUyNjA4
YTM3NTFiODczZDFlOTJjMDRkZTVjYzY4MS4uMjQxZGU5OTBkOGRlYTRjMDlkZmI0ZDU5MGExYmQ3
NDNkNzNlMGEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE5LTAxLTE3ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgTWV0YWwgY29kZSBnZW5lcmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTM1MzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAq
IE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkJhc2VUeXBlTmFtZU5vZGU6OkJhc2VUeXBl
TmFtZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpCYXNlVHlwZU5hbWVO
b2RlOjppc0FycmF5VHlwZU5hbWVOb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpNZXRhbDo6QmFzZVR5cGVOYW1lTm9kZTo6aXNBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkJhc2VUeXBlTmFtZU5vZGU6
OmlzUG9pbnRlclR5cGVOYW1lTm9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
TWV0YWw6OkJhc2VUeXBlTmFtZU5vZGU6OmlzUmVmZXJlbmNlVHlwZU5hbWVOb2RlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6QXJyYXlUeXBlTmFtZU5vZGU6OkFycmF5
VHlwZU5hbWVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6QXJyYXlUeXBl
TmFtZU5vZGU6Om51bUVsZW1lbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpN
ZXRhbDo6QXJyYXlUeXBlTmFtZU5vZGU6OmNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpNZXRhbDo6QXJyYXlUeXBlTmFtZU5vZGU6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6TWV0YWw6OkFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlOjpBcnJheVJlZmVyZW5j
ZVR5cGVOYW1lTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkFycmF5UmVm
ZXJlbmNlVHlwZU5hbWVOb2RlOjphZGRyZXNzU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6Ok1ldGFsOjpBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZTo6Y2hpbGRyZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9k
ZTo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UG9pbnRlclR5cGVO
YW1lTm9kZTo6UG9pbnRlclR5cGVOYW1lTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
TWV0YWw6OlBvaW50ZXJUeXBlTmFtZU5vZGU6OmFkZHJlc3NTcGFjZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlBvaW50ZXJUeXBlTmFtZU5vZGU6OmNoaWxkcmVuKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UG9pbnRlclR5cGVOYW1lTm9kZTo6YXBw
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UmVmZXJlbmNlVHlwZU5hbWVO
b2RlOjpSZWZlcmVuY2VUeXBlTmFtZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1l
dGFsOjpSZWZlcmVuY2VUeXBlTmFtZU5vZGU6Om5hbWVkVHlwZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6Z2VuZXJhdGVOZXh0TmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6YnVpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6Omluc2VydCk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6TWV0YWw6OnR5cGVOYW1lcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuaDogQWRkZWQuCisgICAgICAgICogU291cmNlcy50
eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE5
LTAxLTE3ICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KIAogICAgICAg
ICBVbnJldmlld2VkIFdpbkNhaXJvIGZpeCAtLSBodW5kcmVkcyBvZiB0ZXN0cyBjcmFzaCBhZnRl
ciByMjQwMDMxLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuaAppbmRleCA0M2I2OTg2YWY3ZDRi
NzFjMjg2NzdlYzY1Y2VjZDhlYTdjNDczMDRhLi43YjM2Y2FhYmM2YmZjYTVkNDQ1ZTIyYjhkNjJk
YjllYTJjNzhhMDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuaApAQCAtNjksNiArNjks
NyBAQCBwdWJsaWM6CiAgICAgQnVpbHRJblNlbWFudGljKEJ1aWx0SW5TZW1hbnRpYyYmKSA9IGRl
ZmF1bHQ7CiAKICAgICBWYXJpYWJsZSB2YXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFi
bGU7IH0KKyAgICBPcHRpb25hbDx1bnNpZ25lZD4mIHRhcmdldEluZGV4KCkgeyByZXR1cm4gbV90
YXJnZXRJbmRleDsgfQogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJ1aWx0SW5TZW1hbnRp
YyYgb3RoZXIpIGNvbnN0CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oCmluZGV4IDhmZWY2Mjk1OWQ3
MzYzZTFmMWJiYjIzZDczMzk4ZjhhMmQ0OGJkZTEuLjAxZjJmZmI4MDZhMDU3NmJjNjA1NmUwNjFh
YjE3MmJlMjY0NjE2ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKQEAgLTU3LDcgKzU3LDcgQEAgcHVi
bGljOgogCiAgICAgY29uc3QgTGV4ZXI6OlRva2VuJiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBt
X29yaWdpbjsgfQogCi0gICAgVW5uYW1lZFR5cGUqIHR5cGUoKSB7IHJldHVybiBtX3R5cGUgPyAm
Km1fdHlwZSA6IG51bGxwdHI7IH0KKyAgICBVbm5hbWVkVHlwZSogcmVzb2x2ZWRUeXBlKCkgeyBy
ZXR1cm4gbV90eXBlID8gJiptX3R5cGUgOiBudWxscHRyOyB9CiAKICAgICB2b2lkIHNldFR5cGUo
VW5pcXVlUmVmPFVubmFtZWRUeXBlPiYmIHR5cGUpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlv
bi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rp
b25EZWNsYXJhdGlvbi5oCmluZGV4IDUwODI4NTg0NjA3MDU3N2Q4OTRjNTM0YTM5NzRiY2UwYWJi
MjFmMTEuLmMxNTQ2NmE3MGJiYmFhYTc1ZjE3MGUxMjZlYjUyZGM4OGI4NDgxNmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9u
RGVjbGFyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgKQEAgLTcwLDYgKzcwLDcgQEAgcHVibGljOgog
ICAgIGNvbnN0IFVubmFtZWRUeXBlJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAg
ICAgVW5uYW1lZFR5cGUmIHR5cGUoKSB7IHJldHVybiBtX3R5cGU7IH0KICAgICBjb25zdCBTdHJp
bmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICBTdHJpbmcmIG5hbWUoKSB7
IHJldHVybiBtX25hbWU7IH0KICAgICBib29sIGlzQ2FzdCgpIGNvbnN0IHsgcmV0dXJuIG1fbmFt
ZSA9PSAib3BlcmF0b3IgY2FzdCI7IH0KICAgICBjb25zdCBWYXJpYWJsZURlY2xhcmF0aW9ucyYg
cGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVyczsgfQogICAgIFZhcmlhYmxl
RGVjbGFyYXRpb25zJiBwYXJhbWV0ZXJzKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1
bmN0aW9uV3JpdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01l
dGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA5ODNkNGY2MTYwZTMyOWUy
N2E3YjgwYzY2M2FmYjEwZmUzMTZkZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcApAQCAt
MCwwICsxLDk4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXSExTTEZ1bmN0aW9uV3JpdGVyLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVk
ZSAiV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEFzc2lnbm1lbnRF
eHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xCb29sZWFuTGl0ZXJhbC5oIgorI2luY2x1ZGUg
IldITFNMQnVpbHRJblNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xDYWxsRXhwcmVzc2lvbi5o
IgorI2luY2x1ZGUgIldITFNMQ29tbWFFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xEZXJl
ZmVyZW5jZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTERvV2hpbGVMb29wLmgiCisjaW5j
bHVkZSAiV0hMU0xFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hM
U0xFbnRyeVBvaW50VHlwZS5oIgorI2luY2x1ZGUgIldITFNMRmxvYXRMaXRlcmFsLmgiCisjaW5j
bHVkZSAiV0hMU0xGb3JMb29wLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9u
LmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExT
TEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oIgorI2luY2x1ZGUgIldITFNMSWZTdGF0ZW1lbnQuaCIK
KyNpbmNsdWRlICJXSExTTEludGVnZXJMaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xMb2dpY2Fs
RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTG9naWNhbE5vdEV4cHJlc3Npb24uaCIKKyNp
bmNsdWRlICJXSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJX
SExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgorI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5o
IgorI2luY2x1ZGUgIldITFNMUmV0dXJuLmgiCisjaW5jbHVkZSAiV0hMU0xTd2l0Y2hDYXNlLmgi
CisjaW5jbHVkZSAiV0hMU0xTd2l0Y2hTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFRlcm5h
cnlFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlTmFtZXIuaCIKKyNpbmNsdWRlICJX
SExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVj
bGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50
LmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIldITFNM
VmlzaXRvci5oIgorI2luY2x1ZGUgIldITFNMV2hpbGVMb29wLmgiCisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIE1ldGFsIHsKKwor
Y2xhc3MgRnVuY3Rpb25EZWNsYXJhdGlvbldyaXRlciA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1Ymxp
YzoKKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyKFR5cGVOYW1lciYgdHlwZU5hbWVyLCBI
YXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIFN0cmluZz4mIGZ1bmN0aW9uTWFwcGlu
ZykKKyAgICAgICAgOiBtX3R5cGVOYW1lcih0eXBlTmFtZXIpCisgICAgICAgICwgbV9mdW5jdGlv
bk1hcHBpbmcoZnVuY3Rpb25NYXBwaW5nKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5G
dW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyKCkgPSBkZWZhdWx0OworCisgICAgU3RyaW5nIHRvU3Ry
aW5nKCkgeyByZXR1cm4gbV9zdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7IH0KKyAgICB2b2lkIHZp
c2l0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgZnVuY3Rpb25EZWNsYXJhdGlvbikgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9uTWFwcGluZy5maW5k
KCZmdW5jdGlvbkRlY2xhcmF0aW9uKTsKKyAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fZnVu
Y3Rpb25NYXBwaW5nLmVuZCgpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShmdW5jdGlvbkRlY2xhcmF0aW9u
LnR5cGUoKSksICcgJywgaXRlcmF0b3ItPnZhbHVlLCAnKCcpKTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBmdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgaWYgKGkpCisgICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZCgiLCAiKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobV90eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpmdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KVtpXS50eXBlKCkpKTsKKyAgICAgICAgfQorICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KCIpO1xuIik7CisgICAgfQorCitwcml2YXRlOgorICAgIFR5cGVOYW1lciYgbV90eXBlTmFtZXI7
CisgICAgSGFzaE1hcDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qLCBTdHJpbmc+JiBtX2Z1bmN0
aW9uTWFwcGluZzsKKyAgICBTdHJpbmdCdWlsZGVyIG1fc3RyaW5nQnVpbGRlcjsKK307CisKK2Ns
YXNzIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlciA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1YmxpYzoK
KyAgICBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIoSW50cmluc2ljcyYgaW50cmluc2ljcywgVHlw
ZU5hbWVyJiB0eXBlTmFtZXIsIEhhc2hNYXA8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiwgU3Ry
aW5nPiYgZnVuY3Rpb25NYXBwaW5nKQorICAgICAgICA6IG1faW50cmluc2ljcyhpbnRyaW5zaWNz
KQorICAgICAgICAsIG1fdHlwZU5hbWVyKHR5cGVOYW1lcikKKyAgICAgICAgLCBtX2Z1bmN0aW9u
TWFwcGluZyhmdW5jdGlvbk1hcHBpbmcpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgfkZ1
bmN0aW9uRGVmaW5pdGlvbldyaXRlcigpID0gZGVmYXVsdDsKKworICAgIFN0cmluZyB0b1N0cmlu
ZygpIHsgcmV0dXJuIG1fc3RyaW5nQnVpbGRlci50b1N0cmluZygpOyB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8gZ2V0TmF0aXZlTmFtZSA9IFsmXShB
U1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkgLT4gU3RyaW5nIHsKKyAgICAgICAgICAgIEFT
U0VSVChpczxBU1Q6Ok5hbWVkVHlwZT4odW5uYW1lZFR5cGUudW5pZnlOb2RlKCkpKTsKKyAgICAg
ICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bm5hbWVk
VHlwZS51bmlmeU5vZGUoKSk7CisgICAgICAgICAgICBBU1NFUlQoaXM8QVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpOworICAgICAgICAgICAgYXV0byYgbmF0aXZlVHlwZURl
Y2xhcmF0aW9uID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlw
ZSk7CisgICAgICAgICAgICByZXR1cm4gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbik7CisgICAgICAgIH07CisgICAgICAgIGF1dG8gbWFwRnVuY3Rp
b25OYW1lID0gW10oU3RyaW5nJiBmdW5jdGlvbk5hbWUpIC0+IFN0cmluZyB7CisgICAgICAgICAg
ICBpZiAoZnVuY3Rpb25OYW1lID09ICJkZHgiKQorICAgICAgICAgICAgICAgIHJldHVybiAiZGZk
eCJfc3RyOworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uTmFtZSA9PSAiZGR5IikKKyAgICAgICAg
ICAgICAgICByZXR1cm4gImRmZHkiX3N0cjsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbk5hbWUg
PT0gImFzaW50IikKKyAgICAgICAgICAgICAgICByZXR1cm4gImFzX3R5cGU8aW50MzJfdD4iX3N0
cjsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbk5hbWUgPT0gImFzdWludCIpCisgICAgICAgICAg
ICAgICAgcmV0dXJuICJhc190eXBlPHVpbnQzMl90PiJfc3RyOworICAgICAgICAgICAgaWYgKGZ1
bmN0aW9uTmFtZSA9PSAiYXNmbG9hdCIpCisgICAgICAgICAgICAgICAgcmV0dXJuICJhc190eXBl
PGZsb2F0PiJfc3RyOworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZTsKKyAgICAgICAg
fTsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fZnVuY3Rpb25NYXBwaW5nLmZpbmQoJm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOworICAgICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9mdW5j
dGlvbk1hcHBpbmcuZW5kKCkpOworICAgICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5pc0Nhc3QoKSkgeworICAgICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKTsKKyAgICAgICAgICAgIGF1dG8gbWV0YWxQYXJh
bWV0ZXJOYW1lID0gZ2V0TmF0aXZlTmFtZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMF0udHlwZSgpKTsKKyAgICAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0g
Z2V0TmF0aXZlTmFtZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAgICAg
ICAgICBpZiAobWV0YWxQYXJhbWV0ZXJOYW1lICE9ICJhdG9taWNfaW50Il9zdHIgJiYgbWV0YWxQ
YXJhbWV0ZXJOYW1lICE9ICJhdG9taWNfdWludCJfc3RyKSB7CisgICAgICAgICAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBpdGVy
YXRvci0+dmFsdWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAieCkge1xuIikpOworICAgICAg
ICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiBz
dGF0aWNfY2FzdDwiLCBtZXRhbFJldHVybk5hbWUsICI+KHgpO1xuIikpOworICAgICAgICAgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxS
ZXR1cm5OYW1lLCAnICcsIGl0ZXJhdG9yLT52YWx1ZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUs
ICJ4KSB7XG4iKSk7CisgICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiICAg
IHJldHVybiBhdG9taWNfbG9hZF9leHBsaWNpdCgmeCwgbWVtb3J5X29yZGVyX3JlbGF4ZWQpO1xu
Iik7CisgICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5u
YW1lKCkuc3RhcnRzV2l0aCgib3BlcmF0b3IuIl9zdHIpKSB7CisgICAgICAgICAgICBpZiAobmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuZW5kc1dpdGgoIj0iX3N0cikpIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCku
c2l6ZSgpID09IDIpOworICAgICAgICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9
IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBd
LnR5cGUoKSk7CisgICAgICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gZ2V0
TmF0aXZlTmFtZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlw
ZSgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IGdldE5hdGl2ZU5h
bWUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOworICAgICAgICAgICAgICAgIGF1
dG8gZmllbGROYW1lID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5n
KCJvcGVyYXRvci4iX3N0ci5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgZmllbGROYW1lID0g
ZmllbGROYW1lLnN1YnN0cmluZygwLCBmaWVsZE5hbWUubGVuZ3RoKCkgLSAxKTsKKyAgICAgICAg
ICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1l
LCAnICcsIGl0ZXJhdG9yLT52YWx1ZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAidiwgIiwg
bWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBuKSB7XG4iKSk7CisgICAgICAgICAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgdi4iLCBmaWVsZE5hbWUsICIgPSBuO1xu
IikpOworICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygi
ICAgIHJldHVybiB2O1xuIikpOworICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQoIn1cbiIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpOworICAg
ICAgICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gZ2V0TmF0aXZlTmFtZSgqbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKKyAgICAgICAg
ICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IGdldE5hdGl2ZU5hbWUobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi50eXBlKCkpOworICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgaXRlcmF0b3ItPnZhbHVlLCAn
KCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgInYpIHtcbiIpKTsKKyAgICAgICAgICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gdi4iLCBuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yLiJfc3RyLmxlbmd0aCgp
KSwgIjtcbiIpKTsKKyAgICAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4i
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3JbXSIpIHsKKyAgICAgICAgICAgIEFTU0VSVChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7CisgICAgICAg
ICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOworICAgICAgICAgICAgYXV0
byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gZ2V0TmF0aXZlTmFtZSgqbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKTsKKyAgICAgICAgICAgIGF1dG8gbWV0YWxS
ZXR1cm5OYW1lID0gZ2V0TmF0aXZlTmFtZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUo
KSk7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxS
ZXR1cm5OYW1lLCAnICcsIGl0ZXJhdG9yLT52YWx1ZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1l
LCAibSwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBpKSB7XG4iKSk7CisgICAgICAgICAgICBt
X3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gbVtpXTtcbiIpKTsK
KyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgICAgICB9IGVs
c2UgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvcltdPSIp
IHsKKyAgICAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKS5zaXplKCkgPT0gMyk7CisgICAgICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUg
PSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsw
XS50eXBlKCkpOworICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gZ2V0TmF0
aXZlTmFtZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgp
KTsKKyAgICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIzTmFtZSA9IGdldE5hdGl2ZU5hbWUo
Km5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzJdLnR5cGUoKSk7CisgICAg
ICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IGdldE5hdGl2ZU5hbWUobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi50eXBlKCkpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBpdGVyYXRvci0+dmFsdWUsICcoJywg
bWV0YWxQYXJhbWV0ZXIxTmFtZSwgIm0sICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgaSwgIiwg
bWV0YWxQYXJhbWV0ZXIzTmFtZSwgIiB2KSB7XG4iKSk7CisgICAgICAgICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICBtW2ldID0gdjtcbiIpKTsKKyAgICAgICAgICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiBtO1xuIikpOwor
ICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgICAgIH0gZWxz
ZSBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5pc09wZXJhdG9yKCkpIHsKKyAgICAgICAg
ICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0g
MSkgeworICAgICAgICAgICAgICAgIGF1dG8gb3BlcmF0b3JOYW1lID0gbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJvcGVyYXRvciJfc3RyLmxlbmd0aCgpKTsKKyAg
ICAgICAgICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IGdldE5hdGl2ZU5hbWUoKm5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7CisgICAgICAg
ICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSBnZXROYXRpdmVOYW1lKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIGl0ZXJhdG9yLT52YWx1ZSwg
JygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICJ4KSB7XG4iKSk7CisgICAgICAgICAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuICIsIG9wZXJhdG9yTmFt
ZSwgIng7XG4iKSk7CisgICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxu
Iik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7CisgICAgICAgICAg
ICAgICAgYXV0byBvcGVyYXRvck5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUo
KS5zdWJzdHJpbmcoIm9wZXJhdG9yIl9zdHIubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIGF1
dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7CisgICAgICAgICAgICAgICAgYXV0byBt
ZXRhbFBhcmFtZXRlcjJOYW1lID0gZ2V0TmF0aXZlTmFtZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIG1ldGFs
UmV0dXJuTmFtZSA9IGdldE5hdGl2ZU5hbWUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBl
KCkpOworICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyht
ZXRhbFJldHVybk5hbWUsICcgJywgaXRlcmF0b3ItPnZhbHVlLCAnKCcsIG1ldGFsUGFyYW1ldGVy
MU5hbWUsICJ4LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIHkpIHtcbiIpKTsKKyAgICAgICAg
ICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4geCAi
LCBvcGVyYXRvck5hbWUsICIgeTtcbiIpKTsKKyAgICAgICAgICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiY29zIgorICAgICAgICAgICAgfHwgbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gInNpbiIKKyAgICAgICAgICAgIHx8IG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJ0YW4iCisgICAgICAgICAgICB8fCBu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYWNvcyIKKyAgICAgICAgICAgIHx8
IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJhc2luIgorICAgICAgICAgICAg
fHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImF0YW4iCisgICAgICAgICAg
ICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiY29zaCIKKyAgICAgICAg
ICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJzaW5oIgorICAgICAg
ICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gInRhbmgiCisgICAg
ICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiY2VpbCIKKyAg
ICAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJleHAiCisg
ICAgICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiZmxvb3Ii
CisgICAgICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAibG9n
IgorICAgICAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gInJv
dW5kIgorICAgICAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0g
InRydW5jIgorICAgICAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkg
PT0gImRkeCIKKyAgICAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgp
ID09ICJkZHkiCisgICAgICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUo
KSA9PSAiaXNub3JtYWwiCisgICAgICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
Lm5hbWUoKSA9PSAiaXNmaW5pdGUiCisgICAgICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKSA9PSAiaXNpbmYiCisgICAgICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKSA9PSAiaXNuYW4iCisgICAgICAgICAgICB8fCBuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYXNpbnQiCisgICAgICAgICAgICB8fCBuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYXN1aW50IgorICAgICAgICAgICAgfHwgbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImFzZmxvYXQiKSB7CisgICAgICAgICAgICBB
U1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEp
OworICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSBnZXROYXRpdmVOYW1lKCpu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOworICAgICAg
ICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSBnZXROYXRpdmVOYW1lKG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgaXRlcmF0b3ItPnZhbHVlLCAnKCcsIG1l
dGFsUGFyYW1ldGVyTmFtZSwgIngpIHtcbiIpKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiAiLCBtYXBGdW5jdGlvbk5hbWUobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkpLCAiKHgpO1xuIikpOworICAgICAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgICAgIH0gZWxzZSBpZiAobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gInBvdyIgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5uYW1lKCkgPT0gImF0YW4yIikgeworICAgICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKKyAgICAgICAgICAgIGF1
dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7CisgICAgICAgICAgICBhdXRvIG1ldGFs
UGFyYW1ldGVyMk5hbWUgPSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpOworICAgICAgICAgICAgYXV0byBtZXRhbFJldHVybk5h
bWUgPSBnZXROYXRpdmVOYW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKKyAg
ICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5h
bWUsICcgJywgaXRlcmF0b3ItPnZhbHVlLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICJ4LCAi
LCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIHkpIHtcbiIpKTsKKyAgICAgICAgICAgIG1fc3RyaW5n
QnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiAiLCBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKSwgIih4LCB5KTtcbiIpKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVp
bGRlci5hcHBlbmQoIn1cbiIpOworICAgICAgICB9IGVsc2UgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ubmFtZSgpID09ICJmMTZ0b2YzMiIgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5uYW1lKCkgPT0gImYzMnRvZjE2IikgeworICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzCisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9IGVsc2UgaWYgKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJBbGxNZW1vcnlCYXJyaWVyV2l0aEdyb3VwU3lu
YyIpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKCkuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZygidm9pZCAiLCBpdGVyYXRvci0+dmFsdWUsICIoKSB7XG4iKSk7CisgICAgICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgdGhyZWFkZ3JvdXBfYmFycmllcihtZW1fZmxh
Z3M6Om1lbV9kZXZpY2UpO1xuIik7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KCIgICAgdGhyZWFkZ3JvdXBfYmFycmllcihtZW1fZmxhZ3M6Om1lbV90aHJlYWRncm91cCk7XG4i
KTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICB0aHJlYWRncm91cF9i
YXJyaWVyKG1lbV9mbGFnczo6bWVtX3RleHR1cmUpO1xuIik7CisgICAgICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAgICAgfSBlbHNlIGlmIChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiRGV2aWNlTWVtb3J5QmFycmllcldpdGhHcm91cFN5bmMi
KSB7CisgICAgICAgICAgICBBU1NFUlQoIW5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1l
dGVycygpLnNpemUoKSk7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcoInZvaWQgIiwgaXRlcmF0b3ItPnZhbHVlLCAiKCkge1xuIikpOworICAgICAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiICAgIHRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdz
OjptZW1fZGV2aWNlKTtcbiIpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgi
fVxuIik7CisgICAgICAgIH0gZWxzZSBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1l
KCkgPT0gIkdyb3VwTWVtb3J5QmFycmllcldpdGhHcm91cFN5bmMiKSB7CisgICAgICAgICAgICBB
U1NFUlQoIW5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSk7Cisg
ICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInZvaWQgIiwgaXRl
cmF0b3ItPnZhbHVlLCAiKCkge1xuIikpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZCgiICAgIHRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjptZW1fdGhyZWFkZ3JvdXAp
O1xuIik7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRo
KCJJbnRlcmxvY2tlZCJfc3RyKSkgeworICAgICAgICAgICAgYXV0byBjb252ZXJ0QWRkcmVzc1Nw
YWNlID0gW10oQVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKSAtPiBTdHJpbmcgeworICAg
ICAgICAgICAgICAgIHN3aXRjaCAoYWRkcmVzc1NwYWNlKSB7CisgICAgICAgICAgICAgICAgY2Fz
ZSBBU1Q6OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biAiY29uc3RhbnQiX3N0cjsKKyAgICAgICAgICAgICAgICBjYXNlIEFTVDo6QWRkcmVzc1NwYWNl
OjpEZXZpY2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZGV2aWNlIl9zdHI7CisgICAg
ICAgICAgICAgICAgY2FzZSBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkZ3JvdXA6CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAidGhyZWFkZ3JvdXAiX3N0cjsKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYWRkcmVzc1NwYWNlID09IEFTVDo6
QWRkcmVzc1NwYWNlOjpUaHJlYWQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gInRocmVh
ZCJfc3RyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBp
ZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkludGVybG9ja2VkQ29tcGFy
ZUV4Y2hhbmdlIikgeworICAgICAgICAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gNCk7CisgICAgICAgICAgICAgICAgQVNTRVJU
KGlzPEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKVswXS50eXBlKCkpKTsKKyAgICAgICAgICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9p
bnRlciA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOworICAgICAgICAgICAgICAgIGF1dG8gZmlyc3RB
cmd1bWVudEFkZHJlc3NTcGFjZSA9IGZpcnN0QXJndW1lbnRQb2ludGVyLmFkZHJlc3NTcGFjZSgp
OworICAgICAgICAgICAgICAgIGF1dG8gZmlyc3RBcmd1bWVudFBvaW50ZWUgPSBnZXROYXRpdmVO
YW1lKGZpcnN0QXJndW1lbnRQb2ludGVyLmVsZW1lbnRUeXBlKCkpOworICAgICAgICAgICAgICAg
IGF1dG8gc2Vjb25kQXJndW1lbnQgPSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpOworICAgICAgICAgICAgICAgIGF1dG8gdGhp
cmRBcmd1bWVudCA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpWzJdLnR5cGUoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9p
bnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVszXS50eXBl
KCkpKTsKKyAgICAgICAgICAgICAgICBhdXRvJiBmb3VydGhBcmd1bWVudFBvaW50ZXIgPSBkb3du
Y2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKClbM10udHlwZSgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGZvdXJ0aEFyZ3VtZW50QWRk
cmVzc1NwYWNlID0gZm91cnRoQXJndW1lbnRQb2ludGVyLmFkZHJlc3NTcGFjZSgpOworICAgICAg
ICAgICAgICAgIGF1dG8gZm91cnRoQXJndW1lbnRQb2ludGVlID0gZ2V0TmF0aXZlTmFtZShmb3Vy
dGhBcmd1bWVudFBvaW50ZXIuZWxlbWVudFR5cGUoKSk7CisgICAgICAgICAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ2b2lkICIsIGl0ZXJhdG9yLT52YWx1ZSwgJygn
LCBjb252ZXJ0QWRkcmVzc1NwYWNlKGZpcnN0QXJndW1lbnRBZGRyZXNzU3BhY2UpLCAnICcsIGZp
cnN0QXJndW1lbnRQb2ludGVlLCAiKiBvYmplY3QsICIsIHNlY29uZEFyZ3VtZW50LCAiIGNvbXBh
cmUsICIsIHRoaXJkQXJndW1lbnQsICIgZGVzaXJlZCwgIiwgY29udmVydEFkZHJlc3NTcGFjZShm
b3VydGhBcmd1bWVudEFkZHJlc3NTcGFjZSksICcgJywgZm91cnRoQXJndW1lbnRQb2ludGVlLCAi
KiBvdXQpIHtcbiIpKTsKKyAgICAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIg
ICAgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdChvYmplY3QsICZjb21wYXJl
LCBkZXNpcmVkLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCk7XG4iKTsKKyAgICAgICAgICAgICAgICBt
X3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgKm91dCA9IGNvbXBhcmU7XG4iKTsKKyAgICAgICAg
ICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpLnNpemUoKSA9PSAzKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXM8QVNUOjpQ
b2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5
cGUoKSkpOworICAgICAgICAgICAgICAgIGF1dG8mIGZpcnN0QXJndW1lbnRQb2ludGVyID0gZG93
bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1l
dGVycygpWzBdLnR5cGUoKSk7CisgICAgICAgICAgICAgICAgYXV0byBmaXJzdEFyZ3VtZW50QWRk
cmVzc1NwYWNlID0gZmlyc3RBcmd1bWVudFBvaW50ZXIuYWRkcmVzc1NwYWNlKCk7CisgICAgICAg
ICAgICAgICAgYXV0byBmaXJzdEFyZ3VtZW50UG9pbnRlZSA9IGdldE5hdGl2ZU5hbWUoZmlyc3RB
cmd1bWVudFBvaW50ZXIuZWxlbWVudFR5cGUoKSk7CisgICAgICAgICAgICAgICAgYXV0byBzZWNv
bmRBcmd1bWVudCA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpWzFdLnR5cGUoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9p
bnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsyXS50eXBl
KCkpKTsKKyAgICAgICAgICAgICAgICBhdXRvJiB0aGlyZEFyZ3VtZW50UG9pbnRlciA9IGRvd25j
YXN0PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKVsyXS50eXBlKCkpOworICAgICAgICAgICAgICAgIGF1dG8gdGhpcmRBcmd1bWVudEFkZHJl
c3NTcGFjZSA9IHRoaXJkQXJndW1lbnRQb2ludGVyLmFkZHJlc3NTcGFjZSgpOworICAgICAgICAg
ICAgICAgIGF1dG8gdGhpcmRBcmd1bWVudFBvaW50ZWUgPSBnZXROYXRpdmVOYW1lKHRoaXJkQXJn
dW1lbnRQb2ludGVyLmVsZW1lbnRUeXBlKCkpOworICAgICAgICAgICAgICAgIGF1dG8gbmFtZSA9
IChbXShTdHJpbmcgaW5wdXQpIC0+IFN0cmluZyB7CisgICAgICAgICAgICAgICAgICAgIGlmIChp
bnB1dCA9PSAiQWRkIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZmV0Y2hfYWRk
Il9zdHI7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSAiQW5kIikKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAiZmV0Y2hfYW5kIl9zdHI7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChpbnB1dCA9PSAiRXhjaGFuZ2UiKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICJleGNoYW5nZSJfc3RyOworICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gIk1h
eCIpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZldGNoX21heCJfc3RyOworICAg
ICAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gIk1pbiIpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gImZldGNoX21pbiJfc3RyOworICAgICAgICAgICAgICAgICAgICBpZiAoaW5w
dXQgPT0gIk9yIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZmV0Y2hfb3IiX3N0
cjsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlucHV0ID09ICJYb3IiKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICJmZXRjaF94b3IiX3N0cjsKKyAgICAgICAgICAgICAgICB9KShu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIkludGVybG9ja2VkIl9z
dHIubGVuZ3RoKCkpKTsKKyAgICAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1h
a2VTdHJpbmcoInZvaWQgIiwgaXRlcmF0b3ItPnZhbHVlLCAnKCcsIGNvbnZlcnRBZGRyZXNzU3Bh
Y2UoZmlyc3RBcmd1bWVudEFkZHJlc3NTcGFjZSksICcgJywgZmlyc3RBcmd1bWVudFBvaW50ZWUs
ICIqIG9iamVjdCwgIiwgc2Vjb25kQXJndW1lbnQsICIgb3BlcmFuZCwgIiwgY29udmVydEFkZHJl
c3NTcGFjZSh0aGlyZEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwgJyAnLCB0aGlyZEFyZ3VtZW50UG9p
bnRlZSwgIiogb3V0KSB7XG4iKSk7CisgICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKCIgICAgKm91dCA9IGF0b21pY19mZXRjaF8iLCBuYW1lLCAiX2V4cGxp
Y2l0KG9iamVjdCwgb3BlcmFuZCwgbWVtb3J5X29yZGVyX3JlbGF4ZWQpO1xuIikpOworICAgICAg
ICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJT
YW1wbGUiKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgICAg
ICAgICBDUkFTSCgpOworICAgICAgICB9IGVsc2UgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ubmFtZSgpID09ICJMb2FkIikgeworICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzLgorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfSBlbHNlIGlmIChuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiR2V0RGltZW5zaW9ucyIpIHsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAg
IH0gZWxzZSBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlNhbXBsZUJp
YXMiKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgICAgICAg
ICBDUkFTSCgpOworICAgICAgICB9IGVsc2UgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpID09ICJTYW1wbGVHcmFkIikgeworICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzLgorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfSBlbHNlIGlmIChuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiU2FtcGxlTGV2ZWwiKSB7CisgICAgICAgICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgICAgICAgICBDUkFTSCgpOworICAgICAg
ICB9IGVsc2UgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJHYXRoZXIi
KSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgICAgICAgICBD
UkFTSCgpOworICAgICAgICB9IGVsc2UgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFt
ZSgpID09ICJHYXRoZXJSZWQiKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMuCisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9IGVsc2UgaWYgKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJTYW1wbGVDbXAiKSB7CisgICAgICAgICAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9IGVs
c2UgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJTYW1wbGVDbXBMZXZl
bFplcm8iKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgICAg
ICAgICBDUkFTSCgpOworICAgICAgICB9IGVsc2UgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ubmFtZSgpID09ICJTdG9yZSIpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcy4KKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0gZWxzZSBpZiAobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkdhdGhlckFscGhhIikgeworICAgICAgICAgICAg
Ly8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAg
fSBlbHNlIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiR2F0aGVyQmx1
ZSIpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICAgICAgICAg
IENSQVNIKCk7CisgICAgICAgIH0gZWxzZSBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5u
YW1lKCkgPT0gIkdhdGhlckNtcCIpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcy4KKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0gZWxzZSBpZiAobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkdhdGhlckNtcFJlZCIpIHsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAg
IH0gZWxzZSBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkdhdGhlckdy
ZWVuIikgeworICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgICAgICAg
ICAgQ1JBU0goKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5j
dGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9uTWFwcGluZy5maW5kKCZmdW5jdGlvbkRlZmlu
aXRpb24pOworICAgICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9mdW5jdGlvbk1hcHBpbmcuZW5k
KCkpOworICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsK
KyAgICAgICAgICAgIGF1dG8gaXRlbXMgPSBnYXRoZXJFbnRyeVBvaW50SXRlbXMobV9pbnRyaW5z
aWNzLCBmdW5jdGlvbkRlZmluaXRpb24pOworICAgICAgICAgICAgQVNTRVJUKGl0ZW1zKTsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIHRleHR1cmVDb3VudCA9IDA7CisgICAgICAgICAgICB1bnNpZ25l
ZCBidWZmZXJDb3VudCA9IDA7CisgICAgICAgICAgICB1bnNpZ25lZCBzYW1wbGVyQ291bnQgPSAw
OworCisgICAgICAgICAgICBhdXRvIHNlbWFudGljVmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3Io
WyZdKEFTVDo6QnVpbHRJblNlbWFudGljJiBidWlsdEluU2VtYW50aWMpIC0+IFN0cmluZyB7Cisg
ICAgICAgICAgICAgICAgc3dpdGNoIChidWlsdEluU2VtYW50aWMudmFyaWFibGUoKSkgeworICAg
ICAgICAgICAgICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVkluc3Rh
bmNlSUQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiW1tpbnN0YW5jZV9pZF1dIl9zdHI7
CisgICAgICAgICAgICAgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNW
VmVydGV4SUQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiW1t2ZXJ0ZXhfaWRdXSJfc3Ry
OworICAgICAgICAgICAgICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpQ
U2l6ZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJbW3BvaW50X3NpemVdXSJfc3RyOwor
ICAgICAgICAgICAgICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVlBv
c2l0aW9uOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIltbcG9zaXRpb25dXSJfc3RyOwor
ICAgICAgICAgICAgICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVklz
RnJvbnRGYWNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIltbZnJvbnRfZmFjaW5nXV0i
X3N0cjsKKyAgICAgICAgICAgICAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJs
ZTo6U1ZTYW1wbGVJbmRleDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJbW3NhbXBsZV9p
ZF1dIl9zdHI7CisgICAgICAgICAgICAgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFy
aWFibGU6OlNWSW5uZXJDb3ZlcmFnZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJbW3Nh
bXBsZV9tYXNrXV0iX3N0cjsKKyAgICAgICAgICAgICAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFu
dGljOjpWYXJpYWJsZTo6U1ZUYXJnZXQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtl
U3RyaW5nKCJbW2NvbG9yKCIsICpidWlsdEluU2VtYW50aWMudGFyZ2V0SW5kZXgoKSwgIildXSIp
OworICAgICAgICAgICAgICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpT
VkRlcHRoOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIltbZGVwdGgoYW55KV1dIl9zdHI7
CisgICAgICAgICAgICAgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNW
Q292ZXJhZ2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiW1tzYW1wbGVfbWFza11dIl9z
dHI7CisgICAgICAgICAgICAgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6
OlNWRGlzcGF0Y2hUaHJlYWRJRDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJbW3RocmVh
ZF9wb3NpdGlvbl9pbl9ncmlkXV0iX3N0cjsKKyAgICAgICAgICAgICAgICBjYXNlIEFTVDo6QnVp
bHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZHcm91cElEOgorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gIltbdGhyZWFkZ3JvdXBfcG9zaXRpb25faW5fZ3JpZF1dIl9zdHI7CisgICAgICAgICAg
ICAgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWR3JvdXBJbmRleDoK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJbW3RocmVhZF9pbmRleF9pbl90aHJlYWRncm91
cF1dIl9zdHI7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKGJ1aWx0SW5TZW1hbnRpYy52YXJpYWJsZSgpID09IEFTVDo6QnVpbHRJblNlbWFudGlj
OjpWYXJpYWJsZTo6U1ZHcm91cFRocmVhZElEKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICJbW3RocmVhZF9wb3NpdGlvbl9pbl90aHJlYWRncm91cF1dIl9zdHI7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSwgWyZdKEFTVDo6UmVzb3VyY2VTZW1hbnRpYyYgcmVzb3VyY2VT
ZW1hbnRpYykgLT4gU3RyaW5nIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogUHJvdmlkZSBh
IGJldHRlciBtYXBwaW5nIGJldHdlZW4gSExTTCBzZW1hbnRpY3MgYW5kIE1ldGFsIGF0dHJpYnV0
ZXMuCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFJlcG9ydCB0aGlzIGluZm9ybWF0aW9uIHRv
IHRoZSBBUEkuCisgICAgICAgICAgICAgICAgc3dpdGNoIChyZXNvdXJjZVNlbWFudGljLm1vZGUo
KSkgeworICAgICAgICAgICAgICAgIGNhc2UgQVNUOjpSZXNvdXJjZVNlbWFudGljOjpNb2RlOjpV
bm9yZGVyZWRBY2Nlc3NWaWV3OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVN0cmlu
ZygiW1tidWZmZXIoIiwgYnVmZmVyQ291bnQrKywgIildXSIpOworICAgICAgICAgICAgICAgIGNh
c2UgQVNUOjpSZXNvdXJjZVNlbWFudGljOjpNb2RlOjpUZXh0dXJlOgorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbWFrZVN0cmluZygiW1t0ZXh0dXJlKCIsIHRleHR1cmVDb3VudCsrLCAiKV1d
Iik7CisgICAgICAgICAgICAgICAgY2FzZSBBU1Q6OlJlc291cmNlU2VtYW50aWM6Ok1vZGU6OkJ1
ZmZlcjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIltbYnVmZmVyKCIs
IGJ1ZmZlckNvdW50KyssICIpXV0iKTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQocmVzb3VyY2VTZW1hbnRpYy5tb2RlKCkgPT0gQVNUOjpSZXNv
dXJjZVNlbWFudGljOjpNb2RlOjpTYW1wbGVyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG1ha2VTdHJpbmcoIltbc2FtcGxlcigiLCBzYW1wbGVyQ291bnQrKywgIildXSIpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sIFsmXShBU1Q6OlNwZWNpYWxpemF0aW9uQ29uc3Rh
bnRTZW1hbnRpYyYpIC0+IFN0cmluZyB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEltcGxl
bWVudCB0aGlzCisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgIH0sIFsmXShB
U1Q6OlN0YWdlSW5PdXRTZW1hbnRpYyYgc3RhZ2VJbk91dFNlbWFudGljKSAtPiBTdHJpbmcgewor
ICAgICAgICAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJbW2F0dHJpYnV0ZSgiLCBzdGFnZUlu
T3V0U2VtYW50aWMuaW5kZXgoKSwgIildXSIpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAg
ICAgIGF1dG8gb3V0cHV0U3RydWN0TmFtZSA9IG1fdHlwZU5hbWVyLmdlbmVyYXRlTmV4dFR5cGVO
YW1lKCk7CisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBvdXRwdXROYW1lczsKKyAgICAgICAg
ICAgIG91dHB1dE5hbWVzLnJlc2VydmVDYXBhY2l0eShpdGVtcy0+b3V0cHV0cy5zaXplKCkpOwor
ICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJzdHJ1Y3QgIiwg
b3V0cHV0U3RydWN0TmFtZSwgIntcbiIpKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgb3V0cHV0
IDogaXRlbXMtPm91dHB1dHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGVsZW1lbnROYW1lID0g
bV90eXBlTmFtZXIuZ2VuZXJhdGVOZXh0U3RydWN0dXJlRWxlbWVudE5hbWUoKTsKKyAgICAgICAg
ICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICAiLCBtX3R5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUob3V0cHV0LnVubmFtZWRUeXBlKSwgJyAnLCBlbGVtZW50
TmFtZSwgJyAnLCBXVEY6OnZpc2l0KHNlbWFudGljVmlzaXRvciwgb3V0cHV0LnNlbWFudGljKSkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifTtc
biIpOworICAgICAgICAgICAgYXV0byBlbnRyeVBvaW50ID0gKFsmXSgpIC0+IFN0cmluZyB7Cisg
ICAgICAgICAgICAgICAgc3dpdGNoICgqZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBl
KCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFTVDo6RW50cnlQb2ludFR5cGU6OlZlcnRleDoK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJ2ZXJ0ZXgiX3N0cjsKKyAgICAgICAgICAgICAg
ICBjYXNlIEFTVDo6RW50cnlQb2ludFR5cGU6OkZyYWdtZW50OgorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gImZyYWdtZW50Il9zdHI7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKCpmdW5jdGlvbkRlZmluaXRpb24uZW50cnlQb2ludFR5cGUo
KSA9PSBBU1Q6OkVudHJ5UG9pbnRUeXBlOjpDb21wdXRlKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICJrZXJuZWwiX3N0cjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KSgp
OworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKGVudHJ5UG9p
bnQsICIgIiwgbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGZ1bmN0aW9uRGVmaW5pdGlv
bi50eXBlKCkpLCAnICcsIGl0ZXJhdG9yLT52YWx1ZSwgJygnKSk7CisgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGl0ZW1zLT5pbnB1dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBhdXRvJiBpbnB1dCA9IGl0ZW1zLT5pbnB1dHNbaV07CisgICAgICAgICAgICAgICAg
aWYgKGkpCisgICAgICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiwgIik7
CisgICAgICAgICAgICAgICAgYXV0byBwYXJhbWV0ZXJOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFi
bGVOYW1lKCk7CisgICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShpbnB1dC51bm5hbWVkVHlwZSksICcg
JywgcGFyYW1ldGVyTmFtZSwgJyAnLCBXVEY6OnZpc2l0KHNlbWFudGljVmlzaXRvciwgaW5wdXQu
c2VtYW50aWMpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKCIpIHtcbiIpOworICAgICAgICAgICAgI2Vycm9yIFBhY2sgdGhlIGRhdGEKKyAgICAg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24uYmxvY2soKSk7Cisg
ICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSksICcgJywg
aXRlcmF0b3ItPnZhbHVlLCAnKCcpKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgICAgIGlmIChpKQorICAgICAgICAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKCIsICIpOworICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobV90eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygp
W2ldLnR5cGUoKSkpOworICAgICAgICAgICAgICAgICNlcnJvciBlbWl0IHZhcmlhYmxlIG5hbWVz
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIpIHtc
biIpOworICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi5i
bG9jaygpKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAg
ICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpTdGF0ZW1lbnQmIHN0YXRlbWVudCkgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KHN0YXRlbWVudCk7CisgICAgfQor
CisgICAgdm9pZCB2aXNpdChBU1Q6OkJsb2NrJiBibG9jaykgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIntcbiIpOworICAgICAgICBmb3IgKGF1dG8mIHN0
YXRlbWVudCA6IGJsb2NrLnN0YXRlbWVudHMoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChzdGF0ZW1lbnQpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsK
KyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QnJlYWsmKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiYnJlYWs7XG4iKTsKKyAgICB9CisKKyAgICB2
b2lkIHZpc2l0KEFTVDo6Q29udGludWUmKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZCgiY29udGludWU7XG4iKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6RG9XaGlsZUxvb3AmIGRvV2hpbGVMb29wKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
I2Vycm9yIGxhbWJkYQorICAgICAgICBhdXRvIGxhbWJkYU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJp
YWJsZU5hbWUoKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJh
dXRvICIsIGxhbWJkYU5hbWUsICIgPSBbJl0oKSB7XG4iKSk7CisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChkb1doaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKKyAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJyZXR1cm4gIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiO1xu
fTtcbiIpKTsKKworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJkbyB7XG4iKTsKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvV2hpbGVMb29wLmJvZHkoKSk7CisgICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygifSB3aGlsZSgiLCBsYW1iZGFOYW1lLCAi
KCkpO1xuIikpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpFZmZlY3RmdWxFeHByZXNz
aW9uU3RhdGVtZW50JiBlZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50KSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1l
bnQuZWZmZWN0ZnVsRXhwcmVzc2lvbigpKTsKKyAgICAgICAgbV9zdGFjay50YWtlTGFzdCgpOyAv
LyBUaGUgc3RhdGVtZW50IGlzIGFscmVhZHkgZWZmZWN0ZnVsLCBzbyB3ZSBkb24ndCBuZWVkIHRv
IGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdC4KKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFT
VDo6RmFsbHRocm91Z2gmKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZCgiW1tjbGFuZzo6ZmFsbHRocm91Z2hdXTtcbiIpOyAvLyBGSVhNRTogTWFrZSBzdXJl
IHRoaXMgaXMgb2theS4gQWx0ZXJuYXRpdmVseSwgd2UgY291bGQgZG8gdGhpbmcgYW5kIGp1c3Qg
cmV0dXJuIGhlcmUgaW5zdGVhZC4KKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6Rm9yTG9v
cCYgZm9yTG9vcCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFdURjo6dmlzaXQoV1RGOjptYWtl
VmlzaXRvcihbJl0oQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYgdmFyaWFibGVE
ZWNsYXJhdGlvbnNTdGF0ZW1lbnQpIHsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2
YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCk7CisgICAgICAgIH0sIFsmXShVbmlxdWVSZWY8
QVNUOjpFeHByZXNzaW9uPiYgZXhwcmVzc2lvbikgeworICAgICAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KGV4cHJlc3Npb24pOworICAgICAgICAgICAgbV9zdGFjay50YWtlTGFzdCgpOyAvLyBX
ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdC4KKyAgICAgICAgfSks
IGZvckxvb3AuaW5pdGlhbGl6YXRpb24oKSk7CisKKyAgICAgICAgI2Vycm9yIGxhbWJkYQorICAg
ICAgICBhdXRvIGNvbmRpdGlvbkxhbWJkYU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUo
KTsKKyAgICAgICAgaWYgKGZvckxvb3AuY29uZGl0aW9uKCkpIHsKKyAgICAgICAgICAgIG1fc3Ry
aW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiYXV0byAiLCBjb25kaXRpb25MYW1iZGFOYW1l
LCAiID0gWyZdKCkge1xuIikpOworICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpmb3JM
b29wLmNvbmRpdGlvbigpKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoInJl
dHVybiAiKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyht
X3N0YWNrLnRha2VMYXN0KCksICI7XG59O1xuIikpOworICAgICAgICB9CisKKyAgICAgICAgYXV0
byBpbmNyZW1lbnRMYW1iZGFOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAg
ICAgIGlmIChmb3JMb29wLmluY3JlbWVudCgpKSB7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcoImF1dG8gIiwgY29uZGl0aW9uTGFtYmRhTmFtZSwgIiA9IFsm
XSgpIHtcbiIpKTsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZm9yTG9vcC5pbmNy
ZW1lbnQoKSk7CisgICAgICAgICAgICBtX3N0YWNrLnRha2VMYXN0KCk7IC8vIFdlIGRvbid0IG5l
ZWQgdG8gZG8gYW55dGhpbmcgd2l0aCB0aGUgcmVzdWx0LgorICAgICAgICAgICAgbV9zdHJpbmdC
dWlsZGVyLmFwcGVuZCgifTtcbiIpOworICAgICAgICB9CisKKyAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZCgiZm9yICggOyAiKTsKKyAgICAgICAgaWYgKGZvckxvb3AuY29uZGl0aW9uKCkp
CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoY29uZGl0aW9u
TGFtYmRhTmFtZSwgIigpICIpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiOyAi
KTsKKyAgICAgICAgaWYgKGZvckxvb3AuaW5jcmVtZW50KCkpCisgICAgICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoaW5jcmVtZW50TGFtYmRhTmFtZSwgIigpICIpKTsK
KyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKSB7XG4iKTsKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGZvckxvb3AuYm9keSgpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZCgifVxuIik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OklmU3RhdGVtZW50JiBp
ZlN0YXRlbWVudCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgICNlcnJvciBsYW1iZGEKKyAgICAg
ICAgYXV0byBjb25kaXRpb25hbExhbWJkYU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUo
KTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJhdXRvICIsIGNv
bmRpdGlvbmFsTGFtYmRhTmFtZSwgIiA9IFsmXSgpIHtcbiIpKTsKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGlmU3RhdGVtZW50LmNvbmRpdGlvbmFsKCkpOworICAgICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInJldHVybiAiLCBtX3N0YWNrLnRha2VMYXN0KCksICI7
XG59O1xuIikpOworCisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygi
aWYgKCIsIGNvbmRpdGlvbmFsTGFtYmRhTmFtZSwgIigpIHtcbiIpKTsKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGlmU3RhdGVtZW50LmJvZHkoKSk7CisgICAgICAgIGlmIChpZlN0YXRlbWVu
dC5lbHNlQm9keSgpKSB7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9IGVs
c2Uge1xuIik7CisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmlmU3RhdGVtZW50LmVs
c2VCb2R5KCkpOworICAgICAgICB9CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1c
biIpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpSZXR1cm4mIHJldHVyblN0YXRlbWVu
dCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgICNlcnJvciBkZXRlY3QgaWYgd2UncmUgcmV0dXJu
aW5nIGZyb20gYW4gZW50cnkgcG9pbnQsIGFuZCBmaXh1cCB0aGUgcmVzdWx0CisgICAgICAgIGlm
IChyZXR1cm5TdGF0ZW1lbnQudmFsdWUoKSkgeworICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KCpyZXR1cm5TdGF0ZW1lbnQudmFsdWUoKSk7CisgICAgICAgICAgICBhdXRvIHZhbHVlID0g
bV9zdGFjay50YWtlTGFzdCgpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKCJyZXR1cm4gIiwgdmFsdWUsICI7XG4iKSk7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgicmV0dXJuO1xuIik7CisgICAgfQorCisg
ICAgdm9pZCB2aXNpdChBU1Q6OlN3aXRjaFN0YXRlbWVudCYgc3dpdGNoU3RhdGVtZW50KSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgI2Vycm9yIGxhbWJkYQorICAgICAgICBhdXRvIHZhbHVlTGFt
YmRhTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImF1dG8gIiwgdmFsdWVMYW1iZGFOYW1lLCAiID0gWyZd
KCkge1xuIikpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3dpdGNoU3RhdGVtZW50LnZh
bHVlKCkpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInJldHVy
biAiLCBtX3N0YWNrLnRha2VMYXN0KCksICI7XG59O1xuIikpOworCisgICAgICAgIG1fc3RyaW5n
QnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygic3dpdGNoICgiLCB2YWx1ZUxhbWJkYU5hbWUsICIo
KSkgeyIpKTsKKyAgICAgICAgZm9yIChhdXRvJiBzd2l0Y2hDYXNlIDogc3dpdGNoU3RhdGVtZW50
LnN3aXRjaENhc2VzKCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3dpdGNoQ2Fz
ZSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgIH0KKworICAg
IHZvaWQgdmlzaXQoQVNUOjpTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgaWYgKHN3aXRjaENhc2UudmFsdWUoKSkKKyAgICAgICAgICAgIG1fc3RyaW5nQnVp
bGRlci5hcHBlbmQobWFrZVN0cmluZygiY2FzZSAiLCBjb25zdGFudEV4cHJlc3Npb25TdHJpbmco
KnN3aXRjaENhc2UudmFsdWUoKSksICI6XG4iKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoImRlZmF1bHQ6XG4iKTsKKyAgICAgICAgLy8gRklYTUU6
IEZpZ3VyZSBvdXQgd2hldGhlciB3ZSBuZWVkIHRvIGJyZWFrIG9yIGZhbGx0aHJvdWdoLgorICAg
ICAgICBDUkFTSCgpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3dpdGNoQ2FzZS5ibG9j
aygpKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHJhcCYpIG92ZXJyaWRlCisgICAg
eworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKKyAgICAgICAgQ1JBU0goKTsKKyAg
ICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQm
IHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
VmlzaXRvcjo6dmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpOworICAgIH0KKwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxlTG9vcCkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgICNlcnJvciBsYW1iZGEKKyAgICAgICAgYXV0byBsYW1iZGFOYW1lID0gZ2VuZXJh
dGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZygiYXV0byAiLCBsYW1iZGFOYW1lLCAiID0gWyZdKCkge1xuIikpOworICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOworICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInJldHVybiAiLCBtX3N0YWNrLnRha2VMYXN0
KCksICI7XG59O1xuIikpOworCisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZygid2hpbGUgKCIsIGxhbWJkYU5hbWUsICIoKSkge1xuIikpOworICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQod2hpbGVMb29wLmJvZHkoKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQoIn1cbiIpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJh
bCYgaW50ZWdlckxpdGVyYWwpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQoaW50ZWdl
ckxpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdl
bmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9
IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqaW50ZWdlckxpdGVyYWwucmVzb2x2ZWRU
eXBlKCkpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xl
ZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHN0YXRpY19jYXN0PCIsIG1hbmdsZWRU
eXBlTmFtZSwgIj4oIiwgaW50ZWdlckxpdGVyYWwudmFsdWUoKSwgIik7XG4iKSk7CisgICAgICAg
IG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChB
U1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIG92ZXJy
aWRlCisgICAgeworICAgICAgICBBU1NFUlQodW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5yZXNvbHZl
ZFR5cGUoKSk7CisgICAgICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFi
bGVOYW1lKCk7CisgICAgICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCp1bnNpZ25lZEludGVnZXJMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsK
KyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFt
ZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSBzdGF0aWNfY2FzdDwiLCBtYW5nbGVkVHlwZU5hbWUs
ICI+KCIsIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKSwgIik7XG4iKSk7CisgICAgICAg
IG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChB
U1Q6OkZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGZsb2F0TGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIGF1dG8gdmFyaWFi
bGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAgIGF1dG8gbWFuZ2xl
ZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpmbG9hdExpdGVyYWwu
cmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHN0YXRpY19jYXN0PCIs
IG1hbmdsZWRUeXBlTmFtZSwgIj4oIiwgZmxvYXRMaXRlcmFsLnZhbHVlKCksICIpO1xuIikpOwor
ICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIH0KKworICAgIHZvaWQg
dmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYgbnVsbExpdGVyYWwpIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBBU1NFUlQobnVsbExpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBhdXRvJiB1
bmlmeU5vZGUgPSBudWxsTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKS0+dW5pZnlOb2RlKCk7CisgICAg
ICAgIEFTU0VSVChpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKTsKKyAgICAgICAgYXV0
byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOwor
ICAgICAgICBib29sIGlzQXJyYXlSZWZlcmVuY2VUeXBlID0gaXM8QVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU+KHVubmFtZWRUeXBlKTsKKworICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVy
YXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1h
a2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpudWxsTGl0ZXJhbC5yZXNv
bHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gIikpOworICAgICAgICBpZiAoaXNB
cnJheVJlZmVyZW5jZVR5cGUpCisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ7
IG51bGxwdHIsIDAgfSIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKCJudWxscHRyIik7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIjtc
biIpOworICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIH0KKworICAg
IHZvaWQgdmlzaXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYgYm9vbGVhbkxpdGVyYWwpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBBU1NFUlQoYm9vbGVhbkxpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOwor
ICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwor
ICAgICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
VHlwZSgqYm9vbGVhbkxpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFt
ZSwgIiA9IHN0YXRpY19jYXN0PCIsIG1hbmdsZWRUeXBlTmFtZSwgIj4oIiwgYm9vbGVhbkxpdGVy
YWwudmFsdWUoKSA/ICJ0cnVlIiA6ICJmYWxzZSIsICIpO1xuIikpOworICAgICAgICBtX3N0YWNr
LmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpFbnVt
ZXJhdGlvbk1lbWJlckxpdGVyYWwmIGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCkgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIEFTU0VSVChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwucmVzb2x2ZWRU
eXBlKCkpOworICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0
aW9uRGVmaW5pdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJh
bC5lbnVtZXJhdGlvbkRlZmluaXRpb24oKSk7CisgICAgICAgIGF1dG8gdmFyaWFibGVOYW1lID0g
Z2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1l
ID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCplbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIsIG1hbmdsZWRU
eXBlTmFtZSwgJy4nLCBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVtYmVy
KCplbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25NZW1iZXIoKSksICI7XG4iKSk7
CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgfQorCisgICAgdm9p
ZCB2aXNpdChBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBWaXNpdG9yOjp2aXNpdChleHByZXNzaW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6RG90RXhwcmVzc2lvbiYpIG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBUaGlzIHNo
b3VsZCBiZSBsb3dlcmVkIGFscmVhZHkuCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgbG93ZXJlZCBhbHJlYWR5LgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6UHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNT
RVJUKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAgaWYgKHZhcmlhYmxlRGVj
bGFyYXRpb24uaW5pdGlhbGl6ZXIoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgq
dmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAvLyBGSVhNRTogWmVyby1maWxsIHRoZSB2YXJpYWJsZS4KKyAgICAgICAgICAgIENS
QVNIKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBxdWFsaWZpZXJz
LgorICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgp
OworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdmFyaWFibGVNYXBwaW5nLmFkZCgmdmFyaWFi
bGVEZWNsYXJhdGlvbiwgdmFyaWFibGVOYW1lKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRS
ZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqdmFyaWFibGVE
ZWNsYXJhdGlvbi50eXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIsIG1fc3RhY2sudGFr
ZUxhc3QoKSwgIjtcbiIpKTsKKyAgICAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsK
KyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFzc2ln
bm1lbnRFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKSk7CisgICAgICAgIGF1dG8gbGVmdE5hbWUg
PSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhc3NpZ25t
ZW50RXhwcmVzc2lvbi5yaWdodCgpKTsKKyAgICAgICAgYXV0byByaWdodE5hbWUgPSBtX3N0YWNr
LnRha2VMYXN0KCk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhs
ZWZ0TmFtZSwgIiA9ICIsIHJpZ2h0TmFtZSwgIjtcbiIpKTsKKyAgICB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgVmVjdG9yPFN0cmluZz4gYXJndW1lbnROYW1lczsKKyAgICAgICAgZm9yIChhdXRv
JiBhcmd1bWVudCA6IGNhbGxFeHByZXNzaW9uLmFyZ3VtZW50cygpKSB7CisgICAgICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQoYXJndW1lbnQpOworICAgICAgICAgICAgYXJndW1lbnROYW1lcy5h
cHBlbmQobV9zdGFjay50YWtlTGFzdCgpKTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoY2Fs
bEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBBU1NFUlQoY2FsbEV4cHJlc3Np
b24uZnVuY3Rpb24oKSk7CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9uTWFwcGlu
Zy5maW5kKGNhbGxFeHByZXNzaW9uLmZ1bmN0aW9uKCkpOworICAgICAgICBBU1NFUlQoaXRlcmF0
b3IgIT0gbV9mdW5jdGlvbk1hcHBpbmcuZW5kKCkpOworICAgICAgICBhdXRvIHZhcmlhYmxlTmFt
ZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpjYWxsRXhw
cmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gIiwgaXRlcmF0
b3ItPnZhbHVlLCAnKCcpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVu
dE5hbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSkKKyAgICAgICAgICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIsICIpOworICAgICAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZChhcmd1bWVudE5hbWVzW2ldKTsKKyAgICAgICAgfQorICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKCIpO1xuIik7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxl
TmFtZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYgY29t
bWFFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdDsKKyAg
ICAgICAgZm9yIChhdXRvJiBleHByZXNzaW9uIDogY29tbWFFeHByZXNzaW9uLmxpc3QoKSkgewor
ICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGV4cHJlc3Npb24pOworICAgICAgICAgICAg
cmVzdWx0ID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgICAgICB9CisgICAgICAgIG1fc3RhY2su
YXBwZW5kKHJlc3VsdCk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkRlcmVmZXJlbmNl
RXhwcmVzc2lvbiYgZGVyZWZlcmVuY2VFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5wb2ludGVyKCkpOwor
ICAgICAgICBhdXRvIHJpZ2h0ID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgICAgICBBU1NFUlQo
ZGVyZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgYXV0byB2YXJp
YWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAgICAgbV9zdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgq
ZGVyZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUs
ICIgPSAqIiwgcmlnaHQsICI7XG4iKSk7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxl
TmFtZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uJiBs
b2dpY2FsRXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChsb2dpY2FsRXhwcmVzc2lvbi5sZWZ0KCkpOworICAgICAgICBhdXRvIGxlZnQgPSBtX3N0
YWNrLnRha2VMYXN0KCk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChsb2dpY2FsRXhwcmVz
c2lvbi5yaWdodCgpKTsKKyAgICAgICAgYXV0byByaWdodCA9IG1fc3RhY2sudGFrZUxhc3QoKTsK
KyAgICAgICAgQVNTRVJUKGxvZ2ljYWxFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAgICAg
ICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAg
ICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqbG9naWNhbEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlh
YmxlTmFtZSwgIiA9ICIsIGxlZnQsICcgJykpOworICAgICAgICBzd2l0Y2ggKGxvZ2ljYWxFeHBy
ZXNzaW9uLnR5cGUoKSkgeworICAgICAgICBjYXNlIEFTVDo6TG9naWNhbEV4cHJlc3Npb246OlR5
cGU6OkFuZDoKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiYmIik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVChsb2dp
Y2FsRXhwcmVzc2lvbi50eXBlKCkgPT0gQVNUOjpMb2dpY2FsRXhwcmVzc2lvbjo6VHlwZTo6T3Ip
OworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifHwiKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZygnICcsIHJpZ2h0LCAiO1xuIikpOworICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJs
ZU5hbWUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpMb2dpY2FsTm90RXhwcmVzc2lv
biYgbG9naWNhbE5vdEV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQobG9naWNhbE5vdEV4cHJlc3Npb24ub3BlcmFuZCgpKTsKKyAgICAgICAgYXV0
byBvcGVyYW5kID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgICAgICBBU1NFUlQobG9naWNhbE5v
dEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9
IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpsb2dpY2FsTm90
RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gISIsIG9w
ZXJhbmQsICI7XG4iKSk7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7Cisg
ICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24m
IG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sVmFsdWUoKSk7
CisgICAgICAgIGF1dG8gbFZhbHVlID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgICAgICBBU1NF
UlQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAg
IGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAg
IGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpt
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgaWYg
KGlzPEFTVDo6UG9pbnRlclR5cGU+KCptYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLnJlc29s
dmVkVHlwZSgpKSkKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0geyAiLCBsVmFsdWUsICIs
IDEgfTtcbiIpKTsKKyAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpBcnJheVR5cGU+KCptYWtlQXJy
YXlSZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSkgeworICAgICAgICAgICAgYXV0
byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KCptYWtlQXJyYXlSZWZlcmVu
Y2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAi
ID0geyAmKCIsIGxWYWx1ZSwgIlswXSksICIsIGFycmF5VHlwZS5udW1FbGVtZW50cygpLCAiIH07
XG4iKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSB7ICYi
LCBsVmFsdWUsICIsIDEgfTtcbiIpKTsKKyAgICAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVO
YW1lKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9u
JiBtYWtlUG9pbnRlckV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICAgICAgYXV0
byBsVmFsdWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIEFTU0VSVChtYWtlUG9pbnRl
ckV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9
IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCptYWtlUG9pbnRl
ckV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICYiLCBs
VmFsdWUsICI7XG4iKSk7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7Cisg
ICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgbG93ZXJlZCBhbHJlYWR5
LgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6VGVybmFyeUV4cHJlc3Npb24mIHRlcm5hcnlFeHByZXNzaW9uKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLnByZWRpY2F0
ZSgpKTsKKyAgICAgICAgYXV0byBjaGVjayA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKworICAgICAg
ICBBU1NFUlQodGVybmFyeUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBhdXRv
IHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKCp0ZXJuYXJ5RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1l
LCAiO1xuIikpOworCisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygi
aWYgKCIsIGNoZWNrLCAiKSB7XG4iKSk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0ZXJu
YXJ5RXhwcmVzc2lvbi5ib2R5RXhwcmVzc2lvbigpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKHZhcmlhYmxlTmFtZSwgIiA9ICIsIG1fc3RhY2sudGFrZUxhc3Qo
KSwgIjtcbiIpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifSBlbHNlIHtcbiIp
OworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodGVybmFyeUV4cHJlc3Npb24uZWxzZUV4cHJl
c3Npb24oKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyh2YXJp
YWJsZU5hbWUsICIgPSAiLCBtX3N0YWNrLnRha2VMYXN0KCksICI7XG4iKSk7CisgICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJp
YWJsZU5hbWUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW5j
ZSYgdmFyaWFibGVSZWZlcmVuY2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQodmFy
aWFibGVSZWZlcmVuY2UudmFyaWFibGUoKSk7CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX3Zh
cmlhYmxlTWFwcGluZy5maW5kKHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCkpOworICAgICAg
ICBBU1NFUlQoaXRlcmF0b3IgIT0gbV92YXJpYWJsZU1hcHBpbmcuZW5kKCkpOworICAgICAgICBt
X3N0YWNrLmFwcGVuZChpdGVyYXRvci0+dmFsdWUpOworICAgIH0KKworICAgIFN0cmluZyBjb25z
dGFudEV4cHJlc3Npb25TdHJpbmcoQVNUOjpDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0YW50RXhw
cmVzc2lvbikKKyAgICB7CisgICAgICAgIFN0cmluZyByZXN1bHQ7CisgICAgICAgIGNvbnN0YW50
RXhwcmVzc2lvbi52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFs
JiBpbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgcmVzdWx0ID0gbWFrZVN0cmluZygiIiwg
aW50ZWdlckxpdGVyYWwudmFsdWUoKSk7CisgICAgICAgIH0sIFsmXShBU1Q6OlVuc2lnbmVkSW50
ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgIHJlc3Vs
dCA9IG1ha2VTdHJpbmcoIiIsIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKSk7CisgICAg
ICAgIH0sIFsmXShBU1Q6OkZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKSB7CisgICAgICAgICAg
ICByZXN1bHQgPSBtYWtlU3RyaW5nKCIiLCBmbG9hdExpdGVyYWwudmFsdWUoKSk7CisgICAgICAg
IH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJikgeworICAgICAgICAgICAgcmVzdWx0ID0gIm51bGxw
dHIiX3N0cjsKKyAgICAgICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5MaXRl
cmFsKSB7CisgICAgICAgICAgICByZXN1bHQgPSBib29sZWFuTGl0ZXJhbC52YWx1ZSgpID8gInRy
dWUiX3N0ciA6ICJmYWxzZSJfc3RyOworICAgICAgICB9LCBbJl0oQVNUOjpFbnVtZXJhdGlvbk1l
bWJlckxpdGVyYWwmIGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCkgeworICAgICAgICAgICAgQVNT
RVJUKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbkRlZmluaXRpb24oKSk7Cisg
ICAgICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uRGVm
aW5pdGlvbigpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1ha2VTdHJpbmcobV90eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKCplbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25E
ZWZpbml0aW9uKCkpLCAnLicsIG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yRW51bWVyYXRpb25N
ZW1iZXIoKmVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbk1lbWJlcigpKSk7Cisg
ICAgICAgIH0pKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBTdHJpbmcg
Z2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJ2YXJpYWJsZSIsIG1fdmFyaWFibGVDb3VudCsrKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgSW50cmluc2ljcyYgbV9pbnRyaW5zaWNzOworICAgIFR5cGVOYW1lciYgbV90eXBlTmFtZXI7
CisgICAgSGFzaE1hcDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qLCBTdHJpbmc+JiBtX2Z1bmN0
aW9uTWFwcGluZzsKKyAgICBIYXNoTWFwPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiosIFN0cmlu
Zz4gbV92YXJpYWJsZU1hcHBpbmc7CisgICAgU3RyaW5nQnVpbGRlciBtX3N0cmluZ0J1aWxkZXI7
CisgICAgVmVjdG9yPFN0cmluZz4gbV9zdGFjazsKKyAgICB1bnNpZ25lZCBtX3ZhcmlhYmxlQ291
bnQgeyAwIH07Cit9OworCitTdHJpbmcgbWV0YWxGdW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSwg
VHlwZU5hbWVyJiB0eXBlTmFtZXIpCit7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVy
OworCisgICAgdW5zaWduZWQgbnVtRnVuY3Rpb25zID0gMDsKKyAgICBIYXNoTWFwPEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbiosIFN0cmluZz4gZnVuY3Rpb25NYXBwaW5nOworICAgIGZvciAoYXV0
byYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbnMoKSkgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IGZ1bmN0aW9uTWFwcGluZy5h
ZGQoJm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24sIG1ha2VTdHJpbmcoImZ1bmN0aW9uIiwgbnVt
RnVuY3Rpb25zKyspKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3Vs
dC5pc05ld0VudHJ5KTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24g
OiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkgeworICAgICAgICBhdXRvIGFkZFJlc3Vs
dCA9IGZ1bmN0aW9uTWFwcGluZy5hZGQoJmZ1bmN0aW9uRGVmaW5pdGlvbiwgbWFrZVN0cmluZygi
ZnVuY3Rpb24iLCBudW1GdW5jdGlvbnMrKykpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJl
c3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgRnVu
Y3Rpb25EZWNsYXJhdGlvbldyaXRlciBmdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyKHR5cGVOYW1l
ciwgZnVuY3Rpb25NYXBwaW5nKTsKKyAgICAgICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpKQorICAgICAg
ICAgICAgZnVuY3Rpb25EZWNsYXJhdGlvbldyaXRlci52aXNpdChuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uKTsKKyAgICAgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFt
LmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkgeworICAgICAgICAgICAgaWYgKCFmdW5jdGlvbkRlZmlu
aXRpb24tPmVudHJ5UG9pbnRUeXBlKCkpCisgICAgICAgICAgICAgICAgZnVuY3Rpb25EZWNsYXJh
dGlvbldyaXRlci52aXNpdChmdW5jdGlvbkRlZmluaXRpb24pOworICAgICAgICB9CisgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKGZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXIudG9TdHJpbmco
KSk7CisgICAgfQorCisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisKKyAgICB7Cisg
ICAgICAgIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlciBmdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIo
cHJvZ3JhbS5pbnRyaW5zaWNzKCksIHR5cGVOYW1lciwgZnVuY3Rpb25NYXBwaW5nKTsKKyAgICAg
ICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9ucygpKQorICAgICAgICAgICAgZnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyLnZpc2l0KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOworICAgICAgICBmb3IgKGF1dG8m
IGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKQorICAg
ICAgICAgICAgZnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyLnZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlv
bik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGZ1bmN0aW9uRGVmaW5pdGlvbldyaXRl
ci50b1N0cmluZygpKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpOworfQorCit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wZDBkZmM4Y2M3ZmQwYzM1MDc0MWMwZDM2ZjRiZWQxODM5NWJlMDI1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
TWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgUHJvZ3JhbTsKKworbmFtZXNwYWNlIE1l
dGFsIHsKKworY2xhc3MgVHlwZU5hbWVyOworCisvLyBtZXRhbF9zdGRsaWIsIG1ldGFsX2F0b21p
YywgbWV0YWxfbWF0aCwgbWV0YWxfcmVsYXRpb25hbCwgbWV0YWxfY29tcHV0ZQorU3RyaW5nIG1l
dGFsRnVuY3Rpb25zKFByb2dyYW0mLCBUeXBlTmFtZXImKTsKKworfQorCit9CisKK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bC9XSExTTFR5cGVOYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWNiNjczZjk0MWY1NDNiOTUw
MzZhZDVjNzBjMzNlYWUyMTRjZTUxMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcApAQCAtMCwwICsx
LDcwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExT
TFR5cGVOYW1lci5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMQWRk
cmVzc1NwYWNlLmgiCisjaW5jbHVkZSAiV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCIKKyNpbmNs
dWRlICJXSExTTEFycmF5VHlwZS5oIgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oIgorI2luY2x1ZGUgIldI
TFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5o
IgorI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNM
VHlwZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKyNpbmNs
dWRlICJXSExTTFZpc2l0b3IuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8ZnVu
Y3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIE1l
dGFsIHsKKworY2xhc3MgQmFzZVR5cGVOYW1lTm9kZSB7CitwdWJsaWM6CisgICAgQmFzZVR5cGVO
YW1lTm9kZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQsIFN0cmluZyYmIG1hbmdsZWROYW1lKQor
ICAgICAgICA6IG1fcGFyZW50KHBhcmVudCkKKyAgICAgICAgLCBtX21hbmdsZWROYW1lKG1hbmds
ZWROYW1lKQorICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+QmFzZVR5cGVOYW1lTm9kZSgpID0g
ZGVmYXVsdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNBcnJheVR5cGVOYW1lTm9kZSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQXJyYXlSZWZlcmVuY2VUeXBlTmFt
ZU5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1BvaW50
ZXJUeXBlTmFtZU5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc1JlZmVyZW5jZVR5cGVOYW1lTm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
VmVjdG9yPFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPj4mIGNoaWxkcmVuKCkgeyByZXR1cm4g
bV9jaGlsZHJlbjsgfQorICAgIHZvaWQgYXBwZW5kKFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2Rl
PiYmIGNoaWxkKQorICAgIHsKKyAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShjaGls
ZCkpOworICAgIH0KKyAgICBCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQoKSB7IHJldHVybiBtX3Bh
cmVudDsgfQorICAgIGNvbnN0IFN0cmluZyYgbWFuZ2xlZE5hbWUoKSBjb25zdCB7IHJldHVybiBt
X21hbmdsZWROYW1lOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxCYXNlVHlw
ZU5hbWVOb2RlPj4gbV9jaGlsZHJlbjsKKyAgICBCYXNlVHlwZU5hbWVOb2RlKiBtX3BhcmVudDsK
KyAgICBTdHJpbmcgbV9tYW5nbGVkTmFtZTsKK307CisKK2NsYXNzIEFycmF5VHlwZU5hbWVOb2Rl
IDogcHVibGljIEJhc2VUeXBlTmFtZU5vZGUgeworcHVibGljOgorICAgIEFycmF5VHlwZU5hbWVO
b2RlKEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVudCwgU3RyaW5nJiYgbWFuZ2xlZE5hbWUsIHVuc2ln
bmVkIG51bUVsZW1lbnRzKQorICAgICAgICA6IEJhc2VUeXBlTmFtZU5vZGUocGFyZW50LCBXVEZN
b3ZlKG1hbmdsZWROYW1lKSkKKyAgICAgICAgLCBtX251bUVsZW1lbnRzKG51bUVsZW1lbnRzKQor
ICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+QXJyYXlUeXBlTmFtZU5vZGUoKSA9IGRlZmF1bHQ7
CisgICAgYm9vbCBpc0FycmF5VHlwZU5hbWVOb2RlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQorICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1F
bGVtZW50czsgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fbnVtRWxlbWVudHM7Cit9Owor
CitjbGFzcyBBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZSA6IHB1YmxpYyBCYXNlVHlwZU5hbWVO
b2RlIHsKK3B1YmxpYzoKKyAgICBBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZShCYXNlVHlwZU5h
bWVOb2RlKiBwYXJlbnQsIFN0cmluZyYmIG1hbmdsZWROYW1lLCBBU1Q6OkFkZHJlc3NTcGFjZSBh
ZGRyZXNzU3BhY2UpCisgICAgICAgIDogQmFzZVR5cGVOYW1lTm9kZShwYXJlbnQsIFdURk1vdmUo
bWFuZ2xlZE5hbWUpKQorICAgICAgICAsIG1fYWRkcmVzc1NwYWNlKGFkZHJlc3NTcGFjZSkKKyAg
ICB7CisgICAgfQorICAgIHZpcnR1YWwgfkFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlKCkgPSBk
ZWZhdWx0OworICAgIGJvb2wgaXNBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICBBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3Bh
Y2UoKSBjb25zdCB7IHJldHVybiBtX2FkZHJlc3NTcGFjZTsgfQorCitwcml2YXRlOgorICAgIEFT
VDo6QWRkcmVzc1NwYWNlIG1fYWRkcmVzc1NwYWNlOworfTsKKworY2xhc3MgUG9pbnRlclR5cGVO
YW1lTm9kZSA6IHB1YmxpYyBCYXNlVHlwZU5hbWVOb2RlIHsKK3B1YmxpYzoKKyAgICBQb2ludGVy
VHlwZU5hbWVOb2RlKEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVudCwgU3RyaW5nJiYgbWFuZ2xlZE5h
bWUsIEFTVDo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSkKKyAgICAgICAgOiBCYXNlVHlwZU5h
bWVOb2RlKHBhcmVudCwgV1RGTW92ZShtYW5nbGVkTmFtZSkpCisgICAgICAgICwgbV9hZGRyZXNz
U3BhY2UoYWRkcmVzc1NwYWNlKQorICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+UG9pbnRlclR5
cGVOYW1lTm9kZSgpID0gZGVmYXVsdDsKKyAgICBib29sIGlzUG9pbnRlclR5cGVOYW1lTm9kZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICBBU1Q6OkFkZHJlc3NTcGFjZSBh
ZGRyZXNzU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2FkZHJlc3NTcGFjZTsgfQorCitwcml2YXRl
OgorICAgIEFTVDo6QWRkcmVzc1NwYWNlIG1fYWRkcmVzc1NwYWNlOworfTsKKworY2xhc3MgUmVm
ZXJlbmNlVHlwZU5hbWVOb2RlIDogcHVibGljIEJhc2VUeXBlTmFtZU5vZGUgeworcHVibGljOgor
ICAgIFJlZmVyZW5jZVR5cGVOYW1lTm9kZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQsIFN0cmlu
ZyYmIG1hbmdsZWROYW1lLCBBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlKQorICAgICAgICA6IEJh
c2VUeXBlTmFtZU5vZGUocGFyZW50LCBXVEZNb3ZlKG1hbmdsZWROYW1lKSkKKyAgICAgICAgLCBt
X25hbWVkVHlwZShuYW1lZFR5cGUpCisgICAgeworICAgIH0KKyAgICB2aXJ0dWFsIH5SZWZlcmVu
Y2VUeXBlTmFtZU5vZGUoKSA9IGRlZmF1bHQ7CisgICAgYm9vbCBpc1JlZmVyZW5jZVR5cGVOYW1l
Tm9kZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICBBU1Q6Ok5hbWVkVHlw
ZSYgbmFtZWRUeXBlKCkgeyByZXR1cm4gbV9uYW1lZFR5cGU7IH0KKworcHJpdmF0ZToKKyAgICBB
U1Q6Ok5hbWVkVHlwZSYgbV9uYW1lZFR5cGU7Cit9OworCit9CisKK30KKworfQorCisjZGVmaW5l
IFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfQkFTRV9UWVBFX05BTUVEX05PREUoVG9WYWx1
ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2Vi
Q29yZTo6V0hMU0w6Ok1ldGFsOjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBp
c1R5cGUoY29uc3QgV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpCYXNlVHlwZU5hbWVOb2RlJiB0eXBl
KSB7IHJldHVybiB0eXBlLnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VO
RCgpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfQkFTRV9UWVBFX05BTUVEX05PREUo
QXJyYXlUeXBlTmFtZU5vZGUsIGlzQXJyYXlUeXBlTmFtZU5vZGUoKSkKKworU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19XSExTTF9CQVNFX1RZUEVfTkFNRURfTk9ERShBcnJheVJlZmVyZW5jZVR5cGVO
YW1lTm9kZSwgaXNBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZSgpKQorCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX1dITFNMX0JBU0VfVFlQRV9OQU1FRF9OT0RFKFBvaW50ZXJUeXBlTmFtZU5vZGUs
IGlzUG9pbnRlclR5cGVOYW1lTm9kZSgpKQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNM
X0JBU0VfVFlQRV9OQU1FRF9OT0RFKFJlZmVyZW5jZVR5cGVOYW1lTm9kZSwgaXNSZWZlcmVuY2VU
eXBlTmFtZU5vZGUoKSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wg
eworCituYW1lc3BhY2UgTWV0YWwgeworCitUeXBlTmFtZXI6OlR5cGVOYW1lcihQcm9ncmFtJiBw
cm9ncmFtKQorICAgIDogbV9wcm9ncmFtKHByb2dyYW0pCit7Cit9CisKK1R5cGVOYW1lcjo6flR5
cGVOYW1lcigpID0gZGVmYXVsdDsKKwordm9pZCBUeXBlTmFtZXI6OnZpc2l0KEFTVDo6VW5uYW1l
ZFR5cGUmIHVubmFtZWRUeXBlKQoreworICAgIGluc2VydCh1bm5hbWVkVHlwZSwgbV90cmllKTsK
K30KKwordm9pZCBUeXBlTmFtZXI6OnZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBl
bnVtZXJhdGlvbkRlZmluaXRpb24pCit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX25hbWVkVHlw
ZU1hcHBpbmcuYWRkKCZlbnVtZXJhdGlvbkRlZmluaXRpb24sIGdlbmVyYXRlTmV4dFR5cGVOYW1l
KCkpOworICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7
CisgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbk1lbWJlciA6IGVudW1lcmF0aW9uRGVmaW5pdGlv
bi5lbnVtZXJhdGlvbk1lbWJlcnMoKSkgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZW51
bWVyYXRpb25NZW1iZXJNYXBwaW5nLmFkZCgmc3RhdGljX2Nhc3Q8QVNUOjpFbnVtZXJhdGlvbk1l
bWJlciY+KGVudW1lcmF0aW9uTWVtYmVyKSwgZ2VuZXJhdGVOZXh0RW51bWVyYXRpb25NZW1iZXJO
YW1lKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3
RW50cnkpOworICAgIH0KKyAgICBWaXNpdG9yOjp2aXNpdChlbnVtZXJhdGlvbkRlZmluaXRpb24p
OworfQorCit2b2lkIFR5cGVOYW1lcjo6dmlzaXQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24m
KQoreworICAgIC8vIE5hdGl2ZSB0eXBlIGRlY2xhcmF0aW9ucyBhbHJlYWR5IGhhdmUgbmFtZXMs
IGFuZCBhcmUgYWxyZWFkeSBkZWNsYXJlZCBpbiBNZXRhbC4KK30KKworc3RhdGljIFZlY3RvcjxV
bmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4+OjppdGVyYXRvciBmaW5kSW5WZWN0b3IoQVNUOjpV
bm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIFZlY3RvcjxVbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9k
ZT4+JiB0eXBlcykKK3sKKyAgICByZXR1cm4gc3RkOjpmaW5kX2lmKHR5cGVzLmJlZ2luKCksIHR5
cGVzLmVuZCgpLCBbJl0oQmFzZVR5cGVOYW1lTm9kZSYgYmFzZVR5cGVOYW1lTm9kZSkgLT4gYm9v
bCB7CisgICAgICAgIGlmIChpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRUeXBlKSAmJiBp
czxSZWZlcmVuY2VUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpKSB7CisgICAgICAgICAg
ICBhdXRvKiByZXNvbHZlZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFt
ZWRUeXBlKS5yZXNvbHZlZFR5cGUoKTsKKyAgICAgICAgICAgIEFTU0VSVChyZXNvbHZlZFR5cGUp
OworICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkVHlwZSA9PSAmZG93bmNhc3Q8UmVmZXJlbmNl
VHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKS5uYW1lZFR5cGUoKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpICYmIGlzPFBvaW50
ZXJUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpKQorICAgICAgICAgICAgcmV0dXJuIGRv
d25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKS5hZGRyZXNzU3BhY2UoKSA9PSBk
b3duY2FzdDxQb2ludGVyVHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKS5hZGRyZXNzU3Bh
Y2UoKTsKKyAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlw
ZSkgJiYgaXM8QXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpKQor
ICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5h
bWVkVHlwZSkuYWRkcmVzc1NwYWNlKCkgPT0gZG93bmNhc3Q8QXJyYXlSZWZlcmVuY2VUeXBlTmFt
ZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpLmFkZHJlc3NTcGFjZSgpOworICAgICAgICBpZiAoaXM8
QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSAmJiBpczxBcnJheVR5cGVOYW1lTm9kZT4oYmFz
ZVR5cGVOYW1lTm9kZSkpCisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8QVNUOjpBcnJheVR5
cGU+KHVubmFtZWRUeXBlKS5udW1FbGVtZW50cygpID09IGRvd25jYXN0PEFycmF5VHlwZU5hbWVO
b2RlPihiYXNlVHlwZU5hbWVOb2RlKS5udW1FbGVtZW50cygpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfSk7Cit9CisKK3N0YXRpYyBCYXNlVHlwZU5hbWVOb2RlJiBmaW5kKEFTVDo6VW5u
YW1lZFR5cGUmIHVubmFtZWRUeXBlLCBWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+
PiYgdHlwZXMpCit7CisgICAgYXV0byYgdmVjdG9yVG9TZWFyY2ggPSAoWyZdKCkgLT4gVmVjdG9y
PFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPj4mIHsKKyAgICAgICAgaWYgKGlzPEFTVDo6VHlw
ZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHR5cGVzOworICAg
ICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAg
cmV0dXJuIGZpbmQoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpLmVsZW1l
bnRUeXBlKCksIHR5cGVzKS5jaGlsZHJlbigpOworICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVJl
ZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiBmaW5kKGRvd25j
YXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKSwg
dHlwZXMpLmNoaWxkcmVuKCk7CisgICAgICAgIEFTU0VSVChpczxBU1Q6OkFycmF5VHlwZT4odW5u
YW1lZFR5cGUpKTsKKyAgICAgICAgcmV0dXJuIGZpbmQoZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+
KHVubmFtZWRUeXBlKS50eXBlKCksIHR5cGVzKS5jaGlsZHJlbigpOworICAgIH0pKCk7CisgICAg
YXV0byBpdGVyYXRvciA9IGZpbmRJblZlY3Rvcih1bm5hbWVkVHlwZSwgdmVjdG9yVG9TZWFyY2gp
OworICAgIEFTU0VSVChpdGVyYXRvciAhPSB0eXBlcy5lbmQoKSk7CisgICAgcmV0dXJuICppdGVy
YXRvcjsKK30KKwordm9pZCBUeXBlTmFtZXI6OnZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlv
biYgc3RydWN0dXJlRGVmaW5pdGlvbikKK3sKKyAgICB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0
ID0gbV9uYW1lZFR5cGVNYXBwaW5nLmFkZCgmc3RydWN0dXJlRGVmaW5pdGlvbiwgZ2VuZXJhdGVO
ZXh0VHlwZU5hbWUoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1
bHQuaXNOZXdFbnRyeSk7CisgICAgfQorICAgIFZpc2l0b3I6OnZpc2l0KHN0cnVjdHVyZURlZmlu
aXRpb24pOworICAgIHsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QmFz
ZVR5cGVOYW1lTm9kZT4+IG5laWdoYm9yczsKKyAgICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVF
bGVtZW50IDogc3RydWN0dXJlRGVmaW5pdGlvbi5zdHJ1Y3R1cmVFbGVtZW50cygpKSB7CisgICAg
ICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fc3RydWN0dXJlRWxlbWVudE1hcHBpbmcuYWRkKCZz
dHJ1Y3R1cmVFbGVtZW50LCBnZW5lcmF0ZU5leHRTdHJ1Y3R1cmVFbGVtZW50TmFtZSgpKTsKKyAg
ICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7
CisgICAgICAgICAgICBuZWlnaGJvcnMuYXBwZW5kKGZpbmQoc3RydWN0dXJlRWxlbWVudC50eXBl
KCksIG1fdHJpZSkpOworICAgICAgICB9CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9kZXBl
bmRlbmN5R3JhcGguYWRkKCZzdHJ1Y3R1cmVEZWZpbml0aW9uLCBXVEZNb3ZlKG5laWdoYm9ycykp
OworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkp
OworICAgIH0KK30KKwordm9pZCBUeXBlTmFtZXI6OnZpc2l0KEFTVDo6VHlwZURlZmluaXRpb24m
IHR5cGVEZWZpbml0aW9uKQoreworICAgIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX25h
bWVkVHlwZU1hcHBpbmcuYWRkKCZ0eXBlRGVmaW5pdGlvbiwgZ2VuZXJhdGVOZXh0VHlwZU5hbWUo
KSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRy
eSk7CisgICAgfQorICAgIFZpc2l0b3I6OnZpc2l0KHR5cGVEZWZpbml0aW9uKTsKKyAgICB7Cisg
ICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEJhc2VUeXBlTmFtZU5vZGU+PiBu
ZWlnaGJvcnMgPSB7IGZpbmQodHlwZURlZmluaXRpb24udHlwZSgpLCBtX3RyaWUpIH07CisgICAg
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9kZXBlbmRlbmN5R3JhcGguYWRkKCZ0eXBlRGVmaW5pdGlv
biwgV1RGTW92ZShuZWlnaGJvcnMpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQs
IGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9Cit9CisKK1N0cmluZyBUeXBlTmFtZXI6Om1h
bmdsZWROYW1lRm9yVHlwZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURl
Y2xhcmF0aW9uKQoreworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJ2
b2lkIikKKyAgICAgICAgcmV0dXJuICJ2b2lkIl9zdHI7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5uYW1lKCkgPT0gImJvb2wiKQorICAgICAgICByZXR1cm4gImJvb2wiX3N0cjsKKyAg
ICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAidWNoYXIiKQorICAgICAgICBy
ZXR1cm4gInVpbnQ4X3QiX3N0cjsKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUo
KSA9PSAidXNob3J0IikKKyAgICAgICAgcmV0dXJuICJ1aW50MTZfdCJfc3RyOworICAgIGlmIChu
YXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJ1aW50IikKKyAgICAgICAgcmV0dXJuICJ1
aW50MzJfdCJfc3RyOworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJj
aGFyIikKKyAgICAgICAgcmV0dXJuICJpbnQ4X3QiX3N0cjsKKyAgICBpZiAobmF0aXZlVHlwZURl
Y2xhcmF0aW9uLm5hbWUoKSA9PSAic2hvcnQiKQorICAgICAgICByZXR1cm4gImludDE2X3QiX3N0
cjsKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiaW50IikKKyAgICAg
ICAgcmV0dXJuICJpbnQzMl90Il9zdHI7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5u
YW1lKCkgPT0gImhhbGYiKQorICAgICAgICByZXR1cm4gImhhbGYiX3N0cjsKKyAgICBpZiAobmF0
aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiZmxvYXQiKQorICAgICAgICByZXR1cm4gImZs
b2F0Il9zdHI7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImF0b21p
Y19pbnQiKQorICAgICAgICByZXR1cm4gImF0b21pY19pbnQiX3N0cjsKKyAgICBpZiAobmF0aXZl
VHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYXRvbWljX3VpbnQiKQorICAgICAgICByZXR1cm4g
ImF0b21pY191aW50Il9zdHI7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkg
PT0gInNhbXBsZXIiKQorICAgICAgICByZXR1cm4gInNhbXBsZXIiX3N0cjsKKyAgICBpZiAobmF0
aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAidmVjdG9yIikgeworICAgICAgICBBU1NFUlQo
bmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMik7CisgICAg
ICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1ZVJlZjxUeXBlUmVmZXJlbmNl
Pj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOworICAgICAgICBh
dXRvJiB0eXBlUmVmZXJlbmNlID0gV1RGOjpnZXQ8VW5pcXVlUmVmPFR5cGVSZWZlcmVuY2U+Pihu
YXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKTsKKyAgICAgICAgYXV0byYg
dW5pZnlOb2RlID0gdHlwZVJlZmVyZW5jZS51bmlmeU5vZGUoKTsKKyAgICAgICAgQVNTRVJUKGlz
PEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpKQorICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBk
b3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlub2RlKTsKKyAgICAgICAgQVNTRVJUKGlzPEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKTsKKyAgICAgICAgYXV0byYgcGFy
YW1ldGVyVHlwZSA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5
cGUpOworICAgICAgICBhdXRvIHByZWZpeCA9IChbJl0oKSAtPiBTdHJpbmcgeworICAgICAgICAg
ICAgaWYgKHBhcmFtZXRlclR5cGUubmFtZSgpID09ICJib29sIikKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gImJvb2wiOworICAgICAgICAgICAgaWYgKHBhcmFtZXRlclR5cGUubmFtZSgpID09ICJ1
Y2hhciIpCisgICAgICAgICAgICAgICAgcmV0dXJuICJ1Y2hhciI7CisgICAgICAgICAgICBpZiAo
cGFyYW1ldGVyVHlwZS5uYW1lKCkgPT0gInVzaG9ydCIpCisgICAgICAgICAgICAgICAgcmV0dXJu
ICJ1c2hvcnQiOworICAgICAgICAgICAgaWYgKHBhcmFtZXRlclR5cGUubmFtZSgpID09ICJ1aW50
IikKKyAgICAgICAgICAgICAgICByZXR1cm4gInVpbnQiOworICAgICAgICAgICAgaWYgKHBhcmFt
ZXRlclR5cGUubmFtZSgpID09ICJjaGFyIikKKyAgICAgICAgICAgICAgICByZXR1cm4gImNoYXIi
OworICAgICAgICAgICAgaWYgKHBhcmFtZXRlclR5cGUubmFtZSgpID09ICJzaG9ydCIpCisgICAg
ICAgICAgICAgICAgcmV0dXJuICJzaG9ydCI7CisgICAgICAgICAgICBpZiAocGFyYW1ldGVyVHlw
ZS5uYW1lKCkgPT0gImludCIpCisgICAgICAgICAgICAgICAgcmV0dXJuICJpbnQiOworICAgICAg
ICAgICAgaWYgKHBhcmFtZXRlclR5cGUubmFtZSgpID09ICJoYWxmIikKKyAgICAgICAgICAgICAg
ICByZXR1cm4gImhhbGYiOworICAgICAgICAgICAgQVNTRVJUKHBhcmFtZXRlclR5cGUubmFtZSgp
ID09ICJmbG9hdCIpOworICAgICAgICAgICAgcmV0dXJuICJmbG9hdCI7CisgICAgICAgIH0pKCk7
CisgICAgICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnN0YW50RXhwcmVzc2lv
bj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsxXSkpOworICAgICAgICBh
dXRvJiBjb25zdGFudEV4cHJlc3Npb24gPSBXVEY6OmdldDxDb25zdGFudEV4cHJlc3Npb24+KG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pOworICAgICAgICBhdXRvJiBp
bnRlZ2VyTGl0ZXJhbCA9IGNvbnN0YW50RXhwcmVzc2lvbi5pbnRlZ2VyTGl0ZXJhbCgpOworICAg
ICAgICBhdXRvIHN1ZmZpeCA9IChbJl0oKSAtPiBTdHJpbmcgeworICAgICAgICAgICAgc3dpdGNo
IChpbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpKSB7CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAg
ICAgICAgICAgcmV0dXJuICIyIl9zdHI7CisgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAg
ICAgICAgcmV0dXJuICIzIl9zdHI7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIEFTU0VSVChpbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpID09IDQpOworICAgICAgICAgICAgICAg
IHJldHVybiAiNCJfc3RyOworICAgICAgICAgICAgfQorICAgICAgICB9KSgpOworICAgICAgICBy
ZXR1cm4gbWFrZVN0cmluZyhwcmVmaXgsIHN1ZmZpeCk7CisgICAgfQorICAgIGlmIChuYXRpdmVU
eXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJtYXRyaXgiKSB7CisgICAgICAgIEFTU0VSVChuYXRp
dmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAzKTsKKyAgICAgICAg
QVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VW5pcXVlUmVmPFR5cGVSZWZlcmVuY2U+Pihu
YXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgICAgIGF1dG8m
IHR5cGVSZWZlcmVuY2UgPSBXVEY6OmdldDxVbmlxdWVSZWY8VHlwZVJlZmVyZW5jZT4+KG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pOworICAgICAgICBhdXRvJiB1bmlm
eU5vZGUgPSB0eXBlUmVmZXJlbmNlLnVuaWZ5Tm9kZSgpOworICAgICAgICBBU1NFUlQoaXM8QVNU
OjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpCisgICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25j
YXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeW5vZGUpOworICAgICAgICBBU1NFUlQoaXM8QVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpOworICAgICAgICBhdXRvJiBwYXJhbWV0
ZXJUeXBlID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSk7
CisgICAgICAgIGF1dG8gcHJlZml4ID0gKFsmXSgpIC0+IFN0cmluZyB7CisgICAgICAgICAgICBp
ZiAocGFyYW1ldGVyVHlwZS5uYW1lKCkgPT0gImhhbGYiKQorICAgICAgICAgICAgICAgIHJldHVy
biAiaGFsZiI7CisgICAgICAgICAgICBBU1NFUlQocGFyYW1ldGVyVHlwZS5uYW1lKCkgPT0gImZs
b2F0Iik7CisgICAgICAgICAgICByZXR1cm4gImZsb2F0IjsKKyAgICAgICAgfSkoKTsKKyAgICAg
ICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29uc3RhbnRFeHByZXNzaW9uPihuYXRp
dmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzFdKSk7CisgICAgICAgIGF1dG8mIGNv
bnN0YW50RXhwcmVzc2lvbjEgPSBXVEY6OmdldDxDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pOworICAgICAgICBhdXRvJiBpbnRlZ2Vy
TGl0ZXJhbDEgPSBjb25zdGFudEV4cHJlc3Npb24uaW50ZWdlckxpdGVyYWwoKTsKKyAgICAgICAg
YXV0byBtaWRkbGUgPSAoWyZdKCkgLT4gU3RyaW5nIHsKKyAgICAgICAgICAgIHN3aXRjaCAoaW50
ZWdlckxpdGVyYWwxLnZhbHVlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gIjIiX3N0cjsKKyAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gIjMiX3N0cjsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
QVNTRVJUKGludGVnZXJMaXRlcmFsMS52YWx1ZSgpID09IDQpOworICAgICAgICAgICAgICAgIHJl
dHVybiAiNCJfc3RyOworICAgICAgICAgICAgfQorICAgICAgICB9KSgpOworICAgICAgICBBU1NF
UlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMl0pKTsKKyAgICAgICAgYXV0byYgY29uc3RhbnRF
eHByZXNzaW9uMiA9IFdURjo6Z2V0PENvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xh
cmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSk7CisgICAgICAgIGF1dG8mIGludGVnZXJMaXRlcmFs
MiA9IGNvbnN0YW50RXhwcmVzc2lvbi5pbnRlZ2VyTGl0ZXJhbCgpOworICAgICAgICBhdXRvIHN1
ZmZpeCA9IChbJl0oKSAtPiBTdHJpbmcgeworICAgICAgICAgICAgc3dpdGNoIChpbnRlZ2VyTGl0
ZXJhbDIudmFsdWUoKSkgeworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIHJl
dHVybiAiMiJfc3RyOworICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIHJldHVy
biAiMyJfc3RyOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlQo
aW50ZWdlckxpdGVyYWwyLnZhbHVlKCkgPT0gNCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICI0
Il9zdHI7CisgICAgICAgICAgICB9CisgICAgICAgIH0pKCk7CisgICAgICAgIHJldHVybiBtYWtl
U3RyaW5nKHByZWZpeCwgbWlkZGxlLCAneCcsIHN1ZmZpeCk7CisgICAgfQorICAgIEFTU0VSVChu
YXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAxKTsKKyAgICBB
U1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxVbmlxdWVSZWY8VHlwZVJlZmVyZW5jZT4+KG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsKKyAgICBhdXRvJiB0eXBl
UmVmZXJlbmNlID0gV1RGOjpnZXQ8VW5pcXVlUmVmPFR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBl
RGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKTsKKyAgICBhdXRvIHByZWZpeCA9IChbJl0o
KSAtPiBTdHJpbmcgeworICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9
PSAiVGV4dHVyZTFEIikKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZTFkIl9zdHI7CisgICAg
ICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJSV1RleHR1cmUxRCIpCisg
ICAgICAgICAgICByZXR1cm4gInRleHR1cmUxZCJfc3RyOworICAgICAgICBpZiAobmF0aXZlVHlw
ZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiVGV4dHVyZTFEQXJyYXkiKQorICAgICAgICAgICAgcmV0
dXJuICJ0ZXh0dXJlMWRfYXJyYXkiX3N0cjsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5uYW1lKCkgPT0gIlJXVGV4dHVyZTFEQXJyYXkiKQorICAgICAgICAgICAgcmV0dXJuICJ0
ZXh0dXJlMWRfYXJyYXkiX3N0cjsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5u
YW1lKCkgPT0gIlRleHR1cmUyRCIpCisgICAgICAgICAgICByZXR1cm4gInRleHR1cmUyZCJfc3Ry
OworICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiUldUZXh0dXJl
MkQiKQorICAgICAgICAgICAgcmV0dXJuICJ0ZXh0dXJlMmQiX3N0cjsKKyAgICAgICAgaWYgKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlRleHR1cmUyREFycmF5IikKKyAgICAgICAg
ICAgIHJldHVybiAidGV4dHVyZTJkX2FycmF5Il9zdHI7CisgICAgICAgIGlmIChuYXRpdmVUeXBl
RGVjbGFyYXRpb24ubmFtZSgpID09ICJSV1RleHR1cmUyREFycmF5IikKKyAgICAgICAgICAgIHJl
dHVybiAidGV4dHVyZTJkX2FycmF5Il9zdHI7CisgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFy
YXRpb24ubmFtZSgpID09ICJUZXh0dXJlM0QiKQorICAgICAgICAgICAgcmV0dXJuICJ0ZXh0dXJl
M2QiX3N0cjsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlJX
VGV4dHVyZTNEIikKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZTNkIl9zdHI7CisgICAgICAg
IGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJUZXh0dXJlQ3ViZSIpCisgICAg
ICAgICAgICByZXR1cm4gInRleHR1cmVjdWJlIl9zdHI7CisgICAgICAgIGlmIChuYXRpdmVUeXBl
RGVjbGFyYXRpb24ubmFtZSgpID09ICJUZXh0dXJlRGVwdGgyRCIpCisgICAgICAgICAgICByZXR1
cm4gImRlcHRoMmQiX3N0cjsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1l
KCkgPT0gIlJXVGV4dHVyZURlcHRoMkQiKQorICAgICAgICAgICAgcmV0dXJuICJkZXB0aDJkIl9z
dHI7CisgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJUZXh0dXJl
RGVwdGgyREFycmF5IikKKyAgICAgICAgICAgIHJldHVybiAiZGVwdGgyZF9hcnJheSJfc3RyOwor
ICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiUldUZXh0dXJlRGVw
dGgyREFycmF5IikKKyAgICAgICAgICAgIHJldHVybiAiZGVwdGgyZF9hcnJheSJfc3RyOworICAg
ICAgICBBU1NFUlQobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiVGV4dHVyZURlcHRo
Q3ViZSIpOworICAgICAgICByZXR1cm4gImRlcHRoY3ViZSJfc3RyOworICAgIH0pKCk7CisgICAg
YXV0byBpbm5lclR5cGUgPSAoWyZdKCkgLT4gU3RyaW5nIHsKKyAgICAgICAgaWYgKHR5cGVSZWZl
cmVuY2UubmFtZSA9PSAidXNob3J0IikKKyAgICAgICAgICAgIHJldHVybiAidXNob3J0Il9zdHI7
CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLm5hbWUgPT0gInVzaG9ydDIiKQorICAgICAgICAg
ICAgcmV0dXJuICJ1c2hvcnQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UubmFtZSA9
PSAidXNob3J0MyIpCisgICAgICAgICAgICByZXR1cm4gInVzaG9ydCJfc3RyOworICAgICAgICBp
ZiAodHlwZVJlZmVyZW5jZS5uYW1lID09ICJ1c2hvcnQ0IikKKyAgICAgICAgICAgIHJldHVybiAi
dXNob3J0Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLm5hbWUgPT0gInVpbnQiKQor
ICAgICAgICAgICAgcmV0dXJuICJ1aW50Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNl
Lm5hbWUgPT0gInVpbnQyIikKKyAgICAgICAgICAgIHJldHVybiAidWludCJfc3RyOworICAgICAg
ICBpZiAodHlwZVJlZmVyZW5jZS5uYW1lID09ICJ1aW50MyIpCisgICAgICAgICAgICByZXR1cm4g
InVpbnQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UubmFtZSA9PSAidWludDQiKQor
ICAgICAgICAgICAgcmV0dXJuICJ1aW50Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNl
Lm5hbWUgPT0gInNob3J0IikKKyAgICAgICAgICAgIHJldHVybiAic2hvcnQiX3N0cjsKKyAgICAg
ICAgaWYgKHR5cGVSZWZlcmVuY2UubmFtZSA9PSAic2hvcnQyIikKKyAgICAgICAgICAgIHJldHVy
biAic2hvcnQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UubmFtZSA9PSAic2hvcnQz
IikKKyAgICAgICAgICAgIHJldHVybiAic2hvcnQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZl
cmVuY2UubmFtZSA9PSAic2hvcnQ0IikKKyAgICAgICAgICAgIHJldHVybiAic2hvcnQiX3N0cjsK
KyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UubmFtZSA9PSAiaW50IikKKyAgICAgICAgICAgIHJl
dHVybiAiaW50Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLm5hbWUgPT0gImludDIi
KQorICAgICAgICAgICAgcmV0dXJuICJpbnQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVu
Y2UubmFtZSA9PSAiaW50MyIpCisgICAgICAgICAgICByZXR1cm4gImludCJfc3RyOworICAgICAg
ICBpZiAodHlwZVJlZmVyZW5jZS5uYW1lID09ICJpbnQ0IikKKyAgICAgICAgICAgIHJldHVybiAi
aW50Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLm5hbWUgPT0gImhhbGYiKQorICAg
ICAgICAgICAgcmV0dXJuICJoYWxmIl9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLm5h
bWUgPT0gImhhbGYyIikKKyAgICAgICAgICAgIHJldHVybiAiaGFsZiJfc3RyOworICAgICAgICBp
ZiAodHlwZVJlZmVyZW5jZS5uYW1lID09ICJoYWxmMyIpCisgICAgICAgICAgICByZXR1cm4gImhh
bGYiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UubmFtZSA9PSAiaGFsZjQiKQorICAg
ICAgICAgICAgcmV0dXJuICJoYWxmIl9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLm5h
bWUgPT0gImZsb2F0IikKKyAgICAgICAgICAgIHJldHVybiAiZmxvYXQiX3N0cjsKKyAgICAgICAg
aWYgKHR5cGVSZWZlcmVuY2UubmFtZSA9PSAiZmxvYXQyIikKKyAgICAgICAgICAgIHJldHVybiAi
ZmxvYXQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UubmFtZSA9PSAiZmxvYXQzIikK
KyAgICAgICAgICAgIHJldHVybiAiZmxvYXQiX3N0cjsKKyAgICAgICAgQVNTRVJUKHR5cGVSZWZl
cmVuY2UubmFtZSA9PSAiZmxvYXQ0Iik7CisgICAgICAgIHJldHVybiAiZmxvYXQiX3N0cjsKKyAg
ICB9KSgpOworICAgIC8vIEZJWE1FOiBTcGVjaWZ5IHRoZSBzZWNvbmQgdGVtcGxhdGUgYXJndW1l
bnQgdG8gTWV0YWwgdGV4dHVyZSB0eXBlcy4KKyAgICByZXR1cm4gbWFrZVN0cmluZyhwcmVmaXgs
ICc8JywgaW5uZXJUeXBlLCAnPicpOworfQorCitVbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4g
VHlwZU5hbWVyOjpjcmVhdGVOYW1lTm9kZShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwg
QmFzZVR5cGVOYW1lTm9kZSogcGFyZW50KQoreworICAgIGlmIChpczxBU1Q6OlR5cGVSZWZlcmVu
Y2U+KHVubmFtZWRUeXBlKSkgeworICAgICAgICBhdXRvJiB0eXBlUmVmZXJlbmNlID0gZG93bmNh
c3Q8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSk7CisgICAgICAgIEFTU0VSVCh0eXBl
UmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8
UmVmZXJlbmNlVHlwZU5hbWVOb2RlPihwYXJlbnQsIGdlbmVyYXRlTmV4dFR5cGVOYW1lKCksICp0
eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICB9CisgICAgaWYgKGlzPEFTVDo6UG9p
bnRlclR5cGU+KHVubmFtZWRUeXBlKSkgeworICAgICAgICBhdXRvJiBwb2ludGVyVHlwZSA9IGRv
d25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKTsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmlxdWVSZWY8UG9pbnRlclR5cGVOYW1lTm9kZT4ocGFyZW50LCBnZW5lcmF0ZU5leHRUeXBl
TmFtZSgpLCBwb2ludGVyVHlwZS5hZGRyZXNzU3BhY2UoKSk7CisgICAgfQorICAgIGlmIChpczxB
U1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKSB7CisgICAgICAgIGF1dG8mIGFy
cmF5UmVmZXJlbmNlVHlwZSA9IGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5h
bWVkVHlwZSk7CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPEFycmF5UmVmZXJlbmNlVHlw
ZU5hbWVOb2RlPihwYXJlbnQsIGdlbmVyYXRlTmV4dFR5cGVOYW1lKCksIGFycmF5UmVmZXJlbmNl
VHlwZS5hZGRyZXNzU3BhY2UoKSk7CisgICAgfQorICAgIEFTU0VSVChpczxBU1Q6OkFycmF5VHlw
ZT4odW5uYW1lZFR5cGUpKTsKKyAgICBhdXRvJiBhcnJheVR5cGUgPSBkb3duY2FzdDxBU1Q6OkFy
cmF5VHlwZT4odW5uYW1lZFR5cGUpOworICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPEFycmF5VHlw
ZU5hbWVOb2RlPihwYXJlbnQsIGdlbmVyYXRlTmV4dFR5cGVOYW1lKCksIGFycmF5VHlwZS5udW1F
bGVtZW50cygpKTsKK30KKworc2l6ZV90IFR5cGVOYW1lcjo6aW5zZXJ0KEFTVDo6VW5uYW1lZFR5
cGUmIHVubmFtZWRUeXBlLCBWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+PiYgdHlw
ZXMpCit7CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPj4qIHZlY3RvclRv
SW5zZXJ0SW50byB7IG51bGxwdHIgfTsKKyAgICBCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQgeyBu
dWxscHRyIH07CisgICAgaWYgKGlzPEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpKSB7
CisgICAgICAgIHZlY3RvclRvSW5zZXJ0SW50byA9ICZ0eXBlczsKKyAgICAgICAgcGFyZW50ID0g
bnVsbHB0cjsKKyAgICB9IGVsc2UgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBl
KSkgeworICAgICAgICBhdXRvJiBpdGVtID0gdHlwZXNbaW5zZXJ0KGRvd25jYXN0PEFTVDo6UG9p
bnRlclR5cGU+KHVubmFtZWRUeXBlKS5lbGVtZW50VHlwZSgpLCB0eXBlcyldOworICAgICAgICB2
ZWN0b3JUb0luc2VydEludG8gPSAmaXRlbS0+Y2hpbGRyZW4oKTsKKyAgICAgICAgcGFyZW50ID0g
Jml0ZW07CisgICAgfSBlbHNlIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1l
ZFR5cGUpKSB7CisgICAgICAgIGF1dG8mIGl0ZW0gPSB0eXBlc1tpbnNlcnQoZG93bmNhc3Q8QVNU
OjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKS5lbGVtZW50VHlwZSgpLCB0eXBlcyld
OworICAgICAgICB2ZWN0b3JUb0luc2VydEludG8gPSAmaXRlbS0+Y2hpbGRyZW4oKTsKKyAgICAg
ICAgcGFyZW50ID0gJml0ZW07CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGlzPEFTVDo6
QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpOworICAgICAgICBhdXRvJiBpdGVtID0gdHlwZXNbaW5z
ZXJ0KGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkudHlwZSgpLCB0eXBlcyld
OworICAgICAgICB2ZWN0b3JUb0luc2VydEludG8gPSAmaXRlbS0+Y2hpbGRyZW4oKTsKKyAgICAg
ICAgcGFyZW50ID0gJml0ZW07CisgICAgfQorICAgIEFTU0VSVCh2ZWN0b3JUb0luc2VydEludG8p
OworCisgICAgYXV0byBpdGVyYXRvciA9IGZpbmRJblZlY3Rvcih1bm5hbWVkVHlwZSwgKnZlY3Rv
clRvSW5zZXJ0SW50byk7CisgICAgaWYgKGl0ZXJhdG9yID09IHZlY3RvclRvSW5zZXJ0SW50by0+
ZW5kKCkpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBjcmVhdGVOYW1lTm9kZSh1bm5hbWVkVHlw
ZSwgcGFyZW50KTsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3Vu
bmFtZWRUeXBlTWFwcGluZy5hZGQoJnVubmFtZWRUeXBlLCAmcmVzdWx0KTsKKyAgICAgICAgICAg
IEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAg
IH0KKyAgICAgICAgdmVjdG9yVG9JbnNlcnRJbnRvLT5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsK
KyAgICAgICAgcmV0dXJuIHZlY3RvclRvSW5zZXJ0SW50by0+c2l6ZSgpIC0gMTsKKyAgICB9Cisg
ICAgYXV0byBhZGRSZXN1bHQgPSBtX3VubmFtZWRUeXBlTWFwcGluZy5hZGQoJnVubmFtZWRUeXBl
LCAmKml0ZXJhdG9yKTsKKyAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0Lmlz
TmV3RW50cnkpOworICAgIHJldHVybiBpdGVyYXRvciAtIHZlY3RvclRvSW5zZXJ0SW50by0+YmVn
aW4oKTsKK30KKworY2xhc3MgTWV0YWxUeXBlRGVjbGFyYXRpb25Xcml0ZXIgOiBwdWJsaWMgVmlz
aXRvciB7CitwdWJsaWM6CisgICAgTWV0YWxUeXBlRGVjbGFyYXRpb25Xcml0ZXIoc3RkOjpmdW5j
dGlvbjxTdHJpbmcoQVNUOjpOYW1lZFR5cGUmKT4mJiBtYW5nbGVkTmFtZUZvck5hbWVkVHlwZSwg
c3RkOjpmdW5jdGlvbjxTdHJpbmcoQVNUOjpVbm5hbWVkVHlwZSYpPiYmIG1hbmdsZWROYW1lRm9y
VW5uYW1lZFR5cGUsIHN0ZDo6ZnVuY3Rpb248U3RyaW5nKEFTVDo6RW51bWVyYXRpb25NZW1iZXIm
KT4mJiBtYW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVtYmVyKQorICAgICAgICA6IG1fbWFuZ2xl
ZE5hbWVGb3JOYW1lZFR5cGUoV1RGTW92ZShtYW5nbGVkTmFtZUZvck5hbWVkVHlwZSkpCisgICAg
ICAgICwgbV9tYW5nbGVkTmFtZUZvclVubmFtZWRUeXBlKFdURk1vdmUobWFuZ2xlZE5hbWVGb3JV
bm5hbWVkVHlwZSkpCisgICAgICAgICwgbV9tYW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVtYmVy
KFdURk1vdmUobWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJlcikpCisgICAgeworICAgIH0K
KworICAgIFN0cmluZyB0b1N0cmluZygpIHsgcmV0dXJuIG1fc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5p
dGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQorICAgIHsKKyAgICAgICAgYXV0byYgYmFzZVR5
cGUgPSBlbnVtZXJhdGlvbkRlZmluaXRpb24udHlwZSgpLnVuaWZ5Tm9kZSgpOworICAgICAgICBB
U1NFUlQoaXM8QVNUOjpOYW1lZFR5cGU+KGJhc2VUeXBlKSk7CisgICAgICAgIG1fc3RyaW5nQnVp
bGRlci5hcHBlbmQobWFrZVN0cmluZygiZW51bSBjbGFzcyAiLCBtX21hbmdsZWROYW1lRm9yTmFt
ZWRUeXBlKGVudW1lcmF0aW9uRGVmaW5pdGlvbiksICIgOiAiLCBtX21hbmdsZWROYW1lRm9yTmFt
ZWRUeXBlKGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPihiYXNlVHlwZSkpLCAiIHtcbiIpKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbk1lbWJlciA6IGVudW1lcmF0aW9uRGVmaW5pdGlv
bi5lbnVtZXJhdGlvbk1lbWJlcnMoKSkKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZygiICAgICIsIG1fbWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJlcihl
bnVtZXJhdGlvbk1lbWJlciksICIsXG4iKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQoIn07XG4iKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaW5p
dGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikKKyAgICB7CisgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWFrZVN0cmluZygic3RydWN0ICIsIG1fbWFuZ2xlZE5hbWVGb3JOYW1lZFR5cGUo
c3RydWN0dXJlRGVmaW5pdGlvbiksICI7XG4iKSk7CisgICAgfQorCisgICAgc3RkOjpmdW5jdGlv
bjxTdHJpbmcoQVNUOjpOYW1lZFR5cGUmKT4gbV9tYW5nbGVkTmFtZUZvck5hbWVkVHlwZTsKKyAg
ICBzdGQ6OmZ1bmN0aW9uPFN0cmluZyhBU1Q6OlVubmFtZWRUeXBlJik+IG1fbWFuZ2xlZE5hbWVG
b3JVbm5hbWVkVHlwZTsKKyAgICBzdGQ6OmZ1bmN0aW9uPFN0cmluZyhBU1Q6OkVudW1lcmF0aW9u
TWVtYmVyJik+JiYgbV9tYW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVtYmVyOworICAgIFN0cmlu
Z0J1aWxkZXIgbV9zdHJpbmdCdWlsZGVyOworfTsKKworU3RyaW5nIFR5cGVOYW1lcjo6bWV0YWxU
eXBlRGVjbGFyYXRpb25zKCkKK3sKKyAgICBNZXRhbFR5cGVEZWNsYXJhdGlvbldyaXRlciBtZXRh
bFR5cGVEZWNsYXJhdGlvbldyaXRlcihbJl0oQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkgLT4g
U3RyaW5nIHsKKyAgICAgICAgcmV0dXJuIG1hbmdsZWROYW1lRm9yVHlwZShuYW1lZFR5cGUpOwor
ICAgIH0sIFsmXShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkgLT4gU3RyaW5nIHsKKyAg
ICAgICAgcmV0dXJuIG1hbmdsZWROYW1lRm9yVHlwZSh1bm5hbWVkVHlwZSk7CisgICAgfSwgWyZd
KEFTVDo6RW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVtYmVyKSAtPiBTdHJpbmcgewor
ICAgICAgICByZXR1cm4gbWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJlcihlbnVtZXJhdGlv
bk1lbWJlcik7CisgICAgfSk7CisgICAgbWV0YWxUeXBlRGVjbGFyYXRpb25Xcml0ZXIuVmlzaXRv
cjo6dmlzaXQobV9wcm9ncmFtKTsKKyAgICByZXR1cm4gbWV0YWxUeXBlRGVjbGFyYXRpb25Xcml0
ZXIudG9TdHJpbmcoKTsKK30KKworc3RhdGljIFN0cmluZyB0b1N0cmluZyhBU1Q6OkFkZHJlc3NT
cGFjZSBhZGRyZXNzU3BhY2UpCit7CisgICAgc3dpdGNoIChhZGRyZXNzU3BhY2UpIHsKKyAgICBj
YXNlIEFTVDo6QWRkcmVzc1NwYWNlOjpDb25zdGFudDoKKyAgICAgICAgcmV0dXJuICJjb25zdGFu
dCJfc3RyOworICAgIGNhc2UgQVNUOjpBZGRyZXNzU3BhY2U6OkRldmljZToKKyAgICAgICAgcmV0
dXJuICJkZXZpY2UiX3N0cjsKKyAgICBjYXNlIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWRncm91
cDoKKyAgICAgICAgcmV0dXJuICJ0aHJlYWRncm91cCJfc3RyOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEFTU0VSVChhZGRyZXNzU3BhY2UgPT0gQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCk7Cisg
ICAgICAgIHJldHVybiAidGhyZWFkIl9zdHI7CisgICAgfQorfQorCit2b2lkIFR5cGVOYW1lcjo6
ZW1pdFVubmFtZWRUeXBlRGVmaW5pdGlvbihCYXNlVHlwZU5hbWVOb2RlJiBiYXNlVHlwZU5hbWVO
b2RlLCBIYXNoU2V0PEFTVDo6TmFtZWRUeXBlKj4mIGVtaXR0ZWROYW1lZFR5cGVzLCBIYXNoU2V0
PEJhc2VUeXBlTmFtZU5vZGUqPiYgZW1pdHRlZFVubmFtZWRUeXBlcywgU3RyaW5nQnVpbGRlciYg
c3RyaW5nQnVpbGRlcikKK3sKKyAgICBpZiAoZW1pdHRlZFVubmFtZWRUeXBlcy5jb250YWlucygm
YmFzZVR5cGVOYW1lTm9kZSkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoYmFzZVR5cGVOYW1l
Tm9kZS5wYXJlbnQoKSkKKyAgICAgICAgZW1pdFVubmFtZWRUeXBlRGVmaW5pdGlvbigqYmFzZVR5
cGVOYW1lTm9kZS5wYXJlbnQoKSwgZW1pdHRlZE5hbWVkVHlwZXMsIGVtaXR0ZWRVbm5hbWVkVHlw
ZXMsIHN0cmluZ0J1aWxkZXIpOworICAgIGlmIChpczxSZWZlcmVuY2VUeXBlTmFtZU5vZGU+KGJh
c2VUeXBlTmFtZU5vZGUpKSB7CisgICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PFJl
ZmVyZW5jZVR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9kZSkubmFtZWRUeXBlKCk7CisgICAg
ICAgIGVtaXROYW1lZFR5cGVEZWZpbml0aW9uKG5hbWVkVHlwZSwgZW1pdHRlZE5hbWVkVHlwZXMs
IGVtaXR0ZWRVbm5hbWVkVHlwZXMsIHN0cmluZ0J1aWxkZXIpOworICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ0eXBlZGVmICIsIG1hbmdsZWROYW1lRm9yVHlwZShuYW1l
ZFR5cGUpLCAnICcsIGJhc2VUeXBlTmFtZU5vZGUubWFuZ2xlZE5hbWUoKSwgIjtcbiIpKTsKKyAg
ICB9IGVsc2UgaWYgKGlzPFBvaW50ZXJUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpKSB7
CisgICAgICAgIGF1dG8mIHBvaW50ZXJUeXBlID0gZG93bmNhc3Q8UG9pbnRlclR5cGVOYW1lTm9k
ZT4oYmFzZVR5cGVOYW1lTm9kZSk7CisgICAgICAgIEFTU0VSVChiYXNlVHlwZU5hbWVOb2RlLnBh
cmVudCgpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygidHlwZWRl
ZiAiLCB0b1N0cmluZyhwb2ludGVyVHlwZS5hZGRyZXNzU3BhY2UoKSksICIgIiwgcG9pbnRlclR5
cGUucGFyZW50KCktPm1hbmdsZWROYW1lKCksICIqICIsIHBvaW50ZXJUeXBlLm1hbmdsZWROYW1l
KCksICI7XG4iKSk7CisgICAgfSBlbHNlIGlmIChpczxBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9k
ZT4oYmFzZVR5cGVOYW1lTm9kZSkpIHsKKyAgICAgICAgYXV0byYgYXJyYXlSZWZlcmVuY2VUeXBl
ID0gZG93bmNhc3Q8QXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUp
OworICAgICAgICBBU1NFUlQoYmFzZVR5cGVOYW1lTm9kZS5wYXJlbnQoKSk7CisgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInN0cnVjdCAiLCBhcnJheVJlZmVyZW5jZVR5
cGUubWFuZ2xlZE5hbWUoKSwgInsgXG4iKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KG1ha2VTdHJpbmcoIiAgICAiLCB0b1N0cmluZyhhcnJheVJlZmVyZW5jZVR5cGUuYWRkcmVzc1Nw
YWNlKCkpLCAiICIsIGFycmF5UmVmZXJlbmNlVHlwZS5wYXJlbnQoKS0+bWFuZ2xlZE5hbWUoKSwg
IiogcG9pbnRlcjtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICB1bnNp
Z25lZCBsZW5ndGg7XG4iKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn07XG4iKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoaXM8QXJyYXlUeXBlTmFtZU5vZGU+KGJhc2VU
eXBlTmFtZU5vZGUpKTsKKyAgICAgICAgYXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8QXJyYXlU
eXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpOworICAgICAgICBBU1NFUlQoYmFzZVR5cGVO
YW1lTm9kZS5wYXJlbnQoKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcoInR5cGVkZWYgQXJyYXk8IiwgYXJyYXlUeXBlLnBhcmVudCgpLT5tYW5nbGVkTmFtZSgpLCAi
LCAiLCBhcnJheVR5cGUubnVtRWxlbWVudHMoKSwgIj4gIiwgYXJyYXlUeXBlLm1hbmdsZWROYW1l
KCksICI7XG4iKSk7CisgICAgfQorICAgIGVtaXR0ZWRVbm5hbWVkVHlwZXMuYWRkKCZiYXNlVHlw
ZU5hbWVOb2RlKTsKK30KKwordm9pZCBUeXBlTmFtZXI6OmVtaXROYW1lZFR5cGVEZWZpbml0aW9u
KEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUsIEhhc2hTZXQ8QVNUOjpOYW1lZFR5cGUqPiYgZW1p
dHRlZE5hbWVkVHlwZXMsIEhhc2hTZXQ8QmFzZVR5cGVOYW1lTm9kZSo+JiBlbWl0dGVkVW5uYW1l
ZFR5cGVzLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQoreworICAgIGlmIChlbWl0dGVk
TmFtZWRUeXBlcy5jb250YWlucygmbmFtZWRUeXBlKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1
dG8gaXRlcmF0b3IgPSBtX2RlcGVuZGVuY3lHcmFwaC5maW5kKCZuYW1lZFR5cGUpOworICAgIEFT
U0VSVChpdGVyYXRvciAhPSBtX2RlcGVuZGVuY3lHcmFwaC5lbmQoKSk7CisgICAgZm9yIChhdXRv
JiBiYXNlVHlwZU5hbWVOb2RlIDogaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICBlbWl0VW5uYW1l
ZFR5cGVEZWZpbml0aW9uKGJhc2VUeXBlTmFtZU5vZGUsIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0
dGVkVW5uYW1lZFR5cGVzLCBzdHJpbmdCdWlsZGVyKTsKKyAgICBpZiAoaXM8QVNUOjpFbnVtZXJh
dGlvbkRlZmluaXRpb24+KG5hbWVkVHlwZSkpIHsKKyAgICAgICAgLy8gV2UgYWxyZWFkeSBlbWl0
dGVkIHRoaXMgaW4gdGhlIHR5cGUgZGVjbGFyYXRpb24gc2VjdGlvbi4gVGhlcmUncyBub3RoaW5n
IHRvIGRvLgorICAgIH0gZWxzZSBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5h
bWVkVHlwZSkpIHsKKyAgICAgICAgLy8gTmF0aXZlIHR5cGVzIGFscmVhZHkgaGF2ZSBkZWZpbml0
aW9ucy4gVGhlcmUncyBub3RoaW5nIHRvIGRvLgorICAgIH0gZWxzZSBpZiAoaXM8QVNUOjpTdHJ1
Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpKSB7CisgICAgICAgIGF1dG8mIHN0cnVjdHVyZURl
ZmluaXRpb24gPSBkb3duY2FzdDxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSk7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInN0cnVjdCAiLCBtYW5n
bGVkTmFtZUZvclR5cGUoc3RydWN0dXJlRGVmaW5pdGlvbiksICIge1xuIikpOworICAgICAgICBm
b3IgKGF1dG8mIHN0cnVjdHVyZUVsZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLnN0cnVjdHVy
ZUVsZW1lbnRzKCkpCisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KCIgICAgIiwgbWFuZ2xlZE5hbWVGb3JUeXBlKHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpKSwgJyAn
LCBtYW5nbGVkTmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoc3RydWN0dXJlRWxlbWVudCksICI7XG4i
KSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9O1xuIik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgQVNTRVJUKGlzPEFTVDo6VHlwZURlZmluaXRpb24+KG5hbWVkVHlwZSkpOworICAg
ICAgICBhdXRvJiB0eXBlRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6VHlwZURlZmluaXRpb24+
KG5hbWVkVHlwZSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInR5
cGVkZWYgIiwgbWFuZ2xlZE5hbWVGb3JUeXBlKHR5cGVEZWZpbml0aW9uLnR5cGUoKSksICcgJywg
bWFuZ2xlZE5hbWVGb3JUeXBlKHR5cGVEZWZpbml0aW9uKSwgIjtcbiIpKTsKKyAgICB9CisgICAg
ZW1pdHRlZE5hbWVkVHlwZXMuYWRkKCZuYW1lZFR5cGUpOworfQorCitTdHJpbmcgVHlwZU5hbWVy
OjptZXRhbFR5cGVEZWZpbml0aW9ucygpCit7CisgICAgSGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+
IGVtaXR0ZWROYW1lZFR5cGVzOworICAgIEhhc2hTZXQ8QmFzZVR5cGVOYW1lTm9kZSo+IGVtaXR0
ZWRVbm5hbWVkVHlwZXM7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIGZv
ciAoYXV0byYga2V5VmFsdWVQYWlyIDogbV9kZXBlbmRlbmN5R3JhcGgpCisgICAgICAgIGVtaXRO
YW1lZFR5cGVEZWZpbml0aW9uKCprZXlWYWx1ZVBhaXIua2V5LCBlbWl0dGVkTmFtZWRUeXBlcywg
ZW1pdHRlZFVubmFtZWRUeXBlcywgc3RyaW5nQnVpbGRlcik7CisgICAgZm9yIChhdXRvJiBiYXNl
VHlwZU5hbWVOb2RlIDogbV90cmllKQorICAgICAgICBlbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9u
KGJhc2VUeXBlTmFtZU5vZGUsIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVz
LCBzdHJpbmdCdWlsZGVyKTsKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwor
fQorCitTdHJpbmcgVHlwZU5hbWVyOjptYW5nbGVkTmFtZUZvclR5cGUoQVNUOjpVbm5hbWVkVHlw
ZSYgdW5uYW1lZFR5cGUpCit7CisgICAgcmV0dXJuIGZpbmQodW5uYW1lZFR5cGUsIG1fdHJpZSku
bWFuZ2xlZE5hbWUoKTsKK30KKworU3RyaW5nIFR5cGVOYW1lcjo6bWFuZ2xlZE5hbWVGb3JUeXBl
KEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUpCit7CisgICAgaWYgKGlzPEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKQorICAgICAgICByZXR1cm4gbWFuZ2xlZE5hbWVGb3JU
eXBlKGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKTsKKyAg
ICBhdXRvIGl0ZXJhdG9yID0gbV9uYW1lZFR5cGVNYXBwaW5nLmZpbmQoJm5hbWVkVHlwZSk7Cisg
ICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fbmFtZWRUeXBlTWFwcGluZy5lbmQoKSk7CisgICAgcmV0
dXJuIGl0ZXJhdG9yLT52YWx1ZTsKK30KKworCitTdHJpbmcgVHlwZU5hbWVyOjptYW5nbGVkTmFt
ZUZvckVudW1lcmF0aW9uTWVtYmVyKEFTVDo6RW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9u
TWVtYmVyKQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBtX2VudW1lcmF0aW9uTWVtYmVyTWFwcGlu
Zy5maW5kKCZlbnVtZXJhdGlvbk1lbWJlcik7CisgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fZW51
bWVyYXRpb25NZW1iZXJNYXBwaW5nLmVuZCgpKTsKKyAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVl
OworfQorCitTdHJpbmcgVHlwZU5hbWVyOjptYW5nbGVkTmFtZUZvclN0cnVjdHVyZUVsZW1lbnQo
QVNUOjpTdHJ1Y3R1cmVFbGVtZW50JiBzdHJ1Y3R1cmVFbGVtZW50KQoreworICAgIGF1dG8gaXRl
cmF0b3IgPSBtX3N0cnVjdHVyZUVsZW1lbnRNYXBwaW5nLmZpbmQoJnN0cnVjdHVyZUVsZW1lbnQp
OworICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX3N0cnVjdHVyZUVsZW1lbnRNYXBwaW5nLmVuZCgp
KTsKKyAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlOworfQorCitTdHJpbmcgVHlwZU5hbWVyOjpt
ZXRhbFR5cGVzKCkKK3sKKyAgICBWaXNpdG9yOjp2aXNpdChtX3Byb2dyYW0pOworICAgIFN0cmlu
Z0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtZXRhbFR5
cGVEZWNsYXJhdGlvbnMoKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQobWV0YWxUeXBlRGVmaW5pdGlvbnMoKSk7CisgICAgcmV0dXJu
IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30KKworfQorCit9CisKK30KKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExT
TFR5cGVOYW1lci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwv
V0hMU0xUeXBlTmFtZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNzBhMGU3MWE5MzM4ZDY3ODBhN2U3NGI3NDM1
NmZkNDI3Mzk1YTA5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuaApAQCAtMCwwICsxLDEyMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUg
IldITFNMVmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25j
YXRlbmF0ZU51bWJlcnMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsK
KworY2xhc3MgRW51bWVyYXRpb25EZWZpbml0aW9uOworY2xhc3MgRW51bWVyYXRpb25NZW1iZXI7
CitjbGFzcyBOYW1lZFR5cGU7CitjbGFzcyBOYXRpdmVUeXBlRGVjbGFyYXRpb247CitjbGFzcyBT
dHJ1Y3R1cmVEZWZpbml0aW9uOworY2xhc3MgVHlwZURlZmluaXRpb247CitjbGFzcyBVbm5hbWVk
VHlwZTsKKworfQorCitjbGFzcyBQcm9ncmFtOworCituYW1lc3BhY2UgTWV0YWwgeworCitjbGFz
cyBCYXNlVHlwZU5hbWVOb2RlOworCitjbGFzcyBUeXBlTmFtZXIgOiBwcml2YXRlIFZpc2l0b3Ig
eworcHVibGljOgorICAgIFR5cGVOYW1lcihQcm9ncmFtJik7CisgICAgdmlydHVhbCB+VHlwZU5h
bWVyKCk7CisKKyAgICBTdHJpbmcgbWV0YWxUeXBlcygpOworCisgICAgLy8gTXVzdCBiZSBjYWxs
ZWQgYWZ0ZXIgY2FsbGluZyBtZXRhbFR5cGVzKCkuCisgICAgU3RyaW5nIG1hbmdsZWROYW1lRm9y
VHlwZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworICAgIFN0cmluZyBtYW5nbGVkTmFt
ZUZvclR5cGUoQVNUOjpVbm5hbWVkVHlwZSYpOworICAgIFN0cmluZyBtYW5nbGVkTmFtZUZvclR5
cGUoQVNUOjpOYW1lZFR5cGUmKTsKKyAgICBTdHJpbmcgbWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlv
bk1lbWJlcihBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJik7CisgICAgU3RyaW5nIG1hbmdsZWROYW1l
Rm9yU3RydWN0dXJlRWxlbWVudChBU1Q6OlN0cnVjdHVyZUVsZW1lbnQmKTsKKworICAgIFN0cmlu
ZyBnZW5lcmF0ZU5leHRUeXBlTmFtZSgpCisgICAgeworICAgICAgICByZXR1cm4gbWFrZVN0cmlu
ZygidHlwZSIsIG1fdHlwZUNvdW50KyspOworICAgIH0KKworICAgIFN0cmluZyBnZW5lcmF0ZU5l
eHRTdHJ1Y3R1cmVFbGVtZW50TmFtZSgpCisgICAgeworICAgICAgICByZXR1cm4gbWFrZVN0cmlu
Zygic3RydWN0dXJlRWxlbWVudCIsIG1fc3RydWN0dXJlRWxlbWVudENvdW50KyspOworICAgIH0K
KworcHJpdmF0ZToKKyAgICB2b2lkIHZpc2l0KEFTVDo6VW5uYW1lZFR5cGUmKSBvdmVycmlkZTsK
KyAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpIG92ZXJyaWRlOworICAg
IHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9p
ZCB2aXNpdChBU1Q6OlR5cGVEZWZpbml0aW9uJikgb3ZlcnJpZGU7CisKKyAgICBTdHJpbmcgZ2Vu
ZXJhdGVOZXh0RW51bWVyYXRpb25NZW1iZXJOYW1lKCkKKyAgICB7CisgICAgICAgIHJldHVybiBt
YWtlU3RyaW5nKCJlbnVtZXJhdGlvbk1lbWJlciIsIG1fZW51bWVyYXRpb25NZW1iZXJDb3VudCsr
KTsKKyAgICB9CisKKyAgICB2b2lkIGVtaXROYW1lZFR5cGVEZWZpbml0aW9uKEFTVDo6TmFtZWRU
eXBlJiwgSGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+JiBlbWl0dGVkTmFtZWRUeXBlcywgSGFzaFNl
dDxCYXNlVHlwZU5hbWVOb2RlKj4mIGVtaXR0ZWRVbm5hbWVkVHlwZXMsIFN0cmluZ0J1aWxkZXIm
KTsKKyAgICB2b2lkIGVtaXRVbm5hbWVkVHlwZURlZmluaXRpb24oQmFzZVR5cGVOYW1lTm9kZSYs
IEhhc2hTZXQ8QVNUOjpOYW1lZFR5cGUqPiYgZW1pdHRlZE5hbWVkVHlwZXMsIEhhc2hTZXQ8QmFz
ZVR5cGVOYW1lTm9kZSo+JiBlbWl0dGVkVW5uYW1lZFR5cGVzLCBTdHJpbmdCdWlsZGVyJik7Cisg
ICAgU3RyaW5nIG1ldGFsVHlwZURlY2xhcmF0aW9ucygpOworICAgIFN0cmluZyBtZXRhbFR5cGVE
ZWZpbml0aW9ucygpOworCisgICAgVW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+IGNyZWF0ZU5h
bWVOb2RlKEFTVDo6VW5uYW1lZFR5cGUmLCBCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQpOworICAg
IHNpemVfdCBpbnNlcnQoQVNUOjpVbm5hbWVkVHlwZSYsIFZlY3RvcjxVbmlxdWVSZWY8QmFzZVR5
cGVOYW1lTm9kZT4+Jik7CisKKyAgICBQcm9ncmFtJiBtX3Byb2dyYW07CisgICAgVmVjdG9yPFVu
aXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPj4gbV90cmllOworICAgIEhhc2hNYXA8QVNUOjpVbm5h
bWVkVHlwZSosIEJhc2VUeXBlTmFtZU5vZGUqPiBtX3VubmFtZWRUeXBlTWFwcGluZzsKKyAgICBI
YXNoTWFwPEFTVDo6TmFtZWRUeXBlKiwgU3RyaW5nPiBtX25hbWVkVHlwZU1hcHBpbmc7CisgICAg
SGFzaE1hcDxBU1Q6Ok5hbWVkVHlwZSosIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEJh
c2VUeXBlTmFtZU5vZGU+Pj4gbV9kZXBlbmRlbmN5R3JhcGg7CisgICAgSGFzaE1hcDxBU1Q6OkVu
dW1lcmF0aW9uTWVtYmVyKiwgU3RyaW5nPiBtX2VudW1lcmF0aW9uTWVtYmVyTWFwcGluZzsKKyAg
ICBIYXNoTWFwPEFTVDo6U3RydWN0dXJlRWxlbWVudCosIFN0cmluZz4gbV9zdHJ1Y3R1cmVFbGVt
ZW50TWFwcGluZzsKKyAgICB1bnNpZ25lZCBtX3R5cGVDb3VudCB7IDAgfTsKKyAgICB1bnNpZ25l
ZCBtX2VudW1lcmF0aW9uTWVtYmVyQ291bnQgeyAwIH07CisgICAgdW5zaWduZWQgbV9zdHJ1Y3R1
cmVFbGVtZW50Q291bnQgeyAwIH07Cit9OworCit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3Bw
CmluZGV4IDYwYjBlZmVlY2FjMjQ2M2U1MWE4ZWMxMjNkY2NmN2EyMGE0NmY5ZTYuLjNjN2U4OTMw
MjMzNTg2N2JmYzcxYTU5ZjRjOGNjNWY3ZTVlZjU0OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcApAQCAtNjEyLDE2ICs2
MTIsMTIgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYg
ZW51bWVyYXRpb25EZWZpbml0aW9uKQogICAgIGF1dG8qIGJhc2VUeXBlID0gKFsmXSgpIC0+IEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiB7CiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChl
bnVtZXJhdGlvbkRlZmluaXRpb24udHlwZSgpKTsKICAgICAgICAgYXV0byYgYmFzZVR5cGUgPSBl
bnVtZXJhdGlvbkRlZmluaXRpb24udHlwZSgpLnVuaWZ5Tm9kZSgpOwotICAgICAgICBpZiAoIWlz
PEFTVDo6VW5uYW1lZFR5cGU+KGJhc2VUeXBlKSkKKyAgICAgICAgaWYgKCFpczxBU1Q6Ok5hbWVk
VHlwZT4oYmFzZVR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGF1
dG8mIHVubmFtZWRCYXNlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4oYmFzZVR5cGUpOwot
ICAgICAgICBpZiAoIWlzPEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZEJhc2UpKQorICAgICAg
ICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4oYmFzZVR5cGUpOwor
ICAgICAgICBpZiAoIWlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGF1dG8mIHR5cGVSZWZlcmVuY2VC
YXNlID0gZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkQmFzZSk7Ci0gICAgICAg
IEFTU0VSVCh0eXBlUmVmZXJlbmNlQmFzZS5yZXNvbHZlZFR5cGUoKSk7Ci0gICAgICAgIGlmICgh
aXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCp0eXBlUmVmZXJlbmNlQmFzZS5yZXNvbHZl
ZFR5cGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgYXV0byYgbmF0
aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+
KCp0eXBlUmVmZXJlbmNlQmFzZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIGF1dG8mIG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihu
YW1lZFR5cGUpOwogICAgICAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc0ludCgpKQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiAmbmF0aXZlVHlwZURl
Y2xhcmF0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBiNjEyNDE5MmNlOTQ0NTJmNmQxZmU0YmJmMzA5
ZmNkYWM0MWI0NzJhLi5lYTc2ODRlODM2ZDJlMDFhZGNhOGE2N2I1N2MxMmM3MzUyZTU4YmVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dApAQCAtMzI2LDYgKzMyNiw4IEBAIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMVmlzaXRvci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGl0ZXJhbFR5cGVDaGVj
a2VyLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xIaWdoWm9tYmllRmluZGVyLmNwcAog
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMb29wQ2hlY2tlci5jcHAKK01vZHVsZXMvd2ViZ3B1
L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0
YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMRnVu
Y3Rpb25TdGFnZUNoZWNrZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBl
QXJndW1lbnQuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50
aWMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggNWVhMDliMGJjN2IxY2UxMTU4NGYyZDY4OTgzNGRiMjc1NDg2NGJhNC4uODZl
NzY5ZGI4OTZkMDE0YjFiNDk3MjU2NjhiOGZlNmYwZGUyZjg0MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjQzMCwxNyArNjQz
MCwxNiBAQAogCQkxQzg0MEI5QTIxRUM0MDA5MDBEMDUwMEQgLyogV0hMU0xHYXRoZXJFbnRyeVBv
aW50SXRlbXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4NDBCOUIyMUVDNDAwOTAwRDA1MDBEIC8q
IFdITFNMQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTENoZWNrZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzkwNERGOTBCQTlEMkM4MDA4MUU5RDAgLyog
VmVyc2lvbi54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBWZXJzaW9u
LnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQ0EwQzJFNDIxRUVEMTJB
MDBBMTE4NjAgLyogV0hMU0xGdW5jdGlvblN0YWdlQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXSExTTEZ1bmN0aW9uU3RhZ2VDaGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMUNBMEMyRTUyMUVFRDEyQTAwQTExODYwIC8qIFdITFNMRnVuY3Rpb25TdGFnZUNo
ZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xGdW5jdGlvblN0YWdlQ2hlY2tlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzlBRTVDQTIxRUQ5REY1MDA2OUQ1RjIgLyogV0hM
U0xIaWdoWm9tYmllRmluZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMSGlnaFpvbWJp
ZUZpbmRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDOUFFNUNCMjFFRDlE
RjUwMDY5RDVGMiAvKiBXSExTTEhpZ2hab21iaWVGaW5kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hM
U0xIaWdoWm9tYmllRmluZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQTBD
MkRFMjFFRUI1RjQwMEExMTg2MCAvKiBXSExTTFJlY3Vyc2lvbkNoZWNrZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0hMU0xSZWN1cnNpb25DaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFDQTBDMkUwMjFFRUI1RjUwMEExMTg2MCAvKiBXSExTTFJlY3Vyc2lvbkNoZWNrZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xSZWN1cnNpb25DaGVja2VyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNBMEMyRTQyMUVFRDEyQTAwQTExODYwIC8qIFdITFNMRnVu
Y3Rpb25TdGFnZUNoZWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xGdW5jdGlvblN0
YWdlQ2hlY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQTBDMkU1MjFF
RUQxMkEwMEExMTg2MCAvKiBXSExTTEZ1bmN0aW9uU3RhZ2VDaGVja2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdITFNMRnVuY3Rpb25TdGFnZUNoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUNBMEMyRUEyMUVFRDZGNTAwQTExODYwIC8qIFdITFNMTGl0ZXJhbFR5cGVDaGVja2Vy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMTGl0ZXJhbFR5cGVDaGVja2VyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFDQTBDMkVDMjFFRUQ2RjYwMEExMTg2MCAvKiBXSExTTExpdGVy
YWxUeXBlQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTExpdGVyYWxUeXBlQ2hl
Y2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFDOUFFNUNBMjFFRDlERjUw
MDY5RDVGMiAvKiBXSExTTEhpZ2hab21iaWVGaW5kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V0hMU0xIaWdoWm9tYmllRmluZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MUM5QUU1Q0IyMUVEOURGNTAwNjlENUYyIC8qIFdITFNMSGlnaFpvbWJpZUZpbmRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXSExTTEhpZ2hab21iaWVGaW5kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUNBMEMyRjQyMUVFREFEMDAwQTExODYwIC8qIFdITFNMTG9vcENoZWNrZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xMb29wQ2hlY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFDQTBDMkY1MjFFRURBRDEwMEExMTg2MCAvKiBXSExTTExvb3BDaGVj
a2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMTG9vcENoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMUNBMEMyRjYyMUVFREFEMjAwQTExODYwIC8qIEFTVCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZvbGRlcjsgcGF0aCA9IEFT
VDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBMTlFMDMwREMyNTU5NTAwNjVBOTk0
IC8qIEV2ZW50TG9vcE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IEV2ZW50TG9vcE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBMTlF
MTUwREMyNTVDQTAwNjVBOTk0IC8qIEV2ZW50TG9vcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBFdmVudExvb3AuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNB
RjM0N0UwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTY3JpcHRPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTY0NTcsNiArNjQ1Niw4IEBACiAJCTFDQjY5QjNCMjFERjA0MUUwMDZFODQ2
QSAvKiBXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQ0I2QjRGODIxN0I4MzkzMDA5M0I5Q0QgLyogVGV4dERlY29yYXRpb25U
aGlja25lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dERlY29yYXRpb25UaGlja25lc3MuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNCNkI0RkIyMTdCODM5NDAwOTNCOUNEIC8qIFRl
eHRVbmRlcmxpbmVPZmZzZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFVuZGVybGluZU9mZnNldC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0M4M0RFMTIxRjE1RDNEMDA2NDA0MkUg
LyogV0hMU0xGdW5jdGlvbldyaXRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTEZ1bmN0
aW9uV3JpdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNDODNERTIyMUYx
NUQzRDAwNjQwNDJFIC8qIFdITFNMRnVuY3Rpb25Xcml0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hM
U0xGdW5jdGlvbldyaXRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0NERjVC
QjE5OTAzMzI0MDBCQ0VCQUQgLyogU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdUb09URkZvbnRDb252ZXJzaW9uLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNDREY1QkMxOTkwMzMyNDAwQkNFQkFEIC8q
IFNWR1RvT1RGRm9udENvbnZlcnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1ZHVG9PVEZGb250Q29udmVyc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQ0RENDVFNDBCQTlDODQ2MDBGOTAxNDcgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IERlYnVnUmVsZWFzZS54Y2NvbmZpZzsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMzkxLDYgKzEzMzkyLDggQEAKIAkJQzI0NThFNjEx
RkU4OTc5RTAwNTk0NzU5IC8qIEZvbnRDYWNoZUNvcmVUZXh0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZv
bnRDYWNoZUNvcmVUZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNjAxN0Ex
MUM3MkRDOTkwMEY3NEExNiAvKiBDU1NGb250RmFjZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGb250RmFjZVNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyNjAxN0EyMUM3MkRDOTkwMEY3NEExNiAvKiBDU1NGb250RmFjZVNldC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGb250RmFjZVNldC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjZEMkM3MDIxRjA1RDU1MDA0OTc4OTkgLyogV0hM
U0xUeXBlTmFtZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xUeXBlTmFtZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjZEMkM3MTIxRjA1RDU1MDA0OTc4OTkgLyog
V0hMU0xUeXBlTmFtZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xUeXBlTmFtZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4MDgzM0MxQzZEQjE5NDAwMTQ1MUI2IC8qIEZvbnRG
YWNlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBGb250RmFjZS5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUMyODA4MzNEMUM2REMyMkMwMDE0NTFCNiAvKiBKU0ZvbnRGYWNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTRm9udEZhY2UuY3Bw
OyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ZvbnRGYWNlLmNwcDsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJQzI4MDgzM0UxQzZEQzIyQzAwMTQ1MUI2IC8q
IEpTRm9udEZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNGb250RmFj
ZS5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ZvbnRGYWNlLmg7IHNvdXJjZVRy
ZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC0xNzAzOCw2ICsxNzA0MSwxMDAgQEAKIAkJ
CXRhYldpZHRoID0gODsKIAkJCXVzZXNUYWJzID0gMDsKIAkJfTsKKwkJMUNBMEMyRjYyMUVFREFE
MjAwQTExODYwIC8qIEFTVCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4g
PSAoCisJCQkJMUM4NDBCOTAyMUVDMzBGOTAwRDA1MDBEIC8qIFdITFNMQWRkcmVzc1NwYWNlLmgg
Ki8sCisJCQkJQzIxQkY3MjUyMUNEODlFMjAwMjI3OTc5IC8qIFdITFNMQXJyYXlSZWZlcmVuY2VU
eXBlLmggKi8sCisJCQkJQzIxQkY3MDkyMUNEODlDQTAwMjI3OTc5IC8qIFdITFNMQXJyYXlUeXBl
LmggKi8sCisJCQkJQzIxQkY3MzAyMUNEODlFRDAwMjI3OTc5IC8qIFdITFNMQXNzaWdubWVudEV4
cHJlc3Npb24uaCAqLywKKwkJCQlDMjFCRjcwQTIxQ0Q4OUNCMDAyMjc5NzkgLyogV0hMU0xCYXNl
RnVuY3Rpb25BdHRyaWJ1dGUuaCAqLywKKwkJCQlDMjFCRjZGQTIxQ0Q4OUJFMDAyMjc5NzkgLyog
V0hMU0xCYXNlU2VtYW50aWMuaCAqLywKKwkJCQlDMjFCRjcxRTIxQ0Q4OURDMDAyMjc5NzkgLyog
V0hMU0xCbG9jay5oICovLAorCQkJCUMyMUJGNkY2MjFDRDg5QjcwMDIyNzk3OSAvKiBXSExTTEJv
b2xlYW5MaXRlcmFsLmggKi8sCisJCQkJQzIxQkY3MUEyMUNEODlEODAwMjI3OTc5IC8qIFdITFNM
QnJlYWsuaCAqLywKKwkJCQlDMjEzOEExMzIxRERFQ0QzMDBGNTE2QkEgLyogV0hMU0xCdWlsdElu
U2VtYW50aWMuY3BwICovLAorCQkJCUMyMUJGNzIyMjFDRDg5REYwMDIyNzk3OSAvKiBXSExTTEJ1
aWx0SW5TZW1hbnRpYy5oICovLAorCQkJCUMyMUJGNzE2MjFDRDg5RDUwMDIyNzk3OSAvKiBXSExT
TENhbGxFeHByZXNzaW9uLmggKi8sCisJCQkJQzIxQkY3MDYyMUNEODlDNzAwMjI3OTc5IC8qIFdI
TFNMQ29tbWFFeHByZXNzaW9uLmggKi8sCisJCQkJQzIxQkY3MzMyMUNEODlGMDAwMjI3OTc5IC8q
IFdITFNMQ29uc3RhbnRFeHByZXNzaW9uLmggKi8sCisJCQkJQzIxQkY2RjUyMUNEODlCNTAwMjI3
OTc5IC8qIFdITFNMQ29udGludWUuaCAqLywKKwkJCQlDMjFCRjcwMTIxQ0Q4OUM0MDAyMjc5Nzkg
LyogV0hMU0xEZXJlZmVyZW5jZUV4cHJlc3Npb24uaCAqLywKKwkJCQlDMjFCRjcxODIxQ0Q4OUQ3
MDAyMjc5NzkgLyogV0hMU0xEb3RFeHByZXNzaW9uLmggKi8sCisJCQkJQzIxQkY2RkIyMUNEODlC
RTAwMjI3OTc5IC8qIFdITFNMRG9XaGlsZUxvb3AuaCAqLywKKwkJCQlDMjFCRjcyODIxQ0Q4OUU1
MDAyMjc5NzkgLyogV0hMU0xFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50LmggKi8sCisJCQkJ
MUM4NDBCN0QyMUVCRTBCODAwRDA1MDBEIC8qIFdITFNMRW50cnlQb2ludFR5cGUuaCAqLywKKwkJ
CQlDMjFCRjcyMDIxQ0Q4OUREMDAyMjc5NzkgLyogV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24u
aCAqLywKKwkJCQlDMjFCRjcyNjIxQ0Q4OUUzMDAyMjc5NzkgLyogV0hMU0xFbnVtZXJhdGlvbk1l
bWJlci5oICovLAorCQkJCUMyMUJGNzAyMjFDRDg5QzQwMDIyNzk3OSAvKiBXSExTTEVudW1lcmF0
aW9uTWVtYmVyTGl0ZXJhbC5oICovLAorCQkJCUMyMUJGNzBDMjFDRDg5Q0MwMDIyNzk3OSAvKiBX
SExTTEV4cHJlc3Npb24uaCAqLywKKwkJCQlDMjFCRjcwMDIxQ0Q4OUMyMDAyMjc5NzkgLyogV0hM
U0xGYWxsdGhyb3VnaC5oICovLAorCQkJCUMyMUJGNzM1MjFDRDg5RjIwMDIyNzk3OSAvKiBXSExT
TEZsb2F0TGl0ZXJhbC5oICovLAorCQkJCTFDQjY5QjM4MjFERjAzRTEwMDZFODQ2QSAvKiBXSExT
TEZsb2F0TGl0ZXJhbFR5cGUuY3BwICovLAorCQkJCTFDQjY5QjM0MjFERUQ2M0EwMDZFODQ2QSAv
KiBXSExTTEZsb2F0TGl0ZXJhbFR5cGUuaCAqLywKKwkJCQlDMjFCRjczNDIxQ0Q4OUYxMDAyMjc5
NzkgLyogV0hMU0xGb3JMb29wLmggKi8sCisJCQkJQzIxQkY3MDUyMUNEODlDNzAwMjI3OTc5IC8q
IFdITFNMRnVuY3Rpb25BdHRyaWJ1dGUuaCAqLywKKwkJCQlDMjFCRjZGRDIxQ0Q4OUMwMDAyMjc5
NzkgLyogV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmggKi8sCisJCQkJQzIxQkY2RjQyMUNEODlC
MzAwMjI3OTc5IC8qIFdITFNMRnVuY3Rpb25EZWZpbml0aW9uLmggKi8sCisJCQkJQzIxQkY2RkYy
MUNEODlDMjAwMjI3OTc5IC8qIFdITFNMSWZTdGF0ZW1lbnQuaCAqLywKKwkJCQlDMjFCRjZGNzIx
Q0Q4OUI5MDAyMjc5NzkgLyogV0hMU0xJbmRleEV4cHJlc3Npb24uaCAqLywKKwkJCQlDMjBGNEY2
NjIxREZGMjM2MDA3MEM0NUEgLyogV0hMU0xJbnRlZ2VyTGl0ZXJhbC5jcHAgKi8sCisJCQkJQzIx
QkY2RjgyMUNEODlCQjAwMjI3OTc5IC8qIFdITFNMSW50ZWdlckxpdGVyYWwuaCAqLywKKwkJCQkx
Q0I2OUIzOTIxREYwM0YzMDA2RTg0NkEgLyogV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwICov
LAorCQkJCTFDQjY5QjM1MjFERUQ2NDkwMDZFODQ2QSAvKiBXSExTTEludGVnZXJMaXRlcmFsVHlw
ZS5oICovLAorCQkJCUMyMUJGNzMyMjFDRDg5RUYwMDIyNzk3OSAvKiBXSExTTExvZ2ljYWxFeHBy
ZXNzaW9uLmggKi8sCisJCQkJQzIxQkY3MTUyMUNEODlENDAwMjI3OTc5IC8qIFdITFNMTG9naWNh
bE5vdEV4cHJlc3Npb24uaCAqLywKKwkJCQlDMjFCRjcyRDIxQ0Q4OUU5MDAyMjc5NzkgLyogV0hM
U0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmggKi8sCisJCQkJQzIxQkY3MkMyMUNEODlF
OTAwMjI3OTc5IC8qIFdITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmggKi8sCisJCQkJMUMzMzI3
NzEyMUNGMEJFMTAwMERDOUYyIC8qIFdITFNMTmFtZWRUeXBlLmggKi8sCisJCQkJQzIxQkY3MjMy
MUNEODlFMTAwMjI3OTc5IC8qIFdITFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5oICovLAor
CQkJCUMyMUJGNzJBMjFDRDg5RTcwMDIyNzk3OSAvKiBXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5oICovLAorCQkJCUMyMUJGNzI0MjFDRDg5RTEwMDIyNzk3OSAvKiBXSExTTE5vZGUuaCAqLywK
KwkJCQlDMjFCRjcwNzIxQ0Q4OUM4MDAyMjc5NzkgLyogV0hMU0xOdWxsTGl0ZXJhbC5oICovLAor
CQkJCTFDQjY5QjNBMjFERjA0MDMwMDZFODQ2QSAvKiBXSExTTE51bGxMaXRlcmFsVHlwZS5jcHAg
Ki8sCisJCQkJMUNCNjlCMzYyMURFRDY1NzAwNkU4NDZBIC8qIFdITFNMTnVsbExpdGVyYWxUeXBl
LmggKi8sCisJCQkJQzIxQkY3MjEyMUNEODlERTAwMjI3OTc5IC8qIFdITFNMTnVtVGhyZWFkc0Z1
bmN0aW9uQXR0cmlidXRlLmggKi8sCisJCQkJQzIxQkY3MkYyMUNEODlFQzAwMjI3OTc5IC8qIFdI
TFNMUG9pbnRlclR5cGUuaCAqLywKKwkJCQlDMjFCRjcyRTIxQ0Q4OUVBMDAyMjc5NzkgLyogV0hM
U0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCAqLywKKwkJCQlDMjFCRjcwQjIxQ0Q4OUNDMDAy
Mjc5NzkgLyogV0hMU0xRdWFsaWZpZXIuaCAqLywKKwkJCQlDMjFCRjcxQjIxQ0Q4OUQ5MDAyMjc5
NzkgLyogV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmggKi8sCisJCQkJQzIxQkY3MEQy
MUNEODlDRDAwMjI3OTc5IC8qIFdITFNMUmVmZXJlbmNlVHlwZS5oICovLAorCQkJCTFDQjY5QjMy
MjFERUQ0MEIwMDZFODQ2QSAvKiBXSExTTFJlc29sdmFibGVUeXBlLmggKi8sCisJCQkJQzIxMzhB
MTUyMURERUNFOTAwRjUxNkJBIC8qIFdITFNMUmVzb3VyY2VTZW1hbnRpYy5jcHAgKi8sCisJCQkJ
QzIxQkY3MDgyMUNEODlDOTAwMjI3OTc5IC8qIFdITFNMUmVzb3VyY2VTZW1hbnRpYy5oICovLAor
CQkJCUMyMUJGNzAzMjFDRDg5QzUwMDIyNzk3OSAvKiBXSExTTFJldHVybi5oICovLAorCQkJCUMy
MUJGNkY5MjFDRDg5QkQwMDIyNzk3OSAvKiBXSExTTFNlbWFudGljLmggKi8sCisJCQkJQzIxMzhB
MTYyMURERUNGQjAwRjUxNkJBIC8qIFdITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGlj
LmNwcCAqLywKKwkJCQlDMjFCRjczNjIxQ0Q4OUYzMDAyMjc5NzkgLyogV0hMU0xTcGVjaWFsaXph
dGlvbkNvbnN0YW50U2VtYW50aWMuaCAqLywKKwkJCQlDMjEzOEExNzIxRERFRDBEMDBGNTE2QkEg
LyogV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuY3BwICovLAorCQkJCUMyMUJGNzBFMjFDRDg5Q0Uw
MDIyNzk3OSAvKiBXSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oICovLAorCQkJCUMyMUJGNzEyMjFD
RDg5RDEwMDIyNzk3OSAvKiBXSExTTFN0YXRlbWVudC5oICovLAorCQkJCUMyMUJGNzI3MjFDRDg5
RTQwMDIyNzk3OSAvKiBXSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCAqLywKKwkJCQlDMjFCRjZG
RTIxQ0Q4OUMxMDAyMjc5NzkgLyogV0hMU0xTdHJ1Y3R1cmVFbGVtZW50LmggKi8sCisJCQkJQzIx
QkY3MTkyMUNEODlENzAwMjI3OTc5IC8qIFdITFNMU3dpdGNoQ2FzZS5oICovLAorCQkJCUMyMUJG
NzMxMjFDRDg5RUUwMDIyNzk3OSAvKiBXSExTTFN3aXRjaFN0YXRlbWVudC5oICovLAorCQkJCUMy
MUJGNzFDMjFDRDg5REEwMDIyNzk3OSAvKiBXSExTTFRlcm5hcnlFeHByZXNzaW9uLmggKi8sCisJ
CQkJQzIxQkY2RjMyMUNEODlBRDAwMjI3OTc5IC8qIFdITFNMVHJhcC5oICovLAorCQkJCUMyMUJG
NzFEMjFDRDg5REIwMDIyNzk3OSAvKiBXSExTTFR5cGUuaCAqLywKKwkJCQlDMjg4QzcyRDIxQzk5
MURBMDAyREY1Q0EgLyogV0hMU0xUeXBlQXJndW1lbnQuY3BwICovLAorCQkJCUMyMUJGNzExMjFD
RDg5RDEwMDIyNzk3OSAvKiBXSExTTFR5cGVBcmd1bWVudC5oICovLAorCQkJCUMyMUJGNzI5MjFD
RDg5RTYwMDIyNzk3OSAvKiBXSExTTFR5cGVEZWZpbml0aW9uLmggKi8sCisJCQkJQzIwRjRGNjQy
MURGQkU1QzAwNzBDNDVBIC8qIFdITFNMVHlwZVJlZmVyZW5jZS5jcHAgKi8sCisJCQkJQzIxQkY3
MUYyMUNEODlEQzAwMjI3OTc5IC8qIFdITFNMVHlwZVJlZmVyZW5jZS5oICovLAorCQkJCTFDMzMy
NzcyMjFDRjBEMkUwMDBEQzlGMiAvKiBXSExTTFVubmFtZWRUeXBlLmggKi8sCisJCQkJQzIwRjRG
NjcyMURGRjNBNzAwNzBDNDVBIC8qIFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5jcHAgKi8s
CisJCQkJQzIxQkY3MkIyMUNEODlFODAwMjI3OTc5IC8qIFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbC5oICovLAorCQkJCTFDQjY5QjNCMjFERjA0MUUwMDZFODQ2QSAvKiBXSExTTFVuc2lnbmVk
SW50ZWdlckxpdGVyYWxUeXBlLmNwcCAqLywKKwkJCQkxQ0I2OUIzNzIxREVENjZCMDA2RTg0NkEg
LyogV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5oICovLAorCQkJCUMyMUJGNkZDMjFD
RDg5QkYwMDIyNzk3OSAvKiBXSExTTFZhbHVlLmggKi8sCisJCQkJQzIxQkY3MTAyMUNEODlEMDAw
MjI3OTc5IC8qIFdITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oICovLAorCQkJCUMyMUJGNzE0MjFD
RDg5RDMwMDIyNzk3OSAvKiBXSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmggKi8s
CisJCQkJQzIxQkY3MTMyMUNEODlEMjAwMjI3OTc5IC8qIFdITFNMVmFyaWFibGVSZWZlcmVuY2Uu
aCAqLywKKwkJCQlDMjFCRjcwNDIxQ0Q4OUM2MDAyMjc5NzkgLyogV0hMU0xXaGlsZUxvb3AuaCAq
LywKKwkJCSk7CisJCQlwYXRoID0gQVNUOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJ
fTsKIAkJMUNERDQ0NjYwQkE5QzgwMDAwRjkwMTQ3IC8qIENvbmZpZ3VyYXRpb25zICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTI1NDY2LDYgKzI1NTYzLDcg
QEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMUNBMEMyRjYyMUVF
REFEMjAwQTExODYwIC8qIEFTVCAqLywKKwkJCQlDMjZEMkM2RTIxRjA1Q0RFMDA0OTc4OTkgLyog
TWV0YWwgKi8sCiAJCQkJQzIzNEE5QjIyMUU5MkMxRjAwM0M5ODREIC8qIFdITFNMQ2hlY2tEdXBs
aWNhdGVGdW5jdGlvbnMuY3BwICovLAogCQkJCUMyMzRBOUFFMjFFOTJDMUEwMDNDOTg0RCAvKiBX
SExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmggKi8sCiAJCQkJMUM4NDBCOUIyMUVDNDAwOTAw
RDA1MDBEIC8qIFdITFNMQ2hlY2tlci5jcHAgKi8sCkBAIC0yNTUxNSw5OCArMjU2MTMsMTUgQEAK
IAkJCXBhdGggPSBXSExTTDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCTFD
QTBDMkY2MjFFRURBRDIwMEExMTg2MCAvKiBBU1QgKi8gPSB7CisJCUMyNkQyQzZFMjFGMDVDREUw
MDQ5Nzg5OSAvKiBNZXRhbCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCi0JCQkJMUM4NDBCOTAyMUVDMzBGOTAwRDA1MDBEIC8qIFdITFNMQWRkcmVzc1NwYWNlLmgg
Ki8sCi0JCQkJQzIxQkY3MjUyMUNEODlFMjAwMjI3OTc5IC8qIFdITFNMQXJyYXlSZWZlcmVuY2VU
eXBlLmggKi8sCi0JCQkJQzIxQkY3MDkyMUNEODlDQTAwMjI3OTc5IC8qIFdITFNMQXJyYXlUeXBl
LmggKi8sCi0JCQkJQzIxQkY3MzAyMUNEODlFRDAwMjI3OTc5IC8qIFdITFNMQXNzaWdubWVudEV4
cHJlc3Npb24uaCAqLywKLQkJCQlDMjFCRjcwQTIxQ0Q4OUNCMDAyMjc5NzkgLyogV0hMU0xCYXNl
RnVuY3Rpb25BdHRyaWJ1dGUuaCAqLywKLQkJCQlDMjFCRjZGQTIxQ0Q4OUJFMDAyMjc5NzkgLyog
V0hMU0xCYXNlU2VtYW50aWMuaCAqLywKLQkJCQlDMjFCRjcxRTIxQ0Q4OURDMDAyMjc5NzkgLyog
V0hMU0xCbG9jay5oICovLAotCQkJCUMyMUJGNkY2MjFDRDg5QjcwMDIyNzk3OSAvKiBXSExTTEJv
b2xlYW5MaXRlcmFsLmggKi8sCi0JCQkJQzIxQkY3MUEyMUNEODlEODAwMjI3OTc5IC8qIFdITFNM
QnJlYWsuaCAqLywKLQkJCQlDMjEzOEExMzIxRERFQ0QzMDBGNTE2QkEgLyogV0hMU0xCdWlsdElu
U2VtYW50aWMuY3BwICovLAotCQkJCUMyMUJGNzIyMjFDRDg5REYwMDIyNzk3OSAvKiBXSExTTEJ1
aWx0SW5TZW1hbnRpYy5oICovLAotCQkJCUMyMUJGNzE2MjFDRDg5RDUwMDIyNzk3OSAvKiBXSExT
TENhbGxFeHByZXNzaW9uLmggKi8sCi0JCQkJQzIxQkY3MDYyMUNEODlDNzAwMjI3OTc5IC8qIFdI
TFNMQ29tbWFFeHByZXNzaW9uLmggKi8sCi0JCQkJQzIxQkY3MzMyMUNEODlGMDAwMjI3OTc5IC8q
IFdITFNMQ29uc3RhbnRFeHByZXNzaW9uLmggKi8sCi0JCQkJQzIxQkY2RjUyMUNEODlCNTAwMjI3
OTc5IC8qIFdITFNMQ29udGludWUuaCAqLywKLQkJCQlDMjFCRjcwMTIxQ0Q4OUM0MDAyMjc5Nzkg
LyogV0hMU0xEZXJlZmVyZW5jZUV4cHJlc3Npb24uaCAqLywKLQkJCQlDMjFCRjcxODIxQ0Q4OUQ3
MDAyMjc5NzkgLyogV0hMU0xEb3RFeHByZXNzaW9uLmggKi8sCi0JCQkJQzIxQkY2RkIyMUNEODlC
RTAwMjI3OTc5IC8qIFdITFNMRG9XaGlsZUxvb3AuaCAqLywKLQkJCQlDMjFCRjcyODIxQ0Q4OUU1
MDAyMjc5NzkgLyogV0hMU0xFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50LmggKi8sCi0JCQkJ
MUM4NDBCN0QyMUVCRTBCODAwRDA1MDBEIC8qIFdITFNMRW50cnlQb2ludFR5cGUuaCAqLywKLQkJ
CQlDMjFCRjcyMDIxQ0Q4OUREMDAyMjc5NzkgLyogV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24u
aCAqLywKLQkJCQlDMjFCRjcyNjIxQ0Q4OUUzMDAyMjc5NzkgLyogV0hMU0xFbnVtZXJhdGlvbk1l
bWJlci5oICovLAotCQkJCUMyMUJGNzAyMjFDRDg5QzQwMDIyNzk3OSAvKiBXSExTTEVudW1lcmF0
aW9uTWVtYmVyTGl0ZXJhbC5oICovLAotCQkJCUMyMUJGNzBDMjFDRDg5Q0MwMDIyNzk3OSAvKiBX
SExTTEV4cHJlc3Npb24uaCAqLywKLQkJCQlDMjFCRjcwMDIxQ0Q4OUMyMDAyMjc5NzkgLyogV0hM
U0xGYWxsdGhyb3VnaC5oICovLAotCQkJCUMyMUJGNzM1MjFDRDg5RjIwMDIyNzk3OSAvKiBXSExT
TEZsb2F0TGl0ZXJhbC5oICovLAotCQkJCTFDQjY5QjM4MjFERjAzRTEwMDZFODQ2QSAvKiBXSExT
TEZsb2F0TGl0ZXJhbFR5cGUuY3BwICovLAotCQkJCTFDQjY5QjM0MjFERUQ2M0EwMDZFODQ2QSAv
KiBXSExTTEZsb2F0TGl0ZXJhbFR5cGUuaCAqLywKLQkJCQlDMjFCRjczNDIxQ0Q4OUYxMDAyMjc5
NzkgLyogV0hMU0xGb3JMb29wLmggKi8sCi0JCQkJQzIxQkY3MDUyMUNEODlDNzAwMjI3OTc5IC8q
IFdITFNMRnVuY3Rpb25BdHRyaWJ1dGUuaCAqLywKLQkJCQlDMjFCRjZGRDIxQ0Q4OUMwMDAyMjc5
NzkgLyogV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmggKi8sCi0JCQkJQzIxQkY2RjQyMUNEODlC
MzAwMjI3OTc5IC8qIFdITFNMRnVuY3Rpb25EZWZpbml0aW9uLmggKi8sCi0JCQkJQzIxQkY2RkYy
MUNEODlDMjAwMjI3OTc5IC8qIFdITFNMSWZTdGF0ZW1lbnQuaCAqLywKLQkJCQlDMjFCRjZGNzIx
Q0Q4OUI5MDAyMjc5NzkgLyogV0hMU0xJbmRleEV4cHJlc3Npb24uaCAqLywKLQkJCQlDMjBGNEY2
NjIxREZGMjM2MDA3MEM0NUEgLyogV0hMU0xJbnRlZ2VyTGl0ZXJhbC5jcHAgKi8sCi0JCQkJQzIx
QkY2RjgyMUNEODlCQjAwMjI3OTc5IC8qIFdITFNMSW50ZWdlckxpdGVyYWwuaCAqLywKLQkJCQkx
Q0I2OUIzOTIxREYwM0YzMDA2RTg0NkEgLyogV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwICov
LAotCQkJCTFDQjY5QjM1MjFERUQ2NDkwMDZFODQ2QSAvKiBXSExTTEludGVnZXJMaXRlcmFsVHlw
ZS5oICovLAotCQkJCUMyMUJGNzMyMjFDRDg5RUYwMDIyNzk3OSAvKiBXSExTTExvZ2ljYWxFeHBy
ZXNzaW9uLmggKi8sCi0JCQkJQzIxQkY3MTUyMUNEODlENDAwMjI3OTc5IC8qIFdITFNMTG9naWNh
bE5vdEV4cHJlc3Npb24uaCAqLywKLQkJCQlDMjFCRjcyRDIxQ0Q4OUU5MDAyMjc5NzkgLyogV0hM
U0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmggKi8sCi0JCQkJQzIxQkY3MkMyMUNEODlF
OTAwMjI3OTc5IC8qIFdITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmggKi8sCi0JCQkJMUMzMzI3
NzEyMUNGMEJFMTAwMERDOUYyIC8qIFdITFNMTmFtZWRUeXBlLmggKi8sCi0JCQkJQzIxQkY3MjMy
MUNEODlFMTAwMjI3OTc5IC8qIFdITFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5oICovLAot
CQkJCUMyMUJGNzJBMjFDRDg5RTcwMDIyNzk3OSAvKiBXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5oICovLAotCQkJCUMyMUJGNzI0MjFDRDg5RTEwMDIyNzk3OSAvKiBXSExTTE5vZGUuaCAqLywK
LQkJCQlDMjFCRjcwNzIxQ0Q4OUM4MDAyMjc5NzkgLyogV0hMU0xOdWxsTGl0ZXJhbC5oICovLAot
CQkJCTFDQjY5QjNBMjFERjA0MDMwMDZFODQ2QSAvKiBXSExTTE51bGxMaXRlcmFsVHlwZS5jcHAg
Ki8sCi0JCQkJMUNCNjlCMzYyMURFRDY1NzAwNkU4NDZBIC8qIFdITFNMTnVsbExpdGVyYWxUeXBl
LmggKi8sCi0JCQkJQzIxQkY3MjEyMUNEODlERTAwMjI3OTc5IC8qIFdITFNMTnVtVGhyZWFkc0Z1
bmN0aW9uQXR0cmlidXRlLmggKi8sCi0JCQkJQzIxQkY3MkYyMUNEODlFQzAwMjI3OTc5IC8qIFdI
TFNMUG9pbnRlclR5cGUuaCAqLywKLQkJCQlDMjFCRjcyRTIxQ0Q4OUVBMDAyMjc5NzkgLyogV0hM
U0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCAqLywKLQkJCQlDMjFCRjcwQjIxQ0Q4OUNDMDAy
Mjc5NzkgLyogV0hMU0xRdWFsaWZpZXIuaCAqLywKLQkJCQlDMjFCRjcxQjIxQ0Q4OUQ5MDAyMjc5
NzkgLyogV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmggKi8sCi0JCQkJQzIxQkY3MEQy
MUNEODlDRDAwMjI3OTc5IC8qIFdITFNMUmVmZXJlbmNlVHlwZS5oICovLAotCQkJCTFDQjY5QjMy
MjFERUQ0MEIwMDZFODQ2QSAvKiBXSExTTFJlc29sdmFibGVUeXBlLmggKi8sCi0JCQkJQzIxMzhB
MTUyMURERUNFOTAwRjUxNkJBIC8qIFdITFNMUmVzb3VyY2VTZW1hbnRpYy5jcHAgKi8sCi0JCQkJ
QzIxQkY3MDgyMUNEODlDOTAwMjI3OTc5IC8qIFdITFNMUmVzb3VyY2VTZW1hbnRpYy5oICovLAot
CQkJCUMyMUJGNzAzMjFDRDg5QzUwMDIyNzk3OSAvKiBXSExTTFJldHVybi5oICovLAotCQkJCUMy
MUJGNkY5MjFDRDg5QkQwMDIyNzk3OSAvKiBXSExTTFNlbWFudGljLmggKi8sCi0JCQkJQzIxMzhB
MTYyMURERUNGQjAwRjUxNkJBIC8qIFdITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGlj
LmNwcCAqLywKLQkJCQlDMjFCRjczNjIxQ0Q4OUYzMDAyMjc5NzkgLyogV0hMU0xTcGVjaWFsaXph
dGlvbkNvbnN0YW50U2VtYW50aWMuaCAqLywKLQkJCQlDMjEzOEExNzIxRERFRDBEMDBGNTE2QkEg
LyogV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuY3BwICovLAotCQkJCUMyMUJGNzBFMjFDRDg5Q0Uw
MDIyNzk3OSAvKiBXSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oICovLAotCQkJCUMyMUJGNzEyMjFD
RDg5RDEwMDIyNzk3OSAvKiBXSExTTFN0YXRlbWVudC5oICovLAotCQkJCUMyMUJGNzI3MjFDRDg5
RTQwMDIyNzk3OSAvKiBXSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCAqLywKLQkJCQlDMjFCRjZG
RTIxQ0Q4OUMxMDAyMjc5NzkgLyogV0hMU0xTdHJ1Y3R1cmVFbGVtZW50LmggKi8sCi0JCQkJQzIx
QkY3MTkyMUNEODlENzAwMjI3OTc5IC8qIFdITFNMU3dpdGNoQ2FzZS5oICovLAotCQkJCUMyMUJG
NzMxMjFDRDg5RUUwMDIyNzk3OSAvKiBXSExTTFN3aXRjaFN0YXRlbWVudC5oICovLAotCQkJCUMy
MUJGNzFDMjFDRDg5REEwMDIyNzk3OSAvKiBXSExTTFRlcm5hcnlFeHByZXNzaW9uLmggKi8sCi0J
CQkJQzIxQkY2RjMyMUNEODlBRDAwMjI3OTc5IC8qIFdITFNMVHJhcC5oICovLAotCQkJCUMyMUJG
NzFEMjFDRDg5REIwMDIyNzk3OSAvKiBXSExTTFR5cGUuaCAqLywKLQkJCQlDMjg4QzcyRDIxQzk5
MURBMDAyREY1Q0EgLyogV0hMU0xUeXBlQXJndW1lbnQuY3BwICovLAotCQkJCUMyMUJGNzExMjFD
RDg5RDEwMDIyNzk3OSAvKiBXSExTTFR5cGVBcmd1bWVudC5oICovLAotCQkJCUMyMUJGNzI5MjFD
RDg5RTYwMDIyNzk3OSAvKiBXSExTTFR5cGVEZWZpbml0aW9uLmggKi8sCi0JCQkJQzIwRjRGNjQy
MURGQkU1QzAwNzBDNDVBIC8qIFdITFNMVHlwZVJlZmVyZW5jZS5jcHAgKi8sCi0JCQkJQzIxQkY3
MUYyMUNEODlEQzAwMjI3OTc5IC8qIFdITFNMVHlwZVJlZmVyZW5jZS5oICovLAotCQkJCTFDMzMy
NzcyMjFDRjBEMkUwMDBEQzlGMiAvKiBXSExTTFVubmFtZWRUeXBlLmggKi8sCi0JCQkJQzIwRjRG
NjcyMURGRjNBNzAwNzBDNDVBIC8qIFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5jcHAgKi8s
Ci0JCQkJQzIxQkY3MkIyMUNEODlFODAwMjI3OTc5IC8qIFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbC5oICovLAotCQkJCTFDQjY5QjNCMjFERjA0MUUwMDZFODQ2QSAvKiBXSExTTFVuc2lnbmVk
SW50ZWdlckxpdGVyYWxUeXBlLmNwcCAqLywKLQkJCQkxQ0I2OUIzNzIxREVENjZCMDA2RTg0NkEg
LyogV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5oICovLAotCQkJCUMyMUJGNkZDMjFD
RDg5QkYwMDIyNzk3OSAvKiBXSExTTFZhbHVlLmggKi8sCi0JCQkJQzIxQkY3MTAyMUNEODlEMDAw
MjI3OTc5IC8qIFdITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oICovLAotCQkJCUMyMUJGNzE0MjFD
RDg5RDMwMDIyNzk3OSAvKiBXSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmggKi8s
Ci0JCQkJQzIxQkY3MTMyMUNEODlEMjAwMjI3OTc5IC8qIFdITFNMVmFyaWFibGVSZWZlcmVuY2Uu
aCAqLywKLQkJCQlDMjFCRjcwNDIxQ0Q4OUM2MDAyMjc5NzkgLyogV0hMU0xXaGlsZUxvb3AuaCAq
LywKKwkJCQkxQ0M4M0RFMTIxRjE1RDNEMDA2NDA0MkUgLyogV0hMU0xGdW5jdGlvbldyaXRlci5j
cHAgKi8sCisJCQkJMUNDODNERTIyMUYxNUQzRDAwNjQwNDJFIC8qIFdITFNMRnVuY3Rpb25Xcml0
ZXIuaCAqLywKKwkJCQlDMjZEMkM3MDIxRjA1RDU1MDA0OTc4OTkgLyogV0hMU0xUeXBlTmFtZXIu
Y3BwICovLAorCQkJCUMyNkQyQzcxMjFGMDVENTUwMDQ5Nzg5OSAvKiBXSExTTFR5cGVOYW1lci5o
ICovLAogCQkJKTsKLQkJCXBhdGggPSBBU1Q7CisJCQlwYXRoID0gTWV0YWw7CiAJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOwogCQl9OwogCQlDOTZGNUVCRjFCNTg3MjI2MDA5MUVBOUQgLyogbWVk
aWFzZXNzaW9uICovID0gewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359473</attachid>
            <date>2019-01-18 04:52:23 -0800</date>
            <delta_ts>2019-01-20 13:03:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193531-20190118045222.patch</filename>
            <type>text/plain</type>
            <size>126269</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwMTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzIyM2ZjNWZkNzgyOGU5
MWE1MWVkOGU0OGY3ZTdjZWFjMzBlZDk2Ni4uYjY5ZGQ5NGZhM2FhZGZjMjhhYjVkNTllMTQ4NjBl
YzBhMjk5MDExOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE5LTAxLTE4ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgTWV0YWwgY29kZSBnZW5lcmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTM1MzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAq
IE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkJhc2VUeXBlTmFtZU5vZGU6OkJhc2VUeXBl
TmFtZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpCYXNlVHlwZU5hbWVO
b2RlOjppc0FycmF5VHlwZU5hbWVOb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpNZXRhbDo6QmFzZVR5cGVOYW1lTm9kZTo6aXNBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkJhc2VUeXBlTmFtZU5vZGU6
OmlzUG9pbnRlclR5cGVOYW1lTm9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
TWV0YWw6OkJhc2VUeXBlTmFtZU5vZGU6OmlzUmVmZXJlbmNlVHlwZU5hbWVOb2RlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6QXJyYXlUeXBlTmFtZU5vZGU6OkFycmF5
VHlwZU5hbWVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6QXJyYXlUeXBl
TmFtZU5vZGU6Om51bUVsZW1lbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpN
ZXRhbDo6QXJyYXlUeXBlTmFtZU5vZGU6OmNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpNZXRhbDo6QXJyYXlUeXBlTmFtZU5vZGU6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6TWV0YWw6OkFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlOjpBcnJheVJlZmVyZW5j
ZVR5cGVOYW1lTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkFycmF5UmVm
ZXJlbmNlVHlwZU5hbWVOb2RlOjphZGRyZXNzU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6Ok1ldGFsOjpBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZTo6Y2hpbGRyZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9k
ZTo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UG9pbnRlclR5cGVO
YW1lTm9kZTo6UG9pbnRlclR5cGVOYW1lTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
TWV0YWw6OlBvaW50ZXJUeXBlTmFtZU5vZGU6OmFkZHJlc3NTcGFjZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlBvaW50ZXJUeXBlTmFtZU5vZGU6OmNoaWxkcmVuKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UG9pbnRlclR5cGVOYW1lTm9kZTo6YXBw
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UmVmZXJlbmNlVHlwZU5hbWVO
b2RlOjpSZWZlcmVuY2VUeXBlTmFtZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1l
dGFsOjpSZWZlcmVuY2VUeXBlTmFtZU5vZGU6Om5hbWVkVHlwZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6Z2VuZXJhdGVOZXh0TmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6YnVpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6Omluc2VydCk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6TWV0YWw6OnR5cGVOYW1lcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuaDogQWRkZWQuCisgICAgICAgICogU291cmNlcy50
eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE5
LTAxLTE4ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdl
KCkgY2FuIGJlIHJlbW92ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmgKaW5kZXggNDNiNjk4
NmFmN2Q0YjcxYzI4Njc3ZWM2NWNlY2Q4ZWE3YzQ3MzA0YS4uN2IzNmNhYWJjNmJmY2E1ZDQ0NWUy
MmI4ZDYyZGI5ZWEyYzc4YTA4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmgKQEAgLTY5
LDYgKzY5LDcgQEAgcHVibGljOgogICAgIEJ1aWx0SW5TZW1hbnRpYyhCdWlsdEluU2VtYW50aWMm
JikgPSBkZWZhdWx0OwogCiAgICAgVmFyaWFibGUgdmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBt
X3ZhcmlhYmxlOyB9CisgICAgT3B0aW9uYWw8dW5zaWduZWQ+JiB0YXJnZXRJbmRleCgpIHsgcmV0
dXJuIG1fdGFyZ2V0SW5kZXg7IH0KIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCdWlsdElu
U2VtYW50aWMmIG90aGVyKSBjb25zdAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaAppbmRleCA4ZmVm
NjI5NTlkNzM2M2UxZjFiYmIyM2Q3MzM5OGY4YTJkNDhiZGUxLi4wMWYyZmZiODA2YTA1NzZiYzYw
NTZlMDYxYWIxNzJiZTI2NDYxNmVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oCkBAIC01Nyw3ICs1Nyw3
IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IExleGVyOjpUb2tlbiYgb3JpZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9vcmlnaW47IH0KIAotICAgIFVubmFtZWRUeXBlKiB0eXBlKCkgeyByZXR1cm4gbV90
eXBlID8gJiptX3R5cGUgOiBudWxscHRyOyB9CisgICAgVW5uYW1lZFR5cGUqIHJlc29sdmVkVHlw
ZSgpIHsgcmV0dXJuIG1fdHlwZSA/ICYqbV90eXBlIDogbnVsbHB0cjsgfQogCiAgICAgdm9pZCBz
ZXRUeXBlKFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4mJiB0eXBlKQogICAgIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVj
bGFyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEZ1bmN0aW9uRGVjbGFyYXRpb24uaAppbmRleCA1MDgyODU4NDYwNzA1NzdkODk0YzUzNGEzOTc0
YmNlMGFiYjIxZjExLi5jMTU0NjZhNzBiYmJhYWE3NWYxNzBlMTI2ZWI1MmRjODhiODQ4MTZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xG
dW5jdGlvbkRlY2xhcmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCkBAIC03MCw2ICs3MCw3IEBAIHB1
YmxpYzoKICAgICBjb25zdCBVbm5hbWVkVHlwZSYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQogICAgIFVubmFtZWRUeXBlJiB0eXBlKCkgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgY29u
c3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgU3RyaW5nJiBu
YW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgYm9vbCBpc0Nhc3QoKSBjb25zdCB7IHJldHVy
biBtX25hbWUgPT0gIm9wZXJhdG9yIGNhc3QiOyB9CiAgICAgY29uc3QgVmFyaWFibGVEZWNsYXJh
dGlvbnMmIHBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KICAgICBW
YXJpYWJsZURlY2xhcmF0aW9ucyYgcGFyYW1ldGVycygpIHsgcmV0dXJuIG1fcGFyYW1ldGVyczsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oCmluZGV4IDQ1NmM2ZTEyMzhiY2I1
N2U3Y2ZlMWUwMTc4NjlmMGY0MTQ0MGE3NjkuLjAyNjBkNDUwNmE1MWNhYjUzODE5MzMxNDkyZTVk
N2JlY2JkYzk5NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFN0cnVjdHVyZURlZmluaXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgKQEAgLTU1
LDYgKzU1LDE1IEBAIHB1YmxpYzoKICAgICBib29sIGlzU3RydWN0dXJlRGVmaW5pdGlvbigpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIFN0cnVjdHVyZUVsZW1lbnRzJiBz
dHJ1Y3R1cmVFbGVtZW50cygpIHsgcmV0dXJuIG1fc3RydWN0dXJlRWxlbWVudHM7IH0KKyAgICBT
dHJ1Y3R1cmVFbGVtZW50KiBmaW5kKFN0cmluZyYgbmFtZSkKKyAgICB7CisgICAgICAgIGF1dG8g
aXRlcmF0b3IgPSBzdGQ6OmZpbmRfaWYobV9zdHJ1Y3R1cmVFbGVtZW50cy5iZWdpbigpLCBtX3N0
cnVjdHVyZUVsZW1lbnRzLmVuZCgpLCBbJl0oU3RydWN0dXJlRWxlbWVudCYgc3RydWN0dXJlRWxl
bWVudCkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gc3RydWN0dXJlRWxlbWVudC5uYW1l
KCkgPT0gbmFtZTsKKyAgICAgICAgfSk7CisgICAgICAgIGlmIChpdGVyYXRvciA9PSBtX3N0cnVj
dHVyZUVsZW1lbnRzLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiAmKml0ZXJhdG9yOworICAgIH0KIAogcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmVFbGVt
ZW50cyBtX3N0cnVjdHVyZUVsZW1lbnRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xNThlNWFkM2NiNDI2ZjRkNDEyZWVlOTk5ZDIxMjczMTA0ZTQxNTFlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0
YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAKQEAgLTAsMCArMSwxMDQzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25Xcml0ZXIuaCIK
KworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEFycmF5UmVmZXJlbmNlVHlw
ZS5oIgorI2luY2x1ZGUgIldITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJX
SExTTEJvb2xlYW5MaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xCdWlsdEluU2VtYW50aWMuaCIK
KyNpbmNsdWRlICJXSExTTENhbGxFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xDb21tYUV4
cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTERlcmVmZXJlbmNlRXhwcmVzc2lvbi5oIgorI2lu
Y2x1ZGUgIldITFNMRG9XaGlsZUxvb3AuaCIKKyNpbmNsdWRlICJXSExTTEVmZmVjdGZ1bEV4cHJl
c3Npb25TdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTEVudHJ5UG9pbnRUeXBlLmgiCisjaW5j
bHVkZSAiV0hMU0xGbG9hdExpdGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTEZvckxvb3AuaCIKKyNp
bmNsdWRlICJXSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTEZ1bmN0
aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmgi
CisjaW5jbHVkZSAiV0hMU0xJZlN0YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNMSW50ZWdlckxp
dGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTExvZ2ljYWxFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAi
V0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTWFrZUFycmF5UmVm
ZXJlbmNlRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9u
LmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCisjaW5jbHVk
ZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFBvaW50ZXJU
eXBlLmgiCisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xSZXR1cm4u
aCIKKyNpbmNsdWRlICJXSExTTFN3aXRjaENhc2UuaCIKKyNpbmNsdWRlICJXSExTTFN3aXRjaFN0
YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNMVGVybmFyeUV4cHJlc3Npb24uaCIKKyNpbmNsdWRl
ICJXSExTTFR5cGVOYW1lci5oIgorI2luY2x1ZGUgIldITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bC5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldI
TFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFZhcmlh
YmxlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisjaW5jbHVkZSAiV0hM
U0xXaGlsZUxvb3AuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ug
V0hMU0wgeworCituYW1lc3BhY2UgTWV0YWwgeworCitjbGFzcyBGdW5jdGlvbkRlY2xhcmF0aW9u
V3JpdGVyIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgorICAgIEZ1bmN0aW9uRGVjbGFyYXRp
b25Xcml0ZXIoVHlwZU5hbWVyJiB0eXBlTmFtZXIsIEhhc2hNYXA8QVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKiwgU3RyaW5nPiYgZnVuY3Rpb25NYXBwaW5nKQorICAgICAgICA6IG1fdHlwZU5hbWVy
KHR5cGVOYW1lcikKKyAgICAgICAgLCBtX2Z1bmN0aW9uTWFwcGluZyhmdW5jdGlvbk1hcHBpbmcp
CisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgfkZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXIo
KSA9IGRlZmF1bHQ7CisKKyAgICBTdHJpbmcgdG9TdHJpbmcoKSB7IHJldHVybiBtX3N0cmluZ0J1
aWxkZXIudG9TdHJpbmcoKTsgfQorICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uJiBmdW5jdGlvbkRlY2xhcmF0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byBp
dGVyYXRvciA9IG1fZnVuY3Rpb25NYXBwaW5nLmZpbmQoJmZ1bmN0aW9uRGVjbGFyYXRpb24pOwor
ICAgICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9mdW5jdGlvbk1hcHBpbmcuZW5kKCkpOworICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKGZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKSwgJyAnLCBpdGVyYXRvci0+
dmFsdWUsICcoJykpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSkK
KyAgICAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIsICIpOworICAgICAgICAg
ICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
KmZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpW2ldLnR5cGUoKSkpOworICAgICAgICB9
CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIik7XG4iKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgVHlwZU5hbWVyJiBtX3R5cGVOYW1lcjsKKyAgICBIYXNoTWFwPEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbiosIFN0cmluZz4mIG1fZnVuY3Rpb25NYXBwaW5nOworICAgIFN0cmluZ0J1
aWxkZXIgbV9zdHJpbmdCdWlsZGVyOworfTsKKworY2xhc3MgRnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgorICAgIEZ1bmN0aW9uRGVmaW5pdGlvbldy
aXRlcihJbnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBUeXBlTmFtZXImIHR5cGVOYW1lciwgSGFzaE1h
cDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qLCBTdHJpbmc+JiBmdW5jdGlvbk1hcHBpbmcpCisg
ICAgICAgIDogbV9pbnRyaW5zaWNzKGludHJpbnNpY3MpCisgICAgICAgICwgbV90eXBlTmFtZXIo
dHlwZU5hbWVyKQorICAgICAgICAsIG1fZnVuY3Rpb25NYXBwaW5nKGZ1bmN0aW9uTWFwcGluZykK
KyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKCkg
PSBkZWZhdWx0OworCisgICAgU3RyaW5nIHRvU3RyaW5nKCkgeyByZXR1cm4gbV9zdHJpbmdCdWls
ZGVyLnRvU3RyaW5nKCk7IH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgYXV0byBnZXROYXRpdmVOYW1lID0gWyZdKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRU
eXBlKSAtPiBTdHJpbmcgeworICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6TmFtZWRUeXBlPih1
bm5hbWVkVHlwZS51bmlmeU5vZGUoKSkpOworICAgICAgICAgICAgYXV0byYgbmFtZWRUeXBlID0g
ZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVubmFtZWRUeXBlLnVuaWZ5Tm9kZSgpKTsKKyAgICAg
ICAgICAgIEFTU0VSVChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKSk7
CisgICAgICAgICAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBkb3duY2FzdDxBU1Q6
Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKTsKKyAgICAgICAgICAgIHJldHVybiBt
X3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKKyAg
ICAgICAgfTsKKyAgICAgICAgYXV0byBtYXBGdW5jdGlvbk5hbWUgPSBbXShTdHJpbmcmIGZ1bmN0
aW9uTmFtZSkgLT4gU3RyaW5nIHsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbk5hbWUgPT0gImRk
eCIpCisgICAgICAgICAgICAgICAgcmV0dXJuICJkZmR4Il9zdHI7CisgICAgICAgICAgICBpZiAo
ZnVuY3Rpb25OYW1lID09ICJkZHkiKQorICAgICAgICAgICAgICAgIHJldHVybiAiZGZkeSJfc3Ry
OworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uTmFtZSA9PSAiYXNpbnQiKQorICAgICAgICAgICAg
ICAgIHJldHVybiAiYXNfdHlwZTxpbnQzMl90PiJfc3RyOworICAgICAgICAgICAgaWYgKGZ1bmN0
aW9uTmFtZSA9PSAiYXN1aW50IikKKyAgICAgICAgICAgICAgICByZXR1cm4gImFzX3R5cGU8dWlu
dDMyX3Q+Il9zdHI7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25OYW1lID09ICJhc2Zsb2F0IikK
KyAgICAgICAgICAgICAgICByZXR1cm4gImFzX3R5cGU8ZmxvYXQ+Il9zdHI7CisgICAgICAgICAg
ICByZXR1cm4gZnVuY3Rpb25OYW1lOworICAgICAgICB9OworICAgICAgICBhdXRvIGl0ZXJhdG9y
ID0gbV9mdW5jdGlvbk1hcHBpbmcuZmluZCgmbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7Cisg
ICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX2Z1bmN0aW9uTWFwcGluZy5lbmQoKSk7CisgICAg
ICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmlzQ2FzdCgpKSB7CisgICAgICAgICAg
ICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09
IDEpOworICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSBnZXROYXRpdmVOYW1l
KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOworICAg
ICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSBnZXROYXRpdmVOYW1lKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAgICAgIGlmIChtZXRhbFBhcmFtZXRlck5h
bWUgIT0gImF0b21pY19pbnQiX3N0ciAmJiBtZXRhbFBhcmFtZXRlck5hbWUgIT0gImF0b21pY191
aW50Il9zdHIpIHsKKyAgICAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIGl0ZXJhdG9yLT52YWx1ZSwgJygnLCBtZXRhbFBh
cmFtZXRlck5hbWUsICJ4KSB7XG4iKSk7CisgICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuIHN0YXRpY19jYXN0PCIsIG1ldGFsUmV0dXJu
TmFtZSwgIj4oeCk7XG4iKSk7CisgICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZCgifVxuIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1fc3RyaW5n
QnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgaXRlcmF0b3It
PnZhbHVlLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIngpIHtcbiIpKTsKKyAgICAgICAgICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgcmV0dXJuIGF0b21pY19sb2FkX2V4cGxp
Y2l0KCZ4LCBtZW1vcnlfb3JkZXJfcmVsYXhlZCk7XG4iKTsKKyAgICAgICAgICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJvcGVyYXRv
ci4iX3N0cikpIHsKKyAgICAgICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5h
bWUoKS5lbmRzV2l0aCgiPSJfc3RyKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7CisgICAgICAgICAg
ICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gZ2V0TmF0aXZlTmFtZSgqbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpOworICAgICAgICAgICAgICAgIGF1
dG8gbWV0YWxSZXR1cm5OYW1lID0gZ2V0TmF0aXZlTmFtZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnR5cGUoKSk7CisgICAgICAgICAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yLiJfc3RyLmxlbmd0aCgp
KTsKKyAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSBmaWVsZE5hbWUuc3Vic3RyaW5nKDAsIGZp
ZWxkTmFtZS5sZW5ndGgoKSAtIDEpOworICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgaXRlcmF0b3ItPnZhbHVlLCAn
KCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICJ2LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIG4p
IHtcbiIpKTsKKyAgICAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcoIiAgICB2LiIsIGZpZWxkTmFtZSwgIiA9IG47XG4iKSk7CisgICAgICAgICAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuIHY7XG4iKSk7CisgICAg
ICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMSk7CisgICAgICAgICAgICAgICAgYXV0byBtZXRhbFBh
cmFtZXRlck5hbWUgPSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKVswXS50eXBlKCkpOworICAgICAgICAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5O
YW1lID0gZ2V0TmF0aXZlTmFtZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7Cisg
ICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0
dXJuTmFtZSwgJyAnLCBpdGVyYXRvci0+dmFsdWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAi
dikge1xuIikpOworICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZygiICAgIHJldHVybiB2LiIsIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1
YnN0cmluZygib3BlcmF0b3IuIl9zdHIubGVuZ3RoKCkpLCAiO1xuIikpOworICAgICAgICAgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRv
cltdIikgeworICAgICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpLnNpemUoKSA9PSAyKTsKKyAgICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIx
TmFtZSA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVy
cygpWzBdLnR5cGUoKSk7CisgICAgICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSBn
ZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS50
eXBlKCkpOworICAgICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSBnZXROYXRpdmVOYW1l
KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAgICAgIG1fc3RyaW5n
QnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgaXRlcmF0b3It
PnZhbHVlLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICJtLCAiLCBtZXRhbFBhcmFtZXRlcjJO
YW1lLCAiIGkpIHtcbiIpKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZygiICAgIHJldHVybiBtW2ldO1xuIikpOworICAgICAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZCgifVxuIik7CisgICAgICAgIH0gZWxzZSBpZiAobmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yW109IikgeworICAgICAgICAgICAgQVNTRVJUKG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAzKTsKKyAgICAg
ICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSk7CisgICAgICAgICAgICBh
dXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpOworICAgICAgICAgICAgYXV0byBtZXRh
bFBhcmFtZXRlcjNOYW1lID0gZ2V0TmF0aXZlTmFtZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKClbMl0udHlwZSgpKTsKKyAgICAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5O
YW1lID0gZ2V0TmF0aXZlTmFtZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7Cisg
ICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5O
YW1lLCAnICcsIGl0ZXJhdG9yLT52YWx1ZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAibSwg
IiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBpLCAiLCBtZXRhbFBhcmFtZXRlcjNOYW1lLCAiIHYp
IHtcbiIpKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygi
ICAgIG1baV0gPSB2O1xuIikpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKCIgICAgcmV0dXJuIG07XG4iKSk7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAgICAgfSBlbHNlIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLmlzT3BlcmF0b3IoKSkgeworICAgICAgICAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgYXV0
byBvcGVyYXRvck5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJp
bmcoIm9wZXJhdG9yIl9zdHIubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIGF1dG8gbWV0YWxQ
YXJhbWV0ZXJOYW1lID0gZ2V0TmF0aXZlTmFtZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5w
YXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIG1ldGFsUmV0dXJu
TmFtZSA9IGdldE5hdGl2ZU5hbWUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwor
ICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJl
dHVybk5hbWUsICcgJywgaXRlcmF0b3ItPnZhbHVlLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwg
IngpIHtcbiIpKTsKKyAgICAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcoIiAgICByZXR1cm4gIiwgb3BlcmF0b3JOYW1lLCAieDtcbiIpKTsKKyAgICAgICAgICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1l
dGVycygpLnNpemUoKSA9PSAyKTsKKyAgICAgICAgICAgICAgICBhdXRvIG9wZXJhdG9yTmFtZSA9
IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygib3BlcmF0b3IiX3N0
ci5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0g
Z2V0TmF0aXZlTmFtZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0u
dHlwZSgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSBnZXRO
YXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS50eXBl
KCkpOworICAgICAgICAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gZ2V0TmF0aXZlTmFt
ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAgICAgICAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBpdGVy
YXRvci0+dmFsdWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIngsICIsIG1ldGFsUGFyYW1l
dGVyMk5hbWUsICIgeSkge1xuIikpOworICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiB4ICIsIG9wZXJhdG9yTmFtZSwgIiB5O1xuIikp
OworICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFt
ZSgpID09ICJjb3MiCisgICAgICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5h
bWUoKSA9PSAic2luIgorICAgICAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5u
YW1lKCkgPT0gInRhbiIKKyAgICAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpID09ICJhY29zIgorICAgICAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5uYW1lKCkgPT0gImFzaW4iCisgICAgICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLm5hbWUoKSA9PSAiYXRhbiIKKyAgICAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ubmFtZSgpID09ICJjb3NoIgorICAgICAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5uYW1lKCkgPT0gInNpbmgiCisgICAgICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKSA9PSAidGFuaCIKKyAgICAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ubmFtZSgpID09ICJjZWlsIgorICAgICAgICAgICAgfHwgbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImV4cCIKKyAgICAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJmbG9vciIKKyAgICAgICAgICAgIHx8IG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJsb2ciCisgICAgICAgICAgICB8fCBuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAicm91bmQiCisgICAgICAgICAgICB8fCBuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAidHJ1bmMiCisgICAgICAgICAgICB8fCBu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiZGR4IgorICAgICAgICAgICAgfHwg
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImRkeSIKKyAgICAgICAgICAgIHx8
IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJpc25vcm1hbCIKKyAgICAgICAg
ICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJpc2Zpbml0ZSIKKyAg
ICAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJpc2luZiIK
KyAgICAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJpc25h
biIKKyAgICAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJh
c2ludCIKKyAgICAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09
ICJhc3VpbnQiCisgICAgICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUo
KSA9PSAiYXNmbG9hdCIpIHsKKyAgICAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMSk7CisgICAgICAgICAgICBhdXRvIG1ldGFs
UGFyYW1ldGVyTmFtZSA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
cGFyYW1ldGVycygpWzBdLnR5cGUoKSk7CisgICAgICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFt
ZSA9IGdldE5hdGl2ZU5hbWUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOworICAg
ICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFt
ZSwgJyAnLCBpdGVyYXRvci0+dmFsdWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAieCkge1xu
IikpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAg
cmV0dXJuICIsIG1hcEZ1bmN0aW9uTmFtZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUo
KSksICIoeCk7XG4iKSk7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4i
KTsKKyAgICAgICAgfSBlbHNlIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9
PSAicG93IiB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYXRhbjIiKSB7
CisgICAgICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KCkuc2l6ZSgpID09IDIpOworICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0g
Z2V0TmF0aXZlTmFtZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0u
dHlwZSgpKTsKKyAgICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IGdldE5hdGl2
ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSk7
CisgICAgICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IGdldE5hdGl2ZU5hbWUobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBpdGVyYXRvci0+dmFsdWUs
ICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIngsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIg
eSkge1xuIikpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KCIgICAgcmV0dXJuICIsIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLCAiKHgsIHkp
O1xuIikpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAg
ICAgIH0gZWxzZSBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImYxNnRv
ZjMyIiB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiZjMydG9mMTYiKSB7
CisgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKKyAgICAgICAgICAgIENSQVNI
KCk7CisgICAgICAgIH0gZWxzZSBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkg
PT0gIkFsbE1lbW9yeUJhcnJpZXJXaXRoR3JvdXBTeW5jIikgeworICAgICAgICAgICAgQVNTRVJU
KCFuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkpOworICAgICAg
ICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ2b2lkICIsIGl0ZXJhdG9y
LT52YWx1ZSwgIigpIHtcbiIpKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
IiAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX2RldmljZSk7XG4iKTsKKyAg
ICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICB0aHJlYWRncm91cF9iYXJyaWVy
KG1lbV9mbGFnczo6bWVtX3RocmVhZGdyb3VwKTtcbiIpOworICAgICAgICAgICAgbV9zdHJpbmdC
dWlsZGVyLmFwcGVuZCgiICAgIHRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjptZW1fdGV4
dHVyZSk7XG4iKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOwor
ICAgICAgICB9IGVsc2UgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJE
ZXZpY2VNZW1vcnlCYXJyaWVyV2l0aEdyb3VwU3luYyIpIHsKKyAgICAgICAgICAgIEFTU0VSVCgh
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpKTsKKyAgICAgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygidm9pZCAiLCBpdGVyYXRvci0+
dmFsdWUsICIoKSB7XG4iKSk7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIg
ICAgdGhyZWFkZ3JvdXBfYmFycmllcihtZW1fZmxhZ3M6Om1lbV9kZXZpY2UpO1xuIik7CisgICAg
ICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAgICAgfSBlbHNlIGlm
IChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiR3JvdXBNZW1vcnlCYXJyaWVy
V2l0aEdyb3VwU3luYyIpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWFrZVN0cmluZygidm9pZCAiLCBpdGVyYXRvci0+dmFsdWUsICIoKSB7XG4iKSk7
CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgdGhyZWFkZ3JvdXBfYmFy
cmllcihtZW1fZmxhZ3M6Om1lbV90aHJlYWRncm91cCk7XG4iKTsKKyAgICAgICAgICAgIG1fc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgICAgICB9IGVsc2UgaWYgKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN0YXJ0c1dpdGgoIkludGVybG9ja2VkIl9zdHIpKSB7Cisg
ICAgICAgICAgICBhdXRvIGNvbnZlcnRBZGRyZXNzU3BhY2UgPSBbXShBU1Q6OkFkZHJlc3NTcGFj
ZSBhZGRyZXNzU3BhY2UpIC0+IFN0cmluZyB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChhZGRy
ZXNzU3BhY2UpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFTVDo6QWRkcmVzc1NwYWNlOjpDb25z
dGFudDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJjb25zdGFudCJfc3RyOworICAgICAg
ICAgICAgICAgIGNhc2UgQVNUOjpBZGRyZXNzU3BhY2U6OkRldmljZToKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICJkZXZpY2UiX3N0cjsKKyAgICAgICAgICAgICAgICBjYXNlIEFTVDo6QWRk
cmVzc1NwYWNlOjpUaHJlYWRncm91cDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJ0aHJl
YWRncm91cCJfc3RyOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChhZGRyZXNzU3BhY2UgPT0gQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAidGhyZWFkIl9zdHI7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLm5hbWUoKSA9PSAiSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UiKSB7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUo
KSA9PSA0KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXM8QVNUOjpQb2ludGVyVHlwZT4oKm5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSkpOworICAgICAg
ICAgICAgICAgIGF1dG8mIGZpcnN0QXJndW1lbnRQb2ludGVyID0gZG93bmNhc3Q8QVNUOjpQb2lu
dGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUo
KSk7CisgICAgICAgICAgICAgICAgYXV0byBmaXJzdEFyZ3VtZW50QWRkcmVzc1NwYWNlID0gZmly
c3RBcmd1bWVudFBvaW50ZXIuYWRkcmVzc1NwYWNlKCk7CisgICAgICAgICAgICAgICAgYXV0byBm
aXJzdEFyZ3VtZW50UG9pbnRlZSA9IGdldE5hdGl2ZU5hbWUoZmlyc3RBcmd1bWVudFBvaW50ZXIu
ZWxlbWVudFR5cGUoKSk7CisgICAgICAgICAgICAgICAgYXV0byBzZWNvbmRBcmd1bWVudCA9IGdl
dE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLnR5
cGUoKSk7CisgICAgICAgICAgICAgICAgYXV0byB0aGlyZEFyZ3VtZW50ID0gZ2V0TmF0aXZlTmFt
ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0udHlwZSgpKTsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoaXM8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzNdLnR5cGUoKSkpOworICAgICAgICAgICAgICAgIGF1
dG8mIGZvdXJ0aEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVszXS50eXBlKCkpOworICAgICAg
ICAgICAgICAgIGF1dG8gZm91cnRoQXJndW1lbnRBZGRyZXNzU3BhY2UgPSBmb3VydGhBcmd1bWVu
dFBvaW50ZXIuYWRkcmVzc1NwYWNlKCk7CisgICAgICAgICAgICAgICAgYXV0byBmb3VydGhBcmd1
bWVudFBvaW50ZWUgPSBnZXROYXRpdmVOYW1lKGZvdXJ0aEFyZ3VtZW50UG9pbnRlci5lbGVtZW50
VHlwZSgpKTsKKyAgICAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcoInZvaWQgIiwgaXRlcmF0b3ItPnZhbHVlLCAnKCcsIGNvbnZlcnRBZGRyZXNzU3BhY2UoZmly
c3RBcmd1bWVudEFkZHJlc3NTcGFjZSksICcgJywgZmlyc3RBcmd1bWVudFBvaW50ZWUsICIqIG9i
amVjdCwgIiwgc2Vjb25kQXJndW1lbnQsICIgY29tcGFyZSwgIiwgdGhpcmRBcmd1bWVudCwgIiBk
ZXNpcmVkLCAiLCBjb252ZXJ0QWRkcmVzc1NwYWNlKGZvdXJ0aEFyZ3VtZW50QWRkcmVzc1NwYWNl
KSwgJyAnLCBmb3VydGhBcmd1bWVudFBvaW50ZWUsICIqIG91dCkge1xuIikpOworICAgICAgICAg
ICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICBhdG9taWNfY29tcGFyZV9leGNoYW5n
ZV93ZWFrX2V4cGxpY2l0KG9iamVjdCwgJmNvbXBhcmUsIGRlc2lyZWQsIG1lbW9yeV9vcmRlcl9y
ZWxheGVkKTtcbiIpOworICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAg
ICAqb3V0ID0gY29tcGFyZTtcbiIpOworICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQoIn1cbiIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDMpOwor
ICAgICAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKSk7CisgICAgICAgICAgICAgICAg
YXV0byYgZmlyc3RBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKTsKKyAgICAg
ICAgICAgICAgICBhdXRvIGZpcnN0QXJndW1lbnRBZGRyZXNzU3BhY2UgPSBmaXJzdEFyZ3VtZW50
UG9pbnRlci5hZGRyZXNzU3BhY2UoKTsKKyAgICAgICAgICAgICAgICBhdXRvIGZpcnN0QXJndW1l
bnRQb2ludGVlID0gZ2V0TmF0aXZlTmFtZShmaXJzdEFyZ3VtZW50UG9pbnRlci5lbGVtZW50VHlw
ZSgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHNlY29uZEFyZ3VtZW50ID0gZ2V0TmF0aXZlTmFt
ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKTsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoaXM8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzJdLnR5cGUoKSkpOworICAgICAgICAgICAgICAgIGF1
dG8mIHRoaXJkQXJndW1lbnRQb2ludGVyID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzJdLnR5cGUoKSk7CisgICAgICAg
ICAgICAgICAgYXV0byB0aGlyZEFyZ3VtZW50QWRkcmVzc1NwYWNlID0gdGhpcmRBcmd1bWVudFBv
aW50ZXIuYWRkcmVzc1NwYWNlKCk7CisgICAgICAgICAgICAgICAgYXV0byB0aGlyZEFyZ3VtZW50
UG9pbnRlZSA9IGdldE5hdGl2ZU5hbWUodGhpcmRBcmd1bWVudFBvaW50ZXIuZWxlbWVudFR5cGUo
KSk7CisgICAgICAgICAgICAgICAgYXV0byBuYW1lID0gKFtdKFN0cmluZyBpbnB1dCkgLT4gU3Ry
aW5nIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0ID09ICJBZGQiKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuICJmZXRjaF9hZGQiX3N0cjsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGlucHV0ID09ICJBbmQiKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJm
ZXRjaF9hbmQiX3N0cjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0ID09ICJFeGNoYW5n
ZSIpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImV4Y2hhbmdlIl9zdHI7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSAiTWF4IikKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAiZmV0Y2hfbWF4Il9zdHI7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1
dCA9PSAiTWluIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZmV0Y2hfbWluIl9z
dHI7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSAiT3IiKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICJmZXRjaF9vciJfc3RyOworICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoaW5wdXQgPT0gIlhvciIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZldGNo
X3hvciJfc3RyOworICAgICAgICAgICAgICAgIH0pKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpLnN1YnN0cmluZygiSW50ZXJsb2NrZWQiX3N0ci5sZW5ndGgoKSkpOworICAgICAgICAg
ICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygidm9pZCAiLCBpdGVyYXRv
ci0+dmFsdWUsICcoJywgY29udmVydEFkZHJlc3NTcGFjZShmaXJzdEFyZ3VtZW50QWRkcmVzc1Nw
YWNlKSwgJyAnLCBmaXJzdEFyZ3VtZW50UG9pbnRlZSwgIiogb2JqZWN0LCAiLCBzZWNvbmRBcmd1
bWVudCwgIiBvcGVyYW5kLCAiLCBjb252ZXJ0QWRkcmVzc1NwYWNlKHRoaXJkQXJndW1lbnRBZGRy
ZXNzU3BhY2UpLCAnICcsIHRoaXJkQXJndW1lbnRQb2ludGVlLCAiKiBvdXQpIHtcbiIpKTsKKyAg
ICAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICAqb3V0
ID0gYXRvbWljX2ZldGNoXyIsIG5hbWUsICJfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBtZW1v
cnlfb3JkZXJfcmVsYXhlZCk7XG4iKSk7CisgICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZCgifVxuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlNhbXBsZSIpIHsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0g
ZWxzZSBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkxvYWQiKSB7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgICAgICAgICBDUkFTSCgp
OworICAgICAgICB9IGVsc2UgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09
ICJHZXREaW1lbnNpb25zIikgeworICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
LgorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfSBlbHNlIGlmIChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiU2FtcGxlQmlhcyIpIHsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0gZWxz
ZSBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlNhbXBsZUdyYWQiKSB7
CisgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgICAgICAgICBDUkFT
SCgpOworICAgICAgICB9IGVsc2UgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgp
ID09ICJTYW1wbGVMZXZlbCIpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cy4KKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0gZWxzZSBpZiAobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkdhdGhlciIpIHsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhpcy4KKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0gZWxzZSBp
ZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkdhdGhlclJlZCIpIHsKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICAgICAgICAgIENSQVNIKCk7
CisgICAgICAgIH0gZWxzZSBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0g
IlNhbXBsZUNtcCIpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAg
ICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0gZWxzZSBpZiAobmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5uYW1lKCkgPT0gIlNhbXBsZUNtcExldmVsWmVybyIpIHsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0g
ZWxzZSBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlN0b3JlIikgewor
ICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgfSBlbHNlIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9
PSAiR2F0aGVyQWxwaGEiKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMu
CisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9IGVsc2UgaWYgKG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ubmFtZSgpID09ICJHYXRoZXJCbHVlIikgeworICAgICAgICAgICAgLy8gRklY
TUU6IEltcGxlbWVudCB0aGlzLgorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfSBlbHNl
IGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiR2F0aGVyQ21wIikgewor
ICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgfSBlbHNlIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9
PSAiR2F0aGVyQ21wUmVkIikgeworICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
LgorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfSBlbHNlIGlmIChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiR2F0aGVyR3JlZW4iKSB7CisgICAgICAgICAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25E
ZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fZnVu
Y3Rpb25NYXBwaW5nLmZpbmQoJmZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAgICAgIEFTU0VSVChp
dGVyYXRvciAhPSBtX2Z1bmN0aW9uTWFwcGluZy5lbmQoKSk7CisgICAgICAgIGlmIChmdW5jdGlv
bkRlZmluaXRpb24uZW50cnlQb2ludFR5cGUoKSkgeworICAgICAgICAgICAgYXV0byBpdGVtcyA9
IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhtX2ludHJpbnNpY3MsIGZ1bmN0aW9uRGVmaW5pdGlvbik7
CisgICAgICAgICAgICBtX2VudHJ5UG9pbnRJdGVtcyA9IGl0ZW1zOworICAgICAgICAgICAgbV9l
bnRyeVBvaW50UmV0dXJuVHlwZSA9ICZmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpOworICAgICAg
ICAgICAgQVNTRVJUKGl0ZW1zKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRleHR1cmVDb3VudCA9
IDA7CisgICAgICAgICAgICB1bnNpZ25lZCBidWZmZXJDb3VudCA9IDA7CisgICAgICAgICAgICB1
bnNpZ25lZCBzYW1wbGVyQ291bnQgPSAwOworCisgICAgICAgICAgICBhdXRvIHNlbWFudGljVmlz
aXRvciA9IFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6QnVpbHRJblNlbWFudGljJiBidWlsdElu
U2VtYW50aWMpIC0+IFN0cmluZyB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChidWlsdEluU2Vt
YW50aWMudmFyaWFibGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQVNUOjpCdWlsdEluU2Vt
YW50aWM6OlZhcmlhYmxlOjpTVkluc3RhbmNlSUQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biAiW1tpbnN0YW5jZV9pZF1dIl9zdHI7CisgICAgICAgICAgICAgICAgY2FzZSBBU1Q6OkJ1aWx0
SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWVmVydGV4SUQ6CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAiW1t2ZXJ0ZXhfaWRdXSJfc3RyOworICAgICAgICAgICAgICAgIGNhc2UgQVNUOjpCdWls
dEluU2VtYW50aWM6OlZhcmlhYmxlOjpQU2l6ZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICJbW3BvaW50X3NpemVdXSJfc3RyOworICAgICAgICAgICAgICAgIGNhc2UgQVNUOjpCdWlsdElu
U2VtYW50aWM6OlZhcmlhYmxlOjpTVlBvc2l0aW9uOgorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gIltbcG9zaXRpb25dXSJfc3RyOworICAgICAgICAgICAgICAgIGNhc2UgQVNUOjpCdWlsdElu
U2VtYW50aWM6OlZhcmlhYmxlOjpTVklzRnJvbnRGYWNlOgorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gIltbZnJvbnRfZmFjaW5nXV0iX3N0cjsKKyAgICAgICAgICAgICAgICBjYXNlIEFTVDo6
QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZTYW1wbGVJbmRleDoKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICJbW3NhbXBsZV9pZF1dIl9zdHI7CisgICAgICAgICAgICAgICAgY2FzZSBB
U1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWSW5uZXJDb3ZlcmFnZToKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICJbW3NhbXBsZV9tYXNrXV0iX3N0cjsKKyAgICAgICAgICAgICAg
ICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZUYXJnZXQ6CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJbW2NvbG9yKCIsICpidWlsdEluU2VtYW50
aWMudGFyZ2V0SW5kZXgoKSwgIildXSIpOworICAgICAgICAgICAgICAgIGNhc2UgQVNUOjpCdWls
dEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVkRlcHRoOgorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gIltbZGVwdGgoYW55KV1dIl9zdHI7CisgICAgICAgICAgICAgICAgY2FzZSBBU1Q6OkJ1aWx0
SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWQ292ZXJhZ2U6CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAiW1tzYW1wbGVfbWFza11dIl9zdHI7CisgICAgICAgICAgICAgICAgY2FzZSBBU1Q6OkJ1
aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWRGlzcGF0Y2hUaHJlYWRJRDoKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuICJbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0iX3N0cjsKKyAgICAg
ICAgICAgICAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZHcm91cElE
OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIltbdGhyZWFkZ3JvdXBfcG9zaXRpb25faW5f
Z3JpZF1dIl9zdHI7CisgICAgICAgICAgICAgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6
VmFyaWFibGU6OlNWR3JvdXBJbmRleDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJbW3Ro
cmVhZF9pbmRleF9pbl90aHJlYWRncm91cF1dIl9zdHI7CisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJ1aWx0SW5TZW1hbnRpYy52YXJpYWJsZSgp
ID09IEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZHcm91cFRocmVhZElEKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICJbW3RocmVhZF9wb3NpdGlvbl9pbl90aHJlYWRncm91
cF1dIl9zdHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgWyZdKEFTVDo6UmVz
b3VyY2VTZW1hbnRpYyYgcmVzb3VyY2VTZW1hbnRpYykgLT4gU3RyaW5nIHsKKyAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogUHJvdmlkZSBhIGJldHRlciBtYXBwaW5nIGJldHdlZW4gSExTTCBzZW1h
bnRpY3MgYW5kIE1ldGFsIGF0dHJpYnV0ZXMuCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFJl
cG9ydCB0aGlzIGluZm9ybWF0aW9uIHRvIHRoZSBBUEkuCisgICAgICAgICAgICAgICAgc3dpdGNo
IChyZXNvdXJjZVNlbWFudGljLm1vZGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQVNUOjpS
ZXNvdXJjZVNlbWFudGljOjpNb2RlOjpVbm9yZGVyZWRBY2Nlc3NWaWV3OgorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiW1tidWZmZXIoIiwgYnVmZmVyQ291bnQrKywgIild
XSIpOworICAgICAgICAgICAgICAgIGNhc2UgQVNUOjpSZXNvdXJjZVNlbWFudGljOjpNb2RlOjpU
ZXh0dXJlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiW1t0ZXh0dXJl
KCIsIHRleHR1cmVDb3VudCsrLCAiKV1dIik7CisgICAgICAgICAgICAgICAgY2FzZSBBU1Q6OlJl
c291cmNlU2VtYW50aWM6Ok1vZGU6OkJ1ZmZlcjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG1ha2VTdHJpbmcoIltbYnVmZmVyKCIsIGJ1ZmZlckNvdW50KyssICIpXV0iKTsKKyAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVzb3VyY2VTZW1h
bnRpYy5tb2RlKCkgPT0gQVNUOjpSZXNvdXJjZVNlbWFudGljOjpNb2RlOjpTYW1wbGVyKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIltbc2FtcGxlcigiLCBzYW1wbGVy
Q291bnQrKywgIildXSIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sIFsmXShB
U1Q6OlNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYpIC0+IFN0cmluZyB7CisgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzCisgICAgICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYyYgc3RhZ2VJbk91
dFNlbWFudGljKSAtPiBTdHJpbmcgeworICAgICAgICAgICAgICAgIHJldHVybiBtYWtlU3RyaW5n
KCJbW2F0dHJpYnV0ZSgiLCBzdGFnZUluT3V0U2VtYW50aWMuaW5kZXgoKSwgIildXSIpOworICAg
ICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIG1fb3V0cHV0U3RydWN0TmFtZSA9IG1fdHlwZU5h
bWVyLmdlbmVyYXRlTmV4dFR5cGVOYW1lKCk7CisgICAgICAgICAgICBtX21ldGFsT3V0cHV0TmFt
ZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
Zygic3RydWN0ICIsIG1fb3V0cHV0U3RydWN0TmFtZSwgIntcbiIpKTsKKyAgICAgICAgICAgIGZv
ciAoYXV0byYgb3V0cHV0IDogaXRlbXMtPm91dHB1dHMpIHsKKyAgICAgICAgICAgICAgICBhdXRv
IGVsZW1lbnROYW1lID0gbV90eXBlTmFtZXIuZ2VuZXJhdGVOZXh0U3RydWN0dXJlRWxlbWVudE5h
bWUoKTsKKyAgICAgICAgICAgICAgICBtX21ldGFsT3V0cHV0TmFtZXMuYXBwZW5kKGVsZW1lbnRO
YW1lKTsKKyAgICAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
IiAgICAiLCBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm91dHB1dC51bm5hbWVkVHlw
ZSksICcgJywgZWxlbWVudE5hbWUsICcgJywgV1RGOjp2aXNpdChzZW1hbnRpY1Zpc2l0b3IsICpv
dXRwdXQuc2VtYW50aWMpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKCJ9O1xuIik7CisgICAgICAgICAgICBhdXRvIGVudHJ5UG9pbnQgPSAoWyZd
KCkgLT4gU3RyaW5nIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKCpmdW5jdGlvbkRlZmluaXRp
b24uZW50cnlQb2ludFR5cGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQVNUOjpFbnRyeVBv
aW50VHlwZTo6VmVydGV4OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gInZlcnRleCJfc3Ry
OworICAgICAgICAgICAgICAgIGNhc2UgQVNUOjpFbnRyeVBvaW50VHlwZTo6RnJhZ21lbnQ6Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAiZnJhZ21lbnQiX3N0cjsKKyAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoKmZ1bmN0aW9uRGVmaW5pdGlv
bi5lbnRyeVBvaW50VHlwZSgpID09IEFTVDo6RW50cnlQb2ludFR5cGU6OkNvbXB1dGUpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gImtlcm5lbCJfc3RyOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0pKCk7CisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBtZXRhbFBhcmFt
ZXRlck5hbWVzOworICAgICAgICAgICAgbWV0YWxQYXJhbWV0ZXJOYW1lcy5yZXNlcnZlQ2FwYWNp
dHkoaXRlbXMtPmlucHV0cy5zaXplKCkpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKGVudHJ5UG9pbnQsICIgIiwgbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkpLCAnICcsIGl0ZXJhdG9yLT52YWx1ZSwg
JygnKSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZW1zLT5pbnB1dHMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBpbnB1dCA9IGl0ZW1zLT5pbnB1
dHNbaV07CisgICAgICAgICAgICAgICAgaWYgKGkpCisgICAgICAgICAgICAgICAgICAgIG1fc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIiwgIik7CisgICAgICAgICAgICAgICAgYXV0byBwYXJhbWV0ZXJO
YW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAgICAgICAgICAgbWV0YWxQ
YXJhbWV0ZXJOYW1lcy51bmNoZWNrZWRBcHBlbmQocGFyYW1ldGVyTmFtZSk7CisgICAgICAgICAg
ICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZSgqaW5wdXQudW5uYW1lZFR5cGUpLCAnICcsIHBhcmFtZXRlck5hbWUsICcg
JywgV1RGOjp2aXNpdChzZW1hbnRpY1Zpc2l0b3IsICppbnB1dC5zZW1hbnRpYykpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIikge1xuIik7Cisg
ICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBwYXJhbWV0ZXJOYW1lTWFwOworICAg
ICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbio+IHBhcmFt
ZXRlck9iamVjdE1hcDsKKyAgICAgICAgICAgIGZvciAoYXV0byYgcGFyYW1ldGVyIDogZnVuY3Rp
b25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKSkgeworICAgICAgICAgICAgICAgIGF1dG8gcGFyYW1l
dGVyTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3ZhcmlhYmxlTWFwcGluZy5h
ZGQoJnBhcmFtZXRlciwgcGFyYW1ldGVyTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRSZXN1
bHQgPSBwYXJhbWV0ZXJOYW1lTWFwLmFkZChwYXJhbWV0ZXIubmFtZSgpLCBwYXJhbWV0ZXJOYW1l
KTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3Vs
dC5pc05ld0VudHJ5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IHBhcmFtZXRlck9iamVjdE1hcC5hZGQo
cGFyYW1ldGVyLm5hbWUoKSwgJnBhcmFtZXRlcik7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyht
X3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKnBhcmFtZXRlci50eXBlKCkpLCAnICcsIHBh
cmFtZXRlck5hbWUsICI7XG4iKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGl0ZW1zLT5pbnB1dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvJiBpbnB1dCA9IGl0ZW1zLT5pbnB1dHNbaV07CisgICAgICAgICAgICAgICAgQVNU
OjpTdHJ1Y3R1cmVEZWZpbml0aW9uKiBzdHJ1Y3R1cmVEZWZpbml0aW9uID0gbnVsbHB0cjsKKyAg
ICAgICAgICAgICAgICBhdXRvIGNvbXB1dGVTdHJ1Y3R1cmVEZWZpbml0aW9uID0gW10oQVNUOjpV
bm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpIC0+IEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiogewor
ICAgICAgICAgICAgICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSB1bm5hbWVkVHlwZS51bmlmeU5v
ZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpczxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlO
b2RlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAg
ICAgICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5p
ZnlOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpczxBU1Q6OlN0cnVjdHVyZURlZmlu
aXRpb24+KG5hbWVkVHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICZkb3duY2FzdDxBU1Q6OlN0cnVjdHVyZURl
ZmluaXRpb24+KG5hbWVkVHlwZSk7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGlucHV0LnBhdGguc2l6ZSgpOyArK2opIHsKKyAgICAg
ICAgICAgICAgICAgICAgYXV0byYgY29tcG9uZW50ID0gaW5wdXQucGF0aFtqXTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFqKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IHBhcmFtZXRlck5hbWVNYXAuZmlu
ZChjb21wb25lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpdGVyYXRv
ciAhPSBwYXJhbWV0ZXJOYW1lTWFwLmVuZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKGl0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gcGFy
YW1ldGVyT2JqZWN0TWFwLmZpbmQoY29tcG9uZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChpdGVyYXRvciAhPSBwYXJhbWV0ZXJPYmplY3RNYXAuZW5kKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0dXJlRGVmaW5pdGlvbiA9IGNvbXB1dGVTdHJ1Y3R1cmVEZWZp
bml0aW9uKCppdGVyYXRvci0+dmFsdWUtPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvKiBzdHJ1Y3R1cmVFbGVtZW50ID0g
c3RydWN0dXJlRGVmaW5pdGlvbi0+ZmluZChjb21wb25lbnQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKHN0cnVjdHVyZUVsZW1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCcuJywgbV90eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JTdHJ1Y3R1cmVFbGVtZW50KCpzdHJ1Y3R1cmVFbGVtZW50KSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0dXJlRGVmaW5pdGlvbiA9IGNvbXB1dGVTdHJ1Y3R1cmVEZWZp
bml0aW9uKHN0cnVjdHVyZUVsZW1lbnQtPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKCIgPSAiLCBtZXRhbFBhcmFtZXRlck5hbWVzW2ldLCAiO1xuIikpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5p
dGlvbi5ibG9jaygpKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9lbnRyeVBvaW50SXRlbXMgPSBXVEY6
Om51bGxvcHQ7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
bV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkp
LCAnICcsIGl0ZXJhdG9yLT52YWx1ZSwgJygnKSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgICAgICBhdXRvJiBwYXJhbWV0ZXIgPSBmdW5jdGlvbkRlZmluaXRpb24ucGFy
YW1ldGVycygpW2ldOworICAgICAgICAgICAgICAgIGlmIChpKQorICAgICAgICAgICAgICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIsICIpOworICAgICAgICAgICAgICAgIGF1dG8gcGFy
YW1ldGVyTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICAgICAgICAg
IGF1dG8gYWRkUmVzdWx0ID0gbV92YXJpYWJsZU1hcHBpbmcuYWRkKCZwYXJhbWV0ZXIsIHBhcmFt
ZXRlck5hbWUpOworICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRS
ZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqcGFyYW1ldGVyLnR5
cGUoKSksICcgJywgcGFyYW1ldGVyTmFtZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKSB7XG4iKTsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24uYmxvY2soKSk7CisgICAgICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYpIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFT
VDo6U3RhdGVtZW50JiBzdGF0ZW1lbnQpIG92ZXJyaWRlCisgICAgeworICAgICAgICBWaXNpdG9y
Ojp2aXNpdChzdGF0ZW1lbnQpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpCbG9jayYg
YmxvY2spIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ7
XG4iKTsKKyAgICAgICAgZm9yIChhdXRvJiBzdGF0ZW1lbnQgOiBibG9jay5zdGF0ZW1lbnRzKCkp
CisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGVtZW50KTsKKyAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6
OkJyZWFrJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
ImJyZWFrO1xuIik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkNvbnRpbnVlJikgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IHdoaWNoIGxvb3Agd2Un
cmUgaW4sIGFuZCBydW4gdGhlIGluY3JlbWVudCBjb2RlCisgICAgICAgIENSQVNIKCk7CisgICAg
fQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkRvV2hpbGVMb29wJiBkb1doaWxlTG9vcCkgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoImRvIHtcbiIpOworICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG9XaGlsZUxvb3AuYm9keSgpKTsKKyAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGRvV2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOworICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICghIiwgbV9zdGFjay50YWtlTGFzdCgp
LCAiKSBicmVhaztcbiIpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKCJ9IHdoaWxlKHRydWUpO1xuIikpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpF
ZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50JiBlZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGVmZmVjdGZ1bEV4
cHJlc3Npb25TdGF0ZW1lbnQuZWZmZWN0ZnVsRXhwcmVzc2lvbigpKTsKKyAgICAgICAgbV9zdGFj
ay50YWtlTGFzdCgpOyAvLyBUaGUgc3RhdGVtZW50IGlzIGFscmVhZHkgZWZmZWN0ZnVsLCBzbyB3
ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdC4KKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6RmFsbHRocm91Z2gmKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiW1tjbGFuZzo6ZmFsbHRocm91Z2hdXTtcbiIpOyAvLyBG
SVhNRTogTWFrZSBzdXJlIHRoaXMgaXMgb2theS4gQWx0ZXJuYXRpdmVseSwgd2UgY291bGQgZG8g
dGhpbmcgYW5kIGp1c3QgcmV0dXJuIGhlcmUgaW5zdGVhZC4KKyAgICB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9vcCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFdURjo6
dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRl
bWVudCYgdmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpIHsKKyAgICAgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCk7CisgICAgICAgIH0s
IFsmXShVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYgZXhwcmVzc2lvbikgeworICAgICAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KGV4cHJlc3Npb24pOworICAgICAgICAgICAgbV9zdGFjay50
YWtlTGFzdCgpOyAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3Vs
dC4KKyAgICAgICAgfSksIGZvckxvb3AuaW5pdGlhbGl6YXRpb24oKSk7CisKKyAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZCgiZm9yICggOyA7ICkge1xuIik7CisgICAgICAgIGlmIChmb3JM
b29wLmNvbmRpdGlvbigpKSB7CisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmZvckxv
b3AuY29uZGl0aW9uKCkpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKCJpZiAoISIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIikgYnJlYWs7XG4iKSk7CisgICAg
ICAgIH0KKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZvckxvb3AuYm9keSgpKTsKKyAgICAg
ICAgaWYgKGZvckxvb3AuaW5jcmVtZW50KCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoKmZvckxvb3AuaW5jcmVtZW50KCkpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KCJ9XG4iKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQmIGlmU3Rh
dGVtZW50KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGlmU3Rh
dGVtZW50LmNvbmRpdGlvbmFsKCkpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1h
a2VTdHJpbmcoImlmICgiLCBtX3N0YWNrLnRha2VMYXN0KCksICIpIHtcbiIpKTsKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGlmU3RhdGVtZW50LmJvZHkoKSk7CisgICAgICAgIGlmIChpZlN0
YXRlbWVudC5lbHNlQm9keSgpKSB7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KCJ9IGVsc2Uge1xuIik7CisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmlmU3RhdGVt
ZW50LmVsc2VCb2R5KCkpOworICAgICAgICB9CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQoIn1cbiIpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpSZXR1cm4mIHJldHVyblN0
YXRlbWVudCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChyZXR1cm5TdGF0ZW1lbnQudmFs
dWUoKSkgeworICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpyZXR1cm5TdGF0ZW1lbnQu
dmFsdWUoKSk7CisgICAgICAgICAgICBpZiAobV9lbnRyeVBvaW50SXRlbXMpIHsKKyAgICAgICAg
ICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwor
ICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX291dHB1
dFN0cnVjdE5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiO1xuIikpOworICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnRyeVBvaW50SXRlbXMtPm91dHB1dHMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb21wdXRlU3RydWN0dXJlRGVmaW5p
dGlvbiA9IFtdKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKSAtPiBBU1Q6OlN0cnVjdHVy
ZURlZmluaXRpb24qIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9
IHVubmFtZWRUeXBlLnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFp
czxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIG5hbWVkVHlw
ZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gJmRvd25jYXN0PEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4obmFt
ZWRUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKHZhcmlhYmxlTmFtZSwgJy4nLCBtX21ldGFs
T3V0cHV0TmFtZXNbaV0sICc9JykpOworICAgICAgICAgICAgICAgICAgICBBU1Q6OlN0cnVjdHVy
ZURlZmluaXRpb24qIHN0cnVjdHVyZURlZmluaXRpb24gPSBjb21wdXRlU3RydWN0dXJlRGVmaW5p
dGlvbigqbV9lbnRyeVBvaW50UmV0dXJuVHlwZSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qg
aiA9IDA7IGogPCBtX2VudHJ5UG9pbnRJdGVtcy0+b3V0cHV0c1tpXS5wYXRoLnNpemUoKTsgKytq
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvKiBzdHJ1Y3R1cmVFbGVtZW50ID0gc3Ry
dWN0dXJlRGVmaW5pdGlvbi0+ZmluZChtX2VudHJ5UG9pbnRJdGVtcy0+b3V0cHV0c1tpXS5wYXRo
W2pdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmVFbGVtZW50KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaikKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCcuJyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yU3RydWN0
dXJlRWxlbWVudCgqc3RydWN0dXJlRWxlbWVudCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
c3RydWN0dXJlRGVmaW5pdGlvbiA9IGNvbXB1dGVTdHJ1Y3R1cmVEZWZpbml0aW9uKHN0cnVjdHVy
ZUVsZW1lbnQtPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiO1xuIik7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygicmV0dXJu
ICIsIHZhcmlhYmxlTmFtZSwgIjtcbiIpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygicmV0dXJuICIsIG1fc3Rh
Y2sudGFrZUxhc3QoKSwgIjtcbiIpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKCJyZXR1cm47XG4iKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6U3dpdGNoU3RhdGVtZW50JiBzd2l0Y2hTdGF0ZW1lbnQpIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3dpdGNoU3RhdGVtZW50LnZhbHVlKCkpOworCisg
ICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygic3dpdGNoICgiLCBtX3N0
YWNrLnRha2VMYXN0KCksICIpIHsiKSk7CisgICAgICAgIGZvciAoYXV0byYgc3dpdGNoQ2FzZSA6
IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNlcygpKQorICAgICAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KHN3aXRjaENhc2UpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4i
KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChzd2l0Y2hDYXNlLnZhbHVlKCkpCisgICAgICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImNhc2UgIiwgY29uc3RhbnRF
eHByZXNzaW9uU3RyaW5nKCpzd2l0Y2hDYXNlLnZhbHVlKCkpLCAiOlxuIikpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJkZWZhdWx0OlxuIik7Cisg
ICAgICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IHdoZXRoZXIgd2UgbmVlZCB0byBicmVhayBvciBm
YWxsdGhyb3VnaC4KKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KHN3aXRjaENhc2UuYmxvY2soKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlRyYXAm
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzCisgICAg
ICAgIENSQVNIKCk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCkgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVt
ZW50KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6V2hpbGVMb29wJiB3aGlsZUxvb3Ap
IG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcoIndoaWxlICh0cnVlKSB7XG4iKSk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGls
ZUxvb3AuY29uZGl0aW9uYWwoKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZygiaWYgKCEiLCBtX3N0YWNrLnRha2VMYXN0KCksICIpIGJyZWFrO1xuIikpOworICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmJvZHkoKSk7CisgICAgICAgIG1fc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpJ
bnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpIG92ZXJyaWRlCisgICAgeworICAgICAgICBB
U1NFUlQoaW50ZWdlckxpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBhdXRvIHZhcmlh
YmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBhdXRvIG1hbmds
ZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqaW50ZWdlckxpdGVy
YWwucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHN0YXRpY19jYXN0
PCIsIG1hbmdsZWRUeXBlTmFtZSwgIj4oIiwgaW50ZWdlckxpdGVyYWwudmFsdWUoKSwgIik7XG4i
KSk7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgfQorCisgICAg
dm9pZCB2aXNpdChBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxp
dGVyYWwpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQodW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJh
dGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCp1bnNpZ25lZEludGVnZXJMaXRlcmFsLnJlc29s
dmVkVHlwZSgpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1h
bmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSBzdGF0aWNfY2FzdDwiLCBtYW5n
bGVkVHlwZU5hbWUsICI+KCIsIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKSwgIik7XG4i
KSk7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgfQorCisgICAg
dm9pZCB2aXNpdChBU1Q6OkZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGZsb2F0TGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAg
IGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAg
IGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpm
bG9hdExpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHN0
YXRpY19jYXN0PCIsIG1hbmdsZWRUeXBlTmFtZSwgIj4oIiwgZmxvYXRMaXRlcmFsLnZhbHVlKCks
ICIpO1xuIikpOworICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIH0K
KworICAgIHZvaWQgdmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYgbnVsbExpdGVyYWwpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBBU1NFUlQobnVsbExpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOworICAg
ICAgICBhdXRvJiB1bmlmeU5vZGUgPSBudWxsTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKS0+dW5pZnlO
b2RlKCk7CisgICAgICAgIEFTU0VSVChpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKTsK
KyAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1
bmlmeU5vZGUpOworICAgICAgICBib29sIGlzQXJyYXlSZWZlcmVuY2VUeXBlID0gaXM8QVNUOjpB
cnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKTsKKworICAgICAgICBhdXRvIHZhcmlhYmxl
TmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpudWxs
TGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gIikpOworICAg
ICAgICBpZiAoaXNBcnJheVJlZmVyZW5jZVR5cGUpCisgICAgICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKCJ7IG51bGxwdHIsIDAgfSIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
X3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJudWxscHRyIik7CisgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIjtcbiIpOworICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOwor
ICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYgYm9vbGVhbkxpdGVy
YWwpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQoYm9vbGVhbkxpdGVyYWwucmVzb2x2
ZWRUeXBlKCkpOworICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlh
YmxlTmFtZSgpOworICAgICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZSgqYm9vbGVhbkxpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOworICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcs
IHZhcmlhYmxlTmFtZSwgIiA9IHN0YXRpY19jYXN0PCIsIG1hbmdsZWRUeXBlTmFtZSwgIj4oIiwg
Ym9vbGVhbkxpdGVyYWwudmFsdWUoKSA/ICJ0cnVlIiA6ICJmYWxzZSIsICIpO1xuIikpOworICAg
ICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIH0KKworICAgIHZvaWQgdmlz
aXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwmIGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJh
bCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChlbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25NZW1iZXJMaXRl
cmFsLmVudW1lcmF0aW9uRGVmaW5pdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9u
TWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbkRlZmluaXRpb24oKSk7CisgICAgICAgIGF1dG8gdmFy
aWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAgIGF1dG8gbWFu
Z2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCplbnVtZXJhdGlv
bk1lbWJlckxpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9
ICIsIG1hbmdsZWRUeXBlTmFtZSwgJy4nLCBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvckVudW1l
cmF0aW9uTWVtYmVyKCplbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25NZW1iZXIo
KSksICI7XG4iKSk7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAg
fQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24pIG92ZXJyaWRl
CisgICAgeworICAgICAgICBWaXNpdG9yOjp2aXNpdChleHByZXNzaW9uKTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICAvLyBUaGlzIHNob3VsZCBiZSBsb3dlcmVkIGFscmVhZHkuCisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24m
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgbG93ZXJlZCBhbHJl
YWR5LgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJikgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgQVNTRVJUKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAgaWYg
KHZhcmlhYmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIoKSkKKyAgICAgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogWmVyby1maWxsIHRoZSB2YXJpYWJsZS4KKyAg
ICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCBxdWFsaWZpZXJzLgorICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZh
cmlhYmxlTmFtZSgpOworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdmFyaWFibGVNYXBwaW5n
LmFkZCgmdmFyaWFibGVEZWNsYXJhdGlvbiwgdmFyaWFibGVOYW1lKTsKKyAgICAgICAgQVNTRVJU
X1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZSgqdmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIs
IG1fc3RhY2sudGFrZUxhc3QoKSwgIjtcbiIpKTsKKyAgICAgICAgbV9zdGFjay5hcHBlbmQodmFy
aWFibGVOYW1lKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJl
c3Npb24mIGFzc2lnbm1lbnRFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKSk7CisgICAgICAgIGF1
dG8gbGVmdE5hbWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbi5yaWdodCgpKTsKKyAgICAgICAgYXV0byByaWdodE5h
bWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZyhsZWZ0TmFtZSwgIiA9ICIsIHJpZ2h0TmFtZSwgIjtcbiIpKTsKKyAgICB9CisK
KyAgICB2b2lkIHZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gYXJndW1lbnROYW1lczsKKyAgICAg
ICAgZm9yIChhdXRvJiBhcmd1bWVudCA6IGNhbGxFeHByZXNzaW9uLmFyZ3VtZW50cygpKSB7Cisg
ICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXJndW1lbnQpOworICAgICAgICAgICAgYXJn
dW1lbnROYW1lcy5hcHBlbmQobV9zdGFjay50YWtlTGFzdCgpKTsKKyAgICAgICAgfQorICAgICAg
ICBBU1NFUlQoY2FsbEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBBU1NFUlQo
Y2FsbEV4cHJlc3Npb24uZnVuY3Rpb24oKSk7CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1
bmN0aW9uTWFwcGluZy5maW5kKGNhbGxFeHByZXNzaW9uLmZ1bmN0aW9uKCkpOworICAgICAgICBB
U1NFUlQoaXRlcmF0b3IgIT0gbV9mdW5jdGlvbk1hcHBpbmcuZW5kKCkpOworICAgICAgICBhdXRv
IHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKCpjYWxsRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAi
ID0gIiwgaXRlcmF0b3ItPnZhbHVlLCAnKCcpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBhcmd1bWVudE5hbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSkKKyAg
ICAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIsICIpOworICAgICAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZChhcmd1bWVudE5hbWVzW2ldKTsKKyAgICAgICAgfQorICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIpO1xuIik7CisgICAgICAgIG1fc3RhY2suYXBw
ZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkNvbW1hRXhw
cmVzc2lvbiYgY29tbWFFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgU3RyaW5n
IHJlc3VsdDsKKyAgICAgICAgZm9yIChhdXRvJiBleHByZXNzaW9uIDogY29tbWFFeHByZXNzaW9u
Lmxpc3QoKSkgeworICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGV4cHJlc3Npb24pOwor
ICAgICAgICAgICAgcmVzdWx0ID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgICAgICB9CisgICAg
ICAgIG1fc3RhY2suYXBwZW5kKHJlc3VsdCk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6
OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYgZGVyZWZlcmVuY2VFeHByZXNzaW9uKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5w
b2ludGVyKCkpOworICAgICAgICBhdXRvIHJpZ2h0ID0gbV9zdGFjay50YWtlTGFzdCgpOworICAg
ICAgICBBU1NFUlQoZGVyZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAgICAg
ICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAg
ICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqZGVyZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2
YXJpYWJsZU5hbWUsICIgPSAqIiwgcmlnaHQsICI7XG4iKSk7CisgICAgICAgIG1fc3RhY2suYXBw
ZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkxvZ2ljYWxF
eHByZXNzaW9uJiBsb2dpY2FsRXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChsb2dpY2FsRXhwcmVzc2lvbi5sZWZ0KCkpOworICAgICAgICBhdXRv
IGxlZnQgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChs
b2dpY2FsRXhwcmVzc2lvbi5yaWdodCgpKTsKKyAgICAgICAgYXV0byByaWdodCA9IG1fc3RhY2su
dGFrZUxhc3QoKTsKKyAgICAgICAgQVNTRVJUKGxvZ2ljYWxFeHByZXNzaW9uLnJlc29sdmVkVHlw
ZSgpKTsKKyAgICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5h
bWUoKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbG9naWNhbEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkp
LCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIsIGxlZnQsICcgJykpOworICAgICAgICBzd2l0Y2gg
KGxvZ2ljYWxFeHByZXNzaW9uLnR5cGUoKSkgeworICAgICAgICBjYXNlIEFTVDo6TG9naWNhbEV4
cHJlc3Npb246OlR5cGU6OkFuZDoKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
IiYmIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IEFTU0VSVChsb2dpY2FsRXhwcmVzc2lvbi50eXBlKCkgPT0gQVNUOjpMb2dpY2FsRXhwcmVzc2lv
bjo6VHlwZTo6T3IpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifHwiKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZygnICcsIHJpZ2h0LCAiO1xuIikpOworICAgICAgICBtX3N0YWNrLmFw
cGVuZCh2YXJpYWJsZU5hbWUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpMb2dpY2Fs
Tm90RXhwcmVzc2lvbiYgbG9naWNhbE5vdEV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQobG9naWNhbE5vdEV4cHJlc3Npb24ub3BlcmFuZCgpKTsK
KyAgICAgICAgYXV0byBvcGVyYW5kID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgICAgICBBU1NF
UlQobG9naWNhbE5vdEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBhdXRvIHZh
cmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KCpsb2dpY2FsTm90RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1l
LCAiID0gISIsIG9wZXJhbmQsICI7XG4iKSk7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlh
YmxlTmFtZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5j
ZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAg
eworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lv
bi5sVmFsdWUoKSk7CisgICAgICAgIGF1dG8gbFZhbHVlID0gbV9zdGFjay50YWtlTGFzdCgpOwor
ICAgICAgICBBU1NFUlQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUo
KSk7CisgICAgICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1l
KCk7CisgICAgICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5h
bWVGb3JUeXBlKCptYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsK
KyAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KCptYWtlQXJyYXlSZWZlcmVuY2VFeHBy
ZXNzaW9uLnJlc29sdmVkVHlwZSgpKSkKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0geyAi
LCBsVmFsdWUsICIsIDEgfTtcbiIpKTsKKyAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpBcnJheVR5
cGU+KCptYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSkgeworICAg
ICAgICAgICAgYXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KCptYWtl
QXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFy
aWFibGVOYW1lLCAiID0geyAmKCIsIGxWYWx1ZSwgIlswXSksICIsIGFycmF5VHlwZS5udW1FbGVt
ZW50cygpLCAiIH07XG4iKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9zdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5h
bWUsICIgPSB7ICYiLCBsVmFsdWUsICIsIDEgfTtcbiIpKTsKKyAgICAgICAgbV9zdGFjay5hcHBl
bmQodmFyaWFibGVOYW1lKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6TWFrZVBvaW50
ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpKTsK
KyAgICAgICAgYXV0byBsVmFsdWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIEFTU0VS
VChtYWtlUG9pbnRlckV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBhdXRvIHZh
cmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KCptYWtlUG9pbnRlckV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFt
ZSwgIiA9ICYiLCBsVmFsdWUsICI7XG4iKSk7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlh
YmxlTmFtZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24mKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgbG93
ZXJlZCBhbHJlYWR5LgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6VGVybmFyeUV4cHJlc3Npb24mIHRlcm5hcnlFeHByZXNzaW9uKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHRlcm5hcnlFeHByZXNz
aW9uLnByZWRpY2F0ZSgpKTsKKyAgICAgICAgYXV0byBjaGVjayA9IG1fc3RhY2sudGFrZUxhc3Qo
KTsKKworICAgICAgICBBU1NFUlQodGVybmFyeUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOwor
ICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwor
ICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCp0ZXJuYXJ5RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywg
dmFyaWFibGVOYW1lLCAiO1xuIikpOworCisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZygiaWYgKCIsIGNoZWNrLCAiKSB7XG4iKSk7CisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5ib2R5RXhwcmVzc2lvbigpKTsKKyAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKHZhcmlhYmxlTmFtZSwgIiA9ICIsIG1fc3Rh
Y2sudGFrZUxhc3QoKSwgIjtcbiIpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgi
fSBlbHNlIHtcbiIpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodGVybmFyeUV4cHJlc3Np
b24uZWxzZUV4cHJlc3Npb24oKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZyh2YXJpYWJsZU5hbWUsICIgPSAiLCBtX3N0YWNrLnRha2VMYXN0KCksICI7XG4iKSk7
CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgICAgICBtX3N0YWNr
LmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJp
YWJsZVJlZmVyZW5jZSYgdmFyaWFibGVSZWZlcmVuY2UpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBBU1NFUlQodmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKSk7CisgICAgICAgIGF1dG8gaXRl
cmF0b3IgPSBtX3ZhcmlhYmxlTWFwcGluZy5maW5kKHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxl
KCkpOworICAgICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV92YXJpYWJsZU1hcHBpbmcuZW5kKCkp
OworICAgICAgICBtX3N0YWNrLmFwcGVuZChpdGVyYXRvci0+dmFsdWUpOworICAgIH0KKworICAg
IFN0cmluZyBjb25zdGFudEV4cHJlc3Npb25TdHJpbmcoQVNUOjpDb25zdGFudEV4cHJlc3Npb24m
IGNvbnN0YW50RXhwcmVzc2lvbikKKyAgICB7CisgICAgICAgIFN0cmluZyByZXN1bHQ7CisgICAg
ICAgIGNvbnN0YW50RXhwcmVzc2lvbi52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6Oklu
dGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgcmVzdWx0ID0gbWFr
ZVN0cmluZygiIiwgaW50ZWdlckxpdGVyYWwudmFsdWUoKSk7CisgICAgICAgIH0sIFsmXShBU1Q6
OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IG1ha2VTdHJpbmcoIiIsIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFs
dWUoKSk7CisgICAgICAgIH0sIFsmXShBU1Q6OkZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKSB7
CisgICAgICAgICAgICByZXN1bHQgPSBtYWtlU3RyaW5nKCIiLCBmbG9hdExpdGVyYWwudmFsdWUo
KSk7CisgICAgICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJikgeworICAgICAgICAgICAgcmVz
dWx0ID0gIm51bGxwdHIiX3N0cjsKKyAgICAgICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwm
IGJvb2xlYW5MaXRlcmFsKSB7CisgICAgICAgICAgICByZXN1bHQgPSBib29sZWFuTGl0ZXJhbC52
YWx1ZSgpID8gInRydWUiX3N0ciA6ICJmYWxzZSJfc3RyOworICAgICAgICB9LCBbJl0oQVNUOjpF
bnVtZXJhdGlvbk1lbWJlckxpdGVyYWwmIGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCkgeworICAg
ICAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbkRlZmlu
aXRpb24oKSk7CisgICAgICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVu
dW1lcmF0aW9uRGVmaW5pdGlvbigpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1ha2VTdHJpbmco
bV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCplbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwu
ZW51bWVyYXRpb25EZWZpbml0aW9uKCkpLCAnLicsIG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
RW51bWVyYXRpb25NZW1iZXIoKmVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbk1l
bWJlcigpKSk7CisgICAgICAgIH0pKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
KyAgICBTdHJpbmcgZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBtYWtlU3RyaW5nKCJ2YXJpYWJsZSIsIG1fdmFyaWFibGVDb3VudCsrKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgSW50cmluc2ljcyYgbV9pbnRyaW5zaWNzOworICAgIFR5cGVOYW1lciYg
bV90eXBlTmFtZXI7CisgICAgSGFzaE1hcDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qLCBTdHJp
bmc+JiBtX2Z1bmN0aW9uTWFwcGluZzsKKyAgICBIYXNoTWFwPEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbiosIFN0cmluZz4gbV92YXJpYWJsZU1hcHBpbmc7CisgICAgU3RyaW5nQnVpbGRlciBtX3N0
cmluZ0J1aWxkZXI7CisgICAgVmVjdG9yPFN0cmluZz4gbV9zdGFjazsKKyAgICBPcHRpb25hbDxF
bnRyeVBvaW50SXRlbXM+IG1fZW50cnlQb2ludEl0ZW1zOworICAgIFZlY3RvcjxTdHJpbmc+IG1f
bWV0YWxPdXRwdXROYW1lczsKKyAgICBTdHJpbmcgbV9vdXRwdXRTdHJ1Y3ROYW1lOworICAgIEFT
VDo6VW5uYW1lZFR5cGUqIG1fZW50cnlQb2ludFJldHVyblR5cGU7CisgICAgdW5zaWduZWQgbV92
YXJpYWJsZUNvdW50IHsgMCB9OworfTsKKworU3RyaW5nIG1ldGFsRnVuY3Rpb25zKFByb2dyYW0m
IHByb2dyYW0sIFR5cGVOYW1lciYgdHlwZU5hbWVyKQoreworICAgIFN0cmluZ0J1aWxkZXIgc3Ry
aW5nQnVpbGRlcjsKKworICAgIHVuc2lnbmVkIG51bUZ1bmN0aW9ucyA9IDA7CisgICAgSGFzaE1h
cDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qLCBTdHJpbmc+IGZ1bmN0aW9uTWFwcGluZzsKKyAg
ICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb25zKCkpIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBmdW5jdGlv
bk1hcHBpbmcuYWRkKCZuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLCBtYWtlU3RyaW5nKCJmdW5j
dGlvbiIsIG51bUZ1bmN0aW9ucysrKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0
LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorICAgIGZvciAoYXV0byYgZnVuY3Rpb25E
ZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpIHsKKyAgICAgICAgYXV0
byBhZGRSZXN1bHQgPSBmdW5jdGlvbk1hcHBpbmcuYWRkKCZmdW5jdGlvbkRlZmluaXRpb24sIG1h
a2VTdHJpbmcoImZ1bmN0aW9uIiwgbnVtRnVuY3Rpb25zKyspKTsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB7Cisg
ICAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXIgZnVuY3Rpb25EZWNsYXJhdGlvbldyaXRl
cih0eXBlTmFtZXIsIGZ1bmN0aW9uTWFwcGluZyk7CisgICAgICAgIGZvciAoYXV0byYgbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMo
KSkKKyAgICAgICAgICAgIGZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXIudmlzaXQobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbik7CisgICAgICAgIGZvciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9u
IDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpIHsKKyAgICAgICAgICAgIGlmICghZnVu
Y3Rpb25EZWZpbml0aW9uLT5lbnRyeVBvaW50VHlwZSgpKQorICAgICAgICAgICAgICAgIGZ1bmN0
aW9uRGVjbGFyYXRpb25Xcml0ZXIudmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICAgICAg
fQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChmdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVy
LnRvU3RyaW5nKCkpOworICAgIH0KKworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwor
CisgICAgeworICAgICAgICBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIgZnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyKHByb2dyYW0uaW50cmluc2ljcygpLCB0eXBlTmFtZXIsIGZ1bmN0aW9uTWFwcGlu
Zyk7CisgICAgICAgIGZvciAoYXV0byYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dy
YW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSkKKyAgICAgICAgICAgIGZ1bmN0aW9uRGVm
aW5pdGlvbldyaXRlci52aXNpdChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKTsKKyAgICAgICAg
Zm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlv
bnMoKSkKKyAgICAgICAgICAgIGZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlci52aXNpdChmdW5jdGlv
bkRlZmluaXRpb24pOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChmdW5jdGlvbkRlZmlu
aXRpb25Xcml0ZXIudG9TdHJpbmcoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHN0cmluZ0J1aWxk
ZXIudG9TdHJpbmcoKTsKK30KKworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3Jp
dGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1
bmN0aW9uV3JpdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGQwZGZjOGNjN2ZkMGMzNTA3NDFjMGQzNmY0YmVk
MTgzOTViZTAyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuaApAQCAtMCwwICsxLDQ5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFByb2dyYW07CisKK25h
bWVzcGFjZSBNZXRhbCB7CisKK2NsYXNzIFR5cGVOYW1lcjsKKworLy8gbWV0YWxfc3RkbGliLCBt
ZXRhbF9hdG9taWMsIG1ldGFsX21hdGgsIG1ldGFsX3JlbGF0aW9uYWwsIG1ldGFsX2NvbXB1dGUK
K1N0cmluZyBtZXRhbEZ1bmN0aW9ucyhQcm9ncmFtJiwgVHlwZU5hbWVyJik7CisKK30KKworfQor
Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiMTEwNDNi
MmQzYTg5NWQ1NzYwZGE2MzA3MWY0NWQ4Y2UzNjk3MmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAK
QEAgLTAsMCArMSw3MDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV0hMU0xUeXBlTmFtZXIuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRl
ICJXSExTTEFkZHJlc3NTcGFjZS5oIgorI2luY2x1ZGUgIldITFNMQXJyYXlSZWZlcmVuY2VUeXBl
LmgiCisjaW5jbHVkZSAiV0hMU0xBcnJheVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0
aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25NZW1iZXIuaCIKKyNp
bmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMUG9p
bnRlclR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCIKKyNpbmNs
dWRlICJXSExTTFR5cGVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNl
LmgiCisjaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2lu
Y2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9V
bmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVt
YmVycy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25h
bWVzcGFjZSBNZXRhbCB7CisKK2NsYXNzIEJhc2VUeXBlTmFtZU5vZGUgeworcHVibGljOgorICAg
IEJhc2VUeXBlTmFtZU5vZGUoQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50LCBTdHJpbmcmJiBtYW5n
bGVkTmFtZSkKKyAgICAgICAgOiBtX3BhcmVudChwYXJlbnQpCisgICAgICAgICwgbV9tYW5nbGVk
TmFtZShtYW5nbGVkTmFtZSkKKyAgICB7CisgICAgfQorICAgIHZpcnR1YWwgfkJhc2VUeXBlTmFt
ZU5vZGUoKSA9IGRlZmF1bHQ7CisgICAgdmlydHVhbCBib29sIGlzQXJyYXlUeXBlTmFtZU5vZGUo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0FycmF5UmVmZXJl
bmNlVHlwZU5hbWVOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaXNQb2ludGVyVHlwZU5hbWVOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgaXNSZWZlcmVuY2VUeXBlTmFtZU5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIFZlY3RvcjxVbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4+JiBjaGlsZHJlbigp
IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KKyAgICB2b2lkIGFwcGVuZChVbmlxdWVSZWY8QmFzZVR5
cGVOYW1lTm9kZT4mJiBjaGlsZCkKKyAgICB7CisgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKFdU
Rk1vdmUoY2hpbGQpKTsKKyAgICB9CisgICAgQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50KCkgeyBy
ZXR1cm4gbV9wYXJlbnQ7IH0KKyAgICBjb25zdCBTdHJpbmcmIG1hbmdsZWROYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9tYW5nbGVkTmFtZTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxVbmlxdWVS
ZWY8QmFzZVR5cGVOYW1lTm9kZT4+IG1fY2hpbGRyZW47CisgICAgQmFzZVR5cGVOYW1lTm9kZSog
bV9wYXJlbnQ7CisgICAgU3RyaW5nIG1fbWFuZ2xlZE5hbWU7Cit9OworCitjbGFzcyBBcnJheVR5
cGVOYW1lTm9kZSA6IHB1YmxpYyBCYXNlVHlwZU5hbWVOb2RlIHsKK3B1YmxpYzoKKyAgICBBcnJh
eVR5cGVOYW1lTm9kZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQsIFN0cmluZyYmIG1hbmdsZWRO
YW1lLCB1bnNpZ25lZCBudW1FbGVtZW50cykKKyAgICAgICAgOiBCYXNlVHlwZU5hbWVOb2RlKHBh
cmVudCwgV1RGTW92ZShtYW5nbGVkTmFtZSkpCisgICAgICAgICwgbV9udW1FbGVtZW50cyhudW1F
bGVtZW50cykKKyAgICB7CisgICAgfQorICAgIHZpcnR1YWwgfkFycmF5VHlwZU5hbWVOb2RlKCkg
PSBkZWZhdWx0OworICAgIGJvb2wgaXNBcnJheVR5cGVOYW1lTm9kZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KKyAgICB1bnNpZ25lZCBudW1FbGVtZW50cygpIGNvbnN0IHsgcmV0
dXJuIG1fbnVtRWxlbWVudHM7IH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX251bUVsZW1l
bnRzOworfTsKKworY2xhc3MgQXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUgOiBwdWJsaWMgQmFz
ZVR5cGVOYW1lTm9kZSB7CitwdWJsaWM6CisgICAgQXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUo
QmFzZVR5cGVOYW1lTm9kZSogcGFyZW50LCBTdHJpbmcmJiBtYW5nbGVkTmFtZSwgQVNUOjpBZGRy
ZXNzU3BhY2UgYWRkcmVzc1NwYWNlKQorICAgICAgICA6IEJhc2VUeXBlTmFtZU5vZGUocGFyZW50
LCBXVEZNb3ZlKG1hbmdsZWROYW1lKSkKKyAgICAgICAgLCBtX2FkZHJlc3NTcGFjZShhZGRyZXNz
U3BhY2UpCisgICAgeworICAgIH0KKyAgICB2aXJ0dWFsIH5BcnJheVJlZmVyZW5jZVR5cGVOYW1l
Tm9kZSgpID0gZGVmYXVsdDsKKyAgICBib29sIGlzQXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgQVNUOjpBZGRyZXNzU3BhY2Ug
YWRkcmVzc1NwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9hZGRyZXNzU3BhY2U7IH0KKworcHJpdmF0
ZToKKyAgICBBU1Q6OkFkZHJlc3NTcGFjZSBtX2FkZHJlc3NTcGFjZTsKK307CisKK2NsYXNzIFBv
aW50ZXJUeXBlTmFtZU5vZGUgOiBwdWJsaWMgQmFzZVR5cGVOYW1lTm9kZSB7CitwdWJsaWM6Cisg
ICAgUG9pbnRlclR5cGVOYW1lTm9kZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQsIFN0cmluZyYm
IG1hbmdsZWROYW1lLCBBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UpCisgICAgICAgIDog
QmFzZVR5cGVOYW1lTm9kZShwYXJlbnQsIFdURk1vdmUobWFuZ2xlZE5hbWUpKQorICAgICAgICAs
IG1fYWRkcmVzc1NwYWNlKGFkZHJlc3NTcGFjZSkKKyAgICB7CisgICAgfQorICAgIHZpcnR1YWwg
flBvaW50ZXJUeXBlTmFtZU5vZGUoKSA9IGRlZmF1bHQ7CisgICAgYm9vbCBpc1BvaW50ZXJUeXBl
TmFtZU5vZGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgQVNUOjpBZGRy
ZXNzU3BhY2UgYWRkcmVzc1NwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9hZGRyZXNzU3BhY2U7IH0K
KworcHJpdmF0ZToKKyAgICBBU1Q6OkFkZHJlc3NTcGFjZSBtX2FkZHJlc3NTcGFjZTsKK307CisK
K2NsYXNzIFJlZmVyZW5jZVR5cGVOYW1lTm9kZSA6IHB1YmxpYyBCYXNlVHlwZU5hbWVOb2RlIHsK
K3B1YmxpYzoKKyAgICBSZWZlcmVuY2VUeXBlTmFtZU5vZGUoQmFzZVR5cGVOYW1lTm9kZSogcGFy
ZW50LCBTdHJpbmcmJiBtYW5nbGVkTmFtZSwgQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkKKyAg
ICAgICAgOiBCYXNlVHlwZU5hbWVOb2RlKHBhcmVudCwgV1RGTW92ZShtYW5nbGVkTmFtZSkpCisg
ICAgICAgICwgbV9uYW1lZFR5cGUobmFtZWRUeXBlKQorICAgIHsKKyAgICB9CisgICAgdmlydHVh
bCB+UmVmZXJlbmNlVHlwZU5hbWVOb2RlKCkgPSBkZWZhdWx0OworICAgIGJvb2wgaXNSZWZlcmVu
Y2VUeXBlTmFtZU5vZGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgQVNU
OjpOYW1lZFR5cGUmIG5hbWVkVHlwZSgpIHsgcmV0dXJuIG1fbmFtZWRUeXBlOyB9CisKK3ByaXZh
dGU6CisgICAgQVNUOjpOYW1lZFR5cGUmIG1fbmFtZWRUeXBlOworfTsKKworfQorCit9CisKK30K
KworI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0JBU0VfVFlQRV9OQU1FRF9O
T0RFKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0JFR0lOKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3Rh
dGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldITFNMOjpNZXRhbDo6QmFzZVR5cGVOYW1l
Tm9kZSYgdHlwZSkgeyByZXR1cm4gdHlwZS5wcmVkaWNhdGU7IH0gXAorU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19FTkQoKQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0JBU0VfVFlQRV9O
QU1FRF9OT0RFKEFycmF5VHlwZU5hbWVOb2RlLCBpc0FycmF5VHlwZU5hbWVOb2RlKCkpCisKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfQkFTRV9UWVBFX05BTUVEX05PREUoQXJyYXlSZWZl
cmVuY2VUeXBlTmFtZU5vZGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUoKSkKKworU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9CQVNFX1RZUEVfTkFNRURfTk9ERShQb2ludGVyVHlw
ZU5hbWVOb2RlLCBpc1BvaW50ZXJUeXBlTmFtZU5vZGUoKSkKKworU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19XSExTTF9CQVNFX1RZUEVfTkFNRURfTk9ERShSZWZlcmVuY2VUeXBlTmFtZU5vZGUsIGlz
UmVmZXJlbmNlVHlwZU5hbWVOb2RlKCkpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNw
YWNlIFdITFNMIHsKKworbmFtZXNwYWNlIE1ldGFsIHsKKworVHlwZU5hbWVyOjpUeXBlTmFtZXIo
UHJvZ3JhbSYgcHJvZ3JhbSkKKyAgICA6IG1fcHJvZ3JhbShwcm9ncmFtKQoreworfQorCitUeXBl
TmFtZXI6On5UeXBlTmFtZXIoKSA9IGRlZmF1bHQ7CisKK3ZvaWQgVHlwZU5hbWVyOjp2aXNpdChB
U1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkKK3sKKyAgICBpbnNlcnQodW5uYW1lZFR5cGUs
IG1fdHJpZSk7Cit9CisKK3ZvaWQgVHlwZU5hbWVyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVm
aW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0g
bV9uYW1lZFR5cGVNYXBwaW5nLmFkZCgmZW51bWVyYXRpb25EZWZpbml0aW9uLCBnZW5lcmF0ZU5l
eHRUeXBlTmFtZSgpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0Lmlz
TmV3RW50cnkpOworICAgIGZvciAoYXV0byYgZW51bWVyYXRpb25NZW1iZXIgOiBlbnVtZXJhdGlv
bkRlZmluaXRpb24uZW51bWVyYXRpb25NZW1iZXJzKCkpIHsKKyAgICAgICAgYXV0byBhZGRSZXN1
bHQgPSBtX2VudW1lcmF0aW9uTWVtYmVyTWFwcGluZy5hZGQoJnN0YXRpY19jYXN0PEFTVDo6RW51
bWVyYXRpb25NZW1iZXImPihlbnVtZXJhdGlvbk1lbWJlciksIGdlbmVyYXRlTmV4dEVudW1lcmF0
aW9uTWVtYmVyTmFtZSgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJl
c3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisgICAgVmlzaXRvcjo6dmlzaXQoZW51bWVyYXRpb25E
ZWZpbml0aW9uKTsKK30KKwordm9pZCBUeXBlTmFtZXI6OnZpc2l0KEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uJikKK3sKKyAgICAvLyBOYXRpdmUgdHlwZSBkZWNsYXJhdGlvbnMgYWxyZWFkeSBo
YXZlIG5hbWVzLCBhbmQgYXJlIGFscmVhZHkgZGVjbGFyZWQgaW4gTWV0YWwuCit9CisKK3N0YXRp
YyBWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+Pjo6aXRlcmF0b3IgZmluZEluVmVj
dG9yKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBWZWN0b3I8VW5pcXVlUmVmPEJhc2VU
eXBlTmFtZU5vZGU+PiYgdHlwZXMpCit7CisgICAgcmV0dXJuIHN0ZDo6ZmluZF9pZih0eXBlcy5i
ZWdpbigpLCB0eXBlcy5lbmQoKSwgWyZdKEJhc2VUeXBlTmFtZU5vZGUmIGJhc2VUeXBlTmFtZU5v
ZGUpIC0+IGJvb2wgeworICAgICAgICBpZiAoaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVk
VHlwZSkgJiYgaXM8UmVmZXJlbmNlVHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKSkgewor
ICAgICAgICAgICAgYXV0byogcmVzb2x2ZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJl
bmNlPih1bm5hbWVkVHlwZSkucmVzb2x2ZWRUeXBlKCk7CisgICAgICAgICAgICBBU1NFUlQocmVz
b2x2ZWRUeXBlKTsKKyAgICAgICAgICAgIHJldHVybiByZXNvbHZlZFR5cGUgPT0gJmRvd25jYXN0
PFJlZmVyZW5jZVR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9kZSkubmFtZWRUeXBlKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSAm
JiBpczxQb2ludGVyVHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKSkKKyAgICAgICAgICAg
IHJldHVybiBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkuYWRkcmVzc1Nw
YWNlKCkgPT0gZG93bmNhc3Q8UG9pbnRlclR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9kZSku
YWRkcmVzc1NwYWNlKCk7CisgICAgICAgIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4o
dW5uYW1lZFR5cGUpICYmIGlzPEFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlPihiYXNlVHlwZU5h
bWVOb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNl
VHlwZT4odW5uYW1lZFR5cGUpLmFkZHJlc3NTcGFjZSgpID09IGRvd25jYXN0PEFycmF5UmVmZXJl
bmNlVHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKS5hZGRyZXNzU3BhY2UoKTsKKyAgICAg
ICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkgJiYgaXM8QXJyYXlUeXBlTmFt
ZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFT
VDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkubnVtRWxlbWVudHMoKSA9PSBkb3duY2FzdDxBcnJh
eVR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9kZSkubnVtRWxlbWVudHMoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0pOworfQorCitzdGF0aWMgQmFzZVR5cGVOYW1lTm9kZSYgZmlu
ZChBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgVmVjdG9yPFVuaXF1ZVJlZjxCYXNlVHlw
ZU5hbWVOb2RlPj4mIHR5cGVzKQoreworICAgIGF1dG8mIHZlY3RvclRvU2VhcmNoID0gKFsmXSgp
IC0+IFZlY3RvcjxVbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4+JiB7CisgICAgICAgIGlmIChp
czxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiB0
eXBlczsKKyAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkKKyAg
ICAgICAgICAgIHJldHVybiBmaW5kKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRU
eXBlKS5lbGVtZW50VHlwZSgpLCB0eXBlcykuY2hpbGRyZW4oKTsKKyAgICAgICAgaWYgKGlzPEFT
VDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICByZXR1cm4g
ZmluZChkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpLmVsZW1l
bnRUeXBlKCksIHR5cGVzKS5jaGlsZHJlbigpOworICAgICAgICBBU1NFUlQoaXM8QVNUOjpBcnJh
eVR5cGU+KHVubmFtZWRUeXBlKSk7CisgICAgICAgIHJldHVybiBmaW5kKGRvd25jYXN0PEFTVDo6
QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkudHlwZSgpLCB0eXBlcykuY2hpbGRyZW4oKTsKKyAgICB9
KSgpOworICAgIGF1dG8gaXRlcmF0b3IgPSBmaW5kSW5WZWN0b3IodW5uYW1lZFR5cGUsIHZlY3Rv
clRvU2VhcmNoKTsKKyAgICBBU1NFUlQoaXRlcmF0b3IgIT0gdHlwZXMuZW5kKCkpOworICAgIHJl
dHVybiAqaXRlcmF0b3I7Cit9CisKK3ZvaWQgVHlwZU5hbWVyOjp2aXNpdChBU1Q6OlN0cnVjdHVy
ZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pCit7CisgICAgeworICAgICAgICBhdXRv
IGFkZFJlc3VsdCA9IG1fbmFtZWRUeXBlTWFwcGluZy5hZGQoJnN0cnVjdHVyZURlZmluaXRpb24s
IGdlbmVyYXRlTmV4dFR5cGVOYW1lKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3Vs
dCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKyAgICBWaXNpdG9yOjp2aXNpdChzdHJ1
Y3R1cmVEZWZpbml0aW9uKTsKKyAgICB7CisgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPEJhc2VUeXBlTmFtZU5vZGU+PiBuZWlnaGJvcnM7CisgICAgICAgIGZvciAoYXV0byYg
c3RydWN0dXJlRWxlbWVudCA6IHN0cnVjdHVyZURlZmluaXRpb24uc3RydWN0dXJlRWxlbWVudHMo
KSkgeworICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3N0cnVjdHVyZUVsZW1lbnRNYXBw
aW5nLmFkZCgmc3RydWN0dXJlRWxlbWVudCwgZ2VuZXJhdGVOZXh0U3RydWN0dXJlRWxlbWVudE5h
bWUoKSk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0Lmlz
TmV3RW50cnkpOworICAgICAgICAgICAgbmVpZ2hib3JzLmFwcGVuZChmaW5kKHN0cnVjdHVyZUVs
ZW1lbnQudHlwZSgpLCBtX3RyaWUpKTsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGFkZFJlc3Vs
dCA9IG1fZGVwZW5kZW5jeUdyYXBoLmFkZCgmc3RydWN0dXJlRGVmaW5pdGlvbiwgV1RGTW92ZShu
ZWlnaGJvcnMpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5p
c05ld0VudHJ5KTsKKyAgICB9Cit9CisKK3ZvaWQgVHlwZU5hbWVyOjp2aXNpdChBU1Q6OlR5cGVE
ZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbikKK3sKKyAgICB7CisgICAgICAgIGF1dG8gYWRkUmVz
dWx0ID0gbV9uYW1lZFR5cGVNYXBwaW5nLmFkZCgmdHlwZURlZmluaXRpb24sIGdlbmVyYXRlTmV4
dFR5cGVOYW1lKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0
LmlzTmV3RW50cnkpOworICAgIH0KKyAgICBWaXNpdG9yOjp2aXNpdCh0eXBlRGVmaW5pdGlvbik7
CisgICAgeworICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxCYXNlVHlwZU5h
bWVOb2RlPj4gbmVpZ2hib3JzID0geyBmaW5kKHR5cGVEZWZpbml0aW9uLnR5cGUoKSwgbV90cmll
KSB9OworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZGVwZW5kZW5jeUdyYXBoLmFkZCgmdHlw
ZURlZmluaXRpb24sIFdURk1vdmUobmVpZ2hib3JzKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQo
YWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorfQorCitTdHJpbmcgVHlw
ZU5hbWVyOjptYW5nbGVkTmFtZUZvclR5cGUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5h
bWUoKSA9PSAidm9pZCIpCisgICAgICAgIHJldHVybiAidm9pZCJfc3RyOworICAgIGlmIChuYXRp
dmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJib29sIikKKyAgICAgICAgcmV0dXJuICJib29s
Il9zdHI7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInVjaGFyIikK
KyAgICAgICAgcmV0dXJuICJ1aW50OF90Il9zdHI7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5uYW1lKCkgPT0gInVzaG9ydCIpCisgICAgICAgIHJldHVybiAidWludDE2X3QiX3N0cjsK
KyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAidWludCIpCisgICAgICAg
IHJldHVybiAidWludDMyX3QiX3N0cjsKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5h
bWUoKSA9PSAiY2hhciIpCisgICAgICAgIHJldHVybiAiaW50OF90Il9zdHI7CisgICAgaWYgKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInNob3J0IikKKyAgICAgICAgcmV0dXJuICJp
bnQxNl90Il9zdHI7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImlu
dCIpCisgICAgICAgIHJldHVybiAiaW50MzJfdCJfc3RyOworICAgIGlmIChuYXRpdmVUeXBlRGVj
bGFyYXRpb24ubmFtZSgpID09ICJoYWxmIikKKyAgICAgICAgcmV0dXJuICJoYWxmIl9zdHI7Cisg
ICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImZsb2F0IikKKyAgICAgICAg
cmV0dXJuICJmbG9hdCJfc3RyOworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgp
ID09ICJhdG9taWNfaW50IikKKyAgICAgICAgcmV0dXJuICJhdG9taWNfaW50Il9zdHI7CisgICAg
aWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImF0b21pY191aW50IikKKyAgICAg
ICAgcmV0dXJuICJhdG9taWNfdWludCJfc3RyOworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRp
b24ubmFtZSgpID09ICJzYW1wbGVyIikKKyAgICAgICAgcmV0dXJuICJzYW1wbGVyIl9zdHI7Cisg
ICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInZlY3RvciIpIHsKKyAgICAg
ICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09
IDIpOworICAgICAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxVbmlxdWVSZWY8QVNU
OjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsw
XSkpOworICAgICAgICBhdXRvJiB0eXBlUmVmZXJlbmNlID0gV1RGOjpnZXQ8VW5pcXVlUmVmPEFT
VDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClb
MF0pOworICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSB0eXBlUmVmZXJlbmNlLT51bmlmeU5vZGUo
KTsKKyAgICAgICAgQVNTRVJUKGlzPEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpKTsKKyAgICAg
ICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7
CisgICAgICAgIEFTU0VSVChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBl
KSk7CisgICAgICAgIGF1dG8mIHBhcmFtZXRlclR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5
cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKTsKKyAgICAgICAgYXV0byBwcmVmaXggPSAoWyZdKCkg
LT4gU3RyaW5nIHsKKyAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJUeXBlLm5hbWUoKSA9PSAiYm9v
bCIpCisgICAgICAgICAgICAgICAgcmV0dXJuICJib29sIjsKKyAgICAgICAgICAgIGlmIChwYXJh
bWV0ZXJUeXBlLm5hbWUoKSA9PSAidWNoYXIiKQorICAgICAgICAgICAgICAgIHJldHVybiAidWNo
YXIiOworICAgICAgICAgICAgaWYgKHBhcmFtZXRlclR5cGUubmFtZSgpID09ICJ1c2hvcnQiKQor
ICAgICAgICAgICAgICAgIHJldHVybiAidXNob3J0IjsKKyAgICAgICAgICAgIGlmIChwYXJhbWV0
ZXJUeXBlLm5hbWUoKSA9PSAidWludCIpCisgICAgICAgICAgICAgICAgcmV0dXJuICJ1aW50IjsK
KyAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJUeXBlLm5hbWUoKSA9PSAiY2hhciIpCisgICAgICAg
ICAgICAgICAgcmV0dXJuICJjaGFyIjsKKyAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJUeXBlLm5h
bWUoKSA9PSAic2hvcnQiKQorICAgICAgICAgICAgICAgIHJldHVybiAic2hvcnQiOworICAgICAg
ICAgICAgaWYgKHBhcmFtZXRlclR5cGUubmFtZSgpID09ICJpbnQiKQorICAgICAgICAgICAgICAg
IHJldHVybiAiaW50IjsKKyAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJUeXBlLm5hbWUoKSA9PSAi
aGFsZiIpCisgICAgICAgICAgICAgICAgcmV0dXJuICJoYWxmIjsKKyAgICAgICAgICAgIEFTU0VS
VChwYXJhbWV0ZXJUeXBlLm5hbWUoKSA9PSAiZmxvYXQiKTsKKyAgICAgICAgICAgIHJldHVybiAi
ZmxvYXQiOworICAgICAgICB9KSgpOworICAgICAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVB
cmd1bWVudHMoKVsxXSkpOworICAgICAgICBhdXRvJiBjb25zdGFudEV4cHJlc3Npb24gPSBXVEY6
OmdldDxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVB
cmd1bWVudHMoKVswXSk7CisgICAgICAgIGF1dG8mIGludGVnZXJMaXRlcmFsID0gY29uc3RhbnRF
eHByZXNzaW9uLmludGVnZXJMaXRlcmFsKCk7CisgICAgICAgIGF1dG8gc3VmZml4ID0gKFsmXSgp
IC0+IFN0cmluZyB7CisgICAgICAgICAgICBzd2l0Y2ggKGludGVnZXJMaXRlcmFsLnZhbHVlKCkp
IHsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gIjIiX3N0cjsK
KyAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICByZXR1cm4gIjMiX3N0cjsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUKGludGVnZXJMaXRlcmFs
LnZhbHVlKCkgPT0gNCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICI0Il9zdHI7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0pKCk7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKHByZWZpeCwg
c3VmZml4KTsKKyAgICB9CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0g
Im1hdHJpeCIpIHsKKyAgICAgICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJn
dW1lbnRzKCkuc2l6ZSgpID09IDMpOworICAgICAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9u
LnR5cGVBcmd1bWVudHMoKVswXSkpOworICAgICAgICBhdXRvJiB0eXBlUmVmZXJlbmNlID0gV1RG
OjpnZXQ8VW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi50eXBlQXJndW1lbnRzKClbMF0pOworICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSB0eXBlUmVm
ZXJlbmNlLT51bmlmeU5vZGUoKTsKKyAgICAgICAgQVNTRVJUKGlzPEFTVDo6TmFtZWRUeXBlPih1
bmlmeU5vZGUpKTsKKyAgICAgICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpOYW1l
ZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAgIEFTU0VSVChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNs
YXJhdGlvbj4obmFtZWRUeXBlKSk7CisgICAgICAgIGF1dG8mIHBhcmFtZXRlclR5cGUgPSBkb3du
Y2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKTsKKyAgICAgICAgYXV0
byBwcmVmaXggPSAoWyZdKCkgLT4gU3RyaW5nIHsKKyAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJU
eXBlLm5hbWUoKSA9PSAiaGFsZiIpCisgICAgICAgICAgICAgICAgcmV0dXJuICJoYWxmIjsKKyAg
ICAgICAgICAgIEFTU0VSVChwYXJhbWV0ZXJUeXBlLm5hbWUoKSA9PSAiZmxvYXQiKTsKKyAgICAg
ICAgICAgIHJldHVybiAiZmxvYXQiOworICAgICAgICB9KSgpOworICAgICAgICBBU1NFUlQoV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsxXSkpOworICAgICAgICBhdXRvJiBjb25zdGFudEV4
cHJlc3Npb24xID0gV1RGOjpnZXQ8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pOworICAgICAgICBhdXRvJiBpbnRlZ2VyTGl0
ZXJhbDEgPSBjb25zdGFudEV4cHJlc3Npb24xLmludGVnZXJMaXRlcmFsKCk7CisgICAgICAgIGF1
dG8gbWlkZGxlID0gKFsmXSgpIC0+IFN0cmluZyB7CisgICAgICAgICAgICBzd2l0Y2ggKGludGVn
ZXJMaXRlcmFsMS52YWx1ZSgpKSB7CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAg
ICAgcmV0dXJuICIyIl9zdHI7CisgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAg
cmV0dXJuICIzIl9zdHI7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFT
U0VSVChpbnRlZ2VyTGl0ZXJhbDEudmFsdWUoKSA9PSA0KTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gIjQiX3N0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSkoKTsKKyAgICAgICAgQVNTRVJU
KFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMl0pKTsKKyAgICAgICAgYXV0byYgY29uc3Rh
bnRFeHByZXNzaW9uMiA9IFdURjo6Z2V0PEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVU
eXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKTsKKyAgICAgICAgYXV0byYgaW50ZWdl
ckxpdGVyYWwyID0gY29uc3RhbnRFeHByZXNzaW9uMi5pbnRlZ2VyTGl0ZXJhbCgpOworICAgICAg
ICBhdXRvIHN1ZmZpeCA9IChbJl0oKSAtPiBTdHJpbmcgeworICAgICAgICAgICAgc3dpdGNoIChp
bnRlZ2VyTGl0ZXJhbDIudmFsdWUoKSkgeworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAg
ICAgICAgIHJldHVybiAiMiJfc3RyOworICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAg
ICAgIHJldHVybiAiMyJfc3RyOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoaW50ZWdlckxpdGVyYWwyLnZhbHVlKCkgPT0gNCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuICI0Il9zdHI7CisgICAgICAgICAgICB9CisgICAgICAgIH0pKCk7CisgICAgICAgIHJl
dHVybiBtYWtlU3RyaW5nKHByZWZpeCwgbWlkZGxlLCAneCcsIHN1ZmZpeCk7CisgICAgfQorICAg
IEFTU0VSVChuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAx
KTsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxVbmlxdWVSZWY8QVNUOjpUeXBl
UmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOwor
ICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBXVEY6OmdldDxVbmlxdWVSZWY8QVNUOjpUeXBlUmVm
ZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSk7CisgICAg
YXV0byBwcmVmaXggPSAoWyZdKCkgLT4gU3RyaW5nIHsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlRleHR1cmUxRCIpCisgICAgICAgICAgICByZXR1cm4gInRl
eHR1cmUxZCJfc3RyOworICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9
PSAiUldUZXh0dXJlMUQiKQorICAgICAgICAgICAgcmV0dXJuICJ0ZXh0dXJlMWQiX3N0cjsKKyAg
ICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlRleHR1cmUxREFycmF5
IikKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZTFkX2FycmF5Il9zdHI7CisgICAgICAgIGlm
IChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJSV1RleHR1cmUxREFycmF5IikKKyAg
ICAgICAgICAgIHJldHVybiAidGV4dHVyZTFkX2FycmF5Il9zdHI7CisgICAgICAgIGlmIChuYXRp
dmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJUZXh0dXJlMkQiKQorICAgICAgICAgICAgcmV0
dXJuICJ0ZXh0dXJlMmQiX3N0cjsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5u
YW1lKCkgPT0gIlJXVGV4dHVyZTJEIikKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZTJkIl9z
dHI7CisgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJUZXh0dXJl
MkRBcnJheSIpCisgICAgICAgICAgICByZXR1cm4gInRleHR1cmUyZF9hcnJheSJfc3RyOworICAg
ICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiUldUZXh0dXJlMkRBcnJh
eSIpCisgICAgICAgICAgICByZXR1cm4gInRleHR1cmUyZF9hcnJheSJfc3RyOworICAgICAgICBp
ZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiVGV4dHVyZTNEIikKKyAgICAgICAg
ICAgIHJldHVybiAidGV4dHVyZTNkIl9zdHI7CisgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFy
YXRpb24ubmFtZSgpID09ICJSV1RleHR1cmUzRCIpCisgICAgICAgICAgICByZXR1cm4gInRleHR1
cmUzZCJfc3RyOworICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
VGV4dHVyZUN1YmUiKQorICAgICAgICAgICAgcmV0dXJuICJ0ZXh0dXJlY3ViZSJfc3RyOworICAg
ICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiVGV4dHVyZURlcHRoMkQi
KQorICAgICAgICAgICAgcmV0dXJuICJkZXB0aDJkIl9zdHI7CisgICAgICAgIGlmIChuYXRpdmVU
eXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJSV1RleHR1cmVEZXB0aDJEIikKKyAgICAgICAgICAg
IHJldHVybiAiZGVwdGgyZCJfc3RyOworICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9u
Lm5hbWUoKSA9PSAiVGV4dHVyZURlcHRoMkRBcnJheSIpCisgICAgICAgICAgICByZXR1cm4gImRl
cHRoMmRfYXJyYXkiX3N0cjsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1l
KCkgPT0gIlJXVGV4dHVyZURlcHRoMkRBcnJheSIpCisgICAgICAgICAgICByZXR1cm4gImRlcHRo
MmRfYXJyYXkiX3N0cjsKKyAgICAgICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1l
KCkgPT0gIlRleHR1cmVEZXB0aEN1YmUiKTsKKyAgICAgICAgcmV0dXJuICJkZXB0aGN1YmUiX3N0
cjsKKyAgICB9KSgpOworICAgIGF1dG8gaW5uZXJUeXBlID0gKFsmXSgpIC0+IFN0cmluZyB7Cisg
ICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLT5uYW1lKCkgPT0gInVzaG9ydCIpCisgICAgICAgICAg
ICByZXR1cm4gInVzaG9ydCJfc3RyOworICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS0+bmFtZSgp
ID09ICJ1c2hvcnQyIikKKyAgICAgICAgICAgIHJldHVybiAidXNob3J0Il9zdHI7CisgICAgICAg
IGlmICh0eXBlUmVmZXJlbmNlLT5uYW1lKCkgPT0gInVzaG9ydDMiKQorICAgICAgICAgICAgcmV0
dXJuICJ1c2hvcnQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UtPm5hbWUoKSA9PSAi
dXNob3J0NCIpCisgICAgICAgICAgICByZXR1cm4gInVzaG9ydCJfc3RyOworICAgICAgICBpZiAo
dHlwZVJlZmVyZW5jZS0+bmFtZSgpID09ICJ1aW50IikKKyAgICAgICAgICAgIHJldHVybiAidWlu
dCJfc3RyOworICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS0+bmFtZSgpID09ICJ1aW50MiIpCisg
ICAgICAgICAgICByZXR1cm4gInVpbnQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2Ut
Pm5hbWUoKSA9PSAidWludDMiKQorICAgICAgICAgICAgcmV0dXJuICJ1aW50Il9zdHI7CisgICAg
ICAgIGlmICh0eXBlUmVmZXJlbmNlLT5uYW1lKCkgPT0gInVpbnQ0IikKKyAgICAgICAgICAgIHJl
dHVybiAidWludCJfc3RyOworICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS0+bmFtZSgpID09ICJz
aG9ydCIpCisgICAgICAgICAgICByZXR1cm4gInNob3J0Il9zdHI7CisgICAgICAgIGlmICh0eXBl
UmVmZXJlbmNlLT5uYW1lKCkgPT0gInNob3J0MiIpCisgICAgICAgICAgICByZXR1cm4gInNob3J0
Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLT5uYW1lKCkgPT0gInNob3J0MyIpCisg
ICAgICAgICAgICByZXR1cm4gInNob3J0Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNl
LT5uYW1lKCkgPT0gInNob3J0NCIpCisgICAgICAgICAgICByZXR1cm4gInNob3J0Il9zdHI7Cisg
ICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLT5uYW1lKCkgPT0gImludCIpCisgICAgICAgICAgICBy
ZXR1cm4gImludCJfc3RyOworICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS0+bmFtZSgpID09ICJp
bnQyIikKKyAgICAgICAgICAgIHJldHVybiAiaW50Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVm
ZXJlbmNlLT5uYW1lKCkgPT0gImludDMiKQorICAgICAgICAgICAgcmV0dXJuICJpbnQiX3N0cjsK
KyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UtPm5hbWUoKSA9PSAiaW50NCIpCisgICAgICAgICAg
ICByZXR1cm4gImludCJfc3RyOworICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS0+bmFtZSgpID09
ICJoYWxmIikKKyAgICAgICAgICAgIHJldHVybiAiaGFsZiJfc3RyOworICAgICAgICBpZiAodHlw
ZVJlZmVyZW5jZS0+bmFtZSgpID09ICJoYWxmMiIpCisgICAgICAgICAgICByZXR1cm4gImhhbGYi
X3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UtPm5hbWUoKSA9PSAiaGFsZjMiKQorICAg
ICAgICAgICAgcmV0dXJuICJoYWxmIl9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLT5u
YW1lKCkgPT0gImhhbGY0IikKKyAgICAgICAgICAgIHJldHVybiAiaGFsZiJfc3RyOworICAgICAg
ICBpZiAodHlwZVJlZmVyZW5jZS0+bmFtZSgpID09ICJmbG9hdCIpCisgICAgICAgICAgICByZXR1
cm4gImZsb2F0Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLT5uYW1lKCkgPT0gImZs
b2F0MiIpCisgICAgICAgICAgICByZXR1cm4gImZsb2F0Il9zdHI7CisgICAgICAgIGlmICh0eXBl
UmVmZXJlbmNlLT5uYW1lKCkgPT0gImZsb2F0MyIpCisgICAgICAgICAgICByZXR1cm4gImZsb2F0
Il9zdHI7CisgICAgICAgIEFTU0VSVCh0eXBlUmVmZXJlbmNlLT5uYW1lKCkgPT0gImZsb2F0NCIp
OworICAgICAgICByZXR1cm4gImZsb2F0Il9zdHI7CisgICAgfSkoKTsKKyAgICAvLyBGSVhNRTog
U3BlY2lmeSB0aGUgc2Vjb25kIHRlbXBsYXRlIGFyZ3VtZW50IHRvIE1ldGFsIHRleHR1cmUgdHlw
ZXMuCisgICAgcmV0dXJuIG1ha2VTdHJpbmcocHJlZml4LCAnPCcsIGlubmVyVHlwZSwgJz4nKTsK
K30KKworVW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+IFR5cGVOYW1lcjo6Y3JlYXRlTmFtZU5v
ZGUoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVu
dCkKK3sKKyAgICBpZiAoaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkpIHsKKyAg
ICAgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IGRvd25jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZT4o
dW5uYW1lZFR5cGUpOworICAgICAgICBBU1NFUlQodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUo
KSk7CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPFJlZmVyZW5jZVR5cGVOYW1lTm9kZT4o
cGFyZW50LCBnZW5lcmF0ZU5leHRUeXBlTmFtZSgpLCAqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5
cGUoKSk7CisgICAgfQorICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkp
IHsKKyAgICAgICAgYXV0byYgcG9pbnRlclR5cGUgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBl
Pih1bm5hbWVkVHlwZSk7CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPFBvaW50ZXJUeXBl
TmFtZU5vZGU+KHBhcmVudCwgZ2VuZXJhdGVOZXh0VHlwZU5hbWUoKSwgcG9pbnRlclR5cGUuYWRk
cmVzc1NwYWNlKCkpOworICAgIH0KKyAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+
KHVubmFtZWRUeXBlKSkgeworICAgICAgICBhdXRvJiBhcnJheVJlZmVyZW5jZVR5cGUgPSBkb3du
Y2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpOworICAgICAgICByZXR1
cm4gbWFrZVVuaXF1ZVJlZjxBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZT4ocGFyZW50LCBnZW5l
cmF0ZU5leHRUeXBlTmFtZSgpLCBhcnJheVJlZmVyZW5jZVR5cGUuYWRkcmVzc1NwYWNlKCkpOwor
ICAgIH0KKyAgICBBU1NFUlQoaXM8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSk7CisgICAg
YXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKTsK
KyAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxBcnJheVR5cGVOYW1lTm9kZT4ocGFyZW50LCBnZW5l
cmF0ZU5leHRUeXBlTmFtZSgpLCBhcnJheVR5cGUubnVtRWxlbWVudHMoKSk7Cit9CisKK3NpemVf
dCBUeXBlTmFtZXI6Omluc2VydChBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgVmVjdG9y
PFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPj4mIHR5cGVzKQoreworICAgIFZlY3RvcjxVbmlx
dWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4+KiB2ZWN0b3JUb0luc2VydEludG8geyBudWxscHRyIH07
CisgICAgQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50IHsgbnVsbHB0ciB9OworICAgIGlmIChpczxB
U1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRUeXBlKSkgeworICAgICAgICB2ZWN0b3JUb0luc2Vy
dEludG8gPSAmdHlwZXM7CisgICAgICAgIHBhcmVudCA9IG51bGxwdHI7CisgICAgfSBlbHNlIGlm
IChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpIHsKKyAgICAgICAgYXV0byYgaXRl
bSA9IHR5cGVzW2luc2VydChkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSku
ZWxlbWVudFR5cGUoKSwgdHlwZXMpXTsKKyAgICAgICAgdmVjdG9yVG9JbnNlcnRJbnRvID0gJml0
ZW0tPmNoaWxkcmVuKCk7CisgICAgICAgIHBhcmVudCA9ICZpdGVtOworICAgIH0gZWxzZSBpZiAo
aXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkgeworICAgICAgICBhdXRv
JiBpdGVtID0gdHlwZXNbaW5zZXJ0KGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1
bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKSwgdHlwZXMpXTsKKyAgICAgICAgdmVjdG9yVG9JbnNl
cnRJbnRvID0gJml0ZW0tPmNoaWxkcmVuKCk7CisgICAgICAgIHBhcmVudCA9ICZpdGVtOworICAg
IH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUp
KTsKKyAgICAgICAgYXV0byYgaXRlbSA9IHR5cGVzW2luc2VydChkb3duY2FzdDxBU1Q6OkFycmF5
VHlwZT4odW5uYW1lZFR5cGUpLnR5cGUoKSwgdHlwZXMpXTsKKyAgICAgICAgdmVjdG9yVG9JbnNl
cnRJbnRvID0gJml0ZW0tPmNoaWxkcmVuKCk7CisgICAgICAgIHBhcmVudCA9ICZpdGVtOworICAg
IH0KKyAgICBBU1NFUlQodmVjdG9yVG9JbnNlcnRJbnRvKTsKKworICAgIGF1dG8gaXRlcmF0b3Ig
PSBmaW5kSW5WZWN0b3IodW5uYW1lZFR5cGUsICp2ZWN0b3JUb0luc2VydEludG8pOworICAgIGlm
IChpdGVyYXRvciA9PSB2ZWN0b3JUb0luc2VydEludG8tPmVuZCgpKSB7CisgICAgICAgIGF1dG8g
cmVzdWx0ID0gY3JlYXRlTmFtZU5vZGUodW5uYW1lZFR5cGUsIHBhcmVudCk7CisgICAgICAgIHsK
KyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV91bm5hbWVkVHlwZU1hcHBpbmcuYWRkKCZ1
bm5hbWVkVHlwZSwgJnJlc3VsdCk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3Vs
dCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICB9CisgICAgICAgIHZlY3RvclRvSW5z
ZXJ0SW50by0+YXBwZW5kKFdURk1vdmUocmVzdWx0KSk7CisgICAgICAgIHJldHVybiB2ZWN0b3JU
b0luc2VydEludG8tPnNpemUoKSAtIDE7CisgICAgfQorICAgIGF1dG8gYWRkUmVzdWx0ID0gbV91
bm5hbWVkVHlwZU1hcHBpbmcuYWRkKCZ1bm5hbWVkVHlwZSwgJippdGVyYXRvcik7CisgICAgQVNT
RVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICByZXR1cm4g
aXRlcmF0b3IgLSB2ZWN0b3JUb0luc2VydEludG8tPmJlZ2luKCk7Cit9CisKK2NsYXNzIE1ldGFs
VHlwZURlY2xhcmF0aW9uV3JpdGVyIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgorICAgIE1l
dGFsVHlwZURlY2xhcmF0aW9uV3JpdGVyKHN0ZDo6ZnVuY3Rpb248U3RyaW5nKEFTVDo6TmFtZWRU
eXBlJik+JiYgbWFuZ2xlZE5hbWVGb3JOYW1lZFR5cGUsIHN0ZDo6ZnVuY3Rpb248U3RyaW5nKEFT
VDo6VW5uYW1lZFR5cGUmKT4mJiBtYW5nbGVkTmFtZUZvclVubmFtZWRUeXBlLCBzdGQ6OmZ1bmN0
aW9uPFN0cmluZyhBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJik+JiYgbWFuZ2xlZE5hbWVGb3JFbnVt
ZXJhdGlvbk1lbWJlcikKKyAgICAgICAgOiBtX21hbmdsZWROYW1lRm9yTmFtZWRUeXBlKFdURk1v
dmUobWFuZ2xlZE5hbWVGb3JOYW1lZFR5cGUpKQorICAgICAgICAsIG1fbWFuZ2xlZE5hbWVGb3JV
bm5hbWVkVHlwZShXVEZNb3ZlKG1hbmdsZWROYW1lRm9yVW5uYW1lZFR5cGUpKQorICAgICAgICAs
IG1fbWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJlcihXVEZNb3ZlKG1hbmdsZWROYW1lRm9y
RW51bWVyYXRpb25NZW1iZXIpKQorICAgIHsKKyAgICB9CisKKyAgICBTdHJpbmcgdG9TdHJpbmco
KSB7IHJldHVybiBtX3N0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsgfQorCitwcml2YXRlOgorICAg
IHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5p
dGlvbikKKyAgICB7CisgICAgICAgIGF1dG8mIGJhc2VUeXBlID0gZW51bWVyYXRpb25EZWZpbml0
aW9uLnR5cGUoKS51bmlmeU5vZGUoKTsKKyAgICAgICAgQVNTRVJUKGlzPEFTVDo6TmFtZWRUeXBl
PihiYXNlVHlwZSkpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
ImVudW0gY2xhc3MgIiwgbV9tYW5nbGVkTmFtZUZvck5hbWVkVHlwZShlbnVtZXJhdGlvbkRlZmlu
aXRpb24pLCAiIDogIiwgbV9tYW5nbGVkTmFtZUZvck5hbWVkVHlwZShkb3duY2FzdDxBU1Q6Ok5h
bWVkVHlwZT4oYmFzZVR5cGUpKSwgIiB7XG4iKSk7CisgICAgICAgIGZvciAoYXV0byYgZW51bWVy
YXRpb25NZW1iZXIgOiBlbnVtZXJhdGlvbkRlZmluaXRpb24uZW51bWVyYXRpb25NZW1iZXJzKCkp
CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICAiLCBt
X21hbmdsZWROYW1lRm9yRW51bWVyYXRpb25NZW1iZXIoZW51bWVyYXRpb25NZW1iZXIpLCAiLFxu
IikpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9O1xuIik7CisgICAgfQorCisg
ICAgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRp
b24pCisgICAgeworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInN0
cnVjdCAiLCBtX21hbmdsZWROYW1lRm9yTmFtZWRUeXBlKHN0cnVjdHVyZURlZmluaXRpb24pLCAi
O1xuIikpOworICAgIH0KKworICAgIHN0ZDo6ZnVuY3Rpb248U3RyaW5nKEFTVDo6TmFtZWRUeXBl
Jik+IG1fbWFuZ2xlZE5hbWVGb3JOYW1lZFR5cGU7CisgICAgc3RkOjpmdW5jdGlvbjxTdHJpbmco
QVNUOjpVbm5hbWVkVHlwZSYpPiBtX21hbmdsZWROYW1lRm9yVW5uYW1lZFR5cGU7CisgICAgc3Rk
OjpmdW5jdGlvbjxTdHJpbmcoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYpPiYmIG1fbWFuZ2xlZE5h
bWVGb3JFbnVtZXJhdGlvbk1lbWJlcjsKKyAgICBTdHJpbmdCdWlsZGVyIG1fc3RyaW5nQnVpbGRl
cjsKK307CisKK1N0cmluZyBUeXBlTmFtZXI6Om1ldGFsVHlwZURlY2xhcmF0aW9ucygpCit7Cisg
ICAgTWV0YWxUeXBlRGVjbGFyYXRpb25Xcml0ZXIgbWV0YWxUeXBlRGVjbGFyYXRpb25Xcml0ZXIo
WyZdKEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUpIC0+IFN0cmluZyB7CisgICAgICAgIHJldHVy
biBtYW5nbGVkTmFtZUZvclR5cGUobmFtZWRUeXBlKTsKKyAgICB9LCBbJl0oQVNUOjpVbm5hbWVk
VHlwZSYgdW5uYW1lZFR5cGUpIC0+IFN0cmluZyB7CisgICAgICAgIHJldHVybiBtYW5nbGVkTmFt
ZUZvclR5cGUodW5uYW1lZFR5cGUpOworICAgIH0sIFsmXShBU1Q6OkVudW1lcmF0aW9uTWVtYmVy
JiBlbnVtZXJhdGlvbk1lbWJlcikgLT4gU3RyaW5nIHsKKyAgICAgICAgcmV0dXJuIG1hbmdsZWRO
YW1lRm9yRW51bWVyYXRpb25NZW1iZXIoZW51bWVyYXRpb25NZW1iZXIpOworICAgIH0pOworICAg
IG1ldGFsVHlwZURlY2xhcmF0aW9uV3JpdGVyLlZpc2l0b3I6OnZpc2l0KG1fcHJvZ3JhbSk7Cisg
ICAgcmV0dXJuIG1ldGFsVHlwZURlY2xhcmF0aW9uV3JpdGVyLnRvU3RyaW5nKCk7Cit9CisKK3N0
YXRpYyBTdHJpbmcgdG9TdHJpbmcoQVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKQorewor
ICAgIHN3aXRjaCAoYWRkcmVzc1NwYWNlKSB7CisgICAgY2FzZSBBU1Q6OkFkZHJlc3NTcGFjZTo6
Q29uc3RhbnQ6CisgICAgICAgIHJldHVybiAiY29uc3RhbnQiX3N0cjsKKyAgICBjYXNlIEFTVDo6
QWRkcmVzc1NwYWNlOjpEZXZpY2U6CisgICAgICAgIHJldHVybiAiZGV2aWNlIl9zdHI7CisgICAg
Y2FzZSBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkZ3JvdXA6CisgICAgICAgIHJldHVybiAidGhy
ZWFkZ3JvdXAiX3N0cjsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlQoYWRkcmVzc1NwYWNl
ID09IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQpOworICAgICAgICByZXR1cm4gInRocmVhZCJf
c3RyOworICAgIH0KK30KKwordm9pZCBUeXBlTmFtZXI6OmVtaXRVbm5hbWVkVHlwZURlZmluaXRp
b24oQmFzZVR5cGVOYW1lTm9kZSYgYmFzZVR5cGVOYW1lTm9kZSwgSGFzaFNldDxBU1Q6Ok5hbWVk
VHlwZSo+JiBlbWl0dGVkTmFtZWRUeXBlcywgSGFzaFNldDxCYXNlVHlwZU5hbWVOb2RlKj4mIGVt
aXR0ZWRVbm5hbWVkVHlwZXMsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCit7CisgICAg
aWYgKGVtaXR0ZWRVbm5hbWVkVHlwZXMuY29udGFpbnMoJmJhc2VUeXBlTmFtZU5vZGUpKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKGJhc2VUeXBlTmFtZU5vZGUucGFyZW50KCkpCisgICAgICAg
IGVtaXRVbm5hbWVkVHlwZURlZmluaXRpb24oKmJhc2VUeXBlTmFtZU5vZGUucGFyZW50KCksIGVt
aXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVzLCBzdHJpbmdCdWlsZGVyKTsKKyAg
ICBpZiAoaXM8UmVmZXJlbmNlVHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKSkgeworICAg
ICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxSZWZlcmVuY2VUeXBlTmFtZU5vZGU+KGJh
c2VUeXBlTmFtZU5vZGUpLm5hbWVkVHlwZSgpOworICAgICAgICBlbWl0TmFtZWRUeXBlRGVmaW5p
dGlvbihuYW1lZFR5cGUsIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVzLCBz
dHJpbmdCdWlsZGVyKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygi
dHlwZWRlZiAiLCBtYW5nbGVkTmFtZUZvclR5cGUobmFtZWRUeXBlKSwgJyAnLCBiYXNlVHlwZU5h
bWVOb2RlLm1hbmdsZWROYW1lKCksICI7XG4iKSk7CisgICAgfSBlbHNlIGlmIChpczxQb2ludGVy
VHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKSkgeworICAgICAgICBhdXRvJiBwb2ludGVy
VHlwZSA9IGRvd25jYXN0PFBvaW50ZXJUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpOwor
ICAgICAgICBBU1NFUlQoYmFzZVR5cGVOYW1lTm9kZS5wYXJlbnQoKSk7CisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInR5cGVkZWYgIiwgdG9TdHJpbmcocG9pbnRlclR5
cGUuYWRkcmVzc1NwYWNlKCkpLCAiICIsIHBvaW50ZXJUeXBlLnBhcmVudCgpLT5tYW5nbGVkTmFt
ZSgpLCAiKiAiLCBwb2ludGVyVHlwZS5tYW5nbGVkTmFtZSgpLCAiO1xuIikpOworICAgIH0gZWxz
ZSBpZiAoaXM8QXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpKSB7
CisgICAgICAgIGF1dG8mIGFycmF5UmVmZXJlbmNlVHlwZSA9IGRvd25jYXN0PEFycmF5UmVmZXJl
bmNlVHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKTsKKyAgICAgICAgQVNTRVJUKGJhc2VU
eXBlTmFtZU5vZGUucGFyZW50KCkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKCJzdHJ1Y3QgIiwgYXJyYXlSZWZlcmVuY2VUeXBlLm1hbmdsZWROYW1lKCksICJ7IFxu
IikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgIiwgdG9T
dHJpbmcoYXJyYXlSZWZlcmVuY2VUeXBlLmFkZHJlc3NTcGFjZSgpKSwgIiAiLCBhcnJheVJlZmVy
ZW5jZVR5cGUucGFyZW50KCktPm1hbmdsZWROYW1lKCksICIqIHBvaW50ZXI7XG4iKSk7CisgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgdW5zaWduZWQgbGVuZ3RoO1xuIik7CisgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9O1xuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
QVNTRVJUKGlzPEFycmF5VHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKSk7CisgICAgICAg
IGF1dG8mIGFycmF5VHlwZSA9IGRvd25jYXN0PEFycmF5VHlwZU5hbWVOb2RlPihiYXNlVHlwZU5h
bWVOb2RlKTsKKyAgICAgICAgQVNTRVJUKGJhc2VUeXBlTmFtZU5vZGUucGFyZW50KCkpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ0eXBlZGVmIEFycmF5PCIsIGFy
cmF5VHlwZS5wYXJlbnQoKS0+bWFuZ2xlZE5hbWUoKSwgIiwgIiwgYXJyYXlUeXBlLm51bUVsZW1l
bnRzKCksICI+ICIsIGFycmF5VHlwZS5tYW5nbGVkTmFtZSgpLCAiO1xuIikpOworICAgIH0KKyAg
ICBlbWl0dGVkVW5uYW1lZFR5cGVzLmFkZCgmYmFzZVR5cGVOYW1lTm9kZSk7Cit9CisKK3ZvaWQg
VHlwZU5hbWVyOjplbWl0TmFtZWRUeXBlRGVmaW5pdGlvbihBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRU
eXBlLCBIYXNoU2V0PEFTVDo6TmFtZWRUeXBlKj4mIGVtaXR0ZWROYW1lZFR5cGVzLCBIYXNoU2V0
PEJhc2VUeXBlTmFtZU5vZGUqPiYgZW1pdHRlZFVubmFtZWRUeXBlcywgU3RyaW5nQnVpbGRlciYg
c3RyaW5nQnVpbGRlcikKK3sKKyAgICBpZiAoZW1pdHRlZE5hbWVkVHlwZXMuY29udGFpbnMoJm5h
bWVkVHlwZSkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9kZXBlbmRl
bmN5R3JhcGguZmluZCgmbmFtZWRUeXBlKTsKKyAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9kZXBl
bmRlbmN5R3JhcGguZW5kKCkpOworICAgIGZvciAoYXV0byYgYmFzZVR5cGVOYW1lTm9kZSA6IGl0
ZXJhdG9yLT52YWx1ZSkKKyAgICAgICAgZW1pdFVubmFtZWRUeXBlRGVmaW5pdGlvbihiYXNlVHlw
ZU5hbWVOb2RlLCBlbWl0dGVkTmFtZWRUeXBlcywgZW1pdHRlZFVubmFtZWRUeXBlcywgc3RyaW5n
QnVpbGRlcik7CisgICAgaWYgKGlzPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPihuYW1lZFR5
cGUpKSB7CisgICAgICAgIC8vIFdlIGFscmVhZHkgZW1pdHRlZCB0aGlzIGluIHRoZSB0eXBlIGRl
Y2xhcmF0aW9uIHNlY3Rpb24uIFRoZXJlJ3Mgbm90aGluZyB0byBkby4KKyAgICB9IGVsc2UgaWYg
KGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKSB7CisgICAgICAgIC8v
IE5hdGl2ZSB0eXBlcyBhbHJlYWR5IGhhdmUgZGVmaW5pdGlvbnMuIFRoZXJlJ3Mgbm90aGluZyB0
byBkby4KKyAgICB9IGVsc2UgaWYgKGlzPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4obmFtZWRU
eXBlKSkgeworICAgICAgICBhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uID0gZG93bmNhc3Q8QVNU
OjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpOworICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKCJzdHJ1Y3QgIiwgbWFuZ2xlZE5hbWVGb3JUeXBlKHN0cnVjdHVy
ZURlZmluaXRpb24pLCAiIHtcbiIpKTsKKyAgICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVFbGVt
ZW50IDogc3RydWN0dXJlRGVmaW5pdGlvbi5zdHJ1Y3R1cmVFbGVtZW50cygpKQorICAgICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgICIsIG1hbmdsZWROYW1lRm9y
VHlwZShzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKSksICcgJywgbWFuZ2xlZE5hbWVGb3JTdHJ1Y3R1
cmVFbGVtZW50KHN0cnVjdHVyZUVsZW1lbnQpLCAiO1xuIikpOworICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgifTtcbiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChpczxBU1Q6
OlR5cGVEZWZpbml0aW9uPihuYW1lZFR5cGUpKTsKKyAgICAgICAgYXV0byYgdHlwZURlZmluaXRp
b24gPSBkb3duY2FzdDxBU1Q6OlR5cGVEZWZpbml0aW9uPihuYW1lZFR5cGUpOworICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ0eXBlZGVmICIsIG1hbmdsZWROYW1lRm9y
VHlwZSh0eXBlRGVmaW5pdGlvbi50eXBlKCkpLCAnICcsIG1hbmdsZWROYW1lRm9yVHlwZSh0eXBl
RGVmaW5pdGlvbiksICI7XG4iKSk7CisgICAgfQorICAgIGVtaXR0ZWROYW1lZFR5cGVzLmFkZCgm
bmFtZWRUeXBlKTsKK30KKworU3RyaW5nIFR5cGVOYW1lcjo6bWV0YWxUeXBlRGVmaW5pdGlvbnMo
KQoreworICAgIEhhc2hTZXQ8QVNUOjpOYW1lZFR5cGUqPiBlbWl0dGVkTmFtZWRUeXBlczsKKyAg
ICBIYXNoU2V0PEJhc2VUeXBlTmFtZU5vZGUqPiBlbWl0dGVkVW5uYW1lZFR5cGVzOworICAgIFN0
cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBmb3IgKGF1dG8mIGtleVZhbHVlUGFpciA6
IG1fZGVwZW5kZW5jeUdyYXBoKQorICAgICAgICBlbWl0TmFtZWRUeXBlRGVmaW5pdGlvbigqa2V5
VmFsdWVQYWlyLmtleSwgZW1pdHRlZE5hbWVkVHlwZXMsIGVtaXR0ZWRVbm5hbWVkVHlwZXMsIHN0
cmluZ0J1aWxkZXIpOworICAgIGZvciAoYXV0byYgYmFzZVR5cGVOYW1lTm9kZSA6IG1fdHJpZSkK
KyAgICAgICAgZW1pdFVubmFtZWRUeXBlRGVmaW5pdGlvbihiYXNlVHlwZU5hbWVOb2RlLCBlbWl0
dGVkTmFtZWRUeXBlcywgZW1pdHRlZFVubmFtZWRUeXBlcywgc3RyaW5nQnVpbGRlcik7CisgICAg
cmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30KKworU3RyaW5nIFR5cGVOYW1lcjo6
bWFuZ2xlZE5hbWVGb3JUeXBlKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKQoreworICAg
IHJldHVybiBmaW5kKHVubmFtZWRUeXBlLCBtX3RyaWUpLm1hbmdsZWROYW1lKCk7Cit9CisKK1N0
cmluZyBUeXBlTmFtZXI6Om1hbmdsZWROYW1lRm9yVHlwZShBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRU
eXBlKQoreworICAgIGlmIChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBl
KSkKKyAgICAgICAgcmV0dXJuIG1hbmdsZWROYW1lRm9yVHlwZShkb3duY2FzdDxBU1Q6Ok5hdGl2
ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKSk7CisgICAgYXV0byBpdGVyYXRvciA9IG1fbmFt
ZWRUeXBlTWFwcGluZy5maW5kKCZuYW1lZFR5cGUpOworICAgIEFTU0VSVChpdGVyYXRvciAhPSBt
X25hbWVkVHlwZU1hcHBpbmcuZW5kKCkpOworICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7Cit9
CisKKworU3RyaW5nIFR5cGVOYW1lcjo6bWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJlcihB
U1Q6OkVudW1lcmF0aW9uTWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJlcikKK3sKKyAgICBhdXRvIGl0
ZXJhdG9yID0gbV9lbnVtZXJhdGlvbk1lbWJlck1hcHBpbmcuZmluZCgmZW51bWVyYXRpb25NZW1i
ZXIpOworICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX2VudW1lcmF0aW9uTWVtYmVyTWFwcGluZy5l
bmQoKSk7CisgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKK30KKworU3RyaW5nIFR5cGVOYW1l
cjo6bWFuZ2xlZE5hbWVGb3JTdHJ1Y3R1cmVFbGVtZW50KEFTVDo6U3RydWN0dXJlRWxlbWVudCYg
c3RydWN0dXJlRWxlbWVudCkKK3sKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9zdHJ1Y3R1cmVFbGVt
ZW50TWFwcGluZy5maW5kKCZzdHJ1Y3R1cmVFbGVtZW50KTsKKyAgICBBU1NFUlQoaXRlcmF0b3Ig
IT0gbV9zdHJ1Y3R1cmVFbGVtZW50TWFwcGluZy5lbmQoKSk7CisgICAgcmV0dXJuIGl0ZXJhdG9y
LT52YWx1ZTsKK30KKworU3RyaW5nIFR5cGVOYW1lcjo6bWV0YWxUeXBlcygpCit7CisgICAgVmlz
aXRvcjo6dmlzaXQobV9wcm9ncmFtKTsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7
CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWV0YWxUeXBlRGVjbGFyYXRpb25zKCkpOworICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1l
dGFsVHlwZURlZmluaXRpb25zKCkpOworICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5n
KCk7Cit9CisKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzcwYTBlNzFhOTMzOGQ2NzgwYTdlNzRiNzQzNTZmZDQyNzM5NWEwOQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
VHlwZU5hbWVyLmgKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRl
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFt
ZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIEVudW1lcmF0aW9uRGVm
aW5pdGlvbjsKK2NsYXNzIEVudW1lcmF0aW9uTWVtYmVyOworY2xhc3MgTmFtZWRUeXBlOworY2xh
c3MgTmF0aXZlVHlwZURlY2xhcmF0aW9uOworY2xhc3MgU3RydWN0dXJlRGVmaW5pdGlvbjsKK2Ns
YXNzIFR5cGVEZWZpbml0aW9uOworY2xhc3MgVW5uYW1lZFR5cGU7CisKK30KKworY2xhc3MgUHJv
Z3JhbTsKKworbmFtZXNwYWNlIE1ldGFsIHsKKworY2xhc3MgQmFzZVR5cGVOYW1lTm9kZTsKKwor
Y2xhc3MgVHlwZU5hbWVyIDogcHJpdmF0ZSBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICBUeXBlTmFt
ZXIoUHJvZ3JhbSYpOworICAgIHZpcnR1YWwgflR5cGVOYW1lcigpOworCisgICAgU3RyaW5nIG1l
dGFsVHlwZXMoKTsKKworICAgIC8vIE11c3QgYmUgY2FsbGVkIGFmdGVyIGNhbGxpbmcgbWV0YWxU
eXBlcygpLgorICAgIFN0cmluZyBtYW5nbGVkTmFtZUZvclR5cGUoQVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24mKTsKKyAgICBTdHJpbmcgbWFuZ2xlZE5hbWVGb3JUeXBlKEFTVDo6VW5uYW1lZFR5
cGUmKTsKKyAgICBTdHJpbmcgbWFuZ2xlZE5hbWVGb3JUeXBlKEFTVDo6TmFtZWRUeXBlJik7Cisg
ICAgU3RyaW5nIG1hbmdsZWROYW1lRm9yRW51bWVyYXRpb25NZW1iZXIoQVNUOjpFbnVtZXJhdGlv
bk1lbWJlciYpOworICAgIFN0cmluZyBtYW5nbGVkTmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoQVNU
OjpTdHJ1Y3R1cmVFbGVtZW50Jik7CisKKyAgICBTdHJpbmcgZ2VuZXJhdGVOZXh0VHlwZU5hbWUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoInR5cGUiLCBtX3R5cGVDb3VudCsr
KTsKKyAgICB9CisKKyAgICBTdHJpbmcgZ2VuZXJhdGVOZXh0U3RydWN0dXJlRWxlbWVudE5hbWUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoInN0cnVjdHVyZUVsZW1lbnQiLCBt
X3N0cnVjdHVyZUVsZW1lbnRDb3VudCsrKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCB2
aXNpdChBU1Q6OlVubmFtZWRUeXBlJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkVu
dW1lcmF0aW9uRGVmaW5pdGlvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3RydWN0
dXJlRGVmaW5pdGlvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlRGVmaW5p
dGlvbiYpIG92ZXJyaWRlOworCisgICAgU3RyaW5nIGdlbmVyYXRlTmV4dEVudW1lcmF0aW9uTWVt
YmVyTmFtZSgpCisgICAgeworICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiZW51bWVyYXRpb25N
ZW1iZXIiLCBtX2VudW1lcmF0aW9uTWVtYmVyQ291bnQrKyk7CisgICAgfQorCisgICAgdm9pZCBl
bWl0TmFtZWRUeXBlRGVmaW5pdGlvbihBU1Q6Ok5hbWVkVHlwZSYsIEhhc2hTZXQ8QVNUOjpOYW1l
ZFR5cGUqPiYgZW1pdHRlZE5hbWVkVHlwZXMsIEhhc2hTZXQ8QmFzZVR5cGVOYW1lTm9kZSo+JiBl
bWl0dGVkVW5uYW1lZFR5cGVzLCBTdHJpbmdCdWlsZGVyJik7CisgICAgdm9pZCBlbWl0VW5uYW1l
ZFR5cGVEZWZpbml0aW9uKEJhc2VUeXBlTmFtZU5vZGUmLCBIYXNoU2V0PEFTVDo6TmFtZWRUeXBl
Kj4mIGVtaXR0ZWROYW1lZFR5cGVzLCBIYXNoU2V0PEJhc2VUeXBlTmFtZU5vZGUqPiYgZW1pdHRl
ZFVubmFtZWRUeXBlcywgU3RyaW5nQnVpbGRlciYpOworICAgIFN0cmluZyBtZXRhbFR5cGVEZWNs
YXJhdGlvbnMoKTsKKyAgICBTdHJpbmcgbWV0YWxUeXBlRGVmaW5pdGlvbnMoKTsKKworICAgIFVu
aXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPiBjcmVhdGVOYW1lTm9kZShBU1Q6OlVubmFtZWRUeXBl
JiwgQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50KTsKKyAgICBzaXplX3QgaW5zZXJ0KEFTVDo6VW5u
YW1lZFR5cGUmLCBWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+PiYpOworCisgICAg
UHJvZ3JhbSYgbV9wcm9ncmFtOworICAgIFZlY3RvcjxVbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9k
ZT4+IG1fdHJpZTsKKyAgICBIYXNoTWFwPEFTVDo6VW5uYW1lZFR5cGUqLCBCYXNlVHlwZU5hbWVO
b2RlKj4gbV91bm5hbWVkVHlwZU1hcHBpbmc7CisgICAgSGFzaE1hcDxBU1Q6Ok5hbWVkVHlwZSos
IFN0cmluZz4gbV9uYW1lZFR5cGVNYXBwaW5nOworICAgIEhhc2hNYXA8QVNUOjpOYW1lZFR5cGUq
LCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxCYXNlVHlwZU5hbWVOb2RlPj4+IG1fZGVw
ZW5kZW5jeUdyYXBoOworICAgIEhhc2hNYXA8QVNUOjpFbnVtZXJhdGlvbk1lbWJlciosIFN0cmlu
Zz4gbV9lbnVtZXJhdGlvbk1lbWJlck1hcHBpbmc7CisgICAgSGFzaE1hcDxBU1Q6OlN0cnVjdHVy
ZUVsZW1lbnQqLCBTdHJpbmc+IG1fc3RydWN0dXJlRWxlbWVudE1hcHBpbmc7CisgICAgdW5zaWdu
ZWQgbV90eXBlQ291bnQgeyAwIH07CisgICAgdW5zaWduZWQgbV9lbnVtZXJhdGlvbk1lbWJlckNv
dW50IHsgMCB9OworICAgIHVuc2lnbmVkIG1fc3RydWN0dXJlRWxlbWVudENvdW50IHsgMCB9Owor
fTsKKworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAppbmRleCA2MGIwZWZlZWNhYzI0NjNl
NTFhOGVjMTIzZGNjZjdhMjBhNDZmOWU2Li4yOTRkYzk4YmUzMDM3YTA3ODEzNjg1MGQ4NWUzMjY1
MGNkNDE0NmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTENoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMQ2hlY2tlci5jcHAKQEAgLTIyMSw4ICsyMjEsOCBAQCBzdGF0aWMgYm9vbCBjaGVj
a1NlbWFudGljcyhWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiBpbnB1dEl0ZW1zLCBWZWN0b3I8RW50
cnlQb2ludAogICAgICAgICBhdXRvIGNoZWNrU2VtYW50aWNUeXBlcyA9IFsmXShjb25zdCBWZWN0
b3I8RW50cnlQb2ludEl0ZW0+JiBpdGVtcykgLT4gYm9vbCB7CiAgICAgICAgICAgICBmb3IgKGF1
dG8mIGl0ZW0gOiBpdGVtcykgewogICAgICAgICAgICAgICAgIGF1dG8gYWNjZXB0YWJsZSA9IFdU
Rjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oY29uc3QgQVNUOjpCYXNlU2VtYW50aWMmIHNl
bWFudGljKSAtPiBib29sIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbWFudGljLmlz
QWNjZXB0YWJsZVR5cGUoaXRlbS51bm5hbWVkVHlwZSwgaW50cmluc2ljcyk7Ci0gICAgICAgICAg
ICAgICAgfSksIGl0ZW0uc2VtYW50aWMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2Vt
YW50aWMuaXNBY2NlcHRhYmxlVHlwZSgqaXRlbS51bm5hbWVkVHlwZSwgaW50cmluc2ljcyk7Cisg
ICAgICAgICAgICAgICAgfSksICppdGVtLnNlbWFudGljKTsKICAgICAgICAgICAgICAgICBpZiAo
IWFjY2VwdGFibGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgIH0KQEAgLTIzOSw3ICsyMzksNyBAQCBzdGF0aWMgYm9vbCBjaGVja1NlbWFudGljcyhWZWN0
b3I8RW50cnlQb2ludEl0ZW0+JiBpbnB1dEl0ZW1zLCBWZWN0b3I8RW50cnlQb2ludAogICAgICAg
ICAgICAgZm9yIChhdXRvJiBpdGVtIDogaXRlbXMpIHsKICAgICAgICAgICAgICAgICBhdXRvIGFj
Y2VwdGFibGUgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IEFTVDo6QmFz
ZVNlbWFudGljJiBzZW1hbnRpYykgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBzZW1hbnRpYy5pc0FjY2VwdGFibGVGb3JTaGFkZXJJdGVtRGlyZWN0aW9uKGRpcmVjdGlvbiwg
ZW50cnlQb2ludFR5cGUpOwotICAgICAgICAgICAgICAgIH0pLCBpdGVtLnNlbWFudGljKTsKKyAg
ICAgICAgICAgICAgICB9KSwgKml0ZW0uc2VtYW50aWMpOwogICAgICAgICAgICAgICAgIGlmICgh
YWNjZXB0YWJsZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgfQpAQCAtMjU2LDExICsyNTYsMTEgQEAgc3RhdGljIGJvb2wgY2hlY2tTZW1hbnRpY3MoVmVj
dG9yPEVudHJ5UG9pbnRJdGVtPiYgaW5wdXRJdGVtcywgVmVjdG9yPEVudHJ5UG9pbnQKICAgICAg
ICAgICAgIGZvciAoYXV0byYgaXRlbSA6IGl0ZW1zKSB7CiAgICAgICAgICAgICAgICAgUE9EQ2hl
Y2tlciBwb2RDaGVja2VyOwogICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBl
PihpdGVtLnVubmFtZWRUeXBlKSkKLSAgICAgICAgICAgICAgICAgICAgcG9kQ2hlY2tlci5jaGVj
a0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oaXRlbS51bm5hbWVkVHlw
ZSkuZWxlbWVudFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIHBvZENoZWNrZXIuY2hlY2tF
cnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCppdGVtLnVubmFtZWRUeXBl
KS5lbGVtZW50VHlwZSgpKTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkFycmF5
UmVmZXJlbmNlVHlwZT4oaXRlbS51bm5hbWVkVHlwZSkpCi0gICAgICAgICAgICAgICAgICAgIHBv
ZENoZWNrZXIuY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VU
eXBlPihpdGVtLnVubmFtZWRUeXBlKS5lbGVtZW50VHlwZSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgcG9kQ2hlY2tlci5jaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVy
ZW5jZVR5cGU+KCppdGVtLnVubmFtZWRUeXBlKS5lbGVtZW50VHlwZSgpKTsKICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChpczxBU1Q6OkFycmF5VHlwZT4oaXRlbS51bm5hbWVkVHlwZSkpCi0gICAg
ICAgICAgICAgICAgICAgIHBvZENoZWNrZXIuY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFT
VDo6QXJyYXlUeXBlPihpdGVtLnVubmFtZWRUeXBlKS50eXBlKCkpOworICAgICAgICAgICAgICAg
ICAgICBwb2RDaGVja2VyLmNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkFycmF5VHlw
ZT4oKml0ZW0udW5uYW1lZFR5cGUpLnR5cGUoKSk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBpZiAocG9kQ2hlY2tl
ci5lcnJvcigpKQpAQCAtNjEyLDE2ICs2MTIsMTIgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6
OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQogICAgIGF1dG8q
IGJhc2VUeXBlID0gKFsmXSgpIC0+IEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiB7CiAgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChlbnVtZXJhdGlvbkRlZmluaXRpb24udHlwZSgpKTsKICAg
ICAgICAgYXV0byYgYmFzZVR5cGUgPSBlbnVtZXJhdGlvbkRlZmluaXRpb24udHlwZSgpLnVuaWZ5
Tm9kZSgpOwotICAgICAgICBpZiAoIWlzPEFTVDo6VW5uYW1lZFR5cGU+KGJhc2VUeXBlKSkKKyAg
ICAgICAgaWYgKCFpczxBU1Q6Ok5hbWVkVHlwZT4oYmFzZVR5cGUpKQogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgICAgIGF1dG8mIHVubmFtZWRCYXNlID0gZG93bmNhc3Q8QVNUOjpV
bm5hbWVkVHlwZT4oYmFzZVR5cGUpOwotICAgICAgICBpZiAoIWlzPEFTVDo6VHlwZVJlZmVyZW5j
ZT4odW5uYW1lZEJhc2UpKQorICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6
Ok5hbWVkVHlwZT4oYmFzZVR5cGUpOworICAgICAgICBpZiAoIWlzPEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uPihuYW1lZFR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
ICAgIGF1dG8mIHR5cGVSZWZlcmVuY2VCYXNlID0gZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNl
Pih1bm5hbWVkQmFzZSk7Ci0gICAgICAgIEFTU0VSVCh0eXBlUmVmZXJlbmNlQmFzZS5yZXNvbHZl
ZFR5cGUoKSk7Ci0gICAgICAgIGlmICghaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCp0
eXBlUmVmZXJlbmNlQmFzZS5yZXNvbHZlZFR5cGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8QVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCp0eXBlUmVmZXJlbmNlQmFzZS5yZXNvbHZlZFR5cGUo
KSk7CisgICAgICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpOwogICAgICAgICBpZiAoIW5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5pc0ludCgpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgIHJldHVybiAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBv
aW50SXRlbXMuY3BwCmluZGV4IGExOGVhYzM4ZWEzYjY3NmFlNzg5YmU1OTVhM2RhYTgxM2M2ZjI5
YjYuLjQ1YTYyYTZkMjg4ZTNiZTdkMmZjMzM1MDg1NTE3ODdjMjBkMzE5N2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2lu
dEl0ZW1zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAKQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQb2ludEl0ZW0obV90eXBlUmVmZXJl
bmNlcy5sYXN0KCkuZ2V0KCksICptX2N1cnJlbnRTZW1hbnRpYykpOworICAgICAgICBtX2VudHJ5
UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQb2ludEl0ZW0obV90eXBlUmVmZXJlbmNlcy5sYXN0KCku
Z2V0KCksICptX2N1cnJlbnRTZW1hbnRpYywgbV9wYXRoKSk7CiAgICAgfQogCiAgICAgdm9pZCB2
aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQpA
QCAtODUsNyArODUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAotICAgICAgICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQb2ludEl0ZW0obV90eXBl
UmVmZXJlbmNlcy5sYXN0KCkuZ2V0KCksICptX2N1cnJlbnRTZW1hbnRpYykpOworICAgICAgICBt
X2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQb2ludEl0ZW0obV90eXBlUmVmZXJlbmNlcy5s
YXN0KCkuZ2V0KCksICptX2N1cnJlbnRTZW1hbnRpYywgbV9wYXRoKSk7CiAgICAgfQogCiAgICAg
dm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24p
CkBAIC05OCw3ICs5OCw5IEBAIHB1YmxpYzoKICAgICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVF
bGVtZW50IDogc3RydWN0dXJlRGVmaW5pdGlvbi5zdHJ1Y3R1cmVFbGVtZW50cygpKSB7CiAgICAg
ICAgICAgICBpZiAoc3RydWN0dXJlRWxlbWVudC5zZW1hbnRpYygpKQogICAgICAgICAgICAgICAg
IG1fY3VycmVudFNlbWFudGljID0gJipzdHJ1Y3R1cmVFbGVtZW50LnNlbWFudGljKCk7CisgICAg
ICAgICAgICBtX3BhdGguYXBwZW5kKHN0cnVjdHVyZUVsZW1lbnQubmFtZSgpKTsKICAgICAgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdHJ1Y3R1cmVFbGVtZW50KTsKKyAgICAgICAgICAgIG1f
cGF0aC50YWtlTGFzdCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMjIsNyArMTI0LDcgQEAg
cHVibGljOgogICAgICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQb2ludEl0ZW0o
cG9pbnRlclR5cGUsICptX2N1cnJlbnRTZW1hbnRpYykpOworICAgICAgICBtX2VudHJ5UG9pbnRJ
dGVtcy5hcHBlbmQoRW50cnlQb2ludEl0ZW0ocG9pbnRlclR5cGUsICptX2N1cnJlbnRTZW1hbnRp
YywgbV9wYXRoKSk7CiAgICAgfQogCiAgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNl
VHlwZSYgYXJyYXlSZWZlcmVuY2VUeXBlKQpAQCAtMTMxLDcgKzEzMyw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgbV9lbnRyeVBvaW50SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKGFycmF5UmVmZXJl
bmNlVHlwZSwgKm1fY3VycmVudFNlbWFudGljKSk7CisgICAgICAgIG1fZW50cnlQb2ludEl0ZW1z
LmFwcGVuZChFbnRyeVBvaW50SXRlbShhcnJheVJlZmVyZW5jZVR5cGUsICptX2N1cnJlbnRTZW1h
bnRpYywgbV9wYXRoKSk7CiAgICAgfQogCiAgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5VHlwZSYg
YXJyYXlUeXBlKQpAQCAtMTQwLDcgKzE0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHNldEVy
cm9yKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbV9lbnRyeVBv
aW50SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKGFycmF5VHlwZSwgKm1fY3VycmVudFNlbWFu
dGljKSk7CisgICAgICAgIG1fZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbShh
cnJheVR5cGUsICptX2N1cnJlbnRTZW1hbnRpYywgbV9wYXRoKSk7CiAgICAgfQogCiAgICAgdm9p
ZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCkBA
IC0xNDgsMTEgKzE1MCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCghbV9jdXJyZW50U2Vt
YW50aWMpOwogICAgICAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5zZW1hbnRpYygpKQogICAg
ICAgICAgICAgbV9jdXJyZW50U2VtYW50aWMgPSAmKnZhcmlhYmxlRGVjbGFyYXRpb24uc2VtYW50
aWMoKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKQotICAgICAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KCp2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAg
ICAgIEFTU0VSVCh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAgICAgIG1fcGF0aC5h
cHBlbmQodmFyaWFibGVEZWNsYXJhdGlvbi5uYW1lKCkpOworICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoKnZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAgbV9wYXRoLnRha2VM
YXN0KCk7CiAgICAgfQogCiBwcml2YXRlOgorICAgIFZlY3RvcjxTdHJpbmc+IG1fcGF0aDsKICAg
ICBjb25zdCBJbnRyaW5zaWNzJiBtX2ludHJpbnNpY3M7CiAgICAgQVNUOjpTZW1hbnRpYyogbV9j
dXJyZW50U2VtYW50aWMgeyBudWxscHRyIH07CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8QVNUOjpUeXBlUmVmZXJlbmNlPj4gbV90eXBlUmVmZXJlbmNlczsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2lu
dEl0ZW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhl
ckVudHJ5UG9pbnRJdGVtcy5oCmluZGV4IDIwMzY3YmUzZTI5NTNjNmJlZDBlMWI3ZmY0ZTc4NDk0
NDhlYmJkZmYuLjY2NjRlMmUzNDJlZmQ5MzFiYzZiMDRiMGU3MzIzZmI4YjhmMmUwY2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50
cnlQb2ludEl0ZW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUg
IldITFNMU2VtYW50aWMuaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNDUsMTQgKzQ2LDE2IEBAIGNsYXNzIEludHJpbnNpY3M7CiBjbGFz
cyBVbm5hbWVkVHlwZTsKIAogc3RydWN0IEVudHJ5UG9pbnRJdGVtIHsKLSAgICBFbnRyeVBvaW50
SXRlbShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgQVNUOjpTZW1hbnRpYyYgc2VtYW50
aWMpCi0gICAgICAgIDogdW5uYW1lZFR5cGUodW5uYW1lZFR5cGUpCi0gICAgICAgICwgc2VtYW50
aWMoc2VtYW50aWMpCisgICAgRW50cnlQb2ludEl0ZW0oQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1l
ZFR5cGUsIEFTVDo6U2VtYW50aWMmIHNlbWFudGljLCBWZWN0b3I8U3RyaW5nPiYgcGF0aCkKKyAg
ICAgICAgOiB1bm5hbWVkVHlwZSgmdW5uYW1lZFR5cGUpCisgICAgICAgICwgc2VtYW50aWMoJnNl
bWFudGljKQorICAgICAgICAsIHBhdGgocGF0aCkKICAgICB7CiAgICAgfQogCi0gICAgQVNUOjpV
bm5hbWVkVHlwZSYgdW5uYW1lZFR5cGU7Ci0gICAgQVNUOjpTZW1hbnRpYyYgc2VtYW50aWM7Cisg
ICAgQVNUOjpVbm5hbWVkVHlwZSogdW5uYW1lZFR5cGU7CisgICAgQVNUOjpTZW1hbnRpYyogc2Vt
YW50aWM7CisgICAgVmVjdG9yPFN0cmluZz4gcGF0aDsKIH07CiAKIHN0cnVjdCBFbnRyeVBvaW50
SXRlbXMgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBiNjEyNDE5MmNlOTQ0NTJmNmQxZmU0YmJmMzA5ZmNk
YWM0MWI0NzJhLi5lYTc2ODRlODM2ZDJlMDFhZGNhOGE2N2I1N2MxMmM3MzUyZTU4YmVhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dApAQCAtMzI2LDYgKzMyNiw4IEBAIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
VmlzaXRvci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGl0ZXJhbFR5cGVDaGVja2Vy
LmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xIaWdoWm9tYmllRmluZGVyLmNwcAogTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMb29wQ2hlY2tlci5jcHAKK01vZHVsZXMvd2ViZ3B1L1dI
TFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwv
V0hMU0xGdW5jdGlvbldyaXRlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMRnVuY3Rp
b25TdGFnZUNoZWNrZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJn
dW1lbnQuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggYzBjMjk3Mzg1NWJmYTdlYzdmZmE3MTE0MTI3N2JlYzhjZjVlNjFkNy4uOGFmMjBi
ZjljYTU2NjQzYzBiYWYyZjAzMmVmODIzNWRiN2VmNzQ3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjQzMCwxNyArNjQzMCwx
NiBAQAogCQkxQzg0MEI5QTIxRUM0MDA5MDBEMDUwMEQgLyogV0hMU0xHYXRoZXJFbnRyeVBvaW50
SXRlbXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4NDBCOUIyMUVDNDAwOTAwRDA1MDBEIC8qIFdI
TFNMQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTENoZWNrZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzkwNERGOTBCQTlEMkM4MDA4MUU5RDAgLyogVmVy
c2lvbi54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBWZXJzaW9uLnhj
Y29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQ0EwQzJFNDIxRUVEMTJBMDBB
MTE4NjAgLyogV0hMU0xGdW5jdGlvblN0YWdlQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXSExTTEZ1bmN0aW9uU3RhZ2VDaGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMUNBMEMyRTUyMUVFRDEyQTAwQTExODYwIC8qIFdITFNMRnVuY3Rpb25TdGFnZUNoZWNr
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xGdW5jdGlvblN0YWdlQ2hlY2tlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxQzlBRTVDQTIxRUQ5REY1MDA2OUQ1RjIgLyogV0hMU0xI
aWdoWm9tYmllRmluZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMSGlnaFpvbWJpZUZp
bmRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDOUFFNUNCMjFFRDlERjUw
MDY5RDVGMiAvKiBXSExTTEhpZ2hab21iaWVGaW5kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xI
aWdoWm9tYmllRmluZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQTBDMkRF
MjFFRUI1RjQwMEExMTg2MCAvKiBXSExTTFJlY3Vyc2lvbkNoZWNrZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0hMU0xSZWN1cnNpb25DaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFDQTBDMkUwMjFFRUI1RjUwMEExMTg2MCAvKiBXSExTTFJlY3Vyc2lvbkNoZWNrZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xSZWN1cnNpb25DaGVja2VyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMUNBMEMyRTQyMUVFRDEyQTAwQTExODYwIC8qIFdITFNMRnVuY3Rp
b25TdGFnZUNoZWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xGdW5jdGlvblN0YWdl
Q2hlY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQTBDMkU1MjFFRUQx
MkEwMEExMTg2MCAvKiBXSExTTEZ1bmN0aW9uU3RhZ2VDaGVja2VyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdITFNMRnVuY3Rpb25TdGFnZUNoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUNBMEMyRUEyMUVFRDZGNTAwQTExODYwIC8qIFdITFNMTGl0ZXJhbFR5cGVDaGVja2VyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdITFNMTGl0ZXJhbFR5cGVDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFDQTBDMkVDMjFFRUQ2RjYwMEExMTg2MCAvKiBXSExTTExpdGVyYWxU
eXBlQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTExpdGVyYWxUeXBlQ2hlY2tl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFDOUFFNUNBMjFFRDlERjUwMDY5
RDVGMiAvKiBXSExTTEhpZ2hab21iaWVGaW5kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hM
U0xIaWdoWm9tYmllRmluZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUM5
QUU1Q0IyMUVEOURGNTAwNjlENUYyIC8qIFdITFNMSGlnaFpvbWJpZUZpbmRlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXSExTTEhpZ2hab21iaWVGaW5kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUNBMEMyRjQyMUVFREFEMDAwQTExODYwIC8qIFdITFNMTG9vcENoZWNrZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xMb29wQ2hlY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFDQTBDMkY1MjFFRURBRDEwMEExMTg2MCAvKiBXSExTTExvb3BDaGVja2Vy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMTG9vcENoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMUNBMEMyRjYyMUVFREFEMjAwQTExODYwIC8qIEFTVCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZvbGRlcjsgcGF0aCA9IEFTVDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBMTlFMDMwREMyNTU5NTAwNjVBOTk0IC8q
IEV2ZW50TG9vcE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IEV2ZW50TG9vcE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBMTlFMTUw
REMyNTVDQTAwNjVBOTk0IC8qIEV2ZW50TG9vcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBFdmVudExvb3AuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBRjM0
N0UwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJTY3JpcHRPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTY0NTcsNiArNjQ1Niw4IEBACiAJCTFDQjY5QjNCMjFERjA0MUUwMDZFODQ2QSAv
KiBXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQ0I2QjRGODIxN0I4MzkzMDA5M0I5Q0QgLyogVGV4dERlY29yYXRpb25UaGlj
a25lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dERlY29yYXRpb25UaGlja25lc3MuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNCNkI0RkIyMTdCODM5NDAwOTNCOUNEIC8qIFRleHRV
bmRlcmxpbmVPZmZzZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFVuZGVybGluZU9mZnNldC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0M4M0RFMTIxRjE1RDNEMDA2NDA0MkUgLyog
V0hMU0xGdW5jdGlvbldyaXRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTEZ1bmN0aW9u
V3JpdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNDODNERTIyMUYxNUQz
RDAwNjQwNDJFIC8qIFdITFNMRnVuY3Rpb25Xcml0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xG
dW5jdGlvbldyaXRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0NERjVCQjE5
OTAzMzI0MDBCQ0VCQUQgLyogU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdUb09URkZvbnRDb252ZXJzaW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNDREY1QkMxOTkwMzMyNDAwQkNFQkFEIC8qIFNW
R1RvT1RGRm9udENvbnZlcnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U1ZHVG9PVEZGb250Q29udmVyc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
Q0RENDVFNDBCQTlDODQ2MDBGOTAxNDcgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IERlYnVnUmVsZWFzZS54Y2NvbmZpZzsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMzkxLDYgKzEzMzkyLDggQEAKIAkJQzI0NThFNjExRkU4
OTc5RTAwNTk0NzU5IC8qIEZvbnRDYWNoZUNvcmVUZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRD
YWNoZUNvcmVUZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNjAxN0ExMUM3
MkRDOTkwMEY3NEExNiAvKiBDU1NGb250RmFjZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDU1NGb250RmFjZVNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUMyNjAxN0EyMUM3MkRDOTkwMEY3NEExNiAvKiBDU1NGb250RmFjZVNldC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGb250RmFjZVNldC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDMjZEMkM3MDIxRjA1RDU1MDA0OTc4OTkgLyogV0hMU0xU
eXBlTmFtZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xUeXBlTmFtZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjZEMkM3MTIxRjA1RDU1MDA0OTc4OTkgLyogV0hM
U0xUeXBlTmFtZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xUeXBlTmFtZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4MDgzM0MxQzZEQjE5NDAwMTQ1MUI2IC8qIEZvbnRGYWNl
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBGb250RmFjZS5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUMyODA4MzNEMUM2REMyMkMwMDE0NTFCNiAvKiBKU0ZvbnRGYWNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTRm9udEZhY2UuY3BwOyBw
YXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ZvbnRGYWNlLmNwcDsgc291cmNlVHJlZSA9
IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJQzI4MDgzM0UxQzZEQzIyQzAwMTQ1MUI2IC8qIEpT
Rm9udEZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNGb250RmFjZS5o
OyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ZvbnRGYWNlLmg7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC0xNzAzOCw2ICsxNzA0MSwxMDAgQEAKIAkJCXRh
YldpZHRoID0gODsKIAkJCXVzZXNUYWJzID0gMDsKIAkJfTsKKwkJMUNBMEMyRjYyMUVFREFEMjAw
QTExODYwIC8qIEFTVCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAo
CisJCQkJMUM4NDBCOTAyMUVDMzBGOTAwRDA1MDBEIC8qIFdITFNMQWRkcmVzc1NwYWNlLmggKi8s
CisJCQkJQzIxQkY3MjUyMUNEODlFMjAwMjI3OTc5IC8qIFdITFNMQXJyYXlSZWZlcmVuY2VUeXBl
LmggKi8sCisJCQkJQzIxQkY3MDkyMUNEODlDQTAwMjI3OTc5IC8qIFdITFNMQXJyYXlUeXBlLmgg
Ki8sCisJCQkJQzIxQkY3MzAyMUNEODlFRDAwMjI3OTc5IC8qIFdITFNMQXNzaWdubWVudEV4cHJl
c3Npb24uaCAqLywKKwkJCQlDMjFCRjcwQTIxQ0Q4OUNCMDAyMjc5NzkgLyogV0hMU0xCYXNlRnVu
Y3Rpb25BdHRyaWJ1dGUuaCAqLywKKwkJCQlDMjFCRjZGQTIxQ0Q4OUJFMDAyMjc5NzkgLyogV0hM
U0xCYXNlU2VtYW50aWMuaCAqLywKKwkJCQlDMjFCRjcxRTIxQ0Q4OURDMDAyMjc5NzkgLyogV0hM
U0xCbG9jay5oICovLAorCQkJCUMyMUJGNkY2MjFDRDg5QjcwMDIyNzk3OSAvKiBXSExTTEJvb2xl
YW5MaXRlcmFsLmggKi8sCisJCQkJQzIxQkY3MUEyMUNEODlEODAwMjI3OTc5IC8qIFdITFNMQnJl
YWsuaCAqLywKKwkJCQlDMjEzOEExMzIxRERFQ0QzMDBGNTE2QkEgLyogV0hMU0xCdWlsdEluU2Vt
YW50aWMuY3BwICovLAorCQkJCUMyMUJGNzIyMjFDRDg5REYwMDIyNzk3OSAvKiBXSExTTEJ1aWx0
SW5TZW1hbnRpYy5oICovLAorCQkJCUMyMUJGNzE2MjFDRDg5RDUwMDIyNzk3OSAvKiBXSExTTENh
bGxFeHByZXNzaW9uLmggKi8sCisJCQkJQzIxQkY3MDYyMUNEODlDNzAwMjI3OTc5IC8qIFdITFNM
Q29tbWFFeHByZXNzaW9uLmggKi8sCisJCQkJQzIxQkY3MzMyMUNEODlGMDAwMjI3OTc5IC8qIFdI
TFNMQ29uc3RhbnRFeHByZXNzaW9uLmggKi8sCisJCQkJQzIxQkY2RjUyMUNEODlCNTAwMjI3OTc5
IC8qIFdITFNMQ29udGludWUuaCAqLywKKwkJCQlDMjFCRjcwMTIxQ0Q4OUM0MDAyMjc5NzkgLyog
V0hMU0xEZXJlZmVyZW5jZUV4cHJlc3Npb24uaCAqLywKKwkJCQlDMjFCRjcxODIxQ0Q4OUQ3MDAy
Mjc5NzkgLyogV0hMU0xEb3RFeHByZXNzaW9uLmggKi8sCisJCQkJQzIxQkY2RkIyMUNEODlCRTAw
MjI3OTc5IC8qIFdITFNMRG9XaGlsZUxvb3AuaCAqLywKKwkJCQlDMjFCRjcyODIxQ0Q4OUU1MDAy
Mjc5NzkgLyogV0hMU0xFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50LmggKi8sCisJCQkJMUM4
NDBCN0QyMUVCRTBCODAwRDA1MDBEIC8qIFdITFNMRW50cnlQb2ludFR5cGUuaCAqLywKKwkJCQlD
MjFCRjcyMDIxQ0Q4OUREMDAyMjc5NzkgLyogV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaCAq
LywKKwkJCQlDMjFCRjcyNjIxQ0Q4OUUzMDAyMjc5NzkgLyogV0hMU0xFbnVtZXJhdGlvbk1lbWJl
ci5oICovLAorCQkJCUMyMUJGNzAyMjFDRDg5QzQwMDIyNzk3OSAvKiBXSExTTEVudW1lcmF0aW9u
TWVtYmVyTGl0ZXJhbC5oICovLAorCQkJCUMyMUJGNzBDMjFDRDg5Q0MwMDIyNzk3OSAvKiBXSExT
TEV4cHJlc3Npb24uaCAqLywKKwkJCQlDMjFCRjcwMDIxQ0Q4OUMyMDAyMjc5NzkgLyogV0hMU0xG
YWxsdGhyb3VnaC5oICovLAorCQkJCUMyMUJGNzM1MjFDRDg5RjIwMDIyNzk3OSAvKiBXSExTTEZs
b2F0TGl0ZXJhbC5oICovLAorCQkJCTFDQjY5QjM4MjFERjAzRTEwMDZFODQ2QSAvKiBXSExTTEZs
b2F0TGl0ZXJhbFR5cGUuY3BwICovLAorCQkJCTFDQjY5QjM0MjFERUQ2M0EwMDZFODQ2QSAvKiBX
SExTTEZsb2F0TGl0ZXJhbFR5cGUuaCAqLywKKwkJCQlDMjFCRjczNDIxQ0Q4OUYxMDAyMjc5Nzkg
LyogV0hMU0xGb3JMb29wLmggKi8sCisJCQkJQzIxQkY3MDUyMUNEODlDNzAwMjI3OTc5IC8qIFdI
TFNMRnVuY3Rpb25BdHRyaWJ1dGUuaCAqLywKKwkJCQlDMjFCRjZGRDIxQ0Q4OUMwMDAyMjc5Nzkg
LyogV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmggKi8sCisJCQkJQzIxQkY2RjQyMUNEODlCMzAw
MjI3OTc5IC8qIFdITFNMRnVuY3Rpb25EZWZpbml0aW9uLmggKi8sCisJCQkJQzIxQkY2RkYyMUNE
ODlDMjAwMjI3OTc5IC8qIFdITFNMSWZTdGF0ZW1lbnQuaCAqLywKKwkJCQlDMjFCRjZGNzIxQ0Q4
OUI5MDAyMjc5NzkgLyogV0hMU0xJbmRleEV4cHJlc3Npb24uaCAqLywKKwkJCQlDMjBGNEY2NjIx
REZGMjM2MDA3MEM0NUEgLyogV0hMU0xJbnRlZ2VyTGl0ZXJhbC5jcHAgKi8sCisJCQkJQzIxQkY2
RjgyMUNEODlCQjAwMjI3OTc5IC8qIFdITFNMSW50ZWdlckxpdGVyYWwuaCAqLywKKwkJCQkxQ0I2
OUIzOTIxREYwM0YzMDA2RTg0NkEgLyogV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwICovLAor
CQkJCTFDQjY5QjM1MjFERUQ2NDkwMDZFODQ2QSAvKiBXSExTTEludGVnZXJMaXRlcmFsVHlwZS5o
ICovLAorCQkJCUMyMUJGNzMyMjFDRDg5RUYwMDIyNzk3OSAvKiBXSExTTExvZ2ljYWxFeHByZXNz
aW9uLmggKi8sCisJCQkJQzIxQkY3MTUyMUNEODlENDAwMjI3OTc5IC8qIFdITFNMTG9naWNhbE5v
dEV4cHJlc3Npb24uaCAqLywKKwkJCQlDMjFCRjcyRDIxQ0Q4OUU5MDAyMjc5NzkgLyogV0hMU0xN
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmggKi8sCisJCQkJQzIxQkY3MkMyMUNEODlFOTAw
MjI3OTc5IC8qIFdITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmggKi8sCisJCQkJMUMzMzI3NzEy
MUNGMEJFMTAwMERDOUYyIC8qIFdITFNMTmFtZWRUeXBlLmggKi8sCisJCQkJQzIxQkY3MjMyMUNE
ODlFMTAwMjI3OTc5IC8qIFdITFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5oICovLAorCQkJ
CUMyMUJGNzJBMjFDRDg5RTcwMDIyNzk3OSAvKiBXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5o
ICovLAorCQkJCUMyMUJGNzI0MjFDRDg5RTEwMDIyNzk3OSAvKiBXSExTTE5vZGUuaCAqLywKKwkJ
CQlDMjFCRjcwNzIxQ0Q4OUM4MDAyMjc5NzkgLyogV0hMU0xOdWxsTGl0ZXJhbC5oICovLAorCQkJ
CTFDQjY5QjNBMjFERjA0MDMwMDZFODQ2QSAvKiBXSExTTE51bGxMaXRlcmFsVHlwZS5jcHAgKi8s
CisJCQkJMUNCNjlCMzYyMURFRDY1NzAwNkU4NDZBIC8qIFdITFNMTnVsbExpdGVyYWxUeXBlLmgg
Ki8sCisJCQkJQzIxQkY3MjEyMUNEODlERTAwMjI3OTc5IC8qIFdITFNMTnVtVGhyZWFkc0Z1bmN0
aW9uQXR0cmlidXRlLmggKi8sCisJCQkJQzIxQkY3MkYyMUNEODlFQzAwMjI3OTc5IC8qIFdITFNM
UG9pbnRlclR5cGUuaCAqLywKKwkJCQlDMjFCRjcyRTIxQ0Q4OUVBMDAyMjc5NzkgLyogV0hMU0xQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCAqLywKKwkJCQlDMjFCRjcwQjIxQ0Q4OUNDMDAyMjc5
NzkgLyogV0hMU0xRdWFsaWZpZXIuaCAqLywKKwkJCQlDMjFCRjcxQjIxQ0Q4OUQ5MDAyMjc5Nzkg
LyogV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmggKi8sCisJCQkJQzIxQkY3MEQyMUNE
ODlDRDAwMjI3OTc5IC8qIFdITFNMUmVmZXJlbmNlVHlwZS5oICovLAorCQkJCTFDQjY5QjMyMjFE
RUQ0MEIwMDZFODQ2QSAvKiBXSExTTFJlc29sdmFibGVUeXBlLmggKi8sCisJCQkJQzIxMzhBMTUy
MURERUNFOTAwRjUxNkJBIC8qIFdITFNMUmVzb3VyY2VTZW1hbnRpYy5jcHAgKi8sCisJCQkJQzIx
QkY3MDgyMUNEODlDOTAwMjI3OTc5IC8qIFdITFNMUmVzb3VyY2VTZW1hbnRpYy5oICovLAorCQkJ
CUMyMUJGNzAzMjFDRDg5QzUwMDIyNzk3OSAvKiBXSExTTFJldHVybi5oICovLAorCQkJCUMyMUJG
NkY5MjFDRDg5QkQwMDIyNzk3OSAvKiBXSExTTFNlbWFudGljLmggKi8sCisJCQkJQzIxMzhBMTYy
MURERUNGQjAwRjUxNkJBIC8qIFdITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmNw
cCAqLywKKwkJCQlDMjFCRjczNjIxQ0Q4OUYzMDAyMjc5NzkgLyogV0hMU0xTcGVjaWFsaXphdGlv
bkNvbnN0YW50U2VtYW50aWMuaCAqLywKKwkJCQlDMjEzOEExNzIxRERFRDBEMDBGNTE2QkEgLyog
V0hMU0xTdGFnZUluT3V0U2VtYW50aWMuY3BwICovLAorCQkJCUMyMUJGNzBFMjFDRDg5Q0UwMDIy
Nzk3OSAvKiBXSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oICovLAorCQkJCUMyMUJGNzEyMjFDRDg5
RDEwMDIyNzk3OSAvKiBXSExTTFN0YXRlbWVudC5oICovLAorCQkJCUMyMUJGNzI3MjFDRDg5RTQw
MDIyNzk3OSAvKiBXSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCAqLywKKwkJCQlDMjFCRjZGRTIx
Q0Q4OUMxMDAyMjc5NzkgLyogV0hMU0xTdHJ1Y3R1cmVFbGVtZW50LmggKi8sCisJCQkJQzIxQkY3
MTkyMUNEODlENzAwMjI3OTc5IC8qIFdITFNMU3dpdGNoQ2FzZS5oICovLAorCQkJCUMyMUJGNzMx
MjFDRDg5RUUwMDIyNzk3OSAvKiBXSExTTFN3aXRjaFN0YXRlbWVudC5oICovLAorCQkJCUMyMUJG
NzFDMjFDRDg5REEwMDIyNzk3OSAvKiBXSExTTFRlcm5hcnlFeHByZXNzaW9uLmggKi8sCisJCQkJ
QzIxQkY2RjMyMUNEODlBRDAwMjI3OTc5IC8qIFdITFNMVHJhcC5oICovLAorCQkJCUMyMUJGNzFE
MjFDRDg5REIwMDIyNzk3OSAvKiBXSExTTFR5cGUuaCAqLywKKwkJCQlDMjg4QzcyRDIxQzk5MURB
MDAyREY1Q0EgLyogV0hMU0xUeXBlQXJndW1lbnQuY3BwICovLAorCQkJCUMyMUJGNzExMjFDRDg5
RDEwMDIyNzk3OSAvKiBXSExTTFR5cGVBcmd1bWVudC5oICovLAorCQkJCUMyMUJGNzI5MjFDRDg5
RTYwMDIyNzk3OSAvKiBXSExTTFR5cGVEZWZpbml0aW9uLmggKi8sCisJCQkJQzIwRjRGNjQyMURG
QkU1QzAwNzBDNDVBIC8qIFdITFNMVHlwZVJlZmVyZW5jZS5jcHAgKi8sCisJCQkJQzIxQkY3MUYy
MUNEODlEQzAwMjI3OTc5IC8qIFdITFNMVHlwZVJlZmVyZW5jZS5oICovLAorCQkJCTFDMzMyNzcy
MjFDRjBEMkUwMDBEQzlGMiAvKiBXSExTTFVubmFtZWRUeXBlLmggKi8sCisJCQkJQzIwRjRGNjcy
MURGRjNBNzAwNzBDNDVBIC8qIFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5jcHAgKi8sCisJ
CQkJQzIxQkY3MkIyMUNEODlFODAwMjI3OTc5IC8qIFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bC5oICovLAorCQkJCTFDQjY5QjNCMjFERjA0MUUwMDZFODQ2QSAvKiBXSExTTFVuc2lnbmVkSW50
ZWdlckxpdGVyYWxUeXBlLmNwcCAqLywKKwkJCQkxQ0I2OUIzNzIxREVENjZCMDA2RTg0NkEgLyog
V0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5oICovLAorCQkJCUMyMUJGNkZDMjFDRDg5
QkYwMDIyNzk3OSAvKiBXSExTTFZhbHVlLmggKi8sCisJCQkJQzIxQkY3MTAyMUNEODlEMDAwMjI3
OTc5IC8qIFdITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oICovLAorCQkJCUMyMUJGNzE0MjFDRDg5
RDMwMDIyNzk3OSAvKiBXSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmggKi8sCisJ
CQkJQzIxQkY3MTMyMUNEODlEMjAwMjI3OTc5IC8qIFdITFNMVmFyaWFibGVSZWZlcmVuY2UuaCAq
LywKKwkJCQlDMjFCRjcwNDIxQ0Q4OUM2MDAyMjc5NzkgLyogV0hMU0xXaGlsZUxvb3AuaCAqLywK
KwkJCSk7CisJCQlwYXRoID0gQVNUOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsK
IAkJMUNERDQ0NjYwQkE5QzgwMDAwRjkwMTQ3IC8qIENvbmZpZ3VyYXRpb25zICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTI1NDY2LDYgKzI1NTYzLDcgQEAK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMUNBMEMyRjYyMUVFREFE
MjAwQTExODYwIC8qIEFTVCAqLywKKwkJCQlDMjZEMkM2RTIxRjA1Q0RFMDA0OTc4OTkgLyogTWV0
YWwgKi8sCiAJCQkJQzIzNEE5QjIyMUU5MkMxRjAwM0M5ODREIC8qIFdITFNMQ2hlY2tEdXBsaWNh
dGVGdW5jdGlvbnMuY3BwICovLAogCQkJCUMyMzRBOUFFMjFFOTJDMUEwMDNDOTg0RCAvKiBXSExT
TENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmggKi8sCiAJCQkJMUM4NDBCOUIyMUVDNDAwOTAwRDA1
MDBEIC8qIFdITFNMQ2hlY2tlci5jcHAgKi8sCkBAIC0yNTUxNSw5OCArMjU2MTMsMTUgQEAKIAkJ
CXBhdGggPSBXSExTTDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCTFDQTBD
MkY2MjFFRURBRDIwMEExMTg2MCAvKiBBU1QgKi8gPSB7CisJCUMyNkQyQzZFMjFGMDVDREUwMDQ5
Nzg5OSAvKiBNZXRhbCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
Ci0JCQkJMUM4NDBCOTAyMUVDMzBGOTAwRDA1MDBEIC8qIFdITFNMQWRkcmVzc1NwYWNlLmggKi8s
Ci0JCQkJQzIxQkY3MjUyMUNEODlFMjAwMjI3OTc5IC8qIFdITFNMQXJyYXlSZWZlcmVuY2VUeXBl
LmggKi8sCi0JCQkJQzIxQkY3MDkyMUNEODlDQTAwMjI3OTc5IC8qIFdITFNMQXJyYXlUeXBlLmgg
Ki8sCi0JCQkJQzIxQkY3MzAyMUNEODlFRDAwMjI3OTc5IC8qIFdITFNMQXNzaWdubWVudEV4cHJl
c3Npb24uaCAqLywKLQkJCQlDMjFCRjcwQTIxQ0Q4OUNCMDAyMjc5NzkgLyogV0hMU0xCYXNlRnVu
Y3Rpb25BdHRyaWJ1dGUuaCAqLywKLQkJCQlDMjFCRjZGQTIxQ0Q4OUJFMDAyMjc5NzkgLyogV0hM
U0xCYXNlU2VtYW50aWMuaCAqLywKLQkJCQlDMjFCRjcxRTIxQ0Q4OURDMDAyMjc5NzkgLyogV0hM
U0xCbG9jay5oICovLAotCQkJCUMyMUJGNkY2MjFDRDg5QjcwMDIyNzk3OSAvKiBXSExTTEJvb2xl
YW5MaXRlcmFsLmggKi8sCi0JCQkJQzIxQkY3MUEyMUNEODlEODAwMjI3OTc5IC8qIFdITFNMQnJl
YWsuaCAqLywKLQkJCQlDMjEzOEExMzIxRERFQ0QzMDBGNTE2QkEgLyogV0hMU0xCdWlsdEluU2Vt
YW50aWMuY3BwICovLAotCQkJCUMyMUJGNzIyMjFDRDg5REYwMDIyNzk3OSAvKiBXSExTTEJ1aWx0
SW5TZW1hbnRpYy5oICovLAotCQkJCUMyMUJGNzE2MjFDRDg5RDUwMDIyNzk3OSAvKiBXSExTTENh
bGxFeHByZXNzaW9uLmggKi8sCi0JCQkJQzIxQkY3MDYyMUNEODlDNzAwMjI3OTc5IC8qIFdITFNM
Q29tbWFFeHByZXNzaW9uLmggKi8sCi0JCQkJQzIxQkY3MzMyMUNEODlGMDAwMjI3OTc5IC8qIFdI
TFNMQ29uc3RhbnRFeHByZXNzaW9uLmggKi8sCi0JCQkJQzIxQkY2RjUyMUNEODlCNTAwMjI3OTc5
IC8qIFdITFNMQ29udGludWUuaCAqLywKLQkJCQlDMjFCRjcwMTIxQ0Q4OUM0MDAyMjc5NzkgLyog
V0hMU0xEZXJlZmVyZW5jZUV4cHJlc3Npb24uaCAqLywKLQkJCQlDMjFCRjcxODIxQ0Q4OUQ3MDAy
Mjc5NzkgLyogV0hMU0xEb3RFeHByZXNzaW9uLmggKi8sCi0JCQkJQzIxQkY2RkIyMUNEODlCRTAw
MjI3OTc5IC8qIFdITFNMRG9XaGlsZUxvb3AuaCAqLywKLQkJCQlDMjFCRjcyODIxQ0Q4OUU1MDAy
Mjc5NzkgLyogV0hMU0xFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50LmggKi8sCi0JCQkJMUM4
NDBCN0QyMUVCRTBCODAwRDA1MDBEIC8qIFdITFNMRW50cnlQb2ludFR5cGUuaCAqLywKLQkJCQlD
MjFCRjcyMDIxQ0Q4OUREMDAyMjc5NzkgLyogV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaCAq
LywKLQkJCQlDMjFCRjcyNjIxQ0Q4OUUzMDAyMjc5NzkgLyogV0hMU0xFbnVtZXJhdGlvbk1lbWJl
ci5oICovLAotCQkJCUMyMUJGNzAyMjFDRDg5QzQwMDIyNzk3OSAvKiBXSExTTEVudW1lcmF0aW9u
TWVtYmVyTGl0ZXJhbC5oICovLAotCQkJCUMyMUJGNzBDMjFDRDg5Q0MwMDIyNzk3OSAvKiBXSExT
TEV4cHJlc3Npb24uaCAqLywKLQkJCQlDMjFCRjcwMDIxQ0Q4OUMyMDAyMjc5NzkgLyogV0hMU0xG
YWxsdGhyb3VnaC5oICovLAotCQkJCUMyMUJGNzM1MjFDRDg5RjIwMDIyNzk3OSAvKiBXSExTTEZs
b2F0TGl0ZXJhbC5oICovLAotCQkJCTFDQjY5QjM4MjFERjAzRTEwMDZFODQ2QSAvKiBXSExTTEZs
b2F0TGl0ZXJhbFR5cGUuY3BwICovLAotCQkJCTFDQjY5QjM0MjFERUQ2M0EwMDZFODQ2QSAvKiBX
SExTTEZsb2F0TGl0ZXJhbFR5cGUuaCAqLywKLQkJCQlDMjFCRjczNDIxQ0Q4OUYxMDAyMjc5Nzkg
LyogV0hMU0xGb3JMb29wLmggKi8sCi0JCQkJQzIxQkY3MDUyMUNEODlDNzAwMjI3OTc5IC8qIFdI
TFNMRnVuY3Rpb25BdHRyaWJ1dGUuaCAqLywKLQkJCQlDMjFCRjZGRDIxQ0Q4OUMwMDAyMjc5Nzkg
LyogV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmggKi8sCi0JCQkJQzIxQkY2RjQyMUNEODlCMzAw
MjI3OTc5IC8qIFdITFNMRnVuY3Rpb25EZWZpbml0aW9uLmggKi8sCi0JCQkJQzIxQkY2RkYyMUNE
ODlDMjAwMjI3OTc5IC8qIFdITFNMSWZTdGF0ZW1lbnQuaCAqLywKLQkJCQlDMjFCRjZGNzIxQ0Q4
OUI5MDAyMjc5NzkgLyogV0hMU0xJbmRleEV4cHJlc3Npb24uaCAqLywKLQkJCQlDMjBGNEY2NjIx
REZGMjM2MDA3MEM0NUEgLyogV0hMU0xJbnRlZ2VyTGl0ZXJhbC5jcHAgKi8sCi0JCQkJQzIxQkY2
RjgyMUNEODlCQjAwMjI3OTc5IC8qIFdITFNMSW50ZWdlckxpdGVyYWwuaCAqLywKLQkJCQkxQ0I2
OUIzOTIxREYwM0YzMDA2RTg0NkEgLyogV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwICovLAot
CQkJCTFDQjY5QjM1MjFERUQ2NDkwMDZFODQ2QSAvKiBXSExTTEludGVnZXJMaXRlcmFsVHlwZS5o
ICovLAotCQkJCUMyMUJGNzMyMjFDRDg5RUYwMDIyNzk3OSAvKiBXSExTTExvZ2ljYWxFeHByZXNz
aW9uLmggKi8sCi0JCQkJQzIxQkY3MTUyMUNEODlENDAwMjI3OTc5IC8qIFdITFNMTG9naWNhbE5v
dEV4cHJlc3Npb24uaCAqLywKLQkJCQlDMjFCRjcyRDIxQ0Q4OUU5MDAyMjc5NzkgLyogV0hMU0xN
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmggKi8sCi0JCQkJQzIxQkY3MkMyMUNEODlFOTAw
MjI3OTc5IC8qIFdITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmggKi8sCi0JCQkJMUMzMzI3NzEy
MUNGMEJFMTAwMERDOUYyIC8qIFdITFNMTmFtZWRUeXBlLmggKi8sCi0JCQkJQzIxQkY3MjMyMUNE
ODlFMTAwMjI3OTc5IC8qIFdITFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5oICovLAotCQkJ
CUMyMUJGNzJBMjFDRDg5RTcwMDIyNzk3OSAvKiBXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5o
ICovLAotCQkJCUMyMUJGNzI0MjFDRDg5RTEwMDIyNzk3OSAvKiBXSExTTE5vZGUuaCAqLywKLQkJ
CQlDMjFCRjcwNzIxQ0Q4OUM4MDAyMjc5NzkgLyogV0hMU0xOdWxsTGl0ZXJhbC5oICovLAotCQkJ
CTFDQjY5QjNBMjFERjA0MDMwMDZFODQ2QSAvKiBXSExTTE51bGxMaXRlcmFsVHlwZS5jcHAgKi8s
Ci0JCQkJMUNCNjlCMzYyMURFRDY1NzAwNkU4NDZBIC8qIFdITFNMTnVsbExpdGVyYWxUeXBlLmgg
Ki8sCi0JCQkJQzIxQkY3MjEyMUNEODlERTAwMjI3OTc5IC8qIFdITFNMTnVtVGhyZWFkc0Z1bmN0
aW9uQXR0cmlidXRlLmggKi8sCi0JCQkJQzIxQkY3MkYyMUNEODlFQzAwMjI3OTc5IC8qIFdITFNM
UG9pbnRlclR5cGUuaCAqLywKLQkJCQlDMjFCRjcyRTIxQ0Q4OUVBMDAyMjc5NzkgLyogV0hMU0xQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCAqLywKLQkJCQlDMjFCRjcwQjIxQ0Q4OUNDMDAyMjc5
NzkgLyogV0hMU0xRdWFsaWZpZXIuaCAqLywKLQkJCQlDMjFCRjcxQjIxQ0Q4OUQ5MDAyMjc5Nzkg
LyogV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmggKi8sCi0JCQkJQzIxQkY3MEQyMUNE
ODlDRDAwMjI3OTc5IC8qIFdITFNMUmVmZXJlbmNlVHlwZS5oICovLAotCQkJCTFDQjY5QjMyMjFE
RUQ0MEIwMDZFODQ2QSAvKiBXSExTTFJlc29sdmFibGVUeXBlLmggKi8sCi0JCQkJQzIxMzhBMTUy
MURERUNFOTAwRjUxNkJBIC8qIFdITFNMUmVzb3VyY2VTZW1hbnRpYy5jcHAgKi8sCi0JCQkJQzIx
QkY3MDgyMUNEODlDOTAwMjI3OTc5IC8qIFdITFNMUmVzb3VyY2VTZW1hbnRpYy5oICovLAotCQkJ
CUMyMUJGNzAzMjFDRDg5QzUwMDIyNzk3OSAvKiBXSExTTFJldHVybi5oICovLAotCQkJCUMyMUJG
NkY5MjFDRDg5QkQwMDIyNzk3OSAvKiBXSExTTFNlbWFudGljLmggKi8sCi0JCQkJQzIxMzhBMTYy
MURERUNGQjAwRjUxNkJBIC8qIFdITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmNw
cCAqLywKLQkJCQlDMjFCRjczNjIxQ0Q4OUYzMDAyMjc5NzkgLyogV0hMU0xTcGVjaWFsaXphdGlv
bkNvbnN0YW50U2VtYW50aWMuaCAqLywKLQkJCQlDMjEzOEExNzIxRERFRDBEMDBGNTE2QkEgLyog
V0hMU0xTdGFnZUluT3V0U2VtYW50aWMuY3BwICovLAotCQkJCUMyMUJGNzBFMjFDRDg5Q0UwMDIy
Nzk3OSAvKiBXSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oICovLAotCQkJCUMyMUJGNzEyMjFDRDg5
RDEwMDIyNzk3OSAvKiBXSExTTFN0YXRlbWVudC5oICovLAotCQkJCUMyMUJGNzI3MjFDRDg5RTQw
MDIyNzk3OSAvKiBXSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCAqLywKLQkJCQlDMjFCRjZGRTIx
Q0Q4OUMxMDAyMjc5NzkgLyogV0hMU0xTdHJ1Y3R1cmVFbGVtZW50LmggKi8sCi0JCQkJQzIxQkY3
MTkyMUNEODlENzAwMjI3OTc5IC8qIFdITFNMU3dpdGNoQ2FzZS5oICovLAotCQkJCUMyMUJGNzMx
MjFDRDg5RUUwMDIyNzk3OSAvKiBXSExTTFN3aXRjaFN0YXRlbWVudC5oICovLAotCQkJCUMyMUJG
NzFDMjFDRDg5REEwMDIyNzk3OSAvKiBXSExTTFRlcm5hcnlFeHByZXNzaW9uLmggKi8sCi0JCQkJ
QzIxQkY2RjMyMUNEODlBRDAwMjI3OTc5IC8qIFdITFNMVHJhcC5oICovLAotCQkJCUMyMUJGNzFE
MjFDRDg5REIwMDIyNzk3OSAvKiBXSExTTFR5cGUuaCAqLywKLQkJCQlDMjg4QzcyRDIxQzk5MURB
MDAyREY1Q0EgLyogV0hMU0xUeXBlQXJndW1lbnQuY3BwICovLAotCQkJCUMyMUJGNzExMjFDRDg5
RDEwMDIyNzk3OSAvKiBXSExTTFR5cGVBcmd1bWVudC5oICovLAotCQkJCUMyMUJGNzI5MjFDRDg5
RTYwMDIyNzk3OSAvKiBXSExTTFR5cGVEZWZpbml0aW9uLmggKi8sCi0JCQkJQzIwRjRGNjQyMURG
QkU1QzAwNzBDNDVBIC8qIFdITFNMVHlwZVJlZmVyZW5jZS5jcHAgKi8sCi0JCQkJQzIxQkY3MUYy
MUNEODlEQzAwMjI3OTc5IC8qIFdITFNMVHlwZVJlZmVyZW5jZS5oICovLAotCQkJCTFDMzMyNzcy
MjFDRjBEMkUwMDBEQzlGMiAvKiBXSExTTFVubmFtZWRUeXBlLmggKi8sCi0JCQkJQzIwRjRGNjcy
MURGRjNBNzAwNzBDNDVBIC8qIFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5jcHAgKi8sCi0J
CQkJQzIxQkY3MkIyMUNEODlFODAwMjI3OTc5IC8qIFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bC5oICovLAotCQkJCTFDQjY5QjNCMjFERjA0MUUwMDZFODQ2QSAvKiBXSExTTFVuc2lnbmVkSW50
ZWdlckxpdGVyYWxUeXBlLmNwcCAqLywKLQkJCQkxQ0I2OUIzNzIxREVENjZCMDA2RTg0NkEgLyog
V0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5oICovLAotCQkJCUMyMUJGNkZDMjFDRDg5
QkYwMDIyNzk3OSAvKiBXSExTTFZhbHVlLmggKi8sCi0JCQkJQzIxQkY3MTAyMUNEODlEMDAwMjI3
OTc5IC8qIFdITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oICovLAotCQkJCUMyMUJGNzE0MjFDRDg5
RDMwMDIyNzk3OSAvKiBXSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmggKi8sCi0J
CQkJQzIxQkY3MTMyMUNEODlEMjAwMjI3OTc5IC8qIFdITFNMVmFyaWFibGVSZWZlcmVuY2UuaCAq
LywKLQkJCQlDMjFCRjcwNDIxQ0Q4OUM2MDAyMjc5NzkgLyogV0hMU0xXaGlsZUxvb3AuaCAqLywK
KwkJCQkxQ0M4M0RFMTIxRjE1RDNEMDA2NDA0MkUgLyogV0hMU0xGdW5jdGlvbldyaXRlci5jcHAg
Ki8sCisJCQkJMUNDODNERTIyMUYxNUQzRDAwNjQwNDJFIC8qIFdITFNMRnVuY3Rpb25Xcml0ZXIu
aCAqLywKKwkJCQlDMjZEMkM3MDIxRjA1RDU1MDA0OTc4OTkgLyogV0hMU0xUeXBlTmFtZXIuY3Bw
ICovLAorCQkJCUMyNkQyQzcxMjFGMDVENTUwMDQ5Nzg5OSAvKiBXSExTTFR5cGVOYW1lci5oICov
LAogCQkJKTsKLQkJCXBhdGggPSBBU1Q7CisJCQlwYXRoID0gTWV0YWw7CiAJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwogCQl9OwogCQlDOTZGNUVCRjFCNTg3MjI2MDA5MUVBOUQgLyogbWVkaWFz
ZXNzaW9uICovID0gewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359643</attachid>
            <date>2019-01-20 13:03:39 -0800</date>
            <delta_ts>2019-01-20 13:09:41 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-193531-20190120130338.patch</filename>
            <type>text/plain</type>
            <size>151944</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwMTkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzA0MWRjMmQxNjQ1ZjQ0
OTc0ZjBiZDQ5YjQ0NTczYzBiNjM3NjNkNi4uODQyYTlkMGYzOWRhOWZhNWM2N2ExZDk1M2QwMjA5
OTg1MTE0ZDc3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMSBAQAorMjAxOS0wMS0yMCAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0g
SW1wbGVtZW50IE1ldGFsIGNvZGUgZ2VuZXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkzNTMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6dGFyZ2V0SW5kZXgpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaDoKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4cHJlc3Npb246OnJlc29sdmVkVHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpFeHByZXNzaW9uOjp0eXBlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0
aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
OjpuYW1lKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1
cmVEZWZpbml0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpTdHJ1Y3R1cmVE
ZWZpbml0aW9uOjpmaW5kKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6Ok1ldGFsOjpFbnRyeVBvaW50U2NhZmZvbGRpbmc6OkVudHJ5UG9pbnRTY2FmZm9sZGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGlu
Zzo6aGVscGVyVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpFbnRyeVBv
aW50U2NhZmZvbGRpbmc6OnNpZ25hdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0
YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpNZXRhbDo6RW50cnlQb2ludFNjYWZmb2xkaW5nOjpwYWNrKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExvb3BDaGVj
a2VyLmguCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlv
bldyaXRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5j
dGlvbkRlY2xhcmF0aW9uV3JpdGVyOjpGdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWNsYXJhdGlvbldyaXRlcjo6dG9T
dHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlvbkRlZmluaXRp
b25Xcml0ZXI6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcik6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dG9TdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OmNvbnN0
YW50RXhwcmVzc2lvblN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1
bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6Z2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6bWV0YWxGdW5jdGlvbnMpOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMb29wQ2hlY2tlci5o
LgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWV0YWxDb2RlR2Vu
ZXJhdG9yLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oLgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6Ok1ldGFsOjpnZW5lcmF0ZU1ldGFsQ29kZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMb29wQ2hlY2tlci5oLgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6Z2V0TmF0aXZlTmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6Om1hcEZ1bmN0aW9uTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OmNvbnZlcnRBZGRyZXNzU3BhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjp3cml0ZU5hdGl2ZUZ1bmN0aW9uKToKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVy
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
TG9vcENoZWNrZXIuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExT
TFR5cGVOYW1lci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpC
YXNlVHlwZU5hbWVOb2RlOjpCYXNlVHlwZU5hbWVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpNZXRhbDo6QmFzZVR5cGVOYW1lTm9kZTo6aXNBcnJheVR5cGVOYW1lTm9kZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkJhc2VUeXBlTmFtZU5vZGU6OmlzQXJy
YXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
Ok1ldGFsOjpCYXNlVHlwZU5hbWVOb2RlOjppc1BvaW50ZXJUeXBlTmFtZU5vZGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpCYXNlVHlwZU5hbWVOb2RlOjppc1JlZmVy
ZW5jZVR5cGVOYW1lTm9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6
OkJhc2VUeXBlTmFtZU5vZGU6OmNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpN
ZXRhbDo6QmFzZVR5cGVOYW1lTm9kZTo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpNZXRhbDo6QmFzZVR5cGVOYW1lTm9kZTo6cGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpNZXRhbDo6QmFzZVR5cGVOYW1lTm9kZTo6bWFuZ2xlZE5hbWUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpBcnJheVR5cGVOYW1lTm9kZTo6QXJyYXlUeXBlTmFt
ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpBcnJheVR5cGVOYW1lTm9k
ZTo6bnVtRWxlbWVudHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpB
cnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZTo6QXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9k
ZTo6YWRkcmVzc1NwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6
UG9pbnRlclR5cGVOYW1lTm9kZTo6UG9pbnRlclR5cGVOYW1lTm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6TWV0YWw6OlBvaW50ZXJUeXBlTmFtZU5vZGU6OmFkZHJlc3NTcGFjZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlJlZmVyZW5jZVR5cGVOYW1lTm9k
ZTo6UmVmZXJlbmNlVHlwZU5hbWVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRh
bDo6UmVmZXJlbmNlVHlwZU5hbWVOb2RlOjpuYW1lZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6OlR5cGVOYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6dmlzaXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
Ok1ldGFsOjpmaW5kSW5WZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpm
aW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5hbWVyOjptYW5nbGVk
TmFtZUZvclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6
OmNyZWF0ZU5hbWVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5h
bWVyOjppbnNlcnQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpNZXRhbFR5cGVE
ZWNsYXJhdGlvbldyaXRlcjo6TWV0YWxUeXBlRGVjbGFyYXRpb25Xcml0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpNZXRhbFR5cGVEZWNsYXJhdGlvbldyaXRlcjo6dG9TdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpNZXRhbFR5cGVEZWNsYXJhdGlv
bldyaXRlcjo6dmlzaXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFt
ZXI6Om1ldGFsVHlwZURlY2xhcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0
YWw6OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5hbWVy
OjplbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpN
ZXRhbDo6VHlwZU5hbWVyOjplbWl0TmFtZWRUeXBlRGVmaW5pdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6bWV0YWxUeXBlRGVmaW5pdGlvbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6Om1hbmdsZWROYW1lRm9yRW51
bWVyYXRpb25NZW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFt
ZXI6Om1hbmdsZWROYW1lRm9yU3RydWN0dXJlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6bWV0YWxUeXBlcyk6CisgICAgICAgICogTW9kdWxlcy93
ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6Z2VuZXJhdGVOZXh0VHlwZU5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6OmdlbmVyYXRlTmV4dFN0cnVj
dHVyZUVsZW1lbnROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5h
bWVyOjpnZW5lcmF0ZU5leHRFbnVtZXJhdGlvbk1lbWJlck5hbWUpOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6Y2hlY2tTZW1hbnRpY3MpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OnZp
c2l0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9p
bnRJdGVtcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6R2F0aGVyZXI6OnZpc2l0KToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVt
cy5oOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkVudHJ5UG9pbnRJdGVtOjpFbnRyeVBvaW50
SXRlbSk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMb29wQ2hlY2tlci5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGF0ZW1l
bnRCZWhhdmlvckNoZWNrZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpT
dGF0ZW1lbnRCZWhhdmlvckNoZWNrZXI6OnRha2VGdW5jdGlvbkJlaGF2aW9yKToKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpjaGVja1N0YXRlbWVudEJlaGF2aW9yKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlci5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMb29wQ2hlY2tl
ci5oLgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKwogMjAxOS0wMS0xOCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJs
c29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZlcnQgcjIzODgxNSwgaXQgYnJva2UgV0sxIHZp
ZGVvIGZ1bGxzY3JlZW4gb24gTWFjCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5oCmluZGV4IDQz
YjY5ODZhZjdkNGI3MWMyODY3N2VjNjVjZWNkOGVhN2M0NzMwNGEuLjdiMzZjYWFiYzZiZmNhNWQ0
NDVlMjJiOGQ2MmRiOWVhMmM3OGEwODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5oCkBA
IC02OSw2ICs2OSw3IEBAIHB1YmxpYzoKICAgICBCdWlsdEluU2VtYW50aWMoQnVpbHRJblNlbWFu
dGljJiYpID0gZGVmYXVsdDsKIAogICAgIFZhcmlhYmxlIHZhcmlhYmxlKCkgY29uc3QgeyByZXR1
cm4gbV92YXJpYWJsZTsgfQorICAgIE9wdGlvbmFsPHVuc2lnbmVkPiYgdGFyZ2V0SW5kZXgoKSB7
IHJldHVybiBtX3RhcmdldEluZGV4OyB9CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQnVp
bHRJblNlbWFudGljJiBvdGhlcikgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKaW5kZXgg
OGZlZjYyOTU5ZDczNjNlMWYxYmJiMjNkNzMzOThmOGEyZDQ4YmRlMS4uMDFmMmZmYjgwNmEwNTc2
YmM2MDU2ZTA2MWFiMTcyYmUyNjQ2MTZlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaApAQCAtNTcsNyAr
NTcsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBMZXhlcjo6VG9rZW4mIG9yaWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fb3JpZ2luOyB9CiAKLSAgICBVbm5hbWVkVHlwZSogdHlwZSgpIHsgcmV0dXJu
IG1fdHlwZSA/ICYqbV90eXBlIDogbnVsbHB0cjsgfQorICAgIFVubmFtZWRUeXBlKiByZXNvbHZl
ZFR5cGUoKSB7IHJldHVybiBtX3R5cGUgPyAmKm1fdHlwZSA6IG51bGxwdHI7IH0KIAogICAgIHZv
aWQgc2V0VHlwZShVbmlxdWVSZWY8VW5uYW1lZFR5cGU+JiYgdHlwZSkKICAgICB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlv
bkRlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgKaW5kZXggNTA4Mjg1ODQ2MDcwNTc3ZDg5NGM1MzRh
Mzk3NGJjZTBhYmIyMWYxMS4uYzE1NDY2YTcwYmJiYWFhNzVmMTcwZTEyNmViNTJkYzg4Yjg0ODE2
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaApAQCAtNzAsNiArNzAsNyBA
QCBwdWJsaWM6CiAgICAgY29uc3QgVW5uYW1lZFR5cGUmIHR5cGUoKSBjb25zdCB7IHJldHVybiBt
X3R5cGU7IH0KICAgICBVbm5hbWVkVHlwZSYgdHlwZSgpIHsgcmV0dXJuIG1fdHlwZTsgfQogICAg
IGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIFN0cmlu
ZyYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQogICAgIGJvb2wgaXNDYXN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9uYW1lID09ICJvcGVyYXRvciBjYXN0IjsgfQogICAgIGNvbnN0IFZhcmlhYmxlRGVj
bGFyYXRpb25zJiBwYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CiAg
ICAgVmFyaWFibGVEZWNsYXJhdGlvbnMmIHBhcmFtZXRlcnMoKSB7IHJldHVybiBtX3BhcmFtZXRl
cnM7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZURlZmluaXRpb24uaAppbmRleCA0NTZjNmUxMjM4
YmNiNTdlN2NmZTFlMDE3ODY5ZjBmNDE0NDBhNzY5Li4wMjYwZDQ1MDZhNTFjYWI1MzgxOTMzMTQ5
MmU1ZDdiZWNiZGM5OTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oCkBA
IC01NSw2ICs1NSwxNSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1N0cnVjdHVyZURlZmluaXRpb24o
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKICAgICBTdHJ1Y3R1cmVFbGVtZW50
cyYgc3RydWN0dXJlRWxlbWVudHMoKSB7IHJldHVybiBtX3N0cnVjdHVyZUVsZW1lbnRzOyB9Cisg
ICAgU3RydWN0dXJlRWxlbWVudCogZmluZChTdHJpbmcmIG5hbWUpCisgICAgeworICAgICAgICBh
dXRvIGl0ZXJhdG9yID0gc3RkOjpmaW5kX2lmKG1fc3RydWN0dXJlRWxlbWVudHMuYmVnaW4oKSwg
bV9zdHJ1Y3R1cmVFbGVtZW50cy5lbmQoKSwgWyZdKFN0cnVjdHVyZUVsZW1lbnQmIHN0cnVjdHVy
ZUVsZW1lbnQpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZUVsZW1lbnQu
bmFtZSgpID09IG5hbWU7CisgICAgICAgIH0pOworICAgICAgICBpZiAoaXRlcmF0b3IgPT0gbV9z
dHJ1Y3R1cmVFbGVtZW50cy5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICByZXR1cm4gJippdGVyYXRvcjsKKyAgICB9CiAKIHByaXZhdGU6CiAgICAgU3RydWN0dXJl
RWxlbWVudHMgbV9zdHJ1Y3R1cmVFbGVtZW50czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQ
b2ludFNjYWZmb2xkaW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYTljZmY0NmE3OTM3ZWFhZjNjYzUzOTE3
ZWRlOTQxODQzZjgxMDVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuY3BwCkBAIC0w
LDAgKzEsMjU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisj
aW5jbHVkZSAiV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgTWV0YWwgeworCitFbnRyeVBv
aW50U2NhZmZvbGRpbmc6OkVudHJ5UG9pbnRTY2FmZm9sZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5p
dGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uLCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKQorICAgIDog
bV9mdW5jdGlvbkRlZmluaXRpb24oJmZ1bmN0aW9uRGVmaW5pdGlvbikKKyAgICAsIG1faW50cmlu
c2ljcygmaW50cmluc2ljcykKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAg
Z2F0aGVyRW50cnlQb2ludEl0ZW1zKCptX2ludHJpbnNpY3MsICptX2Z1bmN0aW9uRGVmaW5pdGlv
bik7Cit9CisKK1N0cmluZyBFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmhlbHBlclR5cGVzKCkKK3sK
KyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgcmV0dXJuIFN0cmluZygpOworfQor
CitTdHJpbmcgRW50cnlQb2ludFNjYWZmb2xkaW5nOjpzaWduYXR1cmUoKQoreworICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBF
bnRyeVBvaW50U2NhZmZvbGRpbmc6OnVucGFjaygpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzLgorICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIEVudHJ5UG9pbnRTY2Fm
Zm9sZGluZzo6cGFjayhjb25zdCBTdHJpbmcmKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcy4KKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKKy8qCit7CisgICAgICAgICAgICBhdXRv
IGl0ZW1zID0gZ2F0aGVyRW50cnlQb2ludEl0ZW1zKG1faW50cmluc2ljcywgZnVuY3Rpb25EZWZp
bml0aW9uKTsKKyAgICAgICAgICAgIG1fZW50cnlQb2ludEl0ZW1zID0gaXRlbXM7CisgICAgICAg
ICAgICBtX2VudHJ5UG9pbnRSZXR1cm5UeXBlID0gJmZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCk7
CisgICAgICAgICAgICBBU1NFUlQoaXRlbXMpOworICAgICAgICAgICAgdW5zaWduZWQgdGV4dHVy
ZUNvdW50ID0gMDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGJ1ZmZlckNvdW50ID0gMDsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIHNhbXBsZXJDb3VudCA9IDA7CisKKyAgICAgICAgICAgIGF1dG8gc2Vt
YW50aWNWaXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpCdWlsdEluU2VtYW50aWMm
IGJ1aWx0SW5TZW1hbnRpYykgLT4gU3RyaW5nIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGJ1
aWx0SW5TZW1hbnRpYy52YXJpYWJsZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBU1Q6OkJ1
aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWSW5zdGFuY2VJRDoKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICJbW2luc3RhbmNlX2lkXV0iX3N0cjsKKyAgICAgICAgICAgICAgICBjYXNlIEFT
VDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZWZXJ0ZXhJRDoKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICJbW3ZlcnRleF9pZF1dIl9zdHI7CisgICAgICAgICAgICAgICAgY2FzZSBB
U1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlBTaXplOgorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gIltbcG9pbnRfc2l6ZV1dIl9zdHI7CisgICAgICAgICAgICAgICAgY2FzZSBBU1Q6
OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWUG9zaXRpb246CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAiW1twb3NpdGlvbl1dIl9zdHI7CisgICAgICAgICAgICAgICAgY2FzZSBBU1Q6
OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWSXNGcm9udEZhY2U6CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAiW1tmcm9udF9mYWNpbmddXSJfc3RyOworICAgICAgICAgICAgICAgIGNh
c2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVlNhbXBsZUluZGV4OgorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gIltbc2FtcGxlX2lkXV0iX3N0cjsKKyAgICAgICAgICAgICAg
ICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZJbm5lckNvdmVyYWdlOgor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gIltbc2FtcGxlX21hc2tdXSJfc3RyOworICAgICAg
ICAgICAgICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVlRhcmdldDoK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIltbY29sb3IoIiwgKmJ1aWx0
SW5TZW1hbnRpYy50YXJnZXRJbmRleCgpLCAiKV1dIik7CisgICAgICAgICAgICAgICAgY2FzZSBB
U1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWRGVwdGg6CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAiW1tkZXB0aChhbnkpXV0iX3N0cjsKKyAgICAgICAgICAgICAgICBjYXNlIEFT
VDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZDb3ZlcmFnZToKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICJbW3NhbXBsZV9tYXNrXV0iX3N0cjsKKyAgICAgICAgICAgICAgICBjYXNl
IEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZEaXNwYXRjaFRocmVhZElEOgorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gIltbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSJfc3Ry
OworICAgICAgICAgICAgICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpT
Vkdyb3VwSUQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiW1t0aHJlYWRncm91cF9wb3Np
dGlvbl9pbl9ncmlkXV0iX3N0cjsKKyAgICAgICAgICAgICAgICBjYXNlIEFTVDo6QnVpbHRJblNl
bWFudGljOjpWYXJpYWJsZTo6U1ZHcm91cEluZGV4OgorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gIltbdGhyZWFkX2luZGV4X2luX3RocmVhZGdyb3VwXV0iX3N0cjsKKyAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYnVpbHRJblNlbWFudGljLnZh
cmlhYmxlKCkgPT0gQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVkdyb3VwVGhyZWFk
SUQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gIltbdGhyZWFkX3Bvc2l0aW9uX2luX3Ro
cmVhZGdyb3VwXV0iX3N0cjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LCBbJl0o
QVNUOjpSZXNvdXJjZVNlbWFudGljJiByZXNvdXJjZVNlbWFudGljKSAtPiBTdHJpbmcgeworICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBQcm92aWRlIGEgYmV0dGVyIG1hcHBpbmcgYmV0d2VlbiBI
TFNMIHNlbWFudGljcyBhbmQgTWV0YWwgYXR0cmlidXRlcy4KKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogUmVwb3J0IHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlIEFQSS4KKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHJlc291cmNlU2VtYW50aWMubW9kZSgpKSB7CisgICAgICAgICAgICAgICAgY2Fz
ZSBBU1Q6OlJlc291cmNlU2VtYW50aWM6Ok1vZGU6OlVub3JkZXJlZEFjY2Vzc1ZpZXc6CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJbW2J1ZmZlcigiLCBidWZmZXJDb3Vu
dCsrLCAiKV1dIik7CisgICAgICAgICAgICAgICAgY2FzZSBBU1Q6OlJlc291cmNlU2VtYW50aWM6
Ok1vZGU6OlRleHR1cmU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJb
W3RleHR1cmUoIiwgdGV4dHVyZUNvdW50KyssICIpXV0iKTsKKyAgICAgICAgICAgICAgICBjYXNl
IEFTVDo6UmVzb3VyY2VTZW1hbnRpYzo6TW9kZTo6QnVmZmVyOgorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbWFrZVN0cmluZygiW1tidWZmZXIoIiwgYnVmZmVyQ291bnQrKywgIildXSIpOwor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyZXNv
dXJjZVNlbWFudGljLm1vZGUoKSA9PSBBU1Q6OlJlc291cmNlU2VtYW50aWM6Ok1vZGU6OlNhbXBs
ZXIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiW1tzYW1wbGVyKCIs
IHNhbXBsZXJDb3VudCsrLCAiKV1dIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fSwgWyZdKEFTVDo6U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljJikgLT4gU3RyaW5nIHsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKKyAgICAgICAgICAgICAg
ICBDUkFTSCgpOworICAgICAgICAgICAgfSwgWyZdKEFTVDo6U3RhZ2VJbk91dFNlbWFudGljJiBz
dGFnZUluT3V0U2VtYW50aWMpIC0+IFN0cmluZyB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1h
a2VTdHJpbmcoIltbYXR0cmlidXRlKCIsIHN0YWdlSW5PdXRTZW1hbnRpYy5pbmRleCgpLCAiKV1d
Iik7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgbV9vdXRwdXRTdHJ1Y3ROYW1lID0g
bV90eXBlTmFtZXIuZ2VuZXJhdGVOZXh0VHlwZU5hbWUoKTsKKyAgICAgICAgICAgIG1fbWV0YWxP
dXRwdXROYW1lcy5jbGVhcigpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKCJzdHJ1Y3QgIiwgbV9vdXRwdXRTdHJ1Y3ROYW1lLCAie1xuIikpOworICAgICAg
ICAgICAgZm9yIChhdXRvJiBvdXRwdXQgOiBpdGVtcy0+b3V0cHV0cykgeworICAgICAgICAgICAg
ICAgIGF1dG8gZWxlbWVudE5hbWUgPSBtX3R5cGVOYW1lci5nZW5lcmF0ZU5leHRTdHJ1Y3R1cmVF
bGVtZW50TmFtZSgpOworICAgICAgICAgICAgICAgIG1fbWV0YWxPdXRwdXROYW1lcy5hcHBlbmQo
ZWxlbWVudE5hbWUpOworICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZygiICAgICIsIG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqb3V0cHV0LnVu
bmFtZWRUeXBlKSwgJyAnLCBlbGVtZW50TmFtZSwgJyAnLCBXVEY6OnZpc2l0KHNlbWFudGljVmlz
aXRvciwgKm91dHB1dC5zZW1hbnRpYykpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQoIn07XG4iKTsKKyAgICAgICAgICAgIGF1dG8gZW50cnlQb2lu
dCA9IChbJl0oKSAtPiBTdHJpbmcgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoKmZ1bmN0aW9u
RGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBU1Q6
OkVudHJ5UG9pbnRUeXBlOjpWZXJ0ZXg6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAidmVy
dGV4Il9zdHI7CisgICAgICAgICAgICAgICAgY2FzZSBBU1Q6OkVudHJ5UG9pbnRUeXBlOjpGcmFn
bWVudDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmcmFnbWVudCJfc3RyOworICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgqZnVuY3Rpb25E
ZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkgPT0gQVNUOjpFbnRyeVBvaW50VHlwZTo6Q29tcHV0
ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAia2VybmVsIl9zdHI7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSkoKTsKKyAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IG1l
dGFsUGFyYW1ldGVyTmFtZXM7CisgICAgICAgICAgICBtZXRhbFBhcmFtZXRlck5hbWVzLnJlc2Vy
dmVDYXBhY2l0eShpdGVtcy0+aW5wdXRzLnNpemUoKSk7CisgICAgICAgICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoZW50cnlQb2ludCwgIiAiLCBtX3R5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUoZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSksICcgJywgaXRlcmF0b3It
PnZhbHVlLCAnKCcpKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbXMt
PmlucHV0cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGlucHV0ID0gaXRl
bXMtPmlucHV0c1tpXTsKKyAgICAgICAgICAgICAgICBpZiAoaSkKKyAgICAgICAgICAgICAgICAg
ICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCAiKTsKKyAgICAgICAgICAgICAgICBhdXRvIHBh
cmFtZXRlck5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAgICAgICAgICAg
ICBtZXRhbFBhcmFtZXRlck5hbWVzLnVuY2hlY2tlZEFwcGVuZChwYXJhbWV0ZXJOYW1lKTsKKyAg
ICAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCppbnB1dC51bm5hbWVkVHlwZSksICcgJywgcGFyYW1ldGVy
TmFtZSwgJyAnLCBXVEY6OnZpc2l0KHNlbWFudGljVmlzaXRvciwgKmlucHV0LnNlbWFudGljKSkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKSB7
XG4iKTsKKyAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtZXRlck5hbWVN
YXA7CisgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
Kj4gcGFyYW1ldGVyT2JqZWN0TWFwOworICAgICAgICAgICAgZm9yIChhdXRvJiBwYXJhbWV0ZXIg
OiBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpKSB7CisgICAgICAgICAgICAgICAgYXV0
byBwYXJhbWV0ZXJOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdmFyaWFibGVN
YXBwaW5nLmFkZCgmcGFyYW1ldGVyLCBwYXJhbWV0ZXJOYW1lKTsKKyAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhdXRv
IGFkZFJlc3VsdCA9IHBhcmFtZXRlck5hbWVNYXAuYWRkKHBhcmFtZXRlci5uYW1lKCksIHBhcmFt
ZXRlck5hbWUpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwg
YWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gcGFyYW1ldGVyT2JqZWN0
TWFwLmFkZChwYXJhbWV0ZXIubmFtZSgpLCAmcGFyYW1ldGVyKTsKKyAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqcGFyYW1ldGVyLnR5cGUoKSks
ICcgJywgcGFyYW1ldGVyTmFtZSwgIjtcbiIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbXMtPmlucHV0cy5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgICAgIGF1dG8mIGlucHV0ID0gaXRlbXMtPmlucHV0c1tpXTsKKyAgICAgICAgICAg
ICAgICBBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24qIHN0cnVjdHVyZURlZmluaXRpb24gPSBudWxs
cHRyOworICAgICAgICAgICAgICAgIGF1dG8gY29tcHV0ZVN0cnVjdHVyZURlZmluaXRpb24gPSBb
XShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkgLT4gQVNUOjpTdHJ1Y3R1cmVEZWZpbml0
aW9uKiB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IHVubmFtZWRUeXBl
LnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzPEFTVDo6TmFtZWRUeXBl
Pih1bmlmeU5vZGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgICAgICAgICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRU
eXBlPih1bmlmeU5vZGUpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzPEFTVDo6U3RydWN0
dXJlRGVmaW5pdGlvbj4obmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gJmRvd25jYXN0PEFTVDo6U3Ry
dWN0dXJlRGVmaW5pdGlvbj4obmFtZWRUeXBlKTsKKyAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgaW5wdXQucGF0aC5zaXplKCk7ICsraikg
eworICAgICAgICAgICAgICAgICAgICBhdXRvJiBjb21wb25lbnQgPSBpbnB1dC5wYXRoW2pdOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIWopIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gcGFyYW1ldGVyTmFt
ZU1hcC5maW5kKGNvbXBvbmVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGl0ZXJhdG9yICE9IHBhcmFtZXRlck5hbWVNYXAuZW5kKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlcmF0
b3IgPSBwYXJhbWV0ZXJPYmplY3RNYXAuZmluZChjb21wb25lbnQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IHBhcmFtZXRlck9iamVjdE1hcC5lbmQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVEZWZpbml0aW9uID0gY29tcHV0ZVN0cnVj
dHVyZURlZmluaXRpb24oKml0ZXJhdG9yLT52YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8qIHN0cnVjdHVyZUVs
ZW1lbnQgPSBzdHJ1Y3R1cmVEZWZpbml0aW9uLT5maW5kKGNvbXBvbmVudCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlRWxlbWVudCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoJy4nLCBtX3R5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoKnN0cnVjdHVyZUVsZW1lbnQpKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVEZWZpbml0aW9uID0gY29tcHV0ZVN0cnVj
dHVyZURlZmluaXRpb24oc3RydWN0dXJlRWxlbWVudC0+dHlwZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiA9ICIsIG1ldGFsUGFyYW1ldGVyTmFtZXNbaV0sICI7XG4i
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rp
b25EZWZpbml0aW9uLmJsb2NrKCkpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZCgifVxuIik7CisgICAgICAgIH0KKyAgICAgICAgKi8KKworICAgICAgICAvKnsKKyAgICAgICAg
ICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwor
ICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX291dHB1
dFN0cnVjdE5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiO1xuIikpOworICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnRyeVBvaW50SXRlbXMtPm91dHB1dHMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb21wdXRlU3RydWN0dXJlRGVmaW5p
dGlvbiA9IFtdKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKSAtPiBBU1Q6OlN0cnVjdHVy
ZURlZmluaXRpb24qIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9
IHVubmFtZWRUeXBlLnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFp
czxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIG5hbWVkVHlw
ZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gJmRvd25jYXN0PEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4obmFt
ZWRUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKHZhcmlhYmxlTmFtZSwgJy4nLCBtX21ldGFs
T3V0cHV0TmFtZXNbaV0sICc9JykpOworICAgICAgICAgICAgICAgICAgICBBU1Q6OlN0cnVjdHVy
ZURlZmluaXRpb24qIHN0cnVjdHVyZURlZmluaXRpb24gPSBjb21wdXRlU3RydWN0dXJlRGVmaW5p
dGlvbigqbV9lbnRyeVBvaW50UmV0dXJuVHlwZSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qg
aiA9IDA7IGogPCBtX2VudHJ5UG9pbnRJdGVtcy0+b3V0cHV0c1tpXS5wYXRoLnNpemUoKTsgKytq
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvKiBzdHJ1Y3R1cmVFbGVtZW50ID0gc3Ry
dWN0dXJlRGVmaW5pdGlvbi0+ZmluZChtX2VudHJ5UG9pbnRJdGVtcy0+b3V0cHV0c1tpXS5wYXRo
W2pdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmVFbGVtZW50KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaikKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCcuJyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yU3RydWN0
dXJlRWxlbWVudCgqc3RydWN0dXJlRWxlbWVudCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
c3RydWN0dXJlRGVmaW5pdGlvbiA9IGNvbXB1dGVTdHJ1Y3R1cmVEZWZpbml0aW9uKHN0cnVjdHVy
ZUVsZW1lbnQtPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiO1xuIik7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygicmV0dXJu
ICIsIHZhcmlhYmxlTmFtZSwgIjtcbiIpKTsKKyAgICAgICAgICAgIH0qLworCit9CisKK30KKwor
fQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjFhYTJkYTNiYzRlY2E0ODBjMjUyZTYzZWU2YTFiY2E4NjI5NTEwMWMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIEZ1bmN0
aW9uRGVmaW5pdGlvbjsKKworfQorCitjbGFzcyBJbnRyaW5zaWNzOworCituYW1lc3BhY2UgTWV0
YWwgeworCisvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBrbm93IGFib3V0IHRoZSBwaXBlbGluZSBz
dGF0ZSBvYmplY3QgdG8gZW1pdCBmdW5jdGlvbiBwcm9sb2d1ZXMgYW5kIGVwaWxvZ3Vlcy4KK2Ns
YXNzIEVudHJ5UG9pbnRTY2FmZm9sZGluZyB7CitwdWJsaWM6CisgICAgRW50cnlQb2ludFNjYWZm
b2xkaW5nKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiwgSW50cmluc2ljcyYpOworCisgICAgU3Ry
aW5nIGhlbHBlclR5cGVzKCk7CisgICAgU3RyaW5nIHNpZ25hdHVyZSgpOworICAgIFN0cmluZyB1
bnBhY2soKTsKKyAgICBTdHJpbmcgcGFjayhjb25zdCBTdHJpbmcmIHZhcmlhYmxlTmFtZSk7CisK
K3ByaXZhdGU6CisgICAgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24qIG1fZnVuY3Rpb25EZWZpbml0
aW9uOworICAgIEludHJpbnNpY3MqIG1faW50cmluc2ljczsKK307CisKK30KKworfQorCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
TWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YTA5
MTYwMjBkYjlhOWIxYjBiZjI3MmNjMGViYWM5NjIyMDVkODlkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldy
aXRlci5jcHAKQEAgLTAsMCArMSw2MjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbldyaXRlci5oIgorCisjaWYgRU5BQkxFKFdFQkdQ
VSkKKworI2luY2x1ZGUgIldITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgiCisjaW5jbHVkZSAiV0hM
U0xBcnJheVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgiCisj
aW5jbHVkZSAiV0hMU0xCb29sZWFuTGl0ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMQnVpbHRJblNl
bWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xDYWxsRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldI
TFNMQ29tbWFFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xEZXJlZmVyZW5jZUV4cHJlc3Np
b24uaCIKKyNpbmNsdWRlICJXSExTTERvV2hpbGVMb29wLmgiCisjaW5jbHVkZSAiV0hMU0xFZmZl
Y3RmdWxFeHByZXNzaW9uU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xFbnRyeVBvaW50U2Nh
ZmZvbGRpbmcuaCIKKyNpbmNsdWRlICJXSExTTEVudHJ5UG9pbnRUeXBlLmgiCisjaW5jbHVkZSAi
V0hMU0xGbG9hdExpdGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTEZvckxvb3AuaCIKKyNpbmNsdWRl
ICJXSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVm
aW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMSWZTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExT
TEludGVnZXJMaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xMb2dpY2FsRXhwcmVzc2lvbi5oIgor
I2luY2x1ZGUgIldITFNMTG9naWNhbE5vdEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTE1h
a2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTE1ha2VQb2ludGVy
RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5o
IgorI2luY2x1ZGUgIldITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuaCIKKyNpbmNsdWRlICJXSExT
TE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMUG9pbnRlclR5cGUuaCIK
KyNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXSExTTFJldHVybi5oIgorI2lu
Y2x1ZGUgIldITFNMU3dpdGNoQ2FzZS5oIgorI2luY2x1ZGUgIldITFNMU3dpdGNoU3RhdGVtZW50
LmgiCisjaW5jbHVkZSAiV0hMU0xUZXJuYXJ5RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNM
VHlwZU5hbWVyLmgiCisjaW5jbHVkZSAiV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmgiCisj
aW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJp
YWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVSZWZl
cmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIKKyNpbmNsdWRlICJXSExTTFdoaWxl
TG9vcC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7
CisKK25hbWVzcGFjZSBNZXRhbCB7CisKK2NsYXNzIEZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXIg
OiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbldyaXRl
cihUeXBlTmFtZXImIHR5cGVOYW1lciwgSGFzaE1hcDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24q
LCBTdHJpbmc+JiBmdW5jdGlvbk1hcHBpbmcpCisgICAgICAgIDogbV90eXBlTmFtZXIodHlwZU5h
bWVyKQorICAgICAgICAsIG1fZnVuY3Rpb25NYXBwaW5nKGZ1bmN0aW9uTWFwcGluZykKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCB+RnVuY3Rpb25EZWNsYXJhdGlvbldyaXRlcigpID0gZGVm
YXVsdDsKKworICAgIFN0cmluZyB0b1N0cmluZygpIHsgcmV0dXJuIG1fc3RyaW5nQnVpbGRlci50
b1N0cmluZygpOyB9CisgICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGZ1
bmN0aW9uRGVjbGFyYXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIGl0ZXJhdG9y
ID0gbV9mdW5jdGlvbk1hcHBpbmcuZmluZCgmZnVuY3Rpb25EZWNsYXJhdGlvbik7CisgICAgICAg
IEFTU0VSVChpdGVyYXRvciAhPSBtX2Z1bmN0aW9uTWFwcGluZy5lbmQoKSk7CisgICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoZnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpLCAnICcsIGl0ZXJhdG9yLT52YWx1ZSwg
JygnKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpKQorICAgICAg
ICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiwgIik7CisgICAgICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqZnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlwZSgpKSk7CisgICAgICAgIH0KKyAgICAg
ICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKTtcbiIpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBUeXBlTmFtZXImIG1fdHlwZU5hbWVyOworICAgIEhhc2hNYXA8QVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKiwgU3RyaW5nPiYgbV9mdW5jdGlvbk1hcHBpbmc7CisgICAgU3RyaW5nQnVpbGRlciBt
X3N0cmluZ0J1aWxkZXI7Cit9OworCitjbGFzcyBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIgOiBw
dWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKElu
dHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyLCBIYXNoTWFwPEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbiosIFN0cmluZz4mIGZ1bmN0aW9uTWFwcGluZykKKyAgICAgICAg
OiBtX2ludHJpbnNpY3MoaW50cmluc2ljcykKKyAgICAgICAgLCBtX3R5cGVOYW1lcih0eXBlTmFt
ZXIpCisgICAgICAgICwgbV9mdW5jdGlvbk1hcHBpbmcoZnVuY3Rpb25NYXBwaW5nKQorICAgIHsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIH5GdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIoKSA9IGRlZmF1
bHQ7CisKKyAgICBTdHJpbmcgdG9TdHJpbmcoKSB7IHJldHVybiBtX3N0cmluZ0J1aWxkZXIudG9T
dHJpbmcoKTsgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBh
dXRvIGl0ZXJhdG9yID0gbV9mdW5jdGlvbk1hcHBpbmcuZmluZCgmbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbik7CisgICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX2Z1bmN0aW9uTWFwcGluZy5l
bmQoKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQod3JpdGVOYXRpdmVGdW5jdGlv
bihuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLCBpdGVyYXRvci0+dmFsdWUsIG1fdHlwZU5hbWVy
KSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVu
Y3Rpb25EZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9
IG1fZnVuY3Rpb25NYXBwaW5nLmZpbmQoJmZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAgICAgIEFT
U0VSVChpdGVyYXRvciAhPSBtX2Z1bmN0aW9uTWFwcGluZy5lbmQoKSk7CisgICAgICAgIGlmIChm
dW5jdGlvbkRlZmluaXRpb24uZW50cnlQb2ludFR5cGUoKSkgeworICAgICAgICAgICAgbV9lbnRy
eVBvaW50U2NhZmZvbGRpbmcgPSBFbnRyeVBvaW50U2NhZmZvbGRpbmcoZnVuY3Rpb25EZWZpbml0
aW9uLCBtX2ludHJpbnNpY3MpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCht
X2VudHJ5UG9pbnRTY2FmZm9sZGluZy0+aGVscGVyVHlwZXMoKSk7CisgICAgICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKG1fZW50cnlQb2ludFNjYWZmb2xkaW5nLT5zaWduYXR1cmUoKSwgIiB7
IikpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtX2VudHJ5UG9pbnRTY2Fm
Zm9sZGluZy0+dW5wYWNrKCkpOworICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0
aW9uRGVmaW5pdGlvbi5ibG9jaygpKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQoIn1cbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9lbnRyeVBvaW50U2Nh
ZmZvbGRpbmcgPSBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGZ1bmN0aW9uRGVm
aW5pdGlvbi50eXBlKCkpLCAnICcsIGl0ZXJhdG9yLT52YWx1ZSwgJygnKSk7CisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCku
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBwYXJhbWV0ZXIgPSBmdW5jdGlv
bkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ldOworICAgICAgICAgICAgICAgIGlmIChpKQorICAg
ICAgICAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIsICIpOworICAgICAgICAg
ICAgICAgIGF1dG8gcGFyYW1ldGVyTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwor
ICAgICAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV92YXJpYWJsZU1hcHBpbmcuYWRkKCZw
YXJhbWV0ZXIsIHBhcmFtZXRlck5hbWUpOworICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQo
YWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgICAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZSgqcGFyYW1ldGVyLnR5cGUoKSksICcgJywgcGFyYW1ldGVyTmFtZSkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKSB7XG4iKTsKKyAgICAgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24uYmxvY2soKSk7CisgICAg
ICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAgICAgfQorICAgIH0K
KworcHJpdmF0ZToKKyAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYpIG92
ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6U3RhdGVtZW50JiBzdGF0ZW1lbnQpIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBWaXNpdG9yOjp2aXNpdChzdGF0ZW1lbnQpOworICAgIH0KKworICAgIHZvaWQgdmlz
aXQoQVNUOjpCbG9jayYgYmxvY2spIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKCJ7XG4iKTsKKyAgICAgICAgZm9yIChhdXRvJiBzdGF0ZW1lbnQgOiBibG9j
ay5zdGF0ZW1lbnRzKCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGVtZW50
KTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgfQorCisgICAg
dm9pZCB2aXNpdChBU1Q6OkJyZWFrJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fc3RyaW5n
QnVpbGRlci5hcHBlbmQoImJyZWFrO1xuIik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6
OkNvbnRpbnVlJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0
IHdoaWNoIGxvb3Agd2UncmUgaW4sIGFuZCBydW4gdGhlIGluY3JlbWVudCBjb2RlCisgICAgICAg
IENSQVNIKCk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkRvV2hpbGVMb29wJiBkb1do
aWxlTG9vcCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
ImRvIHtcbiIpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG9XaGlsZUxvb3AuYm9keSgp
KTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvV2hpbGVMb29wLmNvbmRpdGlvbmFsKCkp
OworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICghIiwgbV9z
dGFjay50YWtlTGFzdCgpLCAiKSBicmVhaztcbiIpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKCJ9IHdoaWxlKHRydWUpO1xuIikpOworICAgIH0KKworICAgIHZv
aWQgdmlzaXQoQVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50JiBlZmZlY3RmdWxFeHBy
ZXNzaW9uU3RhdGVtZW50KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQuZWZmZWN0ZnVsRXhwcmVzc2lvbigpKTsK
KyAgICAgICAgbV9zdGFjay50YWtlTGFzdCgpOyAvLyBUaGUgc3RhdGVtZW50IGlzIGFscmVhZHkg
ZWZmZWN0ZnVsLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3Vs
dC4KKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RmFsbHRocm91Z2gmKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiW1tjbGFuZzo6ZmFsbHRocm91
Z2hdXTtcbiIpOyAvLyBGSVhNRTogTWFrZSBzdXJlIHRoaXMgaXMgb2theS4gQWx0ZXJuYXRpdmVs
eSwgd2UgY291bGQgZG8gdGhpbmcgYW5kIGp1c3QgcmV0dXJuIGhlcmUgaW5zdGVhZC4KKyAgICB9
CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9vcCkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uc1N0YXRlbWVudCYgdmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpIHsKKyAg
ICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVu
dCk7CisgICAgICAgIH0sIFsmXShVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYgZXhwcmVzc2lv
bikgeworICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGV4cHJlc3Npb24pOworICAgICAg
ICAgICAgbV9zdGFjay50YWtlTGFzdCgpOyAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5n
IHdpdGggdGhlIHJlc3VsdC4KKyAgICAgICAgfSksIGZvckxvb3AuaW5pdGlhbGl6YXRpb24oKSk7
CisKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiZm9yICggOyA7ICkge1xuIik7Cisg
ICAgICAgIGlmIChmb3JMb29wLmNvbmRpdGlvbigpKSB7CisgICAgICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoKmZvckxvb3AuY29uZGl0aW9uKCkpOworICAgICAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJpZiAoISIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIikgYnJl
YWs7XG4iKSk7CisgICAgICAgIH0KKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZvckxvb3Au
Ym9keSgpKTsKKyAgICAgICAgaWYgKGZvckxvb3AuaW5jcmVtZW50KCkpCisgICAgICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQoKmZvckxvb3AuaW5jcmVtZW50KCkpOworICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6SWZT
dGF0ZW1lbnQmIGlmU3RhdGVtZW50KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGlmU3RhdGVtZW50LmNvbmRpdGlvbmFsKCkpOworICAgICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICgiLCBtX3N0YWNrLnRha2VMYXN0KCksICIpIHtc
biIpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGlmU3RhdGVtZW50LmJvZHkoKSk7Cisg
ICAgICAgIGlmIChpZlN0YXRlbWVudC5lbHNlQm9keSgpKSB7CisgICAgICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKCJ9IGVsc2Uge1xuIik7CisgICAgICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoKmlmU3RhdGVtZW50LmVsc2VCb2R5KCkpOworICAgICAgICB9CisgICAgICAgIG1fc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpS
ZXR1cm4mIHJldHVyblN0YXRlbWVudCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChyZXR1
cm5TdGF0ZW1lbnQudmFsdWUoKSkgeworICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpy
ZXR1cm5TdGF0ZW1lbnQudmFsdWUoKSk7CisgICAgICAgICAgICBpZiAobV9lbnRyeVBvaW50U2Nh
ZmZvbGRpbmcpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRl
TmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQobV9lbnRyeVBvaW50U2NhZmZvbGRpbmctPnBhY2sodmFyaWFibGVOYW1lKSk7CisgICAgICAg
ICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJyZXR1cm4gIiwgdmFy
aWFibGVOYW1lLCAiO1xuIikpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJyZXR1cm4gIiwgbV9zdGFjay50YWtl
TGFzdCgpLCAiO1xuIikpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fc3RyaW5nQnVp
bGRlci5hcHBlbmQoInJldHVybjtcbiIpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpT
d2l0Y2hTdGF0ZW1lbnQmIHN3aXRjaFN0YXRlbWVudCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChzd2l0Y2hTdGF0ZW1lbnQudmFsdWUoKSk7CisKKyAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJzd2l0Y2ggKCIsIG1fc3RhY2sudGFr
ZUxhc3QoKSwgIikgeyIpKTsKKyAgICAgICAgZm9yIChhdXRvJiBzd2l0Y2hDYXNlIDogc3dpdGNo
U3RhdGVtZW50LnN3aXRjaENhc2VzKCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
c3dpdGNoQ2FzZSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAg
IH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgaWYgKHN3aXRjaENhc2UudmFsdWUoKSkKKyAgICAgICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiY2FzZSAiLCBjb25zdGFudEV4cHJlc3Np
b25TdHJpbmcoKnN3aXRjaENhc2UudmFsdWUoKSksICI6XG4iKSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoImRlZmF1bHQ6XG4iKTsKKyAgICAgICAg
Ly8gRklYTUU6IEZpZ3VyZSBvdXQgd2hldGhlciB3ZSBuZWVkIHRvIGJyZWFrIG9yIGZhbGx0aHJv
dWdoLgorICAgICAgICBDUkFTSCgpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3dpdGNo
Q2FzZS5ibG9jaygpKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHJhcCYpIG92ZXJy
aWRlCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKKyAgICAgICAgQ1JB
U0goKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNT
dGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgVmlzaXRvcjo6dmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpOwor
ICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxlTG9vcCkgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygid2hp
bGUgKHRydWUpIHtcbiIpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5j
b25kaXRpb25hbCgpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KCJpZiAoISIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIikgYnJlYWs7XG4iKSk7CisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuYm9keSgpKTsKKyAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZCgifVxuIik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkludGVnZXJM
aXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChp
bnRlZ2VyTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIGF1dG8gdmFyaWFibGVOYW1l
ID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAgIGF1dG8gbWFuZ2xlZFR5cGVO
YW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCppbnRlZ2VyTGl0ZXJhbC5yZXNv
bHZlZFR5cGUoKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyht
YW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0gc3RhdGljX2Nhc3Q8IiwgbWFu
Z2xlZFR5cGVOYW1lLCAiPigiLCBpbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpLCAiKTtcbiIpKTsKKyAg
ICAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVCh1bnNpZ25lZEludGVnZXJMaXRlcmFsLnJl
c29sdmVkVHlwZSgpKTsKKyAgICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRW
YXJpYWJsZU5hbWUoKTsKKyAgICAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUoKnVuc2lnbmVkSW50ZWdlckxpdGVyYWwucmVzb2x2ZWRUeXBl
KCkpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5
cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHN0YXRpY19jYXN0PCIsIG1hbmdsZWRUeXBl
TmFtZSwgIj4oIiwgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpLCAiKTtcbiIpKTsKKyAg
ICAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6RmxvYXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBBU1NFUlQoZmxvYXRMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgYXV0byB2
YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAgICAgYXV0byBt
YW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmZsb2F0TGl0
ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0gc3RhdGljX2Nh
c3Q8IiwgbWFuZ2xlZFR5cGVOYW1lLCAiPigiLCBmbG9hdExpdGVyYWwudmFsdWUoKSwgIik7XG4i
KSk7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgfQorCisgICAg
dm9pZCB2aXNpdChBU1Q6Ok51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIEFTU0VSVChudWxsTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIGF1
dG8mIHVuaWZ5Tm9kZSA9IG51bGxMaXRlcmFsLnJlc29sdmVkVHlwZSgpLT51bmlmeU5vZGUoKTsK
KyAgICAgICAgQVNTRVJUKGlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpOworICAgICAg
ICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9k
ZSk7CisgICAgICAgIGJvb2wgaXNBcnJheVJlZmVyZW5jZVR5cGUgPSBpczxBU1Q6OkFycmF5UmVm
ZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpOworCisgICAgICAgIGF1dG8gdmFyaWFibGVOYW1lID0g
Z2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm51bGxMaXRlcmFs
LnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSAiKSk7CisgICAgICAgIGlm
IChpc0FycmF5UmVmZXJlbmNlVHlwZSkKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQoInsgbnVsbHB0ciwgMCB9Iik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fc3RyaW5n
QnVpbGRlci5hcHBlbmQoIm51bGxwdHIiKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZCgiO1xuIik7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgfQor
CisgICAgdm9pZCB2aXNpdChBU1Q6OkJvb2xlYW5MaXRlcmFsJiBib29sZWFuTGl0ZXJhbCkgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChib29sZWFuTGl0ZXJhbC5yZXNvbHZlZFR5cGUo
KSk7CisgICAgICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1l
KCk7CisgICAgICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5h
bWVGb3JUeXBlKCpib29sZWFuTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIG1fc3Ry
aW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFi
bGVOYW1lLCAiID0gc3RhdGljX2Nhc3Q8IiwgbWFuZ2xlZFR5cGVOYW1lLCAiPigiLCBib29sZWFu
TGl0ZXJhbC52YWx1ZSgpID8gInRydWUiIDogImZhbHNlIiwgIik7XG4iKSk7CisgICAgICAgIG1f
c3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6
OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYgZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5yZXNv
bHZlZFR5cGUoKSk7CisgICAgICAgIEFTU0VSVChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51
bWVyYXRpb25EZWZpbml0aW9uKCkpOworICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25NZW1iZXJM
aXRlcmFsLmVudW1lcmF0aW9uRGVmaW5pdGlvbigpKTsKKyAgICAgICAgYXV0byB2YXJpYWJsZU5h
bWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAgICAgYXV0byBtYW5nbGVkVHlw
ZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmVudW1lcmF0aW9uTWVtYmVy
TGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0gIiwgbWFu
Z2xlZFR5cGVOYW1lLCAnLicsIG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yRW51bWVyYXRpb25N
ZW1iZXIoKmVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbk1lbWJlcigpKSwgIjtc
biIpKTsKKyAgICAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KGV4cHJlc3Npb24pOworICAgIH0KKworICAgIHZvaWQg
dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIC8vIFRo
aXMgc2hvdWxkIGJlIGxvd2VyZWQgYWxyZWFkeS4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkluZGV4RXhwcmVzc2lvbiYpIG92ZXJy
aWRlCisgICAgeworICAgICAgICAvLyBUaGlzIHNob3VsZCBiZSBsb3dlcmVkIGFscmVhZHkuCisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNU
OjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBBU1NFUlQodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOworICAgICAgICBpZiAodmFyaWFi
bGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKQorICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KCp2YXJpYWJsZURlY2xhcmF0aW9uLmluaXRpYWxpemVyKCkpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBaZXJvLWZpbGwgdGhlIHZhcmlhYmxlLgorICAgICAgICAg
ICAgQ1JBU0goKTsKKyAgICAgICAgfQorICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHF1YWxp
ZmllcnMuCisgICAgICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVO
YW1lKCk7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV92YXJpYWJsZU1hcHBpbmcuYWRkKCZ2
YXJpYWJsZURlY2xhcmF0aW9uLCB2YXJpYWJsZU5hbWUpOworICAgICAgICBBU1NFUlRfVU5VU0VE
KGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCp2YXJp
YWJsZURlY2xhcmF0aW9uLnR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gIiwgbV9zdGFj
ay50YWtlTGFzdCgpLCAiO1xuIikpOworICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5h
bWUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYg
YXNzaWdubWVudEV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpKTsKKyAgICAgICAgYXV0byBsZWZ0
TmFtZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFz
c2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOworICAgICAgICBhdXRvIHJpZ2h0TmFtZSA9IG1f
c3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKGxlZnROYW1lLCAiID0gIiwgcmlnaHROYW1lLCAiO1xuIikpOworICAgIH0KKworICAgIHZv
aWQgdmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJlc3Npb24pIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBhcmd1bWVudE5hbWVzOworICAgICAgICBmb3Ig
KGF1dG8mIGFyZ3VtZW50IDogY2FsbEV4cHJlc3Npb24uYXJndW1lbnRzKCkpIHsKKyAgICAgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhcmd1bWVudCk7CisgICAgICAgICAgICBhcmd1bWVudE5h
bWVzLmFwcGVuZChtX3N0YWNrLnRha2VMYXN0KCkpOworICAgICAgICB9CisgICAgICAgIEFTU0VS
VChjYWxsRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIEFTU0VSVChjYWxsRXhw
cmVzc2lvbi5mdW5jdGlvbigpKTsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fZnVuY3Rpb25N
YXBwaW5nLmZpbmQoY2FsbEV4cHJlc3Npb24uZnVuY3Rpb24oKSk7CisgICAgICAgIEFTU0VSVChp
dGVyYXRvciAhPSBtX2Z1bmN0aW9uTWFwcGluZy5lbmQoKSk7CisgICAgICAgIGF1dG8gdmFyaWFi
bGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAgIG1fc3RyaW5nQnVp
bGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmNh
bGxFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSAiLCBp
dGVyYXRvci0+dmFsdWUsICcoJykpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFy
Z3VtZW50TmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpKQorICAgICAgICAg
ICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiwgIik7CisgICAgICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKGFyZ3VtZW50TmFtZXNbaV0pOworICAgICAgICB9CisgICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQoIik7XG4iKTsKKyAgICAgICAgbV9zdGFjay5hcHBlbmQodmFy
aWFibGVOYW1lKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6Q29tbWFFeHByZXNzaW9u
JiBjb21tYUV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBTdHJpbmcgcmVzdWx0
OworICAgICAgICBmb3IgKGF1dG8mIGV4cHJlc3Npb24gOiBjb21tYUV4cHJlc3Npb24ubGlzdCgp
KSB7CisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZXhwcmVzc2lvbik7CisgICAgICAg
ICAgICByZXN1bHQgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIH0KKyAgICAgICAgbV9z
dGFjay5hcHBlbmQocmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RGVyZWZl
cmVuY2VFeHByZXNzaW9uJiBkZXJlZmVyZW5jZUV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZGVyZWZlcmVuY2VFeHByZXNzaW9uLnBvaW50ZXIo
KSk7CisgICAgICAgIGF1dG8gcmlnaHQgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIEFT
U0VSVChkZXJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBhdXRv
IHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKCpkZXJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxl
TmFtZSwgIiA9ICoiLCByaWdodCwgIjtcbiIpKTsKKyAgICAgICAgbV9zdGFjay5hcHBlbmQodmFy
aWFibGVOYW1lKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6TG9naWNhbEV4cHJlc3Np
b24mIGxvZ2ljYWxFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGxvZ2ljYWxFeHByZXNzaW9uLmxlZnQoKSk7CisgICAgICAgIGF1dG8gbGVmdCA9
IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGxvZ2ljYWxF
eHByZXNzaW9uLnJpZ2h0KCkpOworICAgICAgICBhdXRvIHJpZ2h0ID0gbV9zdGFjay50YWtlTGFz
dCgpOworICAgICAgICBBU1NFUlQobG9naWNhbEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOwor
ICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwor
ICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCpsb2dpY2FsRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywg
dmFyaWFibGVOYW1lLCAiID0gIiwgbGVmdCwgJyAnKSk7CisgICAgICAgIHN3aXRjaCAobG9naWNh
bEV4cHJlc3Npb24udHlwZSgpKSB7CisgICAgICAgIGNhc2UgQVNUOjpMb2dpY2FsRXhwcmVzc2lv
bjo6VHlwZTo6QW5kOgorICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiJiYiKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJU
KGxvZ2ljYWxFeHByZXNzaW9uLnR5cGUoKSA9PSBBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uOjpUeXBl
OjpPcik7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ8fCIpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKCcgJywgcmlnaHQsICI7XG4iKSk7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHZh
cmlhYmxlTmFtZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHBy
ZXNzaW9uJiBsb2dpY2FsTm90RXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChsb2dpY2FsTm90RXhwcmVzc2lvbi5vcGVyYW5kKCkpOworICAgICAg
ICBhdXRvIG9wZXJhbmQgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIEFTU0VSVChsb2dp
Y2FsTm90RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIGF1dG8gdmFyaWFibGVO
YW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmxvZ2lj
YWxOb3RFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSAh
Iiwgb3BlcmFuZCwgIjtcbiIpKTsKKyAgICAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1l
KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVz
c2lvbiYgbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxWYWx1
ZSgpKTsKKyAgICAgICAgYXV0byBsVmFsdWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAg
IEFTU0VSVChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAg
ICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAg
ICAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5
cGUoKm1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOworICAgICAg
ICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4oKm1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24u
cmVzb2x2ZWRUeXBlKCkpKQorICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSB7ICIsIGxWYWx1
ZSwgIiwgMSB9O1xuIikpOworICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkFycmF5VHlwZT4oKm1h
a2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpKSB7CisgICAgICAgICAg
ICBhdXRvJiBhcnJheVR5cGUgPSBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4oKm1ha2VBcnJheVJl
ZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICAgICAgbV9zdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5h
bWUsICIgPSB7ICYoIiwgbFZhbHVlLCAiWzBdKSwgIiwgYXJyYXlUeXBlLm51bUVsZW1lbnRzKCks
ICIgfTtcbiIpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9
IHsgJiIsIGxWYWx1ZSwgIiwgMSB9O1xuIikpOworICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJp
YWJsZU5hbWUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHJl
c3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgICAg
ICBhdXRvIGxWYWx1ZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgQVNTRVJUKG1ha2VQ
b2ludGVyRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIGF1dG8gdmFyaWFibGVO
YW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm1ha2VQ
b2ludGVyRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0g
JiIsIGxWYWx1ZSwgIjtcbiIpKTsKKyAgICAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1l
KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
biYpIG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBUaGlzIHNob3VsZCBiZSBsb3dlcmVkIGFs
cmVhZHkuCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZvaWQg
dmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lvbiYgdGVybmFyeUV4cHJlc3Npb24pIG92ZXJyaWRl
CisgICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodGVybmFyeUV4cHJlc3Npb24ucHJl
ZGljYXRlKCkpOworICAgICAgICBhdXRvIGNoZWNrID0gbV9zdGFjay50YWtlTGFzdCgpOworCisg
ICAgICAgIEFTU0VSVCh0ZXJuYXJ5RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAg
IGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoKnRlcm5hcnlFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJs
ZU5hbWUsICI7XG4iKSk7CisKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKCJpZiAoIiwgY2hlY2ssICIpIHtcbiIpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KHRlcm5hcnlFeHByZXNzaW9uLmJvZHlFeHByZXNzaW9uKCkpOworICAgICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcodmFyaWFibGVOYW1lLCAiID0gIiwgbV9zdGFjay50YWtl
TGFzdCgpLCAiO1xuIikpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9IGVsc2Ug
e1xuIik7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5lbHNl
RXhwcmVzc2lvbigpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KHZhcmlhYmxlTmFtZSwgIiA9ICIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIjtcbiIpKTsKKyAgICAg
ICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgICAgIG1fc3RhY2suYXBwZW5k
KHZhcmlhYmxlTmFtZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlUmVm
ZXJlbmNlJiB2YXJpYWJsZVJlZmVyZW5jZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VS
VCh2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpKTsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9
IG1fdmFyaWFibGVNYXBwaW5nLmZpbmQodmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKSk7Cisg
ICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX3ZhcmlhYmxlTWFwcGluZy5lbmQoKSk7CisgICAg
ICAgIG1fc3RhY2suYXBwZW5kKGl0ZXJhdG9yLT52YWx1ZSk7CisgICAgfQorCisgICAgU3RyaW5n
IGNvbnN0YW50RXhwcmVzc2lvblN0cmluZyhBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYgY29uc3Rh
bnRFeHByZXNzaW9uKQorICAgIHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdDsKKyAgICAgICAgY29u
c3RhbnRFeHByZXNzaW9uLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxp
dGVyYWwmIGludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICByZXN1bHQgPSBtYWtlU3RyaW5n
KCIiLCBpbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpKTsKKyAgICAgICAgfSwgWyZdKEFTVDo6VW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAg
cmVzdWx0ID0gbWFrZVN0cmluZygiIiwgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpKTsK
KyAgICAgICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpIHsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IG1ha2VTdHJpbmcoIiIsIGZsb2F0TGl0ZXJhbC52YWx1ZSgpKTsKKyAg
ICAgICAgfSwgWyZdKEFTVDo6TnVsbExpdGVyYWwmKSB7CisgICAgICAgICAgICByZXN1bHQgPSAi
bnVsbHB0ciJfc3RyOworICAgICAgICB9LCBbJl0oQVNUOjpCb29sZWFuTGl0ZXJhbCYgYm9vbGVh
bkxpdGVyYWwpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGJvb2xlYW5MaXRlcmFsLnZhbHVlKCkg
PyAidHJ1ZSJfc3RyIDogImZhbHNlIl9zdHI7CisgICAgICAgIH0sIFsmXShBU1Q6OkVudW1lcmF0
aW9uTWVtYmVyTGl0ZXJhbCYgZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSB7CisgICAgICAgICAg
ICBBU1NFUlQoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uRGVmaW5pdGlvbigp
KTsKKyAgICAgICAgICAgIEFTU0VSVChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRp
b25EZWZpbml0aW9uKCkpOworICAgICAgICAgICAgcmVzdWx0ID0gbWFrZVN0cmluZyhtX3R5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJh
dGlvbkRlZmluaXRpb24oKSksICcuJywgbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JFbnVtZXJh
dGlvbk1lbWJlcigqZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uTWVtYmVyKCkp
KTsKKyAgICAgICAgfSkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIFN0
cmluZyBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1h
a2VTdHJpbmcoInZhcmlhYmxlIiwgbV92YXJpYWJsZUNvdW50KyspOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBJbnRyaW5zaWNzJiBtX2ludHJpbnNpY3M7CisgICAgVHlwZU5hbWVyJiBtX3R5cGVO
YW1lcjsKKyAgICBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIFN0cmluZz4mIG1f
ZnVuY3Rpb25NYXBwaW5nOworICAgIEhhc2hNYXA8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKiwg
U3RyaW5nPiBtX3ZhcmlhYmxlTWFwcGluZzsKKyAgICBTdHJpbmdCdWlsZGVyIG1fc3RyaW5nQnVp
bGRlcjsKKyAgICBWZWN0b3I8U3RyaW5nPiBtX3N0YWNrOworICAgIE9wdGlvbmFsPEVudHJ5UG9p
bnRTY2FmZm9sZGluZz4gbV9lbnRyeVBvaW50U2NhZmZvbGRpbmc7CisgICAgdW5zaWduZWQgbV92
YXJpYWJsZUNvdW50IHsgMCB9OworfTsKKworU3RyaW5nIG1ldGFsRnVuY3Rpb25zKFByb2dyYW0m
IHByb2dyYW0sIFR5cGVOYW1lciYgdHlwZU5hbWVyKQoreworICAgIFN0cmluZ0J1aWxkZXIgc3Ry
aW5nQnVpbGRlcjsKKworICAgIHVuc2lnbmVkIG51bUZ1bmN0aW9ucyA9IDA7CisgICAgSGFzaE1h
cDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qLCBTdHJpbmc+IGZ1bmN0aW9uTWFwcGluZzsKKyAg
ICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb25zKCkpIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBmdW5jdGlv
bk1hcHBpbmcuYWRkKCZuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLCBtYWtlU3RyaW5nKCJmdW5j
dGlvbiIsIG51bUZ1bmN0aW9ucysrKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0
LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorICAgIGZvciAoYXV0byYgZnVuY3Rpb25E
ZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpIHsKKyAgICAgICAgYXV0
byBhZGRSZXN1bHQgPSBmdW5jdGlvbk1hcHBpbmcuYWRkKCZmdW5jdGlvbkRlZmluaXRpb24sIG1h
a2VTdHJpbmcoImZ1bmN0aW9uIiwgbnVtRnVuY3Rpb25zKyspKTsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB7Cisg
ICAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXIgZnVuY3Rpb25EZWNsYXJhdGlvbldyaXRl
cih0eXBlTmFtZXIsIGZ1bmN0aW9uTWFwcGluZyk7CisgICAgICAgIGZvciAoYXV0byYgbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMo
KSkKKyAgICAgICAgICAgIGZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXIudmlzaXQobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbik7CisgICAgICAgIGZvciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9u
IDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpIHsKKyAgICAgICAgICAgIGlmICghZnVu
Y3Rpb25EZWZpbml0aW9uLT5lbnRyeVBvaW50VHlwZSgpKQorICAgICAgICAgICAgICAgIGZ1bmN0
aW9uRGVjbGFyYXRpb25Xcml0ZXIudmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICAgICAg
fQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChmdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVy
LnRvU3RyaW5nKCkpOworICAgIH0KKworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwor
CisgICAgeworICAgICAgICBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIgZnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyKHByb2dyYW0uaW50cmluc2ljcygpLCB0eXBlTmFtZXIsIGZ1bmN0aW9uTWFwcGlu
Zyk7CisgICAgICAgIGZvciAoYXV0byYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dy
YW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSkKKyAgICAgICAgICAgIGZ1bmN0aW9uRGVm
aW5pdGlvbldyaXRlci52aXNpdChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKTsKKyAgICAgICAg
Zm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlv
bnMoKSkKKyAgICAgICAgICAgIGZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlci52aXNpdChmdW5jdGlv
bkRlZmluaXRpb24pOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChmdW5jdGlvbkRlZmlu
aXRpb25Xcml0ZXIudG9TdHJpbmcoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHN0cmluZ0J1aWxk
ZXIudG9TdHJpbmcoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgTWV0YWwKKworfSAvLyBuYW1lc3Bh
Y2UgV0hMU0wKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25X
cml0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
RnVuY3Rpb25Xcml0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OTYwZTVlNDhkNThjMjRlMzVlNTI4MzgyNDU2
NDcyYjdkMDliNmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5oCkBAIC0wLDAgKzEsNDggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgUHJvZ3JhbTsKKwor
bmFtZXNwYWNlIE1ldGFsIHsKKworY2xhc3MgVHlwZU5hbWVyOworCitTdHJpbmcgbWV0YWxGdW5j
dGlvbnMoUHJvZ3JhbSYsIFR5cGVOYW1lciYpOworCit9CisKK30KKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
TWV0YWxDb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML01ldGFsL1dITFNMTWV0YWxDb2RlR2VuZXJhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMjc3YmU1
ZGRhZTE4Mzk0MmZiNjI2ZmQ1ODUxM2RiZWNkN2ZmNTAzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5l
cmF0b3IuY3BwCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuaCIKKworI2lmIEVOQUJMRShX
RUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEZ1bmN0aW9uV3JpdGVyLmgiCisjaW5jbHVkZSAiV0hM
U0xUeXBlTmFtZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIE1ldGFs
IHsKKworU3RyaW5nIGdlbmVyYXRlTWV0YWxDb2RlKFByb2dyYW0mIHByb2dyYW0pCit7CisgICAg
U3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIv
LyBUaGlzIHdhcyBnZW5lcmF0ZWQgYnkgV2ViS2l0J3MgV0hMU0wgLT4gTVNMIGNvZGUgZ2VuZXJh
dG9yLiBEbyBub3QgZWRpdCFcbiIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcbiIpOwor
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIjaW5jbHVkZSA8bWV0YWxfc3RkbGliPlxuIik7Cisg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiNpbmNsdWRlIDxtZXRhbF9hdG9taWM+XG4iKTsKKyAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiI2luY2x1ZGUgPG1ldGFsX21hdGg+XG4iKTsKKyAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgiI2luY2x1ZGUgPG1ldGFsX3JlbGF0aW9uYWw+XG4iKTsKKyAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiI2luY2x1ZGUgPG1ldGFsX2NvbXB1dGU+XG4iKTsKKyAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiI2luY2x1ZGUgPG1ldGFsX3RleHR1cmU+XG4iKTsKKyAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXG4iKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgi
dXNpbmcgbmFtZXNwYWNlIG1ldGFsO1xuIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIlxu
Iik7CisKKyAgICBUeXBlTmFtZXIgdHlwZU5hbWVyKHByb2dyYW0pOworICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHR5cGVOYW1lci5tZXRhbFR5cGVzKCkpOworICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ldGFsRnVuY3Rpb25zKHByb2dyYW0sIHR5cGVOYW1lcikpOworICAgIHJldHVybiBzdHJp
bmdCdWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRh
bENvZGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01l
dGFsL1dITFNMTWV0YWxDb2RlR2VuZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTA4OGUwMTA0NDk5NDg0
MTEwNzU2NzQzNDc0OTFmNzNkMzZhMjM0ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWV0YWxDb2RlR2VuZXJhdG9yLmgK
QEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFdFQkdQVSkKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFByb2dyYW07CisKK25hbWVz
cGFjZSBNZXRhbCB7CisKKy8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGtub3cgYWJvdXQgdGhlIHBp
cGVsaW5lIHN0YXRlIG9iamVjdCB0byBlbWl0IGZ1bmN0aW9uIHByb2xvZ3VlcyBhbmQgZXBpbG9n
dWVzLgorU3RyaW5nIGdlbmVyYXRlTWV0YWxDb2RlKFByb2dyYW0mKTsKKworfQorCit9CisKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmJmZmVjNjMxYjdhZjczNTA4ZTc4OTM2OGZjYjRjMDdlOWFiODUzZjgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcApAQCAtMCwwICsxLDM5NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1bmN0aW9uV3Jp
dGVyLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xBZGRyZXNzU3Bh
Y2UuaCIKKyNpbmNsdWRlICJXSExTTE5hbWVkVHlwZS5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlTmFtZXIuaCIKKyNpbmNsdWRlICJXSExTTFVubmFt
ZWRUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIE1ldGFsIHsK
Kworc3RhdGljIFN0cmluZyBnZXROYXRpdmVOYW1lKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRU
eXBlLCBUeXBlTmFtZXImIHR5cGVOYW1lcikKK3sKKyAgICBBU1NFUlQoaXM8QVNUOjpOYW1lZFR5
cGU+KHVubmFtZWRUeXBlLnVuaWZ5Tm9kZSgpKSk7CisgICAgYXV0byYgbmFtZWRUeXBlID0gZG93
bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVubmFtZWRUeXBlLnVuaWZ5Tm9kZSgpKTsKKyAgICBBU1NF
UlQoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpOworICAgIGF1dG8m
IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uPihuYW1lZFR5cGUpOworICAgIHJldHVybiB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7Cit9CisKK3N0YXRpYyBTdHJpbmcgbWFwRnVuY3Rpb25O
YW1lKFN0cmluZyYgZnVuY3Rpb25OYW1lKQoreworICAgIGlmIChmdW5jdGlvbk5hbWUgPT0gImRk
eCIpCisgICAgICAgIHJldHVybiAiZGZkeCJfc3RyOworICAgIGlmIChmdW5jdGlvbk5hbWUgPT0g
ImRkeSIpCisgICAgICAgIHJldHVybiAiZGZkeSJfc3RyOworICAgIGlmIChmdW5jdGlvbk5hbWUg
PT0gImFzaW50IikKKyAgICAgICAgcmV0dXJuICJhc190eXBlPGludDMyX3Q+Il9zdHI7CisgICAg
aWYgKGZ1bmN0aW9uTmFtZSA9PSAiYXN1aW50IikKKyAgICAgICAgcmV0dXJuICJhc190eXBlPHVp
bnQzMl90PiJfc3RyOworICAgIGlmIChmdW5jdGlvbk5hbWUgPT0gImFzZmxvYXQiKQorICAgICAg
ICByZXR1cm4gImFzX3R5cGU8ZmxvYXQ+Il9zdHI7CisgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZTsK
K30KKworc3RhdGljIFN0cmluZyBjb252ZXJ0QWRkcmVzc1NwYWNlKEFTVDo6QWRkcmVzc1NwYWNl
IGFkZHJlc3NTcGFjZSkKK3sKKyAgICBzd2l0Y2ggKGFkZHJlc3NTcGFjZSkgeworICAgIGNhc2Ug
QVNUOjpBZGRyZXNzU3BhY2U6OkNvbnN0YW50OgorICAgICAgICByZXR1cm4gImNvbnN0YW50Il9z
dHI7CisgICAgY2FzZSBBU1Q6OkFkZHJlc3NTcGFjZTo6RGV2aWNlOgorICAgICAgICByZXR1cm4g
ImRldmljZSJfc3RyOworICAgIGNhc2UgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZGdyb3VwOgor
ICAgICAgICByZXR1cm4gInRocmVhZGdyb3VwIl9zdHI7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUKGFkZHJlc3NTcGFjZSA9PSBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkKTsKKyAgICAg
ICAgcmV0dXJuICJ0aHJlYWQiX3N0cjsKKyAgICB9Cit9CisKK1N0cmluZyB3cml0ZU5hdGl2ZUZ1
bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbiwgU3RyaW5nJiBvdXRwdXRGdW5jdGlvbk5hbWUsIFR5cGVOYW1lciYgdHlwZU5hbWVy
KQoreworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBpZiAobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5pc0Nhc3QoKSkgeworICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpOworICAgICAgICBhdXRvIG1l
dGFsUGFyYW1ldGVyTmFtZSA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAgYXV0byBtZXRh
bFJldHVybk5hbWUgPSBnZXROYXRpdmVOYW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlw
ZSgpLCB0eXBlTmFtZXIpOworICAgICAgICBpZiAobWV0YWxQYXJhbWV0ZXJOYW1lICE9ICJhdG9t
aWNfaW50Il9zdHIgJiYgbWV0YWxQYXJhbWV0ZXJOYW1lICE9ICJhdG9taWNfdWludCJfc3RyKSB7
CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJu
TmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAi
eCkge1xuIikpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygi
ICAgIHJldHVybiBzdGF0aWNfY2FzdDwiLCBtZXRhbFJldHVybk5hbWUsICI+KHgpO1xuIikpOwor
ICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgICAgICAgICAgcmV0
dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1
bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICJ4KSB7XG4iKSk7CisgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgcmV0dXJuIGF0b21pY19sb2FkX2V4cGxpY2l0KCZ4
LCBtZW1vcnlfb3JkZXJfcmVsYXhlZCk7XG4iKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoIn1cbiIpOworICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAg
IH0KKworICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRo
KCJvcGVyYXRvci4iX3N0cikpIHsKKyAgICAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ubmFtZSgpLmVuZHNXaXRoKCI9Il9zdHIpKSB7CisgICAgICAgICAgICBBU1NFUlQobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIpOworICAgICAgICAg
ICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gZ2V0TmF0aXZlTmFtZSgqbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLCB0eXBlTmFtZXIpOworICAgICAg
ICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gZ2V0TmF0aXZlTmFtZSgqbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpLCB0eXBlTmFtZXIpOworICAg
ICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSBnZXROYXRpdmVOYW1lKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24udHlwZSgpLCB0eXBlTmFtZXIpOworICAgICAgICAgICAgYXV0byBmaWVs
ZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJh
dG9yLiJfc3RyLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkTmFtZS5z
dWJzdHJpbmcoMCwgZmllbGROYW1lLmxlbmd0aCgpIC0gMSk7CisgICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5j
dGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgInYsICIsIG1ldGFsUGFyYW1ldGVy
Mk5hbWUsICIgbikge1xuIikpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZygiICAgIHYuIiwgZmllbGROYW1lLCAiID0gbjtcbiIpKTsKKyAgICAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gdjtcbiIpKTsKKyAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAgICAgICAgIHJldHVybiBz
dHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQobmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpOworICAgICAg
ICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAg
YXV0byBtZXRhbFJldHVybk5hbWUgPSBnZXROYXRpdmVOYW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24udHlwZSgpLCB0eXBlTmFtZXIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywg
bWV0YWxQYXJhbWV0ZXJOYW1lLCAidikge1xuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuIHYuIiwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5uYW1lKCkuc3Vic3RyaW5nKCJvcGVyYXRvci4iX3N0ci5sZW5ndGgoKSksICI7XG4iKSk7Cisg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAgICAgcmV0dXJuIHN0cmlu
Z0J1aWxkZXIudG9TdHJpbmcoKTsKKworICAgIH0KKworICAgIGlmIChuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3JbXSIpIHsKKyAgICAgICAgQVNTRVJUKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKKyAgICAgICAg
YXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gZ2V0TmF0aXZlTmFtZSgqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLCB0eXBlTmFtZXIpOworICAgICAgICBh
dXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS50eXBlKCksIHR5cGVOYW1lcik7CisgICAgICAgIGF1
dG8gbWV0YWxSZXR1cm5OYW1lID0gZ2V0TmF0aXZlTmFtZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1l
dGFsUGFyYW1ldGVyMU5hbWUsICJtLCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIGkpIHtcbiIp
KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiBt
W2ldO1xuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgICAg
IHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgaWYgKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvcltdPSIpIHsKKyAgICAgICAg
QVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAz
KTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gZ2V0TmF0aXZlTmFtZSgqbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLCB0eXBlTmFtZXIp
OworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSBnZXROYXRpdmVOYW1lKCpuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS50eXBlKCksIHR5cGVOYW1lcik7
CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIzTmFtZSA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzJdLnR5cGUoKSwgdHlwZU5hbWVyKTsK
KyAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSBnZXROYXRpdmVOYW1lKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24udHlwZSgpLCB0eXBlTmFtZXIpOworICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5h
bWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIm0sICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUs
ICIgaSwgIiwgbWV0YWxQYXJhbWV0ZXIzTmFtZSwgIiB2KSB7XG4iKSk7CisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICBtW2ldID0gdjtcbiIpKTsKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiBtO1xuIikpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgICAgIHJldHVybiBzdHJpbmdC
dWlsZGVyLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24uaXNPcGVyYXRvcigpKSB7CisgICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMSkgeworICAgICAgICAgICAgYXV0byBvcGVyYXRv
ck5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJh
dG9yIl9zdHIubGVuZ3RoKCkpOworICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUg
PSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsw
XS50eXBlKCksIHR5cGVOYW1lcik7CisgICAgICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9
IGdldE5hdGl2ZU5hbWUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCksIHR5cGVOYW1l
cik7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0
dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1l
LCAieCkge1xuIikpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZygiICAgIHJldHVybiAiLCBvcGVyYXRvck5hbWUsICJ4O1xuIikpOworICAgICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgICAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxk
ZXIudG9TdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7CisgICAgICAgIGF1dG8gb3Bl
cmF0b3JOYW1lID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJv
cGVyYXRvciJfc3RyLmxlbmd0aCgpKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1l
ID0gZ2V0TmF0aXZlTmFtZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClb
MF0udHlwZSgpLCB0eXBlTmFtZXIpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUg
PSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsx
XS50eXBlKCksIHR5cGVOYW1lcik7CisgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gZ2V0
TmF0aXZlTmFtZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSwgdHlwZU5hbWVyKTsK
KyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUs
ICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICJ4LCAi
LCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIHkpIHtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiB4ICIsIG9wZXJhdG9yTmFtZSwgIiB5O1xu
IikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgICAgIHJldHVy
biBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgaWYgKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJjb3MiCisgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ubmFtZSgpID09ICJzaW4iCisgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ubmFtZSgpID09ICJ0YW4iCisgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ubmFtZSgpID09ICJhY29zIgorICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLm5hbWUoKSA9PSAiYXNpbiIKKyAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5uYW1lKCkgPT0gImF0YW4iCisgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpID09ICJjb3NoIgorICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5h
bWUoKSA9PSAic2luaCIKKyAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1l
KCkgPT0gInRhbmgiCisgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgp
ID09ICJjZWlsIgorICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9
PSAiZXhwIgorICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
Zmxvb3IiCisgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJs
b2ciCisgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJyb3Vu
ZCIKKyAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gInRydW5j
IgorICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiZGR4Igor
ICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiZGR5IgorICAg
ICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiaXNub3JtYWwiCisg
ICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJpc2Zpbml0ZSIK
KyAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImlzaW5mIgor
ICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiaXNuYW4iCisg
ICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJhc2ludCIKKyAg
ICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImFzdWludCIKKyAg
ICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImFzZmxvYXQiKSB7
CisgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5z
aXplKCkgPT0gMSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gZ2V0TmF0aXZl
TmFtZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLCB0
eXBlTmFtZXIpOworICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IGdldE5hdGl2ZU5hbWUo
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCksIHR5cGVOYW1lcik7CisgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1
dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICJ4KSB7XG4iKSk7CisgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gIiwgbWFwRnVu
Y3Rpb25OYW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpKSwgIih4KTtcbiIpKTsK
KyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgICAgICByZXR1cm4gc3Ry
aW5nQnVpbGRlci50b1N0cmluZygpOworICAgIH0KKworICAgIGlmIChuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKSA9PSAicG93IiB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5h
bWUoKSA9PSAiYXRhbjIiKSB7CisgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0
ZXIxTmFtZSA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1l
dGVycygpWzBdLnR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRl
cjJOYW1lID0gZ2V0TmF0aXZlTmFtZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKClbMV0udHlwZSgpLCB0eXBlTmFtZXIpOworICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFt
ZSA9IGdldE5hdGl2ZU5hbWUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCksIHR5cGVO
YW1lcik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1
cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1l
LCAieCwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiB5KSB7XG4iKSk7CisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gIiwgbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5uYW1lKCksICIoeCwgeSk7XG4iKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCJ9XG4iKTsKKyAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsK
KyAgICB9CisKKyAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImYx
NnRvZjMyIiB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiZjMydG9mMTYi
KSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcworICAgICAgICBDUkFTSCgpOwor
ICAgIH0KKworICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiQWxs
TWVtb3J5QmFycmllcldpdGhHcm91cFN5bmMiKSB7CisgICAgICAgIEFTU0VSVCghbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpKTsKKyAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQobWFrZVN0cmluZygidm9pZCAiLCBvdXRwdXRGdW5jdGlvbk5hbWUsICIoKSB7
XG4iKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgdGhyZWFkZ3JvdXBfYmFy
cmllcihtZW1fZmxhZ3M6Om1lbV9kZXZpY2UpO1xuIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCIgICAgdGhyZWFkZ3JvdXBfYmFycmllcihtZW1fZmxhZ3M6Om1lbV90aHJlYWRncm91
cCk7XG4iKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICB0aHJlYWRncm91cF9i
YXJyaWVyKG1lbV9mbGFnczo6bWVtX3RleHR1cmUpO1xuIik7CisgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmco
KTsKKyAgICB9CisKKyAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0g
IkRldmljZU1lbW9yeUJhcnJpZXJXaXRoR3JvdXBTeW5jIikgeworICAgICAgICBBU1NFUlQoIW5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSk7CisgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInZvaWQgIiwgb3V0cHV0RnVuY3Rpb25OYW1l
LCAiKCkge1xuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICAgIHRocmVhZGdy
b3VwX2JhcnJpZXIobWVtX2ZsYWdzOjptZW1fZGV2aWNlKTtcbiIpOworICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCk7CisgICAgfQorCisgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgp
ID09ICJHcm91cE1lbW9yeUJhcnJpZXJXaXRoR3JvdXBTeW5jIikgeworICAgICAgICBBU1NFUlQo
IW5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSk7CisgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInZvaWQgIiwgb3V0cHV0RnVuY3Rpb25O
YW1lLCAiKCkge1xuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICAgIHRocmVh
ZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjptZW1fdGhyZWFkZ3JvdXApO1xuIik7CisgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxk
ZXIudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5uYW1lKCkuc3RhcnRzV2l0aCgiSW50ZXJsb2NrZWQiX3N0cikpIHsKKyAgICAgICAgaWYgKG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJJbnRlcmxvY2tlZENvbXBhcmVFeGNo
YW5nZSIpIHsKKyAgICAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKS5zaXplKCkgPT0gNCk7CisgICAgICAgICAgICBBU1NFUlQoaXM8QVNUOjpQb2lu
dGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUo
KSkpOworICAgICAgICAgICAgYXV0byYgZmlyc3RBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxB
U1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClb
MF0udHlwZSgpKTsKKyAgICAgICAgICAgIGF1dG8gZmlyc3RBcmd1bWVudEFkZHJlc3NTcGFjZSA9
IGZpcnN0QXJndW1lbnRQb2ludGVyLmFkZHJlc3NTcGFjZSgpOworICAgICAgICAgICAgYXV0byBm
aXJzdEFyZ3VtZW50UG9pbnRlZSA9IGdldE5hdGl2ZU5hbWUoZmlyc3RBcmd1bWVudFBvaW50ZXIu
ZWxlbWVudFR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAgICAgIGF1dG8gc2Vjb25kQXJndW1l
bnQgPSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KVsxXS50eXBlKCksIHR5cGVOYW1lcik7CisgICAgICAgICAgICBhdXRvIHRoaXJkQXJndW1lbnQg
PSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsy
XS50eXBlKCksIHR5cGVOYW1lcik7CisgICAgICAgICAgICBBU1NFUlQoaXM8QVNUOjpQb2ludGVy
VHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzNdLnR5cGUoKSkp
OworICAgICAgICAgICAgYXV0byYgZm91cnRoQXJndW1lbnRQb2ludGVyID0gZG93bmNhc3Q8QVNU
OjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzNd
LnR5cGUoKSk7CisgICAgICAgICAgICBhdXRvIGZvdXJ0aEFyZ3VtZW50QWRkcmVzc1NwYWNlID0g
Zm91cnRoQXJndW1lbnRQb2ludGVyLmFkZHJlc3NTcGFjZSgpOworICAgICAgICAgICAgYXV0byBm
b3VydGhBcmd1bWVudFBvaW50ZWUgPSBnZXROYXRpdmVOYW1lKGZvdXJ0aEFyZ3VtZW50UG9pbnRl
ci5lbGVtZW50VHlwZSgpLCB0eXBlTmFtZXIpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZygidm9pZCAiLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgY29udmVy
dEFkZHJlc3NTcGFjZShmaXJzdEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwgJyAnLCBmaXJzdEFyZ3Vt
ZW50UG9pbnRlZSwgIiogb2JqZWN0LCAiLCBzZWNvbmRBcmd1bWVudCwgIiBjb21wYXJlLCAiLCB0
aGlyZEFyZ3VtZW50LCAiIGRlc2lyZWQsICIsIGNvbnZlcnRBZGRyZXNzU3BhY2UoZm91cnRoQXJn
dW1lbnRBZGRyZXNzU3BhY2UpLCAnICcsIGZvdXJ0aEFyZ3VtZW50UG9pbnRlZSwgIiogb3V0KSB7
XG4iKSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICAgIGF0b21pY19jb21w
YXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQob2JqZWN0LCAmY29tcGFyZSwgZGVzaXJlZCwgbWVt
b3J5X29yZGVyX3JlbGF4ZWQpO1xuIik7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgiICAgICpvdXQgPSBjb21wYXJlO1xuIik7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCgifVxuIik7CisgICAgICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygp
OworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
cGFyYW1ldGVycygpLnNpemUoKSA9PSAzKTsKKyAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9pbnRl
clR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkp
KTsKKyAgICAgICAgYXV0byYgZmlyc3RBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBv
aW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlw
ZSgpKTsKKyAgICAgICAgYXV0byBmaXJzdEFyZ3VtZW50QWRkcmVzc1NwYWNlID0gZmlyc3RBcmd1
bWVudFBvaW50ZXIuYWRkcmVzc1NwYWNlKCk7CisgICAgICAgIGF1dG8gZmlyc3RBcmd1bWVudFBv
aW50ZWUgPSBnZXROYXRpdmVOYW1lKGZpcnN0QXJndW1lbnRQb2ludGVyLmVsZW1lbnRUeXBlKCks
IHR5cGVOYW1lcik7CisgICAgICAgIGF1dG8gc2Vjb25kQXJndW1lbnQgPSBnZXROYXRpdmVOYW1l
KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS50eXBlKCksIHR5cGVO
YW1lcik7CisgICAgICAgIEFTU0VSVChpczxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0udHlwZSgpKSk7CisgICAgICAgIGF1dG8mIHRo
aXJkQXJndW1lbnRQb2ludGVyID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzJdLnR5cGUoKSk7CisgICAgICAgIGF1dG8g
dGhpcmRBcmd1bWVudEFkZHJlc3NTcGFjZSA9IHRoaXJkQXJndW1lbnRQb2ludGVyLmFkZHJlc3NT
cGFjZSgpOworICAgICAgICBhdXRvIHRoaXJkQXJndW1lbnRQb2ludGVlID0gZ2V0TmF0aXZlTmFt
ZSh0aGlyZEFyZ3VtZW50UG9pbnRlci5lbGVtZW50VHlwZSgpLCB0eXBlTmFtZXIpOworICAgICAg
ICBhdXRvIG5hbWUgPSAoW10oU3RyaW5nIGlucHV0KSAtPiBTdHJpbmcgeworICAgICAgICAgICAg
aWYgKGlucHV0ID09ICJBZGQiKQorICAgICAgICAgICAgICAgIHJldHVybiAiZmV0Y2hfYWRkIl9z
dHI7CisgICAgICAgICAgICBpZiAoaW5wdXQgPT0gIkFuZCIpCisgICAgICAgICAgICAgICAgcmV0
dXJuICJmZXRjaF9hbmQiX3N0cjsKKyAgICAgICAgICAgIGlmIChpbnB1dCA9PSAiRXhjaGFuZ2Ui
KQorICAgICAgICAgICAgICAgIHJldHVybiAiZXhjaGFuZ2UiX3N0cjsKKyAgICAgICAgICAgIGlm
IChpbnB1dCA9PSAiTWF4IikKKyAgICAgICAgICAgICAgICByZXR1cm4gImZldGNoX21heCJfc3Ry
OworICAgICAgICAgICAgaWYgKGlucHV0ID09ICJNaW4iKQorICAgICAgICAgICAgICAgIHJldHVy
biAiZmV0Y2hfbWluIl9zdHI7CisgICAgICAgICAgICBpZiAoaW5wdXQgPT0gIk9yIikKKyAgICAg
ICAgICAgICAgICByZXR1cm4gImZldGNoX29yIl9zdHI7CisgICAgICAgICAgICBBU1NFUlQoaW5w
dXQgPT0gIlhvciIpOworICAgICAgICAgICAgcmV0dXJuICJmZXRjaF94b3IiX3N0cjsKKyAgICAg
ICAgfSkobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJJbnRlcmxv
Y2tlZCJfc3RyLmxlbmd0aCgpKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcoInZvaWQgIiwgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIGNvbnZlcnRBZGRyZXNzU3Bh
Y2UoZmlyc3RBcmd1bWVudEFkZHJlc3NTcGFjZSksICcgJywgZmlyc3RBcmd1bWVudFBvaW50ZWUs
ICIqIG9iamVjdCwgIiwgc2Vjb25kQXJndW1lbnQsICIgb3BlcmFuZCwgIiwgY29udmVydEFkZHJl
c3NTcGFjZSh0aGlyZEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwgJyAnLCB0aGlyZEFyZ3VtZW50UG9p
bnRlZSwgIiogb3V0KSB7XG4iKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcoIiAgICAqb3V0ID0gYXRvbWljX2ZldGNoXyIsIG5hbWUsICJfZXhwbGljaXQob2JqZWN0
LCBvcGVyYW5kLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCk7XG4iKSk7CisgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKTsKKyAgICB9CisKKyAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkg
PT0gIlNhbXBsZSIpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgICAg
ICBDUkFTSCgpOworICAgIH0KKworICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5h
bWUoKSA9PSAiTG9hZCIpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAg
ICAgICBDUkFTSCgpOworICAgIH0KKworICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
Lm5hbWUoKSA9PSAiR2V0RGltZW5zaW9ucyIpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzLgorICAgICAgICBDUkFTSCgpOworICAgIH0KKworICAgIGlmIChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiU2FtcGxlQmlhcyIpIHsKKyAgICAgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0aGlzLgorICAgICAgICBDUkFTSCgpOworICAgIH0KKworICAgIGlmIChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiU2FtcGxlR3JhZCIpIHsKKyAgICAgICAg
Ly8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgICAgICBDUkFTSCgpOworICAgIH0KKworICAg
IGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiU2FtcGxlTGV2ZWwiKSB7
CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICAgICAgQ1JBU0goKTsKKyAg
ICB9CisKKyAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkdhdGhl
ciIpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgICAgICBDUkFTSCgp
OworICAgIH0KKworICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
R2F0aGVyUmVkIikgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgICAg
IENSQVNIKCk7CisgICAgfQorCisgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFt
ZSgpID09ICJTYW1wbGVDbXAiKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4K
KyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5uYW1lKCkgPT0gIlNhbXBsZUNtcExldmVsWmVybyIpIHsKKyAgICAgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0aGlzLgorICAgICAgICBDUkFTSCgpOworICAgIH0KKworICAgIGlmIChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiU3RvcmUiKSB7CisgICAgICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICBpZiAo
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkdhdGhlckFscGhhIikgeworICAg
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgICAgIENSQVNIKCk7CisgICAgfQor
CisgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJHYXRoZXJCbHVl
IikgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgICAgIENSQVNIKCk7
CisgICAgfQorCisgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJH
YXRoZXJDbXAiKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICAgICAg
Q1JBU0goKTsKKyAgICB9CisKKyAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1l
KCkgPT0gIkdhdGhlckNtcFJlZCIpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
LgorICAgICAgICBDUkFTSCgpOworICAgIH0KKworICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKSA9PSAiR2F0aGVyR3JlZW4iKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcy4KKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogQWRk
IGFsbCB0aGUgZnVuY3Rpb25zIHRoYXQgdGhlIGNvbXBpbGVyIGdlbmVyYXRlZC4KKworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgTWV0YWwKKworfSAvLyBuYW1lc3BhY2UgV0hMU0wKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yZTliZDRlM2NiZDZjNjI2MTAxY2QwOGEwYjgyYTVlZmI2ZTY1NWUxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwv
V0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wg
eworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbjsK
KworfQorCituYW1lc3BhY2UgTWV0YWwgeworCitjbGFzcyBUeXBlTmFtZXI7CisKK1N0cmluZyB3
cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYsIFN0cmlu
ZyYgb3V0cHV0RnVuY3Rpb25OYW1lLCBUeXBlTmFtZXImKTsKKworfQorCit9CisKK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bC9XSExTTFR5cGVOYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjMxOGViODY3NmFiZjM4NDBl
ZDEzMjM3ZmQ3YjQ4ZGQyNTE3ZTAwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcApAQCAtMCwwICsx
LDcwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExT
TFR5cGVOYW1lci5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMQWRk
cmVzc1NwYWNlLmgiCisjaW5jbHVkZSAiV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCIKKyNpbmNs
dWRlICJXSExTTEFycmF5VHlwZS5oIgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oIgorI2luY2x1ZGUgIldI
TFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5o
IgorI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNM
VHlwZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKyNpbmNs
dWRlICJXSExTTFZpc2l0b3IuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8ZnVu
Y3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIE1l
dGFsIHsKKworY2xhc3MgQmFzZVR5cGVOYW1lTm9kZSB7CitwdWJsaWM6CisgICAgQmFzZVR5cGVO
YW1lTm9kZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQsIFN0cmluZyYmIG1hbmdsZWROYW1lKQor
ICAgICAgICA6IG1fcGFyZW50KHBhcmVudCkKKyAgICAgICAgLCBtX21hbmdsZWROYW1lKG1hbmds
ZWROYW1lKQorICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+QmFzZVR5cGVOYW1lTm9kZSgpID0g
ZGVmYXVsdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNBcnJheVR5cGVOYW1lTm9kZSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQXJyYXlSZWZlcmVuY2VUeXBlTmFt
ZU5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1BvaW50
ZXJUeXBlTmFtZU5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc1JlZmVyZW5jZVR5cGVOYW1lTm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
VmVjdG9yPFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPj4mIGNoaWxkcmVuKCkgeyByZXR1cm4g
bV9jaGlsZHJlbjsgfQorICAgIHZvaWQgYXBwZW5kKFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2Rl
PiYmIGNoaWxkKQorICAgIHsKKyAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShjaGls
ZCkpOworICAgIH0KKyAgICBCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQoKSB7IHJldHVybiBtX3Bh
cmVudDsgfQorICAgIGNvbnN0IFN0cmluZyYgbWFuZ2xlZE5hbWUoKSBjb25zdCB7IHJldHVybiBt
X21hbmdsZWROYW1lOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxCYXNlVHlw
ZU5hbWVOb2RlPj4gbV9jaGlsZHJlbjsKKyAgICBCYXNlVHlwZU5hbWVOb2RlKiBtX3BhcmVudDsK
KyAgICBTdHJpbmcgbV9tYW5nbGVkTmFtZTsKK307CisKK2NsYXNzIEFycmF5VHlwZU5hbWVOb2Rl
IDogcHVibGljIEJhc2VUeXBlTmFtZU5vZGUgeworcHVibGljOgorICAgIEFycmF5VHlwZU5hbWVO
b2RlKEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVudCwgU3RyaW5nJiYgbWFuZ2xlZE5hbWUsIHVuc2ln
bmVkIG51bUVsZW1lbnRzKQorICAgICAgICA6IEJhc2VUeXBlTmFtZU5vZGUocGFyZW50LCBXVEZN
b3ZlKG1hbmdsZWROYW1lKSkKKyAgICAgICAgLCBtX251bUVsZW1lbnRzKG51bUVsZW1lbnRzKQor
ICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+QXJyYXlUeXBlTmFtZU5vZGUoKSA9IGRlZmF1bHQ7
CisgICAgYm9vbCBpc0FycmF5VHlwZU5hbWVOb2RlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQorICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1F
bGVtZW50czsgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fbnVtRWxlbWVudHM7Cit9Owor
CitjbGFzcyBBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZSA6IHB1YmxpYyBCYXNlVHlwZU5hbWVO
b2RlIHsKK3B1YmxpYzoKKyAgICBBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZShCYXNlVHlwZU5h
bWVOb2RlKiBwYXJlbnQsIFN0cmluZyYmIG1hbmdsZWROYW1lLCBBU1Q6OkFkZHJlc3NTcGFjZSBh
ZGRyZXNzU3BhY2UpCisgICAgICAgIDogQmFzZVR5cGVOYW1lTm9kZShwYXJlbnQsIFdURk1vdmUo
bWFuZ2xlZE5hbWUpKQorICAgICAgICAsIG1fYWRkcmVzc1NwYWNlKGFkZHJlc3NTcGFjZSkKKyAg
ICB7CisgICAgfQorICAgIHZpcnR1YWwgfkFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlKCkgPSBk
ZWZhdWx0OworICAgIGJvb2wgaXNBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICBBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3Bh
Y2UoKSBjb25zdCB7IHJldHVybiBtX2FkZHJlc3NTcGFjZTsgfQorCitwcml2YXRlOgorICAgIEFT
VDo6QWRkcmVzc1NwYWNlIG1fYWRkcmVzc1NwYWNlOworfTsKKworY2xhc3MgUG9pbnRlclR5cGVO
YW1lTm9kZSA6IHB1YmxpYyBCYXNlVHlwZU5hbWVOb2RlIHsKK3B1YmxpYzoKKyAgICBQb2ludGVy
VHlwZU5hbWVOb2RlKEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVudCwgU3RyaW5nJiYgbWFuZ2xlZE5h
bWUsIEFTVDo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSkKKyAgICAgICAgOiBCYXNlVHlwZU5h
bWVOb2RlKHBhcmVudCwgV1RGTW92ZShtYW5nbGVkTmFtZSkpCisgICAgICAgICwgbV9hZGRyZXNz
U3BhY2UoYWRkcmVzc1NwYWNlKQorICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+UG9pbnRlclR5
cGVOYW1lTm9kZSgpID0gZGVmYXVsdDsKKyAgICBib29sIGlzUG9pbnRlclR5cGVOYW1lTm9kZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICBBU1Q6OkFkZHJlc3NTcGFjZSBh
ZGRyZXNzU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2FkZHJlc3NTcGFjZTsgfQorCitwcml2YXRl
OgorICAgIEFTVDo6QWRkcmVzc1NwYWNlIG1fYWRkcmVzc1NwYWNlOworfTsKKworY2xhc3MgUmVm
ZXJlbmNlVHlwZU5hbWVOb2RlIDogcHVibGljIEJhc2VUeXBlTmFtZU5vZGUgeworcHVibGljOgor
ICAgIFJlZmVyZW5jZVR5cGVOYW1lTm9kZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQsIFN0cmlu
ZyYmIG1hbmdsZWROYW1lLCBBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlKQorICAgICAgICA6IEJh
c2VUeXBlTmFtZU5vZGUocGFyZW50LCBXVEZNb3ZlKG1hbmdsZWROYW1lKSkKKyAgICAgICAgLCBt
X25hbWVkVHlwZShuYW1lZFR5cGUpCisgICAgeworICAgIH0KKyAgICB2aXJ0dWFsIH5SZWZlcmVu
Y2VUeXBlTmFtZU5vZGUoKSA9IGRlZmF1bHQ7CisgICAgYm9vbCBpc1JlZmVyZW5jZVR5cGVOYW1l
Tm9kZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICBBU1Q6Ok5hbWVkVHlw
ZSYgbmFtZWRUeXBlKCkgeyByZXR1cm4gbV9uYW1lZFR5cGU7IH0KKworcHJpdmF0ZToKKyAgICBB
U1Q6Ok5hbWVkVHlwZSYgbV9uYW1lZFR5cGU7Cit9OworCit9CisKK30KKworfQorCisjZGVmaW5l
IFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfQkFTRV9UWVBFX05BTUVEX05PREUoVG9WYWx1
ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2Vi
Q29yZTo6V0hMU0w6Ok1ldGFsOjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBp
c1R5cGUoY29uc3QgV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpCYXNlVHlwZU5hbWVOb2RlJiB0eXBl
KSB7IHJldHVybiB0eXBlLnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VO
RCgpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfQkFTRV9UWVBFX05BTUVEX05PREUo
QXJyYXlUeXBlTmFtZU5vZGUsIGlzQXJyYXlUeXBlTmFtZU5vZGUoKSkKKworU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19XSExTTF9CQVNFX1RZUEVfTkFNRURfTk9ERShBcnJheVJlZmVyZW5jZVR5cGVO
YW1lTm9kZSwgaXNBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZSgpKQorCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX1dITFNMX0JBU0VfVFlQRV9OQU1FRF9OT0RFKFBvaW50ZXJUeXBlTmFtZU5vZGUs
IGlzUG9pbnRlclR5cGVOYW1lTm9kZSgpKQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNM
X0JBU0VfVFlQRV9OQU1FRF9OT0RFKFJlZmVyZW5jZVR5cGVOYW1lTm9kZSwgaXNSZWZlcmVuY2VU
eXBlTmFtZU5vZGUoKSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wg
eworCituYW1lc3BhY2UgTWV0YWwgeworCitUeXBlTmFtZXI6OlR5cGVOYW1lcihQcm9ncmFtJiBw
cm9ncmFtKQorICAgIDogbV9wcm9ncmFtKHByb2dyYW0pCit7Cit9CisKK1R5cGVOYW1lcjo6flR5
cGVOYW1lcigpID0gZGVmYXVsdDsKKwordm9pZCBUeXBlTmFtZXI6OnZpc2l0KEFTVDo6VW5uYW1l
ZFR5cGUmIHVubmFtZWRUeXBlKQoreworICAgIGluc2VydCh1bm5hbWVkVHlwZSwgbV90cmllKTsK
K30KKwordm9pZCBUeXBlTmFtZXI6OnZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBl
bnVtZXJhdGlvbkRlZmluaXRpb24pCit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX25hbWVkVHlw
ZU1hcHBpbmcuYWRkKCZlbnVtZXJhdGlvbkRlZmluaXRpb24sIGdlbmVyYXRlTmV4dFR5cGVOYW1l
KCkpOworICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7
CisgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbk1lbWJlciA6IGVudW1lcmF0aW9uRGVmaW5pdGlv
bi5lbnVtZXJhdGlvbk1lbWJlcnMoKSkgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZW51
bWVyYXRpb25NZW1iZXJNYXBwaW5nLmFkZCgmc3RhdGljX2Nhc3Q8QVNUOjpFbnVtZXJhdGlvbk1l
bWJlciY+KGVudW1lcmF0aW9uTWVtYmVyKSwgZ2VuZXJhdGVOZXh0RW51bWVyYXRpb25NZW1iZXJO
YW1lKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3
RW50cnkpOworICAgIH0KKyAgICBWaXNpdG9yOjp2aXNpdChlbnVtZXJhdGlvbkRlZmluaXRpb24p
OworfQorCit2b2lkIFR5cGVOYW1lcjo6dmlzaXQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24m
KQoreworICAgIC8vIE5hdGl2ZSB0eXBlIGRlY2xhcmF0aW9ucyBhbHJlYWR5IGhhdmUgbmFtZXMs
IGFuZCBhcmUgYWxyZWFkeSBkZWNsYXJlZCBpbiBNZXRhbC4KK30KKworc3RhdGljIFZlY3RvcjxV
bmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4+OjppdGVyYXRvciBmaW5kSW5WZWN0b3IoQVNUOjpV
bm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIFZlY3RvcjxVbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9k
ZT4+JiB0eXBlcykKK3sKKyAgICByZXR1cm4gc3RkOjpmaW5kX2lmKHR5cGVzLmJlZ2luKCksIHR5
cGVzLmVuZCgpLCBbJl0oQmFzZVR5cGVOYW1lTm9kZSYgYmFzZVR5cGVOYW1lTm9kZSkgLT4gYm9v
bCB7CisgICAgICAgIGlmIChpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRUeXBlKSAmJiBp
czxSZWZlcmVuY2VUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpKSB7CisgICAgICAgICAg
ICBhdXRvKiByZXNvbHZlZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFt
ZWRUeXBlKS5yZXNvbHZlZFR5cGUoKTsKKyAgICAgICAgICAgIEFTU0VSVChyZXNvbHZlZFR5cGUp
OworICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkVHlwZSA9PSAmZG93bmNhc3Q8UmVmZXJlbmNl
VHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKS5uYW1lZFR5cGUoKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpICYmIGlzPFBvaW50
ZXJUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpKQorICAgICAgICAgICAgcmV0dXJuIGRv
d25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKS5hZGRyZXNzU3BhY2UoKSA9PSBk
b3duY2FzdDxQb2ludGVyVHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKS5hZGRyZXNzU3Bh
Y2UoKTsKKyAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlw
ZSkgJiYgaXM8QXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpKQor
ICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5h
bWVkVHlwZSkuYWRkcmVzc1NwYWNlKCkgPT0gZG93bmNhc3Q8QXJyYXlSZWZlcmVuY2VUeXBlTmFt
ZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpLmFkZHJlc3NTcGFjZSgpOworICAgICAgICBpZiAoaXM8
QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSAmJiBpczxBcnJheVR5cGVOYW1lTm9kZT4oYmFz
ZVR5cGVOYW1lTm9kZSkpCisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8QVNUOjpBcnJheVR5
cGU+KHVubmFtZWRUeXBlKS5udW1FbGVtZW50cygpID09IGRvd25jYXN0PEFycmF5VHlwZU5hbWVO
b2RlPihiYXNlVHlwZU5hbWVOb2RlKS5udW1FbGVtZW50cygpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfSk7Cit9CisKK3N0YXRpYyBCYXNlVHlwZU5hbWVOb2RlJiBmaW5kKEFTVDo6VW5u
YW1lZFR5cGUmIHVubmFtZWRUeXBlLCBWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+
PiYgdHlwZXMpCit7CisgICAgYXV0byYgdmVjdG9yVG9TZWFyY2ggPSAoWyZdKCkgLT4gVmVjdG9y
PFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPj4mIHsKKyAgICAgICAgaWYgKGlzPEFTVDo6VHlw
ZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHR5cGVzOworICAg
ICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAg
cmV0dXJuIGZpbmQoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpLmVsZW1l
bnRUeXBlKCksIHR5cGVzKS5jaGlsZHJlbigpOworICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVJl
ZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiBmaW5kKGRvd25j
YXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKSwg
dHlwZXMpLmNoaWxkcmVuKCk7CisgICAgICAgIEFTU0VSVChpczxBU1Q6OkFycmF5VHlwZT4odW5u
YW1lZFR5cGUpKTsKKyAgICAgICAgcmV0dXJuIGZpbmQoZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+
KHVubmFtZWRUeXBlKS50eXBlKCksIHR5cGVzKS5jaGlsZHJlbigpOworICAgIH0pKCk7CisgICAg
YXV0byBpdGVyYXRvciA9IGZpbmRJblZlY3Rvcih1bm5hbWVkVHlwZSwgdmVjdG9yVG9TZWFyY2gp
OworICAgIEFTU0VSVChpdGVyYXRvciAhPSB0eXBlcy5lbmQoKSk7CisgICAgcmV0dXJuICppdGVy
YXRvcjsKK30KKwordm9pZCBUeXBlTmFtZXI6OnZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlv
biYgc3RydWN0dXJlRGVmaW5pdGlvbikKK3sKKyAgICB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0
ID0gbV9uYW1lZFR5cGVNYXBwaW5nLmFkZCgmc3RydWN0dXJlRGVmaW5pdGlvbiwgZ2VuZXJhdGVO
ZXh0VHlwZU5hbWUoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1
bHQuaXNOZXdFbnRyeSk7CisgICAgfQorICAgIFZpc2l0b3I6OnZpc2l0KHN0cnVjdHVyZURlZmlu
aXRpb24pOworICAgIHsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QmFz
ZVR5cGVOYW1lTm9kZT4+IG5laWdoYm9yczsKKyAgICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVF
bGVtZW50IDogc3RydWN0dXJlRGVmaW5pdGlvbi5zdHJ1Y3R1cmVFbGVtZW50cygpKSB7CisgICAg
ICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fc3RydWN0dXJlRWxlbWVudE1hcHBpbmcuYWRkKCZz
dHJ1Y3R1cmVFbGVtZW50LCBnZW5lcmF0ZU5leHRTdHJ1Y3R1cmVFbGVtZW50TmFtZSgpKTsKKyAg
ICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7
CisgICAgICAgICAgICBuZWlnaGJvcnMuYXBwZW5kKGZpbmQoc3RydWN0dXJlRWxlbWVudC50eXBl
KCksIG1fdHJpZSkpOworICAgICAgICB9CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9kZXBl
bmRlbmN5R3JhcGguYWRkKCZzdHJ1Y3R1cmVEZWZpbml0aW9uLCBXVEZNb3ZlKG5laWdoYm9ycykp
OworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkp
OworICAgIH0KK30KKwordm9pZCBUeXBlTmFtZXI6OnZpc2l0KEFTVDo6VHlwZURlZmluaXRpb24m
IHR5cGVEZWZpbml0aW9uKQoreworICAgIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX25h
bWVkVHlwZU1hcHBpbmcuYWRkKCZ0eXBlRGVmaW5pdGlvbiwgZ2VuZXJhdGVOZXh0VHlwZU5hbWUo
KSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRy
eSk7CisgICAgfQorICAgIFZpc2l0b3I6OnZpc2l0KHR5cGVEZWZpbml0aW9uKTsKKyAgICB7Cisg
ICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEJhc2VUeXBlTmFtZU5vZGU+PiBu
ZWlnaGJvcnMgPSB7IGZpbmQodHlwZURlZmluaXRpb24udHlwZSgpLCBtX3RyaWUpIH07CisgICAg
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9kZXBlbmRlbmN5R3JhcGguYWRkKCZ0eXBlRGVmaW5pdGlv
biwgV1RGTW92ZShuZWlnaGJvcnMpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQs
IGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9Cit9CisKK1N0cmluZyBUeXBlTmFtZXI6Om1h
bmdsZWROYW1lRm9yVHlwZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURl
Y2xhcmF0aW9uKQoreworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJ2
b2lkIikKKyAgICAgICAgcmV0dXJuICJ2b2lkIl9zdHI7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5uYW1lKCkgPT0gImJvb2wiKQorICAgICAgICByZXR1cm4gImJvb2wiX3N0cjsKKyAg
ICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAidWNoYXIiKQorICAgICAgICBy
ZXR1cm4gInVpbnQ4X3QiX3N0cjsKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUo
KSA9PSAidXNob3J0IikKKyAgICAgICAgcmV0dXJuICJ1aW50MTZfdCJfc3RyOworICAgIGlmIChu
YXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJ1aW50IikKKyAgICAgICAgcmV0dXJuICJ1
aW50MzJfdCJfc3RyOworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJj
aGFyIikKKyAgICAgICAgcmV0dXJuICJpbnQ4X3QiX3N0cjsKKyAgICBpZiAobmF0aXZlVHlwZURl
Y2xhcmF0aW9uLm5hbWUoKSA9PSAic2hvcnQiKQorICAgICAgICByZXR1cm4gImludDE2X3QiX3N0
cjsKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiaW50IikKKyAgICAg
ICAgcmV0dXJuICJpbnQzMl90Il9zdHI7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5u
YW1lKCkgPT0gImhhbGYiKQorICAgICAgICByZXR1cm4gImhhbGYiX3N0cjsKKyAgICBpZiAobmF0
aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiZmxvYXQiKQorICAgICAgICByZXR1cm4gImZs
b2F0Il9zdHI7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImF0b21p
Y19pbnQiKQorICAgICAgICByZXR1cm4gImF0b21pY19pbnQiX3N0cjsKKyAgICBpZiAobmF0aXZl
VHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYXRvbWljX3VpbnQiKQorICAgICAgICByZXR1cm4g
ImF0b21pY191aW50Il9zdHI7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkg
PT0gInNhbXBsZXIiKQorICAgICAgICByZXR1cm4gInNhbXBsZXIiX3N0cjsKKyAgICBpZiAobmF0
aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAidmVjdG9yIikgeworICAgICAgICBBU1NFUlQo
bmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMik7CisgICAg
ICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZl
cmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAg
ICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBXVEY6OmdldDxVbmlxdWVSZWY8QVNUOjpUeXBlUmVm
ZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSk7CisgICAg
ICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IHR5cGVSZWZlcmVuY2UtPnVuaWZ5Tm9kZSgpOworICAgICAg
ICBBU1NFUlQoaXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpOworICAgICAgICBhdXRvJiBu
YW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAg
QVNTRVJUKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKTsKKyAgICAg
ICAgYXV0byYgcGFyYW1ldGVyVHlwZSA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uPihuYW1lZFR5cGUpOworICAgICAgICBhdXRvIHByZWZpeCA9IChbJl0oKSAtPiBTdHJpbmcg
eworICAgICAgICAgICAgaWYgKHBhcmFtZXRlclR5cGUubmFtZSgpID09ICJib29sIikKKyAgICAg
ICAgICAgICAgICByZXR1cm4gImJvb2wiOworICAgICAgICAgICAgaWYgKHBhcmFtZXRlclR5cGUu
bmFtZSgpID09ICJ1Y2hhciIpCisgICAgICAgICAgICAgICAgcmV0dXJuICJ1Y2hhciI7CisgICAg
ICAgICAgICBpZiAocGFyYW1ldGVyVHlwZS5uYW1lKCkgPT0gInVzaG9ydCIpCisgICAgICAgICAg
ICAgICAgcmV0dXJuICJ1c2hvcnQiOworICAgICAgICAgICAgaWYgKHBhcmFtZXRlclR5cGUubmFt
ZSgpID09ICJ1aW50IikKKyAgICAgICAgICAgICAgICByZXR1cm4gInVpbnQiOworICAgICAgICAg
ICAgaWYgKHBhcmFtZXRlclR5cGUubmFtZSgpID09ICJjaGFyIikKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gImNoYXIiOworICAgICAgICAgICAgaWYgKHBhcmFtZXRlclR5cGUubmFtZSgpID09ICJz
aG9ydCIpCisgICAgICAgICAgICAgICAgcmV0dXJuICJzaG9ydCI7CisgICAgICAgICAgICBpZiAo
cGFyYW1ldGVyVHlwZS5uYW1lKCkgPT0gImludCIpCisgICAgICAgICAgICAgICAgcmV0dXJuICJp
bnQiOworICAgICAgICAgICAgaWYgKHBhcmFtZXRlclR5cGUubmFtZSgpID09ICJoYWxmIikKKyAg
ICAgICAgICAgICAgICByZXR1cm4gImhhbGYiOworICAgICAgICAgICAgQVNTRVJUKHBhcmFtZXRl
clR5cGUubmFtZSgpID09ICJmbG9hdCIpOworICAgICAgICAgICAgcmV0dXJuICJmbG9hdCI7Cisg
ICAgICAgIH0pKCk7CisgICAgICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6
Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygp
WzFdKSk7CisgICAgICAgIGF1dG8mIGNvbnN0YW50RXhwcmVzc2lvbiA9IFdURjo6Z2V0PEFTVDo6
Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygp
WzBdKTsKKyAgICAgICAgYXV0byYgaW50ZWdlckxpdGVyYWwgPSBjb25zdGFudEV4cHJlc3Npb24u
aW50ZWdlckxpdGVyYWwoKTsKKyAgICAgICAgYXV0byBzdWZmaXggPSAoWyZdKCkgLT4gU3RyaW5n
IHsKKyAgICAgICAgICAgIHN3aXRjaCAoaW50ZWdlckxpdGVyYWwudmFsdWUoKSkgeworICAgICAg
ICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIHJldHVybiAiMiJfc3RyOworICAgICAgICAg
ICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIHJldHVybiAiMyJfc3RyOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlQoaW50ZWdlckxpdGVyYWwudmFsdWUoKSA9
PSA0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gIjQiX3N0cjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSkoKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcocHJlZml4LCBzdWZmaXgpOwor
ICAgIH0KKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAibWF0cml4Iikg
eworICAgICAgICBBU1NFUlQobmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5z
aXplKCkgPT0gMyk7CisgICAgICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1
ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3Vt
ZW50cygpWzBdKSk7CisgICAgICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBXVEY6OmdldDxVbmlx
dWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1
bWVudHMoKVswXSk7CisgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IHR5cGVSZWZlcmVuY2UtPnVu
aWZ5Tm9kZSgpOworICAgICAgICBBU1NFUlQoaXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSkp
OworICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5p
ZnlOb2RlKTsKKyAgICAgICAgQVNTRVJUKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihu
YW1lZFR5cGUpKTsKKyAgICAgICAgYXV0byYgcGFyYW1ldGVyVHlwZSA9IGRvd25jYXN0PEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpOworICAgICAgICBhdXRvIHByZWZpeCA9
IChbJl0oKSAtPiBTdHJpbmcgeworICAgICAgICAgICAgaWYgKHBhcmFtZXRlclR5cGUubmFtZSgp
ID09ICJoYWxmIikKKyAgICAgICAgICAgICAgICByZXR1cm4gImhhbGYiOworICAgICAgICAgICAg
QVNTRVJUKHBhcmFtZXRlclR5cGUubmFtZSgpID09ICJmbG9hdCIpOworICAgICAgICAgICAgcmV0
dXJuICJmbG9hdCI7CisgICAgICAgIH0pKCk7CisgICAgICAgIEFTU0VSVChXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRpb24u
dHlwZUFyZ3VtZW50cygpWzFdKSk7CisgICAgICAgIGF1dG8mIGNvbnN0YW50RXhwcmVzc2lvbjEg
PSBXVEY6OmdldDxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9u
LnR5cGVBcmd1bWVudHMoKVswXSk7CisgICAgICAgIGF1dG8mIGludGVnZXJMaXRlcmFsMSA9IGNv
bnN0YW50RXhwcmVzc2lvbjEuaW50ZWdlckxpdGVyYWwoKTsKKyAgICAgICAgYXV0byBtaWRkbGUg
PSAoWyZdKCkgLT4gU3RyaW5nIHsKKyAgICAgICAgICAgIHN3aXRjaCAoaW50ZWdlckxpdGVyYWwx
LnZhbHVlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICByZXR1cm4g
IjIiX3N0cjsKKyAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICByZXR1cm4gIjMi
X3N0cjsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUKGludGVn
ZXJMaXRlcmFsMS52YWx1ZSgpID09IDQpOworICAgICAgICAgICAgICAgIHJldHVybiAiNCJfc3Ry
OworICAgICAgICAgICAgfQorICAgICAgICB9KSgpOworICAgICAgICBBU1NFUlQoV1RGOjpob2xk
c19hbHRlcm5hdGl2ZTxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0
aW9uLnR5cGVBcmd1bWVudHMoKVsyXSkpOworICAgICAgICBhdXRvJiBjb25zdGFudEV4cHJlc3Np
b24yID0gV1RGOjpnZXQ8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi50eXBlQXJndW1lbnRzKClbMF0pOworICAgICAgICBhdXRvJiBpbnRlZ2VyTGl0ZXJhbDIg
PSBjb25zdGFudEV4cHJlc3Npb24yLmludGVnZXJMaXRlcmFsKCk7CisgICAgICAgIGF1dG8gc3Vm
Zml4ID0gKFsmXSgpIC0+IFN0cmluZyB7CisgICAgICAgICAgICBzd2l0Y2ggKGludGVnZXJMaXRl
cmFsMi52YWx1ZSgpKSB7CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgcmV0
dXJuICIyIl9zdHI7CisgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgcmV0dXJu
ICIzIl9zdHI7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVChp
bnRlZ2VyTGl0ZXJhbDIudmFsdWUoKSA9PSA0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gIjQi
X3N0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSkoKTsKKyAgICAgICAgcmV0dXJuIG1ha2VT
dHJpbmcocHJlZml4LCBtaWRkbGUsICd4Jywgc3VmZml4KTsKKyAgICB9CisgICAgQVNTRVJUKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDEpOworICAgIEFT
U0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+
PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgYXV0byYg
dHlwZVJlZmVyZW5jZSA9IFdURjo6Z2V0PFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+Pihu
YXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKTsKKyAgICBhdXRvIHByZWZp
eCA9IChbJl0oKSAtPiBTdHJpbmcgeworICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9u
Lm5hbWUoKSA9PSAiVGV4dHVyZTFEIikKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZTFkIl9z
dHI7CisgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJSV1RleHR1
cmUxRCIpCisgICAgICAgICAgICByZXR1cm4gInRleHR1cmUxZCJfc3RyOworICAgICAgICBpZiAo
bmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiVGV4dHVyZTFEQXJyYXkiKQorICAgICAg
ICAgICAgcmV0dXJuICJ0ZXh0dXJlMWRfYXJyYXkiX3N0cjsKKyAgICAgICAgaWYgKG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlJXVGV4dHVyZTFEQXJyYXkiKQorICAgICAgICAgICAg
cmV0dXJuICJ0ZXh0dXJlMWRfYXJyYXkiX3N0cjsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5uYW1lKCkgPT0gIlRleHR1cmUyRCIpCisgICAgICAgICAgICByZXR1cm4gInRleHR1
cmUyZCJfc3RyOworICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
UldUZXh0dXJlMkQiKQorICAgICAgICAgICAgcmV0dXJuICJ0ZXh0dXJlMmQiX3N0cjsKKyAgICAg
ICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlRleHR1cmUyREFycmF5IikK
KyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZTJkX2FycmF5Il9zdHI7CisgICAgICAgIGlmIChu
YXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJSV1RleHR1cmUyREFycmF5IikKKyAgICAg
ICAgICAgIHJldHVybiAidGV4dHVyZTJkX2FycmF5Il9zdHI7CisgICAgICAgIGlmIChuYXRpdmVU
eXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJUZXh0dXJlM0QiKQorICAgICAgICAgICAgcmV0dXJu
ICJ0ZXh0dXJlM2QiX3N0cjsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1l
KCkgPT0gIlJXVGV4dHVyZTNEIikKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZTNkIl9zdHI7
CisgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJUZXh0dXJlQ3Vi
ZSIpCisgICAgICAgICAgICByZXR1cm4gInRleHR1cmVjdWJlIl9zdHI7CisgICAgICAgIGlmIChu
YXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJUZXh0dXJlRGVwdGgyRCIpCisgICAgICAg
ICAgICByZXR1cm4gImRlcHRoMmQiX3N0cjsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5uYW1lKCkgPT0gIlJXVGV4dHVyZURlcHRoMkQiKQorICAgICAgICAgICAgcmV0dXJuICJk
ZXB0aDJkIl9zdHI7CisgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09
ICJUZXh0dXJlRGVwdGgyREFycmF5IikKKyAgICAgICAgICAgIHJldHVybiAiZGVwdGgyZF9hcnJh
eSJfc3RyOworICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiUldU
ZXh0dXJlRGVwdGgyREFycmF5IikKKyAgICAgICAgICAgIHJldHVybiAiZGVwdGgyZF9hcnJheSJf
c3RyOworICAgICAgICBBU1NFUlQobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiVGV4
dHVyZURlcHRoQ3ViZSIpOworICAgICAgICByZXR1cm4gImRlcHRoY3ViZSJfc3RyOworICAgIH0p
KCk7CisgICAgYXV0byBpbm5lclR5cGUgPSAoWyZdKCkgLT4gU3RyaW5nIHsKKyAgICAgICAgaWYg
KHR5cGVSZWZlcmVuY2UtPm5hbWUoKSA9PSAidXNob3J0IikKKyAgICAgICAgICAgIHJldHVybiAi
dXNob3J0Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLT5uYW1lKCkgPT0gInVzaG9y
dDIiKQorICAgICAgICAgICAgcmV0dXJuICJ1c2hvcnQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVS
ZWZlcmVuY2UtPm5hbWUoKSA9PSAidXNob3J0MyIpCisgICAgICAgICAgICByZXR1cm4gInVzaG9y
dCJfc3RyOworICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS0+bmFtZSgpID09ICJ1c2hvcnQ0IikK
KyAgICAgICAgICAgIHJldHVybiAidXNob3J0Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJl
bmNlLT5uYW1lKCkgPT0gInVpbnQiKQorICAgICAgICAgICAgcmV0dXJuICJ1aW50Il9zdHI7Cisg
ICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLT5uYW1lKCkgPT0gInVpbnQyIikKKyAgICAgICAgICAg
IHJldHVybiAidWludCJfc3RyOworICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS0+bmFtZSgpID09
ICJ1aW50MyIpCisgICAgICAgICAgICByZXR1cm4gInVpbnQiX3N0cjsKKyAgICAgICAgaWYgKHR5
cGVSZWZlcmVuY2UtPm5hbWUoKSA9PSAidWludDQiKQorICAgICAgICAgICAgcmV0dXJuICJ1aW50
Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLT5uYW1lKCkgPT0gInNob3J0IikKKyAg
ICAgICAgICAgIHJldHVybiAic2hvcnQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2Ut
Pm5hbWUoKSA9PSAic2hvcnQyIikKKyAgICAgICAgICAgIHJldHVybiAic2hvcnQiX3N0cjsKKyAg
ICAgICAgaWYgKHR5cGVSZWZlcmVuY2UtPm5hbWUoKSA9PSAic2hvcnQzIikKKyAgICAgICAgICAg
IHJldHVybiAic2hvcnQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UtPm5hbWUoKSA9
PSAic2hvcnQ0IikKKyAgICAgICAgICAgIHJldHVybiAic2hvcnQiX3N0cjsKKyAgICAgICAgaWYg
KHR5cGVSZWZlcmVuY2UtPm5hbWUoKSA9PSAiaW50IikKKyAgICAgICAgICAgIHJldHVybiAiaW50
Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLT5uYW1lKCkgPT0gImludDIiKQorICAg
ICAgICAgICAgcmV0dXJuICJpbnQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UtPm5h
bWUoKSA9PSAiaW50MyIpCisgICAgICAgICAgICByZXR1cm4gImludCJfc3RyOworICAgICAgICBp
ZiAodHlwZVJlZmVyZW5jZS0+bmFtZSgpID09ICJpbnQ0IikKKyAgICAgICAgICAgIHJldHVybiAi
aW50Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLT5uYW1lKCkgPT0gImhhbGYiKQor
ICAgICAgICAgICAgcmV0dXJuICJoYWxmIl9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNl
LT5uYW1lKCkgPT0gImhhbGYyIikKKyAgICAgICAgICAgIHJldHVybiAiaGFsZiJfc3RyOworICAg
ICAgICBpZiAodHlwZVJlZmVyZW5jZS0+bmFtZSgpID09ICJoYWxmMyIpCisgICAgICAgICAgICBy
ZXR1cm4gImhhbGYiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UtPm5hbWUoKSA9PSAi
aGFsZjQiKQorICAgICAgICAgICAgcmV0dXJuICJoYWxmIl9zdHI7CisgICAgICAgIGlmICh0eXBl
UmVmZXJlbmNlLT5uYW1lKCkgPT0gImZsb2F0IikKKyAgICAgICAgICAgIHJldHVybiAiZmxvYXQi
X3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UtPm5hbWUoKSA9PSAiZmxvYXQyIikKKyAg
ICAgICAgICAgIHJldHVybiAiZmxvYXQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2Ut
Pm5hbWUoKSA9PSAiZmxvYXQzIikKKyAgICAgICAgICAgIHJldHVybiAiZmxvYXQiX3N0cjsKKyAg
ICAgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UtPm5hbWUoKSA9PSAiZmxvYXQ0Iik7CisgICAgICAg
IHJldHVybiAiZmxvYXQiX3N0cjsKKyAgICB9KSgpOworICAgIC8vIEZJWE1FOiBTcGVjaWZ5IHRo
ZSBzZWNvbmQgdGVtcGxhdGUgYXJndW1lbnQgdG8gTWV0YWwgdGV4dHVyZSB0eXBlcy4KKyAgICBy
ZXR1cm4gbWFrZVN0cmluZyhwcmVmaXgsICc8JywgaW5uZXJUeXBlLCAnPicpOworfQorCitVbmlx
dWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4gVHlwZU5hbWVyOjpjcmVhdGVOYW1lTm9kZShBU1Q6OlVu
bmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50KQoreworICAg
IGlmIChpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRUeXBlKSkgeworICAgICAgICBhdXRv
JiB0eXBlUmVmZXJlbmNlID0gZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlw
ZSk7CisgICAgICAgIEFTU0VSVCh0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8UmVmZXJlbmNlVHlwZU5hbWVOb2RlPihwYXJlbnQsIGdl
bmVyYXRlTmV4dFR5cGVOYW1lKCksICp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAg
ICB9CisgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkgeworICAgICAg
ICBhdXRvJiBwb2ludGVyVHlwZSA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRU
eXBlKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8UG9pbnRlclR5cGVOYW1lTm9kZT4o
cGFyZW50LCBnZW5lcmF0ZU5leHRUeXBlTmFtZSgpLCBwb2ludGVyVHlwZS5hZGRyZXNzU3BhY2Uo
KSk7CisgICAgfQorICAgIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5
cGUpKSB7CisgICAgICAgIGF1dG8mIGFycmF5UmVmZXJlbmNlVHlwZSA9IGRvd25jYXN0PEFTVDo6
QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSk7CisgICAgICAgIHJldHVybiBtYWtlVW5p
cXVlUmVmPEFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlPihwYXJlbnQsIGdlbmVyYXRlTmV4dFR5
cGVOYW1lKCksIGFycmF5UmVmZXJlbmNlVHlwZS5hZGRyZXNzU3BhY2UoKSk7CisgICAgfQorICAg
IEFTU0VSVChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKTsKKyAgICBhdXRvJiBhcnJh
eVR5cGUgPSBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpOworICAgIHJldHVy
biBtYWtlVW5pcXVlUmVmPEFycmF5VHlwZU5hbWVOb2RlPihwYXJlbnQsIGdlbmVyYXRlTmV4dFR5
cGVOYW1lKCksIGFycmF5VHlwZS5udW1FbGVtZW50cygpKTsKK30KKworc2l6ZV90IFR5cGVOYW1l
cjo6aW5zZXJ0KEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBWZWN0b3I8VW5pcXVlUmVm
PEJhc2VUeXBlTmFtZU5vZGU+PiYgdHlwZXMpCit7CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxCYXNl
VHlwZU5hbWVOb2RlPj4qIHZlY3RvclRvSW5zZXJ0SW50byB7IG51bGxwdHIgfTsKKyAgICBCYXNl
VHlwZU5hbWVOb2RlKiBwYXJlbnQgeyBudWxscHRyIH07CisgICAgaWYgKGlzPEFTVDo6VHlwZVJl
ZmVyZW5jZT4odW5uYW1lZFR5cGUpKSB7CisgICAgICAgIHZlY3RvclRvSW5zZXJ0SW50byA9ICZ0
eXBlczsKKyAgICAgICAgcGFyZW50ID0gbnVsbHB0cjsKKyAgICB9IGVsc2UgaWYgKGlzPEFTVDo6
UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkgeworICAgICAgICBhdXRvJiBpdGVtID0gdHlwZXNb
aW5zZXJ0KGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKS5lbGVtZW50VHlw
ZSgpLCB0eXBlcyldOworICAgICAgICB2ZWN0b3JUb0luc2VydEludG8gPSAmaXRlbS0+Y2hpbGRy
ZW4oKTsKKyAgICAgICAgcGFyZW50ID0gJml0ZW07CisgICAgfSBlbHNlIGlmIChpczxBU1Q6OkFy
cmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKSB7CisgICAgICAgIGF1dG8mIGl0ZW0gPSB0
eXBlc1tpbnNlcnQoZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBl
KS5lbGVtZW50VHlwZSgpLCB0eXBlcyldOworICAgICAgICB2ZWN0b3JUb0luc2VydEludG8gPSAm
aXRlbS0+Y2hpbGRyZW4oKTsKKyAgICAgICAgcGFyZW50ID0gJml0ZW07CisgICAgfSBlbHNlIHsK
KyAgICAgICAgQVNTRVJUKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpOworICAgICAg
ICBhdXRvJiBpdGVtID0gdHlwZXNbaW5zZXJ0KGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5h
bWVkVHlwZSkudHlwZSgpLCB0eXBlcyldOworICAgICAgICB2ZWN0b3JUb0luc2VydEludG8gPSAm
aXRlbS0+Y2hpbGRyZW4oKTsKKyAgICAgICAgcGFyZW50ID0gJml0ZW07CisgICAgfQorICAgIEFT
U0VSVCh2ZWN0b3JUb0luc2VydEludG8pOworCisgICAgYXV0byBpdGVyYXRvciA9IGZpbmRJblZl
Y3Rvcih1bm5hbWVkVHlwZSwgKnZlY3RvclRvSW5zZXJ0SW50byk7CisgICAgaWYgKGl0ZXJhdG9y
ID09IHZlY3RvclRvSW5zZXJ0SW50by0+ZW5kKCkpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBj
cmVhdGVOYW1lTm9kZSh1bm5hbWVkVHlwZSwgcGFyZW50KTsKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byBhZGRSZXN1bHQgPSBtX3VubmFtZWRUeXBlTWFwcGluZy5hZGQoJnVubmFtZWRUeXBl
LCAmcmVzdWx0KTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1
bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIH0KKyAgICAgICAgdmVjdG9yVG9JbnNlcnRJbnRvLT5h
cHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKKyAgICAgICAgcmV0dXJuIHZlY3RvclRvSW5zZXJ0SW50
by0+c2l6ZSgpIC0gMTsKKyAgICB9CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX3VubmFtZWRUeXBl
TWFwcGluZy5hZGQoJnVubmFtZWRUeXBlLCAmKml0ZXJhdG9yKTsKKyAgICBBU1NFUlRfVU5VU0VE
KGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIHJldHVybiBpdGVyYXRvciAt
IHZlY3RvclRvSW5zZXJ0SW50by0+YmVnaW4oKTsKK30KKworY2xhc3MgTWV0YWxUeXBlRGVjbGFy
YXRpb25Xcml0ZXIgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgTWV0YWxUeXBlRGVj
bGFyYXRpb25Xcml0ZXIoc3RkOjpmdW5jdGlvbjxTdHJpbmcoQVNUOjpOYW1lZFR5cGUmKT4mJiBt
YW5nbGVkTmFtZUZvck5hbWVkVHlwZSwgc3RkOjpmdW5jdGlvbjxTdHJpbmcoQVNUOjpVbm5hbWVk
VHlwZSYpPiYmIG1hbmdsZWROYW1lRm9yVW5uYW1lZFR5cGUsIHN0ZDo6ZnVuY3Rpb248U3RyaW5n
KEFTVDo6RW51bWVyYXRpb25NZW1iZXImKT4mJiBtYW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVt
YmVyKQorICAgICAgICA6IG1fbWFuZ2xlZE5hbWVGb3JOYW1lZFR5cGUoV1RGTW92ZShtYW5nbGVk
TmFtZUZvck5hbWVkVHlwZSkpCisgICAgICAgICwgbV9tYW5nbGVkTmFtZUZvclVubmFtZWRUeXBl
KFdURk1vdmUobWFuZ2xlZE5hbWVGb3JVbm5hbWVkVHlwZSkpCisgICAgICAgICwgbV9tYW5nbGVk
TmFtZUZvckVudW1lcmF0aW9uTWVtYmVyKFdURk1vdmUobWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlv
bk1lbWJlcikpCisgICAgeworICAgIH0KKworICAgIFN0cmluZyB0b1N0cmluZygpIHsgcmV0dXJu
IG1fc3RyaW5nQnVpbGRlci50b1N0cmluZygpOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCB2aXNp
dChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQorICAg
IHsKKyAgICAgICAgYXV0byYgYmFzZVR5cGUgPSBlbnVtZXJhdGlvbkRlZmluaXRpb24udHlwZSgp
LnVuaWZ5Tm9kZSgpOworICAgICAgICBBU1NFUlQoaXM8QVNUOjpOYW1lZFR5cGU+KGJhc2VUeXBl
KSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiZW51bSBjbGFz
cyAiLCBtX21hbmdsZWROYW1lRm9yTmFtZWRUeXBlKGVudW1lcmF0aW9uRGVmaW5pdGlvbiksICIg
OiAiLCBtX21hbmdsZWROYW1lRm9yTmFtZWRUeXBlKGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPihi
YXNlVHlwZSkpLCAiIHtcbiIpKTsKKyAgICAgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbk1lbWJl
ciA6IGVudW1lcmF0aW9uRGVmaW5pdGlvbi5lbnVtZXJhdGlvbk1lbWJlcnMoKSkKKyAgICAgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgICIsIG1fbWFuZ2xlZE5h
bWVGb3JFbnVtZXJhdGlvbk1lbWJlcihlbnVtZXJhdGlvbk1lbWJlciksICIsXG4iKSk7CisgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn07XG4iKTsKKyAgICB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikKKyAgICB7
CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygic3RydWN0ICIsIG1f
bWFuZ2xlZE5hbWVGb3JOYW1lZFR5cGUoc3RydWN0dXJlRGVmaW5pdGlvbiksICI7XG4iKSk7Cisg
ICAgfQorCisgICAgc3RkOjpmdW5jdGlvbjxTdHJpbmcoQVNUOjpOYW1lZFR5cGUmKT4gbV9tYW5n
bGVkTmFtZUZvck5hbWVkVHlwZTsKKyAgICBzdGQ6OmZ1bmN0aW9uPFN0cmluZyhBU1Q6OlVubmFt
ZWRUeXBlJik+IG1fbWFuZ2xlZE5hbWVGb3JVbm5hbWVkVHlwZTsKKyAgICBzdGQ6OmZ1bmN0aW9u
PFN0cmluZyhBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJik+JiYgbV9tYW5nbGVkTmFtZUZvckVudW1l
cmF0aW9uTWVtYmVyOworICAgIFN0cmluZ0J1aWxkZXIgbV9zdHJpbmdCdWlsZGVyOworfTsKKwor
U3RyaW5nIFR5cGVOYW1lcjo6bWV0YWxUeXBlRGVjbGFyYXRpb25zKCkKK3sKKyAgICBNZXRhbFR5
cGVEZWNsYXJhdGlvbldyaXRlciBtZXRhbFR5cGVEZWNsYXJhdGlvbldyaXRlcihbJl0oQVNUOjpO
YW1lZFR5cGUmIG5hbWVkVHlwZSkgLT4gU3RyaW5nIHsKKyAgICAgICAgcmV0dXJuIG1hbmdsZWRO
YW1lRm9yVHlwZShuYW1lZFR5cGUpOworICAgIH0sIFsmXShBU1Q6OlVubmFtZWRUeXBlJiB1bm5h
bWVkVHlwZSkgLT4gU3RyaW5nIHsKKyAgICAgICAgcmV0dXJuIG1hbmdsZWROYW1lRm9yVHlwZSh1
bm5hbWVkVHlwZSk7CisgICAgfSwgWyZdKEFTVDo6RW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0
aW9uTWVtYmVyKSAtPiBTdHJpbmcgeworICAgICAgICByZXR1cm4gbWFuZ2xlZE5hbWVGb3JFbnVt
ZXJhdGlvbk1lbWJlcihlbnVtZXJhdGlvbk1lbWJlcik7CisgICAgfSk7CisgICAgbWV0YWxUeXBl
RGVjbGFyYXRpb25Xcml0ZXIuVmlzaXRvcjo6dmlzaXQobV9wcm9ncmFtKTsKKyAgICByZXR1cm4g
bWV0YWxUeXBlRGVjbGFyYXRpb25Xcml0ZXIudG9TdHJpbmcoKTsKK30KKworc3RhdGljIFN0cmlu
ZyB0b1N0cmluZyhBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UpCit7CisgICAgc3dpdGNo
IChhZGRyZXNzU3BhY2UpIHsKKyAgICBjYXNlIEFTVDo6QWRkcmVzc1NwYWNlOjpDb25zdGFudDoK
KyAgICAgICAgcmV0dXJuICJjb25zdGFudCJfc3RyOworICAgIGNhc2UgQVNUOjpBZGRyZXNzU3Bh
Y2U6OkRldmljZToKKyAgICAgICAgcmV0dXJuICJkZXZpY2UiX3N0cjsKKyAgICBjYXNlIEFTVDo6
QWRkcmVzc1NwYWNlOjpUaHJlYWRncm91cDoKKyAgICAgICAgcmV0dXJuICJ0aHJlYWRncm91cCJf
c3RyOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVChhZGRyZXNzU3BhY2UgPT0gQVNUOjpB
ZGRyZXNzU3BhY2U6OlRocmVhZCk7CisgICAgICAgIHJldHVybiAidGhyZWFkIl9zdHI7CisgICAg
fQorfQorCit2b2lkIFR5cGVOYW1lcjo6ZW1pdFVubmFtZWRUeXBlRGVmaW5pdGlvbihCYXNlVHlw
ZU5hbWVOb2RlJiBiYXNlVHlwZU5hbWVOb2RlLCBIYXNoU2V0PEFTVDo6TmFtZWRUeXBlKj4mIGVt
aXR0ZWROYW1lZFR5cGVzLCBIYXNoU2V0PEJhc2VUeXBlTmFtZU5vZGUqPiYgZW1pdHRlZFVubmFt
ZWRUeXBlcywgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlcikKK3sKKyAgICBpZiAoZW1pdHRl
ZFVubmFtZWRUeXBlcy5jb250YWlucygmYmFzZVR5cGVOYW1lTm9kZSkpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoYmFzZVR5cGVOYW1lTm9kZS5wYXJlbnQoKSkKKyAgICAgICAgZW1pdFVubmFt
ZWRUeXBlRGVmaW5pdGlvbigqYmFzZVR5cGVOYW1lTm9kZS5wYXJlbnQoKSwgZW1pdHRlZE5hbWVk
VHlwZXMsIGVtaXR0ZWRVbm5hbWVkVHlwZXMsIHN0cmluZ0J1aWxkZXIpOworICAgIGlmIChpczxS
ZWZlcmVuY2VUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpKSB7CisgICAgICAgIGF1dG8m
IG5hbWVkVHlwZSA9IGRvd25jYXN0PFJlZmVyZW5jZVR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1l
Tm9kZSkubmFtZWRUeXBlKCk7CisgICAgICAgIGVtaXROYW1lZFR5cGVEZWZpbml0aW9uKG5hbWVk
VHlwZSwgZW1pdHRlZE5hbWVkVHlwZXMsIGVtaXR0ZWRVbm5hbWVkVHlwZXMsIHN0cmluZ0J1aWxk
ZXIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ0eXBlZGVmICIs
IG1hbmdsZWROYW1lRm9yVHlwZShuYW1lZFR5cGUpLCAnICcsIGJhc2VUeXBlTmFtZU5vZGUubWFu
Z2xlZE5hbWUoKSwgIjtcbiIpKTsKKyAgICB9IGVsc2UgaWYgKGlzPFBvaW50ZXJUeXBlTmFtZU5v
ZGU+KGJhc2VUeXBlTmFtZU5vZGUpKSB7CisgICAgICAgIGF1dG8mIHBvaW50ZXJUeXBlID0gZG93
bmNhc3Q8UG9pbnRlclR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9kZSk7CisgICAgICAgIEFT
U0VSVChiYXNlVHlwZU5hbWVOb2RlLnBhcmVudCgpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZygidHlwZWRlZiAiLCB0b1N0cmluZyhwb2ludGVyVHlwZS5hZGRyZXNz
U3BhY2UoKSksICIgIiwgcG9pbnRlclR5cGUucGFyZW50KCktPm1hbmdsZWROYW1lKCksICIqICIs
IHBvaW50ZXJUeXBlLm1hbmdsZWROYW1lKCksICI7XG4iKSk7CisgICAgfSBlbHNlIGlmIChpczxB
cnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9kZSkpIHsKKyAgICAgICAg
YXV0byYgYXJyYXlSZWZlcmVuY2VUeXBlID0gZG93bmNhc3Q8QXJyYXlSZWZlcmVuY2VUeXBlTmFt
ZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpOworICAgICAgICBBU1NFUlQoYmFzZVR5cGVOYW1lTm9k
ZS5wYXJlbnQoKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInN0
cnVjdCAiLCBhcnJheVJlZmVyZW5jZVR5cGUubWFuZ2xlZE5hbWUoKSwgInsgXG4iKSk7CisgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICAiLCB0b1N0cmluZyhhcnJh
eVJlZmVyZW5jZVR5cGUuYWRkcmVzc1NwYWNlKCkpLCAiICIsIGFycmF5UmVmZXJlbmNlVHlwZS5w
YXJlbnQoKS0+bWFuZ2xlZE5hbWUoKSwgIiogcG9pbnRlcjtcbiIpKTsKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoIiAgICB1bnNpZ25lZCBsZW5ndGg7XG4iKTsKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoIn07XG4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoaXM8
QXJyYXlUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpKTsKKyAgICAgICAgYXV0byYgYXJy
YXlUeXBlID0gZG93bmNhc3Q8QXJyYXlUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpOwor
ICAgICAgICBBU1NFUlQoYmFzZVR5cGVOYW1lTm9kZS5wYXJlbnQoKSk7CisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInR5cGVkZWYgQXJyYXk8IiwgYXJyYXlUeXBlLnBh
cmVudCgpLT5tYW5nbGVkTmFtZSgpLCAiLCAiLCBhcnJheVR5cGUubnVtRWxlbWVudHMoKSwgIj4g
IiwgYXJyYXlUeXBlLm1hbmdsZWROYW1lKCksICI7XG4iKSk7CisgICAgfQorICAgIGVtaXR0ZWRV
bm5hbWVkVHlwZXMuYWRkKCZiYXNlVHlwZU5hbWVOb2RlKTsKK30KKwordm9pZCBUeXBlTmFtZXI6
OmVtaXROYW1lZFR5cGVEZWZpbml0aW9uKEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUsIEhhc2hT
ZXQ8QVNUOjpOYW1lZFR5cGUqPiYgZW1pdHRlZE5hbWVkVHlwZXMsIEhhc2hTZXQ8QmFzZVR5cGVO
YW1lTm9kZSo+JiBlbWl0dGVkVW5uYW1lZFR5cGVzLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWls
ZGVyKQoreworICAgIGlmIChlbWl0dGVkTmFtZWRUeXBlcy5jb250YWlucygmbmFtZWRUeXBlKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gaXRlcmF0b3IgPSBtX2RlcGVuZGVuY3lHcmFwaC5m
aW5kKCZuYW1lZFR5cGUpOworICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX2RlcGVuZGVuY3lHcmFw
aC5lbmQoKSk7CisgICAgZm9yIChhdXRvJiBiYXNlVHlwZU5hbWVOb2RlIDogaXRlcmF0b3ItPnZh
bHVlKQorICAgICAgICBlbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKGJhc2VUeXBlTmFtZU5vZGUs
IGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVzLCBzdHJpbmdCdWlsZGVyKTsK
KyAgICBpZiAoaXM8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KG5hbWVkVHlwZSkpIHsKKyAg
ICAgICAgLy8gV2UgYWxyZWFkeSBlbWl0dGVkIHRoaXMgaW4gdGhlIHR5cGUgZGVjbGFyYXRpb24g
c2VjdGlvbi4gVGhlcmUncyBub3RoaW5nIHRvIGRvLgorICAgIH0gZWxzZSBpZiAoaXM8QVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpIHsKKyAgICAgICAgLy8gTmF0aXZlIHR5
cGVzIGFscmVhZHkgaGF2ZSBkZWZpbml0aW9ucy4gVGhlcmUncyBub3RoaW5nIHRvIGRvLgorICAg
IH0gZWxzZSBpZiAoaXM8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpKSB7Cisg
ICAgICAgIGF1dG8mIHN0cnVjdHVyZURlZmluaXRpb24gPSBkb3duY2FzdDxBU1Q6OlN0cnVjdHVy
ZURlZmluaXRpb24+KG5hbWVkVHlwZSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1h
a2VTdHJpbmcoInN0cnVjdCAiLCBtYW5nbGVkTmFtZUZvclR5cGUoc3RydWN0dXJlRGVmaW5pdGlv
biksICIge1xuIikpOworICAgICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZUVsZW1lbnQgOiBzdHJ1
Y3R1cmVEZWZpbml0aW9uLnN0cnVjdHVyZUVsZW1lbnRzKCkpCisgICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgIiwgbWFuZ2xlZE5hbWVGb3JUeXBlKHN0cnVj
dHVyZUVsZW1lbnQudHlwZSgpKSwgJyAnLCBtYW5nbGVkTmFtZUZvclN0cnVjdHVyZUVsZW1lbnQo
c3RydWN0dXJlRWxlbWVudCksICI7XG4iKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCJ9O1xuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGlzPEFTVDo6VHlwZURlZmlu
aXRpb24+KG5hbWVkVHlwZSkpOworICAgICAgICBhdXRvJiB0eXBlRGVmaW5pdGlvbiA9IGRvd25j
YXN0PEFTVDo6VHlwZURlZmluaXRpb24+KG5hbWVkVHlwZSk7CisgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcoInR5cGVkZWYgIiwgbWFuZ2xlZE5hbWVGb3JUeXBlKHR5cGVE
ZWZpbml0aW9uLnR5cGUoKSksICcgJywgbWFuZ2xlZE5hbWVGb3JUeXBlKHR5cGVEZWZpbml0aW9u
KSwgIjtcbiIpKTsKKyAgICB9CisgICAgZW1pdHRlZE5hbWVkVHlwZXMuYWRkKCZuYW1lZFR5cGUp
OworfQorCitTdHJpbmcgVHlwZU5hbWVyOjptZXRhbFR5cGVEZWZpbml0aW9ucygpCit7CisgICAg
SGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+IGVtaXR0ZWROYW1lZFR5cGVzOworICAgIEhhc2hTZXQ8
QmFzZVR5cGVOYW1lTm9kZSo+IGVtaXR0ZWRVbm5hbWVkVHlwZXM7CisgICAgU3RyaW5nQnVpbGRl
ciBzdHJpbmdCdWlsZGVyOworICAgIGZvciAoYXV0byYga2V5VmFsdWVQYWlyIDogbV9kZXBlbmRl
bmN5R3JhcGgpCisgICAgICAgIGVtaXROYW1lZFR5cGVEZWZpbml0aW9uKCprZXlWYWx1ZVBhaXIu
a2V5LCBlbWl0dGVkTmFtZWRUeXBlcywgZW1pdHRlZFVubmFtZWRUeXBlcywgc3RyaW5nQnVpbGRl
cik7CisgICAgZm9yIChhdXRvJiBiYXNlVHlwZU5hbWVOb2RlIDogbV90cmllKQorICAgICAgICBl
bWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKGJhc2VUeXBlTmFtZU5vZGUsIGVtaXR0ZWROYW1lZFR5
cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVzLCBzdHJpbmdCdWlsZGVyKTsKKyAgICByZXR1cm4gc3Ry
aW5nQnVpbGRlci50b1N0cmluZygpOworfQorCitTdHJpbmcgVHlwZU5hbWVyOjptYW5nbGVkTmFt
ZUZvclR5cGUoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpCit7CisgICAgcmV0dXJuIGZp
bmQodW5uYW1lZFR5cGUsIG1fdHJpZSkubWFuZ2xlZE5hbWUoKTsKK30KKworU3RyaW5nIFR5cGVO
YW1lcjo6bWFuZ2xlZE5hbWVGb3JUeXBlKEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUpCit7Cisg
ICAgaWYgKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKQorICAgICAg
ICByZXR1cm4gbWFuZ2xlZE5hbWVGb3JUeXBlKGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uPihuYW1lZFR5cGUpKTsKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9uYW1lZFR5cGVNYXBw
aW5nLmZpbmQoJm5hbWVkVHlwZSk7CisgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fbmFtZWRUeXBl
TWFwcGluZy5lbmQoKSk7CisgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKK30KKworCitTdHJp
bmcgVHlwZU5hbWVyOjptYW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVtYmVyKEFTVDo6RW51bWVy
YXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVtYmVyKQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBt
X2VudW1lcmF0aW9uTWVtYmVyTWFwcGluZy5maW5kKCZlbnVtZXJhdGlvbk1lbWJlcik7CisgICAg
QVNTRVJUKGl0ZXJhdG9yICE9IG1fZW51bWVyYXRpb25NZW1iZXJNYXBwaW5nLmVuZCgpKTsKKyAg
ICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlOworfQorCitTdHJpbmcgVHlwZU5hbWVyOjptYW5nbGVk
TmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoQVNUOjpTdHJ1Y3R1cmVFbGVtZW50JiBzdHJ1Y3R1cmVF
bGVtZW50KQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3N0cnVjdHVyZUVsZW1lbnRNYXBwaW5n
LmZpbmQoJnN0cnVjdHVyZUVsZW1lbnQpOworICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX3N0cnVj
dHVyZUVsZW1lbnRNYXBwaW5nLmVuZCgpKTsKKyAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlOwor
fQorCitTdHJpbmcgVHlwZU5hbWVyOjptZXRhbFR5cGVzKCkKK3sKKyAgICBWaXNpdG9yOjp2aXNp
dChtX3Byb2dyYW0pOworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChtZXRhbFR5cGVEZWNsYXJhdGlvbnMoKSk7CisgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoJ1xuJyk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWV0YWxUeXBlRGVm
aW5pdGlvbnMoKSk7CisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgTWV0YWwKKworfSAvLyBuYW1lc3BhY2UgV0hMU0wKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYz
Y2Q1ZmUyYmM0YWE3MTViNmJkM2IyNzBiMzYzNzQzMDZmZjE5ZDYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1l
ci5oCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBX
SExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBFbnVtZXJhdGlvbkRlZmluaXRpb247
CitjbGFzcyBFbnVtZXJhdGlvbk1lbWJlcjsKK2NsYXNzIE5hbWVkVHlwZTsKK2NsYXNzIE5hdGl2
ZVR5cGVEZWNsYXJhdGlvbjsKK2NsYXNzIFN0cnVjdHVyZURlZmluaXRpb247CitjbGFzcyBUeXBl
RGVmaW5pdGlvbjsKK2NsYXNzIFVubmFtZWRUeXBlOworCit9CisKK2NsYXNzIFByb2dyYW07CisK
K25hbWVzcGFjZSBNZXRhbCB7CisKK2NsYXNzIEJhc2VUeXBlTmFtZU5vZGU7CisKK2NsYXNzIFR5
cGVOYW1lciA6IHByaXZhdGUgVmlzaXRvciB7CitwdWJsaWM6CisgICAgVHlwZU5hbWVyKFByb2dy
YW0mKTsKKyAgICB2aXJ0dWFsIH5UeXBlTmFtZXIoKTsKKworICAgIFN0cmluZyBtZXRhbFR5cGVz
KCk7CisKKyAgICAvLyBNdXN0IGJlIGNhbGxlZCBhZnRlciBjYWxsaW5nIG1ldGFsVHlwZXMoKS4K
KyAgICBTdHJpbmcgbWFuZ2xlZE5hbWVGb3JUeXBlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
Jik7CisgICAgU3RyaW5nIG1hbmdsZWROYW1lRm9yVHlwZShBU1Q6OlVubmFtZWRUeXBlJik7Cisg
ICAgU3RyaW5nIG1hbmdsZWROYW1lRm9yVHlwZShBU1Q6Ok5hbWVkVHlwZSYpOworICAgIFN0cmlu
ZyBtYW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVtYmVyKEFTVDo6RW51bWVyYXRpb25NZW1iZXIm
KTsKKyAgICBTdHJpbmcgbWFuZ2xlZE5hbWVGb3JTdHJ1Y3R1cmVFbGVtZW50KEFTVDo6U3RydWN0
dXJlRWxlbWVudCYpOworCisgICAgU3RyaW5nIGdlbmVyYXRlTmV4dFR5cGVOYW1lKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJ0eXBlIiwgbV90eXBlQ291bnQrKyk7CisgICAg
fQorCisgICAgU3RyaW5nIGdlbmVyYXRlTmV4dFN0cnVjdHVyZUVsZW1lbnROYW1lKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJzdHJ1Y3R1cmVFbGVtZW50IiwgbV9zdHJ1Y3R1
cmVFbGVtZW50Q291bnQrKyk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgdmlzaXQoQVNU
OjpVbm5hbWVkVHlwZSYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlv
bkRlZmluaXRpb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmlu
aXRpb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZURlZmluaXRpb24mKSBv
dmVycmlkZTsKKworICAgIFN0cmluZyBnZW5lcmF0ZU5leHRFbnVtZXJhdGlvbk1lbWJlck5hbWUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImVudW1lcmF0aW9uTWVtYmVyIiwg
bV9lbnVtZXJhdGlvbk1lbWJlckNvdW50KyspOworICAgIH0KKworICAgIHZvaWQgZW1pdE5hbWVk
VHlwZURlZmluaXRpb24oQVNUOjpOYW1lZFR5cGUmLCBIYXNoU2V0PEFTVDo6TmFtZWRUeXBlKj4m
IGVtaXR0ZWROYW1lZFR5cGVzLCBIYXNoU2V0PEJhc2VUeXBlTmFtZU5vZGUqPiYgZW1pdHRlZFVu
bmFtZWRUeXBlcywgU3RyaW5nQnVpbGRlciYpOworICAgIHZvaWQgZW1pdFVubmFtZWRUeXBlRGVm
aW5pdGlvbihCYXNlVHlwZU5hbWVOb2RlJiwgSGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+JiBlbWl0
dGVkTmFtZWRUeXBlcywgSGFzaFNldDxCYXNlVHlwZU5hbWVOb2RlKj4mIGVtaXR0ZWRVbm5hbWVk
VHlwZXMsIFN0cmluZ0J1aWxkZXImKTsKKyAgICBTdHJpbmcgbWV0YWxUeXBlRGVjbGFyYXRpb25z
KCk7CisgICAgU3RyaW5nIG1ldGFsVHlwZURlZmluaXRpb25zKCk7CisKKyAgICBVbmlxdWVSZWY8
QmFzZVR5cGVOYW1lTm9kZT4gY3JlYXRlTmFtZU5vZGUoQVNUOjpVbm5hbWVkVHlwZSYsIEJhc2VU
eXBlTmFtZU5vZGUqIHBhcmVudCk7CisgICAgc2l6ZV90IGluc2VydChBU1Q6OlVubmFtZWRUeXBl
JiwgVmVjdG9yPFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPj4mKTsKKworICAgIFByb2dyYW0m
IG1fcHJvZ3JhbTsKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+PiBtX3Ry
aWU7CisgICAgSGFzaE1hcDxBU1Q6OlVubmFtZWRUeXBlKiwgQmFzZVR5cGVOYW1lTm9kZSo+IG1f
dW5uYW1lZFR5cGVNYXBwaW5nOworICAgIEhhc2hNYXA8QVNUOjpOYW1lZFR5cGUqLCBTdHJpbmc+
IG1fbmFtZWRUeXBlTWFwcGluZzsKKyAgICBIYXNoTWFwPEFTVDo6TmFtZWRUeXBlKiwgVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QmFzZVR5cGVOYW1lTm9kZT4+PiBtX2RlcGVuZGVuY3lH
cmFwaDsKKyAgICBIYXNoTWFwPEFTVDo6RW51bWVyYXRpb25NZW1iZXIqLCBTdHJpbmc+IG1fZW51
bWVyYXRpb25NZW1iZXJNYXBwaW5nOworICAgIEhhc2hNYXA8QVNUOjpTdHJ1Y3R1cmVFbGVtZW50
KiwgU3RyaW5nPiBtX3N0cnVjdHVyZUVsZW1lbnRNYXBwaW5nOworICAgIHVuc2lnbmVkIG1fdHlw
ZUNvdW50IHsgMCB9OworICAgIHVuc2lnbmVkIG1fZW51bWVyYXRpb25NZW1iZXJDb3VudCB7IDAg
fTsKKyAgICB1bnNpZ25lZCBtX3N0cnVjdHVyZUVsZW1lbnRDb3VudCB7IDAgfTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIE1ldGFsCisKK30gLy8gbmFtZXNwYWNlIFdITFNMCisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAppbmRleCA2MGIwZWZlZWNhYzI0NjNlNTFhOGVj
MTIzZGNjZjdhMjBhNDZmOWU2Li4yOTRkYzk4YmUzMDM3YTA3ODEzNjg1MGQ4NWUzMjY1MGNkNDE0
NmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TENoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMQ2hlY2tlci5jcHAKQEAgLTIyMSw4ICsyMjEsOCBAQCBzdGF0aWMgYm9vbCBjaGVja1NlbWFu
dGljcyhWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiBpbnB1dEl0ZW1zLCBWZWN0b3I8RW50cnlQb2lu
dAogICAgICAgICBhdXRvIGNoZWNrU2VtYW50aWNUeXBlcyA9IFsmXShjb25zdCBWZWN0b3I8RW50
cnlQb2ludEl0ZW0+JiBpdGVtcykgLT4gYm9vbCB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGl0
ZW0gOiBpdGVtcykgewogICAgICAgICAgICAgICAgIGF1dG8gYWNjZXB0YWJsZSA9IFdURjo6dmlz
aXQoV1RGOjptYWtlVmlzaXRvcihbJl0oY29uc3QgQVNUOjpCYXNlU2VtYW50aWMmIHNlbWFudGlj
KSAtPiBib29sIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbWFudGljLmlzQWNjZXB0
YWJsZVR5cGUoaXRlbS51bm5hbWVkVHlwZSwgaW50cmluc2ljcyk7Ci0gICAgICAgICAgICAgICAg
fSksIGl0ZW0uc2VtYW50aWMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VtYW50aWMu
aXNBY2NlcHRhYmxlVHlwZSgqaXRlbS51bm5hbWVkVHlwZSwgaW50cmluc2ljcyk7CisgICAgICAg
ICAgICAgICAgfSksICppdGVtLnNlbWFudGljKTsKICAgICAgICAgICAgICAgICBpZiAoIWFjY2Vw
dGFibGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0K
QEAgLTIzOSw3ICsyMzksNyBAQCBzdGF0aWMgYm9vbCBjaGVja1NlbWFudGljcyhWZWN0b3I8RW50
cnlQb2ludEl0ZW0+JiBpbnB1dEl0ZW1zLCBWZWN0b3I8RW50cnlQb2ludAogICAgICAgICAgICAg
Zm9yIChhdXRvJiBpdGVtIDogaXRlbXMpIHsKICAgICAgICAgICAgICAgICBhdXRvIGFjY2VwdGFi
bGUgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IEFTVDo6QmFzZVNlbWFu
dGljJiBzZW1hbnRpYykgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZW1h
bnRpYy5pc0FjY2VwdGFibGVGb3JTaGFkZXJJdGVtRGlyZWN0aW9uKGRpcmVjdGlvbiwgZW50cnlQ
b2ludFR5cGUpOwotICAgICAgICAgICAgICAgIH0pLCBpdGVtLnNlbWFudGljKTsKKyAgICAgICAg
ICAgICAgICB9KSwgKml0ZW0uc2VtYW50aWMpOwogICAgICAgICAgICAgICAgIGlmICghYWNjZXB0
YWJsZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQpA
QCAtMjU2LDExICsyNTYsMTEgQEAgc3RhdGljIGJvb2wgY2hlY2tTZW1hbnRpY3MoVmVjdG9yPEVu
dHJ5UG9pbnRJdGVtPiYgaW5wdXRJdGVtcywgVmVjdG9yPEVudHJ5UG9pbnQKICAgICAgICAgICAg
IGZvciAoYXV0byYgaXRlbSA6IGl0ZW1zKSB7CiAgICAgICAgICAgICAgICAgUE9EQ2hlY2tlciBw
b2RDaGVja2VyOwogICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPihpdGVt
LnVubmFtZWRUeXBlKSkKLSAgICAgICAgICAgICAgICAgICAgcG9kQ2hlY2tlci5jaGVja0Vycm9y
QW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oaXRlbS51bm5hbWVkVHlwZSkuZWxl
bWVudFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIHBvZENoZWNrZXIuY2hlY2tFcnJvckFu
ZFZpc2l0KGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCppdGVtLnVubmFtZWRUeXBlKS5lbGVt
ZW50VHlwZSgpKTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkFycmF5UmVmZXJl
bmNlVHlwZT4oaXRlbS51bm5hbWVkVHlwZSkpCi0gICAgICAgICAgICAgICAgICAgIHBvZENoZWNr
ZXIuY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihp
dGVtLnVubmFtZWRUeXBlKS5lbGVtZW50VHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcG9k
Q2hlY2tlci5jaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5
cGU+KCppdGVtLnVubmFtZWRUeXBlKS5lbGVtZW50VHlwZSgpKTsKICAgICAgICAgICAgICAgICBl
bHNlIGlmIChpczxBU1Q6OkFycmF5VHlwZT4oaXRlbS51bm5hbWVkVHlwZSkpCi0gICAgICAgICAg
ICAgICAgICAgIHBvZENoZWNrZXIuY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6QXJy
YXlUeXBlPihpdGVtLnVubmFtZWRUeXBlKS50eXBlKCkpOworICAgICAgICAgICAgICAgICAgICBw
b2RDaGVja2VyLmNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4oKml0
ZW0udW5uYW1lZFR5cGUpLnR5cGUoKSk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBpZiAocG9kQ2hlY2tlci5lcnJv
cigpKQpAQCAtNjEyLDE2ICs2MTIsMTIgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkVudW1l
cmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQogICAgIGF1dG8qIGJhc2VU
eXBlID0gKFsmXSgpIC0+IEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiB7CiAgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChlbnVtZXJhdGlvbkRlZmluaXRpb24udHlwZSgpKTsKICAgICAgICAg
YXV0byYgYmFzZVR5cGUgPSBlbnVtZXJhdGlvbkRlZmluaXRpb24udHlwZSgpLnVuaWZ5Tm9kZSgp
OwotICAgICAgICBpZiAoIWlzPEFTVDo6VW5uYW1lZFR5cGU+KGJhc2VUeXBlKSkKKyAgICAgICAg
aWYgKCFpczxBU1Q6Ok5hbWVkVHlwZT4oYmFzZVR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgIGF1dG8mIHVubmFtZWRCYXNlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVk
VHlwZT4oYmFzZVR5cGUpOwotICAgICAgICBpZiAoIWlzPEFTVDo6VHlwZVJlZmVyZW5jZT4odW5u
YW1lZEJhc2UpKQorICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVk
VHlwZT4oYmFzZVR5cGUpOworICAgICAgICBpZiAoIWlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uPihuYW1lZFR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGF1
dG8mIHR5cGVSZWZlcmVuY2VCYXNlID0gZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5h
bWVkQmFzZSk7Ci0gICAgICAgIEFTU0VSVCh0eXBlUmVmZXJlbmNlQmFzZS5yZXNvbHZlZFR5cGUo
KSk7Ci0gICAgICAgIGlmICghaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCp0eXBlUmVm
ZXJlbmNlQmFzZS5yZXNvbHZlZFR5cGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8QVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24+KCp0eXBlUmVmZXJlbmNlQmFzZS5yZXNvbHZlZFR5cGUoKSk7Cisg
ICAgICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpOwogICAgICAgICBpZiAoIW5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5pc0ludCgpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJl
dHVybiAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRl
bXMuY3BwCmluZGV4IGExOGVhYzM4ZWEzYjY3NmFlNzg5YmU1OTVhM2RhYTgxM2M2ZjI5YjYuLjQ1
YTYyYTZkMjg4ZTNiZTdkMmZjMzM1MDg1NTE3ODdjMjBkMzE5N2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1z
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhl
ckVudHJ5UG9pbnRJdGVtcy5jcHAKQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgc2V0RXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBt
X2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQb2ludEl0ZW0obV90eXBlUmVmZXJlbmNlcy5s
YXN0KCkuZ2V0KCksICptX2N1cnJlbnRTZW1hbnRpYykpOworICAgICAgICBtX2VudHJ5UG9pbnRJ
dGVtcy5hcHBlbmQoRW50cnlQb2ludEl0ZW0obV90eXBlUmVmZXJlbmNlcy5sYXN0KCkuZ2V0KCks
ICptX2N1cnJlbnRTZW1hbnRpYywgbV9wYXRoKSk7CiAgICAgfQogCiAgICAgdm9pZCB2aXNpdChB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQpAQCAtODUs
NyArODUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAg
ICAgICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQb2ludEl0ZW0obV90eXBlUmVmZXJl
bmNlcy5sYXN0KCkuZ2V0KCksICptX2N1cnJlbnRTZW1hbnRpYykpOworICAgICAgICBtX2VudHJ5
UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQb2ludEl0ZW0obV90eXBlUmVmZXJlbmNlcy5sYXN0KCku
Z2V0KCksICptX2N1cnJlbnRTZW1hbnRpYywgbV9wYXRoKSk7CiAgICAgfQogCiAgICAgdm9pZCB2
aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pCkBAIC05
OCw3ICs5OCw5IEBAIHB1YmxpYzoKICAgICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVFbGVtZW50
IDogc3RydWN0dXJlRGVmaW5pdGlvbi5zdHJ1Y3R1cmVFbGVtZW50cygpKSB7CiAgICAgICAgICAg
ICBpZiAoc3RydWN0dXJlRWxlbWVudC5zZW1hbnRpYygpKQogICAgICAgICAgICAgICAgIG1fY3Vy
cmVudFNlbWFudGljID0gJipzdHJ1Y3R1cmVFbGVtZW50LnNlbWFudGljKCk7CisgICAgICAgICAg
ICBtX3BhdGguYXBwZW5kKHN0cnVjdHVyZUVsZW1lbnQubmFtZSgpKTsKICAgICAgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChzdHJ1Y3R1cmVFbGVtZW50KTsKKyAgICAgICAgICAgIG1fcGF0aC50
YWtlTGFzdCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMjIsNyArMTI0LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgICAgICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQb2ludEl0ZW0ocG9pbnRl
clR5cGUsICptX2N1cnJlbnRTZW1hbnRpYykpOworICAgICAgICBtX2VudHJ5UG9pbnRJdGVtcy5h
cHBlbmQoRW50cnlQb2ludEl0ZW0ocG9pbnRlclR5cGUsICptX2N1cnJlbnRTZW1hbnRpYywgbV9w
YXRoKSk7CiAgICAgfQogCiAgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYg
YXJyYXlSZWZlcmVuY2VUeXBlKQpAQCAtMTMxLDcgKzEzMyw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHNldEVycm9yKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAg
bV9lbnRyeVBvaW50SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKGFycmF5UmVmZXJlbmNlVHlw
ZSwgKm1fY3VycmVudFNlbWFudGljKSk7CisgICAgICAgIG1fZW50cnlQb2ludEl0ZW1zLmFwcGVu
ZChFbnRyeVBvaW50SXRlbShhcnJheVJlZmVyZW5jZVR5cGUsICptX2N1cnJlbnRTZW1hbnRpYywg
bV9wYXRoKSk7CiAgICAgfQogCiAgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5VHlwZSYgYXJyYXlU
eXBlKQpAQCAtMTQwLDcgKzE0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHNldEVycm9yKCk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbV9lbnRyeVBvaW50SXRl
bXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKGFycmF5VHlwZSwgKm1fY3VycmVudFNlbWFudGljKSk7
CisgICAgICAgIG1fZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbShhcnJheVR5
cGUsICptX2N1cnJlbnRTZW1hbnRpYywgbV9wYXRoKSk7CiAgICAgfQogCiAgICAgdm9pZCB2aXNp
dChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCkBAIC0xNDgs
MTEgKzE1MCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCghbV9jdXJyZW50U2VtYW50aWMp
OwogICAgICAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5zZW1hbnRpYygpKQogICAgICAgICAg
ICAgbV9jdXJyZW50U2VtYW50aWMgPSAmKnZhcmlhYmxlRGVjbGFyYXRpb24uc2VtYW50aWMoKTsK
LSAgICAgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKQotICAgICAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KCp2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAgICAgIEFT
U0VSVCh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAgICAgIG1fcGF0aC5hcHBlbmQo
dmFyaWFibGVEZWNsYXJhdGlvbi5uYW1lKCkpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
KnZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAgbV9wYXRoLnRha2VMYXN0KCk7
CiAgICAgfQogCiBwcml2YXRlOgorICAgIFZlY3RvcjxTdHJpbmc+IG1fcGF0aDsKICAgICBjb25z
dCBJbnRyaW5zaWNzJiBtX2ludHJpbnNpY3M7CiAgICAgQVNUOjpTZW1hbnRpYyogbV9jdXJyZW50
U2VtYW50aWMgeyBudWxscHRyIH07CiAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
QVNUOjpUeXBlUmVmZXJlbmNlPj4gbV90eXBlUmVmZXJlbmNlczsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1z
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5
UG9pbnRJdGVtcy5oCmluZGV4IDIwMzY3YmUzZTI5NTNjNmJlZDBlMWI3ZmY0ZTc4NDk0NDhlYmJk
ZmYuLjY2NjRlMmUzNDJlZmQ5MzFiYzZiMDRiMGU3MzIzZmI4YjhmMmUwY2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2lu
dEl0ZW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xH
YXRoZXJFbnRyeVBvaW50SXRlbXMuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIldITFNM
U2VtYW50aWMuaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNDUsMTQgKzQ2LDE2IEBAIGNsYXNzIEludHJpbnNpY3M7CiBjbGFzcyBVbm5h
bWVkVHlwZTsKIAogc3RydWN0IEVudHJ5UG9pbnRJdGVtIHsKLSAgICBFbnRyeVBvaW50SXRlbShB
U1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgQVNUOjpTZW1hbnRpYyYgc2VtYW50aWMpCi0g
ICAgICAgIDogdW5uYW1lZFR5cGUodW5uYW1lZFR5cGUpCi0gICAgICAgICwgc2VtYW50aWMoc2Vt
YW50aWMpCisgICAgRW50cnlQb2ludEl0ZW0oQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUs
IEFTVDo6U2VtYW50aWMmIHNlbWFudGljLCBWZWN0b3I8U3RyaW5nPiYgcGF0aCkKKyAgICAgICAg
OiB1bm5hbWVkVHlwZSgmdW5uYW1lZFR5cGUpCisgICAgICAgICwgc2VtYW50aWMoJnNlbWFudGlj
KQorICAgICAgICAsIHBhdGgocGF0aCkKICAgICB7CiAgICAgfQogCi0gICAgQVNUOjpVbm5hbWVk
VHlwZSYgdW5uYW1lZFR5cGU7Ci0gICAgQVNUOjpTZW1hbnRpYyYgc2VtYW50aWM7CisgICAgQVNU
OjpVbm5hbWVkVHlwZSogdW5uYW1lZFR5cGU7CisgICAgQVNUOjpTZW1hbnRpYyogc2VtYW50aWM7
CisgICAgVmVjdG9yPFN0cmluZz4gcGF0aDsKIH07CiAKIHN0cnVjdCBFbnRyeVBvaW50SXRlbXMg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xM
b29wQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TExvb3BDaGVja2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU2ODUwYjli
MjI5N2Y1OWE1NjY5MTIzMDZjYzg3Nzk1MWMzMmE4Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTExvb3BDaGVja2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldITFNMTG9vcENoZWNr
ZXIuaCIKLQotI2lmIEVOQUJMRShXRUJHUFUpCi0KLSNpbmNsdWRlICJXSExTTEJyZWFrLmgiCi0j
aW5jbHVkZSAiV0hMU0xDb250aW51ZS5oIgotI2luY2x1ZGUgIldITFNMRG9XaGlsZUxvb3AuaCIK
LSNpbmNsdWRlICJXSExTTEZhbGx0aHJvdWdoLmgiCi0jaW5jbHVkZSAiV0hMU0xGb3JMb29wLmgi
Ci0jaW5jbHVkZSAiV0hMU0xTd2l0Y2hTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTFZpc2l0
b3IuaCIKLSNpbmNsdWRlICJXSExTTFdoaWxlTG9vcC5oIgotI2luY2x1ZGUgPHd0Zi9TZXRGb3JT
Y29wZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLW5hbWVzcGFjZSBXSExTTCB7Ci0KLS8v
IFRoaXMgbWFrZXMgc3VyZSB0aGF0IGV2ZXJ5IG9jY3VyYW5jZSBvZiAiY29udGludWUsIiAiYnJl
YWssIiBhbmQgImZhbGx0aHJvdWdoIiBhcHBlYXIgd2l0aGluIHRoZSByZWxldmFudCBjb250cm9s
IGZsb3cgc3RydWN0dXJlLgotY2xhc3MgTG9vcENoZWNrZXIgOiBwdWJsaWMgVmlzaXRvciB7Ci1w
dWJsaWM6Ci0gICAgTG9vcENoZWNrZXIoKSA9IGRlZmF1bHQ7Ci0KLSAgICB2aXJ0dWFsIH5Mb29w
Q2hlY2tlcigpID0gZGVmYXVsdDsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHZpc2l0KEFTVDo6RnVu
Y3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pIG92ZXJyaWRlCi0gICAgewotICAg
ICAgICBBU1NFUlQoIW1fbG9vcERlcHRoKTsKLSAgICAgICAgQVNTRVJUKCFtX3N3aXRjaERlcHRo
KTsKLSAgICAgICAgVmlzaXRvcjo6dmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uKTsKLSAgICB9Ci0K
LSAgICB2b2lkIHZpc2l0KEFTVDo6V2hpbGVMb29wJiB3aGlsZUxvb3ApIG92ZXJyaWRlCi0gICAg
ewotICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOwot
Ci0gICAgICAgIFNldEZvclNjb3BlPHVuc2lnbmVkPiBjaGFuZ2UobV9sb29wRGVwdGgsIG1fbG9v
cERlcHRoICsgMSk7Ci0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuYm9keSgp
KTsKLSAgICAgICAgQVNTRVJUKG1fbG9vcERlcHRoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHZpc2l0
KEFTVDo6RG9XaGlsZUxvb3AmIGRvV2hpbGVMb29wKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAg
ewotICAgICAgICAgICAgU2V0Rm9yU2NvcGU8dW5zaWduZWQ+IGNoYW5nZShtX2xvb3BEZXB0aCwg
bV9sb29wRGVwdGggKyAxKTsKLSAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb1doaWxl
TG9vcC5ib2R5KCkpOwotICAgICAgICAgICAgQVNTRVJUKG1fbG9vcERlcHRoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb1doaWxlTG9vcC5jb25kaXRpb25hbCgp
KTsKLSAgICB9Ci0KLSAgICB2b2lkIHZpc2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9vcCkgb3ZlcnJp
ZGUKLSAgICB7Ci0gICAgICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYgdmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1l
bnQpIHsKLSAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9u
c1N0YXRlbWVudCk7Ci0gICAgICAgIH0sIFsmXShVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYg
ZXhwcmVzc2lvbikgewotICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGV4cHJlc3Npb24p
OwotICAgICAgICB9KSwgZm9yTG9vcC5pbml0aWFsaXphdGlvbigpKTsKLSAgICAgICAgaWYgKGZv
ckxvb3AuY29uZGl0aW9uKCkpCi0gICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmZvckxv
b3AuY29uZGl0aW9uKCkpOwotICAgICAgICBpZiAoZm9yTG9vcC5pbmNyZW1lbnQoKSkKLSAgICAg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZm9yTG9vcC5pbmNyZW1lbnQoKSk7Ci0KLSAgICAg
ICAgU2V0Rm9yU2NvcGU8dW5zaWduZWQ+IGNoYW5nZShtX2xvb3BEZXB0aCwgbV9sb29wRGVwdGgg
KyAxKTsKLSAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZvckxvb3AuYm9keSgpKTsKLSAgICAg
ICAgQVNTRVJUKG1fbG9vcERlcHRoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHZpc2l0KEFTVDo6U3dp
dGNoU3RhdGVtZW50JiBzd2l0Y2hTdGF0ZW1lbnQpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQoc3dpdGNoU3RhdGVtZW50LnZhbHVlKCkpOwotCi0gICAgICAgIFNl
dEZvclNjb3BlPHVuc2lnbmVkPiBjaGFuZ2UobV9zd2l0Y2hEZXB0aCwgbV9zd2l0Y2hEZXB0aCAr
IDEpOwotICAgICAgICBmb3IgKGF1dG8mIHN3aXRjaENhc2UgOiBzd2l0Y2hTdGF0ZW1lbnQuc3dp
dGNoQ2FzZXMoKSkKLSAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzd2l0Y2hDYXNlKTsK
LSAgICAgICAgQVNTRVJUKG1fc3dpdGNoRGVwdGgpOwotICAgIH0KLQotICAgIHZvaWQgdmlzaXQo
QVNUOjpCcmVhayYgYnJlYWtTdGF0ZW1lbnQpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAo
IW1fbG9vcERlcHRoICYmICFtX3N3aXRjaERlcHRoKSB7Ci0gICAgICAgICAgICBzZXRFcnJvcigp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIFZpc2l0b3I6OnZpc2l0
KGJyZWFrU3RhdGVtZW50KTsKLSAgICB9Ci0KLSAgICB2b2lkIHZpc2l0KEFTVDo6Q29udGludWUm
IGNvbnRpbnVlU3RhdGVtZW50KSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgaWYgKCFtX2xvb3BE
ZXB0aCkgewotICAgICAgICAgICAgc2V0RXJyb3IoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICBWaXNpdG9yOjp2aXNpdChjb250aW51ZVN0YXRlbWVudCk7Ci0gICAg
fQotCi0gICAgdm9pZCB2aXNpdChBU1Q6OkZhbGx0aHJvdWdoJiBmYWxsdGhyb3VnaFN0YXRlbWVu
dCkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGlmICghbV9zd2l0Y2hEZXB0aCkgewotICAgICAg
ICAgICAgc2V0RXJyb3IoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICBWaXNpdG9yOjp2aXNpdChmYWxsdGhyb3VnaFN0YXRlbWVudCk7Ci0gICAgfQotCi0gICAgdW5z
aWduZWQgbV9sb29wRGVwdGggeyAwIH07Ci0gICAgdW5zaWduZWQgbV9zd2l0Y2hEZXB0aCB7IDAg
fTsKLX07Ci0KLWJvb2wgY2hlY2tMb29wcyhQcm9ncmFtJiBwcm9ncmFtKQotewotICAgIExvb3BD
aGVja2VyIGxvb3BDaGVja2VyOwotICAgIGxvb3BDaGVja2VyLlZpc2l0b3I6OnZpc2l0KHByb2dy
YW0pOwotICAgIHJldHVybiAhbG9vcENoZWNrZXIuZXJyb3IoKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV0hMU0wKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdF
QkdQVSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMTG9vcENoZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMTG9vcENoZWNrZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZjYWM2N2Vi
OTY5NzAwNTU0ZDBhMWU3MDMzZWFlMjk2NmUxMmY5Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTExvb3BDaGVja2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCR1BVKQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLW5hbWVzcGFjZSBXSExTTCB7Ci0KLWNsYXNzIFByb2dyYW07Ci0KLWJvb2wg
Y2hlY2tMb29wcyhQcm9ncmFtJik7Ci0KLX0KLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhdGVtZW50QmVoYXZpb3JD
aGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3Rh
dGVtZW50QmVoYXZpb3JDaGVja2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NjQxNDMwMTJiZTU4ODhjOGNm
NTU4MDEyMzAxZWQ1Y2U2YzE5NTk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXIuY3BwCkBA
IC0wLDAgKzEsMjQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldITFNMU3RhdGVtZW50QmVoYXZpb3JDaGVja2VyLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BV
KQorCisjaW5jbHVkZSAiV0hMU0xEb1doaWxlTG9vcC5oIgorI2luY2x1ZGUgIldITFNMRm9yTG9v
cC5oIgorI2luY2x1ZGUgIldITFNMSWZTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTEluZmVy
VHlwZXMuaCIKKyNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXSExTTFN3aXRj
aFN0YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNMV2hpbGVMb29wLmgiCisjaW5jbHVkZSA8Y3N0
ZGludD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFN0
YXRlbWVudEJlaGF2aW9yQ2hlY2tlciA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICBl
bnVtIGNsYXNzIEJlaGF2aW9yIDogdWludDhfdCB7CisgICAgICAgIFJldHVybiA9IDEgPDwgMCwK
KyAgICAgICAgQnJlYWsgPSAxIDw8IDEsCisgICAgICAgIENvbnRpbnVlID0gMSA8PCAyLAorICAg
ICAgICBGYWxsdGhyb3VnaCA9IDEgPDwgMywKKyAgICAgICAgTm90aGluZyA9IDEgPDwgNAorICAg
IH07CisKKyAgICBPcHRpb25TZXQ8QmVoYXZpb3I+IHRha2VGdW5jdGlvbkJlaGF2aW9yKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX3N0YWNrLnNpemUoKSA9PSAxKTsKKyAgICAgICAgcmV0dXJu
IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCB2aXNpdChB
U1Q6OkJyZWFrJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHsgQmVo
YXZpb3I6OkJyZWFrIH0pOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpGYWxsdGhyb3Vn
aCYpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3N0YWNrLmFwcGVuZCh7IEJlaGF2aW9yOjpG
YWxsdGhyb3VnaCB9KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6Q29udGludWUmKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgbV9zdGFjay5hcHBlbmQoeyBCZWhhdmlvcjo6Q29udGlu
dWUgfSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlJldHVybiYpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBtX3N0YWNrLmFwcGVuZCh7IEJlaGF2aW9yOjpSZXR1cm4gfSk7CisgICAg
fQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlRyYXAmKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
bV9zdGFjay5hcHBlbmQoeyBCZWhhdmlvcjo6UmV0dXJuIH0pOworICAgIH0KKworICAgIHZvaWQg
dmlzaXQoQVNUOjpEb1doaWxlTG9vcCYgZG9XaGlsZUxvb3ApIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG9XaGlsZUxvb3AuYm9keSgpKTsKKyAgICAgICAgaWYg
KGVycm9yKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8gYiA9IG1fc3RhY2su
dGFrZUxhc3QoKTsKKyAgICAgICAgYi5yZW1vdmUoQmVoYXZpb3I6OkJyZWFrKTsKKyAgICAgICAg
Yi5yZW1vdmUoQmVoYXZpb3I6OkNvbnRpbnVlKTsKKyAgICAgICAgYi5hZGQoQmVoYXZpb3I6Ok5v
dGhpbmcpOworICAgICAgICBtX3N0YWNrLmFwcGVuZChiKTsKKyAgICB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9vcCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIC8vIFRo
ZSBpbml0aWFsaXphdGlvbiBhbHdheXMgaGFzIGEgYmVoYXZpb3Igb2YgTm90aGluZywgd2hpY2gg
d2UgYWxyZWFkeSBhZGQgdW5jb25kaXRpb25hbGx5IGJlbG93LAorICAgICAgICAvLyBzbyB3ZSBj
YW4ganVzdCBpZ25vcmUgdGhlIGluaXRpYWxpemF0aW9uLgorCisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChmb3JMb29wLmJvZHkoKSk7CisgICAgICAgIGlmIChlcnJvcigpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBhdXRvIGIgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAg
IGIucmVtb3ZlKEJlaGF2aW9yOjpCcmVhayk7CisgICAgICAgIGIucmVtb3ZlKEJlaGF2aW9yOjpD
b250aW51ZSk7CisgICAgICAgIGIuYWRkKEJlaGF2aW9yOjpOb3RoaW5nKTsKKyAgICAgICAgbV9z
dGFjay5hcHBlbmQoYik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OldoaWxlTG9vcCYg
d2hpbGVMb29wKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdo
aWxlTG9vcC5ib2R5KCkpOworICAgICAgICBpZiAoZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgYXV0byBiID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgICAgICBiLnJlbW92
ZShCZWhhdmlvcjo6QnJlYWspOworICAgICAgICBiLnJlbW92ZShCZWhhdmlvcjo6Q29udGludWUp
OworICAgICAgICBiLmFkZChCZWhhdmlvcjo6Tm90aGluZyk7CisgICAgICAgIG1fc3RhY2suYXBw
ZW5kKGIpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpTd2l0Y2hDYXNlJiBzd2l0Y2hD
YXNlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQoc3dpdGNoQ2FzZSk7
CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlN3aXRjaFN0YXRlbWVudCYgc3dpdGNoU3Rh
dGVtZW50KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKHN3aXRjaFN0YXRlbWVudC5zd2l0
Y2hDYXNlcygpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9zdGFjay5hcHBlbmQoeyBCZWhh
dmlvcjo6Tm90aGluZyB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIE9wdGlvblNldDxCZWhhdmlvcj4gcmVkdWN0aW9uID0geyB9OworICAgICAgICBmb3IgKGF1
dG8mIHN3aXRjaENhc2UgOiBzd2l0Y2hTdGF0ZW1lbnQuc3dpdGNoQ2FzZXMoKSkgeworICAgICAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN3aXRjaENhc2UpOworICAgICAgICAgICAgaWYgKGVy
cm9yKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgYXV0byBiID0gbV9z
dGFjay50YWtlTGFzdCgpOworICAgICAgICAgICAgcmVkdWN0aW9uID0gT3B0aW9uU2V0PEJlaGF2
aW9yPjo6ZnJvbVJhdyhyZWR1Y3Rpb24udG9SYXcoKSB8IGIudG9SYXcoKSk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHJlZHVjdGlvbi5jb250YWlucyhCZWhhdmlvcjo6Tm90aGluZykpIHsKKyAg
ICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgcmVkdWN0aW9uLnJlbW92ZShCZWhhdmlvcjo6QnJlYWspOworICAgICAgICByZWR1Y3Rp
b24ucmVtb3ZlKEJlaGF2aW9yOjpGYWxsdGhyb3VnaCk7CisgICAgICAgIHJlZHVjdGlvbi5hZGQo
QmVoYXZpb3I6Ok5vdGhpbmcpOworICAgICAgICBtX3N0YWNrLmFwcGVuZChyZWR1Y3Rpb24pOwor
ICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpJZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpIG92
ZXJyaWRlCisgICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuYm9k
eSgpKTsKKyAgICAgICAgaWYgKGVycm9yKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGF1dG8gYiA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgT3B0aW9uU2V0PEJlaGF2aW9y
PiBiUHJpbWU7CisgICAgICAgIGlmIChpZlN0YXRlbWVudC5lbHNlQm9keSgpKSB7CisgICAgICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmlmU3RhdGVtZW50LmVsc2VCb2R5KCkpOworICAgICAg
ICAgICAgaWYgKGVycm9yKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
YlByaW1lID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IGJQcmltZSA9IHsgQmVoYXZpb3I6Ok5vdGhpbmcgfTsKKyAgICAgICAgbV9zdGFjay5hcHBlbmQo
T3B0aW9uU2V0PEJlaGF2aW9yPjo6ZnJvbVJhdyhiLnRvUmF3KCkgfCBiUHJpbWUudG9SYXcoKSkp
OworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVt
ZW50Jikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHsgQmVoYXZpb3I6
Ok5vdGhpbmcgfSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkJsb2NrJiBibG9jaykg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChibG9jay5zdGF0ZW1lbnRzKCkuaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICBtX3N0YWNrLmFwcGVuZCh7IEJlaGF2aW9yOjpOb3RoaW5nIH0pOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgT3B0aW9uU2V0PEJlaGF2
aW9yPiByZWR1Y3Rpb24gPSB7IH07CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxv
Y2suc3RhdGVtZW50cygpLnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGJsb2NrLnN0YXRlbWVudHMoKVtpXSk7CisgICAgICAgICAgICBpZiAoZXJyb3Io
KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBhdXRvIGIgPSBtX3N0YWNr
LnRha2VMYXN0KCk7CisgICAgICAgICAgICBpZiAoIWIuY29udGFpbnMoQmVoYXZpb3I6Ok5vdGhp
bmcpKSB7CisgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBiLnJlbW92ZShCZWhhdmlvcjo6Tm90aGlu
Zyk7CisgICAgICAgICAgICBpZiAoYi5jb250YWlucyhCZWhhdmlvcjo6RmFsbHRocm91Z2gpKSB7
CisgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZWR1Y3Rpb24gPSBPcHRpb25TZXQ8QmVoYXZpb3I+
Ojpmcm9tUmF3KHJlZHVjdGlvbi50b1JhdygpIHwgYi50b1JhdygpKTsKKyAgICAgICAgfQorICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYmxvY2suc3RhdGVtZW50cygpW2Jsb2NrLnN0YXRlbWVu
dHMoKS5zaXplKCkgLSAxXSk7CisgICAgICAgIGlmIChlcnJvcigpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBhdXRvIGIgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIG1fc3Rh
Y2suYXBwZW5kKE9wdGlvblNldDxCZWhhdmlvcj46OmZyb21SYXcocmVkdWN0aW9uLnRvUmF3KCkg
fCBiLnRvUmF3KCkpKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbnNTdGF0ZW1lbnQmKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9zdGFjay5hcHBl
bmQoeyBCZWhhdmlvcjo6Tm90aGluZyB9KTsKKyAgICB9CisKKyAgICBWZWN0b3I8T3B0aW9uU2V0
PEJlaGF2aW9yPj4gbV9zdGFjazsKK307CisKK2Jvb2wgY2hlY2tTdGF0ZW1lbnRCZWhhdmlvcihQ
cm9ncmFtJiBwcm9ncmFtKQoreworICAgIFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlciBzdGF0ZW1l
bnRCZWhhdmlvckNoZWNrZXI7CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBw
cm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkgeworICAgICAgICBzdGF0ZW1lbnRCZWhhdmlv
ckNoZWNrZXIuVmlzaXRvcjo6dmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICAgICAgaWYg
KHN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlci5lcnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBhdXRvIGJlaGF2aW9yID0gc3RhdGVtZW50QmVoYXZpb3JDaGVja2VyLnRh
a2VGdW5jdGlvbkJlaGF2aW9yKCk7CisgICAgICAgIGlmIChtYXRjaGVzKGZ1bmN0aW9uRGVmaW5p
dGlvbi0+dHlwZSgpLCBwcm9ncmFtLmludHJpbnNpY3MoKS52b2lkVHlwZSgpKSkgeworICAgICAg
ICAgICAgYmVoYXZpb3IucmVtb3ZlKFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlcjo6QmVoYXZpb3I6
OlJldHVybik7CisgICAgICAgICAgICBiZWhhdmlvci5yZW1vdmUoU3RhdGVtZW50QmVoYXZpb3JD
aGVja2VyOjpCZWhhdmlvcjo6Tm90aGluZyk7CisgICAgICAgICAgICBpZiAoYmVoYXZpb3IgIT0g
T3B0aW9uU2V0PFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlcjo6QmVoYXZpb3I+KCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYg
KGJlaGF2aW9yICE9IFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlcjo6QmVoYXZpb3I6OlJldHVybikK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdITFNMCisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlci5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGF0ZW1lbnRCZWhh
dmlvckNoZWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZWNkZmU2MWZhODAyYTJiNDQ1NDNhMDE2YjFkMDRl
MjZlNzRiM2VjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXIuaApAQCAtMCwwICsxLDQyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFByb2dyYW07CisK
K2Jvb2wgY2hlY2tTdGF0ZW1lbnRCZWhhdmlvcihQcm9ncmFtJik7CisKK30KKworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQKaW5kZXggYjYxMjQxOTJjZTk0NDUyZjZkMWZlNGJiZjMwOWZjZGFjNDFi
NDcyYS4uNjQ5ZGQ3ZTBkNjE0NGI1ZjRiNWY5MzM1NDUzMTZkNjg1ZDA1NjI4NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKQEAgLTMxOCw2ICszMTgsNyBAQCBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRo
ZXNpemVDb25zdHJ1Y3RvcnMuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNp
emVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3lu
dGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
SW50cmluc2ljcy5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhdGVtZW50QmVoYXZp
b3JDaGVja2VyLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5jcHAK
IE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcApAQCAtMzI1LDcgKzMyNiwxMSBA
QCBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2lvbkNoZWNrZXIuY3BwCiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TExpdGVyYWxUeXBlQ2hlY2tlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSGlnaFpv
bWJpZUZpbmRlci5jcHAKLU1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTG9vcENoZWNrZXIuY3Bw
CitNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAKK01vZHVsZXMv
d2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCitNb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5jcHAKK01vZHVsZXMvd2ViZ3B1
L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwCitNb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAKIE1vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMRnVuY3Rpb25TdGFnZUNoZWNrZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xCdWlsdEluU2VtYW50aWMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNmZlZGMyMjI0ZjhiMTVmMjVkMDEzMzg3MTBh
MDY5NjFmNjM1NjRkOC4uMGVjNWFmNWRmYjUwM2Y0Y2UyYWE1MDVlOTE0MTcyNDBmOTdiYzlhMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtNjQzNyw4ICs2NDM3LDYgQEAKIAkJMUNBMEMyRTUyMUVFRDEyQTAwQTExODYwIC8qIFdI
TFNMRnVuY3Rpb25TdGFnZUNoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xGdW5jdGlvblN0
YWdlQ2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0EwQzJFQTIxRUVE
NkY1MDBBMTE4NjAgLyogV0hMU0xMaXRlcmFsVHlwZUNoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0hMU0xMaXRlcmFsVHlwZUNoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUNBMEMyRUMyMUVFRDZGNjAwQTExODYwIC8qIFdITFNMTGl0ZXJhbFR5cGVDaGVja2VyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMTGl0ZXJhbFR5cGVDaGVja2VyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUNBMEMyRjQyMUVFREFEMDAwQTExODYwIC8qIFdITFNMTG9v
cENoZWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xMb29wQ2hlY2tlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFDQTBDMkY1MjFFRURBRDEwMEExMTg2MCAvKiBX
SExTTExvb3BDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMTG9vcENoZWNrZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBMTlFMDMwREMyNTU5NTAwNjVBOTk0IC8qIEV2
ZW50TG9vcE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEV2
ZW50TG9vcE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBMTlFMTUwREMy
NTVDQTAwNjVBOTk0IC8qIEV2ZW50TG9vcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBFdmVudExvb3AuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBRjM0N0Uw
QTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJTY3JpcHRPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTY0NjAsNiArNjQ1OCwxOCBAQAogCQkxQ0RENDVFNDBCQTlDODQ2MDBGOTAxNDcgLyog
RGVidWdSZWxlYXNlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IERl
YnVnUmVsZWFzZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNERDQ1
RTUwQkE5Qzg0NjAwRjkwMTQ3IC8qIFdlYkNvcmUueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lnhj
Y29uZmlnOyBwYXRoID0gV2ViQ29yZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUNERDQ1RTYwQkE5Qzg0NjAwRjkwMTQ3IC8qIEJhc2UueGNjb25maWcgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gQmFzZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMUNFQ0IzQTgyMUYyQjY3MzAwRjQ0NTQyIC8qIFdITFNMU3RhdGVtZW50QmVo
YXZpb3JDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMU3RhdGVtZW50QmVoYXZpb3JDaGVj
a2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDRUNCM0E5MjFGMkI2NzMwMEY0
NDU0MiAvKiBXSExTTFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXSExTTFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTFDRUNCM0FGMjFGMkI5ODQwMEY0NDU0MiAvKiBXSExTTEZ1bmN0aW9uV3Jp
dGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMRnVuY3Rpb25Xcml0ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0VDQjNCMDIxRjJCOTg1MDBGNDQ1NDIgLyogV0hM
U0xUeXBlTmFtZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xUeXBlTmFtZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNFQ0IzQjEyMUYyQjk4NTAwRjQ0NTQyIC8qIFdITFNMVHlw
ZU5hbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMVHlwZU5hbWVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNFQ0IzQjIyMUYyQjk4NjAwRjQ0NTQyIC8qIFdITFNM
RnVuY3Rpb25Xcml0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xGdW5jdGlvbldyaXRlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0VDQjNCNTIxRjUwQUM3MDBGNDQ1NDIgLyog
V0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xNZXRh
bENvZGVHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0VDQjNC
NjIxRjUwQUM3MDBGNDQ1NDIgLyogV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUNFQ0IzQjgyMUY1MEQxMDAwRjQ0NTQyIC8qIFdITFNMTmF0aXZlRnVuY3Rpb25Xcml0
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDRUNCM0I5MjFGNTBEMTAwMEY0NDU0MiAv
KiBXSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMTmF0aXZl
RnVuY3Rpb25Xcml0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNFQ0IzQkEy
MUY1MTFBQTAwRjQ0NTQyIC8qIFdITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMUNFQ0IzQkIyMUY1MTFBQTAwRjQ0NTQyIC8qIFdITFNMRW50cnlQ
b2ludFNjYWZmb2xkaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMRW50cnlQb2ludFNjYWZmb2xk
aW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDRkFFMzIyMEE2RDZBM0YwMDMy
NTkzRCAvKiBsaWJvYmpjLmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJvYmpjLmR5
bGliOyBwYXRoID0gL3Vzci9saWIvbGlib2JqYy5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJzb2x1
dGU+IjsgfTsKIAkJMURDNTUzRkQyMTFCQTEyQTAwNEI3ODBFIC8qIE5hdmlnYXRvclNoYXJlLmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBOYXZpZ2F0b3JTaGFyZS5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFEQzU1M0ZGMjExQkE4NDEwMDRCNzgwRSAvKiBTaGFyZURhdGEu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNoYXJlRGF0YS5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNzE1MCw2ICsxNzE2MCwyMyBAQAogCQkJdGFiV2lkdGggPSA0Owog
CQkJdXNlc1RhYnMgPSAwOwogCQl9OworCQkxQ0VDQjNBRDIxRjJCOTY0MDBGNDQ1NDIgLyogTWV0
YWwgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTFDRUNC
M0JBMjFGNTExQUEwMEY0NDU0MiAvKiBXSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAgKi8s
CisJCQkJMUNFQ0IzQkIyMUY1MTFBQTAwRjQ0NTQyIC8qIFdITFNMRW50cnlQb2ludFNjYWZmb2xk
aW5nLmggKi8sCisJCQkJMUNFQ0IzQUYyMUYyQjk4NDAwRjQ0NTQyIC8qIFdITFNMRnVuY3Rpb25X
cml0ZXIuY3BwICovLAorCQkJCTFDRUNCM0IyMjFGMkI5ODYwMEY0NDU0MiAvKiBXSExTTEZ1bmN0
aW9uV3JpdGVyLmggKi8sCisJCQkJMUNFQ0IzQjUyMUY1MEFDNzAwRjQ0NTQyIC8qIFdITFNMTWV0
YWxDb2RlR2VuZXJhdG9yLmNwcCAqLywKKwkJCQkxQ0VDQjNCNjIxRjUwQUM3MDBGNDQ1NDIgLyog
V0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuaCAqLywKKwkJCQkxQ0VDQjNCODIxRjUwRDEwMDBGNDQ1
NDIgLyogV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAgKi8sCisJCQkJMUNFQ0IzQjkyMUY1
MEQxMDAwRjQ0NTQyIC8qIFdITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuaCAqLywKKwkJCQkxQ0VD
QjNCMTIxRjJCOTg1MDBGNDQ1NDIgLyogV0hMU0xUeXBlTmFtZXIuY3BwICovLAorCQkJCTFDRUNC
M0IwMjFGMkI5ODUwMEY0NDU0MiAvKiBXSExTTFR5cGVOYW1lci5oICovLAorCQkJKTsKKwkJCXBh
dGggPSBNZXRhbDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTI2Qjk5OThE
MTgwM0FERkEwMEQwMTEyMSAvKiBjc3NqaXQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKApAQCAtMjU1NjIsNiArMjU1ODksNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkxQ0EwQzJGNjIxRUVEQUQyMDBBMTE4NjAgLyogQVNUICov
LAorCQkJCTFDRUNCM0FEMjFGMkI5NjQwMEY0NDU0MiAvKiBNZXRhbCAqLywKIAkJCQlDMjM0QTlC
MjIxRTkyQzFGMDAzQzk4NEQgLyogV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAgKi8s
CiAJCQkJQzIzNEE5QUUyMUU5MkMxQTAwM0M5ODREIC8qIFdITFNMQ2hlY2tEdXBsaWNhdGVGdW5j
dGlvbnMuaCAqLywKIAkJCQkxQzg0MEI5QjIxRUM0MDA5MDBEMDUwMEQgLyogV0hMU0xDaGVja2Vy
LmNwcCAqLywKQEAgLTI1NTgwLDggKzI1NjA4LDYgQEAKIAkJCQlDMjEwRTkxMjIxQjRCRDEwMDBC
N0Y4M0QgLyogV0hMU0xMZXhlci5oICovLAogCQkJCTFDQTBDMkVDMjFFRUQ2RjYwMEExMTg2MCAv
KiBXSExTTExpdGVyYWxUeXBlQ2hlY2tlci5jcHAgKi8sCiAJCQkJMUNBMEMyRUEyMUVFRDZGNTAw
QTExODYwIC8qIFdITFNMTGl0ZXJhbFR5cGVDaGVja2VyLmggKi8sCi0JCQkJMUNBMEMyRjQyMUVF
REFEMDAwQTExODYwIC8qIFdITFNMTG9vcENoZWNrZXIuY3BwICovLAotCQkJCTFDQTBDMkY1MjFF
RURBRDEwMEExMTg2MCAvKiBXSExTTExvb3BDaGVja2VyLmggKi8sCiAJCQkJQzIzNEE5OEQyMUU4
ODg4NDAwM0M5ODREIC8qIFdITFNMTmFtZUNvbnRleHQuY3BwICovLAogCQkJCUMyMzRBOThFMjFF
ODg4ODUwMDNDOTg0RCAvKiBXSExTTE5hbWVDb250ZXh0LmggKi8sCiAJCQkJQzIzNEE5OEEyMUU4
ODgzRTAwM0M5ODREIC8qIFdITFNMTmFtZVJlc29sdmVyLmNwcCAqLywKQEAgLTI1NTk3LDYgKzI1
NjIzLDggQEAKIAkJCQlDMjM0QTk5NzIxRTkwRjI4MDAzQzk4NEQgLyogV0hMU0xSZXNvbHZlT3Zl
cmxvYWRJbXBsLmggKi8sCiAJCQkJQzIzNEE5OUQyMUU5MTBCRDAwM0M5ODREIC8qIFdITFNMUmVz
b2x2aW5nVHlwZS5oICovLAogCQkJCUMyMUJGNzQ1MjFDRDk2OTgwMDIyNzk3OSAvKiBXSExTTFN0
YW5kYXJkTGlicmFyeS50eHQgKi8sCisJCQkJMUNFQ0IzQTkyMUYyQjY3MzAwRjQ0NTQyIC8qIFdI
TFNMU3RhdGVtZW50QmVoYXZpb3JDaGVja2VyLmNwcCAqLywKKwkJCQkxQ0VDQjNBODIxRjJCNjcz
MDBGNDQ1NDIgLyogV0hMU0xTdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXIuaCAqLywKIAkJCQlDMjM0
QTlBOTIxRTkyQzE3MDAzQzk4NEQgLyogV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0
aC5jcHAgKi8sCiAJCQkJQzIzNEE5QUYyMUU5MkMxQjAwM0M5ODREIC8qIFdITFNMU3ludGhlc2l6
ZUFycmF5T3BlcmF0b3JMZW5ndGguaCAqLywKIAkJCQlDMjM0QTlCMDIxRTkyQzFDMDAzQzk4NEQg
LyogV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcCAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359644</attachid>
            <date>2019-01-20 13:09:43 -0800</date>
            <delta_ts>2019-01-20 13:37:05 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-193531-20190120130942.patch</filename>
            <type>text/plain</type>
            <size>152018</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwMTkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzA0MWRjMmQxNjQ1ZjQ0
OTc0ZjBiZDQ5YjQ0NTczYzBiNjM3NjNkNi4uODQyYTlkMGYzOWRhOWZhNWM2N2ExZDk1M2QwMjA5
OTg1MTE0ZDc3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMSBAQAorMjAxOS0wMS0yMCAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0g
SW1wbGVtZW50IE1ldGFsIGNvZGUgZ2VuZXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkzNTMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6dGFyZ2V0SW5kZXgpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaDoKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4cHJlc3Npb246OnJlc29sdmVkVHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpFeHByZXNzaW9uOjp0eXBlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0
aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
OjpuYW1lKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1
cmVEZWZpbml0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpTdHJ1Y3R1cmVE
ZWZpbml0aW9uOjpmaW5kKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6Ok1ldGFsOjpFbnRyeVBvaW50U2NhZmZvbGRpbmc6OkVudHJ5UG9pbnRTY2FmZm9sZGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGlu
Zzo6aGVscGVyVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpFbnRyeVBv
aW50U2NhZmZvbGRpbmc6OnNpZ25hdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0
YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpNZXRhbDo6RW50cnlQb2ludFNjYWZmb2xkaW5nOjpwYWNrKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExvb3BDaGVj
a2VyLmguCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlv
bldyaXRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5j
dGlvbkRlY2xhcmF0aW9uV3JpdGVyOjpGdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWNsYXJhdGlvbldyaXRlcjo6dG9T
dHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlvbkRlZmluaXRp
b25Xcml0ZXI6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcik6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dG9TdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OmNvbnN0
YW50RXhwcmVzc2lvblN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1
bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6Z2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6bWV0YWxGdW5jdGlvbnMpOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMb29wQ2hlY2tlci5o
LgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWV0YWxDb2RlR2Vu
ZXJhdG9yLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oLgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6Ok1ldGFsOjpnZW5lcmF0ZU1ldGFsQ29kZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMb29wQ2hlY2tlci5oLgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6Z2V0TmF0aXZlTmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6Om1hcEZ1bmN0aW9uTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OmNvbnZlcnRBZGRyZXNzU3BhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjp3cml0ZU5hdGl2ZUZ1bmN0aW9uKToKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVy
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
TG9vcENoZWNrZXIuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExT
TFR5cGVOYW1lci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpC
YXNlVHlwZU5hbWVOb2RlOjpCYXNlVHlwZU5hbWVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpNZXRhbDo6QmFzZVR5cGVOYW1lTm9kZTo6aXNBcnJheVR5cGVOYW1lTm9kZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkJhc2VUeXBlTmFtZU5vZGU6OmlzQXJy
YXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
Ok1ldGFsOjpCYXNlVHlwZU5hbWVOb2RlOjppc1BvaW50ZXJUeXBlTmFtZU5vZGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpCYXNlVHlwZU5hbWVOb2RlOjppc1JlZmVy
ZW5jZVR5cGVOYW1lTm9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6
OkJhc2VUeXBlTmFtZU5vZGU6OmNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpN
ZXRhbDo6QmFzZVR5cGVOYW1lTm9kZTo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpNZXRhbDo6QmFzZVR5cGVOYW1lTm9kZTo6cGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpNZXRhbDo6QmFzZVR5cGVOYW1lTm9kZTo6bWFuZ2xlZE5hbWUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpBcnJheVR5cGVOYW1lTm9kZTo6QXJyYXlUeXBlTmFt
ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpBcnJheVR5cGVOYW1lTm9k
ZTo6bnVtRWxlbWVudHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpB
cnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZTo6QXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9k
ZTo6YWRkcmVzc1NwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6
UG9pbnRlclR5cGVOYW1lTm9kZTo6UG9pbnRlclR5cGVOYW1lTm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6TWV0YWw6OlBvaW50ZXJUeXBlTmFtZU5vZGU6OmFkZHJlc3NTcGFjZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlJlZmVyZW5jZVR5cGVOYW1lTm9k
ZTo6UmVmZXJlbmNlVHlwZU5hbWVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRh
bDo6UmVmZXJlbmNlVHlwZU5hbWVOb2RlOjpuYW1lZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6OlR5cGVOYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6dmlzaXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
Ok1ldGFsOjpmaW5kSW5WZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpm
aW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5hbWVyOjptYW5nbGVk
TmFtZUZvclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6
OmNyZWF0ZU5hbWVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5h
bWVyOjppbnNlcnQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpNZXRhbFR5cGVE
ZWNsYXJhdGlvbldyaXRlcjo6TWV0YWxUeXBlRGVjbGFyYXRpb25Xcml0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpNZXRhbFR5cGVEZWNsYXJhdGlvbldyaXRlcjo6dG9TdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpNZXRhbFR5cGVEZWNsYXJhdGlv
bldyaXRlcjo6dmlzaXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFt
ZXI6Om1ldGFsVHlwZURlY2xhcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0
YWw6OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5hbWVy
OjplbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpN
ZXRhbDo6VHlwZU5hbWVyOjplbWl0TmFtZWRUeXBlRGVmaW5pdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6bWV0YWxUeXBlRGVmaW5pdGlvbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6Om1hbmdsZWROYW1lRm9yRW51
bWVyYXRpb25NZW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFt
ZXI6Om1hbmdsZWROYW1lRm9yU3RydWN0dXJlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6bWV0YWxUeXBlcyk6CisgICAgICAgICogTW9kdWxlcy93
ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6Z2VuZXJhdGVOZXh0VHlwZU5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6OmdlbmVyYXRlTmV4dFN0cnVj
dHVyZUVsZW1lbnROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5h
bWVyOjpnZW5lcmF0ZU5leHRFbnVtZXJhdGlvbk1lbWJlck5hbWUpOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6Y2hlY2tTZW1hbnRpY3MpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OnZp
c2l0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9p
bnRJdGVtcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6R2F0aGVyZXI6OnZpc2l0KToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVt
cy5oOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkVudHJ5UG9pbnRJdGVtOjpFbnRyeVBvaW50
SXRlbSk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMb29wQ2hlY2tlci5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGF0ZW1l
bnRCZWhhdmlvckNoZWNrZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpT
dGF0ZW1lbnRCZWhhdmlvckNoZWNrZXI6OnRha2VGdW5jdGlvbkJlaGF2aW9yKToKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpjaGVja1N0YXRlbWVudEJlaGF2aW9yKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlci5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMb29wQ2hlY2tl
ci5oLgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKwogMjAxOS0wMS0xOCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJs
c29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZlcnQgcjIzODgxNSwgaXQgYnJva2UgV0sxIHZp
ZGVvIGZ1bGxzY3JlZW4gb24gTWFjCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5oCmluZGV4IDQz
YjY5ODZhZjdkNGI3MWMyODY3N2VjNjVjZWNkOGVhN2M0NzMwNGEuLjdiMzZjYWFiYzZiZmNhNWQ0
NDVlMjJiOGQ2MmRiOWVhMmM3OGEwODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5oCkBA
IC02OSw2ICs2OSw3IEBAIHB1YmxpYzoKICAgICBCdWlsdEluU2VtYW50aWMoQnVpbHRJblNlbWFu
dGljJiYpID0gZGVmYXVsdDsKIAogICAgIFZhcmlhYmxlIHZhcmlhYmxlKCkgY29uc3QgeyByZXR1
cm4gbV92YXJpYWJsZTsgfQorICAgIE9wdGlvbmFsPHVuc2lnbmVkPiYgdGFyZ2V0SW5kZXgoKSB7
IHJldHVybiBtX3RhcmdldEluZGV4OyB9CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQnVp
bHRJblNlbWFudGljJiBvdGhlcikgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKaW5kZXgg
OGZlZjYyOTU5ZDczNjNlMWYxYmJiMjNkNzMzOThmOGEyZDQ4YmRlMS4uMDFmMmZmYjgwNmEwNTc2
YmM2MDU2ZTA2MWFiMTcyYmUyNjQ2MTZlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaApAQCAtNTcsNyAr
NTcsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBMZXhlcjo6VG9rZW4mIG9yaWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fb3JpZ2luOyB9CiAKLSAgICBVbm5hbWVkVHlwZSogdHlwZSgpIHsgcmV0dXJu
IG1fdHlwZSA/ICYqbV90eXBlIDogbnVsbHB0cjsgfQorICAgIFVubmFtZWRUeXBlKiByZXNvbHZl
ZFR5cGUoKSB7IHJldHVybiBtX3R5cGUgPyAmKm1fdHlwZSA6IG51bGxwdHI7IH0KIAogICAgIHZv
aWQgc2V0VHlwZShVbmlxdWVSZWY8VW5uYW1lZFR5cGU+JiYgdHlwZSkKICAgICB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlv
bkRlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgKaW5kZXggNTA4Mjg1ODQ2MDcwNTc3ZDg5NGM1MzRh
Mzk3NGJjZTBhYmIyMWYxMS4uYzE1NDY2YTcwYmJiYWFhNzVmMTcwZTEyNmViNTJkYzg4Yjg0ODE2
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaApAQCAtNzAsNiArNzAsNyBA
QCBwdWJsaWM6CiAgICAgY29uc3QgVW5uYW1lZFR5cGUmIHR5cGUoKSBjb25zdCB7IHJldHVybiBt
X3R5cGU7IH0KICAgICBVbm5hbWVkVHlwZSYgdHlwZSgpIHsgcmV0dXJuIG1fdHlwZTsgfQogICAg
IGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIFN0cmlu
ZyYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQogICAgIGJvb2wgaXNDYXN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9uYW1lID09ICJvcGVyYXRvciBjYXN0IjsgfQogICAgIGNvbnN0IFZhcmlhYmxlRGVj
bGFyYXRpb25zJiBwYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CiAg
ICAgVmFyaWFibGVEZWNsYXJhdGlvbnMmIHBhcmFtZXRlcnMoKSB7IHJldHVybiBtX3BhcmFtZXRl
cnM7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZURlZmluaXRpb24uaAppbmRleCA0NTZjNmUxMjM4
YmNiNTdlN2NmZTFlMDE3ODY5ZjBmNDE0NDBhNzY5Li4wMjYwZDQ1MDZhNTFjYWI1MzgxOTMzMTQ5
MmU1ZDdiZWNiZGM5OTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oCkBA
IC01NSw2ICs1NSwxNSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1N0cnVjdHVyZURlZmluaXRpb24o
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKICAgICBTdHJ1Y3R1cmVFbGVtZW50
cyYgc3RydWN0dXJlRWxlbWVudHMoKSB7IHJldHVybiBtX3N0cnVjdHVyZUVsZW1lbnRzOyB9Cisg
ICAgU3RydWN0dXJlRWxlbWVudCogZmluZChTdHJpbmcmIG5hbWUpCisgICAgeworICAgICAgICBh
dXRvIGl0ZXJhdG9yID0gc3RkOjpmaW5kX2lmKG1fc3RydWN0dXJlRWxlbWVudHMuYmVnaW4oKSwg
bV9zdHJ1Y3R1cmVFbGVtZW50cy5lbmQoKSwgWyZdKFN0cnVjdHVyZUVsZW1lbnQmIHN0cnVjdHVy
ZUVsZW1lbnQpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZUVsZW1lbnQu
bmFtZSgpID09IG5hbWU7CisgICAgICAgIH0pOworICAgICAgICBpZiAoaXRlcmF0b3IgPT0gbV9z
dHJ1Y3R1cmVFbGVtZW50cy5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICByZXR1cm4gJippdGVyYXRvcjsKKyAgICB9CiAKIHByaXZhdGU6CiAgICAgU3RydWN0dXJl
RWxlbWVudHMgbV9zdHJ1Y3R1cmVFbGVtZW50czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQ
b2ludFNjYWZmb2xkaW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYTljZmY0NmE3OTM3ZWFhZjNjYzUzOTE3
ZWRlOTQxODQzZjgxMDVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuY3BwCkBAIC0w
LDAgKzEsMjU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisj
aW5jbHVkZSAiV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgTWV0YWwgeworCitFbnRyeVBv
aW50U2NhZmZvbGRpbmc6OkVudHJ5UG9pbnRTY2FmZm9sZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5p
dGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uLCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKQorICAgIDog
bV9mdW5jdGlvbkRlZmluaXRpb24oJmZ1bmN0aW9uRGVmaW5pdGlvbikKKyAgICAsIG1faW50cmlu
c2ljcygmaW50cmluc2ljcykKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAg
Z2F0aGVyRW50cnlQb2ludEl0ZW1zKCptX2ludHJpbnNpY3MsICptX2Z1bmN0aW9uRGVmaW5pdGlv
bik7Cit9CisKK1N0cmluZyBFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmhlbHBlclR5cGVzKCkKK3sK
KyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgcmV0dXJuIFN0cmluZygpOworfQor
CitTdHJpbmcgRW50cnlQb2ludFNjYWZmb2xkaW5nOjpzaWduYXR1cmUoKQoreworICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBF
bnRyeVBvaW50U2NhZmZvbGRpbmc6OnVucGFjaygpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzLgorICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIEVudHJ5UG9pbnRTY2Fm
Zm9sZGluZzo6cGFjayhjb25zdCBTdHJpbmcmKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcy4KKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKKy8qCit7CisgICAgICAgICAgICBhdXRv
IGl0ZW1zID0gZ2F0aGVyRW50cnlQb2ludEl0ZW1zKG1faW50cmluc2ljcywgZnVuY3Rpb25EZWZp
bml0aW9uKTsKKyAgICAgICAgICAgIG1fZW50cnlQb2ludEl0ZW1zID0gaXRlbXM7CisgICAgICAg
ICAgICBtX2VudHJ5UG9pbnRSZXR1cm5UeXBlID0gJmZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCk7
CisgICAgICAgICAgICBBU1NFUlQoaXRlbXMpOworICAgICAgICAgICAgdW5zaWduZWQgdGV4dHVy
ZUNvdW50ID0gMDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGJ1ZmZlckNvdW50ID0gMDsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIHNhbXBsZXJDb3VudCA9IDA7CisKKyAgICAgICAgICAgIGF1dG8gc2Vt
YW50aWNWaXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpCdWlsdEluU2VtYW50aWMm
IGJ1aWx0SW5TZW1hbnRpYykgLT4gU3RyaW5nIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGJ1
aWx0SW5TZW1hbnRpYy52YXJpYWJsZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBU1Q6OkJ1
aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWSW5zdGFuY2VJRDoKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICJbW2luc3RhbmNlX2lkXV0iX3N0cjsKKyAgICAgICAgICAgICAgICBjYXNlIEFT
VDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZWZXJ0ZXhJRDoKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICJbW3ZlcnRleF9pZF1dIl9zdHI7CisgICAgICAgICAgICAgICAgY2FzZSBB
U1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlBTaXplOgorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gIltbcG9pbnRfc2l6ZV1dIl9zdHI7CisgICAgICAgICAgICAgICAgY2FzZSBBU1Q6
OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWUG9zaXRpb246CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAiW1twb3NpdGlvbl1dIl9zdHI7CisgICAgICAgICAgICAgICAgY2FzZSBBU1Q6
OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWSXNGcm9udEZhY2U6CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAiW1tmcm9udF9mYWNpbmddXSJfc3RyOworICAgICAgICAgICAgICAgIGNh
c2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVlNhbXBsZUluZGV4OgorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gIltbc2FtcGxlX2lkXV0iX3N0cjsKKyAgICAgICAgICAgICAg
ICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZJbm5lckNvdmVyYWdlOgor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gIltbc2FtcGxlX21hc2tdXSJfc3RyOworICAgICAg
ICAgICAgICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVlRhcmdldDoK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIltbY29sb3IoIiwgKmJ1aWx0
SW5TZW1hbnRpYy50YXJnZXRJbmRleCgpLCAiKV1dIik7CisgICAgICAgICAgICAgICAgY2FzZSBB
U1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWRGVwdGg6CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAiW1tkZXB0aChhbnkpXV0iX3N0cjsKKyAgICAgICAgICAgICAgICBjYXNlIEFT
VDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZDb3ZlcmFnZToKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICJbW3NhbXBsZV9tYXNrXV0iX3N0cjsKKyAgICAgICAgICAgICAgICBjYXNl
IEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZEaXNwYXRjaFRocmVhZElEOgorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gIltbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSJfc3Ry
OworICAgICAgICAgICAgICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpT
Vkdyb3VwSUQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiW1t0aHJlYWRncm91cF9wb3Np
dGlvbl9pbl9ncmlkXV0iX3N0cjsKKyAgICAgICAgICAgICAgICBjYXNlIEFTVDo6QnVpbHRJblNl
bWFudGljOjpWYXJpYWJsZTo6U1ZHcm91cEluZGV4OgorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gIltbdGhyZWFkX2luZGV4X2luX3RocmVhZGdyb3VwXV0iX3N0cjsKKyAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYnVpbHRJblNlbWFudGljLnZh
cmlhYmxlKCkgPT0gQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVkdyb3VwVGhyZWFk
SUQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gIltbdGhyZWFkX3Bvc2l0aW9uX2luX3Ro
cmVhZGdyb3VwXV0iX3N0cjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LCBbJl0o
QVNUOjpSZXNvdXJjZVNlbWFudGljJiByZXNvdXJjZVNlbWFudGljKSAtPiBTdHJpbmcgeworICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBQcm92aWRlIGEgYmV0dGVyIG1hcHBpbmcgYmV0d2VlbiBI
TFNMIHNlbWFudGljcyBhbmQgTWV0YWwgYXR0cmlidXRlcy4KKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogUmVwb3J0IHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlIEFQSS4KKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHJlc291cmNlU2VtYW50aWMubW9kZSgpKSB7CisgICAgICAgICAgICAgICAgY2Fz
ZSBBU1Q6OlJlc291cmNlU2VtYW50aWM6Ok1vZGU6OlVub3JkZXJlZEFjY2Vzc1ZpZXc6CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJbW2J1ZmZlcigiLCBidWZmZXJDb3Vu
dCsrLCAiKV1dIik7CisgICAgICAgICAgICAgICAgY2FzZSBBU1Q6OlJlc291cmNlU2VtYW50aWM6
Ok1vZGU6OlRleHR1cmU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJb
W3RleHR1cmUoIiwgdGV4dHVyZUNvdW50KyssICIpXV0iKTsKKyAgICAgICAgICAgICAgICBjYXNl
IEFTVDo6UmVzb3VyY2VTZW1hbnRpYzo6TW9kZTo6QnVmZmVyOgorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbWFrZVN0cmluZygiW1tidWZmZXIoIiwgYnVmZmVyQ291bnQrKywgIildXSIpOwor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyZXNv
dXJjZVNlbWFudGljLm1vZGUoKSA9PSBBU1Q6OlJlc291cmNlU2VtYW50aWM6Ok1vZGU6OlNhbXBs
ZXIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiW1tzYW1wbGVyKCIs
IHNhbXBsZXJDb3VudCsrLCAiKV1dIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fSwgWyZdKEFTVDo6U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljJikgLT4gU3RyaW5nIHsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKKyAgICAgICAgICAgICAg
ICBDUkFTSCgpOworICAgICAgICAgICAgfSwgWyZdKEFTVDo6U3RhZ2VJbk91dFNlbWFudGljJiBz
dGFnZUluT3V0U2VtYW50aWMpIC0+IFN0cmluZyB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1h
a2VTdHJpbmcoIltbYXR0cmlidXRlKCIsIHN0YWdlSW5PdXRTZW1hbnRpYy5pbmRleCgpLCAiKV1d
Iik7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgbV9vdXRwdXRTdHJ1Y3ROYW1lID0g
bV90eXBlTmFtZXIuZ2VuZXJhdGVOZXh0VHlwZU5hbWUoKTsKKyAgICAgICAgICAgIG1fbWV0YWxP
dXRwdXROYW1lcy5jbGVhcigpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKCJzdHJ1Y3QgIiwgbV9vdXRwdXRTdHJ1Y3ROYW1lLCAie1xuIikpOworICAgICAg
ICAgICAgZm9yIChhdXRvJiBvdXRwdXQgOiBpdGVtcy0+b3V0cHV0cykgeworICAgICAgICAgICAg
ICAgIGF1dG8gZWxlbWVudE5hbWUgPSBtX3R5cGVOYW1lci5nZW5lcmF0ZU5leHRTdHJ1Y3R1cmVF
bGVtZW50TmFtZSgpOworICAgICAgICAgICAgICAgIG1fbWV0YWxPdXRwdXROYW1lcy5hcHBlbmQo
ZWxlbWVudE5hbWUpOworICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZygiICAgICIsIG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqb3V0cHV0LnVu
bmFtZWRUeXBlKSwgJyAnLCBlbGVtZW50TmFtZSwgJyAnLCBXVEY6OnZpc2l0KHNlbWFudGljVmlz
aXRvciwgKm91dHB1dC5zZW1hbnRpYykpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQoIn07XG4iKTsKKyAgICAgICAgICAgIGF1dG8gZW50cnlQb2lu
dCA9IChbJl0oKSAtPiBTdHJpbmcgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoKmZ1bmN0aW9u
RGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBU1Q6
OkVudHJ5UG9pbnRUeXBlOjpWZXJ0ZXg6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAidmVy
dGV4Il9zdHI7CisgICAgICAgICAgICAgICAgY2FzZSBBU1Q6OkVudHJ5UG9pbnRUeXBlOjpGcmFn
bWVudDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmcmFnbWVudCJfc3RyOworICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgqZnVuY3Rpb25E
ZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkgPT0gQVNUOjpFbnRyeVBvaW50VHlwZTo6Q29tcHV0
ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAia2VybmVsIl9zdHI7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSkoKTsKKyAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IG1l
dGFsUGFyYW1ldGVyTmFtZXM7CisgICAgICAgICAgICBtZXRhbFBhcmFtZXRlck5hbWVzLnJlc2Vy
dmVDYXBhY2l0eShpdGVtcy0+aW5wdXRzLnNpemUoKSk7CisgICAgICAgICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoZW50cnlQb2ludCwgIiAiLCBtX3R5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUoZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSksICcgJywgaXRlcmF0b3It
PnZhbHVlLCAnKCcpKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbXMt
PmlucHV0cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGlucHV0ID0gaXRl
bXMtPmlucHV0c1tpXTsKKyAgICAgICAgICAgICAgICBpZiAoaSkKKyAgICAgICAgICAgICAgICAg
ICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCAiKTsKKyAgICAgICAgICAgICAgICBhdXRvIHBh
cmFtZXRlck5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAgICAgICAgICAg
ICBtZXRhbFBhcmFtZXRlck5hbWVzLnVuY2hlY2tlZEFwcGVuZChwYXJhbWV0ZXJOYW1lKTsKKyAg
ICAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCppbnB1dC51bm5hbWVkVHlwZSksICcgJywgcGFyYW1ldGVy
TmFtZSwgJyAnLCBXVEY6OnZpc2l0KHNlbWFudGljVmlzaXRvciwgKmlucHV0LnNlbWFudGljKSkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKSB7
XG4iKTsKKyAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtZXRlck5hbWVN
YXA7CisgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
Kj4gcGFyYW1ldGVyT2JqZWN0TWFwOworICAgICAgICAgICAgZm9yIChhdXRvJiBwYXJhbWV0ZXIg
OiBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpKSB7CisgICAgICAgICAgICAgICAgYXV0
byBwYXJhbWV0ZXJOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdmFyaWFibGVN
YXBwaW5nLmFkZCgmcGFyYW1ldGVyLCBwYXJhbWV0ZXJOYW1lKTsKKyAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhdXRv
IGFkZFJlc3VsdCA9IHBhcmFtZXRlck5hbWVNYXAuYWRkKHBhcmFtZXRlci5uYW1lKCksIHBhcmFt
ZXRlck5hbWUpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwg
YWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gcGFyYW1ldGVyT2JqZWN0
TWFwLmFkZChwYXJhbWV0ZXIubmFtZSgpLCAmcGFyYW1ldGVyKTsKKyAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqcGFyYW1ldGVyLnR5cGUoKSks
ICcgJywgcGFyYW1ldGVyTmFtZSwgIjtcbiIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbXMtPmlucHV0cy5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgICAgIGF1dG8mIGlucHV0ID0gaXRlbXMtPmlucHV0c1tpXTsKKyAgICAgICAgICAg
ICAgICBBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24qIHN0cnVjdHVyZURlZmluaXRpb24gPSBudWxs
cHRyOworICAgICAgICAgICAgICAgIGF1dG8gY29tcHV0ZVN0cnVjdHVyZURlZmluaXRpb24gPSBb
XShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkgLT4gQVNUOjpTdHJ1Y3R1cmVEZWZpbml0
aW9uKiB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IHVubmFtZWRUeXBl
LnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzPEFTVDo6TmFtZWRUeXBl
Pih1bmlmeU5vZGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgICAgICAgICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRU
eXBlPih1bmlmeU5vZGUpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzPEFTVDo6U3RydWN0
dXJlRGVmaW5pdGlvbj4obmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gJmRvd25jYXN0PEFTVDo6U3Ry
dWN0dXJlRGVmaW5pdGlvbj4obmFtZWRUeXBlKTsKKyAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgaW5wdXQucGF0aC5zaXplKCk7ICsraikg
eworICAgICAgICAgICAgICAgICAgICBhdXRvJiBjb21wb25lbnQgPSBpbnB1dC5wYXRoW2pdOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIWopIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gcGFyYW1ldGVyTmFt
ZU1hcC5maW5kKGNvbXBvbmVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGl0ZXJhdG9yICE9IHBhcmFtZXRlck5hbWVNYXAuZW5kKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlcmF0
b3IgPSBwYXJhbWV0ZXJPYmplY3RNYXAuZmluZChjb21wb25lbnQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IHBhcmFtZXRlck9iamVjdE1hcC5lbmQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVEZWZpbml0aW9uID0gY29tcHV0ZVN0cnVj
dHVyZURlZmluaXRpb24oKml0ZXJhdG9yLT52YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8qIHN0cnVjdHVyZUVs
ZW1lbnQgPSBzdHJ1Y3R1cmVEZWZpbml0aW9uLT5maW5kKGNvbXBvbmVudCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlRWxlbWVudCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoJy4nLCBtX3R5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoKnN0cnVjdHVyZUVsZW1lbnQpKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVEZWZpbml0aW9uID0gY29tcHV0ZVN0cnVj
dHVyZURlZmluaXRpb24oc3RydWN0dXJlRWxlbWVudC0+dHlwZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiA9ICIsIG1ldGFsUGFyYW1ldGVyTmFtZXNbaV0sICI7XG4i
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rp
b25EZWZpbml0aW9uLmJsb2NrKCkpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZCgifVxuIik7CisgICAgICAgIH0KKyAgICAgICAgKi8KKworICAgICAgICAvKnsKKyAgICAgICAg
ICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwor
ICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX291dHB1
dFN0cnVjdE5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiO1xuIikpOworICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnRyeVBvaW50SXRlbXMtPm91dHB1dHMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb21wdXRlU3RydWN0dXJlRGVmaW5p
dGlvbiA9IFtdKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKSAtPiBBU1Q6OlN0cnVjdHVy
ZURlZmluaXRpb24qIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9
IHVubmFtZWRUeXBlLnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFp
czxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIG5hbWVkVHlw
ZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gJmRvd25jYXN0PEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4obmFt
ZWRUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKHZhcmlhYmxlTmFtZSwgJy4nLCBtX21ldGFs
T3V0cHV0TmFtZXNbaV0sICc9JykpOworICAgICAgICAgICAgICAgICAgICBBU1Q6OlN0cnVjdHVy
ZURlZmluaXRpb24qIHN0cnVjdHVyZURlZmluaXRpb24gPSBjb21wdXRlU3RydWN0dXJlRGVmaW5p
dGlvbigqbV9lbnRyeVBvaW50UmV0dXJuVHlwZSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qg
aiA9IDA7IGogPCBtX2VudHJ5UG9pbnRJdGVtcy0+b3V0cHV0c1tpXS5wYXRoLnNpemUoKTsgKytq
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvKiBzdHJ1Y3R1cmVFbGVtZW50ID0gc3Ry
dWN0dXJlRGVmaW5pdGlvbi0+ZmluZChtX2VudHJ5UG9pbnRJdGVtcy0+b3V0cHV0c1tpXS5wYXRo
W2pdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmVFbGVtZW50KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaikKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCcuJyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yU3RydWN0
dXJlRWxlbWVudCgqc3RydWN0dXJlRWxlbWVudCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
c3RydWN0dXJlRGVmaW5pdGlvbiA9IGNvbXB1dGVTdHJ1Y3R1cmVEZWZpbml0aW9uKHN0cnVjdHVy
ZUVsZW1lbnQtPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiO1xuIik7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygicmV0dXJu
ICIsIHZhcmlhYmxlTmFtZSwgIjtcbiIpKTsKKyAgICAgICAgICAgIH0qLworCit9CisKK30KKwor
fQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjFhYTJkYTNiYzRlY2E0ODBjMjUyZTYzZWU2YTFiY2E4NjI5NTEwMWMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIEZ1bmN0
aW9uRGVmaW5pdGlvbjsKKworfQorCitjbGFzcyBJbnRyaW5zaWNzOworCituYW1lc3BhY2UgTWV0
YWwgeworCisvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBrbm93IGFib3V0IHRoZSBwaXBlbGluZSBz
dGF0ZSBvYmplY3QgdG8gZW1pdCBmdW5jdGlvbiBwcm9sb2d1ZXMgYW5kIGVwaWxvZ3Vlcy4KK2Ns
YXNzIEVudHJ5UG9pbnRTY2FmZm9sZGluZyB7CitwdWJsaWM6CisgICAgRW50cnlQb2ludFNjYWZm
b2xkaW5nKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiwgSW50cmluc2ljcyYpOworCisgICAgU3Ry
aW5nIGhlbHBlclR5cGVzKCk7CisgICAgU3RyaW5nIHNpZ25hdHVyZSgpOworICAgIFN0cmluZyB1
bnBhY2soKTsKKyAgICBTdHJpbmcgcGFjayhjb25zdCBTdHJpbmcmIHZhcmlhYmxlTmFtZSk7CisK
K3ByaXZhdGU6CisgICAgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24qIG1fZnVuY3Rpb25EZWZpbml0
aW9uOworICAgIEludHJpbnNpY3MqIG1faW50cmluc2ljczsKK307CisKK30KKworfQorCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
TWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41Y2I3
OWFlNDQ2NGRlN2NlOGEwYzk2N2EwOGJjNTAwNmVhYzVmYTdmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldy
aXRlci5jcHAKQEAgLTAsMCArMSw2MjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbldyaXRlci5oIgorCisjaWYgRU5BQkxFKFdFQkdQ
VSkKKworI2luY2x1ZGUgIldITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgiCisjaW5jbHVkZSAiV0hM
U0xBcnJheVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgiCisj
aW5jbHVkZSAiV0hMU0xCb29sZWFuTGl0ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMQnVpbHRJblNl
bWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xDYWxsRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldI
TFNMQ29tbWFFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xEZXJlZmVyZW5jZUV4cHJlc3Np
b24uaCIKKyNpbmNsdWRlICJXSExTTERvV2hpbGVMb29wLmgiCisjaW5jbHVkZSAiV0hMU0xFZmZl
Y3RmdWxFeHByZXNzaW9uU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xFbnRyeVBvaW50U2Nh
ZmZvbGRpbmcuaCIKKyNpbmNsdWRlICJXSExTTEVudHJ5UG9pbnRUeXBlLmgiCisjaW5jbHVkZSAi
V0hMU0xGbG9hdExpdGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTEZvckxvb3AuaCIKKyNpbmNsdWRl
ICJXSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVm
aW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMSWZTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExT
TEludGVnZXJMaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xMb2dpY2FsRXhwcmVzc2lvbi5oIgor
I2luY2x1ZGUgIldITFNMTG9naWNhbE5vdEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTE1h
a2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTE1ha2VQb2ludGVy
RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5o
IgorI2luY2x1ZGUgIldITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuaCIKKyNpbmNsdWRlICJXSExT
TE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMUG9pbnRlclR5cGUuaCIK
KyNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXSExTTFJldHVybi5oIgorI2lu
Y2x1ZGUgIldITFNMU3dpdGNoQ2FzZS5oIgorI2luY2x1ZGUgIldITFNMU3dpdGNoU3RhdGVtZW50
LmgiCisjaW5jbHVkZSAiV0hMU0xUZXJuYXJ5RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNM
VHlwZU5hbWVyLmgiCisjaW5jbHVkZSAiV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmgiCisj
aW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJp
YWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVSZWZl
cmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIKKyNpbmNsdWRlICJXSExTTFdoaWxl
TG9vcC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7
CisKK25hbWVzcGFjZSBNZXRhbCB7CisKK2NsYXNzIEZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXIg
OiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbldyaXRl
cihUeXBlTmFtZXImIHR5cGVOYW1lciwgSGFzaE1hcDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24q
LCBTdHJpbmc+JiBmdW5jdGlvbk1hcHBpbmcpCisgICAgICAgIDogbV90eXBlTmFtZXIodHlwZU5h
bWVyKQorICAgICAgICAsIG1fZnVuY3Rpb25NYXBwaW5nKGZ1bmN0aW9uTWFwcGluZykKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCB+RnVuY3Rpb25EZWNsYXJhdGlvbldyaXRlcigpID0gZGVm
YXVsdDsKKworICAgIFN0cmluZyB0b1N0cmluZygpIHsgcmV0dXJuIG1fc3RyaW5nQnVpbGRlci50
b1N0cmluZygpOyB9CisgICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGZ1
bmN0aW9uRGVjbGFyYXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoZnVuY3Rpb25E
ZWNsYXJhdGlvbi5lbnRyeVBvaW50VHlwZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9uTWFwcGluZy5maW5kKCZmdW5jdGlvbkRlY2xh
cmF0aW9uKTsKKyAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fZnVuY3Rpb25NYXBwaW5nLmVu
ZCgpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZShmdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSksICcgJywg
aXRlcmF0b3ItPnZhbHVlLCAnKCcpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBm
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgeworICAgICAgICAg
ICAgaWYgKGkpCisgICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCAiKTsK
KyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobV90eXBlTmFtZXIubWFuZ2xlZE5h
bWVGb3JUeXBlKCpmdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVtpXS50eXBlKCkpKTsK
KyAgICAgICAgfQorICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIpO1xuIik7CisgICAg
fQorCitwcml2YXRlOgorICAgIFR5cGVOYW1lciYgbV90eXBlTmFtZXI7CisgICAgSGFzaE1hcDxB
U1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qLCBTdHJpbmc+JiBtX2Z1bmN0aW9uTWFwcGluZzsKKyAg
ICBTdHJpbmdCdWlsZGVyIG1fc3RyaW5nQnVpbGRlcjsKK307CisKK2NsYXNzIEZ1bmN0aW9uRGVm
aW5pdGlvbldyaXRlciA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICBGdW5jdGlvbkRl
ZmluaXRpb25Xcml0ZXIoSW50cmluc2ljcyYgaW50cmluc2ljcywgVHlwZU5hbWVyJiB0eXBlTmFt
ZXIsIEhhc2hNYXA8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiwgU3RyaW5nPiYgZnVuY3Rpb25N
YXBwaW5nKQorICAgICAgICA6IG1faW50cmluc2ljcyhpbnRyaW5zaWNzKQorICAgICAgICAsIG1f
dHlwZU5hbWVyKHR5cGVOYW1lcikKKyAgICAgICAgLCBtX2Z1bmN0aW9uTWFwcGluZyhmdW5jdGlv
bk1hcHBpbmcpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgfkZ1bmN0aW9uRGVmaW5pdGlv
bldyaXRlcigpID0gZGVmYXVsdDsKKworICAgIFN0cmluZyB0b1N0cmluZygpIHsgcmV0dXJuIG1f
c3RyaW5nQnVpbGRlci50b1N0cmluZygpOyB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6TmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9uTWFwcGluZy5maW5kKCZu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKTsKKyAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1f
ZnVuY3Rpb25NYXBwaW5nLmVuZCgpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCh3
cml0ZU5hdGl2ZUZ1bmN0aW9uKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24sIGl0ZXJhdG9yLT52
YWx1ZSwgbV90eXBlTmFtZXIpKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rp
b25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBhdXRvIGl0ZXJhdG9yID0gbV9mdW5jdGlvbk1hcHBpbmcuZmluZCgmZnVuY3Rpb25EZWZpbml0
aW9uKTsKKyAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fZnVuY3Rpb25NYXBwaW5nLmVuZCgp
KTsKKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgpKSB7Cisg
ICAgICAgICAgICBtX2VudHJ5UG9pbnRTY2FmZm9sZGluZyA9IEVudHJ5UG9pbnRTY2FmZm9sZGlu
ZyhmdW5jdGlvbkRlZmluaXRpb24sIG1faW50cmluc2ljcyk7CisgICAgICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1fZW50cnlQb2ludFNjYWZmb2xkaW5nLT5oZWxwZXJUeXBlcygpKTsK
KyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgICAgICAgICBt
X3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV9lbnRyeVBvaW50U2NhZmZvbGRpbmct
PnNpZ25hdHVyZSgpLCAiIHsiKSk7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KG1fZW50cnlQb2ludFNjYWZmb2xkaW5nLT51bnBhY2soKSk7CisgICAgICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uLmJsb2NrKCkpOworICAgICAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBtX2VudHJ5UG9pbnRTY2FmZm9sZGluZyA9IFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSksICcgJywgaXRlcmF0b3ItPnZhbHVlLCAn
KCcpKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25EZWZpbml0
aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGF1dG8mIHBh
cmFtZXRlciA9IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV07CisgICAgICAgICAg
ICAgICAgaWYgKGkpCisgICAgICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
IiwgIik7CisgICAgICAgICAgICAgICAgYXV0byBwYXJhbWV0ZXJOYW1lID0gZ2VuZXJhdGVOZXh0
VmFyaWFibGVOYW1lKCk7CisgICAgICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3Zhcmlh
YmxlTWFwcGluZy5hZGQoJnBhcmFtZXRlciwgcGFyYW1ldGVyTmFtZSk7CisgICAgICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAg
ICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKCpwYXJhbWV0ZXIudHlwZSgpKSwgJyAnLCBwYXJhbWV0ZXJOYW1l
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIp
IHtcbiIpOworICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlv
bi5ibG9jaygpKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOwor
ICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpTdGF0ZW1lbnQmIHN0YXRlbWVudCkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KHN0YXRlbWVudCk7CisgICAg
fQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkJsb2NrJiBibG9jaykgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIntcbiIpOworICAgICAgICBmb3IgKGF1dG8m
IHN0YXRlbWVudCA6IGJsb2NrLnN0YXRlbWVudHMoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChzdGF0ZW1lbnQpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4i
KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QnJlYWsmKSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiYnJlYWs7XG4iKTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6Q29udGludWUmKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgLy8g
RklYTUU6IEZpZ3VyZSBvdXQgd2hpY2ggbG9vcCB3ZSdyZSBpbiwgYW5kIHJ1biB0aGUgaW5jcmVt
ZW50IGNvZGUKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6
RG9XaGlsZUxvb3AmIGRvV2hpbGVMb29wKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZCgiZG8ge1xuIik7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChk
b1doaWxlTG9vcC5ib2R5KCkpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG9XaGlsZUxv
b3AuY29uZGl0aW9uYWwoKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZygiaWYgKCEiLCBtX3N0YWNrLnRha2VMYXN0KCksICIpIGJyZWFrO1xuIikpOworICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIn0gd2hpbGUodHJ1ZSk7XG4iKSk7
CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1l
bnQmIGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoZWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5lZmZlY3Rm
dWxFeHByZXNzaW9uKCkpOworICAgICAgICBtX3N0YWNrLnRha2VMYXN0KCk7IC8vIFRoZSBzdGF0
ZW1lbnQgaXMgYWxyZWFkeSBlZmZlY3RmdWwsIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhp
bmcgd2l0aCB0aGUgcmVzdWx0LgorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpGYWxsdGhy
b3VnaCYpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJb
W2NsYW5nOjpmYWxsdGhyb3VnaF1dO1xuIik7IC8vIEZJWE1FOiBNYWtlIHN1cmUgdGhpcyBpcyBv
a2F5LiBBbHRlcm5hdGl2ZWx5LCB3ZSBjb3VsZCBkbyB0aGluZyBhbmQganVzdCByZXR1cm4gaGVy
ZSBpbnN0ZWFkLgorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpGb3JMb29wJiBmb3JMb29w
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsm
XShBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9u
c1N0YXRlbWVudCkgeworICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHZhcmlhYmxlRGVj
bGFyYXRpb25zU3RhdGVtZW50KTsKKyAgICAgICAgfSwgWyZdKFVuaXF1ZVJlZjxBU1Q6OkV4cHJl
c3Npb24+JiBleHByZXNzaW9uKSB7CisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZXhw
cmVzc2lvbik7CisgICAgICAgICAgICBtX3N0YWNrLnRha2VMYXN0KCk7IC8vIFdlIGRvbid0IG5l
ZWQgdG8gZG8gYW55dGhpbmcgd2l0aCB0aGUgcmVzdWx0LgorICAgICAgICB9KSwgZm9yTG9vcC5p
bml0aWFsaXphdGlvbigpKTsKKworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJmb3Ig
KCA7IDsgKSB7XG4iKTsKKyAgICAgICAgaWYgKGZvckxvb3AuY29uZGl0aW9uKCkpIHsKKyAgICAg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZm9yTG9vcC5jb25kaXRpb24oKSk7CisgICAgICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICghIiwgbV9zdGFjay50
YWtlTGFzdCgpLCAiKSBicmVhaztcbiIpKTsKKyAgICAgICAgfQorICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoZm9yTG9vcC5ib2R5KCkpOworICAgICAgICBpZiAoZm9yTG9vcC5pbmNyZW1lbnQo
KSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZm9yTG9vcC5pbmNyZW1lbnQoKSk7
CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgIH0KKworICAgIHZv
aWQgdmlzaXQoQVNUOjpJZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuY29uZGl0aW9uYWwoKSk7Cisg
ICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCIsIG1fc3RhY2su
dGFrZUxhc3QoKSwgIikge1xuIikpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoaWZTdGF0
ZW1lbnQuYm9keSgpKTsKKyAgICAgICAgaWYgKGlmU3RhdGVtZW50LmVsc2VCb2R5KCkpIHsKKyAg
ICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn0gZWxzZSB7XG4iKTsKKyAgICAgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSk7CisgICAgICAg
IH0KKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgfQorCisgICAg
dm9pZCB2aXNpdChBU1Q6OlJldHVybiYgcmV0dXJuU3RhdGVtZW50KSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgaWYgKHJldHVyblN0YXRlbWVudC52YWx1ZSgpKSB7CisgICAgICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoKnJldHVyblN0YXRlbWVudC52YWx1ZSgpKTsKKyAgICAgICAgICAgIGlm
IChtX2VudHJ5UG9pbnRTY2FmZm9sZGluZykgeworICAgICAgICAgICAgICAgIGF1dG8gdmFyaWFi
bGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAgICAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZChtX2VudHJ5UG9pbnRTY2FmZm9sZGluZy0+cGFjayh2YXJpYWJs
ZU5hbWUpKTsKKyAgICAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcoInJldHVybiAiLCB2YXJpYWJsZU5hbWUsICI7XG4iKSk7CisgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInJldHVy
biAiLCBtX3N0YWNrLnRha2VMYXN0KCksICI7XG4iKSk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgicmV0dXJuO1xuIik7CisgICAgfQorCisgICAg
dm9pZCB2aXNpdChBU1Q6OlN3aXRjaFN0YXRlbWVudCYgc3dpdGNoU3RhdGVtZW50KSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN3aXRjaFN0YXRlbWVudC52YWx1
ZSgpKTsKKworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInN3aXRj
aCAoIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiKSB7IikpOworICAgICAgICBmb3IgKGF1dG8mIHN3
aXRjaENhc2UgOiBzd2l0Y2hTdGF0ZW1lbnQuc3dpdGNoQ2FzZXMoKSkKKyAgICAgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChzd2l0Y2hDYXNlKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZCgifVxuIik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlN3aXRjaENhc2UmIHN3
aXRjaENhc2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoc3dpdGNoQ2FzZS52YWx1ZSgp
KQorICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJjYXNlICIs
IGNvbnN0YW50RXhwcmVzc2lvblN0cmluZygqc3dpdGNoQ2FzZS52YWx1ZSgpKSwgIjpcbiIpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiZGVmYXVs
dDpcbiIpOworICAgICAgICAvLyBGSVhNRTogRmlndXJlIG91dCB3aGV0aGVyIHdlIG5lZWQgdG8g
YnJlYWsgb3IgZmFsbHRocm91Z2guCisgICAgICAgIENSQVNIKCk7CisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChzd2l0Y2hDYXNlLmJsb2NrKCkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQo
QVNUOjpUcmFwJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcworICAgICAgICBDUkFTSCgpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYgdmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQp
IG92ZXJyaWRlCisgICAgeworICAgICAgICBWaXNpdG9yOjp2aXNpdCh2YXJpYWJsZURlY2xhcmF0
aW9uc1N0YXRlbWVudCk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OldoaWxlTG9vcCYg
d2hpbGVMb29wKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKCJ3aGlsZSAodHJ1ZSkge1xuIikpOworICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQod2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcoImlmICghIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiKSBicmVhaztc
biIpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5ib2R5KCkpOworICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6SW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGludGVnZXJMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAg
YXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAgICAg
YXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmlu
dGVnZXJMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSBz
dGF0aWNfY2FzdDwiLCBtYW5nbGVkVHlwZU5hbWUsICI+KCIsIGludGVnZXJMaXRlcmFsLnZhbHVl
KCksICIpO1xuIikpOworICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAg
IH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25l
ZEludGVnZXJMaXRlcmFsKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKHVuc2lnbmVk
SW50ZWdlckxpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBhdXRvIHZhcmlhYmxlTmFt
ZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBhdXRvIG1hbmdsZWRUeXBl
TmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqdW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0gc3RhdGljX2Nh
c3Q8IiwgbWFuZ2xlZFR5cGVOYW1lLCAiPigiLCB1bnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVl
KCksICIpO1xuIikpOworICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAg
IH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpGbG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChmbG9hdExpdGVyYWwucmVzb2x2ZWRUeXBlKCkp
OworICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgp
OworICAgICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1l
Rm9yVHlwZSgqZmxvYXRMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgbV9zdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5h
bWUsICIgPSBzdGF0aWNfY2FzdDwiLCBtYW5nbGVkVHlwZU5hbWUsICI+KCIsIGZsb2F0TGl0ZXJh
bC52YWx1ZSgpLCAiKTtcbiIpKTsKKyAgICAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1l
KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6TnVsbExpdGVyYWwmIG51bGxMaXRlcmFs
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKG51bGxMaXRlcmFsLnJlc29sdmVkVHlw
ZSgpKTsKKyAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gbnVsbExpdGVyYWwucmVzb2x2ZWRUeXBl
KCktPnVuaWZ5Tm9kZSgpOworICAgICAgICBBU1NFUlQoaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5p
ZnlOb2RlKSk7CisgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5h
bWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSA9
IGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSk7CisKKyAgICAgICAgYXV0
byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
VHlwZSgqbnVsbExpdGVyYWwucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9
ICIpKTsKKyAgICAgICAgaWYgKGlzQXJyYXlSZWZlcmVuY2VUeXBlKQorICAgICAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZCgieyBudWxscHRyLCAwIH0iKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgibnVsbHB0ciIpOworICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKCI7XG4iKTsKKyAgICAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFi
bGVOYW1lKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6Qm9vbGVhbkxpdGVyYWwmIGJv
b2xlYW5MaXRlcmFsKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJvb2xlYW5MaXRl
cmFsLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0
ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmJvb2xlYW5MaXRlcmFsLnJlc29sdmVkVHlwZSgp
KTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBl
TmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSBzdGF0aWNfY2FzdDwiLCBtYW5nbGVkVHlwZU5h
bWUsICI+KCIsIGJvb2xlYW5MaXRlcmFsLnZhbHVlKCkgPyAidHJ1ZSIgOiAiZmFsc2UiLCAiKTtc
biIpKTsKKyAgICAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsJiBlbnVtZXJhdGlvbk1l
bWJlckxpdGVyYWwpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25N
ZW1iZXJMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9u
TWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbkRlZmluaXRpb24oKSk7CisgICAgICAgIEFTU0VSVChl
bnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25EZWZpbml0aW9uKCkpOworICAgICAg
ICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAg
ICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgq
ZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJs
ZU5hbWUsICIgPSAiLCBtYW5nbGVkVHlwZU5hbWUsICcuJywgbV90eXBlTmFtZXIubWFuZ2xlZE5h
bWVGb3JFbnVtZXJhdGlvbk1lbWJlcigqZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0
aW9uTWVtYmVyKCkpLCAiO1xuIikpOworICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5h
bWUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9u
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQoZXhwcmVzc2lvbik7Cisg
ICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgbG93ZXJlZCBhbHJlYWR5LgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6SW5kZXhF
eHByZXNzaW9uJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIGxv
d2VyZWQgYWxyZWFkeS4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisg
ICAgdm9pZCB2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIEFTU0VSVCh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7Cisg
ICAgICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9uLmluaXRpYWxpemVyKCkpCisgICAgICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoKnZhcmlhYmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIoKSk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gRklYTUU6IFplcm8tZmlsbCB0aGUgdmFy
aWFibGUuCisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgcXVhbGlmaWVycy4KKyAgICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5l
cmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3Zhcmlh
YmxlTWFwcGluZy5hZGQoJnZhcmlhYmxlRGVjbGFyYXRpb24sIHZhcmlhYmxlTmFtZSk7CisgICAg
ICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoKnZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5h
bWUsICIgPSAiLCBtX3N0YWNrLnRha2VMYXN0KCksICI7XG4iKSk7CisgICAgICAgIG1fc3RhY2su
YXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkFzc2ln
bm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50RXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkpOwor
ICAgICAgICBhdXRvIGxlZnROYW1lID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ucmlnaHQoKSk7CisgICAgICAgIGF1
dG8gcmlnaHROYW1lID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcobGVmdE5hbWUsICIgPSAiLCByaWdodE5hbWUsICI7XG4iKSk7
CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVz
c2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGFyZ3VtZW50TmFt
ZXM7CisgICAgICAgIGZvciAoYXV0byYgYXJndW1lbnQgOiBjYWxsRXhwcmVzc2lvbi5hcmd1bWVu
dHMoKSkgeworICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFyZ3VtZW50KTsKKyAgICAg
ICAgICAgIGFyZ3VtZW50TmFtZXMuYXBwZW5kKG1fc3RhY2sudGFrZUxhc3QoKSk7CisgICAgICAg
IH0KKyAgICAgICAgQVNTRVJUKGNhbGxFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAgICAg
ICAgQVNTRVJUKGNhbGxFeHByZXNzaW9uLmZ1bmN0aW9uKCkpOworICAgICAgICBhdXRvIGl0ZXJh
dG9yID0gbV9mdW5jdGlvbk1hcHBpbmcuZmluZChjYWxsRXhwcmVzc2lvbi5mdW5jdGlvbigpKTsK
KyAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fZnVuY3Rpb25NYXBwaW5nLmVuZCgpKTsKKyAg
ICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAg
ICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZSgqY2FsbEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlh
YmxlTmFtZSwgIiA9ICIsIGl0ZXJhdG9yLT52YWx1ZSwgJygnKSk7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYXJndW1lbnROYW1lcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
aWYgKGkpCisgICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCAiKTsKKyAg
ICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoYXJndW1lbnROYW1lc1tpXSk7CisgICAg
ICAgIH0KKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKTtcbiIpOworICAgICAgICBt
X3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNU
OjpDb21tYUV4cHJlc3Npb24mIGNvbW1hRXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIFN0cmluZyByZXN1bHQ7CisgICAgICAgIGZvciAoYXV0byYgZXhwcmVzc2lvbiA6IGNvbW1h
RXhwcmVzc2lvbi5saXN0KCkpIHsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChleHBy
ZXNzaW9uKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAg
ICAgfQorICAgICAgICBtX3N0YWNrLmFwcGVuZChyZXN1bHQpOworICAgIH0KKworICAgIHZvaWQg
dmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mIGRlcmVmZXJlbmNlRXhwcmVzc2lvbikg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkZXJlZmVyZW5jZUV4
cHJlc3Npb24ucG9pbnRlcigpKTsKKyAgICAgICAgYXV0byByaWdodCA9IG1fc3RhY2sudGFrZUxh
c3QoKTsKKyAgICAgICAgQVNTRVJUKGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUo
KSk7CisgICAgICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1l
KCk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUoKmRlcmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUo
KSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gKiIsIHJpZ2h0LCAiO1xuIikpOworICAgICAgICBt
X3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNU
OjpMb2dpY2FsRXhwcmVzc2lvbiYgbG9naWNhbEV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQobG9naWNhbEV4cHJlc3Npb24ubGVmdCgpKTsKKyAg
ICAgICAgYXV0byBsZWZ0ID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQobG9naWNhbEV4cHJlc3Npb24ucmlnaHQoKSk7CisgICAgICAgIGF1dG8gcmlnaHQg
PSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIEFTU0VSVChsb2dpY2FsRXhwcmVzc2lvbi5y
ZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0
VmFyaWFibGVOYW1lKCk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmxvZ2ljYWxFeHByZXNzaW9uLnJlc29s
dmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSAiLCBsZWZ0LCAnICcpKTsKKyAgICAg
ICAgc3dpdGNoIChsb2dpY2FsRXhwcmVzc2lvbi50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBU1Q6
OkxvZ2ljYWxFeHByZXNzaW9uOjpUeXBlOjpBbmQ6CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKCImJiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBBU1NFUlQobG9naWNhbEV4cHJlc3Npb24udHlwZSgpID09IEFTVDo6TG9naWNh
bEV4cHJlc3Npb246OlR5cGU6Ok9yKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQoInx8Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoJyAnLCByaWdodCwgIjtcbiIpKTsKKyAgICAgICAg
bV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFT
VDo6TG9naWNhbE5vdEV4cHJlc3Npb24mIGxvZ2ljYWxOb3RFeHByZXNzaW9uKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGxvZ2ljYWxOb3RFeHByZXNzaW9uLm9w
ZXJhbmQoKSk7CisgICAgICAgIGF1dG8gb3BlcmFuZCA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAg
ICAgICAgQVNTRVJUKGxvZ2ljYWxOb3RFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAgICAg
ICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAg
ICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqbG9naWNhbE5vdEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZh
cmlhYmxlTmFtZSwgIiA9ICEiLCBvcGVyYW5kLCAiO1xuIikpOworICAgICAgICBtX3N0YWNrLmFw
cGVuZCh2YXJpYWJsZU5hbWUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpNYWtlQXJy
YXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VBcnJheVJlZmVyZW5j
ZUV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgICAgICBhdXRvIGxWYWx1ZSA9IG1fc3RhY2sudGFr
ZUxhc3QoKTsKKyAgICAgICAgQVNTRVJUKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ucmVz
b2x2ZWRUeXBlKCkpOworICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZh
cmlhYmxlTmFtZSgpOworICAgICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVy
Lm1hbmdsZWROYW1lRm9yVHlwZSgqbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZl
ZFR5cGUoKSk7CisgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPigqbWFrZUFycmF5UmVm
ZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSkpCisgICAgICAgICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFt
ZSwgIiA9IHsgIiwgbFZhbHVlLCAiLCAxIH07XG4iKSk7CisgICAgICAgIGVsc2UgaWYgKGlzPEFT
VDo6QXJyYXlUeXBlPigqbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUo
KSkpIHsKKyAgICAgICAgICAgIGF1dG8mIGFycmF5VHlwZSA9IGRvd25jYXN0PEFTVDo6QXJyYXlU
eXBlPigqbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CisgICAg
ICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1l
LCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHsgJigiLCBsVmFsdWUsICJbMF0pLCAiLCBhcnJheVR5
cGUubnVtRWxlbWVudHMoKSwgIiB9O1xuIikpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywg
dmFyaWFibGVOYW1lLCAiID0geyAmIiwgbFZhbHVlLCAiLCAxIH07XG4iKSk7CisgICAgICAgIG1f
c3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6
Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJFeHByZXNzaW9uKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5s
VmFsdWUoKSk7CisgICAgICAgIGF1dG8gbFZhbHVlID0gbV9zdGFjay50YWtlTGFzdCgpOworICAg
ICAgICBBU1NFUlQobWFrZVBvaW50ZXJFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAgICAg
ICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAg
ICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqbWFrZVBvaW50ZXJFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2
YXJpYWJsZU5hbWUsICIgPSAmIiwgbFZhbHVlLCAiO1xuIikpOworICAgICAgICBtX3N0YWNrLmFw
cGVuZCh2YXJpYWJsZU5hbWUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIC8vIFRoaXMgc2hv
dWxkIGJlIGxvd2VyZWQgYWxyZWFkeS4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlRlcm5hcnlFeHByZXNzaW9uJiB0ZXJuYXJ5RXhw
cmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0ZXJu
YXJ5RXhwcmVzc2lvbi5wcmVkaWNhdGUoKSk7CisgICAgICAgIGF1dG8gY2hlY2sgPSBtX3N0YWNr
LnRha2VMYXN0KCk7CisKKyAgICAgICAgQVNTRVJUKHRlcm5hcnlFeHByZXNzaW9uLnJlc29sdmVk
VHlwZSgpKTsKKyAgICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJs
ZU5hbWUoKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqdGVybmFyeUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBl
KCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIjtcbiIpKTsKKworICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlmICgiLCBjaGVjaywgIikge1xuIikpOworICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQodGVybmFyeUV4cHJlc3Npb24uYm9keUV4cHJlc3Npb24oKSk7Cisg
ICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyh2YXJpYWJsZU5hbWUsICIg
PSAiLCBtX3N0YWNrLnRha2VMYXN0KCksICI7XG4iKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIn0gZWxzZSB7XG4iKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHRlcm5h
cnlFeHByZXNzaW9uLmVsc2VFeHByZXNzaW9uKCkpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcodmFyaWFibGVOYW1lLCAiID0gIiwgbV9zdGFjay50YWtlTGFzdCgp
LCAiO1xuIikpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAg
ICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmIHZhcmlhYmxlUmVmZXJlbmNlKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgQVNTRVJUKHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCkpOworICAgICAg
ICBhdXRvIGl0ZXJhdG9yID0gbV92YXJpYWJsZU1hcHBpbmcuZmluZCh2YXJpYWJsZVJlZmVyZW5j
ZS52YXJpYWJsZSgpKTsKKyAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fdmFyaWFibGVNYXBw
aW5nLmVuZCgpKTsKKyAgICAgICAgbV9zdGFjay5hcHBlbmQoaXRlcmF0b3ItPnZhbHVlKTsKKyAg
ICB9CisKKyAgICBTdHJpbmcgY29uc3RhbnRFeHByZXNzaW9uU3RyaW5nKEFTVDo6Q29uc3RhbnRF
eHByZXNzaW9uJiBjb25zdGFudEV4cHJlc3Npb24pCisgICAgeworICAgICAgICBTdHJpbmcgcmVz
dWx0OworICAgICAgICBjb25zdGFudEV4cHJlc3Npb24udmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
Jl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgIHJl
c3VsdCA9IG1ha2VTdHJpbmcoIiIsIGludGVnZXJMaXRlcmFsLnZhbHVlKCkpOworICAgICAgICB9
LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFs
KSB7CisgICAgICAgICAgICByZXN1bHQgPSBtYWtlU3RyaW5nKCIiLCB1bnNpZ25lZEludGVnZXJM
aXRlcmFsLnZhbHVlKCkpOworICAgICAgICB9LCBbJl0oQVNUOjpGbG9hdExpdGVyYWwmIGZsb2F0
TGl0ZXJhbCkgeworICAgICAgICAgICAgcmVzdWx0ID0gbWFrZVN0cmluZygiIiwgZmxvYXRMaXRl
cmFsLnZhbHVlKCkpOworICAgICAgICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYpIHsKKyAgICAg
ICAgICAgIHJlc3VsdCA9ICJudWxscHRyIl9zdHI7CisgICAgICAgIH0sIFsmXShBU1Q6OkJvb2xl
YW5MaXRlcmFsJiBib29sZWFuTGl0ZXJhbCkgeworICAgICAgICAgICAgcmVzdWx0ID0gYm9vbGVh
bkxpdGVyYWwudmFsdWUoKSA/ICJ0cnVlIl9zdHIgOiAiZmFsc2UiX3N0cjsKKyAgICAgICAgfSwg
WyZdKEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsJiBlbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwpIHsKKyAgICAgICAgICAgIEFTU0VSVChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVy
YXRpb25EZWZpbml0aW9uKCkpOworICAgICAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9uTWVtYmVy
TGl0ZXJhbC5lbnVtZXJhdGlvbkRlZmluaXRpb24oKSk7CisgICAgICAgICAgICByZXN1bHQgPSBt
YWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqZW51bWVyYXRpb25NZW1i
ZXJMaXRlcmFsLmVudW1lcmF0aW9uRGVmaW5pdGlvbigpKSwgJy4nLCBtX3R5cGVOYW1lci5tYW5n
bGVkTmFtZUZvckVudW1lcmF0aW9uTWVtYmVyKCplbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51
bWVyYXRpb25NZW1iZXIoKSkpOworICAgICAgICB9KSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCisgICAgU3RyaW5nIGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gbWFrZVN0cmluZygidmFyaWFibGUiLCBtX3ZhcmlhYmxlQ291bnQrKyk7
CisgICAgfQorCitwcml2YXRlOgorICAgIEludHJpbnNpY3MmIG1faW50cmluc2ljczsKKyAgICBU
eXBlTmFtZXImIG1fdHlwZU5hbWVyOworICAgIEhhc2hNYXA8QVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uKiwgU3RyaW5nPiYgbV9mdW5jdGlvbk1hcHBpbmc7CisgICAgSGFzaE1hcDxBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24qLCBTdHJpbmc+IG1fdmFyaWFibGVNYXBwaW5nOworICAgIFN0cmluZ0J1
aWxkZXIgbV9zdHJpbmdCdWlsZGVyOworICAgIFZlY3RvcjxTdHJpbmc+IG1fc3RhY2s7CisgICAg
T3B0aW9uYWw8RW50cnlQb2ludFNjYWZmb2xkaW5nPiBtX2VudHJ5UG9pbnRTY2FmZm9sZGluZzsK
KyAgICB1bnNpZ25lZCBtX3ZhcmlhYmxlQ291bnQgeyAwIH07Cit9OworCitTdHJpbmcgbWV0YWxG
dW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSwgVHlwZU5hbWVyJiB0eXBlTmFtZXIpCit7CisgICAg
U3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworCisgICAgdW5zaWduZWQgbnVtRnVuY3Rpb25z
ID0gMDsKKyAgICBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIFN0cmluZz4gZnVu
Y3Rpb25NYXBwaW5nOworICAgIGZvciAoYXV0byYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA6
IHByb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSkgeworICAgICAgICBhdXRvIGFk
ZFJlc3VsdCA9IGZ1bmN0aW9uTWFwcGluZy5hZGQoJm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24s
IG1ha2VTdHJpbmcoImZ1bmN0aW9uIiwgbnVtRnVuY3Rpb25zKyspKTsKKyAgICAgICAgQVNTRVJU
X1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisgICAgZm9y
IChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMo
KSkgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IGZ1bmN0aW9uTWFwcGluZy5hZGQoJmZ1bmN0
aW9uRGVmaW5pdGlvbiwgbWFrZVN0cmluZygiZnVuY3Rpb24iLCBudW1GdW5jdGlvbnMrKykpOwor
ICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwor
ICAgIH0KKworICAgIHsKKyAgICAgICAgRnVuY3Rpb25EZWNsYXJhdGlvbldyaXRlciBmdW5jdGlv
bkRlY2xhcmF0aW9uV3JpdGVyKHR5cGVOYW1lciwgZnVuY3Rpb25NYXBwaW5nKTsKKyAgICAgICAg
Zm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9ucygpKQorICAgICAgICAgICAgZnVuY3Rpb25EZWNsYXJhdGlvbldyaXRl
ci52aXNpdChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKTsKKyAgICAgICAgZm9yIChhdXRvJiBm
dW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkgeworICAg
ICAgICAgICAgaWYgKCFmdW5jdGlvbkRlZmluaXRpb24tPmVudHJ5UG9pbnRUeXBlKCkpCisgICAg
ICAgICAgICAgICAgZnVuY3Rpb25EZWNsYXJhdGlvbldyaXRlci52aXNpdChmdW5jdGlvbkRlZmlu
aXRpb24pOworICAgICAgICB9CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGZ1bmN0aW9u
RGVjbGFyYXRpb25Xcml0ZXIudG9TdHJpbmcoKSk7CisgICAgfQorCisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoJ1xuJyk7CisKKyAgICB7CisgICAgICAgIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRl
ciBmdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIocHJvZ3JhbS5pbnRyaW5zaWNzKCksIHR5cGVOYW1l
ciwgZnVuY3Rpb25NYXBwaW5nKTsKKyAgICAgICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpKQorICAgICAg
ICAgICAgZnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyLnZpc2l0KG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24pOworICAgICAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0u
ZnVuY3Rpb25EZWZpbml0aW9ucygpKQorICAgICAgICAgICAgZnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyLnZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKGZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlci50b1N0cmluZygpKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQorCit9IC8vIG5hbWVzcGFjZSBNZXRh
bAorCit9IC8vIG5hbWVzcGFjZSBXSExTTAorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0
YWwvV0hMU0xGdW5jdGlvbldyaXRlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5NjBlNWU0OGQ1
OGMyNGUzNWU1MjgzODI0NTY0NzJiN2QwOWI2ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmgK
QEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitj
bGFzcyBQcm9ncmFtOworCituYW1lc3BhY2UgTWV0YWwgeworCitjbGFzcyBUeXBlTmFtZXI7CisK
K1N0cmluZyBtZXRhbEZ1bmN0aW9ucyhQcm9ncmFtJiwgVHlwZU5hbWVyJik7CisKK30KKworfQor
Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjAyNzdiZTVkZGFlMTgzOTQyZmI2MjZmZDU4NTEzZGJlY2Q3ZmY1MDMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTE1ldGFsQ29kZUdlbmVyYXRvci5jcHAKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTE1ldGFsQ29kZUdlbmVyYXRvci5o
IgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMRnVuY3Rpb25Xcml0ZXIu
aCIKKyNpbmNsdWRlICJXSExTTFR5cGVOYW1lci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgewor
CituYW1lc3BhY2UgTWV0YWwgeworCitTdHJpbmcgZ2VuZXJhdGVNZXRhbENvZGUoUHJvZ3JhbSYg
cHJvZ3JhbSkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoIi8vIFRoaXMgd2FzIGdlbmVyYXRlZCBieSBXZWJLaXQncyBXSExTTCAt
PiBNU0wgY29kZSBnZW5lcmF0b3IuIERvIG5vdCBlZGl0IVxuIik7CisgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIlxuIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiNpbmNsdWRlIDxtZXRh
bF9zdGRsaWI+XG4iKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiI2luY2x1ZGUgPG1ldGFs
X2F0b21pYz5cbiIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIjaW5jbHVkZSA8bWV0YWxf
bWF0aD5cbiIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIjaW5jbHVkZSA8bWV0YWxfcmVs
YXRpb25hbD5cbiIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIjaW5jbHVkZSA8bWV0YWxf
Y29tcHV0ZT5cbiIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIjaW5jbHVkZSA8bWV0YWxf
dGV4dHVyZT5cbiIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcbiIpOworICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCJ1c2luZyBuYW1lc3BhY2UgbWV0YWw7XG4iKTsKKyAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgiXG4iKTsKKworICAgIFR5cGVOYW1lciB0eXBlTmFtZXIocHJvZ3JhbSk7
CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodHlwZU5hbWVyLm1ldGFsVHlwZXMoKSk7CisgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQobWV0YWxGdW5jdGlvbnMocHJvZ3JhbSwgdHlwZU5hbWVyKSk7
CisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30KKworfQorCit9CisKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lMDg4ZTAxMDQ0OTk0ODQxMTA3NTY3NDM0NzQ5MWY3M2QzNmEyMzRmCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRh
bENvZGVHZW5lcmF0b3IuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3Mg
UHJvZ3JhbTsKKworbmFtZXNwYWNlIE1ldGFsIHsKKworLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8g
a25vdyBhYm91dCB0aGUgcGlwZWxpbmUgc3RhdGUgb2JqZWN0IHRvIGVtaXQgZnVuY3Rpb24gcHJv
bG9ndWVzIGFuZCBlcGlsb2d1ZXMuCitTdHJpbmcgZ2VuZXJhdGVNZXRhbENvZGUoUHJvZ3JhbSYp
OworCit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5j
dGlvbldyaXRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmZmZWM2MzFiN2FmNzM1MDhlNzg5MzY4ZmNiNGMw
N2U5YWI4NTNmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwCkBAIC0wLDAgKzEs
Mzk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNM
TmF0aXZlRnVuY3Rpb25Xcml0ZXIuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRl
ICJXSExTTEFkZHJlc3NTcGFjZS5oIgorI2luY2x1ZGUgIldITFNMTmFtZWRUeXBlLmgiCisjaW5j
bHVkZSAiV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xO
YXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVOYW1lci5oIgorI2lu
Y2x1ZGUgIldITFNMVW5uYW1lZFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFy
YXRpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitu
YW1lc3BhY2UgTWV0YWwgeworCitzdGF0aWMgU3RyaW5nIGdldE5hdGl2ZU5hbWUoQVNUOjpVbm5h
bWVkVHlwZSYgdW5uYW1lZFR5cGUsIFR5cGVOYW1lciYgdHlwZU5hbWVyKQoreworICAgIEFTU0VS
VChpczxBU1Q6Ok5hbWVkVHlwZT4odW5uYW1lZFR5cGUudW5pZnlOb2RlKCkpKTsKKyAgICBhdXRv
JiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5uYW1lZFR5cGUudW5pZnlO
b2RlKCkpOworICAgIEFTU0VSVChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRU
eXBlKSk7CisgICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8QVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSk7CisgICAgcmV0dXJuIHR5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKK30KKworc3RhdGljIFN0
cmluZyBtYXBGdW5jdGlvbk5hbWUoU3RyaW5nJiBmdW5jdGlvbk5hbWUpCit7CisgICAgaWYgKGZ1
bmN0aW9uTmFtZSA9PSAiZGR4IikKKyAgICAgICAgcmV0dXJuICJkZmR4Il9zdHI7CisgICAgaWYg
KGZ1bmN0aW9uTmFtZSA9PSAiZGR5IikKKyAgICAgICAgcmV0dXJuICJkZmR5Il9zdHI7CisgICAg
aWYgKGZ1bmN0aW9uTmFtZSA9PSAiYXNpbnQiKQorICAgICAgICByZXR1cm4gImFzX3R5cGU8aW50
MzJfdD4iX3N0cjsKKyAgICBpZiAoZnVuY3Rpb25OYW1lID09ICJhc3VpbnQiKQorICAgICAgICBy
ZXR1cm4gImFzX3R5cGU8dWludDMyX3Q+Il9zdHI7CisgICAgaWYgKGZ1bmN0aW9uTmFtZSA9PSAi
YXNmbG9hdCIpCisgICAgICAgIHJldHVybiAiYXNfdHlwZTxmbG9hdD4iX3N0cjsKKyAgICByZXR1
cm4gZnVuY3Rpb25OYW1lOworfQorCitzdGF0aWMgU3RyaW5nIGNvbnZlcnRBZGRyZXNzU3BhY2Uo
QVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKQoreworICAgIHN3aXRjaCAoYWRkcmVzc1Nw
YWNlKSB7CisgICAgY2FzZSBBU1Q6OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ6CisgICAgICAgIHJl
dHVybiAiY29uc3RhbnQiX3N0cjsKKyAgICBjYXNlIEFTVDo6QWRkcmVzc1NwYWNlOjpEZXZpY2U6
CisgICAgICAgIHJldHVybiAiZGV2aWNlIl9zdHI7CisgICAgY2FzZSBBU1Q6OkFkZHJlc3NTcGFj
ZTo6VGhyZWFkZ3JvdXA6CisgICAgICAgIHJldHVybiAidGhyZWFkZ3JvdXAiX3N0cjsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlQoYWRkcmVzc1NwYWNlID09IEFTVDo6QWRkcmVzc1NwYWNl
OjpUaHJlYWQpOworICAgICAgICByZXR1cm4gInRocmVhZCJfc3RyOworICAgIH0KK30KKworU3Ry
aW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLCBTdHJpbmcmIG91dHB1dEZ1bmN0aW9uTmFtZSwgVHlw
ZU5hbWVyJiB0eXBlTmFtZXIpCit7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwor
ICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmlzQ2FzdCgpKSB7CisgICAgICAgIEFT
U0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMSk7
CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gZ2V0TmF0aXZlTmFtZSgqbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLCB0eXBlTmFtZXIpOwor
ICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IGdldE5hdGl2ZU5hbWUobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi50eXBlKCksIHR5cGVOYW1lcik7CisgICAgICAgIGlmIChtZXRhbFBhcmFt
ZXRlck5hbWUgIT0gImF0b21pY19pbnQiX3N0ciAmJiBtZXRhbFBhcmFtZXRlck5hbWUgIT0gImF0
b21pY191aW50Il9zdHIpIHsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRh
bFBhcmFtZXRlck5hbWUsICJ4KSB7XG4iKSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuIHN0YXRpY19jYXN0PCIsIG1ldGFsUmV0dXJuTmFt
ZSwgIj4oeCk7XG4iKSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7
CisgICAgICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAgICB9
CisKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5h
bWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIngp
IHtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICByZXR1cm4gYXRvbWlj
X2xvYWRfZXhwbGljaXQoJngsIG1lbW9yeV9vcmRlcl9yZWxheGVkKTtcbiIpOworICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVy
LnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpLnN0YXJ0c1dpdGgoIm9wZXJhdG9yLiJfc3RyKSkgeworICAgICAgICBpZiAobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuZW5kc1dpdGgoIj0iX3N0cikpIHsKKyAgICAgICAg
ICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkg
PT0gMik7CisgICAgICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSBnZXROYXRpdmVO
YW1lKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCksIHR5
cGVOYW1lcik7CisgICAgICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSBnZXROYXRp
dmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS50eXBlKCks
IHR5cGVOYW1lcik7CisgICAgICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IGdldE5hdGl2
ZU5hbWUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCksIHR5cGVOYW1lcik7CisgICAg
ICAgICAgICBhdXRvIGZpZWxkTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgp
LnN1YnN0cmluZygib3BlcmF0b3IuIl9zdHIubGVuZ3RoKCkpOworICAgICAgICAgICAgZmllbGRO
YW1lID0gZmllbGROYW1lLnN1YnN0cmluZygwLCBmaWVsZE5hbWUubGVuZ3RoKCkgLSAxKTsKKyAg
ICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1l
LCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAidiwg
IiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBuKSB7XG4iKSk7CisgICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgdi4iLCBmaWVsZE5hbWUsICIgPSBuO1xuIikp
OworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVy
biB2O1xuIikpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAg
ICAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXpl
KCkgPT0gMSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gZ2V0TmF0aXZlTmFt
ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLCB0eXBl
TmFtZXIpOworICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IGdldE5hdGl2ZU5hbWUobmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCksIHR5cGVOYW1lcik7CisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1
bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICJ2KSB7XG4iKSk7CisgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gdi4iLCBuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yLiJfc3RyLmxlbmd0
aCgpKSwgIjtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAg
ICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworCisgICAgfQorCisgICAgaWYg
KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvcltdIikgeworICAg
ICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgp
ID09IDIpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSBnZXROYXRpdmVOYW1l
KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCksIHR5cGVO
YW1lcik7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IGdldE5hdGl2ZU5hbWUo
Km5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSwgdHlwZU5h
bWVyKTsKKyAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSBnZXROYXRpdmVOYW1lKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpLCB0eXBlTmFtZXIpOworICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5j
dGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIm0sICIsIG1ldGFsUGFyYW1ldGVy
Mk5hbWUsICIgaSkge1xuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKCIgICAgcmV0dXJuIG1baV07XG4iKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCJ9XG4iKTsKKyAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICB9
CisKKyAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9y
W109IikgeworICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKCkuc2l6ZSgpID09IDMpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSBn
ZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50
eXBlKCksIHR5cGVOYW1lcik7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IGdl
dE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLnR5
cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjNOYW1lID0gZ2V0
TmF0aXZlTmFtZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0udHlw
ZSgpLCB0eXBlTmFtZXIpOworICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IGdldE5hdGl2
ZU5hbWUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCksIHR5cGVOYW1lcik7CisgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcs
IG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAibSwgIiwgbWV0
YWxQYXJhbWV0ZXIyTmFtZSwgIiBpLCAiLCBtZXRhbFBhcmFtZXRlcjNOYW1lLCAiIHYpIHtcbiIp
KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIG1baV0gPSB2
O1xuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0
dXJuIG07XG4iKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAg
ICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICBpZiAobmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5pc09wZXJhdG9yKCkpIHsKKyAgICAgICAgaWYgKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKSB7CisgICAgICAg
ICAgICBhdXRvIG9wZXJhdG9yTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgp
LnN1YnN0cmluZygib3BlcmF0b3IiX3N0ci5sZW5ndGgoKSk7CisgICAgICAgICAgICBhdXRvIG1l
dGFsUGFyYW1ldGVyTmFtZSA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAgICAgIGF1dG8g
bWV0YWxSZXR1cm5OYW1lID0gZ2V0TmF0aXZlTmFtZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1h
a2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBt
ZXRhbFBhcmFtZXRlck5hbWUsICJ4KSB7XG4iKSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuICIsIG9wZXJhdG9yTmFtZSwgIng7XG4iKSk7
CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgICAgICAgICBy
ZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAgICB9CisKKyAgICAgICAgQVNT
RVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsK
KyAgICAgICAgYXV0byBvcGVyYXRvck5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5h
bWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yIl9zdHIubGVuZ3RoKCkpOworICAgICAgICBhdXRvIG1l
dGFsUGFyYW1ldGVyMU5hbWUgPSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCksIHR5cGVOYW1lcik7CisgICAgICAgIGF1dG8gbWV0
YWxQYXJhbWV0ZXIyTmFtZSA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAgYXV0byBtZXRh
bFJldHVybk5hbWUgPSBnZXROYXRpdmVOYW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlw
ZSgpLCB0eXBlTmFtZXIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJh
bWV0ZXIxTmFtZSwgIngsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgeSkge1xuIikpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuIHggIiwgb3Bl
cmF0b3JOYW1lLCAiIHk7XG4iKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4i
KTsKKyAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICB9CisKKyAg
ICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImNvcyIKKyAgICAgICAg
fHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gInNpbiIKKyAgICAgICAgfHwg
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gInRhbiIKKyAgICAgICAgfHwgbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImFjb3MiCisgICAgICAgIHx8IG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJhc2luIgorICAgICAgICB8fCBuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYXRhbiIKKyAgICAgICAgfHwgbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImNvc2giCisgICAgICAgIHx8IG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJzaW5oIgorICAgICAgICB8fCBuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAidGFuaCIKKyAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5uYW1lKCkgPT0gImNlaWwiCisgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ubmFtZSgpID09ICJleHAiCisgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ubmFtZSgpID09ICJmbG9vciIKKyAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5uYW1lKCkgPT0gImxvZyIKKyAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5uYW1lKCkgPT0gInJvdW5kIgorICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
Lm5hbWUoKSA9PSAidHJ1bmMiCisgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpID09ICJkZHgiCisgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFt
ZSgpID09ICJkZHkiCisgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgp
ID09ICJpc25vcm1hbCIKKyAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1l
KCkgPT0gImlzZmluaXRlIgorICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5h
bWUoKSA9PSAiaXNpbmYiCisgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFt
ZSgpID09ICJpc25hbiIKKyAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1l
KCkgPT0gImFzaW50IgorICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUo
KSA9PSAiYXN1aW50IgorICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUo
KSA9PSAiYXNmbG9hdCIpIHsKKyAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRl
ck5hbWUgPSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKVswXS50eXBlKCksIHR5cGVOYW1lcik7CisgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1l
ID0gZ2V0TmF0aXZlTmFtZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSwgdHlwZU5h
bWVyKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVy
bk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwg
IngpIHtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAg
IHJldHVybiAiLCBtYXBGdW5jdGlvbk5hbWUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1l
KCkpLCAiKHgpO1xuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7Cisg
ICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgaWYg
KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJwb3ciIHx8IG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJhdGFuMiIpIHsKKyAgICAgICAgQVNTRVJUKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKKyAgICAgICAg
YXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gZ2V0TmF0aXZlTmFtZSgqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLCB0eXBlTmFtZXIpOworICAgICAgICBh
dXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS50eXBlKCksIHR5cGVOYW1lcik7CisgICAgICAgIGF1
dG8gbWV0YWxSZXR1cm5OYW1lID0gZ2V0TmF0aXZlTmFtZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1l
dGFsUGFyYW1ldGVyMU5hbWUsICJ4LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIHkpIHtcbiIp
KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiAi
LCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSwgIih4LCB5KTtcbiIpKTsKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgICAgICByZXR1cm4gc3RyaW5nQnVp
bGRlci50b1N0cmluZygpOworICAgIH0KKworICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLm5hbWUoKSA9PSAiZjE2dG9mMzIiIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFt
ZSgpID09ICJmMzJ0b2YxNiIpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzCisg
ICAgICAgIENSQVNIKCk7CisgICAgfQorCisgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ubmFtZSgpID09ICJBbGxNZW1vcnlCYXJyaWVyV2l0aEdyb3VwU3luYyIpIHsKKyAgICAgICAg
QVNTRVJUKCFuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkpOwor
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ2b2lkICIsIG91dHB1dEZ1
bmN0aW9uTmFtZSwgIigpIHtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAg
ICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX2RldmljZSk7XG4iKTsKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFn
czo6bWVtX3RocmVhZGdyb3VwKTtcbiIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgi
ICAgIHRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjptZW1fdGV4dHVyZSk7XG4iKTsKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgICAgICByZXR1cm4gc3RyaW5n
QnVpbGRlci50b1N0cmluZygpOworICAgIH0KKworICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKSA9PSAiRGV2aWNlTWVtb3J5QmFycmllcldpdGhHcm91cFN5bmMiKSB7Cisg
ICAgICAgIEFTU0VSVCghbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6
ZSgpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygidm9pZCAiLCBv
dXRwdXRGdW5jdGlvbk5hbWUsICIoKSB7XG4iKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCIgICAgdGhyZWFkZ3JvdXBfYmFycmllcihtZW1fZmxhZ3M6Om1lbV9kZXZpY2UpO1xuIik7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAgICAgcmV0dXJuIHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICBpZiAobmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkdyb3VwTWVtb3J5QmFycmllcldpdGhHcm91cFN5bmMiKSB7
CisgICAgICAgIEFTU0VSVCghbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCku
c2l6ZSgpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygidm9pZCAi
LCBvdXRwdXRGdW5jdGlvbk5hbWUsICIoKSB7XG4iKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCIgICAgdGhyZWFkZ3JvdXBfYmFycmllcihtZW1fZmxhZ3M6Om1lbV90aHJlYWRncm91
cCk7XG4iKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgICAgICBy
ZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgIH0KKworICAgIGlmIChuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJJbnRlcmxvY2tlZCJfc3RyKSkg
eworICAgICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkludGVy
bG9ja2VkQ29tcGFyZUV4Y2hhbmdlIikgeworICAgICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSA0KTsKKyAgICAgICAgICAgIEFT
U0VSVChpczxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMF0udHlwZSgpKSk7CisgICAgICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9p
bnRlciA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOworICAgICAgICAgICAgYXV0byBmaXJzdEFyZ3Vt
ZW50QWRkcmVzc1NwYWNlID0gZmlyc3RBcmd1bWVudFBvaW50ZXIuYWRkcmVzc1NwYWNlKCk7Cisg
ICAgICAgICAgICBhdXRvIGZpcnN0QXJndW1lbnRQb2ludGVlID0gZ2V0TmF0aXZlTmFtZShmaXJz
dEFyZ3VtZW50UG9pbnRlci5lbGVtZW50VHlwZSgpLCB0eXBlTmFtZXIpOworICAgICAgICAgICAg
YXV0byBzZWNvbmRBcmd1bWVudCA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAgICAgIGF1
dG8gdGhpcmRBcmd1bWVudCA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpWzJdLnR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAgICAgIEFTU0VS
VChpczxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKClbM10udHlwZSgpKSk7CisgICAgICAgICAgICBhdXRvJiBmb3VydGhBcmd1bWVudFBvaW50
ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKClbM10udHlwZSgpKTsKKyAgICAgICAgICAgIGF1dG8gZm91cnRoQXJndW1l
bnRBZGRyZXNzU3BhY2UgPSBmb3VydGhBcmd1bWVudFBvaW50ZXIuYWRkcmVzc1NwYWNlKCk7Cisg
ICAgICAgICAgICBhdXRvIGZvdXJ0aEFyZ3VtZW50UG9pbnRlZSA9IGdldE5hdGl2ZU5hbWUoZm91
cnRoQXJndW1lbnRQb2ludGVyLmVsZW1lbnRUeXBlKCksIHR5cGVOYW1lcik7CisgICAgICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ2b2lkICIsIG91dHB1dEZ1bmN0aW9u
TmFtZSwgJygnLCBjb252ZXJ0QWRkcmVzc1NwYWNlKGZpcnN0QXJndW1lbnRBZGRyZXNzU3BhY2Up
LCAnICcsIGZpcnN0QXJndW1lbnRQb2ludGVlLCAiKiBvYmplY3QsICIsIHNlY29uZEFyZ3VtZW50
LCAiIGNvbXBhcmUsICIsIHRoaXJkQXJndW1lbnQsICIgZGVzaXJlZCwgIiwgY29udmVydEFkZHJl
c3NTcGFjZShmb3VydGhBcmd1bWVudEFkZHJlc3NTcGFjZSksICcgJywgZm91cnRoQXJndW1lbnRQ
b2ludGVlLCAiKiBvdXQpIHtcbiIpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCIgICAgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdChvYmplY3QsICZjb21w
YXJlLCBkZXNpcmVkLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCk7XG4iKTsKKyAgICAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgKm91dCA9IGNvbXBhcmU7XG4iKTsKKyAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAgICAgICAgIHJldHVybiBzdHJpbmdC
dWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDMpOworICAgICAgICBBU1NF
UlQoaXM8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1l
dGVycygpWzBdLnR5cGUoKSkpOworICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9
IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKVswXS50eXBlKCkpOworICAgICAgICBhdXRvIGZpcnN0QXJndW1lbnRBZGRyZXNz
U3BhY2UgPSBmaXJzdEFyZ3VtZW50UG9pbnRlci5hZGRyZXNzU3BhY2UoKTsKKyAgICAgICAgYXV0
byBmaXJzdEFyZ3VtZW50UG9pbnRlZSA9IGdldE5hdGl2ZU5hbWUoZmlyc3RBcmd1bWVudFBvaW50
ZXIuZWxlbWVudFR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAgYXV0byBzZWNvbmRBcmd1bWVu
dCA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
WzFdLnR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9pbnRlclR5
cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsyXS50eXBlKCkpKTsK
KyAgICAgICAgYXV0byYgdGhpcmRBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50
ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0udHlwZSgp
KTsKKyAgICAgICAgYXV0byB0aGlyZEFyZ3VtZW50QWRkcmVzc1NwYWNlID0gdGhpcmRBcmd1bWVu
dFBvaW50ZXIuYWRkcmVzc1NwYWNlKCk7CisgICAgICAgIGF1dG8gdGhpcmRBcmd1bWVudFBvaW50
ZWUgPSBnZXROYXRpdmVOYW1lKHRoaXJkQXJndW1lbnRQb2ludGVyLmVsZW1lbnRUeXBlKCksIHR5
cGVOYW1lcik7CisgICAgICAgIGF1dG8gbmFtZSA9IChbXShTdHJpbmcgaW5wdXQpIC0+IFN0cmlu
ZyB7CisgICAgICAgICAgICBpZiAoaW5wdXQgPT0gIkFkZCIpCisgICAgICAgICAgICAgICAgcmV0
dXJuICJmZXRjaF9hZGQiX3N0cjsKKyAgICAgICAgICAgIGlmIChpbnB1dCA9PSAiQW5kIikKKyAg
ICAgICAgICAgICAgICByZXR1cm4gImZldGNoX2FuZCJfc3RyOworICAgICAgICAgICAgaWYgKGlu
cHV0ID09ICJFeGNoYW5nZSIpCisgICAgICAgICAgICAgICAgcmV0dXJuICJleGNoYW5nZSJfc3Ry
OworICAgICAgICAgICAgaWYgKGlucHV0ID09ICJNYXgiKQorICAgICAgICAgICAgICAgIHJldHVy
biAiZmV0Y2hfbWF4Il9zdHI7CisgICAgICAgICAgICBpZiAoaW5wdXQgPT0gIk1pbiIpCisgICAg
ICAgICAgICAgICAgcmV0dXJuICJmZXRjaF9taW4iX3N0cjsKKyAgICAgICAgICAgIGlmIChpbnB1
dCA9PSAiT3IiKQorICAgICAgICAgICAgICAgIHJldHVybiAiZmV0Y2hfb3IiX3N0cjsKKyAgICAg
ICAgICAgIEFTU0VSVChpbnB1dCA9PSAiWG9yIik7CisgICAgICAgICAgICByZXR1cm4gImZldGNo
X3hvciJfc3RyOworICAgICAgICB9KShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5z
dWJzdHJpbmcoIkludGVybG9ja2VkIl9zdHIubGVuZ3RoKCkpKTsKKyAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQobWFrZVN0cmluZygidm9pZCAiLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywg
Y29udmVydEFkZHJlc3NTcGFjZShmaXJzdEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwgJyAnLCBmaXJz
dEFyZ3VtZW50UG9pbnRlZSwgIiogb2JqZWN0LCAiLCBzZWNvbmRBcmd1bWVudCwgIiBvcGVyYW5k
LCAiLCBjb252ZXJ0QWRkcmVzc1NwYWNlKHRoaXJkQXJndW1lbnRBZGRyZXNzU3BhY2UpLCAnICcs
IHRoaXJkQXJndW1lbnRQb2ludGVlLCAiKiBvdXQpIHtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgICpvdXQgPSBhdG9taWNfZmV0Y2hfIiwgbmFtZSwg
Il9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG1lbW9yeV9vcmRlcl9yZWxheGVkKTtcbiIpKTsK
KyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgICAgICByZXR1cm4gc3Ry
aW5nQnVpbGRlci50b1N0cmluZygpOworICAgIH0KKworICAgIGlmIChuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKSA9PSAiU2FtcGxlIikgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMuCisgICAgICAgIENSQVNIKCk7CisgICAgfQorCisgICAgaWYgKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJMb2FkIikgeworICAgICAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRoaXMuCisgICAgICAgIENSQVNIKCk7CisgICAgfQorCisgICAgaWYgKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJHZXREaW1lbnNpb25zIikgeworICAgICAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgICAgIENSQVNIKCk7CisgICAgfQorCisgICAg
aWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJTYW1wbGVCaWFzIikgewor
ICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgICAgIENSQVNIKCk7CisgICAg
fQorCisgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJTYW1wbGVH
cmFkIikgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgICAgIENSQVNI
KCk7CisgICAgfQorCisgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09
ICJTYW1wbGVMZXZlbCIpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAg
ICAgICBDUkFTSCgpOworICAgIH0KKworICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
Lm5hbWUoKSA9PSAiR2F0aGVyIikgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMu
CisgICAgICAgIENSQVNIKCk7CisgICAgfQorCisgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ubmFtZSgpID09ICJHYXRoZXJSZWQiKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdGhpcy4KKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICBpZiAobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlNhbXBsZUNtcCIpIHsKKyAgICAgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0aGlzLgorICAgICAgICBDUkFTSCgpOworICAgIH0KKworICAgIGlmIChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiU2FtcGxlQ21wTGV2ZWxaZXJvIikgewor
ICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgICAgIENSQVNIKCk7CisgICAg
fQorCisgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJTdG9yZSIp
IHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgICAgICBDUkFTSCgpOwor
ICAgIH0KKworICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiR2F0
aGVyQWxwaGEiKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICAgICAg
Q1JBU0goKTsKKyAgICB9CisKKyAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1l
KCkgPT0gIkdhdGhlckJsdWUiKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4K
KyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5uYW1lKCkgPT0gIkdhdGhlckNtcCIpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzLgorICAgICAgICBDUkFTSCgpOworICAgIH0KKworICAgIGlmIChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiR2F0aGVyQ21wUmVkIikgeworICAgICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRoaXMuCisgICAgICAgIENSQVNIKCk7CisgICAgfQorCisgICAgaWYgKG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJHYXRoZXJHcmVlbiIpIHsKKyAgICAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgICAgICBDUkFTSCgpOworICAgIH0KKwor
ICAgIC8vIEZJWE1FOiBBZGQgYWxsIHRoZSBmdW5jdGlvbnMgdGhhdCB0aGUgY29tcGlsZXIgZ2Vu
ZXJhdGVkLgorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFN0cmluZygp
OworfQorCit9IC8vIG5hbWVzcGFjZSBNZXRhbAorCit9IC8vIG5hbWVzcGFjZSBXSExTTAorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVG
dW5jdGlvbldyaXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJlOWJkNGUzY2JkNmM2MjYxMDFjZDA4YTBiODJh
NWVmYjZlNjU1ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmgKQEAgLTAsMCArMSw1
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKwor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uOworCit9CisKK25hbWVzcGFjZSBNZXRhbCB7CisKK2NsYXNzIFR5cGVO
YW1lcjsKKworU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uJiwgU3RyaW5nJiBvdXRwdXRGdW5jdGlvbk5hbWUsIFR5cGVOYW1lciYpOworCit9
CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
MzE4ZWI4Njc2YWJmMzg0MGVkMTMyMzdmZDdiNDhkZDI1MTdlMDBjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFt
ZXIuY3BwCkBAIC0wLDAgKzEsNzA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldITFNMVHlwZU5hbWVyLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisj
aW5jbHVkZSAiV0hMU0xBZGRyZXNzU3BhY2UuaCIKKyNpbmNsdWRlICJXSExTTEFycmF5UmVmZXJl
bmNlVHlwZS5oIgorI2luY2x1ZGUgIldITFNMQXJyYXlUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xF
bnVtZXJhdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uTWVtYmVy
LmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJX
SExTTFBvaW50ZXJUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xUeXBlRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJl
ZmVyZW5jZS5oIgorI2luY2x1ZGUgIldITFNMVmlzaXRvci5oIgorI2luY2x1ZGUgPGFsZ29yaXRo
bT4KKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRl
IDx3dGYvVW5pcXVlUmVmLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRl
bmF0ZU51bWJlcnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wg
eworCituYW1lc3BhY2UgTWV0YWwgeworCitjbGFzcyBCYXNlVHlwZU5hbWVOb2RlIHsKK3B1Ymxp
YzoKKyAgICBCYXNlVHlwZU5hbWVOb2RlKEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVudCwgU3RyaW5n
JiYgbWFuZ2xlZE5hbWUpCisgICAgICAgIDogbV9wYXJlbnQocGFyZW50KQorICAgICAgICAsIG1f
bWFuZ2xlZE5hbWUobWFuZ2xlZE5hbWUpCisgICAgeworICAgIH0KKyAgICB2aXJ0dWFsIH5CYXNl
VHlwZU5hbWVOb2RlKCkgPSBkZWZhdWx0OworICAgIHZpcnR1YWwgYm9vbCBpc0FycmF5VHlwZU5h
bWVOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNBcnJh
eVJlZmVyZW5jZVR5cGVOYW1lTm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBib29sIGlzUG9pbnRlclR5cGVOYW1lTm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgdmlydHVhbCBib29sIGlzUmVmZXJlbmNlVHlwZU5hbWVOb2RlKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+PiYgY2hp
bGRyZW4oKSB7IHJldHVybiBtX2NoaWxkcmVuOyB9CisgICAgdm9pZCBhcHBlbmQoVW5pcXVlUmVm
PEJhc2VUeXBlTmFtZU5vZGU+JiYgY2hpbGQpCisgICAgeworICAgICAgICBtX2NoaWxkcmVuLmFw
cGVuZChXVEZNb3ZlKGNoaWxkKSk7CisgICAgfQorICAgIEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVu
dCgpIHsgcmV0dXJuIG1fcGFyZW50OyB9CisgICAgY29uc3QgU3RyaW5nJiBtYW5nbGVkTmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbWFuZ2xlZE5hbWU7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8
VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+PiBtX2NoaWxkcmVuOworICAgIEJhc2VUeXBlTmFt
ZU5vZGUqIG1fcGFyZW50OworICAgIFN0cmluZyBtX21hbmdsZWROYW1lOworfTsKKworY2xhc3Mg
QXJyYXlUeXBlTmFtZU5vZGUgOiBwdWJsaWMgQmFzZVR5cGVOYW1lTm9kZSB7CitwdWJsaWM6Cisg
ICAgQXJyYXlUeXBlTmFtZU5vZGUoQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50LCBTdHJpbmcmJiBt
YW5nbGVkTmFtZSwgdW5zaWduZWQgbnVtRWxlbWVudHMpCisgICAgICAgIDogQmFzZVR5cGVOYW1l
Tm9kZShwYXJlbnQsIFdURk1vdmUobWFuZ2xlZE5hbWUpKQorICAgICAgICAsIG1fbnVtRWxlbWVu
dHMobnVtRWxlbWVudHMpCisgICAgeworICAgIH0KKyAgICB2aXJ0dWFsIH5BcnJheVR5cGVOYW1l
Tm9kZSgpID0gZGVmYXVsdDsKKyAgICBib29sIGlzQXJyYXlUeXBlTmFtZU5vZGUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdW5zaWduZWQgbnVtRWxlbWVudHMoKSBjb25z
dCB7IHJldHVybiBtX251bUVsZW1lbnRzOyB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9u
dW1FbGVtZW50czsKK307CisKK2NsYXNzIEFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlIDogcHVi
bGljIEJhc2VUeXBlTmFtZU5vZGUgeworcHVibGljOgorICAgIEFycmF5UmVmZXJlbmNlVHlwZU5h
bWVOb2RlKEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVudCwgU3RyaW5nJiYgbWFuZ2xlZE5hbWUsIEFT
VDo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSkKKyAgICAgICAgOiBCYXNlVHlwZU5hbWVOb2Rl
KHBhcmVudCwgV1RGTW92ZShtYW5nbGVkTmFtZSkpCisgICAgICAgICwgbV9hZGRyZXNzU3BhY2Uo
YWRkcmVzc1NwYWNlKQorICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+QXJyYXlSZWZlcmVuY2VU
eXBlTmFtZU5vZGUoKSA9IGRlZmF1bHQ7CisgICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZU5h
bWVOb2RlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIEFTVDo6QWRkcmVz
c1NwYWNlIGFkZHJlc3NTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWRkcmVzc1NwYWNlOyB9CisK
K3ByaXZhdGU6CisgICAgQVNUOjpBZGRyZXNzU3BhY2UgbV9hZGRyZXNzU3BhY2U7Cit9OworCitj
bGFzcyBQb2ludGVyVHlwZU5hbWVOb2RlIDogcHVibGljIEJhc2VUeXBlTmFtZU5vZGUgeworcHVi
bGljOgorICAgIFBvaW50ZXJUeXBlTmFtZU5vZGUoQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50LCBT
dHJpbmcmJiBtYW5nbGVkTmFtZSwgQVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKQorICAg
ICAgICA6IEJhc2VUeXBlTmFtZU5vZGUocGFyZW50LCBXVEZNb3ZlKG1hbmdsZWROYW1lKSkKKyAg
ICAgICAgLCBtX2FkZHJlc3NTcGFjZShhZGRyZXNzU3BhY2UpCisgICAgeworICAgIH0KKyAgICB2
aXJ0dWFsIH5Qb2ludGVyVHlwZU5hbWVOb2RlKCkgPSBkZWZhdWx0OworICAgIGJvb2wgaXNQb2lu
dGVyVHlwZU5hbWVOb2RlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIEFT
VDo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWRkcmVzc1Nw
YWNlOyB9CisKK3ByaXZhdGU6CisgICAgQVNUOjpBZGRyZXNzU3BhY2UgbV9hZGRyZXNzU3BhY2U7
Cit9OworCitjbGFzcyBSZWZlcmVuY2VUeXBlTmFtZU5vZGUgOiBwdWJsaWMgQmFzZVR5cGVOYW1l
Tm9kZSB7CitwdWJsaWM6CisgICAgUmVmZXJlbmNlVHlwZU5hbWVOb2RlKEJhc2VUeXBlTmFtZU5v
ZGUqIHBhcmVudCwgU3RyaW5nJiYgbWFuZ2xlZE5hbWUsIEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5
cGUpCisgICAgICAgIDogQmFzZVR5cGVOYW1lTm9kZShwYXJlbnQsIFdURk1vdmUobWFuZ2xlZE5h
bWUpKQorICAgICAgICAsIG1fbmFtZWRUeXBlKG5hbWVkVHlwZSkKKyAgICB7CisgICAgfQorICAg
IHZpcnR1YWwgflJlZmVyZW5jZVR5cGVOYW1lTm9kZSgpID0gZGVmYXVsdDsKKyAgICBib29sIGlz
UmVmZXJlbmNlVHlwZU5hbWVOb2RlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUoKSB7IHJldHVybiBtX25hbWVkVHlwZTsgfQor
Citwcml2YXRlOgorICAgIEFTVDo6TmFtZWRUeXBlJiBtX25hbWVkVHlwZTsKK307CisKK30KKwor
fQorCit9CisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9CQVNFX1RZUEVf
TkFNRURfTk9ERShUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAorU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19CRUdJTihXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlRvVmFsdWVUeXBlTmFtZSkgXAor
ICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkJhc2VU
eXBlTmFtZU5vZGUmIHR5cGUpIHsgcmV0dXJuIHR5cGUucHJlZGljYXRlOyB9IFwKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRU5EKCkKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9CQVNF
X1RZUEVfTkFNRURfTk9ERShBcnJheVR5cGVOYW1lTm9kZSwgaXNBcnJheVR5cGVOYW1lTm9kZSgp
KQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0JBU0VfVFlQRV9OQU1FRF9OT0RFKEFy
cmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlLCBpc0FycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlKCkp
CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfQkFTRV9UWVBFX05BTUVEX05PREUoUG9p
bnRlclR5cGVOYW1lTm9kZSwgaXNQb2ludGVyVHlwZU5hbWVOb2RlKCkpCisKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfV0hMU0xfQkFTRV9UWVBFX05BTUVEX05PREUoUmVmZXJlbmNlVHlwZU5hbWVO
b2RlLCBpc1JlZmVyZW5jZVR5cGVOYW1lTm9kZSgpKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBNZXRhbCB7CisKK1R5cGVOYW1lcjo6VHlw
ZU5hbWVyKFByb2dyYW0mIHByb2dyYW0pCisgICAgOiBtX3Byb2dyYW0ocHJvZ3JhbSkKK3sKK30K
KworVHlwZU5hbWVyOjp+VHlwZU5hbWVyKCkgPSBkZWZhdWx0OworCit2b2lkIFR5cGVOYW1lcjo6
dmlzaXQoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpCit7CisgICAgaW5zZXJ0KHVubmFt
ZWRUeXBlLCBtX3RyaWUpOworfQorCit2b2lkIFR5cGVOYW1lcjo6dmlzaXQoQVNUOjpFbnVtZXJh
dGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBhdXRvIGFkZFJl
c3VsdCA9IG1fbmFtZWRUeXBlTWFwcGluZy5hZGQoJmVudW1lcmF0aW9uRGVmaW5pdGlvbiwgZ2Vu
ZXJhdGVOZXh0VHlwZU5hbWUoKSk7CisgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJl
c3VsdC5pc05ld0VudHJ5KTsKKyAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uTWVtYmVyIDogZW51
bWVyYXRpb25EZWZpbml0aW9uLmVudW1lcmF0aW9uTWVtYmVycygpKSB7CisgICAgICAgIGF1dG8g
YWRkUmVzdWx0ID0gbV9lbnVtZXJhdGlvbk1lbWJlck1hcHBpbmcuYWRkKCZzdGF0aWNfY2FzdDxB
U1Q6OkVudW1lcmF0aW9uTWVtYmVyJj4oZW51bWVyYXRpb25NZW1iZXIpLCBnZW5lcmF0ZU5leHRF
bnVtZXJhdGlvbk1lbWJlck5hbWUoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0
LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorICAgIFZpc2l0b3I6OnZpc2l0KGVudW1l
cmF0aW9uRGVmaW5pdGlvbik7Cit9CisKK3ZvaWQgVHlwZU5hbWVyOjp2aXNpdChBU1Q6Ok5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiYpCit7CisgICAgLy8gTmF0aXZlIHR5cGUgZGVjbGFyYXRpb25zIGFs
cmVhZHkgaGF2ZSBuYW1lcywgYW5kIGFyZSBhbHJlYWR5IGRlY2xhcmVkIGluIE1ldGFsLgorfQor
CitzdGF0aWMgVmVjdG9yPFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPj46Oml0ZXJhdG9yIGZp
bmRJblZlY3RvcihBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgVmVjdG9yPFVuaXF1ZVJl
ZjxCYXNlVHlwZU5hbWVOb2RlPj4mIHR5cGVzKQoreworICAgIHJldHVybiBzdGQ6OmZpbmRfaWYo
dHlwZXMuYmVnaW4oKSwgdHlwZXMuZW5kKCksIFsmXShCYXNlVHlwZU5hbWVOb2RlJiBiYXNlVHlw
ZU5hbWVOb2RlKSAtPiBib29sIHsKKyAgICAgICAgaWYgKGlzPEFTVDo6VHlwZVJlZmVyZW5jZT4o
dW5uYW1lZFR5cGUpICYmIGlzPFJlZmVyZW5jZVR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9k
ZSkpIHsKKyAgICAgICAgICAgIGF1dG8qIHJlc29sdmVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VHlw
ZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpLnJlc29sdmVkVHlwZSgpOworICAgICAgICAgICAgQVNT
RVJUKHJlc29sdmVkVHlwZSk7CisgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWRUeXBlID09ICZk
b3duY2FzdDxSZWZlcmVuY2VUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpLm5hbWVkVHlw
ZSgpOworICAgICAgICB9CisgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVk
VHlwZSkgJiYgaXM8UG9pbnRlclR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9kZSkpCisgICAg
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpLmFk
ZHJlc3NTcGFjZSgpID09IGRvd25jYXN0PFBvaW50ZXJUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFt
ZU5vZGUpLmFkZHJlc3NTcGFjZSgpOworICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU+KHVubmFtZWRUeXBlKSAmJiBpczxBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZT4oYmFz
ZVR5cGVOYW1lTm9kZSkpCisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8QVNUOjpBcnJheVJl
ZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKS5hZGRyZXNzU3BhY2UoKSA9PSBkb3duY2FzdDxBcnJh
eVJlZmVyZW5jZVR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9kZSkuYWRkcmVzc1NwYWNlKCk7
CisgICAgICAgIGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpICYmIGlzPEFycmF5
VHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBkb3du
Y2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpLm51bUVsZW1lbnRzKCkgPT0gZG93bmNh
c3Q8QXJyYXlUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpLm51bUVsZW1lbnRzKCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9KTsKK30KKworc3RhdGljIEJhc2VUeXBlTmFtZU5v
ZGUmIGZpbmQoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIFZlY3RvcjxVbmlxdWVSZWY8
QmFzZVR5cGVOYW1lTm9kZT4+JiB0eXBlcykKK3sKKyAgICBhdXRvJiB2ZWN0b3JUb1NlYXJjaCA9
IChbJl0oKSAtPiBWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+PiYgeworICAgICAg
ICBpZiAoaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICBy
ZXR1cm4gdHlwZXM7CisgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlw
ZSkpCisgICAgICAgICAgICByZXR1cm4gZmluZChkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1
bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKSwgdHlwZXMpLmNoaWxkcmVuKCk7CisgICAgICAgIGlm
IChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAg
cmV0dXJuIGZpbmQoZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBl
KS5lbGVtZW50VHlwZSgpLCB0eXBlcykuY2hpbGRyZW4oKTsKKyAgICAgICAgQVNTRVJUKGlzPEFT
VDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpOworICAgICAgICByZXR1cm4gZmluZChkb3duY2Fz
dDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpLnR5cGUoKSwgdHlwZXMpLmNoaWxkcmVuKCk7
CisgICAgfSkoKTsKKyAgICBhdXRvIGl0ZXJhdG9yID0gZmluZEluVmVjdG9yKHVubmFtZWRUeXBl
LCB2ZWN0b3JUb1NlYXJjaCk7CisgICAgQVNTRVJUKGl0ZXJhdG9yICE9IHR5cGVzLmVuZCgpKTsK
KyAgICByZXR1cm4gKml0ZXJhdG9yOworfQorCit2b2lkIFR5cGVOYW1lcjo6dmlzaXQoQVNUOjpT
dHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQoreworICAgIHsKKyAgICAg
ICAgYXV0byBhZGRSZXN1bHQgPSBtX25hbWVkVHlwZU1hcHBpbmcuYWRkKCZzdHJ1Y3R1cmVEZWZp
bml0aW9uLCBnZW5lcmF0ZU5leHRUeXBlTmFtZSgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChh
ZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisgICAgVmlzaXRvcjo6dmlz
aXQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgeworICAgICAgICBWZWN0b3I8c3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxCYXNlVHlwZU5hbWVOb2RlPj4gbmVpZ2hib3JzOworICAgICAgICBmb3Ig
KGF1dG8mIHN0cnVjdHVyZUVsZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLnN0cnVjdHVyZUVs
ZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9zdHJ1Y3R1cmVFbGVt
ZW50TWFwcGluZy5hZGQoJnN0cnVjdHVyZUVsZW1lbnQsIGdlbmVyYXRlTmV4dFN0cnVjdHVyZUVs
ZW1lbnROYW1lKCkpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJl
c3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgICAgIG5laWdoYm9ycy5hcHBlbmQoZmluZChzdHJ1
Y3R1cmVFbGVtZW50LnR5cGUoKSwgbV90cmllKSk7CisgICAgICAgIH0KKyAgICAgICAgYXV0byBh
ZGRSZXN1bHQgPSBtX2RlcGVuZGVuY3lHcmFwaC5hZGQoJnN0cnVjdHVyZURlZmluaXRpb24sIFdU
Rk1vdmUobmVpZ2hib3JzKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRS
ZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorfQorCit2b2lkIFR5cGVOYW1lcjo6dmlzaXQoQVNU
OjpUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmluaXRpb24pCit7CisgICAgeworICAgICAgICBhdXRv
IGFkZFJlc3VsdCA9IG1fbmFtZWRUeXBlTWFwcGluZy5hZGQoJnR5cGVEZWZpbml0aW9uLCBnZW5l
cmF0ZU5leHRUeXBlTmFtZSgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFk
ZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisgICAgVmlzaXRvcjo6dmlzaXQodHlwZURlZmlu
aXRpb24pOworICAgIHsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QmFz
ZVR5cGVOYW1lTm9kZT4+IG5laWdoYm9ycyA9IHsgZmluZCh0eXBlRGVmaW5pdGlvbi50eXBlKCks
IG1fdHJpZSkgfTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2RlcGVuZGVuY3lHcmFwaC5h
ZGQoJnR5cGVEZWZpbml0aW9uLCBXVEZNb3ZlKG5laWdoYm9ycykpOworICAgICAgICBBU1NFUlRf
VU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KK30KKworU3Ry
aW5nIFR5cGVOYW1lcjo6bWFuZ2xlZE5hbWVGb3JUeXBlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5uYW1lKCkgPT0gInZvaWQiKQorICAgICAgICByZXR1cm4gInZvaWQiX3N0cjsKKyAgICBp
ZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYm9vbCIpCisgICAgICAgIHJldHVy
biAiYm9vbCJfc3RyOworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJ1
Y2hhciIpCisgICAgICAgIHJldHVybiAidWludDhfdCJfc3RyOworICAgIGlmIChuYXRpdmVUeXBl
RGVjbGFyYXRpb24ubmFtZSgpID09ICJ1c2hvcnQiKQorICAgICAgICByZXR1cm4gInVpbnQxNl90
Il9zdHI7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInVpbnQiKQor
ICAgICAgICByZXR1cm4gInVpbnQzMl90Il9zdHI7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5uYW1lKCkgPT0gImNoYXIiKQorICAgICAgICByZXR1cm4gImludDhfdCJfc3RyOworICAg
IGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJzaG9ydCIpCisgICAgICAgIHJl
dHVybiAiaW50MTZfdCJfc3RyOworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgp
ID09ICJpbnQiKQorICAgICAgICByZXR1cm4gImludDMyX3QiX3N0cjsKKyAgICBpZiAobmF0aXZl
VHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiaGFsZiIpCisgICAgICAgIHJldHVybiAiaGFsZiJf
c3RyOworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJmbG9hdCIpCisg
ICAgICAgIHJldHVybiAiZmxvYXQiX3N0cjsKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9u
Lm5hbWUoKSA9PSAiYXRvbWljX2ludCIpCisgICAgICAgIHJldHVybiAiYXRvbWljX2ludCJfc3Ry
OworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJhdG9taWNfdWludCIp
CisgICAgICAgIHJldHVybiAiYXRvbWljX3VpbnQiX3N0cjsKKyAgICBpZiAobmF0aXZlVHlwZURl
Y2xhcmF0aW9uLm5hbWUoKSA9PSAic2FtcGxlciIpCisgICAgICAgIHJldHVybiAic2FtcGxlciJf
c3RyOworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJ2ZWN0b3IiKSB7
CisgICAgICAgIEFTU0VSVChuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNp
emUoKSA9PSAyKTsKKyAgICAgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VW5pcXVl
UmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1l
bnRzKClbMF0pKTsKKyAgICAgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IFdURjo6Z2V0PFVuaXF1
ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3Vt
ZW50cygpWzBdKTsKKyAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gdHlwZVJlZmVyZW5jZS0+dW5p
ZnlOb2RlKCk7CisgICAgICAgIEFTU0VSVChpczxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKSk7
CisgICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlm
eU5vZGUpOworICAgICAgICBBU1NFUlQoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5h
bWVkVHlwZSkpOworICAgICAgICBhdXRvJiBwYXJhbWV0ZXJUeXBlID0gZG93bmNhc3Q8QVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSk7CisgICAgICAgIGF1dG8gcHJlZml4ID0g
KFsmXSgpIC0+IFN0cmluZyB7CisgICAgICAgICAgICBpZiAocGFyYW1ldGVyVHlwZS5uYW1lKCkg
PT0gImJvb2wiKQorICAgICAgICAgICAgICAgIHJldHVybiAiYm9vbCI7CisgICAgICAgICAgICBp
ZiAocGFyYW1ldGVyVHlwZS5uYW1lKCkgPT0gInVjaGFyIikKKyAgICAgICAgICAgICAgICByZXR1
cm4gInVjaGFyIjsKKyAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJUeXBlLm5hbWUoKSA9PSAidXNo
b3J0IikKKyAgICAgICAgICAgICAgICByZXR1cm4gInVzaG9ydCI7CisgICAgICAgICAgICBpZiAo
cGFyYW1ldGVyVHlwZS5uYW1lKCkgPT0gInVpbnQiKQorICAgICAgICAgICAgICAgIHJldHVybiAi
dWludCI7CisgICAgICAgICAgICBpZiAocGFyYW1ldGVyVHlwZS5uYW1lKCkgPT0gImNoYXIiKQor
ICAgICAgICAgICAgICAgIHJldHVybiAiY2hhciI7CisgICAgICAgICAgICBpZiAocGFyYW1ldGVy
VHlwZS5uYW1lKCkgPT0gInNob3J0IikKKyAgICAgICAgICAgICAgICByZXR1cm4gInNob3J0IjsK
KyAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJUeXBlLm5hbWUoKSA9PSAiaW50IikKKyAgICAgICAg
ICAgICAgICByZXR1cm4gImludCI7CisgICAgICAgICAgICBpZiAocGFyYW1ldGVyVHlwZS5uYW1l
KCkgPT0gImhhbGYiKQorICAgICAgICAgICAgICAgIHJldHVybiAiaGFsZiI7CisgICAgICAgICAg
ICBBU1NFUlQocGFyYW1ldGVyVHlwZS5uYW1lKCkgPT0gImZsb2F0Iik7CisgICAgICAgICAgICBy
ZXR1cm4gImZsb2F0IjsKKyAgICAgICAgfSkoKTsKKyAgICAgICAgQVNTRVJUKFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi50eXBlQXJndW1lbnRzKClbMV0pKTsKKyAgICAgICAgYXV0byYgY29uc3RhbnRFeHByZXNzaW9u
ID0gV1RGOjpnZXQ8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi50eXBlQXJndW1lbnRzKClbMF0pOworICAgICAgICBhdXRvJiBpbnRlZ2VyTGl0ZXJhbCA9IGNv
bnN0YW50RXhwcmVzc2lvbi5pbnRlZ2VyTGl0ZXJhbCgpOworICAgICAgICBhdXRvIHN1ZmZpeCA9
IChbJl0oKSAtPiBTdHJpbmcgeworICAgICAgICAgICAgc3dpdGNoIChpbnRlZ2VyTGl0ZXJhbC52
YWx1ZSgpKSB7CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgcmV0dXJuICIy
Il9zdHI7CisgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgcmV0dXJuICIzIl9z
dHI7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVChpbnRlZ2Vy
TGl0ZXJhbC52YWx1ZSgpID09IDQpOworICAgICAgICAgICAgICAgIHJldHVybiAiNCJfc3RyOwor
ICAgICAgICAgICAgfQorICAgICAgICB9KSgpOworICAgICAgICByZXR1cm4gbWFrZVN0cmluZyhw
cmVmaXgsIHN1ZmZpeCk7CisgICAgfQorICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFt
ZSgpID09ICJtYXRyaXgiKSB7CisgICAgICAgIEFTU0VSVChuYXRpdmVUeXBlRGVjbGFyYXRpb24u
dHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAzKTsKKyAgICAgICAgQVNTRVJUKFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8VW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsKKyAgICAgICAgYXV0byYgdHlwZVJlZmVyZW5j
ZSA9IFdURjo6Z2V0PFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVj
bGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKTsKKyAgICAgICAgYXV0byYgdW5pZnlOb2RlID0g
dHlwZVJlZmVyZW5jZS0+dW5pZnlOb2RlKCk7CisgICAgICAgIEFTU0VSVChpczxBU1Q6Ok5hbWVk
VHlwZT4odW5pZnlOb2RlKSk7CisgICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PEFT
VDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpOworICAgICAgICBBU1NFUlQoaXM8QVNUOjpOYXRpdmVU
eXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpOworICAgICAgICBhdXRvJiBwYXJhbWV0ZXJUeXBl
ID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSk7CisgICAg
ICAgIGF1dG8gcHJlZml4ID0gKFsmXSgpIC0+IFN0cmluZyB7CisgICAgICAgICAgICBpZiAocGFy
YW1ldGVyVHlwZS5uYW1lKCkgPT0gImhhbGYiKQorICAgICAgICAgICAgICAgIHJldHVybiAiaGFs
ZiI7CisgICAgICAgICAgICBBU1NFUlQocGFyYW1ldGVyVHlwZS5uYW1lKCkgPT0gImZsb2F0Iik7
CisgICAgICAgICAgICByZXR1cm4gImZsb2F0IjsKKyAgICAgICAgfSkoKTsKKyAgICAgICAgQVNT
RVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMV0pKTsKKyAgICAgICAgYXV0byYgY29u
c3RhbnRFeHByZXNzaW9uMSA9IFdURjo6Z2V0PEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRp
dmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKTsKKyAgICAgICAgYXV0byYgaW50
ZWdlckxpdGVyYWwxID0gY29uc3RhbnRFeHByZXNzaW9uMS5pbnRlZ2VyTGl0ZXJhbCgpOworICAg
ICAgICBhdXRvIG1pZGRsZSA9IChbJl0oKSAtPiBTdHJpbmcgeworICAgICAgICAgICAgc3dpdGNo
IChpbnRlZ2VyTGl0ZXJhbDEudmFsdWUoKSkgeworICAgICAgICAgICAgY2FzZSAyOgorICAgICAg
ICAgICAgICAgIHJldHVybiAiMiJfc3RyOworICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAg
ICAgICAgIHJldHVybiAiMyJfc3RyOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoaW50ZWdlckxpdGVyYWwxLnZhbHVlKCkgPT0gNCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuICI0Il9zdHI7CisgICAgICAgICAgICB9CisgICAgICAgIH0pKCk7CisgICAgICAg
IEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihu
YXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzJdKSk7CisgICAgICAgIGF1dG8m
IGNvbnN0YW50RXhwcmVzc2lvbjIgPSBXVEY6OmdldDxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4o
bmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSk7CisgICAgICAgIGF1dG8m
IGludGVnZXJMaXRlcmFsMiA9IGNvbnN0YW50RXhwcmVzc2lvbjIuaW50ZWdlckxpdGVyYWwoKTsK
KyAgICAgICAgYXV0byBzdWZmaXggPSAoWyZdKCkgLT4gU3RyaW5nIHsKKyAgICAgICAgICAgIHN3
aXRjaCAoaW50ZWdlckxpdGVyYWwyLnZhbHVlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gIjIiX3N0cjsKKyAgICAgICAgICAgIGNhc2UgMzoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gIjMiX3N0cjsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgQVNTRVJUKGludGVnZXJMaXRlcmFsMi52YWx1ZSgpID09IDQpOworICAgICAgICAg
ICAgICAgIHJldHVybiAiNCJfc3RyOworICAgICAgICAgICAgfQorICAgICAgICB9KSgpOworICAg
ICAgICByZXR1cm4gbWFrZVN0cmluZyhwcmVmaXgsIG1pZGRsZSwgJ3gnLCBzdWZmaXgpOworICAg
IH0KKyAgICBBU1NFUlQobmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXpl
KCkgPT0gMSk7CisgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VW5pcXVlUmVmPEFT
VDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClb
MF0pKTsKKyAgICBhdXRvJiB0eXBlUmVmZXJlbmNlID0gV1RGOjpnZXQ8VW5pcXVlUmVmPEFTVDo6
VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0p
OworICAgIGF1dG8gcHJlZml4ID0gKFsmXSgpIC0+IFN0cmluZyB7CisgICAgICAgIGlmIChuYXRp
dmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJUZXh0dXJlMUQiKQorICAgICAgICAgICAgcmV0
dXJuICJ0ZXh0dXJlMWQiX3N0cjsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5u
YW1lKCkgPT0gIlJXVGV4dHVyZTFEIikKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZTFkIl9z
dHI7CisgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJUZXh0dXJl
MURBcnJheSIpCisgICAgICAgICAgICByZXR1cm4gInRleHR1cmUxZF9hcnJheSJfc3RyOworICAg
ICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiUldUZXh0dXJlMURBcnJh
eSIpCisgICAgICAgICAgICByZXR1cm4gInRleHR1cmUxZF9hcnJheSJfc3RyOworICAgICAgICBp
ZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiVGV4dHVyZTJEIikKKyAgICAgICAg
ICAgIHJldHVybiAidGV4dHVyZTJkIl9zdHI7CisgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFy
YXRpb24ubmFtZSgpID09ICJSV1RleHR1cmUyRCIpCisgICAgICAgICAgICByZXR1cm4gInRleHR1
cmUyZCJfc3RyOworICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
VGV4dHVyZTJEQXJyYXkiKQorICAgICAgICAgICAgcmV0dXJuICJ0ZXh0dXJlMmRfYXJyYXkiX3N0
cjsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlJXVGV4dHVy
ZTJEQXJyYXkiKQorICAgICAgICAgICAgcmV0dXJuICJ0ZXh0dXJlMmRfYXJyYXkiX3N0cjsKKyAg
ICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlRleHR1cmUzRCIpCisg
ICAgICAgICAgICByZXR1cm4gInRleHR1cmUzZCJfc3RyOworICAgICAgICBpZiAobmF0aXZlVHlw
ZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiUldUZXh0dXJlM0QiKQorICAgICAgICAgICAgcmV0dXJu
ICJ0ZXh0dXJlM2QiX3N0cjsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1l
KCkgPT0gIlRleHR1cmVDdWJlIikKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZWN1YmUiX3N0
cjsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlRleHR1cmVE
ZXB0aDJEIikKKyAgICAgICAgICAgIHJldHVybiAiZGVwdGgyZCJfc3RyOworICAgICAgICBpZiAo
bmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiUldUZXh0dXJlRGVwdGgyRCIpCisgICAg
ICAgICAgICByZXR1cm4gImRlcHRoMmQiX3N0cjsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5uYW1lKCkgPT0gIlRleHR1cmVEZXB0aDJEQXJyYXkiKQorICAgICAgICAgICAgcmV0
dXJuICJkZXB0aDJkX2FycmF5Il9zdHI7CisgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRp
b24ubmFtZSgpID09ICJSV1RleHR1cmVEZXB0aDJEQXJyYXkiKQorICAgICAgICAgICAgcmV0dXJu
ICJkZXB0aDJkX2FycmF5Il9zdHI7CisgICAgICAgIEFTU0VSVChuYXRpdmVUeXBlRGVjbGFyYXRp
b24ubmFtZSgpID09ICJUZXh0dXJlRGVwdGhDdWJlIik7CisgICAgICAgIHJldHVybiAiZGVwdGhj
dWJlIl9zdHI7CisgICAgfSkoKTsKKyAgICBhdXRvIGlubmVyVHlwZSA9IChbJl0oKSAtPiBTdHJp
bmcgeworICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS0+bmFtZSgpID09ICJ1c2hvcnQiKQorICAg
ICAgICAgICAgcmV0dXJuICJ1c2hvcnQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2Ut
Pm5hbWUoKSA9PSAidXNob3J0MiIpCisgICAgICAgICAgICByZXR1cm4gInVzaG9ydCJfc3RyOwor
ICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS0+bmFtZSgpID09ICJ1c2hvcnQzIikKKyAgICAgICAg
ICAgIHJldHVybiAidXNob3J0Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLT5uYW1l
KCkgPT0gInVzaG9ydDQiKQorICAgICAgICAgICAgcmV0dXJuICJ1c2hvcnQiX3N0cjsKKyAgICAg
ICAgaWYgKHR5cGVSZWZlcmVuY2UtPm5hbWUoKSA9PSAidWludCIpCisgICAgICAgICAgICByZXR1
cm4gInVpbnQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UtPm5hbWUoKSA9PSAidWlu
dDIiKQorICAgICAgICAgICAgcmV0dXJuICJ1aW50Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVm
ZXJlbmNlLT5uYW1lKCkgPT0gInVpbnQzIikKKyAgICAgICAgICAgIHJldHVybiAidWludCJfc3Ry
OworICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS0+bmFtZSgpID09ICJ1aW50NCIpCisgICAgICAg
ICAgICByZXR1cm4gInVpbnQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UtPm5hbWUo
KSA9PSAic2hvcnQiKQorICAgICAgICAgICAgcmV0dXJuICJzaG9ydCJfc3RyOworICAgICAgICBp
ZiAodHlwZVJlZmVyZW5jZS0+bmFtZSgpID09ICJzaG9ydDIiKQorICAgICAgICAgICAgcmV0dXJu
ICJzaG9ydCJfc3RyOworICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS0+bmFtZSgpID09ICJzaG9y
dDMiKQorICAgICAgICAgICAgcmV0dXJuICJzaG9ydCJfc3RyOworICAgICAgICBpZiAodHlwZVJl
ZmVyZW5jZS0+bmFtZSgpID09ICJzaG9ydDQiKQorICAgICAgICAgICAgcmV0dXJuICJzaG9ydCJf
c3RyOworICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS0+bmFtZSgpID09ICJpbnQiKQorICAgICAg
ICAgICAgcmV0dXJuICJpbnQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UtPm5hbWUo
KSA9PSAiaW50MiIpCisgICAgICAgICAgICByZXR1cm4gImludCJfc3RyOworICAgICAgICBpZiAo
dHlwZVJlZmVyZW5jZS0+bmFtZSgpID09ICJpbnQzIikKKyAgICAgICAgICAgIHJldHVybiAiaW50
Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLT5uYW1lKCkgPT0gImludDQiKQorICAg
ICAgICAgICAgcmV0dXJuICJpbnQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UtPm5h
bWUoKSA9PSAiaGFsZiIpCisgICAgICAgICAgICByZXR1cm4gImhhbGYiX3N0cjsKKyAgICAgICAg
aWYgKHR5cGVSZWZlcmVuY2UtPm5hbWUoKSA9PSAiaGFsZjIiKQorICAgICAgICAgICAgcmV0dXJu
ICJoYWxmIl9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLT5uYW1lKCkgPT0gImhhbGYz
IikKKyAgICAgICAgICAgIHJldHVybiAiaGFsZiJfc3RyOworICAgICAgICBpZiAodHlwZVJlZmVy
ZW5jZS0+bmFtZSgpID09ICJoYWxmNCIpCisgICAgICAgICAgICByZXR1cm4gImhhbGYiX3N0cjsK
KyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UtPm5hbWUoKSA9PSAiZmxvYXQiKQorICAgICAgICAg
ICAgcmV0dXJuICJmbG9hdCJfc3RyOworICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS0+bmFtZSgp
ID09ICJmbG9hdDIiKQorICAgICAgICAgICAgcmV0dXJuICJmbG9hdCJfc3RyOworICAgICAgICBp
ZiAodHlwZVJlZmVyZW5jZS0+bmFtZSgpID09ICJmbG9hdDMiKQorICAgICAgICAgICAgcmV0dXJu
ICJmbG9hdCJfc3RyOworICAgICAgICBBU1NFUlQodHlwZVJlZmVyZW5jZS0+bmFtZSgpID09ICJm
bG9hdDQiKTsKKyAgICAgICAgcmV0dXJuICJmbG9hdCJfc3RyOworICAgIH0pKCk7CisgICAgLy8g
RklYTUU6IFNwZWNpZnkgdGhlIHNlY29uZCB0ZW1wbGF0ZSBhcmd1bWVudCB0byBNZXRhbCB0ZXh0
dXJlIHR5cGVzLgorICAgIHJldHVybiBtYWtlU3RyaW5nKHByZWZpeCwgJzwnLCBpbm5lclR5cGUs
ICc+Jyk7Cit9CisKK1VuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPiBUeXBlTmFtZXI6OmNyZWF0
ZU5hbWVOb2RlKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBCYXNlVHlwZU5hbWVOb2Rl
KiBwYXJlbnQpCit7CisgICAgaWYgKGlzPEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUp
KSB7CisgICAgICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBkb3duY2FzdDxBU1Q6OlR5cGVSZWZl
cmVuY2U+KHVubmFtZWRUeXBlKTsKKyAgICAgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2
ZWRUeXBlKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxSZWZlcmVuY2VUeXBlTmFt
ZU5vZGU+KHBhcmVudCwgZ2VuZXJhdGVOZXh0VHlwZU5hbWUoKSwgKnR5cGVSZWZlcmVuY2UucmVz
b2x2ZWRUeXBlKCkpOworICAgIH0KKyAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1l
ZFR5cGUpKSB7CisgICAgICAgIGF1dG8mIHBvaW50ZXJUeXBlID0gZG93bmNhc3Q8QVNUOjpQb2lu
dGVyVHlwZT4odW5uYW1lZFR5cGUpOworICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxQb2lu
dGVyVHlwZU5hbWVOb2RlPihwYXJlbnQsIGdlbmVyYXRlTmV4dFR5cGVOYW1lKCksIHBvaW50ZXJU
eXBlLmFkZHJlc3NTcGFjZSgpKTsKKyAgICB9CisgICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVu
Y2VUeXBlPih1bm5hbWVkVHlwZSkpIHsKKyAgICAgICAgYXV0byYgYXJyYXlSZWZlcmVuY2VUeXBl
ID0gZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKTsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8QXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGU+KHBhcmVu
dCwgZ2VuZXJhdGVOZXh0VHlwZU5hbWUoKSwgYXJyYXlSZWZlcmVuY2VUeXBlLmFkZHJlc3NTcGFj
ZSgpKTsKKyAgICB9CisgICAgQVNTRVJUKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkp
OworICAgIGF1dG8mIGFycmF5VHlwZSA9IGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVk
VHlwZSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8QXJyYXlUeXBlTmFtZU5vZGU+KHBhcmVu
dCwgZ2VuZXJhdGVOZXh0VHlwZU5hbWUoKSwgYXJyYXlUeXBlLm51bUVsZW1lbnRzKCkpOworfQor
CitzaXplX3QgVHlwZU5hbWVyOjppbnNlcnQoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUs
IFZlY3RvcjxVbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4+JiB0eXBlcykKK3sKKyAgICBWZWN0
b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+PiogdmVjdG9yVG9JbnNlcnRJbnRvIHsgbnVs
bHB0ciB9OworICAgIEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVudCB7IG51bGxwdHIgfTsKKyAgICBp
ZiAoaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkpIHsKKyAgICAgICAgdmVjdG9y
VG9JbnNlcnRJbnRvID0gJnR5cGVzOworICAgICAgICBwYXJlbnQgPSBudWxscHRyOworICAgIH0g
ZWxzZSBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKSB7CisgICAgICAgIGF1
dG8mIGl0ZW0gPSB0eXBlc1tpbnNlcnQoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1l
ZFR5cGUpLmVsZW1lbnRUeXBlKCksIHR5cGVzKV07CisgICAgICAgIHZlY3RvclRvSW5zZXJ0SW50
byA9ICZpdGVtLT5jaGlsZHJlbigpOworICAgICAgICBwYXJlbnQgPSAmaXRlbTsKKyAgICB9IGVs
c2UgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpIHsKKyAgICAg
ICAgYXV0byYgaXRlbSA9IHR5cGVzW2luc2VydChkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNl
VHlwZT4odW5uYW1lZFR5cGUpLmVsZW1lbnRUeXBlKCksIHR5cGVzKV07CisgICAgICAgIHZlY3Rv
clRvSW5zZXJ0SW50byA9ICZpdGVtLT5jaGlsZHJlbigpOworICAgICAgICBwYXJlbnQgPSAmaXRl
bTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoaXM8QVNUOjpBcnJheVR5cGU+KHVubmFt
ZWRUeXBlKSk7CisgICAgICAgIGF1dG8mIGl0ZW0gPSB0eXBlc1tpbnNlcnQoZG93bmNhc3Q8QVNU
OjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKS50eXBlKCksIHR5cGVzKV07CisgICAgICAgIHZlY3Rv
clRvSW5zZXJ0SW50byA9ICZpdGVtLT5jaGlsZHJlbigpOworICAgICAgICBwYXJlbnQgPSAmaXRl
bTsKKyAgICB9CisgICAgQVNTRVJUKHZlY3RvclRvSW5zZXJ0SW50byk7CisKKyAgICBhdXRvIGl0
ZXJhdG9yID0gZmluZEluVmVjdG9yKHVubmFtZWRUeXBlLCAqdmVjdG9yVG9JbnNlcnRJbnRvKTsK
KyAgICBpZiAoaXRlcmF0b3IgPT0gdmVjdG9yVG9JbnNlcnRJbnRvLT5lbmQoKSkgeworICAgICAg
ICBhdXRvIHJlc3VsdCA9IGNyZWF0ZU5hbWVOb2RlKHVubmFtZWRUeXBlLCBwYXJlbnQpOworICAg
ICAgICB7CisgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdW5uYW1lZFR5cGVNYXBwaW5n
LmFkZCgmdW5uYW1lZFR5cGUsICZyZXN1bHQpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChh
ZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgfQorICAgICAgICB2ZWN0
b3JUb0luc2VydEludG8tPmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOworICAgICAgICByZXR1cm4g
dmVjdG9yVG9JbnNlcnRJbnRvLT5zaXplKCkgLSAxOworICAgIH0KKyAgICBhdXRvIGFkZFJlc3Vs
dCA9IG1fdW5uYW1lZFR5cGVNYXBwaW5nLmFkZCgmdW5uYW1lZFR5cGUsICYqaXRlcmF0b3IpOwor
ICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAg
cmV0dXJuIGl0ZXJhdG9yIC0gdmVjdG9yVG9JbnNlcnRJbnRvLT5iZWdpbigpOworfQorCitjbGFz
cyBNZXRhbFR5cGVEZWNsYXJhdGlvbldyaXRlciA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1YmxpYzoK
KyAgICBNZXRhbFR5cGVEZWNsYXJhdGlvbldyaXRlcihzdGQ6OmZ1bmN0aW9uPFN0cmluZyhBU1Q6
Ok5hbWVkVHlwZSYpPiYmIG1hbmdsZWROYW1lRm9yTmFtZWRUeXBlLCBzdGQ6OmZ1bmN0aW9uPFN0
cmluZyhBU1Q6OlVubmFtZWRUeXBlJik+JiYgbWFuZ2xlZE5hbWVGb3JVbm5hbWVkVHlwZSwgc3Rk
OjpmdW5jdGlvbjxTdHJpbmcoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYpPiYmIG1hbmdsZWROYW1l
Rm9yRW51bWVyYXRpb25NZW1iZXIpCisgICAgICAgIDogbV9tYW5nbGVkTmFtZUZvck5hbWVkVHlw
ZShXVEZNb3ZlKG1hbmdsZWROYW1lRm9yTmFtZWRUeXBlKSkKKyAgICAgICAgLCBtX21hbmdsZWRO
YW1lRm9yVW5uYW1lZFR5cGUoV1RGTW92ZShtYW5nbGVkTmFtZUZvclVubmFtZWRUeXBlKSkKKyAg
ICAgICAgLCBtX21hbmdsZWROYW1lRm9yRW51bWVyYXRpb25NZW1iZXIoV1RGTW92ZShtYW5nbGVk
TmFtZUZvckVudW1lcmF0aW9uTWVtYmVyKSkKKyAgICB7CisgICAgfQorCisgICAgU3RyaW5nIHRv
U3RyaW5nKCkgeyByZXR1cm4gbV9zdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7IH0KKworcHJpdmF0
ZToKKyAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlv
bkRlZmluaXRpb24pCisgICAgeworICAgICAgICBhdXRvJiBiYXNlVHlwZSA9IGVudW1lcmF0aW9u
RGVmaW5pdGlvbi50eXBlKCkudW5pZnlOb2RlKCk7CisgICAgICAgIEFTU0VSVChpczxBU1Q6Ok5h
bWVkVHlwZT4oYmFzZVR5cGUpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKCJlbnVtIGNsYXNzICIsIG1fbWFuZ2xlZE5hbWVGb3JOYW1lZFR5cGUoZW51bWVyYXRp
b25EZWZpbml0aW9uKSwgIiA6ICIsIG1fbWFuZ2xlZE5hbWVGb3JOYW1lZFR5cGUoZG93bmNhc3Q8
QVNUOjpOYW1lZFR5cGU+KGJhc2VUeXBlKSksICIge1xuIikpOworICAgICAgICBmb3IgKGF1dG8m
IGVudW1lcmF0aW9uTWVtYmVyIDogZW51bWVyYXRpb25EZWZpbml0aW9uLmVudW1lcmF0aW9uTWVt
YmVycygpKQorICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIg
ICAgIiwgbV9tYW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVtYmVyKGVudW1lcmF0aW9uTWVtYmVy
KSwgIixcbiIpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifTtcbiIpOworICAg
IH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVE
ZWZpbml0aW9uKQorICAgIHsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKCJzdHJ1Y3QgIiwgbV9tYW5nbGVkTmFtZUZvck5hbWVkVHlwZShzdHJ1Y3R1cmVEZWZpbml0
aW9uKSwgIjtcbiIpKTsKKyAgICB9CisKKyAgICBzdGQ6OmZ1bmN0aW9uPFN0cmluZyhBU1Q6Ok5h
bWVkVHlwZSYpPiBtX21hbmdsZWROYW1lRm9yTmFtZWRUeXBlOworICAgIHN0ZDo6ZnVuY3Rpb248
U3RyaW5nKEFTVDo6VW5uYW1lZFR5cGUmKT4gbV9tYW5nbGVkTmFtZUZvclVubmFtZWRUeXBlOwor
ICAgIHN0ZDo6ZnVuY3Rpb248U3RyaW5nKEFTVDo6RW51bWVyYXRpb25NZW1iZXImKT4mJiBtX21h
bmdsZWROYW1lRm9yRW51bWVyYXRpb25NZW1iZXI7CisgICAgU3RyaW5nQnVpbGRlciBtX3N0cmlu
Z0J1aWxkZXI7Cit9OworCitTdHJpbmcgVHlwZU5hbWVyOjptZXRhbFR5cGVEZWNsYXJhdGlvbnMo
KQoreworICAgIE1ldGFsVHlwZURlY2xhcmF0aW9uV3JpdGVyIG1ldGFsVHlwZURlY2xhcmF0aW9u
V3JpdGVyKFsmXShBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlKSAtPiBTdHJpbmcgeworICAgICAg
ICByZXR1cm4gbWFuZ2xlZE5hbWVGb3JUeXBlKG5hbWVkVHlwZSk7CisgICAgfSwgWyZdKEFTVDo6
VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKSAtPiBTdHJpbmcgeworICAgICAgICByZXR1cm4gbWFu
Z2xlZE5hbWVGb3JUeXBlKHVubmFtZWRUeXBlKTsKKyAgICB9LCBbJl0oQVNUOjpFbnVtZXJhdGlv
bk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIpIC0+IFN0cmluZyB7CisgICAgICAgIHJldHVybiBt
YW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVtYmVyKGVudW1lcmF0aW9uTWVtYmVyKTsKKyAgICB9
KTsKKyAgICBtZXRhbFR5cGVEZWNsYXJhdGlvbldyaXRlci5WaXNpdG9yOjp2aXNpdChtX3Byb2dy
YW0pOworICAgIHJldHVybiBtZXRhbFR5cGVEZWNsYXJhdGlvbldyaXRlci50b1N0cmluZygpOwor
fQorCitzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKEFTVDo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFj
ZSkKK3sKKyAgICBzd2l0Y2ggKGFkZHJlc3NTcGFjZSkgeworICAgIGNhc2UgQVNUOjpBZGRyZXNz
U3BhY2U6OkNvbnN0YW50OgorICAgICAgICByZXR1cm4gImNvbnN0YW50Il9zdHI7CisgICAgY2Fz
ZSBBU1Q6OkFkZHJlc3NTcGFjZTo6RGV2aWNlOgorICAgICAgICByZXR1cm4gImRldmljZSJfc3Ry
OworICAgIGNhc2UgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZGdyb3VwOgorICAgICAgICByZXR1
cm4gInRocmVhZGdyb3VwIl9zdHI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKGFkZHJl
c3NTcGFjZSA9PSBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkKTsKKyAgICAgICAgcmV0dXJuICJ0
aHJlYWQiX3N0cjsKKyAgICB9Cit9CisKK3ZvaWQgVHlwZU5hbWVyOjplbWl0VW5uYW1lZFR5cGVE
ZWZpbml0aW9uKEJhc2VUeXBlTmFtZU5vZGUmIGJhc2VUeXBlTmFtZU5vZGUsIEhhc2hTZXQ8QVNU
OjpOYW1lZFR5cGUqPiYgZW1pdHRlZE5hbWVkVHlwZXMsIEhhc2hTZXQ8QmFzZVR5cGVOYW1lTm9k
ZSo+JiBlbWl0dGVkVW5uYW1lZFR5cGVzLCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQor
eworICAgIGlmIChlbWl0dGVkVW5uYW1lZFR5cGVzLmNvbnRhaW5zKCZiYXNlVHlwZU5hbWVOb2Rl
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChiYXNlVHlwZU5hbWVOb2RlLnBhcmVudCgpKQor
ICAgICAgICBlbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKCpiYXNlVHlwZU5hbWVOb2RlLnBhcmVu
dCgpLCBlbWl0dGVkTmFtZWRUeXBlcywgZW1pdHRlZFVubmFtZWRUeXBlcywgc3RyaW5nQnVpbGRl
cik7CisgICAgaWYgKGlzPFJlZmVyZW5jZVR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9kZSkp
IHsKKyAgICAgICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8UmVmZXJlbmNlVHlwZU5hbWVO
b2RlPihiYXNlVHlwZU5hbWVOb2RlKS5uYW1lZFR5cGUoKTsKKyAgICAgICAgZW1pdE5hbWVkVHlw
ZURlZmluaXRpb24obmFtZWRUeXBlLCBlbWl0dGVkTmFtZWRUeXBlcywgZW1pdHRlZFVubmFtZWRU
eXBlcywgc3RyaW5nQnVpbGRlcik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcoInR5cGVkZWYgIiwgbWFuZ2xlZE5hbWVGb3JUeXBlKG5hbWVkVHlwZSksICcgJywgYmFz
ZVR5cGVOYW1lTm9kZS5tYW5nbGVkTmFtZSgpLCAiO1xuIikpOworICAgIH0gZWxzZSBpZiAoaXM8
UG9pbnRlclR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9kZSkpIHsKKyAgICAgICAgYXV0byYg
cG9pbnRlclR5cGUgPSBkb3duY2FzdDxQb2ludGVyVHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVO
b2RlKTsKKyAgICAgICAgQVNTRVJUKGJhc2VUeXBlTmFtZU5vZGUucGFyZW50KCkpOworICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ0eXBlZGVmICIsIHRvU3RyaW5nKHBv
aW50ZXJUeXBlLmFkZHJlc3NTcGFjZSgpKSwgIiAiLCBwb2ludGVyVHlwZS5wYXJlbnQoKS0+bWFu
Z2xlZE5hbWUoKSwgIiogIiwgcG9pbnRlclR5cGUubWFuZ2xlZE5hbWUoKSwgIjtcbiIpKTsKKyAg
ICB9IGVsc2UgaWYgKGlzPEFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVO
b2RlKSkgeworICAgICAgICBhdXRvJiBhcnJheVJlZmVyZW5jZVR5cGUgPSBkb3duY2FzdDxBcnJh
eVJlZmVyZW5jZVR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9kZSk7CisgICAgICAgIEFTU0VS
VChiYXNlVHlwZU5hbWVOb2RlLnBhcmVudCgpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZygic3RydWN0ICIsIGFycmF5UmVmZXJlbmNlVHlwZS5tYW5nbGVkTmFtZSgp
LCAieyBcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAg
ICIsIHRvU3RyaW5nKGFycmF5UmVmZXJlbmNlVHlwZS5hZGRyZXNzU3BhY2UoKSksICIgIiwgYXJy
YXlSZWZlcmVuY2VUeXBlLnBhcmVudCgpLT5tYW5nbGVkTmFtZSgpLCAiKiBwb2ludGVyO1xuIikp
OworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICAgIHVuc2lnbmVkIGxlbmd0aDtcbiIp
OworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifTtcbiIpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIEFTU0VSVChpczxBcnJheVR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9kZSkpOwor
ICAgICAgICBhdXRvJiBhcnJheVR5cGUgPSBkb3duY2FzdDxBcnJheVR5cGVOYW1lTm9kZT4oYmFz
ZVR5cGVOYW1lTm9kZSk7CisgICAgICAgIEFTU0VSVChiYXNlVHlwZU5hbWVOb2RlLnBhcmVudCgp
KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygidHlwZWRlZiBBcnJh
eTwiLCBhcnJheVR5cGUucGFyZW50KCktPm1hbmdsZWROYW1lKCksICIsICIsIGFycmF5VHlwZS5u
dW1FbGVtZW50cygpLCAiPiAiLCBhcnJheVR5cGUubWFuZ2xlZE5hbWUoKSwgIjtcbiIpKTsKKyAg
ICB9CisgICAgZW1pdHRlZFVubmFtZWRUeXBlcy5hZGQoJmJhc2VUeXBlTmFtZU5vZGUpOworfQor
Cit2b2lkIFR5cGVOYW1lcjo6ZW1pdE5hbWVkVHlwZURlZmluaXRpb24oQVNUOjpOYW1lZFR5cGUm
IG5hbWVkVHlwZSwgSGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+JiBlbWl0dGVkTmFtZWRUeXBlcywg
SGFzaFNldDxCYXNlVHlwZU5hbWVOb2RlKj4mIGVtaXR0ZWRVbm5hbWVkVHlwZXMsIFN0cmluZ0J1
aWxkZXImIHN0cmluZ0J1aWxkZXIpCit7CisgICAgaWYgKGVtaXR0ZWROYW1lZFR5cGVzLmNvbnRh
aW5zKCZuYW1lZFR5cGUpKQorICAgICAgICByZXR1cm47CisgICAgYXV0byBpdGVyYXRvciA9IG1f
ZGVwZW5kZW5jeUdyYXBoLmZpbmQoJm5hbWVkVHlwZSk7CisgICAgQVNTRVJUKGl0ZXJhdG9yICE9
IG1fZGVwZW5kZW5jeUdyYXBoLmVuZCgpKTsKKyAgICBmb3IgKGF1dG8mIGJhc2VUeXBlTmFtZU5v
ZGUgOiBpdGVyYXRvci0+dmFsdWUpCisgICAgICAgIGVtaXRVbm5hbWVkVHlwZURlZmluaXRpb24o
YmFzZVR5cGVOYW1lTm9kZSwgZW1pdHRlZE5hbWVkVHlwZXMsIGVtaXR0ZWRVbm5hbWVkVHlwZXMs
IHN0cmluZ0J1aWxkZXIpOworICAgIGlmIChpczxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4o
bmFtZWRUeXBlKSkgeworICAgICAgICAvLyBXZSBhbHJlYWR5IGVtaXR0ZWQgdGhpcyBpbiB0aGUg
dHlwZSBkZWNsYXJhdGlvbiBzZWN0aW9uLiBUaGVyZSdzIG5vdGhpbmcgdG8gZG8uCisgICAgfSBl
bHNlIGlmIChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKSkgeworICAg
ICAgICAvLyBOYXRpdmUgdHlwZXMgYWxyZWFkeSBoYXZlIGRlZmluaXRpb25zLiBUaGVyZSdzIG5v
dGhpbmcgdG8gZG8uCisgICAgfSBlbHNlIGlmIChpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+
KG5hbWVkVHlwZSkpIHsKKyAgICAgICAgYXV0byYgc3RydWN0dXJlRGVmaW5pdGlvbiA9IGRvd25j
YXN0PEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4obmFtZWRUeXBlKTsKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygic3RydWN0ICIsIG1hbmdsZWROYW1lRm9yVHlwZShz
dHJ1Y3R1cmVEZWZpbml0aW9uKSwgIiB7XG4iKSk7CisgICAgICAgIGZvciAoYXV0byYgc3RydWN0
dXJlRWxlbWVudCA6IHN0cnVjdHVyZURlZmluaXRpb24uc3RydWN0dXJlRWxlbWVudHMoKSkKKyAg
ICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICAiLCBtYW5nbGVk
TmFtZUZvclR5cGUoc3RydWN0dXJlRWxlbWVudC50eXBlKCkpLCAnICcsIG1hbmdsZWROYW1lRm9y
U3RydWN0dXJlRWxlbWVudChzdHJ1Y3R1cmVFbGVtZW50KSwgIjtcbiIpKTsKKyAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIn07XG4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQo
aXM8QVNUOjpUeXBlRGVmaW5pdGlvbj4obmFtZWRUeXBlKSk7CisgICAgICAgIGF1dG8mIHR5cGVE
ZWZpbml0aW9uID0gZG93bmNhc3Q8QVNUOjpUeXBlRGVmaW5pdGlvbj4obmFtZWRUeXBlKTsKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygidHlwZWRlZiAiLCBtYW5nbGVk
TmFtZUZvclR5cGUodHlwZURlZmluaXRpb24udHlwZSgpKSwgJyAnLCBtYW5nbGVkTmFtZUZvclR5
cGUodHlwZURlZmluaXRpb24pLCAiO1xuIikpOworICAgIH0KKyAgICBlbWl0dGVkTmFtZWRUeXBl
cy5hZGQoJm5hbWVkVHlwZSk7Cit9CisKK1N0cmluZyBUeXBlTmFtZXI6Om1ldGFsVHlwZURlZmlu
aXRpb25zKCkKK3sKKyAgICBIYXNoU2V0PEFTVDo6TmFtZWRUeXBlKj4gZW1pdHRlZE5hbWVkVHlw
ZXM7CisgICAgSGFzaFNldDxCYXNlVHlwZU5hbWVOb2RlKj4gZW1pdHRlZFVubmFtZWRUeXBlczsK
KyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgZm9yIChhdXRvJiBrZXlWYWx1
ZVBhaXIgOiBtX2RlcGVuZGVuY3lHcmFwaCkKKyAgICAgICAgZW1pdE5hbWVkVHlwZURlZmluaXRp
b24oKmtleVZhbHVlUGFpci5rZXksIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5
cGVzLCBzdHJpbmdCdWlsZGVyKTsKKyAgICBmb3IgKGF1dG8mIGJhc2VUeXBlTmFtZU5vZGUgOiBt
X3RyaWUpCisgICAgICAgIGVtaXRVbm5hbWVkVHlwZURlZmluaXRpb24oYmFzZVR5cGVOYW1lTm9k
ZSwgZW1pdHRlZE5hbWVkVHlwZXMsIGVtaXR0ZWRVbm5hbWVkVHlwZXMsIHN0cmluZ0J1aWxkZXIp
OworICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBUeXBl
TmFtZXI6Om1hbmdsZWROYW1lRm9yVHlwZShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkK
K3sKKyAgICByZXR1cm4gZmluZCh1bm5hbWVkVHlwZSwgbV90cmllKS5tYW5nbGVkTmFtZSgpOwor
fQorCitTdHJpbmcgVHlwZU5hbWVyOjptYW5nbGVkTmFtZUZvclR5cGUoQVNUOjpOYW1lZFR5cGUm
IG5hbWVkVHlwZSkKK3sKKyAgICBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5h
bWVkVHlwZSkpCisgICAgICAgIHJldHVybiBtYW5nbGVkTmFtZUZvclR5cGUoZG93bmNhc3Q8QVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpOworICAgIGF1dG8gaXRlcmF0b3Ig
PSBtX25hbWVkVHlwZU1hcHBpbmcuZmluZCgmbmFtZWRUeXBlKTsKKyAgICBBU1NFUlQoaXRlcmF0
b3IgIT0gbV9uYW1lZFR5cGVNYXBwaW5nLmVuZCgpKTsKKyAgICByZXR1cm4gaXRlcmF0b3ItPnZh
bHVlOworfQorCisKK1N0cmluZyBUeXBlTmFtZXI6Om1hbmdsZWROYW1lRm9yRW51bWVyYXRpb25N
ZW1iZXIoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIpCit7CisgICAg
YXV0byBpdGVyYXRvciA9IG1fZW51bWVyYXRpb25NZW1iZXJNYXBwaW5nLmZpbmQoJmVudW1lcmF0
aW9uTWVtYmVyKTsKKyAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9lbnVtZXJhdGlvbk1lbWJlck1h
cHBpbmcuZW5kKCkpOworICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7Cit9CisKK1N0cmluZyBU
eXBlTmFtZXI6Om1hbmdsZWROYW1lRm9yU3RydWN0dXJlRWxlbWVudChBU1Q6OlN0cnVjdHVyZUVs
ZW1lbnQmIHN0cnVjdHVyZUVsZW1lbnQpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fc3RydWN0
dXJlRWxlbWVudE1hcHBpbmcuZmluZCgmc3RydWN0dXJlRWxlbWVudCk7CisgICAgQVNTRVJUKGl0
ZXJhdG9yICE9IG1fc3RydWN0dXJlRWxlbWVudE1hcHBpbmcuZW5kKCkpOworICAgIHJldHVybiBp
dGVyYXRvci0+dmFsdWU7Cit9CisKK1N0cmluZyBUeXBlTmFtZXI6Om1ldGFsVHlwZXMoKQorewor
ICAgIFZpc2l0b3I6OnZpc2l0KG1fcHJvZ3JhbSk7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdC
dWlsZGVyOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ldGFsVHlwZURlY2xhcmF0aW9ucygp
KTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChtZXRhbFR5cGVEZWZpbml0aW9ucygpKTsKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50
b1N0cmluZygpOworfQorCit9IC8vIG5hbWVzcGFjZSBNZXRhbAorCit9IC8vIG5hbWVzcGFjZSBX
SExTTAorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNjNjZDVmZTJiYzRhYTcxNWI2YmQzYjI3MGIzNjM3NDMwNmZmMTlkNgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01l
dGFsL1dITFNMVHlwZU5hbWVyLmgKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTFZpc2l0b3Iu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0Nv
bmNhdGVuYXRlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJz
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIEVudW1l
cmF0aW9uRGVmaW5pdGlvbjsKK2NsYXNzIEVudW1lcmF0aW9uTWVtYmVyOworY2xhc3MgTmFtZWRU
eXBlOworY2xhc3MgTmF0aXZlVHlwZURlY2xhcmF0aW9uOworY2xhc3MgU3RydWN0dXJlRGVmaW5p
dGlvbjsKK2NsYXNzIFR5cGVEZWZpbml0aW9uOworY2xhc3MgVW5uYW1lZFR5cGU7CisKK30KKwor
Y2xhc3MgUHJvZ3JhbTsKKworbmFtZXNwYWNlIE1ldGFsIHsKKworY2xhc3MgQmFzZVR5cGVOYW1l
Tm9kZTsKKworY2xhc3MgVHlwZU5hbWVyIDogcHJpdmF0ZSBWaXNpdG9yIHsKK3B1YmxpYzoKKyAg
ICBUeXBlTmFtZXIoUHJvZ3JhbSYpOworICAgIHZpcnR1YWwgflR5cGVOYW1lcigpOworCisgICAg
U3RyaW5nIG1ldGFsVHlwZXMoKTsKKworICAgIC8vIE11c3QgYmUgY2FsbGVkIGFmdGVyIGNhbGxp
bmcgbWV0YWxUeXBlcygpLgorICAgIFN0cmluZyBtYW5nbGVkTmFtZUZvclR5cGUoQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24mKTsKKyAgICBTdHJpbmcgbWFuZ2xlZE5hbWVGb3JUeXBlKEFTVDo6
VW5uYW1lZFR5cGUmKTsKKyAgICBTdHJpbmcgbWFuZ2xlZE5hbWVGb3JUeXBlKEFTVDo6TmFtZWRU
eXBlJik7CisgICAgU3RyaW5nIG1hbmdsZWROYW1lRm9yRW51bWVyYXRpb25NZW1iZXIoQVNUOjpF
bnVtZXJhdGlvbk1lbWJlciYpOworICAgIFN0cmluZyBtYW5nbGVkTmFtZUZvclN0cnVjdHVyZUVs
ZW1lbnQoQVNUOjpTdHJ1Y3R1cmVFbGVtZW50Jik7CisKKyAgICBTdHJpbmcgZ2VuZXJhdGVOZXh0
VHlwZU5hbWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoInR5cGUiLCBtX3R5
cGVDb3VudCsrKTsKKyAgICB9CisKKyAgICBTdHJpbmcgZ2VuZXJhdGVOZXh0U3RydWN0dXJlRWxl
bWVudE5hbWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoInN0cnVjdHVyZUVs
ZW1lbnQiLCBtX3N0cnVjdHVyZUVsZW1lbnRDb3VudCsrKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCB2aXNpdChBU1Q6OlVubmFtZWRUeXBlJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNp
dChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQo
QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFT
VDo6U3RydWN0dXJlRGVmaW5pdGlvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpU
eXBlRGVmaW5pdGlvbiYpIG92ZXJyaWRlOworCisgICAgU3RyaW5nIGdlbmVyYXRlTmV4dEVudW1l
cmF0aW9uTWVtYmVyTmFtZSgpCisgICAgeworICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiZW51
bWVyYXRpb25NZW1iZXIiLCBtX2VudW1lcmF0aW9uTWVtYmVyQ291bnQrKyk7CisgICAgfQorCisg
ICAgdm9pZCBlbWl0TmFtZWRUeXBlRGVmaW5pdGlvbihBU1Q6Ok5hbWVkVHlwZSYsIEhhc2hTZXQ8
QVNUOjpOYW1lZFR5cGUqPiYgZW1pdHRlZE5hbWVkVHlwZXMsIEhhc2hTZXQ8QmFzZVR5cGVOYW1l
Tm9kZSo+JiBlbWl0dGVkVW5uYW1lZFR5cGVzLCBTdHJpbmdCdWlsZGVyJik7CisgICAgdm9pZCBl
bWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKEJhc2VUeXBlTmFtZU5vZGUmLCBIYXNoU2V0PEFTVDo6
TmFtZWRUeXBlKj4mIGVtaXR0ZWROYW1lZFR5cGVzLCBIYXNoU2V0PEJhc2VUeXBlTmFtZU5vZGUq
PiYgZW1pdHRlZFVubmFtZWRUeXBlcywgU3RyaW5nQnVpbGRlciYpOworICAgIFN0cmluZyBtZXRh
bFR5cGVEZWNsYXJhdGlvbnMoKTsKKyAgICBTdHJpbmcgbWV0YWxUeXBlRGVmaW5pdGlvbnMoKTsK
KworICAgIFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPiBjcmVhdGVOYW1lTm9kZShBU1Q6OlVu
bmFtZWRUeXBlJiwgQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50KTsKKyAgICBzaXplX3QgaW5zZXJ0
KEFTVDo6VW5uYW1lZFR5cGUmLCBWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+PiYp
OworCisgICAgUHJvZ3JhbSYgbV9wcm9ncmFtOworICAgIFZlY3RvcjxVbmlxdWVSZWY8QmFzZVR5
cGVOYW1lTm9kZT4+IG1fdHJpZTsKKyAgICBIYXNoTWFwPEFTVDo6VW5uYW1lZFR5cGUqLCBCYXNl
VHlwZU5hbWVOb2RlKj4gbV91bm5hbWVkVHlwZU1hcHBpbmc7CisgICAgSGFzaE1hcDxBU1Q6Ok5h
bWVkVHlwZSosIFN0cmluZz4gbV9uYW1lZFR5cGVNYXBwaW5nOworICAgIEhhc2hNYXA8QVNUOjpO
YW1lZFR5cGUqLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxCYXNlVHlwZU5hbWVOb2Rl
Pj4+IG1fZGVwZW5kZW5jeUdyYXBoOworICAgIEhhc2hNYXA8QVNUOjpFbnVtZXJhdGlvbk1lbWJl
ciosIFN0cmluZz4gbV9lbnVtZXJhdGlvbk1lbWJlck1hcHBpbmc7CisgICAgSGFzaE1hcDxBU1Q6
OlN0cnVjdHVyZUVsZW1lbnQqLCBTdHJpbmc+IG1fc3RydWN0dXJlRWxlbWVudE1hcHBpbmc7Cisg
ICAgdW5zaWduZWQgbV90eXBlQ291bnQgeyAwIH07CisgICAgdW5zaWduZWQgbV9lbnVtZXJhdGlv
bk1lbWJlckNvdW50IHsgMCB9OworICAgIHVuc2lnbmVkIG1fc3RydWN0dXJlRWxlbWVudENvdW50
IHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgTWV0YWwKKworfSAvLyBuYW1lc3BhY2UgV0hM
U0wKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCmluZGV4IDYwYjBl
ZmVlY2FjMjQ2M2U1MWE4ZWMxMjNkY2NmN2EyMGE0NmY5ZTYuLjI5NGRjOThiZTMwMzdhMDc4MTM2
ODUwZDg1ZTMyNjUwY2Q0MTQ2ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcApAQCAtMjIxLDggKzIyMSw4IEBAIHN0YXRp
YyBib29sIGNoZWNrU2VtYW50aWNzKFZlY3RvcjxFbnRyeVBvaW50SXRlbT4mIGlucHV0SXRlbXMs
IFZlY3RvcjxFbnRyeVBvaW50CiAgICAgICAgIGF1dG8gY2hlY2tTZW1hbnRpY1R5cGVzID0gWyZd
KGNvbnN0IFZlY3RvcjxFbnRyeVBvaW50SXRlbT4mIGl0ZW1zKSAtPiBib29sIHsKICAgICAgICAg
ICAgIGZvciAoYXV0byYgaXRlbSA6IGl0ZW1zKSB7CiAgICAgICAgICAgICAgICAgYXV0byBhY2Nl
cHRhYmxlID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShjb25zdCBBU1Q6OkJhc2VT
ZW1hbnRpYyYgc2VtYW50aWMpIC0+IGJvb2wgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c2VtYW50aWMuaXNBY2NlcHRhYmxlVHlwZShpdGVtLnVubmFtZWRUeXBlLCBpbnRyaW5zaWNzKTsK
LSAgICAgICAgICAgICAgICB9KSwgaXRlbS5zZW1hbnRpYyk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBzZW1hbnRpYy5pc0FjY2VwdGFibGVUeXBlKCppdGVtLnVubmFtZWRUeXBlLCBpbnRy
aW5zaWNzKTsKKyAgICAgICAgICAgICAgICB9KSwgKml0ZW0uc2VtYW50aWMpOwogICAgICAgICAg
ICAgICAgIGlmICghYWNjZXB0YWJsZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgfQpAQCAtMjM5LDcgKzIzOSw3IEBAIHN0YXRpYyBib29sIGNoZWNrU2Vt
YW50aWNzKFZlY3RvcjxFbnRyeVBvaW50SXRlbT4mIGlucHV0SXRlbXMsIFZlY3RvcjxFbnRyeVBv
aW50CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBpdGVtcykgewogICAgICAgICAgICAg
ICAgIGF1dG8gYWNjZXB0YWJsZSA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oY29u
c3QgQVNUOjpCYXNlU2VtYW50aWMmIHNlbWFudGljKSAtPiBib29sIHsKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHNlbWFudGljLmlzQWNjZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24o
ZGlyZWN0aW9uLCBlbnRyeVBvaW50VHlwZSk7Ci0gICAgICAgICAgICAgICAgfSksIGl0ZW0uc2Vt
YW50aWMpOworICAgICAgICAgICAgICAgIH0pLCAqaXRlbS5zZW1hbnRpYyk7CiAgICAgICAgICAg
ICAgICAgaWYgKCFhY2NlcHRhYmxlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgICAgICB9CkBAIC0yNTYsMTEgKzI1NiwxMSBAQCBzdGF0aWMgYm9vbCBjaGVja1Nl
bWFudGljcyhWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiBpbnB1dEl0ZW1zLCBWZWN0b3I8RW50cnlQ
b2ludAogICAgICAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogaXRlbXMpIHsKICAgICAgICAgICAg
ICAgICBQT0RDaGVja2VyIHBvZENoZWNrZXI7CiAgICAgICAgICAgICAgICAgaWYgKGlzPEFTVDo6
UG9pbnRlclR5cGU+KGl0ZW0udW5uYW1lZFR5cGUpKQotICAgICAgICAgICAgICAgICAgICBwb2RD
aGVja2VyLmNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihpdGVt
LnVubmFtZWRUeXBlKS5lbGVtZW50VHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcG9kQ2hl
Y2tlci5jaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKml0ZW0u
dW5uYW1lZFR5cGUpLmVsZW1lbnRUeXBlKCkpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlz
PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihpdGVtLnVubmFtZWRUeXBlKSkKLSAgICAgICAgICAg
ICAgICAgICAgcG9kQ2hlY2tlci5jaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpBcnJh
eVJlZmVyZW5jZVR5cGU+KGl0ZW0udW5uYW1lZFR5cGUpLmVsZW1lbnRUeXBlKCkpOworICAgICAg
ICAgICAgICAgICAgICBwb2RDaGVja2VyLmNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZT4oKml0ZW0udW5uYW1lZFR5cGUpLmVsZW1lbnRUeXBlKCkpOwog
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPihpdGVtLnVubmFtZWRU
eXBlKSkKLSAgICAgICAgICAgICAgICAgICAgcG9kQ2hlY2tlci5jaGVja0Vycm9yQW5kVmlzaXQo
ZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KGl0ZW0udW5uYW1lZFR5cGUpLnR5cGUoKSk7CisgICAg
ICAgICAgICAgICAgICAgIHBvZENoZWNrZXIuY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFT
VDo6QXJyYXlUeXBlPigqaXRlbS51bm5hbWVkVHlwZSkudHlwZSgpKTsKICAgICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGlm
IChwb2RDaGVja2VyLmVycm9yKCkpCkBAIC02MTIsMTYgKzYxMiwxMiBAQCB2b2lkIENoZWNrZXI6
OnZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24p
CiAgICAgYXV0byogYmFzZVR5cGUgPSAoWyZdKCkgLT4gQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24qIHsKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGVudW1lcmF0aW9uRGVmaW5pdGlvbi50
eXBlKCkpOwogICAgICAgICBhdXRvJiBiYXNlVHlwZSA9IGVudW1lcmF0aW9uRGVmaW5pdGlvbi50
eXBlKCkudW5pZnlOb2RlKCk7Ci0gICAgICAgIGlmICghaXM8QVNUOjpVbm5hbWVkVHlwZT4oYmFz
ZVR5cGUpKQorICAgICAgICBpZiAoIWlzPEFTVDo6TmFtZWRUeXBlPihiYXNlVHlwZSkpCiAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgYXV0byYgdW5uYW1lZEJhc2UgPSBkb3du
Y2FzdDxBU1Q6OlVubmFtZWRUeXBlPihiYXNlVHlwZSk7Ci0gICAgICAgIGlmICghaXM8QVNUOjpU
eXBlUmVmZXJlbmNlPih1bm5hbWVkQmFzZSkpCisgICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRv
d25jYXN0PEFTVDo6TmFtZWRUeXBlPihiYXNlVHlwZSk7CisgICAgICAgIGlmICghaXM8QVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgYXV0byYgdHlwZVJlZmVyZW5jZUJhc2UgPSBkb3duY2FzdDxBU1Q6OlR5
cGVSZWZlcmVuY2U+KHVubmFtZWRCYXNlKTsKLSAgICAgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2VC
YXNlLnJlc29sdmVkVHlwZSgpKTsKLSAgICAgICAgaWYgKCFpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNs
YXJhdGlvbj4oKnR5cGVSZWZlcmVuY2VCYXNlLnJlc29sdmVkVHlwZSgpKSkKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBk
b3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVuY2VCYXNlLnJl
c29sdmVkVHlwZSgpKTsKKyAgICAgICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93
bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSk7CiAgICAgICAgIGlm
ICghbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzSW50KCkpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAgICAgcmV0dXJuICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9p
bnRJdGVtcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdh
dGhlckVudHJ5UG9pbnRJdGVtcy5jcHAKaW5kZXggYTE4ZWFjMzhlYTNiNjc2YWU3ODliZTU5NWEz
ZGFhODEzYzZmMjliNi4uNDVhNjJhNmQyODhlM2JlN2QyZmMzMzUwODU1MTc4N2MyMGQzMTk3ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRo
ZXJFbnRyeVBvaW50SXRlbXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcApAQCAtNzEsNyArNzEsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0gICAgICAgIG1fZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbSht
X3R5cGVSZWZlcmVuY2VzLmxhc3QoKS5nZXQoKSwgKm1fY3VycmVudFNlbWFudGljKSk7CisgICAg
ICAgIG1fZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbShtX3R5cGVSZWZlcmVu
Y2VzLmxhc3QoKS5nZXQoKSwgKm1fY3VycmVudFNlbWFudGljLCBtX3BhdGgpKTsKICAgICB9CiAK
ICAgICB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVj
bGFyYXRpb24pCkBAIC04NSw3ICs4NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCi0gICAgICAgIG1fZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50
SXRlbShtX3R5cGVSZWZlcmVuY2VzLmxhc3QoKS5nZXQoKSwgKm1fY3VycmVudFNlbWFudGljKSk7
CisgICAgICAgIG1fZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbShtX3R5cGVS
ZWZlcmVuY2VzLmxhc3QoKS5nZXQoKSwgKm1fY3VycmVudFNlbWFudGljLCBtX3BhdGgpKTsKICAg
ICB9CiAKICAgICB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJl
RGVmaW5pdGlvbikKQEAgLTk4LDcgKzk4LDkgQEAgcHVibGljOgogICAgICAgICBmb3IgKGF1dG8m
IHN0cnVjdHVyZUVsZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLnN0cnVjdHVyZUVsZW1lbnRz
KCkpIHsKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVFbGVtZW50LnNlbWFudGljKCkpCiAgICAg
ICAgICAgICAgICAgbV9jdXJyZW50U2VtYW50aWMgPSAmKnN0cnVjdHVyZUVsZW1lbnQuc2VtYW50
aWMoKTsKKyAgICAgICAgICAgIG1fcGF0aC5hcHBlbmQoc3RydWN0dXJlRWxlbWVudC5uYW1lKCkp
OwogICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0cnVjdHVyZUVsZW1lbnQpOworICAg
ICAgICAgICAgbV9wYXRoLnRha2VMYXN0KCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEyMiw3
ICsxMjQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1fZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRy
eVBvaW50SXRlbShwb2ludGVyVHlwZSwgKm1fY3VycmVudFNlbWFudGljKSk7CisgICAgICAgIG1f
ZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbShwb2ludGVyVHlwZSwgKm1fY3Vy
cmVudFNlbWFudGljLCBtX3BhdGgpKTsKICAgICB9CiAKICAgICB2b2lkIHZpc2l0KEFTVDo6QXJy
YXlSZWZlcmVuY2VUeXBlJiBhcnJheVJlZmVyZW5jZVR5cGUpCkBAIC0xMzEsNyArMTMzLDcgQEAg
cHVibGljOgogICAgICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQb2ludEl0ZW0o
YXJyYXlSZWZlcmVuY2VUeXBlLCAqbV9jdXJyZW50U2VtYW50aWMpKTsKKyAgICAgICAgbV9lbnRy
eVBvaW50SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKGFycmF5UmVmZXJlbmNlVHlwZSwgKm1f
Y3VycmVudFNlbWFudGljLCBtX3BhdGgpKTsKICAgICB9CiAKICAgICB2b2lkIHZpc2l0KEFTVDo6
QXJyYXlUeXBlJiBhcnJheVR5cGUpCkBAIC0xNDAsNyArMTQyLDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAg
ICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQb2ludEl0ZW0oYXJyYXlUeXBlLCAqbV9j
dXJyZW50U2VtYW50aWMpKTsKKyAgICAgICAgbV9lbnRyeVBvaW50SXRlbXMuYXBwZW5kKEVudHJ5
UG9pbnRJdGVtKGFycmF5VHlwZSwgKm1fY3VycmVudFNlbWFudGljLCBtX3BhdGgpKTsKICAgICB9
CiAKICAgICB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNs
YXJhdGlvbikKQEAgLTE0OCwxMSArMTUwLDE0IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKCFt
X2N1cnJlbnRTZW1hbnRpYyk7CiAgICAgICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9uLnNlbWFu
dGljKCkpCiAgICAgICAgICAgICBtX2N1cnJlbnRTZW1hbnRpYyA9ICYqdmFyaWFibGVEZWNsYXJh
dGlvbi5zZW1hbnRpYygpOwotICAgICAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkp
Ci0gICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnZhcmlhYmxlRGVjbGFyYXRpb24udHlw
ZSgpKTsKKyAgICAgICAgQVNTRVJUKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAg
ICAgbV9wYXRoLmFwcGVuZCh2YXJpYWJsZURlY2xhcmF0aW9uLm5hbWUoKSk7CisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOworICAgICAgICBt
X3BhdGgudGFrZUxhc3QoKTsKICAgICB9CiAKIHByaXZhdGU6CisgICAgVmVjdG9yPFN0cmluZz4g
bV9wYXRoOwogICAgIGNvbnN0IEludHJpbnNpY3MmIG1faW50cmluc2ljczsKICAgICBBU1Q6OlNl
bWFudGljKiBtX2N1cnJlbnRTZW1hbnRpYyB7IG51bGxwdHIgfTsKICAgICBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OlR5cGVSZWZlcmVuY2U+PiBtX3R5cGVSZWZlcmVuY2VzOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRo
ZXJFbnRyeVBvaW50SXRlbXMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmgKaW5kZXggMjAzNjdiZTNlMjk1M2M2YmVkMGUx
YjdmZjRlNzg0OTQ0OGViYmRmZi4uNjY2NGUyZTM0MmVmZDkzMWJjNmIwNGIwZTczMjNmYjhiOGYy
ZTBjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oCkBAIC0zMCw2ICszMCw3IEBA
CiAjaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NSwxNCArNDYsMTYgQEAgY2xhc3MgSW50cmlu
c2ljczsKIGNsYXNzIFVubmFtZWRUeXBlOwogCiBzdHJ1Y3QgRW50cnlQb2ludEl0ZW0gewotICAg
IEVudHJ5UG9pbnRJdGVtKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBBU1Q6OlNlbWFu
dGljJiBzZW1hbnRpYykKLSAgICAgICAgOiB1bm5hbWVkVHlwZSh1bm5hbWVkVHlwZSkKLSAgICAg
ICAgLCBzZW1hbnRpYyhzZW1hbnRpYykKKyAgICBFbnRyeVBvaW50SXRlbShBU1Q6OlVubmFtZWRU
eXBlJiB1bm5hbWVkVHlwZSwgQVNUOjpTZW1hbnRpYyYgc2VtYW50aWMsIFZlY3RvcjxTdHJpbmc+
JiBwYXRoKQorICAgICAgICA6IHVubmFtZWRUeXBlKCZ1bm5hbWVkVHlwZSkKKyAgICAgICAgLCBz
ZW1hbnRpYygmc2VtYW50aWMpCisgICAgICAgICwgcGF0aChwYXRoKQogICAgIHsKICAgICB9CiAK
LSAgICBBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZTsKLSAgICBBU1Q6OlNlbWFudGljJiBz
ZW1hbnRpYzsKKyAgICBBU1Q6OlVubmFtZWRUeXBlKiB1bm5hbWVkVHlwZTsKKyAgICBBU1Q6OlNl
bWFudGljKiBzZW1hbnRpYzsKKyAgICBWZWN0b3I8U3RyaW5nPiBwYXRoOwogfTsKIAogc3RydWN0
IEVudHJ5UG9pbnRJdGVtcyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTExvb3BDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMTG9vcENoZWNrZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBhZTY4NTBiOWIyMjk3ZjU5YTU2NjkxMjMwNmNjODc3OTUxYzMyYTg2Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTG9vcENoZWNrZXIuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiV0hMU0xMb29wQ2hlY2tlci5oIgotCi0jaWYgRU5BQkxFKFdFQkdQVSkKLQotI2luY2x1ZGUg
IldITFNMQnJlYWsuaCIKLSNpbmNsdWRlICJXSExTTENvbnRpbnVlLmgiCi0jaW5jbHVkZSAiV0hM
U0xEb1doaWxlTG9vcC5oIgotI2luY2x1ZGUgIldITFNMRmFsbHRocm91Z2guaCIKLSNpbmNsdWRl
ICJXSExTTEZvckxvb3AuaCIKLSNpbmNsdWRlICJXSExTTFN3aXRjaFN0YXRlbWVudC5oIgotI2lu
Y2x1ZGUgIldITFNMVmlzaXRvci5oIgotI2luY2x1ZGUgIldITFNMV2hpbGVMb29wLmgiCi0jaW5j
bHVkZSA8d3RmL1NldEZvclNjb3BlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNw
YWNlIFdITFNMIHsKLQotLy8gVGhpcyBtYWtlcyBzdXJlIHRoYXQgZXZlcnkgb2NjdXJhbmNlIG9m
ICJjb250aW51ZSwiICJicmVhaywiIGFuZCAiZmFsbHRocm91Z2giIGFwcGVhciB3aXRoaW4gdGhl
IHJlbGV2YW50IGNvbnRyb2wgZmxvdyBzdHJ1Y3R1cmUuCi1jbGFzcyBMb29wQ2hlY2tlciA6IHB1
YmxpYyBWaXNpdG9yIHsKLXB1YmxpYzoKLSAgICBMb29wQ2hlY2tlcigpID0gZGVmYXVsdDsKLQot
ICAgIHZpcnR1YWwgfkxvb3BDaGVja2VyKCkgPSBkZWZhdWx0OwotCi1wcml2YXRlOgotICAgIHZv
aWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikgb3Zl
cnJpZGUKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9sb29wRGVwdGgpOwotICAgICAgICBBU1NF
UlQoIW1fc3dpdGNoRGVwdGgpOwotICAgICAgICBWaXNpdG9yOjp2aXNpdChmdW5jdGlvbkRlZmlu
aXRpb24pOwotICAgIH0KLQotICAgIHZvaWQgdmlzaXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxlTG9v
cCkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3Au
Y29uZGl0aW9uYWwoKSk7Ci0KLSAgICAgICAgU2V0Rm9yU2NvcGU8dW5zaWduZWQ+IGNoYW5nZSht
X2xvb3BEZXB0aCwgbV9sb29wRGVwdGggKyAxKTsKLSAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KHdoaWxlTG9vcC5ib2R5KCkpOwotICAgICAgICBBU1NFUlQobV9sb29wRGVwdGgpOwotICAgIH0K
LQotICAgIHZvaWQgdmlzaXQoQVNUOjpEb1doaWxlTG9vcCYgZG9XaGlsZUxvb3ApIG92ZXJyaWRl
Ci0gICAgewotICAgICAgICB7Ci0gICAgICAgICAgICBTZXRGb3JTY29wZTx1bnNpZ25lZD4gY2hh
bmdlKG1fbG9vcERlcHRoLCBtX2xvb3BEZXB0aCArIDEpOwotICAgICAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGRvV2hpbGVMb29wLmJvZHkoKSk7Ci0gICAgICAgICAgICBBU1NFUlQobV9sb29w
RGVwdGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvV2hpbGVM
b29wLmNvbmRpdGlvbmFsKCkpOwotICAgIH0KLQotICAgIHZvaWQgdmlzaXQoQVNUOjpGb3JMb29w
JiBmb3JMb29wKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VW
aXNpdG9yKFsmXShBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJsZURl
Y2xhcmF0aW9uc1N0YXRlbWVudCkgewotICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHZh
cmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KTsKLSAgICAgICAgfSwgWyZdKFVuaXF1ZVJlZjxB
U1Q6OkV4cHJlc3Npb24+JiBleHByZXNzaW9uKSB7Ci0gICAgICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoZXhwcmVzc2lvbik7Ci0gICAgICAgIH0pLCBmb3JMb29wLmluaXRpYWxpemF0aW9uKCkp
OwotICAgICAgICBpZiAoZm9yTG9vcC5jb25kaXRpb24oKSkKLSAgICAgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdCgqZm9yTG9vcC5jb25kaXRpb24oKSk7Ci0gICAgICAgIGlmIChmb3JMb29wLmlu
Y3JlbWVudCgpKQotICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpmb3JMb29wLmluY3Jl
bWVudCgpKTsKLQotICAgICAgICBTZXRGb3JTY29wZTx1bnNpZ25lZD4gY2hhbmdlKG1fbG9vcERl
cHRoLCBtX2xvb3BEZXB0aCArIDEpOwotICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZm9yTG9v
cC5ib2R5KCkpOwotICAgICAgICBBU1NFUlQobV9sb29wRGVwdGgpOwotICAgIH0KLQotICAgIHZv
aWQgdmlzaXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQmIHN3aXRjaFN0YXRlbWVudCkgb3ZlcnJpZGUK
LSAgICB7Ci0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzd2l0Y2hTdGF0ZW1lbnQudmFsdWUo
KSk7Ci0KLSAgICAgICAgU2V0Rm9yU2NvcGU8dW5zaWduZWQ+IGNoYW5nZShtX3N3aXRjaERlcHRo
LCBtX3N3aXRjaERlcHRoICsgMSk7Ci0gICAgICAgIGZvciAoYXV0byYgc3dpdGNoQ2FzZSA6IHN3
aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNlcygpKQotICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KHN3aXRjaENhc2UpOwotICAgICAgICBBU1NFUlQobV9zd2l0Y2hEZXB0aCk7Ci0gICAgfQot
Ci0gICAgdm9pZCB2aXNpdChBU1Q6OkJyZWFrJiBicmVha1N0YXRlbWVudCkgb3ZlcnJpZGUKLSAg
ICB7Ci0gICAgICAgIGlmICghbV9sb29wRGVwdGggJiYgIW1fc3dpdGNoRGVwdGgpIHsKLSAgICAg
ICAgICAgIHNldEVycm9yKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgVmlzaXRvcjo6dmlzaXQoYnJlYWtTdGF0ZW1lbnQpOwotICAgIH0KLQotICAgIHZvaWQgdmlz
aXQoQVNUOjpDb250aW51ZSYgY29udGludWVTdGF0ZW1lbnQpIG92ZXJyaWRlCi0gICAgewotICAg
ICAgICBpZiAoIW1fbG9vcERlcHRoKSB7Ci0gICAgICAgICAgICBzZXRFcnJvcigpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIFZpc2l0b3I6OnZpc2l0KGNvbnRpbnVl
U3RhdGVtZW50KTsKLSAgICB9Ci0KLSAgICB2b2lkIHZpc2l0KEFTVDo6RmFsbHRocm91Z2gmIGZh
bGx0aHJvdWdoU3RhdGVtZW50KSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgaWYgKCFtX3N3aXRj
aERlcHRoKSB7Ci0gICAgICAgICAgICBzZXRFcnJvcigpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIFZpc2l0b3I6OnZpc2l0KGZhbGx0aHJvdWdoU3RhdGVtZW50KTsK
LSAgICB9Ci0KLSAgICB1bnNpZ25lZCBtX2xvb3BEZXB0aCB7IDAgfTsKLSAgICB1bnNpZ25lZCBt
X3N3aXRjaERlcHRoIHsgMCB9OwotfTsKLQotYm9vbCBjaGVja0xvb3BzKFByb2dyYW0mIHByb2dy
YW0pCi17Ci0gICAgTG9vcENoZWNrZXIgbG9vcENoZWNrZXI7Ci0gICAgbG9vcENoZWNrZXIuVmlz
aXRvcjo6dmlzaXQocHJvZ3JhbSk7Ci0gICAgcmV0dXJuICFsb29wQ2hlY2tlci5lcnJvcigpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXSExTTAotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xMb29wQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xMb29wQ2hlY2tlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAxZmNhYzY3ZWI5Njk3MDA1NTRkMGExZTcwMzNlYWUyOTY2ZTEyZjk2Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTG9vcENoZWNrZXIuaAorKysgL2Rldi9udWxsCkBAIC0x
LDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJH
UFUpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIFdITFNMIHsKLQotY2xhc3Mg
UHJvZ3JhbTsKLQotYm9vbCBjaGVja0xvb3BzKFByb2dyYW0mKTsKLQotfQotCi19Ci0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xT
dGF0ZW1lbnRCZWhhdmlvckNoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2
NDE0MzAxMmJlNTg4OGM4Y2Y1NTgwMTIzMDFlZDVjZTZjMTk1OTgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YXRlbWVudEJlaGF2
aW9yQ2hlY2tlci5jcHAKQEAgLTAsMCArMSwyNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXIuaCIKKwor
I2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTERvV2hpbGVMb29wLmgiCisjaW5j
bHVkZSAiV0hMU0xGb3JMb29wLmgiCisjaW5jbHVkZSAiV0hMU0xJZlN0YXRlbWVudC5oIgorI2lu
Y2x1ZGUgIldITFNMSW5mZXJUeXBlcy5oIgorI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgorI2lu
Y2x1ZGUgIldITFNMU3dpdGNoU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xXaGlsZUxvb3Au
aCIKKyNpbmNsdWRlIDxjc3RkaW50PgorI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdI
TFNMIHsKKworY2xhc3MgU3RhdGVtZW50QmVoYXZpb3JDaGVja2VyIDogcHVibGljIFZpc2l0b3Ig
eworcHVibGljOgorICAgIGVudW0gY2xhc3MgQmVoYXZpb3IgOiB1aW50OF90IHsKKyAgICAgICAg
UmV0dXJuID0gMSA8PCAwLAorICAgICAgICBCcmVhayA9IDEgPDwgMSwKKyAgICAgICAgQ29udGlu
dWUgPSAxIDw8IDIsCisgICAgICAgIEZhbGx0aHJvdWdoID0gMSA8PCAzLAorICAgICAgICBOb3Ro
aW5nID0gMSA8PCA0CisgICAgfTsKKworICAgIE9wdGlvblNldDxCZWhhdmlvcj4gdGFrZUZ1bmN0
aW9uQmVoYXZpb3IoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhY2suc2l6ZSgpID09IDEp
OworICAgICAgICByZXR1cm4gbV9zdGFjay50YWtlTGFzdCgpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICB2b2lkIHZpc2l0KEFTVDo6QnJlYWsmKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9z
dGFjay5hcHBlbmQoeyBCZWhhdmlvcjo6QnJlYWsgfSk7CisgICAgfQorCisgICAgdm9pZCB2aXNp
dChBU1Q6OkZhbGx0aHJvdWdoJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fc3RhY2suYXBw
ZW5kKHsgQmVoYXZpb3I6OkZhbGx0aHJvdWdoIH0pOworICAgIH0KKworICAgIHZvaWQgdmlzaXQo
QVNUOjpDb250aW51ZSYpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3N0YWNrLmFwcGVuZCh7
IEJlaGF2aW9yOjpDb250aW51ZSB9KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6UmV0
dXJuJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHsgQmVoYXZpb3I6
OlJldHVybiB9KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHJhcCYpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBtX3N0YWNrLmFwcGVuZCh7IEJlaGF2aW9yOjpSZXR1cm4gfSk7Cisg
ICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkRvV2hpbGVMb29wJiBkb1doaWxlTG9vcCkgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb1doaWxlTG9vcC5ib2R5
KCkpOworICAgICAgICBpZiAoZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
YXV0byBiID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgICAgICBiLnJlbW92ZShCZWhhdmlvcjo6
QnJlYWspOworICAgICAgICBiLnJlbW92ZShCZWhhdmlvcjo6Q29udGludWUpOworICAgICAgICBi
LmFkZChCZWhhdmlvcjo6Tm90aGluZyk7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKGIpOworICAg
IH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpGb3JMb29wJiBmb3JMb29wKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgLy8gVGhlIGluaXRpYWxpemF0aW9uIGFsd2F5cyBoYXMgYSBiZWhhdmlvciBv
ZiBOb3RoaW5nLCB3aGljaCB3ZSBhbHJlYWR5IGFkZCB1bmNvbmRpdGlvbmFsbHkgYmVsb3csCisg
ICAgICAgIC8vIHNvIHdlIGNhbiBqdXN0IGlnbm9yZSB0aGUgaW5pdGlhbGl6YXRpb24uCisKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZvckxvb3AuYm9keSgpKTsKKyAgICAgICAgaWYgKGVy
cm9yKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8gYiA9IG1fc3RhY2sudGFr
ZUxhc3QoKTsKKyAgICAgICAgYi5yZW1vdmUoQmVoYXZpb3I6OkJyZWFrKTsKKyAgICAgICAgYi5y
ZW1vdmUoQmVoYXZpb3I6OkNvbnRpbnVlKTsKKyAgICAgICAgYi5hZGQoQmVoYXZpb3I6Ok5vdGhp
bmcpOworICAgICAgICBtX3N0YWNrLmFwcGVuZChiKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6V2hpbGVMb29wJiB3aGlsZUxvb3ApIG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmJvZHkoKSk7CisgICAgICAgIGlmIChlcnJvcigpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGIgPSBtX3N0YWNrLnRha2VMYXN0KCk7
CisgICAgICAgIGIucmVtb3ZlKEJlaGF2aW9yOjpCcmVhayk7CisgICAgICAgIGIucmVtb3ZlKEJl
aGF2aW9yOjpDb250aW51ZSk7CisgICAgICAgIGIuYWRkKEJlaGF2aW9yOjpOb3RoaW5nKTsKKyAg
ICAgICAgbV9zdGFjay5hcHBlbmQoYik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlN3
aXRjaENhc2UmIHN3aXRjaENhc2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICBWaXNpdG9yOjp2
aXNpdChzd2l0Y2hDYXNlKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3dpdGNoU3Rh
dGVtZW50JiBzd2l0Y2hTdGF0ZW1lbnQpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoc3dp
dGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX3N0
YWNrLmFwcGVuZCh7IEJlaGF2aW9yOjpOb3RoaW5nIH0pOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgT3B0aW9uU2V0PEJlaGF2aW9yPiByZWR1Y3Rpb24gPSB7IH07
CisgICAgICAgIGZvciAoYXV0byYgc3dpdGNoQ2FzZSA6IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hD
YXNlcygpKSB7CisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3dpdGNoQ2FzZSk7Cisg
ICAgICAgICAgICBpZiAoZXJyb3IoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICBhdXRvIGIgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAgICAgICByZWR1Y3Rpb24g
PSBPcHRpb25TZXQ8QmVoYXZpb3I+Ojpmcm9tUmF3KHJlZHVjdGlvbi50b1JhdygpIHwgYi50b1Jh
dygpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVkdWN0aW9uLmNvbnRhaW5zKEJlaGF2aW9y
OjpOb3RoaW5nKSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICByZWR1Y3Rpb24ucmVtb3ZlKEJlaGF2aW9yOjpCcmVhayk7
CisgICAgICAgIHJlZHVjdGlvbi5yZW1vdmUoQmVoYXZpb3I6OkZhbGx0aHJvdWdoKTsKKyAgICAg
ICAgcmVkdWN0aW9uLmFkZChCZWhhdmlvcjo6Tm90aGluZyk7CisgICAgICAgIG1fc3RhY2suYXBw
ZW5kKHJlZHVjdGlvbik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OklmU3RhdGVtZW50
JiBpZlN0YXRlbWVudCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChpZlN0YXRlbWVudC5ib2R5KCkpOworICAgICAgICBpZiAoZXJyb3IoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgYXV0byBiID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgICAgICBP
cHRpb25TZXQ8QmVoYXZpb3I+IGJQcmltZTsKKyAgICAgICAgaWYgKGlmU3RhdGVtZW50LmVsc2VC
b2R5KCkpIHsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqaWZTdGF0ZW1lbnQuZWxz
ZUJvZHkoKSk7CisgICAgICAgICAgICBpZiAoZXJyb3IoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICBiUHJpbWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgYlByaW1lID0geyBCZWhhdmlvcjo6Tm90aGluZyB9OworICAgICAg
ICBtX3N0YWNrLmFwcGVuZChPcHRpb25TZXQ8QmVoYXZpb3I+Ojpmcm9tUmF3KGIudG9SYXcoKSB8
IGJQcmltZS50b1JhdygpKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkVmZmVjdGZ1
bEV4cHJlc3Npb25TdGF0ZW1lbnQmKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9zdGFjay5h
cHBlbmQoeyBCZWhhdmlvcjo6Tm90aGluZyB9KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFT
VDo6QmxvY2smIGJsb2NrKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGJsb2NrLnN0YXRl
bWVudHMoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fc3RhY2suYXBwZW5kKHsgQmVoYXZp
b3I6Ok5vdGhpbmcgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBPcHRpb25TZXQ8QmVoYXZpb3I+IHJlZHVjdGlvbiA9IHsgfTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBibG9jay5zdGF0ZW1lbnRzKCkuc2l6ZSgpIC0gMTsgKytpKSB7CisgICAg
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYmxvY2suc3RhdGVtZW50cygpW2ldKTsKKyAgICAg
ICAgICAgIGlmIChlcnJvcigpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IGF1dG8gYiA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIGlmICghYi5jb250YWlu
cyhCZWhhdmlvcjo6Tm90aGluZykpIHsKKyAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGIucmVtb3Zl
KEJlaGF2aW9yOjpOb3RoaW5nKTsKKyAgICAgICAgICAgIGlmIChiLmNvbnRhaW5zKEJlaGF2aW9y
OjpGYWxsdGhyb3VnaCkpIHsKKyAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlZHVjdGlvbiA9IE9w
dGlvblNldDxCZWhhdmlvcj46OmZyb21SYXcocmVkdWN0aW9uLnRvUmF3KCkgfCBiLnRvUmF3KCkp
OworICAgICAgICB9CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChibG9jay5zdGF0ZW1lbnRz
KClbYmxvY2suc3RhdGVtZW50cygpLnNpemUoKSAtIDFdKTsKKyAgICAgICAgaWYgKGVycm9yKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8gYiA9IG1fc3RhY2sudGFrZUxhc3Qo
KTsKKyAgICAgICAgbV9zdGFjay5hcHBlbmQoT3B0aW9uU2V0PEJlaGF2aW9yPjo6ZnJvbVJhdyhy
ZWR1Y3Rpb24udG9SYXcoKSB8IGIudG9SYXcoKSkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQo
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYpIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBtX3N0YWNrLmFwcGVuZCh7IEJlaGF2aW9yOjpOb3RoaW5nIH0pOworICAgIH0KKworICAg
IFZlY3RvcjxPcHRpb25TZXQ8QmVoYXZpb3I+PiBtX3N0YWNrOworfTsKKworYm9vbCBjaGVja1N0
YXRlbWVudEJlaGF2aW9yKFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgU3RhdGVtZW50QmVoYXZp
b3JDaGVja2VyIHN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlcjsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0
aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKSB7CisgICAgICAg
IHN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlci5WaXNpdG9yOjp2aXNpdChmdW5jdGlvbkRlZmluaXRp
b24pOworICAgICAgICBpZiAoc3RhdGVtZW50QmVoYXZpb3JDaGVja2VyLmVycm9yKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8gYmVoYXZpb3IgPSBzdGF0ZW1lbnRC
ZWhhdmlvckNoZWNrZXIudGFrZUZ1bmN0aW9uQmVoYXZpb3IoKTsKKyAgICAgICAgaWYgKG1hdGNo
ZXMoZnVuY3Rpb25EZWZpbml0aW9uLT50eXBlKCksIHByb2dyYW0uaW50cmluc2ljcygpLnZvaWRU
eXBlKCkpKSB7CisgICAgICAgICAgICBiZWhhdmlvci5yZW1vdmUoU3RhdGVtZW50QmVoYXZpb3JD
aGVja2VyOjpCZWhhdmlvcjo6UmV0dXJuKTsKKyAgICAgICAgICAgIGJlaGF2aW9yLnJlbW92ZShT
dGF0ZW1lbnRCZWhhdmlvckNoZWNrZXI6OkJlaGF2aW9yOjpOb3RoaW5nKTsKKyAgICAgICAgICAg
IGlmIChiZWhhdmlvciAhPSBPcHRpb25TZXQ8U3RhdGVtZW50QmVoYXZpb3JDaGVja2VyOjpCZWhh
dmlvcj4oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBpZiAoYmVoYXZpb3IgIT0gU3RhdGVtZW50QmVoYXZpb3JDaGVja2VyOjpC
ZWhhdmlvcjo6UmV0dXJuKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV0hMU0wKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhdGVtZW50
QmVoYXZpb3JDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFlY2RmZTYxZmE4MDJh
MmI0NDU0M2EwMTZiMWQwNGUyNmU3NGIzZWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlci5o
CkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKwor
Y2xhc3MgUHJvZ3JhbTsKKworYm9vbCBjaGVja1N0YXRlbWVudEJlaGF2aW9yKFByb2dyYW0mKTsK
KworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBiNjEyNDE5MmNlOTQ0NTJmNmQx
ZmU0YmJmMzA5ZmNkYWM0MWI0NzJhLi42NDlkZDdlMGQ2MTQ0YjVmNGI1ZjkzMzU0NTMxNmQ2ODVk
MDU2Mjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMzE4LDYgKzMxOCw3IEBAIE1vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcAogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcAogTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5zaWNzLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xTdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TE5hbWVDb250ZXh0LmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIu
Y3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCkBA
IC0zMjUsNyArMzI2LDExIEBAIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaW9uQ2hl
Y2tlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAKIE1vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMTGl0ZXJhbFR5cGVDaGVja2VyLmNwcAogTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xIaWdoWm9tYmllRmluZGVyLmNwcAotTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xMb29wQ2hlY2tlci5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5h
bWVyLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5j
cHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWV0YWxDb2RlR2VuZXJhdG9yLmNw
cAorTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5j
cHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5n
LmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xGdW5jdGlvblN0YWdlQ2hlY2tlci5jcHAK
IE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVBcmd1bWVudC5jcHAKIE1vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2ZmVkYzIyMjRm
OGIxNWYyNWQwMTMzODcxMGEwNjk2MWY2MzU2NGQ4Li4wZWM1YWY1ZGZiNTAzZjRjZTJhYTUwNWU5
MTQxNzI0MGY5N2JjOWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NDM3LDggKzY0MzcsNiBAQAogCQkxQ0EwQzJFNTIxRUVE
MTJBMDBBMTE4NjAgLyogV0hMU0xGdW5jdGlvblN0YWdlQ2hlY2tlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXSExTTEZ1bmN0aW9uU3RhZ2VDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFDQTBDMkVBMjFFRUQ2RjUwMEExMTg2MCAvKiBXSExTTExpdGVyYWxUeXBlQ2hlY2tlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXSExTTExpdGVyYWxUeXBlQ2hlY2tlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQ0EwQzJFQzIxRUVENkY2MDBBMTE4NjAgLyogV0hMU0xMaXRlcmFs
VHlwZUNoZWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xMaXRlcmFsVHlwZUNoZWNr
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQ0EwQzJGNDIxRUVEQUQwMDBB
MTE4NjAgLyogV0hMU0xMb29wQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTExv
b3BDaGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUNBMEMyRjUyMUVF
REFEMTAwQTExODYwIC8qIFdITFNMTG9vcENoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xM
b29wQ2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0ExOUUwMzBEQzI1
NTk1MDA2NUE5OTQgLyogRXZlbnRMb29wTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gRXZlbnRMb29wTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQ0ExOUUxNTBEQzI1NUNBMDA2NUE5OTQgLyogRXZlbnRMb29wLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50TG9vcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQ0FGMzQ3RTBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNjcmlwdE9iamVjdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjQ2MCw2ICs2NDU4LDE4IEBACiAJCTFDREQ0NUU0MEJB
OUM4NDYwMEY5MDE0NyAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lnhj
Y29uZmlnOyBwYXRoID0gRGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQ0RENDVFNTBCQTlDODQ2MDBGOTAxNDcgLyogV2ViQ29yZS54Y2NvbmZpZyAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBXZWJDb3JlLnhjY29uZmlnOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0RENDVFNjBCQTlDODQ2MDBGOTAxNDcgLyogQmFzZS54
Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBCYXNlLnhjY29uZmlnOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0VDQjNBODIxRjJCNjczMDBGNDQ1NDIgLyog
V0hMU0xTdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xTdGF0
ZW1lbnRCZWhhdmlvckNoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNF
Q0IzQTkyMUYyQjY3MzAwRjQ0NTQyIC8qIFdITFNMU3RhdGVtZW50QmVoYXZpb3JDaGVja2VyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMU3RhdGVtZW50QmVoYXZpb3JDaGVja2VyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNFQ0IzQUYyMUYyQjk4NDAwRjQ0NTQyIC8q
IFdITFNMRnVuY3Rpb25Xcml0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xGdW5jdGlv
bldyaXRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDRUNCM0IwMjFGMkI5
ODUwMEY0NDU0MiAvKiBXSExTTFR5cGVOYW1lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFR5cGVO
YW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0VDQjNCMTIxRjJCOTg1MDBG
NDQ1NDIgLyogV0hMU0xUeXBlTmFtZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xUeXBl
TmFtZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0VDQjNCMjIxRjJCOTg2
MDBGNDQ1NDIgLyogV0hMU0xGdW5jdGlvbldyaXRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEZ1
bmN0aW9uV3JpdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDRUNCM0I1MjFG
NTBBQzcwMEY0NDU0MiAvKiBXSExTTE1ldGFsQ29kZUdlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXSExTTE1ldGFsQ29kZUdlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFDRUNCM0I2MjFGNTBBQzcwMEY0NDU0MiAvKiBXSExTTE1ldGFsQ29kZUdlbmVy
YXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTE1ldGFsQ29kZUdlbmVyYXRvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxQ0VDQjNCODIxRjUwRDEwMDBGNDQ1NDIgLyogV0hMU0xO
YXRpdmVGdW5jdGlvbldyaXRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTE5hdGl2ZUZ1
bmN0aW9uV3JpdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNFQ0IzQjky
MUY1MEQxMDAwRjQ0NTQyIC8qIFdITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxQ0VDQjNCQTIxRjUxMUFBMDBGNDQ1NDIgLyogV0hMU0xFbnRyeVBvaW50U2NhZmZv
bGRpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0VDQjNCQjIxRjUxMUFBMDBGNDQ1
NDIgLyogV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xF
bnRyeVBvaW50U2NhZmZvbGRpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNG
QUUzMjIwQTZENkEzRjAwMzI1OTNEIC8qIGxpYm9iamMuZHlsaWIgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsg
bmFtZSA9IGxpYm9iamMuZHlsaWI7IHBhdGggPSAvdXNyL2xpYi9saWJvYmpjLmR5bGliOyBzb3Vy
Y2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQkxREM1NTNGRDIxMUJBMTJBMDA0Qjc4MEUgLyog
TmF2aWdhdG9yU2hhcmUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE5hdmlnYXRvclNoYXJl
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMURDNTUzRkYyMTFCQTg0MTAwNEI3
ODBFIC8qIFNoYXJlRGF0YS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU2hhcmVEYXRhLmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3MTUwLDYgKzE3MTYwLDIzIEBACiAJ
CQl0YWJXaWR0aCA9IDQ7CiAJCQl1c2VzVGFicyA9IDA7CiAJCX07CisJCTFDRUNCM0FEMjFGMkI5
NjQwMEY0NDU0MiAvKiBNZXRhbCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRy
ZW4gPSAoCisJCQkJMUNFQ0IzQkEyMUY1MTFBQTAwRjQ0NTQyIC8qIFdITFNMRW50cnlQb2ludFNj
YWZmb2xkaW5nLmNwcCAqLywKKwkJCQkxQ0VDQjNCQjIxRjUxMUFBMDBGNDQ1NDIgLyogV0hMU0xF
bnRyeVBvaW50U2NhZmZvbGRpbmcuaCAqLywKKwkJCQkxQ0VDQjNBRjIxRjJCOTg0MDBGNDQ1NDIg
LyogV0hMU0xGdW5jdGlvbldyaXRlci5jcHAgKi8sCisJCQkJMUNFQ0IzQjIyMUYyQjk4NjAwRjQ0
NTQyIC8qIFdITFNMRnVuY3Rpb25Xcml0ZXIuaCAqLywKKwkJCQkxQ0VDQjNCNTIxRjUwQUM3MDBG
NDQ1NDIgLyogV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuY3BwICovLAorCQkJCTFDRUNCM0I2MjFG
NTBBQzcwMEY0NDU0MiAvKiBXSExTTE1ldGFsQ29kZUdlbmVyYXRvci5oICovLAorCQkJCTFDRUNC
M0I4MjFGNTBEMTAwMEY0NDU0MiAvKiBXSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcCAqLywK
KwkJCQkxQ0VDQjNCOTIxRjUwRDEwMDBGNDQ1NDIgLyogV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRl
ci5oICovLAorCQkJCTFDRUNCM0IxMjFGMkI5ODUwMEY0NDU0MiAvKiBXSExTTFR5cGVOYW1lci5j
cHAgKi8sCisJCQkJMUNFQ0IzQjAyMUYyQjk4NTAwRjQ0NTQyIC8qIFdITFNMVHlwZU5hbWVyLmgg
Ki8sCisJCQkpOworCQkJcGF0aCA9IE1ldGFsOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
KwkJfTsKIAkJMjZCOTk5OEQxODAzQURGQTAwRDAxMTIxIC8qIGNzc2ppdCAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yNTU2Miw2ICsyNTU4OSw3IEBACiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTFDQTBDMkY2MjFFRURBRDIw
MEExMTg2MCAvKiBBU1QgKi8sCisJCQkJMUNFQ0IzQUQyMUYyQjk2NDAwRjQ0NTQyIC8qIE1ldGFs
ICovLAogCQkJCUMyMzRBOUIyMjFFOTJDMUYwMDNDOTg0RCAvKiBXSExTTENoZWNrRHVwbGljYXRl
RnVuY3Rpb25zLmNwcCAqLywKIAkJCQlDMjM0QTlBRTIxRTkyQzFBMDAzQzk4NEQgLyogV0hMU0xD
aGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oICovLAogCQkJCTFDODQwQjlCMjFFQzQwMDkwMEQwNTAw
RCAvKiBXSExTTENoZWNrZXIuY3BwICovLApAQCAtMjU1ODAsOCArMjU2MDgsNiBAQAogCQkJCUMy
MTBFOTEyMjFCNEJEMTAwMEI3RjgzRCAvKiBXSExTTExleGVyLmggKi8sCiAJCQkJMUNBMEMyRUMy
MUVFRDZGNjAwQTExODYwIC8qIFdITFNMTGl0ZXJhbFR5cGVDaGVja2VyLmNwcCAqLywKIAkJCQkx
Q0EwQzJFQTIxRUVENkY1MDBBMTE4NjAgLyogV0hMU0xMaXRlcmFsVHlwZUNoZWNrZXIuaCAqLywK
LQkJCQkxQ0EwQzJGNDIxRUVEQUQwMDBBMTE4NjAgLyogV0hMU0xMb29wQ2hlY2tlci5jcHAgKi8s
Ci0JCQkJMUNBMEMyRjUyMUVFREFEMTAwQTExODYwIC8qIFdITFNMTG9vcENoZWNrZXIuaCAqLywK
IAkJCQlDMjM0QTk4RDIxRTg4ODg0MDAzQzk4NEQgLyogV0hMU0xOYW1lQ29udGV4dC5jcHAgKi8s
CiAJCQkJQzIzNEE5OEUyMUU4ODg4NTAwM0M5ODREIC8qIFdITFNMTmFtZUNvbnRleHQuaCAqLywK
IAkJCQlDMjM0QTk4QTIxRTg4ODNFMDAzQzk4NEQgLyogV0hMU0xOYW1lUmVzb2x2ZXIuY3BwICov
LApAQCAtMjU1OTcsNiArMjU2MjMsOCBAQAogCQkJCUMyMzRBOTk3MjFFOTBGMjgwMDNDOTg0RCAv
KiBXSExTTFJlc29sdmVPdmVybG9hZEltcGwuaCAqLywKIAkJCQlDMjM0QTk5RDIxRTkxMEJEMDAz
Qzk4NEQgLyogV0hMU0xSZXNvbHZpbmdUeXBlLmggKi8sCiAJCQkJQzIxQkY3NDUyMUNEOTY5ODAw
MjI3OTc5IC8qIFdITFNMU3RhbmRhcmRMaWJyYXJ5LnR4dCAqLywKKwkJCQkxQ0VDQjNBOTIxRjJC
NjczMDBGNDQ1NDIgLyogV0hMU0xTdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXIuY3BwICovLAorCQkJ
CTFDRUNCM0E4MjFGMkI2NzMwMEY0NDU0MiAvKiBXSExTTFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tl
ci5oICovLAogCQkJCUMyMzRBOUE5MjFFOTJDMTcwMDNDOTg0RCAvKiBXSExTTFN5bnRoZXNpemVB
cnJheU9wZXJhdG9yTGVuZ3RoLmNwcCAqLywKIAkJCQlDMjM0QTlBRjIxRTkyQzFCMDAzQzk4NEQg
LyogV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oICovLAogCQkJCUMyMzRBOUIw
MjFFOTJDMUMwMDNDOTg0RCAvKiBXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359646</attachid>
            <date>2019-01-20 13:37:05 -0800</date>
            <delta_ts>2019-01-20 13:41:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>123321</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">Y29tbWl0IDlmODFkZDZmZjc5MzU1Y2Y1ZmVmOGEzMTIwZDlkZTAwNmQ3NDY5NzEKQXV0aG9yOiBN
eWxlcyBDLiBNYXhmaWVsZCA8bW1heGZpZWxkQGFwcGxlLmNvbT4KRGF0ZTogICBGcmkgSmFuIDE4
IDE3OjQ5OjUyIDIwMTkgLTA4MDAKCiAgICBNZXRhbAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwM2Q2NjkzNGJj
MC4uOWZjOTA0Yjc1MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMjAgKzEsMTM3IEBACiAyMDE5LTAxLTIw
ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKLSAgICAgICAgW1dI
TFNMXSBBZGQgdGhlIHN0YXRlbWVudCBiZWhhdmlvciBjaGVja2VyCi0gICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTM0ODcKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgTWV0YWwgY29kZSBnZW5lcmF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTM1MzEKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KIAotICAgICAgICBUaGlzIGlzIGEgdHJhbnNsYXRpb24gb2YgaHR0cHM6Ly9n
aXRodWIuY29tL2dwdXdlYi9XSExTTC9ibG9iL21hc3Rlci9TcGVjL3NvdXJjZS9pbmRleC5yc3Qj
dHlwaW5nLXN0YXRlbWVudHMKLSAgICAgICAgaW50byBDKysuIEl0IGlzIG1lYW50IHRvIHJlcGxh
Y2UgdGhlIFJldHVybkNoZWNrZXIgYW5kIFVucmVhY2hhYmxlQ29kZUNoZWNrZXIgaW4gdGhlIHJl
ZmVyZW5jZSBpbXBsZW1lbnRhdGlvbi4KLQotICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBp
dCBpc24ndCBob29rZWQgdXAgeWV0LiBOb3QgZW5vdWdoIG9mIHRoZSBjb21waWxlciBleGlzdHMg
dG8gaGF2ZSBhbnkgbWVhbmluZ2Z1bCBzb3J0Ci0gICAgICAgIG9mIHRlc3QuIFdoZW4gZW5vdWdo
IG9mIHRoZSBjb21waWxlciBpcyBwcmVzZW50LCBJJ2xsIHBvcnQgdGhlIHJlZmVyZW5jZSBpbXBs
ZW1lbnRhdGlvbidzIHRlc3Qgc3VpdGUuCisgICAgICAgIFRoaXMgaW1wbGVtZW50cyB0aGUgbWFq
b3JpdHkgb2YgdGhlIG1ldGFsIGNvZGUgZ2VuZXJhdGlvbiBwaWVjZS4gVGhlcmUgYXJlIHN0aWxs
IGEgZmV3IHBpZWNlcyBtaXNzaW5nLAorICAgICAgICB0aGF0IEknbGwgYWRkIGluIGZvbGxvdyB1
cCBwYXRjaGVzLiBUaGVyZSdzIHN0aWxsIGVub3VnaCBjb21wbGV4aXR5IGhlcmUgdGhhdCB0aGlz
IGlzIHdvcnRoIHJldmlld2luZworICAgICAgICBvbiBpdCdzIG93biwgdGhvdWdoLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggaW5jbHVkZXMgYSBmZXcgcGllY2VzOgorICAgICAgICAtIE1ldGFsIHR5
cGVkZWZzIGZvciBldmVyeSBXSExTTCB0eXBlLiBUaGlzIGFuYWx5c2lzIGlzIGFjdHVhbGx5IHBy
ZXR0eSBpbnRlcmVzdGluZywgYmVjYXVzZSBjb21wbGV4CisgICAgICAgICAgICAgIHR5cGVzIGRl
cGVuZCBvbiB0aGVpciBpbm5lciB0eXBlcywgYW5kIHRoZSBpbm5lciB0eXBlcyBuZWVkIHRvIGJl
IGVtaXR0ZWQgZmlyc3QuIFRoZXJlZm9yZSwKKyAgICAgICAgICAgICAgdGhpcyBwYXRjaCBpbXBs
ZW1lbnRzIGEgdG9wb2xvZ2ljYWwgc29ydCB3aGVuIGVtaXR0aW5nIHR5cGVzLiBBbHNvLCBXSExT
TCB0eXBlcyBuZWVkIHRvIGJlIGRlLQorICAgICAgICAgICAgICBkdXBlZCBiZWNhdXNlIGFycmF5
IHJlZmVyZW5jZXMgYXJlIGltcGxlbWVudGVkIGluIE1TTCBhcyBzdHJ1Y3RzLCBhbmQgaWYgeW91
IGhhdmUgdHdvIHN0cnVjdHMKKyAgICAgICAgICAgICAgaW4gTVNMIHdpdGggdGhlIHNhbWUgY29u
dGVudHMsIHRob3NlIHR3byBzdHJ1Y3RzIGFyZSBub3QgZXF1YWwgYW5kIGNhbm5vdCBiZSBhc3Np
Z25lZCB0byBlYWNoCisgICAgICAgICAgICAgIG90aGVyLiBTbywgdGhpcyBwYXRjaCBjcmVhdGVz
IGEgdHJpZSB0byBkZS1kdXAgYWxsIHRoZSBVbm5hbWVkVHlwZXMsIGFuZCBpbXBsZW1lbnRzIGEK
KyAgICAgICAgICAgICAgZGVwZW5kZW5jeSBncmFwaCB3aGljaCBpbmNsdWRlcyBib3RoIG5vZGVz
IGluIHRoZSB0cmllIGFzIHdlbGwgYXMgTmFtZWRUeXBlcyB3aGljaCBkb24ndCBhcHBlYXIKKyAg
ICAgICAgICAgICAgaW4gdGhlIHRyaWUuCisgICAgICAgIC0gV0hMU0wgZW51bWVyYXRpb24gY29k
ZSBnZW5lcmF0aW9uCisgICAgICAgIC0gQSBuYW1lIG1hbmdsZXIsIHdoaWNoIGVuc3VyZXMgdGhh
dCBubyB0ZXh0IGZyb20gdGhlIHNvdXJjZSBwcm9ncmFtIGlzIGNvbnRhaW5lZCB3aXRoaW4gdGhl
IHJlc3VsdAorICAgICAgICAgICAgICBwcm9ncmFtCisgICAgICAgIC0gRnVsbCBzdXBwb3J0IGZv
ciBleHByZXNzaW9ucy4gQW4gZXhwcmVzc2lvbiBsaWtlICJ5ID0gKnggKyA3OyIgd291bGQgYmUg
Y29udmVydGVkIHRvIHNvbWV0aGluZyBsaWtlCisgICAgICAgICAgICAgIFR5cGUxIHZhcmlhYmxl
MSA9ICp4OworICAgICAgICAgICAgICBUeXBlMiB2YXJpYWJsZTIgPSA3OworICAgICAgICAgICAg
ICBUeXBlMyB2YXJpYWJsZTMgPSB2YXJpYWJsZTEgKyB2YXJpYWJsZTI7CisgICAgICAgICAgICAg
IHkgPSB2YXJpYWJsZTM7CisgICAgICAgIC0gTW9zdGx5IGNvbXBsZXRlIHN1cHBvcnQgZm9yIGNv
bnRyb2wgZmxvdy4gVGhpcyBpcyB0cmlja3kgYmVjYXVzZSBvZiBob3cgd2UgdHJhbnNmb3JtIFdI
TFNMCisgICAgICAgICAgICAgIGV4cHJlc3Npb25zIGludG8gQysrIHN0YXRlbWVudHMuIFRoZXJl
Zm9yZSwgdGhpbmdzIGxpa2UgImZvciAoIDsgKnggKyA3OyApIiBpcyBkaWZmaWN1bHQgdG8KKyAg
ICAgICAgICAgICAgY29tcGlsZSwgYmVjYXVzZSB3ZSBjYW4ndCBwdXQgdGhlICIqeCArIDciIGdl
bmVyYXRlZCBzdGF0ZW1lbnRzIGludG8gdGhlIGZvciBsb29wIGl0c2VsZi4KKyAgICAgICAgICAg
ICAgSW5zdGVhZCwgd2UgaGF2ZSB0byBlbWl0IHRoaXMgY29kZSBpbnNpZGUgdGhlIGxvb3AsIGlu
IGFsbCB0aGUgcGxhY2VzIHRoYXQgd291bGQgaW1wbGljaXRseSBydW4KKyAgICAgICAgICAgICAg
aXQuIFRoaXMgcGF0Y2ggZG9lc24ndCBmdWxseSBoYW5kbGUgdGhpcywgc2VlIGJlbG93LiAoSWYg
TVNMIHN1cHBvcnRlZCBsYW1iZGFzLCB3ZSBjb3VsZCBwdXQKKyAgICAgICAgICAgICAgdGhlIHN0
YXRlbWVudHMgaW50byBhIGxhbWJkYSBhbmQgZG8gc29tZXRoaW5nIGxpa2UgImZvciAoIDsgdGhl
TGFtYmRhKCk7ICkiIGJ1dCBNU0wgZG9lc24ndAorICAgICAgICAgICAgICBzdXBwb3J0IGxhbWJk
YXMuKQorCisgICAgICAgIE1pc3NpbmcgcGllY2VzOgorICAgICAgICAtIEVudHJ5IHBvaW50IHBh
Y2sgLyB1bnBhY2sgY29kZQorICAgICAgICAtIFN1cHBvcnQgZm9yICJjb250aW51ZSIgKFNlZSBh
Ym92ZSByZWdhcmRpbmcgY29udHJvbCBmbG93KQorICAgICAgICAtIEtub3dpbmcgd2hldGhlciBv
ciBub3QgYSBzd2l0Y2ggY2FzZSBzaG91bGQgZW5kIHdpdGggYnJlYWsgb3IgZmFsbHRocm91Z2gK
KyAgICAgICAgLSBUcmFwcGluZworICAgICAgICAtIFplcm8gZmlsbGluZyB2YXJpYWJsZXMKKyAg
ICAgICAgLSBDb2RlIGdlbmVyYXRpb24gZm9yIGNvbXBpbGVyLWdlbmVyYXRlZCBuYXRpdmUgZnVu
Y3Rpb25zICh0aGlzIHBhdGNoIHN1cHBvcnRzIG5hdGl2ZSBmdW5jdGlvbnMgaW4gdGhlCisgICAg
ICAgICAgICAgIHN0YW5kYXJkIGxpYnJhcnksIHRleHR1cmUgZnVuY3Rpb25zLCBhbmQgSExTTCdz
IGhhbGYgPC0+IGludCBmdW5jdGlvbnMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ug
aXQgaXNuJ3QgaG9va2VkIHVwIHlldC4gQXMgc29vbiBhcyB3ZSBjYW4gZG8gZW50cnkgcG9pbnQg
cGFja2luZyBhbmQgdW5wYWNraW5nLAorICAgICAgICBJJ2xsIHN0YXJ0IHBvcnRpbmcgdGhlIHRl
c3Qgc3VpdGUuCiAKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWls
dEluU2VtYW50aWMuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkJ1aWx0SW5TZW1h
bnRpYzo6dGFyZ2V0SW5kZXgpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4cHJlc3Np
b246OnJlc29sdmVkVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpFeHByZXNz
aW9uOjp0eXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uOjpuYW1lKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uOjpmaW5kKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpFbnRyeVBvaW50U2NhZmZvbGRpbmc6
OkVudHJ5UG9pbnRTY2FmZm9sZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6
OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6aGVscGVyVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6Ok1ldGFsOjpFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnNpZ25hdHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RW50cnlQb2ludFNjYWZmb2xkaW5nOjpw
YWNrKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9p
bnRTY2FmZm9sZGluZy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTExvb3BDaGVja2VyLmguCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hM
U0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyOjpGdW5jdGlvbkRlY2xh
cmF0aW9uV3JpdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbldyaXRlcjo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1l
dGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcik6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRl
cjo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlvbkRl
ZmluaXRpb25Xcml0ZXI6OmNvbnN0YW50RXhwcmVzc2lvblN0cmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6Z2VuZXJhdGVOZXh0
VmFyaWFibGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6bWV0YWxGdW5j
dGlvbnMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rp
b25Xcml0ZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xMb29wQ2hlY2tlci5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01l
dGFsL1dITFNMTWV0YWxDb2RlR2VuZXJhdG9yLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oLgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpnZW5lcmF0ZU1ldGFsQ29kZSk6CisgICAg
ICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5lcmF0b3Iu
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xM
b29wQ2hlY2tlci5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
TmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpNZXRhbDo6Z2V0TmF0aXZlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6
Om1hcEZ1bmN0aW9uTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OmNvbnZl
cnRBZGRyZXNzU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjp3cml0ZU5h
dGl2ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExT
TE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMTG9vcENoZWNrZXIuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dl
YmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6Ok1ldGFsOjpCYXNlVHlwZU5hbWVOb2RlOjpCYXNlVHlwZU5hbWVOb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6QmFzZVR5cGVOYW1lTm9kZTo6aXNBcnJh
eVR5cGVOYW1lTm9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkJh
c2VUeXBlTmFtZU5vZGU6OmlzQXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpCYXNlVHlwZU5hbWVOb2RlOjppc1BvaW50ZXJU
eXBlTmFtZU5vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpCYXNl
VHlwZU5hbWVOb2RlOjppc1JlZmVyZW5jZVR5cGVOYW1lTm9kZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6TWV0YWw6OkJhc2VUeXBlTmFtZU5vZGU6OmNoaWxkcmVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6QmFzZVR5cGVOYW1lTm9kZTo6YXBwZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6QmFzZVR5cGVOYW1lTm9kZTo6cGFyZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6QmFzZVR5cGVOYW1lTm9kZTo6bWFuZ2xl
ZE5hbWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpBcnJheVR5cGVO
YW1lTm9kZTo6QXJyYXlUeXBlTmFtZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1l
dGFsOjpBcnJheVR5cGVOYW1lTm9kZTo6bnVtRWxlbWVudHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6Ok1ldGFsOjpBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZTo6QXJyYXlSZWZl
cmVuY2VUeXBlTmFtZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpBcnJh
eVJlZmVyZW5jZVR5cGVOYW1lTm9kZTo6YWRkcmVzc1NwYWNlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpNZXRhbDo6UG9pbnRlclR5cGVOYW1lTm9kZTo6UG9pbnRlclR5cGVOYW1l
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlBvaW50ZXJUeXBlTmFtZU5v
ZGU6OmFkZHJlc3NTcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6
OlJlZmVyZW5jZVR5cGVOYW1lTm9kZTo6UmVmZXJlbmNlVHlwZU5hbWVOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UmVmZXJlbmNlVHlwZU5hbWVOb2RlOjpuYW1lZFR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6OlR5cGVOYW1lcik6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6dmlzaXQpOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpmaW5kSW5WZWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6Ok1ldGFsOjpmaW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRh
bDo6VHlwZU5hbWVyOjptYW5nbGVkTmFtZUZvclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6Ok1ldGFsOjpUeXBlTmFtZXI6OmNyZWF0ZU5hbWVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpNZXRhbDo6VHlwZU5hbWVyOjppbnNlcnQpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6Ok1ldGFsOjpNZXRhbFR5cGVEZWNsYXJhdGlvbldyaXRlcjo6TWV0YWxUeXBlRGVjbGFyYXRp
b25Xcml0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpNZXRhbFR5cGVEZWNs
YXJhdGlvbldyaXRlcjo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFs
OjpNZXRhbFR5cGVEZWNsYXJhdGlvbldyaXRlcjo6dmlzaXQpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6Om1ldGFsVHlwZURlY2xhcmF0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpNZXRhbDo6VHlwZU5hbWVyOjplbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5hbWVyOjplbWl0TmFtZWRUeXBlRGVmaW5p
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6bWV0YWxU
eXBlRGVmaW5pdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFt
ZXI6Om1hbmdsZWROYW1lRm9yRW51bWVyYXRpb25NZW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6Om1hbmdsZWROYW1lRm9yU3RydWN0dXJlRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6bWV0YWxUeXBlcyk6
CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6Z2VuZXJh
dGVOZXh0VHlwZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFt
ZXI6OmdlbmVyYXRlTmV4dFN0cnVjdHVyZUVsZW1lbnROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpNZXRhbDo6VHlwZU5hbWVyOjpnZW5lcmF0ZU5leHRFbnVtZXJhdGlvbk1lbWJlck5h
bWUpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6Y2hlY2tTZW1hbnRpY3MpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6OkNoZWNrZXI6OnZpc2l0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6R2F0aGVyZXI6OnZpc2l0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkVudHJ5
UG9pbnRJdGVtOjpFbnRyeVBvaW50SXRlbSk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xMb29wQ2hlY2tlci5jcHA6IFJlbW92ZWQuCiAgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXIuY3BwOiBBZGRlZC4KICAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpTdGF0ZW1lbnRCZWhhdmlvckNoZWNrZXI6OnRha2VGdW5jdGlv
bkJlaGF2aW9yKToKICAgICAgICAgKFdlYkNvcmU6OldITFNMOjpjaGVja1N0YXRlbWVudEJlaGF2
aW9yKToKLSAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YXRlbWVudEJlaGF2
aW9yQ2hlY2tlci5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMb29wQ2hlY2tlci5oLgogICAgICAgICAqIFNvdXJj
ZXMudHh0OgogICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
QnVpbHRJblNlbWFudGljLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xCdWlsdEluU2VtYW50aWMuaAppbmRleCA0M2I2OTg2YWY3ZC4uN2IzNmNhYWJjNmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEJ1aWx0SW5TZW1hbnRpYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5oCkBAIC02OSw2ICs2OSw3IEBAIHB1YmxpYzoK
ICAgICBCdWlsdEluU2VtYW50aWMoQnVpbHRJblNlbWFudGljJiYpID0gZGVmYXVsdDsKIAogICAg
IFZhcmlhYmxlIHZhcmlhYmxlKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYWJsZTsgfQorICAgIE9w
dGlvbmFsPHVuc2lnbmVkPiYgdGFyZ2V0SW5kZXgoKSB7IHJldHVybiBtX3RhcmdldEluZGV4OyB9
CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQnVpbHRJblNlbWFudGljJiBvdGhlcikgY29u
c3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKaW5kZXggOGZlZjYyOTU5ZDcuLjAxZjJmZmI4MDZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMRXhwcmVzc2lvbi5oCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKIAogICAgIGNv
bnN0IExleGVyOjpUb2tlbiYgb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KIAot
ICAgIFVubmFtZWRUeXBlKiB0eXBlKCkgeyByZXR1cm4gbV90eXBlID8gJiptX3R5cGUgOiBudWxs
cHRyOyB9CisgICAgVW5uYW1lZFR5cGUqIHJlc29sdmVkVHlwZSgpIHsgcmV0dXJuIG1fdHlwZSA/
ICYqbV90eXBlIDogbnVsbHB0cjsgfQogCiAgICAgdm9pZCBzZXRUeXBlKFVuaXF1ZVJlZjxVbm5h
bWVkVHlwZT4mJiB0eXBlKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24u
aAppbmRleCA1MDgyODU4NDYwNy4uYzE1NDY2YTcwYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlv
bkRlY2xhcmF0aW9uLmgKQEAgLTcwLDYgKzcwLDcgQEAgcHVibGljOgogICAgIGNvbnN0IFVubmFt
ZWRUeXBlJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgVW5uYW1lZFR5cGUm
IHR5cGUoKSB7IHJldHVybiBtX3R5cGU7IH0KICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25z
dCB7IHJldHVybiBtX25hbWU7IH0KKyAgICBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX25hbWU7
IH0KICAgICBib29sIGlzQ2FzdCgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZSA9PSAib3BlcmF0b3Ig
Y2FzdCI7IH0KICAgICBjb25zdCBWYXJpYWJsZURlY2xhcmF0aW9ucyYgcGFyYW1ldGVycygpIGNv
bnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVyczsgfQogICAgIFZhcmlhYmxlRGVjbGFyYXRpb25zJiBw
YXJhbWV0ZXJzKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1
cmVEZWZpbml0aW9uLmgKaW5kZXggNDU2YzZlMTIzOGIuLjAyNjBkNDUwNmE1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVE
ZWZpbml0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oCkBAIC01NSw2ICs1NSwxNSBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBpc1N0cnVjdHVyZURlZmluaXRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0
cnVlOyB9CiAKICAgICBTdHJ1Y3R1cmVFbGVtZW50cyYgc3RydWN0dXJlRWxlbWVudHMoKSB7IHJl
dHVybiBtX3N0cnVjdHVyZUVsZW1lbnRzOyB9CisgICAgU3RydWN0dXJlRWxlbWVudCogZmluZChT
dHJpbmcmIG5hbWUpCisgICAgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gc3RkOjpmaW5kX2lm
KG1fc3RydWN0dXJlRWxlbWVudHMuYmVnaW4oKSwgbV9zdHJ1Y3R1cmVFbGVtZW50cy5lbmQoKSwg
WyZdKFN0cnVjdHVyZUVsZW1lbnQmIHN0cnVjdHVyZUVsZW1lbnQpIC0+IGJvb2wgeworICAgICAg
ICAgICAgcmV0dXJuIHN0cnVjdHVyZUVsZW1lbnQubmFtZSgpID09IG5hbWU7CisgICAgICAgIH0p
OworICAgICAgICBpZiAoaXRlcmF0b3IgPT0gbV9zdHJ1Y3R1cmVFbGVtZW50cy5lbmQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gJippdGVyYXRvcjsKKyAg
ICB9CiAKIHByaXZhdGU6CiAgICAgU3RydWN0dXJlRWxlbWVudHMgbV9zdHJ1Y3R1cmVFbGVtZW50
czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFs
L1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2QxYjA3NjM5MmYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVu
dHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5o
IgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMR2F0aGVyRW50cnlQb2lu
dEl0ZW1zLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKwor
bmFtZXNwYWNlIE1ldGFsIHsKKworRW50cnlQb2ludFNjYWZmb2xkaW5nOjpFbnRyeVBvaW50U2Nh
ZmZvbGRpbmcoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbiwgSW50
cmluc2ljcyYgaW50cmluc2ljcykKKyAgICA6IG1fZnVuY3Rpb25EZWZpbml0aW9uKCZmdW5jdGlv
bkRlZmluaXRpb24pCisgICAgLCBtX2ludHJpbnNpY3MoJmludHJpbnNpY3MpCit7CisgICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgIGdhdGhlckVudHJ5UG9pbnRJdGVtcygqbV9pbnRy
aW5zaWNzLCAqbV9mdW5jdGlvbkRlZmluaXRpb24pOworfQorCitTdHJpbmcgRW50cnlQb2ludFNj
YWZmb2xkaW5nOjpoZWxwZXJUeXBlcygpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
LgorICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIEVudHJ5UG9pbnRTY2FmZm9sZGlu
Zzo6c2lnbmF0dXJlKCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgcmV0
dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgRW50cnlQb2ludFNjYWZmb2xkaW5nOjp1bnBhY2so
KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICByZXR1cm4gU3RyaW5nKCk7
Cit9CisKK1N0cmluZyBFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnBhY2soY29uc3QgU3RyaW5nJikK
K3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgcmV0dXJuIFN0cmluZygpOwor
fQorCit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRT
Y2FmZm9sZGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xYWEy
ZGEzYmM0ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmgKQEAgLTAsMCArMSw2NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsK
KworY2xhc3MgRnVuY3Rpb25EZWZpbml0aW9uOworCit9CisKK2NsYXNzIEludHJpbnNpY3M7CisK
K25hbWVzcGFjZSBNZXRhbCB7CisKKy8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGtub3cgYWJvdXQg
dGhlIHBpcGVsaW5lIHN0YXRlIG9iamVjdCB0byBlbWl0IGZ1bmN0aW9uIHByb2xvZ3VlcyBhbmQg
ZXBpbG9ndWVzLgorY2xhc3MgRW50cnlQb2ludFNjYWZmb2xkaW5nIHsKK3B1YmxpYzoKKyAgICBF
bnRyeVBvaW50U2NhZmZvbGRpbmcoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mLCBJbnRyaW5zaWNz
Jik7CisKKyAgICBTdHJpbmcgaGVscGVyVHlwZXMoKTsKKyAgICBTdHJpbmcgc2lnbmF0dXJlKCk7
CisgICAgU3RyaW5nIHVucGFjaygpOworICAgIFN0cmluZyBwYWNrKGNvbnN0IFN0cmluZyYgdmFy
aWFibGVOYW1lKTsKKworcHJpdmF0ZToKKyAgICBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiogbV9m
dW5jdGlvbkRlZmluaXRpb247CisgICAgSW50cmluc2ljcyogbV9pbnRyaW5zaWNzOworfTsKKwor
fQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41Y2I3OWFlNDQ2NAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dI
TFNMRnVuY3Rpb25Xcml0ZXIuY3BwCkBAIC0wLDAgKzEsNjI4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25Xcml0ZXIuaCIKKworI2lm
IEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oIgor
I2luY2x1ZGUgIldITFNMQXJyYXlUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xBc3NpZ25tZW50RXhw
cmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMQm9vbGVhbkxpdGVyYWwuaCIKKyNpbmNsdWRlICJX
SExTTEJ1aWx0SW5TZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMQ2FsbEV4cHJlc3Npb24uaCIK
KyNpbmNsdWRlICJXSExTTENvbW1hRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRGVyZWZl
cmVuY2VFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xEb1doaWxlTG9vcC5oIgorI2luY2x1
ZGUgIldITFNMRWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNM
RW50cnlQb2ludFNjYWZmb2xkaW5nLmgiCisjaW5jbHVkZSAiV0hMU0xFbnRyeVBvaW50VHlwZS5o
IgorI2luY2x1ZGUgIldITFNMRmxvYXRMaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xGb3JMb29w
LmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hM
U0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTElmU3RhdGVtZW50LmgiCisj
aW5jbHVkZSAiV0hMU0xJbnRlZ2VyTGl0ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMTG9naWNhbEV4
cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hM
U0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmgiCisj
aW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFBv
aW50ZXJUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xS
ZXR1cm4uaCIKKyNpbmNsdWRlICJXSExTTFN3aXRjaENhc2UuaCIKKyNpbmNsdWRlICJXSExTTFN3
aXRjaFN0YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNMVGVybmFyeUV4cHJlc3Npb24uaCIKKyNp
bmNsdWRlICJXSExTTFR5cGVOYW1lci5oIgorI2luY2x1ZGUgIldITFNMVW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorI2luY2x1
ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExT
TFZhcmlhYmxlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisjaW5jbHVk
ZSAiV0hMU0xXaGlsZUxvb3AuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1l
c3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgTWV0YWwgeworCitjbGFzcyBGdW5jdGlvbkRlY2xh
cmF0aW9uV3JpdGVyIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgorICAgIEZ1bmN0aW9uRGVj
bGFyYXRpb25Xcml0ZXIoVHlwZU5hbWVyJiB0eXBlTmFtZXIsIEhhc2hNYXA8QVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uKiwgU3RyaW5nPiYgZnVuY3Rpb25NYXBwaW5nKQorICAgICAgICA6IG1fdHlw
ZU5hbWVyKHR5cGVOYW1lcikKKyAgICAgICAgLCBtX2Z1bmN0aW9uTWFwcGluZyhmdW5jdGlvbk1h
cHBpbmcpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgfkZ1bmN0aW9uRGVjbGFyYXRpb25X
cml0ZXIoKSA9IGRlZmF1bHQ7CisKKyAgICBTdHJpbmcgdG9TdHJpbmcoKSB7IHJldHVybiBtX3N0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsgfQorICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uJiBmdW5jdGlvbkRlY2xhcmF0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
aWYgKGZ1bmN0aW9uRGVjbGFyYXRpb24uZW50cnlQb2ludFR5cGUoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9mdW5jdGlvbk1hcHBpbmcuZmluZCgm
ZnVuY3Rpb25EZWNsYXJhdGlvbik7CisgICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX2Z1bmN0
aW9uTWFwcGluZy5lbmQoKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZnVuY3Rpb25EZWNsYXJhdGlvbi50
eXBlKCkpLCAnICcsIGl0ZXJhdG9yLT52YWx1ZSwgJygnKSk7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIGlmIChpKQorICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQoIiwgIik7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1fdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqZnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClb
aV0udHlwZSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgi
KTtcbiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBUeXBlTmFtZXImIG1fdHlwZU5hbWVyOwor
ICAgIEhhc2hNYXA8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiwgU3RyaW5nPiYgbV9mdW5jdGlv
bk1hcHBpbmc7CisgICAgU3RyaW5nQnVpbGRlciBtX3N0cmluZ0J1aWxkZXI7Cit9OworCitjbGFz
cyBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6Cisg
ICAgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKEludHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVO
YW1lciYgdHlwZU5hbWVyLCBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIFN0cmlu
Zz4mIGZ1bmN0aW9uTWFwcGluZykKKyAgICAgICAgOiBtX2ludHJpbnNpY3MoaW50cmluc2ljcykK
KyAgICAgICAgLCBtX3R5cGVOYW1lcih0eXBlTmFtZXIpCisgICAgICAgICwgbV9mdW5jdGlvbk1h
cHBpbmcoZnVuY3Rpb25NYXBwaW5nKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5GdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXIoKSA9IGRlZmF1bHQ7CisKKyAgICBTdHJpbmcgdG9TdHJpbmco
KSB7IHJldHVybiBtX3N0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsgfQorCisgICAgdm9pZCB2aXNp
dChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9mdW5jdGlvbk1h
cHBpbmcuZmluZCgmbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7CisgICAgICAgIEFTU0VSVChp
dGVyYXRvciAhPSBtX2Z1bmN0aW9uTWFwcGluZy5lbmQoKSk7CisgICAgICAgIG1fc3RyaW5nQnVp
bGRlci5hcHBlbmQod3JpdGVOYXRpdmVGdW5jdGlvbihuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LCBpdGVyYXRvci0+dmFsdWUsIG1fdHlwZU5hbWVyKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNp
dChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fZnVuY3Rpb25NYXBwaW5nLmZpbmQoJmZ1
bmN0aW9uRGVmaW5pdGlvbik7CisgICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX2Z1bmN0aW9u
TWFwcGluZy5lbmQoKSk7CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24uZW50cnlQb2lu
dFR5cGUoKSkgeworICAgICAgICAgICAgbV9lbnRyeVBvaW50U2NhZmZvbGRpbmcgPSBFbnRyeVBv
aW50U2NhZmZvbGRpbmcoZnVuY3Rpb25EZWZpbml0aW9uLCBtX2ludHJpbnNpY3MpOworICAgICAg
ICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtX2VudHJ5UG9pbnRTY2FmZm9sZGluZy0+aGVs
cGVyVHlwZXMoKSk7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwor
ICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fZW50cnlQb2lu
dFNjYWZmb2xkaW5nLT5zaWduYXR1cmUoKSwgIiB7IikpOworICAgICAgICAgICAgbV9zdHJpbmdC
dWlsZGVyLmFwcGVuZChtX2VudHJ5UG9pbnRTY2FmZm9sZGluZy0+dW5wYWNrKCkpOworICAgICAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygpKTsKKyAg
ICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgbV9lbnRyeVBvaW50U2NhZmZvbGRpbmcgPSBXVEY6Om51bGxvcHQ7Cisg
ICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkpLCAnICcsIGl0ZXJh
dG9yLT52YWx1ZSwgJygnKSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1
bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvJiBwYXJhbWV0ZXIgPSBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ld
OworICAgICAgICAgICAgICAgIGlmIChpKQorICAgICAgICAgICAgICAgICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKCIsICIpOworICAgICAgICAgICAgICAgIGF1dG8gcGFyYW1ldGVyTmFtZSA9
IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICAgICAgICAgIGF1dG8gYWRkUmVz
dWx0ID0gbV92YXJpYWJsZU1hcHBpbmcuYWRkKCZwYXJhbWV0ZXIsIHBhcmFtZXRlck5hbWUpOwor
ICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdF
bnRyeSk7CisgICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqcGFyYW1ldGVyLnR5cGUoKSksICcgJywg
cGFyYW1ldGVyTmFtZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZCgiKSB7XG4iKTsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmdW5j
dGlvbkRlZmluaXRpb24uYmxvY2soKSk7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKCJ9XG4iKTsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHZpc2l0
KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3RhdGVtZW50
JiBzdGF0ZW1lbnQpIG92ZXJyaWRlCisgICAgeworICAgICAgICBWaXNpdG9yOjp2aXNpdChzdGF0
ZW1lbnQpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpCbG9jayYgYmxvY2spIG92ZXJy
aWRlCisgICAgeworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ7XG4iKTsKKyAgICAg
ICAgZm9yIChhdXRvJiBzdGF0ZW1lbnQgOiBibG9jay5zdGF0ZW1lbnRzKCkpCisgICAgICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGVtZW50KTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZCgifVxuIik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkJyZWFrJikgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoImJyZWFrO1xuIik7
CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkNvbnRpbnVlJikgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IHdoaWNoIGxvb3Agd2UncmUgaW4sIGFuZCBy
dW4gdGhlIGluY3JlbWVudCBjb2RlCisgICAgICAgIENSQVNIKCk7CisgICAgfQorCisgICAgdm9p
ZCB2aXNpdChBU1Q6OkRvV2hpbGVMb29wJiBkb1doaWxlTG9vcCkgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoImRvIHtcbiIpOworICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoZG9XaGlsZUxvb3AuYm9keSgpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGRvV2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcoImlmICghIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiKSBicmVhaztc
biIpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ9IHdoaWxl
KHRydWUpO1xuIikpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpFZmZlY3RmdWxFeHBy
ZXNzaW9uU3RhdGVtZW50JiBlZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50KSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0
ZW1lbnQuZWZmZWN0ZnVsRXhwcmVzc2lvbigpKTsKKyAgICAgICAgbV9zdGFjay50YWtlTGFzdCgp
OyAvLyBUaGUgc3RhdGVtZW50IGlzIGFscmVhZHkgZWZmZWN0ZnVsLCBzbyB3ZSBkb24ndCBuZWVk
IHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdC4KKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6RmFsbHRocm91Z2gmKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZCgiW1tjbGFuZzo6ZmFsbHRocm91Z2hdXTtcbiIpOyAvLyBGSVhNRTogTWFrZSBz
dXJlIHRoaXMgaXMgb2theS4gQWx0ZXJuYXRpdmVseSwgd2UgY291bGQgZG8gdGhpbmcgYW5kIGp1
c3QgcmV0dXJuIGhlcmUgaW5zdGVhZC4KKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6Rm9y
TG9vcCYgZm9yTG9vcCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFdURjo6dmlzaXQoV1RGOjpt
YWtlVmlzaXRvcihbJl0oQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYgdmFyaWFi
bGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpIHsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dCh2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCk7CisgICAgICAgIH0sIFsmXShVbmlxdWVS
ZWY8QVNUOjpFeHByZXNzaW9uPiYgZXhwcmVzc2lvbikgeworICAgICAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGV4cHJlc3Npb24pOworICAgICAgICAgICAgbV9zdGFjay50YWtlTGFzdCgpOyAv
LyBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdC4KKyAgICAgICAg
fSksIGZvckxvb3AuaW5pdGlhbGl6YXRpb24oKSk7CisKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZCgiZm9yICggOyA7ICkge1xuIik7CisgICAgICAgIGlmIChmb3JMb29wLmNvbmRpdGlv
bigpKSB7CisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmZvckxvb3AuY29uZGl0aW9u
KCkpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJpZiAo
ISIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIikgYnJlYWs7XG4iKSk7CisgICAgICAgIH0KKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KGZvckxvb3AuYm9keSgpKTsKKyAgICAgICAgaWYgKGZvckxv
b3AuaW5jcmVtZW50KCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmZvckxvb3Au
aW5jcmVtZW50KCkpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAg
ICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQmIGlmU3RhdGVtZW50KSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGlmU3RhdGVtZW50LmNvbmRp
dGlvbmFsKCkpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImlm
ICgiLCBtX3N0YWNrLnRha2VMYXN0KCksICIpIHtcbiIpKTsKKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KGlmU3RhdGVtZW50LmJvZHkoKSk7CisgICAgICAgIGlmIChpZlN0YXRlbWVudC5lbHNl
Qm9keSgpKSB7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9IGVsc2Uge1xu
Iik7CisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmlmU3RhdGVtZW50LmVsc2VCb2R5
KCkpOworICAgICAgICB9CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOwor
ICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpSZXR1cm4mIHJldHVyblN0YXRlbWVudCkgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGlmIChyZXR1cm5TdGF0ZW1lbnQudmFsdWUoKSkgeworICAg
ICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpyZXR1cm5TdGF0ZW1lbnQudmFsdWUoKSk7Cisg
ICAgICAgICAgICBpZiAobV9lbnRyeVBvaW50U2NhZmZvbGRpbmcpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAg
ICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobV9lbnRyeVBvaW50U2NhZmZvbGRpbmct
PnBhY2sodmFyaWFibGVOYW1lKSk7CisgICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKCJyZXR1cm4gIiwgdmFyaWFibGVOYW1lLCAiO1xuIikpOworICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKCJyZXR1cm4gIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiO1xuIikpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoInJldHVybjtcbiIpOwor
ICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQmIHN3aXRjaFN0YXRl
bWVudCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzd2l0Y2hT
dGF0ZW1lbnQudmFsdWUoKSk7CisKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKCJzd2l0Y2ggKCIsIG1fc3RhY2sudGFrZUxhc3QoKSwgIikgeyIpKTsKKyAgICAgICAg
Zm9yIChhdXRvJiBzd2l0Y2hDYXNlIDogc3dpdGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKCkpCisg
ICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3dpdGNoQ2FzZSk7CisgICAgICAgIG1fc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpT
d2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKHN3aXRj
aENhc2UudmFsdWUoKSkKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZygiY2FzZSAiLCBjb25zdGFudEV4cHJlc3Npb25TdHJpbmcoKnN3aXRjaENhc2UudmFsdWUo
KSksICI6XG4iKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQoImRlZmF1bHQ6XG4iKTsKKyAgICAgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgd2hldGhl
ciB3ZSBuZWVkIHRvIGJyZWFrIG9yIGZhbGx0aHJvdWdoLgorICAgICAgICBDUkFTSCgpOworICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3dpdGNoQ2FzZS5ibG9jaygpKTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6VHJhcCYpIG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRoaXMKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRp
b25zU3RhdGVtZW50KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQodmFy
aWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNU
OjpXaGlsZUxvb3AmIHdoaWxlTG9vcCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fc3RyaW5n
QnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygid2hpbGUgKHRydWUpIHtcbiIpKTsKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKKyAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJpZiAoISIsIG1fc3RhY2sudGFrZUxhc3Qo
KSwgIikgYnJlYWs7XG4iKSk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3Au
Ym9keSgpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgfQor
CisgICAgdm9pZCB2aXNpdChBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChpbnRlZ2VyTGl0ZXJhbC5yZXNvbHZlZFR5cGUo
KSk7CisgICAgICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1l
KCk7CisgICAgICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5h
bWVGb3JUeXBlKCppbnRlZ2VyTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIG1fc3Ry
aW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFi
bGVOYW1lLCAiID0gc3RhdGljX2Nhc3Q8IiwgbWFuZ2xlZFR5cGVOYW1lLCAiPigiLCBpbnRlZ2Vy
TGl0ZXJhbC52YWx1ZSgpLCAiKTtcbiIpKTsKKyAgICAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFi
bGVOYW1lKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFT
U0VSVCh1bnNpZ25lZEludGVnZXJMaXRlcmFsLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgYXV0
byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAgICAgYXV0
byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKnVuc2ln
bmVkSW50ZWdlckxpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwg
IiA9IHN0YXRpY19jYXN0PCIsIG1hbmdsZWRUeXBlTmFtZSwgIj4oIiwgdW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbC52YWx1ZSgpLCAiKTtcbiIpKTsKKyAgICAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFi
bGVOYW1lKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsJiBmbG9h
dExpdGVyYWwpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQoZmxvYXRMaXRlcmFsLnJl
c29sdmVkVHlwZSgpKTsKKyAgICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRW
YXJpYWJsZU5hbWUoKTsKKyAgICAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUoKmZsb2F0TGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CisgICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcg
JywgdmFyaWFibGVOYW1lLCAiID0gc3RhdGljX2Nhc3Q8IiwgbWFuZ2xlZFR5cGVOYW1lLCAiPigi
LCBmbG9hdExpdGVyYWwudmFsdWUoKSwgIik7XG4iKSk7CisgICAgICAgIG1fc3RhY2suYXBwZW5k
KHZhcmlhYmxlTmFtZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6Ok51bGxMaXRlcmFs
JiBudWxsTGl0ZXJhbCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChudWxsTGl0ZXJh
bC5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IG51bGxMaXRlcmFs
LnJlc29sdmVkVHlwZSgpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgQVNTRVJUKGlzPEFTVDo6VW5u
YW1lZFR5cGU+KHVuaWZ5Tm9kZSkpOworICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25j
YXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAgIGJvb2wgaXNBcnJheVJl
ZmVyZW5jZVR5cGUgPSBpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpOwor
CisgICAgICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7
CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKm51bGxMaXRlcmFsLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJp
YWJsZU5hbWUsICIgPSAiKSk7CisgICAgICAgIGlmIChpc0FycmF5UmVmZXJlbmNlVHlwZSkKKyAg
ICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoInsgbnVsbHB0ciwgMCB9Iik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIm51bGxwdHIiKTsK
KyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiO1xuIik7CisgICAgICAgIG1fc3RhY2su
YXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkJvb2xl
YW5MaXRlcmFsJiBib29sZWFuTGl0ZXJhbCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VS
VChib29sZWFuTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIGF1dG8gdmFyaWFibGVO
YW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAgIGF1dG8gbWFuZ2xlZFR5
cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpib29sZWFuTGl0ZXJhbC5y
ZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0gc3RhdGljX2Nhc3Q8Iiwg
bWFuZ2xlZFR5cGVOYW1lLCAiPigiLCBib29sZWFuTGl0ZXJhbC52YWx1ZSgpID8gInRydWUiIDog
ImZhbHNlIiwgIik7XG4iKSk7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7
CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYg
ZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIEFTU0VS
VChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25EZWZpbml0aW9uKCkpOworICAg
ICAgICBBU1NFUlQoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uRGVmaW5pdGlv
bigpKTsKKyAgICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5h
bWUoKTsKKyAgICAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoKmVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7Cisg
ICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUs
ICcgJywgdmFyaWFibGVOYW1lLCAiID0gIiwgbWFuZ2xlZFR5cGVOYW1lLCAnLicsIG1fdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yRW51bWVyYXRpb25NZW1iZXIoKmVudW1lcmF0aW9uTWVtYmVyTGl0
ZXJhbC5lbnVtZXJhdGlvbk1lbWJlcigpKSwgIjtcbiIpKTsKKyAgICAgICAgbV9zdGFjay5hcHBl
bmQodmFyaWFibGVOYW1lKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RXhwcmVzc2lv
biYgZXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KGV4
cHJlc3Npb24pOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJikg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIGxvd2VyZWQgYWxyZWFk
eS4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgdm9pZCB2aXNp
dChBU1Q6OkluZGV4RXhwcmVzc2lvbiYpIG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBUaGlz
IHNob3VsZCBiZSBsb3dlcmVkIGFscmVhZHkuCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24m
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
CisgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFy
YXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQodmFyaWFibGVEZWNsYXJhdGlv
bi50eXBlKCkpOworICAgICAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigp
KQorICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCp2YXJpYWJsZURlY2xhcmF0aW9uLmlu
aXRpYWxpemVyKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBaZXJv
LWZpbGwgdGhlIHZhcmlhYmxlLgorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQorICAg
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHF1YWxpZmllcnMuCisgICAgICAgIGF1dG8gdmFyaWFi
bGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAgIGF1dG8gYWRkUmVz
dWx0ID0gbV92YXJpYWJsZU1hcHBpbmcuYWRkKCZ2YXJpYWJsZURlY2xhcmF0aW9uLCB2YXJpYWJs
ZU5hbWUpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3
RW50cnkpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCp2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSksICcg
JywgdmFyaWFibGVOYW1lLCAiID0gIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiO1xuIikpOworICAg
ICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIH0KKworICAgIHZvaWQgdmlz
aXQoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pIG92ZXJy
aWRlCisgICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Np
b24ubGVmdCgpKTsKKyAgICAgICAgYXV0byBsZWZ0TmFtZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsK
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkp
OworICAgICAgICBhdXRvIHJpZ2h0TmFtZSA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKGxlZnROYW1lLCAiID0gIiwgcmlnaHRO
YW1lLCAiO1xuIikpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lv
biYgY2FsbEV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBWZWN0b3I8U3RyaW5n
PiBhcmd1bWVudE5hbWVzOworICAgICAgICBmb3IgKGF1dG8mIGFyZ3VtZW50IDogY2FsbEV4cHJl
c3Npb24uYXJndW1lbnRzKCkpIHsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhcmd1
bWVudCk7CisgICAgICAgICAgICBhcmd1bWVudE5hbWVzLmFwcGVuZChtX3N0YWNrLnRha2VMYXN0
KCkpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChjYWxsRXhwcmVzc2lvbi5yZXNvbHZlZFR5
cGUoKSk7CisgICAgICAgIEFTU0VSVChjYWxsRXhwcmVzc2lvbi5mdW5jdGlvbigpKTsKKyAgICAg
ICAgYXV0byBpdGVyYXRvciA9IG1fZnVuY3Rpb25NYXBwaW5nLmZpbmQoY2FsbEV4cHJlc3Npb24u
ZnVuY3Rpb24oKSk7CisgICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX2Z1bmN0aW9uTWFwcGlu
Zy5lbmQoKSk7CisgICAgICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFi
bGVOYW1lKCk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmNhbGxFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgp
KSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSAiLCBpdGVyYXRvci0+dmFsdWUsICcoJykpOworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50TmFtZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChpKQorICAgICAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQoIiwgIik7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKGFyZ3VtZW50TmFt
ZXNbaV0pOworICAgICAgICB9CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIik7XG4i
KTsKKyAgICAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICB9CisKKyAgICB2
b2lkIHZpc2l0KEFTVDo6Q29tbWFFeHByZXNzaW9uJiBjb21tYUV4cHJlc3Npb24pIG92ZXJyaWRl
CisgICAgeworICAgICAgICBTdHJpbmcgcmVzdWx0OworICAgICAgICBmb3IgKGF1dG8mIGV4cHJl
c3Npb24gOiBjb21tYUV4cHJlc3Npb24ubGlzdCgpKSB7CisgICAgICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoZXhwcmVzc2lvbik7CisgICAgICAgICAgICByZXN1bHQgPSBtX3N0YWNrLnRha2VM
YXN0KCk7CisgICAgICAgIH0KKyAgICAgICAgbV9zdGFjay5hcHBlbmQocmVzdWx0KTsKKyAgICB9
CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJiBkZXJlZmVyZW5j
ZUV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
ZGVyZWZlcmVuY2VFeHByZXNzaW9uLnBvaW50ZXIoKSk7CisgICAgICAgIGF1dG8gcmlnaHQgPSBt
X3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIEFTU0VSVChkZXJlZmVyZW5jZUV4cHJlc3Npb24u
cmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4
dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpkZXJlZmVyZW5jZUV4cHJlc3Npb24u
cmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICoiLCByaWdodCwgIjtcbiIp
KTsKKyAgICAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICB9CisKKyAgICB2
b2lkIHZpc2l0KEFTVDo6TG9naWNhbEV4cHJlc3Npb24mIGxvZ2ljYWxFeHByZXNzaW9uKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGxvZ2ljYWxFeHByZXNzaW9u
LmxlZnQoKSk7CisgICAgICAgIGF1dG8gbGVmdCA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KGxvZ2ljYWxFeHByZXNzaW9uLnJpZ2h0KCkpOworICAgICAg
ICBhdXRvIHJpZ2h0ID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgICAgICBBU1NFUlQobG9naWNh
bEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9
IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpsb2dpY2FsRXhw
cmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gIiwgbGVmdCwg
JyAnKSk7CisgICAgICAgIHN3aXRjaCAobG9naWNhbEV4cHJlc3Npb24udHlwZSgpKSB7CisgICAg
ICAgIGNhc2UgQVNUOjpMb2dpY2FsRXhwcmVzc2lvbjo6VHlwZTo6QW5kOgorICAgICAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiJiYiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUKGxvZ2ljYWxFeHByZXNzaW9uLnR5cGUoKSA9
PSBBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uOjpUeXBlOjpPcik7CisgICAgICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKCJ8fCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCcgJywgcmlnaHQsICI7XG4i
KSk7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgfQorCisgICAg
dm9pZCB2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJiBsb2dpY2FsTm90RXhwcmVzc2lv
bikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChsb2dpY2FsTm90
RXhwcmVzc2lvbi5vcGVyYW5kKCkpOworICAgICAgICBhdXRvIG9wZXJhbmQgPSBtX3N0YWNrLnRh
a2VMYXN0KCk7CisgICAgICAgIEFTU0VSVChsb2dpY2FsTm90RXhwcmVzc2lvbi5yZXNvbHZlZFR5
cGUoKSk7CisgICAgICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVO
YW1lKCk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmxvZ2ljYWxOb3RFeHByZXNzaW9uLnJlc29sdmVkVHlw
ZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSAhIiwgb3BlcmFuZCwgIjtcbiIpKTsKKyAgICAg
ICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFycmF5UmVmZXJlbmNlRXhw
cmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtl
QXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICAgICAgYXV0byBsVmFsdWUg
PSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIEFTU0VSVChtYWtlQXJyYXlSZWZlcmVuY2VF
eHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBn
ZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUg
PSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24ucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4o
Km1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpKQorICAgICAgICAg
ICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAn
LCB2YXJpYWJsZU5hbWUsICIgPSB7ICIsIGxWYWx1ZSwgIiwgMSB9O1xuIikpOworICAgICAgICBl
bHNlIGlmIChpczxBU1Q6OkFycmF5VHlwZT4oKm1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24u
cmVzb2x2ZWRUeXBlKCkpKSB7CisgICAgICAgICAgICBhdXRvJiBhcnJheVR5cGUgPSBkb3duY2Fz
dDxBU1Q6OkFycmF5VHlwZT4oKm1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRU
eXBlKCkpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1h
bmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSB7ICYoIiwgbFZhbHVlLCAiWzBd
KSwgIiwgYXJyYXlUeXBlLm51bUVsZW1lbnRzKCksICIgfTtcbiIpKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5
cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHsgJiIsIGxWYWx1ZSwgIiwgMSB9O1xuIikp
OworICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIH0KKworICAgIHZv
aWQgdmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lv
bikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlUG9pbnRl
ckV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgICAgICBhdXRvIGxWYWx1ZSA9IG1fc3RhY2sudGFr
ZUxhc3QoKTsKKyAgICAgICAgQVNTRVJUKG1ha2VQb2ludGVyRXhwcmVzc2lvbi5yZXNvbHZlZFR5
cGUoKSk7CisgICAgICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVO
YW1lKCk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm1ha2VQb2ludGVyRXhwcmVzc2lvbi5yZXNvbHZlZFR5
cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gJiIsIGxWYWx1ZSwgIjtcbiIpKTsKKyAgICAg
ICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1lKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICAvLyBUaGlzIHNob3VsZCBiZSBsb3dlcmVkIGFscmVhZHkuCisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lv
biYgdGVybmFyeUV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQodGVybmFyeUV4cHJlc3Npb24ucHJlZGljYXRlKCkpOworICAgICAgICBhdXRvIGNo
ZWNrID0gbV9zdGFjay50YWtlTGFzdCgpOworCisgICAgICAgIEFTU0VSVCh0ZXJuYXJ5RXhwcmVz
c2lvbi5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJh
dGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKnRlcm5hcnlFeHByZXNzaW9u
LnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICI7XG4iKSk7CisKKyAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJpZiAoIiwgY2hlY2ssICIpIHtcbiIp
KTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLmJvZHlFeHBy
ZXNzaW9uKCkpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcodmFy
aWFibGVOYW1lLCAiID0gIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiO1xuIikpOworICAgICAgICBt
X3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9IGVsc2Uge1xuIik7CisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5lbHNlRXhwcmVzc2lvbigpKTsKKyAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKHZhcmlhYmxlTmFtZSwgIiA9ICIsIG1fc3Rh
Y2sudGFrZUxhc3QoKSwgIjtcbiIpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgi
fVxuIik7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgfQorCisg
ICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJiB2YXJpYWJsZVJlZmVyZW5jZSkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVCh2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJs
ZSgpKTsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fdmFyaWFibGVNYXBwaW5nLmZpbmQodmFy
aWFibGVSZWZlcmVuY2UudmFyaWFibGUoKSk7CisgICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBt
X3ZhcmlhYmxlTWFwcGluZy5lbmQoKSk7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKGl0ZXJhdG9y
LT52YWx1ZSk7CisgICAgfQorCisgICAgU3RyaW5nIGNvbnN0YW50RXhwcmVzc2lvblN0cmluZyhB
U1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYgY29uc3RhbnRFeHByZXNzaW9uKQorICAgIHsKKyAgICAg
ICAgU3RyaW5nIHJlc3VsdDsKKyAgICAgICAgY29uc3RhbnRFeHByZXNzaW9uLnZpc2l0KFdURjo6
bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSB7Cisg
ICAgICAgICAgICByZXN1bHQgPSBtYWtlU3RyaW5nKCIiLCBpbnRlZ2VyTGl0ZXJhbC52YWx1ZSgp
KTsKKyAgICAgICAgfSwgWyZdKEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgcmVzdWx0ID0gbWFrZVN0cmluZygiIiwgdW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpKTsKKyAgICAgICAgfSwgWyZdKEFTVDo6RmxvYXRM
aXRlcmFsJiBmbG9hdExpdGVyYWwpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1ha2VTdHJpbmco
IiIsIGZsb2F0TGl0ZXJhbC52YWx1ZSgpKTsKKyAgICAgICAgfSwgWyZdKEFTVDo6TnVsbExpdGVy
YWwmKSB7CisgICAgICAgICAgICByZXN1bHQgPSAibnVsbHB0ciJfc3RyOworICAgICAgICB9LCBb
Jl0oQVNUOjpCb29sZWFuTGl0ZXJhbCYgYm9vbGVhbkxpdGVyYWwpIHsKKyAgICAgICAgICAgIHJl
c3VsdCA9IGJvb2xlYW5MaXRlcmFsLnZhbHVlKCkgPyAidHJ1ZSJfc3RyIDogImZhbHNlIl9zdHI7
CisgICAgICAgIH0sIFsmXShBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYgZW51bWVyYXRp
b25NZW1iZXJMaXRlcmFsKSB7CisgICAgICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25NZW1iZXJM
aXRlcmFsLmVudW1lcmF0aW9uRGVmaW5pdGlvbigpKTsKKyAgICAgICAgICAgIEFTU0VSVChlbnVt
ZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25EZWZpbml0aW9uKCkpOworICAgICAgICAg
ICAgcmVzdWx0ID0gbWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmVu
dW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbkRlZmluaXRpb24oKSksICcuJywgbV90
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJlcigqZW51bWVyYXRpb25NZW1i
ZXJMaXRlcmFsLmVudW1lcmF0aW9uTWVtYmVyKCkpKTsKKyAgICAgICAgfSkpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIFN0cmluZyBnZW5lcmF0ZU5leHRWYXJpYWJsZU5h
bWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoInZhcmlhYmxlIiwgbV92YXJp
YWJsZUNvdW50KyspOworICAgIH0KKworcHJpdmF0ZToKKyAgICBJbnRyaW5zaWNzJiBtX2ludHJp
bnNpY3M7CisgICAgVHlwZU5hbWVyJiBtX3R5cGVOYW1lcjsKKyAgICBIYXNoTWFwPEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbiosIFN0cmluZz4mIG1fZnVuY3Rpb25NYXBwaW5nOworICAgIEhhc2hN
YXA8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKiwgU3RyaW5nPiBtX3ZhcmlhYmxlTWFwcGluZzsK
KyAgICBTdHJpbmdCdWlsZGVyIG1fc3RyaW5nQnVpbGRlcjsKKyAgICBWZWN0b3I8U3RyaW5nPiBt
X3N0YWNrOworICAgIE9wdGlvbmFsPEVudHJ5UG9pbnRTY2FmZm9sZGluZz4gbV9lbnRyeVBvaW50
U2NhZmZvbGRpbmc7CisgICAgdW5zaWduZWQgbV92YXJpYWJsZUNvdW50IHsgMCB9OworfTsKKwor
U3RyaW5nIG1ldGFsRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0sIFR5cGVOYW1lciYgdHlwZU5h
bWVyKQoreworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKworICAgIHVuc2lnbmVk
IG51bUZ1bmN0aW9ucyA9IDA7CisgICAgSGFzaE1hcDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24q
LCBTdHJpbmc+IGZ1bmN0aW9uTWFwcGluZzsKKyAgICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkpIHsKKyAg
ICAgICAgYXV0byBhZGRSZXN1bHQgPSBmdW5jdGlvbk1hcHBpbmcuYWRkKCZuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLCBtYWtlU3RyaW5nKCJmdW5jdGlvbiIsIG51bUZ1bmN0aW9ucysrKSk7Cisg
ICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Cisg
ICAgfQorICAgIGZvciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlv
bkRlZmluaXRpb25zKCkpIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBmdW5jdGlvbk1hcHBp
bmcuYWRkKCZmdW5jdGlvbkRlZmluaXRpb24sIG1ha2VTdHJpbmcoImZ1bmN0aW9uIiwgbnVtRnVu
Y3Rpb25zKyspKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5p
c05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb25X
cml0ZXIgZnVuY3Rpb25EZWNsYXJhdGlvbldyaXRlcih0eXBlTmFtZXIsIGZ1bmN0aW9uTWFwcGlu
Zyk7CisgICAgICAgIGZvciAoYXV0byYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dy
YW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSkKKyAgICAgICAgICAgIGZ1bmN0aW9uRGVj
bGFyYXRpb25Xcml0ZXIudmlzaXQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7CisgICAgICAg
IGZvciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRp
b25zKCkpIHsKKyAgICAgICAgICAgIGlmICghZnVuY3Rpb25EZWZpbml0aW9uLT5lbnRyeVBvaW50
VHlwZSgpKQorICAgICAgICAgICAgICAgIGZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXIudmlzaXQo
ZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChmdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyLnRvU3RyaW5nKCkpOworICAgIH0KKworICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOworCisgICAgeworICAgICAgICBGdW5jdGlvbkRl
ZmluaXRpb25Xcml0ZXIgZnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKHByb2dyYW0uaW50cmluc2lj
cygpLCB0eXBlTmFtZXIsIGZ1bmN0aW9uTWFwcGluZyk7CisgICAgICAgIGZvciAoYXV0byYgbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bnMoKSkKKyAgICAgICAgICAgIGZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlci52aXNpdChuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uKTsKKyAgICAgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRp
b24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkKKyAgICAgICAgICAgIGZ1bmN0aW9u
RGVmaW5pdGlvbldyaXRlci52aXNpdChmdW5jdGlvbkRlZmluaXRpb24pOworICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChmdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIudG9TdHJpbmcoKSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgTWV0YWwKKworfSAvLyBuYW1lc3BhY2UgV0hMU0wKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTk2MGU1ZTQ4ZDUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0
aW9uV3JpdGVyLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ug
V0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCituYW1lc3BhY2UgTWV0YWwgeworCitjbGFzcyBU
eXBlTmFtZXI7CisKK1N0cmluZyBtZXRhbEZ1bmN0aW9ucyhQcm9ncmFtJiwgVHlwZU5hbWVyJik7
CisKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENvZGVHZW5l
cmF0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wMjc3YmU1
ZGRhZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML01ldGFsL1dITFNMTWV0YWxDb2RlR2VuZXJhdG9yLmNwcApAQCAtMCwwICsxLDY4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMTWV0YWxDb2Rl
R2VuZXJhdG9yLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xGdW5j
dGlvbldyaXRlci5oIgorI2luY2x1ZGUgIldITFNMVHlwZU5hbWVyLmgiCisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFj
ZSBXSExTTCB7CisKK25hbWVzcGFjZSBNZXRhbCB7CisKK1N0cmluZyBnZW5lcmF0ZU1ldGFsQ29k
ZShQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsK
KyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiLy8gVGhpcyB3YXMgZ2VuZXJhdGVkIGJ5IFdlYktp
dCdzIFdITFNMIC0+IE1TTCBjb2RlIGdlbmVyYXRvci4gRG8gbm90IGVkaXQhXG4iKTsKKyAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgiXG4iKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiI2lu
Y2x1ZGUgPG1ldGFsX3N0ZGxpYj5cbiIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIjaW5j
bHVkZSA8bWV0YWxfYXRvbWljPlxuIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiNpbmNs
dWRlIDxtZXRhbF9tYXRoPlxuIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiNpbmNsdWRl
IDxtZXRhbF9yZWxhdGlvbmFsPlxuIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiNpbmNs
dWRlIDxtZXRhbF9jb21wdXRlPlxuIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiNpbmNs
dWRlIDxtZXRhbF90ZXh0dXJlPlxuIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIlxuIik7
CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoInVzaW5nIG5hbWVzcGFjZSBtZXRhbDtcbiIpOwor
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcbiIpOworCisgICAgVHlwZU5hbWVyIHR5cGVOYW1l
cihwcm9ncmFtKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0eXBlTmFtZXIubWV0YWxUeXBl
cygpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtZXRhbEZ1bmN0aW9ucyhwcm9ncmFtLCB0
eXBlTmFtZXIpKTsKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQorCit9
CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWV0YWxDb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lMDg4ZTAxMDQ0OQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFs
L1dITFNMTWV0YWxDb2RlR2VuZXJhdG9yLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7
CisKK2NsYXNzIFByb2dyYW07CisKK25hbWVzcGFjZSBNZXRhbCB7CisKKy8vIEZJWE1FOiBUaGlz
IG5lZWRzIHRvIGtub3cgYWJvdXQgdGhlIHBpcGVsaW5lIHN0YXRlIG9iamVjdCB0byBlbWl0IGZ1
bmN0aW9uIHByb2xvZ3VlcyBhbmQgZXBpbG9ndWVzLgorU3RyaW5nIGdlbmVyYXRlTWV0YWxDb2Rl
KFByb2dyYW0mKTsKKworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3Jp
dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
TmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5iZmZlYzYzMWI3YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwCkBA
IC0wLDAgKzEsMzk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisK
KyNpbmNsdWRlICJXSExTTEFkZHJlc3NTcGFjZS5oIgorI2luY2x1ZGUgIldITFNMTmFtZWRUeXBl
LmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCisjaW5jbHVk
ZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVOYW1l
ci5oIgorI2luY2x1ZGUgIldITFNMVW5uYW1lZFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFZhcmlh
YmxlRGVjbGFyYXRpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hM
U0wgeworCituYW1lc3BhY2UgTWV0YWwgeworCitzdGF0aWMgU3RyaW5nIGdldE5hdGl2ZU5hbWUo
QVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIFR5cGVOYW1lciYgdHlwZU5hbWVyKQorewor
ICAgIEFTU0VSVChpczxBU1Q6Ok5hbWVkVHlwZT4odW5uYW1lZFR5cGUudW5pZnlOb2RlKCkpKTsK
KyAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5uYW1lZFR5
cGUudW5pZnlOb2RlKCkpOworICAgIEFTU0VSVChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
bj4obmFtZWRUeXBlKSk7CisgICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNh
c3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSk7CisgICAgcmV0dXJuIHR5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKK30KKwor
c3RhdGljIFN0cmluZyBtYXBGdW5jdGlvbk5hbWUoU3RyaW5nJiBmdW5jdGlvbk5hbWUpCit7Cisg
ICAgaWYgKGZ1bmN0aW9uTmFtZSA9PSAiZGR4IikKKyAgICAgICAgcmV0dXJuICJkZmR4Il9zdHI7
CisgICAgaWYgKGZ1bmN0aW9uTmFtZSA9PSAiZGR5IikKKyAgICAgICAgcmV0dXJuICJkZmR5Il9z
dHI7CisgICAgaWYgKGZ1bmN0aW9uTmFtZSA9PSAiYXNpbnQiKQorICAgICAgICByZXR1cm4gImFz
X3R5cGU8aW50MzJfdD4iX3N0cjsKKyAgICBpZiAoZnVuY3Rpb25OYW1lID09ICJhc3VpbnQiKQor
ICAgICAgICByZXR1cm4gImFzX3R5cGU8dWludDMyX3Q+Il9zdHI7CisgICAgaWYgKGZ1bmN0aW9u
TmFtZSA9PSAiYXNmbG9hdCIpCisgICAgICAgIHJldHVybiAiYXNfdHlwZTxmbG9hdD4iX3N0cjsK
KyAgICByZXR1cm4gZnVuY3Rpb25OYW1lOworfQorCitzdGF0aWMgU3RyaW5nIGNvbnZlcnRBZGRy
ZXNzU3BhY2UoQVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKQoreworICAgIHN3aXRjaCAo
YWRkcmVzc1NwYWNlKSB7CisgICAgY2FzZSBBU1Q6OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ6Cisg
ICAgICAgIHJldHVybiAiY29uc3RhbnQiX3N0cjsKKyAgICBjYXNlIEFTVDo6QWRkcmVzc1NwYWNl
OjpEZXZpY2U6CisgICAgICAgIHJldHVybiAiZGV2aWNlIl9zdHI7CisgICAgY2FzZSBBU1Q6OkFk
ZHJlc3NTcGFjZTo6VGhyZWFkZ3JvdXA6CisgICAgICAgIHJldHVybiAidGhyZWFkZ3JvdXAiX3N0
cjsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlQoYWRkcmVzc1NwYWNlID09IEFTVDo6QWRk
cmVzc1NwYWNlOjpUaHJlYWQpOworICAgICAgICByZXR1cm4gInRocmVhZCJfc3RyOworICAgIH0K
K30KKworU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLCBTdHJpbmcmIG91dHB1dEZ1bmN0aW9u
TmFtZSwgVHlwZU5hbWVyJiB0eXBlTmFtZXIpCit7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdC
dWlsZGVyOworICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmlzQ2FzdCgpKSB7Cisg
ICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXpl
KCkgPT0gMSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gZ2V0TmF0aXZlTmFt
ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLCB0eXBl
TmFtZXIpOworICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IGdldE5hdGl2ZU5hbWUobmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCksIHR5cGVOYW1lcik7CisgICAgICAgIGlmICht
ZXRhbFBhcmFtZXRlck5hbWUgIT0gImF0b21pY19pbnQiX3N0ciAmJiBtZXRhbFBhcmFtZXRlck5h
bWUgIT0gImF0b21pY191aW50Il9zdHIpIHsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwg
JygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICJ4KSB7XG4iKSk7CisgICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuIHN0YXRpY19jYXN0PCIsIG1ldGFs
UmV0dXJuTmFtZSwgIj4oeCk7XG4iKSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgifVxuIik7CisgICAgICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwor
ICAgICAgICB9CisKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRh
bFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVy
TmFtZSwgIngpIHtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICByZXR1
cm4gYXRvbWljX2xvYWRfZXhwbGljaXQoJngsIG1lbW9yeV9vcmRlcl9yZWxheGVkKTtcbiIpOwor
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgICAgIHJldHVybiBzdHJp
bmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ubmFtZSgpLnN0YXJ0c1dpdGgoIm9wZXJhdG9yLiJfc3RyKSkgeworICAgICAgICBp
ZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuZW5kc1dpdGgoIj0iX3N0cikpIHsK
KyAgICAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KS5zaXplKCkgPT0gMik7CisgICAgICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSBn
ZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50
eXBlKCksIHR5cGVOYW1lcik7CisgICAgICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUg
PSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsx
XS50eXBlKCksIHR5cGVOYW1lcik7CisgICAgICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9
IGdldE5hdGl2ZU5hbWUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCksIHR5cGVOYW1l
cik7CisgICAgICAgICAgICBhdXRvIGZpZWxkTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ubmFtZSgpLnN1YnN0cmluZygib3BlcmF0b3IuIl9zdHIubGVuZ3RoKCkpOworICAgICAgICAg
ICAgZmllbGROYW1lID0gZmllbGROYW1lLnN1YnN0cmluZygwLCBmaWVsZE5hbWUubGVuZ3RoKCkg
LSAxKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxS
ZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFO
YW1lLCAidiwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBuKSB7XG4iKSk7CisgICAgICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgdi4iLCBmaWVsZE5hbWUsICIg
PSBuO1xuIikpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygi
ICAgIHJldHVybiB2O1xuIikpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1c
biIpOworICAgICAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKS5zaXplKCkgPT0gMSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gZ2V0
TmF0aXZlTmFtZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlw
ZSgpLCB0eXBlTmFtZXIpOworICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IGdldE5hdGl2
ZU5hbWUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCksIHR5cGVOYW1lcik7CisgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcs
IG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICJ2KSB7XG4iKSk7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gdi4i
LCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yLiJf
c3RyLmxlbmd0aCgpKSwgIjtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1c
biIpOworICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworCisgICAgfQor
CisgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvcltd
IikgeworICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KCkuc2l6ZSgpID09IDIpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSBnZXRO
YXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBl
KCksIHR5cGVOYW1lcik7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IGdldE5h
dGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUo
KSwgdHlwZU5hbWVyKTsKKyAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSBnZXROYXRpdmVO
YW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpLCB0eXBlTmFtZXIpOworICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBv
dXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIm0sICIsIG1ldGFs
UGFyYW1ldGVyMk5hbWUsICIgaSkge1xuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuIG1baV07XG4iKSk7CisgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmco
KTsKKyAgICB9CisKKyAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0g
Im9wZXJhdG9yW109IikgeworICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDMpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVy
MU5hbWUgPSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKVswXS50eXBlKCksIHR5cGVOYW1lcik7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIy
TmFtZSA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVy
cygpWzFdLnR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjNO
YW1lID0gZ2V0TmF0aXZlTmFtZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KClbMl0udHlwZSgpLCB0eXBlTmFtZXIpOworICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9
IGdldE5hdGl2ZU5hbWUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCksIHR5cGVOYW1l
cik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5O
YW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAi
bSwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBpLCAiLCBtZXRhbFBhcmFtZXRlcjNOYW1lLCAi
IHYpIHtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAg
IG1baV0gPSB2O1xuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KCIgICAgcmV0dXJuIG07XG4iKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4i
KTsKKyAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICB9CisKKyAg
ICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5pc09wZXJhdG9yKCkpIHsKKyAgICAgICAg
aWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKSB7
CisgICAgICAgICAgICBhdXRvIG9wZXJhdG9yTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ubmFtZSgpLnN1YnN0cmluZygib3BlcmF0b3IiX3N0ci5sZW5ndGgoKSk7CisgICAgICAgICAg
ICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAg
ICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gZ2V0TmF0aXZlTmFtZShuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFt
ZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICJ4KSB7XG4iKSk7CisgICAgICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuICIsIG9wZXJhdG9yTmFtZSwg
Ing7XG4iKSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAg
ICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAgICB9CisKKyAg
ICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUo
KSA9PSAyKTsKKyAgICAgICAgYXV0byBvcGVyYXRvck5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yIl9zdHIubGVuZ3RoKCkpOworICAgICAg
ICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCksIHR5cGVOYW1lcik7CisgICAgICAg
IGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAg
YXV0byBtZXRhbFJldHVybk5hbWUgPSBnZXROYXRpdmVOYW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24udHlwZSgpLCB0eXBlTmFtZXIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywg
bWV0YWxQYXJhbWV0ZXIxTmFtZSwgIngsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgeSkge1xu
IikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJu
IHggIiwgb3BlcmF0b3JOYW1lLCAiIHk7XG4iKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCJ9XG4iKTsKKyAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAg
ICB9CisKKyAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImNvcyIK
KyAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gInNpbiIKKyAg
ICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gInRhbiIKKyAgICAg
ICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImFjb3MiCisgICAgICAg
IHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJhc2luIgorICAgICAgICB8
fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYXRhbiIKKyAgICAgICAgfHwg
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImNvc2giCisgICAgICAgIHx8IG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJzaW5oIgorICAgICAgICB8fCBuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAidGFuaCIKKyAgICAgICAgfHwgbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImNlaWwiCisgICAgICAgIHx8IG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJleHAiCisgICAgICAgIHx8IG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJmbG9vciIKKyAgICAgICAgfHwgbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImxvZyIKKyAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5uYW1lKCkgPT0gInJvdW5kIgorICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKSA9PSAidHJ1bmMiCisgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ubmFtZSgpID09ICJkZHgiCisgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ubmFtZSgpID09ICJkZHkiCisgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ubmFtZSgpID09ICJpc25vcm1hbCIKKyAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5uYW1lKCkgPT0gImlzZmluaXRlIgorICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKSA9PSAiaXNpbmYiCisgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ubmFtZSgpID09ICJpc25hbiIKKyAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5uYW1lKCkgPT0gImFzaW50IgorICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLm5hbWUoKSA9PSAiYXN1aW50IgorICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLm5hbWUoKSA9PSAiYXNmbG9hdCIpIHsKKyAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKTsKKyAgICAgICAgYXV0byBtZXRh
bFBhcmFtZXRlck5hbWUgPSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKVswXS50eXBlKCksIHR5cGVOYW1lcik7CisgICAgICAgIGF1dG8gbWV0YWxS
ZXR1cm5OYW1lID0gZ2V0TmF0aXZlTmFtZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUo
KSwgdHlwZU5hbWVyKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyht
ZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1l
dGVyTmFtZSwgIngpIHtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZygiICAgIHJldHVybiAiLCBtYXBGdW5jdGlvbk5hbWUobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5uYW1lKCkpLCAiKHgpO1xuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgi
fVxuIik7CisgICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgfQor
CisgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJwb3ciIHx8IG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJhdGFuMiIpIHsKKyAgICAgICAgQVNT
RVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsK
KyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gZ2V0TmF0aXZlTmFtZSgqbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLCB0eXBlTmFtZXIpOwor
ICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSBnZXROYXRpdmVOYW1lKCpuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS50eXBlKCksIHR5cGVOYW1lcik7Cisg
ICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gZ2V0TmF0aXZlTmFtZShuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLnR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1l
LCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICJ4LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAi
IHkpIHtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAg
IHJldHVybiAiLCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSwgIih4LCB5KTtcbiIp
KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgICAgICByZXR1cm4g
c3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgIH0KKworICAgIGlmIChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiZjE2dG9mMzIiIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ubmFtZSgpID09ICJmMzJ0b2YxNiIpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzCisgICAgICAgIENSQVNIKCk7CisgICAgfQorCisgICAgaWYgKG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ubmFtZSgpID09ICJBbGxNZW1vcnlCYXJyaWVyV2l0aEdyb3VwU3luYyIpIHsK
KyAgICAgICAgQVNTRVJUKCFuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5z
aXplKCkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ2b2lkICIs
IG91dHB1dEZ1bmN0aW9uTmFtZSwgIigpIHtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoIiAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX2RldmljZSk7XG4i
KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICB0aHJlYWRncm91cF9iYXJyaWVy
KG1lbV9mbGFnczo6bWVtX3RocmVhZGdyb3VwKTtcbiIpOworICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgiICAgIHRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjptZW1fdGV4dHVyZSk7
XG4iKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgICAgICByZXR1
cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgIH0KKworICAgIGlmIChuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiRGV2aWNlTWVtb3J5QmFycmllcldpdGhHcm91cFN5
bmMiKSB7CisgICAgICAgIEFTU0VSVCghbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKCkuc2l6ZSgpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygi
dm9pZCAiLCBvdXRwdXRGdW5jdGlvbk5hbWUsICIoKSB7XG4iKSk7CisgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCIgICAgdGhyZWFkZ3JvdXBfYmFycmllcihtZW1fZmxhZ3M6Om1lbV9kZXZp
Y2UpO1xuIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAgICAg
cmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICBpZiAobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkdyb3VwTWVtb3J5QmFycmllcldpdGhHcm91
cFN5bmMiKSB7CisgICAgICAgIEFTU0VSVCghbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKCkuc2l6ZSgpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
Zygidm9pZCAiLCBvdXRwdXRGdW5jdGlvbk5hbWUsICIoKSB7XG4iKSk7CisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCIgICAgdGhyZWFkZ3JvdXBfYmFycmllcihtZW1fZmxhZ3M6Om1lbV90
aHJlYWRncm91cCk7XG4iKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOwor
ICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgIH0KKworICAgIGlm
IChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJJbnRlcmxvY2tl
ZCJfc3RyKSkgeworICAgICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkg
PT0gIkludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlIikgeworICAgICAgICAgICAgQVNTRVJUKG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSA0KTsKKyAgICAg
ICAgICAgIEFTU0VSVChpczxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKSk7CisgICAgICAgICAgICBhdXRvJiBmaXJzdEFy
Z3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOworICAgICAgICAgICAgYXV0byBm
aXJzdEFyZ3VtZW50QWRkcmVzc1NwYWNlID0gZmlyc3RBcmd1bWVudFBvaW50ZXIuYWRkcmVzc1Nw
YWNlKCk7CisgICAgICAgICAgICBhdXRvIGZpcnN0QXJndW1lbnRQb2ludGVlID0gZ2V0TmF0aXZl
TmFtZShmaXJzdEFyZ3VtZW50UG9pbnRlci5lbGVtZW50VHlwZSgpLCB0eXBlTmFtZXIpOworICAg
ICAgICAgICAgYXV0byBzZWNvbmRBcmd1bWVudCA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAg
ICAgICAgIGF1dG8gdGhpcmRBcmd1bWVudCA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzJdLnR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAg
ICAgIEFTU0VSVChpczxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKClbM10udHlwZSgpKSk7CisgICAgICAgICAgICBhdXRvJiBmb3VydGhBcmd1
bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbM10udHlwZSgpKTsKKyAgICAgICAgICAgIGF1dG8gZm91
cnRoQXJndW1lbnRBZGRyZXNzU3BhY2UgPSBmb3VydGhBcmd1bWVudFBvaW50ZXIuYWRkcmVzc1Nw
YWNlKCk7CisgICAgICAgICAgICBhdXRvIGZvdXJ0aEFyZ3VtZW50UG9pbnRlZSA9IGdldE5hdGl2
ZU5hbWUoZm91cnRoQXJndW1lbnRQb2ludGVyLmVsZW1lbnRUeXBlKCksIHR5cGVOYW1lcik7Cisg
ICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ2b2lkICIsIG91dHB1
dEZ1bmN0aW9uTmFtZSwgJygnLCBjb252ZXJ0QWRkcmVzc1NwYWNlKGZpcnN0QXJndW1lbnRBZGRy
ZXNzU3BhY2UpLCAnICcsIGZpcnN0QXJndW1lbnRQb2ludGVlLCAiKiBvYmplY3QsICIsIHNlY29u
ZEFyZ3VtZW50LCAiIGNvbXBhcmUsICIsIHRoaXJkQXJndW1lbnQsICIgZGVzaXJlZCwgIiwgY29u
dmVydEFkZHJlc3NTcGFjZShmb3VydGhBcmd1bWVudEFkZHJlc3NTcGFjZSksICcgJywgZm91cnRo
QXJndW1lbnRQb2ludGVlLCAiKiBvdXQpIHtcbiIpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCIgICAgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdChvYmpl
Y3QsICZjb21wYXJlLCBkZXNpcmVkLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCk7XG4iKTsKKyAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgKm91dCA9IGNvbXBhcmU7XG4iKTsKKyAg
ICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAgICAgICAgIHJldHVy
biBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQo
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDMpOworICAg
ICAgICBBU1NFUlQoaXM8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSkpOworICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50
UG9pbnRlciA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpOworICAgICAgICBhdXRvIGZpcnN0QXJndW1l
bnRBZGRyZXNzU3BhY2UgPSBmaXJzdEFyZ3VtZW50UG9pbnRlci5hZGRyZXNzU3BhY2UoKTsKKyAg
ICAgICAgYXV0byBmaXJzdEFyZ3VtZW50UG9pbnRlZSA9IGdldE5hdGl2ZU5hbWUoZmlyc3RBcmd1
bWVudFBvaW50ZXIuZWxlbWVudFR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAgYXV0byBzZWNv
bmRBcmd1bWVudCA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpWzFdLnR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAgQVNTRVJUKGlzPEFTVDo6
UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsyXS50
eXBlKCkpKTsKKyAgICAgICAgYXV0byYgdGhpcmRBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxB
U1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClb
Ml0udHlwZSgpKTsKKyAgICAgICAgYXV0byB0aGlyZEFyZ3VtZW50QWRkcmVzc1NwYWNlID0gdGhp
cmRBcmd1bWVudFBvaW50ZXIuYWRkcmVzc1NwYWNlKCk7CisgICAgICAgIGF1dG8gdGhpcmRBcmd1
bWVudFBvaW50ZWUgPSBnZXROYXRpdmVOYW1lKHRoaXJkQXJndW1lbnRQb2ludGVyLmVsZW1lbnRU
eXBlKCksIHR5cGVOYW1lcik7CisgICAgICAgIGF1dG8gbmFtZSA9IChbXShTdHJpbmcgaW5wdXQp
IC0+IFN0cmluZyB7CisgICAgICAgICAgICBpZiAoaW5wdXQgPT0gIkFkZCIpCisgICAgICAgICAg
ICAgICAgcmV0dXJuICJmZXRjaF9hZGQiX3N0cjsKKyAgICAgICAgICAgIGlmIChpbnB1dCA9PSAi
QW5kIikKKyAgICAgICAgICAgICAgICByZXR1cm4gImZldGNoX2FuZCJfc3RyOworICAgICAgICAg
ICAgaWYgKGlucHV0ID09ICJFeGNoYW5nZSIpCisgICAgICAgICAgICAgICAgcmV0dXJuICJleGNo
YW5nZSJfc3RyOworICAgICAgICAgICAgaWYgKGlucHV0ID09ICJNYXgiKQorICAgICAgICAgICAg
ICAgIHJldHVybiAiZmV0Y2hfbWF4Il9zdHI7CisgICAgICAgICAgICBpZiAoaW5wdXQgPT0gIk1p
biIpCisgICAgICAgICAgICAgICAgcmV0dXJuICJmZXRjaF9taW4iX3N0cjsKKyAgICAgICAgICAg
IGlmIChpbnB1dCA9PSAiT3IiKQorICAgICAgICAgICAgICAgIHJldHVybiAiZmV0Y2hfb3IiX3N0
cjsKKyAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSAiWG9yIik7CisgICAgICAgICAgICByZXR1
cm4gImZldGNoX3hvciJfc3RyOworICAgICAgICB9KShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
Lm5hbWUoKS5zdWJzdHJpbmcoIkludGVybG9ja2VkIl9zdHIubGVuZ3RoKCkpKTsKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygidm9pZCAiLCBvdXRwdXRGdW5jdGlvbk5h
bWUsICcoJywgY29udmVydEFkZHJlc3NTcGFjZShmaXJzdEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwg
JyAnLCBmaXJzdEFyZ3VtZW50UG9pbnRlZSwgIiogb2JqZWN0LCAiLCBzZWNvbmRBcmd1bWVudCwg
IiBvcGVyYW5kLCAiLCBjb252ZXJ0QWRkcmVzc1NwYWNlKHRoaXJkQXJndW1lbnRBZGRyZXNzU3Bh
Y2UpLCAnICcsIHRoaXJkQXJndW1lbnRQb2ludGVlLCAiKiBvdXQpIHtcbiIpKTsKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgICpvdXQgPSBhdG9taWNfZmV0Y2hf
IiwgbmFtZSwgIl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG1lbW9yeV9vcmRlcl9yZWxheGVk
KTtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgICAgICBy
ZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgIH0KKworICAgIGlmIChuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiU2FtcGxlIikgeworICAgICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRoaXMuCisgICAgICAgIENSQVNIKCk7CisgICAgfQorCisgICAgaWYgKG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJMb2FkIikgeworICAgICAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgICAgIENSQVNIKCk7CisgICAgfQorCisgICAgaWYg
KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJHZXREaW1lbnNpb25zIikgewor
ICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgICAgIENSQVNIKCk7CisgICAg
fQorCisgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJTYW1wbGVC
aWFzIikgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgICAgIENSQVNI
KCk7CisgICAgfQorCisgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09
ICJTYW1wbGVHcmFkIikgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAg
ICAgIENSQVNIKCk7CisgICAgfQorCisgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpID09ICJTYW1wbGVMZXZlbCIpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzLgorICAgICAgICBDUkFTSCgpOworICAgIH0KKworICAgIGlmIChuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKSA9PSAiR2F0aGVyIikgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMuCisgICAgICAgIENSQVNIKCk7CisgICAgfQorCisgICAgaWYgKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJHYXRoZXJSZWQiKSB7CisgICAgICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhpcy4KKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICBpZiAobmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlNhbXBsZUNtcCIpIHsKKyAgICAgICAg
Ly8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgICAgICBDUkFTSCgpOworICAgIH0KKworICAg
IGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiU2FtcGxlQ21wTGV2ZWxa
ZXJvIikgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgICAgIENSQVNI
KCk7CisgICAgfQorCisgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09
ICJTdG9yZSIpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgICAgICBD
UkFTSCgpOworICAgIH0KKworICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUo
KSA9PSAiR2F0aGVyQWxwaGEiKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4K
KyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5uYW1lKCkgPT0gIkdhdGhlckJsdWUiKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdGhpcy4KKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICBpZiAobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkdhdGhlckNtcCIpIHsKKyAgICAgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0aGlzLgorICAgICAgICBDUkFTSCgpOworICAgIH0KKworICAgIGlmIChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiR2F0aGVyQ21wUmVkIikgeworICAgICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgICAgIENSQVNIKCk7CisgICAgfQorCisg
ICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJHYXRoZXJHcmVlbiIp
IHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgICAgICBDUkFTSCgpOwor
ICAgIH0KKworICAgIC8vIEZJWE1FOiBBZGQgYWxsIHRoZSBmdW5jdGlvbnMgdGhhdCB0aGUgY29t
cGlsZXIgZ2VuZXJhdGVkLgorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IFN0cmluZygpOworfQorCit9IC8vIG5hbWVzcGFjZSBNZXRhbAorCit9IC8vIG5hbWVzcGFjZSBX
SExTTAorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlv
bldyaXRlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hM
U0xOYXRpdmVGdW5jdGlvbldyaXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi4yZTliZDRlM2NiZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuaApAQCAt
MCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VC
R1BVKQorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIE5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb247CisKK30KKworbmFtZXNwYWNlIE1ldGFsIHsKKworY2xh
c3MgVHlwZU5hbWVyOworCitTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24mLCBTdHJpbmcmIG91dHB1dEZ1bmN0aW9uTmFtZSwgVHlwZU5hbWVy
Jik7CisKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMzE4ZWI4Njc2YQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
VHlwZU5hbWVyLmNwcApAQCAtMCwwICsxLDcwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVOYW1lci5oIgorCisjaWYgRU5BQkxFKFdFQkdQ
VSkKKworI2luY2x1ZGUgIldITFNMQWRkcmVzc1NwYWNlLmgiCisjaW5jbHVkZSAiV0hMU0xBcnJh
eVJlZmVyZW5jZVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgorI2luY2x1ZGUg
IldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlv
bk1lbWJlci5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgorI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRGVmaW5p
dGlvbi5oIgorI2luY2x1ZGUgIldITFNMVHlwZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExT
TFR5cGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIKKyNpbmNsdWRlIDxh
bGdvcml0aG0+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Cisj
aW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
Q29uY2F0ZW5hdGVOdW1iZXJzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNl
IFdITFNMIHsKKworbmFtZXNwYWNlIE1ldGFsIHsKKworY2xhc3MgQmFzZVR5cGVOYW1lTm9kZSB7
CitwdWJsaWM6CisgICAgQmFzZVR5cGVOYW1lTm9kZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQs
IFN0cmluZyYmIG1hbmdsZWROYW1lKQorICAgICAgICA6IG1fcGFyZW50KHBhcmVudCkKKyAgICAg
ICAgLCBtX21hbmdsZWROYW1lKG1hbmdsZWROYW1lKQorICAgIHsKKyAgICB9CisgICAgdmlydHVh
bCB+QmFzZVR5cGVOYW1lTm9kZSgpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNBcnJh
eVR5cGVOYW1lTm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29s
IGlzQXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBpc1BvaW50ZXJUeXBlTmFtZU5vZGUoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1JlZmVyZW5jZVR5cGVOYW1lTm9kZSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2Rl
Pj4mIGNoaWxkcmVuKCkgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQorICAgIHZvaWQgYXBwZW5kKFVu
aXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPiYmIGNoaWxkKQorICAgIHsKKyAgICAgICAgbV9jaGls
ZHJlbi5hcHBlbmQoV1RGTW92ZShjaGlsZCkpOworICAgIH0KKyAgICBCYXNlVHlwZU5hbWVOb2Rl
KiBwYXJlbnQoKSB7IHJldHVybiBtX3BhcmVudDsgfQorICAgIGNvbnN0IFN0cmluZyYgbWFuZ2xl
ZE5hbWUoKSBjb25zdCB7IHJldHVybiBtX21hbmdsZWROYW1lOyB9CisKK3ByaXZhdGU6CisgICAg
VmVjdG9yPFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPj4gbV9jaGlsZHJlbjsKKyAgICBCYXNl
VHlwZU5hbWVOb2RlKiBtX3BhcmVudDsKKyAgICBTdHJpbmcgbV9tYW5nbGVkTmFtZTsKK307CisK
K2NsYXNzIEFycmF5VHlwZU5hbWVOb2RlIDogcHVibGljIEJhc2VUeXBlTmFtZU5vZGUgeworcHVi
bGljOgorICAgIEFycmF5VHlwZU5hbWVOb2RlKEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVudCwgU3Ry
aW5nJiYgbWFuZ2xlZE5hbWUsIHVuc2lnbmVkIG51bUVsZW1lbnRzKQorICAgICAgICA6IEJhc2VU
eXBlTmFtZU5vZGUocGFyZW50LCBXVEZNb3ZlKG1hbmdsZWROYW1lKSkKKyAgICAgICAgLCBtX251
bUVsZW1lbnRzKG51bUVsZW1lbnRzKQorICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+QXJyYXlU
eXBlTmFtZU5vZGUoKSA9IGRlZmF1bHQ7CisgICAgYm9vbCBpc0FycmF5VHlwZU5hbWVOb2RlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHVuc2lnbmVkIG51bUVsZW1lbnRz
KCkgY29uc3QgeyByZXR1cm4gbV9udW1FbGVtZW50czsgfQorCitwcml2YXRlOgorICAgIHVuc2ln
bmVkIG1fbnVtRWxlbWVudHM7Cit9OworCitjbGFzcyBBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9k
ZSA6IHB1YmxpYyBCYXNlVHlwZU5hbWVOb2RlIHsKK3B1YmxpYzoKKyAgICBBcnJheVJlZmVyZW5j
ZVR5cGVOYW1lTm9kZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQsIFN0cmluZyYmIG1hbmdsZWRO
YW1lLCBBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UpCisgICAgICAgIDogQmFzZVR5cGVO
YW1lTm9kZShwYXJlbnQsIFdURk1vdmUobWFuZ2xlZE5hbWUpKQorICAgICAgICAsIG1fYWRkcmVz
c1NwYWNlKGFkZHJlc3NTcGFjZSkKKyAgICB7CisgICAgfQorICAgIHZpcnR1YWwgfkFycmF5UmVm
ZXJlbmNlVHlwZU5hbWVOb2RlKCkgPSBkZWZhdWx0OworICAgIGJvb2wgaXNBcnJheVJlZmVyZW5j
ZVR5cGVOYW1lTm9kZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICBBU1Q6
OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2FkZHJlc3NTcGFj
ZTsgfQorCitwcml2YXRlOgorICAgIEFTVDo6QWRkcmVzc1NwYWNlIG1fYWRkcmVzc1NwYWNlOwor
fTsKKworY2xhc3MgUG9pbnRlclR5cGVOYW1lTm9kZSA6IHB1YmxpYyBCYXNlVHlwZU5hbWVOb2Rl
IHsKK3B1YmxpYzoKKyAgICBQb2ludGVyVHlwZU5hbWVOb2RlKEJhc2VUeXBlTmFtZU5vZGUqIHBh
cmVudCwgU3RyaW5nJiYgbWFuZ2xlZE5hbWUsIEFTVDo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFj
ZSkKKyAgICAgICAgOiBCYXNlVHlwZU5hbWVOb2RlKHBhcmVudCwgV1RGTW92ZShtYW5nbGVkTmFt
ZSkpCisgICAgICAgICwgbV9hZGRyZXNzU3BhY2UoYWRkcmVzc1NwYWNlKQorICAgIHsKKyAgICB9
CisgICAgdmlydHVhbCB+UG9pbnRlclR5cGVOYW1lTm9kZSgpID0gZGVmYXVsdDsKKyAgICBib29s
IGlzUG9pbnRlclR5cGVOYW1lTm9kZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0K
KyAgICBBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2Fk
ZHJlc3NTcGFjZTsgfQorCitwcml2YXRlOgorICAgIEFTVDo6QWRkcmVzc1NwYWNlIG1fYWRkcmVz
c1NwYWNlOworfTsKKworY2xhc3MgUmVmZXJlbmNlVHlwZU5hbWVOb2RlIDogcHVibGljIEJhc2VU
eXBlTmFtZU5vZGUgeworcHVibGljOgorICAgIFJlZmVyZW5jZVR5cGVOYW1lTm9kZShCYXNlVHlw
ZU5hbWVOb2RlKiBwYXJlbnQsIFN0cmluZyYmIG1hbmdsZWROYW1lLCBBU1Q6Ok5hbWVkVHlwZSYg
bmFtZWRUeXBlKQorICAgICAgICA6IEJhc2VUeXBlTmFtZU5vZGUocGFyZW50LCBXVEZNb3ZlKG1h
bmdsZWROYW1lKSkKKyAgICAgICAgLCBtX25hbWVkVHlwZShuYW1lZFR5cGUpCisgICAgeworICAg
IH0KKyAgICB2aXJ0dWFsIH5SZWZlcmVuY2VUeXBlTmFtZU5vZGUoKSA9IGRlZmF1bHQ7CisgICAg
Ym9vbCBpc1JlZmVyZW5jZVR5cGVOYW1lTm9kZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRy
dWU7IH0KKyAgICBBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlKCkgeyByZXR1cm4gbV9uYW1lZFR5
cGU7IH0KKworcHJpdmF0ZToKKyAgICBBU1Q6Ok5hbWVkVHlwZSYgbV9uYW1lZFR5cGU7Cit9Owor
Cit9CisKK30KKworfQorCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfQkFT
RV9UWVBFX05BTUVEX05PREUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUb1ZhbHVlVHlwZU5h
bWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6V0hMU0w6Ok1ldGFs
OjpCYXNlVHlwZU5hbWVOb2RlJiB0eXBlKSB7IHJldHVybiB0eXBlLnByZWRpY2F0ZTsgfSBcCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hM
U0xfQkFTRV9UWVBFX05BTUVEX05PREUoQXJyYXlUeXBlTmFtZU5vZGUsIGlzQXJyYXlUeXBlTmFt
ZU5vZGUoKSkKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9CQVNFX1RZUEVfTkFNRURf
Tk9ERShBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZSwgaXNBcnJheVJlZmVyZW5jZVR5cGVOYW1l
Tm9kZSgpKQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0JBU0VfVFlQRV9OQU1FRF9O
T0RFKFBvaW50ZXJUeXBlTmFtZU5vZGUsIGlzUG9pbnRlclR5cGVOYW1lTm9kZSgpKQorCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0JBU0VfVFlQRV9OQU1FRF9OT0RFKFJlZmVyZW5jZVR5
cGVOYW1lTm9kZSwgaXNSZWZlcmVuY2VUeXBlTmFtZU5vZGUoKSkKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgTWV0YWwgeworCitUeXBlTmFt
ZXI6OlR5cGVOYW1lcihQcm9ncmFtJiBwcm9ncmFtKQorICAgIDogbV9wcm9ncmFtKHByb2dyYW0p
Cit7Cit9CisKK1R5cGVOYW1lcjo6flR5cGVOYW1lcigpID0gZGVmYXVsdDsKKwordm9pZCBUeXBl
TmFtZXI6OnZpc2l0KEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKQoreworICAgIGluc2Vy
dCh1bm5hbWVkVHlwZSwgbV90cmllKTsKK30KKwordm9pZCBUeXBlTmFtZXI6OnZpc2l0KEFTVDo6
RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCit7CisgICAgYXV0
byBhZGRSZXN1bHQgPSBtX25hbWVkVHlwZU1hcHBpbmcuYWRkKCZlbnVtZXJhdGlvbkRlZmluaXRp
b24sIGdlbmVyYXRlTmV4dFR5cGVOYW1lKCkpOworICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0
LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbk1lbWJl
ciA6IGVudW1lcmF0aW9uRGVmaW5pdGlvbi5lbnVtZXJhdGlvbk1lbWJlcnMoKSkgeworICAgICAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fZW51bWVyYXRpb25NZW1iZXJNYXBwaW5nLmFkZCgmc3RhdGlj
X2Nhc3Q8QVNUOjpFbnVtZXJhdGlvbk1lbWJlciY+KGVudW1lcmF0aW9uTWVtYmVyKSwgZ2VuZXJh
dGVOZXh0RW51bWVyYXRpb25NZW1iZXJOYW1lKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFk
ZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKyAgICBWaXNpdG9yOjp2aXNp
dChlbnVtZXJhdGlvbkRlZmluaXRpb24pOworfQorCit2b2lkIFR5cGVOYW1lcjo6dmlzaXQoQVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKQoreworICAgIC8vIE5hdGl2ZSB0eXBlIGRlY2xhcmF0
aW9ucyBhbHJlYWR5IGhhdmUgbmFtZXMsIGFuZCBhcmUgYWxyZWFkeSBkZWNsYXJlZCBpbiBNZXRh
bC4KK30KKworc3RhdGljIFZlY3RvcjxVbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4+OjppdGVy
YXRvciBmaW5kSW5WZWN0b3IoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIFZlY3RvcjxV
bmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4+JiB0eXBlcykKK3sKKyAgICByZXR1cm4gc3RkOjpm
aW5kX2lmKHR5cGVzLmJlZ2luKCksIHR5cGVzLmVuZCgpLCBbJl0oQmFzZVR5cGVOYW1lTm9kZSYg
YmFzZVR5cGVOYW1lTm9kZSkgLT4gYm9vbCB7CisgICAgICAgIGlmIChpczxBU1Q6OlR5cGVSZWZl
cmVuY2U+KHVubmFtZWRUeXBlKSAmJiBpczxSZWZlcmVuY2VUeXBlTmFtZU5vZGU+KGJhc2VUeXBl
TmFtZU5vZGUpKSB7CisgICAgICAgICAgICBhdXRvKiByZXNvbHZlZFR5cGUgPSBkb3duY2FzdDxB
U1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRUeXBlKS5yZXNvbHZlZFR5cGUoKTsKKyAgICAgICAg
ICAgIEFTU0VSVChyZXNvbHZlZFR5cGUpOworICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkVHlw
ZSA9PSAmZG93bmNhc3Q8UmVmZXJlbmNlVHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKS5u
YW1lZFR5cGUoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4o
dW5uYW1lZFR5cGUpICYmIGlzPFBvaW50ZXJUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUp
KQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRU
eXBlKS5hZGRyZXNzU3BhY2UoKSA9PSBkb3duY2FzdDxQb2ludGVyVHlwZU5hbWVOb2RlPihiYXNl
VHlwZU5hbWVOb2RlKS5hZGRyZXNzU3BhY2UoKTsKKyAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlS
ZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkgJiYgaXM8QXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5v
ZGU+KGJhc2VUeXBlTmFtZU5vZGUpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFTVDo6
QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkuYWRkcmVzc1NwYWNlKCkgPT0gZG93bmNh
c3Q8QXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpLmFkZHJlc3NT
cGFjZSgpOworICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSAmJiBp
czxBcnJheVR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9kZSkpCisgICAgICAgICAgICByZXR1
cm4gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKS5udW1FbGVtZW50cygpID09
IGRvd25jYXN0PEFycmF5VHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKS5udW1FbGVtZW50
cygpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSk7Cit9CisKK3N0YXRpYyBCYXNlVHlw
ZU5hbWVOb2RlJiBmaW5kKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBWZWN0b3I8VW5p
cXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+PiYgdHlwZXMpCit7CisgICAgYXV0byYgdmVjdG9yVG9T
ZWFyY2ggPSAoWyZdKCkgLT4gVmVjdG9yPFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPj4mIHsK
KyAgICAgICAgaWYgKGlzPEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpKQorICAgICAg
ICAgICAgcmV0dXJuIHR5cGVzOworICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5u
YW1lZFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZpbmQoZG93bmNhc3Q8QVNUOjpQb2ludGVy
VHlwZT4odW5uYW1lZFR5cGUpLmVsZW1lbnRUeXBlKCksIHR5cGVzKS5jaGlsZHJlbigpOworICAg
ICAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAg
ICAgICAgIHJldHVybiBmaW5kKGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5h
bWVkVHlwZSkuZWxlbWVudFR5cGUoKSwgdHlwZXMpLmNoaWxkcmVuKCk7CisgICAgICAgIEFTU0VS
VChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKTsKKyAgICAgICAgcmV0dXJuIGZpbmQo
ZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKS50eXBlKCksIHR5cGVzKS5jaGls
ZHJlbigpOworICAgIH0pKCk7CisgICAgYXV0byBpdGVyYXRvciA9IGZpbmRJblZlY3Rvcih1bm5h
bWVkVHlwZSwgdmVjdG9yVG9TZWFyY2gpOworICAgIEFTU0VSVChpdGVyYXRvciAhPSB0eXBlcy5l
bmQoKSk7CisgICAgcmV0dXJuICppdGVyYXRvcjsKK30KKwordm9pZCBUeXBlTmFtZXI6OnZpc2l0
KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikKK3sKKyAgICB7
CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uYW1lZFR5cGVNYXBwaW5nLmFkZCgmc3RydWN0
dXJlRGVmaW5pdGlvbiwgZ2VuZXJhdGVOZXh0VHlwZU5hbWUoKSk7CisgICAgICAgIEFTU0VSVF9V
TlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorICAgIFZpc2l0
b3I6OnZpc2l0KHN0cnVjdHVyZURlZmluaXRpb24pOworICAgIHsKKyAgICAgICAgVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QmFzZVR5cGVOYW1lTm9kZT4+IG5laWdoYm9yczsKKyAgICAg
ICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVFbGVtZW50IDogc3RydWN0dXJlRGVmaW5pdGlvbi5zdHJ1
Y3R1cmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fc3RydWN0
dXJlRWxlbWVudE1hcHBpbmcuYWRkKCZzdHJ1Y3R1cmVFbGVtZW50LCBnZW5lcmF0ZU5leHRTdHJ1
Y3R1cmVFbGVtZW50TmFtZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0
LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgICAgICBuZWlnaGJvcnMuYXBwZW5kKGZp
bmQoc3RydWN0dXJlRWxlbWVudC50eXBlKCksIG1fdHJpZSkpOworICAgICAgICB9CisgICAgICAg
IGF1dG8gYWRkUmVzdWx0ID0gbV9kZXBlbmRlbmN5R3JhcGguYWRkKCZzdHJ1Y3R1cmVEZWZpbml0
aW9uLCBXVEZNb3ZlKG5laWdoYm9ycykpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3Vs
dCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KK30KKwordm9pZCBUeXBlTmFtZXI6OnZp
c2l0KEFTVDo6VHlwZURlZmluaXRpb24mIHR5cGVEZWZpbml0aW9uKQoreworICAgIHsKKyAgICAg
ICAgYXV0byBhZGRSZXN1bHQgPSBtX25hbWVkVHlwZU1hcHBpbmcuYWRkKCZ0eXBlRGVmaW5pdGlv
biwgZ2VuZXJhdGVOZXh0VHlwZU5hbWUoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVz
dWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorICAgIFZpc2l0b3I6OnZpc2l0KHR5
cGVEZWZpbml0aW9uKTsKKyAgICB7CisgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPEJhc2VUeXBlTmFtZU5vZGU+PiBuZWlnaGJvcnMgPSB7IGZpbmQodHlwZURlZmluaXRpb24u
dHlwZSgpLCBtX3RyaWUpIH07CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9kZXBlbmRlbmN5
R3JhcGguYWRkKCZ0eXBlRGVmaW5pdGlvbiwgV1RGTW92ZShuZWlnaGJvcnMpKTsKKyAgICAgICAg
QVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9Cit9
CisKK1N0cmluZyBUeXBlTmFtZXI6Om1hbmdsZWROYW1lRm9yVHlwZShBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQoreworICAgIGlmIChuYXRpdmVUeXBl
RGVjbGFyYXRpb24ubmFtZSgpID09ICJ2b2lkIikKKyAgICAgICAgcmV0dXJuICJ2b2lkIl9zdHI7
CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImJvb2wiKQorICAgICAg
ICByZXR1cm4gImJvb2wiX3N0cjsKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUo
KSA9PSAidWNoYXIiKQorICAgICAgICByZXR1cm4gInVpbnQ4X3QiX3N0cjsKKyAgICBpZiAobmF0
aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAidXNob3J0IikKKyAgICAgICAgcmV0dXJuICJ1
aW50MTZfdCJfc3RyOworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJ1
aW50IikKKyAgICAgICAgcmV0dXJuICJ1aW50MzJfdCJfc3RyOworICAgIGlmIChuYXRpdmVUeXBl
RGVjbGFyYXRpb24ubmFtZSgpID09ICJjaGFyIikKKyAgICAgICAgcmV0dXJuICJpbnQ4X3QiX3N0
cjsKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAic2hvcnQiKQorICAg
ICAgICByZXR1cm4gImludDE2X3QiX3N0cjsKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9u
Lm5hbWUoKSA9PSAiaW50IikKKyAgICAgICAgcmV0dXJuICJpbnQzMl90Il9zdHI7CisgICAgaWYg
KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImhhbGYiKQorICAgICAgICByZXR1cm4g
ImhhbGYiX3N0cjsKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiZmxv
YXQiKQorICAgICAgICByZXR1cm4gImZsb2F0Il9zdHI7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5uYW1lKCkgPT0gImF0b21pY19pbnQiKQorICAgICAgICByZXR1cm4gImF0b21pY19p
bnQiX3N0cjsKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYXRvbWlj
X3VpbnQiKQorICAgICAgICByZXR1cm4gImF0b21pY191aW50Il9zdHI7CisgICAgaWYgKG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInNhbXBsZXIiKQorICAgICAgICByZXR1cm4gInNh
bXBsZXIiX3N0cjsKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAidmVj
dG9yIikgeworICAgICAgICBBU1NFUlQobmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVu
dHMoKS5zaXplKCkgPT0gMik7CisgICAgICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlw
ZUFyZ3VtZW50cygpWzBdKSk7CisgICAgICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBXVEY6Omdl
dDxVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5
cGVBcmd1bWVudHMoKVswXSk7CisgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IHR5cGVSZWZlcmVu
Y2UtPnVuaWZ5Tm9kZSgpOworICAgICAgICBBU1NFUlQoaXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5
Tm9kZSkpOworICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlw
ZT4odW5pZnlOb2RlKTsKKyAgICAgICAgQVNTRVJUKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uPihuYW1lZFR5cGUpKTsKKyAgICAgICAgYXV0byYgcGFyYW1ldGVyVHlwZSA9IGRvd25jYXN0
PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpOworICAgICAgICBhdXRvIHBy
ZWZpeCA9IChbJl0oKSAtPiBTdHJpbmcgeworICAgICAgICAgICAgaWYgKHBhcmFtZXRlclR5cGUu
bmFtZSgpID09ICJib29sIikKKyAgICAgICAgICAgICAgICByZXR1cm4gImJvb2wiOworICAgICAg
ICAgICAgaWYgKHBhcmFtZXRlclR5cGUubmFtZSgpID09ICJ1Y2hhciIpCisgICAgICAgICAgICAg
ICAgcmV0dXJuICJ1Y2hhciI7CisgICAgICAgICAgICBpZiAocGFyYW1ldGVyVHlwZS5uYW1lKCkg
PT0gInVzaG9ydCIpCisgICAgICAgICAgICAgICAgcmV0dXJuICJ1c2hvcnQiOworICAgICAgICAg
ICAgaWYgKHBhcmFtZXRlclR5cGUubmFtZSgpID09ICJ1aW50IikKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gInVpbnQiOworICAgICAgICAgICAgaWYgKHBhcmFtZXRlclR5cGUubmFtZSgpID09ICJj
aGFyIikKKyAgICAgICAgICAgICAgICByZXR1cm4gImNoYXIiOworICAgICAgICAgICAgaWYgKHBh
cmFtZXRlclR5cGUubmFtZSgpID09ICJzaG9ydCIpCisgICAgICAgICAgICAgICAgcmV0dXJuICJz
aG9ydCI7CisgICAgICAgICAgICBpZiAocGFyYW1ldGVyVHlwZS5uYW1lKCkgPT0gImludCIpCisg
ICAgICAgICAgICAgICAgcmV0dXJuICJpbnQiOworICAgICAgICAgICAgaWYgKHBhcmFtZXRlclR5
cGUubmFtZSgpID09ICJoYWxmIikKKyAgICAgICAgICAgICAgICByZXR1cm4gImhhbGYiOworICAg
ICAgICAgICAgQVNTRVJUKHBhcmFtZXRlclR5cGUubmFtZSgpID09ICJmbG9hdCIpOworICAgICAg
ICAgICAgcmV0dXJuICJmbG9hdCI7CisgICAgICAgIH0pKCk7CisgICAgICAgIEFTU0VSVChXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVj
bGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzFdKSk7CisgICAgICAgIGF1dG8mIGNvbnN0YW50RXhw
cmVzc2lvbiA9IFdURjo6Z2V0PEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVj
bGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKTsKKyAgICAgICAgYXV0byYgaW50ZWdlckxpdGVy
YWwgPSBjb25zdGFudEV4cHJlc3Npb24uaW50ZWdlckxpdGVyYWwoKTsKKyAgICAgICAgYXV0byBz
dWZmaXggPSAoWyZdKCkgLT4gU3RyaW5nIHsKKyAgICAgICAgICAgIHN3aXRjaCAoaW50ZWdlckxp
dGVyYWwudmFsdWUoKSkgeworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIHJl
dHVybiAiMiJfc3RyOworICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIHJldHVy
biAiMyJfc3RyOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlQo
aW50ZWdlckxpdGVyYWwudmFsdWUoKSA9PSA0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gIjQi
X3N0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSkoKTsKKyAgICAgICAgcmV0dXJuIG1ha2VT
dHJpbmcocHJlZml4LCBzdWZmaXgpOworICAgIH0KKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0
aW9uLm5hbWUoKSA9PSAibWF0cml4IikgeworICAgICAgICBBU1NFUlQobmF0aXZlVHlwZURlY2xh
cmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMyk7CisgICAgICAgIEFTU0VSVChXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVU
eXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgICAgIGF1dG8mIHR5cGVS
ZWZlcmVuY2UgPSBXVEY6OmdldDxVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZl
VHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSk7CisgICAgICAgIGF1dG8mIHVuaWZ5
Tm9kZSA9IHR5cGVSZWZlcmVuY2UtPnVuaWZ5Tm9kZSgpOworICAgICAgICBBU1NFUlQoaXM8QVNU
OjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpOworICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3du
Y2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAgQVNTRVJUKGlzPEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKTsKKyAgICAgICAgYXV0byYgcGFyYW1l
dGVyVHlwZSA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUp
OworICAgICAgICBhdXRvIHByZWZpeCA9IChbJl0oKSAtPiBTdHJpbmcgeworICAgICAgICAgICAg
aWYgKHBhcmFtZXRlclR5cGUubmFtZSgpID09ICJoYWxmIikKKyAgICAgICAgICAgICAgICByZXR1
cm4gImhhbGYiOworICAgICAgICAgICAgQVNTRVJUKHBhcmFtZXRlclR5cGUubmFtZSgpID09ICJm
bG9hdCIpOworICAgICAgICAgICAgcmV0dXJuICJmbG9hdCI7CisgICAgICAgIH0pKCk7CisgICAg
ICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6Q29uc3RhbnRFeHByZXNzaW9u
PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzFdKSk7CisgICAgICAgIGF1
dG8mIGNvbnN0YW50RXhwcmVzc2lvbjEgPSBXVEY6OmdldDxBU1Q6OkNvbnN0YW50RXhwcmVzc2lv
bj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSk7CisgICAgICAgIGF1
dG8mIGludGVnZXJMaXRlcmFsMSA9IGNvbnN0YW50RXhwcmVzc2lvbjEuaW50ZWdlckxpdGVyYWwo
KTsKKyAgICAgICAgYXV0byBtaWRkbGUgPSAoWyZdKCkgLT4gU3RyaW5nIHsKKyAgICAgICAgICAg
IHN3aXRjaCAoaW50ZWdlckxpdGVyYWwxLnZhbHVlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgMjoK
KyAgICAgICAgICAgICAgICByZXR1cm4gIjIiX3N0cjsKKyAgICAgICAgICAgIGNhc2UgMzoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gIjMiX3N0cjsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGludGVnZXJMaXRlcmFsMS52YWx1ZSgpID09IDQpOworICAgICAg
ICAgICAgICAgIHJldHVybiAiNCJfc3RyOworICAgICAgICAgICAgfQorICAgICAgICB9KSgpOwor
ICAgICAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6OkNvbnN0YW50RXhwcmVz
c2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsyXSkpOworICAgICAg
ICBhdXRvJiBjb25zdGFudEV4cHJlc3Npb24yID0gV1RGOjpnZXQ8QVNUOjpDb25zdGFudEV4cHJl
c3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pOworICAgICAg
ICBhdXRvJiBpbnRlZ2VyTGl0ZXJhbDIgPSBjb25zdGFudEV4cHJlc3Npb24yLmludGVnZXJMaXRl
cmFsKCk7CisgICAgICAgIGF1dG8gc3VmZml4ID0gKFsmXSgpIC0+IFN0cmluZyB7CisgICAgICAg
ICAgICBzd2l0Y2ggKGludGVnZXJMaXRlcmFsMi52YWx1ZSgpKSB7CisgICAgICAgICAgICBjYXNl
IDI6CisgICAgICAgICAgICAgICAgcmV0dXJuICIyIl9zdHI7CisgICAgICAgICAgICBjYXNlIDM6
CisgICAgICAgICAgICAgICAgcmV0dXJuICIzIl9zdHI7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIEFTU0VSVChpbnRlZ2VyTGl0ZXJhbDIudmFsdWUoKSA9PSA0KTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gIjQiX3N0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSko
KTsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcocHJlZml4LCBtaWRkbGUsICd4Jywgc3VmZml4
KTsKKyAgICB9CisgICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRz
KCkuc2l6ZSgpID09IDEpOworICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1
ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3Vt
ZW50cygpWzBdKSk7CisgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IFdURjo6Z2V0PFVuaXF1ZVJl
ZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50
cygpWzBdKTsKKyAgICBhdXRvIHByZWZpeCA9IChbJl0oKSAtPiBTdHJpbmcgeworICAgICAgICBp
ZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiVGV4dHVyZTFEIikKKyAgICAgICAg
ICAgIHJldHVybiAidGV4dHVyZTFkIl9zdHI7CisgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFy
YXRpb24ubmFtZSgpID09ICJSV1RleHR1cmUxRCIpCisgICAgICAgICAgICByZXR1cm4gInRleHR1
cmUxZCJfc3RyOworICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
VGV4dHVyZTFEQXJyYXkiKQorICAgICAgICAgICAgcmV0dXJuICJ0ZXh0dXJlMWRfYXJyYXkiX3N0
cjsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlJXVGV4dHVy
ZTFEQXJyYXkiKQorICAgICAgICAgICAgcmV0dXJuICJ0ZXh0dXJlMWRfYXJyYXkiX3N0cjsKKyAg
ICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlRleHR1cmUyRCIpCisg
ICAgICAgICAgICByZXR1cm4gInRleHR1cmUyZCJfc3RyOworICAgICAgICBpZiAobmF0aXZlVHlw
ZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiUldUZXh0dXJlMkQiKQorICAgICAgICAgICAgcmV0dXJu
ICJ0ZXh0dXJlMmQiX3N0cjsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1l
KCkgPT0gIlRleHR1cmUyREFycmF5IikKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZTJkX2Fy
cmF5Il9zdHI7CisgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJS
V1RleHR1cmUyREFycmF5IikKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZTJkX2FycmF5Il9z
dHI7CisgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJUZXh0dXJl
M0QiKQorICAgICAgICAgICAgcmV0dXJuICJ0ZXh0dXJlM2QiX3N0cjsKKyAgICAgICAgaWYgKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlJXVGV4dHVyZTNEIikKKyAgICAgICAgICAg
IHJldHVybiAidGV4dHVyZTNkIl9zdHI7CisgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRp
b24ubmFtZSgpID09ICJUZXh0dXJlQ3ViZSIpCisgICAgICAgICAgICByZXR1cm4gInRleHR1cmVj
dWJlIl9zdHI7CisgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJU
ZXh0dXJlRGVwdGgyRCIpCisgICAgICAgICAgICByZXR1cm4gImRlcHRoMmQiX3N0cjsKKyAgICAg
ICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlJXVGV4dHVyZURlcHRoMkQi
KQorICAgICAgICAgICAgcmV0dXJuICJkZXB0aDJkIl9zdHI7CisgICAgICAgIGlmIChuYXRpdmVU
eXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJUZXh0dXJlRGVwdGgyREFycmF5IikKKyAgICAgICAg
ICAgIHJldHVybiAiZGVwdGgyZF9hcnJheSJfc3RyOworICAgICAgICBpZiAobmF0aXZlVHlwZURl
Y2xhcmF0aW9uLm5hbWUoKSA9PSAiUldUZXh0dXJlRGVwdGgyREFycmF5IikKKyAgICAgICAgICAg
IHJldHVybiAiZGVwdGgyZF9hcnJheSJfc3RyOworICAgICAgICBBU1NFUlQobmF0aXZlVHlwZURl
Y2xhcmF0aW9uLm5hbWUoKSA9PSAiVGV4dHVyZURlcHRoQ3ViZSIpOworICAgICAgICByZXR1cm4g
ImRlcHRoY3ViZSJfc3RyOworICAgIH0pKCk7CisgICAgYXV0byBpbm5lclR5cGUgPSAoWyZdKCkg
LT4gU3RyaW5nIHsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UtPm5hbWUoKSA9PSAidXNob3J0
IikKKyAgICAgICAgICAgIHJldHVybiAidXNob3J0Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVm
ZXJlbmNlLT5uYW1lKCkgPT0gInVzaG9ydDIiKQorICAgICAgICAgICAgcmV0dXJuICJ1c2hvcnQi
X3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UtPm5hbWUoKSA9PSAidXNob3J0MyIpCisg
ICAgICAgICAgICByZXR1cm4gInVzaG9ydCJfc3RyOworICAgICAgICBpZiAodHlwZVJlZmVyZW5j
ZS0+bmFtZSgpID09ICJ1c2hvcnQ0IikKKyAgICAgICAgICAgIHJldHVybiAidXNob3J0Il9zdHI7
CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLT5uYW1lKCkgPT0gInVpbnQiKQorICAgICAgICAg
ICAgcmV0dXJuICJ1aW50Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLT5uYW1lKCkg
PT0gInVpbnQyIikKKyAgICAgICAgICAgIHJldHVybiAidWludCJfc3RyOworICAgICAgICBpZiAo
dHlwZVJlZmVyZW5jZS0+bmFtZSgpID09ICJ1aW50MyIpCisgICAgICAgICAgICByZXR1cm4gInVp
bnQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UtPm5hbWUoKSA9PSAidWludDQiKQor
ICAgICAgICAgICAgcmV0dXJuICJ1aW50Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNl
LT5uYW1lKCkgPT0gInNob3J0IikKKyAgICAgICAgICAgIHJldHVybiAic2hvcnQiX3N0cjsKKyAg
ICAgICAgaWYgKHR5cGVSZWZlcmVuY2UtPm5hbWUoKSA9PSAic2hvcnQyIikKKyAgICAgICAgICAg
IHJldHVybiAic2hvcnQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UtPm5hbWUoKSA9
PSAic2hvcnQzIikKKyAgICAgICAgICAgIHJldHVybiAic2hvcnQiX3N0cjsKKyAgICAgICAgaWYg
KHR5cGVSZWZlcmVuY2UtPm5hbWUoKSA9PSAic2hvcnQ0IikKKyAgICAgICAgICAgIHJldHVybiAi
c2hvcnQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UtPm5hbWUoKSA9PSAiaW50IikK
KyAgICAgICAgICAgIHJldHVybiAiaW50Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNl
LT5uYW1lKCkgPT0gImludDIiKQorICAgICAgICAgICAgcmV0dXJuICJpbnQiX3N0cjsKKyAgICAg
ICAgaWYgKHR5cGVSZWZlcmVuY2UtPm5hbWUoKSA9PSAiaW50MyIpCisgICAgICAgICAgICByZXR1
cm4gImludCJfc3RyOworICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS0+bmFtZSgpID09ICJpbnQ0
IikKKyAgICAgICAgICAgIHJldHVybiAiaW50Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJl
bmNlLT5uYW1lKCkgPT0gImhhbGYiKQorICAgICAgICAgICAgcmV0dXJuICJoYWxmIl9zdHI7Cisg
ICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLT5uYW1lKCkgPT0gImhhbGYyIikKKyAgICAgICAgICAg
IHJldHVybiAiaGFsZiJfc3RyOworICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS0+bmFtZSgpID09
ICJoYWxmMyIpCisgICAgICAgICAgICByZXR1cm4gImhhbGYiX3N0cjsKKyAgICAgICAgaWYgKHR5
cGVSZWZlcmVuY2UtPm5hbWUoKSA9PSAiaGFsZjQiKQorICAgICAgICAgICAgcmV0dXJuICJoYWxm
Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLT5uYW1lKCkgPT0gImZsb2F0IikKKyAg
ICAgICAgICAgIHJldHVybiAiZmxvYXQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2Ut
Pm5hbWUoKSA9PSAiZmxvYXQyIikKKyAgICAgICAgICAgIHJldHVybiAiZmxvYXQiX3N0cjsKKyAg
ICAgICAgaWYgKHR5cGVSZWZlcmVuY2UtPm5hbWUoKSA9PSAiZmxvYXQzIikKKyAgICAgICAgICAg
IHJldHVybiAiZmxvYXQiX3N0cjsKKyAgICAgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UtPm5hbWUo
KSA9PSAiZmxvYXQ0Iik7CisgICAgICAgIHJldHVybiAiZmxvYXQiX3N0cjsKKyAgICB9KSgpOwor
ICAgIC8vIEZJWE1FOiBTcGVjaWZ5IHRoZSBzZWNvbmQgdGVtcGxhdGUgYXJndW1lbnQgdG8gTWV0
YWwgdGV4dHVyZSB0eXBlcy4KKyAgICByZXR1cm4gbWFrZVN0cmluZyhwcmVmaXgsICc8JywgaW5u
ZXJUeXBlLCAnPicpOworfQorCitVbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4gVHlwZU5hbWVy
OjpjcmVhdGVOYW1lTm9kZShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgQmFzZVR5cGVO
YW1lTm9kZSogcGFyZW50KQoreworICAgIGlmIChpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFt
ZWRUeXBlKSkgeworICAgICAgICBhdXRvJiB0eXBlUmVmZXJlbmNlID0gZG93bmNhc3Q8QVNUOjpU
eXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSk7CisgICAgICAgIEFTU0VSVCh0eXBlUmVmZXJlbmNl
LnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8UmVmZXJlbmNl
VHlwZU5hbWVOb2RlPihwYXJlbnQsIGdlbmVyYXRlTmV4dFR5cGVOYW1lKCksICp0eXBlUmVmZXJl
bmNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICB9CisgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+
KHVubmFtZWRUeXBlKSkgeworICAgICAgICBhdXRvJiBwb2ludGVyVHlwZSA9IGRvd25jYXN0PEFT
VDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVS
ZWY8UG9pbnRlclR5cGVOYW1lTm9kZT4ocGFyZW50LCBnZW5lcmF0ZU5leHRUeXBlTmFtZSgpLCBw
b2ludGVyVHlwZS5hZGRyZXNzU3BhY2UoKSk7CisgICAgfQorICAgIGlmIChpczxBU1Q6OkFycmF5
UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKSB7CisgICAgICAgIGF1dG8mIGFycmF5UmVmZXJl
bmNlVHlwZSA9IGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSk7
CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPEFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2Rl
PihwYXJlbnQsIGdlbmVyYXRlTmV4dFR5cGVOYW1lKCksIGFycmF5UmVmZXJlbmNlVHlwZS5hZGRy
ZXNzU3BhY2UoKSk7CisgICAgfQorICAgIEFTU0VSVChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1l
ZFR5cGUpKTsKKyAgICBhdXRvJiBhcnJheVR5cGUgPSBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4o
dW5uYW1lZFR5cGUpOworICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPEFycmF5VHlwZU5hbWVOb2Rl
PihwYXJlbnQsIGdlbmVyYXRlTmV4dFR5cGVOYW1lKCksIGFycmF5VHlwZS5udW1FbGVtZW50cygp
KTsKK30KKworc2l6ZV90IFR5cGVOYW1lcjo6aW5zZXJ0KEFTVDo6VW5uYW1lZFR5cGUmIHVubmFt
ZWRUeXBlLCBWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+PiYgdHlwZXMpCit7Cisg
ICAgVmVjdG9yPFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPj4qIHZlY3RvclRvSW5zZXJ0SW50
byB7IG51bGxwdHIgfTsKKyAgICBCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQgeyBudWxscHRyIH07
CisgICAgaWYgKGlzPEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpKSB7CisgICAgICAg
IHZlY3RvclRvSW5zZXJ0SW50byA9ICZ0eXBlczsKKyAgICAgICAgcGFyZW50ID0gbnVsbHB0cjsK
KyAgICB9IGVsc2UgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkgeworICAg
ICAgICBhdXRvJiBpdGVtID0gdHlwZXNbaW5zZXJ0KGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+
KHVubmFtZWRUeXBlKS5lbGVtZW50VHlwZSgpLCB0eXBlcyldOworICAgICAgICB2ZWN0b3JUb0lu
c2VydEludG8gPSAmaXRlbS0+Y2hpbGRyZW4oKTsKKyAgICAgICAgcGFyZW50ID0gJml0ZW07Cisg
ICAgfSBlbHNlIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKSB7
CisgICAgICAgIGF1dG8mIGl0ZW0gPSB0eXBlc1tpbnNlcnQoZG93bmNhc3Q8QVNUOjpBcnJheVJl
ZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKS5lbGVtZW50VHlwZSgpLCB0eXBlcyldOworICAgICAg
ICB2ZWN0b3JUb0luc2VydEludG8gPSAmaXRlbS0+Y2hpbGRyZW4oKTsKKyAgICAgICAgcGFyZW50
ID0gJml0ZW07CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGlzPEFTVDo6QXJyYXlUeXBl
Pih1bm5hbWVkVHlwZSkpOworICAgICAgICBhdXRvJiBpdGVtID0gdHlwZXNbaW5zZXJ0KGRvd25j
YXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkudHlwZSgpLCB0eXBlcyldOworICAgICAg
ICB2ZWN0b3JUb0luc2VydEludG8gPSAmaXRlbS0+Y2hpbGRyZW4oKTsKKyAgICAgICAgcGFyZW50
ID0gJml0ZW07CisgICAgfQorICAgIEFTU0VSVCh2ZWN0b3JUb0luc2VydEludG8pOworCisgICAg
YXV0byBpdGVyYXRvciA9IGZpbmRJblZlY3Rvcih1bm5hbWVkVHlwZSwgKnZlY3RvclRvSW5zZXJ0
SW50byk7CisgICAgaWYgKGl0ZXJhdG9yID09IHZlY3RvclRvSW5zZXJ0SW50by0+ZW5kKCkpIHsK
KyAgICAgICAgYXV0byByZXN1bHQgPSBjcmVhdGVOYW1lTm9kZSh1bm5hbWVkVHlwZSwgcGFyZW50
KTsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3VubmFtZWRUeXBl
TWFwcGluZy5hZGQoJnVubmFtZWRUeXBlLCAmcmVzdWx0KTsKKyAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIH0KKyAgICAg
ICAgdmVjdG9yVG9JbnNlcnRJbnRvLT5hcHBlbmQoV1RGTW92ZShyZXN1bHQpKTsKKyAgICAgICAg
cmV0dXJuIHZlY3RvclRvSW5zZXJ0SW50by0+c2l6ZSgpIC0gMTsKKyAgICB9CisgICAgYXV0byBh
ZGRSZXN1bHQgPSBtX3VubmFtZWRUeXBlTWFwcGluZy5hZGQoJnVubmFtZWRUeXBlLCAmKml0ZXJh
dG9yKTsKKyAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkp
OworICAgIHJldHVybiBpdGVyYXRvciAtIHZlY3RvclRvSW5zZXJ0SW50by0+YmVnaW4oKTsKK30K
KworY2xhc3MgTWV0YWxUeXBlRGVjbGFyYXRpb25Xcml0ZXIgOiBwdWJsaWMgVmlzaXRvciB7Citw
dWJsaWM6CisgICAgTWV0YWxUeXBlRGVjbGFyYXRpb25Xcml0ZXIoc3RkOjpmdW5jdGlvbjxTdHJp
bmcoQVNUOjpOYW1lZFR5cGUmKT4mJiBtYW5nbGVkTmFtZUZvck5hbWVkVHlwZSwgc3RkOjpmdW5j
dGlvbjxTdHJpbmcoQVNUOjpVbm5hbWVkVHlwZSYpPiYmIG1hbmdsZWROYW1lRm9yVW5uYW1lZFR5
cGUsIHN0ZDo6ZnVuY3Rpb248U3RyaW5nKEFTVDo6RW51bWVyYXRpb25NZW1iZXImKT4mJiBtYW5n
bGVkTmFtZUZvckVudW1lcmF0aW9uTWVtYmVyKQorICAgICAgICA6IG1fbWFuZ2xlZE5hbWVGb3JO
YW1lZFR5cGUoV1RGTW92ZShtYW5nbGVkTmFtZUZvck5hbWVkVHlwZSkpCisgICAgICAgICwgbV9t
YW5nbGVkTmFtZUZvclVubmFtZWRUeXBlKFdURk1vdmUobWFuZ2xlZE5hbWVGb3JVbm5hbWVkVHlw
ZSkpCisgICAgICAgICwgbV9tYW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVtYmVyKFdURk1vdmUo
bWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJlcikpCisgICAgeworICAgIH0KKworICAgIFN0
cmluZyB0b1N0cmluZygpIHsgcmV0dXJuIG1fc3RyaW5nQnVpbGRlci50b1N0cmluZygpOyB9CisK
K3ByaXZhdGU6CisgICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51
bWVyYXRpb25EZWZpbml0aW9uKQorICAgIHsKKyAgICAgICAgYXV0byYgYmFzZVR5cGUgPSBlbnVt
ZXJhdGlvbkRlZmluaXRpb24udHlwZSgpLnVuaWZ5Tm9kZSgpOworICAgICAgICBBU1NFUlQoaXM8
QVNUOjpOYW1lZFR5cGU+KGJhc2VUeXBlKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZygiZW51bSBjbGFzcyAiLCBtX21hbmdsZWROYW1lRm9yTmFtZWRUeXBlKGVu
dW1lcmF0aW9uRGVmaW5pdGlvbiksICIgOiAiLCBtX21hbmdsZWROYW1lRm9yTmFtZWRUeXBlKGRv
d25jYXN0PEFTVDo6TmFtZWRUeXBlPihiYXNlVHlwZSkpLCAiIHtcbiIpKTsKKyAgICAgICAgZm9y
IChhdXRvJiBlbnVtZXJhdGlvbk1lbWJlciA6IGVudW1lcmF0aW9uRGVmaW5pdGlvbi5lbnVtZXJh
dGlvbk1lbWJlcnMoKSkKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZygiICAgICIsIG1fbWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJlcihlbnVtZXJhdGlv
bk1lbWJlciksICIsXG4iKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn07XG4i
KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3Ry
dWN0dXJlRGVmaW5pdGlvbikKKyAgICB7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZygic3RydWN0ICIsIG1fbWFuZ2xlZE5hbWVGb3JOYW1lZFR5cGUoc3RydWN0dXJl
RGVmaW5pdGlvbiksICI7XG4iKSk7CisgICAgfQorCisgICAgc3RkOjpmdW5jdGlvbjxTdHJpbmco
QVNUOjpOYW1lZFR5cGUmKT4gbV9tYW5nbGVkTmFtZUZvck5hbWVkVHlwZTsKKyAgICBzdGQ6OmZ1
bmN0aW9uPFN0cmluZyhBU1Q6OlVubmFtZWRUeXBlJik+IG1fbWFuZ2xlZE5hbWVGb3JVbm5hbWVk
VHlwZTsKKyAgICBzdGQ6OmZ1bmN0aW9uPFN0cmluZyhBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJik+
JiYgbV9tYW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVtYmVyOworICAgIFN0cmluZ0J1aWxkZXIg
bV9zdHJpbmdCdWlsZGVyOworfTsKKworU3RyaW5nIFR5cGVOYW1lcjo6bWV0YWxUeXBlRGVjbGFy
YXRpb25zKCkKK3sKKyAgICBNZXRhbFR5cGVEZWNsYXJhdGlvbldyaXRlciBtZXRhbFR5cGVEZWNs
YXJhdGlvbldyaXRlcihbJl0oQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkgLT4gU3RyaW5nIHsK
KyAgICAgICAgcmV0dXJuIG1hbmdsZWROYW1lRm9yVHlwZShuYW1lZFR5cGUpOworICAgIH0sIFsm
XShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkgLT4gU3RyaW5nIHsKKyAgICAgICAgcmV0
dXJuIG1hbmdsZWROYW1lRm9yVHlwZSh1bm5hbWVkVHlwZSk7CisgICAgfSwgWyZdKEFTVDo6RW51
bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVtYmVyKSAtPiBTdHJpbmcgeworICAgICAgICBy
ZXR1cm4gbWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJlcihlbnVtZXJhdGlvbk1lbWJlcik7
CisgICAgfSk7CisgICAgbWV0YWxUeXBlRGVjbGFyYXRpb25Xcml0ZXIuVmlzaXRvcjo6dmlzaXQo
bV9wcm9ncmFtKTsKKyAgICByZXR1cm4gbWV0YWxUeXBlRGVjbGFyYXRpb25Xcml0ZXIudG9TdHJp
bmcoKTsKK30KKworc3RhdGljIFN0cmluZyB0b1N0cmluZyhBU1Q6OkFkZHJlc3NTcGFjZSBhZGRy
ZXNzU3BhY2UpCit7CisgICAgc3dpdGNoIChhZGRyZXNzU3BhY2UpIHsKKyAgICBjYXNlIEFTVDo6
QWRkcmVzc1NwYWNlOjpDb25zdGFudDoKKyAgICAgICAgcmV0dXJuICJjb25zdGFudCJfc3RyOwor
ICAgIGNhc2UgQVNUOjpBZGRyZXNzU3BhY2U6OkRldmljZToKKyAgICAgICAgcmV0dXJuICJkZXZp
Y2UiX3N0cjsKKyAgICBjYXNlIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWRncm91cDoKKyAgICAg
ICAgcmV0dXJuICJ0aHJlYWRncm91cCJfc3RyOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VS
VChhZGRyZXNzU3BhY2UgPT0gQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCk7CisgICAgICAgIHJl
dHVybiAidGhyZWFkIl9zdHI7CisgICAgfQorfQorCit2b2lkIFR5cGVOYW1lcjo6ZW1pdFVubmFt
ZWRUeXBlRGVmaW5pdGlvbihCYXNlVHlwZU5hbWVOb2RlJiBiYXNlVHlwZU5hbWVOb2RlLCBIYXNo
U2V0PEFTVDo6TmFtZWRUeXBlKj4mIGVtaXR0ZWROYW1lZFR5cGVzLCBIYXNoU2V0PEJhc2VUeXBl
TmFtZU5vZGUqPiYgZW1pdHRlZFVubmFtZWRUeXBlcywgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVp
bGRlcikKK3sKKyAgICBpZiAoZW1pdHRlZFVubmFtZWRUeXBlcy5jb250YWlucygmYmFzZVR5cGVO
YW1lTm9kZSkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoYmFzZVR5cGVOYW1lTm9kZS5wYXJl
bnQoKSkKKyAgICAgICAgZW1pdFVubmFtZWRUeXBlRGVmaW5pdGlvbigqYmFzZVR5cGVOYW1lTm9k
ZS5wYXJlbnQoKSwgZW1pdHRlZE5hbWVkVHlwZXMsIGVtaXR0ZWRVbm5hbWVkVHlwZXMsIHN0cmlu
Z0J1aWxkZXIpOworICAgIGlmIChpczxSZWZlcmVuY2VUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFt
ZU5vZGUpKSB7CisgICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PFJlZmVyZW5jZVR5
cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9kZSkubmFtZWRUeXBlKCk7CisgICAgICAgIGVtaXRO
YW1lZFR5cGVEZWZpbml0aW9uKG5hbWVkVHlwZSwgZW1pdHRlZE5hbWVkVHlwZXMsIGVtaXR0ZWRV
bm5hbWVkVHlwZXMsIHN0cmluZ0J1aWxkZXIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKCJ0eXBlZGVmICIsIG1hbmdsZWROYW1lRm9yVHlwZShuYW1lZFR5cGUpLCAn
ICcsIGJhc2VUeXBlTmFtZU5vZGUubWFuZ2xlZE5hbWUoKSwgIjtcbiIpKTsKKyAgICB9IGVsc2Ug
aWYgKGlzPFBvaW50ZXJUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpKSB7CisgICAgICAg
IGF1dG8mIHBvaW50ZXJUeXBlID0gZG93bmNhc3Q8UG9pbnRlclR5cGVOYW1lTm9kZT4oYmFzZVR5
cGVOYW1lTm9kZSk7CisgICAgICAgIEFTU0VSVChiYXNlVHlwZU5hbWVOb2RlLnBhcmVudCgpKTsK
KyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygidHlwZWRlZiAiLCB0b1N0
cmluZyhwb2ludGVyVHlwZS5hZGRyZXNzU3BhY2UoKSksICIgIiwgcG9pbnRlclR5cGUucGFyZW50
KCktPm1hbmdsZWROYW1lKCksICIqICIsIHBvaW50ZXJUeXBlLm1hbmdsZWROYW1lKCksICI7XG4i
KSk7CisgICAgfSBlbHNlIGlmIChpczxBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZT4oYmFzZVR5
cGVOYW1lTm9kZSkpIHsKKyAgICAgICAgYXV0byYgYXJyYXlSZWZlcmVuY2VUeXBlID0gZG93bmNh
c3Q8QXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpOworICAgICAg
ICBBU1NFUlQoYmFzZVR5cGVOYW1lTm9kZS5wYXJlbnQoKSk7CisgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcoInN0cnVjdCAiLCBhcnJheVJlZmVyZW5jZVR5cGUubWFuZ2xl
ZE5hbWUoKSwgInsgXG4iKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJp
bmcoIiAgICAiLCB0b1N0cmluZyhhcnJheVJlZmVyZW5jZVR5cGUuYWRkcmVzc1NwYWNlKCkpLCAi
ICIsIGFycmF5UmVmZXJlbmNlVHlwZS5wYXJlbnQoKS0+bWFuZ2xlZE5hbWUoKSwgIiogcG9pbnRl
cjtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICB1bnNpZ25lZCBsZW5n
dGg7XG4iKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn07XG4iKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBBU1NFUlQoaXM8QXJyYXlUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5v
ZGUpKTsKKyAgICAgICAgYXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8QXJyYXlUeXBlTmFtZU5v
ZGU+KGJhc2VUeXBlTmFtZU5vZGUpOworICAgICAgICBBU1NFUlQoYmFzZVR5cGVOYW1lTm9kZS5w
YXJlbnQoKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInR5cGVk
ZWYgQXJyYXk8IiwgYXJyYXlUeXBlLnBhcmVudCgpLT5tYW5nbGVkTmFtZSgpLCAiLCAiLCBhcnJh
eVR5cGUubnVtRWxlbWVudHMoKSwgIj4gIiwgYXJyYXlUeXBlLm1hbmdsZWROYW1lKCksICI7XG4i
KSk7CisgICAgfQorICAgIGVtaXR0ZWRVbm5hbWVkVHlwZXMuYWRkKCZiYXNlVHlwZU5hbWVOb2Rl
KTsKK30KKwordm9pZCBUeXBlTmFtZXI6OmVtaXROYW1lZFR5cGVEZWZpbml0aW9uKEFTVDo6TmFt
ZWRUeXBlJiBuYW1lZFR5cGUsIEhhc2hTZXQ8QVNUOjpOYW1lZFR5cGUqPiYgZW1pdHRlZE5hbWVk
VHlwZXMsIEhhc2hTZXQ8QmFzZVR5cGVOYW1lTm9kZSo+JiBlbWl0dGVkVW5uYW1lZFR5cGVzLCBT
dHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQoreworICAgIGlmIChlbWl0dGVkTmFtZWRUeXBl
cy5jb250YWlucygmbmFtZWRUeXBlKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gaXRlcmF0
b3IgPSBtX2RlcGVuZGVuY3lHcmFwaC5maW5kKCZuYW1lZFR5cGUpOworICAgIEFTU0VSVChpdGVy
YXRvciAhPSBtX2RlcGVuZGVuY3lHcmFwaC5lbmQoKSk7CisgICAgZm9yIChhdXRvJiBiYXNlVHlw
ZU5hbWVOb2RlIDogaXRlcmF0b3ItPnZhbHVlKQorICAgICAgICBlbWl0VW5uYW1lZFR5cGVEZWZp
bml0aW9uKGJhc2VUeXBlTmFtZU5vZGUsIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1l
ZFR5cGVzLCBzdHJpbmdCdWlsZGVyKTsKKyAgICBpZiAoaXM8QVNUOjpFbnVtZXJhdGlvbkRlZmlu
aXRpb24+KG5hbWVkVHlwZSkpIHsKKyAgICAgICAgLy8gV2UgYWxyZWFkeSBlbWl0dGVkIHRoaXMg
aW4gdGhlIHR5cGUgZGVjbGFyYXRpb24gc2VjdGlvbi4gVGhlcmUncyBub3RoaW5nIHRvIGRvLgor
ICAgIH0gZWxzZSBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkp
IHsKKyAgICAgICAgLy8gTmF0aXZlIHR5cGVzIGFscmVhZHkgaGF2ZSBkZWZpbml0aW9ucy4gVGhl
cmUncyBub3RoaW5nIHRvIGRvLgorICAgIH0gZWxzZSBpZiAoaXM8QVNUOjpTdHJ1Y3R1cmVEZWZp
bml0aW9uPihuYW1lZFR5cGUpKSB7CisgICAgICAgIGF1dG8mIHN0cnVjdHVyZURlZmluaXRpb24g
PSBkb3duY2FzdDxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSk7CisgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInN0cnVjdCAiLCBtYW5nbGVkTmFtZUZv
clR5cGUoc3RydWN0dXJlRGVmaW5pdGlvbiksICIge1xuIikpOworICAgICAgICBmb3IgKGF1dG8m
IHN0cnVjdHVyZUVsZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLnN0cnVjdHVyZUVsZW1lbnRz
KCkpCisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgIiwg
bWFuZ2xlZE5hbWVGb3JUeXBlKHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpKSwgJyAnLCBtYW5nbGVk
TmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoc3RydWN0dXJlRWxlbWVudCksICI7XG4iKSk7CisgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9O1xuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
QVNTRVJUKGlzPEFTVDo6VHlwZURlZmluaXRpb24+KG5hbWVkVHlwZSkpOworICAgICAgICBhdXRv
JiB0eXBlRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6VHlwZURlZmluaXRpb24+KG5hbWVkVHlw
ZSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInR5cGVkZWYgIiwg
bWFuZ2xlZE5hbWVGb3JUeXBlKHR5cGVEZWZpbml0aW9uLnR5cGUoKSksICcgJywgbWFuZ2xlZE5h
bWVGb3JUeXBlKHR5cGVEZWZpbml0aW9uKSwgIjtcbiIpKTsKKyAgICB9CisgICAgZW1pdHRlZE5h
bWVkVHlwZXMuYWRkKCZuYW1lZFR5cGUpOworfQorCitTdHJpbmcgVHlwZU5hbWVyOjptZXRhbFR5
cGVEZWZpbml0aW9ucygpCit7CisgICAgSGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+IGVtaXR0ZWRO
YW1lZFR5cGVzOworICAgIEhhc2hTZXQ8QmFzZVR5cGVOYW1lTm9kZSo+IGVtaXR0ZWRVbm5hbWVk
VHlwZXM7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOworICAgIGZvciAoYXV0byYg
a2V5VmFsdWVQYWlyIDogbV9kZXBlbmRlbmN5R3JhcGgpCisgICAgICAgIGVtaXROYW1lZFR5cGVE
ZWZpbml0aW9uKCprZXlWYWx1ZVBhaXIua2V5LCBlbWl0dGVkTmFtZWRUeXBlcywgZW1pdHRlZFVu
bmFtZWRUeXBlcywgc3RyaW5nQnVpbGRlcik7CisgICAgZm9yIChhdXRvJiBiYXNlVHlwZU5hbWVO
b2RlIDogbV90cmllKQorICAgICAgICBlbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKGJhc2VUeXBl
TmFtZU5vZGUsIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVzLCBzdHJpbmdC
dWlsZGVyKTsKKyAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworfQorCitTdHJp
bmcgVHlwZU5hbWVyOjptYW5nbGVkTmFtZUZvclR5cGUoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1l
ZFR5cGUpCit7CisgICAgcmV0dXJuIGZpbmQodW5uYW1lZFR5cGUsIG1fdHJpZSkubWFuZ2xlZE5h
bWUoKTsKK30KKworU3RyaW5nIFR5cGVOYW1lcjo6bWFuZ2xlZE5hbWVGb3JUeXBlKEFTVDo6TmFt
ZWRUeXBlJiBuYW1lZFR5cGUpCit7CisgICAgaWYgKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uPihuYW1lZFR5cGUpKQorICAgICAgICByZXR1cm4gbWFuZ2xlZE5hbWVGb3JUeXBlKGRvd25j
YXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKTsKKyAgICBhdXRvIGl0
ZXJhdG9yID0gbV9uYW1lZFR5cGVNYXBwaW5nLmZpbmQoJm5hbWVkVHlwZSk7CisgICAgQVNTRVJU
KGl0ZXJhdG9yICE9IG1fbmFtZWRUeXBlTWFwcGluZy5lbmQoKSk7CisgICAgcmV0dXJuIGl0ZXJh
dG9yLT52YWx1ZTsKK30KKworCitTdHJpbmcgVHlwZU5hbWVyOjptYW5nbGVkTmFtZUZvckVudW1l
cmF0aW9uTWVtYmVyKEFTVDo6RW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVtYmVyKQor
eworICAgIGF1dG8gaXRlcmF0b3IgPSBtX2VudW1lcmF0aW9uTWVtYmVyTWFwcGluZy5maW5kKCZl
bnVtZXJhdGlvbk1lbWJlcik7CisgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fZW51bWVyYXRpb25N
ZW1iZXJNYXBwaW5nLmVuZCgpKTsKKyAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlOworfQorCitT
dHJpbmcgVHlwZU5hbWVyOjptYW5nbGVkTmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoQVNUOjpTdHJ1
Y3R1cmVFbGVtZW50JiBzdHJ1Y3R1cmVFbGVtZW50KQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBt
X3N0cnVjdHVyZUVsZW1lbnRNYXBwaW5nLmZpbmQoJnN0cnVjdHVyZUVsZW1lbnQpOworICAgIEFT
U0VSVChpdGVyYXRvciAhPSBtX3N0cnVjdHVyZUVsZW1lbnRNYXBwaW5nLmVuZCgpKTsKKyAgICBy
ZXR1cm4gaXRlcmF0b3ItPnZhbHVlOworfQorCitTdHJpbmcgVHlwZU5hbWVyOjptZXRhbFR5cGVz
KCkKK3sKKyAgICBWaXNpdG9yOjp2aXNpdChtX3Byb2dyYW0pOworICAgIFN0cmluZ0J1aWxkZXIg
c3RyaW5nQnVpbGRlcjsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtZXRhbFR5cGVEZWNsYXJh
dGlvbnMoKSk7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQobWV0YWxUeXBlRGVmaW5pdGlvbnMoKSk7CisgICAgcmV0dXJuIHN0cmluZ0J1
aWxkZXIudG9TdHJpbmcoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgTWV0YWwKKworfSAvLyBuYW1l
c3BhY2UgV0hMU0wKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5h
bWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5
cGVOYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42M2NkNWZl
MmJjNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmgKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTFZp
c2l0b3IuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0NvbmNhdGVuYXRlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVO
dW1iZXJzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNz
IEVudW1lcmF0aW9uRGVmaW5pdGlvbjsKK2NsYXNzIEVudW1lcmF0aW9uTWVtYmVyOworY2xhc3Mg
TmFtZWRUeXBlOworY2xhc3MgTmF0aXZlVHlwZURlY2xhcmF0aW9uOworY2xhc3MgU3RydWN0dXJl
RGVmaW5pdGlvbjsKK2NsYXNzIFR5cGVEZWZpbml0aW9uOworY2xhc3MgVW5uYW1lZFR5cGU7CisK
K30KKworY2xhc3MgUHJvZ3JhbTsKKworbmFtZXNwYWNlIE1ldGFsIHsKKworY2xhc3MgQmFzZVR5
cGVOYW1lTm9kZTsKKworY2xhc3MgVHlwZU5hbWVyIDogcHJpdmF0ZSBWaXNpdG9yIHsKK3B1Ymxp
YzoKKyAgICBUeXBlTmFtZXIoUHJvZ3JhbSYpOworICAgIHZpcnR1YWwgflR5cGVOYW1lcigpOwor
CisgICAgU3RyaW5nIG1ldGFsVHlwZXMoKTsKKworICAgIC8vIE11c3QgYmUgY2FsbGVkIGFmdGVy
IGNhbGxpbmcgbWV0YWxUeXBlcygpLgorICAgIFN0cmluZyBtYW5nbGVkTmFtZUZvclR5cGUoQVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKTsKKyAgICBTdHJpbmcgbWFuZ2xlZE5hbWVGb3JUeXBl
KEFTVDo6VW5uYW1lZFR5cGUmKTsKKyAgICBTdHJpbmcgbWFuZ2xlZE5hbWVGb3JUeXBlKEFTVDo6
TmFtZWRUeXBlJik7CisgICAgU3RyaW5nIG1hbmdsZWROYW1lRm9yRW51bWVyYXRpb25NZW1iZXIo
QVNUOjpFbnVtZXJhdGlvbk1lbWJlciYpOworICAgIFN0cmluZyBtYW5nbGVkTmFtZUZvclN0cnVj
dHVyZUVsZW1lbnQoQVNUOjpTdHJ1Y3R1cmVFbGVtZW50Jik7CisKKyAgICBTdHJpbmcgZ2VuZXJh
dGVOZXh0VHlwZU5hbWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoInR5cGUi
LCBtX3R5cGVDb3VudCsrKTsKKyAgICB9CisKKyAgICBTdHJpbmcgZ2VuZXJhdGVOZXh0U3RydWN0
dXJlRWxlbWVudE5hbWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoInN0cnVj
dHVyZUVsZW1lbnQiLCBtX3N0cnVjdHVyZUVsZW1lbnRDb3VudCsrKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgdm9pZCB2aXNpdChBU1Q6OlVubmFtZWRUeXBlJikgb3ZlcnJpZGU7CisgICAgdm9p
ZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYpIG92ZXJyaWRlOworICAgIHZvaWQg
dmlzaXQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZp
c2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQo
QVNUOjpUeXBlRGVmaW5pdGlvbiYpIG92ZXJyaWRlOworCisgICAgU3RyaW5nIGdlbmVyYXRlTmV4
dEVudW1lcmF0aW9uTWVtYmVyTmFtZSgpCisgICAgeworICAgICAgICByZXR1cm4gbWFrZVN0cmlu
ZygiZW51bWVyYXRpb25NZW1iZXIiLCBtX2VudW1lcmF0aW9uTWVtYmVyQ291bnQrKyk7CisgICAg
fQorCisgICAgdm9pZCBlbWl0TmFtZWRUeXBlRGVmaW5pdGlvbihBU1Q6Ok5hbWVkVHlwZSYsIEhh
c2hTZXQ8QVNUOjpOYW1lZFR5cGUqPiYgZW1pdHRlZE5hbWVkVHlwZXMsIEhhc2hTZXQ8QmFzZVR5
cGVOYW1lTm9kZSo+JiBlbWl0dGVkVW5uYW1lZFR5cGVzLCBTdHJpbmdCdWlsZGVyJik7CisgICAg
dm9pZCBlbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKEJhc2VUeXBlTmFtZU5vZGUmLCBIYXNoU2V0
PEFTVDo6TmFtZWRUeXBlKj4mIGVtaXR0ZWROYW1lZFR5cGVzLCBIYXNoU2V0PEJhc2VUeXBlTmFt
ZU5vZGUqPiYgZW1pdHRlZFVubmFtZWRUeXBlcywgU3RyaW5nQnVpbGRlciYpOworICAgIFN0cmlu
ZyBtZXRhbFR5cGVEZWNsYXJhdGlvbnMoKTsKKyAgICBTdHJpbmcgbWV0YWxUeXBlRGVmaW5pdGlv
bnMoKTsKKworICAgIFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPiBjcmVhdGVOYW1lTm9kZShB
U1Q6OlVubmFtZWRUeXBlJiwgQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50KTsKKyAgICBzaXplX3Qg
aW5zZXJ0KEFTVDo6VW5uYW1lZFR5cGUmLCBWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5v
ZGU+PiYpOworCisgICAgUHJvZ3JhbSYgbV9wcm9ncmFtOworICAgIFZlY3RvcjxVbmlxdWVSZWY8
QmFzZVR5cGVOYW1lTm9kZT4+IG1fdHJpZTsKKyAgICBIYXNoTWFwPEFTVDo6VW5uYW1lZFR5cGUq
LCBCYXNlVHlwZU5hbWVOb2RlKj4gbV91bm5hbWVkVHlwZU1hcHBpbmc7CisgICAgSGFzaE1hcDxB
U1Q6Ok5hbWVkVHlwZSosIFN0cmluZz4gbV9uYW1lZFR5cGVNYXBwaW5nOworICAgIEhhc2hNYXA8
QVNUOjpOYW1lZFR5cGUqLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxCYXNlVHlwZU5h
bWVOb2RlPj4+IG1fZGVwZW5kZW5jeUdyYXBoOworICAgIEhhc2hNYXA8QVNUOjpFbnVtZXJhdGlv
bk1lbWJlciosIFN0cmluZz4gbV9lbnVtZXJhdGlvbk1lbWJlck1hcHBpbmc7CisgICAgSGFzaE1h
cDxBU1Q6OlN0cnVjdHVyZUVsZW1lbnQqLCBTdHJpbmc+IG1fc3RydWN0dXJlRWxlbWVudE1hcHBp
bmc7CisgICAgdW5zaWduZWQgbV90eXBlQ291bnQgeyAwIH07CisgICAgdW5zaWduZWQgbV9lbnVt
ZXJhdGlvbk1lbWJlckNvdW50IHsgMCB9OworICAgIHVuc2lnbmVkIG1fc3RydWN0dXJlRWxlbWVu
dENvdW50IHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgTWV0YWwKKworfSAvLyBuYW1lc3Bh
Y2UgV0hMU0wKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCmluZGV4
IDYwYjBlZmVlY2FjLi4yOTRkYzk4YmUzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCkBAIC0yMjEsOCArMjIxLDggQEAg
c3RhdGljIGJvb2wgY2hlY2tTZW1hbnRpY3MoVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgaW5wdXRJ
dGVtcywgVmVjdG9yPEVudHJ5UG9pbnQKICAgICAgICAgYXV0byBjaGVja1NlbWFudGljVHlwZXMg
PSBbJl0oY29uc3QgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgaXRlbXMpIC0+IGJvb2wgewogICAg
ICAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogaXRlbXMpIHsKICAgICAgICAgICAgICAgICBhdXRv
IGFjY2VwdGFibGUgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IEFTVDo6
QmFzZVNlbWFudGljJiBzZW1hbnRpYykgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzZW1hbnRpYy5pc0FjY2VwdGFibGVUeXBlKGl0ZW0udW5uYW1lZFR5cGUsIGludHJpbnNp
Y3MpOwotICAgICAgICAgICAgICAgIH0pLCBpdGVtLnNlbWFudGljKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHNlbWFudGljLmlzQWNjZXB0YWJsZVR5cGUoKml0ZW0udW5uYW1lZFR5cGUs
IGludHJpbnNpY3MpOworICAgICAgICAgICAgICAgIH0pLCAqaXRlbS5zZW1hbnRpYyk7CiAgICAg
ICAgICAgICAgICAgaWYgKCFhY2NlcHRhYmxlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICB9CkBAIC0yMzksNyArMjM5LDcgQEAgc3RhdGljIGJvb2wgY2hl
Y2tTZW1hbnRpY3MoVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgaW5wdXRJdGVtcywgVmVjdG9yPEVu
dHJ5UG9pbnQKICAgICAgICAgICAgIGZvciAoYXV0byYgaXRlbSA6IGl0ZW1zKSB7CiAgICAgICAg
ICAgICAgICAgYXV0byBhY2NlcHRhYmxlID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsm
XShjb25zdCBBU1Q6OkJhc2VTZW1hbnRpYyYgc2VtYW50aWMpIC0+IGJvb2wgewogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc2VtYW50aWMuaXNBY2NlcHRhYmxlRm9yU2hhZGVySXRlbURpcmVj
dGlvbihkaXJlY3Rpb24sIGVudHJ5UG9pbnRUeXBlKTsKLSAgICAgICAgICAgICAgICB9KSwgaXRl
bS5zZW1hbnRpYyk7CisgICAgICAgICAgICAgICAgfSksICppdGVtLnNlbWFudGljKTsKICAgICAg
ICAgICAgICAgICBpZiAoIWFjY2VwdGFibGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIH0KQEAgLTI1NiwxMSArMjU2LDExIEBAIHN0YXRpYyBib29sIGNo
ZWNrU2VtYW50aWNzKFZlY3RvcjxFbnRyeVBvaW50SXRlbT4mIGlucHV0SXRlbXMsIFZlY3RvcjxF
bnRyeVBvaW50CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBpdGVtcykgewogICAgICAg
ICAgICAgICAgIFBPRENoZWNrZXIgcG9kQ2hlY2tlcjsKICAgICAgICAgICAgICAgICBpZiAoaXM8
QVNUOjpQb2ludGVyVHlwZT4oaXRlbS51bm5hbWVkVHlwZSkpCi0gICAgICAgICAgICAgICAgICAg
IHBvZENoZWNrZXIuY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+
KGl0ZW0udW5uYW1lZFR5cGUpLmVsZW1lbnRUeXBlKCkpOworICAgICAgICAgICAgICAgICAgICBw
b2RDaGVja2VyLmNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigq
aXRlbS51bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKSk7CiAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KGl0ZW0udW5uYW1lZFR5cGUpKQotICAgICAg
ICAgICAgICAgICAgICBwb2RDaGVja2VyLmNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZT4oaXRlbS51bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHBvZENoZWNrZXIuY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0
PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPigqaXRlbS51bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUo
KSk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpBcnJheVR5cGU+KGl0ZW0udW5u
YW1lZFR5cGUpKQotICAgICAgICAgICAgICAgICAgICBwb2RDaGVja2VyLmNoZWNrRXJyb3JBbmRW
aXNpdChkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4oaXRlbS51bm5hbWVkVHlwZSkudHlwZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgcG9kQ2hlY2tlci5jaGVja0Vycm9yQW5kVmlzaXQoZG93bmNh
c3Q8QVNUOjpBcnJheVR5cGU+KCppdGVtLnVubmFtZWRUeXBlKS50eXBlKCkpOwogICAgICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAg
ICAgaWYgKHBvZENoZWNrZXIuZXJyb3IoKSkKQEAgLTYxMiwxNiArNjEyLDEyIEBAIHZvaWQgQ2hl
Y2tlcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5p
dGlvbikKICAgICBhdXRvKiBiYXNlVHlwZSA9IChbJl0oKSAtPiBBU1Q6Ok5hdGl2ZVR5cGVEZWNs
YXJhdGlvbiogewogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZW51bWVyYXRpb25EZWZpbml0
aW9uLnR5cGUoKSk7CiAgICAgICAgIGF1dG8mIGJhc2VUeXBlID0gZW51bWVyYXRpb25EZWZpbml0
aW9uLnR5cGUoKS51bmlmeU5vZGUoKTsKLSAgICAgICAgaWYgKCFpczxBU1Q6OlVubmFtZWRUeXBl
PihiYXNlVHlwZSkpCisgICAgICAgIGlmICghaXM8QVNUOjpOYW1lZFR5cGU+KGJhc2VUeXBlKSkK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBhdXRvJiB1bm5hbWVkQmFzZSA9
IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KGJhc2VUeXBlKTsKLSAgICAgICAgaWYgKCFpczxB
U1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRCYXNlKSkKKyAgICAgICAgYXV0byYgbmFtZWRUeXBl
ID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KGJhc2VUeXBlKTsKKyAgICAgICAgaWYgKCFpczxB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKSkKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICBhdXRvJiB0eXBlUmVmZXJlbmNlQmFzZSA9IGRvd25jYXN0PEFT
VDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZEJhc2UpOwotICAgICAgICBBU1NFUlQodHlwZVJlZmVy
ZW5jZUJhc2UucmVzb2x2ZWRUeXBlKCkpOwotICAgICAgICBpZiAoIWlzPEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZUJhc2UucmVzb2x2ZWRUeXBlKCkpKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
biA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZUJh
c2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24g
PSBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKTsKICAgICAg
ICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNJbnQoKSkKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICByZXR1cm4gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50
cnlQb2ludEl0ZW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcAppbmRleCBhMThlYWMzOGVhMy4uNDVhNjJhNmQy
ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
R2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAKQEAgLTcxLDcgKzcxLDcg
QEAgcHVibGljOgogICAgICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQotICAgICAgICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQb2ludEl0
ZW0obV90eXBlUmVmZXJlbmNlcy5sYXN0KCkuZ2V0KCksICptX2N1cnJlbnRTZW1hbnRpYykpOwor
ICAgICAgICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQb2ludEl0ZW0obV90eXBlUmVm
ZXJlbmNlcy5sYXN0KCkuZ2V0KCksICptX2N1cnJlbnRTZW1hbnRpYywgbV9wYXRoKSk7CiAgICAg
fQogCiAgICAgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlw
ZURlY2xhcmF0aW9uKQpAQCAtODUsNyArODUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAotICAgICAgICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQ
b2ludEl0ZW0obV90eXBlUmVmZXJlbmNlcy5sYXN0KCkuZ2V0KCksICptX2N1cnJlbnRTZW1hbnRp
YykpOworICAgICAgICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQb2ludEl0ZW0obV90
eXBlUmVmZXJlbmNlcy5sYXN0KCkuZ2V0KCksICptX2N1cnJlbnRTZW1hbnRpYywgbV9wYXRoKSk7
CiAgICAgfQogCiAgICAgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVj
dHVyZURlZmluaXRpb24pCkBAIC05OCw3ICs5OCw5IEBAIHB1YmxpYzoKICAgICAgICAgZm9yIChh
dXRvJiBzdHJ1Y3R1cmVFbGVtZW50IDogc3RydWN0dXJlRGVmaW5pdGlvbi5zdHJ1Y3R1cmVFbGVt
ZW50cygpKSB7CiAgICAgICAgICAgICBpZiAoc3RydWN0dXJlRWxlbWVudC5zZW1hbnRpYygpKQog
ICAgICAgICAgICAgICAgIG1fY3VycmVudFNlbWFudGljID0gJipzdHJ1Y3R1cmVFbGVtZW50LnNl
bWFudGljKCk7CisgICAgICAgICAgICBtX3BhdGguYXBwZW5kKHN0cnVjdHVyZUVsZW1lbnQubmFt
ZSgpKTsKICAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdHJ1Y3R1cmVFbGVtZW50KTsK
KyAgICAgICAgICAgIG1fcGF0aC50YWtlTGFzdCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0x
MjIsNyArMTI0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQo
RW50cnlQb2ludEl0ZW0ocG9pbnRlclR5cGUsICptX2N1cnJlbnRTZW1hbnRpYykpOworICAgICAg
ICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQb2ludEl0ZW0ocG9pbnRlclR5cGUsICpt
X2N1cnJlbnRTZW1hbnRpYywgbV9wYXRoKSk7CiAgICAgfQogCiAgICAgdm9pZCB2aXNpdChBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZSYgYXJyYXlSZWZlcmVuY2VUeXBlKQpAQCAtMTMxLDcgKzEzMyw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgbV9lbnRyeVBvaW50SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJ
dGVtKGFycmF5UmVmZXJlbmNlVHlwZSwgKm1fY3VycmVudFNlbWFudGljKSk7CisgICAgICAgIG1f
ZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbShhcnJheVJlZmVyZW5jZVR5cGUs
ICptX2N1cnJlbnRTZW1hbnRpYywgbV9wYXRoKSk7CiAgICAgfQogCiAgICAgdm9pZCB2aXNpdChB
U1Q6OkFycmF5VHlwZSYgYXJyYXlUeXBlKQpAQCAtMTQwLDcgKzE0Miw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgbV9lbnRyeVBvaW50SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKGFycmF5VHlwZSwg
Km1fY3VycmVudFNlbWFudGljKSk7CisgICAgICAgIG1fZW50cnlQb2ludEl0ZW1zLmFwcGVuZChF
bnRyeVBvaW50SXRlbShhcnJheVR5cGUsICptX2N1cnJlbnRTZW1hbnRpYywgbV9wYXRoKSk7CiAg
ICAgfQogCiAgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxl
RGVjbGFyYXRpb24pCkBAIC0xNDgsMTEgKzE1MCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VS
VCghbV9jdXJyZW50U2VtYW50aWMpOwogICAgICAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5z
ZW1hbnRpYygpKQogICAgICAgICAgICAgbV9jdXJyZW50U2VtYW50aWMgPSAmKnZhcmlhYmxlRGVj
bGFyYXRpb24uc2VtYW50aWMoKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24udHlw
ZSgpKQotICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCp2YXJpYWJsZURlY2xhcmF0aW9u
LnR5cGUoKSk7CisgICAgICAgIEFTU0VSVCh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7Cisg
ICAgICAgIG1fcGF0aC5hcHBlbmQodmFyaWFibGVEZWNsYXJhdGlvbi5uYW1lKCkpOworICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoKnZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAg
ICAgbV9wYXRoLnRha2VMYXN0KCk7CiAgICAgfQogCiBwcml2YXRlOgorICAgIFZlY3RvcjxTdHJp
bmc+IG1fcGF0aDsKICAgICBjb25zdCBJbnRyaW5zaWNzJiBtX2ludHJpbnNpY3M7CiAgICAgQVNU
OjpTZW1hbnRpYyogbV9jdXJyZW50U2VtYW50aWMgeyBudWxscHRyIH07CiAgICAgVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpUeXBlUmVmZXJlbmNlPj4gbV90eXBlUmVmZXJlbmNl
czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
R2F0aGVyRW50cnlQb2ludEl0ZW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oCmluZGV4IDIwMzY3YmUzZTI5Li42NjY0
ZTJlMzQyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oCkBAIC0zMCw2ICszMCw3
IEBACiAjaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NSwxNCArNDYsMTYgQEAgY2xhc3MgSW50
cmluc2ljczsKIGNsYXNzIFVubmFtZWRUeXBlOwogCiBzdHJ1Y3QgRW50cnlQb2ludEl0ZW0gewot
ICAgIEVudHJ5UG9pbnRJdGVtKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBBU1Q6OlNl
bWFudGljJiBzZW1hbnRpYykKLSAgICAgICAgOiB1bm5hbWVkVHlwZSh1bm5hbWVkVHlwZSkKLSAg
ICAgICAgLCBzZW1hbnRpYyhzZW1hbnRpYykKKyAgICBFbnRyeVBvaW50SXRlbShBU1Q6OlVubmFt
ZWRUeXBlJiB1bm5hbWVkVHlwZSwgQVNUOjpTZW1hbnRpYyYgc2VtYW50aWMsIFZlY3RvcjxTdHJp
bmc+JiBwYXRoKQorICAgICAgICA6IHVubmFtZWRUeXBlKCZ1bm5hbWVkVHlwZSkKKyAgICAgICAg
LCBzZW1hbnRpYygmc2VtYW50aWMpCisgICAgICAgICwgcGF0aChwYXRoKQogICAgIHsKICAgICB9
CiAKLSAgICBBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZTsKLSAgICBBU1Q6OlNlbWFudGlj
JiBzZW1hbnRpYzsKKyAgICBBU1Q6OlVubmFtZWRUeXBlKiB1bm5hbWVkVHlwZTsKKyAgICBBU1Q6
OlNlbWFudGljKiBzZW1hbnRpYzsKKyAgICBWZWN0b3I8U3RyaW5nPiBwYXRoOwogfTsKIAogc3Ry
dWN0IEVudHJ5UG9pbnRJdGVtcyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGRjMmU0YmYwZGQ3Li42NDlk
ZDdlMGQ2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTMyNiw2ICszMjYsMTEgQEAgTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xSZWN1cnNpb25DaGVja2VyLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xWaXNpdG9yLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMaXRlcmFsVHlwZUNo
ZWNrZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEhpZ2hab21iaWVGaW5kZXIuY3Bw
CitNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAKK01vZHVsZXMv
d2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCitNb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5jcHAKK01vZHVsZXMvd2ViZ3B1
L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwCitNb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAKIE1vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMRnVuY3Rpb25TdGFnZUNoZWNrZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xCdWlsdEluU2VtYW50aWMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNWM5YWIwNTYwYmYuLjBlYzVhZjVkZmI1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC02NDYwLDYgKzY0NjAsMTYgQEAKIAkJMUNERDQ1RTYwQkE5Qzg0NjAwRjkwMTQ3IC8qIEJh
c2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gQmFzZS54Y2NvbmZp
Zzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNFQ0IzQTgyMUYyQjY3MzAwRjQ0NTQy
IC8qIFdITFNMU3RhdGVtZW50QmVoYXZpb3JDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNM
U3RhdGVtZW50QmVoYXZpb3JDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFDRUNCM0E5MjFGMkI2NzMwMEY0NDU0MiAvKiBXSExTTFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDRUNCM0FGMjFGMkI5ODQwMEY0NDU0
MiAvKiBXSExTTEZ1bmN0aW9uV3JpdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMRnVu
Y3Rpb25Xcml0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0VDQjNCMDIx
RjJCOTg1MDBGNDQ1NDIgLyogV0hMU0xUeXBlTmFtZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xU
eXBlTmFtZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNFQ0IzQjEyMUYyQjk4
NTAwRjQ0NTQyIC8qIFdITFNMVHlwZU5hbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNM
VHlwZU5hbWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNFQ0IzQjIyMUYy
Qjk4NjAwRjQ0NTQyIC8qIFdITFNMRnVuY3Rpb25Xcml0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hM
U0xGdW5jdGlvbldyaXRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0VDQjNC
NTIxRjUwQUM3MDBGNDQ1NDIgLyogV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxQ0VDQjNCNjIxRjUwQUM3MDBGNDQ1NDIgLyogV0hMU0xNZXRhbENvZGVH
ZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNFQ0IzQjgyMUY1MEQxMDAwRjQ0NTQyIC8qIFdI
TFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xOYXRp
dmVGdW5jdGlvbldyaXRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDRUNC
M0I5MjFGNTBEMTAwMEY0NDU0MiAvKiBXSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMUNFQ0IzQkEyMUY1MTFBQTAwRjQ0NTQyIC8qIFdITFNMRW50cnlQb2ludFNj
YWZmb2xkaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMRW50cnlQb2ludFNjYWZmb2xk
aW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNFQ0IzQkIyMUY1MTFBQTAw
RjQ0NTQyIC8qIFdITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdI
TFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFDRkFFMzIyMEE2RDZBM0YwMDMyNTkzRCAvKiBsaWJvYmpjLmR5bGliICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxp
YiI7IG5hbWUgPSBsaWJvYmpjLmR5bGliOyBwYXRoID0gL3Vzci9saWIvbGlib2JqYy5keWxpYjsg
c291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJMURDNTUzRkQyMTFCQTEyQTAwNEI3ODBF
IC8qIE5hdmlnYXRvclNoYXJlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBOYXZpZ2F0b3JT
aGFyZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFEQzU1M0ZGMjExQkE4NDEw
MDRCNzgwRSAvKiBTaGFyZURhdGEuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNoYXJlRGF0
YS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzE1MCw2ICsxNzE2MCwyMyBA
QAogCQkJdGFiV2lkdGggPSA0OwogCQkJdXNlc1RhYnMgPSAwOwogCQl9OworCQkxQ0VDQjNBRDIx
RjJCOTY0MDBGNDQ1NDIgLyogTWV0YWwgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNo
aWxkcmVuID0gKAorCQkJCTFDRUNCM0JBMjFGNTExQUEwMEY0NDU0MiAvKiBXSExTTEVudHJ5UG9p
bnRTY2FmZm9sZGluZy5jcHAgKi8sCisJCQkJMUNFQ0IzQkIyMUY1MTFBQTAwRjQ0NTQyIC8qIFdI
TFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmggKi8sCisJCQkJMUNFQ0IzQUYyMUYyQjk4NDAwRjQ0
NTQyIC8qIFdITFNMRnVuY3Rpb25Xcml0ZXIuY3BwICovLAorCQkJCTFDRUNCM0IyMjFGMkI5ODYw
MEY0NDU0MiAvKiBXSExTTEZ1bmN0aW9uV3JpdGVyLmggKi8sCisJCQkJMUNFQ0IzQjUyMUY1MEFD
NzAwRjQ0NTQyIC8qIFdITFNMTWV0YWxDb2RlR2VuZXJhdG9yLmNwcCAqLywKKwkJCQkxQ0VDQjNC
NjIxRjUwQUM3MDBGNDQ1NDIgLyogV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuaCAqLywKKwkJCQkx
Q0VDQjNCODIxRjUwRDEwMDBGNDQ1NDIgLyogV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAg
Ki8sCisJCQkJMUNFQ0IzQjkyMUY1MEQxMDAwRjQ0NTQyIC8qIFdITFNMTmF0aXZlRnVuY3Rpb25X
cml0ZXIuaCAqLywKKwkJCQkxQ0VDQjNCMTIxRjJCOTg1MDBGNDQ1NDIgLyogV0hMU0xUeXBlTmFt
ZXIuY3BwICovLAorCQkJCTFDRUNCM0IwMjFGMkI5ODUwMEY0NDU0MiAvKiBXSExTTFR5cGVOYW1l
ci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBNZXRhbDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CisJCX07CiAJCTI2Qjk5OThEMTgwM0FERkEwMEQwMTEyMSAvKiBjc3NqaXQgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjU1NjIsNiArMjU1ODksNyBA
QAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkxQ0EwQzJGNjIxRUVE
QUQyMDBBMTE4NjAgLyogQVNUICovLAorCQkJCTFDRUNCM0FEMjFGMkI5NjQwMEY0NDU0MiAvKiBN
ZXRhbCAqLywKIAkJCQlDMjM0QTlCMjIxRTkyQzFGMDAzQzk4NEQgLyogV0hMU0xDaGVja0R1cGxp
Y2F0ZUZ1bmN0aW9ucy5jcHAgKi8sCiAJCQkJQzIzNEE5QUUyMUU5MkMxQTAwM0M5ODREIC8qIFdI
TFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaCAqLywKIAkJCQkxQzg0MEI5QjIxRUM0MDA5MDBE
MDUwMEQgLyogV0hMU0xDaGVja2VyLmNwcCAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359647</attachid>
            <date>2019-01-20 13:41:55 -0800</date>
            <delta_ts>2019-01-20 17:21:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193531-20190120134154.patch</filename>
            <type>text/plain</type>
            <size>123785</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwMjE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmU0OTFmNmQ3MGQ3MmE1
YjQzOTJmZGFkNWJjMWY2ZjYzMTQ4NjNiMS4uOWZjOTA0Yjc1MTk5ZDE2NjE3YzgzNDA3MzdkNzc4
N2Y1ODE1YjhjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MCBAQAorMjAxOS0wMS0yMCAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0g
SW1wbGVtZW50IE1ldGFsIGNvZGUgZ2VuZXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkzNTMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpbXBsZW1lbnRzIHRoZSBtYWpvcml0eSBvZiB0
aGUgbWV0YWwgY29kZSBnZW5lcmF0aW9uIHBpZWNlLiBUaGVyZSBhcmUgc3RpbGwgYSBmZXcgcGll
Y2VzIG1pc3NpbmcsCisgICAgICAgIHRoYXQgSSdsbCBhZGQgaW4gZm9sbG93IHVwIHBhdGNoZXMu
IFRoZXJlJ3Mgc3RpbGwgZW5vdWdoIGNvbXBsZXhpdHkgaGVyZSB0aGF0IHRoaXMgaXMgd29ydGgg
cmV2aWV3aW5nCisgICAgICAgIG9uIGl0J3Mgb3duLCB0aG91Z2guCisKKyAgICAgICAgVGhpcyBw
YXRjaCBpbmNsdWRlcyBhIGZldyBwaWVjZXM6CisgICAgICAgIC0gTWV0YWwgdHlwZWRlZnMgZm9y
IGV2ZXJ5IFdITFNMIHR5cGUuIFRoaXMgYW5hbHlzaXMgaXMgYWN0dWFsbHkgcHJldHR5IGludGVy
ZXN0aW5nLCBiZWNhdXNlIGNvbXBsZXgKKyAgICAgICAgICAgICAgdHlwZXMgZGVwZW5kIG9uIHRo
ZWlyIGlubmVyIHR5cGVzLCBhbmQgdGhlIGlubmVyIHR5cGVzIG5lZWQgdG8gYmUgZW1pdHRlZCBm
aXJzdC4gVGhlcmVmb3JlLAorICAgICAgICAgICAgICB0aGlzIHBhdGNoIGltcGxlbWVudHMgYSB0
b3BvbG9naWNhbCBzb3J0IHdoZW4gZW1pdHRpbmcgdHlwZXMuIEFsc28sIFdITFNMIHR5cGVzIG5l
ZWQgdG8gYmUgZGUtCisgICAgICAgICAgICAgIGR1cGVkIGJlY2F1c2UgYXJyYXkgcmVmZXJlbmNl
cyBhcmUgaW1wbGVtZW50ZWQgaW4gTVNMIGFzIHN0cnVjdHMsIGFuZCBpZiB5b3UgaGF2ZSB0d28g
c3RydWN0cworICAgICAgICAgICAgICBpbiBNU0wgd2l0aCB0aGUgc2FtZSBjb250ZW50cywgdGhv
c2UgdHdvIHN0cnVjdHMgYXJlIG5vdCBlcXVhbCBhbmQgY2Fubm90IGJlIGFzc2lnbmVkIHRvIGVh
Y2gKKyAgICAgICAgICAgICAgb3RoZXIuIFNvLCB0aGlzIHBhdGNoIGNyZWF0ZXMgYSB0cmllIHRv
IGRlLWR1cCBhbGwgdGhlIFVubmFtZWRUeXBlcywgYW5kIGltcGxlbWVudHMgYQorICAgICAgICAg
ICAgICBkZXBlbmRlbmN5IGdyYXBoIHdoaWNoIGluY2x1ZGVzIGJvdGggbm9kZXMgaW4gdGhlIHRy
aWUgYXMgd2VsbCBhcyBOYW1lZFR5cGVzIHdoaWNoIGRvbid0IGFwcGVhcgorICAgICAgICAgICAg
ICBpbiB0aGUgdHJpZS4KKyAgICAgICAgLSBXSExTTCBlbnVtZXJhdGlvbiBjb2RlIGdlbmVyYXRp
b24KKyAgICAgICAgLSBBIG5hbWUgbWFuZ2xlciwgd2hpY2ggZW5zdXJlcyB0aGF0IG5vIHRleHQg
ZnJvbSB0aGUgc291cmNlIHByb2dyYW0gaXMgY29udGFpbmVkIHdpdGhpbiB0aGUgcmVzdWx0Cisg
ICAgICAgICAgICAgIHByb2dyYW0KKyAgICAgICAgLSBGdWxsIHN1cHBvcnQgZm9yIGV4cHJlc3Np
b25zLiBBbiBleHByZXNzaW9uIGxpa2UgInkgPSAqeCArIDc7IiB3b3VsZCBiZSBjb252ZXJ0ZWQg
dG8gc29tZXRoaW5nIGxpa2UKKyAgICAgICAgICAgICAgVHlwZTEgdmFyaWFibGUxID0gKng7Cisg
ICAgICAgICAgICAgIFR5cGUyIHZhcmlhYmxlMiA9IDc7CisgICAgICAgICAgICAgIFR5cGUzIHZh
cmlhYmxlMyA9IHZhcmlhYmxlMSArIHZhcmlhYmxlMjsKKyAgICAgICAgICAgICAgeSA9IHZhcmlh
YmxlMzsKKyAgICAgICAgLSBNb3N0bHkgY29tcGxldGUgc3VwcG9ydCBmb3IgY29udHJvbCBmbG93
LiBUaGlzIGlzIHRyaWNreSBiZWNhdXNlIG9mIGhvdyB3ZSB0cmFuc2Zvcm0gV0hMU0wKKyAgICAg
ICAgICAgICAgZXhwcmVzc2lvbnMgaW50byBDKysgc3RhdGVtZW50cy4gVGhlcmVmb3JlLCB0aGlu
Z3MgbGlrZSAiZm9yICggOyAqeCArIDc7ICkiIGlzIGRpZmZpY3VsdCB0bworICAgICAgICAgICAg
ICBjb21waWxlLCBiZWNhdXNlIHdlIGNhbid0IHB1dCB0aGUgIip4ICsgNyIgZ2VuZXJhdGVkIHN0
YXRlbWVudHMgaW50byB0aGUgZm9yIGxvb3AgaXRzZWxmLgorICAgICAgICAgICAgICBJbnN0ZWFk
LCB3ZSBoYXZlIHRvIGVtaXQgdGhpcyBjb2RlIGluc2lkZSB0aGUgbG9vcCwgaW4gYWxsIHRoZSBw
bGFjZXMgdGhhdCB3b3VsZCBpbXBsaWNpdGx5IHJ1bgorICAgICAgICAgICAgICBpdC4gVGhpcyBw
YXRjaCBkb2Vzbid0IGZ1bGx5IGhhbmRsZSB0aGlzLCBzZWUgYmVsb3cuIChJZiBNU0wgc3VwcG9y
dGVkIGxhbWJkYXMsIHdlIGNvdWxkIHB1dAorICAgICAgICAgICAgICB0aGUgc3RhdGVtZW50cyBp
bnRvIGEgbGFtYmRhIGFuZCBkbyBzb21ldGhpbmcgbGlrZSAiZm9yICggOyB0aGVMYW1iZGEoKTsg
KSIgYnV0IE1TTCBkb2Vzbid0CisgICAgICAgICAgICAgIHN1cHBvcnQgbGFtYmRhcy4pCisKKyAg
ICAgICAgTWlzc2luZyBwaWVjZXM6CisgICAgICAgIC0gRW50cnkgcG9pbnQgcGFjayAvIHVucGFj
ayBjb2RlCisgICAgICAgIC0gU3VwcG9ydCBmb3IgImNvbnRpbnVlIiAoU2VlIGFib3ZlIHJlZ2Fy
ZGluZyBjb250cm9sIGZsb3cpCisgICAgICAgIC0gS25vd2luZyB3aGV0aGVyIG9yIG5vdCBhIHN3
aXRjaCBjYXNlIHNob3VsZCBlbmQgd2l0aCBicmVhayBvciBmYWxsdGhyb3VnaAorICAgICAgICAt
IFRyYXBwaW5nCisgICAgICAgIC0gWmVybyBmaWxsaW5nIHZhcmlhYmxlcworICAgICAgICAtIENv
ZGUgZ2VuZXJhdGlvbiBmb3IgY29tcGlsZXItZ2VuZXJhdGVkIG5hdGl2ZSBmdW5jdGlvbnMgKHRo
aXMgcGF0Y2ggc3VwcG9ydHMgbmF0aXZlIGZ1bmN0aW9ucyBpbiB0aGUKKyAgICAgICAgICAgICAg
c3RhbmRhcmQgbGlicmFyeSwgdGV4dHVyZSBmdW5jdGlvbnMsIGFuZCBITFNMJ3MgaGFsZiA8LT4g
aW50IGZ1bmN0aW9ucy4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBpdCBpc24ndCBo
b29rZWQgdXAgeWV0LiBBcyBzb29uIGFzIHdlIGNhbiBkbyBlbnRyeSBwb2ludCBwYWNraW5nIGFu
ZCB1bnBhY2tpbmcsCisgICAgICAgIEknbGwgc3RhcnQgcG9ydGluZyB0aGUgdGVzdCBzdWl0ZS4K
KworICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRp
Yy5oOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6QnVpbHRJblNlbWFudGljOjp0YXJn
ZXRJbmRleCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVz
c2lvbi5oOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6RXhwcmVzc2lvbjo6cmVzb2x2
ZWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4cHJlc3Npb246OnR5cGUp
OiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0
aW9uRGVjbGFyYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb246Om5hbWUpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFN0cnVjdHVyZURlZmluaXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6
OlN0cnVjdHVyZURlZmluaXRpb246OmZpbmQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dI
TFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6RW50cnlQb2lu
dFNjYWZmb2xkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RW50cnlQb2lu
dFNjYWZmb2xkaW5nOjpoZWxwZXJUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0
YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6c2lnbmF0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpNZXRhbDo6RW50cnlQb2ludFNjYWZmb2xkaW5nOjp1bnBhY2spOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnBhY2spOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xk
aW5nLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMTG9vcENoZWNrZXIuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTEZ1bmN0aW9uV3JpdGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
TWV0YWw6OkZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXI6OkZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlvbkRlY2xhcmF0aW9u
V3JpdGVyOjp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlcjo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp0b1N0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldy
aXRlcjo6Y29uc3RhbnRFeHByZXNzaW9uU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjpnZW5lcmF0ZU5leHRWYXJpYWJsZU5h
bWUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjptZXRhbEZ1bmN0aW9ucyk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExv
b3BDaGVja2VyLmguCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xN
ZXRhbENvZGVHZW5lcmF0b3IuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmguCisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6TWV0YWw6OmdlbmVyYXRlTWV0YWxDb2RlKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExvb3BDaGVja2Vy
LmguCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5j
dGlvbldyaXRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpn
ZXROYXRpdmVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6bWFwRnVuY3Rp
b25OYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6Y29udmVydEFkZHJlc3NT
cGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OndyaXRlTmF0aXZlRnVuY3Rp
b24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVu
Y3Rpb25Xcml0ZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xMb29wQ2hlY2tlci5oLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNM
L01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6TWV0YWw6OkJhc2VUeXBlTmFtZU5vZGU6OkJhc2VUeXBlTmFtZU5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpCYXNlVHlwZU5hbWVOb2RlOjppc0FycmF5VHlwZU5hbWVO
b2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6QmFzZVR5cGVOYW1l
Tm9kZTo6aXNBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6TWV0YWw6OkJhc2VUeXBlTmFtZU5vZGU6OmlzUG9pbnRlclR5cGVOYW1lTm9k
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkJhc2VUeXBlTmFtZU5v
ZGU6OmlzUmVmZXJlbmNlVHlwZU5hbWVOb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpNZXRhbDo6QmFzZVR5cGVOYW1lTm9kZTo6Y2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6Ok1ldGFsOjpCYXNlVHlwZU5hbWVOb2RlOjphcHBlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6Ok1ldGFsOjpCYXNlVHlwZU5hbWVOb2RlOjpwYXJlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpCYXNlVHlwZU5hbWVOb2RlOjptYW5nbGVkTmFtZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkFycmF5VHlwZU5hbWVOb2RlOjpB
cnJheVR5cGVOYW1lTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkFycmF5
VHlwZU5hbWVOb2RlOjpudW1FbGVtZW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6TWV0YWw6OkFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlOjpBcnJheVJlZmVyZW5jZVR5cGVO
YW1lTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkFycmF5UmVmZXJlbmNl
VHlwZU5hbWVOb2RlOjphZGRyZXNzU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6Ok1ldGFsOjpQb2ludGVyVHlwZU5hbWVOb2RlOjpQb2ludGVyVHlwZU5hbWVOb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UG9pbnRlclR5cGVOYW1lTm9kZTo6YWRkcmVz
c1NwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6UmVmZXJlbmNl
VHlwZU5hbWVOb2RlOjpSZWZlcmVuY2VUeXBlTmFtZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6Ok1ldGFsOjpSZWZlcmVuY2VUeXBlTmFtZU5vZGU6Om5hbWVkVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6VHlwZU5hbWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5hbWVyOjp2aXNpdCk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6TWV0YWw6OmZpbmRJblZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6TWV0YWw6OmZpbmQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFt
ZXI6Om1hbmdsZWROYW1lRm9yVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6
OlR5cGVOYW1lcjo6Y3JlYXRlTmFtZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1l
dGFsOjpUeXBlTmFtZXI6Omluc2VydCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6
Ok1ldGFsVHlwZURlY2xhcmF0aW9uV3JpdGVyOjpNZXRhbFR5cGVEZWNsYXJhdGlvbldyaXRlcik6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6Ok1ldGFsVHlwZURlY2xhcmF0aW9uV3Jp
dGVyOjp0b1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6Ok1ldGFsVHlw
ZURlY2xhcmF0aW9uV3JpdGVyOjp2aXNpdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0
YWw6OlR5cGVOYW1lcjo6bWV0YWxUeXBlRGVjbGFyYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpNZXRhbDo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFs
OjpUeXBlTmFtZXI6OmVtaXRVbm5hbWVkVHlwZURlZmluaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6OmVtaXROYW1lZFR5cGVEZWZpbml0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5hbWVyOjptZXRhbFR5cGVEZWZpbml0
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6bWFuZ2xl
ZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJlcik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0
YWw6OlR5cGVOYW1lcjo6bWFuZ2xlZE5hbWVGb3JTdHJ1Y3R1cmVFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5hbWVyOjptZXRhbFR5cGVzKToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5hbWVyOjpnZW5lcmF0ZU5leHRUeXBl
TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6Z2VuZXJh
dGVOZXh0U3RydWN0dXJlRWxlbWVudE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1l
dGFsOjpUeXBlTmFtZXI6OmdlbmVyYXRlTmV4dEVudW1lcmF0aW9uTWVtYmVyTmFtZSk6CisgICAg
ICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpjaGVja1NlbWFudGljcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
Q2hlY2tlcjo6dmlzaXQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0
aGVyRW50cnlQb2ludEl0ZW1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpHYXRoZXJl
cjo6dmlzaXQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50
cnlQb2ludEl0ZW1zLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6RW50cnlQb2ludEl0ZW06
OkVudHJ5UG9pbnRJdGVtKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExv
b3BDaGVja2VyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6OlN0YXRlbWVudEJlaGF2aW9yQ2hlY2tlcjo6dGFrZUZ1bmN0aW9uQmVoYXZpb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmNoZWNrU3RhdGVtZW50QmVoYXZpb3IpOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhdGVtZW50QmVoYXZpb3JDaGVja2Vy
Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TExvb3BDaGVja2VyLmguCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE5LTAxLTIwICBNaWNoYWVsIENhdGFu
emFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xs
aW5nIG91dCByMjM4Mjc1LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuaAppbmRleCA0M2I2OTg2
YWY3ZDRiNzFjMjg2NzdlYzY1Y2VjZDhlYTdjNDczMDRhLi43YjM2Y2FhYmM2YmZjYTVkNDQ1ZTIy
YjhkNjJkYjllYTJjNzhhMDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuaApAQCAtNjks
NiArNjksNyBAQCBwdWJsaWM6CiAgICAgQnVpbHRJblNlbWFudGljKEJ1aWx0SW5TZW1hbnRpYyYm
KSA9IGRlZmF1bHQ7CiAKICAgICBWYXJpYWJsZSB2YXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFyaWFibGU7IH0KKyAgICBPcHRpb25hbDx1bnNpZ25lZD4mIHRhcmdldEluZGV4KCkgeyByZXR1
cm4gbV90YXJnZXRJbmRleDsgfQogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJ1aWx0SW5T
ZW1hbnRpYyYgb3RoZXIpIGNvbnN0CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oCmluZGV4IDhmZWY2
Mjk1OWQ3MzYzZTFmMWJiYjIzZDczMzk4ZjhhMmQ0OGJkZTEuLjAxZjJmZmI4MDZhMDU3NmJjNjA1
NmUwNjFhYjE3MmJlMjY0NjE2ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKQEAgLTU3LDcgKzU3LDcg
QEAgcHVibGljOgogCiAgICAgY29uc3QgTGV4ZXI6OlRva2VuJiBvcmlnaW4oKSBjb25zdCB7IHJl
dHVybiBtX29yaWdpbjsgfQogCi0gICAgVW5uYW1lZFR5cGUqIHR5cGUoKSB7IHJldHVybiBtX3R5
cGUgPyAmKm1fdHlwZSA6IG51bGxwdHI7IH0KKyAgICBVbm5hbWVkVHlwZSogcmVzb2x2ZWRUeXBl
KCkgeyByZXR1cm4gbV90eXBlID8gJiptX3R5cGUgOiBudWxscHRyOyB9CiAKICAgICB2b2lkIHNl
dFR5cGUoVW5pcXVlUmVmPFVubmFtZWRUeXBlPiYmIHR5cGUpCiAgICAgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWNs
YXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
RnVuY3Rpb25EZWNsYXJhdGlvbi5oCmluZGV4IDUwODI4NTg0NjA3MDU3N2Q4OTRjNTM0YTM5NzRi
Y2UwYWJiMjFmMTEuLmMxNTQ2NmE3MGJiYmFhYTc1ZjE3MGUxMjZlYjUyZGM4OGI4NDgxNmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1
bmN0aW9uRGVjbGFyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgKQEAgLTcwLDYgKzcwLDcgQEAgcHVi
bGljOgogICAgIGNvbnN0IFVubmFtZWRUeXBlJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
OyB9CiAgICAgVW5uYW1lZFR5cGUmIHR5cGUoKSB7IHJldHVybiBtX3R5cGU7IH0KICAgICBjb25z
dCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICBTdHJpbmcmIG5h
bWUoKSB7IHJldHVybiBtX25hbWU7IH0KICAgICBib29sIGlzQ2FzdCgpIGNvbnN0IHsgcmV0dXJu
IG1fbmFtZSA9PSAib3BlcmF0b3IgY2FzdCI7IH0KICAgICBjb25zdCBWYXJpYWJsZURlY2xhcmF0
aW9ucyYgcGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVyczsgfQogICAgIFZh
cmlhYmxlRGVjbGFyYXRpb25zJiBwYXJhbWV0ZXJzKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgKaW5kZXggNDU2YzZlMTIzOGJjYjU3
ZTdjZmUxZTAxNzg2OWYwZjQxNDQwYTc2OS4uMDI2MGQ0NTA2YTUxY2FiNTM4MTkzMzE0OTJlNWQ3
YmVjYmRjOTk1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZURlZmluaXRpb24uaApAQCAtNTUs
NiArNTUsMTUgQEAgcHVibGljOgogICAgIGJvb2wgaXNTdHJ1Y3R1cmVEZWZpbml0aW9uKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgU3RydWN0dXJlRWxlbWVudHMmIHN0
cnVjdHVyZUVsZW1lbnRzKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVFbGVtZW50czsgfQorICAgIFN0
cnVjdHVyZUVsZW1lbnQqIGZpbmQoU3RyaW5nJiBuYW1lKQorICAgIHsKKyAgICAgICAgYXV0byBp
dGVyYXRvciA9IHN0ZDo6ZmluZF9pZihtX3N0cnVjdHVyZUVsZW1lbnRzLmJlZ2luKCksIG1fc3Ry
dWN0dXJlRWxlbWVudHMuZW5kKCksIFsmXShTdHJ1Y3R1cmVFbGVtZW50JiBzdHJ1Y3R1cmVFbGVt
ZW50KSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmVFbGVtZW50Lm5hbWUo
KSA9PSBuYW1lOworICAgICAgICB9KTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yID09IG1fc3RydWN0
dXJlRWxlbWVudHMuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuICYqaXRlcmF0b3I7CisgICAgfQogCiBwcml2YXRlOgogICAgIFN0cnVjdHVyZUVsZW1l
bnRzIG1fc3RydWN0dXJlRWxlbWVudHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRT
Y2FmZm9sZGluZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2QxYjA3NjM5MmY3MDhjN2E2OTVkNjhlOTVjNGE4
ZThhZGQzMDdiZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcApAQCAtMCwwICsx
LDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNM
RW50cnlQb2ludFNjYWZmb2xkaW5nLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVk
ZSAiV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgTWV0YWwgeworCitFbnRyeVBvaW50U2Nh
ZmZvbGRpbmc6OkVudHJ5UG9pbnRTY2FmZm9sZGluZyhBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYg
ZnVuY3Rpb25EZWZpbml0aW9uLCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKQorICAgIDogbV9mdW5j
dGlvbkRlZmluaXRpb24oJmZ1bmN0aW9uRGVmaW5pdGlvbikKKyAgICAsIG1faW50cmluc2ljcygm
aW50cmluc2ljcykKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgZ2F0aGVy
RW50cnlQb2ludEl0ZW1zKCptX2ludHJpbnNpY3MsICptX2Z1bmN0aW9uRGVmaW5pdGlvbik7Cit9
CisKK1N0cmluZyBFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmhlbHBlclR5cGVzKCkKK3sKKyAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJp
bmcgRW50cnlQb2ludFNjYWZmb2xkaW5nOjpzaWduYXR1cmUoKQoreworICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcy4KKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBFbnRyeVBv
aW50U2NhZmZvbGRpbmc6OnVucGFjaygpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
LgorICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIEVudHJ5UG9pbnRTY2FmZm9sZGlu
Zzo6cGFjayhjb25zdCBTdHJpbmcmKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4K
KyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRy
eVBvaW50U2NhZmZvbGRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWFhMmRhM2Jj
NGVjYTQ4MGMyNTJlNjNlZTZhMWJjYTg2Mjk1MTAxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZm
b2xkaW5nLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hM
U0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgRnVuY3Rpb25EZWZpbml0aW9uOworCit9
CisKK2NsYXNzIEludHJpbnNpY3M7CisKK25hbWVzcGFjZSBNZXRhbCB7CisKKy8vIEZJWE1FOiBU
aGlzIG5lZWRzIHRvIGtub3cgYWJvdXQgdGhlIHBpcGVsaW5lIHN0YXRlIG9iamVjdCB0byBlbWl0
IGZ1bmN0aW9uIHByb2xvZ3VlcyBhbmQgZXBpbG9ndWVzLgorY2xhc3MgRW50cnlQb2ludFNjYWZm
b2xkaW5nIHsKK3B1YmxpYzoKKyAgICBFbnRyeVBvaW50U2NhZmZvbGRpbmcoQVNUOjpGdW5jdGlv
bkRlZmluaXRpb24mLCBJbnRyaW5zaWNzJik7CisKKyAgICBTdHJpbmcgaGVscGVyVHlwZXMoKTsK
KyAgICBTdHJpbmcgc2lnbmF0dXJlKCk7CisgICAgU3RyaW5nIHVucGFjaygpOworICAgIFN0cmlu
ZyBwYWNrKGNvbnN0IFN0cmluZyYgdmFyaWFibGVOYW1lKTsKKworcHJpdmF0ZToKKyAgICBBU1Q6
OkZ1bmN0aW9uRGVmaW5pdGlvbiogbV9mdW5jdGlvbkRlZmluaXRpb247CisgICAgSW50cmluc2lj
cyogbV9pbnRyaW5zaWNzOworfTsKKworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9u
V3JpdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dI
TFNMRnVuY3Rpb25Xcml0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjYjc5YWU0NDY0ZGU3Y2U4YTBjOTY3
YTA4YmM1MDA2ZWFjNWZhN2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcApAQCAtMCwwICsx
LDYyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExT
TEZ1bmN0aW9uV3JpdGVyLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hM
U0xBcnJheVJlZmVyZW5jZVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgorI2lu
Y2x1ZGUgIldITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTEJvb2xl
YW5MaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xCdWlsdEluU2VtYW50aWMuaCIKKyNpbmNsdWRl
ICJXSExTTENhbGxFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xDb21tYUV4cHJlc3Npb24u
aCIKKyNpbmNsdWRlICJXSExTTERlcmVmZXJlbmNlRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldI
TFNMRG9XaGlsZUxvb3AuaCIKKyNpbmNsdWRlICJXSExTTEVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0
ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5oIgorI2luY2x1
ZGUgIldITFNMRW50cnlQb2ludFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEZsb2F0TGl0ZXJhbC5o
IgorI2luY2x1ZGUgIldITFNMRm9yTG9vcC5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWNs
YXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVk
ZSAiV0hMU0xJZlN0YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNMSW50ZWdlckxpdGVyYWwuaCIK
KyNpbmNsdWRlICJXSExTTExvZ2ljYWxFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xMb2dp
Y2FsTm90RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhw
cmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xO
YXRpdmVGdW5jdGlvbldyaXRlci5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgorI2luY2x1ZGUgIldITFNMUHJv
Z3JhbS5oIgorI2luY2x1ZGUgIldITFNMUmV0dXJuLmgiCisjaW5jbHVkZSAiV0hMU0xTd2l0Y2hD
YXNlLmgiCisjaW5jbHVkZSAiV0hMU0xTd2l0Y2hTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExT
TFRlcm5hcnlFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlTmFtZXIuaCIKKyNpbmNs
dWRlICJXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTFZhcmlh
YmxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3Rh
dGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oIgorI2luY2x1ZGUg
IldITFNMVmlzaXRvci5oIgorI2luY2x1ZGUgIldITFNMV2hpbGVMb29wLmgiCisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIE1ldGFs
IHsKKworY2xhc3MgRnVuY3Rpb25EZWNsYXJhdGlvbldyaXRlciA6IHB1YmxpYyBWaXNpdG9yIHsK
K3B1YmxpYzoKKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyKFR5cGVOYW1lciYgdHlwZU5h
bWVyLCBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIFN0cmluZz4mIGZ1bmN0aW9u
TWFwcGluZykKKyAgICAgICAgOiBtX3R5cGVOYW1lcih0eXBlTmFtZXIpCisgICAgICAgICwgbV9m
dW5jdGlvbk1hcHBpbmcoZnVuY3Rpb25NYXBwaW5nKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIH5GdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyKCkgPSBkZWZhdWx0OworCisgICAgU3RyaW5n
IHRvU3RyaW5nKCkgeyByZXR1cm4gbV9zdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7IH0KKyAgICB2
b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgZnVuY3Rpb25EZWNsYXJhdGlvbikg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChmdW5jdGlvbkRlY2xhcmF0aW9uLmVudHJ5UG9p
bnRUeXBlKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byBpdGVyYXRvciA9
IG1fZnVuY3Rpb25NYXBwaW5nLmZpbmQoJmZ1bmN0aW9uRGVjbGFyYXRpb24pOworICAgICAgICBB
U1NFUlQoaXRlcmF0b3IgIT0gbV9mdW5jdGlvbk1hcHBpbmcuZW5kKCkpOworICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKGZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKSwgJyAnLCBpdGVyYXRvci0+dmFsdWUsICco
JykpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uRGVjbGFyYXRpb24u
cGFyYW1ldGVycygpLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSkKKyAgICAgICAg
ICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIsICIpOworICAgICAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZChtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpW2ldLnR5cGUoKSkpOworICAgICAgICB9CisgICAgICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIik7XG4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
VHlwZU5hbWVyJiBtX3R5cGVOYW1lcjsKKyAgICBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbiosIFN0cmluZz4mIG1fZnVuY3Rpb25NYXBwaW5nOworICAgIFN0cmluZ0J1aWxkZXIgbV9z
dHJpbmdCdWlsZGVyOworfTsKKworY2xhc3MgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyIDogcHVi
bGljIFZpc2l0b3IgeworcHVibGljOgorICAgIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcihJbnRy
aW5zaWNzJiBpbnRyaW5zaWNzLCBUeXBlTmFtZXImIHR5cGVOYW1lciwgSGFzaE1hcDxBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24qLCBTdHJpbmc+JiBmdW5jdGlvbk1hcHBpbmcpCisgICAgICAgIDog
bV9pbnRyaW5zaWNzKGludHJpbnNpY3MpCisgICAgICAgICwgbV90eXBlTmFtZXIodHlwZU5hbWVy
KQorICAgICAgICAsIG1fZnVuY3Rpb25NYXBwaW5nKGZ1bmN0aW9uTWFwcGluZykKKyAgICB7Cisg
ICAgfQorCisgICAgdmlydHVhbCB+RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyKCkgPSBkZWZhdWx0
OworCisgICAgU3RyaW5nIHRvU3RyaW5nKCkgeyByZXR1cm4gbV9zdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCk7IH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
JiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0
byBpdGVyYXRvciA9IG1fZnVuY3Rpb25NYXBwaW5nLmZpbmQoJm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24pOworICAgICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9mdW5jdGlvbk1hcHBpbmcuZW5k
KCkpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKHdyaXRlTmF0aXZlRnVuY3Rpb24o
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgaXRlcmF0b3ItPnZhbHVlLCBtX3R5cGVOYW1lcikp
OworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0
aW9uRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBt
X2Z1bmN0aW9uTWFwcGluZy5maW5kKCZmdW5jdGlvbkRlZmluaXRpb24pOworICAgICAgICBBU1NF
UlQoaXRlcmF0b3IgIT0gbV9mdW5jdGlvbk1hcHBpbmcuZW5kKCkpOworICAgICAgICBpZiAoZnVu
Y3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsKKyAgICAgICAgICAgIG1fZW50cnlQ
b2ludFNjYWZmb2xkaW5nID0gRW50cnlQb2ludFNjYWZmb2xkaW5nKGZ1bmN0aW9uRGVmaW5pdGlv
biwgbV9pbnRyaW5zaWNzKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobV9l
bnRyeVBvaW50U2NhZmZvbGRpbmctPmhlbHBlclR5cGVzKCkpOworICAgICAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZyhtX2VudHJ5UG9pbnRTY2FmZm9sZGluZy0+c2lnbmF0dXJlKCksICIgeyIp
KTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobV9lbnRyeVBvaW50U2NhZmZv
bGRpbmctPnVucGFjaygpKTsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlv
bkRlZmluaXRpb24uYmxvY2soKSk7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KCJ9XG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZW50cnlQb2ludFNjYWZm
b2xkaW5nID0gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShmdW5jdGlvbkRlZmlu
aXRpb24udHlwZSgpKSwgJyAnLCBpdGVyYXRvci0+dmFsdWUsICcoJykpOworICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgcGFyYW1ldGVyID0gZnVuY3Rpb25E
ZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtpXTsKKyAgICAgICAgICAgICAgICBpZiAoaSkKKyAgICAg
ICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCAiKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIHBhcmFtZXRlck5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAg
ICAgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdmFyaWFibGVNYXBwaW5nLmFkZCgmcGFy
YW1ldGVyLCBwYXJhbWV0ZXJOYW1lKTsKKyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFk
ZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICAgICAgICAgIG1fc3RyaW5n
QnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
KnBhcmFtZXRlci50eXBlKCkpLCAnICcsIHBhcmFtZXRlck5hbWUpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIikge1xuIik7CisgICAgICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uLmJsb2NrKCkpOworICAgICAg
ICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgICAgIH0KKyAgICB9CisK
K3ByaXZhdGU6CisgICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAg
dm9pZCB2aXNpdChBU1Q6OlN0YXRlbWVudCYgc3RhdGVtZW50KSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgVmlzaXRvcjo6dmlzaXQoc3RhdGVtZW50KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6QmxvY2smIGJsb2NrKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZCgie1xuIik7CisgICAgICAgIGZvciAoYXV0byYgc3RhdGVtZW50IDogYmxvY2su
c3RhdGVtZW50cygpKQorICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRlbWVudCk7
CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgIH0KKworICAgIHZv
aWQgdmlzaXQoQVNUOjpCcmVhayYpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKCJicmVhaztcbiIpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpD
b250aW51ZSYpIG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBGSVhNRTogRmlndXJlIG91dCB3
aGljaCBsb29wIHdlJ3JlIGluLCBhbmQgcnVuIHRoZSBpbmNyZW1lbnQgY29kZQorICAgICAgICBD
UkFTSCgpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpEb1doaWxlTG9vcCYgZG9XaGls
ZUxvb3ApIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJk
byB7XG4iKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvV2hpbGVMb29wLmJvZHkoKSk7
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb1doaWxlTG9vcC5jb25kaXRpb25hbCgpKTsK
KyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJpZiAoISIsIG1fc3Rh
Y2sudGFrZUxhc3QoKSwgIikgYnJlYWs7XG4iKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZygifSB3aGlsZSh0cnVlKTtcbiIpKTsKKyAgICB9CisKKyAgICB2b2lk
IHZpc2l0KEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCYgZWZmZWN0ZnVsRXhwcmVz
c2lvblN0YXRlbWVudCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChlZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50LmVmZmVjdGZ1bEV4cHJlc3Npb24oKSk7Cisg
ICAgICAgIG1fc3RhY2sudGFrZUxhc3QoKTsgLy8gVGhlIHN0YXRlbWVudCBpcyBhbHJlYWR5IGVm
ZmVjdGZ1bCwgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyB3aXRoIHRoZSByZXN1bHQu
CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkZhbGx0aHJvdWdoJikgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIltbY2xhbmc6OmZhbGx0aHJvdWdo
XV07XG4iKTsgLy8gRklYTUU6IE1ha2Ugc3VyZSB0aGlzIGlzIG9rYXkuIEFsdGVybmF0aXZlbHks
IHdlIGNvdWxkIGRvIHRoaW5nIGFuZCBqdXN0IHJldHVybiBoZXJlIGluc3RlYWQuCisgICAgfQor
CisgICAgdm9pZCB2aXNpdChBU1Q6OkZvckxvb3AmIGZvckxvb3ApIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbnNTdGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KSB7CisgICAg
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQp
OworICAgICAgICB9LCBbJl0oVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mIGV4cHJlc3Npb24p
IHsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9uKTsKKyAgICAgICAg
ICAgIG1fc3RhY2sudGFrZUxhc3QoKTsgLy8gV2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyB3
aXRoIHRoZSByZXN1bHQuCisgICAgICAgIH0pLCBmb3JMb29wLmluaXRpYWxpemF0aW9uKCkpOwor
CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoImZvciAoIDsgOyApIHtcbiIpOworICAg
ICAgICBpZiAoZm9yTG9vcC5jb25kaXRpb24oKSkgeworICAgICAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KCpmb3JMb29wLmNvbmRpdGlvbigpKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWFrZVN0cmluZygiaWYgKCEiLCBtX3N0YWNrLnRha2VMYXN0KCksICIpIGJyZWFr
O1xuIikpOworICAgICAgICB9CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmb3JMb29wLmJv
ZHkoKSk7CisgICAgICAgIGlmIChmb3JMb29wLmluY3JlbWVudCgpKQorICAgICAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KCpmb3JMb29wLmluY3JlbWVudCgpKTsKKyAgICAgICAgbV9zdHJpbmdC
dWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OklmU3Rh
dGVtZW50JiBpZlN0YXRlbWVudCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChpZlN0YXRlbWVudC5jb25kaXRpb25hbCgpKTsKKyAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJpZiAoIiwgbV9zdGFjay50YWtlTGFzdCgpLCAiKSB7XG4i
KSk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRlbWVudC5ib2R5KCkpOworICAg
ICAgICBpZiAoaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSkgeworICAgICAgICAgICAgbV9zdHJpbmdC
dWlsZGVyLmFwcGVuZCgifSBlbHNlIHtcbiIpOworICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KCppZlN0YXRlbWVudC5lbHNlQm9keSgpKTsKKyAgICAgICAgfQorICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6UmV0
dXJuJiByZXR1cm5TdGF0ZW1lbnQpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAocmV0dXJu
U3RhdGVtZW50LnZhbHVlKCkpIHsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqcmV0
dXJuU3RhdGVtZW50LnZhbHVlKCkpOworICAgICAgICAgICAgaWYgKG1fZW50cnlQb2ludFNjYWZm
b2xkaW5nKSB7CisgICAgICAgICAgICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5l
eHRWYXJpYWJsZU5hbWUoKTsKKyAgICAgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KG1fZW50cnlQb2ludFNjYWZmb2xkaW5nLT5wYWNrKHZhcmlhYmxlTmFtZSkpOworICAgICAgICAg
ICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygicmV0dXJuICIsIHZhcmlh
YmxlTmFtZSwgIjtcbiIpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygicmV0dXJuICIsIG1fc3RhY2sudGFrZUxh
c3QoKSwgIjtcbiIpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKCJyZXR1cm47XG4iKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3dp
dGNoU3RhdGVtZW50JiBzd2l0Y2hTdGF0ZW1lbnQpIG92ZXJyaWRlCisgICAgeworICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQoc3dpdGNoU3RhdGVtZW50LnZhbHVlKCkpOworCisgICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygic3dpdGNoICgiLCBtX3N0YWNrLnRha2VM
YXN0KCksICIpIHsiKSk7CisgICAgICAgIGZvciAoYXV0byYgc3dpdGNoQ2FzZSA6IHN3aXRjaFN0
YXRlbWVudC5zd2l0Y2hDYXNlcygpKQorICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN3
aXRjaENhc2UpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICB9
CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSkgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGlmIChzd2l0Y2hDYXNlLnZhbHVlKCkpCisgICAgICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImNhc2UgIiwgY29uc3RhbnRFeHByZXNzaW9u
U3RyaW5nKCpzd2l0Y2hDYXNlLnZhbHVlKCkpLCAiOlxuIikpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJkZWZhdWx0OlxuIik7CisgICAgICAgIC8v
IEZJWE1FOiBGaWd1cmUgb3V0IHdoZXRoZXIgd2UgbmVlZCB0byBicmVhayBvciBmYWxsdGhyb3Vn
aC4KKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN3aXRjaENh
c2UuYmxvY2soKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlRyYXAmKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzCisgICAgICAgIENSQVNI
KCk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3Rh
dGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCkgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIFZpc2l0b3I6OnZpc2l0KHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KTsKKyAg
ICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6V2hpbGVMb29wJiB3aGlsZUxvb3ApIG92ZXJyaWRl
CisgICAgeworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIndoaWxl
ICh0cnVlKSB7XG4iKSk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuY29u
ZGl0aW9uYWwoKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygi
aWYgKCEiLCBtX3N0YWNrLnRha2VMYXN0KCksICIpIGJyZWFrO1xuIikpOworICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmJvZHkoKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIn1cbiIpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpJbnRlZ2VyTGl0
ZXJhbCYgaW50ZWdlckxpdGVyYWwpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQoaW50
ZWdlckxpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9
IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBhdXRvIG1hbmdsZWRUeXBlTmFt
ZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqaW50ZWdlckxpdGVyYWwucmVzb2x2
ZWRUeXBlKCkpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFu
Z2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHN0YXRpY19jYXN0PCIsIG1hbmds
ZWRUeXBlTmFtZSwgIj4oIiwgaW50ZWdlckxpdGVyYWwudmFsdWUoKSwgIik7XG4iKSk7CisgICAg
ICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNp
dChBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIG92
ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQodW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5yZXNv
bHZlZFR5cGUoKSk7CisgICAgICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFy
aWFibGVOYW1lKCk7CisgICAgICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKCp1bnNpZ25lZEludGVnZXJMaXRlcmFsLnJlc29sdmVkVHlwZSgp
KTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBl
TmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSBzdGF0aWNfY2FzdDwiLCBtYW5nbGVkVHlwZU5h
bWUsICI+KCIsIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKSwgIik7XG4iKSk7CisgICAg
ICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNp
dChBU1Q6OkZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGZsb2F0TGl0ZXJhbC5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIGF1dG8gdmFy
aWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAgIGF1dG8gbWFu
Z2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpmbG9hdExpdGVy
YWwucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHN0YXRpY19jYXN0
PCIsIG1hbmdsZWRUeXBlTmFtZSwgIj4oIiwgZmxvYXRMaXRlcmFsLnZhbHVlKCksICIpO1xuIikp
OworICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIH0KKworICAgIHZv
aWQgdmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYgbnVsbExpdGVyYWwpIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBBU1NFUlQobnVsbExpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBhdXRv
JiB1bmlmeU5vZGUgPSBudWxsTGl0ZXJhbC5yZXNvbHZlZFR5cGUoKS0+dW5pZnlOb2RlKCk7Cisg
ICAgICAgIEFTU0VSVChpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKTsKKyAgICAgICAg
YXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUp
OworICAgICAgICBib29sIGlzQXJyYXlSZWZlcmVuY2VUeXBlID0gaXM8QVNUOjpBcnJheVJlZmVy
ZW5jZVR5cGU+KHVubmFtZWRUeXBlKTsKKworICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdl
bmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpudWxsTGl0ZXJhbC5y
ZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gIikpOworICAgICAgICBpZiAo
aXNBcnJheVJlZmVyZW5jZVR5cGUpCisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KCJ7IG51bGxwdHIsIDAgfSIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3N0cmluZ0J1
aWxkZXIuYXBwZW5kKCJudWxscHRyIik7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
IjtcbiIpOworICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIH0KKwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYgYm9vbGVhbkxpdGVyYWwpIG92ZXJy
aWRlCisgICAgeworICAgICAgICBBU1NFUlQoYm9vbGVhbkxpdGVyYWwucmVzb2x2ZWRUeXBlKCkp
OworICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgp
OworICAgICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1l
Rm9yVHlwZSgqYm9vbGVhbkxpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBtX3N0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxl
TmFtZSwgIiA9IHN0YXRpY19jYXN0PCIsIG1hbmdsZWRUeXBlTmFtZSwgIj4oIiwgYm9vbGVhbkxp
dGVyYWwudmFsdWUoKSA/ICJ0cnVlIiA6ICJmYWxzZSIsICIpO1xuIikpOworICAgICAgICBtX3N0
YWNrLmFwcGVuZCh2YXJpYWJsZU5hbWUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpF
bnVtZXJhdGlvbk1lbWJlckxpdGVyYWwmIGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCkgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwucmVzb2x2
ZWRUeXBlKCkpOworICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1l
cmF0aW9uRGVmaW5pdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9uTWVtYmVyTGl0
ZXJhbC5lbnVtZXJhdGlvbkRlZmluaXRpb24oKSk7CisgICAgICAgIGF1dG8gdmFyaWFibGVOYW1l
ID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAgICAgIGF1dG8gbWFuZ2xlZFR5cGVO
YW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCplbnVtZXJhdGlvbk1lbWJlckxp
dGVyYWwucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1h
a2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIsIG1hbmds
ZWRUeXBlTmFtZSwgJy4nLCBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVt
YmVyKCplbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25NZW1iZXIoKSksICI7XG4i
KSk7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7CisgICAgfQorCisgICAg
dm9pZCB2aXNpdChBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBWaXNpdG9yOjp2aXNpdChleHByZXNzaW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6RG90RXhwcmVzc2lvbiYpIG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBUaGlz
IHNob3VsZCBiZSBsb3dlcmVkIGFscmVhZHkuCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgbG93ZXJlZCBhbHJlYWR5LgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6
UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
QVNTRVJUKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAgaWYgKHZhcmlhYmxl
RGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dCgqdmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogWmVyby1maWxsIHRoZSB2YXJpYWJsZS4KKyAgICAgICAgICAg
IENSQVNIKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBxdWFsaWZp
ZXJzLgorICAgICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFt
ZSgpOworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdmFyaWFibGVNYXBwaW5nLmFkZCgmdmFy
aWFibGVEZWNsYXJhdGlvbiwgdmFyaWFibGVOYW1lKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChh
ZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqdmFyaWFi
bGVEZWNsYXJhdGlvbi50eXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIsIG1fc3RhY2su
dGFrZUxhc3QoKSwgIjtcbiIpKTsKKyAgICAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFibGVOYW1l
KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFz
c2lnbm1lbnRFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKSk7CisgICAgICAgIGF1dG8gbGVmdE5h
bWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhc3Np
Z25tZW50RXhwcmVzc2lvbi5yaWdodCgpKTsKKyAgICAgICAgYXV0byByaWdodE5hbWUgPSBtX3N0
YWNrLnRha2VMYXN0KCk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZyhsZWZ0TmFtZSwgIiA9ICIsIHJpZ2h0TmFtZSwgIjtcbiIpKTsKKyAgICB9CisKKyAgICB2b2lk
IHZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gYXJndW1lbnROYW1lczsKKyAgICAgICAgZm9yIChh
dXRvJiBhcmd1bWVudCA6IGNhbGxFeHByZXNzaW9uLmFyZ3VtZW50cygpKSB7CisgICAgICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoYXJndW1lbnQpOworICAgICAgICAgICAgYXJndW1lbnROYW1l
cy5hcHBlbmQobV9zdGFjay50YWtlTGFzdCgpKTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQo
Y2FsbEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBBU1NFUlQoY2FsbEV4cHJl
c3Npb24uZnVuY3Rpb24oKSk7CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9uTWFw
cGluZy5maW5kKGNhbGxFeHByZXNzaW9uLmZ1bmN0aW9uKCkpOworICAgICAgICBBU1NFUlQoaXRl
cmF0b3IgIT0gbV9mdW5jdGlvbk1hcHBpbmcuZW5kKCkpOworICAgICAgICBhdXRvIHZhcmlhYmxl
TmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBtX3N0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpjYWxs
RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gIiwgaXRl
cmF0b3ItPnZhbHVlLCAnKCcpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1
bWVudE5hbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSkKKyAgICAgICAgICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIsICIpOworICAgICAgICAgICAgbV9zdHJpbmdC
dWlsZGVyLmFwcGVuZChhcmd1bWVudE5hbWVzW2ldKTsKKyAgICAgICAgfQorICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKCIpO1xuIik7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlh
YmxlTmFtZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYg
Y29tbWFFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdDsK
KyAgICAgICAgZm9yIChhdXRvJiBleHByZXNzaW9uIDogY29tbWFFeHByZXNzaW9uLmxpc3QoKSkg
eworICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGV4cHJlc3Npb24pOworICAgICAgICAg
ICAgcmVzdWx0ID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgICAgICB9CisgICAgICAgIG1fc3Rh
Y2suYXBwZW5kKHJlc3VsdCk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkRlcmVmZXJl
bmNlRXhwcmVzc2lvbiYgZGVyZWZlcmVuY2VFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5wb2ludGVyKCkp
OworICAgICAgICBhdXRvIHJpZ2h0ID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgICAgICBBU1NF
UlQoZGVyZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgYXV0byB2
YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAgICAgbV9zdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZSgqZGVyZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5h
bWUsICIgPSAqIiwgcmlnaHQsICI7XG4iKSk7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlh
YmxlTmFtZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkxvZ2ljYWxFeHByZXNzaW9u
JiBsb2dpY2FsRXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChsb2dpY2FsRXhwcmVzc2lvbi5sZWZ0KCkpOworICAgICAgICBhdXRvIGxlZnQgPSBt
X3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChsb2dpY2FsRXhw
cmVzc2lvbi5yaWdodCgpKTsKKyAgICAgICAgYXV0byByaWdodCA9IG1fc3RhY2sudGFrZUxhc3Qo
KTsKKyAgICAgICAgQVNTRVJUKGxvZ2ljYWxFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAg
ICAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAg
ICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZSgqbG9naWNhbEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZh
cmlhYmxlTmFtZSwgIiA9ICIsIGxlZnQsICcgJykpOworICAgICAgICBzd2l0Y2ggKGxvZ2ljYWxF
eHByZXNzaW9uLnR5cGUoKSkgeworICAgICAgICBjYXNlIEFTVDo6TG9naWNhbEV4cHJlc3Npb246
OlR5cGU6OkFuZDoKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIiYmIik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVChs
b2dpY2FsRXhwcmVzc2lvbi50eXBlKCkgPT0gQVNUOjpMb2dpY2FsRXhwcmVzc2lvbjo6VHlwZTo6
T3IpOworICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifHwiKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZygnICcsIHJpZ2h0LCAiO1xuIikpOworICAgICAgICBtX3N0YWNrLmFwcGVuZCh2YXJp
YWJsZU5hbWUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpMb2dpY2FsTm90RXhwcmVz
c2lvbiYgbG9naWNhbE5vdEV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQobG9naWNhbE5vdEV4cHJlc3Npb24ub3BlcmFuZCgpKTsKKyAgICAgICAg
YXV0byBvcGVyYW5kID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgICAgICBBU1NFUlQobG9naWNh
bE5vdEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBhdXRvIHZhcmlhYmxlTmFt
ZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpsb2dpY2Fs
Tm90RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gISIs
IG9wZXJhbmQsICI7XG4iKSk7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7
CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Np
b24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sVmFsdWUo
KSk7CisgICAgICAgIGF1dG8gbFZhbHVlID0gbV9zdGFjay50YWtlTGFzdCgpOworICAgICAgICBB
U1NFUlQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7CisgICAg
ICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisgICAg
ICAgIGF1dG8gbWFuZ2xlZFR5cGVOYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KCptYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAg
aWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KCptYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLnJl
c29sdmVkVHlwZSgpKSkKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0geyAiLCBsVmFsdWUs
ICIsIDEgfTtcbiIpKTsKKyAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpBcnJheVR5cGU+KCptYWtl
QXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSkgeworICAgICAgICAgICAg
YXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KCptYWtlQXJyYXlSZWZl
cmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVp
bGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1l
LCAiID0geyAmKCIsIGxWYWx1ZSwgIlswXSksICIsIGFycmF5VHlwZS5udW1FbGVtZW50cygpLCAi
IH07XG4iKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSB7
ICYiLCBsVmFsdWUsICIsIDEgfTtcbiIpKTsKKyAgICAgICAgbV9zdGFjay5hcHBlbmQodmFyaWFi
bGVOYW1lKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNz
aW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICAgICAg
YXV0byBsVmFsdWUgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIEFTU0VSVChtYWtlUG9p
bnRlckV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBhdXRvIHZhcmlhYmxlTmFt
ZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCptYWtlUG9p
bnRlckV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICYi
LCBsVmFsdWUsICI7XG4iKSk7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHZhcmlhYmxlTmFtZSk7
CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24m
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgbG93ZXJlZCBhbHJl
YWR5LgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6VGVybmFyeUV4cHJlc3Npb24mIHRlcm5hcnlFeHByZXNzaW9uKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLnByZWRp
Y2F0ZSgpKTsKKyAgICAgICAgYXV0byBjaGVjayA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKworICAg
ICAgICBBU1NFUlQodGVybmFyeUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBh
dXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBt
X3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKCp0ZXJuYXJ5RXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVO
YW1lLCAiO1xuIikpOworCisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZygiaWYgKCIsIGNoZWNrLCAiKSB7XG4iKSk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0
ZXJuYXJ5RXhwcmVzc2lvbi5ib2R5RXhwcmVzc2lvbigpKTsKKyAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKHZhcmlhYmxlTmFtZSwgIiA9ICIsIG1fc3RhY2sudGFrZUxh
c3QoKSwgIjtcbiIpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgifSBlbHNlIHtc
biIpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodGVybmFyeUV4cHJlc3Npb24uZWxzZUV4
cHJlc3Npb24oKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyh2
YXJpYWJsZU5hbWUsICIgPSAiLCBtX3N0YWNrLnRha2VMYXN0KCksICI7XG4iKSk7CisgICAgICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgICAgICBtX3N0YWNrLmFwcGVuZCh2
YXJpYWJsZU5hbWUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVy
ZW5jZSYgdmFyaWFibGVSZWZlcmVuY2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQo
dmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKSk7CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBt
X3ZhcmlhYmxlTWFwcGluZy5maW5kKHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCkpOworICAg
ICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV92YXJpYWJsZU1hcHBpbmcuZW5kKCkpOworICAgICAg
ICBtX3N0YWNrLmFwcGVuZChpdGVyYXRvci0+dmFsdWUpOworICAgIH0KKworICAgIFN0cmluZyBj
b25zdGFudEV4cHJlc3Npb25TdHJpbmcoQVNUOjpDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0YW50
RXhwcmVzc2lvbikKKyAgICB7CisgICAgICAgIFN0cmluZyByZXN1bHQ7CisgICAgICAgIGNvbnN0
YW50RXhwcmVzc2lvbi52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRl
cmFsJiBpbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgcmVzdWx0ID0gbWFrZVN0cmluZygi
IiwgaW50ZWdlckxpdGVyYWwudmFsdWUoKSk7CisgICAgICAgIH0sIFsmXShBU1Q6OlVuc2lnbmVk
SW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgIHJl
c3VsdCA9IG1ha2VTdHJpbmcoIiIsIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKSk7Cisg
ICAgICAgIH0sIFsmXShBU1Q6OkZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKSB7CisgICAgICAg
ICAgICByZXN1bHQgPSBtYWtlU3RyaW5nKCIiLCBmbG9hdExpdGVyYWwudmFsdWUoKSk7CisgICAg
ICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJikgeworICAgICAgICAgICAgcmVzdWx0ID0gIm51
bGxwdHIiX3N0cjsKKyAgICAgICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5M
aXRlcmFsKSB7CisgICAgICAgICAgICByZXN1bHQgPSBib29sZWFuTGl0ZXJhbC52YWx1ZSgpID8g
InRydWUiX3N0ciA6ICJmYWxzZSJfc3RyOworICAgICAgICB9LCBbJl0oQVNUOjpFbnVtZXJhdGlv
bk1lbWJlckxpdGVyYWwmIGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCkgeworICAgICAgICAgICAg
QVNTRVJUKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbkRlZmluaXRpb24oKSk7
CisgICAgICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9u
RGVmaW5pdGlvbigpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1ha2VTdHJpbmcobV90eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCplbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRp
b25EZWZpbml0aW9uKCkpLCAnLicsIG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yRW51bWVyYXRp
b25NZW1iZXIoKmVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbk1lbWJlcigpKSk7
CisgICAgICAgIH0pKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBTdHJp
bmcgZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtYWtl
U3RyaW5nKCJ2YXJpYWJsZSIsIG1fdmFyaWFibGVDb3VudCsrKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgSW50cmluc2ljcyYgbV9pbnRyaW5zaWNzOworICAgIFR5cGVOYW1lciYgbV90eXBlTmFt
ZXI7CisgICAgSGFzaE1hcDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qLCBTdHJpbmc+JiBtX2Z1
bmN0aW9uTWFwcGluZzsKKyAgICBIYXNoTWFwPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiosIFN0
cmluZz4gbV92YXJpYWJsZU1hcHBpbmc7CisgICAgU3RyaW5nQnVpbGRlciBtX3N0cmluZ0J1aWxk
ZXI7CisgICAgVmVjdG9yPFN0cmluZz4gbV9zdGFjazsKKyAgICBPcHRpb25hbDxFbnRyeVBvaW50
U2NhZmZvbGRpbmc+IG1fZW50cnlQb2ludFNjYWZmb2xkaW5nOworICAgIHVuc2lnbmVkIG1fdmFy
aWFibGVDb3VudCB7IDAgfTsKK307CisKK1N0cmluZyBtZXRhbEZ1bmN0aW9ucyhQcm9ncmFtJiBw
cm9ncmFtLCBUeXBlTmFtZXImIHR5cGVOYW1lcikKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmlu
Z0J1aWxkZXI7CisKKyAgICB1bnNpZ25lZCBudW1GdW5jdGlvbnMgPSAwOworICAgIEhhc2hNYXA8
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiwgU3RyaW5nPiBmdW5jdGlvbk1hcHBpbmc7CisgICAg
Zm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9ucygpKSB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gZnVuY3Rpb25N
YXBwaW5nLmFkZCgmbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgbWFrZVN0cmluZygiZnVuY3Rp
b24iLCBudW1GdW5jdGlvbnMrKykpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwg
YWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVm
aW5pdGlvbiA6IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKSB7CisgICAgICAgIGF1dG8g
YWRkUmVzdWx0ID0gZnVuY3Rpb25NYXBwaW5nLmFkZCgmZnVuY3Rpb25EZWZpbml0aW9uLCBtYWtl
U3RyaW5nKCJmdW5jdGlvbiIsIG51bUZ1bmN0aW9ucysrKSk7CisgICAgICAgIEFTU0VSVF9VTlVT
RUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgeworICAg
ICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyIGZ1bmN0aW9uRGVjbGFyYXRpb25Xcml0ZXIo
dHlwZU5hbWVyLCBmdW5jdGlvbk1hcHBpbmcpOworICAgICAgICBmb3IgKGF1dG8mIG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkp
CisgICAgICAgICAgICBmdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyLnZpc2l0KG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24pOworICAgICAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6
IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKSB7CisgICAgICAgICAgICBpZiAoIWZ1bmN0
aW9uRGVmaW5pdGlvbi0+ZW50cnlQb2ludFR5cGUoKSkKKyAgICAgICAgICAgICAgICBmdW5jdGlv
bkRlY2xhcmF0aW9uV3JpdGVyLnZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAgICAgIH0K
KyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZnVuY3Rpb25EZWNsYXJhdGlvbldyaXRlci50
b1N0cmluZygpKTsKKyAgICB9CisKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKKwor
ICAgIHsKKyAgICAgICAgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyIGZ1bmN0aW9uRGVmaW5pdGlv
bldyaXRlcihwcm9ncmFtLmludHJpbnNpY3MoKSwgdHlwZU5hbWVyLCBmdW5jdGlvbk1hcHBpbmcp
OworICAgICAgICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFt
Lm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkpCisgICAgICAgICAgICBmdW5jdGlvbkRlZmlu
aXRpb25Xcml0ZXIudmlzaXQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7CisgICAgICAgIGZv
ciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25z
KCkpCisgICAgICAgICAgICBmdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIudmlzaXQoZnVuY3Rpb25E
ZWZpbml0aW9uKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyLnRvU3RyaW5nKCkpOworICAgIH0KKworICAgIHJldHVybiBzdHJpbmdCdWlsZGVy
LnRvU3RyaW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIE1ldGFsCisKK30gLy8gbmFtZXNwYWNl
IFdITFNMCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3Jp
dGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1
bmN0aW9uV3JpdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTk2MGU1ZTQ4ZDU4YzI0ZTM1ZTUyODM4MjQ1NjQ3
MmI3ZDA5YjZkNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuaApAQCAtMCwwICsxLDQ4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFByb2dyYW07CisKK25h
bWVzcGFjZSBNZXRhbCB7CisKK2NsYXNzIFR5cGVOYW1lcjsKKworU3RyaW5nIG1ldGFsRnVuY3Rp
b25zKFByb2dyYW0mLCBUeXBlTmFtZXImKTsKKworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE1l
dGFsQ29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDI3N2JlNWRk
YWUxODM5NDJmYjYyNmZkNTg1MTNkYmVjZDdmZjUwMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWV0YWxDb2RlR2VuZXJh
dG9yLmNwcApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldITFNMTWV0YWxDb2RlR2VuZXJhdG9yLmgiCisKKyNpZiBFTkFCTEUoV0VC
R1BVKQorCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbldyaXRlci5oIgorI2luY2x1ZGUgIldITFNM
VHlwZU5hbWVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBNZXRhbCB7
CisKK1N0cmluZyBnZW5lcmF0ZU1ldGFsQ29kZShQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIFN0
cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiLy8g
VGhpcyB3YXMgZ2VuZXJhdGVkIGJ5IFdlYktpdCdzIFdITFNMIC0+IE1TTCBjb2RlIGdlbmVyYXRv
ci4gRG8gbm90IGVkaXQhXG4iKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiXG4iKTsKKyAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiI2luY2x1ZGUgPG1ldGFsX3N0ZGxpYj5cbiIpOworICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIjaW5jbHVkZSA8bWV0YWxfYXRvbWljPlxuIik7CisgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoIiNpbmNsdWRlIDxtZXRhbF9tYXRoPlxuIik7CisgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIiNpbmNsdWRlIDxtZXRhbF9yZWxhdGlvbmFsPlxuIik7CisgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoIiNpbmNsdWRlIDxtZXRhbF9jb21wdXRlPlxuIik7CisgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoIiNpbmNsdWRlIDxtZXRhbF90ZXh0dXJlPlxuIik7CisgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoIlxuIik7CisgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoInVz
aW5nIG5hbWVzcGFjZSBtZXRhbDtcbiIpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJcbiIp
OworCisgICAgVHlwZU5hbWVyIHR5cGVOYW1lcihwcm9ncmFtKTsKKyAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCh0eXBlTmFtZXIubWV0YWxUeXBlcygpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChtZXRhbEZ1bmN0aW9ucyhwcm9ncmFtLCB0eXBlTmFtZXIpKTsKKyAgICByZXR1cm4gc3RyaW5n
QnVpbGRlci50b1N0cmluZygpOworfQorCit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTWV0YWxD
b2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUwODhlMDEwNDQ5OTQ4NDEx
MDc1Njc0MzQ3NDkxZjczZDM2YTIzNGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5oCkBA
IC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShX
RUJHUFUpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCituYW1lc3Bh
Y2UgTWV0YWwgeworCisvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBrbm93IGFib3V0IHRoZSBwaXBl
bGluZSBzdGF0ZSBvYmplY3QgdG8gZW1pdCBmdW5jdGlvbiBwcm9sb2d1ZXMgYW5kIGVwaWxvZ3Vl
cy4KK1N0cmluZyBnZW5lcmF0ZU1ldGFsQ29kZShQcm9ncmFtJik7CisKK30KKworfQorCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
TWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iZmZlYzYzMWI3YWY3MzUwOGU3ODkzNjhmY2I0YzA3ZTlhYjg1M2Y4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hM
U0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAKQEAgLTAsMCArMSwzOTQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRl
ci5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMQWRkcmVzc1NwYWNl
LmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5oIgorI2luY2x1ZGUgIldITFNMVHlwZU5hbWVyLmgiCisjaW5jbHVkZSAiV0hMU0xVbm5hbWVk
VHlwZS5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBNZXRhbCB7CisK
K3N0YXRpYyBTdHJpbmcgZ2V0TmF0aXZlTmFtZShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlw
ZSwgVHlwZU5hbWVyJiB0eXBlTmFtZXIpCit7CisgICAgQVNTRVJUKGlzPEFTVDo6TmFtZWRUeXBl
Pih1bm5hbWVkVHlwZS51bmlmeU5vZGUoKSkpOworICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25j
YXN0PEFTVDo6TmFtZWRUeXBlPih1bm5hbWVkVHlwZS51bmlmeU5vZGUoKSk7CisgICAgQVNTRVJU
KGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKTsKKyAgICBhdXRvJiBu
YXRpdmVUeXBlRGVjbGFyYXRpb24gPSBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
bj4obmFtZWRUeXBlKTsKKyAgICByZXR1cm4gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShu
YXRpdmVUeXBlRGVjbGFyYXRpb24pOworfQorCitzdGF0aWMgU3RyaW5nIG1hcEZ1bmN0aW9uTmFt
ZShTdHJpbmcmIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICBpZiAoZnVuY3Rpb25OYW1lID09ICJkZHgi
KQorICAgICAgICByZXR1cm4gImRmZHgiX3N0cjsKKyAgICBpZiAoZnVuY3Rpb25OYW1lID09ICJk
ZHkiKQorICAgICAgICByZXR1cm4gImRmZHkiX3N0cjsKKyAgICBpZiAoZnVuY3Rpb25OYW1lID09
ICJhc2ludCIpCisgICAgICAgIHJldHVybiAiYXNfdHlwZTxpbnQzMl90PiJfc3RyOworICAgIGlm
IChmdW5jdGlvbk5hbWUgPT0gImFzdWludCIpCisgICAgICAgIHJldHVybiAiYXNfdHlwZTx1aW50
MzJfdD4iX3N0cjsKKyAgICBpZiAoZnVuY3Rpb25OYW1lID09ICJhc2Zsb2F0IikKKyAgICAgICAg
cmV0dXJuICJhc190eXBlPGZsb2F0PiJfc3RyOworICAgIHJldHVybiBmdW5jdGlvbk5hbWU7Cit9
CisKK3N0YXRpYyBTdHJpbmcgY29udmVydEFkZHJlc3NTcGFjZShBU1Q6OkFkZHJlc3NTcGFjZSBh
ZGRyZXNzU3BhY2UpCit7CisgICAgc3dpdGNoIChhZGRyZXNzU3BhY2UpIHsKKyAgICBjYXNlIEFT
VDo6QWRkcmVzc1NwYWNlOjpDb25zdGFudDoKKyAgICAgICAgcmV0dXJuICJjb25zdGFudCJfc3Ry
OworICAgIGNhc2UgQVNUOjpBZGRyZXNzU3BhY2U6OkRldmljZToKKyAgICAgICAgcmV0dXJuICJk
ZXZpY2UiX3N0cjsKKyAgICBjYXNlIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWRncm91cDoKKyAg
ICAgICAgcmV0dXJuICJ0aHJlYWRncm91cCJfc3RyOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFT
U0VSVChhZGRyZXNzU3BhY2UgPT0gQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCk7CisgICAgICAg
IHJldHVybiAidGhyZWFkIl9zdHI7CisgICAgfQorfQorCitTdHJpbmcgd3JpdGVOYXRpdmVGdW5j
dGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24sIFN0cmluZyYgb3V0cHV0RnVuY3Rpb25OYW1lLCBUeXBlTmFtZXImIHR5cGVOYW1lcikK
K3sKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgaWYgKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24uaXNDYXN0KCkpIHsKKyAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKTsKKyAgICAgICAgYXV0byBtZXRh
bFBhcmFtZXRlck5hbWUgPSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKVswXS50eXBlKCksIHR5cGVOYW1lcik7CisgICAgICAgIGF1dG8gbWV0YWxS
ZXR1cm5OYW1lID0gZ2V0TmF0aXZlTmFtZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUo
KSwgdHlwZU5hbWVyKTsKKyAgICAgICAgaWYgKG1ldGFsUGFyYW1ldGVyTmFtZSAhPSAiYXRvbWlj
X2ludCJfc3RyICYmIG1ldGFsUGFyYW1ldGVyTmFtZSAhPSAiYXRvbWljX3VpbnQiX3N0cikgewor
ICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5h
bWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIngp
IHtcbiIpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8IiwgbWV0YWxSZXR1cm5OYW1lLCAiPih4KTtcbiIpKTsKKyAg
ICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAgICAgICAgIHJldHVy
biBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIH0KKworICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5j
dGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAieCkge1xuIikpOworICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgiICAgIHJldHVybiBhdG9taWNfbG9hZF9leHBsaWNpdCgmeCwg
bWVtb3J5X29yZGVyX3JlbGF4ZWQpO1xuIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCJ9XG4iKTsKKyAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICB9
CisKKyAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3RhcnRzV2l0aCgi
b3BlcmF0b3IuIl9zdHIpKSB7CisgICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
Lm5hbWUoKS5lbmRzV2l0aCgiPSJfc3RyKSkgeworICAgICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKKyAgICAgICAgICAg
IGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAg
ICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLnR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAg
ICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gZ2V0TmF0aXZlTmFtZShuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLnR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAgICAgIGF1dG8gZmllbGRO
YW1lID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJvcGVyYXRv
ci4iX3N0ci5sZW5ndGgoKSk7CisgICAgICAgICAgICBmaWVsZE5hbWUgPSBmaWVsZE5hbWUuc3Vi
c3RyaW5nKDAsIGZpZWxkTmFtZS5sZW5ndGgoKSAtIDEpOworICAgICAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rp
b25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICJ2LCAiLCBtZXRhbFBhcmFtZXRlcjJO
YW1lLCAiIG4pIHtcbiIpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcoIiAgICB2LiIsIGZpZWxkTmFtZSwgIiA9IG47XG4iKSk7CisgICAgICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuIHY7XG4iKSk7CisgICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgICAgICAgICByZXR1cm4gc3Ry
aW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKTsKKyAgICAgICAg
YXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCksIHR5cGVOYW1lcik7CisgICAgICAgIGF1
dG8gbWV0YWxSZXR1cm5OYW1lID0gZ2V0TmF0aXZlTmFtZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1l
dGFsUGFyYW1ldGVyTmFtZSwgInYpIHtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZygiICAgIHJldHVybiB2LiIsIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpLnN1YnN0cmluZygib3BlcmF0b3IuIl9zdHIubGVuZ3RoKCkpLCAiO1xuIikpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgICAgIHJldHVybiBzdHJpbmdC
dWlsZGVyLnRvU3RyaW5nKCk7CisKKyAgICB9CisKKyAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yW10iKSB7CisgICAgICAgIEFTU0VSVChuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7CisgICAgICAgIGF1
dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAgYXV0
byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gZ2V0TmF0aXZlTmFtZSgqbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpLCB0eXBlTmFtZXIpOworICAgICAgICBhdXRv
IG1ldGFsUmV0dXJuTmFtZSA9IGdldE5hdGl2ZU5hbWUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi50eXBlKCksIHR5cGVOYW1lcik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRh
bFBhcmFtZXRlcjFOYW1lLCAibSwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBpKSB7XG4iKSk7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gbVtp
XTtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgICAgICBy
ZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgIH0KKworICAgIGlmIChuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3JbXT0iKSB7CisgICAgICAgIEFT
U0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMyk7
CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSwgdHlwZU5hbWVyKTsK
KyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gZ2V0TmF0aXZlTmFtZSgqbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpLCB0eXBlTmFtZXIpOwor
ICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyM05hbWUgPSBnZXROYXRpdmVOYW1lKCpuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsyXS50eXBlKCksIHR5cGVOYW1lcik7Cisg
ICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gZ2V0TmF0aXZlTmFtZShuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLnR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1l
LCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICJtLCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAi
IGksICIsIG1ldGFsUGFyYW1ldGVyM05hbWUsICIgdikge1xuIikpOworICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgbVtpXSA9IHY7XG4iKSk7CisgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gbTtcbiIpKTsKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgICAgICByZXR1cm4gc3RyaW5nQnVp
bGRlci50b1N0cmluZygpOworICAgIH0KKworICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLmlzT3BlcmF0b3IoKSkgeworICAgICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgICAgIGF1dG8gb3BlcmF0b3JO
YW1lID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJvcGVyYXRv
ciJfc3RyLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0g
Z2V0TmF0aXZlTmFtZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0u
dHlwZSgpLCB0eXBlTmFtZXIpOworICAgICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSBn
ZXROYXRpdmVOYW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpLCB0eXBlTmFtZXIp
OworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVy
bk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwg
IngpIHtcbiIpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
IiAgICByZXR1cm4gIiwgb3BlcmF0b3JOYW1lLCAieDtcbiIpKTsKKyAgICAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAgICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVy
LnRvU3RyaW5nKCk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIpOworICAgICAgICBhdXRvIG9wZXJh
dG9yTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygib3Bl
cmF0b3IiX3N0ci5sZW5ndGgoKSk7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9
IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBd
LnR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0g
Z2V0TmF0aXZlTmFtZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0u
dHlwZSgpLCB0eXBlTmFtZXIpOworICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IGdldE5h
dGl2ZU5hbWUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCksIHR5cGVOYW1lcik7Cisg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAn
ICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAieCwgIiwg
bWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiB5KSB7XG4iKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4geCAiLCBvcGVyYXRvck5hbWUsICIgeTtcbiIp
KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworICAgICAgICByZXR1cm4g
c3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgIH0KKworICAgIGlmIChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiY29zIgorICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKSA9PSAic2luIgorICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKSA9PSAidGFuIgorICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLm5hbWUoKSA9PSAiYWNvcyIKKyAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5uYW1lKCkgPT0gImFzaW4iCisgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpID09ICJhdGFuIgorICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5h
bWUoKSA9PSAiY29zaCIKKyAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1l
KCkgPT0gInNpbmgiCisgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgp
ID09ICJ0YW5oIgorICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9
PSAiY2VpbCIKKyAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0g
ImV4cCIKKyAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImZs
b29yIgorICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAibG9n
IgorICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAicm91bmQi
CisgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJ0cnVuYyIK
KyAgICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImRkeCIKKyAg
ICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImRkeSIKKyAgICAg
ICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImlzbm9ybWFsIgorICAg
ICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiaXNmaW5pdGUiCisg
ICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJpc2luZiIKKyAg
ICAgICAgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImlzbmFuIgorICAg
ICAgICB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYXNpbnQiCisgICAg
ICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJhc3VpbnQiCisgICAg
ICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJhc2Zsb2F0Iikgewor
ICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6
ZSgpID09IDEpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IGdldE5hdGl2ZU5h
bWUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSwgdHlw
ZU5hbWVyKTsKKyAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSBnZXROYXRpdmVOYW1lKG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpLCB0eXBlTmFtZXIpOworICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRG
dW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAieCkge1xuIikpOworICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuICIsIG1hcEZ1bmN0
aW9uTmFtZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSksICIoeCk7XG4iKSk7Cisg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKKyAgICAgICAgcmV0dXJuIHN0cmlu
Z0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5uYW1lKCkgPT0gInBvdyIgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1l
KCkgPT0gImF0YW4yIikgeworICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIpOworICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVy
MU5hbWUgPSBnZXROYXRpdmVOYW1lKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKVswXS50eXBlKCksIHR5cGVOYW1lcik7CisgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIy
TmFtZSA9IGdldE5hdGl2ZU5hbWUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVy
cygpWzFdLnR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUg
PSBnZXROYXRpdmVOYW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpLCB0eXBlTmFt
ZXIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJu
TmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwg
IngsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgeSkge1xuIikpOworICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuICIsIG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ubmFtZSgpLCAiKHgsIHkpO1xuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCgifVxuIik7CisgICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Cisg
ICAgfQorCisgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJmMTZ0
b2YzMiIgfHwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gImYzMnRvZjE2Iikg
eworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKKyAgICAgICAgQ1JBU0goKTsKKyAg
ICB9CisKKyAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkFsbE1l
bW9yeUJhcnJpZXJXaXRoR3JvdXBTeW5jIikgeworICAgICAgICBBU1NFUlQoIW5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSk7CisgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcoInZvaWQgIiwgb3V0cHV0RnVuY3Rpb25OYW1lLCAiKCkge1xu
IikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICAgIHRocmVhZGdyb3VwX2JhcnJp
ZXIobWVtX2ZsYWdzOjptZW1fZGV2aWNlKTtcbiIpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCgiICAgIHRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjptZW1fdGhyZWFkZ3JvdXAp
O1xuIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgdGhyZWFkZ3JvdXBfYmFy
cmllcihtZW1fZmxhZ3M6Om1lbV90ZXh0dXJlKTtcbiIpOworICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgifVxuIik7CisgICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7
CisgICAgfQorCisgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJE
ZXZpY2VNZW1vcnlCYXJyaWVyV2l0aEdyb3VwU3luYyIpIHsKKyAgICAgICAgQVNTRVJUKCFuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkpOworICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ2b2lkICIsIG91dHB1dEZ1bmN0aW9uTmFtZSwg
IigpIHtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICB0aHJlYWRncm91
cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX2RldmljZSk7XG4iKTsKKyAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoIn1cbiIpOworICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpOworICAgIH0KKworICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9
PSAiR3JvdXBNZW1vcnlCYXJyaWVyV2l0aEdyb3VwU3luYyIpIHsKKyAgICAgICAgQVNTRVJUKCFu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkpOworICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ2b2lkICIsIG91dHB1dEZ1bmN0aW9uTmFt
ZSwgIigpIHtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICB0aHJlYWRn
cm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX3RocmVhZGdyb3VwKTtcbiIpOworICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CisgICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVy
LnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpLnN0YXJ0c1dpdGgoIkludGVybG9ja2VkIl9zdHIpKSB7CisgICAgICAgIGlmIChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFu
Z2UiKSB7CisgICAgICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKCkuc2l6ZSgpID09IDQpOworICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9pbnRl
clR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkp
KTsKKyAgICAgICAgICAgIGF1dG8mIGZpcnN0QXJndW1lbnRQb2ludGVyID0gZG93bmNhc3Q8QVNU
OjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBd
LnR5cGUoKSk7CisgICAgICAgICAgICBhdXRvIGZpcnN0QXJndW1lbnRBZGRyZXNzU3BhY2UgPSBm
aXJzdEFyZ3VtZW50UG9pbnRlci5hZGRyZXNzU3BhY2UoKTsKKyAgICAgICAgICAgIGF1dG8gZmly
c3RBcmd1bWVudFBvaW50ZWUgPSBnZXROYXRpdmVOYW1lKGZpcnN0QXJndW1lbnRQb2ludGVyLmVs
ZW1lbnRUeXBlKCksIHR5cGVOYW1lcik7CisgICAgICAgICAgICBhdXRvIHNlY29uZEFyZ3VtZW50
ID0gZ2V0TmF0aXZlTmFtZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClb
MV0udHlwZSgpLCB0eXBlTmFtZXIpOworICAgICAgICAgICAgYXV0byB0aGlyZEFyZ3VtZW50ID0g
Z2V0TmF0aXZlTmFtZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0u
dHlwZSgpLCB0eXBlTmFtZXIpOworICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6UG9pbnRlclR5
cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVszXS50eXBlKCkpKTsK
KyAgICAgICAgICAgIGF1dG8mIGZvdXJ0aEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFTVDo6
UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVszXS50
eXBlKCkpOworICAgICAgICAgICAgYXV0byBmb3VydGhBcmd1bWVudEFkZHJlc3NTcGFjZSA9IGZv
dXJ0aEFyZ3VtZW50UG9pbnRlci5hZGRyZXNzU3BhY2UoKTsKKyAgICAgICAgICAgIGF1dG8gZm91
cnRoQXJndW1lbnRQb2ludGVlID0gZ2V0TmF0aXZlTmFtZShmb3VydGhBcmd1bWVudFBvaW50ZXIu
ZWxlbWVudFR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcoInZvaWQgIiwgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIGNvbnZlcnRB
ZGRyZXNzU3BhY2UoZmlyc3RBcmd1bWVudEFkZHJlc3NTcGFjZSksICcgJywgZmlyc3RBcmd1bWVu
dFBvaW50ZWUsICIqIG9iamVjdCwgIiwgc2Vjb25kQXJndW1lbnQsICIgY29tcGFyZSwgIiwgdGhp
cmRBcmd1bWVudCwgIiBkZXNpcmVkLCAiLCBjb252ZXJ0QWRkcmVzc1NwYWNlKGZvdXJ0aEFyZ3Vt
ZW50QWRkcmVzc1NwYWNlKSwgJyAnLCBmb3VydGhBcmd1bWVudFBvaW50ZWUsICIqIG91dCkge1xu
IikpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICBhdG9taWNfY29tcGFy
ZV9leGNoYW5nZV93ZWFrX2V4cGxpY2l0KG9iamVjdCwgJmNvbXBhcmUsIGRlc2lyZWQsIG1lbW9y
eV9vcmRlcl9yZWxheGVkKTtcbiIpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
IiAgICAqb3V0ID0gY29tcGFyZTtcbiIpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoIn1cbiIpOworICAgICAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsK
KyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKS5zaXplKCkgPT0gMyk7CisgICAgICAgIEFTU0VSVChpczxBU1Q6OlBvaW50ZXJU
eXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKSk7
CisgICAgICAgIGF1dG8mIGZpcnN0QXJndW1lbnRQb2ludGVyID0gZG93bmNhc3Q8QVNUOjpQb2lu
dGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUo
KSk7CisgICAgICAgIGF1dG8gZmlyc3RBcmd1bWVudEFkZHJlc3NTcGFjZSA9IGZpcnN0QXJndW1l
bnRQb2ludGVyLmFkZHJlc3NTcGFjZSgpOworICAgICAgICBhdXRvIGZpcnN0QXJndW1lbnRQb2lu
dGVlID0gZ2V0TmF0aXZlTmFtZShmaXJzdEFyZ3VtZW50UG9pbnRlci5lbGVtZW50VHlwZSgpLCB0
eXBlTmFtZXIpOworICAgICAgICBhdXRvIHNlY29uZEFyZ3VtZW50ID0gZ2V0TmF0aXZlTmFtZSgq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpLCB0eXBlTmFt
ZXIpOworICAgICAgICBBU1NFUlQoaXM8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzJdLnR5cGUoKSkpOworICAgICAgICBhdXRvJiB0aGly
ZEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsyXS50eXBlKCkpOworICAgICAgICBhdXRvIHRo
aXJkQXJndW1lbnRBZGRyZXNzU3BhY2UgPSB0aGlyZEFyZ3VtZW50UG9pbnRlci5hZGRyZXNzU3Bh
Y2UoKTsKKyAgICAgICAgYXV0byB0aGlyZEFyZ3VtZW50UG9pbnRlZSA9IGdldE5hdGl2ZU5hbWUo
dGhpcmRBcmd1bWVudFBvaW50ZXIuZWxlbWVudFR5cGUoKSwgdHlwZU5hbWVyKTsKKyAgICAgICAg
YXV0byBuYW1lID0gKFtdKFN0cmluZyBpbnB1dCkgLT4gU3RyaW5nIHsKKyAgICAgICAgICAgIGlm
IChpbnB1dCA9PSAiQWRkIikKKyAgICAgICAgICAgICAgICByZXR1cm4gImZldGNoX2FkZCJfc3Ry
OworICAgICAgICAgICAgaWYgKGlucHV0ID09ICJBbmQiKQorICAgICAgICAgICAgICAgIHJldHVy
biAiZmV0Y2hfYW5kIl9zdHI7CisgICAgICAgICAgICBpZiAoaW5wdXQgPT0gIkV4Y2hhbmdlIikK
KyAgICAgICAgICAgICAgICByZXR1cm4gImV4Y2hhbmdlIl9zdHI7CisgICAgICAgICAgICBpZiAo
aW5wdXQgPT0gIk1heCIpCisgICAgICAgICAgICAgICAgcmV0dXJuICJmZXRjaF9tYXgiX3N0cjsK
KyAgICAgICAgICAgIGlmIChpbnB1dCA9PSAiTWluIikKKyAgICAgICAgICAgICAgICByZXR1cm4g
ImZldGNoX21pbiJfc3RyOworICAgICAgICAgICAgaWYgKGlucHV0ID09ICJPciIpCisgICAgICAg
ICAgICAgICAgcmV0dXJuICJmZXRjaF9vciJfc3RyOworICAgICAgICAgICAgQVNTRVJUKGlucHV0
ID09ICJYb3IiKTsKKyAgICAgICAgICAgIHJldHVybiAiZmV0Y2hfeG9yIl9zdHI7CisgICAgICAg
IH0pKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygiSW50ZXJsb2Nr
ZWQiX3N0ci5sZW5ndGgoKSkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKCJ2b2lkICIsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBjb252ZXJ0QWRkcmVzc1NwYWNl
KGZpcnN0QXJndW1lbnRBZGRyZXNzU3BhY2UpLCAnICcsIGZpcnN0QXJndW1lbnRQb2ludGVlLCAi
KiBvYmplY3QsICIsIHNlY29uZEFyZ3VtZW50LCAiIG9wZXJhbmQsICIsIGNvbnZlcnRBZGRyZXNz
U3BhY2UodGhpcmRBcmd1bWVudEFkZHJlc3NTcGFjZSksICcgJywgdGhpcmRBcmd1bWVudFBvaW50
ZWUsICIqIG91dCkge1xuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3Ry
aW5nKCIgICAgKm91dCA9IGF0b21pY19mZXRjaF8iLCBuYW1lLCAiX2V4cGxpY2l0KG9iamVjdCwg
b3BlcmFuZCwgbWVtb3J5X29yZGVyX3JlbGF4ZWQpO1xuIikpOworICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgifVxuIik7CisgICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5n
KCk7CisgICAgfQorCisgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09
ICJTYW1wbGUiKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICAgICAg
Q1JBU0goKTsKKyAgICB9CisKKyAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1l
KCkgPT0gIkxvYWQiKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICAg
ICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5u
YW1lKCkgPT0gIkdldERpbWVuc2lvbnMiKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcy4KKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICBpZiAobmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlNhbXBsZUJpYXMiKSB7CisgICAgICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcy4KKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICBpZiAobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlNhbXBsZUdyYWQiKSB7CisgICAgICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICBp
ZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlNhbXBsZUxldmVsIikgewor
ICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgICAgIENSQVNIKCk7CisgICAg
fQorCisgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJHYXRoZXIi
KSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICAgICAgQ1JBU0goKTsK
KyAgICB9CisKKyAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkdh
dGhlclJlZCIpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgICAgICBD
UkFTSCgpOworICAgIH0KKworICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUo
KSA9PSAiU2FtcGxlQ21wIikgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisg
ICAgICAgIENSQVNIKCk7CisgICAgfQorCisgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ubmFtZSgpID09ICJTYW1wbGVDbXBMZXZlbFplcm8iKSB7CisgICAgICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcy4KKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICBpZiAobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlN0b3JlIikgeworICAgICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRoaXMuCisgICAgICAgIENSQVNIKCk7CisgICAgfQorCisgICAgaWYgKG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJHYXRoZXJBbHBoYSIpIHsKKyAgICAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgICAgICBDUkFTSCgpOworICAgIH0KKwor
ICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiR2F0aGVyQmx1ZSIp
IHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgICAgICBDUkFTSCgpOwor
ICAgIH0KKworICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiR2F0
aGVyQ21wIikgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgICAgIENS
QVNIKCk7CisgICAgfQorCisgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgp
ID09ICJHYXRoZXJDbXBSZWQiKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4K
KyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5uYW1lKCkgPT0gIkdhdGhlckdyZWVuIikgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMuCisgICAgICAgIENSQVNIKCk7CisgICAgfQorCisgICAgLy8gRklYTUU6IEFkZCBh
bGwgdGhlIGZ1bmN0aW9ucyB0aGF0IHRoZSBjb21waWxlciBnZW5lcmF0ZWQuCisKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIE1ldGFsCisKK30gLy8gbmFtZXNwYWNlIFdITFNMCisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMmU5YmQ0ZTNjYmQ2YzYyNjEwMWNkMDhhMGI4MmE1ZWZiNmU2NTVlMQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dI
TFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsK
KworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb247CisK
K30KKworbmFtZXNwYWNlIE1ldGFsIHsKKworY2xhc3MgVHlwZU5hbWVyOworCitTdHJpbmcgd3Jp
dGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mLCBTdHJpbmcm
IG91dHB1dEZ1bmN0aW9uTmFtZSwgVHlwZU5hbWVyJik7CisKK30KKworfQorCit9CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwv
V0hMU0xUeXBlTmFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
TWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIzMThlYjg2NzZhYmYzODQwZWQx
MzIzN2ZkN2I0OGRkMjUxN2UwMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAKQEAgLTAsMCArMSw3
MDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xU
eXBlTmFtZXIuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEFkZHJl
c3NTcGFjZS5oIgorI2luY2x1ZGUgIldITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgiCisjaW5jbHVk
ZSAiV0hMU0xBcnJheVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uRGVmaW5pdGlv
bi5oIgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25NZW1iZXIuaCIKKyNpbmNsdWRlICJXSExT
TE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMUG9pbnRlclR5cGUuaCIK
KyNpbmNsdWRlICJXSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFR5
cGVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisjaW5jbHVk
ZSAiV0hMU0xWaXNpdG9yLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGZ1bmN0
aW9uYWw+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBNZXRh
bCB7CisKK2NsYXNzIEJhc2VUeXBlTmFtZU5vZGUgeworcHVibGljOgorICAgIEJhc2VUeXBlTmFt
ZU5vZGUoQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50LCBTdHJpbmcmJiBtYW5nbGVkTmFtZSkKKyAg
ICAgICAgOiBtX3BhcmVudChwYXJlbnQpCisgICAgICAgICwgbV9tYW5nbGVkTmFtZShtYW5nbGVk
TmFtZSkKKyAgICB7CisgICAgfQorICAgIHZpcnR1YWwgfkJhc2VUeXBlTmFtZU5vZGUoKSA9IGRl
ZmF1bHQ7CisgICAgdmlydHVhbCBib29sIGlzQXJyYXlUeXBlTmFtZU5vZGUoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZU5hbWVO
b2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNQb2ludGVy
VHlwZU5hbWVOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNSZWZlcmVuY2VUeXBlTmFtZU5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIFZl
Y3RvcjxVbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4+JiBjaGlsZHJlbigpIHsgcmV0dXJuIG1f
Y2hpbGRyZW47IH0KKyAgICB2b2lkIGFwcGVuZChVbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4m
JiBjaGlsZCkKKyAgICB7CisgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKFdURk1vdmUoY2hpbGQp
KTsKKyAgICB9CisgICAgQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50KCkgeyByZXR1cm4gbV9wYXJl
bnQ7IH0KKyAgICBjb25zdCBTdHJpbmcmIG1hbmdsZWROYW1lKCkgY29uc3QgeyByZXR1cm4gbV9t
YW5nbGVkTmFtZTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxVbmlxdWVSZWY8QmFzZVR5cGVO
YW1lTm9kZT4+IG1fY2hpbGRyZW47CisgICAgQmFzZVR5cGVOYW1lTm9kZSogbV9wYXJlbnQ7Cisg
ICAgU3RyaW5nIG1fbWFuZ2xlZE5hbWU7Cit9OworCitjbGFzcyBBcnJheVR5cGVOYW1lTm9kZSA6
IHB1YmxpYyBCYXNlVHlwZU5hbWVOb2RlIHsKK3B1YmxpYzoKKyAgICBBcnJheVR5cGVOYW1lTm9k
ZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQsIFN0cmluZyYmIG1hbmdsZWROYW1lLCB1bnNpZ25l
ZCBudW1FbGVtZW50cykKKyAgICAgICAgOiBCYXNlVHlwZU5hbWVOb2RlKHBhcmVudCwgV1RGTW92
ZShtYW5nbGVkTmFtZSkpCisgICAgICAgICwgbV9udW1FbGVtZW50cyhudW1FbGVtZW50cykKKyAg
ICB7CisgICAgfQorICAgIHZpcnR1YWwgfkFycmF5VHlwZU5hbWVOb2RlKCkgPSBkZWZhdWx0Owor
ICAgIGJvb2wgaXNBcnJheVR5cGVOYW1lTm9kZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRy
dWU7IH0KKyAgICB1bnNpZ25lZCBudW1FbGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtRWxl
bWVudHM7IH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX251bUVsZW1lbnRzOworfTsKKwor
Y2xhc3MgQXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUgOiBwdWJsaWMgQmFzZVR5cGVOYW1lTm9k
ZSB7CitwdWJsaWM6CisgICAgQXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUoQmFzZVR5cGVOYW1l
Tm9kZSogcGFyZW50LCBTdHJpbmcmJiBtYW5nbGVkTmFtZSwgQVNUOjpBZGRyZXNzU3BhY2UgYWRk
cmVzc1NwYWNlKQorICAgICAgICA6IEJhc2VUeXBlTmFtZU5vZGUocGFyZW50LCBXVEZNb3ZlKG1h
bmdsZWROYW1lKSkKKyAgICAgICAgLCBtX2FkZHJlc3NTcGFjZShhZGRyZXNzU3BhY2UpCisgICAg
eworICAgIH0KKyAgICB2aXJ0dWFsIH5BcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZSgpID0gZGVm
YXVsdDsKKyAgICBib29sIGlzQXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgQVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNl
KCkgY29uc3QgeyByZXR1cm4gbV9hZGRyZXNzU3BhY2U7IH0KKworcHJpdmF0ZToKKyAgICBBU1Q6
OkFkZHJlc3NTcGFjZSBtX2FkZHJlc3NTcGFjZTsKK307CisKK2NsYXNzIFBvaW50ZXJUeXBlTmFt
ZU5vZGUgOiBwdWJsaWMgQmFzZVR5cGVOYW1lTm9kZSB7CitwdWJsaWM6CisgICAgUG9pbnRlclR5
cGVOYW1lTm9kZShCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQsIFN0cmluZyYmIG1hbmdsZWROYW1l
LCBBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UpCisgICAgICAgIDogQmFzZVR5cGVOYW1l
Tm9kZShwYXJlbnQsIFdURk1vdmUobWFuZ2xlZE5hbWUpKQorICAgICAgICAsIG1fYWRkcmVzc1Nw
YWNlKGFkZHJlc3NTcGFjZSkKKyAgICB7CisgICAgfQorICAgIHZpcnR1YWwgflBvaW50ZXJUeXBl
TmFtZU5vZGUoKSA9IGRlZmF1bHQ7CisgICAgYm9vbCBpc1BvaW50ZXJUeXBlTmFtZU5vZGUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgQVNUOjpBZGRyZXNzU3BhY2UgYWRk
cmVzc1NwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9hZGRyZXNzU3BhY2U7IH0KKworcHJpdmF0ZToK
KyAgICBBU1Q6OkFkZHJlc3NTcGFjZSBtX2FkZHJlc3NTcGFjZTsKK307CisKK2NsYXNzIFJlZmVy
ZW5jZVR5cGVOYW1lTm9kZSA6IHB1YmxpYyBCYXNlVHlwZU5hbWVOb2RlIHsKK3B1YmxpYzoKKyAg
ICBSZWZlcmVuY2VUeXBlTmFtZU5vZGUoQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50LCBTdHJpbmcm
JiBtYW5nbGVkTmFtZSwgQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkKKyAgICAgICAgOiBCYXNl
VHlwZU5hbWVOb2RlKHBhcmVudCwgV1RGTW92ZShtYW5nbGVkTmFtZSkpCisgICAgICAgICwgbV9u
YW1lZFR5cGUobmFtZWRUeXBlKQorICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+UmVmZXJlbmNl
VHlwZU5hbWVOb2RlKCkgPSBkZWZhdWx0OworICAgIGJvb2wgaXNSZWZlcmVuY2VUeXBlTmFtZU5v
ZGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgQVNUOjpOYW1lZFR5cGUm
IG5hbWVkVHlwZSgpIHsgcmV0dXJuIG1fbmFtZWRUeXBlOyB9CisKK3ByaXZhdGU6CisgICAgQVNU
OjpOYW1lZFR5cGUmIG1fbmFtZWRUeXBlOworfTsKKworfQorCit9CisKK30KKworI2RlZmluZSBT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0JBU0VfVFlQRV9OQU1FRF9OT0RFKFRvVmFsdWVU
eXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNv
cmU6OldITFNMOjpNZXRhbDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNU
eXBlKGNvbnN0IFdlYkNvcmU6OldITFNMOjpNZXRhbDo6QmFzZVR5cGVOYW1lTm9kZSYgdHlwZSkg
eyByZXR1cm4gdHlwZS5wcmVkaWNhdGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQo
KQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0JBU0VfVFlQRV9OQU1FRF9OT0RFKEFy
cmF5VHlwZU5hbWVOb2RlLCBpc0FycmF5VHlwZU5hbWVOb2RlKCkpCisKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfV0hMU0xfQkFTRV9UWVBFX05BTUVEX05PREUoQXJyYXlSZWZlcmVuY2VUeXBlTmFt
ZU5vZGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUoKSkKKworU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19XSExTTF9CQVNFX1RZUEVfTkFNRURfTk9ERShQb2ludGVyVHlwZU5hbWVOb2RlLCBp
c1BvaW50ZXJUeXBlTmFtZU5vZGUoKSkKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9C
QVNFX1RZUEVfTkFNRURfTk9ERShSZWZlcmVuY2VUeXBlTmFtZU5vZGUsIGlzUmVmZXJlbmNlVHlw
ZU5hbWVOb2RlKCkpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsK
KworbmFtZXNwYWNlIE1ldGFsIHsKKworVHlwZU5hbWVyOjpUeXBlTmFtZXIoUHJvZ3JhbSYgcHJv
Z3JhbSkKKyAgICA6IG1fcHJvZ3JhbShwcm9ncmFtKQoreworfQorCitUeXBlTmFtZXI6On5UeXBl
TmFtZXIoKSA9IGRlZmF1bHQ7CisKK3ZvaWQgVHlwZU5hbWVyOjp2aXNpdChBU1Q6OlVubmFtZWRU
eXBlJiB1bm5hbWVkVHlwZSkKK3sKKyAgICBpbnNlcnQodW5uYW1lZFR5cGUsIG1fdHJpZSk7Cit9
CisKK3ZvaWQgVHlwZU5hbWVyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51
bWVyYXRpb25EZWZpbml0aW9uKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uYW1lZFR5cGVN
YXBwaW5nLmFkZCgmZW51bWVyYXRpb25EZWZpbml0aW9uLCBnZW5lcmF0ZU5leHRUeXBlTmFtZSgp
KTsKKyAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwor
ICAgIGZvciAoYXV0byYgZW51bWVyYXRpb25NZW1iZXIgOiBlbnVtZXJhdGlvbkRlZmluaXRpb24u
ZW51bWVyYXRpb25NZW1iZXJzKCkpIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2VudW1l
cmF0aW9uTWVtYmVyTWFwcGluZy5hZGQoJnN0YXRpY19jYXN0PEFTVDo6RW51bWVyYXRpb25NZW1i
ZXImPihlbnVtZXJhdGlvbk1lbWJlciksIGdlbmVyYXRlTmV4dEVudW1lcmF0aW9uTWVtYmVyTmFt
ZSgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0Vu
dHJ5KTsKKyAgICB9CisgICAgVmlzaXRvcjo6dmlzaXQoZW51bWVyYXRpb25EZWZpbml0aW9uKTsK
K30KKwordm9pZCBUeXBlTmFtZXI6OnZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJikK
K3sKKyAgICAvLyBOYXRpdmUgdHlwZSBkZWNsYXJhdGlvbnMgYWxyZWFkeSBoYXZlIG5hbWVzLCBh
bmQgYXJlIGFscmVhZHkgZGVjbGFyZWQgaW4gTWV0YWwuCit9CisKK3N0YXRpYyBWZWN0b3I8VW5p
cXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+Pjo6aXRlcmF0b3IgZmluZEluVmVjdG9yKEFTVDo6VW5u
YW1lZFR5cGUmIHVubmFtZWRUeXBlLCBWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+
PiYgdHlwZXMpCit7CisgICAgcmV0dXJuIHN0ZDo6ZmluZF9pZih0eXBlcy5iZWdpbigpLCB0eXBl
cy5lbmQoKSwgWyZdKEJhc2VUeXBlTmFtZU5vZGUmIGJhc2VUeXBlTmFtZU5vZGUpIC0+IGJvb2wg
eworICAgICAgICBpZiAoaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkgJiYgaXM8
UmVmZXJlbmNlVHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKSkgeworICAgICAgICAgICAg
YXV0byogcmVzb2x2ZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVk
VHlwZSkucmVzb2x2ZWRUeXBlKCk7CisgICAgICAgICAgICBBU1NFUlQocmVzb2x2ZWRUeXBlKTsK
KyAgICAgICAgICAgIHJldHVybiByZXNvbHZlZFR5cGUgPT0gJmRvd25jYXN0PFJlZmVyZW5jZVR5
cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9kZSkubmFtZWRUeXBlKCk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSAmJiBpczxQb2ludGVy
VHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBkb3du
Y2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkuYWRkcmVzc1NwYWNlKCkgPT0gZG93
bmNhc3Q8UG9pbnRlclR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9kZSkuYWRkcmVzc1NwYWNl
KCk7CisgICAgICAgIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUp
ICYmIGlzPEFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKSkKKyAg
ICAgICAgICAgIHJldHVybiBkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1l
ZFR5cGUpLmFkZHJlc3NTcGFjZSgpID09IGRvd25jYXN0PEFycmF5UmVmZXJlbmNlVHlwZU5hbWVO
b2RlPihiYXNlVHlwZU5hbWVOb2RlKS5hZGRyZXNzU3BhY2UoKTsKKyAgICAgICAgaWYgKGlzPEFT
VDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkgJiYgaXM8QXJyYXlUeXBlTmFtZU5vZGU+KGJhc2VU
eXBlTmFtZU5vZGUpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFTVDo6QXJyYXlUeXBl
Pih1bm5hbWVkVHlwZSkubnVtRWxlbWVudHMoKSA9PSBkb3duY2FzdDxBcnJheVR5cGVOYW1lTm9k
ZT4oYmFzZVR5cGVOYW1lTm9kZSkubnVtRWxlbWVudHMoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0pOworfQorCitzdGF0aWMgQmFzZVR5cGVOYW1lTm9kZSYgZmluZChBU1Q6OlVubmFt
ZWRUeXBlJiB1bm5hbWVkVHlwZSwgVmVjdG9yPFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPj4m
IHR5cGVzKQoreworICAgIGF1dG8mIHZlY3RvclRvU2VhcmNoID0gKFsmXSgpIC0+IFZlY3RvcjxV
bmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4+JiB7CisgICAgICAgIGlmIChpczxBU1Q6OlR5cGVS
ZWZlcmVuY2U+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiB0eXBlczsKKyAgICAg
ICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHJl
dHVybiBmaW5kKGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKS5lbGVtZW50
VHlwZSgpLCB0eXBlcykuY2hpbGRyZW4oKTsKKyAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZl
cmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmluZChkb3duY2Fz
dDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpLmVsZW1lbnRUeXBlKCksIHR5
cGVzKS5jaGlsZHJlbigpOworICAgICAgICBBU1NFUlQoaXM8QVNUOjpBcnJheVR5cGU+KHVubmFt
ZWRUeXBlKSk7CisgICAgICAgIHJldHVybiBmaW5kKGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1
bm5hbWVkVHlwZSkudHlwZSgpLCB0eXBlcykuY2hpbGRyZW4oKTsKKyAgICB9KSgpOworICAgIGF1
dG8gaXRlcmF0b3IgPSBmaW5kSW5WZWN0b3IodW5uYW1lZFR5cGUsIHZlY3RvclRvU2VhcmNoKTsK
KyAgICBBU1NFUlQoaXRlcmF0b3IgIT0gdHlwZXMuZW5kKCkpOworICAgIHJldHVybiAqaXRlcmF0
b3I7Cit9CisKK3ZvaWQgVHlwZU5hbWVyOjp2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24m
IHN0cnVjdHVyZURlZmluaXRpb24pCit7CisgICAgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9
IG1fbmFtZWRUeXBlTWFwcGluZy5hZGQoJnN0cnVjdHVyZURlZmluaXRpb24sIGdlbmVyYXRlTmV4
dFR5cGVOYW1lKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0
LmlzTmV3RW50cnkpOworICAgIH0KKyAgICBWaXNpdG9yOjp2aXNpdChzdHJ1Y3R1cmVEZWZpbml0
aW9uKTsKKyAgICB7CisgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEJhc2VU
eXBlTmFtZU5vZGU+PiBuZWlnaGJvcnM7CisgICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJlRWxl
bWVudCA6IHN0cnVjdHVyZURlZmluaXRpb24uc3RydWN0dXJlRWxlbWVudHMoKSkgeworICAgICAg
ICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3N0cnVjdHVyZUVsZW1lbnRNYXBwaW5nLmFkZCgmc3Ry
dWN0dXJlRWxlbWVudCwgZ2VuZXJhdGVOZXh0U3RydWN0dXJlRWxlbWVudE5hbWUoKSk7CisgICAg
ICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwor
ICAgICAgICAgICAgbmVpZ2hib3JzLmFwcGVuZChmaW5kKHN0cnVjdHVyZUVsZW1lbnQudHlwZSgp
LCBtX3RyaWUpKTsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZGVwZW5k
ZW5jeUdyYXBoLmFkZCgmc3RydWN0dXJlRGVmaW5pdGlvbiwgV1RGTW92ZShuZWlnaGJvcnMpKTsK
KyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsK
KyAgICB9Cit9CisKK3ZvaWQgVHlwZU5hbWVyOjp2aXNpdChBU1Q6OlR5cGVEZWZpbml0aW9uJiB0
eXBlRGVmaW5pdGlvbikKK3sKKyAgICB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9uYW1l
ZFR5cGVNYXBwaW5nLmFkZCgmdHlwZURlZmluaXRpb24sIGdlbmVyYXRlTmV4dFR5cGVOYW1lKCkp
OworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkp
OworICAgIH0KKyAgICBWaXNpdG9yOjp2aXNpdCh0eXBlRGVmaW5pdGlvbik7CisgICAgeworICAg
ICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxCYXNlVHlwZU5hbWVOb2RlPj4gbmVp
Z2hib3JzID0geyBmaW5kKHR5cGVEZWZpbml0aW9uLnR5cGUoKSwgbV90cmllKSB9OworICAgICAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fZGVwZW5kZW5jeUdyYXBoLmFkZCgmdHlwZURlZmluaXRpb24s
IFdURk1vdmUobmVpZ2hib3JzKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBh
ZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorfQorCitTdHJpbmcgVHlwZU5hbWVyOjptYW5n
bGVkTmFtZUZvclR5cGUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbikKK3sKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAidm9p
ZCIpCisgICAgICAgIHJldHVybiAidm9pZCJfc3RyOworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFy
YXRpb24ubmFtZSgpID09ICJib29sIikKKyAgICAgICAgcmV0dXJuICJib29sIl9zdHI7CisgICAg
aWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInVjaGFyIikKKyAgICAgICAgcmV0
dXJuICJ1aW50OF90Il9zdHI7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkg
PT0gInVzaG9ydCIpCisgICAgICAgIHJldHVybiAidWludDE2X3QiX3N0cjsKKyAgICBpZiAobmF0
aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAidWludCIpCisgICAgICAgIHJldHVybiAidWlu
dDMyX3QiX3N0cjsKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiY2hh
ciIpCisgICAgICAgIHJldHVybiAiaW50OF90Il9zdHI7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5uYW1lKCkgPT0gInNob3J0IikKKyAgICAgICAgcmV0dXJuICJpbnQxNl90Il9zdHI7
CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImludCIpCisgICAgICAg
IHJldHVybiAiaW50MzJfdCJfc3RyOworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFt
ZSgpID09ICJoYWxmIikKKyAgICAgICAgcmV0dXJuICJoYWxmIl9zdHI7CisgICAgaWYgKG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImZsb2F0IikKKyAgICAgICAgcmV0dXJuICJmbG9h
dCJfc3RyOworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJhdG9taWNf
aW50IikKKyAgICAgICAgcmV0dXJuICJhdG9taWNfaW50Il9zdHI7CisgICAgaWYgKG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImF0b21pY191aW50IikKKyAgICAgICAgcmV0dXJuICJh
dG9taWNfdWludCJfc3RyOworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09
ICJzYW1wbGVyIikKKyAgICAgICAgcmV0dXJuICJzYW1wbGVyIl9zdHI7CisgICAgaWYgKG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInZlY3RvciIpIHsKKyAgICAgICAgQVNTRVJUKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDIpOworICAgICAg
ICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJl
bmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOworICAgICAg
ICBhdXRvJiB0eXBlUmVmZXJlbmNlID0gV1RGOjpnZXQ8VW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVy
ZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pOworICAgICAg
ICBhdXRvJiB1bmlmeU5vZGUgPSB0eXBlUmVmZXJlbmNlLT51bmlmeU5vZGUoKTsKKyAgICAgICAg
QVNTRVJUKGlzPEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpKTsKKyAgICAgICAgYXV0byYgbmFt
ZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAgIEFT
U0VSVChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKSk7CisgICAgICAg
IGF1dG8mIHBhcmFtZXRlclR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
bj4obmFtZWRUeXBlKTsKKyAgICAgICAgYXV0byBwcmVmaXggPSAoWyZdKCkgLT4gU3RyaW5nIHsK
KyAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJUeXBlLm5hbWUoKSA9PSAiYm9vbCIpCisgICAgICAg
ICAgICAgICAgcmV0dXJuICJib29sIjsKKyAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJUeXBlLm5h
bWUoKSA9PSAidWNoYXIiKQorICAgICAgICAgICAgICAgIHJldHVybiAidWNoYXIiOworICAgICAg
ICAgICAgaWYgKHBhcmFtZXRlclR5cGUubmFtZSgpID09ICJ1c2hvcnQiKQorICAgICAgICAgICAg
ICAgIHJldHVybiAidXNob3J0IjsKKyAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJUeXBlLm5hbWUo
KSA9PSAidWludCIpCisgICAgICAgICAgICAgICAgcmV0dXJuICJ1aW50IjsKKyAgICAgICAgICAg
IGlmIChwYXJhbWV0ZXJUeXBlLm5hbWUoKSA9PSAiY2hhciIpCisgICAgICAgICAgICAgICAgcmV0
dXJuICJjaGFyIjsKKyAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJUeXBlLm5hbWUoKSA9PSAic2hv
cnQiKQorICAgICAgICAgICAgICAgIHJldHVybiAic2hvcnQiOworICAgICAgICAgICAgaWYgKHBh
cmFtZXRlclR5cGUubmFtZSgpID09ICJpbnQiKQorICAgICAgICAgICAgICAgIHJldHVybiAiaW50
IjsKKyAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJUeXBlLm5hbWUoKSA9PSAiaGFsZiIpCisgICAg
ICAgICAgICAgICAgcmV0dXJuICJoYWxmIjsKKyAgICAgICAgICAgIEFTU0VSVChwYXJhbWV0ZXJU
eXBlLm5hbWUoKSA9PSAiZmxvYXQiKTsKKyAgICAgICAgICAgIHJldHVybiAiZmxvYXQiOworICAg
ICAgICB9KSgpOworICAgICAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6OkNv
bnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsx
XSkpOworICAgICAgICBhdXRvJiBjb25zdGFudEV4cHJlc3Npb24gPSBXVEY6OmdldDxBU1Q6OkNv
bnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsw
XSk7CisgICAgICAgIGF1dG8mIGludGVnZXJMaXRlcmFsID0gY29uc3RhbnRFeHByZXNzaW9uLmlu
dGVnZXJMaXRlcmFsKCk7CisgICAgICAgIGF1dG8gc3VmZml4ID0gKFsmXSgpIC0+IFN0cmluZyB7
CisgICAgICAgICAgICBzd2l0Y2ggKGludGVnZXJMaXRlcmFsLnZhbHVlKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gIjIiX3N0cjsKKyAgICAgICAgICAg
IGNhc2UgMzoKKyAgICAgICAgICAgICAgICByZXR1cm4gIjMiX3N0cjsKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUKGludGVnZXJMaXRlcmFsLnZhbHVlKCkgPT0g
NCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICI0Il9zdHI7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0pKCk7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKHByZWZpeCwgc3VmZml4KTsKKyAg
ICB9CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIm1hdHJpeCIpIHsK
KyAgICAgICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6
ZSgpID09IDMpOworICAgICAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxVbmlxdWVS
ZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVu
dHMoKVswXSkpOworICAgICAgICBhdXRvJiB0eXBlUmVmZXJlbmNlID0gV1RGOjpnZXQ8VW5pcXVl
UmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1l
bnRzKClbMF0pOworICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSB0eXBlUmVmZXJlbmNlLT51bmlm
eU5vZGUoKTsKKyAgICAgICAgQVNTRVJUKGlzPEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpKTsK
KyAgICAgICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5
Tm9kZSk7CisgICAgICAgIEFTU0VSVChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFt
ZWRUeXBlKSk7CisgICAgICAgIGF1dG8mIHBhcmFtZXRlclR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5h
dGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKTsKKyAgICAgICAgYXV0byBwcmVmaXggPSAo
WyZdKCkgLT4gU3RyaW5nIHsKKyAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJUeXBlLm5hbWUoKSA9
PSAiaGFsZiIpCisgICAgICAgICAgICAgICAgcmV0dXJuICJoYWxmIjsKKyAgICAgICAgICAgIEFT
U0VSVChwYXJhbWV0ZXJUeXBlLm5hbWUoKSA9PSAiZmxvYXQiKTsKKyAgICAgICAgICAgIHJldHVy
biAiZmxvYXQiOworICAgICAgICB9KSgpOworICAgICAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5
cGVBcmd1bWVudHMoKVsxXSkpOworICAgICAgICBhdXRvJiBjb25zdGFudEV4cHJlc3Npb24xID0g
V1RGOjpnZXQ8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50
eXBlQXJndW1lbnRzKClbMF0pOworICAgICAgICBhdXRvJiBpbnRlZ2VyTGl0ZXJhbDEgPSBjb25z
dGFudEV4cHJlc3Npb24xLmludGVnZXJMaXRlcmFsKCk7CisgICAgICAgIGF1dG8gbWlkZGxlID0g
KFsmXSgpIC0+IFN0cmluZyB7CisgICAgICAgICAgICBzd2l0Y2ggKGludGVnZXJMaXRlcmFsMS52
YWx1ZSgpKSB7CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgcmV0dXJuICIy
Il9zdHI7CisgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgcmV0dXJuICIzIl9z
dHI7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVChpbnRlZ2Vy
TGl0ZXJhbDEudmFsdWUoKSA9PSA0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gIjQiX3N0cjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSkoKTsKKyAgICAgICAgQVNTRVJUKFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi50eXBlQXJndW1lbnRzKClbMl0pKTsKKyAgICAgICAgYXV0byYgY29uc3RhbnRFeHByZXNzaW9u
MiA9IFdURjo6Z2V0PEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRp
b24udHlwZUFyZ3VtZW50cygpWzBdKTsKKyAgICAgICAgYXV0byYgaW50ZWdlckxpdGVyYWwyID0g
Y29uc3RhbnRFeHByZXNzaW9uMi5pbnRlZ2VyTGl0ZXJhbCgpOworICAgICAgICBhdXRvIHN1ZmZp
eCA9IChbJl0oKSAtPiBTdHJpbmcgeworICAgICAgICAgICAgc3dpdGNoIChpbnRlZ2VyTGl0ZXJh
bDIudmFsdWUoKSkgeworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIHJldHVy
biAiMiJfc3RyOworICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIHJldHVybiAi
MyJfc3RyOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlQoaW50
ZWdlckxpdGVyYWwyLnZhbHVlKCkgPT0gNCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICI0Il9z
dHI7CisgICAgICAgICAgICB9CisgICAgICAgIH0pKCk7CisgICAgICAgIHJldHVybiBtYWtlU3Ry
aW5nKHByZWZpeCwgbWlkZGxlLCAneCcsIHN1ZmZpeCk7CisgICAgfQorICAgIEFTU0VSVChuYXRp
dmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAxKTsKKyAgICBBU1NF
UlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4o
bmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOworICAgIGF1dG8mIHR5
cGVSZWZlcmVuY2UgPSBXVEY6OmdldDxVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0
aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSk7CisgICAgYXV0byBwcmVmaXgg
PSAoWyZdKCkgLT4gU3RyaW5nIHsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5u
YW1lKCkgPT0gIlRleHR1cmUxRCIpCisgICAgICAgICAgICByZXR1cm4gInRleHR1cmUxZCJfc3Ry
OworICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiUldUZXh0dXJl
MUQiKQorICAgICAgICAgICAgcmV0dXJuICJ0ZXh0dXJlMWQiX3N0cjsKKyAgICAgICAgaWYgKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlRleHR1cmUxREFycmF5IikKKyAgICAgICAg
ICAgIHJldHVybiAidGV4dHVyZTFkX2FycmF5Il9zdHI7CisgICAgICAgIGlmIChuYXRpdmVUeXBl
RGVjbGFyYXRpb24ubmFtZSgpID09ICJSV1RleHR1cmUxREFycmF5IikKKyAgICAgICAgICAgIHJl
dHVybiAidGV4dHVyZTFkX2FycmF5Il9zdHI7CisgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFy
YXRpb24ubmFtZSgpID09ICJUZXh0dXJlMkQiKQorICAgICAgICAgICAgcmV0dXJuICJ0ZXh0dXJl
MmQiX3N0cjsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlJX
VGV4dHVyZTJEIikKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZTJkIl9zdHI7CisgICAgICAg
IGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJUZXh0dXJlMkRBcnJheSIpCisg
ICAgICAgICAgICByZXR1cm4gInRleHR1cmUyZF9hcnJheSJfc3RyOworICAgICAgICBpZiAobmF0
aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiUldUZXh0dXJlMkRBcnJheSIpCisgICAgICAg
ICAgICByZXR1cm4gInRleHR1cmUyZF9hcnJheSJfc3RyOworICAgICAgICBpZiAobmF0aXZlVHlw
ZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiVGV4dHVyZTNEIikKKyAgICAgICAgICAgIHJldHVybiAi
dGV4dHVyZTNkIl9zdHI7CisgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgp
ID09ICJSV1RleHR1cmUzRCIpCisgICAgICAgICAgICByZXR1cm4gInRleHR1cmUzZCJfc3RyOwor
ICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiVGV4dHVyZUN1YmUi
KQorICAgICAgICAgICAgcmV0dXJuICJ0ZXh0dXJlY3ViZSJfc3RyOworICAgICAgICBpZiAobmF0
aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiVGV4dHVyZURlcHRoMkQiKQorICAgICAgICAg
ICAgcmV0dXJuICJkZXB0aDJkIl9zdHI7CisgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRp
b24ubmFtZSgpID09ICJSV1RleHR1cmVEZXB0aDJEIikKKyAgICAgICAgICAgIHJldHVybiAiZGVw
dGgyZCJfc3RyOworICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
VGV4dHVyZURlcHRoMkRBcnJheSIpCisgICAgICAgICAgICByZXR1cm4gImRlcHRoMmRfYXJyYXki
X3N0cjsKKyAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlJXVGV4
dHVyZURlcHRoMkRBcnJheSIpCisgICAgICAgICAgICByZXR1cm4gImRlcHRoMmRfYXJyYXkiX3N0
cjsKKyAgICAgICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlRleHR1
cmVEZXB0aEN1YmUiKTsKKyAgICAgICAgcmV0dXJuICJkZXB0aGN1YmUiX3N0cjsKKyAgICB9KSgp
OworICAgIGF1dG8gaW5uZXJUeXBlID0gKFsmXSgpIC0+IFN0cmluZyB7CisgICAgICAgIGlmICh0
eXBlUmVmZXJlbmNlLT5uYW1lKCkgPT0gInVzaG9ydCIpCisgICAgICAgICAgICByZXR1cm4gInVz
aG9ydCJfc3RyOworICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS0+bmFtZSgpID09ICJ1c2hvcnQy
IikKKyAgICAgICAgICAgIHJldHVybiAidXNob3J0Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVm
ZXJlbmNlLT5uYW1lKCkgPT0gInVzaG9ydDMiKQorICAgICAgICAgICAgcmV0dXJuICJ1c2hvcnQi
X3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UtPm5hbWUoKSA9PSAidXNob3J0NCIpCisg
ICAgICAgICAgICByZXR1cm4gInVzaG9ydCJfc3RyOworICAgICAgICBpZiAodHlwZVJlZmVyZW5j
ZS0+bmFtZSgpID09ICJ1aW50IikKKyAgICAgICAgICAgIHJldHVybiAidWludCJfc3RyOworICAg
ICAgICBpZiAodHlwZVJlZmVyZW5jZS0+bmFtZSgpID09ICJ1aW50MiIpCisgICAgICAgICAgICBy
ZXR1cm4gInVpbnQiX3N0cjsKKyAgICAgICAgaWYgKHR5cGVSZWZlcmVuY2UtPm5hbWUoKSA9PSAi
dWludDMiKQorICAgICAgICAgICAgcmV0dXJuICJ1aW50Il9zdHI7CisgICAgICAgIGlmICh0eXBl
UmVmZXJlbmNlLT5uYW1lKCkgPT0gInVpbnQ0IikKKyAgICAgICAgICAgIHJldHVybiAidWludCJf
c3RyOworICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS0+bmFtZSgpID09ICJzaG9ydCIpCisgICAg
ICAgICAgICByZXR1cm4gInNob3J0Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLT5u
YW1lKCkgPT0gInNob3J0MiIpCisgICAgICAgICAgICByZXR1cm4gInNob3J0Il9zdHI7CisgICAg
ICAgIGlmICh0eXBlUmVmZXJlbmNlLT5uYW1lKCkgPT0gInNob3J0MyIpCisgICAgICAgICAgICBy
ZXR1cm4gInNob3J0Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLT5uYW1lKCkgPT0g
InNob3J0NCIpCisgICAgICAgICAgICByZXR1cm4gInNob3J0Il9zdHI7CisgICAgICAgIGlmICh0
eXBlUmVmZXJlbmNlLT5uYW1lKCkgPT0gImludCIpCisgICAgICAgICAgICByZXR1cm4gImludCJf
c3RyOworICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS0+bmFtZSgpID09ICJpbnQyIikKKyAgICAg
ICAgICAgIHJldHVybiAiaW50Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLT5uYW1l
KCkgPT0gImludDMiKQorICAgICAgICAgICAgcmV0dXJuICJpbnQiX3N0cjsKKyAgICAgICAgaWYg
KHR5cGVSZWZlcmVuY2UtPm5hbWUoKSA9PSAiaW50NCIpCisgICAgICAgICAgICByZXR1cm4gImlu
dCJfc3RyOworICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS0+bmFtZSgpID09ICJoYWxmIikKKyAg
ICAgICAgICAgIHJldHVybiAiaGFsZiJfc3RyOworICAgICAgICBpZiAodHlwZVJlZmVyZW5jZS0+
bmFtZSgpID09ICJoYWxmMiIpCisgICAgICAgICAgICByZXR1cm4gImhhbGYiX3N0cjsKKyAgICAg
ICAgaWYgKHR5cGVSZWZlcmVuY2UtPm5hbWUoKSA9PSAiaGFsZjMiKQorICAgICAgICAgICAgcmV0
dXJuICJoYWxmIl9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLT5uYW1lKCkgPT0gImhh
bGY0IikKKyAgICAgICAgICAgIHJldHVybiAiaGFsZiJfc3RyOworICAgICAgICBpZiAodHlwZVJl
ZmVyZW5jZS0+bmFtZSgpID09ICJmbG9hdCIpCisgICAgICAgICAgICByZXR1cm4gImZsb2F0Il9z
dHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLT5uYW1lKCkgPT0gImZsb2F0MiIpCisgICAg
ICAgICAgICByZXR1cm4gImZsb2F0Il9zdHI7CisgICAgICAgIGlmICh0eXBlUmVmZXJlbmNlLT5u
YW1lKCkgPT0gImZsb2F0MyIpCisgICAgICAgICAgICByZXR1cm4gImZsb2F0Il9zdHI7CisgICAg
ICAgIEFTU0VSVCh0eXBlUmVmZXJlbmNlLT5uYW1lKCkgPT0gImZsb2F0NCIpOworICAgICAgICBy
ZXR1cm4gImZsb2F0Il9zdHI7CisgICAgfSkoKTsKKyAgICAvLyBGSVhNRTogU3BlY2lmeSB0aGUg
c2Vjb25kIHRlbXBsYXRlIGFyZ3VtZW50IHRvIE1ldGFsIHRleHR1cmUgdHlwZXMuCisgICAgcmV0
dXJuIG1ha2VTdHJpbmcocHJlZml4LCAnPCcsIGlubmVyVHlwZSwgJz4nKTsKK30KKworVW5pcXVl
UmVmPEJhc2VUeXBlTmFtZU5vZGU+IFR5cGVOYW1lcjo6Y3JlYXRlTmFtZU5vZGUoQVNUOjpVbm5h
bWVkVHlwZSYgdW5uYW1lZFR5cGUsIEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVudCkKK3sKKyAgICBp
ZiAoaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkpIHsKKyAgICAgICAgYXV0byYg
dHlwZVJlZmVyZW5jZSA9IGRvd25jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUp
OworICAgICAgICBBU1NFUlQodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAg
IHJldHVybiBtYWtlVW5pcXVlUmVmPFJlZmVyZW5jZVR5cGVOYW1lTm9kZT4ocGFyZW50LCBnZW5l
cmF0ZU5leHRUeXBlTmFtZSgpLCAqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAg
fQorICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpIHsKKyAgICAgICAg
YXV0byYgcG9pbnRlclR5cGUgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlw
ZSk7CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPFBvaW50ZXJUeXBlTmFtZU5vZGU+KHBh
cmVudCwgZ2VuZXJhdGVOZXh0VHlwZU5hbWUoKSwgcG9pbnRlclR5cGUuYWRkcmVzc1NwYWNlKCkp
OworICAgIH0KKyAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBl
KSkgeworICAgICAgICBhdXRvJiBhcnJheVJlZmVyZW5jZVR5cGUgPSBkb3duY2FzdDxBU1Q6OkFy
cmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpOworICAgICAgICByZXR1cm4gbWFrZVVuaXF1
ZVJlZjxBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZT4ocGFyZW50LCBnZW5lcmF0ZU5leHRUeXBl
TmFtZSgpLCBhcnJheVJlZmVyZW5jZVR5cGUuYWRkcmVzc1NwYWNlKCkpOworICAgIH0KKyAgICBB
U1NFUlQoaXM8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSk7CisgICAgYXV0byYgYXJyYXlU
eXBlID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKTsKKyAgICByZXR1cm4g
bWFrZVVuaXF1ZVJlZjxBcnJheVR5cGVOYW1lTm9kZT4ocGFyZW50LCBnZW5lcmF0ZU5leHRUeXBl
TmFtZSgpLCBhcnJheVR5cGUubnVtRWxlbWVudHMoKSk7Cit9CisKK3NpemVfdCBUeXBlTmFtZXI6
Omluc2VydChBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgVmVjdG9yPFVuaXF1ZVJlZjxC
YXNlVHlwZU5hbWVOb2RlPj4mIHR5cGVzKQoreworICAgIFZlY3RvcjxVbmlxdWVSZWY8QmFzZVR5
cGVOYW1lTm9kZT4+KiB2ZWN0b3JUb0luc2VydEludG8geyBudWxscHRyIH07CisgICAgQmFzZVR5
cGVOYW1lTm9kZSogcGFyZW50IHsgbnVsbHB0ciB9OworICAgIGlmIChpczxBU1Q6OlR5cGVSZWZl
cmVuY2U+KHVubmFtZWRUeXBlKSkgeworICAgICAgICB2ZWN0b3JUb0luc2VydEludG8gPSAmdHlw
ZXM7CisgICAgICAgIHBhcmVudCA9IG51bGxwdHI7CisgICAgfSBlbHNlIGlmIChpczxBU1Q6OlBv
aW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpIHsKKyAgICAgICAgYXV0byYgaXRlbSA9IHR5cGVzW2lu
c2VydChkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUo
KSwgdHlwZXMpXTsKKyAgICAgICAgdmVjdG9yVG9JbnNlcnRJbnRvID0gJml0ZW0tPmNoaWxkcmVu
KCk7CisgICAgICAgIHBhcmVudCA9ICZpdGVtOworICAgIH0gZWxzZSBpZiAoaXM8QVNUOjpBcnJh
eVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkgeworICAgICAgICBhdXRvJiBpdGVtID0gdHlw
ZXNbaW5zZXJ0KGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSku
ZWxlbWVudFR5cGUoKSwgdHlwZXMpXTsKKyAgICAgICAgdmVjdG9yVG9JbnNlcnRJbnRvID0gJml0
ZW0tPmNoaWxkcmVuKCk7CisgICAgICAgIHBhcmVudCA9ICZpdGVtOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIEFTU0VSVChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKTsKKyAgICAgICAg
YXV0byYgaXRlbSA9IHR5cGVzW2luc2VydChkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1l
ZFR5cGUpLnR5cGUoKSwgdHlwZXMpXTsKKyAgICAgICAgdmVjdG9yVG9JbnNlcnRJbnRvID0gJml0
ZW0tPmNoaWxkcmVuKCk7CisgICAgICAgIHBhcmVudCA9ICZpdGVtOworICAgIH0KKyAgICBBU1NF
UlQodmVjdG9yVG9JbnNlcnRJbnRvKTsKKworICAgIGF1dG8gaXRlcmF0b3IgPSBmaW5kSW5WZWN0
b3IodW5uYW1lZFR5cGUsICp2ZWN0b3JUb0luc2VydEludG8pOworICAgIGlmIChpdGVyYXRvciA9
PSB2ZWN0b3JUb0luc2VydEludG8tPmVuZCgpKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gY3Jl
YXRlTmFtZU5vZGUodW5uYW1lZFR5cGUsIHBhcmVudCk7CisgICAgICAgIHsKKyAgICAgICAgICAg
IGF1dG8gYWRkUmVzdWx0ID0gbV91bm5hbWVkVHlwZU1hcHBpbmcuYWRkKCZ1bm5hbWVkVHlwZSwg
JnJlc3VsdCk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0
LmlzTmV3RW50cnkpOworICAgICAgICB9CisgICAgICAgIHZlY3RvclRvSW5zZXJ0SW50by0+YXBw
ZW5kKFdURk1vdmUocmVzdWx0KSk7CisgICAgICAgIHJldHVybiB2ZWN0b3JUb0luc2VydEludG8t
PnNpemUoKSAtIDE7CisgICAgfQorICAgIGF1dG8gYWRkUmVzdWx0ID0gbV91bm5hbWVkVHlwZU1h
cHBpbmcuYWRkKCZ1bm5hbWVkVHlwZSwgJippdGVyYXRvcik7CisgICAgQVNTRVJUX1VOVVNFRChh
ZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICByZXR1cm4gaXRlcmF0b3IgLSB2
ZWN0b3JUb0luc2VydEludG8tPmJlZ2luKCk7Cit9CisKK2NsYXNzIE1ldGFsVHlwZURlY2xhcmF0
aW9uV3JpdGVyIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgorICAgIE1ldGFsVHlwZURlY2xh
cmF0aW9uV3JpdGVyKHN0ZDo6ZnVuY3Rpb248U3RyaW5nKEFTVDo6TmFtZWRUeXBlJik+JiYgbWFu
Z2xlZE5hbWVGb3JOYW1lZFR5cGUsIHN0ZDo6ZnVuY3Rpb248U3RyaW5nKEFTVDo6VW5uYW1lZFR5
cGUmKT4mJiBtYW5nbGVkTmFtZUZvclVubmFtZWRUeXBlLCBzdGQ6OmZ1bmN0aW9uPFN0cmluZyhB
U1Q6OkVudW1lcmF0aW9uTWVtYmVyJik+JiYgbWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJl
cikKKyAgICAgICAgOiBtX21hbmdsZWROYW1lRm9yTmFtZWRUeXBlKFdURk1vdmUobWFuZ2xlZE5h
bWVGb3JOYW1lZFR5cGUpKQorICAgICAgICAsIG1fbWFuZ2xlZE5hbWVGb3JVbm5hbWVkVHlwZShX
VEZNb3ZlKG1hbmdsZWROYW1lRm9yVW5uYW1lZFR5cGUpKQorICAgICAgICAsIG1fbWFuZ2xlZE5h
bWVGb3JFbnVtZXJhdGlvbk1lbWJlcihXVEZNb3ZlKG1hbmdsZWROYW1lRm9yRW51bWVyYXRpb25N
ZW1iZXIpKQorICAgIHsKKyAgICB9CisKKyAgICBTdHJpbmcgdG9TdHJpbmcoKSB7IHJldHVybiBt
X3N0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsgfQorCitwcml2YXRlOgorICAgIHZvaWQgdmlzaXQo
QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKKyAgICB7
CisgICAgICAgIGF1dG8mIGJhc2VUeXBlID0gZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUoKS51
bmlmeU5vZGUoKTsKKyAgICAgICAgQVNTRVJUKGlzPEFTVDo6TmFtZWRUeXBlPihiYXNlVHlwZSkp
OworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoImVudW0gY2xhc3Mg
IiwgbV9tYW5nbGVkTmFtZUZvck5hbWVkVHlwZShlbnVtZXJhdGlvbkRlZmluaXRpb24pLCAiIDog
IiwgbV9tYW5nbGVkTmFtZUZvck5hbWVkVHlwZShkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4oYmFz
ZVR5cGUpKSwgIiB7XG4iKSk7CisgICAgICAgIGZvciAoYXV0byYgZW51bWVyYXRpb25NZW1iZXIg
OiBlbnVtZXJhdGlvbkRlZmluaXRpb24uZW51bWVyYXRpb25NZW1iZXJzKCkpCisgICAgICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICAiLCBtX21hbmdsZWROYW1l
Rm9yRW51bWVyYXRpb25NZW1iZXIoZW51bWVyYXRpb25NZW1iZXIpLCAiLFxuIikpOworICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9O1xuIik7CisgICAgfQorCisgICAgdm9pZCB2aXNp
dChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pCisgICAgewor
ICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInN0cnVjdCAiLCBtX21h
bmdsZWROYW1lRm9yTmFtZWRUeXBlKHN0cnVjdHVyZURlZmluaXRpb24pLCAiO1xuIikpOworICAg
IH0KKworICAgIHN0ZDo6ZnVuY3Rpb248U3RyaW5nKEFTVDo6TmFtZWRUeXBlJik+IG1fbWFuZ2xl
ZE5hbWVGb3JOYW1lZFR5cGU7CisgICAgc3RkOjpmdW5jdGlvbjxTdHJpbmcoQVNUOjpVbm5hbWVk
VHlwZSYpPiBtX21hbmdsZWROYW1lRm9yVW5uYW1lZFR5cGU7CisgICAgc3RkOjpmdW5jdGlvbjxT
dHJpbmcoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYpPiYmIG1fbWFuZ2xlZE5hbWVGb3JFbnVtZXJh
dGlvbk1lbWJlcjsKKyAgICBTdHJpbmdCdWlsZGVyIG1fc3RyaW5nQnVpbGRlcjsKK307CisKK1N0
cmluZyBUeXBlTmFtZXI6Om1ldGFsVHlwZURlY2xhcmF0aW9ucygpCit7CisgICAgTWV0YWxUeXBl
RGVjbGFyYXRpb25Xcml0ZXIgbWV0YWxUeXBlRGVjbGFyYXRpb25Xcml0ZXIoWyZdKEFTVDo6TmFt
ZWRUeXBlJiBuYW1lZFR5cGUpIC0+IFN0cmluZyB7CisgICAgICAgIHJldHVybiBtYW5nbGVkTmFt
ZUZvclR5cGUobmFtZWRUeXBlKTsKKyAgICB9LCBbJl0oQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1l
ZFR5cGUpIC0+IFN0cmluZyB7CisgICAgICAgIHJldHVybiBtYW5nbGVkTmFtZUZvclR5cGUodW5u
YW1lZFR5cGUpOworICAgIH0sIFsmXShBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJiBlbnVtZXJhdGlv
bk1lbWJlcikgLT4gU3RyaW5nIHsKKyAgICAgICAgcmV0dXJuIG1hbmdsZWROYW1lRm9yRW51bWVy
YXRpb25NZW1iZXIoZW51bWVyYXRpb25NZW1iZXIpOworICAgIH0pOworICAgIG1ldGFsVHlwZURl
Y2xhcmF0aW9uV3JpdGVyLlZpc2l0b3I6OnZpc2l0KG1fcHJvZ3JhbSk7CisgICAgcmV0dXJuIG1l
dGFsVHlwZURlY2xhcmF0aW9uV3JpdGVyLnRvU3RyaW5nKCk7Cit9CisKK3N0YXRpYyBTdHJpbmcg
dG9TdHJpbmcoQVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKQoreworICAgIHN3aXRjaCAo
YWRkcmVzc1NwYWNlKSB7CisgICAgY2FzZSBBU1Q6OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ6Cisg
ICAgICAgIHJldHVybiAiY29uc3RhbnQiX3N0cjsKKyAgICBjYXNlIEFTVDo6QWRkcmVzc1NwYWNl
OjpEZXZpY2U6CisgICAgICAgIHJldHVybiAiZGV2aWNlIl9zdHI7CisgICAgY2FzZSBBU1Q6OkFk
ZHJlc3NTcGFjZTo6VGhyZWFkZ3JvdXA6CisgICAgICAgIHJldHVybiAidGhyZWFkZ3JvdXAiX3N0
cjsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlQoYWRkcmVzc1NwYWNlID09IEFTVDo6QWRk
cmVzc1NwYWNlOjpUaHJlYWQpOworICAgICAgICByZXR1cm4gInRocmVhZCJfc3RyOworICAgIH0K
K30KKwordm9pZCBUeXBlTmFtZXI6OmVtaXRVbm5hbWVkVHlwZURlZmluaXRpb24oQmFzZVR5cGVO
YW1lTm9kZSYgYmFzZVR5cGVOYW1lTm9kZSwgSGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+JiBlbWl0
dGVkTmFtZWRUeXBlcywgSGFzaFNldDxCYXNlVHlwZU5hbWVOb2RlKj4mIGVtaXR0ZWRVbm5hbWVk
VHlwZXMsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCit7CisgICAgaWYgKGVtaXR0ZWRV
bm5hbWVkVHlwZXMuY29udGFpbnMoJmJhc2VUeXBlTmFtZU5vZGUpKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKGJhc2VUeXBlTmFtZU5vZGUucGFyZW50KCkpCisgICAgICAgIGVtaXRVbm5hbWVk
VHlwZURlZmluaXRpb24oKmJhc2VUeXBlTmFtZU5vZGUucGFyZW50KCksIGVtaXR0ZWROYW1lZFR5
cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVzLCBzdHJpbmdCdWlsZGVyKTsKKyAgICBpZiAoaXM8UmVm
ZXJlbmNlVHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKSkgeworICAgICAgICBhdXRvJiBu
YW1lZFR5cGUgPSBkb3duY2FzdDxSZWZlcmVuY2VUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5v
ZGUpLm5hbWVkVHlwZSgpOworICAgICAgICBlbWl0TmFtZWRUeXBlRGVmaW5pdGlvbihuYW1lZFR5
cGUsIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVzLCBzdHJpbmdCdWlsZGVy
KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygidHlwZWRlZiAiLCBt
YW5nbGVkTmFtZUZvclR5cGUobmFtZWRUeXBlKSwgJyAnLCBiYXNlVHlwZU5hbWVOb2RlLm1hbmds
ZWROYW1lKCksICI7XG4iKSk7CisgICAgfSBlbHNlIGlmIChpczxQb2ludGVyVHlwZU5hbWVOb2Rl
PihiYXNlVHlwZU5hbWVOb2RlKSkgeworICAgICAgICBhdXRvJiBwb2ludGVyVHlwZSA9IGRvd25j
YXN0PFBvaW50ZXJUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpOworICAgICAgICBBU1NF
UlQoYmFzZVR5cGVOYW1lTm9kZS5wYXJlbnQoKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcoInR5cGVkZWYgIiwgdG9TdHJpbmcocG9pbnRlclR5cGUuYWRkcmVzc1Nw
YWNlKCkpLCAiICIsIHBvaW50ZXJUeXBlLnBhcmVudCgpLT5tYW5nbGVkTmFtZSgpLCAiKiAiLCBw
b2ludGVyVHlwZS5tYW5nbGVkTmFtZSgpLCAiO1xuIikpOworICAgIH0gZWxzZSBpZiAoaXM8QXJy
YXlSZWZlcmVuY2VUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpKSB7CisgICAgICAgIGF1
dG8mIGFycmF5UmVmZXJlbmNlVHlwZSA9IGRvd25jYXN0PEFycmF5UmVmZXJlbmNlVHlwZU5hbWVO
b2RlPihiYXNlVHlwZU5hbWVOb2RlKTsKKyAgICAgICAgQVNTRVJUKGJhc2VUeXBlTmFtZU5vZGUu
cGFyZW50KCkpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJzdHJ1
Y3QgIiwgYXJyYXlSZWZlcmVuY2VUeXBlLm1hbmdsZWROYW1lKCksICJ7IFxuIikpOworICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgIiwgdG9TdHJpbmcoYXJyYXlS
ZWZlcmVuY2VUeXBlLmFkZHJlc3NTcGFjZSgpKSwgIiAiLCBhcnJheVJlZmVyZW5jZVR5cGUucGFy
ZW50KCktPm1hbmdsZWROYW1lKCksICIqIHBvaW50ZXI7XG4iKSk7CisgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCIgICAgdW5zaWduZWQgbGVuZ3RoO1xuIik7CisgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCJ9O1xuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGlzPEFy
cmF5VHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKSk7CisgICAgICAgIGF1dG8mIGFycmF5
VHlwZSA9IGRvd25jYXN0PEFycmF5VHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKTsKKyAg
ICAgICAgQVNTRVJUKGJhc2VUeXBlTmFtZU5vZGUucGFyZW50KCkpOworICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ0eXBlZGVmIEFycmF5PCIsIGFycmF5VHlwZS5wYXJl
bnQoKS0+bWFuZ2xlZE5hbWUoKSwgIiwgIiwgYXJyYXlUeXBlLm51bUVsZW1lbnRzKCksICI+ICIs
IGFycmF5VHlwZS5tYW5nbGVkTmFtZSgpLCAiO1xuIikpOworICAgIH0KKyAgICBlbWl0dGVkVW5u
YW1lZFR5cGVzLmFkZCgmYmFzZVR5cGVOYW1lTm9kZSk7Cit9CisKK3ZvaWQgVHlwZU5hbWVyOjpl
bWl0TmFtZWRUeXBlRGVmaW5pdGlvbihBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlLCBIYXNoU2V0
PEFTVDo6TmFtZWRUeXBlKj4mIGVtaXR0ZWROYW1lZFR5cGVzLCBIYXNoU2V0PEJhc2VUeXBlTmFt
ZU5vZGUqPiYgZW1pdHRlZFVubmFtZWRUeXBlcywgU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRl
cikKK3sKKyAgICBpZiAoZW1pdHRlZE5hbWVkVHlwZXMuY29udGFpbnMoJm5hbWVkVHlwZSkpCisg
ICAgICAgIHJldHVybjsKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9kZXBlbmRlbmN5R3JhcGguZmlu
ZCgmbmFtZWRUeXBlKTsKKyAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9kZXBlbmRlbmN5R3JhcGgu
ZW5kKCkpOworICAgIGZvciAoYXV0byYgYmFzZVR5cGVOYW1lTm9kZSA6IGl0ZXJhdG9yLT52YWx1
ZSkKKyAgICAgICAgZW1pdFVubmFtZWRUeXBlRGVmaW5pdGlvbihiYXNlVHlwZU5hbWVOb2RlLCBl
bWl0dGVkTmFtZWRUeXBlcywgZW1pdHRlZFVubmFtZWRUeXBlcywgc3RyaW5nQnVpbGRlcik7Cisg
ICAgaWYgKGlzPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPihuYW1lZFR5cGUpKSB7CisgICAg
ICAgIC8vIFdlIGFscmVhZHkgZW1pdHRlZCB0aGlzIGluIHRoZSB0eXBlIGRlY2xhcmF0aW9uIHNl
Y3Rpb24uIFRoZXJlJ3Mgbm90aGluZyB0byBkby4KKyAgICB9IGVsc2UgaWYgKGlzPEFTVDo6TmF0
aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKSB7CisgICAgICAgIC8vIE5hdGl2ZSB0eXBl
cyBhbHJlYWR5IGhhdmUgZGVmaW5pdGlvbnMuIFRoZXJlJ3Mgbm90aGluZyB0byBkby4KKyAgICB9
IGVsc2UgaWYgKGlzPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4obmFtZWRUeXBlKSkgeworICAg
ICAgICBhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uID0gZG93bmNhc3Q8QVNUOjpTdHJ1Y3R1cmVE
ZWZpbml0aW9uPihuYW1lZFR5cGUpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKCJzdHJ1Y3QgIiwgbWFuZ2xlZE5hbWVGb3JUeXBlKHN0cnVjdHVyZURlZmluaXRpb24p
LCAiIHtcbiIpKTsKKyAgICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVFbGVtZW50IDogc3RydWN0
dXJlRGVmaW5pdGlvbi5zdHJ1Y3R1cmVFbGVtZW50cygpKQorICAgICAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgICIsIG1hbmdsZWROYW1lRm9yVHlwZShzdHJ1Y3R1
cmVFbGVtZW50LnR5cGUoKSksICcgJywgbWFuZ2xlZE5hbWVGb3JTdHJ1Y3R1cmVFbGVtZW50KHN0
cnVjdHVyZUVsZW1lbnQpLCAiO1xuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgi
fTtcbiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChpczxBU1Q6OlR5cGVEZWZpbml0
aW9uPihuYW1lZFR5cGUpKTsKKyAgICAgICAgYXV0byYgdHlwZURlZmluaXRpb24gPSBkb3duY2Fz
dDxBU1Q6OlR5cGVEZWZpbml0aW9uPihuYW1lZFR5cGUpOworICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChtYWtlU3RyaW5nKCJ0eXBlZGVmICIsIG1hbmdsZWROYW1lRm9yVHlwZSh0eXBlRGVm
aW5pdGlvbi50eXBlKCkpLCAnICcsIG1hbmdsZWROYW1lRm9yVHlwZSh0eXBlRGVmaW5pdGlvbiks
ICI7XG4iKSk7CisgICAgfQorICAgIGVtaXR0ZWROYW1lZFR5cGVzLmFkZCgmbmFtZWRUeXBlKTsK
K30KKworU3RyaW5nIFR5cGVOYW1lcjo6bWV0YWxUeXBlRGVmaW5pdGlvbnMoKQoreworICAgIEhh
c2hTZXQ8QVNUOjpOYW1lZFR5cGUqPiBlbWl0dGVkTmFtZWRUeXBlczsKKyAgICBIYXNoU2V0PEJh
c2VUeXBlTmFtZU5vZGUqPiBlbWl0dGVkVW5uYW1lZFR5cGVzOworICAgIFN0cmluZ0J1aWxkZXIg
c3RyaW5nQnVpbGRlcjsKKyAgICBmb3IgKGF1dG8mIGtleVZhbHVlUGFpciA6IG1fZGVwZW5kZW5j
eUdyYXBoKQorICAgICAgICBlbWl0TmFtZWRUeXBlRGVmaW5pdGlvbigqa2V5VmFsdWVQYWlyLmtl
eSwgZW1pdHRlZE5hbWVkVHlwZXMsIGVtaXR0ZWRVbm5hbWVkVHlwZXMsIHN0cmluZ0J1aWxkZXIp
OworICAgIGZvciAoYXV0byYgYmFzZVR5cGVOYW1lTm9kZSA6IG1fdHJpZSkKKyAgICAgICAgZW1p
dFVubmFtZWRUeXBlRGVmaW5pdGlvbihiYXNlVHlwZU5hbWVOb2RlLCBlbWl0dGVkTmFtZWRUeXBl
cywgZW1pdHRlZFVubmFtZWRUeXBlcywgc3RyaW5nQnVpbGRlcik7CisgICAgcmV0dXJuIHN0cmlu
Z0J1aWxkZXIudG9TdHJpbmcoKTsKK30KKworU3RyaW5nIFR5cGVOYW1lcjo6bWFuZ2xlZE5hbWVG
b3JUeXBlKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKQoreworICAgIHJldHVybiBmaW5k
KHVubmFtZWRUeXBlLCBtX3RyaWUpLm1hbmdsZWROYW1lKCk7Cit9CisKK1N0cmluZyBUeXBlTmFt
ZXI6Om1hbmdsZWROYW1lRm9yVHlwZShBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlKQoreworICAg
IGlmIChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKSkKKyAgICAgICAg
cmV0dXJuIG1hbmdsZWROYW1lRm9yVHlwZShkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbj4obmFtZWRUeXBlKSk7CisgICAgYXV0byBpdGVyYXRvciA9IG1fbmFtZWRUeXBlTWFwcGlu
Zy5maW5kKCZuYW1lZFR5cGUpOworICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX25hbWVkVHlwZU1h
cHBpbmcuZW5kKCkpOworICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7Cit9CisKKworU3RyaW5n
IFR5cGVOYW1lcjo6bWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJlcihBU1Q6OkVudW1lcmF0
aW9uTWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJlcikKK3sKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9l
bnVtZXJhdGlvbk1lbWJlck1hcHBpbmcuZmluZCgmZW51bWVyYXRpb25NZW1iZXIpOworICAgIEFT
U0VSVChpdGVyYXRvciAhPSBtX2VudW1lcmF0aW9uTWVtYmVyTWFwcGluZy5lbmQoKSk7CisgICAg
cmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKK30KKworU3RyaW5nIFR5cGVOYW1lcjo6bWFuZ2xlZE5h
bWVGb3JTdHJ1Y3R1cmVFbGVtZW50KEFTVDo6U3RydWN0dXJlRWxlbWVudCYgc3RydWN0dXJlRWxl
bWVudCkKK3sKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9zdHJ1Y3R1cmVFbGVtZW50TWFwcGluZy5m
aW5kKCZzdHJ1Y3R1cmVFbGVtZW50KTsKKyAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9zdHJ1Y3R1
cmVFbGVtZW50TWFwcGluZy5lbmQoKSk7CisgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKK30K
KworU3RyaW5nIFR5cGVOYW1lcjo6bWV0YWxUeXBlcygpCit7CisgICAgVmlzaXRvcjo6dmlzaXQo
bV9wcm9ncmFtKTsKKyAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CisgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQobWV0YWxUeXBlRGVjbGFyYXRpb25zKCkpOworICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCdcbicpOworICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ldGFsVHlwZURlZmlu
aXRpb25zKCkpOworICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIE1ldGFsCisKK30gLy8gbmFtZXNwYWNlIFdITFNMCisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42M2Nk
NWZlMmJjNGFhNzE1YjZiZDNiMjcwYjM2Mzc0MzA2ZmYxOWQ2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIu
aApAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMVmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hM
U0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgRW51bWVyYXRpb25EZWZpbml0aW9uOwor
Y2xhc3MgRW51bWVyYXRpb25NZW1iZXI7CitjbGFzcyBOYW1lZFR5cGU7CitjbGFzcyBOYXRpdmVU
eXBlRGVjbGFyYXRpb247CitjbGFzcyBTdHJ1Y3R1cmVEZWZpbml0aW9uOworY2xhc3MgVHlwZURl
ZmluaXRpb247CitjbGFzcyBVbm5hbWVkVHlwZTsKKworfQorCitjbGFzcyBQcm9ncmFtOworCitu
YW1lc3BhY2UgTWV0YWwgeworCitjbGFzcyBCYXNlVHlwZU5hbWVOb2RlOworCitjbGFzcyBUeXBl
TmFtZXIgOiBwcml2YXRlIFZpc2l0b3IgeworcHVibGljOgorICAgIFR5cGVOYW1lcihQcm9ncmFt
Jik7CisgICAgdmlydHVhbCB+VHlwZU5hbWVyKCk7CisKKyAgICBTdHJpbmcgbWV0YWxUeXBlcygp
OworCisgICAgLy8gTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgY2FsbGluZyBtZXRhbFR5cGVzKCkuCisg
ICAgU3RyaW5nIG1hbmdsZWROYW1lRm9yVHlwZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYp
OworICAgIFN0cmluZyBtYW5nbGVkTmFtZUZvclR5cGUoQVNUOjpVbm5hbWVkVHlwZSYpOworICAg
IFN0cmluZyBtYW5nbGVkTmFtZUZvclR5cGUoQVNUOjpOYW1lZFR5cGUmKTsKKyAgICBTdHJpbmcg
bWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJlcihBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJik7
CisgICAgU3RyaW5nIG1hbmdsZWROYW1lRm9yU3RydWN0dXJlRWxlbWVudChBU1Q6OlN0cnVjdHVy
ZUVsZW1lbnQmKTsKKworICAgIFN0cmluZyBnZW5lcmF0ZU5leHRUeXBlTmFtZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gbWFrZVN0cmluZygidHlwZSIsIG1fdHlwZUNvdW50KyspOworICAgIH0K
KworICAgIFN0cmluZyBnZW5lcmF0ZU5leHRTdHJ1Y3R1cmVFbGVtZW50TmFtZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gbWFrZVN0cmluZygic3RydWN0dXJlRWxlbWVudCIsIG1fc3RydWN0dXJl
RWxlbWVudENvdW50KyspOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHZpc2l0KEFTVDo6
VW5uYW1lZFR5cGUmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25E
ZWZpbml0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNs
YXJhdGlvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0
aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVEZWZpbml0aW9uJikgb3Zl
cnJpZGU7CisKKyAgICBTdHJpbmcgZ2VuZXJhdGVOZXh0RW51bWVyYXRpb25NZW1iZXJOYW1lKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJlbnVtZXJhdGlvbk1lbWJlciIsIG1f
ZW51bWVyYXRpb25NZW1iZXJDb3VudCsrKTsKKyAgICB9CisKKyAgICB2b2lkIGVtaXROYW1lZFR5
cGVEZWZpbml0aW9uKEFTVDo6TmFtZWRUeXBlJiwgSGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+JiBl
bWl0dGVkTmFtZWRUeXBlcywgSGFzaFNldDxCYXNlVHlwZU5hbWVOb2RlKj4mIGVtaXR0ZWRVbm5h
bWVkVHlwZXMsIFN0cmluZ0J1aWxkZXImKTsKKyAgICB2b2lkIGVtaXRVbm5hbWVkVHlwZURlZmlu
aXRpb24oQmFzZVR5cGVOYW1lTm9kZSYsIEhhc2hTZXQ8QVNUOjpOYW1lZFR5cGUqPiYgZW1pdHRl
ZE5hbWVkVHlwZXMsIEhhc2hTZXQ8QmFzZVR5cGVOYW1lTm9kZSo+JiBlbWl0dGVkVW5uYW1lZFR5
cGVzLCBTdHJpbmdCdWlsZGVyJik7CisgICAgU3RyaW5nIG1ldGFsVHlwZURlY2xhcmF0aW9ucygp
OworICAgIFN0cmluZyBtZXRhbFR5cGVEZWZpbml0aW9ucygpOworCisgICAgVW5pcXVlUmVmPEJh
c2VUeXBlTmFtZU5vZGU+IGNyZWF0ZU5hbWVOb2RlKEFTVDo6VW5uYW1lZFR5cGUmLCBCYXNlVHlw
ZU5hbWVOb2RlKiBwYXJlbnQpOworICAgIHNpemVfdCBpbnNlcnQoQVNUOjpVbm5hbWVkVHlwZSYs
IFZlY3RvcjxVbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4+Jik7CisKKyAgICBQcm9ncmFtJiBt
X3Byb2dyYW07CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPj4gbV90cmll
OworICAgIEhhc2hNYXA8QVNUOjpVbm5hbWVkVHlwZSosIEJhc2VUeXBlTmFtZU5vZGUqPiBtX3Vu
bmFtZWRUeXBlTWFwcGluZzsKKyAgICBIYXNoTWFwPEFTVDo6TmFtZWRUeXBlKiwgU3RyaW5nPiBt
X25hbWVkVHlwZU1hcHBpbmc7CisgICAgSGFzaE1hcDxBU1Q6Ok5hbWVkVHlwZSosIFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEJhc2VUeXBlTmFtZU5vZGU+Pj4gbV9kZXBlbmRlbmN5R3Jh
cGg7CisgICAgSGFzaE1hcDxBU1Q6OkVudW1lcmF0aW9uTWVtYmVyKiwgU3RyaW5nPiBtX2VudW1l
cmF0aW9uTWVtYmVyTWFwcGluZzsKKyAgICBIYXNoTWFwPEFTVDo6U3RydWN0dXJlRWxlbWVudCos
IFN0cmluZz4gbV9zdHJ1Y3R1cmVFbGVtZW50TWFwcGluZzsKKyAgICB1bnNpZ25lZCBtX3R5cGVD
b3VudCB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2VudW1lcmF0aW9uTWVtYmVyQ291bnQgeyAwIH07
CisgICAgdW5zaWduZWQgbV9zdHJ1Y3R1cmVFbGVtZW50Q291bnQgeyAwIH07Cit9OworCit9IC8v
IG5hbWVzcGFjZSBNZXRhbAorCit9IC8vIG5hbWVzcGFjZSBXSExTTAorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKaW5kZXggNjBiMGVmZWVjYWMyNDYzZTUxYThlYzEy
M2RjY2Y3YTIwYTQ2ZjllNi4uMjk0ZGM5OGJlMzAzN2EwNzgxMzY4NTBkODVlMzI2NTBjZDQxNDZm
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xD
aGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TENoZWNrZXIuY3BwCkBAIC0yMjEsOCArMjIxLDggQEAgc3RhdGljIGJvb2wgY2hlY2tTZW1hbnRp
Y3MoVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgaW5wdXRJdGVtcywgVmVjdG9yPEVudHJ5UG9pbnQK
ICAgICAgICAgYXV0byBjaGVja1NlbWFudGljVHlwZXMgPSBbJl0oY29uc3QgVmVjdG9yPEVudHJ5
UG9pbnRJdGVtPiYgaXRlbXMpIC0+IGJvb2wgewogICAgICAgICAgICAgZm9yIChhdXRvJiBpdGVt
IDogaXRlbXMpIHsKICAgICAgICAgICAgICAgICBhdXRvIGFjY2VwdGFibGUgPSBXVEY6OnZpc2l0
KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IEFTVDo6QmFzZVNlbWFudGljJiBzZW1hbnRpYykg
LT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZW1hbnRpYy5pc0FjY2VwdGFi
bGVUeXBlKGl0ZW0udW5uYW1lZFR5cGUsIGludHJpbnNpY3MpOwotICAgICAgICAgICAgICAgIH0p
LCBpdGVtLnNlbWFudGljKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbWFudGljLmlz
QWNjZXB0YWJsZVR5cGUoKml0ZW0udW5uYW1lZFR5cGUsIGludHJpbnNpY3MpOworICAgICAgICAg
ICAgICAgIH0pLCAqaXRlbS5zZW1hbnRpYyk7CiAgICAgICAgICAgICAgICAgaWYgKCFhY2NlcHRh
YmxlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CkBA
IC0yMzksNyArMjM5LDcgQEAgc3RhdGljIGJvb2wgY2hlY2tTZW1hbnRpY3MoVmVjdG9yPEVudHJ5
UG9pbnRJdGVtPiYgaW5wdXRJdGVtcywgVmVjdG9yPEVudHJ5UG9pbnQKICAgICAgICAgICAgIGZv
ciAoYXV0byYgaXRlbSA6IGl0ZW1zKSB7CiAgICAgICAgICAgICAgICAgYXV0byBhY2NlcHRhYmxl
ID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShjb25zdCBBU1Q6OkJhc2VTZW1hbnRp
YyYgc2VtYW50aWMpIC0+IGJvb2wgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VtYW50
aWMuaXNBY2NlcHRhYmxlRm9yU2hhZGVySXRlbURpcmVjdGlvbihkaXJlY3Rpb24sIGVudHJ5UG9p
bnRUeXBlKTsKLSAgICAgICAgICAgICAgICB9KSwgaXRlbS5zZW1hbnRpYyk7CisgICAgICAgICAg
ICAgICAgfSksICppdGVtLnNlbWFudGljKTsKICAgICAgICAgICAgICAgICBpZiAoIWFjY2VwdGFi
bGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KQEAg
LTI1NiwxMSArMjU2LDExIEBAIHN0YXRpYyBib29sIGNoZWNrU2VtYW50aWNzKFZlY3RvcjxFbnRy
eVBvaW50SXRlbT4mIGlucHV0SXRlbXMsIFZlY3RvcjxFbnRyeVBvaW50CiAgICAgICAgICAgICBm
b3IgKGF1dG8mIGl0ZW0gOiBpdGVtcykgewogICAgICAgICAgICAgICAgIFBPRENoZWNrZXIgcG9k
Q2hlY2tlcjsKICAgICAgICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4oaXRlbS51
bm5hbWVkVHlwZSkpCi0gICAgICAgICAgICAgICAgICAgIHBvZENoZWNrZXIuY2hlY2tFcnJvckFu
ZFZpc2l0KGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGl0ZW0udW5uYW1lZFR5cGUpLmVsZW1l
bnRUeXBlKCkpOworICAgICAgICAgICAgICAgICAgICBwb2RDaGVja2VyLmNoZWNrRXJyb3JBbmRW
aXNpdChkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqaXRlbS51bm5hbWVkVHlwZSkuZWxlbWVu
dFR5cGUoKSk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU+KGl0ZW0udW5uYW1lZFR5cGUpKQotICAgICAgICAgICAgICAgICAgICBwb2RDaGVja2Vy
LmNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oaXRl
bS51bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIHBvZENo
ZWNrZXIuY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBl
PigqaXRlbS51bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKSk7CiAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoaXM8QVNUOjpBcnJheVR5cGU+KGl0ZW0udW5uYW1lZFR5cGUpKQotICAgICAgICAgICAg
ICAgICAgICBwb2RDaGVja2VyLmNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkFycmF5
VHlwZT4oaXRlbS51bm5hbWVkVHlwZSkudHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcG9k
Q2hlY2tlci5jaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KCppdGVt
LnVubmFtZWRUeXBlKS50eXBlKCkpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaWYgKHBvZENoZWNrZXIuZXJyb3Io
KSkKQEAgLTYxMiwxNiArNjEyLDEyIEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpFbnVtZXJh
dGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKICAgICBhdXRvKiBiYXNlVHlw
ZSA9IChbJl0oKSAtPiBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogewogICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUoKSk7CiAgICAgICAgIGF1
dG8mIGJhc2VUeXBlID0gZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUoKS51bmlmeU5vZGUoKTsK
LSAgICAgICAgaWYgKCFpczxBU1Q6OlVubmFtZWRUeXBlPihiYXNlVHlwZSkpCisgICAgICAgIGlm
ICghaXM8QVNUOjpOYW1lZFR5cGU+KGJhc2VUeXBlKSkKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICBhdXRvJiB1bm5hbWVkQmFzZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5
cGU+KGJhc2VUeXBlKTsKLSAgICAgICAgaWYgKCFpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFt
ZWRCYXNlKSkKKyAgICAgICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5
cGU+KGJhc2VUeXBlKTsKKyAgICAgICAgaWYgKCFpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
bj4obmFtZWRUeXBlKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBhdXRv
JiB0eXBlUmVmZXJlbmNlQmFzZSA9IGRvd25jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1l
ZEJhc2UpOwotICAgICAgICBBU1NFUlQodHlwZVJlZmVyZW5jZUJhc2UucmVzb2x2ZWRUeXBlKCkp
OwotICAgICAgICBpZiAoIWlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVy
ZW5jZUJhc2UucmVzb2x2ZWRUeXBlKCkpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZUJhc2UucmVzb2x2ZWRUeXBlKCkpOworICAg
ICAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5
cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKTsKICAgICAgICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFy
YXRpb24uaXNJbnQoKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1
cm4gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1z
LmNwcAppbmRleCBhMThlYWMzOGVhM2I2NzZhZTc4OWJlNTk1YTNkYWE4MTNjNmYyOWI2Li40NWE2
MmE2ZDI4OGUzYmU3ZDJmYzMzNTA4NTUxNzg3YzIwZDMxOTdkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJF
bnRyeVBvaW50SXRlbXMuY3BwCkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IHNldEVycm9yKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbV9l
bnRyeVBvaW50SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKG1fdHlwZVJlZmVyZW5jZXMubGFz
dCgpLmdldCgpLCAqbV9jdXJyZW50U2VtYW50aWMpKTsKKyAgICAgICAgbV9lbnRyeVBvaW50SXRl
bXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKG1fdHlwZVJlZmVyZW5jZXMubGFzdCgpLmdldCgpLCAq
bV9jdXJyZW50U2VtYW50aWMsIG1fcGF0aCkpOwogICAgIH0KIAogICAgIHZvaWQgdmlzaXQoQVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKQEAgLTg1LDcg
Kzg1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAg
ICAgbV9lbnRyeVBvaW50SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKG1fdHlwZVJlZmVyZW5j
ZXMubGFzdCgpLmdldCgpLCAqbV9jdXJyZW50U2VtYW50aWMpKTsKKyAgICAgICAgbV9lbnRyeVBv
aW50SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKG1fdHlwZVJlZmVyZW5jZXMubGFzdCgpLmdl
dCgpLCAqbV9jdXJyZW50U2VtYW50aWMsIG1fcGF0aCkpOwogICAgIH0KIAogICAgIHZvaWQgdmlz
aXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQpAQCAtOTgs
NyArOTgsOSBAQCBwdWJsaWM6CiAgICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJlRWxlbWVudCA6
IHN0cnVjdHVyZURlZmluaXRpb24uc3RydWN0dXJlRWxlbWVudHMoKSkgewogICAgICAgICAgICAg
aWYgKHN0cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMoKSkKICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRTZW1hbnRpYyA9ICYqc3RydWN0dXJlRWxlbWVudC5zZW1hbnRpYygpOworICAgICAgICAgICAg
bV9wYXRoLmFwcGVuZChzdHJ1Y3R1cmVFbGVtZW50Lm5hbWUoKSk7CiAgICAgICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoc3RydWN0dXJlRWxlbWVudCk7CisgICAgICAgICAgICBtX3BhdGgudGFr
ZUxhc3QoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTIyLDcgKzEyNCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
LSAgICAgICAgbV9lbnRyeVBvaW50SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKHBvaW50ZXJU
eXBlLCAqbV9jdXJyZW50U2VtYW50aWMpKTsKKyAgICAgICAgbV9lbnRyeVBvaW50SXRlbXMuYXBw
ZW5kKEVudHJ5UG9pbnRJdGVtKHBvaW50ZXJUeXBlLCAqbV9jdXJyZW50U2VtYW50aWMsIG1fcGF0
aCkpOwogICAgIH0KIAogICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGFy
cmF5UmVmZXJlbmNlVHlwZSkKQEAgLTEzMSw3ICsxMzMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBzZXRFcnJvcigpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1f
ZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbShhcnJheVJlZmVyZW5jZVR5cGUs
ICptX2N1cnJlbnRTZW1hbnRpYykpOworICAgICAgICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQo
RW50cnlQb2ludEl0ZW0oYXJyYXlSZWZlcmVuY2VUeXBlLCAqbV9jdXJyZW50U2VtYW50aWMsIG1f
cGF0aCkpOwogICAgIH0KIAogICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJheVR5cGUmIGFycmF5VHlw
ZSkKQEAgLTE0MCw3ICsxNDIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzZXRFcnJvcigpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1fZW50cnlQb2ludEl0ZW1z
LmFwcGVuZChFbnRyeVBvaW50SXRlbShhcnJheVR5cGUsICptX2N1cnJlbnRTZW1hbnRpYykpOwor
ICAgICAgICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQb2ludEl0ZW0oYXJyYXlUeXBl
LCAqbV9jdXJyZW50U2VtYW50aWMsIG1fcGF0aCkpOwogICAgIH0KIAogICAgIHZvaWQgdmlzaXQo
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQpAQCAtMTQ4LDEx
ICsxNTAsMTQgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoIW1fY3VycmVudFNlbWFudGljKTsK
ICAgICAgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uc2VtYW50aWMoKSkKICAgICAgICAgICAg
IG1fY3VycmVudFNlbWFudGljID0gJip2YXJpYWJsZURlY2xhcmF0aW9uLnNlbWFudGljKCk7Ci0g
ICAgICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSkKLSAgICAgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOworICAgICAgICBBU1NF
UlQodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOworICAgICAgICBtX3BhdGguYXBwZW5kKHZh
cmlhYmxlRGVjbGFyYXRpb24ubmFtZSgpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCp2
YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAgICAgIG1fcGF0aC50YWtlTGFzdCgpOwog
ICAgIH0KIAogcHJpdmF0ZToKKyAgICBWZWN0b3I8U3RyaW5nPiBtX3BhdGg7CiAgICAgY29uc3Qg
SW50cmluc2ljcyYgbV9pbnRyaW5zaWNzOwogICAgIEFTVDo6U2VtYW50aWMqIG1fY3VycmVudFNl
bWFudGljIHsgbnVsbHB0ciB9OwogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFT
VDo6VHlwZVJlZmVyZW5jZT4+IG1fdHlwZVJlZmVyZW5jZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBv
aW50SXRlbXMuaAppbmRleCAyMDM2N2JlM2UyOTUzYzZiZWQwZTFiN2ZmNGU3ODQ5NDQ4ZWJiZGZm
Li42NjY0ZTJlMzQyZWZkOTMxYmM2YjA0YjBlNzMyM2ZiOGI4ZjJlMGNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJ
dGVtcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0
aGVyRW50cnlQb2ludEl0ZW1zLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJXSExTTFNl
bWFudGljLmgiCiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTQ1LDE0ICs0NiwxNiBAQCBjbGFzcyBJbnRyaW5zaWNzOwogY2xhc3MgVW5uYW1l
ZFR5cGU7CiAKIHN0cnVjdCBFbnRyeVBvaW50SXRlbSB7Ci0gICAgRW50cnlQb2ludEl0ZW0oQVNU
OjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIEFTVDo6U2VtYW50aWMmIHNlbWFudGljKQotICAg
ICAgICA6IHVubmFtZWRUeXBlKHVubmFtZWRUeXBlKQotICAgICAgICAsIHNlbWFudGljKHNlbWFu
dGljKQorICAgIEVudHJ5UG9pbnRJdGVtKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBB
U1Q6OlNlbWFudGljJiBzZW1hbnRpYywgVmVjdG9yPFN0cmluZz4mIHBhdGgpCisgICAgICAgIDog
dW5uYW1lZFR5cGUoJnVubmFtZWRUeXBlKQorICAgICAgICAsIHNlbWFudGljKCZzZW1hbnRpYykK
KyAgICAgICAgLCBwYXRoKHBhdGgpCiAgICAgewogICAgIH0KIAotICAgIEFTVDo6VW5uYW1lZFR5
cGUmIHVubmFtZWRUeXBlOwotICAgIEFTVDo6U2VtYW50aWMmIHNlbWFudGljOworICAgIEFTVDo6
VW5uYW1lZFR5cGUqIHVubmFtZWRUeXBlOworICAgIEFTVDo6U2VtYW50aWMqIHNlbWFudGljOwor
ICAgIFZlY3RvcjxTdHJpbmc+IHBhdGg7CiB9OwogCiBzdHJ1Y3QgRW50cnlQb2ludEl0ZW1zIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKaW5kZXggYjYxMjQxOTJjZTk0NDUyZjZkMWZlNGJiZjMwOWZjZGFjNDFiNDcy
YS4uMDVjMjJiZTRiNGIxM2JlNWQ4M2JmYmFhMDI4NGE4ODhlNWUwYmY4NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKQEAgLTMyNiw2ICszMjYsMTEgQEAgTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9y
LmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMaXRlcmFsVHlwZUNoZWNrZXIuY3BwCiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEhpZ2hab21iaWVGaW5kZXIuY3BwCiBNb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTExvb3BDaGVja2VyLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0
YWwvV0hMU0xUeXBlTmFtZXIuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1
bmN0aW9uV3JpdGVyLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENv
ZGVHZW5lcmF0b3IuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1
bmN0aW9uV3JpdGVyLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBv
aW50U2NhZmZvbGRpbmcuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEZ1bmN0aW9uU3Rh
Z2VDaGVja2VyLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50
LmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDZmZWRjMjIyNGY4YjE1ZjI1ZDAxMzM4NzEwYTA2OTYxZjYzNTY0ZDguLjkxZDY4YzBhMzBj
ZjA5ODNjNThjYWQ5MjAwNTkzYThmZGZkN2M0MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY0NjAsNiArNjQ2MCwxNiBAQAog
CQkxQ0RENDVFNDBCQTlDODQ2MDBGOTAxNDcgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IERlYnVnUmVsZWFzZS54Y2NvbmZpZzsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNERDQ1RTUwQkE5Qzg0NjAwRjkwMTQ3IC8qIFdlYkNv
cmUueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gV2ViQ29yZS54Y2Nv
bmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNERDQ1RTYwQkE5Qzg0NjAwRjkw
MTQ3IC8qIEJhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gQmFz
ZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNFQ0IzQUYyMUYyQjk4
NDAwRjQ0NTQyIC8qIFdITFNMRnVuY3Rpb25Xcml0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V0hMU0xGdW5jdGlvbldyaXRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFD
RUNCM0IwMjFGMkI5ODUwMEY0NDU0MiAvKiBXSExTTFR5cGVOYW1lci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXSExTTFR5cGVOYW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0VDQjNC
MTIxRjJCOTg1MDBGNDQ1NDIgLyogV0hMU0xUeXBlTmFtZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV0hMU0xUeXBlTmFtZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0VD
QjNCMjIxRjJCOTg2MDBGNDQ1NDIgLyogV0hMU0xGdW5jdGlvbldyaXRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXSExTTEZ1bmN0aW9uV3JpdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFDRUNCM0I1MjFGNTBBQzcwMEY0NDU0MiAvKiBXSExTTE1ldGFsQ29kZUdlbmVyYXRvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTE1ldGFsQ29kZUdlbmVyYXRvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDRUNCM0I2MjFGNTBBQzcwMEY0NDU0MiAvKiBXSExTTE1l
dGFsQ29kZUdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTE1ldGFsQ29kZUdlbmVyYXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0VDQjNCODIxRjUwRDEwMDBGNDQ1
NDIgLyogV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
SExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMUNFQ0IzQjkyMUY1MEQxMDAwRjQ0NTQyIC8qIFdITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxQ0VDQjNCQTIxRjUxMUFBMDBGNDQ1NDIgLyogV0hMU0xFbnRy
eVBvaW50U2NhZmZvbGRpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xFbnRyeVBvaW50
U2NhZmZvbGRpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0VDQjNCQjIx
RjUxMUFBMDBGNDQ1NDIgLyogV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUNGQUUzMjIwQTZENkEzRjAwMzI1OTNEIC8qIGxpYm9iamMuZHlsaWIgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAiY29tcGlsZWQubWFj
aC1vLmR5bGliIjsgbmFtZSA9IGxpYm9iamMuZHlsaWI7IHBhdGggPSAvdXNyL2xpYi9saWJvYmpj
LmR5bGliOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQkxREM1NTNGRDIxMUJBMTJB
MDA0Qjc4MEUgLyogTmF2aWdhdG9yU2hhcmUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE5h
dmlnYXRvclNoYXJlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMURDNTUzRkYy
MTFCQTg0MTAwNEI3ODBFIC8qIFNoYXJlRGF0YS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
U2hhcmVEYXRhLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3MTUwLDYgKzE3
MTYwLDIzIEBACiAJCQl0YWJXaWR0aCA9IDQ7CiAJCQl1c2VzVGFicyA9IDA7CiAJCX07CisJCTFD
RUNCM0FEMjFGMkI5NjQwMEY0NDU0MiAvKiBNZXRhbCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3Vw
OworCQkJY2hpbGRyZW4gPSAoCisJCQkJMUNFQ0IzQkEyMUY1MTFBQTAwRjQ0NTQyIC8qIFdITFNM
RW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcCAqLywKKwkJCQkxQ0VDQjNCQjIxRjUxMUFBMDBGNDQ1
NDIgLyogV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuaCAqLywKKwkJCQkxQ0VDQjNBRjIxRjJC
OTg0MDBGNDQ1NDIgLyogV0hMU0xGdW5jdGlvbldyaXRlci5jcHAgKi8sCisJCQkJMUNFQ0IzQjIy
MUYyQjk4NjAwRjQ0NTQyIC8qIFdITFNMRnVuY3Rpb25Xcml0ZXIuaCAqLywKKwkJCQkxQ0VDQjNC
NTIxRjUwQUM3MDBGNDQ1NDIgLyogV0hMU0xNZXRhbENvZGVHZW5lcmF0b3IuY3BwICovLAorCQkJ
CTFDRUNCM0I2MjFGNTBBQzcwMEY0NDU0MiAvKiBXSExTTE1ldGFsQ29kZUdlbmVyYXRvci5oICov
LAorCQkJCTFDRUNCM0I4MjFGNTBEMTAwMEY0NDU0MiAvKiBXSExTTE5hdGl2ZUZ1bmN0aW9uV3Jp
dGVyLmNwcCAqLywKKwkJCQkxQ0VDQjNCOTIxRjUwRDEwMDBGNDQ1NDIgLyogV0hMU0xOYXRpdmVG
dW5jdGlvbldyaXRlci5oICovLAorCQkJCTFDRUNCM0IxMjFGMkI5ODUwMEY0NDU0MiAvKiBXSExT
TFR5cGVOYW1lci5jcHAgKi8sCisJCQkJMUNFQ0IzQjAyMUYyQjk4NTAwRjQ0NTQyIC8qIFdITFNM
VHlwZU5hbWVyLmggKi8sCisJCQkpOworCQkJcGF0aCA9IE1ldGFsOworCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKKwkJfTsKIAkJMjZCOTk5OEQxODAzQURGQTAwRDAxMTIxIC8qIGNzc2ppdCAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yNTU2Miw2ICsy
NTU4OSw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTFDQTBD
MkY2MjFFRURBRDIwMEExMTg2MCAvKiBBU1QgKi8sCisJCQkJMUNFQ0IzQUQyMUYyQjk2NDAwRjQ0
NTQyIC8qIE1ldGFsICovLAogCQkJCUMyMzRBOUIyMjFFOTJDMUYwMDNDOTg0RCAvKiBXSExTTENo
ZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcCAqLywKIAkJCQlDMjM0QTlBRTIxRTkyQzFBMDAzQzk4
NEQgLyogV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oICovLAogCQkJCTFDODQwQjlCMjFF
QzQwMDkwMEQwNTAwRCAvKiBXSExTTENoZWNrZXIuY3BwICovLAo=
</data>
<flag name="review"
          id="376390"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
      

    </bug>

</bugzilla>