<?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>201185</bug_id>
          
          <creation_ts>2019-08-27 09:50:18 -0700</creation_ts>
          <short_desc>[WHLSL] Inline typedef&apos;d types during Metal code generation to simplify generated code while also making it easier to read</short_desc>
          <delta_ts>2020-05-05 00:42:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>tsavell</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1565375</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-27 09:50:18 -0700</bug_when>
    <thetext>[WHLSL] Inline typedef&apos;d types during Metal code generation to simplify generated code while also making it easier to read</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565498</commentid>
    <comment_count>1</comment_count>
      <attachid>377373</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-27 13:17:24 -0700</bug_when>
    <thetext>Created attachment 377373
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565633</commentid>
    <comment_count>2</comment_count>
      <attachid>377420</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-27 20:16:10 -0700</bug_when>
    <thetext>Created attachment 377420
before.txt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565635</commentid>
    <comment_count>3</comment_count>
      <attachid>377421</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-27 20:17:38 -0700</bug_when>
    <thetext>Created attachment 377421
after.txt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565636</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-27 20:24:48 -0700</bug_when>
    <thetext>With this change, the generated metal for compute_boids goes from 913 lines to 751 lines and becomes quite a bit more straightforward to read.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565660</commentid>
    <comment_count>5</comment_count>
      <attachid>377373</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-27 23:57:57 -0700</bug_when>
    <thetext>Comment on attachment 377373
Patch

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

This is very nice. Does it have an effect on performance? If so, maybe we should cache the resulting strings?

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:-320
&gt; -    auto iterator = m_unnamedTypeMapping.find(UnnamedTypeKey { unnamedType });

Maybe it’s worth keeping this so we don’t repeatedly make the same strings and just mapping it to MangledOrNativeTypeName now?

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:276
&gt; +        auto&amp; parent = typeReference.resolvedType();

This is a weird name for this variable. I’m not sure it needs to exist. I’d just omit giving this expression a variable

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:281
&gt; +        auto&amp; parent = pointerType.elementType();

Ditto

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:287
&gt; +        auto&amp; parent = arrayType.type();

Ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565804</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-28 11:10:27 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #5)
&gt; Comment on attachment 377373 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=377373&amp;action=review
&gt; 
&gt; This is very nice. Does it have an effect on performance?
On it&apos;s own, its about a 20% speedup in metal code generation time.

&gt; If so, maybe we should cache the resulting strings?

I added the caching and it looks like it is another 5% speedup, so I kept it.

&gt; 
&gt; &gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:-320
&gt; &gt; -    auto iterator = m_unnamedTypeMapping.find(UnnamedTypeKey { unnamedType });
&gt; 
&gt; Maybe it’s worth keeping this so we don’t repeatedly make the same strings
&gt; and just mapping it to MangledOrNativeTypeName now?

I added a separate cache and lazily cached the generated string for AST::ArrayType and AST::Pointer. In a followup, we should also look at caching the NativeTypeDeclaration names.

&gt; 
&gt; &gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:276
&gt; &gt; +        auto&amp; parent = typeReference.resolvedType();
&gt; 
&gt; This is a weird name for this variable. I’m not sure it needs to exist. I’d
&gt; just omit giving this expression a variable

Yeah, these made more sense in their previous context. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565805</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-28 11:11:14 -0700</bug_when>
    <thetext>Committed r249209: &lt;https://trac.webkit.org/changeset/249209&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565806</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-28 11:12:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/54799097&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565816</commentid>
    <comment_count>9</comment_count>
      <attachid>377373</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-08-28 12:33:31 -0700</bug_when>
    <thetext>Comment on attachment 377373
Patch

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

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:314
&gt; +        auto iterator = m_namedTypeMapping.find(&amp;namedType);
&gt; +        ASSERT(iterator != m_namedTypeMapping.end());
&gt; +        return iterator-&gt;value;

Not sure if others agree but I prefer to write cases like this differently, with double hash table lookup in debug builds:

    ASSERT(m_namedTypeMapping.contains(&amp;namedType));
    return m_namedTypeMapping.get(&amp;namedType);

It also seems like HashMap could offer a variation of get that asserts containership. This idiom seems to come up a lot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565823</commentid>
    <comment_count>10</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2019-08-28 12:40:21 -0700</bug_when>
    <thetext>It looks like the changes in https://trac.webkit.org/changeset/249209/webkit

broke 19 webgpu/ tests on Mojave wk2 

build:
https://build.webkit.org/builders/Apple%20Mojave%20Release%20WK2%20%28Tests%29/builds/6225

results:
https://build.webkit.org/results/Apple%20Mojave%20Release%20WK2%20(Tests)/r249209%20(6225)/results.html

Does this look like an easy fix? otherwise we will need to roll it out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565824</commentid>
    <comment_count>11</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-28 12:45:34 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #9)
&gt; Comment on attachment 377373 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=377373&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:314
&gt; &gt; +        auto iterator = m_namedTypeMapping.find(&amp;namedType);
&gt; &gt; +        ASSERT(iterator != m_namedTypeMapping.end());
&gt; &gt; +        return iterator-&gt;value;
&gt; 
&gt; Not sure if others agree but I prefer to write cases like this differently,
&gt; with double hash table lookup in debug builds:
&gt; 
&gt;     ASSERT(m_namedTypeMapping.contains(&amp;namedType));
&gt;     return m_namedTypeMapping.get(&amp;namedType);
&gt; 
&gt; It also seems like HashMap could offer a variation of get that asserts
&gt; containership. This idiom seems to come up a lot.

I also prefer this idiom. Not sure why I didn&apos;t change it as I was moving code around. Do you have thoughts on a potential name for the new HashMap function. I can&apos;t think of anything great. My best thoughts are renaming the existing get() to something like tryGet()/peek()/maybeGet() and then use get() to be the asserting get().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565825</commentid>
    <comment_count>12</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-28 12:46:16 -0700</bug_when>
    <thetext>(In reply to Truitt Savell from comment #10)
&gt; It looks like the changes in https://trac.webkit.org/changeset/249209/webkit
&gt; 
&gt; broke 19 webgpu/ tests on Mojave wk2 
&gt; 
&gt; build:
&gt; https://build.webkit.org/builders/
&gt; Apple%20Mojave%20Release%20WK2%20%28Tests%29/builds/6225
&gt; 
&gt; results:
&gt; https://build.webkit.org/results/Apple%20Mojave%20Release%20WK2%20(Tests)/
&gt; r249209%20(6225)/results.html
&gt; 
&gt; Does this look like an easy fix? otherwise we will need to roll it out.

Please roll it out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565828</commentid>
    <comment_count>13</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2019-08-28 12:51:11 -0700</bug_when>
    <thetext>Reverted r249209 for reason:

Broke 19 webgpu/ tests

Committed r249215: &lt;https://trac.webkit.org/changeset/249215&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565840</commentid>
    <comment_count>14</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-28 13:06:23 -0700</bug_when>
    <thetext>(In reply to Truitt Savell from comment #13)
&gt; Reverted r249209 for reason:
&gt; 
&gt; Broke 19 webgpu/ tests
&gt; 
&gt; Committed r249215: &lt;https://trac.webkit.org/changeset/249215&gt;

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565846</commentid>
    <comment_count>15</comment_count>
      <attachid>377373</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-08-28 13:30:12 -0700</bug_when>
    <thetext>Comment on attachment 377373
Patch

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

&gt;&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:314
&gt;&gt;&gt; +        return iterator-&gt;value;
&gt;&gt; 
&gt;&gt; Not sure if others agree but I prefer to write cases like this differently, with double hash table lookup in debug builds:
&gt;&gt; 
&gt;&gt;     ASSERT(m_namedTypeMapping.contains(&amp;namedType));
&gt;&gt;     return m_namedTypeMapping.get(&amp;namedType);
&gt;&gt; 
&gt;&gt; It also seems like HashMap could offer a variation of get that asserts containership. This idiom seems to come up a lot.
&gt; 
&gt; I also prefer this idiom. Not sure why I didn&apos;t change it as I was moving code around. Do you have thoughts on a potential name for the new HashMap function. I can&apos;t think of anything great. My best thoughts are renaming the existing get() to something like tryGet()/peek()/maybeGet() and then use get() to be the asserting get().

I like the tryGet/get combo, but I’m also wonder what state of the art is for this is in collection class design. Does this exist in Swift collections or is just this unpacking an optional there? Does anyone else do this particularly well? One problem is that if we were making tryGet today we’d probably use an optional instead of an empty value, which of course would be less efficient and elegant for pointers and pointer-like things. There’s even a possibility that we might want three of these: one that uses optional and two that use the empty value, one that asserts and one that doesn’t. Or even four with one that does a runtime check and aborts. I do worry about overcomplicating things, but I would love to have a convenient get that asserts success for day to day programming. Might even want versions of the get/find family that guard the empty and deleted values so the callers don’t need to do that. It’s a performance optimization to require callers to check this, but makes the API harder to use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649067</commentid>
    <comment_count>16</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-05-05 00:42:40 -0700</bug_when>
    <thetext>WHLSL is no longer relevant.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377373</attachid>
            <date>2019-08-27 13:17:24 -0700</date>
            <delta_ts>2019-08-27 23:57:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201185-20190827131724.patch</filename>
            <type>text/plain</type>
            <size>15455</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTE2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDE5LTA4LTI3ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV0hMU0xdIElubGluZSB0eXBlZGVm
J2QgdHlwZXMgZHVyaW5nIE1ldGFsIGNvZGUgZ2VuZXJhdGlvbiB0byBzaW1wbGlmeSBnZW5lcmF0
ZWQgY29kZSB3aGlsZSBhbHNvIG1ha2luZyBpdCBlYXNpZXIgdG8gcmVhZAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxMTg1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGN1cnJlbnQgTWV0YWwgY29k
ZSBnZW5lcmF0aW9uIGdlbmVyYXRlcyBtYW55IHVubmVjZXNzYXJ5IHR5cGVkZWZzIGR1cmluZyBU
eXBlTmFtZXI6OmVtaXRNZXRhbFR5cGVEZWZpbml0aW9ucworICAgICAgICBzdWNoIGFzICd0eXBl
ZGVmIGZsb2F0MiB0eXBlMTk7JyB0aGF0IGNhbiBiZSByZW1vdmVkIGJ5IGp1c3QgdXNpbmcgcmVz
b2x2ZWQgdHlwZSB3aGVyZWV2ZXIgdGhlIHR5cGVkZWYgd291bGQgaGF2ZQorICAgICAgICBiZWVu
IHVzZWQuIFRoZSBvbmx5IHR5cGVzIHRoYXQgYWN0dWFsbHkgbmVlZCB0byBiZSBwcmVkZWZpbmVk
IGFyZSB0aGUgdHlwZXMgdGhhdCBkZWNsYXJlIGEgbmV3IHN0cnVjdCBvciBlbnVtLCB3aGljaCAK
KyAgICAgICAgbWVhbnMgd2UgY2FuIHN0b3AgZW1pdHRpbmcgZm9yIEFTVDo6VHlwZVJlZmVyZW5j
ZSwgQVNUOjpQb2ludGVyLCBBU1Q6OkFycmF5LCBhbmQgQVNUOjpUeXBlRGVmaW5pdGlvbi4gSW5z
dGVhZCwgdGhlCisgICAgICAgIHJlbGV2ZW50IG1hbmdsZWROYW1lRm9yVHlwZSBjb25zdHJ1Y3Rz
IHRoZSBjb21wdXRlZCBuYW1lIG9uIHRoZSBmbHkuIAorCisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQpOgorICAgICAg
ICBTd2l0Y2ggdG8gdXNpbmcgYXV0byByYXRoZXIgdGhhbiBNYW5nbGVkKk5hbWUgd2hlbiBpdCBp
cyBvYnZpb3VzIGFuZCB0aGUgYWN0dWFsIHJldHVybiB0eXBlCisgICAgICAgIG1heSBuZWVkIHRv
IGJlY29tZSBtb3JlIGNvbXBsaWNhdGVkIChlLmcuIE1hbmdsZWRPck5hdGl2ZVR5cGVOYW1lKS4K
KworICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmg6
CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6OnZpc2l0KToKKyAg
ICAgICAgVGhlcmUgaXMgbm8gbmVlZCB0byBnZW5lcmF0ZSB0eXBlbmFtZXMgZm9yIEFTVDo6VHlw
ZURlZmluaXRpb25zIGlmIHRoZXkgYXJlIG5ldmVyIHVzZWQuCisKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpNZXRhbDo6VHlwZU5hbWVyOjpnZW5lcmF0ZVVuaXF1ZWRUeXBlTmFtZSk6CisgICAg
ICAgIFRoZSBvbmx5IFVubmFtZWRUeXBlIHRoYXQgbmVlZHMgYSBnZW5lcmF0ZWQgdHlwZW5hbWUg
bm93IGlzIEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlLCB3aGljaCBlbWl0cyBhIHN0cnVjdCBpbnRl
cmZhY2UuCisKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6VHlwZU5hbWVyOjplbWl0
VW5uYW1lZFR5cGVEZWZpbml0aW9uKToKKyAgICAgICAgU3RvcCBnZW5lcmF0aW5nIHR5cGUgZGVm
aW5pdGlvbnMgZm9yIEFTVDo6VHlwZVJlZmVyZW5jZSwgQVNUOjpQb2ludGVyLCBBU1Q6OkFycmF5
LgorCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6ZW1pdE5hbWVk
VHlwZURlZmluaXRpb24pOgorICAgICAgICBTdG9wIGdlbmVyYXRpbmcgdHlwZSBkZWZpbml0aW9u
cyBmb3IgQVNUOjpUeXBlRGVmaW5pdGlvbi4KKworICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1l
dGFsOjpUeXBlTmFtZXI6OmVtaXRNZXRhbFR5cGVEZWZpbml0aW9ucyk6CisgICAgICAgIFVwZGF0
ZSBmb3IgcmVuYW1lIGZyb20gbV91bm5hbWVkVHlwZU1hcHBpbmcgdG8gbV9hcnJheVJlZmVyZW5j
ZVR5cGVNYXBwaW5nLgorCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1l
cjo6bWFuZ2xlZE5hbWVGb3JUeXBlKToKKyAgICAgICAgTG9vayBpbnRvIHRoZSB0eXBlcyBhbmQg
Z2VuZXJhdGUgYSBjb25jcmV0ZSB0eXBlIG5hbWUgd2hlbiBuZWNlc3NhcnkuIAorCiAyMDE5LTA4
LTI3ICBDYXJsb3MgQWxiZXJ0byBMb3BleiBQZXJleiAgPGNsb3BlekBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIERyYXdpbmcgYW4gYW5pbWF0ZWQgaW1hZ2UgdG8gYSBjYW52YXMgdmlhIGRyYXdJbWFn
ZSBzaG91bGQgZHJhdyB0aGUgZmlyc3QgZnJhbWUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rp
b25Xcml0ZXIuY3BwCShyZXZpc2lvbiAyNDkxNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTI1LDEyICs1MjUsMTIgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZp
c2l0KEFTVAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6R2xvYmFs
VmFyaWFibGVSZWZlcmVuY2UmIGdsb2JhbFZhcmlhYmxlUmVmZXJlbmNlKQogewogICAgIGF1dG8g
dmFsdWVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7Ci0gICAgTWFuZ2xlZFR5cGVO
YW1lIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShnbG9i
YWxWYXJpYWJsZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0byBtYW5nbGVkVHlw
ZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZ2xvYmFsVmFyaWFibGVSZWZl
cmVuY2UucmVzb2x2ZWRUeXBlKCkpOwogCiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGdsb2JhbFZh
cmlhYmxlUmVmZXJlbmNlLmJhc2UoKSk7CiAgICAgTWFuZ2xlZFZhcmlhYmxlTmFtZSBzdHJ1Y3RW
YXJpYWJsZSA9IHRha2VMYXN0VmFsdWUoKTsKIAotICAgIE1hbmdsZWRTdHJ1Y3R1cmVFbGVtZW50
TmFtZSBtYW5nbGVkRmllbGROYW1lID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JTdHJ1Y3R1
cmVFbGVtZW50KGdsb2JhbFZhcmlhYmxlUmVmZXJlbmNlLnN0cnVjdEZpZWxkKCkpOworICAgIGF1
dG8gbWFuZ2xlZEZpZWxkTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yU3RydWN0dXJl
RWxlbWVudChnbG9iYWxWYXJpYWJsZVJlZmVyZW5jZS5zdHJ1Y3RGaWVsZCgpKTsKIAogICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQoCiAgICAgICAgIG1faW5kZW50LCBtYW5nbGVkVHlwZU5hbWUs
ICcgJywgdmFsdWVOYW1lLCAiID0gIiwgc3RydWN0VmFyaWFibGUsICItPiIsIG1hbmdsZWRGaWVs
ZE5hbWUsICI7XG4iKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAJKHJldmlzaW9uIDI0
OTE2NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
VHlwZU5hbWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDEwICsxMTgsNiBAQCB2b2lkIFR5
cGVOYW1lcjo6dmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpCiAKIHZvaWQgVHlwZU5hbWVyOjp2aXNp
dChBU1Q6OlR5cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbikKIHsKLSAgICB7Ci0gICAgICAg
IGF1dG8gYWRkUmVzdWx0ID0gbV9uYW1lZFR5cGVNYXBwaW5nLmFkZCgmdHlwZURlZmluaXRpb24s
IGdlbmVyYXRlTmV4dFR5cGVOYW1lKCkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3Vs
dCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwotICAgIH0KICAgICBWaXNpdG9yOjp2aXNpdCh0eXBl
RGVmaW5pdGlvbik7CiAgICAgewogICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZGVwZW5kZW5j
eUdyYXBoLmFkZCgmdHlwZURlZmluaXRpb24sIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PEFTVDo6VW5uYW1lZFR5cGU+PiB7IHR5cGVEZWZpbml0aW9uLnR5cGUoKSB9KTsKQEAgLTE0Niwz
MSArMTQyLDEzIEBAIFN0cmluZyBUeXBlTmFtZXI6Om1hbmdsZWROYW1lRm9yVHlwZShBU1QKICAg
ICByZXR1cm4gd3JpdGVOYXRpdmVUeXBlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7CiB9CiAKLXN0
YXRpYyBBU1Q6OlVubmFtZWRUeXBlKiBwYXJlbnQoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5
cGUpCi17Ci0gICAgc3dpdGNoICh1bm5hbWVkVHlwZS5raW5kKCkpIHsKLSAgICBjYXNlIEFTVDo6
VW5uYW1lZFR5cGU6OktpbmQ6OlR5cGVSZWZlcmVuY2U6Ci0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIGNhc2UgQVNUOjpVbm5hbWVkVHlwZTo6S2luZDo6UG9pbnRlcjoKLSAgICAgICAgcmV0
dXJuICZkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUo
KTsKLSAgICBjYXNlIEFTVDo6VW5uYW1lZFR5cGU6OktpbmQ6OkFycmF5UmVmZXJlbmNlOgotICAg
ICAgICByZXR1cm4gJmRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlw
ZSkuZWxlbWVudFR5cGUoKTsKLSAgICBjYXNlIEFTVDo6VW5uYW1lZFR5cGU6OktpbmQ6OkFycmF5
OgotICAgICAgICByZXR1cm4gJmRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSku
dHlwZSgpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgfQotfQotCiB2b2lkIFR5cGVOYW1lcjo6Z2VuZXJhdGVVbmlxdWVkVHlwZU5hbWUo
QVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpCiB7Ci0gICAgYXV0byogcGFyZW50VW5uYW1l
ZFR5cGUgPSBwYXJlbnQodW5uYW1lZFR5cGUpOwotICAgIGlmIChwYXJlbnRVbm5hbWVkVHlwZSkK
LSAgICAgICAgZ2VuZXJhdGVVbmlxdWVkVHlwZU5hbWUoKnBhcmVudFVubmFtZWRUeXBlKTsKLQot
ICAgIG1fdW5uYW1lZFR5cGVNYXBwaW5nLmVuc3VyZShVbm5hbWVkVHlwZUtleSB7IHVubmFtZWRU
eXBlIH0sIFsmXSB7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0ZU5leHRUeXBlTmFtZSgpOwotICAg
IH0pOworICAgIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKSB7
CisgICAgICAgIG1fYXJyYXlSZWZlcmVuY2VUeXBlTWFwcGluZy5lbnN1cmUoVW5uYW1lZFR5cGVL
ZXkgeyB1bm5hbWVkVHlwZSB9LCBbJl0geworICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlTmV4
dFR5cGVOYW1lKCk7CisgICAgICAgIH0pOworICAgIH0KIH0KIAogY2xhc3MgTWV0YWxUeXBlRGVj
bGFyYXRpb25Xcml0ZXIgZmluYWwgOiBwdWJsaWMgVmlzaXRvciB7CkBAIC0yMDAsMzIgKzE3OCwx
OSBAQCB2b2lkIFR5cGVOYW1lcjo6ZW1pdE1ldGFsVHlwZURlY2xhcmF0aW9uCiAgICAgbWV0YWxU
eXBlRGVjbGFyYXRpb25Xcml0ZXIuVmlzaXRvcjo6dmlzaXQobV9wcm9ncmFtKTsKIH0KIAotdm9p
ZCBUeXBlTmFtZXI6OmVtaXRVbm5hbWVkVHlwZURlZmluaXRpb24oU3RyaW5nQnVpbGRlciYgc3Ry
aW5nQnVpbGRlciwgQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIE1hbmdsZWRUeXBlTmFt
ZSBtYW5nbGVkTmFtZSwgSGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+JiBlbWl0dGVkTmFtZWRUeXBl
cywgSGFzaFNldDxVbm5hbWVkVHlwZUtleT4mIGVtaXR0ZWRVbm5hbWVkVHlwZXMpCit2b2lkIFR5
cGVOYW1lcjo6ZW1pdFVubmFtZWRUeXBlRGVmaW5pdGlvbihTdHJpbmdCdWlsZGVyJiBzdHJpbmdC
dWlsZGVyLCBBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgTWFuZ2xlZE9yTmF0aXZlVHlw
ZU5hbWUgbWFuZ2xlZE5hbWUsIEhhc2hTZXQ8QVNUOjpOYW1lZFR5cGUqPiYgZW1pdHRlZE5hbWVk
VHlwZXMsIEhhc2hTZXQ8VW5uYW1lZFR5cGVLZXk+JiBlbWl0dGVkVW5uYW1lZFR5cGVzKQogewog
ICAgIGlmIChlbWl0dGVkVW5uYW1lZFR5cGVzLmNvbnRhaW5zKFVubmFtZWRUeXBlS2V5IHsgdW5u
YW1lZFR5cGUgfSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHN3aXRjaCAodW5uYW1lZFR5cGUu
a2luZCgpKSB7CiAgICAgY2FzZSBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpUeXBlUmVmZXJlbmNl
OiB7Ci0gICAgICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBkb3duY2FzdDxBU1Q6OlR5cGVSZWZl
cmVuY2U+KHVubmFtZWRUeXBlKTsKLQotICAgICAgICBhdXRvJiBwYXJlbnQgPSB0eXBlUmVmZXJl
bmNlLnJlc29sdmVkVHlwZSgpOwotICAgICAgICBhdXRvIHBhcmVudE1hbmdsZWROYW1lID0gbWFu
Z2xlZE5hbWVGb3JUeXBlKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOwotICAgICAgICBh
dXRvIGl0ZXJhdG9yID0gbV9kZXBlbmRlbmN5R3JhcGguZmluZCgmcGFyZW50KTsKLSAgICAgICAg
QVNTRVJUKGl0ZXJhdG9yICE9IG1fZGVwZW5kZW5jeUdyYXBoLmVuZCgpKTsKLSAgICAgICAgZW1p
dE5hbWVkVHlwZURlZmluaXRpb24oc3RyaW5nQnVpbGRlciwgcGFyZW50LCBpdGVyYXRvci0+dmFs
dWUsIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVzKTsKLQotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgidHlwZWRlZiAiLCBwYXJlbnRNYW5nbGVkTmFtZSwgJyAnLCBt
YW5nbGVkTmFtZSwgIjtcbiIpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBBU1Q6
OlVubmFtZWRUeXBlOjpLaW5kOjpQb2ludGVyOiB7Ci0gICAgICAgIGF1dG8mIHBvaW50ZXJUeXBl
ID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpOwotCi0gICAgICAgIGF1
dG8mIHBhcmVudCA9IHBvaW50ZXJUeXBlLmVsZW1lbnRUeXBlKCk7Ci0gICAgICAgIGF1dG8gcGFy
ZW50TWFuZ2xlZE5hbWUgPSBtYW5nbGVkTmFtZUZvclR5cGUocGFyZW50KTsKLSAgICAgICAgZW1p
dFVubmFtZWRUeXBlRGVmaW5pdGlvbihzdHJpbmdCdWlsZGVyLCBwYXJlbnQsIHBhcmVudE1hbmds
ZWROYW1lLCBlbWl0dGVkTmFtZWRUeXBlcywgZW1pdHRlZFVubmFtZWRUeXBlcyk7Ci0KLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoInR5cGVkZWYgIiwgdG9TdHJpbmcocG9pbnRlclR5cGUu
YWRkcmVzc1NwYWNlKCkpLCAnICcsIHBhcmVudE1hbmdsZWROYW1lLCAiKiAiLCBtYW5nbGVkTmFt
ZSwgIjtcbiIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBU1Q6OlVubmFtZWRU
eXBlOjpLaW5kOjpBcnJheTogewogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBBU1Q6
OlVubmFtZWRUeXBlOjpLaW5kOjpBcnJheVJlZmVyZW5jZTogewpAQCAtMjQzLDE2ICsyMDgsNiBA
QCB2b2lkIFR5cGVOYW1lcjo6ZW1pdFVubmFtZWRUeXBlRGVmaW5pdGlvCiAgICAgICAgICk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEFTVDo6VW5uYW1lZFR5cGU6OktpbmQ6OkFy
cmF5OiB7Ci0gICAgICAgIGF1dG8mIGFycmF5VHlwZSA9IGRvd25jYXN0PEFTVDo6QXJyYXlUeXBl
Pih1bm5hbWVkVHlwZSk7Ci0KLSAgICAgICAgYXV0byYgcGFyZW50ID0gYXJyYXlUeXBlLnR5cGUo
KTsKLSAgICAgICAgYXV0byBwYXJlbnRNYW5nbGVkTmFtZSA9IG1hbmdsZWROYW1lRm9yVHlwZShw
YXJlbnQpOwotICAgICAgICBlbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKHN0cmluZ0J1aWxkZXIs
IHBhcmVudCwgcGFyZW50TWFuZ2xlZE5hbWUsIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5u
YW1lZFR5cGVzKTsKLQotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgidHlwZWRlZiBhcnJh
eTwiLCBwYXJlbnRNYW5nbGVkTmFtZSwgIiwgIiwgYXJyYXlUeXBlLm51bUVsZW1lbnRzKCksICI+
ICIsIG1hbmdsZWROYW1lLCAiO1xuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KICAgICBkZWZh
dWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTI2
OSw2ICsyMjQsMTQgQEAgdm9pZCBUeXBlTmFtZXI6OmVtaXROYW1lZFR5cGVEZWZpbml0aW9uKAog
ICAgICAgICBlbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKHN0cmluZ0J1aWxkZXIsIHVubmFtZVR5
cGUsIG1hbmdsZWROYW1lRm9yVHlwZSh1bm5hbWVUeXBlKSwgZW1pdHRlZE5hbWVkVHlwZXMsIGVt
aXR0ZWRVbm5hbWVkVHlwZXMpOwogCiAgICAgc3dpdGNoIChuYW1lZFR5cGUua2luZCgpKSB7Cisg
ICAgY2FzZSBBU1Q6Ok5hbWVkVHlwZTo6S2luZDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uOiB7Cisg
ICAgICAgIC8vIE5hdGl2ZSB0eXBlcyBhbHJlYWR5IGhhdmUgZGVmaW5pdGlvbnMuIFRoZXJlJ3Mg
bm90aGluZyB0byBkby4KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQVNUOjpOYW1l
ZFR5cGU6OktpbmQ6OlR5cGVEZWZpbml0aW9uOiB7CisgICAgICAgIC8vIFRoZSBtYW5nbGVkIG5h
bWUgb2YgYSBBU1Q6OlR5cGVEZWZpbml0aW9uIGxvb2tzIHRocm91Z2ggdG8gdGhlIHVuZGVybHlp
bmcgdHlwZS4gVGhlcmUgaXMgbm90aGluZyB0byBkby4KKyAgICAgICAgYnJlYWs7CisgICAgfQog
ICAgIGNhc2UgQVNUOjpOYW1lZFR5cGU6OktpbmQ6OkVudW1lcmF0aW9uRGVmaW5pdGlvbjogewog
ICAgICAgICBhdXRvJiBlbnVtZXJhdGlvbkRlZmluaXRpb24gPSBkb3duY2FzdDxBU1Q6OkVudW1l
cmF0aW9uRGVmaW5pdGlvbj4obmFtZWRUeXBlKTsKICAgICAgICAgYXV0byYgYmFzZVR5cGUgPSBl
bnVtZXJhdGlvbkRlZmluaXRpb24udHlwZSgpLnVuaWZ5Tm9kZSgpOwpAQCAtMjc5LDEwICsyNDIs
NiBAQCB2b2lkIFR5cGVOYW1lcjo6ZW1pdE5hbWVkVHlwZURlZmluaXRpb24oCiAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCJ9O1xuIik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBj
YXNlIEFTVDo6TmFtZWRUeXBlOjpLaW5kOjpOYXRpdmVUeXBlRGVjbGFyYXRpb246IHsKLSAgICAg
ICAgLy8gTmF0aXZlIHR5cGVzIGFscmVhZHkgaGF2ZSBkZWZpbml0aW9ucy4gVGhlcmUncyBub3Ro
aW5nIHRvIGRvLgotICAgICAgICBicmVhazsKLSAgICB9CiAgICAgY2FzZSBBU1Q6Ok5hbWVkVHlw
ZTo6S2luZDo6U3RydWN0dXJlRGVmaW5pdGlvbjogewogICAgICAgICBhdXRvJiBzdHJ1Y3R1cmVE
ZWZpbml0aW9uID0gZG93bmNhc3Q8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUp
OwogCkBAIC0yOTIsMTIgKzI1MSw2IEBAIHZvaWQgVHlwZU5hbWVyOjplbWl0TmFtZWRUeXBlRGVm
aW5pdGlvbigKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn07XG4iKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQotICAgIGNhc2UgQVNUOjpOYW1lZFR5cGU6OktpbmQ6OlR5cGVEZWZpbml0
aW9uOiB7Ci0gICAgICAgIGF1dG8mIHR5cGVEZWZpbml0aW9uID0gZG93bmNhc3Q8QVNUOjpUeXBl
RGVmaW5pdGlvbj4obmFtZWRUeXBlKTsKLQotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgi
dHlwZWRlZiAiLCBtYW5nbGVkTmFtZUZvclR5cGUodHlwZURlZmluaXRpb24udHlwZSgpKSwgJyAn
LCBtYW5nbGVkTmFtZUZvclR5cGUodHlwZURlZmluaXRpb24pLCAiO1xuIik7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIH0KQEAgLTMxMSwyNCArMjY0LDU4IEBAIHZvaWQgVHlwZU5hbWVyOjplbWl0
TWV0YWxUeXBlRGVmaW5pdGlvbnMKICAgICBIYXNoU2V0PFVubmFtZWRUeXBlS2V5PiBlbWl0dGVk
VW5uYW1lZFR5cGVzOwogICAgIGZvciAoYXV0byYgW25hbWVkVHlwZSwgbmVpZ2hib3JzXSA6IG1f
ZGVwZW5kZW5jeUdyYXBoKQogICAgICAgICBlbWl0TmFtZWRUeXBlRGVmaW5pdGlvbihzdHJpbmdC
dWlsZGVyLCAqbmFtZWRUeXBlLCBuZWlnaGJvcnMsIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVk
VW5uYW1lZFR5cGVzKTsKLSAgICBmb3IgKGF1dG8mIFt1bm5hbWVkVHlwZUtleSwgbWFuZ2xlZE5h
bWVdIDogbV91bm5hbWVkVHlwZU1hcHBpbmcpCisgICAgZm9yIChhdXRvJiBbdW5uYW1lZFR5cGVL
ZXksIG1hbmdsZWROYW1lXSA6IG1fYXJyYXlSZWZlcmVuY2VUeXBlTWFwcGluZykKICAgICAgICAg
ZW1pdFVubmFtZWRUeXBlRGVmaW5pdGlvbihzdHJpbmdCdWlsZGVyLCB1bm5hbWVkVHlwZUtleS51
bm5hbWVkVHlwZSgpLCBtYW5nbGVkTmFtZSwgZW1pdHRlZE5hbWVkVHlwZXMsIGVtaXR0ZWRVbm5h
bWVkVHlwZXMpOwogfQogCi1NYW5nbGVkVHlwZU5hbWUgVHlwZU5hbWVyOjptYW5nbGVkTmFtZUZv
clR5cGUoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpCitNYW5nbGVkT3JOYXRpdmVUeXBl
TmFtZSBUeXBlTmFtZXI6Om1hbmdsZWROYW1lRm9yVHlwZShBU1Q6OlVubmFtZWRUeXBlJiB1bm5h
bWVkVHlwZSkKIHsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV91bm5hbWVkVHlwZU1hcHBpbmcuZmlu
ZChVbm5hbWVkVHlwZUtleSB7IHVubmFtZWRUeXBlIH0pOwotICAgIEFTU0VSVChpdGVyYXRvciAh
PSBtX3VubmFtZWRUeXBlTWFwcGluZy5lbmQoKSk7Ci0gICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1
ZTsKKyAgICBzd2l0Y2ggKHVubmFtZWRUeXBlLmtpbmQoKSkgeworICAgIGNhc2UgQVNUOjpVbm5h
bWVkVHlwZTo6S2luZDo6VHlwZVJlZmVyZW5jZTogeworICAgICAgICBhdXRvJiB0eXBlUmVmZXJl
bmNlID0gZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSk7CisgICAgICAg
IGF1dG8mIHBhcmVudCA9IHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCk7CisgICAgICAgIHJl
dHVybiBtYW5nbGVkTmFtZUZvclR5cGUocGFyZW50KTsKKyAgICB9CisgICAgY2FzZSBBU1Q6OlVu
bmFtZWRUeXBlOjpLaW5kOjpQb2ludGVyOiB7CisgICAgICAgIGF1dG8mIHBvaW50ZXJUeXBlID0g
ZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpOworICAgICAgICBhdXRvJiBw
YXJlbnQgPSBwb2ludGVyVHlwZS5lbGVtZW50VHlwZSgpOworICAgICAgICBhdXRvIHBhcmVudE1h
bmdsZWROYW1lID0gbWFuZ2xlZE5hbWVGb3JUeXBlKHBhcmVudCk7CisgICAgICAgIHJldHVybiBt
YWtlU3RyaW5nKHRvU3RyaW5nKHBvaW50ZXJUeXBlLmFkZHJlc3NTcGFjZSgpKSwgJyAnLCBwYXJl
bnRNYW5nbGVkTmFtZSwgJyonKTsKKyAgICB9CisgICAgY2FzZSBBU1Q6OlVubmFtZWRUeXBlOjpL
aW5kOjpBcnJheTogeworICAgICAgICBhdXRvJiBhcnJheVR5cGUgPSBkb3duY2FzdDxBU1Q6OkFy
cmF5VHlwZT4odW5uYW1lZFR5cGUpOworICAgICAgICBhdXRvJiBwYXJlbnQgPSBhcnJheVR5cGUu
dHlwZSgpOworICAgICAgICBhdXRvIHBhcmVudE1hbmdsZWROYW1lID0gbWFuZ2xlZE5hbWVGb3JU
eXBlKHBhcmVudCk7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJhcnJheTwiLCBwYXJlbnRN
YW5nbGVkTmFtZSwgIiwgIiwgYXJyYXlUeXBlLm51bUVsZW1lbnRzKCksICc+Jyk7CisgICAgfQor
ICAgIGNhc2UgQVNUOjpVbm5hbWVkVHlwZTo6S2luZDo6QXJyYXlSZWZlcmVuY2U6IHsKKyAgICAg
ICAgYXV0byBpdGVyYXRvciA9IG1fYXJyYXlSZWZlcmVuY2VUeXBlTWFwcGluZy5maW5kKFVubmFt
ZWRUeXBlS2V5IHsgdW5uYW1lZFR5cGUgfSk7CisgICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBt
X2FycmF5UmVmZXJlbmNlVHlwZU1hcHBpbmcuZW5kKCkpOworICAgICAgICByZXR1cm4gaXRlcmF0
b3ItPnZhbHVlOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KIH0KIAogTWFuZ2xlZE9yTmF0aXZlVHlwZU5hbWUgVHlwZU5h
bWVyOjptYW5nbGVkTmFtZUZvclR5cGUoQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkKIHsKLSAg
ICBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpCisgICAgc3dp
dGNoIChuYW1lZFR5cGUua2luZCgpKSB7CisgICAgY2FzZSBBU1Q6Ok5hbWVkVHlwZTo6S2luZDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uOiB7CiAgICAgICAgIHJldHVybiBtYW5nbGVkTmFtZUZvclR5
cGUoZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpOwotICAg
IGF1dG8gaXRlcmF0b3IgPSBtX25hbWVkVHlwZU1hcHBpbmcuZmluZCgmbmFtZWRUeXBlKTsKLSAg
ICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9uYW1lZFR5cGVNYXBwaW5nLmVuZCgpKTsKLSAgICByZXR1
cm4gaXRlcmF0b3ItPnZhbHVlOworICAgIH0KKyAgICBjYXNlIEFTVDo6TmFtZWRUeXBlOjpLaW5k
OjpUeXBlRGVmaW5pdGlvbjogeworICAgICAgICByZXR1cm4gbWFuZ2xlZE5hbWVGb3JUeXBlKGRv
d25jYXN0PEFTVDo6VHlwZURlZmluaXRpb24+KG5hbWVkVHlwZSkudHlwZSgpKTsKKyAgICB9Cisg
ICAgY2FzZSBBU1Q6Ok5hbWVkVHlwZTo6S2luZDo6RW51bWVyYXRpb25EZWZpbml0aW9uOgorICAg
IGNhc2UgQVNUOjpOYW1lZFR5cGU6OktpbmQ6OlN0cnVjdHVyZURlZmluaXRpb246IHsKKyAgICAg
ICAgYXV0byBpdGVyYXRvciA9IG1fbmFtZWRUeXBlTWFwcGluZy5maW5kKCZuYW1lZFR5cGUpOwor
ICAgICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9uYW1lZFR5cGVNYXBwaW5nLmVuZCgpKTsKKyAg
ICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiB9CiAKIE1hbmdsZWRFbnVt
ZXJhdGlvbk1lbWJlck5hbWUgVHlwZU5hbWVyOjptYW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVt
YmVyKEFTVDo6RW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVtYmVyKQpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTFR5cGVOYW1lci5oCShyZXZpc2lvbiAyNDkxNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5oCSh3b3JraW5nIGNvcHkpCkBA
IC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIE11c3QgYmUgY2FsbGVkIGFmdGVyIGNh
bGxpbmcgZW1pdE1ldGFsVHlwZXMoKS4KICAgICBTdHJpbmcgbWFuZ2xlZE5hbWVGb3JUeXBlKEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7Ci0gICAgTWFuZ2xlZFR5cGVOYW1lIG1hbmdsZWRO
YW1lRm9yVHlwZShBU1Q6OlVubmFtZWRUeXBlJik7CisgICAgTWFuZ2xlZE9yTmF0aXZlVHlwZU5h
bWUgbWFuZ2xlZE5hbWVGb3JUeXBlKEFTVDo6VW5uYW1lZFR5cGUmKTsKICAgICBNYW5nbGVkT3JO
YXRpdmVUeXBlTmFtZSBtYW5nbGVkTmFtZUZvclR5cGUoQVNUOjpOYW1lZFR5cGUmKTsKICAgICBN
YW5nbGVkRW51bWVyYXRpb25NZW1iZXJOYW1lIG1hbmdsZWROYW1lRm9yRW51bWVyYXRpb25NZW1i
ZXIoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYpOwogICAgIE1hbmdsZWRTdHJ1Y3R1cmVFbGVtZW50
TmFtZSBtYW5nbGVkTmFtZUZvclN0cnVjdHVyZUVsZW1lbnQoQVNUOjpTdHJ1Y3R1cmVFbGVtZW50
Jik7CkBAIC04NCwxNCArODQsMTQgQEAgcHJpdmF0ZToKICAgICBNYW5nbGVkRW51bWVyYXRpb25N
ZW1iZXJOYW1lIGdlbmVyYXRlTmV4dEVudW1lcmF0aW9uTWVtYmVyTmFtZSgpIHsgcmV0dXJuIHsg
bV9lbnVtZXJhdGlvbk1lbWJlckNvdW50KysgfTsgfQogCiAgICAgdm9pZCBlbWl0TmFtZWRUeXBl
RGVmaW5pdGlvbihTdHJpbmdCdWlsZGVyJiwgQVNUOjpOYW1lZFR5cGUmLCBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OlVubmFtZWRUeXBlPj4mLCBIYXNoU2V0PEFTVDo6TmFtZWRU
eXBlKj4mIGVtaXR0ZWROYW1lZFR5cGVzLCBIYXNoU2V0PFVubmFtZWRUeXBlS2V5PiYgZW1pdHRl
ZFVubmFtZWRUeXBlcyk7Ci0gICAgdm9pZCBlbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKFN0cmlu
Z0J1aWxkZXImLCBBU1Q6OlVubmFtZWRUeXBlJiwgTWFuZ2xlZFR5cGVOYW1lLCBIYXNoU2V0PEFT
VDo6TmFtZWRUeXBlKj4mIGVtaXR0ZWROYW1lZFR5cGVzLCBIYXNoU2V0PFVubmFtZWRUeXBlS2V5
PiYgZW1pdHRlZFVubmFtZWRUeXBlcyk7CisgICAgdm9pZCBlbWl0VW5uYW1lZFR5cGVEZWZpbml0
aW9uKFN0cmluZ0J1aWxkZXImLCBBU1Q6OlVubmFtZWRUeXBlJiwgTWFuZ2xlZE9yTmF0aXZlVHlw
ZU5hbWUsIEhhc2hTZXQ8QVNUOjpOYW1lZFR5cGUqPiYgZW1pdHRlZE5hbWVkVHlwZXMsIEhhc2hT
ZXQ8VW5uYW1lZFR5cGVLZXk+JiBlbWl0dGVkVW5uYW1lZFR5cGVzKTsKICAgICB2b2lkIGVtaXRN
ZXRhbFR5cGVEZWNsYXJhdGlvbnMoU3RyaW5nQnVpbGRlciYpOwogICAgIHZvaWQgZW1pdE1ldGFs
VHlwZURlZmluaXRpb25zKFN0cmluZ0J1aWxkZXImKTsKIAogICAgIHZvaWQgZ2VuZXJhdGVVbmlx
dWVkVHlwZU5hbWUoQVNUOjpVbm5hbWVkVHlwZSYpOwogCiAgICAgUHJvZ3JhbSYgbV9wcm9ncmFt
OwotICAgIEhhc2hNYXA8VW5uYW1lZFR5cGVLZXksIE1hbmdsZWRUeXBlTmFtZT4gbV91bm5hbWVk
VHlwZU1hcHBpbmc7CisgICAgSGFzaE1hcDxVbm5hbWVkVHlwZUtleSwgTWFuZ2xlZFR5cGVOYW1l
PiBtX2FycmF5UmVmZXJlbmNlVHlwZU1hcHBpbmc7CiAgICAgSGFzaE1hcDxBU1Q6Ok5hbWVkVHlw
ZSosIE1hbmdsZWRUeXBlTmFtZT4gbV9uYW1lZFR5cGVNYXBwaW5nOwogICAgIEhhc2hNYXA8QVNU
OjpOYW1lZFR5cGUqLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OlVubmFtZWRU
eXBlPj4+IG1fZGVwZW5kZW5jeUdyYXBoOwogICAgIEhhc2hNYXA8QVNUOjpFbnVtZXJhdGlvbk1l
bWJlciosIE1hbmdsZWRFbnVtZXJhdGlvbk1lbWJlck5hbWU+IG1fZW51bWVyYXRpb25NZW1iZXJN
YXBwaW5nOwo=
</data>
<flag name="review"
          id="393129"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>377420</attachid>
            <date>2019-08-27 20:16:10 -0700</date>
            <delta_ts>2019-08-27 20:16:10 -0700</delta_ts>
            <desc>before.txt</desc>
            <filename>before.txt</filename>
            <type>text/plain</type>
            <size>32509</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">R2VuZXJhdGVkIE1ldGFsIGNvZGU6IAojaW5jbHVkZSA8bWV0YWxfc3RkbGliPgojaW5jbHVkZSA8
bWV0YWxfYXRvbWljPgojaW5jbHVkZSA8bWV0YWxfbWF0aD4KI2luY2x1ZGUgPG1ldGFsX3JlbGF0
aW9uYWw+CiNpbmNsdWRlIDxtZXRhbF9jb21wdXRlPgojaW5jbHVkZSA8bWV0YWxfdGV4dHVyZT4K
CnVzaW5nIG5hbWVzcGFjZSBtZXRhbDsKCnN0cnVjdCB0eXBlNjA7CnN0cnVjdCB0eXBlNjE7CnN0
cnVjdCB0eXBlNjM7Cgp0eXBlZGVmIGZsb2F0MiB0eXBlMTk7CnR5cGVkZWYgdHlwZTE5IHR5cGUx
ODsKc3RydWN0IHR5cGU2MyB7Cn07CnR5cGVkZWYgYXJyYXk8Ym9vbCwgMTI+IHR5cGU1MzsKdHlw
ZWRlZiB0eXBlNTMgdHlwZTUyOwp0eXBlZGVmIGJvb2wzIHR5cGUzOwp0eXBlZGVmIHR5cGUzIHR5
cGUyOwp0eXBlZGVmIGJvb2wyIHR5cGUxOwp0eXBlZGVmIHR5cGUxIHR5cGUwOwpzdHJ1Y3QgdHlw
ZTYwIHsKICAgIHR5cGUxOSBzdHJ1Y3R1cmVFbGVtZW50MDsKICAgIHR5cGUxOSBzdHJ1Y3R1cmVF
bGVtZW50MTsKfTsKdHlwZWRlZiBhcnJheTxib29sLCA2PiB0eXBlNDk7CnR5cGVkZWYgdHlwZTQ5
IHR5cGU0ODsKdHlwZWRlZiBmbG9hdDQgdHlwZTIzOwp0eXBlZGVmIHR5cGUyMyB0eXBlMjI7CnR5
cGVkZWYgZmxvYXQzIHR5cGUyMTsKdHlwZWRlZiB0eXBlMjEgdHlwZTIwOwp0eXBlZGVmIGludDMg
dHlwZTE1Owp0eXBlZGVmIHR5cGUxNSB0eXBlMTQ7CnR5cGVkZWYgYXJyYXk8Ym9vbCwgOD4gdHlw
ZTQ3Owp0eXBlZGVmIHR5cGU0NyB0eXBlNDY7CnR5cGVkZWYgYXJyYXk8Ym9vbCwgMTY+IHR5cGU1
OTsKdHlwZWRlZiB0eXBlNTkgdHlwZTU4Owp0eXBlZGVmIGFycmF5PGJvb2wsIDEyPiB0eXBlNTc7
CnR5cGVkZWYgdHlwZTU3IHR5cGU1NjsKdHlwZWRlZiBhcnJheTxmbG9hdCwgMTY+IHR5cGU0MTsK
dHlwZWRlZiB0eXBlNDEgdHlwZTQwOwp0eXBlZGVmIGFycmF5PGZsb2F0LCAxMj4gdHlwZTM1Owp0
eXBlZGVmIHR5cGUzNSB0eXBlMzQ7CnR5cGVkZWYgYXJyYXk8Ym9vbCwgOD4gdHlwZTU1Owp0eXBl
ZGVmIHR5cGU1NSB0eXBlNTQ7CnR5cGVkZWYgYXJyYXk8Ym9vbCwgOT4gdHlwZTUxOwp0eXBlZGVm
IHR5cGU1MSB0eXBlNTA7CnR5cGVkZWYgdWludDMgdHlwZTk7CnR5cGVkZWYgdHlwZTkgdHlwZTg7
CnR5cGVkZWYgYXJyYXk8Ym9vbCwgND4gdHlwZTQzOwp0eXBlZGVmIHR5cGU0MyB0eXBlNDI7CnR5
cGVkZWYgYXJyYXk8ZmxvYXQsIDk+IHR5cGUzMzsKdHlwZWRlZiB0eXBlMzMgdHlwZTMyOwp0eXBl
ZGVmIGFycmF5PGJvb2wsIDY+IHR5cGU0NTsKdHlwZWRlZiB0eXBlNDUgdHlwZTQ0Owp0eXBlZGVm
IHVpbnQyIHR5cGU3Owp0eXBlZGVmIHR5cGU3IHR5cGU2Owp0eXBlZGVmIGFycmF5PGZsb2F0LCA2
PiB0eXBlMzE7CnR5cGVkZWYgdHlwZTMxIHR5cGUzMDsKdHlwZWRlZiB1aW50NCB0eXBlMTE7CnR5
cGVkZWYgdHlwZTExIHR5cGUxMDsKdHlwZWRlZiBib29sNCB0eXBlNTsKdHlwZWRlZiB0eXBlNSB0
eXBlNDsKdHlwZWRlZiBhcnJheTxmbG9hdCwgOD4gdHlwZTI5Owp0eXBlZGVmIHR5cGUyOSB0eXBl
Mjg7CnR5cGVkZWYgYXJyYXk8ZmxvYXQsIDQ+IHR5cGUyNTsKdHlwZWRlZiB0eXBlMjUgdHlwZTI0
Owp0eXBlZGVmIGludDQgdHlwZTE3Owp0eXBlZGVmIHR5cGUxNyB0eXBlMTY7CnR5cGVkZWYgYXJy
YXk8ZmxvYXQsIDY+IHR5cGUyNzsKdHlwZWRlZiB0eXBlMjcgdHlwZTI2Owp0eXBlZGVmIGFycmF5
PGZsb2F0LCA4PiB0eXBlMzc7CnR5cGVkZWYgdHlwZTM3IHR5cGUzNjsKdHlwZWRlZiBhcnJheTxm
bG9hdCwgMTI+IHR5cGUzOTsKdHlwZWRlZiB0eXBlMzkgdHlwZTM4Owp0eXBlZGVmIGZsb2F0IHR5
cGU2MjsKc3RydWN0IHR5cGU2MSB7CiAgICB0eXBlNjIgc3RydWN0dXJlRWxlbWVudDI7CiAgICB0
eXBlNjIgc3RydWN0dXJlRWxlbWVudDM7CiAgICB0eXBlNjIgc3RydWN0dXJlRWxlbWVudDQ7CiAg
ICB0eXBlNjIgc3RydWN0dXJlRWxlbWVudDU7CiAgICB0eXBlNjIgc3RydWN0dXJlRWxlbWVudDY7
CiAgICB0eXBlNjIgc3RydWN0dXJlRWxlbWVudDc7CiAgICB0eXBlNjIgc3RydWN0dXJlRWxlbWVu
dDg7Cn07CnR5cGVkZWYgaW50MiB0eXBlMTM7CnR5cGVkZWYgdHlwZTEzIHR5cGUxMjsKdHlwZWRl
ZiBpbnQzMl90IHR5cGU3NjsKdHlwZWRlZiB0ZXh0dXJlMmRfYXJyYXk8aW50LCBhY2Nlc3M6OnNh
bXBsZT4gdHlwZTEzMjsKdHlwZWRlZiB0eXBlNjMgdHlwZTY5Owp0eXBlZGVmIHRleHR1cmUyZDx1
aW50LCBhY2Nlc3M6OnNhbXBsZT4gdHlwZTExNjsKdHlwZWRlZiB0ZXh0dXJlM2Q8ZmxvYXQsIGFj
Y2Vzczo6c2FtcGxlPiB0eXBlMTUwOwp0eXBlZGVmIHRleHR1cmUyZF9hcnJheTxmbG9hdCwgYWNj
ZXNzOjpzYW1wbGU+IHR5cGUxMzg7CnR5cGVkZWYgdGV4dHVyZTFkPHVpbnQsIGFjY2Vzczo6c2Ft
cGxlPiB0eXBlOTQ7CnR5cGVkZWYgdGhyZWFkIHR5cGU2OSogdHlwZTcwOwp0eXBlZGVmIHRleHR1
cmUxZF9hcnJheTx1aW50LCBhY2Nlc3M6OnNhbXBsZT4gdHlwZTEwNTsKdHlwZWRlZiB0ZXh0dXJl
MmRfYXJyYXk8aW50LCBhY2Nlc3M6OnNhbXBsZT4gdHlwZTEzNDsKdHlwZWRlZiB0eXBlNjEgdHlw
ZTY1Owp0eXBlZGVmIHRocmVhZCB0eXBlNjUqIHR5cGU4MDsKdHlwZWRlZiB0ZXh0dXJlMWRfYXJy
YXk8dWludCwgYWNjZXNzOjpzYW1wbGU+IHR5cGUxMDQ7CnR5cGVkZWYgdGhyZWFkZ3JvdXAgdHlw
ZTYyKiB0eXBlODk7CnR5cGVkZWYgdGV4dHVyZTFkPGludCwgYWNjZXNzOjpzYW1wbGU+IHR5cGU5
NzsKdHlwZWRlZiBkZXZpY2UgdHlwZTE5KiB0eXBlNzg7CnR5cGVkZWYgdGV4dHVyZTNkPHVpbnQs
IGFjY2Vzczo6c2FtcGxlPiB0eXBlMTQxOwp0eXBlZGVmIHR5cGU2MCB0eXBlNjc7CnR5cGVkZWYg
dGhyZWFkZ3JvdXAgdHlwZTY3KiB0eXBlODQ7CnR5cGVkZWYgdGhyZWFkIHR5cGUxOSogdHlwZTcz
Owp0eXBlZGVmIHRleHR1cmUzZDxmbG9hdCwgYWNjZXNzOjpzYW1wbGU+IHR5cGUxNTE7CnR5cGVk
ZWYgdGhyZWFkIHR5cGU2NyogdHlwZTg1Owp0eXBlZGVmIGNvbnN0YW50IHR5cGU2MiogdHlwZTg2
Owp0eXBlZGVmIHRleHR1cmVjdWJlPGludCwgYWNjZXNzOjpzYW1wbGU+IHR5cGUxNTg7CnR5cGVk
ZWYgdm9pZCB0eXBlNjQ7CnR5cGVkZWYgdGV4dHVyZTJkX2FycmF5PHVpbnQsIGFjY2Vzczo6c2Ft
cGxlPiB0eXBlMTMxOwp0eXBlZGVmIHRleHR1cmUxZF9hcnJheTxmbG9hdCwgYWNjZXNzOjpzYW1w
bGU+IHR5cGUxMTQ7CnR5cGVkZWYgdGV4dHVyZTJkPHVpbnQsIGFjY2Vzczo6c2FtcGxlPiB0eXBl
MTE4Owp0eXBlZGVmIGJvb2wgdHlwZTc3Owp0eXBlZGVmIHRleHR1cmUxZDxpbnQsIGFjY2Vzczo6
c2FtcGxlPiB0eXBlOTk7CnR5cGVkZWYgdGV4dHVyZTJkPGZsb2F0LCBhY2Nlc3M6OnNhbXBsZT4g
dHlwZTEyNzsKdHlwZWRlZiBjb25zdGFudCB0eXBlNjUqIHR5cGU4NzsKdHlwZWRlZiB0ZXh0dXJl
MWQ8ZmxvYXQsIGFjY2Vzczo6c2FtcGxlPiB0eXBlMTAxOwp0eXBlZGVmIHRleHR1cmUxZDx1aW50
LCBhY2Nlc3M6OnNhbXBsZT4gdHlwZTkyOwp0eXBlZGVmIHRleHR1cmUyZF9hcnJheTxpbnQsIGFj
Y2Vzczo6c2FtcGxlPiB0eXBlMTM1Owp0eXBlZGVmIHRleHR1cmUyZF9hcnJheTxmbG9hdCwgYWNj
ZXNzOjpzYW1wbGU+IHR5cGUxMzk7CnR5cGVkZWYgdGV4dHVyZTJkPGZsb2F0LCBhY2Nlc3M6OnNh
bXBsZT4gdHlwZTEyNjsKdHlwZWRlZiB0ZXh0dXJlMWQ8ZmxvYXQsIGFjY2Vzczo6c2FtcGxlPiB0
eXBlMTAwOwp0eXBlZGVmIHVpbnQzMl90IHR5cGU3MTsKdHlwZWRlZiB0ZXh0dXJlM2Q8aW50LCBh
Y2Nlc3M6OnNhbXBsZT4gdHlwZTE0NjsKdHlwZWRlZiB0ZXh0dXJlMmRfYXJyYXk8dWludCwgYWNj
ZXNzOjpzYW1wbGU+IHR5cGUxMjg7CnR5cGVkZWYgdGV4dHVyZWN1YmU8dWludCwgYWNjZXNzOjpz
YW1wbGU+IHR5cGUxNTI7CnR5cGVkZWYgdGV4dHVyZWN1YmU8aW50LCBhY2Nlc3M6OnNhbXBsZT4g
dHlwZTE1NjsKdHlwZWRlZiB0ZXh0dXJlY3ViZTxpbnQsIGFjY2Vzczo6c2FtcGxlPiB0eXBlMTU3
Owp0eXBlZGVmIHNhbXBsZXIgdHlwZTkxOwp0eXBlZGVmIHRleHR1cmUzZDx1aW50LCBhY2Nlc3M6
OnNhbXBsZT4gdHlwZTE0MDsKdHlwZWRlZiB0ZXh0dXJlY3ViZTxpbnQsIGFjY2Vzczo6c2FtcGxl
PiB0eXBlMTU5Owp0eXBlZGVmIHRleHR1cmUxZDxmbG9hdCwgYWNjZXNzOjpzYW1wbGU+IHR5cGUx
MDI7CnR5cGVkZWYgdGhyZWFkIHR5cGU3MSogdHlwZTcyOwp0eXBlZGVmIHRleHR1cmVjdWJlPGZs
b2F0LCBhY2Nlc3M6OnNhbXBsZT4gdHlwZTE2MTsKdHlwZWRlZiB0ZXh0dXJlMmQ8ZmxvYXQsIGFj
Y2Vzczo6c2FtcGxlPiB0eXBlMTI0Owp0eXBlZGVmIHRleHR1cmUyZDx1aW50LCBhY2Nlc3M6OnNh
bXBsZT4gdHlwZTExNzsKdHlwZWRlZiB0ZXh0dXJlMWRfYXJyYXk8ZmxvYXQsIGFjY2Vzczo6c2Ft
cGxlPiB0eXBlMTE1Owp0eXBlZGVmIGNvbnN0YW50IHR5cGU2NyogdHlwZTgyOwp0eXBlZGVmIHRl
eHR1cmUyZF9hcnJheTxmbG9hdCwgYWNjZXNzOjpzYW1wbGU+IHR5cGUxMzc7CnR5cGVkZWYgdGV4
dHVyZWN1YmU8ZmxvYXQsIGFjY2Vzczo6c2FtcGxlPiB0eXBlMTYzOwp0eXBlZGVmIHRleHR1cmVj
dWJlPHVpbnQsIGFjY2Vzczo6c2FtcGxlPiB0eXBlMTU0Owp0eXBlZGVmIHRleHR1cmUxZDx1aW50
LCBhY2Nlc3M6OnNhbXBsZT4gdHlwZTk1Owp0eXBlZGVmIHRleHR1cmVjdWJlPGZsb2F0LCBhY2Nl
c3M6OnNhbXBsZT4gdHlwZTE2MDsKdHlwZWRlZiB0ZXh0dXJlMmQ8dWludCwgYWNjZXNzOjpzYW1w
bGU+IHR5cGUxMTk7CnR5cGVkZWYgdGhyZWFkIHR5cGU2MiogdHlwZTc0Owp0eXBlZGVmIHRleHR1
cmUxZF9hcnJheTxmbG9hdCwgYWNjZXNzOjpzYW1wbGU+IHR5cGUxMTM7CnR5cGVkZWYgdGV4dHVy
ZTJkPGludCwgYWNjZXNzOjpzYW1wbGU+IHR5cGUxMjE7CnR5cGVkZWYgdGV4dHVyZTFkPGZsb2F0
LCBhY2Nlc3M6OnNhbXBsZT4gdHlwZTEwMzsKdHlwZWRlZiB0ZXh0dXJlY3ViZTxmbG9hdCwgYWNj
ZXNzOjpzYW1wbGU+IHR5cGUxNjI7CnR5cGVkZWYgdGV4dHVyZTJkX2FycmF5PHVpbnQsIGFjY2Vz
czo6c2FtcGxlPiB0eXBlMTI5OwpzdHJ1Y3QgdHlwZTY2IHsKICAgIGRldmljZSB0eXBlNjUqIHBv
aW50ZXI7CiAgICB1aW50MzJfdCBsZW5ndGg7Cn07CnR5cGVkZWYgdGV4dHVyZTFkPHVpbnQsIGFj
Y2Vzczo6c2FtcGxlPiB0eXBlOTM7CnR5cGVkZWYgdGV4dHVyZTFkX2FycmF5PGludCwgYWNjZXNz
OjpzYW1wbGU+IHR5cGUxMDk7CnR5cGVkZWYgdGV4dHVyZTNkPGZsb2F0LCBhY2Nlc3M6OnNhbXBs
ZT4gdHlwZTE0ODsKdHlwZWRlZiBkZXZpY2UgdHlwZTYyKiB0eXBlODg7CnR5cGVkZWYgdGV4dHVy
ZTJkPGludCwgYWNjZXNzOjpzYW1wbGU+IHR5cGUxMjA7CnR5cGVkZWYgdGV4dHVyZTNkPGludCwg
YWNjZXNzOjpzYW1wbGU+IHR5cGUxNDc7CnR5cGVkZWYgdGhyZWFkZ3JvdXAgdHlwZTY1KiB0eXBl
OTA7CnR5cGVkZWYgdGV4dHVyZTFkPGludCwgYWNjZXNzOjpzYW1wbGU+IHR5cGU5ODsKc3RydWN0
IHR5cGU2OCB7CiAgICBkZXZpY2UgdHlwZTY3KiBwb2ludGVyOwogICAgdWludDMyX3QgbGVuZ3Ro
Owp9Owp0eXBlZGVmIHRleHR1cmUxZF9hcnJheTxmbG9hdCwgYWNjZXNzOjpzYW1wbGU+IHR5cGUx
MTI7CnR5cGVkZWYgdGV4dHVyZTFkX2FycmF5PGludCwgYWNjZXNzOjpzYW1wbGU+IHR5cGUxMDg7
CnR5cGVkZWYgdGV4dHVyZTFkPGludCwgYWNjZXNzOjpzYW1wbGU+IHR5cGU5NjsKdHlwZWRlZiB0
ZXh0dXJlMWRfYXJyYXk8dWludCwgYWNjZXNzOjpzYW1wbGU+IHR5cGUxMDc7CnR5cGVkZWYgdGV4
dHVyZTJkX2FycmF5PGludCwgYWNjZXNzOjpzYW1wbGU+IHR5cGUxMzM7CnR5cGVkZWYgdGV4dHVy
ZTFkX2FycmF5PGludCwgYWNjZXNzOjpzYW1wbGU+IHR5cGUxMTE7CnR5cGVkZWYgdGV4dHVyZTNk
PGludCwgYWNjZXNzOjpzYW1wbGU+IHR5cGUxNDU7CnR5cGVkZWYgZGVwdGgyZDxmbG9hdCwgYWNj
ZXNzOjpzYW1wbGU+IHR5cGUxNjQ7CnR5cGVkZWYgdGV4dHVyZTJkPGludCwgYWNjZXNzOjpzYW1w
bGU+IHR5cGUxMjM7CnR5cGVkZWYgZGVwdGhjdWJlPGZsb2F0LCBhY2Nlc3M6OnNhbXBsZT4gdHlw
ZTE2NjsKdHlwZWRlZiB0ZXh0dXJlM2Q8ZmxvYXQsIGFjY2Vzczo6c2FtcGxlPiB0eXBlMTQ5Owp0
eXBlZGVmIHRleHR1cmVjdWJlPHVpbnQsIGFjY2Vzczo6c2FtcGxlPiB0eXBlMTUzOwp0eXBlZGVm
IHRleHR1cmUzZDx1aW50LCBhY2Nlc3M6OnNhbXBsZT4gdHlwZTE0MjsKdHlwZWRlZiB0ZXh0dXJl
MmRfYXJyYXk8dWludCwgYWNjZXNzOjpzYW1wbGU+IHR5cGUxMzA7CnR5cGVkZWYgZGVwdGgyZF9h
cnJheTxmbG9hdCwgYWNjZXNzOjpzYW1wbGU+IHR5cGUxNjU7CnR5cGVkZWYgZGV2aWNlIHR5cGU2
NyogdHlwZTc5Owp0eXBlZGVmIHRleHR1cmUyZDxpbnQsIGFjY2Vzczo6c2FtcGxlPiB0eXBlMTIy
Owp0eXBlZGVmIHRleHR1cmUxZF9hcnJheTxpbnQsIGFjY2Vzczo6c2FtcGxlPiB0eXBlMTEwOwp0
eXBlZGVmIHRleHR1cmUxZF9hcnJheTx1aW50LCBhY2Nlc3M6OnNhbXBsZT4gdHlwZTEwNjsKdHlw
ZWRlZiBkZXZpY2UgdHlwZTY1KiB0eXBlNzU7CnR5cGVkZWYgdGV4dHVyZTNkPHVpbnQsIGFjY2Vz
czo6c2FtcGxlPiB0eXBlMTQzOwp0eXBlZGVmIHRleHR1cmUzZDxpbnQsIGFjY2Vzczo6c2FtcGxl
PiB0eXBlMTQ0Owp0eXBlZGVmIHRleHR1cmVjdWJlPHVpbnQsIGFjY2Vzczo6c2FtcGxlPiB0eXBl
MTU1Owp0eXBlZGVmIGNvbnN0YW50IHR5cGUxOSogdHlwZTgxOwp0eXBlZGVmIHRleHR1cmUyZF9h
cnJheTxmbG9hdCwgYWNjZXNzOjpzYW1wbGU+IHR5cGUxMzY7CnR5cGVkZWYgdGV4dHVyZTJkPGZs
b2F0LCBhY2Nlc3M6OnNhbXBsZT4gdHlwZTEyNTsKdHlwZWRlZiB0aHJlYWRncm91cCB0eXBlMTkq
IHR5cGU4MzsKdHlwZTcxIGZ1bmN0aW9uMSh0eXBlNzEpOwp0eXBlNjIgZnVuY3Rpb24yKHR5cGU2
Mik7CnR5cGU2MiBmdW5jdGlvbjModHlwZTE5LCB0eXBlMTkpOwp0eXBlMTkgZnVuY3Rpb240KHR5
cGUxOSk7CgpzdHJ1Y3QgdHlwZTE2NyB7CiAgICBkZXZpY2UgdHlwZTY1KiBzdHJ1Y3R1cmVFbGVt
ZW50OSBbW2lkKDApXV07CiAgICBkZXZpY2UgdHlwZTY3KiBzdHJ1Y3R1cmVFbGVtZW50MTMgW1tp
ZCgxKV1dOwogICAgZGV2aWNlIHR5cGU2Nyogc3RydWN0dXJlRWxlbWVudDExIFtbaWQoMildXTsK
ICAgIHVpbnQyIHN0cnVjdHVyZUVsZW1lbnQxMCBbW2lkKDMpXV07CiAgICB1aW50MiBzdHJ1Y3R1
cmVFbGVtZW50MTQgW1tpZCg0KV1dOwogICAgdWludDIgc3RydWN0dXJlRWxlbWVudDEyIFtbaWQo
NSldXTsKfTsKCmtlcm5lbCB2b2lkIGZ1bmN0aW9uMChkZXZpY2UgdHlwZTE2NyYgdmFyaWFibGUw
IFtbYnVmZmVyKDApXV0sIHVpbnQzIHZhcmlhYmxlNCBbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlk
XV0pCnsKICAgIHR5cGU2NiB2YXJpYWJsZTU7CiAgICB0eXBlNjggdmFyaWFibGU2OwogICAgdHlw
ZTY4IHZhcmlhYmxlNzsKICAgIHR5cGUyMSB2YXJpYWJsZTg7CiAgICBzaXplX3QgdmFyaWFibGUx
ID0gdmFyaWFibGUwLnN0cnVjdHVyZUVsZW1lbnQxMC55OwogICAgdmFyaWFibGUxID0gdmFyaWFi
bGUxIDw8IDMyOwogICAgdmFyaWFibGUxID0gdmFyaWFibGUxIHwgdmFyaWFibGUwLnN0cnVjdHVy
ZUVsZW1lbnQxMC54OwogICAgdmFyaWFibGUxID0gdmFyaWFibGUxIC8gc2l6ZW9mKHR5cGU2NSk7
CiAgICBpZiAodmFyaWFibGUxID4gMHhGRkZGRkZGRikKICAgICAgICB2YXJpYWJsZTEgPSAweEZG
RkZGRkZGOwogICAgdmFyaWFibGU1ID0geyB2YXJpYWJsZTAuc3RydWN0dXJlRWxlbWVudDksIHN0
YXRpY19jYXN0PHVpbnQzMl90Pih2YXJpYWJsZTEpIH07CiAgICBzaXplX3QgdmFyaWFibGUyID0g
dmFyaWFibGUwLnN0cnVjdHVyZUVsZW1lbnQxMi55OwogICAgdmFyaWFibGUyID0gdmFyaWFibGUy
IDw8IDMyOwogICAgdmFyaWFibGUyID0gdmFyaWFibGUyIHwgdmFyaWFibGUwLnN0cnVjdHVyZUVs
ZW1lbnQxMi54OwogICAgdmFyaWFibGUyID0gdmFyaWFibGUyIC8gc2l6ZW9mKHR5cGU2Nyk7CiAg
ICBpZiAodmFyaWFibGUyID4gMHhGRkZGRkZGRikKICAgICAgICB2YXJpYWJsZTIgPSAweEZGRkZG
RkZGOwogICAgdmFyaWFibGU3ID0geyB2YXJpYWJsZTAuc3RydWN0dXJlRWxlbWVudDExLCBzdGF0
aWNfY2FzdDx1aW50MzJfdD4odmFyaWFibGUyKSB9OwogICAgc2l6ZV90IHZhcmlhYmxlMyA9IHZh
cmlhYmxlMC5zdHJ1Y3R1cmVFbGVtZW50MTQueTsKICAgIHZhcmlhYmxlMyA9IHZhcmlhYmxlMyA8
PCAzMjsKICAgIHZhcmlhYmxlMyA9IHZhcmlhYmxlMyB8IHZhcmlhYmxlMC5zdHJ1Y3R1cmVFbGVt
ZW50MTQueDsKICAgIHZhcmlhYmxlMyA9IHZhcmlhYmxlMyAvIHNpemVvZih0eXBlNjcpOwogICAg
aWYgKHZhcmlhYmxlMyA+IDB4RkZGRkZGRkYpCiAgICAgICAgdmFyaWFibGUzID0gMHhGRkZGRkZG
RjsKICAgIHZhcmlhYmxlNiA9IHsgdmFyaWFibGUwLnN0cnVjdHVyZUVsZW1lbnQxMywgc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KHZhcmlhYmxlMykgfTsKICAgIHZhcmlhYmxlOCA9IHR5cGUyMSh2YXJp
YWJsZTQpOwogICAgewogICAgICAgIHR5cGU2OSB2YXJpYWJsZTkgPSB7IH07CiAgICAgICAgdGhy
ZWFkIHR5cGU2OSogdmFyaWFibGUxMSA9ICZ2YXJpYWJsZTk7CiAgICAgICAgdHlwZTcwIHZhcmlh
YmxlMTIgPSB2YXJpYWJsZTExOwogICAgICAgIHR5cGU3MCB2YXJpYWJsZTEwID0gdmFyaWFibGUx
MjsKICAgICAgICB0eXBlNzIgdmFyaWFibGUxMyA9IHsgfTsKICAgICAgICB0eXBlNzEgdmFyaWFi
bGUxNCA9IHsgfTsKICAgICAgICB0eXBlNzEgdmFyaWFibGUxNSA9IHsgfTsKICAgICAgICB0eXBl
NzMgdmFyaWFibGUxNiA9IHsgfTsKICAgICAgICB0eXBlMTkgdmFyaWFibGUxNyA9IHsgfTsKICAg
ICAgICB0eXBlMTkgdmFyaWFibGUxOCA9IHsgfTsKICAgICAgICB0eXBlNzQgdmFyaWFibGUxOSA9
IHsgfTsKICAgICAgICB0eXBlNjIgdmFyaWFibGUyMCA9IHsgfTsKICAgICAgICB0eXBlNjIgdmFy
aWFibGUyMSA9IHsgfTsKICAgICAgICB0eXBlNzMgdmFyaWFibGUyMiA9IHsgfTsKICAgICAgICB0
eXBlMTkgdmFyaWFibGUyMyA9IHsgfTsKICAgICAgICB0eXBlMTkgdmFyaWFibGUyNCA9IHsgfTsK
ICAgICAgICB0eXBlNzMgdmFyaWFibGUyNSA9IHsgfTsKICAgICAgICB0eXBlMTkgdmFyaWFibGUy
NiA9IHsgfTsKICAgICAgICB0eXBlMTkgdmFyaWFibGUyNyA9IHsgfTsKICAgICAgICB0eXBlNzQg
dmFyaWFibGUyOCA9IHsgfTsKICAgICAgICB0eXBlNjIgdmFyaWFibGUyOSA9IHsgfTsKICAgICAg
ICB0eXBlNjIgdmFyaWFibGUzMCA9IHsgfTsKICAgICAgICB0eXBlNzMgdmFyaWFibGUzMSA9IHsg
fTsKICAgICAgICB0eXBlMTkgdmFyaWFibGUzMiA9IHsgfTsKICAgICAgICB0eXBlMTkgdmFyaWFi
bGUzMyA9IHsgfTsKICAgICAgICB0eXBlNzMgdmFyaWFibGUzNCA9IHsgfTsKICAgICAgICB0eXBl
MTkgdmFyaWFibGUzNSA9IHsgfTsKICAgICAgICB0eXBlMTkgdmFyaWFibGUzNiA9IHsgfTsKICAg
ICAgICB0eXBlNzMgdmFyaWFibGUzNyA9IHsgfTsKICAgICAgICB0eXBlNzMgdmFyaWFibGUzOCA9
IHsgfTsKICAgICAgICB0eXBlNzMgdmFyaWFibGUzOSA9IHsgfTsKICAgICAgICB0eXBlNzMgdmFy
aWFibGU0MCA9IHsgfTsKICAgICAgICB0eXBlNjIgdmFyaWFibGU0MjsKCiAgICAgICAgdmFyaWFi
bGU0MiA9IHZhcmlhYmxlOC54OwoKICAgICAgICB0eXBlNzEgdmFyaWFibGU0MzsKCiAgICAgICAg
dmFyaWFibGU0MyA9IHN0YXRpY19jYXN0PHR5cGU3MT4odmFyaWFibGU0Mik7CgogICAgICAgIHR5
cGU3MSB2YXJpYWJsZTQxID0gdmFyaWFibGU0MzsKICAgICAgICB0eXBlNzYgdmFyaWFibGU0NSA9
IHN0YXRpY19jYXN0PHR5cGU3Nj4oMCk7CiAgICAgICAgdHlwZTc1IHZhcmlhYmxlNDY7CgogICAg
ICAgIHZhcmlhYmxlNDYgPSAodmFyaWFibGU0NSA8IHZhcmlhYmxlNS5sZW5ndGgpID8gICYodmFy
aWFibGU1LnBvaW50ZXJbdmFyaWFibGU0NV0pIDogbnVsbHB0cjsKCiAgICAgICAgdHlwZTY1IHZh
cmlhYmxlNDcgPSB2YXJpYWJsZTQ2ID8gKnZhcmlhYmxlNDYgOiB0eXBlNjV7IH07CiAgICAgICAg
dHlwZTY1IHZhcmlhYmxlNDQgPSB2YXJpYWJsZTQ3OwogICAgICAgIHR5cGU3MSB2YXJpYWJsZTQ4
ID0gc3RhdGljX2Nhc3Q8dHlwZTcxPigyKTsKICAgICAgICB0eXBlNzcgdmFyaWFibGU0OTsKCiAg
ICAgICAgdmFyaWFibGU0OSA9IHZhcmlhYmxlNDEgPj0gdmFyaWFibGU0ODsKCiAgICAgICAgdHlw
ZTc3IHZhcmlhYmxlNTA7CgogICAgICAgIHZhcmlhYmxlNTAgPSBzdGF0aWNfY2FzdDx0eXBlNzc+
KHZhcmlhYmxlNDkpOwoKICAgICAgICBpZiAodmFyaWFibGU1MCkgewogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdHlw
ZTc5IHZhcmlhYmxlNTI7CgogICAgICAgIHZhcmlhYmxlNTIgPSAodmFyaWFibGU0MSA8IHZhcmlh
YmxlNi5sZW5ndGgpID8gICYodmFyaWFibGU2LnBvaW50ZXJbdmFyaWFibGU0MV0pIDogbnVsbHB0
cjsKCiAgICAgICAgdHlwZTY3IHZhcmlhYmxlNTMgPSB2YXJpYWJsZTUyID8gKnZhcmlhYmxlNTIg
OiB0eXBlNjd7IH07CiAgICAgICAgdHlwZTc5IHZhcmlhYmxlNTQgPSB2YXJpYWJsZTUyOwogICAg
ICAgIHR5cGU3OCB2YXJpYWJsZTU1OwoKICAgICAgICB2YXJpYWJsZTU1ID0gdmFyaWFibGU1NCA/
ICYodmFyaWFibGU1NC0+c3RydWN0dXJlRWxlbWVudDApIDogbnVsbHB0cjsKCiAgICAgICAgdHlw
ZTE5IHZhcmlhYmxlNTYgPSB2YXJpYWJsZTU1ID8gKnZhcmlhYmxlNTUgOiB0eXBlMTl7IH07CiAg
ICAgICAgdHlwZTE5IHZhcmlhYmxlNTEgPSB2YXJpYWJsZTU2OwogICAgICAgIHR5cGU3OSB2YXJp
YWJsZTU4OwoKICAgICAgICB2YXJpYWJsZTU4ID0gKHZhcmlhYmxlNDEgPCB2YXJpYWJsZTYubGVu
Z3RoKSA/ICAmKHZhcmlhYmxlNi5wb2ludGVyW3ZhcmlhYmxlNDFdKSA6IG51bGxwdHI7CgogICAg
ICAgIHR5cGU2NyB2YXJpYWJsZTU5ID0gdmFyaWFibGU1OCA/ICp2YXJpYWJsZTU4IDogdHlwZTY3
eyB9OwogICAgICAgIHR5cGU3OSB2YXJpYWJsZTYwID0gdmFyaWFibGU1ODsKICAgICAgICB0eXBl
NzggdmFyaWFibGU2MTsKCiAgICAgICAgdmFyaWFibGU2MSA9IHZhcmlhYmxlNjAgPyAmKHZhcmlh
YmxlNjAtPnN0cnVjdHVyZUVsZW1lbnQxKSA6IG51bGxwdHI7CgogICAgICAgIHR5cGUxOSB2YXJp
YWJsZTYyID0gdmFyaWFibGU2MSA/ICp2YXJpYWJsZTYxIDogdHlwZTE5eyB9OwogICAgICAgIHR5
cGUxOSB2YXJpYWJsZTU3ID0gdmFyaWFibGU2MjsKICAgICAgICB0eXBlNjIgdmFyaWFibGU2NCA9
IHN0YXRpY19jYXN0PHR5cGU2Mj4oMCk7CiAgICAgICAgdHlwZTYyIHZhcmlhYmxlNjUgPSBzdGF0
aWNfY2FzdDx0eXBlNjI+KDApOwogICAgICAgIHR5cGUxOSB2YXJpYWJsZTY2OwoKICAgICAgICB2
YXJpYWJsZTY2ID0gdHlwZTE5KHZhcmlhYmxlNjQsIHZhcmlhYmxlNjUpOwoKICAgICAgICB0eXBl
MTkgdmFyaWFibGU2MyA9IHZhcmlhYmxlNjY7CiAgICAgICAgdHlwZTYyIHZhcmlhYmxlNjggPSBz
dGF0aWNfY2FzdDx0eXBlNjI+KDApOwogICAgICAgIHR5cGU2MiB2YXJpYWJsZTY5ID0gc3RhdGlj
X2Nhc3Q8dHlwZTYyPigwKTsKICAgICAgICB0eXBlMTkgdmFyaWFibGU3MDsKCiAgICAgICAgdmFy
aWFibGU3MCA9IHR5cGUxOSh2YXJpYWJsZTY4LCB2YXJpYWJsZTY5KTsKCiAgICAgICAgdHlwZTE5
IHZhcmlhYmxlNjcgPSB2YXJpYWJsZTcwOwogICAgICAgIHR5cGU2MiB2YXJpYWJsZTcyID0gc3Rh
dGljX2Nhc3Q8dHlwZTYyPigwKTsKICAgICAgICB0eXBlNjIgdmFyaWFibGU3MyA9IHN0YXRpY19j
YXN0PHR5cGU2Mj4oMCk7CiAgICAgICAgdHlwZTE5IHZhcmlhYmxlNzQ7CgogICAgICAgIHZhcmlh
YmxlNzQgPSB0eXBlMTkodmFyaWFibGU3MiwgdmFyaWFibGU3Myk7CgogICAgICAgIHR5cGUxOSB2
YXJpYWJsZTcxID0gdmFyaWFibGU3NDsKICAgICAgICB0eXBlNjIgdmFyaWFibGU3NiA9IHN0YXRp
Y19jYXN0PHR5cGU2Mj4oMCk7CiAgICAgICAgdHlwZTYyIHZhcmlhYmxlNzUgPSB2YXJpYWJsZTc2
OwogICAgICAgIHR5cGU2MiB2YXJpYWJsZTc4ID0gc3RhdGljX2Nhc3Q8dHlwZTYyPigwKTsKICAg
ICAgICB0eXBlNjIgdmFyaWFibGU3NyA9IHZhcmlhYmxlNzg7CiAgICAgICAgdHlwZTE5IHZhcmlh
YmxlNzkgPSB7IH07CiAgICAgICAgdHlwZTE5IHZhcmlhYmxlODAgPSB7IH07CiAgICAgICAgewog
ICAgICAgICAgICB0eXBlNzEgdmFyaWFibGU4MiA9IHN0YXRpY19jYXN0PHR5cGU3MT4oMCk7CiAg
ICAgICAgICAgIHR5cGU3MSB2YXJpYWJsZTgxID0gdmFyaWFibGU4MjsKICAgICAgICAgICAgYm9v
bCB2YXJpYWJsZTgzID0gZmFsc2U7CiAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAg
ICAgICAgICB0eXBlNzEgdmFyaWFibGU4NCA9IHN0YXRpY19jYXN0PHR5cGU3MT4oMik7CiAgICAg
ICAgICAgICAgICB0eXBlNzcgdmFyaWFibGU4NTsKCiAgICAgICAgICAgICAgICB2YXJpYWJsZTg1
ID0gdmFyaWFibGU4MSA8IHZhcmlhYmxlODQ7CgogICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJs
ZTg1KQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZG8gewogICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTc3IHZhcmlhYmxl
ODY7CgogICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZTg2ID0gdmFyaWFibGU4MSA9PSB2
YXJpYWJsZTQxOwoKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTc3IHZhcmlhYmxlODc7Cgog
ICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZTg3ID0gc3RhdGljX2Nhc3Q8dHlwZTc3Pih2
YXJpYWJsZTg2KTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZTg3KSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkIHR5cGUxOSogdmFyaWFibGU4
OCA9ICZ2YXJpYWJsZTc5OwogICAgICAgICAgICAgICAgICAgICAgICB0eXBlNzkgdmFyaWFibGU4
OTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlODkgPSAodmFyaWFibGU4MSA8IHZh
cmlhYmxlNi5sZW5ndGgpID8gICYodmFyaWFibGU2LnBvaW50ZXJbdmFyaWFibGU4MV0pIDogbnVs
bHB0cjsKCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU2NyB2YXJpYWJsZTkwID0gdmFyaWFi
bGU4OSA/ICp2YXJpYWJsZTg5IDogdHlwZTY3eyB9OwogICAgICAgICAgICAgICAgICAgICAgICB0
eXBlNzkgdmFyaWFibGU5MSA9IHZhcmlhYmxlODk7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGU3OCB2YXJpYWJsZTkyOwoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU5MiA9IHZh
cmlhYmxlOTEgPyAmKHZhcmlhYmxlOTEtPnN0cnVjdHVyZUVsZW1lbnQwKSA6IG51bGxwdHI7Cgog
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlMTkgdmFyaWFibGU5MyA9IHZhcmlhYmxlOTIgPyAq
dmFyaWFibGU5MiA6IHR5cGUxOXsgfTsKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTE5IHZh
cmlhYmxlOTQ7CgogICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZTk0ID0gdmFyaWFibGU5
My54eTsKCiAgICAgICAgICAgICAgICAgICAgICAgICp2YXJpYWJsZTg4ID0gdmFyaWFibGU5NDsK
ICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkIHR5cGUxOSogdmFyaWFibGU5NSA9ICZ2YXJp
YWJsZTgwOwogICAgICAgICAgICAgICAgICAgICAgICB0eXBlNzkgdmFyaWFibGU5NjsKCiAgICAg
ICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlOTYgPSAodmFyaWFibGU4MSA8IHZhcmlhYmxlNi5s
ZW5ndGgpID8gICYodmFyaWFibGU2LnBvaW50ZXJbdmFyaWFibGU4MV0pIDogbnVsbHB0cjsKCiAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGU2NyB2YXJpYWJsZTk3ID0gdmFyaWFibGU5NiA/ICp2
YXJpYWJsZTk2IDogdHlwZTY3eyB9OwogICAgICAgICAgICAgICAgICAgICAgICB0eXBlNzkgdmFy
aWFibGU5OCA9IHZhcmlhYmxlOTY7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU3OCB2YXJp
YWJsZTk5OwoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU5OSA9IHZhcmlhYmxlOTgg
PyAmKHZhcmlhYmxlOTgtPnN0cnVjdHVyZUVsZW1lbnQxKSA6IG51bGxwdHI7CgogICAgICAgICAg
ICAgICAgICAgICAgICB0eXBlMTkgdmFyaWFibGUxMDAgPSB2YXJpYWJsZTk5ID8gKnZhcmlhYmxl
OTkgOiB0eXBlMTl7IH07CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUxOSB2YXJpYWJsZTEw
MTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlMTAxID0gdmFyaWFibGUxMDAueHk7
CgogICAgICAgICAgICAgICAgICAgICAgICAqdmFyaWFibGU5NSA9IHZhcmlhYmxlMTAxOwogICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlNjIgdmFyaWFibGUxMDI7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHZhcmlhYmxlMTAyID0gZnVuY3Rpb24zKHZhcmlhYmxlNzksIHZhcmlhYmxlNTEpOwog
ICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWQgdHlwZTY1KiB2YXJpYWJsZTEwMyA9ICZ2YXJp
YWJsZTQ0OwogICAgICAgICAgICAgICAgICAgICAgICB0eXBlODAgdmFyaWFibGUxMDQgPSB2YXJp
YWJsZTEwMzsKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTc0IHZhcmlhYmxlMTA1OwoKICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUxMDUgPSB2YXJpYWJsZTEwNCA/ICYodmFyaWFi
bGUxMDQtPnN0cnVjdHVyZUVsZW1lbnQzKSA6IG51bGxwdHI7CgogICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlNjIgdmFyaWFibGUxMDYgPSB2YXJpYWJsZTEwNSA/ICp2YXJpYWJsZTEwNSA6IHR5
cGU2MnsgfTsKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTc3IHZhcmlhYmxlMTA3OwoKICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUxMDcgPSB2YXJpYWJsZTEwMiA8IHZhcmlhYmxl
MTA2OwoKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTc3IHZhcmlhYmxlMTA4OwoKICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyaWFibGUxMDggPSBzdGF0aWNfY2FzdDx0eXBlNzc+KHZhcmlh
YmxlMTA3KTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZTEwOCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRocmVhZCB0eXBlNzMqIHZhcmlhYmxlMTA5ID0gJnZhcmlhYmxlMTY7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhyZWFkIHR5cGUxOSogdmFyaWFibGUxMTAgPSAmdmFyaWFibGU2
MzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlNzMgdmFyaWFibGUxMTEgPSB2
YXJpYWJsZTExMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdmFyaWFibGUxMDkg
PSB2YXJpYWJsZTExMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWQgdHlw
ZTE5KiB2YXJpYWJsZTExMiA9ICZ2YXJpYWJsZTE3OwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGUxOSB2YXJpYWJsZTExMyA9IHZhcmlhYmxlMTYgPyAqdmFyaWFibGUxNiA6IHR5
cGUxOXsgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdmFyaWFibGUxMTIgPSB2
YXJpYWJsZTExMzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWQgdHlwZTE5
KiB2YXJpYWJsZTExNCA9ICZ2YXJpYWJsZTE4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGUxOSB2YXJpYWJsZTExNTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyaWFibGUxMTUgPSB2YXJpYWJsZTE3ICsgdmFyaWFibGU3OTsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKnZhcmlhYmxlMTE0ID0gdmFyaWFibGUxMTU7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZTE5IHZhcmlhYmxlMTE2ID0gdmFyaWFibGUxNiA/ICp2YXJp
YWJsZTE2IDogdHlwZTE5eyB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2
YXJpYWJsZTE2KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdmFyaWFibGUx
NiA9IHZhcmlhYmxlMTg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkIHR5
cGU3NCogdmFyaWFibGUxMTcgPSAmdmFyaWFibGUxOTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aHJlYWQgdHlwZTYyKiB2YXJpYWJsZTExOCA9ICZ2YXJpYWJsZTc1OwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU3NCB2YXJpYWJsZTExOSA9IHZhcmlhYmxlMTE4
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp2YXJpYWJsZTExNyA9IHZhcmlhYmxl
MTE5OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZCB0eXBlNjIqIHZhcmlh
YmxlMTIwID0gJnZhcmlhYmxlMjA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZTYyIHZhcmlhYmxlMTIxID0gdmFyaWFibGUxOSA/ICp2YXJpYWJsZTE5IDogdHlwZTYyeyB9Owog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp2YXJpYWJsZTEyMCA9IHZhcmlhYmxlMTIx
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZCB0eXBlNjIqIHZhcmlhYmxl
MTIyID0gJnZhcmlhYmxlMjE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTYy
IHZhcmlhYmxlMTIzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlMTIz
ID0gZnVuY3Rpb24yKHZhcmlhYmxlMjApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICp2YXJpYWJsZTEyMiA9IHZhcmlhYmxlMTIzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGU2MiB2YXJpYWJsZTEyNCA9IHZhcmlhYmxlMTkgPyAqdmFyaWFibGUxOSA6IHR5cGU2
MnsgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUxOSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnZhcmlhYmxlMTkgPSB2YXJpYWJsZTIx
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU2MiB2YXJpYWJsZTEyNTsKICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyaWFibGUxMjUgPSBmdW5jdGlvbjModmFyaWFibGU3OSwgdmFyaWFibGU1
MSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZCB0eXBlNjUqIHZhcmlhYmxlMTI2ID0g
JnZhcmlhYmxlNDQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU4MCB2YXJpYWJsZTEyNyA9
IHZhcmlhYmxlMTI2OwogICAgICAgICAgICAgICAgICAgICAgICB0eXBlNzQgdmFyaWFibGUxMjg7
CgogICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZTEyOCA9IHZhcmlhYmxlMTI3ID8gJih2
YXJpYWJsZTEyNy0+c3RydWN0dXJlRWxlbWVudDQpIDogbnVsbHB0cjsKCiAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGU2MiB2YXJpYWJsZTEyOSA9IHZhcmlhYmxlMTI4ID8gKnZhcmlhYmxlMTI4
IDogdHlwZTYyeyB9OwogICAgICAgICAgICAgICAgICAgICAgICB0eXBlNzcgdmFyaWFibGUxMzA7
CgogICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZTEzMCA9IHZhcmlhYmxlMTI1IDwgdmFy
aWFibGUxMjk7CgogICAgICAgICAgICAgICAgICAgICAgICB0eXBlNzcgdmFyaWFibGUxMzE7Cgog
ICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZTEzMSA9IHN0YXRpY19jYXN0PHR5cGU3Nz4o
dmFyaWFibGUxMzApOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlMTMxKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhyZWFkIHR5cGU3MyogdmFyaWFibGUxMzIgPSAmdmFyaWFibGUyMjsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWQgdHlwZTE5KiB2YXJpYWJsZTEzMyA9ICZ2YXJp
YWJsZTcxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU3MyB2YXJpYWJsZTEz
NCA9IHZhcmlhYmxlMTMzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp2YXJpYWJs
ZTEzMiA9IHZhcmlhYmxlMTM0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVh
ZCB0eXBlMTkqIHZhcmlhYmxlMTM1ID0gJnZhcmlhYmxlMjM7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZTE5IHZhcmlhYmxlMTM2ID0gdmFyaWFibGUyMiA/ICp2YXJpYWJsZTIy
IDogdHlwZTE5eyB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp2YXJpYWJsZTEz
NSA9IHZhcmlhYmxlMTM2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZCB0
eXBlMTkqIHZhcmlhYmxlMTM3ID0gJnZhcmlhYmxlMjQ7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZTE5IHZhcmlhYmxlMTM4OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXJpYWJsZTEzOCA9IHZhcmlhYmxlNzkgLSB2YXJpYWJsZTUxOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlMTkgdmFyaWFibGUxMzk7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhcmlhYmxlMTM5ID0gdmFyaWFibGUyMyAtIHZhcmlhYmxlMTM4OwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdmFyaWFibGUxMzcgPSB2YXJpYWJsZTEz
OTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlMTkgdmFyaWFibGUxNDAgPSB2
YXJpYWJsZTIyID8gKnZhcmlhYmxlMjIgOiB0eXBlMTl7IH07CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHZhcmlhYmxlMjIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICp2YXJpYWJsZTIyID0gdmFyaWFibGUyNDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0
eXBlNjIgdmFyaWFibGUxNDE7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlMTQxID0g
ZnVuY3Rpb24zKHZhcmlhYmxlNzksIHZhcmlhYmxlNTEpOwogICAgICAgICAgICAgICAgICAgICAg
ICB0aHJlYWQgdHlwZTY1KiB2YXJpYWJsZTE0MiA9ICZ2YXJpYWJsZTQ0OwogICAgICAgICAgICAg
ICAgICAgICAgICB0eXBlODAgdmFyaWFibGUxNDMgPSB2YXJpYWJsZTE0MjsKICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZTc0IHZhcmlhYmxlMTQ0OwoKICAgICAgICAgICAgICAgICAgICAgICAg
dmFyaWFibGUxNDQgPSB2YXJpYWJsZTE0MyA/ICYodmFyaWFibGUxNDMtPnN0cnVjdHVyZUVsZW1l
bnQ1KSA6IG51bGxwdHI7CgogICAgICAgICAgICAgICAgICAgICAgICB0eXBlNjIgdmFyaWFibGUx
NDUgPSB2YXJpYWJsZTE0NCA/ICp2YXJpYWJsZTE0NCA6IHR5cGU2MnsgfTsKICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZTc3IHZhcmlhYmxlMTQ2OwoKICAgICAgICAgICAgICAgICAgICAgICAg
dmFyaWFibGUxNDYgPSB2YXJpYWJsZTE0MSA8IHZhcmlhYmxlMTQ1OwoKICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZTc3IHZhcmlhYmxlMTQ3OwoKICAgICAgICAgICAgICAgICAgICAgICAgdmFy
aWFibGUxNDcgPSBzdGF0aWNfY2FzdDx0eXBlNzc+KHZhcmlhYmxlMTQ2KTsKCiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh2YXJpYWJsZTE0NykgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZCB0eXBlNzMqIHZhcmlh
YmxlMTQ4ID0gJnZhcmlhYmxlMjU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhy
ZWFkIHR5cGUxOSogdmFyaWFibGUxNDkgPSAmdmFyaWFibGU2NzsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0eXBlNzMgdmFyaWFibGUxNTAgPSB2YXJpYWJsZTE0OTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqdmFyaWFibGUxNDggPSB2YXJpYWJsZTE1MDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWQgdHlwZTE5KiB2YXJpYWJsZTE1MSA9ICZ2
YXJpYWJsZTI2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUxOSB2YXJpYWJs
ZTE1MiA9IHZhcmlhYmxlMjUgPyAqdmFyaWFibGUyNSA6IHR5cGUxOXsgfTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqdmFyaWFibGUxNTEgPSB2YXJpYWJsZTE1MjsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWQgdHlwZTE5KiB2YXJpYWJsZTE1MyA9ICZ2YXJp
YWJsZTI3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUxOSB2YXJpYWJsZTE1
NDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUxNTQgPSB2YXJpYWJs
ZTI2ICsgdmFyaWFibGU4MDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnZhcmlh
YmxlMTUzID0gdmFyaWFibGUxNTQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZTE5IHZhcmlhYmxlMTU1ID0gdmFyaWFibGUyNSA/ICp2YXJpYWJsZTI1IDogdHlwZTE5eyB9Owog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZTI1KQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqdmFyaWFibGUyNSA9IHZhcmlhYmxlMjc7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkIHR5cGU3NCogdmFyaWFibGUxNTYgPSAm
dmFyaWFibGUyODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWQgdHlwZTYy
KiB2YXJpYWJsZTE1NyA9ICZ2YXJpYWJsZTc3OwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGU3NCB2YXJpYWJsZTE1OCA9IHZhcmlhYmxlMTU3OwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICp2YXJpYWJsZTE1NiA9IHZhcmlhYmxlMTU4OwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRocmVhZCB0eXBlNjIqIHZhcmlhYmxlMTU5ID0gJnZhcmlhYmxlMjk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTYyIHZhcmlhYmxlMTYwID0gdmFy
aWFibGUyOCA/ICp2YXJpYWJsZTI4IDogdHlwZTYyeyB9OwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICp2YXJpYWJsZTE1OSA9IHZhcmlhYmxlMTYwOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRocmVhZCB0eXBlNjIqIHZhcmlhYmxlMTYxID0gJnZhcmlhYmxlMzA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTYyIHZhcmlhYmxlMTYyOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlMTYyID0gZnVuY3Rpb24yKHZhcmlhYmxl
MjkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp2YXJpYWJsZTE2MSA9IHZhcmlh
YmxlMTYyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU2MiB2YXJpYWJsZTE2
MyA9IHZhcmlhYmxlMjggPyAqdmFyaWFibGUyOCA6IHR5cGU2MnsgfTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUyOCkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKnZhcmlhYmxlMjggPSB2YXJpYWJsZTMwOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgfSB3aGlsZShmYWxzZSk7IAogICAgICAgICAgICAgICAgaWYgKHZh
cmlhYmxlODMpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB0aHJl
YWQgdHlwZTcyKiB2YXJpYWJsZTE2NCA9ICZ2YXJpYWJsZTEzOwogICAgICAgICAgICAgICAgdGhy
ZWFkIHR5cGU3MSogdmFyaWFibGUxNjUgPSAmdmFyaWFibGU4MTsKICAgICAgICAgICAgICAgIHR5
cGU3MiB2YXJpYWJsZTE2NiA9IHZhcmlhYmxlMTY1OwogICAgICAgICAgICAgICAgKnZhcmlhYmxl
MTY0ID0gdmFyaWFibGUxNjY7CiAgICAgICAgICAgICAgICB0aHJlYWQgdHlwZTcxKiB2YXJpYWJs
ZTE2NyA9ICZ2YXJpYWJsZTE0OwogICAgICAgICAgICAgICAgdHlwZTcxIHZhcmlhYmxlMTY4ID0g
dmFyaWFibGUxMyA/ICp2YXJpYWJsZTEzIDogdHlwZTcxeyB9OwogICAgICAgICAgICAgICAgKnZh
cmlhYmxlMTY3ID0gdmFyaWFibGUxNjg7CiAgICAgICAgICAgICAgICB0aHJlYWQgdHlwZTcxKiB2
YXJpYWJsZTE2OSA9ICZ2YXJpYWJsZTE1OwogICAgICAgICAgICAgICAgdHlwZTcxIHZhcmlhYmxl
MTcwOwogICAgICAgICAgICAgICAgdmFyaWFibGUxNzAgPSBmdW5jdGlvbjEodmFyaWFibGUxNCk7
CiAgICAgICAgICAgICAgICAqdmFyaWFibGUxNjkgPSB2YXJpYWJsZTE3MDsKICAgICAgICAgICAg
ICAgIHR5cGU3MSB2YXJpYWJsZTE3MSA9IHZhcmlhYmxlMTMgPyAqdmFyaWFibGUxMyA6IHR5cGU3
MXsgfTsKICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZTEzKQogICAgICAgICAgICAgICAgICAg
ICp2YXJpYWJsZTEzID0gdmFyaWFibGUxNTsKICAgICAgICAgICAgfSAKICAgICAgICB9CiAgICAg
ICAgdHlwZTYyIHZhcmlhYmxlMTcyID0gc3RhdGljX2Nhc3Q8dHlwZTYyPigwKTsKICAgICAgICB0
eXBlNzcgdmFyaWFibGUxNzM7CgogICAgICAgIHZhcmlhYmxlMTczID0gdmFyaWFibGU3NSA+IHZh
cmlhYmxlMTcyOwoKICAgICAgICB0eXBlNzcgdmFyaWFibGUxNzQ7CgogICAgICAgIHZhcmlhYmxl
MTc0ID0gc3RhdGljX2Nhc3Q8dHlwZTc3Pih2YXJpYWJsZTE3Myk7CgogICAgICAgIGlmICh2YXJp
YWJsZTE3NCkgewogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aHJlYWQgdHlwZTE5KiB2
YXJpYWJsZTE3NSA9ICZ2YXJpYWJsZTYzOwogICAgICAgICAgICAgICAgdHlwZTE5IHZhcmlhYmxl
MTc2OwoKICAgICAgICAgICAgICAgIHZhcmlhYmxlMTc2ID0gdmFyaWFibGU2MyAvIHZhcmlhYmxl
NzU7CgogICAgICAgICAgICAgICAgdHlwZTE5IHZhcmlhYmxlMTc3OwoKICAgICAgICAgICAgICAg
IHZhcmlhYmxlMTc3ID0gdmFyaWFibGUxNzYgLSB2YXJpYWJsZTUxOwoKICAgICAgICAgICAgICAg
ICp2YXJpYWJsZTE3NSA9IHZhcmlhYmxlMTc3OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICAgIHR5cGU2MiB2YXJpYWJsZTE3OCA9IHN0YXRpY19jYXN0PHR5cGU2Mj4oMCk7CiAgICAgICAg
dHlwZTc3IHZhcmlhYmxlMTc5OwoKICAgICAgICB2YXJpYWJsZTE3OSA9IHZhcmlhYmxlNzcgPiB2
YXJpYWJsZTE3ODsKCiAgICAgICAgdHlwZTc3IHZhcmlhYmxlMTgwOwoKICAgICAgICB2YXJpYWJs
ZTE4MCA9IHN0YXRpY19jYXN0PHR5cGU3Nz4odmFyaWFibGUxNzkpOwoKICAgICAgICBpZiAodmFy
aWFibGUxODApIHsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhyZWFkIHR5cGUxOSog
dmFyaWFibGUxODEgPSAmdmFyaWFibGU2NzsKICAgICAgICAgICAgICAgIHR5cGUxOSB2YXJpYWJs
ZTE4MjsKCiAgICAgICAgICAgICAgICB2YXJpYWJsZTE4MiA9IHZhcmlhYmxlNjcgLyB2YXJpYWJs
ZTc3OwoKICAgICAgICAgICAgICAgICp2YXJpYWJsZTE4MSA9IHZhcmlhYmxlMTgyOwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICAgIHRocmVhZCB0eXBlNzMqIHZhcmlhYmxlMTgzID0gJnZh
cmlhYmxlMzE7CiAgICAgICAgdGhyZWFkIHR5cGUxOSogdmFyaWFibGUxODQgPSAmdmFyaWFibGU1
NzsKICAgICAgICB0eXBlNzMgdmFyaWFibGUxODUgPSB2YXJpYWJsZTE4NDsKICAgICAgICAqdmFy
aWFibGUxODMgPSB2YXJpYWJsZTE4NTsKICAgICAgICB0aHJlYWQgdHlwZTE5KiB2YXJpYWJsZTE4
NiA9ICZ2YXJpYWJsZTMyOwogICAgICAgIHR5cGUxOSB2YXJpYWJsZTE4NyA9IHZhcmlhYmxlMzEg
PyAqdmFyaWFibGUzMSA6IHR5cGUxOXsgfTsKICAgICAgICAqdmFyaWFibGUxODYgPSB2YXJpYWJs
ZTE4NzsKICAgICAgICB0aHJlYWQgdHlwZTE5KiB2YXJpYWJsZTE4OCA9ICZ2YXJpYWJsZTMzOwog
ICAgICAgIHRocmVhZCB0eXBlNjUqIHZhcmlhYmxlMTg5ID0gJnZhcmlhYmxlNDQ7CiAgICAgICAg
dHlwZTgwIHZhcmlhYmxlMTkwID0gdmFyaWFibGUxODk7CiAgICAgICAgdHlwZTc0IHZhcmlhYmxl
MTkxOwoKICAgICAgICB2YXJpYWJsZTE5MSA9IHZhcmlhYmxlMTkwID8gJih2YXJpYWJsZTE5MC0+
c3RydWN0dXJlRWxlbWVudDYpIDogbnVsbHB0cjsKCiAgICAgICAgdHlwZTYyIHZhcmlhYmxlMTky
ID0gdmFyaWFibGUxOTEgPyAqdmFyaWFibGUxOTEgOiB0eXBlNjJ7IH07CiAgICAgICAgdHlwZTE5
IHZhcmlhYmxlMTkzOwoKICAgICAgICB2YXJpYWJsZTE5MyA9IHZhcmlhYmxlNjMgKiB2YXJpYWJs
ZTE5MjsKCiAgICAgICAgdGhyZWFkIHR5cGU2NSogdmFyaWFibGUxOTQgPSAmdmFyaWFibGU0NDsK
ICAgICAgICB0eXBlODAgdmFyaWFibGUxOTUgPSB2YXJpYWJsZTE5NDsKICAgICAgICB0eXBlNzQg
dmFyaWFibGUxOTY7CgogICAgICAgIHZhcmlhYmxlMTk2ID0gdmFyaWFibGUxOTUgPyAmKHZhcmlh
YmxlMTk1LT5zdHJ1Y3R1cmVFbGVtZW50NykgOiBudWxscHRyOwoKICAgICAgICB0eXBlNjIgdmFy
aWFibGUxOTcgPSB2YXJpYWJsZTE5NiA/ICp2YXJpYWJsZTE5NiA6IHR5cGU2MnsgfTsKICAgICAg
ICB0eXBlMTkgdmFyaWFibGUxOTg7CgogICAgICAgIHZhcmlhYmxlMTk4ID0gdmFyaWFibGU3MSAq
IHZhcmlhYmxlMTk3OwoKICAgICAgICB0eXBlMTkgdmFyaWFibGUxOTk7CgogICAgICAgIHZhcmlh
YmxlMTk5ID0gdmFyaWFibGUxOTMgKyB2YXJpYWJsZTE5ODsKCiAgICAgICAgdGhyZWFkIHR5cGU2
NSogdmFyaWFibGUyMDAgPSAmdmFyaWFibGU0NDsKICAgICAgICB0eXBlODAgdmFyaWFibGUyMDEg
PSB2YXJpYWJsZTIwMDsKICAgICAgICB0eXBlNzQgdmFyaWFibGUyMDI7CgogICAgICAgIHZhcmlh
YmxlMjAyID0gdmFyaWFibGUyMDEgPyAmKHZhcmlhYmxlMjAxLT5zdHJ1Y3R1cmVFbGVtZW50OCkg
OiBudWxscHRyOwoKICAgICAgICB0eXBlNjIgdmFyaWFibGUyMDMgPSB2YXJpYWJsZTIwMiA/ICp2
YXJpYWJsZTIwMiA6IHR5cGU2MnsgfTsKICAgICAgICB0eXBlMTkgdmFyaWFibGUyMDQ7CgogICAg
ICAgIHZhcmlhYmxlMjA0ID0gdmFyaWFibGU2NyAqIHZhcmlhYmxlMjAzOwoKICAgICAgICB0eXBl
MTkgdmFyaWFibGUyMDU7CgogICAgICAgIHZhcmlhYmxlMjA1ID0gdmFyaWFibGUxOTkgKyB2YXJp
YWJsZTIwNDsKCiAgICAgICAgdHlwZTE5IHZhcmlhYmxlMjA2OwoKICAgICAgICB2YXJpYWJsZTIw
NiA9IHZhcmlhYmxlMzIgKyB2YXJpYWJsZTIwNTsKCiAgICAgICAgKnZhcmlhYmxlMTg4ID0gdmFy
aWFibGUyMDY7CiAgICAgICAgdHlwZTE5IHZhcmlhYmxlMjA3ID0gdmFyaWFibGUzMSA/ICp2YXJp
YWJsZTMxIDogdHlwZTE5eyB9OwogICAgICAgIGlmICh2YXJpYWJsZTMxKQogICAgICAgICAgICAq
dmFyaWFibGUzMSA9IHZhcmlhYmxlMzM7CiAgICAgICAgdGhyZWFkIHR5cGUxOSogdmFyaWFibGUy
MDggPSAmdmFyaWFibGU1NzsKICAgICAgICB0eXBlMTkgdmFyaWFibGUyMDk7CiAgICAgICAgdmFy
aWFibGUyMDkgPSBmdW5jdGlvbjQodmFyaWFibGU1Nyk7CiAgICAgICAgdHlwZTYyIHZhcmlhYmxl
MjEwOwoKICAgICAgICB2YXJpYWJsZTIxMCA9IGxlbmd0aCh2YXJpYWJsZTU3KTsKCiAgICAgICAg
dHlwZTYyIHZhcmlhYmxlMjExID0gc3RhdGljX2Nhc3Q8dHlwZTYyPigwKTsKICAgICAgICB0eXBl
NjIgdmFyaWFibGUyMTIgPSBzdGF0aWNfY2FzdDx0eXBlNjI+KDAuMSk7CiAgICAgICAgdHlwZTYy
IHZhcmlhYmxlMjEzOwoKICAgICAgICB2YXJpYWJsZTIxMyA9IGNsYW1wKHZhcmlhYmxlMjEwLCB2
YXJpYWJsZTIxMSwgdmFyaWFibGUyMTIpOwoKICAgICAgICB0eXBlMTkgdmFyaWFibGUyMTQ7Cgog
ICAgICAgIHZhcmlhYmxlMjE0ID0gdmFyaWFibGUyMDkgKiB2YXJpYWJsZTIxMzsKCiAgICAgICAg
KnZhcmlhYmxlMjA4ID0gdmFyaWFibGUyMTQ7CiAgICAgICAgdGhyZWFkIHR5cGU3MyogdmFyaWFi
bGUyMTUgPSAmdmFyaWFibGUzNDsKICAgICAgICB0aHJlYWQgdHlwZTE5KiB2YXJpYWJsZTIxNiA9
ICZ2YXJpYWJsZTUxOwogICAgICAgIHR5cGU3MyB2YXJpYWJsZTIxNyA9IHZhcmlhYmxlMjE2Owog
ICAgICAgICp2YXJpYWJsZTIxNSA9IHZhcmlhYmxlMjE3OwogICAgICAgIHRocmVhZCB0eXBlMTkq
IHZhcmlhYmxlMjE4ID0gJnZhcmlhYmxlMzU7CiAgICAgICAgdHlwZTE5IHZhcmlhYmxlMjE5ID0g
dmFyaWFibGUzNCA/ICp2YXJpYWJsZTM0IDogdHlwZTE5eyB9OwogICAgICAgICp2YXJpYWJsZTIx
OCA9IHZhcmlhYmxlMjE5OwogICAgICAgIHRocmVhZCB0eXBlMTkqIHZhcmlhYmxlMjIwID0gJnZh
cmlhYmxlMzY7CiAgICAgICAgdGhyZWFkIHR5cGU2NSogdmFyaWFibGUyMjEgPSAmdmFyaWFibGU0
NDsKICAgICAgICB0eXBlODAgdmFyaWFibGUyMjIgPSB2YXJpYWJsZTIyMTsKICAgICAgICB0eXBl
NzQgdmFyaWFibGUyMjM7CgogICAgICAgIHZhcmlhYmxlMjIzID0gdmFyaWFibGUyMjIgPyAmKHZh
cmlhYmxlMjIyLT5zdHJ1Y3R1cmVFbGVtZW50MikgOiBudWxscHRyOwoKICAgICAgICB0eXBlNjIg
dmFyaWFibGUyMjQgPSB2YXJpYWJsZTIyMyA/ICp2YXJpYWJsZTIyMyA6IHR5cGU2MnsgfTsKICAg
ICAgICB0eXBlMTkgdmFyaWFibGUyMjU7CgogICAgICAgIHZhcmlhYmxlMjI1ID0gdmFyaWFibGU1
NyAqIHZhcmlhYmxlMjI0OwoKICAgICAgICB0eXBlMTkgdmFyaWFibGUyMjY7CgogICAgICAgIHZh
cmlhYmxlMjI2ID0gdmFyaWFibGUzNSArIHZhcmlhYmxlMjI1OwoKICAgICAgICAqdmFyaWFibGUy
MjAgPSB2YXJpYWJsZTIyNjsKICAgICAgICB0eXBlMTkgdmFyaWFibGUyMjcgPSB2YXJpYWJsZTM0
ID8gKnZhcmlhYmxlMzQgOiB0eXBlMTl7IH07CiAgICAgICAgaWYgKHZhcmlhYmxlMzQpCiAgICAg
ICAgICAgICp2YXJpYWJsZTM0ID0gdmFyaWFibGUzNjsKICAgICAgICB0eXBlNjIgdmFyaWFibGUy
Mjg7CgogICAgICAgIHZhcmlhYmxlMjI4ID0gdmFyaWFibGU1MS54OwoKICAgICAgICB0eXBlNjIg
dmFyaWFibGUyMjkgPSBzdGF0aWNfY2FzdDx0eXBlNjI+KC0xKTsKICAgICAgICB0eXBlNzcgdmFy
aWFibGUyMzA7CgogICAgICAgIHZhcmlhYmxlMjMwID0gdmFyaWFibGUyMjggPCB2YXJpYWJsZTIy
OTsKCiAgICAgICAgdHlwZTc3IHZhcmlhYmxlMjMxOwoKICAgICAgICB2YXJpYWJsZTIzMSA9IHN0
YXRpY19jYXN0PHR5cGU3Nz4odmFyaWFibGUyMzApOwoKICAgICAgICBpZiAodmFyaWFibGUyMzEp
IHsKICAgICAgICAgICAgdGhyZWFkIHR5cGU3MyogdmFyaWFibGUyMzIgPSAmdmFyaWFibGUzNzsK
ICAgICAgICAgICAgdGhyZWFkIHR5cGUxOSogdmFyaWFibGUyMzMgPSAmdmFyaWFibGU1MTsKICAg
ICAgICAgICAgdHlwZTczIHZhcmlhYmxlMjM0ID0gdmFyaWFibGUyMzM7CiAgICAgICAgICAgICp2
YXJpYWJsZTIzMiA9IHZhcmlhYmxlMjM0OwogICAgICAgICAgICB0eXBlMTkgdmFyaWFibGUyMzUg
PSB2YXJpYWJsZTM3ID8gKnZhcmlhYmxlMzcgOiB0eXBlMTl7IH07CiAgICAgICAgICAgIHR5cGUx
OSB2YXJpYWJsZTIzNiA9IHZhcmlhYmxlMzcgPyAqdmFyaWFibGUzNyA6IHR5cGUxOXsgfTsKICAg
ICAgICAgICAgdHlwZTYyIHZhcmlhYmxlMjM3ID0gc3RhdGljX2Nhc3Q8dHlwZTYyPigxKTsKICAg
ICAgICAgICAgdHlwZTE5IHZhcmlhYmxlMjM4OwoKICAgICAgICAgICAgdmFyaWFibGUyMzggPSB2
YXJpYWJsZTIzNjsKICAgICAgICAgICAgdmFyaWFibGUyMzgueCA9IHZhcmlhYmxlMjM3OwoKICAg
ICAgICAgICAgaWYgKHZhcmlhYmxlMzcpCiAgICAgICAgICAgICAgICAqdmFyaWFibGUzNyA9IHZh
cmlhYmxlMjM4OwogICAgICAgIH0KICAgICAgICB0eXBlNjIgdmFyaWFibGUyMzk7CgogICAgICAg
IHZhcmlhYmxlMjM5ID0gdmFyaWFibGU1MS54OwoKICAgICAgICB0eXBlNjIgdmFyaWFibGUyNDAg
PSBzdGF0aWNfY2FzdDx0eXBlNjI+KDEpOwogICAgICAgIHR5cGU3NyB2YXJpYWJsZTI0MTsKCiAg
ICAgICAgdmFyaWFibGUyNDEgPSB2YXJpYWJsZTIzOSA+IHZhcmlhYmxlMjQwOwoKICAgICAgICB0
eXBlNzcgdmFyaWFibGUyNDI7CgogICAgICAgIHZhcmlhYmxlMjQyID0gc3RhdGljX2Nhc3Q8dHlw
ZTc3Pih2YXJpYWJsZTI0MSk7CgogICAgICAgIGlmICh2YXJpYWJsZTI0MikgewogICAgICAgICAg
ICB0aHJlYWQgdHlwZTczKiB2YXJpYWJsZTI0MyA9ICZ2YXJpYWJsZTM4OwogICAgICAgICAgICB0
aHJlYWQgdHlwZTE5KiB2YXJpYWJsZTI0NCA9ICZ2YXJpYWJsZTUxOwogICAgICAgICAgICB0eXBl
NzMgdmFyaWFibGUyNDUgPSB2YXJpYWJsZTI0NDsKICAgICAgICAgICAgKnZhcmlhYmxlMjQzID0g
dmFyaWFibGUyNDU7CiAgICAgICAgICAgIHR5cGUxOSB2YXJpYWJsZTI0NiA9IHZhcmlhYmxlMzgg
PyAqdmFyaWFibGUzOCA6IHR5cGUxOXsgfTsKICAgICAgICAgICAgdHlwZTE5IHZhcmlhYmxlMjQ3
ID0gdmFyaWFibGUzOCA/ICp2YXJpYWJsZTM4IDogdHlwZTE5eyB9OwogICAgICAgICAgICB0eXBl
NjIgdmFyaWFibGUyNDggPSBzdGF0aWNfY2FzdDx0eXBlNjI+KC0xKTsKICAgICAgICAgICAgdHlw
ZTE5IHZhcmlhYmxlMjQ5OwoKICAgICAgICAgICAgdmFyaWFibGUyNDkgPSB2YXJpYWJsZTI0NzsK
ICAgICAgICAgICAgdmFyaWFibGUyNDkueCA9IHZhcmlhYmxlMjQ4OwoKICAgICAgICAgICAgaWYg
KHZhcmlhYmxlMzgpCiAgICAgICAgICAgICAgICAqdmFyaWFibGUzOCA9IHZhcmlhYmxlMjQ5Owog
ICAgICAgIH0KICAgICAgICB0eXBlNjIgdmFyaWFibGUyNTA7CgogICAgICAgIHZhcmlhYmxlMjUw
ID0gdmFyaWFibGU1MS55OwoKICAgICAgICB0eXBlNjIgdmFyaWFibGUyNTEgPSBzdGF0aWNfY2Fz
dDx0eXBlNjI+KC0xKTsKICAgICAgICB0eXBlNzcgdmFyaWFibGUyNTI7CgogICAgICAgIHZhcmlh
YmxlMjUyID0gdmFyaWFibGUyNTAgPCB2YXJpYWJsZTI1MTsKCiAgICAgICAgdHlwZTc3IHZhcmlh
YmxlMjUzOwoKICAgICAgICB2YXJpYWJsZTI1MyA9IHN0YXRpY19jYXN0PHR5cGU3Nz4odmFyaWFi
bGUyNTIpOwoKICAgICAgICBpZiAodmFyaWFibGUyNTMpIHsKICAgICAgICAgICAgdGhyZWFkIHR5
cGU3MyogdmFyaWFibGUyNTQgPSAmdmFyaWFibGUzOTsKICAgICAgICAgICAgdGhyZWFkIHR5cGUx
OSogdmFyaWFibGUyNTUgPSAmdmFyaWFibGU1MTsKICAgICAgICAgICAgdHlwZTczIHZhcmlhYmxl
MjU2ID0gdmFyaWFibGUyNTU7CiAgICAgICAgICAgICp2YXJpYWJsZTI1NCA9IHZhcmlhYmxlMjU2
OwogICAgICAgICAgICB0eXBlMTkgdmFyaWFibGUyNTcgPSB2YXJpYWJsZTM5ID8gKnZhcmlhYmxl
MzkgOiB0eXBlMTl7IH07CiAgICAgICAgICAgIHR5cGUxOSB2YXJpYWJsZTI1OCA9IHZhcmlhYmxl
MzkgPyAqdmFyaWFibGUzOSA6IHR5cGUxOXsgfTsKICAgICAgICAgICAgdHlwZTYyIHZhcmlhYmxl
MjU5ID0gc3RhdGljX2Nhc3Q8dHlwZTYyPigxKTsKICAgICAgICAgICAgdHlwZTE5IHZhcmlhYmxl
MjYwOwoKICAgICAgICAgICAgdmFyaWFibGUyNjAgPSB2YXJpYWJsZTI1ODsKICAgICAgICAgICAg
dmFyaWFibGUyNjAueSA9IHZhcmlhYmxlMjU5OwoKICAgICAgICAgICAgaWYgKHZhcmlhYmxlMzkp
CiAgICAgICAgICAgICAgICAqdmFyaWFibGUzOSA9IHZhcmlhYmxlMjYwOwogICAgICAgIH0KICAg
ICAgICB0eXBlNjIgdmFyaWFibGUyNjE7CgogICAgICAgIHZhcmlhYmxlMjYxID0gdmFyaWFibGU1
MS55OwoKICAgICAgICB0eXBlNjIgdmFyaWFibGUyNjIgPSBzdGF0aWNfY2FzdDx0eXBlNjI+KDEp
OwogICAgICAgIHR5cGU3NyB2YXJpYWJsZTI2MzsKCiAgICAgICAgdmFyaWFibGUyNjMgPSB2YXJp
YWJsZTI2MSA+IHZhcmlhYmxlMjYyOwoKICAgICAgICB0eXBlNzcgdmFyaWFibGUyNjQ7CgogICAg
ICAgIHZhcmlhYmxlMjY0ID0gc3RhdGljX2Nhc3Q8dHlwZTc3Pih2YXJpYWJsZTI2Myk7CgogICAg
ICAgIGlmICh2YXJpYWJsZTI2NCkgewogICAgICAgICAgICB0aHJlYWQgdHlwZTczKiB2YXJpYWJs
ZTI2NSA9ICZ2YXJpYWJsZTQwOwogICAgICAgICAgICB0aHJlYWQgdHlwZTE5KiB2YXJpYWJsZTI2
NiA9ICZ2YXJpYWJsZTUxOwogICAgICAgICAgICB0eXBlNzMgdmFyaWFibGUyNjcgPSB2YXJpYWJs
ZTI2NjsKICAgICAgICAgICAgKnZhcmlhYmxlMjY1ID0gdmFyaWFibGUyNjc7CiAgICAgICAgICAg
IHR5cGUxOSB2YXJpYWJsZTI2OCA9IHZhcmlhYmxlNDAgPyAqdmFyaWFibGU0MCA6IHR5cGUxOXsg
fTsKICAgICAgICAgICAgdHlwZTE5IHZhcmlhYmxlMjY5ID0gdmFyaWFibGU0MCA/ICp2YXJpYWJs
ZTQwIDogdHlwZTE5eyB9OwogICAgICAgICAgICB0eXBlNjIgdmFyaWFibGUyNzAgPSBzdGF0aWNf
Y2FzdDx0eXBlNjI+KC0xKTsKICAgICAgICAgICAgdHlwZTE5IHZhcmlhYmxlMjcxOwoKICAgICAg
ICAgICAgdmFyaWFibGUyNzEgPSB2YXJpYWJsZTI2OTsKICAgICAgICAgICAgdmFyaWFibGUyNzEu
eSA9IHZhcmlhYmxlMjcwOwoKICAgICAgICAgICAgaWYgKHZhcmlhYmxlNDApCiAgICAgICAgICAg
ICAgICAqdmFyaWFibGU0MCA9IHZhcmlhYmxlMjcxOwogICAgICAgIH0KICAgICAgICB0eXBlNzkg
dmFyaWFibGUyNzI7CgogICAgICAgIHZhcmlhYmxlMjcyID0gKHZhcmlhYmxlNDEgPCB2YXJpYWJs
ZTcubGVuZ3RoKSA/ICAmKHZhcmlhYmxlNy5wb2ludGVyW3ZhcmlhYmxlNDFdKSA6IG51bGxwdHI7
CgogICAgICAgIHR5cGU2NyB2YXJpYWJsZTI3MyA9IHZhcmlhYmxlMjcyID8gKnZhcmlhYmxlMjcy
IDogdHlwZTY3eyB9OwogICAgICAgIHR5cGU3OSB2YXJpYWJsZTI3NCA9IHZhcmlhYmxlMjcyOwog
ICAgICAgIHR5cGU3OCB2YXJpYWJsZTI3NTsKCiAgICAgICAgdmFyaWFibGUyNzUgPSB2YXJpYWJs
ZTI3NCA/ICYodmFyaWFibGUyNzQtPnN0cnVjdHVyZUVsZW1lbnQwKSA6IG51bGxwdHI7CgogICAg
ICAgIHR5cGUxOSB2YXJpYWJsZTI3NiA9IHZhcmlhYmxlMjc1ID8gKnZhcmlhYmxlMjc1IDogdHlw
ZTE5eyB9OwogICAgICAgIGlmICh2YXJpYWJsZTI3NSkKICAgICAgICAgICAgKnZhcmlhYmxlMjc1
ID0gdmFyaWFibGU1MTsKICAgICAgICB0eXBlNzkgdmFyaWFibGUyNzc7CgogICAgICAgIHZhcmlh
YmxlMjc3ID0gKHZhcmlhYmxlNDEgPCB2YXJpYWJsZTcubGVuZ3RoKSA/ICAmKHZhcmlhYmxlNy5w
b2ludGVyW3ZhcmlhYmxlNDFdKSA6IG51bGxwdHI7CgogICAgICAgIHR5cGU2NyB2YXJpYWJsZTI3
OCA9IHZhcmlhYmxlMjc3ID8gKnZhcmlhYmxlMjc3IDogdHlwZTY3eyB9OwogICAgICAgIHR5cGU3
OSB2YXJpYWJsZTI3OSA9IHZhcmlhYmxlMjc3OwogICAgICAgIHR5cGU3OCB2YXJpYWJsZTI4MDsK
CiAgICAgICAgdmFyaWFibGUyODAgPSB2YXJpYWJsZTI3OSA/ICYodmFyaWFibGUyNzktPnN0cnVj
dHVyZUVsZW1lbnQxKSA6IG51bGxwdHI7CgogICAgICAgIHR5cGUxOSB2YXJpYWJsZTI4MSA9IHZh
cmlhYmxlMjgwID8gKnZhcmlhYmxlMjgwIDogdHlwZTE5eyB9OwogICAgICAgIGlmICh2YXJpYWJs
ZTI4MCkKICAgICAgICAgICAgKnZhcmlhYmxlMjgwID0gdmFyaWFibGU1NzsKICAgIH0KfQoKdHlw
ZTcxIGZ1bmN0aW9uMSh0eXBlNzEgdmFyaWFibGUyODIpCnsKICAgIHR5cGU3MSB2YXJpYWJsZTI4
MyA9IHN0YXRpY19jYXN0PHR5cGU3MT4oMSk7CiAgICB0eXBlNzEgdmFyaWFibGUyODQ7CgogICAg
dmFyaWFibGUyODQgPSB2YXJpYWJsZTI4MiArIHZhcmlhYmxlMjgzOwoKICAgIHJldHVybiB2YXJp
YWJsZTI4NDsKfQoKdHlwZTYyIGZ1bmN0aW9uMih0eXBlNjIgdmFyaWFibGUyODUpCnsKICAgIHR5
cGU2MiB2YXJpYWJsZTI4NiA9IHN0YXRpY19jYXN0PHR5cGU2Mj4oMSk7CiAgICB0eXBlNjIgdmFy
aWFibGUyODc7CgogICAgdmFyaWFibGUyODcgPSB2YXJpYWJsZTI4NSArIHZhcmlhYmxlMjg2OwoK
ICAgIHJldHVybiB2YXJpYWJsZTI4NzsKfQoKdHlwZTYyIGZ1bmN0aW9uMyh0eXBlMTkgdmFyaWFi
bGUyODgsIHR5cGUxOSB2YXJpYWJsZTI4OSkKewogICAgdHlwZTE5IHZhcmlhYmxlMjkwOwoKICAg
IHZhcmlhYmxlMjkwID0gdmFyaWFibGUyODggLSB2YXJpYWJsZTI4OTsKCiAgICB0eXBlNjIgdmFy
aWFibGUyOTE7CgogICAgdmFyaWFibGUyOTEgPSBsZW5ndGgodmFyaWFibGUyOTApOwoKICAgIHJl
dHVybiB2YXJpYWJsZTI5MTsKfQoKdHlwZTE5IGZ1bmN0aW9uNCh0eXBlMTkgdmFyaWFibGUyOTIp
CnsKICAgIHR5cGU2MiB2YXJpYWJsZTI5MzsKCiAgICB2YXJpYWJsZTI5MyA9IGxlbmd0aCh2YXJp
YWJsZTI5Mik7CgogICAgdHlwZTE5IHZhcmlhYmxlMjk0OwoKICAgIHZhcmlhYmxlMjk0ID0gdmFy
aWFibGUyOTIgLyB2YXJpYWJsZTI5MzsKCiAgICByZXR1cm4gdmFyaWFibGUyOTQ7Cn0KCgoKV0hM
U0xUeXBlTmFtZXIuY3BwOjMyNg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>377421</attachid>
            <date>2019-08-27 20:17:38 -0700</date>
            <delta_ts>2019-08-27 20:17:38 -0700</delta_ts>
            <desc>after.txt</desc>
            <filename>after.txt</filename>
            <type>text/plain</type>
            <size>26716</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">R2VuZXJhdGVkIE1ldGFsIGNvZGU6IAojaW5jbHVkZSA8bWV0YWxfc3RkbGliPgojaW5jbHVkZSA8
bWV0YWxfYXRvbWljPgojaW5jbHVkZSA8bWV0YWxfbWF0aD4KI2luY2x1ZGUgPG1ldGFsX3JlbGF0
aW9uYWw+CiNpbmNsdWRlIDxtZXRhbF9jb21wdXRlPgojaW5jbHVkZSA8bWV0YWxfdGV4dHVyZT4K
CnVzaW5nIG5hbWVzcGFjZSBtZXRhbDsKCnN0cnVjdCB0eXBlMDsKc3RydWN0IHR5cGUxOwpzdHJ1
Y3QgdHlwZTI7CgpzdHJ1Y3QgdHlwZTIgewp9OwpzdHJ1Y3QgdHlwZTEgewogICAgZmxvYXQgc3Ry
dWN0dXJlRWxlbWVudDI7CiAgICBmbG9hdCBzdHJ1Y3R1cmVFbGVtZW50MzsKICAgIGZsb2F0IHN0
cnVjdHVyZUVsZW1lbnQ0OwogICAgZmxvYXQgc3RydWN0dXJlRWxlbWVudDU7CiAgICBmbG9hdCBz
dHJ1Y3R1cmVFbGVtZW50NjsKICAgIGZsb2F0IHN0cnVjdHVyZUVsZW1lbnQ3OwogICAgZmxvYXQg
c3RydWN0dXJlRWxlbWVudDg7Cn07CnN0cnVjdCB0eXBlMCB7CiAgICBmbG9hdDIgc3RydWN0dXJl
RWxlbWVudDA7CiAgICBmbG9hdDIgc3RydWN0dXJlRWxlbWVudDE7Cn07CnN0cnVjdCB0eXBlNCB7
CiAgICBkZXZpY2UgdHlwZTAqIHBvaW50ZXI7CiAgICB1aW50MzJfdCBsZW5ndGg7Cn07CnN0cnVj
dCB0eXBlMyB7CiAgICBkZXZpY2UgdHlwZTEqIHBvaW50ZXI7CiAgICB1aW50MzJfdCBsZW5ndGg7
Cn07CnVpbnQzMl90IGZ1bmN0aW9uMSh1aW50MzJfdCk7CmZsb2F0IGZ1bmN0aW9uMihmbG9hdCk7
CmZsb2F0IGZ1bmN0aW9uMyhmbG9hdDIsIGZsb2F0Mik7CmZsb2F0MiBmdW5jdGlvbjQoZmxvYXQy
KTsKCnN0cnVjdCB0eXBlNSB7CiAgICBkZXZpY2UgdHlwZTEqIHN0cnVjdHVyZUVsZW1lbnQ5IFtb
aWQoMCldXTsKICAgIGRldmljZSB0eXBlMCogc3RydWN0dXJlRWxlbWVudDEzIFtbaWQoMSldXTsK
ICAgIGRldmljZSB0eXBlMCogc3RydWN0dXJlRWxlbWVudDExIFtbaWQoMildXTsKICAgIHVpbnQy
IHN0cnVjdHVyZUVsZW1lbnQxMCBbW2lkKDMpXV07CiAgICB1aW50MiBzdHJ1Y3R1cmVFbGVtZW50
MTQgW1tpZCg0KV1dOwogICAgdWludDIgc3RydWN0dXJlRWxlbWVudDEyIFtbaWQoNSldXTsKfTsK
Cmtlcm5lbCB2b2lkIGZ1bmN0aW9uMChkZXZpY2UgdHlwZTUmIHZhcmlhYmxlMCBbW2J1ZmZlcigw
KV1dLCB1aW50MyB2YXJpYWJsZTQgW1t0aHJlYWRfcG9zaXRpb25faW5fZ3JpZF1dKQp7CiAgICB0
eXBlMyB2YXJpYWJsZTU7CiAgICB0eXBlNCB2YXJpYWJsZTY7CiAgICB0eXBlNCB2YXJpYWJsZTc7
CiAgICBmbG9hdDMgdmFyaWFibGU4OwogICAgc2l6ZV90IHZhcmlhYmxlMSA9IHZhcmlhYmxlMC5z
dHJ1Y3R1cmVFbGVtZW50MTAueTsKICAgIHZhcmlhYmxlMSA9IHZhcmlhYmxlMSA8PCAzMjsKICAg
IHZhcmlhYmxlMSA9IHZhcmlhYmxlMSB8IHZhcmlhYmxlMC5zdHJ1Y3R1cmVFbGVtZW50MTAueDsK
ICAgIHZhcmlhYmxlMSA9IHZhcmlhYmxlMSAvIHNpemVvZih0eXBlMSk7CiAgICBpZiAodmFyaWFi
bGUxID4gMHhGRkZGRkZGRikKICAgICAgICB2YXJpYWJsZTEgPSAweEZGRkZGRkZGOwogICAgdmFy
aWFibGU1ID0geyB2YXJpYWJsZTAuc3RydWN0dXJlRWxlbWVudDksIHN0YXRpY19jYXN0PHVpbnQz
Ml90Pih2YXJpYWJsZTEpIH07CiAgICBzaXplX3QgdmFyaWFibGUyID0gdmFyaWFibGUwLnN0cnVj
dHVyZUVsZW1lbnQxMi55OwogICAgdmFyaWFibGUyID0gdmFyaWFibGUyIDw8IDMyOwogICAgdmFy
aWFibGUyID0gdmFyaWFibGUyIHwgdmFyaWFibGUwLnN0cnVjdHVyZUVsZW1lbnQxMi54OwogICAg
dmFyaWFibGUyID0gdmFyaWFibGUyIC8gc2l6ZW9mKHR5cGUwKTsKICAgIGlmICh2YXJpYWJsZTIg
PiAweEZGRkZGRkZGKQogICAgICAgIHZhcmlhYmxlMiA9IDB4RkZGRkZGRkY7CiAgICB2YXJpYWJs
ZTcgPSB7IHZhcmlhYmxlMC5zdHJ1Y3R1cmVFbGVtZW50MTEsIHN0YXRpY19jYXN0PHVpbnQzMl90
Pih2YXJpYWJsZTIpIH07CiAgICBzaXplX3QgdmFyaWFibGUzID0gdmFyaWFibGUwLnN0cnVjdHVy
ZUVsZW1lbnQxNC55OwogICAgdmFyaWFibGUzID0gdmFyaWFibGUzIDw8IDMyOwogICAgdmFyaWFi
bGUzID0gdmFyaWFibGUzIHwgdmFyaWFibGUwLnN0cnVjdHVyZUVsZW1lbnQxNC54OwogICAgdmFy
aWFibGUzID0gdmFyaWFibGUzIC8gc2l6ZW9mKHR5cGUwKTsKICAgIGlmICh2YXJpYWJsZTMgPiAw
eEZGRkZGRkZGKQogICAgICAgIHZhcmlhYmxlMyA9IDB4RkZGRkZGRkY7CiAgICB2YXJpYWJsZTYg
PSB7IHZhcmlhYmxlMC5zdHJ1Y3R1cmVFbGVtZW50MTMsIHN0YXRpY19jYXN0PHVpbnQzMl90Pih2
YXJpYWJsZTMpIH07CiAgICB2YXJpYWJsZTggPSBmbG9hdDModmFyaWFibGU0KTsKICAgIHsKICAg
ICAgICB0eXBlMiB2YXJpYWJsZTkgPSB7IH07CiAgICAgICAgdGhyZWFkIHR5cGUyKiB2YXJpYWJs
ZTExID0gJnZhcmlhYmxlOTsKICAgICAgICB0aHJlYWQgdHlwZTIqIHZhcmlhYmxlMTIgPSB2YXJp
YWJsZTExOwogICAgICAgIHRocmVhZCB0eXBlMiogdmFyaWFibGUxMCA9IHZhcmlhYmxlMTI7CiAg
ICAgICAgdGhyZWFkIHVpbnQzMl90KiB2YXJpYWJsZTEzID0geyB9OwogICAgICAgIHVpbnQzMl90
IHZhcmlhYmxlMTQgPSB7IH07CiAgICAgICAgdWludDMyX3QgdmFyaWFibGUxNSA9IHsgfTsKICAg
ICAgICB0aHJlYWQgZmxvYXQyKiB2YXJpYWJsZTE2ID0geyB9OwogICAgICAgIGZsb2F0MiB2YXJp
YWJsZTE3ID0geyB9OwogICAgICAgIGZsb2F0MiB2YXJpYWJsZTE4ID0geyB9OwogICAgICAgIHRo
cmVhZCBmbG9hdCogdmFyaWFibGUxOSA9IHsgfTsKICAgICAgICBmbG9hdCB2YXJpYWJsZTIwID0g
eyB9OwogICAgICAgIGZsb2F0IHZhcmlhYmxlMjEgPSB7IH07CiAgICAgICAgdGhyZWFkIGZsb2F0
MiogdmFyaWFibGUyMiA9IHsgfTsKICAgICAgICBmbG9hdDIgdmFyaWFibGUyMyA9IHsgfTsKICAg
ICAgICBmbG9hdDIgdmFyaWFibGUyNCA9IHsgfTsKICAgICAgICB0aHJlYWQgZmxvYXQyKiB2YXJp
YWJsZTI1ID0geyB9OwogICAgICAgIGZsb2F0MiB2YXJpYWJsZTI2ID0geyB9OwogICAgICAgIGZs
b2F0MiB2YXJpYWJsZTI3ID0geyB9OwogICAgICAgIHRocmVhZCBmbG9hdCogdmFyaWFibGUyOCA9
IHsgfTsKICAgICAgICBmbG9hdCB2YXJpYWJsZTI5ID0geyB9OwogICAgICAgIGZsb2F0IHZhcmlh
YmxlMzAgPSB7IH07CiAgICAgICAgdGhyZWFkIGZsb2F0MiogdmFyaWFibGUzMSA9IHsgfTsKICAg
ICAgICBmbG9hdDIgdmFyaWFibGUzMiA9IHsgfTsKICAgICAgICBmbG9hdDIgdmFyaWFibGUzMyA9
IHsgfTsKICAgICAgICB0aHJlYWQgZmxvYXQyKiB2YXJpYWJsZTM0ID0geyB9OwogICAgICAgIGZs
b2F0MiB2YXJpYWJsZTM1ID0geyB9OwogICAgICAgIGZsb2F0MiB2YXJpYWJsZTM2ID0geyB9Owog
ICAgICAgIHRocmVhZCBmbG9hdDIqIHZhcmlhYmxlMzcgPSB7IH07CiAgICAgICAgdGhyZWFkIGZs
b2F0MiogdmFyaWFibGUzOCA9IHsgfTsKICAgICAgICB0aHJlYWQgZmxvYXQyKiB2YXJpYWJsZTM5
ID0geyB9OwogICAgICAgIHRocmVhZCBmbG9hdDIqIHZhcmlhYmxlNDAgPSB7IH07CiAgICAgICAg
ZmxvYXQgdmFyaWFibGU0MjsKCiAgICAgICAgdmFyaWFibGU0MiA9IHZhcmlhYmxlOC54OwoKICAg
ICAgICB1aW50MzJfdCB2YXJpYWJsZTQzOwoKICAgICAgICB2YXJpYWJsZTQzID0gc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KHZhcmlhYmxlNDIpOwoKICAgICAgICB1aW50MzJfdCB2YXJpYWJsZTQxID0g
dmFyaWFibGU0MzsKICAgICAgICBpbnQzMl90IHZhcmlhYmxlNDUgPSBzdGF0aWNfY2FzdDxpbnQz
Ml90PigwKTsKICAgICAgICBkZXZpY2UgdHlwZTEqIHZhcmlhYmxlNDY7CgogICAgICAgIHZhcmlh
YmxlNDYgPSAodmFyaWFibGU0NSA8IHZhcmlhYmxlNS5sZW5ndGgpID8gICYodmFyaWFibGU1LnBv
aW50ZXJbdmFyaWFibGU0NV0pIDogbnVsbHB0cjsKCiAgICAgICAgdHlwZTEgdmFyaWFibGU0NyA9
IHZhcmlhYmxlNDYgPyAqdmFyaWFibGU0NiA6IHR5cGUxeyB9OwogICAgICAgIHR5cGUxIHZhcmlh
YmxlNDQgPSB2YXJpYWJsZTQ3OwogICAgICAgIHVpbnQzMl90IHZhcmlhYmxlNDggPSBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oMik7CiAgICAgICAgYm9vbCB2YXJpYWJsZTQ5OwoKICAgICAgICB2YXJp
YWJsZTQ5ID0gdmFyaWFibGU0MSA+PSB2YXJpYWJsZTQ4OwoKICAgICAgICBib29sIHZhcmlhYmxl
NTA7CgogICAgICAgIHZhcmlhYmxlNTAgPSBzdGF0aWNfY2FzdDxib29sPih2YXJpYWJsZTQ5KTsK
CiAgICAgICAgaWYgKHZhcmlhYmxlNTApIHsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGRldmljZSB0eXBlMCogdmFy
aWFibGU1MjsKCiAgICAgICAgdmFyaWFibGU1MiA9ICh2YXJpYWJsZTQxIDwgdmFyaWFibGU2Lmxl
bmd0aCkgPyAgJih2YXJpYWJsZTYucG9pbnRlclt2YXJpYWJsZTQxXSkgOiBudWxscHRyOwoKICAg
ICAgICB0eXBlMCB2YXJpYWJsZTUzID0gdmFyaWFibGU1MiA/ICp2YXJpYWJsZTUyIDogdHlwZTB7
IH07CiAgICAgICAgZGV2aWNlIHR5cGUwKiB2YXJpYWJsZTU0ID0gdmFyaWFibGU1MjsKICAgICAg
ICBkZXZpY2UgZmxvYXQyKiB2YXJpYWJsZTU1OwoKICAgICAgICB2YXJpYWJsZTU1ID0gdmFyaWFi
bGU1NCA/ICYodmFyaWFibGU1NC0+c3RydWN0dXJlRWxlbWVudDApIDogbnVsbHB0cjsKCiAgICAg
ICAgZmxvYXQyIHZhcmlhYmxlNTYgPSB2YXJpYWJsZTU1ID8gKnZhcmlhYmxlNTUgOiBmbG9hdDJ7
IH07CiAgICAgICAgZmxvYXQyIHZhcmlhYmxlNTEgPSB2YXJpYWJsZTU2OwogICAgICAgIGRldmlj
ZSB0eXBlMCogdmFyaWFibGU1ODsKCiAgICAgICAgdmFyaWFibGU1OCA9ICh2YXJpYWJsZTQxIDwg
dmFyaWFibGU2Lmxlbmd0aCkgPyAgJih2YXJpYWJsZTYucG9pbnRlclt2YXJpYWJsZTQxXSkgOiBu
dWxscHRyOwoKICAgICAgICB0eXBlMCB2YXJpYWJsZTU5ID0gdmFyaWFibGU1OCA/ICp2YXJpYWJs
ZTU4IDogdHlwZTB7IH07CiAgICAgICAgZGV2aWNlIHR5cGUwKiB2YXJpYWJsZTYwID0gdmFyaWFi
bGU1ODsKICAgICAgICBkZXZpY2UgZmxvYXQyKiB2YXJpYWJsZTYxOwoKICAgICAgICB2YXJpYWJs
ZTYxID0gdmFyaWFibGU2MCA/ICYodmFyaWFibGU2MC0+c3RydWN0dXJlRWxlbWVudDEpIDogbnVs
bHB0cjsKCiAgICAgICAgZmxvYXQyIHZhcmlhYmxlNjIgPSB2YXJpYWJsZTYxID8gKnZhcmlhYmxl
NjEgOiBmbG9hdDJ7IH07CiAgICAgICAgZmxvYXQyIHZhcmlhYmxlNTcgPSB2YXJpYWJsZTYyOwog
ICAgICAgIGZsb2F0IHZhcmlhYmxlNjQgPSBzdGF0aWNfY2FzdDxmbG9hdD4oMCk7CiAgICAgICAg
ZmxvYXQgdmFyaWFibGU2NSA9IHN0YXRpY19jYXN0PGZsb2F0PigwKTsKICAgICAgICBmbG9hdDIg
dmFyaWFibGU2NjsKCiAgICAgICAgdmFyaWFibGU2NiA9IGZsb2F0Mih2YXJpYWJsZTY0LCB2YXJp
YWJsZTY1KTsKCiAgICAgICAgZmxvYXQyIHZhcmlhYmxlNjMgPSB2YXJpYWJsZTY2OwogICAgICAg
IGZsb2F0IHZhcmlhYmxlNjggPSBzdGF0aWNfY2FzdDxmbG9hdD4oMCk7CiAgICAgICAgZmxvYXQg
dmFyaWFibGU2OSA9IHN0YXRpY19jYXN0PGZsb2F0PigwKTsKICAgICAgICBmbG9hdDIgdmFyaWFi
bGU3MDsKCiAgICAgICAgdmFyaWFibGU3MCA9IGZsb2F0Mih2YXJpYWJsZTY4LCB2YXJpYWJsZTY5
KTsKCiAgICAgICAgZmxvYXQyIHZhcmlhYmxlNjcgPSB2YXJpYWJsZTcwOwogICAgICAgIGZsb2F0
IHZhcmlhYmxlNzIgPSBzdGF0aWNfY2FzdDxmbG9hdD4oMCk7CiAgICAgICAgZmxvYXQgdmFyaWFi
bGU3MyA9IHN0YXRpY19jYXN0PGZsb2F0PigwKTsKICAgICAgICBmbG9hdDIgdmFyaWFibGU3NDsK
CiAgICAgICAgdmFyaWFibGU3NCA9IGZsb2F0Mih2YXJpYWJsZTcyLCB2YXJpYWJsZTczKTsKCiAg
ICAgICAgZmxvYXQyIHZhcmlhYmxlNzEgPSB2YXJpYWJsZTc0OwogICAgICAgIGZsb2F0IHZhcmlh
YmxlNzYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oMCk7CiAgICAgICAgZmxvYXQgdmFyaWFibGU3NSA9
IHZhcmlhYmxlNzY7CiAgICAgICAgZmxvYXQgdmFyaWFibGU3OCA9IHN0YXRpY19jYXN0PGZsb2F0
PigwKTsKICAgICAgICBmbG9hdCB2YXJpYWJsZTc3ID0gdmFyaWFibGU3ODsKICAgICAgICBmbG9h
dDIgdmFyaWFibGU3OSA9IHsgfTsKICAgICAgICBmbG9hdDIgdmFyaWFibGU4MCA9IHsgfTsKICAg
ICAgICB7CiAgICAgICAgICAgIHVpbnQzMl90IHZhcmlhYmxlODIgPSBzdGF0aWNfY2FzdDx1aW50
MzJfdD4oMCk7CiAgICAgICAgICAgIHVpbnQzMl90IHZhcmlhYmxlODEgPSB2YXJpYWJsZTgyOwog
ICAgICAgICAgICBib29sIHZhcmlhYmxlODMgPSBmYWxzZTsKICAgICAgICAgICAgd2hpbGUgKHRy
dWUpIHsKICAgICAgICAgICAgICAgIHVpbnQzMl90IHZhcmlhYmxlODQgPSBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oMik7CiAgICAgICAgICAgICAgICBib29sIHZhcmlhYmxlODU7CgogICAgICAgICAg
ICAgICAgdmFyaWFibGU4NSA9IHZhcmlhYmxlODEgPCB2YXJpYWJsZTg0OwoKICAgICAgICAgICAg
ICAgIGlmICghdmFyaWFibGU4NSkKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgdmFyaWFibGU4NjsKCiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlODYgPSB2
YXJpYWJsZTgxID09IHZhcmlhYmxlNDE7CgogICAgICAgICAgICAgICAgICAgICAgICBib29sIHZh
cmlhYmxlODc7CgogICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZTg3ID0gc3RhdGljX2Nh
c3Q8Ym9vbD4odmFyaWFibGU4Nik7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFi
bGU4NykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZCBmbG9hdDIq
IHZhcmlhYmxlODggPSAmdmFyaWFibGU3OTsKICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNl
IHR5cGUwKiB2YXJpYWJsZTg5OwoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU4OSA9
ICh2YXJpYWJsZTgxIDwgdmFyaWFibGU2Lmxlbmd0aCkgPyAgJih2YXJpYWJsZTYucG9pbnRlclt2
YXJpYWJsZTgxXSkgOiBudWxscHRyOwoKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTAgdmFy
aWFibGU5MCA9IHZhcmlhYmxlODkgPyAqdmFyaWFibGU4OSA6IHR5cGUweyB9OwogICAgICAgICAg
ICAgICAgICAgICAgICBkZXZpY2UgdHlwZTAqIHZhcmlhYmxlOTEgPSB2YXJpYWJsZTg5OwogICAg
ICAgICAgICAgICAgICAgICAgICBkZXZpY2UgZmxvYXQyKiB2YXJpYWJsZTkyOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyaWFibGU5MiA9IHZhcmlhYmxlOTEgPyAmKHZhcmlhYmxlOTEtPnN0
cnVjdHVyZUVsZW1lbnQwKSA6IG51bGxwdHI7CgogICAgICAgICAgICAgICAgICAgICAgICBmbG9h
dDIgdmFyaWFibGU5MyA9IHZhcmlhYmxlOTIgPyAqdmFyaWFibGU5MiA6IGZsb2F0MnsgfTsKICAg
ICAgICAgICAgICAgICAgICAgICAgZmxvYXQyIHZhcmlhYmxlOTQ7CgogICAgICAgICAgICAgICAg
ICAgICAgICB2YXJpYWJsZTk0ID0gdmFyaWFibGU5My54eTsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICp2YXJpYWJsZTg4ID0gdmFyaWFibGU5NDsKICAgICAgICAgICAgICAgICAgICAgICAgdGhy
ZWFkIGZsb2F0MiogdmFyaWFibGU5NSA9ICZ2YXJpYWJsZTgwOwogICAgICAgICAgICAgICAgICAg
ICAgICBkZXZpY2UgdHlwZTAqIHZhcmlhYmxlOTY7CgogICAgICAgICAgICAgICAgICAgICAgICB2
YXJpYWJsZTk2ID0gKHZhcmlhYmxlODEgPCB2YXJpYWJsZTYubGVuZ3RoKSA/ICAmKHZhcmlhYmxl
Ni5wb2ludGVyW3ZhcmlhYmxlODFdKSA6IG51bGxwdHI7CgogICAgICAgICAgICAgICAgICAgICAg
ICB0eXBlMCB2YXJpYWJsZTk3ID0gdmFyaWFibGU5NiA/ICp2YXJpYWJsZTk2IDogdHlwZTB7IH07
CiAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSB0eXBlMCogdmFyaWFibGU5OCA9IHZhcmlh
YmxlOTY7CiAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZSBmbG9hdDIqIHZhcmlhYmxlOTk7
CgogICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZTk5ID0gdmFyaWFibGU5OCA/ICYodmFy
aWFibGU5OC0+c3RydWN0dXJlRWxlbWVudDEpIDogbnVsbHB0cjsKCiAgICAgICAgICAgICAgICAg
ICAgICAgIGZsb2F0MiB2YXJpYWJsZTEwMCA9IHZhcmlhYmxlOTkgPyAqdmFyaWFibGU5OSA6IGZs
b2F0MnsgfTsKICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQyIHZhcmlhYmxlMTAxOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUxMDEgPSB2YXJpYWJsZTEwMC54eTsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICp2YXJpYWJsZTk1ID0gdmFyaWFibGUxMDE7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGZsb2F0IHZhcmlhYmxlMTAyOwogICAgICAgICAgICAgICAgICAgICAgICB2
YXJpYWJsZTEwMiA9IGZ1bmN0aW9uMyh2YXJpYWJsZTc5LCB2YXJpYWJsZTUxKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgdGhyZWFkIHR5cGUxKiB2YXJpYWJsZTEwMyA9ICZ2YXJpYWJsZTQ0Owog
ICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWQgdHlwZTEqIHZhcmlhYmxlMTA0ID0gdmFyaWFi
bGUxMDM7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZCBmbG9hdCogdmFyaWFibGUxMDU7
CgogICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZTEwNSA9IHZhcmlhYmxlMTA0ID8gJih2
YXJpYWJsZTEwNC0+c3RydWN0dXJlRWxlbWVudDMpIDogbnVsbHB0cjsKCiAgICAgICAgICAgICAg
ICAgICAgICAgIGZsb2F0IHZhcmlhYmxlMTA2ID0gdmFyaWFibGUxMDUgPyAqdmFyaWFibGUxMDUg
OiBmbG9hdHsgfTsKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB2YXJpYWJsZTEwNzsKCiAg
ICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlMTA3ID0gdmFyaWFibGUxMDIgPCB2YXJpYWJs
ZTEwNjsKCiAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdmFyaWFibGUxMDg7CgogICAgICAg
ICAgICAgICAgICAgICAgICB2YXJpYWJsZTEwOCA9IHN0YXRpY19jYXN0PGJvb2w+KHZhcmlhYmxl
MTA3KTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZTEwOCkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
cmVhZCB0aHJlYWQgZmxvYXQyKiogdmFyaWFibGUxMDkgPSAmdmFyaWFibGUxNjsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWQgZmxvYXQyKiB2YXJpYWJsZTExMCA9ICZ2YXJp
YWJsZTYzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZCBmbG9hdDIqIHZh
cmlhYmxlMTExID0gdmFyaWFibGUxMTA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KnZhcmlhYmxlMTA5ID0gdmFyaWFibGUxMTE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGhyZWFkIGZsb2F0MiogdmFyaWFibGUxMTIgPSAmdmFyaWFibGUxNzsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmbG9hdDIgdmFyaWFibGUxMTMgPSB2YXJpYWJsZTE2ID8gKnZh
cmlhYmxlMTYgOiBmbG9hdDJ7IH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnZh
cmlhYmxlMTEyID0gdmFyaWFibGUxMTM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhyZWFkIGZsb2F0MiogdmFyaWFibGUxMTQgPSAmdmFyaWFibGUxODsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmbG9hdDIgdmFyaWFibGUxMTU7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhcmlhYmxlMTE1ID0gdmFyaWFibGUxNyArIHZhcmlhYmxlNzk7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICp2YXJpYWJsZTExNCA9IHZhcmlhYmxlMTE1Owog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0MiB2YXJpYWJsZTExNiA9IHZhcmlh
YmxlMTYgPyAqdmFyaWFibGUxNiA6IGZsb2F0MnsgfTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodmFyaWFibGUxNikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKnZhcmlhYmxlMTYgPSB2YXJpYWJsZTE4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRocmVhZCB0aHJlYWQgZmxvYXQqKiB2YXJpYWJsZTExNyA9ICZ2YXJpYWJsZTE5OwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZCBmbG9hdCogdmFyaWFibGUxMTggPSAm
dmFyaWFibGU3NTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWQgZmxvYXQq
IHZhcmlhYmxlMTE5ID0gdmFyaWFibGUxMTg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKnZhcmlhYmxlMTE3ID0gdmFyaWFibGUxMTk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhyZWFkIGZsb2F0KiB2YXJpYWJsZTEyMCA9ICZ2YXJpYWJsZTIwOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHZhcmlhYmxlMTIxID0gdmFyaWFibGUxOSA/ICp2
YXJpYWJsZTE5IDogZmxvYXR7IH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnZh
cmlhYmxlMTIwID0gdmFyaWFibGUxMjE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhyZWFkIGZsb2F0KiB2YXJpYWJsZTEyMiA9ICZ2YXJpYWJsZTIxOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZsb2F0IHZhcmlhYmxlMTIzOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhcmlhYmxlMTIzID0gZnVuY3Rpb24yKHZhcmlhYmxlMjApOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICp2YXJpYWJsZTEyMiA9IHZhcmlhYmxlMTIzOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHZhcmlhYmxlMTI0ID0gdmFyaWFibGUxOSA/
ICp2YXJpYWJsZTE5IDogZmxvYXR7IH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHZhcmlhYmxlMTkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp2YXJp
YWJsZTE5ID0gdmFyaWFibGUyMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB2YXJpYWJs
ZTEyNTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUxMjUgPSBmdW5jdGlvbjModmFy
aWFibGU3OSwgdmFyaWFibGU1MSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZCB0eXBl
MSogdmFyaWFibGUxMjYgPSAmdmFyaWFibGU0NDsKICAgICAgICAgICAgICAgICAgICAgICAgdGhy
ZWFkIHR5cGUxKiB2YXJpYWJsZTEyNyA9IHZhcmlhYmxlMTI2OwogICAgICAgICAgICAgICAgICAg
ICAgICB0aHJlYWQgZmxvYXQqIHZhcmlhYmxlMTI4OwoKICAgICAgICAgICAgICAgICAgICAgICAg
dmFyaWFibGUxMjggPSB2YXJpYWJsZTEyNyA/ICYodmFyaWFibGUxMjctPnN0cnVjdHVyZUVsZW1l
bnQ0KSA6IG51bGxwdHI7CgogICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB2YXJpYWJsZTEy
OSA9IHZhcmlhYmxlMTI4ID8gKnZhcmlhYmxlMTI4IDogZmxvYXR7IH07CiAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgdmFyaWFibGUxMzA7CgogICAgICAgICAgICAgICAgICAgICAgICB2YXJp
YWJsZTEzMCA9IHZhcmlhYmxlMTI1IDwgdmFyaWFibGUxMjk7CgogICAgICAgICAgICAgICAgICAg
ICAgICBib29sIHZhcmlhYmxlMTMxOwoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUx
MzEgPSBzdGF0aWNfY2FzdDxib29sPih2YXJpYWJsZTEzMCk7CgogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodmFyaWFibGUxMzEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWQgdGhyZWFkIGZsb2F0MioqIHZhcmlh
YmxlMTMyID0gJnZhcmlhYmxlMjI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhy
ZWFkIGZsb2F0MiogdmFyaWFibGUxMzMgPSAmdmFyaWFibGU3MTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aHJlYWQgZmxvYXQyKiB2YXJpYWJsZTEzNCA9IHZhcmlhYmxlMTMzOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp2YXJpYWJsZTEzMiA9IHZhcmlhYmxlMTM0
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZCBmbG9hdDIqIHZhcmlhYmxl
MTM1ID0gJnZhcmlhYmxlMjM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQy
IHZhcmlhYmxlMTM2ID0gdmFyaWFibGUyMiA/ICp2YXJpYWJsZTIyIDogZmxvYXQyeyB9OwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICp2YXJpYWJsZTEzNSA9IHZhcmlhYmxlMTM2Owog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZCBmbG9hdDIqIHZhcmlhYmxlMTM3
ID0gJnZhcmlhYmxlMjQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQyIHZh
cmlhYmxlMTM4OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZTEzOCA9
IHZhcmlhYmxlNzkgLSB2YXJpYWJsZTUxOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdDIgdmFyaWFibGUxMzk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
cmlhYmxlMTM5ID0gdmFyaWFibGUyMyAtIHZhcmlhYmxlMTM4OwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqdmFyaWFibGUxMzcgPSB2YXJpYWJsZTEzOTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmbG9hdDIgdmFyaWFibGUxNDAgPSB2YXJpYWJsZTIyID8gKnZhcmlh
YmxlMjIgOiBmbG9hdDJ7IH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZh
cmlhYmxlMjIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp2YXJpYWJsZTIy
ID0gdmFyaWFibGUyNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB2YXJpYWJsZTE0MTsK
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUxNDEgPSBmdW5jdGlvbjModmFyaWFibGU3
OSwgdmFyaWFibGU1MSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZCB0eXBlMSogdmFy
aWFibGUxNDIgPSAmdmFyaWFibGU0NDsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkIHR5
cGUxKiB2YXJpYWJsZTE0MyA9IHZhcmlhYmxlMTQyOwogICAgICAgICAgICAgICAgICAgICAgICB0
aHJlYWQgZmxvYXQqIHZhcmlhYmxlMTQ0OwoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFi
bGUxNDQgPSB2YXJpYWJsZTE0MyA/ICYodmFyaWFibGUxNDMtPnN0cnVjdHVyZUVsZW1lbnQ1KSA6
IG51bGxwdHI7CgogICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB2YXJpYWJsZTE0NSA9IHZh
cmlhYmxlMTQ0ID8gKnZhcmlhYmxlMTQ0IDogZmxvYXR7IH07CiAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgdmFyaWFibGUxNDY7CgogICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZTE0
NiA9IHZhcmlhYmxlMTQxIDwgdmFyaWFibGUxNDU7CgogICAgICAgICAgICAgICAgICAgICAgICBi
b29sIHZhcmlhYmxlMTQ3OwoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUxNDcgPSBz
dGF0aWNfY2FzdDxib29sPih2YXJpYWJsZTE0Nik7CgogICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodmFyaWFibGUxNDcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWQgdGhyZWFkIGZsb2F0MioqIHZhcmlhYmxlMTQ4
ID0gJnZhcmlhYmxlMjU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkIGZs
b2F0MiogdmFyaWFibGUxNDkgPSAmdmFyaWFibGU2NzsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aHJlYWQgZmxvYXQyKiB2YXJpYWJsZTE1MCA9IHZhcmlhYmxlMTQ5OwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICp2YXJpYWJsZTE0OCA9IHZhcmlhYmxlMTUwOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZCBmbG9hdDIqIHZhcmlhYmxlMTUxID0g
JnZhcmlhYmxlMjY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQyIHZhcmlh
YmxlMTUyID0gdmFyaWFibGUyNSA/ICp2YXJpYWJsZTI1IDogZmxvYXQyeyB9OwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICp2YXJpYWJsZTE1MSA9IHZhcmlhYmxlMTUyOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZCBmbG9hdDIqIHZhcmlhYmxlMTUzID0gJnZh
cmlhYmxlMjc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQyIHZhcmlhYmxl
MTU0OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZTE1NCA9IHZhcmlh
YmxlMjYgKyB2YXJpYWJsZTgwOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdmFy
aWFibGUxNTMgPSB2YXJpYWJsZTE1NDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
bG9hdDIgdmFyaWFibGUxNTUgPSB2YXJpYWJsZTI1ID8gKnZhcmlhYmxlMjUgOiBmbG9hdDJ7IH07
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlMjUpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICp2YXJpYWJsZTI1ID0gdmFyaWFibGUyNzsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWQgdGhyZWFkIGZsb2F0KiogdmFyaWFi
bGUxNTYgPSAmdmFyaWFibGUyODsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJl
YWQgZmxvYXQqIHZhcmlhYmxlMTU3ID0gJnZhcmlhYmxlNzc7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhyZWFkIGZsb2F0KiB2YXJpYWJsZTE1OCA9IHZhcmlhYmxlMTU3OwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICp2YXJpYWJsZTE1NiA9IHZhcmlhYmxlMTU4Owog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZCBmbG9hdCogdmFyaWFibGUxNTkg
PSAmdmFyaWFibGUyOTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB2YXJp
YWJsZTE2MCA9IHZhcmlhYmxlMjggPyAqdmFyaWFibGUyOCA6IGZsb2F0eyB9OwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICp2YXJpYWJsZTE1OSA9IHZhcmlhYmxlMTYwOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZCBmbG9hdCogdmFyaWFibGUxNjEgPSAmdmFy
aWFibGUzMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB2YXJpYWJsZTE2
MjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZTE2MiA9IGZ1bmN0aW9u
Mih2YXJpYWJsZTI5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdmFyaWFibGUx
NjEgPSB2YXJpYWJsZTE2MjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB2
YXJpYWJsZTE2MyA9IHZhcmlhYmxlMjggPyAqdmFyaWFibGUyOCA6IGZsb2F0eyB9OwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZTI4KQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqdmFyaWFibGUyOCA9IHZhcmlhYmxlMzA7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICB9IHdoaWxlKGZhbHNlKTsgCiAgICAgICAgICAgICAg
ICBpZiAodmFyaWFibGU4MykKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgIHRocmVhZCB0aHJlYWQgdWludDMyX3QqKiB2YXJpYWJsZTE2NCA9ICZ2YXJpYWJsZTEzOwog
ICAgICAgICAgICAgICAgdGhyZWFkIHVpbnQzMl90KiB2YXJpYWJsZTE2NSA9ICZ2YXJpYWJsZTgx
OwogICAgICAgICAgICAgICAgdGhyZWFkIHVpbnQzMl90KiB2YXJpYWJsZTE2NiA9IHZhcmlhYmxl
MTY1OwogICAgICAgICAgICAgICAgKnZhcmlhYmxlMTY0ID0gdmFyaWFibGUxNjY7CiAgICAgICAg
ICAgICAgICB0aHJlYWQgdWludDMyX3QqIHZhcmlhYmxlMTY3ID0gJnZhcmlhYmxlMTQ7CiAgICAg
ICAgICAgICAgICB1aW50MzJfdCB2YXJpYWJsZTE2OCA9IHZhcmlhYmxlMTMgPyAqdmFyaWFibGUx
MyA6IHVpbnQzMl90eyB9OwogICAgICAgICAgICAgICAgKnZhcmlhYmxlMTY3ID0gdmFyaWFibGUx
Njg7CiAgICAgICAgICAgICAgICB0aHJlYWQgdWludDMyX3QqIHZhcmlhYmxlMTY5ID0gJnZhcmlh
YmxlMTU7CiAgICAgICAgICAgICAgICB1aW50MzJfdCB2YXJpYWJsZTE3MDsKICAgICAgICAgICAg
ICAgIHZhcmlhYmxlMTcwID0gZnVuY3Rpb24xKHZhcmlhYmxlMTQpOwogICAgICAgICAgICAgICAg
KnZhcmlhYmxlMTY5ID0gdmFyaWFibGUxNzA7CiAgICAgICAgICAgICAgICB1aW50MzJfdCB2YXJp
YWJsZTE3MSA9IHZhcmlhYmxlMTMgPyAqdmFyaWFibGUxMyA6IHVpbnQzMl90eyB9OwogICAgICAg
ICAgICAgICAgaWYgKHZhcmlhYmxlMTMpCiAgICAgICAgICAgICAgICAgICAgKnZhcmlhYmxlMTMg
PSB2YXJpYWJsZTE1OwogICAgICAgICAgICB9IAogICAgICAgIH0KICAgICAgICBmbG9hdCB2YXJp
YWJsZTE3MiA9IHN0YXRpY19jYXN0PGZsb2F0PigwKTsKICAgICAgICBib29sIHZhcmlhYmxlMTcz
OwoKICAgICAgICB2YXJpYWJsZTE3MyA9IHZhcmlhYmxlNzUgPiB2YXJpYWJsZTE3MjsKCiAgICAg
ICAgYm9vbCB2YXJpYWJsZTE3NDsKCiAgICAgICAgdmFyaWFibGUxNzQgPSBzdGF0aWNfY2FzdDxi
b29sPih2YXJpYWJsZTE3Myk7CgogICAgICAgIGlmICh2YXJpYWJsZTE3NCkgewogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICB0aHJlYWQgZmxvYXQyKiB2YXJpYWJsZTE3NSA9ICZ2YXJpYWJs
ZTYzOwogICAgICAgICAgICAgICAgZmxvYXQyIHZhcmlhYmxlMTc2OwoKICAgICAgICAgICAgICAg
IHZhcmlhYmxlMTc2ID0gdmFyaWFibGU2MyAvIHZhcmlhYmxlNzU7CgogICAgICAgICAgICAgICAg
ZmxvYXQyIHZhcmlhYmxlMTc3OwoKICAgICAgICAgICAgICAgIHZhcmlhYmxlMTc3ID0gdmFyaWFi
bGUxNzYgLSB2YXJpYWJsZTUxOwoKICAgICAgICAgICAgICAgICp2YXJpYWJsZTE3NSA9IHZhcmlh
YmxlMTc3OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZsb2F0IHZhcmlhYmxlMTc4
ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KDApOwogICAgICAgIGJvb2wgdmFyaWFibGUxNzk7CgogICAg
ICAgIHZhcmlhYmxlMTc5ID0gdmFyaWFibGU3NyA+IHZhcmlhYmxlMTc4OwoKICAgICAgICBib29s
IHZhcmlhYmxlMTgwOwoKICAgICAgICB2YXJpYWJsZTE4MCA9IHN0YXRpY19jYXN0PGJvb2w+KHZh
cmlhYmxlMTc5KTsKCiAgICAgICAgaWYgKHZhcmlhYmxlMTgwKSB7CiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgIHRocmVhZCBmbG9hdDIqIHZhcmlhYmxlMTgxID0gJnZhcmlhYmxlNjc7CiAg
ICAgICAgICAgICAgICBmbG9hdDIgdmFyaWFibGUxODI7CgogICAgICAgICAgICAgICAgdmFyaWFi
bGUxODIgPSB2YXJpYWJsZTY3IC8gdmFyaWFibGU3NzsKCiAgICAgICAgICAgICAgICAqdmFyaWFi
bGUxODEgPSB2YXJpYWJsZTE4MjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aHJl
YWQgdGhyZWFkIGZsb2F0MioqIHZhcmlhYmxlMTgzID0gJnZhcmlhYmxlMzE7CiAgICAgICAgdGhy
ZWFkIGZsb2F0MiogdmFyaWFibGUxODQgPSAmdmFyaWFibGU1NzsKICAgICAgICB0aHJlYWQgZmxv
YXQyKiB2YXJpYWJsZTE4NSA9IHZhcmlhYmxlMTg0OwogICAgICAgICp2YXJpYWJsZTE4MyA9IHZh
cmlhYmxlMTg1OwogICAgICAgIHRocmVhZCBmbG9hdDIqIHZhcmlhYmxlMTg2ID0gJnZhcmlhYmxl
MzI7CiAgICAgICAgZmxvYXQyIHZhcmlhYmxlMTg3ID0gdmFyaWFibGUzMSA/ICp2YXJpYWJsZTMx
IDogZmxvYXQyeyB9OwogICAgICAgICp2YXJpYWJsZTE4NiA9IHZhcmlhYmxlMTg3OwogICAgICAg
IHRocmVhZCBmbG9hdDIqIHZhcmlhYmxlMTg4ID0gJnZhcmlhYmxlMzM7CiAgICAgICAgdGhyZWFk
IHR5cGUxKiB2YXJpYWJsZTE4OSA9ICZ2YXJpYWJsZTQ0OwogICAgICAgIHRocmVhZCB0eXBlMSog
dmFyaWFibGUxOTAgPSB2YXJpYWJsZTE4OTsKICAgICAgICB0aHJlYWQgZmxvYXQqIHZhcmlhYmxl
MTkxOwoKICAgICAgICB2YXJpYWJsZTE5MSA9IHZhcmlhYmxlMTkwID8gJih2YXJpYWJsZTE5MC0+
c3RydWN0dXJlRWxlbWVudDYpIDogbnVsbHB0cjsKCiAgICAgICAgZmxvYXQgdmFyaWFibGUxOTIg
PSB2YXJpYWJsZTE5MSA/ICp2YXJpYWJsZTE5MSA6IGZsb2F0eyB9OwogICAgICAgIGZsb2F0MiB2
YXJpYWJsZTE5MzsKCiAgICAgICAgdmFyaWFibGUxOTMgPSB2YXJpYWJsZTYzICogdmFyaWFibGUx
OTI7CgogICAgICAgIHRocmVhZCB0eXBlMSogdmFyaWFibGUxOTQgPSAmdmFyaWFibGU0NDsKICAg
ICAgICB0aHJlYWQgdHlwZTEqIHZhcmlhYmxlMTk1ID0gdmFyaWFibGUxOTQ7CiAgICAgICAgdGhy
ZWFkIGZsb2F0KiB2YXJpYWJsZTE5NjsKCiAgICAgICAgdmFyaWFibGUxOTYgPSB2YXJpYWJsZTE5
NSA/ICYodmFyaWFibGUxOTUtPnN0cnVjdHVyZUVsZW1lbnQ3KSA6IG51bGxwdHI7CgogICAgICAg
IGZsb2F0IHZhcmlhYmxlMTk3ID0gdmFyaWFibGUxOTYgPyAqdmFyaWFibGUxOTYgOiBmbG9hdHsg
fTsKICAgICAgICBmbG9hdDIgdmFyaWFibGUxOTg7CgogICAgICAgIHZhcmlhYmxlMTk4ID0gdmFy
aWFibGU3MSAqIHZhcmlhYmxlMTk3OwoKICAgICAgICBmbG9hdDIgdmFyaWFibGUxOTk7CgogICAg
ICAgIHZhcmlhYmxlMTk5ID0gdmFyaWFibGUxOTMgKyB2YXJpYWJsZTE5ODsKCiAgICAgICAgdGhy
ZWFkIHR5cGUxKiB2YXJpYWJsZTIwMCA9ICZ2YXJpYWJsZTQ0OwogICAgICAgIHRocmVhZCB0eXBl
MSogdmFyaWFibGUyMDEgPSB2YXJpYWJsZTIwMDsKICAgICAgICB0aHJlYWQgZmxvYXQqIHZhcmlh
YmxlMjAyOwoKICAgICAgICB2YXJpYWJsZTIwMiA9IHZhcmlhYmxlMjAxID8gJih2YXJpYWJsZTIw
MS0+c3RydWN0dXJlRWxlbWVudDgpIDogbnVsbHB0cjsKCiAgICAgICAgZmxvYXQgdmFyaWFibGUy
MDMgPSB2YXJpYWJsZTIwMiA/ICp2YXJpYWJsZTIwMiA6IGZsb2F0eyB9OwogICAgICAgIGZsb2F0
MiB2YXJpYWJsZTIwNDsKCiAgICAgICAgdmFyaWFibGUyMDQgPSB2YXJpYWJsZTY3ICogdmFyaWFi
bGUyMDM7CgogICAgICAgIGZsb2F0MiB2YXJpYWJsZTIwNTsKCiAgICAgICAgdmFyaWFibGUyMDUg
PSB2YXJpYWJsZTE5OSArIHZhcmlhYmxlMjA0OwoKICAgICAgICBmbG9hdDIgdmFyaWFibGUyMDY7
CgogICAgICAgIHZhcmlhYmxlMjA2ID0gdmFyaWFibGUzMiArIHZhcmlhYmxlMjA1OwoKICAgICAg
ICAqdmFyaWFibGUxODggPSB2YXJpYWJsZTIwNjsKICAgICAgICBmbG9hdDIgdmFyaWFibGUyMDcg
PSB2YXJpYWJsZTMxID8gKnZhcmlhYmxlMzEgOiBmbG9hdDJ7IH07CiAgICAgICAgaWYgKHZhcmlh
YmxlMzEpCiAgICAgICAgICAgICp2YXJpYWJsZTMxID0gdmFyaWFibGUzMzsKICAgICAgICB0aHJl
YWQgZmxvYXQyKiB2YXJpYWJsZTIwOCA9ICZ2YXJpYWJsZTU3OwogICAgICAgIGZsb2F0MiB2YXJp
YWJsZTIwOTsKICAgICAgICB2YXJpYWJsZTIwOSA9IGZ1bmN0aW9uNCh2YXJpYWJsZTU3KTsKICAg
ICAgICBmbG9hdCB2YXJpYWJsZTIxMDsKCiAgICAgICAgdmFyaWFibGUyMTAgPSBsZW5ndGgodmFy
aWFibGU1Nyk7CgogICAgICAgIGZsb2F0IHZhcmlhYmxlMjExID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KDApOwogICAgICAgIGZsb2F0IHZhcmlhYmxlMjEyID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KDAuMSk7
CiAgICAgICAgZmxvYXQgdmFyaWFibGUyMTM7CgogICAgICAgIHZhcmlhYmxlMjEzID0gY2xhbXAo
dmFyaWFibGUyMTAsIHZhcmlhYmxlMjExLCB2YXJpYWJsZTIxMik7CgogICAgICAgIGZsb2F0MiB2
YXJpYWJsZTIxNDsKCiAgICAgICAgdmFyaWFibGUyMTQgPSB2YXJpYWJsZTIwOSAqIHZhcmlhYmxl
MjEzOwoKICAgICAgICAqdmFyaWFibGUyMDggPSB2YXJpYWJsZTIxNDsKICAgICAgICB0aHJlYWQg
dGhyZWFkIGZsb2F0MioqIHZhcmlhYmxlMjE1ID0gJnZhcmlhYmxlMzQ7CiAgICAgICAgdGhyZWFk
IGZsb2F0MiogdmFyaWFibGUyMTYgPSAmdmFyaWFibGU1MTsKICAgICAgICB0aHJlYWQgZmxvYXQy
KiB2YXJpYWJsZTIxNyA9IHZhcmlhYmxlMjE2OwogICAgICAgICp2YXJpYWJsZTIxNSA9IHZhcmlh
YmxlMjE3OwogICAgICAgIHRocmVhZCBmbG9hdDIqIHZhcmlhYmxlMjE4ID0gJnZhcmlhYmxlMzU7
CiAgICAgICAgZmxvYXQyIHZhcmlhYmxlMjE5ID0gdmFyaWFibGUzNCA/ICp2YXJpYWJsZTM0IDog
ZmxvYXQyeyB9OwogICAgICAgICp2YXJpYWJsZTIxOCA9IHZhcmlhYmxlMjE5OwogICAgICAgIHRo
cmVhZCBmbG9hdDIqIHZhcmlhYmxlMjIwID0gJnZhcmlhYmxlMzY7CiAgICAgICAgdGhyZWFkIHR5
cGUxKiB2YXJpYWJsZTIyMSA9ICZ2YXJpYWJsZTQ0OwogICAgICAgIHRocmVhZCB0eXBlMSogdmFy
aWFibGUyMjIgPSB2YXJpYWJsZTIyMTsKICAgICAgICB0aHJlYWQgZmxvYXQqIHZhcmlhYmxlMjIz
OwoKICAgICAgICB2YXJpYWJsZTIyMyA9IHZhcmlhYmxlMjIyID8gJih2YXJpYWJsZTIyMi0+c3Ry
dWN0dXJlRWxlbWVudDIpIDogbnVsbHB0cjsKCiAgICAgICAgZmxvYXQgdmFyaWFibGUyMjQgPSB2
YXJpYWJsZTIyMyA/ICp2YXJpYWJsZTIyMyA6IGZsb2F0eyB9OwogICAgICAgIGZsb2F0MiB2YXJp
YWJsZTIyNTsKCiAgICAgICAgdmFyaWFibGUyMjUgPSB2YXJpYWJsZTU3ICogdmFyaWFibGUyMjQ7
CgogICAgICAgIGZsb2F0MiB2YXJpYWJsZTIyNjsKCiAgICAgICAgdmFyaWFibGUyMjYgPSB2YXJp
YWJsZTM1ICsgdmFyaWFibGUyMjU7CgogICAgICAgICp2YXJpYWJsZTIyMCA9IHZhcmlhYmxlMjI2
OwogICAgICAgIGZsb2F0MiB2YXJpYWJsZTIyNyA9IHZhcmlhYmxlMzQgPyAqdmFyaWFibGUzNCA6
IGZsb2F0MnsgfTsKICAgICAgICBpZiAodmFyaWFibGUzNCkKICAgICAgICAgICAgKnZhcmlhYmxl
MzQgPSB2YXJpYWJsZTM2OwogICAgICAgIGZsb2F0IHZhcmlhYmxlMjI4OwoKICAgICAgICB2YXJp
YWJsZTIyOCA9IHZhcmlhYmxlNTEueDsKCiAgICAgICAgZmxvYXQgdmFyaWFibGUyMjkgPSBzdGF0
aWNfY2FzdDxmbG9hdD4oLTEpOwogICAgICAgIGJvb2wgdmFyaWFibGUyMzA7CgogICAgICAgIHZh
cmlhYmxlMjMwID0gdmFyaWFibGUyMjggPCB2YXJpYWJsZTIyOTsKCiAgICAgICAgYm9vbCB2YXJp
YWJsZTIzMTsKCiAgICAgICAgdmFyaWFibGUyMzEgPSBzdGF0aWNfY2FzdDxib29sPih2YXJpYWJs
ZTIzMCk7CgogICAgICAgIGlmICh2YXJpYWJsZTIzMSkgewogICAgICAgICAgICB0aHJlYWQgdGhy
ZWFkIGZsb2F0MioqIHZhcmlhYmxlMjMyID0gJnZhcmlhYmxlMzc7CiAgICAgICAgICAgIHRocmVh
ZCBmbG9hdDIqIHZhcmlhYmxlMjMzID0gJnZhcmlhYmxlNTE7CiAgICAgICAgICAgIHRocmVhZCBm
bG9hdDIqIHZhcmlhYmxlMjM0ID0gdmFyaWFibGUyMzM7CiAgICAgICAgICAgICp2YXJpYWJsZTIz
MiA9IHZhcmlhYmxlMjM0OwogICAgICAgICAgICBmbG9hdDIgdmFyaWFibGUyMzUgPSB2YXJpYWJs
ZTM3ID8gKnZhcmlhYmxlMzcgOiBmbG9hdDJ7IH07CiAgICAgICAgICAgIGZsb2F0MiB2YXJpYWJs
ZTIzNiA9IHZhcmlhYmxlMzcgPyAqdmFyaWFibGUzNyA6IGZsb2F0MnsgfTsKICAgICAgICAgICAg
ZmxvYXQgdmFyaWFibGUyMzcgPSBzdGF0aWNfY2FzdDxmbG9hdD4oMSk7CiAgICAgICAgICAgIGZs
b2F0MiB2YXJpYWJsZTIzODsKCiAgICAgICAgICAgIHZhcmlhYmxlMjM4ID0gdmFyaWFibGUyMzY7
CiAgICAgICAgICAgIHZhcmlhYmxlMjM4LnggPSB2YXJpYWJsZTIzNzsKCiAgICAgICAgICAgIGlm
ICh2YXJpYWJsZTM3KQogICAgICAgICAgICAgICAgKnZhcmlhYmxlMzcgPSB2YXJpYWJsZTIzODsK
ICAgICAgICB9CiAgICAgICAgZmxvYXQgdmFyaWFibGUyMzk7CgogICAgICAgIHZhcmlhYmxlMjM5
ID0gdmFyaWFibGU1MS54OwoKICAgICAgICBmbG9hdCB2YXJpYWJsZTI0MCA9IHN0YXRpY19jYXN0
PGZsb2F0PigxKTsKICAgICAgICBib29sIHZhcmlhYmxlMjQxOwoKICAgICAgICB2YXJpYWJsZTI0
MSA9IHZhcmlhYmxlMjM5ID4gdmFyaWFibGUyNDA7CgogICAgICAgIGJvb2wgdmFyaWFibGUyNDI7
CgogICAgICAgIHZhcmlhYmxlMjQyID0gc3RhdGljX2Nhc3Q8Ym9vbD4odmFyaWFibGUyNDEpOwoK
ICAgICAgICBpZiAodmFyaWFibGUyNDIpIHsKICAgICAgICAgICAgdGhyZWFkIHRocmVhZCBmbG9h
dDIqKiB2YXJpYWJsZTI0MyA9ICZ2YXJpYWJsZTM4OwogICAgICAgICAgICB0aHJlYWQgZmxvYXQy
KiB2YXJpYWJsZTI0NCA9ICZ2YXJpYWJsZTUxOwogICAgICAgICAgICB0aHJlYWQgZmxvYXQyKiB2
YXJpYWJsZTI0NSA9IHZhcmlhYmxlMjQ0OwogICAgICAgICAgICAqdmFyaWFibGUyNDMgPSB2YXJp
YWJsZTI0NTsKICAgICAgICAgICAgZmxvYXQyIHZhcmlhYmxlMjQ2ID0gdmFyaWFibGUzOCA/ICp2
YXJpYWJsZTM4IDogZmxvYXQyeyB9OwogICAgICAgICAgICBmbG9hdDIgdmFyaWFibGUyNDcgPSB2
YXJpYWJsZTM4ID8gKnZhcmlhYmxlMzggOiBmbG9hdDJ7IH07CiAgICAgICAgICAgIGZsb2F0IHZh
cmlhYmxlMjQ4ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KC0xKTsKICAgICAgICAgICAgZmxvYXQyIHZh
cmlhYmxlMjQ5OwoKICAgICAgICAgICAgdmFyaWFibGUyNDkgPSB2YXJpYWJsZTI0NzsKICAgICAg
ICAgICAgdmFyaWFibGUyNDkueCA9IHZhcmlhYmxlMjQ4OwoKICAgICAgICAgICAgaWYgKHZhcmlh
YmxlMzgpCiAgICAgICAgICAgICAgICAqdmFyaWFibGUzOCA9IHZhcmlhYmxlMjQ5OwogICAgICAg
IH0KICAgICAgICBmbG9hdCB2YXJpYWJsZTI1MDsKCiAgICAgICAgdmFyaWFibGUyNTAgPSB2YXJp
YWJsZTUxLnk7CgogICAgICAgIGZsb2F0IHZhcmlhYmxlMjUxID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KC0xKTsKICAgICAgICBib29sIHZhcmlhYmxlMjUyOwoKICAgICAgICB2YXJpYWJsZTI1MiA9IHZh
cmlhYmxlMjUwIDwgdmFyaWFibGUyNTE7CgogICAgICAgIGJvb2wgdmFyaWFibGUyNTM7CgogICAg
ICAgIHZhcmlhYmxlMjUzID0gc3RhdGljX2Nhc3Q8Ym9vbD4odmFyaWFibGUyNTIpOwoKICAgICAg
ICBpZiAodmFyaWFibGUyNTMpIHsKICAgICAgICAgICAgdGhyZWFkIHRocmVhZCBmbG9hdDIqKiB2
YXJpYWJsZTI1NCA9ICZ2YXJpYWJsZTM5OwogICAgICAgICAgICB0aHJlYWQgZmxvYXQyKiB2YXJp
YWJsZTI1NSA9ICZ2YXJpYWJsZTUxOwogICAgICAgICAgICB0aHJlYWQgZmxvYXQyKiB2YXJpYWJs
ZTI1NiA9IHZhcmlhYmxlMjU1OwogICAgICAgICAgICAqdmFyaWFibGUyNTQgPSB2YXJpYWJsZTI1
NjsKICAgICAgICAgICAgZmxvYXQyIHZhcmlhYmxlMjU3ID0gdmFyaWFibGUzOSA/ICp2YXJpYWJs
ZTM5IDogZmxvYXQyeyB9OwogICAgICAgICAgICBmbG9hdDIgdmFyaWFibGUyNTggPSB2YXJpYWJs
ZTM5ID8gKnZhcmlhYmxlMzkgOiBmbG9hdDJ7IH07CiAgICAgICAgICAgIGZsb2F0IHZhcmlhYmxl
MjU5ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KDEpOwogICAgICAgICAgICBmbG9hdDIgdmFyaWFibGUy
NjA7CgogICAgICAgICAgICB2YXJpYWJsZTI2MCA9IHZhcmlhYmxlMjU4OwogICAgICAgICAgICB2
YXJpYWJsZTI2MC55ID0gdmFyaWFibGUyNTk7CgogICAgICAgICAgICBpZiAodmFyaWFibGUzOSkK
ICAgICAgICAgICAgICAgICp2YXJpYWJsZTM5ID0gdmFyaWFibGUyNjA7CiAgICAgICAgfQogICAg
ICAgIGZsb2F0IHZhcmlhYmxlMjYxOwoKICAgICAgICB2YXJpYWJsZTI2MSA9IHZhcmlhYmxlNTEu
eTsKCiAgICAgICAgZmxvYXQgdmFyaWFibGUyNjIgPSBzdGF0aWNfY2FzdDxmbG9hdD4oMSk7CiAg
ICAgICAgYm9vbCB2YXJpYWJsZTI2MzsKCiAgICAgICAgdmFyaWFibGUyNjMgPSB2YXJpYWJsZTI2
MSA+IHZhcmlhYmxlMjYyOwoKICAgICAgICBib29sIHZhcmlhYmxlMjY0OwoKICAgICAgICB2YXJp
YWJsZTI2NCA9IHN0YXRpY19jYXN0PGJvb2w+KHZhcmlhYmxlMjYzKTsKCiAgICAgICAgaWYgKHZh
cmlhYmxlMjY0KSB7CiAgICAgICAgICAgIHRocmVhZCB0aHJlYWQgZmxvYXQyKiogdmFyaWFibGUy
NjUgPSAmdmFyaWFibGU0MDsKICAgICAgICAgICAgdGhyZWFkIGZsb2F0MiogdmFyaWFibGUyNjYg
PSAmdmFyaWFibGU1MTsKICAgICAgICAgICAgdGhyZWFkIGZsb2F0MiogdmFyaWFibGUyNjcgPSB2
YXJpYWJsZTI2NjsKICAgICAgICAgICAgKnZhcmlhYmxlMjY1ID0gdmFyaWFibGUyNjc7CiAgICAg
ICAgICAgIGZsb2F0MiB2YXJpYWJsZTI2OCA9IHZhcmlhYmxlNDAgPyAqdmFyaWFibGU0MCA6IGZs
b2F0MnsgfTsKICAgICAgICAgICAgZmxvYXQyIHZhcmlhYmxlMjY5ID0gdmFyaWFibGU0MCA/ICp2
YXJpYWJsZTQwIDogZmxvYXQyeyB9OwogICAgICAgICAgICBmbG9hdCB2YXJpYWJsZTI3MCA9IHN0
YXRpY19jYXN0PGZsb2F0PigtMSk7CiAgICAgICAgICAgIGZsb2F0MiB2YXJpYWJsZTI3MTsKCiAg
ICAgICAgICAgIHZhcmlhYmxlMjcxID0gdmFyaWFibGUyNjk7CiAgICAgICAgICAgIHZhcmlhYmxl
MjcxLnkgPSB2YXJpYWJsZTI3MDsKCiAgICAgICAgICAgIGlmICh2YXJpYWJsZTQwKQogICAgICAg
ICAgICAgICAgKnZhcmlhYmxlNDAgPSB2YXJpYWJsZTI3MTsKICAgICAgICB9CiAgICAgICAgZGV2
aWNlIHR5cGUwKiB2YXJpYWJsZTI3MjsKCiAgICAgICAgdmFyaWFibGUyNzIgPSAodmFyaWFibGU0
MSA8IHZhcmlhYmxlNy5sZW5ndGgpID8gICYodmFyaWFibGU3LnBvaW50ZXJbdmFyaWFibGU0MV0p
IDogbnVsbHB0cjsKCiAgICAgICAgdHlwZTAgdmFyaWFibGUyNzMgPSB2YXJpYWJsZTI3MiA/ICp2
YXJpYWJsZTI3MiA6IHR5cGUweyB9OwogICAgICAgIGRldmljZSB0eXBlMCogdmFyaWFibGUyNzQg
PSB2YXJpYWJsZTI3MjsKICAgICAgICBkZXZpY2UgZmxvYXQyKiB2YXJpYWJsZTI3NTsKCiAgICAg
ICAgdmFyaWFibGUyNzUgPSB2YXJpYWJsZTI3NCA/ICYodmFyaWFibGUyNzQtPnN0cnVjdHVyZUVs
ZW1lbnQwKSA6IG51bGxwdHI7CgogICAgICAgIGZsb2F0MiB2YXJpYWJsZTI3NiA9IHZhcmlhYmxl
Mjc1ID8gKnZhcmlhYmxlMjc1IDogZmxvYXQyeyB9OwogICAgICAgIGlmICh2YXJpYWJsZTI3NSkK
ICAgICAgICAgICAgKnZhcmlhYmxlMjc1ID0gdmFyaWFibGU1MTsKICAgICAgICBkZXZpY2UgdHlw
ZTAqIHZhcmlhYmxlMjc3OwoKICAgICAgICB2YXJpYWJsZTI3NyA9ICh2YXJpYWJsZTQxIDwgdmFy
aWFibGU3Lmxlbmd0aCkgPyAgJih2YXJpYWJsZTcucG9pbnRlclt2YXJpYWJsZTQxXSkgOiBudWxs
cHRyOwoKICAgICAgICB0eXBlMCB2YXJpYWJsZTI3OCA9IHZhcmlhYmxlMjc3ID8gKnZhcmlhYmxl
Mjc3IDogdHlwZTB7IH07CiAgICAgICAgZGV2aWNlIHR5cGUwKiB2YXJpYWJsZTI3OSA9IHZhcmlh
YmxlMjc3OwogICAgICAgIGRldmljZSBmbG9hdDIqIHZhcmlhYmxlMjgwOwoKICAgICAgICB2YXJp
YWJsZTI4MCA9IHZhcmlhYmxlMjc5ID8gJih2YXJpYWJsZTI3OS0+c3RydWN0dXJlRWxlbWVudDEp
IDogbnVsbHB0cjsKCiAgICAgICAgZmxvYXQyIHZhcmlhYmxlMjgxID0gdmFyaWFibGUyODAgPyAq
dmFyaWFibGUyODAgOiBmbG9hdDJ7IH07CiAgICAgICAgaWYgKHZhcmlhYmxlMjgwKQogICAgICAg
ICAgICAqdmFyaWFibGUyODAgPSB2YXJpYWJsZTU3OwogICAgfQp9Cgp1aW50MzJfdCBmdW5jdGlv
bjEodWludDMyX3QgdmFyaWFibGUyODIpCnsKICAgIHVpbnQzMl90IHZhcmlhYmxlMjgzID0gc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KDEpOwogICAgdWludDMyX3QgdmFyaWFibGUyODQ7CgogICAgdmFy
aWFibGUyODQgPSB2YXJpYWJsZTI4MiArIHZhcmlhYmxlMjgzOwoKICAgIHJldHVybiB2YXJpYWJs
ZTI4NDsKfQoKZmxvYXQgZnVuY3Rpb24yKGZsb2F0IHZhcmlhYmxlMjg1KQp7CiAgICBmbG9hdCB2
YXJpYWJsZTI4NiA9IHN0YXRpY19jYXN0PGZsb2F0PigxKTsKICAgIGZsb2F0IHZhcmlhYmxlMjg3
OwoKICAgIHZhcmlhYmxlMjg3ID0gdmFyaWFibGUyODUgKyB2YXJpYWJsZTI4NjsKCiAgICByZXR1
cm4gdmFyaWFibGUyODc7Cn0KCmZsb2F0IGZ1bmN0aW9uMyhmbG9hdDIgdmFyaWFibGUyODgsIGZs
b2F0MiB2YXJpYWJsZTI4OSkKewogICAgZmxvYXQyIHZhcmlhYmxlMjkwOwoKICAgIHZhcmlhYmxl
MjkwID0gdmFyaWFibGUyODggLSB2YXJpYWJsZTI4OTsKCiAgICBmbG9hdCB2YXJpYWJsZTI5MTsK
CiAgICB2YXJpYWJsZTI5MSA9IGxlbmd0aCh2YXJpYWJsZTI5MCk7CgogICAgcmV0dXJuIHZhcmlh
YmxlMjkxOwp9CgpmbG9hdDIgZnVuY3Rpb240KGZsb2F0MiB2YXJpYWJsZTI5MikKewogICAgZmxv
YXQgdmFyaWFibGUyOTM7CgogICAgdmFyaWFibGUyOTMgPSBsZW5ndGgodmFyaWFibGUyOTIpOwoK
ICAgIGZsb2F0MiB2YXJpYWJsZTI5NDsKCiAgICB2YXJpYWJsZTI5NCA9IHZhcmlhYmxlMjkyIC8g
dmFyaWFibGUyOTM7CgogICAgcmV0dXJuIHZhcmlhYmxlMjk0Owp9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>