<?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>196578</bug_id>
          
          <creation_ts>2019-04-03 16:44:30 -0700</creation_ts>
          <short_desc>B3 peephole optimizations should live in their own file, and be used by FTLOutput.cpp</short_desc>
          <delta_ts>2019-04-24 17:24:25 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Robin Morisset">rmorisset</reporter>
          <assigned_to name="Robin Morisset">rmorisset</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1524044</commentid>
    <comment_count>0</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-04-03 16:44:30 -0700</bug_when>
    <thetext>Currently, the peephole optimizations are part of B3ReduceStrength.
I plan to make it possible to run them on the fly as we create new values and put them in their own file (form which they will be publicly visible) so that FTLOutput.h can call them directly.
This should help feed B3 some leaner/faster to compile code.

In the long term, this refactoring should also help create an abstract interpreter that also calls these peephole optimizations, feeding them extra information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524333</commentid>
    <comment_count>1</comment_count>
      <attachid>366733</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-04-04 11:36:12 -0700</bug_when>
    <thetext>Created attachment 366733
Patch

Most of this big patch is a fairly mechanical refactoring, taking the peephole optimizations out of B3ReduceStrength.
I also then used these peephole optimizations in FTLOutput and a bit in B3LowerMacros, to provide motivation for the refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524334</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-04-04 11:42:13 -0700</bug_when>
    <thetext>Attachment 366733 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3PeepholeOptimizer.cpp:203:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/b3/B3PeepholeOptimizer.cpp:291:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/b3/B3PeepholeOptimizer.cpp:352:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/b3/B3PeepholeOptimizer.cpp:358:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/B3PeepholeOptimizer.cpp:380:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/b3/B3PeepholeOptimizer.cpp:499:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3PeepholeOptimizer.cpp:693:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/b3/B3PeepholeOptimizer.cpp:976:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3PeepholeOptimizer.cpp:1100:  Missing space before ( in switch(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/b3/B3PeepholeOptimizer.cpp:1279:  Missing space before ( in switch(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/b3/B3PeepholeOptimizer.cpp:1562:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/B3PeepholeOptimizer.cpp:1562:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/b3/B3PeepholeOptimizer.h:75:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3PeepholeOptimizer.h:107:  The parameter name &quot;offset&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3PeepholeOptimizer.h:107:  The parameter name &quot;range&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3PeepholeOptimizer.h:138:  The parameter name &quot;arguments&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 16 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524486</commentid>
    <comment_count>3</comment_count>
      <attachid>366765</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-04-04 15:46:14 -0700</bug_when>
    <thetext>Created attachment 366765
Patch

Fix style issues + a build issue caused by a missing import.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524523</commentid>
    <comment_count>4</comment_count>
      <attachid>366774</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-04-04 17:06:46 -0700</bug_when>
    <thetext>Created attachment 366774
Patch

Fix a missing &quot;appendToCurrentBlock&quot; in reduceLoadStore, that was causing a validation failure due to some orphaned constants.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1525516</commentid>
    <comment_count>5</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-04-08 18:56:35 -0700</bug_when>
    <thetext>Some basic numbers, from running JetStream2 with --reportFTLCompileTimes=1 and --useConcurrentJIT=0 (to minimize noise), and averaging the times (all in ms):
Baseline:
4.17321
4.16281
4.0801
4.06007
After patch:
4.11306
4.08184
4.10042
4.07414
So nothing particularly impressive, but there is no regression, and there might be a small progression.

Since the main motivation for this patch was the refactoring, independent of the possible perf improvement of doing reducing on the fly in FTLOutput.h, I still think it is worth it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1528315</commentid>
    <comment_count>6</comment_count>
      <attachid>367692</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-04-17 16:00:28 -0700</bug_when>
    <thetext>Created attachment 367692
Patch

Just rebased so it applies cleanly on ToT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1530161</commentid>
    <comment_count>7</comment_count>
      <attachid>367692</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2019-04-24 14:37:55 -0700</bug_when>
    <thetext>Comment on attachment 367692
Patch

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

On the one hand, I like this change.  But on the other hand, it doesn&apos;t seem like it&apos;s a measurable improvement and it means that adding new strength-reduction rules may be annoying since for some opcodes you need to have a case in reduceStrength and a function on the PeepholeOptimizer.

I think that we should try to have the simplest compiler we can get away with while getting great perf.  So, that means not taking this change.

On the other hand, if using this change in conjunction with some other change does result in a measurable improvement, then we should take it.

So, that means not taking the change until there is another change that makes this one valuable.

&gt; Source/JavaScriptCore/b3/B3LowerMacros.cpp:158
&gt; +                    Value* divResult = peephole.reduceDiv(m_value-&gt;type(), m_origin, m_value-&gt;child(0), m_value-&gt;child(1), true);

WebKit style says you should never pass the literal true or false as an argument to a function except if the name of the function makes it obvious what the meaning of that boolean is.

There are two accepted ways of side-stepping this issue:

1) Always name the argument at the callsite:

    bool shouldPropagateType = true;
    thingy-&gt;fooBar(stuff, shouldPropagateType);

2) Replace with an enum:

    enum ShouldPropagateTypeMode { ShouldPropagateType, ShouldNotPropagateType };
    thingy-&gt;fooBar(stuff, ShouldPropagateType);

The second one is preferred.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1530264</commentid>
    <comment_count>8</comment_count>
      <attachid>368204</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-04-24 17:24:25 -0700</bug_when>
    <thetext>Created attachment 368204
Patch

Thanks for the review.

The only change is adding enums for the two places where I was passing booleans (IsChillMode and MayGiveUpMode).

Following your comment, I will not ask for another review or try to land this until I write the AI phase that will use it (and which was the motivation for this patch in the first place).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366733</attachid>
            <date>2019-04-04 11:36:12 -0700</date>
            <delta_ts>2019-04-04 15:46:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch196578</filename>
            <type>text/plain</type>
            <size>234344</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDMzZmM4ZDYyYjk0Li45OTVhNGYzZGMxZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTc5IEBACisyMDE5LTA0LTA0ICBSb2Jp
biBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAgICAgICAgQjMgcGVlcGhvbGUg
b3B0aW1pemF0aW9ucyBzaG91bGQgbGl2ZSBpbiB0aGVpciBvd24gZmlsZSwgYW5kIGJlIHVzZWQg
YnkgRlRMT3V0cHV0LmNwcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTk2NTc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQ3VycmVudGx5IHRoZSBwZWVwaG9sZSBvcHRpbWl6YXRpb25zIGZvciBCMyBsaXZl
IGluIEIzUmVkdWNlU3RyZW5ndGggYW5kIGFyZSByYXRoZXIgdGllZCB0byBpdCwgYW5hbHl6aW5n
IGFuIGV4aXN0aW5nIHZhbHVlCisgICAgICAgICwgYW5kICh0eXBpY2FsbHkpIHJlcGxhY2luZyBp
dCB3aXRoIGFuIGlkZW50aXR5IHRvIGEgbmV3IChzaW1wbGVyKSB2YWx1ZSB0aGF0IHRoZXkgY3Jl
YXRlLgorICAgICAgICBXaXRoIHRoaXMgcGF0Y2gsIHRoZXkgaW5zdGVhZCBsaXZlIGluIHRoZWly
IG93biBjbGFzcyBCM1BlZXBob2xlT3B0aW1pemVyLCBjcmVhdGluZyBhIG5ldyB2YWx1ZSAob3B0
aW9uYWxseSBvbmx5IGlmIHRoZXkgY2FuIGRvIHNvIGNsZXZlcmx5KSwKKyAgICAgICAgbGVhdmlu
ZyB0aGUgY2FsbGVyIGRvIHRoZSByZXBsYWNlV2l0aElkZW50aXR5IG9uIHRoZSBvbGQgZGVmaW5p
dGlvbi4KKyAgICAgICAgVGhpcyBoYXMgc2V2ZXJhbCBiZW5lZml0czoKKyAgICAgICAgLSBVc2Vy
cyBvZiBCMyBjYW4gbm93IHVzZSB0aGlzIGludGVyZmFjZSB0byBjcmVhdGUgdmFsdWVzLCBvcHRp
bWl6aW5nIHRoZW0gb24gdGhlIGZseTsgYXZvaWRpbmcgYWxsb2NhdGluZyBCMzo6VmFsdWUgcyBq
dXN0IHRvIHNpbXBsaWZ5IHRoZW0uCisgICAgICAgICAgVGhpcyBwYXRjaCBwb3J0cyBGVExPdXRw
dXQuY3BwIHRvIHVzZSB0aGlzIGZhY2lsaXR5LgorICAgICAgICAtIFRoZSBvcHRpbWl6YXRpb25z
IGFyZSBzaWduaWZpY2FudGx5IHRlcnNlciBhbmQgbW9yZSByZWFkYWJsZSwgYXMgd2UgY2FuIGdp
dmUgbmFtZXMgdG8gdGhlIGFyZ3VtZW50cyAoZS5nLiBsZWZ0L3JpZ2h0IHZzIG1fdmFsdWUtPmNo
aWxkKDApL21fdmFsdWUtPmNoaWxkKDEpKQorICAgICAgICAgIFRoaXMgaGVscGVkIG1lIG5vdGlj
ZSB0aGF0IGEgY291cGxlIG9wdGltaXphdGlvbnMgd2VyZSBkZWFkIHdoaWxlIHdyaXRpbmcgdGhl
IHBhdGNoIChlLmcuIEFkZChOZWcoeCksIC0xKT0+Qml0WG9yKHgsIC0xKSBuZXZlciB0cmlnZ2Vy
ZWQgYXMgQWRkKE5lZyh4KSwgeSk9PlN1Yih5LCB4KSByYW4gYmVmb3JlIGl0KSwgYW5kIGZpeCB0
aGVtLgorICAgICAgICAtIFRoZSBvcHRpbWl6YXRpb25zIG5vdyBuYXR1cmFsbHkgcnVuIHRvIGEg
bG9jYWwgZml4cG9pbnQuIFRoaXMgY3VycmVudGx5IGlzIGEgbmVnbGlnaWJsZSBiZW5lZml0IGFz
IHdlIGRvbid0IGhhdmUgdGhhdCBtYW55IG9wdGltaXphdGlvbnMKKyAgICAgICAgICAsIGJ1dCBp
dCBlbnN1cmVzIHdlIGNhbiBhZGQgbWFueSBtb3JlIHdpdGhvdXQgc2lnbmlmaWNhbnRseSBpbmNy
ZWFzaW5nIHRoZSB0aW1lIHNwZW50IGluIEIzUmVkdWNlU3RyZW5ndGgKKyAgICAgICAgLSBMb25n
IHRlcm0gSSBwbGFuIHRvIGFkZCBhbiBhYnN0cmFjdCBpbnRlcnByZXRlci9mb3J3YXJkIHZhbHVl
IGFuYWx5emVyIHRvIEIzLCB3aGljaCB3b3VsZCBiZSBhIGxvdCBtb3JlIGFjY3VyYXRlIHRoYW4g
dGhlIGN1cnJlbnQgYm91bmRlZCBiYWNrd2FyZHMgYW5hbHlzaXMgaW4gQjNSZWR1Y2VTdHJlbmd0
aC4KKyAgICAgICAgICBUaGlzIHJlZmFjdG9yIGlzIG5lZWRlZCBhcyBhIHN0ZXAgdG93YXJkcyB0
aGlzLgorCisgICAgICAgIEkgbGVhdmUgaW4gQjNSZWR1Y2VTdHJlbmd0aCB0aGUgbm9uLWxvY2Fs
IG9wdGltaXphdGlvbnMgZm9yIEJyYW5jaCBhbmQgQ2hlY2suCisgICAgICAgIEkgYWxzbyBoYWQg
dG8gbW92ZSBJbnRSYW5nZSB0byBpdHMgb3duIEIzSW50UmFuZ2UuaCBmaWxlLCBzaW5jZSBpdCBp
cyBub3cgdXNlZCBieSBCM1BlZXBob2xlT3B0aW1pemVyLmNwcCBhbmQgbm90IEIzUmVkdWNlU3Ry
ZW5ndGguY3BwCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBhcyB0aGlzIGlzIGEgcmVmYWN0b3Ig
YW5kIGFsbCBvZiB0aGlzIGNvZGUgaXMgYWxyZWFkeSB0ZXN0ZWQuCisKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMu
dHh0OgorICAgICAgICAqIGIzL0IzRHVwbGljYXRlVGFpbHMuY3BwOgorICAgICAgICAqIGIzL0Iz
SW50UmFuZ2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpJbnRSYW5nZTo6SW50UmFuZ2Up
OgorICAgICAgICAoSlNDOjpCMzo6SW50UmFuZ2U6OnRvcCk6CisgICAgICAgIChKU0M6OkIzOjpJ
bnRSYW5nZTo6cmFuZ2VGb3JNYXNrKToKKyAgICAgICAgKEpTQzo6QjM6OkludFJhbmdlOjpyYW5n
ZUZvclpTaHIpOgorICAgICAgICAoSlNDOjpCMzo6SW50UmFuZ2U6Om1pbiBjb25zdCk6CisgICAg
ICAgIChKU0M6OkIzOjpJbnRSYW5nZTo6bWF4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6Oklu
dFJhbmdlOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkludFJhbmdlOjpjb3VsZE92
ZXJmbG93QWRkKToKKyAgICAgICAgKEpTQzo6QjM6OkludFJhbmdlOjpjb3VsZE92ZXJmbG93U3Vi
KToKKyAgICAgICAgKEpTQzo6QjM6OkludFJhbmdlOjpjb3VsZE92ZXJmbG93TXVsKToKKyAgICAg
ICAgKEpTQzo6QjM6OkludFJhbmdlOjpzaGwpOgorICAgICAgICAoSlNDOjpCMzo6SW50UmFuZ2U6
OnNTaHIpOgorICAgICAgICAoSlNDOjpCMzo6SW50UmFuZ2U6OnpTaHIpOgorICAgICAgICAoSlND
OjpCMzo6SW50UmFuZ2U6OmFkZCk6CisgICAgICAgIChKU0M6OkIzOjpJbnRSYW5nZTo6c3ViKToK
KyAgICAgICAgKEpTQzo6QjM6OkludFJhbmdlOjptdWwpOgorICAgICAgICAqIGIzL0IzTG93ZXJN
YWNyb3MuY3BwOgorICAgICAgICAqIGIzL0IzUGVlcGhvbGVPcHRpbWl6ZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjphcHBlbmRUb0N1cnJlbnRCbG9j
ayk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6ZW1pdCk6CisgICAgICAg
IChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlT3BhcXVlKToKKyAgICAgICAgKEpT
Qzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VBZGQpOgorICAgICAgICAoSlNDOjpCMzo6
UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVN1Yik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9s
ZU9wdGltaXplcjo6cmVkdWNlTmVnKToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1p
emVyOjpyZWR1Y2VNdWwpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJl
ZHVjZURpdik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlVURp
dik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlTW9kKToKKyAg
ICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VVTW9kKToKKyAgICAgICAg
KEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VCaXRBbmQpOgorICAgICAgICAoSlND
OjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUJpdE9yKToKKyAgICAgICAgKEpTQzo6QjM6
OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VCaXRYb3IpOgorICAgICAgICAoSlNDOjpCMzo6UGVl
cGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVNobCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9w
dGltaXplcjo6cmVkdWNlU1Nocik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXpl
cjo6cmVkdWNlWlNocik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVk
dWNlUm90Uik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlUm90
TCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlQWJzKToKKyAg
ICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VDZWlsKToKKyAgICAgICAg
KEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VGbG9vcik6CisgICAgICAgIChKU0M6
OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlU3FydCk6CisgICAgICAgIChKU0M6OkIzOjpQ
ZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlQml0d2lzZUNhc3QpOgorICAgICAgICAoSlNDOjpCMzo6
UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVNFeHQ4KToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBo
b2xlT3B0aW1pemVyOjpyZWR1Y2VTRXh0MTYpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVP
cHRpbWl6ZXI6OnJlZHVjZVNFeHQzMik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGlt
aXplcjo6cmVkdWNlWkV4dDMyKToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVy
OjpyZWR1Y2VUcnVuYyk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVk
dWNlSVRvRCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlSVRv
Rik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlRmxvYXRUb0Rv
dWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlRG91Ymxl
VG9GbG9hdCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlU2Vs
ZWN0KToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VMb2FkU3Rv
cmUpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUVxdWFsKToK
KyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VOb3RFcXVhbCk6Cisg
ICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlRXF1YWxPclVub3JkZXJl
ZCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlTGVzc1RoYW4p
OgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUdyZWF0ZXJUaGFu
KToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VMZXNzRXF1YWwp
OgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUdyZWF0ZXJFcXVh
bCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlQWJvdmUpOgor
ICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUJlbG93KToKKyAgICAg
ICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VBYm92ZUVxdWFsKToKKyAgICAg
ICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VCZWxvd0VxdWFsKToKKyAgICAg
ICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjp0cnlSZWR1Y2UpOgorICAgICAgICAoSlND
OjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnRyeVNpbXBsaWZ5QnJhbmNoKToKKyAgICAgICAgKEpT
Qzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjp0cnlTaW1wbGlmeUNDYWxsKToKKyAgICAgICAgKEpT
Qzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjp0cnlTaW1wbGlmeUNoZWNrQWRkKToKKyAgICAgICAg
KEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjp0cnlTaW1wbGlmeUNoZWNrU3ViKToKKyAgICAg
ICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjp0cnlTaW1wbGlmeUNoZWNrTXVsKToKKyAg
ICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjp0cnlTaW1wbGlmeUNoZWNrKToKKyAg
ICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpzaG91bGRHb0JlZm9yZSk6CisgICAg
ICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6dHJ5UmVkdWNlTXVsRGlzdHJpYnV0aXZp
dHkpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnRyeVJlZHVjZUJpdEFu
ZERpc3RyaWJ1dGl2aXR5KToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjp0
cnlSZWR1Y2VTaGlmdE9yUm90YXRlKToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1p
emVyOjpyYW5nZUZvcik6CisgICAgICAgICogYjMvQjNQZWVwaG9sZU9wdGltaXplci5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpQZWVwaG9sZU9wdGltaXpl
cik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6c2V0SW5kZXgpOgorICAg
ICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnNldEJsb2NrKToKKyAgICAgICAgKiBi
My9CM1JlZHVjZVN0cmVuZ3RoLmNwcDoKKyAgICAgICAgKiBiMy9CM1ZhbGlkYXRlLmNwcDoKKyAg
ICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6dGVzdE5lZ011bEFyZ0lt
bSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0RmxvYXRFcXVhbE9yVW5vcmRlcmVkRG9udEZvbGQp
OgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1
dDo6T3V0cHV0KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmFwcGVuZFRvKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpPdXRwdXQ6Om9wYXF1ZSk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0
OjphZGQpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6c3ViKToKKyAgICAgICAgKEpTQzo6
RlRMOjpPdXRwdXQ6Om11bCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpkaXYpOgorICAg
ICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6Y2hpbGxEaXYpOgorICAgICAgICAoSlNDOjpGVEw6Ok91
dHB1dDo6bW9kKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmNoaWxsTW9kKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpPdXRwdXQ6Om5lZyk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpk
b3VibGVBZGQpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlU3ViKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmRvdWJsZU11bCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0
cHV0Ojpkb3VibGVEaXYpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlTW9kKToK
KyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmJpdEFuZCk6CisgICAgICAgIChKU0M6OkZUTDo6
T3V0cHV0OjpiaXRPcik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpiaXRYb3IpOgorICAg
ICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6c2hsKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6
OmFTaHIpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bFNocik6CisgICAgICAgIChKU0M6
OkZUTDo6T3V0cHV0OjpiaXROb3QpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bG9naWNh
bE5vdCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpkb3VibGVBYnMpOgorICAgICAgICAo
SlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlQ2VpbCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0
Ojpkb3VibGVGbG9vcik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpkb3VibGVQb3dpKToK
KyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmRvdWJsZVNxcnQpOgorICAgICAgICAoSlNDOjpG
VEw6Ok91dHB1dDo6c2lnbkV4dDMyVG82NCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojp6
ZXJvRXh0KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmludFRvRG91YmxlKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmNhc3RUb0ludDMyKToKKyAgICAgICAgKEpTQzo6RlRMOjpP
dXRwdXQ6OmRvdWJsZVRvRmxvYXQpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZmxvYXRU
b0RvdWJsZSk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjplcXVhbCk6CisgICAgICAgIChK
U0M6OkZUTDo6T3V0cHV0Ojpub3RFcXVhbCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojph
Ym92ZSk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjphYm92ZU9yRXF1YWwpOgorICAgICAg
ICAoSlNDOjpGVEw6Ok91dHB1dDo6YmVsb3cpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6
YmVsb3dPckVxdWFsKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmdyZWF0ZXJUaGFuKToK
KyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmdyZWF0ZXJUaGFuT3JFcXVhbCk6CisgICAgICAg
IChKU0M6OkZUTDo6T3V0cHV0OjpsZXNzVGhhbik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0
OjpsZXNzVGhhbk9yRXF1YWwpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlRXF1
YWwpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlRXF1YWxPclVub3JkZXJlZCk6
CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpkb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKToK
KyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmRvdWJsZUxlc3NUaGFuKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpPdXRwdXQ6OmRvdWJsZUxlc3NUaGFuT3JFcXVhbCk6CisgICAgICAgIChKU0M6OkZU
TDo6T3V0cHV0Ojpkb3VibGVHcmVhdGVyVGhhbik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0
Ojpkb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6
aXNaZXJvMzIpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bm90WmVybzMyKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmlzWmVybzY0KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRw
dXQ6Om5vdFplcm82NCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpzZWxlY3QpOgorICAg
ICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6Yml0Q2FzdCk6CisgICAgICAgICogZnRsL0ZUTE91dHB1
dC5oOgorCiAyMDE5LTA0LTA0ICBDYWlvIExpbWEgIDx0aWNhaW9saW1hQGdtYWlsLmNvbT4KIAog
ICAgICAgICBbSlNDXSBXZSBzaG91bGQgY29uc2lkZXIgbW92aW5nIFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlOjptX3BhcmVudFNjb3BlVERaVmFyaWFibGVzIHRvIFJhcmVEYXRhCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGY0NGQwMzZhZjk5Li5jMjQzZjU2YTQwZSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTg1Miw2ICs4NTIsOCBAQAogCQkyQUY3MzgyRDE4
QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFGNzM4MkIxOEJCQkY5MjAwOEE1QTM3IC8qIFN0
cnVjdHVyZUlEVGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkyRDM0MkYzNkY3MjQ0MDk2ODA0QURCMjQgLyogU291cmNlT3JpZ2luLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MjVCQTEzMzdFNDM0
NEUxQjI2OUE2NzEgLyogU291cmNlT3JpZ2luLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzM5NUM3MDcyMjU1NUY2RDAwQkRCRkFEIC8qIEIzRWxp
bWluYXRlRGVhZENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMzOTVDNzA1MjI1NTVGNkQwMEJEQkZBRCAvKiBCM0VsaW1pbmF0ZURlYWRDb2RlLmgg
Ki87IH07CisJCTMzMjRBQkJBMjI1M0UwMUQwMEMzN0UxQiAvKiBCM1BlZXBob2xlT3B0aW1pemVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMzI0QUJC
ODIyNTNFMDFEMDBDMzdFMUIgLyogQjNQZWVwaG9sZU9wdGltaXplci5oICovOyB9OworCQkzMzI0
QUJCQzIyNTY3QzI1MDBDMzdFMUIgLyogQjNJbnRSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzMyNEFCQkIyMjU2N0MyNDAwQzM3RTFCIC8qIEIz
SW50UmFuZ2UuaCAqLzsgfTsKIAkJMzcxRDg0MkQxN0M5OEI2RTAwRUNGOTk0IC8qIGxpYnouZHls
aWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFE
ODQyQzE3Qzk4QjZFMDBFQ0Y5OTQgLyogbGliei5keWxpYiAqLzsgfTsKIAkJMzdDNzM4RDIxRURC
NTZFNDAwM0YyQjBCIC8qIFBhcnNlSW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzN0M3MzhEMTFFREI1NjcyMDAzRjJCMEIgLyogUGFyc2VJbnQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MTI5NTI3
NzFEMkNGNkJDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJf
aGVhZGVyLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDEyOTUyNzMxRDJDRjZBQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193
cmFwcGVyX2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMzM0Myw2ICszMzQ1LDkgQEAKIAkJMzM3NDM2NEEyMjRENzlFRjAwQzhDMjI3
IC8qIEIzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuaDsgcGF0aCA9IGIzL0IzT3B0
aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzMzk1QzcwNDIyNTU1RjZDMDBCREJGQUQgLyogQjNFbGltaW5hdGVEZWFkQ29kZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0VsaW1pbmF0ZURlYWRD
b2RlLmNwcDsgcGF0aCA9IGIzL0IzRWxpbWluYXRlRGVhZENvZGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkzMzk1QzcwNTIyNTU1RjZEMDBCREJGQUQgLyogQjNFbGltaW5hdGVE
ZWFkQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0VsaW1pbmF0ZURl
YWRDb2RlLmg7IHBhdGggPSBiMy9CM0VsaW1pbmF0ZURlYWRDb2RlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTMzMjRBQkI3MjI1M0UwMUMwMEMzN0UxQiAvKiBCM1BlZXBob2xlT3B0
aW1pemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUGVlcGhv
bGVPcHRpbWl6ZXIuY3BwOyBwYXRoID0gYjMvQjNQZWVwaG9sZU9wdGltaXplci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzMjRBQkI4MjI1M0UwMUQwMEMzN0UxQiAvKiBCM1Bl
ZXBob2xlT3B0aW1pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUGVl
cGhvbGVPcHRpbWl6ZXIuaDsgcGF0aCA9IGIzL0IzUGVlcGhvbGVPcHRpbWl6ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzMyNEFCQkIyMjU2N0MyNDAwQzM3RTFCIC8qIEIzSW50
UmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNJbnRSYW5nZS5oOyBw
YXRoID0gYjMvQjNJbnRSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzEx
OUE3NzIwQ0NCNURDMDAyQzZEQzkgLyogV2ViS2l0VGFyZ2V0Q29uZGl0aW9uYWxzLnhjY29uZmln
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54
Y2NvbmZpZzsgcGF0aCA9IFdlYktpdFRhcmdldENvbmRpdGlvbmFscy54Y2NvbmZpZzsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzcxRDg0MkMxN0M5OEI2RTAwRUNGOTk0IC8qIGxpYnou
ZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAi
Y29tcGlsZWQubWFjaC1vLmR5bGliIjsgbmFtZSA9IGxpYnouZHlsaWI7IHBhdGggPSB1c3IvbGli
L2xpYnouZHlsaWI7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OwogCQkzN0M3MzhEMTFFREI1Njcy
MDAzRjJCMEIgLyogUGFyc2VJbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGFyc2VJbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUzODgsNiArNTM5Myw3
IEBACiAJCQkJMEZFQzg1QjQxQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5zZXJ0aW9uU2V0LmNwcCAq
LywKIAkJCQkwRkVDODVCNTFCRTE0NjJGMDA4MEZGNzQgLyogQjNJbnNlcnRpb25TZXQuaCAqLywK
IAkJCQkwRkVDODVCNjFCRTE0NjJGMDA4MEZGNzQgLyogQjNJbnNlcnRpb25TZXRJbmxpbmVzLmgg
Ki8sCisJCQkJMzMyNEFCQkIyMjU2N0MyNDAwQzM3RTFCIC8qIEIzSW50UmFuZ2UuaCAqLywKIAkJ
CQkwRkRGNjdEMDFEOUM2MDg2MDAxQjk4MjUgLyogQjNLaW5kLmNwcCAqLywKIAkJCQkwRkRGNjdE
MTFEOUM2MDg2MDAxQjk4MjUgLyogQjNLaW5kLmggKi8sCiAJCQkJNDM2RTU0NTExQzQ2OEU1RjAw
QjVBRjczIC8qIEIzTGVnYWxpemVNZW1vcnlPZmZzZXRzLmNwcCAqLywKQEAgLTU0MjMsNiArNTQy
OSw4IEBACiAJCQkJMEZFQzg0REQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVl
LmNwcCAqLywKIAkJCQkwRkVDODRERTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFs
dWUuaCAqLywKIAkJCQk3OTlFRjdDMzFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFw
LmggKi8sCisJCQkJMzMyNEFCQjcyMjUzRTAxQzAwQzM3RTFCIC8qIEIzUGVlcGhvbGVPcHRpbWl6
ZXIuY3BwICovLAorCQkJCTMzMjRBQkI4MjI1M0UwMUQwMEMzN0UxQiAvKiBCM1BlZXBob2xlT3B0
aW1pemVyLmggKi8sCiAJCQkJMEZFQzg0REYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29w
ZS5jcHAgKi8sCiAJCQkJMEZFQzg0RTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5o
ICovLAogCQkJCTBGMzczMDhBMUMwQkQyOTEwMDA1MkJGQSAvKiBCM1BoaUNoaWxkcmVuLmNwcCAq
LywKQEAgLTg2MTYsNiArODYyNCw3IEBACiAJCQkJMEZFQzg1QkExQkUxNDYyRjAwODBGRjc0IC8q
IEIzSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODVCQjFCRTE0NjJGMDA4
MEZGNzQgLyogQjNJbnNlcnRpb25TZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRG
NjdEMjFEOUM2RDI3MDAxQjk4MjUgLyogQjNLaW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMzI0
QUJCQTIyNTNFMDFEMDBDMzdFMUIgLyogQjNQZWVwaG9sZU9wdGltaXplci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDM2RTU0NTMxQzQ2OEU3NDAwQjVBRjczIC8qIEIzTGVnYWxpemVNZW1vcnlPZmZz
ZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOEUxRTFCRjI4NkVBMDAxM0M4OEYgLyogQjNM
b3dlck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDMxOURBMDQxQzFCRTQwRDAwMUQyNjBC
IC8qIEIzTG93ZXJNYWNyb3NBZnRlck9wdGltaXphdGlvbnMuaCBpbiBIZWFkZXJzICovLApAQCAt
OTkzNCw2ICs5OTQzLDcgQEAKIAkJCQlBRDJGQ0MxQTFEQjU5Q0IyMDBCM0U3MzYgLyogV2ViQXNz
ZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQkY3
MURCNThEQUQwMEIzRTczNiAvKiBXZWJBc3NlbWJseU1lbW9yeVByb3RvdHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQUQyRkNDMUIxREI1OUNCMjAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5TWVtb3J5
UHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzMyNEFCQkMyMjU2N0MyNTAwQzM3
RTFCIC8qIEIzSW50UmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQzAxMURCNThEQUQw
MEIzRTczNiAvKiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBRDJGQ0MxQzFEQjU5Q0IyMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1
Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZDQzAzMURCNThEQUQwMEIzRTczNiAv
KiBXZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvU291cmNlcy50eHQKaW5kZXggZDljZDQ2NzJkOGIuLjZkYTI4YWNjYWJmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NvdXJjZXMudHh0CkBAIC0xNDksNiArMTQ5LDcgQEAgYjMvQjNPcmlnaW4uY3BwCiBi
My9CM09yaWdpbkR1bXAuY3BwCiBiMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAogYjMvQjNQYXRj
aHBvaW50VmFsdWUuY3BwCitiMy9CM1BlZXBob2xlT3B0aW1pemVyLmNwcAogYjMvQjNQaGFzZVNj
b3BlLmNwcAogYjMvQjNQaGlDaGlsZHJlbi5jcHAKIGIzL0IzUHJvY2VkdXJlLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRHVwbGljYXRlVGFpbHMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRHVwbGljYXRlVGFpbHMuY3BwCmluZGV4IGNmZjQ0YTRj
MWUwLi40MTU3NWNhM2I5YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
RHVwbGljYXRlVGFpbHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0R1cGxp
Y2F0ZVRhaWxzLmNwcApAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgICAgIGJyZWFrQ3Jp
dGljYWxFZGdlcyhtX3Byb2MpOwogICAgICAgICAKICAgICAgICAgLy8gRmluZCBibG9ja3MgdGhh
dCB3b3VsZCBiZSBjYW5kaWRhdGVzIGZvciB0YWlsIGR1cGxpY2F0aW9uLiBUaGV5IG11c3QgYmUg
c21hbGwgZW5vdWdoCi0gICAgICAgIC8vIGFuZCB0aGV5IG11Y2ggbm90IGhhdmUgdG9vIG1hbnkg
c3VjY2Vzc29ycy4KKyAgICAgICAgLy8gYW5kIHRoZXkgbXVzdCBub3QgaGF2ZSB0b28gbWFueSBz
dWNjZXNzb3JzLgogCiAgICAgICAgIG1fcHJvYy5yZXNldFZhbHVlT3duZXJzKCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ludFJhbmdlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNJbnRSYW5nZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi44YmNiOTE5MTQ3NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0ludFJhbmdlLmgKQEAgLTAsMCArMSwzNDAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJCM1R5cGUuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJl
YW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIEZJWE1FOiBUaGlz
IEludFJhbmdlIHN0dWZmIHNob3VsZCBiZSByZWZhY3RvcmVkIGludG8gYSBnZW5lcmFsIGFic3Ry
YWN0IGRvbWFpbi4KKy8vIEl0IGNvdWxkIGVhc2lseSBiZSBleHRlbmRlZCBpbiBsb3RzIG9mIGRp
cmVjdGlvbnMsIGluY2x1ZGluZyBhIGtub3duQml0cyBhbmFseXNpcywgc3VwcG9ydGluZyBtYW55
IG1vcmUgb3Bjb2RlcywgYmVpbmcgc2lnbmlmaWNhbnRseSBtb3JlIHByZWNpc2UsIGV0Yy4uCitj
bGFzcyBJbnRSYW5nZSB7CitwdWJsaWM6CisgICAgSW50UmFuZ2UoKQorICAgIHsKKyAgICB9CisK
KyAgICBJbnRSYW5nZShpbnQ2NF90IG1pbiwgaW50NjRfdCBtYXgpCisgICAgICAgIDogbV9taW4o
bWluKQorICAgICAgICAsIG1fbWF4KG1heCkKKyAgICB7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgSW50UmFuZ2UgdG9wKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBJbnRSYW5nZShzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptaW4oKSwgc3RkOjpudW1lcmlj
X2xpbWl0czxUPjo6bWF4KCkpOworICAgIH0KKworICAgIHN0YXRpYyBJbnRSYW5nZSB0b3AoVHlw
ZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW50
MzI6CisgICAgICAgICAgICByZXR1cm4gdG9wPGludDMyX3Q+KCk7CisgICAgICAgIGNhc2UgSW50
NjQ6CisgICAgICAgICAgICByZXR1cm4gdG9wPGludDY0X3Q+KCk7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
cmV0dXJuIEludFJhbmdlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIHN0YXRpYyBJbnRSYW5nZSByYW5nZUZvck1hc2soVCBtYXNrKQorICAgIHsK
KyAgICAgICAgaWYgKCEobWFzayArIDEpKQorICAgICAgICAgICAgcmV0dXJuIHRvcDxUPigpOwor
ICAgICAgICByZXR1cm4gSW50UmFuZ2UoMCwgbWFzayk7CisgICAgfQorCisgICAgc3RhdGljIElu
dFJhbmdlIHJhbmdlRm9yTWFzayhpbnQ2NF90IG1hc2ssIFR5cGUgdHlwZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgcmV0
dXJuIHJhbmdlRm9yTWFzazxpbnQzMl90PihzdGF0aWNfY2FzdDxpbnQzMl90PihtYXNrKSk7Cisg
ICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICByZXR1cm4gcmFuZ2VGb3JNYXNrPGludDY0
X3Q+KG1hc2spOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOworICAgICAgICB9
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgSW50UmFuZ2Ug
cmFuZ2VGb3JaU2hyKGludDMyX3Qgc2hpZnRBbW91bnQpCisgICAgeworICAgICAgICB0eXBlbmFt
ZSBzdGQ6Om1ha2VfdW5zaWduZWQ8VD46OnR5cGUgbWFzayA9IDA7CisgICAgICAgIG1hc2stLTsK
KyAgICAgICAgbWFzayA+Pj0gc2hpZnRBbW91bnQ7CisgICAgICAgIHJldHVybiByYW5nZUZvck1h
c2s8VD4oc3RhdGljX2Nhc3Q8VD4obWFzaykpOworICAgIH0KKworICAgIHN0YXRpYyBJbnRSYW5n
ZSByYW5nZUZvclpTaHIoaW50MzJfdCBzaGlmdEFtb3VudCwgVHlwZSB0eXBlKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICBy
ZXR1cm4gcmFuZ2VGb3JaU2hyPGludDMyX3Q+KHNoaWZ0QW1vdW50KTsKKyAgICAgICAgY2FzZSBJ
bnQ2NDoKKyAgICAgICAgICAgIHJldHVybiByYW5nZUZvclpTaHI8aW50NjRfdD4oc2hpZnRBbW91
bnQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOworICAgICAgICB9CisgICAg
fQorCisgICAgaW50NjRfdCBtaW4oKSBjb25zdCB7IHJldHVybiBtX21pbjsgfQorICAgIGludDY0
X3QgbWF4KCkgY29uc3QgeyByZXR1cm4gbV9tYXg7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0LnByaW50KCJbIiwgbV9taW4sICIs
IiwgbV9tYXgsICJdIik7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBi
b29sIGNvdWxkT3ZlcmZsb3dBZGQoY29uc3QgSW50UmFuZ2UmIG90aGVyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHN1bU92ZXJmbG93czxUPihtX21pbiwgb3RoZXIubV9taW4pCisgICAgICAgICAg
ICB8fCBzdW1PdmVyZmxvd3M8VD4obV9taW4sIG90aGVyLm1fbWF4KQorICAgICAgICAgICAgfHwg
c3VtT3ZlcmZsb3dzPFQ+KG1fbWF4LCBvdGhlci5tX21pbikKKyAgICAgICAgICAgIHx8IHN1bU92
ZXJmbG93czxUPihtX21heCwgb3RoZXIubV9tYXgpOworICAgIH0KKworICAgIGJvb2wgY291bGRP
dmVyZmxvd0FkZChjb25zdCBJbnRSYW5nZSYgb3RoZXIsIFR5cGUgdHlwZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgcmV0
dXJuIGNvdWxkT3ZlcmZsb3dBZGQ8aW50MzJfdD4ob3RoZXIpOworICAgICAgICBjYXNlIEludDY0
OgorICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dBZGQ8aW50NjRfdD4ob3RoZXIpOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGJvb2wgY291bGRPdmVyZmxvd1N1
Yihjb25zdCBJbnRSYW5nZSYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gZGlmZmVyZW5j
ZU92ZXJmbG93czxUPihtX21pbiwgb3RoZXIubV9taW4pCisgICAgICAgICAgICB8fCBkaWZmZXJl
bmNlT3ZlcmZsb3dzPFQ+KG1fbWluLCBvdGhlci5tX21heCkKKyAgICAgICAgICAgIHx8IGRpZmZl
cmVuY2VPdmVyZmxvd3M8VD4obV9tYXgsIG90aGVyLm1fbWluKQorICAgICAgICAgICAgfHwgZGlm
ZmVyZW5jZU92ZXJmbG93czxUPihtX21heCwgb3RoZXIubV9tYXgpOworICAgIH0KKworICAgIGJv
b2wgY291bGRPdmVyZmxvd1N1Yihjb25zdCBJbnRSYW5nZSYgb3RoZXIsIFR5cGUgdHlwZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAg
ICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dTdWI8aW50MzJfdD4ob3RoZXIpOworICAgICAgICBj
YXNlIEludDY0OgorICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dTdWI8aW50NjRfdD4o
b3RoZXIpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGJvb2wgY291bGRP
dmVyZmxvd011bChjb25zdCBJbnRSYW5nZSYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4g
cHJvZHVjdE92ZXJmbG93czxUPihtX21pbiwgb3RoZXIubV9taW4pCisgICAgICAgICAgICB8fCBw
cm9kdWN0T3ZlcmZsb3dzPFQ+KG1fbWluLCBvdGhlci5tX21heCkKKyAgICAgICAgICAgIHx8IHBy
b2R1Y3RPdmVyZmxvd3M8VD4obV9tYXgsIG90aGVyLm1fbWluKQorICAgICAgICAgICAgfHwgcHJv
ZHVjdE92ZXJmbG93czxUPihtX21heCwgb3RoZXIubV9tYXgpOworICAgIH0KKworICAgIGJvb2wg
Y291bGRPdmVyZmxvd011bChjb25zdCBJbnRSYW5nZSYgb3RoZXIsIFR5cGUgdHlwZSkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAg
ICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dNdWw8aW50MzJfdD4ob3RoZXIpOworICAgICAgICBjYXNl
IEludDY0OgorICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dNdWw8aW50NjRfdD4ob3Ro
ZXIpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIEludFJhbmdlIHNobChp
bnQzMl90IHNoaWZ0QW1vdW50KQorICAgIHsKKyAgICAgICAgVCBuZXdNaW4gPSBzdGF0aWNfY2Fz
dDxUPihtX21pbikgPDwgc3RhdGljX2Nhc3Q8VD4oc2hpZnRBbW91bnQpOworICAgICAgICBUIG5l
d01heCA9IHN0YXRpY19jYXN0PFQ+KG1fbWF4KSA8PCBzdGF0aWNfY2FzdDxUPihzaGlmdEFtb3Vu
dCk7CisKKyAgICAgICAgaWYgKChuZXdNaW4gPj4gc2hpZnRBbW91bnQpICE9IHN0YXRpY19jYXN0
PFQ+KG1fbWluKSkKKyAgICAgICAgICAgIG5ld01pbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46
Om1pbigpOworICAgICAgICBpZiAoKG5ld01heCA+PiBzaGlmdEFtb3VudCkgIT0gc3RhdGljX2Nh
c3Q8VD4obV9tYXgpKQorICAgICAgICAgICAgbmV3TWF4ID0gc3RkOjpudW1lcmljX2xpbWl0czxU
Pjo6bWF4KCk7CisKKyAgICAgICAgcmV0dXJuIEludFJhbmdlKG5ld01pbiwgbmV3TWF4KTsKKyAg
ICB9CisKKyAgICBJbnRSYW5nZSBzaGwoaW50MzJfdCBzaGlmdEFtb3VudCwgVHlwZSB0eXBlKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAg
ICAgICAgICByZXR1cm4gc2hsPGludDMyX3Q+KHNoaWZ0QW1vdW50KTsKKyAgICAgICAgY2FzZSBJ
bnQ2NDoKKyAgICAgICAgICAgIHJldHVybiBzaGw8aW50NjRfdD4oc2hpZnRBbW91bnQpOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOworICAgICAgICB9CisgICAgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBJbnRSYW5nZSBzU2hyKGludDMyX3Qgc2hpZnRBbW91
bnQpCisgICAgeworICAgICAgICBUIG5ld01pbiA9IHN0YXRpY19jYXN0PFQ+KG1fbWluKSA+PiBz
dGF0aWNfY2FzdDxUPihzaGlmdEFtb3VudCk7CisgICAgICAgIFQgbmV3TWF4ID0gc3RhdGljX2Nh
c3Q8VD4obV9tYXgpID4+IHN0YXRpY19jYXN0PFQ+KHNoaWZ0QW1vdW50KTsKKworICAgICAgICBy
ZXR1cm4gSW50UmFuZ2UobmV3TWluLCBuZXdNYXgpOworICAgIH0KKworICAgIEludFJhbmdlIHNT
aHIoaW50MzJfdCBzaGlmdEFtb3VudCwgVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICByZXR1cm4gc1Nocjxp
bnQzMl90PihzaGlmdEFtb3VudCk7CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICBy
ZXR1cm4gc1NocjxpbnQ2NF90PihzaGlmdEFtb3VudCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJu
IEludFJhbmdlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIEludFJhbmdlIHpTaHIoaW50MzJfdCBzaGlmdEFtb3VudCkKKyAgICB7CisgICAgICAg
IC8vIFRoaXMgaXMgYW4gYXdrd2FyZCBjb3JuZXIgY2FzZSBmb3IgYWxsIG9mIHRoZSBvdGhlciBs
b2dpYy4KKyAgICAgICAgaWYgKCFzaGlmdEFtb3VudCkKKyAgICAgICAgICAgIHJldHVybiAqdGhp
czsKKworICAgICAgICAvLyBJZiB0aGUgaW5wdXQgcmFuZ2UgbWF5IGJlIG5lZ2F0aXZlLCB0aGVu
IGFsbCB3ZSBjYW4gc2F5IGFib3V0IHRoZSBvdXRwdXQgcmFuZ2UgaXMgdGhhdCBpdAorICAgICAg
ICAvLyB3aWxsIGJlIG1hc2tlZC4gVGhhdCdzIGJlY2F1c2UgLTEgcmlnaHQgc2hpZnRlZCBqdXN0
IHByb2R1Y2VzIHRoYXQgbWFzay4KKyAgICAgICAgaWYgKG1fbWluIDwgMCkKKyAgICAgICAgICAg
IHJldHVybiByYW5nZUZvclpTaHI8VD4oc2hpZnRBbW91bnQpOworCisgICAgICAgIC8vIElmIHRo
ZSBpbnB1dCByYW5nZSBpcyBub24tbmVnYXRpdmUsIHRoZW4gdGhpcyBqdXN0IGJyaW5ncyB0aGUg
cmFuZ2UgY2xvc2VyIHRvIHplcm8uCisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjptYWtl
X3Vuc2lnbmVkPFQ+Ojp0eXBlIFVuc2lnbmVkVDsKKyAgICAgICAgVW5zaWduZWRUIG5ld01pbiA9
IHN0YXRpY19jYXN0PFVuc2lnbmVkVD4obV9taW4pID4+IHN0YXRpY19jYXN0PFVuc2lnbmVkVD4o
c2hpZnRBbW91bnQpOworICAgICAgICBVbnNpZ25lZFQgbmV3TWF4ID0gc3RhdGljX2Nhc3Q8VW5z
aWduZWRUPihtX21heCkgPj4gc3RhdGljX2Nhc3Q8VW5zaWduZWRUPihzaGlmdEFtb3VudCk7CisK
KyAgICAgICAgcmV0dXJuIEludFJhbmdlKG5ld01pbiwgbmV3TWF4KTsKKyAgICB9CisKKyAgICBJ
bnRSYW5nZSB6U2hyKGludDMyX3Qgc2hpZnRBbW91bnQsIFR5cGUgdHlwZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgcmV0
dXJuIHpTaHI8aW50MzJfdD4oc2hpZnRBbW91bnQpOworICAgICAgICBjYXNlIEludDY0OgorICAg
ICAgICAgICAgcmV0dXJuIHpTaHI8aW50NjRfdD4oc2hpZnRBbW91bnQpOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIHJldHVybiBJbnRSYW5nZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICBJbnRSYW5nZSBhZGQoY29uc3QgSW50UmFuZ2UmIG90aGVyKQorICAg
IHsKKyAgICAgICAgaWYgKGNvdWxkT3ZlcmZsb3dBZGQ8VD4ob3RoZXIpKQorICAgICAgICAgICAg
cmV0dXJuIHRvcDxUPigpOworICAgICAgICByZXR1cm4gSW50UmFuZ2UobV9taW4gKyBvdGhlci5t
X21pbiwgbV9tYXggKyBvdGhlci5tX21heCk7CisgICAgfQorCisgICAgSW50UmFuZ2UgYWRkKGNv
bnN0IEludFJhbmdlJiBvdGhlciwgVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICByZXR1cm4gYWRkPGludDMy
X3Q+KG90aGVyKTsKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIHJldHVybiBhZGQ8
aW50NjRfdD4ob3RoZXIpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBJbnRSYW5nZSBz
dWIoY29uc3QgSW50UmFuZ2UmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKGNvdWxkT3ZlcmZs
b3dTdWI8VD4ob3RoZXIpKQorICAgICAgICAgICAgcmV0dXJuIHRvcDxUPigpOworICAgICAgICBy
ZXR1cm4gSW50UmFuZ2UobV9taW4gLSBvdGhlci5tX21heCwgbV9tYXggLSBvdGhlci5tX21pbik7
CisgICAgfQorCisgICAgSW50UmFuZ2Ugc3ViKGNvbnN0IEludFJhbmdlJiBvdGhlciwgVHlwZSB0
eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW50MzI6
CisgICAgICAgICAgICByZXR1cm4gc3ViPGludDMyX3Q+KG90aGVyKTsKKyAgICAgICAgY2FzZSBJ
bnQ2NDoKKyAgICAgICAgICAgIHJldHVybiBzdWI8aW50NjRfdD4ob3RoZXIpOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIHJldHVybiBJbnRSYW5nZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KKyAgICBJbnRSYW5nZSBtdWwoY29uc3QgSW50UmFuZ2UmIG90aGVyKQor
ICAgIHsKKyAgICAgICAgaWYgKGNvdWxkT3ZlcmZsb3dNdWw8VD4ob3RoZXIpKQorICAgICAgICAg
ICAgcmV0dXJuIHRvcDxUPigpOworICAgICAgICByZXR1cm4gSW50UmFuZ2UoCisgICAgICAgICAg
ICBzdGQ6Om1pbigKKyAgICAgICAgICAgICAgICBzdGQ6Om1pbihtX21pbiAqIG90aGVyLm1fbWlu
LCBtX21pbiAqIG90aGVyLm1fbWF4KSwKKyAgICAgICAgICAgICAgICBzdGQ6Om1pbihtX21heCAq
IG90aGVyLm1fbWluLCBtX21heCAqIG90aGVyLm1fbWF4KSksCisgICAgICAgICAgICBzdGQ6Om1h
eCgKKyAgICAgICAgICAgICAgICBzdGQ6Om1heChtX21pbiAqIG90aGVyLm1fbWluLCBtX21pbiAq
IG90aGVyLm1fbWF4KSwKKyAgICAgICAgICAgICAgICBzdGQ6Om1heChtX21heCAqIG90aGVyLm1f
bWluLCBtX21heCAqIG90aGVyLm1fbWF4KSkpOworICAgIH0KKworICAgIEludFJhbmdlIG11bChj
b25zdCBJbnRSYW5nZSYgb3RoZXIsIFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
dHlwZSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgcmV0dXJuIG11bDxpbnQz
Ml90PihvdGhlcik7CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICByZXR1cm4gbXVs
PGludDY0X3Q+KG90aGVyKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmFuZ2UoKTsKKyAg
ICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQ2NF90IG1fbWluIHsgMCB9OworICAg
IGludDY0X3QgbV9tYXggeyAwIH07Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
ck1hY3Jvcy5jcHAKaW5kZXggNGM1OTRkMjRiMzMuLjk5ZmFmNDBjMmZhIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5j
bHVkZSAiQjNJbnNlcnRpb25TZXRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZUlu
bGluZXMuaCIKICNpbmNsdWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgorI2luY2x1ZGUgIkIzUGVl
cGhvbGVPcHRpbWl6ZXIuaCIKICNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKICNpbmNsdWRlICJC
M1Byb2NlZHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cy5oIgpAQCAtODgsNyArODksOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgcHJvY2Vz
c0N1cnJlbnRCbG9jaygpCiAgICAgeworICAgICAgICBQZWVwaG9sZU9wdGltaXplciBwZWVwaG9s
ZShtX3Byb2MsIG1faW5zZXJ0aW9uU2V0KTsKICAgICAgICAgZm9yIChtX2luZGV4ID0gMDsgbV9p
bmRleCA8IG1fYmxvY2stPnNpemUoKTsgKyttX2luZGV4KSB7CisgICAgICAgICAgICBwZWVwaG9s
ZS5zZXRJbmRleChtX2luZGV4KTsKICAgICAgICAgICAgIG1fdmFsdWUgPSBtX2Jsb2NrLT5hdCht
X2luZGV4KTsKICAgICAgICAgICAgIG1fb3JpZ2luID0gbV92YWx1ZS0+b3JpZ2luKCk7CiAgICAg
ICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7CkBAIC05Niw2ICs5OSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmlzQ2hpbGwoKSkgewogICAgICAg
ICAgICAgICAgICAgICBpZiAoaXNBUk02NCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBiZWZvcmUgPSBtX2Jsb2NrSW5zZXJ0aW9uU2V0LnNwbGl0Rm9yd2FyZChtX2Js
b2NrLCBtX2luZGV4LCAmbV9pbnNlcnRpb25TZXQpOworICAgICAgICAgICAgICAgICAgICAgICAg
cGVlcGhvbGUuc2V0SW5kZXgobV9pbmRleCk7IC8vIHNwbGl0Rm9yd2FyZCByZXNldHMgbV9pbmRl
eCwgc28gd2UgbXVzdCB1cGRhdGUgdGhlIGNvcHkgaW4gcGVlcGhvbGUKICAgICAgICAgICAgICAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIHplcm9EZW5DYXNlID0gbV9ibG9ja0luc2VydGlvblNldC5p
bnNlcnRCZWZvcmUobV9ibG9jayk7CiAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBub3JtYWxNb2RDYXNlID0gbV9ibG9ja0luc2VydGlvblNldC5pbnNlcnRCZWZvcmUobV9ibG9j
ayk7CiAKQEAgLTEyNCw3ICsxMjgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAg
ICAgYmVmb3JlLT51cGRhdGVQcmVkZWNlc3NvcnNBZnRlcigpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICAgICBtYWtlRGl2aXNpb25DaGlsbChNb2QpOworICAgICAgICAgICAg
ICAgICAgICAgICAgbWFrZURpdmlzaW9uQ2hpbGwoTW9kLCBwZWVwaG9sZSk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAg
LTEzOSwyMSArMTQzLDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUt
PnJlcGxhY2VXaXRoSWRlbnRpdHkocmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAgbV9jaGFu
Z2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fdmFsdWUtPnR5cGUoKSA9
PSBGbG9hdCkgewotICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbnVtZXJhdG9yQXNEb3VibGUg
PSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIEZsb2F0VG9Eb3VibGUsIG1f
b3JpZ2luLCBtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgICAgIFZhbHVlKiBk
ZW5vbWluYXRvckFzRG91YmxlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4
LCBGbG9hdFRvRG91YmxlLCBtX29yaWdpbiwgbV92YWx1ZS0+Y2hpbGQoMSkpOworICAgICAgICAg
ICAgICAgICAgICBWYWx1ZSogbnVtZXJhdG9yQXNEb3VibGUgPSBwZWVwaG9sZS5yZWR1Y2VGbG9h
dFRvRG91YmxlKERvdWJsZSwgbV9vcmlnaW4sIG1fdmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAg
ICAgICAgICAgICAgVmFsdWUqIGRlbm9taW5hdG9yQXNEb3VibGUgPSBwZWVwaG9sZS5yZWR1Y2VG
bG9hdFRvRG91YmxlKERvdWJsZSwgbV9vcmlnaW4sIG1fdmFsdWUtPmNoaWxkKDEpKTsKICAgICAg
ICAgICAgICAgICAgICAgVmFsdWUqIGZ1bmN0aW9uQWRkcmVzcyA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydDxDb25zdFB0clZhbHVlPihtX2luZGV4LCBtX29yaWdpbiwgZm1vZERvdWJsZSk7CiAgICAg
ICAgICAgICAgICAgICAgIFZhbHVlKiBkb3VibGVNb2QgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8
Q0NhbGxWYWx1ZT4obV9pbmRleCwgRG91YmxlLCBtX29yaWdpbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgIEVmZmVjdHM6Om5vbmUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9u
QWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyYXRvckFzRG91YmxlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgZGVub21pbmF0b3JBc0RvdWJsZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIFZhbHVlKiByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5k
ZXgsIERvdWJsZVRvRmxvYXQsIG1fb3JpZ2luLCBkb3VibGVNb2QpOworICAgICAgICAgICAgICAg
ICAgICBWYWx1ZSogcmVzdWx0ID0gcGVlcGhvbGUucmVkdWNlRG91YmxlVG9GbG9hdChGbG9hdCwg
bV9vcmlnaW4sIGRvdWJsZU1vZCk7CiAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxh
Y2VXaXRoSWRlbnRpdHkocmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzQVJNNjQoKSkgewotICAgICAgICAg
ICAgICAgICAgICBWYWx1ZSogZGl2UmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVl
PihtX2luZGV4LCBjaGlsbChEaXYpLCBtX29yaWdpbiwgbV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFs
dWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG11bHRpcGxpZWRCYWNr
ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBNdWwsIG1fb3JpZ2luLCBk
aXZSZXN1bHQsIG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgVmFsdWUq
IHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgU3ViLCBtX29y
aWdpbiwgbV92YWx1ZS0+Y2hpbGQoMCksIG11bHRpcGxpZWRCYWNrKTsKKyAgICAgICAgICAgICAg
ICAgICAgVmFsdWUqIGRpdlJlc3VsdCA9IHBlZXBob2xlLnJlZHVjZURpdihtX3ZhbHVlLT50eXBl
KCksIG1fb3JpZ2luLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSksIHRydWUp
OworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbXVsdGlwbGllZEJhY2sgPSBwZWVwaG9sZS5y
ZWR1Y2VNdWwobV92YWx1ZS0+dHlwZSgpLCBtX29yaWdpbiwgZGl2UmVzdWx0LCBtX3ZhbHVlLT5j
aGlsZCgxKSk7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiByZXN1bHQgPSBwZWVwaG9sZS5y
ZWR1Y2VTdWIobV92YWx1ZS0+dHlwZSgpLCBtX29yaWdpbiwgbV92YWx1ZS0+Y2hpbGQoMCksIG11
bHRpcGxpZWRCYWNrKTsKICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJ
ZGVudGl0eShyZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTE2Miw5ICsxNjYsOSBAQCBwcml2YXRlOgogCiAgICAgICAg
ICAgICBjYXNlIFVNb2Q6IHsKICAgICAgICAgICAgICAgICBpZiAoaXNBUk02NCgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIFZhbHVlKiBkaXZSZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8
VmFsdWU+KG1faW5kZXgsIFVEaXYsIG1fb3JpZ2luLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1
ZS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbXVsdGlwbGllZEJhY2sg
PSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIE11bCwgbV9vcmlnaW4sIGRp
dlJlc3VsdCwgbV92YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgICAgICBWYWx1ZSog
cmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBTdWIsIG1fb3Jp
Z2luLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbXVsdGlwbGllZEJhY2spOworICAgICAgICAgICAgICAg
ICAgICBWYWx1ZSogZGl2UmVzdWx0ID0gcGVlcGhvbGUucmVkdWNlVURpdihtX3ZhbHVlLT50eXBl
KCksIG1fb3JpZ2luLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOworICAg
ICAgICAgICAgICAgICAgICBWYWx1ZSogbXVsdGlwbGllZEJhY2sgPSBwZWVwaG9sZS5yZWR1Y2VN
dWwobV92YWx1ZS0+dHlwZSgpLCBtX29yaWdpbiwgZGl2UmVzdWx0LCBtX3ZhbHVlLT5jaGlsZCgx
KSk7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiByZXN1bHQgPSBwZWVwaG9sZS5yZWR1Y2VT
dWIobV92YWx1ZS0+dHlwZSgpLCBtX29yaWdpbiwgbV92YWx1ZS0+Y2hpbGQoMCksIG11bHRpcGxp
ZWRCYWNrKTsKICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0
eShyZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgIH0KQEAgLTE3Myw3ICsxNzcsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBj
YXNlIERpdjogewogICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5pc0NoaWxsKCkpCi0gICAg
ICAgICAgICAgICAgICAgIG1ha2VEaXZpc2lvbkNoaWxsKERpdik7CisgICAgICAgICAgICAgICAg
ICAgIG1ha2VEaXZpc2lvbkNoaWxsKERpdiwgcGVlcGhvbGUpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogCkBAIC0yMjUsMTAgKzIyOSw4IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgaWYgKCFpc1g4NigpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIE9uIEFS
TSwgdGhlIGxvYWQgcGFydCBvZiB0aGUgQ0FTIGRvZXMgYSBsb2FkIHdpdGggemVybyBleHRlbnNp
b24uIFRoZXJlZm9yZSwgd2UgbmVlZAogICAgICAgICAgICAgICAgICAgICAvLyB0byB6ZXJvLWV4
dGVuZCB0aGUgaW5wdXQuCi0gICAgICAgICAgICAgICAgICAgIFZhbHVlKiBtYXNrZWRFeHBlY3Rl
ZFZhbHVlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1faW5kZXgsIEJpdEFuZCwgbV9vcmlnaW4sIGV4cGVjdGVkVmFsdWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRJbnRDb25zdGFudChtX2luZGV4
LCBleHBlY3RlZFZhbHVlLCBtYXNrKHdpZHRoKSkpOwotICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgVmFsdWUqIG1hc2tWYWx1ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dEludENvbnN0YW50KG1faW5kZXgsIGV4cGVjdGVkVmFsdWUsIG1hc2sod2lkdGgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgVmFsdWUqIG1hc2tlZEV4cGVjdGVkVmFsdWUgPSBwZWVwaG9sZS5yZWR1
Y2VCaXRBbmQobV92YWx1ZS0+dHlwZSgpLCBtX29yaWdpbiwgZXhwZWN0ZWRWYWx1ZSwgbWFza1Zh
bHVlKTsKICAgICAgICAgICAgICAgICAgICAgYXRvbWljLT5jaGlsZCgwKSA9IG1hc2tlZEV4cGVj
dGVkVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgfQpAQCAtMzI0LDcgKzMyNiw3IEBAIHByaXZhdGU6CiAgICAgICAgIG1faW5zZXJ0
aW9uU2V0LmV4ZWN1dGUobV9ibG9jayk7CiAgICAgfQogCi0gICAgdm9pZCBtYWtlRGl2aXNpb25D
aGlsbChPcGNvZGUgbm9uQ2hpbGxPcGNvZGUpCisgICAgdm9pZCBtYWtlRGl2aXNpb25DaGlsbChP
cGNvZGUgbm9uQ2hpbGxPcGNvZGUsIFBlZXBob2xlT3B0aW1pemVyJiBwZWVwaG9sZSkKICAgICB7
CiAgICAgICAgIEFTU0VSVChub25DaGlsbE9wY29kZSA9PSBEaXYgfHwgbm9uQ2hpbGxPcGNvZGUg
PT0gTW9kKTsKIApAQCAtMzQ4LDE2ICszNTAsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gZG9u
ZToKICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKIAorICAgICAgICBUeXBlIHR5cGUgPSBtX3Zh
bHVlLT50eXBlKCk7CisKICAgICAgICAgVmFsdWUqIG51bSA9IG1fdmFsdWUtPmNoaWxkKDApOwog
ICAgICAgICBWYWx1ZSogZGVuID0gbV92YWx1ZS0+Y2hpbGQoMSk7CiAKICAgICAgICAgVmFsdWUq
IG9uZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydEludENvbnN0YW50KG1faW5kZXgsIG1fdmFsdWUs
IDEpOwotICAgICAgICBWYWx1ZSogaXNEZW5PSyA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1
ZT4oCi0gICAgICAgICAgICBtX2luZGV4LCBBYm92ZSwgbV9vcmlnaW4sCi0gICAgICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIEFkZCwgbV9vcmlnaW4sIGRlbiwg
b25lKSwKLSAgICAgICAgICAgIG9uZSk7CisgICAgICAgIFZhbHVlKiBkZW5QbHVzT25lID0gcGVl
cGhvbGUucmVkdWNlQWRkKHR5cGUsIG1fb3JpZ2luLCBkZW4sIG9uZSk7CisgICAgICAgIFZhbHVl
KiBpc0Rlbk9LID0gcGVlcGhvbGUucmVkdWNlQWJvdmUodHlwZSwgbV9vcmlnaW4sIGRlblBsdXNP
bmUsIG9uZSk7CiAKICAgICAgICAgQmFzaWNCbG9jayogYmVmb3JlID0gbV9ibG9ja0luc2VydGlv
blNldC5zcGxpdEZvcndhcmQobV9ibG9jaywgbV9pbmRleCwgJm1faW5zZXJ0aW9uU2V0KTsKKyAg
ICAgICAgcGVlcGhvbGUuc2V0SW5kZXgobV9pbmRleCk7CiAKICAgICAgICAgQmFzaWNCbG9jayog
bm9ybWFsRGl2Q2FzZSA9IG1fYmxvY2tJbnNlcnRpb25TZXQuaW5zZXJ0QmVmb3JlKG1fYmxvY2sp
OwogICAgICAgICBCYXNpY0Jsb2NrKiBzaGFkeURlbkNhc2UgPSBtX2Jsb2NrSW5zZXJ0aW9uU2V0
Lmluc2VydEJlZm9yZShtX2Jsb2NrKTsKQEAgLTM4OCw3ICszOTEsNyBAQCBwcml2YXRlOgogICAg
ICAgICB6ZXJvRGVuQ2FzZS0+c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVkQmxvY2sobV9ibG9jaykp
OwogCiAgICAgICAgIGludDY0X3QgYmFkTnVtZXJhdG9yQ29uc3QgPSAwOwotICAgICAgICBzd2l0
Y2ggKG1fdmFsdWUtPnR5cGUoKSkgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAg
Y2FzZSBJbnQzMjoKICAgICAgICAgICAgIGJhZE51bWVyYXRvckNvbnN0ID0gc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQzMl90Pjo6bWluKCk7CiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BlZXBob2xlT3B0aW1pemVyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BlZXBob2xlT3B0aW1pemVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzFhYjNjNTQ5ZDIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQZWVwaG9sZU9wdGltaXplci5jcHAKQEAgLTAs
MCArMSwxODQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzUGVlcGhvbGVPcHRpbWl6ZXIuaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgi
CisjaW5jbHVkZSAiQjNDb21wdXRlRGl2aXNpb25NYWdpYy5oIgorI2luY2x1ZGUgIkIzSW5zZXJ0
aW9uU2V0SW5saW5lcy5oIgorI2luY2x1ZGUgIkIzSW50UmFuZ2UuaCIKKyNpbmNsdWRlICJCM01l
bW9yeVZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjphcHBl
bmRUb0N1cnJlbnRCbG9jayhWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKG1faW5zZXJ0aW9uU2V0
KQorICAgICAgICByZXR1cm4gbV9pbnNlcnRpb25TZXQtPmluc2VydFZhbHVlKG1faW5kZXgsIHZh
bHVlKTsKKyAgICBBU1NFUlQoISFtX2Jsb2NrKTsKKyAgICBtX2Jsb2NrLT5hcHBlbmQodmFsdWUp
OworICAgIHJldHVybiB2YWx1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0
eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OmVtaXQoQXJn
dW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2so
bV9wcm9jLmFkZDxWYWx1ZVR5cGU+KGFyZ3VtZW50cy4uLikpOworfQorCitWYWx1ZSogUGVlcGhv
bGVPcHRpbWl6ZXI6OnJlZHVjZU9wYXF1ZShUeXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogY2hp
bGQsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogT3BhcXVlKE9wYXF1ZSh2
YWx1ZSkpCisgICAgLy8gSW50byB0aGlzOiBPcGFxdWUodmFsdWUpCisgICAgaWYgKGNoaWxkLT5v
cGNvZGUoKSA9PSBPcGFxdWUpCisgICAgICAgIHJldHVybiBjaGlsZDsKKworICAgIHJldHVybiBj
YW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oT3BhcXVlLCBvcmlnaW4sIGNoaWxkKTsK
K30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VBZGQoVHlwZSB0eXBlLCBPcmln
aW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCkKK3sK
KyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxlZnQpKQorICAgICAgICByZXR1cm4gcmVk
dWNlQWRkKHR5cGUsIG9yaWdpbiwgcmlnaHQsIGxlZnQpOworCisgICAgLy8gVHVybiB0aGlzOiBB
ZGQoY29uc3RhbnQxLCBjb25zdGFudDIpCisgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgKyBj
b25zdGFudDIKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbGVmdC0+YWRkQ29uc3RhbnQobV9w
cm9jLCByaWdodCkpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFu
dCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IEFkZCh2YWx1ZSwgemVybykKKyAgICAvLyBJbnRvIGFu
IElkZW50aXR5LgorICAgIC8vCisgICAgLy8gQWRkaXRpb24gaXMgc3VidGxlIHdpdGggZG91Ymxl
cy4gWmVybyBpcyBub3QgdGhlIG5ldXRyYWwgdmFsdWUsIG5lZ2F0aXZlIHplcm8gaXM6CisgICAg
Ly8gICAgMCArIDAgPSAwCisgICAgLy8gICAgMCArIC0wID0gMAorICAgIC8vICAgIC0wICsgMCA9
IDAKKyAgICAvLyAgICAtMCArIC0wID0gLTAKKyAgICBpZiAocmlnaHQtPmlzSW50KDApIHx8IHJp
Z2h0LT5pc05lZ2F0aXZlWmVybygpKQorICAgICAgICByZXR1cm4gbGVmdDsKKworICAgIGlmIChp
c0ludCh0eXBlKSkgeworICAgICAgICBpZiAobGVmdC0+b3Bjb2RlKCkgPT0gQWRkKSB7CisgICAg
ICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIgQWRkKEFkZCh2YWx1ZSwgY29uc3RhbnQxKSwg
Y29uc3RhbnQyKQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBZGQodmFsdWUsIGNvbnN0YW50
MSArIGNvbnN0YW50MikKKyAgICAgICAgICAgIFZhbHVlKiBuZXdTdW0gPSByaWdodC0+YWRkQ29u
c3RhbnQobV9wcm9jLCBsZWZ0LT5jaGlsZCgxKSk7CisgICAgICAgICAgICBpZiAobmV3U3VtKSB7
CisgICAgICAgICAgICAgICAgbmV3U3VtID0gYXBwZW5kVG9DdXJyZW50QmxvY2sobmV3U3VtKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gcmVkdWNlQWRkKHR5cGUsIG9yaWdpbiwgbGVmdC0+Y2hp
bGQoMCksIG5ld1N1bSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBU
dXJuIHRoaXM6IEludGVnZXIgQWRkKHZhbHVlLCB2YWx1ZSkKKyAgICAgICAgLy8gSW50byB0aGlz
OiBTaGwodmFsdWUsIDEpCisgICAgICAgIC8vIFRoaXMgaXMgYSB1c2VmdWwgY2Fub25pY2FsaXph
dGlvbi4gSXQncyBub3QgbWVhbnQgdG8gYmUgYSBzdHJlbmd0aCByZWR1Y3Rpb24uCisgICAgICAg
IGlmIChsZWZ0ID09IHJpZ2h0KSB7CisgICAgICAgICAgICBWYWx1ZSogc2hpZnRBbW91bnQgPSBl
bWl0PENvbnN0MzJWYWx1ZT4ob3JpZ2luLCAxKTsKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VT
aGwodHlwZSwgb3JpZ2luLCBsZWZ0LCBzaGlmdEFtb3VudCk7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBUdXJuIHRoaXM6IEludGVnZXIgQWRkKHZhbHVlLCBOZWcob3RoZXJWYWx1ZSkpCisgICAg
ICAgIC8vIEludG8gdGhpczogU3ViKHZhbHVlLCBvdGhlclZhbHVlKQorICAgICAgICBpZiAocmln
aHQtPm9wY29kZSgpID09IE5lZykKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VTdWIodHlwZSwg
b3JpZ2luLCBsZWZ0LCByaWdodC0+Y2hpbGQoMCkpOworCisgICAgICAgIC8vIFR1cm4gdGhpczog
SW50ZWdlciBBZGQoTmVnKHZhbHVlKSwgb3RoZXJWYWx1ZSkKKyAgICAgICAgLy8gSW50byB0aGlz
OiBTdWIob3RoZXJWYWx1ZSwgdmFsdWUpCisgICAgICAgIGlmIChsZWZ0LT5vcGNvZGUoKSA9PSBO
ZWcpCisgICAgICAgICAgICByZXR1cm4gcmVkdWNlU3ViKHR5cGUsIG9yaWdpbiwgcmlnaHQsIGxl
ZnQtPmNoaWxkKDApKTsKKworICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIgQWRkKEFkZCh2
YWx1ZSwgY29uc3RhbnQpLCBvdGhlclZhbHVlKQorICAgICAgICAvLyBJbnRvIHRoaXM6IEFkZChB
ZGQodmFsdWUsIG90aGVyVmFsdWUpLCBjb25zdGFudCkKKyAgICAgICAgLy8gRklYTUU6IHRoaXMg
Y2FuIGNhdXNlIGNvZGUgZHVwbGljYXRpb24sIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBvbmNlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQwODEgbGFuZHMKKyAgICAg
ICAgaWYgKGxlZnQtPm9wY29kZSgpID09IEFkZCAmJiBsZWZ0LT5jaGlsZCgxKS0+aGFzSW50KCkp
IHsKKyAgICAgICAgICAgIFZhbHVlKiB2YWwgPSByZWR1Y2VBZGQodHlwZSwgb3JpZ2luLCBsZWZ0
LT5jaGlsZCgwKSwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUFkZCh0eXBlLCBv
cmlnaW4sIHZhbCwgbGVmdC0+Y2hpbGQoMSkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVHVy
biB0aGlzOiBJbnRlZ2VyIEFkZCh2YWx1ZSwgQWRkKG90aGVyVmFsdWUsIGNvbnN0YW50KSkKKyAg
ICAgICAgLy8gSW50byB0aGlzOiBBZGQoQWRkKHZhbHVlLCBvdGhlclZhbHVlKSwgY29uc3RhbnQp
CisgICAgICAgIC8vIEZJWE1FOiB0aGlzIGNhbiBjYXVzZSBjb2RlIGR1cGxpY2F0aW9uLCBhbmQg
c2hvdWxkIGJlIHJlbW92ZWQgb25jZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk0MDgxIGxhbmRzCisgICAgICAgIGlmIChyaWdodC0+b3Bjb2RlKCkgPT0gQWRkICYm
IHJpZ2h0LT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKKyAgICAgICAgICAgIFZhbHVlKiB2YWwgPSBy
ZWR1Y2VBZGQodHlwZSwgb3JpZ2luLCBsZWZ0LCByaWdodC0+Y2hpbGQoMCkpOworICAgICAgICAg
ICAgcmV0dXJuIHJlZHVjZUFkZCh0eXBlLCBvcmlnaW4sIHZhbCwgcmlnaHQtPmNoaWxkKDEpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChWYWx1ZSogcmVzdWx0ID0gdHJ5UmVkdWNlTXVsRGlz
dHJpYnV0aXZpdHkoQWRkLCB0eXBlLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIg
OiBlbWl0PFZhbHVlPihBZGQsIG9yaWdpbiwgbGVmdCwgcmlnaHQpOworfQorCitWYWx1ZSogUGVl
cGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVN1YihUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVl
KiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhp
czogU3ViKGNvbnN0YW50MSwgY29uc3RhbnQyKQorICAgIC8vIEludG8gdGhpczogY29uc3RhbnQx
IC0gY29uc3RhbnQyCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGxlZnQtPnN1YkNvbnN0YW50
KG1fcHJvYywgcmlnaHQpKQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29u
c3RhbnQpOworCisgICAgaWYgKGlzSW50KHR5cGUpKSB7CisgICAgICAgIC8vIFR1cm4gdGhpczog
SW50ZWdlciBTdWIodmFsdWUsIGNvbnN0YW50KQorICAgICAgICAvLyBJbnRvIHRoaXM6IEFkZCh2
YWx1ZSwgLWNvbnN0YW50KQorICAgICAgICBpZiAoVmFsdWUqIG5lZ2F0ZWRDb25zdGFudCA9IHJp
Z2h0LT5uZWdDb25zdGFudChtX3Byb2MpKSB7CisgICAgICAgICAgICBuZWdhdGVkQ29uc3RhbnQg
PSBhcHBlbmRUb0N1cnJlbnRCbG9jayhuZWdhdGVkQ29uc3RhbnQpOworICAgICAgICAgICAgcmV0
dXJuIHJlZHVjZUFkZCh0eXBlLCBvcmlnaW4sIGxlZnQsIG5lZ2F0ZWRDb25zdGFudCk7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIgU3ViKDAsIHZhbHVlKQorICAg
ICAgICAvLyBJbnRvIHRoaXM6IE5lZyh2YWx1ZSkKKyAgICAgICAgaWYgKGxlZnQtPmlzSW50KDAp
KQorICAgICAgICAgICAgcmV0dXJuIHJlZHVjZU5lZyh0eXBlLCBvcmlnaW4sIHJpZ2h0KTsKKwor
ICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIgU3ViKHZhbHVlLCB2YWx1ZSkKKyAgICAgICAg
Ly8gSW50byB0aGlzOiAwCisgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQorICAgICAgICAgICAg
cmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKG1fcHJvYy5hZGRJbnRDb25zdGFudChvcmlnaW4s
IHR5cGUsIDApKTsKKworICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIgU3ViKHZhbHVlLCBO
ZWcob3RoZXJWYWx1ZSkpCisgICAgICAgIC8vIEludG8gdGhpczogQWRkKHZhbHVlLCBvdGhlclZh
bHVlKQorICAgICAgICBpZiAocmlnaHQtPm9wY29kZSgpID09IE5lZykKKyAgICAgICAgICAgIHJl
dHVybiByZWR1Y2VBZGQodHlwZSwgb3JpZ2luLCBsZWZ0LCByaWdodC0+Y2hpbGQoMCkpOworCisg
ICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBTdWIoLTEsIHZhbHVlKQorICAgICAgICAvLyBJ
bnRvIHRoaXM6IEJpdFhvcih2YWx1ZSwgLTEpCisgICAgICAgIGlmIChsZWZ0LT5pc0ludCgtMSkp
CisgICAgICAgICAgICByZXR1cm4gcmVkdWNlQml0WG9yKHR5cGUsIG9yaWdpbiwgcmlnaHQsIGxl
ZnQpOworCisgICAgICAgIGlmIChWYWx1ZSogcmVzdWx0ID0gdHJ5UmVkdWNlTXVsRGlzdHJpYnV0
aXZpdHkoU3ViLCB0eXBlLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0
PFZhbHVlPihTdWIsIG9yaWdpbiwgbGVmdCwgcmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVP
cHRpbWl6ZXI6OnJlZHVjZU5lZyhUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBjaGls
ZCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgLy8gVHVybiB0aGlzOiBOZWcoY29uc3RhbnQpCisg
ICAgLy8gSW50byB0aGlzOiAtY29uc3RhbnQKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gY2hp
bGQtPm5lZ0NvbnN0YW50KG1fcHJvYykpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRC
bG9jayhjb25zdGFudCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IE5lZyhOZWcodmFsdWUpKQorICAg
IC8vIEludG8gdGhpczogdmFsdWUKKyAgICBpZiAoY2hpbGQtPm9wY29kZSgpID09IE5lZykKKyAg
ICAgICAgcmV0dXJuIGNoaWxkLT5jaGlsZCgwKTsKKworICAgIC8vIFR1cm4gdGhpczogSW50ZWdl
ciBOZWcoU3ViKHZhbHVlLCBvdGhlclZhbHVlKSkKKyAgICAvLyBJbnRvIHRoaXM6IFN1YihvdGhl
clZhbHVlLCB2YWx1ZSkKKyAgICBpZiAoaXNJbnQodHlwZSkgJiYgY2hpbGQtPm9wY29kZSgpID09
IFN1YikKKyAgICAgICAgcmV0dXJuIHJlZHVjZVN1Yih0eXBlLCBvcmlnaW4sIGNoaWxkLT5jaGls
ZCgxKSwgY2hpbGQtPmNoaWxkKDApKTsKKworICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBOZWco
TXVsKHZhbHVlLCBjKSkKKyAgICAvLyBJbnRvIHRoaXM6IE11bCh2YWx1ZSwgLWMpLCBhcyBsb25n
IGFzIC1jIGRvZXMgbm90IG92ZXJmbG93CisgICAgaWYgKGNoaWxkLT5vcGNvZGUoKSA9PSBNdWwg
JiYgY2hpbGQtPmNoaWxkKDEpLT5oYXNJbnQoKSkgeworICAgICAgICBpbnQ2NF90IGZhY3RvciA9
IGNoaWxkLT5jaGlsZCgxKS0+YXNJbnQoKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gSW50MzIgJiYg
ZmFjdG9yICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSB7CisgICAgICAg
ICAgICBWYWx1ZSogbmV3RmFjdG9yID0gZW1pdDxDb25zdDMyVmFsdWU+KGNoaWxkLT5jaGlsZCgx
KS0+b3JpZ2luKCksIC1mYWN0b3IpOworICAgICAgICAgICAgcmV0dXJuIHJlZHVjZU11bCh0eXBl
LCBvcmlnaW4sIGNoaWxkLT5jaGlsZCgwKSwgbmV3RmFjdG9yKTsKKyAgICAgICAgfSBlbHNlIGlm
ICh0eXBlID09IEludDY0ICYmIGZhY3RvciAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+
OjptaW4oKSkgeworICAgICAgICAgICAgVmFsdWUqIG5ld0ZhY3RvciA9IGVtaXQ8Q29uc3Q2NFZh
bHVlPihjaGlsZC0+Y2hpbGQoMSktPm9yaWdpbigpLCAtZmFjdG9yKTsKKyAgICAgICAgICAgIHJl
dHVybiByZWR1Y2VNdWwodHlwZSwgb3JpZ2luLCBjaGlsZC0+Y2hpbGQoMCksIG5ld0ZhY3Rvcik7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0ciA6IGVt
aXQ8VmFsdWU+KE5lZywgb3JpZ2luLCBjaGlsZCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGlt
aXplcjo6cmVkdWNlTXVsKFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZh
bHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgaWYgKHNob3VsZEdvQmVmb3JlKHJp
Z2h0LCBsZWZ0KSkKKyAgICAgICAgcmV0dXJuIHJlZHVjZU11bCh0eXBlLCBvcmlnaW4sIHJpZ2h0
LCBsZWZ0KTsKKworICAgIC8vIFR1cm4gdGhpczogTXVsKGNvbnN0YW50MSwgY29uc3RhbnQyKQor
ICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxICogY29uc3RhbnQyCisgICAgaWYgKFZhbHVlKiBj
b25zdGFudCA9IGxlZnQtPm11bENvbnN0YW50KG1fcHJvYywgcmlnaHQpKQorICAgICAgICByZXR1
cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgaWYgKHJpZ2h0LT5oYXNJ
bnQoKSkgeworICAgICAgICBpbnQ2NF90IGZhY3RvciA9IHJpZ2h0LT5hc0ludCgpOworCisgICAg
ICAgIC8vIFR1cm4gdGhpczogTXVsKHZhbHVlLCAwKQorICAgICAgICAvLyBJbnRvIHRoaXM6IDAK
KyAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IGRvIHRoaXMgZm9yIGRvdWJsZXMgYmVjYXVz
ZSB0aGF0J3Mgd3JvbmcuIEZvciBleGFtcGxlLCAtMSAqIDAKKyAgICAgICAgLy8gYW5kIDEgKiAw
IHlpZWxkIGRpZmZlcmVudCByZXN1bHRzLgorICAgICAgICBpZiAoIWZhY3RvcikKKyAgICAgICAg
ICAgIHJldHVybiByaWdodDsKKworICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2YWx1ZSwgMSkK
KyAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZQorICAgICAgICBpZiAoZmFjdG9yID09IDEpCisg
ICAgICAgICAgICByZXR1cm4gbGVmdDsKKworICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2YWx1
ZSwgLTEpCisgICAgICAgIC8vIEludG8gdGhpczogTmVnKHZhbHVlKQorICAgICAgICBpZiAoZmFj
dG9yID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIHJlZHVjZU5lZyh0eXBlLCBvcmlnaW4sIGxl
ZnQpOworCisgICAgICAgIC8vIFR1cm4gdGhpczogTXVsKHZhbHVlLCBjb25zdGFudCkKKyAgICAg
ICAgLy8gSW50byB0aGlzOiBTaGwodmFsdWUsIGxvZzIoY29uc3RhbnQpKQorICAgICAgICBpZiAo
aGFzT25lQml0U2V0KGZhY3RvcikpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNoaWZ0QW1vdW50
ID0gV1RGOjpmYXN0TG9nMihzdGF0aWNfY2FzdDx1aW50NjRfdD4oZmFjdG9yKSk7CisgICAgICAg
ICAgICBWYWx1ZSogc2hpZnRDb25zdGFudCA9IGVtaXQ8Q29uc3QzMlZhbHVlPihvcmlnaW4sIHNo
aWZ0QW1vdW50KTsKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VTaGwodHlwZSwgb3JpZ2luLCBs
ZWZ0LCBzaGlmdENvbnN0YW50KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAocmlnaHQtPmhh
c0RvdWJsZSgpKSB7CisgICAgICAgIGRvdWJsZSBmYWN0b3IgPSByaWdodC0+YXNEb3VibGUoKTsK
KworICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2YWx1ZSwgMSkKKyAgICAgICAgLy8gSW50byB0
aGlzOiB2YWx1ZQorICAgICAgICBpZiAoZmFjdG9yID09IDEpCisgICAgICAgICAgICByZXR1cm4g
bGVmdDsKKyAgICB9CisKKyAgICBpZiAoaXNJbnQodHlwZSkpIHsKKyAgICAgICAgLy8gVHVybiB0
aGlzOiBJbnRlZ2VyIE11bCh2YWx1ZSwgTmVnKG90aGVyVmFsdWUpKQorICAgICAgICAvLyBJbnRv
IHRoaXM6IE5lZyhNdWwodmFsdWUsIG90aGVyVmFsdWUpKQorICAgICAgICBpZiAocmlnaHQtPm9w
Y29kZSgpID09IE5lZykgeworICAgICAgICAgICAgVmFsdWUqIG5ld011bCA9IHJlZHVjZU11bCh0
eXBlLCBvcmlnaW4sIGxlZnQsIHJpZ2h0LT5jaGlsZCgwKSk7CisgICAgICAgICAgICByZXR1cm4g
cmVkdWNlTmVnKHR5cGUsIG9yaWdpbiwgbmV3TXVsKTsKKyAgICAgICAgfQorICAgICAgICAvLyBU
dXJuIHRoaXM6IEludGVnZXIgTXVsKE5lZyh2YWx1ZSksIG90aGVyVmFsdWUpCisgICAgICAgIC8v
IEludG8gdGhpczogTmVnKE11bCh2YWx1ZSwgb3RoZXJWYWx1ZSkpCisgICAgICAgIGlmIChsZWZ0
LT5vcGNvZGUoKSA9PSBOZWcpIHsKKyAgICAgICAgICAgIFZhbHVlKiBuZXdNdWwgPSByZWR1Y2VN
dWwodHlwZSwgb3JpZ2luLCBsZWZ0LT5jaGlsZCgwKSwgcmlnaHQpOworICAgICAgICAgICAgcmV0
dXJuIHJlZHVjZU5lZyh0eXBlLCBvcmlnaW4sIG5ld011bCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KE11bCwgb3JpZ2lu
LCBsZWZ0LCByaWdodCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlRGl2
KFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9v
bCBpc0NoaWxsLCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6IERpdihjb25z
dGFudDEsIGNvbnN0YW50MikKKyAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50MSAvIGNvbnN0YW50
MgorICAgIC8vIE5vdGUgdGhhdCB0aGlzIHVzZXMgRGl2PENoaWxsPiBzZW1hbnRpY3MuIFRoYXQn
cyBmaW5lLCBiZWNhdXNlIHRoZSBydWxlcyBmb3IgRGl2CisgICAgLy8gYXJlIHN0cmljdGx5IHdl
YWtlcjogaXQgaGFzIGNvcm5lciBjYXNlcyB3aGVyZSBpdCdzIGFsbG93ZWQgdG8gZG8gYW55dGhp
bmcgaXQKKyAgICAvLyBsaWtlcy4KKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbGVmdC0+ZGl2
Q29uc3RhbnQobV9wcm9jLCByaWdodCkpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRC
bG9jayhjb25zdGFudCk7CisKKyAgICBpZiAocmlnaHQtPmhhc0ludCgpKSB7CisgICAgICAgIGlu
dDY0X3QgZGl2aXNvciA9IHJpZ2h0LT5hc0ludCgpOworICAgICAgICBpZiAoZGl2aXNvciA9PSAt
MSkgeworICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBEaXYodmFsdWUsIC0xKQorICAgICAgICAg
ICAgLy8gSW50byB0aGlzOiBOZWcodmFsdWUpCisgICAgICAgICAgICByZXR1cm4gcmVkdWNlTmVn
KHR5cGUsIG9yaWdpbiwgbGVmdCk7CisgICAgICAgIH0gZWxzZSBpZiAoIWRpdmlzb3IpIHsKKyAg
ICAgICAgICAgIC8vIFR1cm4gdGhpczogRGl2KHZhbHVlLCAwKQorICAgICAgICAgICAgLy8gSW50
byB0aGlzOiAwCisgICAgICAgICAgICAvLyBXZSBjYW4gZG8gdGhpcyBiZWNhdXNlIGl0J3MgcHJl
Y2lzZWx5IGNvcnJlY3QgZm9yIENoaWxsRGl2IGFuZCBmb3IgRGl2IHdlCisgICAgICAgICAgICAv
LyBhcmUgYWxsb3dlZCB0byBkbyB3aGF0ZXZlciB3ZSB3YW50LgorICAgICAgICAgICAgcmV0dXJu
IHJpZ2h0OworICAgICAgICB9IGVsc2UgaWYgKGRpdmlzb3IgPT0gMSkgeworICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBEaXYodmFsdWUsIDEpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHZh
bHVlCisgICAgICAgICAgICByZXR1cm4gbGVmdDsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlID09
IEludDMyICYmIG1fcHJvYy5vcHRMZXZlbCgpID49IDIpIHsKKyAgICAgICAgICAgIC8vIFBlcmZv
cm0gc3VwZXIgY29tcHJlaGVuc2l2ZSBzdHJlbmd0aCByZWR1Y3Rpb24gb2YgZGl2aXNpb24uIEN1
cnJlbnRseSB3ZQorICAgICAgICAgICAgLy8gb25seSBkbyB0aGlzIGZvciAzMi1iaXQgZGl2aXNp
b25zLCBzaW5jZSB3ZSBuZWVkIGEgaGlnaCBtdWx0aXBseQorICAgICAgICAgICAgLy8gb3BlcmF0
aW9uLiBXZSBlbXVsYXRlIGl0IHVzaW5nIDY0LWJpdCBtdWx0aXBseS4gV2UgY2FuJ3QgZW11bGF0
ZSA2NC1iaXQKKyAgICAgICAgICAgIC8vIGhpZ2ggbXVsdGlwbHkgd2l0aCBhIDEyOC1iaXQgbXVs
dGlwbHkgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEgMTI4LWJpdAorICAgICAgICAgICAgLy8gbXVs
dGlwbHkuIFdlIGNvdWxkIGRvIGl0IHdpdGggYSBwYXRjaHBvaW50IGlmIHdlIGNhcmVkIGJhZGx5
IGVub3VnaC4KKyAgICAgICAgICAgIGludDMyX3QgZGl2aXNvcjMyID0gcmlnaHQtPmFzSW50MzIo
KTsKKyAgICAgICAgICAgIERpdmlzaW9uTWFnaWM8aW50MzJfdD4gbWFnaWMgPSBjb21wdXRlRGl2
aXNpb25NYWdpYyhkaXZpc29yMzIpOworICAgICAgICAgICAgLy8gUGVyZm9ybSB0aGUgImhpZ2gi
IG11bHRpcGxpY2F0aW9uLiBXZSBkbyBpdCBqdXN0IHRvIGdldCB0aGUgaGlnaCBiaXRzLgorICAg
ICAgICAgICAgLy8gVGhpcyBpcyBzb3J0IG9mIGxpa2UgbXVsdGlwbHlpbmcgYnkgdGhlIHJlY2lw
cm9jYWwsIGp1c3QgbW9yZSBnbmFybHkuIEl0J3MKKyAgICAgICAgICAgIC8vIGZyb20gSGFja2Vy
J3MgRGVsaWdodCBhbmQgSSBkb24ndCBjbGFpbSB0byB1bmRlcnN0YW5kIGl0LgorICAgICAgICAg
ICAgVmFsdWUqIGNvbnN0TWFnaWNNdWx0aXBsaWVyID0gZW1pdDxDb25zdDY0VmFsdWU+KG9yaWdp
biwgbWFnaWMubWFnaWNNdWx0aXBsaWVyKTsKKyAgICAgICAgICAgIFZhbHVlKiBzZXh0MzJMZWZ0
ID0gcmVkdWNlU0V4dDMyKHR5cGUsIG9yaWdpbiwgbGVmdCk7CisgICAgICAgICAgICBWYWx1ZSog
bXVsTGVmdCA9IHJlZHVjZU11bChJbnQ2NCwgb3JpZ2luLCBzZXh0MzJMZWZ0LCBjb25zdE1hZ2lj
TXVsdGlwbGllcik7CisgICAgICAgICAgICBWYWx1ZSogY29uc3QzMiA9IGVtaXQ8Q29uc3QzMlZh
bHVlPihvcmlnaW4sIDMyKTsKKyAgICAgICAgICAgIFZhbHVlKiBsYXJnZU1hZ2ljUXVvdGllbnQg
PSByZWR1Y2VaU2hyKHR5cGUsIG9yaWdpbiwgbXVsTGVmdCwgY29uc3QzMik7CisgICAgICAgICAg
ICBWYWx1ZSogbWFnaWNRdW90aWVudCA9IHJlZHVjZVRydW5jKHR5cGUsIG9yaWdpbiwgbGFyZ2VN
YWdpY1F1b3RpZW50KTsKKyAgICAgICAgICAgIGlmIChkaXZpc29yMzIgPiAwICYmIG1hZ2ljLm1h
Z2ljTXVsdGlwbGllciA8IDApCisgICAgICAgICAgICAgICAgbWFnaWNRdW90aWVudCA9IHJlZHVj
ZUFkZChJbnQzMiwgb3JpZ2luLCBtYWdpY1F1b3RpZW50LCBsZWZ0KTsKKyAgICAgICAgICAgIGlm
IChkaXZpc29yMzIgPCAwICYmIG1hZ2ljLm1hZ2ljTXVsdGlwbGllciA+IDApCisgICAgICAgICAg
ICAgICAgbWFnaWNRdW90aWVudCA9IHJlZHVjZVN1YihJbnQzMiwgb3JpZ2luLCBtYWdpY1F1b3Rp
ZW50LCBsZWZ0KTsKKyAgICAgICAgICAgIGlmIChtYWdpYy5zaGlmdCA+IDApIHsKKyAgICAgICAg
ICAgICAgICBWYWx1ZSogY29uc3RNYWdpY1NoaWZ0ID0gZW1pdDxDb25zdDMyVmFsdWU+KG9yaWdp
biwgbWFnaWMuc2hpZnQpOworICAgICAgICAgICAgICAgIG1hZ2ljUXVvdGllbnQgPSByZWR1Y2VT
U2hyKHR5cGUsIG9yaWdpbiwgbWFnaWNRdW90aWVudCwgY29uc3RNYWdpY1NoaWZ0KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIFZhbHVlKiBjb25zdDMxID0gZW1pdDxDb25zdDMyVmFsdWU+
KG9yaWdpbiwgMzEpOworICAgICAgICAgICAgVmFsdWUqIHNoaWZ0ZWRNYWdpY1F1b3RpZW50ID0g
cmVkdWNlWlNocih0eXBlLCBvcmlnaW4sIG1hZ2ljUXVvdGllbnQsIGNvbnN0MzEpOworICAgICAg
ICAgICAgcmV0dXJuIHJlZHVjZUFkZChJbnQzMiwgb3JpZ2luLCBtYWdpY1F1b3RpZW50LCBzaGlm
dGVkTWFnaWNRdW90aWVudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY2FuR2l2ZVVw
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBLaW5kIGRpdktpbmQgPSBEaXY7CisgICAg
ZGl2S2luZC5zZXRJc0NoaWxsKGlzQ2hpbGwpOworICAgIHJldHVybiBlbWl0PFZhbHVlPihkaXZL
aW5kLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVy
OjpyZWR1Y2VVRGl2KFR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmln
aHQsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogVURpdihjb25zdGFudDEs
IGNvbnN0YW50MikKKyAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50MSAvIGNvbnN0YW50MgorICAg
IGlmIChWYWx1ZSogY29uc3RhbnQgPSBsZWZ0LT51RGl2Q29uc3RhbnQobV9wcm9jLCByaWdodCkp
CisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICBp
ZiAocmlnaHQtPmhhc0ludCgpKSB7CisgICAgICAgIGludDY0X3QgZGl2aXNvciA9IHJpZ2h0LT5h
c0ludCgpOworICAgICAgICBpZiAoIWRpdmlzb3IpIHsKKyAgICAgICAgICAgIC8vIFR1cm4gdGhp
czogVURpdih2YWx1ZSwgMCkKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogMAorICAgICAgICAg
ICAgLy8gV2UgY2FuIGRvIHdoYXRldmVyIHdlIHdhbnQgaGVyZSBzbyB3ZSBtaWdodCBhcyB3ZWxs
IGRvIHRoZSBjaGlsbCB0aGluZywKKyAgICAgICAgICAgIC8vIGluIGNhc2Ugd2UgYWRkIGNoaWxs
IHZlcnNpb25zIG9mIFVEaXYgaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgICAgIHJldHVybiByaWdo
dDsKKyAgICAgICAgfSBlbHNlIGlmIChkaXZpc29yID09IDEpeworICAgICAgICAgICAgLy8gVHVy
biB0aGlzOiBVRGl2KHZhbHVlLCAxKQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZQor
ICAgICAgICAgICAgcmV0dXJuIGxlZnQ7CisgICAgICAgIH0KKyAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBkbyBjb21wcmVoZW5zaXZlIHN0cmVuZ3RoIHJlZHVjdGlvbiBmb3IgdW5zaWduZWQg
bnVtYmVycy4gTGlrZWx5LAorICAgICAgICAvLyB3ZSB3aWxsIGp1c3Qgd2FudCBjb3B5IHdoYXQg
bGx2bSBkb2VzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0ODA5
CisgICAgfQorCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihV
RGl2LCBvcmlnaW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVy
OjpyZWR1Y2VNb2QoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUq
IHJpZ2h0LCBib29sIGlzQ2hpbGwsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhp
czogTW9kKGNvbnN0YW50MSwgY29uc3RhbnQyKQorICAgIC8vIEludG8gdGhpczogY29uc3RhbnQx
ICUgY29uc3RhbnQyCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgdXNlcyBNb2Q8Q2hpbGw+IHNlbWFu
dGljcy4KKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbGVmdC0+bW9kQ29uc3RhbnQobV9wcm9j
LCByaWdodCkpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7
CisKKyAgICBpZiAocmlnaHQtPmhhc0ludCgpKSB7CisgICAgICAgIGludDY0X3QgZGl2aXNvciA9
IHJpZ2h0LT5hc0ludCgpOworICAgICAgICBpZiAoIWRpdmlzb3IpIHsKKyAgICAgICAgICAgIC8v
IFR1cm4gdGhpczogTW9kKHZhbHVlLCAwKQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiAwCisg
ICAgICAgICAgICAvLyBUaGlzIGlzIGNvcnJlY3QgYWNjb3JkaW5nIHRvIENoaWxsTW9kIHNlbWFu
dGljcy4KKyAgICAgICAgICAgIHJldHVybiByaWdodDsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBl
ID09IEludDMyICYmIG1fcHJvYy5vcHRMZXZlbCgpID49IDIpIHsKKyAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogTW9kKE4sIEQpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFN1YihOLCBNdWwo
RGl2KE4sIEQpLCBEKSkKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGlzIGlzIGEg
c3BlZWQtdXAgYmVjYXVzZSB3ZSB1c2Ugb3VyIGV4aXN0aW5nIERpdiBvcHRpbWl6YXRpb25zLgor
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEhlcmUncyBhbiBlYXNpZXIgd2F5IHRvIGxv
b2sgYXQgaXQ6CisgICAgICAgICAgICAvLyAgICAgTiAlIEQgPSBOIC0gTiAvIEQgKiBECisgICAg
ICAgICAgICAvLworICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3Qgd29yayBm
b3IgRCA9IDAgYW5kIENoaWxsTW9kLiBUaGUgZXhwZWN0ZWQgcmVzdWx0IGlzIDAuCisgICAgICAg
ICAgICAvLyBUaGF0J3Mgd2h5IHdlIGhhdmUgYSBzcGVjaWFsLWNhc2UgYWJvdmUuCisgICAgICAg
ICAgICAvLyAgICAgWCAlIDAgPSBYIC0gWCAvIDAgKiAwID0gWCAgICAgKHNob3VsZCBiZSAwKQor
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFRoaXMgZG9lcyB3b3JrIGZvciB0aGUgRCA9
IC0xIHNwZWNpYWwgY2FzZS4KKyAgICAgICAgICAgIC8vICAgICAtMl4zMSAlIC0xID0gLTJeMzEg
LSAtMl4zMSAvIC0xICogLTEKKyAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgID0gLTJeMzEg
LSAtMl4zMSAqIC0xCisgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICA9IC0yXjMxIC0gLTJe
MzEKKyAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgID0gMAorICAgICAgICAgICAgVmFsdWUq
IGRpdiA9IHJlZHVjZURpdih0eXBlLCBvcmlnaW4sIGxlZnQsIHJpZ2h0LCBpc0NoaWxsKTsKKyAg
ICAgICAgICAgIFZhbHVlKiBtdWwgPSByZWR1Y2VNdWwodHlwZSwgb3JpZ2luLCBkaXYsIHJpZ2h0
KTsKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VTdWIodHlwZSwgb3JpZ2luLCBsZWZ0LCBtdWwp
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNhbkdpdmVVcCkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgS2luZCBtb2RLaW5kID0gTW9kOworICAgIG1vZEtpbmQuc2V0SXNDaGls
bChpc0NoaWxsKTsKKyAgICByZXR1cm4gZW1pdDxWYWx1ZT4obW9kS2luZCwgb3JpZ2luLCBsZWZ0
LCByaWdodCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlVU1vZChUeXBl
LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVV
cCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6IFVNb2QoY29uc3RhbnQxLCBjb25zdGFudDIpCisgICAg
Ly8gSW50byB0aGlzOiBjb25zdGFudDEgJSBjb25zdGFudDIKKyAgICBpZiAoVmFsdWUqIGNvbnN0
YW50ID0gbGVmdC0+dU1vZENvbnN0YW50KG1fcHJvYywgcmlnaHQpKQorICAgICAgICByZXR1cm4g
YXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBkbyB3aGF0IHdlIGRvIGZvciBNb2Qgc2luY2UgdGhlIHNhbWUgcHJpbmNpcGxlIGFwcGxpZXMg
aGVyZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0
ODA5CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KFVNb2Qs
IG9yaWdpbiwgbGVmdCwgcmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJl
ZHVjZUJpdEFuZChUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSog
cmlnaHQsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIGlmIChzaG91bGRHb0JlZm9yZShyaWdodCwg
bGVmdCkpCisgICAgICAgIHJldHVybiByZWR1Y2VCaXRBbmQodHlwZSwgb3JpZ2luLCByaWdodCwg
bGVmdCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZChjb25zdGFudDEsIGNvbnN0YW50MikK
KyAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50MSAmIGNvbnN0YW50MgorICAgIGlmIChWYWx1ZSog
Y29uc3RhbnQgPSBsZWZ0LT5iaXRBbmRDb25zdGFudChtX3Byb2MsIHJpZ2h0KSkKKyAgICAgICAg
cmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50KTsKKworICAgIC8vIFR1cm4gdGhp
czogQml0QW5kKHZhbHVlWCwgdmFsdWVYKQorICAgIC8vIEludG8gdGhpczogdmFsdWVYLgorICAg
IGlmIChsZWZ0ID09IHJpZ2h0KQorICAgICAgICByZXR1cm4gbGVmdDsKKworICAgIC8vIFR1cm4g
dGhpczogQml0QW5kKHZhbHVlLCB6ZXJvLWNvbnN0YW50KQorICAgIC8vIEludG8gdGhpczogemVy
by1jb25zdGFudC4KKyAgICBpZiAocmlnaHQtPmlzSW50KDApKQorICAgICAgICByZXR1cm4gcmln
aHQ7CisKKyAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZCh2YWx1ZSwgYWxsLW9uZXMpCisgICAgLy8g
SW50byB0aGlzOiB2YWx1ZS4KKyAgICBpZiAoKHR5cGUgPT0gSW50NjQgJiYgcmlnaHQtPmlzSW50
KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSkpCisgICAgICAgIHx8ICh0eXBl
ID09IEludDMyICYmIHJpZ2h0LT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6
bWF4KCkpKSkgeworICAgICAgICByZXR1cm4gbGVmdDsKKyAgICB9CisKKyAgICAvLyBUdXJuIHRo
aXM6IEJpdEFuZChCaXRBbmQodmFsdWUsIGNvbnN0YW50MSksIGNvbnN0YW50MikKKyAgICAvLyBJ
bnRvIHRoaXM6IEJpdEFuZCh2YWx1ZSwgY29uc3RhbnQxICYgY29uc3RhbnQyKS4KKyAgICBpZiAo
bGVmdC0+b3Bjb2RlKCkgPT0gQml0QW5kKSB7CisgICAgICAgIFZhbHVlKiBuZXdDb25zdGFudCA9
IHJpZ2h0LT5iaXRBbmRDb25zdGFudChtX3Byb2MsIGxlZnQtPmNoaWxkKDEpKTsKKyAgICAgICAg
aWYgKG5ld0NvbnN0YW50KSB7CisgICAgICAgICAgICBuZXdDb25zdGFudCA9IGFwcGVuZFRvQ3Vy
cmVudEJsb2NrKG5ld0NvbnN0YW50KTsKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VCaXRBbmQo
dHlwZSwgb3JpZ2luLCBsZWZ0LT5jaGlsZCgwKSwgbmV3Q29uc3RhbnQpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoNjQtYml0IHZhbHVlLCAzMiBvbmVzKQor
ICAgIC8vIEludG8gdGhpczogWkV4dDMyKFRydW5jKDY0LWJpdCB2YWx1ZSkpCisgICAgaWYgKHJp
Z2h0LT5pc0ludDY0KDB4ZmZmZmZmZmZsbHUpKSB7CisgICAgICAgIFZhbHVlKiB0cnVuYyA9IHJl
ZHVjZVRydW5jKHR5cGUsIG9yaWdpbiwgbGVmdCk7CisgICAgICAgIHJldHVybiByZWR1Y2VaRXh0
MzIodHlwZSwgb3JpZ2luLCB0cnVuYyk7CisgICAgfQorCisgICAgLy8gVHVybiB0aGlzOiBCaXRB
bmQoU0V4dDgodmFsdWUpLCBtYXNrKSB3aGVyZSAobWFzayAmIDB4ZmZmZmZmMDApID09IDAKKyAg
ICAvLyBJbnRvIHRoaXM6IEJpdEFuZCh2YWx1ZSwgbWFzaykKKyAgICBpZiAobGVmdC0+b3Bjb2Rl
KCkgPT0gU0V4dDggJiYgcmlnaHQtPmhhc0ludDMyKCkgJiYgIShyaWdodC0+YXNJbnQzMigpICYg
MHhmZmZmZmYwMCkpCisgICAgICAgIHJldHVybiByZWR1Y2VCaXRBbmQodHlwZSwgb3JpZ2luLCBs
ZWZ0LT5jaGlsZCgwKSwgcmlnaHQpOworCisgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoU0V4dDE2
KHZhbHVlKSwgbWFzaykgd2hlcmUgKG1hc2sgJiAweGZmZmYwMDAwKSA9PSAwCisgICAgLy8gSW50
byB0aGlzOiBCaXRBbmQodmFsdWUsIG1hc2spCisgICAgaWYgKGxlZnQtPm9wY29kZSgpID09IFNF
eHQxNiAmJiByaWdodC0+aGFzSW50MzIoKSAmJiAhKHJpZ2h0LT5hc0ludDMyKCkgJiAweGZmZmYw
MDAwKSkKKyAgICAgICAgcmV0dXJuIHJlZHVjZUJpdEFuZCh0eXBlLCBvcmlnaW4sIGxlZnQtPmNo
aWxkKDApLCByaWdodCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZChTRXh0MzIodmFsdWUp
LCBtYXNrKSB3aGVyZSAobWFzayAmIDB4ZmZmZmZmZmYwMDAwMDAwMCkgPT0gMAorICAgIC8vIElu
dG8gdGhpczogQml0QW5kKFpFeHQzMih2YWx1ZSksIG1hc2spCisgICAgaWYgKGxlZnQtPm9wY29k
ZSgpID09IFNFeHQzMiAmJiByaWdodC0+aGFzSW50NjQoKQorICAgICAgICAmJiAhKHJpZ2h0LT5h
c0ludDY0KCkgJiAweGZmZmZmZmZmMDAwMDAwMDBsbHUpKSB7CisgICAgICAgIFZhbHVlKiB6ZXh0
MzIgPSByZWR1Y2VaRXh0MzIodHlwZSwgb3JpZ2luLCBsZWZ0LT5jaGlsZCgwKSk7CisgICAgICAg
IHJldHVybiByZWR1Y2VCaXRBbmQodHlwZSwgb3JpZ2luLCB6ZXh0MzIsIHJpZ2h0KTsKKyAgICB9
CisKKyAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZChPcCh2YWx1ZSwgY29uc3RhbnQxKSwgY29uc3Rh
bnQyKQorICAgIC8vICAgICB3aGVyZSAhKGNvbnN0YW50MSAmIGNvbnN0YW50MikKKyAgICAvLyAg
ICAgICBhbmQgT3AgaXMgQml0T3Igb3IgQml0WG9yCisgICAgLy8gaW50byB0aGlzOiBCaXRBbmQo
dmFsdWUsIGNvbnN0YW50MikKKyAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gdGhpcyBmb3Igbm9u
LWNvbnN0YW50IGNvbnN0YW50MiBoZXJlIG9uY2Ugd2UgaGF2ZSBhIGtub3duQml0cyBhbmFseXNp
cy4KKyAgICBpZiAocmlnaHQtPmhhc0ludCgpKSB7CisgICAgICAgIGludDY0X3QgY29uc3RhbnQy
ID0gcmlnaHQtPmFzSW50KCk7CisgICAgICAgIHN3aXRjaCAobGVmdC0+b3Bjb2RlKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgQml0T3I6CisgICAgICAgICAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAg
ICAgICAgICBpZiAobGVmdC0+Y2hpbGQoMSktPmhhc0ludCgpICYmICEobGVmdC0+Y2hpbGQoMSkt
PmFzSW50KCkgJiBjb25zdGFudDIpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVkdWNl
Qml0QW5kKHR5cGUsIG9yaWdpbiwgbGVmdC0+Y2hpbGQoMCksIHJpZ2h0KTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZChCaXRYb3IoeDEs
IGFsbE9uZXMpLCBCaXRYb3IoeDIsIGFsbE9uZXMpCisgICAgLy8gSW50byB0aGlzOiBCaXRYb3Io
Qml0T3IoeDEsIHgyKSwgYWxsT25lcykKKyAgICAvLyBCeSBhcHBseWluZyBEZSBNb3JnYW4gbGF3
cworICAgIC8vIEZJWE1FOiB3aXRoIGEga25vd25CaXRzIGFuYWx5c2lzLCB0aGlzIGNvdWxkIGV4
dGVuZCB0byBhbnkgY29uc3RhbnQgdGhhdCBpbmNsdWRlcyBhbGwgYml0cyBpbiB4MSBhbmQgeDIK
KyAgICBpZiAobGVmdC0+b3Bjb2RlKCkgPT0gQml0WG9yCisgICAgICAgICYmIHJpZ2h0LT5vcGNv
ZGUoKSA9PSBCaXRYb3IKKyAgICAgICAgJiYgKCh0eXBlID09IEludDY0CisgICAgICAgICAgICAm
JiBsZWZ0LT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1h
eCgpKQorICAgICAgICAgICAgJiYgcmlnaHQtPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpKQorICAgICAgICB8fCAodHlwZSA9PSBJbnQzMgorICAg
ICAgICAgICAgJiYgbGVmdC0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDMyX3Q+OjptYXgoKSkKKyAgICAgICAgICAgICYmIHJpZ2h0LT5jaGlsZCgxKS0+aXNJbnQoc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkpKSB7CisgICAgICAgIFZhbHVlKiBi
aXRPciA9IHJlZHVjZUJpdE9yKHR5cGUsIG9yaWdpbiwgbGVmdC0+Y2hpbGQoMCksIHJpZ2h0LT5j
aGlsZCgwKSk7CisgICAgICAgIHJldHVybiByZWR1Y2VCaXRYb3IodHlwZSwgb3JpZ2luLCBiaXRP
ciwgbGVmdC0+Y2hpbGQoMSkpOworICAgIH0KKworICAgIC8vIFR1cm4gdGhpczogQml0QW5kKEJp
dFhvcih4LCBhbGxPbmVzKSwgYykKKyAgICAvLyBJbnRvIHRoaXM6IEJpdFhvcihCaXRPcih4LCB+
YyksIGFsbE9uZXMpCisgICAgLy8gVGhpcyBpcyBhIHZhcmlhdGlvbiBvbiB0aGUgcHJldmlvdXMg
b3B0aW1pemF0aW9uLCB0cmVhdGluZyBjIGFzIGlmIGl0IHdlcmUgQml0WG9yKH5jLCBhbGxPbmVz
KQorICAgIC8vIEl0IGRvZXMgbm90IHJlZHVjZSB0aGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMsIGJ1
dCBwcm92aWRlcyBzb21lIG5vcm1hbGl6YXRpb24gKHdlIHRyeSB0byBnZXQgQml0WG9yIGJ5IGFs
bE9uZXMgYXQgdGhlIG91dGVybW9zdCBwb2ludCksIGFuZCBzb21lIGNoYW5jZSB0byBmbG9hdCBY
b3JzIHRvIGEgcGxhY2Ugd2hlcmUgdGhleSBtaWdodCBnZXQgZWxpbWluYXRlZC4KKyAgICBpZiAo
bGVmdC0+b3Bjb2RlKCkgPT0gQml0WG9yCisgICAgICAgICYmIHJpZ2h0LT5oYXNJbnQoKQorICAg
ICAgICAmJiAoKHR5cGUgPT0gSW50NjQgJiYgbGVmdC0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSkpCisgICAgICAgIHx8ICh0eXBlID09IEludDMy
ICYmIGxlZnQtPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6
bWF4KCkpKSkpIHsKKyAgICAgICAgVmFsdWUqIGJpdE9yID0gcmVkdWNlQml0T3IodHlwZSwgb3Jp
Z2luLCBsZWZ0LT5jaGlsZCgwKSwgcmlnaHQtPmJpdFhvckNvbnN0YW50KG1fcHJvYywgbGVmdC0+
Y2hpbGQoMSkpKTsKKyAgICAgICAgcmV0dXJuIHJlZHVjZUJpdFhvcih0eXBlLCBvcmlnaW4sIGJp
dE9yLCBsZWZ0LT5jaGlsZCgxKSk7CisgICAgfQorCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51
bGxwdHIgOiBlbWl0PFZhbHVlPihCaXRBbmQsIG9yaWdpbiwgbGVmdCwgcmlnaHQpOworfQorCitW
YWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUJpdE9yKFR5cGUgdHlwZSwgT3JpZ2luIG9y
aWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAg
aWYgKHNob3VsZEdvQmVmb3JlKHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAgcmV0dXJuIHJlZHVjZUJp
dE9yKHR5cGUsIG9yaWdpbiwgcmlnaHQsIGxlZnQpOworCisgICAgLy8gVHVybiB0aGlzOiBCaXRP
cihjb25zdGFudDEsIGNvbnN0YW50MikKKyAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50MSB8IGNv
bnN0YW50MgorICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBsZWZ0LT5iaXRPckNvbnN0YW50KG1f
cHJvYywgcmlnaHQpKQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3Rh
bnQpOworCisgICAgLy8gVHVybiB0aGlzOiBCaXRPcihCaXRPcih2YWx1ZSwgY29uc3RhbnQxKSwg
Y29uc3RhbnQyKQorICAgIC8vIEludG8gdGhpczogQml0T3IodmFsdWUsIGNvbnN0YW50MSB8IGNv
bnN0YW50MikuCisgICAgaWYgKGxlZnQtPm9wY29kZSgpID09IEJpdE9yKSB7CisgICAgICAgIFZh
bHVlKiBuZXdDb25zdGFudCA9IHJpZ2h0LT5iaXRPckNvbnN0YW50KG1fcHJvYywgbGVmdC0+Y2hp
bGQoMSkpOworICAgICAgICBpZiAobmV3Q29uc3RhbnQpIHsKKyAgICAgICAgICAgIG5ld0NvbnN0
YW50ID0gYXBwZW5kVG9DdXJyZW50QmxvY2sobmV3Q29uc3RhbnQpOworICAgICAgICAgICAgcmV0
dXJuIHJlZHVjZUJpdE9yKHR5cGUsIG9yaWdpbiwgbGVmdC0+Y2hpbGQoMCksIG5ld0NvbnN0YW50
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFR1cm4gdGhpczogQml0T3IodmFsdWVYLCB2
YWx1ZVgpCisgICAgLy8gSW50byB0aGlzOiB2YWx1ZVguCisgICAgaWYgKGxlZnQgPT0gcmlnaHQp
CisgICAgICAgIHJldHVybiBsZWZ0OworCisgICAgLy8gVHVybiB0aGlzOiBCaXRPcih2YWx1ZSwg
emVyby1jb25zdGFudCkKKyAgICAvLyBJbnRvIHRoaXM6IHZhbHVlLgorICAgIGlmIChyaWdodC0+
aXNJbnQoMCkpCisgICAgICAgIHJldHVybiBsZWZ0OworCisgICAgLy8gVHVybiB0aGlzOiBCaXRP
cih2YWx1ZSwgYWxsLW9uZXMpCisgICAgLy8gSW50byB0aGlzOiBhbGwtb25lcy4KKyAgICAvLyBG
SVhNRTogb25jZSB3ZSBoYXZlIGEga25vd25CaXRzIGFuYWx5c2lzLCB0aGlzLCB0aGUgYmFzaWMg
Y29uc3RhbnRzIGNhc2UsIGFuZCBtb3JlIHdpbGwgYmUgdHJpdmlhbGx5IG1lcmdlZC4KKyAgICBp
ZiAoKHR5cGUgPT0gSW50NjQgJiYgcmlnaHQtPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDY0X3Q+OjptYXgoKSkpCisgICAgICAgIHx8ICh0eXBlID09IEludDMyICYmIHJpZ2h0LT5pc0lu
dChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpKSkgeworICAgICAgICByZXR1
cm4gcmlnaHQ7CisgICAgfQorCisgICAgLy8gVHVybiB0aGlzOiBCaXRPcihCaXRYb3IoeDEsIGFs
bE9uZXMpLCBCaXRYb3IoeDIsIGFsbE9uZXMpCisgICAgLy8gSW50byB0aGlzOiBCaXRYb3IoQml0
QW5kKHgxLCB4MiksIGFsbE9uZXMpCisgICAgLy8gQnkgYXBwbHlpbmcgRGUgTW9yZ2FuIGxhd3MK
KyAgICAvLyBGSVhNRTogbGlrZSBmb3IgdGhlIHNpbWlsYXIgcnVsZSBmb3IgQml0QW5kLCB3aXRo
IGEga25vd25CaXRzIGFuYWx5c2lzIHdlIGNvdWxkIGRvIHNvbWV0aGluZyBzaW1pbGFyIGZvciBj
b25zdGFudHMgb3RoZXIgdGhhbiBhbGxPbmVzCisgICAgaWYgKGxlZnQtPm9wY29kZSgpID09IEJp
dFhvcgorICAgICAgICAmJiByaWdodC0+b3Bjb2RlKCkgPT0gQml0WG9yCisgICAgICAgICYmICgo
dHlwZSA9PSBJbnQ2NAorICAgICAgICAgICAgJiYgbGVmdC0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSkKKyAgICAgICAgICAgICYmIHJpZ2h0LT5j
aGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpKSkKKyAg
ICAgICAgfHwgKHR5cGUgPT0gSW50MzIKKyAgICAgICAgICAgICYmIGxlZnQtPmNoaWxkKDEpLT5p
c0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpCisgICAgICAgICAgICAm
JiByaWdodC0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+Ojpt
YXgoKSkpKSkgeworICAgICAgICBWYWx1ZSogYml0QW5kID0gcmVkdWNlQml0QW5kKHR5cGUsIG9y
aWdpbiwgbGVmdC0+Y2hpbGQoMCksIHJpZ2h0LT5jaGlsZCgwKSk7CisgICAgICAgIHJldHVybiBy
ZWR1Y2VCaXRYb3IodHlwZSwgb3JpZ2luLCBiaXRBbmQsIHJpZ2h0LT5jaGlsZCgxKSk7CisgICAg
fQorCisgICAgLy8gVHVybiB0aGlzOiBCaXRPcihCaXRYb3IoeCwgYWxsT25lcyksIGMpCisgICAg
Ly8gSW50byB0aGlzOiBCaXRYb3IoQml0QW5kKHgsIH5jKSwgYWxsT25lcykKKyAgICAvLyBUaGlz
IGlzIGEgdmFyaWF0aW9uIG9uIHRoZSBwcmV2aW91cyBvcHRpbWl6YXRpb24sIHRyZWF0aW5nIGMg
YXMgaWYgaXQgd2VyZSBCaXRYb3IofmMsIGFsbE9uZXMpCisgICAgLy8gSXQgZG9lcyBub3QgcmVk
dWNlIHRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucywgYnV0IHByb3ZpZGVzIHNvbWUgbm9ybWFsaXph
dGlvbiAod2UgdHJ5IHRvIGdldCBCaXRYb3IgYnkgYWxsT25lcyBhdCB0aGUgb3V0ZXJtb3N0IHBv
aW50KSwKKyAgICAvLyBhbmQgc29tZSBjaGFuY2UgdG8gZmxvYXQgWG9ycyB0byBhIHBsYWNlIHdo
ZXJlIHRoZXkgbWlnaHQgZ2V0IGVsaW1pbmF0ZWQuCisgICAgaWYgKGxlZnQtPm9wY29kZSgpID09
IEJpdFhvcgorICAgICAgICAmJiByaWdodC0+aGFzSW50KCkKKyAgICAgICAgJiYgKCh0eXBlID09
IEludDY0CisgICAgICAgICAgICAmJiBsZWZ0LT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50NjRfdD46Om1heCgpKSkKKyAgICAgICAgfHwgKHR5cGUgPT0gSW50MzIKKyAg
ICAgICAgICAgICYmIGxlZnQtPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQzMl90Pjo6bWF4KCkpKSkpIHsKKyAgICAgICAgVmFsdWUqIGJpdEFuZCA9IHJlZHVjZUJpdEFu
ZCh0eXBlLCBvcmlnaW4sIGxlZnQtPmNoaWxkKDApLCByaWdodC0+Yml0WG9yQ29uc3RhbnQobV9w
cm9jLCBsZWZ0LT5jaGlsZCgxKSkpOworICAgICAgICByZXR1cm4gcmVkdWNlQml0WG9yKHR5cGUs
IG9yaWdpbiwgYml0QW5kLCBsZWZ0LT5jaGlsZCgxKSk7CisgICAgfQorCisgICAgaWYgKFZhbHVl
KiByZXN1bHQgPSB0cnlSZWR1Y2VCaXRBbmREaXN0cmlidXRpdml0eShCaXRPciwgdHlwZSwgb3Jp
Z2luLCBsZWZ0LCByaWdodCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICByZXR1cm4g
Y2FuR2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KEJpdE9yLCBvcmlnaW4sIGxlZnQsIHJp
Z2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VCaXRYb3IoVHlwZSB0
eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdp
dmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxlZnQpKQorICAgICAgICBy
ZXR1cm4gcmVkdWNlQml0WG9yKHR5cGUsIG9yaWdpbiwgcmlnaHQsIGxlZnQpOworCisgICAgLy8g
VHVybiB0aGlzOiBCaXRYb3IoY29uc3RhbnQxLCBjb25zdGFudDIpCisgICAgLy8gSW50byB0aGlz
OiBjb25zdGFudDEgXiBjb25zdGFudDIKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbGVmdC0+
Yml0WG9yQ29uc3RhbnQobV9wcm9jLCByaWdodCkpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1
cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IEJpdFhvcihCaXRYb3Io
dmFsdWUsIGNvbnN0YW50MSksIGNvbnN0YW50MikKKyAgICAvLyBJbnRvIHRoaXM6IEJpdFhvcih2
YWx1ZSwgY29uc3RhbnQxIF4gY29uc3RhbnQyKS4KKyAgICBpZiAobGVmdC0+b3Bjb2RlKCkgPT0g
Qml0WG9yKSB7CisgICAgICAgIFZhbHVlKiBuZXdDb25zdGFudCA9IHJpZ2h0LT5iaXRYb3JDb25z
dGFudChtX3Byb2MsIGxlZnQtPmNoaWxkKDEpKTsKKyAgICAgICAgaWYgKG5ld0NvbnN0YW50KSB7
CisgICAgICAgICAgICBuZXdDb25zdGFudCA9IGFwcGVuZFRvQ3VycmVudEJsb2NrKG5ld0NvbnN0
YW50KTsKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VCaXRYb3IodHlwZSwgb3JpZ2luLCBsZWZ0
LT5jaGlsZCgwKSwgbmV3Q29uc3RhbnQpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVHVy
biB0aGlzOiBCaXRYb3IoY29tcGFyZSwgMSkKKyAgICAvLyBJbnRvIHRoaXM6IGludmVydGVkQ29t
cGFyZQorICAgIGlmIChyaWdodC0+aXNJbnQzMigxKSkgeworICAgICAgICBpZiAoVmFsdWUqIGlu
dmVydGVkQ29tcGFyZSA9IGxlZnQtPmludmVydGVkQ29tcGFyZShtX3Byb2MpKQorICAgICAgICAg
ICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKGludmVydGVkQ29tcGFyZSk7CisgICAgfQor
CisgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IodmFsdWVYLCB2YWx1ZVgpCisgICAgLy8gSW50byB0
aGlzOiB6ZXJvLWNvbnN0YW50LgorICAgIGlmIChsZWZ0ID09IHJpZ2h0KQorICAgICAgICByZXR1
cm4gYXBwZW5kVG9DdXJyZW50QmxvY2sobV9wcm9jLmFkZEludENvbnN0YW50KG9yaWdpbiwgdHlw
ZSwgMCkpOworCisgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IodmFsdWUsIHplcm8tY29uc3RhbnQp
CisgICAgLy8gSW50byB0aGlzOiB2YWx1ZS4KKyAgICBpZiAocmlnaHQtPmlzSW50KDApKQorICAg
ICAgICByZXR1cm4gbGVmdDsKKworICAgIGlmIChWYWx1ZSogcmVzdWx0ID0gdHJ5UmVkdWNlQml0
QW5kRGlzdHJpYnV0aXZpdHkoQml0WG9yLCB0eXBlLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KSkKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDog
ZW1pdDxWYWx1ZT4oQml0WG9yLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBl
ZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VTaGwoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1
ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRo
aXM6IFNobChjb25zdGFudDEsIGNvbnN0YW50MikKKyAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50
MSA8PCBjb25zdGFudDIKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbGVmdC0+c2hsQ29uc3Rh
bnQobV9wcm9jLCByaWdodCkpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhj
b25zdGFudCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IFNobCg8U3xaPlNocihAeCwgQGNvbnN0KSwg
QGNvbnN0KQorICAgIC8vIEludG8gdGhpczogQml0QW5kKEB4LCAtKDE8PEBjb25zdCkpCisgICAg
aWYgKChsZWZ0LT5vcGNvZGUoKSA9PSBTU2hyIHx8IGxlZnQtPm9wY29kZSgpID09IFpTaHIpCisg
ICAgICAgICYmIGxlZnQtPmNoaWxkKDEpLT5oYXNJbnQoKQorICAgICAgICAmJiByaWdodC0+aGFz
SW50KCkKKyAgICAgICAgJiYgbGVmdC0+Y2hpbGQoMSktPmFzSW50KCkgPT0gcmlnaHQtPmFzSW50
KCkpIHsKKyAgICAgICAgaW50IHNoaWZ0QW1vdW50ID0gcmlnaHQtPmFzSW50KCkgJiAodHlwZSA9
PSBJbnQzMiA/IDMxIDogNjMpOworICAgICAgICBWYWx1ZSogbmV3Q29uc3QgPSBhcHBlbmRUb0N1
cnJlbnRCbG9jayhtX3Byb2MuYWRkSW50Q29uc3RhbnQob3JpZ2luLCB0eXBlLCAtIHN0YXRpY19j
YXN0PGludDY0X3Q+KDF1bGwgPDwgc2hpZnRBbW91bnQpKSk7CisgICAgICAgIHJldHVybiByZWR1
Y2VCaXRBbmQodHlwZSwgb3JpZ2luLCBsZWZ0LT5jaGlsZCgwKSwgbmV3Q29uc3QpOworICAgIH0K
KworICAgIGlmIChWYWx1ZSogcmVzdWx0ID0gdHJ5UmVkdWNlU2hpZnRPclJvdGF0ZShTaGwsIHR5
cGUsIG9yaWdpbiwgbGVmdCwgcmlnaHQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAg
cmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihTaGwsIG9yaWdpbiwgbGVm
dCwgcmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVNTaHIoVHlw
ZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNh
bkdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6IFNTaHIoY29uc3RhbnQxLCBjb25zdGFudDIp
CisgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgPj4gY29uc3RhbnQyCisgICAgaWYgKFZhbHVl
KiBjb25zdGFudCA9IGxlZnQtPnNTaHJDb25zdGFudChtX3Byb2MsIHJpZ2h0KSkKKyAgICAgICAg
cmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50KTsKKworICAgIGlmIChyaWdodC0+
aGFzSW50MzIoKQorICAgICAgICAmJiBsZWZ0LT5vcGNvZGUoKSA9PSBTaGwKKyAgICAgICAgJiYg
bGVmdC0+Y2hpbGQoMSktPmhhc0ludDMyKCkKKyAgICAgICAgJiYgcmlnaHQtPmFzSW50MzIoKSA9
PSBsZWZ0LT5jaGlsZCgxKS0+YXNJbnQzMigpKSB7CisgICAgICAgIGlmIChyaWdodC0+YXNJbnQz
MigpID09IDE2ICYmIHR5cGUgPT0gSW50MzIpIHsKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczog
U1NocihTaGwodmFsdWUsIDE2KSwgMTYpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNFeHQx
Nih2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VTRXh0MTYodHlwZSwgb3JpZ2luLCBs
ZWZ0LT5jaGlsZCgwKSk7CisgICAgICAgIH0gZWxzZSBpZiAocmlnaHQtPmFzSW50MzIoKSA9PSAy
NCAmJiB0eXBlID09IEludDMyKSB7CisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNTaHIoU2hs
KHZhbHVlLCAyNCksIDI0KQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0OCh2YWx1ZSkK
KyAgICAgICAgICAgIHJldHVybiByZWR1Y2VTRXh0OCh0eXBlLCBvcmlnaW4sIGxlZnQtPmNoaWxk
KDApKTsKKyAgICAgICAgfSBlbHNlIGlmIChyaWdodC0+YXNJbnQzMigpID09IDMyICYmIHR5cGUg
PT0gSW50NjQpIHsKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU1NocihTaGwodmFsdWUsIDMy
KSwgMzIpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNFeHQzMihUcnVuYyh2YWx1ZSkpCisg
ICAgICAgICAgICBWYWx1ZSogdHJ1bmMgPSByZWR1Y2VUcnVuYyh0eXBlLCBvcmlnaW4sIGxlZnQt
PmNoaWxkKDApKTsKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VTRXh0MzIodHlwZSwgb3JpZ2lu
LCB0cnVuYyk7CisgICAgICAgIH0KKyAgICAgICAgLy8gRklYTUU6IEFkZCBjYXNlcyBmb3IgNDgg
YW5kIDU2LCBidXQgdGhhdCB3b3VsZCB0cmFuc2xhdGUgdG8gU0V4dDMyKFNFeHQ4KSBvcgorICAg
ICAgICAvLyBTRXh0MzIoU0V4dDE2KSwgd2hpY2ggd2UgZG9uJ3QgY3VycmVudGx5IGxvd2VyIGVm
ZmljaWVudGx5LgorICAgIH0KKworICAgIGlmIChWYWx1ZSogcmVzdWx0ID0gdHJ5UmVkdWNlU2hp
ZnRPclJvdGF0ZShTU2hyLCB0eXBlLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1
ZT4oU1Nociwgb3JpZ2luLCBsZWZ0LCByaWdodCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGlt
aXplcjo6cmVkdWNlWlNocihUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBW
YWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogWlNocihj
b25zdGFudDEsIGNvbnN0YW50MikKKyAgICAvLyBJbnRvIHRoaXM6ICh1bnNpZ25lZCljb25zdGFu
dDEgPj4gY29uc3RhbnQyCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGxlZnQtPnpTaHJDb25z
dGFudChtX3Byb2MsIHJpZ2h0KSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2Nr
KGNvbnN0YW50KTsKKworICAgIGlmIChWYWx1ZSogcmVzdWx0ID0gdHJ5UmVkdWNlU2hpZnRPclJv
dGF0ZShaU2hyLCB0eXBlLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oWlNo
ciwgb3JpZ2luLCBsZWZ0LCByaWdodCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6
cmVkdWNlUm90UihUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSog
cmlnaHQsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogUm90Uihjb25zdGFu
dDEsIGNvbnN0YW50MikKKyAgICAvLyBJbnRvIHRoaXM6IChjb25zdGFudDEgPj4gY29uc3RhbnQy
KSB8IChjb25zdGFudDEgPDwgc2l6ZW9mKGNvbnN0YW50MSkgKiA4IC0gY29uc3RhbnQyKQorICAg
IGlmIChWYWx1ZSogY29uc3RhbnQgPSBsZWZ0LT5yb3RSQ29uc3RhbnQobV9wcm9jLCByaWdodCkp
CisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICBp
ZiAoVmFsdWUqIHJlc3VsdCA9IHRyeVJlZHVjZVNoaWZ0T3JSb3RhdGUoUm90UiwgdHlwZSwgb3Jp
Z2luLCBsZWZ0LCByaWdodCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICByZXR1cm4g
Y2FuR2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KFJvdFIsIG9yaWdpbiwgbGVmdCwgcmln
aHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVJvdEwoVHlwZSB0eXBl
LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVV
cCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6IFJvdEwoY29uc3RhbnQxLCBjb25zdGFudDIpCisgICAg
Ly8gSW50byB0aGlzOiAoY29uc3RhbnQxIDw8IGNvbnN0YW50MikgfCAoY29uc3RhbnQxID4+IHNp
emVvZihjb25zdGFudDEpICogOCAtIGNvbnN0YW50MikKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50
ID0gbGVmdC0+cm90TENvbnN0YW50KG1fcHJvYywgcmlnaHQpKQorICAgICAgICByZXR1cm4gYXBw
ZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgaWYgKFZhbHVlKiByZXN1bHQgPSB0
cnlSZWR1Y2VTaGlmdE9yUm90YXRlKFJvdEwsIHR5cGUsIG9yaWdpbiwgbGVmdCwgcmlnaHQpKQor
ICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIg
OiBlbWl0PFZhbHVlPihSb3RMLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBl
ZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VBYnMoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1
ZSogY2hpbGQsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogQWJzKGNvbnN0
YW50KQorICAgIC8vIEludG8gdGhpczogZmFiczx0eXBlPihjb25zdGFudCkKKyAgICBpZiAoVmFs
dWUqIGNvbnN0YW50ID0gY2hpbGQtPmFic0NvbnN0YW50KG1fcHJvYykpCisgICAgICAgIHJldHVy
biBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IEFi
cyhBYnModmFsdWUpKQorICAgIC8vIEludG8gdGhpczogQWJzKHZhbHVlKQorICAgIGlmIChjaGls
ZC0+b3Bjb2RlKCkgPT0gQWJzKQorICAgICAgICByZXR1cm4gY2hpbGQ7CisKKyAgICAvLyBUdXJu
IHRoaXM6IEFicyhOZWcodmFsdWUpKQorICAgIC8vIEludG8gdGhpczogQWJzKHZhbHVlKQorICAg
IGlmIChjaGlsZC0+b3Bjb2RlKCkgPT0gTmVnKQorICAgICAgICByZXR1cm4gcmVkdWNlQWJzKHR5
cGUsIG9yaWdpbiwgY2hpbGQtPmNoaWxkKDApKTsKKworICAgIC8vIFR1cm4gdGhpczogQWJzKEJp
dHdpc2VDYXN0KHZhbHVlKSkKKyAgICAvLyBJbnRvIHRoaXM6IEJpdHdpc2VDYXN0KEFuZCh2YWx1
ZSwgbWFzay10b3AtYml0KSkKKyAgICBpZiAoY2hpbGQtPm9wY29kZSgpID09IEJpdHdpc2VDYXN0
KSB7CisgICAgICAgIFZhbHVlKiBtYXNrOworICAgICAgICBpZiAodHlwZSA9PSBEb3VibGUpCisg
ICAgICAgICAgICBtYXNrID0gZW1pdDxDb25zdDY0VmFsdWU+KG9yaWdpbiwgfigxbGwgPDwgNjMp
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWFzayA9IGVtaXQ8Q29uc3QzMlZhbHVlPihv
cmlnaW4sIH4oMWxsIDw8IDMxKSk7CisKKyAgICAgICAgVmFsdWUqIGJpdEFuZCA9IHJlZHVjZUJp
dEFuZCh0eXBlID09IERvdWJsZSA/IEludDY0IDogSW50MzIsIG9yaWdpbiwgY2hpbGQtPmNoaWxk
KDApLCBtYXNrKTsKKyAgICAgICAgcmV0dXJuIHJlZHVjZUJpdHdpc2VDYXN0KHR5cGUsIG9yaWdp
biwgYml0QW5kKTsKKyAgICB9CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0ciA6IGVt
aXQ8VmFsdWU+KEFicywgb3JpZ2luLCBjaGlsZCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGlt
aXplcjo6cmVkdWNlQ2VpbChUeXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogY2hpbGQsIGJvb2wg
Y2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogQ2VpbChjb25zdGFudCkKKyAgICAvLyBJ
bnRvIHRoaXM6IGNlaWw8dHlwZT4oY29uc3RhbnQpCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9
IGNoaWxkLT5jZWlsQ29uc3RhbnQobV9wcm9jKSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3Vy
cmVudEJsb2NrKGNvbnN0YW50KTsKKworICAgIC8vIFR1cm4gdGhpczogQ2VpbChyb3VuZGVkVmFs
dWUpCisgICAgLy8gSW50byB0aGlzOiByb3VuZGVkVmFsdWUKKyAgICBpZiAoY2hpbGQtPmlzUm91
bmRlZCgpKQorICAgICAgICByZXR1cm4gY2hpbGQ7CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8g
bnVsbHB0ciA6IGVtaXQ8VmFsdWU+KENlaWwsIG9yaWdpbiwgY2hpbGQpOworfQorCitWYWx1ZSog
UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUZsb29yKFR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVl
KiBjaGlsZCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgLy8gVHVybiB0aGlzOiBGbG9vcihjb25z
dGFudCkKKyAgICAvLyBJbnRvIHRoaXM6IGZsb29yPHR5cGU+KGNvbnN0YW50KQorICAgIGlmIChW
YWx1ZSogY29uc3RhbnQgPSBjaGlsZC0+Zmxvb3JDb25zdGFudChtX3Byb2MpKQorICAgICAgICBy
ZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgLy8gVHVybiB0aGlz
OiBGbG9vcihyb3VuZGVkVmFsdWUpCisgICAgLy8gSW50byB0aGlzOiByb3VuZGVkVmFsdWUKKyAg
ICBpZiAoY2hpbGQtPmlzUm91bmRlZCgpKQorICAgICAgICByZXR1cm4gY2hpbGQ7CisKKyAgICBy
ZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KEZsb29yLCBvcmlnaW4sIGNo
aWxkKTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VTcXJ0KFR5cGUsIE9y
aWdpbiBvcmlnaW4sIFZhbHVlKiBjaGlsZCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgLy8gVHVy
biB0aGlzOiBTcXJ0KGNvbnN0YW50KQorICAgIC8vIEludG8gdGhpczogc3FydDx0eXBlPihjb25z
dGFudCkKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gY2hpbGQtPnNxcnRDb25zdGFudChtX3By
b2MpKQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisg
ICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihTcXJ0LCBvcmlnaW4s
IGNoaWxkKTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VCaXR3aXNlQ2Fz
dChUeXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogY2hpbGQsIGJvb2wgY2FuR2l2ZVVwKQorewor
ICAgIC8vIFR1cm4gdGhpczogQml0d2lzZUNhc3QoY29uc3RhbnQpCisgICAgLy8gSW50byB0aGlz
OiBiaXR3aXNlQ2FzdDx0eXBlPihjb25zdGFudCkKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0g
Y2hpbGQtPmJpdHdpc2VDYXN0Q29uc3RhbnQobV9wcm9jKSkKKyAgICAgICAgcmV0dXJuIGFwcGVu
ZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50KTsKKworICAgIC8vIFR1cm4gdGhpczogQml0d2lzZUNh
c3QoQml0d2lzZUNhc3QodmFsdWUpKQorICAgIC8vIEludG8gdGhpczogdmFsdWUKKyAgICBpZiAo
Y2hpbGQtPm9wY29kZSgpID09IEJpdHdpc2VDYXN0KQorICAgICAgICByZXR1cm4gY2hpbGQtPmNo
aWxkKDApOworCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihC
aXR3aXNlQ2FzdCwgb3JpZ2luLCBjaGlsZCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXpl
cjo6cmVkdWNlU0V4dDgoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogY2hpbGQsIGJv
b2wgY2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogU0V4dDgoY29uc3RhbnQpCisgICAg
Ly8gSW50byB0aGlzOiBzdGF0aWNfY2FzdDxpbnQ4X3Q+KGNvbnN0YW50KQorICAgIGlmIChjaGls
ZC0+aGFzSW50MzIoKSkgeworICAgICAgICBpbnQzMl90IHJlc3VsdCA9IHN0YXRpY19jYXN0PGlu
dDhfdD4oY2hpbGQtPmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiBlbWl0PENvbnN0MzJWYWx1
ZT4ob3JpZ2luLCByZXN1bHQpOworICAgIH0KKworICAgIC8vIFR1cm4gdGhpczogU0V4dDgoU0V4
dDgodmFsdWUpKQorICAgIC8vICAgb3IgdGhpczogU0V4dDgoU0V4dDE2KHZhbHVlKSkKKyAgICAv
LyBJbnRvIHRoaXM6IFNFeHQ4KHZhbHVlKQorICAgIGlmIChjaGlsZC0+b3Bjb2RlKCkgPT0gU0V4
dDggfHwgY2hpbGQtPm9wY29kZSgpID09IFNFeHQxNikKKyAgICAgICAgcmV0dXJuIHJlZHVjZVNF
eHQ4KHR5cGUsIG9yaWdpbiwgY2hpbGQtPmNoaWxkKDApKTsKKworICAgIGlmIChjaGlsZC0+b3Bj
b2RlKCkgPT0gQml0QW5kICYmIGNoaWxkLT5jaGlsZCgxKS0+aGFzSW50MzIoKSkgeworICAgICAg
ICBWYWx1ZSogaW5wdXQgPSBjaGlsZC0+Y2hpbGQoMCk7CisgICAgICAgIGludDMyX3QgbWFzayA9
IGNoaWxkLT5jaGlsZCgxKS0+YXNJbnQzMigpOworCisgICAgICAgIC8vIFR1cm4gdGhpczogU0V4
dDgoQml0QW5kKGlucHV0LCBtYXNrKSkgd2hlcmUgKG1hc2sgJiAweGZmKSA9PSAweGZmCisgICAg
ICAgIC8vIEludG8gdGhpczogU0V4dDgoaW5wdXQpCisgICAgICAgIGlmICgobWFzayAmIDB4ZmYp
ID09IDB4ZmYpCisgICAgICAgICAgICByZXR1cm4gcmVkdWNlU0V4dDgodHlwZSwgb3JpZ2luLCBp
bnB1dCk7CisKKyAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0OChCaXRBbmQoaW5wdXQsIG1hc2sp
KSB3aGVyZSAobWFzayAmIDB4ODApID09IDAKKyAgICAgICAgLy8gSW50byB0aGlzOiBCaXRBbmQo
aW5wdXQsIGNvbnN0ICYgMHg3ZikKKyAgICAgICAgaWYgKCEobWFzayAmIDB4ODApKSB7CisgICAg
ICAgICAgICBWYWx1ZSogbmV3Q29uc3QgPSBlbWl0PENvbnN0MzJWYWx1ZT4ob3JpZ2luLCBtYXNr
ICYgMHg3Zik7CisgICAgICAgICAgICByZXR1cm4gcmVkdWNlQml0QW5kKHR5cGUsIG9yaWdpbiwg
aW5wdXQsIG5ld0NvbnN0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghbV9wcm9jLmhh
c1F1aXJrcygpKSB7CisgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDgoQXRvbWljWGNoZ19fXykK
KyAgICAgICAgLy8gSW50byB0aGlzOiBBdG9taWNYY2hnX19fCisgICAgICAgIGlmIChpc0F0b21p
Y1hjaGcoY2hpbGQtPm9wY29kZSgpKSAmJiBjaGlsZC0+YXM8QXRvbWljVmFsdWU+KCktPmFjY2Vz
c1dpZHRoKCkgPT0gV2lkdGg4KQorICAgICAgICAgICAgcmV0dXJuIGNoaWxkOworICAgIH0KKwor
ICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oU0V4dDgsIG9yaWdp
biwgY2hpbGQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVNFeHQxNihU
eXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBjaGlsZCwgYm9vbCBjYW5HaXZlVXApCit7
CisgICAgLy8gVHVybiB0aGlzOiBTRXh0MTYoY29uc3RhbnQpCisgICAgLy8gSW50byB0aGlzOiBz
dGF0aWNfY2FzdDxpbnQxNl90Pihjb25zdGFudCkKKyAgICBpZiAoY2hpbGQtPmhhc0ludDMyKCkp
IHsKKyAgICAgICAgaW50MzJfdCByZXN1bHQgPSBzdGF0aWNfY2FzdDxpbnQxNl90PihjaGlsZC0+
YXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIGVtaXQ8Q29uc3QzMlZhbHVlPihvcmlnaW4sIHJl
c3VsdCk7CisgICAgfQorCisgICAgLy8gVHVybiB0aGlzOiBTRXh0MTYoU0V4dDE2KHZhbHVlKSkK
KyAgICAvLyBJbnRvIHRoaXM6IFNFeHQxNih2YWx1ZSkKKyAgICAvLyBhbmQgdHVybiB0aGlzOiBT
RXh0MTYoU0V4dDgodmFsdWUpKQorICAgIC8vIEludG8gdGhpczogU0V4dDgodmFsdWUpCisgICAg
aWYgKGNoaWxkLT5vcGNvZGUoKSA9PSBTRXh0MTYgfHwgY2hpbGQtPm9wY29kZSgpID09IFNFeHQ4
KQorICAgICAgICByZXR1cm4gY2hpbGQ7CisKKyAgICBpZiAoY2hpbGQtPm9wY29kZSgpID09IEJp
dEFuZCAmJiBjaGlsZC0+Y2hpbGQoMSktPmhhc0ludDMyKCkpIHsKKyAgICAgICAgVmFsdWUqIGlu
cHV0ID0gY2hpbGQtPmNoaWxkKDApOworICAgICAgICBpbnQzMl90IG1hc2sgPSBjaGlsZC0+Y2hp
bGQoMSktPmFzSW50MzIoKTsKKworICAgICAgICAvLyBUdXJuIHRoaXM6IFNFeHQxNihCaXRBbmQo
aW5wdXQsIG1hc2spKSB3aGVyZSAobWFzayAmIDB4ZmZmZikgPT0gMHhmZmZmCisgICAgICAgIC8v
IEludG8gdGhpczogU0V4dDE2KGlucHV0KQorICAgICAgICBpZiAoKG1hc2sgJiAweGZmZmYpID09
IDB4ZmZmZikKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VTRXh0MTYodHlwZSwgb3JpZ2luLCBp
bnB1dCk7CisKKyAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0MTYoQml0QW5kKGlucHV0LCBtYXNr
KSkgd2hlcmUgKG1hc2sgJiAweDgwMDApID09IDAKKyAgICAgICAgLy8gSW50byB0aGlzOiBCaXRB
bmQoaW5wdXQsIGNvbnN0ICYgMHg3ZmZmKQorICAgICAgICBpZiAoIShtYXNrICYgMHg4MDAwKSkg
eworICAgICAgICAgICAgVmFsdWUqIG5ld0NvbnN0ID0gZW1pdDxDb25zdDMyVmFsdWU+KG9yaWdp
biwgbWFzayAmIDB4N2ZmZik7CisgICAgICAgICAgICByZXR1cm4gcmVkdWNlQml0QW5kKHR5cGUs
IG9yaWdpbiwgaW5wdXQsIG5ld0NvbnN0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgh
bV9wcm9jLmhhc1F1aXJrcygpKSB7CisgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDE2KEF0b21p
Y1hjaGdfX18pCisgICAgICAgIC8vIEludG8gdGhpczogQXRvbWljWGNoZ19fXworICAgICAgICBp
ZiAoaXNBdG9taWNYY2hnKGNoaWxkLT5vcGNvZGUoKSkgJiYgY2hpbGQtPmFzPEF0b21pY1ZhbHVl
PigpLT5hY2Nlc3NXaWR0aCgpID09IFdpZHRoMTYpCisgICAgICAgICAgICByZXR1cm4gY2hpbGQ7
CisgICAgfQorCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihT
RXh0MTYsIG9yaWdpbiwgY2hpbGQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJl
ZHVjZVNFeHQzMihUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBjaGlsZCwgYm9vbCBj
YW5HaXZlVXApCit7CisgICAgLy8gVHVybiB0aGlzOiBTRXh0MzIoY29uc3RhbnQpCisgICAgLy8g
SW50byB0aGlzOiBzdGF0aWNfY2FzdDxpbnQ2NF90Pihjb25zdGFudCkKKyAgICBpZiAoY2hpbGQt
Pmhhc0ludDMyKCkpCisgICAgICAgIHJldHVybiBlbWl0PENvbnN0NjRWYWx1ZT4ob3JpZ2luLCBj
aGlsZC0+YXNJbnQzMigpKTsKKworICAgIC8vIFR1cm4gdGhpczogU0V4dDMyKEJpdEFuZChpbnB1
dCwgbWFzaykpIHdoZXJlIChtYXNrICYgMHg4MDAwMDAwMCkgPT0gMAorICAgIC8vIEludG8gdGhp
czogWkV4dDMyKEJpdEFuZChpbnB1dCwgbWFzaykpCisgICAgaWYgKGNoaWxkLT5vcGNvZGUoKSA9
PSBCaXRBbmQgJiYgY2hpbGQtPmNoaWxkKDEpLT5oYXNJbnQzMigpCisgICAgICAgICYmICEoY2hp
bGQtPmNoaWxkKDEpLT5hc0ludDMyKCkgJiAweDgwMDAwMDAwKSkgeworICAgICAgICByZXR1cm4g
cmVkdWNlWkV4dDMyKHR5cGUsIG9yaWdpbiwgY2hpbGQpOworICAgIH0KKworICAgIHJldHVybiBj
YW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oU0V4dDMyLCBvcmlnaW4sIGNoaWxkKTsK
K30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VaRXh0MzIoVHlwZSwgT3JpZ2lu
IG9yaWdpbiwgVmFsdWUqIGNoaWxkLCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRo
aXM6IFpFeHQzMihjb25zdGFudCkKKyAgICAvLyBJbnRvIHRoaXM6IHN0YXRpY19jYXN0PHVpbnQ2
NF90PihzdGF0aWNfY2FzdDx1aW50MzJfdD4oY29uc3RhbnQpKQorICAgIGlmIChjaGlsZC0+aGFz
SW50MzIoKSkgeworICAgICAgICB1aW50NjRfdCByZXN1bHQgPSBzdGF0aWNfY2FzdDx1aW50NjRf
dD4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNoaWxkLT5hc0ludDMyKCkpKTsKKyAgICAgICAgcmV0
dXJuIGVtaXQ8Q29uc3Q2NFZhbHVlPihvcmlnaW4sIHJlc3VsdCk7CisgICAgfQorCisgICAgcmV0
dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihaRXh0MzIsIG9yaWdpbiwgY2hp
bGQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVRydW5jKFR5cGUgdHlw
ZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGNoaWxkLCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICAv
LyBUdXJuIHRoaXM6IFRydW5jKGNvbnN0YW50KQorICAgIC8vIEludG8gdGhpczogc3RhdGljX2Nh
c3Q8aW50MzJfdD4oY29uc3RhbnQpCisgICAgaWYgKGNoaWxkLT5oYXNJbnQ2NCgpIHx8IGNoaWxk
LT5oYXNEb3VibGUoKSkKKyAgICAgICAgcmV0dXJuIGVtaXQ8Q29uc3QzMlZhbHVlPihvcmlnaW4s
IHN0YXRpY19jYXN0PGludDMyX3Q+KGNoaWxkLT5hc0ludDY0KCkpKTsKKworICAgIC8vIFR1cm4g
dGhpczogVHJ1bmMoU0V4dDMyKHZhbHVlKSkgb3IgVHJ1bmMoWkV4dDMyKHZhbHVlKSkKKyAgICAv
LyBJbnRvIHRoaXM6IHZhbHVlCisgICAgaWYgKGNoaWxkLT5vcGNvZGUoKSA9PSBTRXh0MzIgfHwg
Y2hpbGQtPm9wY29kZSgpID09IFpFeHQzMikKKyAgICAgICAgcmV0dXJuIGNoaWxkLT5jaGlsZCgw
KTsKKworICAgIC8vIFR1cm4gdGhpczogVHJ1bmMoT3AodmFsdWUsIGNvbnN0YW50KSkKKyAgICAv
LyAgICAgd2hlcmUgIShjb25zdGFudCAmIDB4ZmZmZmZmZmYpCisgICAgLy8gICAgICAgYW5kIE9w
IGlzIEFkZCwgU3ViLCBCaXRPciwgb3IgQml0WG9yCisgICAgLy8gaW50byB0aGlzOiBUcnVuYyh2
YWx1ZSkKKyAgICAvLyBGSVhNRTogdGhpcyBpcyBqdXN0IGEgc3BlY2lhbCBjYXNlIG9mIGEgbW9y
ZSBnZW5lcmFsIHVzZWRCaXRzIGFuYWx5c2lzLgorICAgIHN3aXRjaCAoY2hpbGQtPm9wY29kZSgp
KSB7CisgICAgICAgIGNhc2UgQWRkOgorICAgICAgICBjYXNlIFN1YjoKKyAgICAgICAgY2FzZSBC
aXRPcjoKKyAgICAgICAgY2FzZSBCaXRYb3I6CisgICAgICAgICAgICBpZiAoY2hpbGQtPmNoaWxk
KDEpLT5oYXNJbnQ2NCgpICYmICEoY2hpbGQtPmNoaWxkKDEpLT5hc0ludDY0KCkgJiAweGZmZmZm
ZmZmbGwpKQorICAgICAgICAgICAgICAgIHJldHVybiByZWR1Y2VUcnVuYyh0eXBlLCBvcmlnaW4s
IGNoaWxkLT5jaGlsZCgwKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxs
cHRyIDogZW1pdDxWYWx1ZT4oVHJ1bmMsIG9yaWdpbiwgY2hpbGQpOworfQorCitWYWx1ZSogUGVl
cGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUlUb0QoVHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGNo
aWxkLCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6IElUb0QoY29uc3RhbnQp
CisgICAgLy8gSW50byB0aGlzOiBDb25zdERvdWJsZShjb25zdGFudCkKKyAgICBpZiAoVmFsdWUq
IGNvbnN0YW50ID0gY2hpbGQtPmlUb0RDb25zdGFudChtX3Byb2MpKQorICAgICAgICByZXR1cm4g
YXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/
IG51bGxwdHIgOiBlbWl0PFZhbHVlPihJVG9ELCBvcmlnaW4sIGNoaWxkKTsKK30KKworVmFsdWUq
IFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VJVG9GKFR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVl
KiBjaGlsZCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgLy8gVHVybiB0aGlzOiBJVG9GKGNvbnN0
YW50KQorICAgIC8vIEludG8gdGhpczogQ29uc3RGbG9hdChjb25zdGFudCkKKyAgICBpZiAoVmFs
dWUqIGNvbnN0YW50ID0gY2hpbGQtPmlUb0ZDb25zdGFudChtX3Byb2MpKQorICAgICAgICByZXR1
cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgcmV0dXJuIGNhbkdpdmVV
cCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihJVG9GLCBvcmlnaW4sIGNoaWxkKTsKK30KKworVmFs
dWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VGbG9hdFRvRG91YmxlKFR5cGUsIE9yaWdpbiBv
cmlnaW4sIFZhbHVlKiBjaGlsZCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgLy8gVHVybiB0aGlz
OiBGbG9hdFRvRG91YmxlKGNvbnN0YW50KQorICAgIC8vIEludG8gdGhpczogQ29uc3REb3VibGUo
Y29uc3RhbnQpCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGNoaWxkLT5mbG9hdFRvRG91Ymxl
Q29uc3RhbnQobV9wcm9jKSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKGNv
bnN0YW50KTsKKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4o
RmxvYXRUb0RvdWJsZSwgb3JpZ2luLCBjaGlsZCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGlt
aXplcjo6cmVkdWNlRG91YmxlVG9GbG9hdChUeXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogY2hp
bGQsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogRG91YmxlVG9GbG9hdChj
b25zdGFudCkKKyAgICAvLyBJbnRvIHRoaXM6IENvbnN0RmxvYXQoY29uc3RhbnQpCisgICAgaWYg
KFZhbHVlKiBjb25zdGFudCA9IGNoaWxkLT5kb3VibGVUb0Zsb2F0Q29uc3RhbnQobV9wcm9jKSkK
KyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50KTsKKworICAgIC8v
IFR1cm4gdGhpczogRG91YmxlVG9GbG9hdChGbG9hdFRvRG91YmxlKHZhbHVlKSkKKyAgICAvLyBJ
bnRvIHRoaXM6IHZhbHVlCisgICAgaWYgKGNoaWxkLT5vcGNvZGUoKSA9PSBGbG9hdFRvRG91Ymxl
KQorICAgICAgICByZXR1cm4gY2hpbGQtPmNoaWxkKDApOworCisgICAgcmV0dXJuIGNhbkdpdmVV
cCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihEb3VibGVUb0Zsb2F0LCBvcmlnaW4sIGNoaWxkKTsK
K30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VTZWxlY3QoVHlwZSB0eXBlLCBP
cmlnaW4gb3JpZ2luLCBWYWx1ZSogY29uZCwgVmFsdWUqIGlmVHJ1ZSwgVmFsdWUqIGlmRmFsc2Us
IGJvb2wgY2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogU2VsZWN0KGNvbnN0YW50LCBh
LCBiKQorICAgIC8vIEludG8gdGhpczogY29uc3RhbnQgPyBhIDogYgorICAgIGlmIChjb25kLT5o
YXNJbnQzMigpKQorICAgICAgICByZXR1cm4gY29uZC0+YXNJbnQzMigpID8gaWZUcnVlIDogaWZG
YWxzZTsKKworICAgIC8vIFR1cm4gdGhpczogU2VsZWN0KEVxdWFsKHgsIDApLCBhLCBiKQorICAg
IC8vIEludG8gdGhpczogU2VsZWN0KHgsIGIsIGEpCisgICAgaWYgKGNvbmQtPm9wY29kZSgpID09
IEVxdWFsICYmIGNvbmQtPmNoaWxkKDEpLT5pc0ludCgwKSkKKyAgICAgICAgcmV0dXJuIHJlZHVj
ZVNlbGVjdCh0eXBlLCBvcmlnaW4sIGNvbmQtPmNoaWxkKDApLCBpZkZhbHNlLCBpZlRydWUpOwor
CisgICAgLy8gVHVybiB0aGlzOiBTZWxlY3QoQml0WG9yKGJvb2wsIDEpLCBhLCBiKQorICAgIC8v
IEludG8gdGhpczogU2VsZWN0KGJvb2wsIGIsIGEpCisgICAgaWYgKGNvbmQtPm9wY29kZSgpID09
IEJpdFhvciAmJiBjb25kLT5jaGlsZCgxKS0+aXNJbnQzMigxKSAmJiBjb25kLT5jaGlsZCgwKS0+
cmV0dXJuc0Jvb2woKSkKKyAgICAgICAgcmV0dXJuIHJlZHVjZVNlbGVjdCh0eXBlLCBvcmlnaW4s
IGNvbmQtPmNoaWxkKDApLCBpZkZhbHNlLCBpZlRydWUpOworCisgICAgLy8gVHVybiB0aGlzOiBT
ZWxlY3QoQml0QW5kKGJvb2wsIHh5ejEpLCBhLCBiKQorICAgIC8vIEludG8gdGhpczogU2VsZWN0
KGJvb2wsIGEsIGIpCisgICAgaWYgKGNvbmQtPm9wY29kZSgpID09IEJpdEFuZAorICAgICAgICAm
JiBjb25kLT5jaGlsZCgxKS0+aGFzSW50KCkKKyAgICAgICAgJiYgY29uZC0+Y2hpbGQoMSktPmFz
SW50KCkgJiAxCisgICAgICAgICYmIGNvbmQtPmNoaWxkKDApLT5yZXR1cm5zQm9vbCgpKSB7Cisg
ICAgICAgIHJldHVybiByZWR1Y2VTZWxlY3QodHlwZSwgb3JpZ2luLCBjb25kLT5jaGlsZCgwKSwg
aWZUcnVlLCBpZkZhbHNlKTsKKyAgICB9CisKKyAgICAvLyBUdXJuIHRoaXM6IFNlbGVjdChzdHVm
ZiwgeCwgeCkKKyAgICAvLyBJbnRvIHRoaXM6IHgKKyAgICBpZiAoaWZUcnVlID09IGlmRmFsc2Up
CisgICAgICAgIHJldHVybiBpZlRydWU7CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0
ciA6IGVtaXQ8VmFsdWU+KFNlbGVjdCwgb3JpZ2luLCBjb25kLCBpZlRydWUsIGlmRmFsc2UpOwor
fQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUxvYWRTdG9yZShPcGNvZGUgb3As
IFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGFkZHJlc3MsIFZhbHVlOjpPZmZzZXRU
eXBlIG9mZnNldCwgVmFsdWUqIHZhbHVlU3RvcmVkLCBIZWFwUmFuZ2UgcmFuZ2UsIEhlYXBSYW5n
ZSBmZW5jZVJhbmdlLCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6IExvYWQo
QWRkKGFkZHJlc3MsIG9mZnNldDEpLCBvZmZzZXQgPSBvZmZzZXQyKQorICAgIC8vIEludG8gdGhp
czogTG9hZChhZGRyZXNzLCBvZmZzZXQgPSBvZmZzZXQxICsgb2Zmc2V0MikKKyAgICAvLworICAg
IC8vIEFsc28gdHVybnMgdGhpczogU3RvcmUodmFsdWUsIEFkZChhZGRyZXNzLCBvZmZzZXQxKSwg
b2Zmc2V0ID0gb2Zmc2V0MikKKyAgICAvLyBJbnRvIHRoaXM6IFN0b3JlKHZhbHVlLCBhZGRyZXNz
LCBvZmZzZXQgPSBvZmZzZXQxICsgb2Zmc2V0MikKKyAgICBpZiAoYWRkcmVzcy0+b3Bjb2RlKCkg
PT0gQWRkICYmIGFkZHJlc3MtPmNoaWxkKDEpLT5oYXNJbnRQdHIoKSkgeworICAgICAgICBpbnRw
dHJfdCBvZmZzZXQxID0gYWRkcmVzcy0+Y2hpbGQoMSktPmFzSW50UHRyKCk7CisgICAgICAgIGlm
ICghc3VtT3ZlcmZsb3dzPGludHB0cl90PihvZmZzZXQsIG9mZnNldDEpKSB7CisgICAgICAgICAg
ICBvZmZzZXQxICs9IG9mZnNldDsKKyAgICAgICAgICAgIFZhbHVlOjpPZmZzZXRUeXBlIHNtYWxs
T2Zmc2V0ID0gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9mZnNldFR5cGU+KG9mZnNldDEpOworICAgICAg
ICAgICAgaWYgKHNtYWxsT2Zmc2V0ID09IG9mZnNldDEpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHJlZHVjZUxvYWRTdG9yZShvcCwgdHlwZSwgb3JpZ2luLCBhZGRyZXNzLT5jaGlsZCgwKSwgc21h
bGxPZmZzZXQsIHZhbHVlU3RvcmVkLCByYW5nZSwgZmVuY2VSYW5nZSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBUdXJuIHRoaXM6IExvYWQoY29uc3RhbnQxLCBvZmZzZXQgPSBjb25zdGFu
dDIpCisgICAgLy8gSW50byB0aGlzOiBMb2FkKGNvbnN0YW50MSArIGNvbnN0YW50MikKKyAgICAv
LworICAgIC8vIFRoaXMgaXMgYSBmdW4gY2Fub25pY2FsaXphdGlvbi4gSXQgcHVyZWx5IHJlZ3Jl
c3NlcyBuYWl2ZWx5IGdlbmVyYXRlZCBjb2RlLiBXZSByZWx5CisgICAgLy8gb24gY29uc3RhbnQg
bWF0ZXJpYWxpemF0aW9uIHRvIGJlIHNtYXJ0IGVub3VnaCB0byBtYXRlcmlhbGl6ZSB0aGlzIGNv
bnN0YW50IHRoZSBzbWFydAorICAgIC8vIHdheS4gV2Ugd2FudCB0aGlzIGNhbm9uaWNhbGl6YXRp
b24gYmVjYXVzZSB3ZSB3YW50IHRvIGtub3cgaWYgdHdvIG1lbW9yeSBhY2Nlc3NlcyBzZWUKKyAg
ICAvLyB0aGUgc2FtZSBhZGRyZXNzLgorICAgIGlmIChvZmZzZXQpIHsKKyAgICAgICAgaWYgKFZh
bHVlKiBuZXdBZGRyZXNzID0gYWRkcmVzcy0+YWRkQ29uc3RhbnQobV9wcm9jLCBvZmZzZXQpKQor
ICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUxvYWRTdG9yZShvcCwgdHlwZSwgb3JpZ2luLCBuZXdB
ZGRyZXNzLCAwLCB2YWx1ZVN0b3JlZCwgcmFuZ2UsIGZlbmNlUmFuZ2UpOworICAgIH0KKworICAg
IGlmIChjYW5HaXZlVXApCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHN3aXRjaChvcCkg
eworICAgIGNhc2UgTG9hZDhaOgorICAgIGNhc2UgTG9hZDhTOgorICAgIGNhc2UgTG9hZDE2WjoK
KyAgICBjYXNlIExvYWQxNlM6CisgICAgICAgIEFTU0VSVCghdmFsdWVTdG9yZWQpOworICAgICAg
ICByZXR1cm4gZW1pdDxNZW1vcnlWYWx1ZT4ob3AsIG9yaWdpbiwgYWRkcmVzcywgb2Zmc2V0LCBy
YW5nZSwgZmVuY2VSYW5nZSk7CisgICAgY2FzZSBMb2FkOgorICAgICAgICBBU1NFUlQoIXZhbHVl
U3RvcmVkKTsKKyAgICAgICAgcmV0dXJuIGVtaXQ8TWVtb3J5VmFsdWU+KG9wLCB0eXBlLCBvcmln
aW4sIGFkZHJlc3MsIG9mZnNldCwgcmFuZ2UsIGZlbmNlUmFuZ2UpOworICAgIGNhc2UgU3RvcmU4
OgorICAgIGNhc2UgU3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlOgorICAgICAgICBBU1NFUlQoISF2
YWx1ZVN0b3JlZCk7CisgICAgICAgIHJldHVybiBlbWl0PE1lbW9yeVZhbHVlPihvcCwgb3JpZ2lu
LCB2YWx1ZVN0b3JlZCwgYWRkcmVzcywgb2Zmc2V0LCByYW5nZSwgZmVuY2VSYW5nZSk7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJl
ZHVjZUVxdWFsKFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiBy
aWdodCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgaWYgKHNob3VsZEdvQmVmb3JlKHJpZ2h0LCBs
ZWZ0KSkKKyAgICAgICAgcmV0dXJuIHJlZHVjZUVxdWFsKHR5cGUsIG9yaWdpbiwgcmlnaHQsIGxl
ZnQpOworCisgICAgLy8gVHVybiB0aGlzOiBFcXVhbChib29sLCAwKQorICAgIC8vIEludG8gdGhp
czogQml0WG9yKGJvb2wsIDEpCisgICAgaWYgKGxlZnQtPnJldHVybnNCb29sKCkgJiYgcmlnaHQt
PmlzSW50MzIoMCkpIHsKKyAgICAgICAgVmFsdWUqIGNvbnN0MSA9IGVtaXQ8Q29uc3QzMlZhbHVl
PihvcmlnaW4sIDEpOworICAgICAgICByZXR1cm4gcmVkdWNlQml0WG9yKHR5cGUsIG9yaWdpbiwg
bGVmdCwgY29uc3QxKTsKKyAgICB9CisKKyAgICAvLyBUdXJuIHRoaXMgRXF1YWwoYm9vbCwgMSkK
KyAgICAvLyBJbnRvIHRoaXM6IGJvb2wKKyAgICBpZiAobGVmdC0+cmV0dXJuc0Jvb2woKSAmJiBy
aWdodC0+aXNJbnQzMigxKSkKKyAgICAgICAgcmV0dXJuIGxlZnQ7CisKKyAgICAvLyBUdXJuIHRo
aXM6IEVxdWFsKGNvbnN0MSwgY29uc3QyKQorICAgIC8vIEludG8gdGhpczogY29uc3QxID09IGNv
bnN0MgorICAgIGlmIChWYWx1ZSogcmVzdWx0ID0gbV9wcm9jLmFkZEJvb2xDb25zdGFudChvcmln
aW4sIGxlZnQtPmVxdWFsQ29uc3RhbnQocmlnaHQpKSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRv
Q3VycmVudEJsb2NrKHJlc3VsdCk7CisKKyAgICAvLyBGSVhNRTogYXQgbGVhc3QgZm9yIGludGVn
ZXJzIHdlIHJlYWxseSBzaG91bGQgaGF2ZSBFcXVhbCh4LCB4KSA9PiB0cnVlLCBldmVuIGZvciBu
b24tY29uc3RhbnRzLgorCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZh
bHVlPihFcXVhbCwgb3JpZ2luLCBsZWZ0LCByaWdodCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9w
dGltaXplcjo6cmVkdWNlTm90RXF1YWwoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSog
bGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29C
ZWZvcmUocmlnaHQsIGxlZnQpKQorICAgICAgICByZXR1cm4gcmVkdWNlTm90RXF1YWwodHlwZSwg
b3JpZ2luLCByaWdodCwgbGVmdCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IE5vdEVxdWFsKGJvb2ws
IDApCisgICAgLy8gSW50byB0aGlzOiBib29sCisgICAgaWYgKGxlZnQtPnJldHVybnNCb29sKCkg
JiYgcmlnaHQtPmlzSW50MzIoMCkpCisgICAgICAgIHJldHVybiBsZWZ0OworCisgICAgLy8gVHVy
biB0aGlzOiBOb3RFcXVhbChib29sLCAxKQorICAgIC8vIEludG8gdGhpczogQml0WG9yKGJvb2ws
IDEpCisgICAgaWYgKGxlZnQtPnJldHVybnNCb29sKCkgJiYgcmlnaHQtPmlzSW50MzIoMSkpCisg
ICAgICAgIHJldHVybiByZWR1Y2VCaXRYb3IodHlwZSwgb3JpZ2luLCBsZWZ0LCByaWdodCk7CisK
KyAgICAvLyBUdXJuIHRoaXM6IE5vdEVxdWFsKGNvbnN0MSwgY29uc3QyKQorICAgIC8vIEludG8g
dGhpczogY29uc3QxICE9IGNvbnN0MgorICAgIGlmIChWYWx1ZSogcmVzdWx0ID0gbV9wcm9jLmFk
ZEJvb2xDb25zdGFudChvcmlnaW4sIGxlZnQtPm5vdEVxdWFsQ29uc3RhbnQocmlnaHQpKSkKKyAg
ICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKHJlc3VsdCk7CisKKyAgICAvLyBGSVhN
RTogYXQgbGVhc3QgZm9yIGludGVnZXJzIHdlIHJlYWxseSBzaG91bGQgaGF2ZSBOb3RFcXVhbCh4
LCB4KSA9PiBmYWxzZSwgZXZlbiBmb3Igbm9uLWNvbnN0YW50cy4KKworICAgIHJldHVybiBjYW5H
aXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oTm90RXF1YWwsIG9yaWdpbiwgbGVmdCwgcmln
aHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUVxdWFsT3JVbm9yZGVy
ZWQoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBi
b29sIGNhbkdpdmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxlZnQpKQor
ICAgICAgICByZXR1cm4gcmVkdWNlRXF1YWxPclVub3JkZXJlZCh0eXBlLCBvcmlnaW4sIHJpZ2h0
LCBsZWZ0KTsKKworICAgIC8vIFR1cm4gdGhpczogRXF1YWxPclVub3JkZXJlZChjb25zdDEsIGNv
bnN0MikKKyAgICAvLyBJbnRvIHRoaXM6IGlzTmFuKGNvbnN0MSkgfHwgaXNOYW4oY29uc3QyKSB8
fCBjb25zdDEgPT0gY29uc3QyCisgICAgaWYgKFZhbHVlKiByZXN1bHQgPSBtX3Byb2MuYWRkQm9v
bENvbnN0YW50KG9yaWdpbiwgbGVmdC0+ZXF1YWxPclVub3JkZXJlZENvbnN0YW50KHJpZ2h0KSkp
CisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhyZXN1bHQpOworCisgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBhbHNvIGhhdmUgRXF1YWxPclVub3JkZXJlZCh4LCB4KSA9PiB0cnVl
LgorICAgIC8vIEFsc28gd2Ugc2hvdWxkIGhhdmUgRXF1YWxPclVub3JkZXJlZChjb25zdE5hbiwg
eCkgPT4gdHJ1ZSBhbmQgRXF1YWxPclVub3JkZXJlZCh4LCBjb25zdE5hbikgPT4gdHJ1ZQorCisg
ICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihFcXVhbE9yVW5vcmRl
cmVkLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVy
OjpyZWR1Y2VMZXNzVGhhbihUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBW
YWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIGlmIChzaG91bGRHb0JlZm9yZShy
aWdodCwgbGVmdCkpCisgICAgICAgIHJldHVybiByZWR1Y2VHcmVhdGVyVGhhbih0eXBlLCBvcmln
aW4sIHJpZ2h0LCBsZWZ0KTsKKworICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3Byb2MuYWRk
Qm9vbENvbnN0YW50KG9yaWdpbiwgcmlnaHQtPmdyZWF0ZXJUaGFuQ29uc3RhbnQobGVmdCkpKQor
ICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgcmV0
dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihMZXNzVGhhbiwgb3JpZ2luLCBs
ZWZ0LCByaWdodCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlR3JlYXRl
clRoYW4oVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0
LCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxlZnQp
KQorICAgICAgICByZXR1cm4gcmVkdWNlTGVzc1RoYW4odHlwZSwgb3JpZ2luLCByaWdodCwgbGVm
dCk7CisKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbV9wcm9jLmFkZEJvb2xDb25zdGFudChv
cmlnaW4sIHJpZ2h0LT5sZXNzVGhhbkNvbnN0YW50KGxlZnQpKSkKKyAgICAgICAgcmV0dXJuIGFw
cGVuZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50KTsKKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBu
dWxscHRyIDogZW1pdDxWYWx1ZT4oR3JlYXRlclRoYW4sIG9yaWdpbiwgbGVmdCwgcmlnaHQpOwor
fQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUxlc3NFcXVhbChUeXBlIHR5cGUs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVw
KQoreworICAgIGlmIChzaG91bGRHb0JlZm9yZShyaWdodCwgbGVmdCkpCisgICAgICAgIHJldHVy
biByZWR1Y2VHcmVhdGVyRXF1YWwodHlwZSwgb3JpZ2luLCByaWdodCwgbGVmdCk7CisKKyAgICBp
ZiAoVmFsdWUqIGNvbnN0YW50ID0gbV9wcm9jLmFkZEJvb2xDb25zdGFudChvcmlnaW4sIHJpZ2h0
LT5ncmVhdGVyRXF1YWxDb25zdGFudChsZWZ0KSkpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1
cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0ciA6
IGVtaXQ8VmFsdWU+KExlc3NFcXVhbCwgb3JpZ2luLCBsZWZ0LCByaWdodCk7Cit9CisKK1ZhbHVl
KiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlR3JlYXRlckVxdWFsKFR5cGUgdHlwZSwgT3JpZ2lu
IG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXApCit7Cisg
ICAgaWYgKHNob3VsZEdvQmVmb3JlKHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAgcmV0dXJuIHJlZHVj
ZUxlc3NFcXVhbCh0eXBlLCBvcmlnaW4sIHJpZ2h0LCBsZWZ0KTsKKworICAgIGlmIChWYWx1ZSog
Y29uc3RhbnQgPSBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG9yaWdpbiwgcmlnaHQtPmxlc3NFcXVh
bENvbnN0YW50KGxlZnQpKSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKGNv
bnN0YW50KTsKKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4o
R3JlYXRlckVxdWFsLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xl
T3B0aW1pemVyOjpyZWR1Y2VBYm92ZShUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBs
ZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIGlmIChzaG91bGRHb0Jl
Zm9yZShyaWdodCwgbGVmdCkpCisgICAgICAgIHJldHVybiByZWR1Y2VCZWxvdyh0eXBlLCBvcmln
aW4sIHJpZ2h0LCBsZWZ0KTsKKworICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3Byb2MuYWRk
Qm9vbENvbnN0YW50KG9yaWdpbiwgcmlnaHQtPmJlbG93Q29uc3RhbnQobGVmdCkpKQorICAgICAg
ICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgcmV0dXJuIGNh
bkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihBYm92ZSwgb3JpZ2luLCBsZWZ0LCByaWdo
dCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlQmVsb3coVHlwZSB0eXBl
LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVV
cCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxlZnQpKQorICAgICAgICByZXR1
cm4gcmVkdWNlQWJvdmUodHlwZSwgb3JpZ2luLCByaWdodCwgbGVmdCk7CisKKyAgICBpZiAoVmFs
dWUqIGNvbnN0YW50ID0gbV9wcm9jLmFkZEJvb2xDb25zdGFudChvcmlnaW4sIHJpZ2h0LT5hYm92
ZUNvbnN0YW50KGxlZnQpKSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKGNv
bnN0YW50KTsKKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4o
QmVsb3csIG9yaWdpbiwgbGVmdCwgcmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6
ZXI6OnJlZHVjZUFib3ZlRXF1YWwoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVm
dCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZv
cmUocmlnaHQsIGxlZnQpKQorICAgICAgICByZXR1cm4gcmVkdWNlQmVsb3dFcXVhbCh0eXBlLCBv
cmlnaW4sIHJpZ2h0LCBsZWZ0KTsKKworICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3Byb2Mu
YWRkQm9vbENvbnN0YW50KG9yaWdpbiwgcmlnaHQtPmJlbG93RXF1YWxDb25zdGFudChsZWZ0KSkp
CisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICBy
ZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KEFib3ZlRXF1YWwsIG9yaWdp
biwgbGVmdCwgcmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUJl
bG93RXF1YWwoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJp
Z2h0LCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxl
ZnQpKQorICAgICAgICByZXR1cm4gcmVkdWNlQWJvdmVFcXVhbCh0eXBlLCBvcmlnaW4sIHJpZ2h0
LCBsZWZ0KTsKKworICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3Byb2MuYWRkQm9vbENvbnN0
YW50KG9yaWdpbiwgcmlnaHQtPmFib3ZlRXF1YWxDb25zdGFudChsZWZ0KSkpCisgICAgICAgIHJl
dHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICByZXR1cm4gY2FuR2l2
ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KEJlbG93RXF1YWwsIG9yaWdpbiwgbGVmdCwgcmln
aHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnRyeVJlZHVjZShWYWx1ZSogdmFs
dWUpCit7CisgICAgc3dpdGNoKHZhbHVlLT5vcGNvZGUoKSkgeworICAgIGNhc2UgT3BhcXVlOgor
ICAgICAgICByZXR1cm4gcmVkdWNlT3BhcXVlKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4o
KSwgdmFsdWUtPmNoaWxkKDApLCB0cnVlKTsKKyAgICBjYXNlIEFkZDoKKyAgICAgICAgcmV0dXJu
IHJlZHVjZUFkZCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgw
KSwgdmFsdWUtPmNoaWxkKDEpLCB0cnVlKTsKKyAgICBjYXNlIFN1YjoKKyAgICAgICAgcmV0dXJu
IHJlZHVjZVN1Yih2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgw
KSwgdmFsdWUtPmNoaWxkKDEpLCB0cnVlKTsKKyAgICBjYXNlIE5lZzoKKyAgICAgICAgcmV0dXJu
IHJlZHVjZU5lZyh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgw
KSwgdHJ1ZSk7CisgICAgY2FzZSBNdWw6CisgICAgICAgIHJldHVybiByZWR1Y2VNdWwodmFsdWUt
PnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgx
KSwgdHJ1ZSk7CisgICAgY2FzZSBEaXY6CisgICAgICAgIHJldHVybiByZWR1Y2VEaXYodmFsdWUt
PnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgx
KSwgdmFsdWUtPmlzQ2hpbGwoKSwgdHJ1ZSk7CisgICAgY2FzZSBVRGl2OgorICAgICAgICByZXR1
cm4gcmVkdWNlVURpdih2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGls
ZCgwKSwgdmFsdWUtPmNoaWxkKDEpLCB0cnVlKTsKKyAgICBjYXNlIE1vZDoKKyAgICAgICAgcmV0
dXJuIHJlZHVjZU1vZCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGls
ZCgwKSwgdmFsdWUtPmNoaWxkKDEpLCB2YWx1ZS0+aXNDaGlsbCgpLCB0cnVlKTsKKyAgICBjYXNl
IFVNb2Q6CisgICAgICAgIHJldHVybiByZWR1Y2VVTW9kKHZhbHVlLT50eXBlKCksIHZhbHVlLT5v
cmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIHRydWUpOworICAgIGNh
c2UgQml0QW5kOgorICAgICAgICByZXR1cm4gcmVkdWNlQml0QW5kKHZhbHVlLT50eXBlKCksIHZh
bHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIHRydWUpOwor
ICAgIGNhc2UgQml0T3I6CisgICAgICAgIHJldHVybiByZWR1Y2VCaXRPcih2YWx1ZS0+dHlwZSgp
LCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxkKDEpLCB0cnVl
KTsKKyAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAgcmV0dXJuIHJlZHVjZUJpdFhvcih2YWx1ZS0+
dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxkKDEp
LCB0cnVlKTsKKyAgICBjYXNlIFNobDoKKyAgICAgICAgcmV0dXJuIHJlZHVjZVNobCh2YWx1ZS0+
dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxkKDEp
LCB0cnVlKTsKKyAgICBjYXNlIFNTaHI6CisgICAgICAgIHJldHVybiByZWR1Y2VTU2hyKHZhbHVl
LT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQo
MSksIHRydWUpOworICAgIGNhc2UgWlNocjoKKyAgICAgICAgcmV0dXJuIHJlZHVjZVpTaHIodmFs
dWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGls
ZCgxKSwgdHJ1ZSk7CisgICAgY2FzZSBSb3RSOgorICAgICAgICByZXR1cm4gcmVkdWNlUm90Uih2
YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdmFsdWUtPmNo
aWxkKDEpLCB0cnVlKTsKKyAgICBjYXNlIFJvdEw6CisgICAgICAgIHJldHVybiByZWR1Y2VSb3RM
KHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+
Y2hpbGQoMSksIHRydWUpOworICAgIGNhc2UgQWJzOgorICAgICAgICByZXR1cm4gcmVkdWNlQWJz
KHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB0cnVlKTsK
KyAgICBjYXNlIENlaWw6CisgICAgICAgIHJldHVybiByZWR1Y2VDZWlsKHZhbHVlLT50eXBlKCks
IHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB0cnVlKTsKKyAgICBjYXNlIEZsb29y
OgorICAgICAgICByZXR1cm4gcmVkdWNlRmxvb3IodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdp
bigpLCB2YWx1ZS0+Y2hpbGQoMCksIHRydWUpOworICAgIGNhc2UgU3FydDoKKyAgICAgICAgcmV0
dXJuIHJlZHVjZVNxcnQodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hp
bGQoMCksIHRydWUpOworICAgIGNhc2UgQml0d2lzZUNhc3Q6CisgICAgICAgIHJldHVybiByZWR1
Y2VCaXR3aXNlQ2FzdCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGls
ZCgwKSwgdHJ1ZSk7CisgICAgY2FzZSBTRXh0ODoKKyAgICAgICAgcmV0dXJuIHJlZHVjZVNFeHQ4
KHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB0cnVlKTsK
KyAgICBjYXNlIFNFeHQxNjoKKyAgICAgICAgcmV0dXJuIHJlZHVjZVNFeHQxNih2YWx1ZS0+dHlw
ZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdHJ1ZSk7CisgICAgY2FzZSBT
RXh0MzI6CisgICAgICAgIHJldHVybiByZWR1Y2VTRXh0MzIodmFsdWUtPnR5cGUoKSwgdmFsdWUt
Pm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHRydWUpOworICAgIGNhc2UgWkV4dDMyOgorICAg
ICAgICByZXR1cm4gcmVkdWNlWkV4dDMyKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwg
dmFsdWUtPmNoaWxkKDApLCB0cnVlKTsKKyAgICBjYXNlIFRydW5jOgorICAgICAgICByZXR1cm4g
cmVkdWNlVHJ1bmModmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQo
MCksIHRydWUpOworICAgIGNhc2UgSVRvRjoKKyAgICAgICAgcmV0dXJuIHJlZHVjZUlUb0YodmFs
dWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHRydWUpOworICAg
IGNhc2UgSVRvRDoKKyAgICAgICAgcmV0dXJuIHJlZHVjZUlUb0QodmFsdWUtPnR5cGUoKSwgdmFs
dWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHRydWUpOworICAgIGNhc2UgRmxvYXRUb0Rv
dWJsZToKKyAgICAgICAgcmV0dXJuIHJlZHVjZUZsb2F0VG9Eb3VibGUodmFsdWUtPnR5cGUoKSwg
dmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHRydWUpOworICAgIGNhc2UgRG91Ymxl
VG9GbG9hdDoKKyAgICAgICAgcmV0dXJuIHJlZHVjZURvdWJsZVRvRmxvYXQodmFsdWUtPnR5cGUo
KSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHRydWUpOworICAgIGNhc2UgU2Vs
ZWN0OgorICAgICAgICByZXR1cm4gcmVkdWNlU2VsZWN0KHZhbHVlLT50eXBlKCksIHZhbHVlLT5v
cmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIHZhbHVlLT5jaGlsZCgy
KSwgdHJ1ZSk7CisgICAgY2FzZSBMb2FkOFo6CisgICAgY2FzZSBMb2FkOFM6CisgICAgY2FzZSBM
b2FkMTZaOgorICAgIGNhc2UgTG9hZDE2UzoKKyAgICBjYXNlIExvYWQ6IHsKKyAgICAgICAgTWVt
b3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgcmV0
dXJuIHJlZHVjZUxvYWRTdG9yZShtZW1vcnktPm9wY29kZSgpLCBtZW1vcnktPnR5cGUoKSwgbWVt
b3J5LT5vcmlnaW4oKSwgbWVtb3J5LT5jaGlsZCgwKSwgbWVtb3J5LT5vZmZzZXQoKSwgbnVsbHB0
ciwgbWVtb3J5LT5yYW5nZSgpLCBtZW1vcnktPmZlbmNlUmFuZ2UoKSwgdHJ1ZSk7CisgICAgfQor
ICAgIGNhc2UgU3RvcmU4OgorICAgIGNhc2UgU3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlOiB7Cisg
ICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7Cisg
ICAgICAgIHJldHVybiByZWR1Y2VMb2FkU3RvcmUobWVtb3J5LT5vcGNvZGUoKSwgbWVtb3J5LT50
eXBlKCksIG1lbW9yeS0+b3JpZ2luKCksIG1lbW9yeS0+Y2hpbGQoMSksIG1lbW9yeS0+b2Zmc2V0
KCksIG1lbW9yeS0+Y2hpbGQoMCksIG1lbW9yeS0+cmFuZ2UoKSwgbWVtb3J5LT5mZW5jZVJhbmdl
KCksIHRydWUpOworICAgIH0KKyAgICBjYXNlIEVxdWFsOgorICAgICAgICByZXR1cm4gcmVkdWNl
RXF1YWwodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZh
bHVlLT5jaGlsZCgxKSwgdHJ1ZSk7CisgICAgY2FzZSBOb3RFcXVhbDoKKyAgICAgICAgcmV0dXJu
IHJlZHVjZU5vdEVxdWFsKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNo
aWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIHRydWUpOworICAgIGNhc2UgRXF1YWxPclVub3JkZXJl
ZDoKKyAgICAgICAgcmV0dXJuIHJlZHVjZUVxdWFsT3JVbm9yZGVyZWQodmFsdWUtPnR5cGUoKSwg
dmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgxKSwgdHJ1ZSk7
CisgICAgY2FzZSBMZXNzVGhhbjoKKyAgICAgICAgcmV0dXJuIHJlZHVjZUxlc3NUaGFuKHZhbHVl
LT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQo
MSksIHRydWUpOworICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgICAgIHJldHVybiByZWR1Y2VH
cmVhdGVyVGhhbih2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgw
KSwgdmFsdWUtPmNoaWxkKDEpLCB0cnVlKTsKKyAgICBjYXNlIExlc3NFcXVhbDoKKyAgICAgICAg
cmV0dXJuIHJlZHVjZUxlc3NFcXVhbCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZh
bHVlLT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxkKDEpLCB0cnVlKTsKKyAgICBjYXNlIEdyZWF0ZXJF
cXVhbDoKKyAgICAgICAgcmV0dXJuIHJlZHVjZUdyZWF0ZXJFcXVhbCh2YWx1ZS0+dHlwZSgpLCB2
YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxkKDEpLCB0cnVlKTsK
KyAgICBjYXNlIEFib3ZlOgorICAgICAgICByZXR1cm4gcmVkdWNlQWJvdmUodmFsdWUtPnR5cGUo
KSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgxKSwgdHJ1
ZSk7CisgICAgY2FzZSBCZWxvdzoKKyAgICAgICAgcmV0dXJuIHJlZHVjZUJlbG93KHZhbHVlLT50
eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSks
IHRydWUpOworICAgIGNhc2UgQWJvdmVFcXVhbDoKKyAgICAgICAgcmV0dXJuIHJlZHVjZUFib3Zl
RXF1YWwodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZh
bHVlLT5jaGlsZCgxKSwgdHJ1ZSk7CisgICAgY2FzZSBCZWxvd0VxdWFsOgorICAgICAgICByZXR1
cm4gcmVkdWNlQmVsb3dFcXVhbCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVl
LT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxkKDEpLCB0cnVlKTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworYm9vbCBQZWVwaG9sZU9wdGltaXplcjo6dHJ5
U2ltcGxpZnlCcmFuY2goVmFsdWUqIHZhbHVlKQoreworICAgIEFTU0VSVCh2YWx1ZS0+b3Bjb2Rl
KCkgPT0gQnJhbmNoKTsKKyAgICBBU1NFUlQoISFtX2luc2VydGlvblNldCk7CisgICAgQmFzaWNC
bG9jayogYmxvY2sgPSB2YWx1ZS0+b3duZXI7CisgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisK
KyAgICAvLyBTaW1wbGUgZml4cG9pbnQgYXMgc29tZSBvZiB0aGVzZSBvcHRpbWl6YXRpb25zIGtl
ZXAgYSBicmFuY2ggYW5kIHNvIGNhbiBiZSBjaGFpbmVkCisgICAgZm9yICg7OykgeworICAgICAg
ICAvLyBUdXJuIHRoaXM6IEJyYW5jaChOb3RFcXVhbCh4LCAwKSkKKyAgICAgICAgLy8gSW50byB0
aGlzOiBCcmFuY2goeCkKKyAgICAgICAgaWYgKHZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0g
Tm90RXF1YWwgJiYgdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQoMCkpIHsKKyAgICAg
ICAgICAgIHZhbHVlLT5jaGlsZCgwKSA9IHZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7CisgICAg
ICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisKKyAgICAgICAgLy8gVHVybiB0aGlzOiBCcmFuY2goRXF1YWwoeCwgMCksIHRoZW4sIGVsc2Up
CisgICAgICAgIC8vIEludG8gdGhpczogQnJhbmNoKHgsIGVsc2UsIHRoZW4pCisgICAgICAgIGlm
ICh2YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEVxdWFsICYmIHZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMSktPmlzSW50KDApKSB7CisgICAgICAgICAgICB2YWx1ZS0+Y2hpbGQoMCkgPSB2YWx1
ZS0+Y2hpbGQoMCktPmNoaWxkKDApOworICAgICAgICAgICAgc3RkOjpzd2FwKGJsb2NrLT50YWtl
bigpLCBibG9jay0+bm90VGFrZW4oKSk7CisgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gVHVybiB0aGlzOiBC
cmFuY2goQml0WG9yKGJvb2wsIDEpLCB0aGVuLCBlbHNlKQorICAgICAgICAvLyBJbnRvIHRoaXM6
IEJyYW5jaChib29sLCBlbHNlLCB0aGVuKQorICAgICAgICBpZiAodmFsdWUtPmNoaWxkKDApLT5v
cGNvZGUoKSA9PSBCaXRYb3IKKyAgICAgICAgICAgICYmIHZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQo
MSktPmlzSW50MzIoMSkKKyAgICAgICAgICAgICYmIHZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkt
PnJldHVybnNCb29sKCkpIHsKKyAgICAgICAgICAgIHZhbHVlLT5jaGlsZCgwKSA9IHZhbHVlLT5j
aGlsZCgwKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICBzdGQ6OnN3YXAoYmxvY2stPnRha2VuKCks
IGJsb2NrLT5ub3RUYWtlbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBUdXJuIHRoaXM6IEJyYW5j
aChCaXRBbmQoYm9vbCwgeHliMSksIHRoZW4sIGVsc2UpCisgICAgICAgIC8vIEludG8gdGhpczog
QnJhbmNoKGJvb2wsIHRoZW4sIGVsc2UpCisgICAgICAgIGlmICh2YWx1ZS0+Y2hpbGQoMCktPm9w
Y29kZSgpID09IEJpdEFuZAorICAgICAgICAgICAgJiYgdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgx
KS0+aGFzSW50KCkKKyAgICAgICAgICAgICYmIHZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmFz
SW50KCkgJiAxCisgICAgICAgICAgICAmJiB2YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLT5yZXR1
cm5zQm9vbCgpKSB7CisgICAgICAgICAgICB2YWx1ZS0+Y2hpbGQoMCkgPSB2YWx1ZS0+Y2hpbGQo
MCktPmNoaWxkKDApOworICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIFRyaVN0YXRlIHRyaVN0YXRlID0gdmFsdWUt
PmNoaWxkKDApLT5hc1RyaVN0YXRlKCk7CisKKyAgICAgICAgLy8gVHVybiB0aGlzOiBCcmFuY2go
MCwgdGhlbiwgZWxzZSkKKyAgICAgICAgLy8gSW50byB0aGlzOiBKdW1wKGVsc2UpCisgICAgICAg
IGlmICh0cmlTdGF0ZSA9PSBGYWxzZVRyaVN0YXRlKSB7CisgICAgICAgICAgICBibG9jay0+dGFr
ZW4oKS5ibG9jaygpLT5yZW1vdmVQcmVkZWNlc3NvcihibG9jayk7CisgICAgICAgICAgICB2YWx1
ZS0+cmVwbGFjZVdpdGhKdW1wKGJsb2NrLCBibG9jay0+bm90VGFrZW4oKSk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFR1cm4gdGhpczogQnJhbmNo
KG5vdCAwLCB0aGVuLCBlbHNlKQorICAgICAgICAvLyBJbnRvIHRoaXM6IEp1bXAodGhlbikKKyAg
ICAgICAgaWYgKHRyaVN0YXRlID09IFRydWVUcmlTdGF0ZSkgeworICAgICAgICAgICAgYmxvY2st
Pm5vdFRha2VuKCkuYmxvY2soKS0+cmVtb3ZlUHJlZGVjZXNzb3IoYmxvY2spOworICAgICAgICAg
ICAgdmFsdWUtPnJlcGxhY2VXaXRoSnVtcChibG9jaywgYmxvY2stPnRha2VuKCkpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgcmV0dXJuIGNoYW5nZWQ7Cit9CisKK2Jvb2wgUGVlcGhvbGVPcHRpbWl6ZXI6OnRyeVNpbXBs
aWZ5Q0NhbGwoQ0NhbGxWYWx1ZSogdmFsdWUpCit7CisgICAgQVNTRVJUKHZhbHVlLT5vcGNvZGUo
KSA9PSBDQ2FsbCk7CisgICAgQVNTRVJUKCEhbV9pbnNlcnRpb25TZXQpOworICAgIC8vIFR1cm4g
dGhpczogQ2FsbChmbW9kLCBjb25zdGFudDEsIGNvbnN0YW50MikKKyAgICAvLyBJbnRvIHRoaXM6
IGZjYWxsLWNvbnN0YW50KGNvbnN0YW50MSwgY29uc3RhbnQyKQorICAgIGF1dG8qIGZtb2REb3Vi
bGUgPSB0YWdDRnVuY3Rpb25QdHI8ZG91YmxlICgqKShkb3VibGUsIGRvdWJsZSk+KGZtb2QsIEIz
Q0NhbGxQdHJUYWcpOworICAgIGlmICh2YWx1ZS0+dHlwZSgpID09IERvdWJsZQorICAgICAgICAm
JiB2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAzCisgICAgICAgICYmIHZhbHVlLT5jaGlsZCgwKS0+
aXNJbnRQdHIocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZm1vZERvdWJsZSkpCisgICAgICAg
ICYmIHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpID09IERvdWJsZQorICAgICAgICAmJiB2YWx1ZS0+
Y2hpbGQoMiktPnR5cGUoKSA9PSBEb3VibGUpIHsKKyAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFu
dCA9IHZhbHVlLT5jaGlsZCgxKS0+bW9kQ29uc3RhbnQobV9wcm9jLCB2YWx1ZS0+Y2hpbGQoMikp
KSB7CisgICAgICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShhcHBlbmRUb0N1cnJl
bnRCbG9jayhjb25zdGFudCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFBlZXBob2xlT3B0aW1pemVyOjp0
cnlTaW1wbGlmeUNoZWNrQWRkKENoZWNrVmFsdWUqIHZhbHVlKQoreworICAgIEFTU0VSVCh2YWx1
ZS0+b3Bjb2RlKCkgPT0gQ2hlY2tBZGQpOworICAgIEFTU0VSVCghIW1faW5zZXJ0aW9uU2V0KTsK
KyAgICBWYWx1ZSogbGVmdCA9IHZhbHVlLT5jaGlsZCgwKTsKKyAgICBWYWx1ZSogcmlnaHQgPSB2
YWx1ZS0+Y2hpbGQoMSk7CisKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbGVmdC0+Y2hlY2tB
ZGRDb25zdGFudChtX3Byb2MsIHJpZ2h0KSkgeworICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhJ
ZGVudGl0eShhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxlZnQpKSB7Cisg
ICAgICAgIHN0ZDo6c3dhcCh2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgxKSk7CisgICAg
ICAgIHRyeVNpbXBsaWZ5Q2hlY2tBZGQodmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBpZiAocmlnaHQtPmlzSW50KDApKSB7CisgICAgICAgIHZhbHVlLT5yZXBsYWNl
V2l0aElkZW50aXR5KGxlZnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBp
ZiAoIXJhbmdlRm9yKGxlZnQpLmNvdWxkT3ZlcmZsb3dBZGQocmFuZ2VGb3IocmlnaHQpLCB2YWx1
ZS0+dHlwZSgpKSkgeworICAgICAgICBWYWx1ZSogYWRkID0gcmVkdWNlQWRkKHZhbHVlLT50eXBl
KCksIHZhbHVlLT5vcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgICAgICB2YWx1ZS0+cmVwbGFj
ZVdpdGhJZGVudGl0eShhZGQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUGVlcGhvbGVPcHRpbWl6ZXI6OnRyeVNpbXBsaWZ5Q2hl
Y2tTdWIoQ2hlY2tWYWx1ZSogdmFsdWUpCit7CisgICAgQVNTRVJUKHZhbHVlLT5vcGNvZGUoKSA9
PSBDaGVja1N1Yik7CisgICAgQVNTRVJUKCEhbV9pbnNlcnRpb25TZXQpOworICAgIFZhbHVlKiBs
ZWZ0ID0gdmFsdWUtPmNoaWxkKDApOworICAgIFZhbHVlKiByaWdodCA9IHZhbHVlLT5jaGlsZCgx
KTsKKworICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBsZWZ0LT5jaGVja1N1YkNvbnN0YW50KG1f
cHJvYywgcmlnaHQpKSB7CisgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KGFwcGVu
ZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGlmIChyaWdodC0+aXNJbnQoMCkpIHsKKyAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRo
SWRlbnRpdHkobGVmdCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChW
YWx1ZSogbmVnYXRlZENvbnN0YW50ID0gcmlnaHQtPmNoZWNrTmVnQ29uc3RhbnQobV9wcm9jKSkg
eworICAgICAgICBuZWdhdGVkQ29uc3RhbnQgPSBhcHBlbmRUb0N1cnJlbnRCbG9jayhuZWdhdGVk
Q29uc3RhbnQpOworICAgICAgICB2YWx1ZS0+Y29udmVydFRvQWRkKCk7CisgICAgICAgIHZhbHVl
LT5jaGlsZCgxKSA9IG5lZ2F0ZWRDb25zdGFudDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgaWYgKCFyYW5nZUZvcihsZWZ0KS5jb3VsZE92ZXJmbG93U3ViKHJhbmdlRm9yKHJp
Z2h0KSwgdmFsdWUtPnR5cGUoKSkpIHsKKyAgICAgICAgVmFsdWUqIHN1YiA9IHJlZHVjZVN1Yih2
YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgdmFs
dWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkoc3ViKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFBlZXBob2xlT3B0aW1pemVyOjp0cnlT
aW1wbGlmeUNoZWNrTXVsKENoZWNrVmFsdWUqIHZhbHVlKQoreworICAgIEFTU0VSVCh2YWx1ZS0+
b3Bjb2RlKCkgPT0gQ2hlY2tNdWwpOworICAgIEFTU0VSVCghIW1faW5zZXJ0aW9uU2V0KTsKKyAg
ICBWYWx1ZSogbGVmdCA9IHZhbHVlLT5jaGlsZCgwKTsKKyAgICBWYWx1ZSogcmlnaHQgPSB2YWx1
ZS0+Y2hpbGQoMSk7CisKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbGVmdC0+Y2hlY2tNdWxD
b25zdGFudChtX3Byb2MsIHJpZ2h0KSkgeworICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhJZGVu
dGl0eShhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCkpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxlZnQpKSB7CisgICAg
ICAgIHN0ZDo6c3dhcCh2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgxKSk7CisgICAgICAg
IHRyeVNpbXBsaWZ5Q2hlY2tNdWwodmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBpZiAocmlnaHQtPmhhc0ludCgpKSB7CisgICAgICAgIGlmIChyaWdodC0+YXNJbnQo
KSA9PSAwKSB7CisgICAgICAgICAgICBWYWx1ZSogY29uc3QwID0gYXBwZW5kVG9DdXJyZW50Qmxv
Y2sobV9wcm9jLmFkZEludENvbnN0YW50KHZhbHVlLCAwKSk7CisgICAgICAgICAgICB2YWx1ZS0+
cmVwbGFjZVdpdGhJZGVudGl0eShjb25zdDApOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0gZWxzZSBpZiAocmlnaHQtPmFzSW50KCkgPT0gMSkgeworICAgICAgICAgICAgdmFs
dWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkobGVmdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfSBlbHNlIGlmIChyaWdodC0+YXNJbnQoKSA9PSAyKSB7CisgICAgICAgICAgICB2
YWx1ZS0+Y29udmVydFRvQWRkKCk7CisgICAgICAgICAgICB2YWx1ZS0+Y2hpbGQoMSkgPSB2YWx1
ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICB0cnlTaW1wbGlmeUNoZWNrQWRkKHZhbHVlKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKworICAgIH0KKyAgICBpZiAocmln
aHQtPmlzSW50KDApKSB7CisgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KGxlZnQp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIXJhbmdlRm9yKGxlZnQp
LmNvdWxkT3ZlcmZsb3dNdWwocmFuZ2VGb3IocmlnaHQpLCB2YWx1ZS0+dHlwZSgpKSkgeworICAg
ICAgICBWYWx1ZSogbXVsID0gcmVkdWNlTXVsKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4o
KSwgbGVmdCwgcmlnaHQpOworICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShtdWwp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgUGVlcGhvbGVPcHRpbWl6ZXI6OnRyeVNpbXBsaWZ5Q2hlY2soQ2hlY2tWYWx1ZSogdmFs
dWUpCit7CisgICAgQVNTRVJUKHZhbHVlLT5vcGNvZGUoKSA9PSBDaGVjayk7CisgICAgQVNTRVJU
KCEhbV9pbnNlcnRpb25TZXQpOworCisgICAgaWYgKHZhbHVlLT5jaGlsZCgwKS0+aXNMaWtlWmVy
bygpKSB7CisgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0aE5vcCgpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBpZiAodmFsdWUtPmNoaWxkKDApLT5pc0xpa2VOb25aZXJvKCkp
IHsKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gZW1pdDxQYXRjaHBvaW50
VmFsdWU+KFZvaWQsIHZhbHVlLT5vcmlnaW4oKSktPmFzPFBhdGNocG9pbnRWYWx1ZT4oKTsKKwor
ICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0cygpOworICAgICAgICBwYXRjaHBv
aW50LT5lZmZlY3RzLnJlYWRzID0gSGVhcFJhbmdlOjp0b3AoKTsKKyAgICAgICAgcGF0Y2hwb2lu
dC0+ZWZmZWN0cy5leGl0c1NpZGV3YXlzID0gdHJ1ZTsKKworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAxOyBpIDwgdmFsdWUtPm51bUNoaWxkcmVuKCk7ICsraSkKKyAgICAgICAgICAgIHBhdGNo
cG9pbnQtPmFwcGVuZCh2YWx1ZS0+Y29uc3RyYWluZWRDaGlsZChpKSk7CisKKyAgICAgICAgcGF0
Y2hwb2ludC0+c2V0R2VuZXJhdG9yKHZhbHVlLT5nZW5lcmF0b3IoKSk7CisKKyAgICAgICAgLy8g
UmVwbGFjZSB0aGUgcmVzdCBvZiB0aGUgYmxvY2sgd2l0aCBhbiBPb3BzLgorICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2luZGV4ICsgMTsgaSA8IHZhbHVlLT5vd25lci0+c2l6ZSgpIC0gMTsg
KytpKQorICAgICAgICAgICAgdmFsdWUtPm93bmVyLT5hdChpKS0+cmVwbGFjZVdpdGhCb3R0b20o
Km1faW5zZXJ0aW9uU2V0LCBtX2luZGV4KTsKKyAgICAgICAgdmFsdWUtPm93bmVyLT5sYXN0KCkt
PnJlcGxhY2VXaXRoT29wcyh2YWx1ZS0+b3duZXIpOworICAgICAgICB2YWx1ZS0+b3duZXItPmxh
c3QoKS0+c2V0T3JpZ2luKHZhbHVlLT5vcmlnaW4oKSk7CisKKyAgICAgICAgLy8gUmVwbGFjZSBv
dXJzZWx2ZXMgbGFzdC4KKyAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoTm9wKCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICh2YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgp
ID09IE5vdEVxdWFsCisgICAgICAgICYmIHZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50
KDApKSB7CisgICAgICAgIHZhbHVlLT5jaGlsZCgwKSA9IHZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQo
MCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30K
KworLy8gUmV0dXJucyB0cnVlIGlmIHggPCB5IGZvciBzb21lIG9yZGVyIHN1Y2ggdGhhdDoKKy8v
IEF0b21pY1N0cm9uZ0NBUyBhcmUgYWx3YXlzIGF0IHRoZSBiZWdpbm5pbmcgKHVzZWQgYnkgc29t
ZSBwYXR0ZXJucyBpbiBCM0xvd2VyVG9BaXIpCisvLyBDb25zdGFudHMgYXJlIGFsd2F5cyBhdCB0
aGUgZW5kICh1c2VkIGJ5IHNvbWUgb3RoZXIgcGF0dGVybnMgZm9yIHN0cmVuZ3RoIHJlZHVjdGlv
bikKKy8vIEV2ZXJ5dGhpbmcgZWxzZSBpcyBzb3J0ZWQgYnkgaW5kZXggKGFzIGEgY2Fub25pY2Fs
aXphdGlvbiB0aGF0IGhlbHBzIHBhc3NlcyBsaWtlIENTRSkKK2Jvb2wgUGVlcGhvbGVPcHRpbWl6
ZXI6OnNob3VsZEdvQmVmb3JlKFZhbHVlKiB4LCBWYWx1ZSogeSkKK3sKKyAgICBpZiAoKHgtPmlz
Q29uc3RhbnQoKSAmJiAheS0+aXNDb25zdGFudCgpKQorICAgICAgICB8fCAoeS0+b3Bjb2RlKCkg
PT0gQXRvbWljU3Ryb25nQ0FTICYmICEoeC0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTKSkp
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gKCh5LT5pc0NvbnN0
YW50KCkgJiYgIXgtPmlzQ29uc3RhbnQoKSkKKyAgICAgICAgfHwgKHgtPm9wY29kZSgpID09IEF0
b21pY1N0cm9uZ0NBUyAmJiAhKHktPm9wY29kZSgpID09IEF0b21pY1N0cm9uZ0NBUykpCisgICAg
ICAgIHx8ICh4LT5pbmRleCgpIDwgeS0+aW5kZXgoKSkpOworfQorCisvLyBGb3IgT3A9PUFkZCBv
ciBTdWIsIHR1cm4gYW55IG9mIHRoZXNlOgorLy8gICAgICBPcChNdWwoeDEsIHgyKSwgTXVsKHgx
LCB4MykpCisvLyAgICAgIE9wKE11bCh4MiwgeDEpLCBNdWwoeDEsIHgzKSkKKy8vICAgICAgT3Ao
TXVsKHgxLCB4MiksIE11bCh4MywgeDEpKQorLy8gICAgICBPcChNdWwoeDIsIHgxKSwgTXVsKHgz
LCB4MSkpCisvLyBJbnRvIHRoaXM6IE11bCh4MSwgT3AoeDIsIHgzKSkKK1ZhbHVlKiBQZWVwaG9s
ZU9wdGltaXplcjo6dHJ5UmVkdWNlTXVsRGlzdHJpYnV0aXZpdHkoT3Bjb2RlIG9wLCBUeXBlIHR5
cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCit7CisgICAgQVNT
RVJUKG9wID09IEFkZCB8fCBvcCA9PSBTdWIpOworICAgIFZhbHVlKiB4MSA9IG51bGxwdHI7Cisg
ICAgVmFsdWUqIHgyID0gbnVsbHB0cjsKKyAgICBWYWx1ZSogeDMgPSBudWxscHRyOworICAgIGlm
IChsZWZ0LT5vcGNvZGUoKSA9PSBNdWwgJiYgcmlnaHQtPm9wY29kZSgpID09IE11bCkgeworICAg
ICAgICBpZiAobGVmdC0+Y2hpbGQoMCkgPT0gcmlnaHQtPmNoaWxkKDApKSB7CisgICAgICAgICAg
ICAvLyBPcChNdWwoeDEsIHgyKSwgTXVsKHgxLCB4MykpCisgICAgICAgICAgICB4MSA9IGxlZnQt
PmNoaWxkKDApOworICAgICAgICAgICAgeDIgPSBsZWZ0LT5jaGlsZCgxKTsKKyAgICAgICAgICAg
IHgzID0gcmlnaHQtPmNoaWxkKDEpOworICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmNoaWxkKDEp
ID09IHJpZ2h0LT5jaGlsZCgwKSkgeworICAgICAgICAgICAgLy8gT3AoTXVsKHgyLCB4MSksIE11
bCh4MSwgeDMpKQorICAgICAgICAgICAgeDEgPSBsZWZ0LT5jaGlsZCgxKTsKKyAgICAgICAgICAg
IHgyID0gbGVmdC0+Y2hpbGQoMCk7CisgICAgICAgICAgICB4MyA9IHJpZ2h0LT5jaGlsZCgxKTsK
KyAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5jaGlsZCgwKSA9PSByaWdodC0+Y2hpbGQoMSkpIHsK
KyAgICAgICAgICAgIC8vIE9wKE11bCh4MSwgeDIpLCBNdWwoeDMsIHgxKSkKKyAgICAgICAgICAg
IHgxID0gbGVmdC0+Y2hpbGQoMCk7CisgICAgICAgICAgICB4MiA9IGxlZnQtPmNoaWxkKDEpOwor
ICAgICAgICAgICAgeDMgPSByaWdodC0+Y2hpbGQoMCk7CisgICAgICAgIH0gZWxzZSBpZiAobGVm
dC0+Y2hpbGQoMSkgPT0gcmlnaHQtPmNoaWxkKDEpKSB7CisgICAgICAgICAgICAvLyBPcChNdWwo
eDIsIHgxKSwgTXVsKHgzLCB4MSkpCisgICAgICAgICAgICB4MSA9IGxlZnQtPmNoaWxkKDEpOwor
ICAgICAgICAgICAgeDIgPSBsZWZ0LT5jaGlsZCgwKTsKKyAgICAgICAgICAgIHgzID0gcmlnaHQt
PmNoaWxkKDApOworICAgICAgICB9CisgICAgfQorICAgIGlmICh4MSAhPSBudWxscHRyKSB7Cisg
ICAgICAgIEFTU0VSVCh4MiAhPSBudWxscHRyICYmIHgzICE9IG51bGxwdHIpOworICAgICAgICBW
YWx1ZSogbmV3T3AgPSBvcCA9PSBBZGQgPyByZWR1Y2VBZGQodHlwZSwgb3JpZ2luLCB4MiwgeDMp
IDogcmVkdWNlU3ViKHR5cGUsIG9yaWdpbiwgeDIsIHgzKTsKKyAgICAgICAgcmV0dXJuIHJlZHVj
ZU11bCh0eXBlLCBvcmlnaW4sIHgxLCBuZXdPcCk7CisgICAgfQorICAgIHJldHVybiBudWxscHRy
OworfQorCisvLyBGb3IgT3A9PUJpdE9yIG9yIEJpdFhvciwgdHVybiBhbnkgb2YgdGhlc2U6Cisv
LyAgICAgIE9wKEJpdEFuZCh4MSwgeDIpLCBCaXRBbmQoeDEsIHgzKSkKKy8vICAgICAgT3AoQml0
QW5kKHgyLCB4MSksIEJpdEFuZCh4MSwgeDMpKQorLy8gICAgICBPcChCaXRBbmQoeDEsIHgyKSwg
Qml0QW5kKHgzLCB4MSkpCisvLyAgICAgIE9wKEJpdEFuZCh4MiwgeDEpLCBCaXRBbmQoeDMsIHgx
KSkKKy8vIEludG8gdGhpczogQml0QW5kKE9wKHgyLCB4MyksIHgxKQorLy8gQW5kIGFueSBvZiB0
aGVzZToKKy8vICAgICAgT3AoQml0QW5kKHgxLCB4MiksIHgxKQorLy8gICAgICBPcChCaXRBbmQo
eDIsIHgxKSwgeDEpCisvLyAgICAgIE9wKHgxLCBCaXRBbmQoeDEsIHgyKSkKKy8vICAgICAgT3Ao
eDEsIEJpdEFuZCh4MiwgeDEpKQorLy8gSW50byB0aGlzOiBCaXRBbmQoT3AoeDIsIHgxKSwgeDEp
CisvLyBUaGlzIHNlY29uZCBzZXQgaXMgZXF1aXZhbGVudCB0byBkb2luZyB4MSA9PiBCaXRBbmQo
eDEsIHgxKSwgYW5kIHRoZW4gYXBwbHlpbmcgdGhlIGZpcnN0IHNldC4KKy8vIEl0IGRvZXMgbm90
IHJlZHVjZSB0aGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMgZXhlY3V0ZWQsIGJ1dCBwcm92aWRlcyBz
b21lIHVzZWZ1bCBub3JtYWxpemF0aW9uOiB3ZSBwcmVmZXIgdG8gaGF2ZSBCaXRBbmQgYXQgdGhl
IG91dGVybW9zdCwgdGhlbiBCaXRYb3IsIGFuZCBmaW5hbGx5IEJpdE9yIGF0IHRoZSBpbm5lcm1v
c3QKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6dHJ5UmVkdWNlQml0QW5kRGlzdHJpYnV0aXZp
dHkoT3Bjb2RlIG9wLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1
ZSogcmlnaHQpCit7CisgICAgQVNTRVJUKG9wID09IEJpdE9yIHx8IG9wID09IEJpdFhvcik7Cisg
ICAgVmFsdWUqIHgxID0gbnVsbHB0cjsKKyAgICBWYWx1ZSogeDIgPSBudWxscHRyOworICAgIFZh
bHVlKiB4MyA9IG51bGxwdHI7CisgICAgaWYgKGxlZnQtPm9wY29kZSgpID09IEJpdEFuZCAmJiBy
aWdodC0+b3Bjb2RlKCkgPT0gQml0QW5kKSB7CisgICAgICAgIGlmIChsZWZ0LT5jaGlsZCgwKSA9
PSByaWdodC0+Y2hpbGQoMCkpIHsKKyAgICAgICAgICAgIHgxID0gbGVmdC0+Y2hpbGQoMCk7Cisg
ICAgICAgICAgICB4MiA9IGxlZnQtPmNoaWxkKDEpOworICAgICAgICAgICAgeDMgPSByaWdodC0+
Y2hpbGQoMSk7CisgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+Y2hpbGQoMSkgPT0gcmlnaHQtPmNo
aWxkKDApKSB7CisgICAgICAgICAgICB4MSA9IGxlZnQtPmNoaWxkKDEpOworICAgICAgICAgICAg
eDIgPSBsZWZ0LT5jaGlsZCgwKTsKKyAgICAgICAgICAgIHgzID0gcmlnaHQtPmNoaWxkKDEpOwor
ICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmNoaWxkKDApID09IHJpZ2h0LT5jaGlsZCgxKSkgewor
ICAgICAgICAgICAgeDEgPSBsZWZ0LT5jaGlsZCgwKTsKKyAgICAgICAgICAgIHgyID0gbGVmdC0+
Y2hpbGQoMSk7CisgICAgICAgICAgICB4MyA9IHJpZ2h0LT5jaGlsZCgwKTsKKyAgICAgICAgfSBl
bHNlIGlmIChsZWZ0LT5jaGlsZCgxKSA9PSByaWdodC0+Y2hpbGQoMSkpIHsKKyAgICAgICAgICAg
IHgxID0gbGVmdC0+Y2hpbGQoMSk7CisgICAgICAgICAgICB4MiA9IGxlZnQtPmNoaWxkKDApOwor
ICAgICAgICAgICAgeDMgPSByaWdodC0+Y2hpbGQoMCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
aWYgKGxlZnQtPm9wY29kZSgpID09IEJpdEFuZCkgeworICAgICAgICBpZiAobGVmdC0+Y2hpbGQo
MCkgPT0gcmlnaHQpIHsKKyAgICAgICAgICAgIHgxID0geDMgPSByaWdodDsKKyAgICAgICAgICAg
IHgyID0gbGVmdC0+Y2hpbGQoMSk7CisgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+Y2hpbGQoMSkg
PT0gcmlnaHQpIHsKKyAgICAgICAgICAgIHgxID0geDMgPSByaWdodDsKKyAgICAgICAgICAgIHgy
ID0gbGVmdC0+Y2hpbGQoMCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHJpZ2h0LT5vcGNv
ZGUoKSA9PSBCaXRBbmQpIHsKKyAgICAgICAgaWYgKHJpZ2h0LT5jaGlsZCgwKSA9PSBsZWZ0KSB7
CisgICAgICAgICAgICB4MSA9IHgzID0gbGVmdDsKKyAgICAgICAgICAgIHgyID0gcmlnaHQtPmNo
aWxkKDEpOworICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0LT5jaGlsZCgxKSA9PSBsZWZ0KSB7Cisg
ICAgICAgICAgICB4MSA9IHgzID0gbGVmdDsKKyAgICAgICAgICAgIHgyID0gcmlnaHQtPmNoaWxk
KDApOworICAgICAgICB9CisgICAgfQorICAgIGlmICh4MSAhPSBudWxscHRyKSB7CisgICAgICAg
IEFTU0VSVCh4MiAhPSBudWxscHRyICYmIHgzICE9IG51bGxwdHIpOworICAgICAgICBWYWx1ZSog
bmV3T3AgPSBvcCA9PSBCaXRPciA/IHJlZHVjZUJpdE9yKHR5cGUsIG9yaWdpbiwgeDIsIHgzKSA6
IHJlZHVjZUJpdFhvcih0eXBlLCBvcmlnaW4sIHgyLCB4Myk7CisgICAgICAgIHJldHVybiByZWR1
Y2VCaXRBbmQodHlwZSwgb3JpZ2luLCB4MSwgbmV3T3ApOworICAgIH0KKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjp0cnlSZWR1Y2VTaGlmdE9yUm90
YXRlKE9wY29kZSBvcCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFs
dWUqIHJpZ2h0KQoreworICAgIC8vIFNoaWZ0IGFueXRoaW5nIGJ5IHplcm8gaXMgaWRlbnRpdHku
CisgICAgaWYgKHJpZ2h0LT5pc0ludDMyKDApKQorICAgICAgICByZXR1cm4gbGVmdDsKKworICAg
IC8vIFRoZSBzaGlmdCBhbHJlYWR5IG1hc2tzIGl0cyBzaGlmdCBhbW91bnQuIElmIHRoZSBzaGlm
dCBhbW91bnQgaXMgYmVpbmcgbWFza2VkIGJ5IGEKKyAgICAvLyByZWR1bmRhbnQgYW1vdW50LCB0
aGVuIHJlbW92ZSB0aGUgbWFzay4gRm9yIGV4YW1wbGUsCisgICAgLy8gVHVybiB0aGlzOiBTaGwo
QHgsIEJpdEFuZChAeSwgNjMpKQorICAgIC8vIEludG8gdGhpczogU2hsKEB4LCBAeSkKKyAgICB1
bnNpZ25lZCBtYXNrID0gc2l6ZW9mVHlwZSh0eXBlKSAqIDggLSAxOworICAgIGlmIChyaWdodC0+
b3Bjb2RlKCkgPT0gQml0QW5kCisgICAgICAgICYmIHJpZ2h0LT5jaGlsZCgxKS0+aGFzSW50MzIo
KQorICAgICAgICAmJiAocmlnaHQtPmNoaWxkKDEpLT5hc0ludDMyKCkgJiBtYXNrKSA9PSBtYXNr
KSB7CisgICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBTaGw6CisgICAgICAgICAg
ICByZXR1cm4gcmVkdWNlU2hsKHR5cGUsIG9yaWdpbiwgbGVmdCwgcmlnaHQtPmNoaWxkKDApKTsK
KyAgICAgICAgY2FzZSBTU2hyOgorICAgICAgICAgICAgcmV0dXJuIHJlZHVjZVNTaHIodHlwZSwg
b3JpZ2luLCBsZWZ0LCByaWdodC0+Y2hpbGQoMCkpOworICAgICAgICBjYXNlIFpTaHI6CisgICAg
ICAgICAgICByZXR1cm4gcmVkdWNlWlNocih0eXBlLCBvcmlnaW4sIGxlZnQsIHJpZ2h0LT5jaGls
ZCgwKSk7CisgICAgICAgIGNhc2UgUm90TDoKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VSb3RM
KHR5cGUsIG9yaWdpbiwgbGVmdCwgcmlnaHQtPmNoaWxkKDApKTsKKyAgICAgICAgY2FzZSBSb3RS
OgorICAgICAgICAgICAgcmV0dXJuIHJlZHVjZVJvdFIodHlwZSwgb3JpZ2luLCBsZWZ0LCByaWdo
dC0+Y2hpbGQoMCkpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBudWxscHRy
OworfQorCisvLyBGSVhNRTogVGhpcyBpcyBhIGJhc2ljIGJvdW5kZWQgYmFja3dhcmRzIGFuYWx5
c2lzLgorLy8gV2Ugc2hvdWxkIG1ha2UgUGVlcGhvbGVPcHRpbWl6ZXIgcGFyYW1ldHJpYyBpbiB0
aGlzIGFuYWx5c2lzLCB0byBzdXBwb3J0IGEgZm9yd2FyZCBhbmFseXNpcy4KK0ludFJhbmdlIFBl
ZXBob2xlT3B0aW1pemVyOjpyYW5nZUZvcihWYWx1ZSogdmFsdWUsIHVuc2lnbmVkIHRpbWVUb0xp
dmUpCit7CisgICAgaWYgKCF0aW1lVG9MaXZlKQorICAgICAgICByZXR1cm4gSW50UmFuZ2U6OnRv
cCh2YWx1ZS0+dHlwZSgpKTsKKworICAgIHN3aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7CisgICAg
Y2FzZSBDb25zdDMyOgorICAgIGNhc2UgQ29uc3Q2NDogeworICAgICAgICBpbnQ2NF90IGludFZh
bHVlID0gdmFsdWUtPmFzSW50KCk7CisgICAgICAgIHJldHVybiBJbnRSYW5nZShpbnRWYWx1ZSwg
aW50VmFsdWUpOworICAgIH0KKworICAgIGNhc2UgQml0QW5kOgorICAgICAgICBpZiAodmFsdWUt
PmNoaWxkKDEpLT5oYXNJbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZTo6cmFuZ2VG
b3JNYXNrKHZhbHVlLT5jaGlsZCgxKS0+YXNJbnQoKSwgdmFsdWUtPnR5cGUoKSk7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBTU2hyOgorICAgICAgICBpZiAodmFsdWUtPmNoaWxkKDEpLT5o
YXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHJhbmdlRm9yKHZhbHVlLT5jaGlsZCgwKSwg
dGltZVRvTGl2ZSAtIDEpLnNTaHIodmFsdWUtPmNoaWxkKDEpLT5hc0ludDMyKCksIHZhbHVlLT50
eXBlKCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgWlNocjoKKyAgICAgICAgaWYgKHZh
bHVlLT5jaGlsZCgxKS0+aGFzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiByYW5nZUZvcih2
YWx1ZS0+Y2hpbGQoMCksIHRpbWVUb0xpdmUgLSAxKS56U2hyKHZhbHVlLT5jaGlsZCgxKS0+YXNJ
bnQzMigpLCB2YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNobDoK
KyAgICAgICAgaWYgKHZhbHVlLT5jaGlsZCgxKS0+aGFzSW50MzIoKSkKKyAgICAgICAgICAgIHJl
dHVybiByYW5nZUZvcih2YWx1ZS0+Y2hpbGQoMCksIHRpbWVUb0xpdmUgLSAxKS5zaGwodmFsdWUt
PmNoaWxkKDEpLT5hc0ludDMyKCksIHZhbHVlLT50eXBlKCkpOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgQWRkOgorICAgICAgICByZXR1cm4gcmFuZ2VGb3IodmFsdWUtPmNoaWxkKDApLCB0
aW1lVG9MaXZlIC0gMSkuYWRkKHJhbmdlRm9yKHZhbHVlLT5jaGlsZCgxKSwgdGltZVRvTGl2ZSAt
IDEpLCB2YWx1ZS0+dHlwZSgpKTsKKworICAgIGNhc2UgU3ViOgorICAgICAgICByZXR1cm4gcmFu
Z2VGb3IodmFsdWUtPmNoaWxkKDApLCB0aW1lVG9MaXZlIC0gMSkuc3ViKHJhbmdlRm9yKHZhbHVl
LT5jaGlsZCgxKSwgdGltZVRvTGl2ZSAtIDEpLCB2YWx1ZS0+dHlwZSgpKTsKKworICAgIGNhc2Ug
TXVsOgorICAgICAgICByZXR1cm4gcmFuZ2VGb3IodmFsdWUtPmNoaWxkKDApLCB0aW1lVG9MaXZl
IC0gMSkubXVsKHJhbmdlRm9yKHZhbHVlLT5jaGlsZCgxKSwgdGltZVRvTGl2ZSAtIDEpLCB2YWx1
ZS0+dHlwZSgpKTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IHJldHVybiBJbnRSYW5nZTo6dG9wKHZhbHVlLT50eXBlKCkpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BlZXBob2xlT3B0aW1pemVyLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQZWVwaG9sZU9wdGltaXplci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi43ZjBjMTVlOGUxZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BlZXBob2xlT3B0aW1pemVyLmgKQEAgLTAsMCArMSwxNTYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIK
KyNpbmNsdWRlICJCM0NoZWNrVmFsdWUuaCIKKyNpbmNsdWRlICJCM0luc2VydGlvblNldC5oIgor
I2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitjbGFzcyBJbnRSYW5nZTsKK2NsYXNzIFByb2NlZHVyZTsKKworLy8gVGhpcyBjbGFzcyBj
YW4gYmUgdXNlZCBpbiB0d28gbW9kZXMsIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgdHdvIHdheXMg
b2YgY29uc3RydWN0aW5nIGl0LgorLy8gSW4gdGhlIGZpcnN0IG1vZGUsIGl0IGlzIHBhc3NlZCBh
biBpbnNlcnRpb25TZXQsIGFuZCB1c2VzIGl0IHRvIGNvbnN0cnVjdCBuZXcgdmFsdWVzLgorLy8g
SXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGtlZXAgdGhlIGluZGV4IHVwLXRv
LWRhdGUgd2l0aCBzZXRJbmRleCwKKy8vIGFuZCB0byBleGVjdXRlIHRoZSBpbnNlcnRpb25TZXQg
b25jZSBpdCBpcyBkb25lIHdpdGggdGhlIGN1cnJlbnQgYmFzaWMgYmxvY2suCisvLyBUaGlzIG1v
ZGUgaXMgcHJpbWFyaWx5IHVzZWQgYnkgQjNSZWR1Y2VTdHJlbmd0aC4KKy8vIEluIHRoZSBzZWNv
bmQgbW9kZSwgaXQgaXMgcGFzc2VkIGEgcG9pbnRlciB0byBhIGJhc2ljIGJsb2NrLCBhbmQgY29u
c3RydWN0IG5ldyB2YWx1ZXMgYnkgYXBwZW5kaW5nIHRoZW0gYXQgdGhlIGVuZC4KKy8vIEluIHRo
aXMgbW9kZSwgdGhlIGNhbGxlcidzIG9ubHkgcmVzcG9uc2liaWxpdHkgaXMgdG8gdXBkYXRlIHRo
ZSBibG9jayBwb2ludGVyIHdpdGggc2V0QmxvY2sgd2hlbmV2ZXIgbmVlZGVkLgorLy8gVGhpcyBt
b2RlIGlzIHByaW1hcmlseSB1c2VkIGJ5IEZUTE91dHB1dC4KK2NsYXNzIFBlZXBob2xlT3B0aW1p
emVyIHsKK3B1YmxpYzoKKyAgICBQZWVwaG9sZU9wdGltaXplcihQcm9jZWR1cmUmIHByb2MsIElu
c2VydGlvblNldCYgaW5zZXJ0aW9uU2V0KQorICAgICAgICA6IG1fcHJvYyhwcm9jKQorICAgICAg
ICAsIG1faW5zZXJ0aW9uU2V0KCZpbnNlcnRpb25TZXQpCisgICAgICAgICwgbV9pbmRleCgwKQor
ICAgIHsKKyAgICB9CisKKyAgICBQZWVwaG9sZU9wdGltaXplcihQcm9jZWR1cmUmIHByb2MsIEJh
c2ljQmxvY2sqIGJsb2NrID0gbnVsbHB0cikKKyAgICAgICAgOiBtX3Byb2MocHJvYykKKyAgICAg
ICAgLCBtX2Jsb2NrKGJsb2NrKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHNldEluZGV4KHVu
c2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEhbV9pbnNlcnRpb25TZXQpOwor
ICAgICAgICBtX2luZGV4ID0gaW5kZXg7CisgICAgfQorCisgICAgdm9pZCBzZXRCbG9jayhCYXNp
Y0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9pbnNlcnRpb25TZXQpOwor
ICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CisgICAgfQorCisgICAgVmFsdWUqIHJlZHVjZU9wYXF1
ZShUeXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogY2hpbGQsIGJvb2wgY2FuR2l2ZVVwID0gZmFs
c2UpOworICAgIFZhbHVlKiByZWR1Y2VBZGQoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFs
dWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlU3Vi
KFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXAg
PSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZU5lZyhUeXBlLCBPcmlnaW4sIFZhbHVlKiwgYm9v
bCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZU11bChUeXBlLCBPcmlnaW4s
IFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAg
IFZhbHVlKiByZWR1Y2VEaXYoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0
LCBib29sIGlzQ2hpbGwsIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZhbHVlKiByZWR1
Y2VVRGl2KFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5H
aXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZU1vZChUeXBlLCBPcmlnaW4sIFZhbHVl
KiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgaXNDaGlsbCwgYm9vbCBjYW5HaXZlVXAgPSBmYWxz
ZSk7CisgICAgVmFsdWUqIHJlZHVjZVVNb2QoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFs
dWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlQml0
QW5kKFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZl
VXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZUJpdE9yKFR5cGUsIE9yaWdpbiwgVmFsdWUq
IGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUq
IHJlZHVjZUJpdFhvcihUeXBlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJv
b2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZhbHVlKiByZWR1Y2VTaGwoVHlwZSwgT3JpZ2lu
LCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAg
ICBWYWx1ZSogcmVkdWNlU1NocihUeXBlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmln
aHQsIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZhbHVlKiByZWR1Y2VaU2hyKFR5cGUs
IE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXAgPSBmYWxz
ZSk7CisgICAgVmFsdWUqIHJlZHVjZVJvdEwoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFs
dWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlUm90
UihUeXBlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVw
ID0gZmFsc2UpOworICAgIFZhbHVlKiByZWR1Y2VBYnMoVHlwZSwgT3JpZ2luLCBWYWx1ZSosIGJv
b2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZhbHVlKiByZWR1Y2VDZWlsKFR5cGUsIE9yaWdp
biwgVmFsdWUqLCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlRmxv
b3IoVHlwZSwgT3JpZ2luLCBWYWx1ZSosIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZh
bHVlKiByZWR1Y2VCaXR3aXNlQ2FzdChUeXBlLCBPcmlnaW4sIFZhbHVlKiwgYm9vbCBjYW5HaXZl
VXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZVNxcnQoVHlwZSwgT3JpZ2luLCBWYWx1ZSos
IGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZhbHVlKiByZWR1Y2VTRXh0OChUeXBlLCBP
cmlnaW4sIFZhbHVlKiwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVj
ZVNFeHQxNihUeXBlLCBPcmlnaW4sIFZhbHVlKiwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7Cisg
ICAgVmFsdWUqIHJlZHVjZVNFeHQzMihUeXBlLCBPcmlnaW4sIFZhbHVlKiwgYm9vbCBjYW5HaXZl
VXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZVpFeHQzMihUeXBlLCBPcmlnaW4sIFZhbHVl
KiwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZVRydW5jKFR5cGUs
IE9yaWdpbiwgVmFsdWUqLCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVk
dWNlSVRvRChUeXBlLCBPcmlnaW4sIFZhbHVlKiwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7Cisg
ICAgVmFsdWUqIHJlZHVjZUlUb0YoVHlwZSwgT3JpZ2luLCBWYWx1ZSosIGJvb2wgY2FuR2l2ZVVw
ID0gZmFsc2UpOworICAgIFZhbHVlKiByZWR1Y2VGbG9hdFRvRG91YmxlKFR5cGUsIE9yaWdpbiwg
VmFsdWUqLCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlRG91Ymxl
VG9GbG9hdChUeXBlLCBPcmlnaW4sIFZhbHVlKiwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7Cisg
ICAgVmFsdWUqIHJlZHVjZVNlbGVjdChUeXBlLCBPcmlnaW4sIFZhbHVlKiBjb25kLCBWYWx1ZSog
aWZUcnVlLCBWYWx1ZSogaWZGYWxzZSwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFs
dWUqIHJlZHVjZUxvYWRTdG9yZShPcGNvZGUsIFR5cGUsIE9yaWdpbiwgVmFsdWUqIGFkZHJlc3Ms
IFZhbHVlOjpPZmZzZXRUeXBlIG9mZnNldCwgVmFsdWUqIHZhbHVlU3RvcmVkID0gbnVsbHB0ciwg
SGVhcFJhbmdlIHJhbmdlID0gSGVhcFJhbmdlOjp0b3AoKSwgSGVhcFJhbmdlIGZlbmNlUmFuZ2Ug
PSBIZWFwUmFuZ2UoKSwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVj
ZUVxdWFsKFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5H
aXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZU5vdEVxdWFsKFR5cGUsIE9yaWdpbiwg
VmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAg
VmFsdWUqIHJlZHVjZUVxdWFsT3JVbm9yZGVyZWQoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwg
VmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNl
TGVzc1RoYW4oVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNh
bkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlR3JlYXRlclRoYW4oVHlwZSwgT3Jp
Z2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsK
KyAgICBWYWx1ZSogcmVkdWNlTGVzc0VxdWFsKFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZh
bHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZUdy
ZWF0ZXJFcXVhbChUeXBlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wg
Y2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZhbHVlKiByZWR1Y2VBYm92ZShUeXBlLCBPcmlnaW4s
IFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAg
IFZhbHVlKiByZWR1Y2VCZWxvdyhUeXBlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmln
aHQsIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZhbHVlKiByZWR1Y2VBYm92ZUVxdWFs
KFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXAg
PSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZUJlbG93RXF1YWwoVHlwZSwgT3JpZ2luLCBWYWx1
ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICAvLyBE
aXNwYXRjaCBvbiB0aGUgb3Bjb2RlIHRvIGFueSBvZiB0aGUgZnVuY3Rpb25zIGFib3ZlLCB3aXRo
IGNhbkdpdmVVcCA9IHRydWUuCisgICAgVmFsdWUqIHRyeVJlZHVjZShWYWx1ZSopOworCisgICAg
Ly8gVGhpcyBtZXRob2QgaGFzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgaW50ZXJmYWNlLCBiZWNh
dXNlIGl0IGNhbm5vdCBiZSB1c2VkIG9uIHRoZSBmbHkgd2hpbGUgY3JlYXRpbmcgQjMsCisgICAg
Ly8gYXMgaXQgbW9kaWZpZXMgdGhlIGJsb2NrJ3Mgc3VjY2Vzc29ycy4KKyAgICAvLyBJdCBzaW1w
bHkgcmV0dXJucyB0cnVlIGlmIGl0IHdhcyBhYmxlIHRvIG9wdGltaXplIG9yIGNhbm9uaWNhbGl6
ZSB0aGUgYnJhbmNoIGFuZCBmYWxzZSBvdGhlcndpc2UuCisgICAgYm9vbCB0cnlTaW1wbGlmeUJy
YW5jaChWYWx1ZSopOworICAgIC8vIFNpbWlsYXJpbHkgdGhlc2UgbWV0aG9kcyBzaG91bGQgbm90
IGJlIGNhbGxlZCB3aGVuIGNvbnN0cnVjdGluZyBhIHZhcmFyZ3Mgb3BlcmF0aW9uIHBpZWNld2lz
ZSBhcyBpcyBjb21tb25seSBkb25lCisgICAgLy8gYnkgRlRMTG93ZXJERkdUb0IzOiB3ZSBkb24n
dCB3YW50IGNsaWVudHMgdHJ5aW5nIHRvIG11dGF0ZSBhIENoZWNrQWRkIGFmdGVyIHdlJ3ZlIHRy
YW5zZm9ybWVkIGl0IGludG8gYW4gSWRlbnRpdHkuCisgICAgLy8gVGhleSByZXR1cm4gdHJ1ZSBp
ZiB0aGV5IHdlcmUgYWJsZSB0byBkbyBhbnkgb3B0aW1pemF0aW9uIG9yIGNhbm9uaWNhbGl6YXRp
b24sIGFuZCBmYWxzZSBvdGhlcndpc2UuCisgICAgYm9vbCB0cnlTaW1wbGlmeUNDYWxsKENDYWxs
VmFsdWUqKTsKKyAgICBib29sIHRyeVNpbXBsaWZ5Q2hlY2tBZGQoQ2hlY2tWYWx1ZSopOworICAg
IGJvb2wgdHJ5U2ltcGxpZnlDaGVja1N1YihDaGVja1ZhbHVlKik7CisgICAgYm9vbCB0cnlTaW1w
bGlmeUNoZWNrTXVsKENoZWNrVmFsdWUqKTsKKyAgICBib29sIHRyeVNpbXBsaWZ5Q2hlY2soQ2hl
Y2tWYWx1ZSopOworCitwcml2YXRlOgorICAgIFZhbHVlKiBhcHBlbmRUb0N1cnJlbnRCbG9jayhW
YWx1ZSopOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgorICAgIFZhbHVlKiBlbWl0KEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpOworCisgICAg
c3RhdGljIGJvb2wgc2hvdWxkR29CZWZvcmUoVmFsdWUqLCBWYWx1ZSopOworCisgICAgVmFsdWUq
IHRyeVJlZHVjZU11bERpc3RyaWJ1dGl2aXR5KE9wY29kZSwgVHlwZSwgT3JpZ2luLCBWYWx1ZSog
bGVmdCwgVmFsdWUqIHJpZ2h0KTsKKyAgICBWYWx1ZSogdHJ5UmVkdWNlQml0QW5kRGlzdHJpYnV0
aXZpdHkoT3Bjb2RlLCBUeXBlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpOwor
ICAgIFZhbHVlKiB0cnlSZWR1Y2VTaGlmdE9yUm90YXRlKE9wY29kZSwgVHlwZSwgT3JpZ2luLCBW
YWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KTsKKworICAgIHN0YXRpYyBJbnRSYW5nZSByYW5nZUZv
cihWYWx1ZSosIHVuc2lnbmVkIHRpbWVUb0xpdmUgPSA1KTsKKworICAgIFByb2NlZHVyZSYgbV9w
cm9jOworICAgIEluc2VydGlvblNldCogbV9pbnNlcnRpb25TZXQgeyBudWxscHRyIH07CisgICAg
QmFzaWNCbG9jayogbV9ibG9jayB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX2luZGV4IHsg
MCB9OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3Ry
ZW5ndGguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3Bw
CmluZGV4IDllNjIxNTk0MmYzLi5mMjdkNmZiMDRkYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMzYsNiArMzYsNyBAQAogI2lu
Y2x1ZGUgIkIzRWxpbWluYXRlRGVhZENvZGUuaCIKICNpbmNsdWRlICJCM0luc2VydGlvblNldElu
bGluZXMuaCIKICNpbmNsdWRlICJCM01lbW9yeVZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIz
UGVlcGhvbGVPcHRpbWl6ZXIuaCIKICNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKICNpbmNsdWRl
ICJCM1BoaUNoaWxkcmVuLmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCkBAIC05
MywxOTMzICs5NCwxMjIgQEAgbmFtZXNwYWNlIEIzUmVkdWNlU3RyZW5ndGhJbnRlcm5hbCB7CiBz
dGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKLS8vIEZJWE1FOiBUaGlzIElu
dFJhbmdlIHN0dWZmIHNob3VsZCBiZSByZWZhY3RvcmVkIGludG8gYSBnZW5lcmFsIGNvbnN0YW50
IHByb3BhZ2F0b3IuIEl0J3Mgd2VpcmQKLS8vIHRoYXQgaXQncyBqdXN0IHNpdHRpbmcgaGVyZSBp
biB0aGlzIGZpbGUuCi1jbGFzcyBJbnRSYW5nZSB7Ci1wdWJsaWM6Ci0gICAgSW50UmFuZ2UoKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBJbnRSYW5nZShpbnQ2NF90IG1pbiwgaW50NjRfdCBtYXgpCi0g
ICAgICAgIDogbV9taW4obWluKQotICAgICAgICAsIG1fbWF4KG1heCkKLSAgICB7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgSW50UmFuZ2UgdG9wKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBJbnRSYW5nZShzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptaW4o
KSwgc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCkpOwotICAgIH0KLQotICAgIHN0YXRpYyBJ
bnRSYW5nZSB0b3AoVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0g
ICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAgICByZXR1cm4gdG9wPGludDMyX3Q+KCk7Ci0g
ICAgICAgIGNhc2UgSW50NjQ6Ci0gICAgICAgICAgICByZXR1cm4gdG9wPGludDY0X3Q+KCk7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICAgICAgcmV0dXJuIEludFJhbmdlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBJbnRSYW5nZSByYW5nZUZvck1hc2so
VCBtYXNrKQotICAgIHsKLSAgICAgICAgaWYgKCEobWFzayArIDEpKQotICAgICAgICAgICAgcmV0
dXJuIHRvcDxUPigpOwotICAgICAgICByZXR1cm4gSW50UmFuZ2UoMCwgbWFzayk7Ci0gICAgfQot
Ci0gICAgc3RhdGljIEludFJhbmdlIHJhbmdlRm9yTWFzayhpbnQ2NF90IG1hc2ssIFR5cGUgdHlw
ZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEludDMyOgot
ICAgICAgICAgICAgcmV0dXJuIHJhbmdlRm9yTWFzazxpbnQzMl90PihzdGF0aWNfY2FzdDxpbnQz
Ml90PihtYXNrKSk7Ci0gICAgICAgIGNhc2UgSW50NjQ6Ci0gICAgICAgICAgICByZXR1cm4gcmFu
Z2VGb3JNYXNrPGludDY0X3Q+KG1hc2spOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBJbnRSYW5n
ZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBz
dGF0aWMgSW50UmFuZ2UgcmFuZ2VGb3JaU2hyKGludDMyX3Qgc2hpZnRBbW91bnQpCi0gICAgewot
ICAgICAgICB0eXBlbmFtZSBzdGQ6Om1ha2VfdW5zaWduZWQ8VD46OnR5cGUgbWFzayA9IDA7Ci0g
ICAgICAgIG1hc2stLTsKLSAgICAgICAgbWFzayA+Pj0gc2hpZnRBbW91bnQ7Ci0gICAgICAgIHJl
dHVybiByYW5nZUZvck1hc2s8VD4oc3RhdGljX2Nhc3Q8VD4obWFzaykpOwotICAgIH0KLQotICAg
IHN0YXRpYyBJbnRSYW5nZSByYW5nZUZvclpTaHIoaW50MzJfdCBzaGlmdEFtb3VudCwgVHlwZSB0
eXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6
Ci0gICAgICAgICAgICByZXR1cm4gcmFuZ2VGb3JaU2hyPGludDMyX3Q+KHNoaWZ0QW1vdW50KTsK
LSAgICAgICAgY2FzZSBJbnQ2NDoKLSAgICAgICAgICAgIHJldHVybiByYW5nZUZvclpTaHI8aW50
NjRfdD4oc2hpZnRBbW91bnQpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaW50NjRfdCBtaW4oKSBjb25zdCB7IHJldHVybiBtX21p
bjsgfQotICAgIGludDY0X3QgbWF4KCkgY29uc3QgeyByZXR1cm4gbV9tYXg7IH0KLQotICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotICAgIHsKLSAgICAgICAgb3V0LnByaW50
KCJbIiwgbV9taW4sICIsIiwgbV9tYXgsICJdIik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLSAgICBib29sIGNvdWxkT3ZlcmZsb3dBZGQoY29uc3QgSW50UmFuZ2UmIG90aGVy
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN1bU92ZXJmbG93czxUPihtX21pbiwgb3RoZXIubV9t
aW4pCi0gICAgICAgICAgICB8fCBzdW1PdmVyZmxvd3M8VD4obV9taW4sIG90aGVyLm1fbWF4KQot
ICAgICAgICAgICAgfHwgc3VtT3ZlcmZsb3dzPFQ+KG1fbWF4LCBvdGhlci5tX21pbikKLSAgICAg
ICAgICAgIHx8IHN1bU92ZXJmbG93czxUPihtX21heCwgb3RoZXIubV9tYXgpOwotICAgIH0KLQot
ICAgIGJvb2wgY291bGRPdmVyZmxvd0FkZChjb25zdCBJbnRSYW5nZSYgb3RoZXIsIFR5cGUgdHlw
ZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEludDMyOgot
ICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dBZGQ8aW50MzJfdD4ob3RoZXIpOwotICAg
ICAgICBjYXNlIEludDY0OgotICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dBZGQ8aW50
NjRfdD4ob3RoZXIpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGJvb2wg
Y291bGRPdmVyZmxvd1N1Yihjb25zdCBJbnRSYW5nZSYgb3RoZXIpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZGlmZmVyZW5jZU92ZXJmbG93czxUPihtX21pbiwgb3RoZXIubV9taW4pCi0gICAgICAg
ICAgICB8fCBkaWZmZXJlbmNlT3ZlcmZsb3dzPFQ+KG1fbWluLCBvdGhlci5tX21heCkKLSAgICAg
ICAgICAgIHx8IGRpZmZlcmVuY2VPdmVyZmxvd3M8VD4obV9tYXgsIG90aGVyLm1fbWluKQotICAg
ICAgICAgICAgfHwgZGlmZmVyZW5jZU92ZXJmbG93czxUPihtX21heCwgb3RoZXIubV9tYXgpOwot
ICAgIH0KLQotICAgIGJvb2wgY291bGRPdmVyZmxvd1N1Yihjb25zdCBJbnRSYW5nZSYgb3RoZXIs
IFR5cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNl
IEludDMyOgotICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dTdWI8aW50MzJfdD4ob3Ro
ZXIpOwotICAgICAgICBjYXNlIEludDY0OgotICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZs
b3dTdWI8aW50NjRfdD4ob3RoZXIpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
ICAgIGJvb2wgY291bGRPdmVyZmxvd011bChjb25zdCBJbnRSYW5nZSYgb3RoZXIpCi0gICAgewot
ICAgICAgICByZXR1cm4gcHJvZHVjdE92ZXJmbG93czxUPihtX21pbiwgb3RoZXIubV9taW4pCi0g
ICAgICAgICAgICB8fCBwcm9kdWN0T3ZlcmZsb3dzPFQ+KG1fbWluLCBvdGhlci5tX21heCkKLSAg
ICAgICAgICAgIHx8IHByb2R1Y3RPdmVyZmxvd3M8VD4obV9tYXgsIG90aGVyLm1fbWluKQotICAg
ICAgICAgICAgfHwgcHJvZHVjdE92ZXJmbG93czxUPihtX21heCwgb3RoZXIubV9tYXgpOwotICAg
IH0KLQotICAgIGJvb2wgY291bGRPdmVyZmxvd011bChjb25zdCBJbnRSYW5nZSYgb3RoZXIsIFR5
cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIElu
dDMyOgotICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dNdWw8aW50MzJfdD4ob3RoZXIp
OwotICAgICAgICBjYXNlIEludDY0OgotICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dN
dWw8aW50NjRfdD4ob3RoZXIpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAg
IEludFJhbmdlIHNobChpbnQzMl90IHNoaWZ0QW1vdW50KQotICAgIHsKLSAgICAgICAgVCBuZXdN
aW4gPSBzdGF0aWNfY2FzdDxUPihtX21pbikgPDwgc3RhdGljX2Nhc3Q8VD4oc2hpZnRBbW91bnQp
OwotICAgICAgICBUIG5ld01heCA9IHN0YXRpY19jYXN0PFQ+KG1fbWF4KSA8PCBzdGF0aWNfY2Fz
dDxUPihzaGlmdEFtb3VudCk7Ci0KLSAgICAgICAgaWYgKChuZXdNaW4gPj4gc2hpZnRBbW91bnQp
ICE9IHN0YXRpY19jYXN0PFQ+KG1fbWluKSkKLSAgICAgICAgICAgIG5ld01pbiA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8VD46Om1pbigpOwotICAgICAgICBpZiAoKG5ld01heCA+PiBzaGlmdEFtb3Vu
dCkgIT0gc3RhdGljX2Nhc3Q8VD4obV9tYXgpKQotICAgICAgICAgICAgbmV3TWF4ID0gc3RkOjpu
dW1lcmljX2xpbWl0czxUPjo6bWF4KCk7Ci0KLSAgICAgICAgcmV0dXJuIEludFJhbmdlKG5ld01p
biwgbmV3TWF4KTsKLSAgICB9Ci0KLSAgICBJbnRSYW5nZSBzaGwoaW50MzJfdCBzaGlmdEFtb3Vu
dCwgVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNh
c2UgSW50MzI6Ci0gICAgICAgICAgICByZXR1cm4gc2hsPGludDMyX3Q+KHNoaWZ0QW1vdW50KTsK
LSAgICAgICAgY2FzZSBJbnQ2NDoKLSAgICAgICAgICAgIHJldHVybiBzaGw8aW50NjRfdD4oc2hp
ZnRBbW91bnQpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBJbnRSYW5nZSBzU2hyKGlu
dDMyX3Qgc2hpZnRBbW91bnQpCi0gICAgewotICAgICAgICBUIG5ld01pbiA9IHN0YXRpY19jYXN0
PFQ+KG1fbWluKSA+PiBzdGF0aWNfY2FzdDxUPihzaGlmdEFtb3VudCk7Ci0gICAgICAgIFQgbmV3
TWF4ID0gc3RhdGljX2Nhc3Q8VD4obV9tYXgpID4+IHN0YXRpY19jYXN0PFQ+KHNoaWZ0QW1vdW50
KTsKLQotICAgICAgICByZXR1cm4gSW50UmFuZ2UobmV3TWluLCBuZXdNYXgpOwotICAgIH0KLQot
ICAgIEludFJhbmdlIHNTaHIoaW50MzJfdCBzaGlmdEFtb3VudCwgVHlwZSB0eXBlKQotICAgIHsK
LSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAg
ICByZXR1cm4gc1NocjxpbnQzMl90PihzaGlmdEFtb3VudCk7Ci0gICAgICAgIGNhc2UgSW50NjQ6
Ci0gICAgICAgICAgICByZXR1cm4gc1NocjxpbnQ2NF90PihzaGlmdEFtb3VudCk7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICAgICAgcmV0dXJuIEludFJhbmdlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotICAgIEludFJhbmdlIHpTaHIoaW50MzJfdCBzaGlmdEFtb3VudCkK
LSAgICB7Ci0gICAgICAgIC8vIFRoaXMgaXMgYW4gYXdrd2FyZCBjb3JuZXIgY2FzZSBmb3IgYWxs
IG9mIHRoZSBvdGhlciBsb2dpYy4KLSAgICAgICAgaWYgKCFzaGlmdEFtb3VudCkKLSAgICAgICAg
ICAgIHJldHVybiAqdGhpczsKLQotICAgICAgICAvLyBJZiB0aGUgaW5wdXQgcmFuZ2UgbWF5IGJl
IG5lZ2F0aXZlLCB0aGVuIGFsbCB3ZSBjYW4gc2F5IGFib3V0IHRoZSBvdXRwdXQgcmFuZ2UgaXMg
dGhhdCBpdAotICAgICAgICAvLyB3aWxsIGJlIG1hc2tlZC4gVGhhdCdzIGJlY2F1c2UgLTEgcmln
aHQgc2hpZnRlZCBqdXN0IHByb2R1Y2VzIHRoYXQgbWFzay4KLSAgICAgICAgaWYgKG1fbWluIDwg
MCkKLSAgICAgICAgICAgIHJldHVybiByYW5nZUZvclpTaHI8VD4oc2hpZnRBbW91bnQpOwotCi0g
ICAgICAgIC8vIElmIHRoZSBpbnB1dCByYW5nZSBpcyBub24tbmVnYXRpdmUsIHRoZW4gdGhpcyBq
dXN0IGJyaW5ncyB0aGUgcmFuZ2UgY2xvc2VyIHRvIHplcm8uCi0gICAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgc3RkOjptYWtlX3Vuc2lnbmVkPFQ+Ojp0eXBlIFVuc2lnbmVkVDsKLSAgICAgICAgVW5z
aWduZWRUIG5ld01pbiA9IHN0YXRpY19jYXN0PFVuc2lnbmVkVD4obV9taW4pID4+IHN0YXRpY19j
YXN0PFVuc2lnbmVkVD4oc2hpZnRBbW91bnQpOwotICAgICAgICBVbnNpZ25lZFQgbmV3TWF4ID0g
c3RhdGljX2Nhc3Q8VW5zaWduZWRUPihtX21heCkgPj4gc3RhdGljX2Nhc3Q8VW5zaWduZWRUPihz
aGlmdEFtb3VudCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gSW50UmFuZ2UobmV3TWluLCBu
ZXdNYXgpOwotICAgIH0KLQotICAgIEludFJhbmdlIHpTaHIoaW50MzJfdCBzaGlmdEFtb3VudCwg
VHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2Ug
SW50MzI6Ci0gICAgICAgICAgICByZXR1cm4gelNocjxpbnQzMl90PihzaGlmdEFtb3VudCk7Ci0g
ICAgICAgIGNhc2UgSW50NjQ6Ci0gICAgICAgICAgICByZXR1cm4gelNocjxpbnQ2NF90PihzaGlm
dEFtb3VudCk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIEludFJhbmdlKCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIEludFJhbmdlIGFkZChjb25z
dCBJbnRSYW5nZSYgb3RoZXIpCi0gICAgewotICAgICAgICBpZiAoY291bGRPdmVyZmxvd0FkZDxU
PihvdGhlcikpCi0gICAgICAgICAgICByZXR1cm4gdG9wPFQ+KCk7Ci0gICAgICAgIHJldHVybiBJ
bnRSYW5nZShtX21pbiArIG90aGVyLm1fbWluLCBtX21heCArIG90aGVyLm1fbWF4KTsKLSAgICB9
Ci0KLSAgICBJbnRSYW5nZSBhZGQoY29uc3QgSW50UmFuZ2UmIG90aGVyLCBUeXBlIHR5cGUpCi0g
ICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAg
ICAgICAgIHJldHVybiBhZGQ8aW50MzJfdD4ob3RoZXIpOwotICAgICAgICBjYXNlIEludDY0Ogot
ICAgICAgICAgICAgcmV0dXJuIGFkZDxpbnQ2NF90PihvdGhlcik7Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAg
cmV0dXJuIEludFJhbmdlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotICAgIEludFJhbmdlIHN1Yihjb25zdCBJbnRSYW5nZSYgb3RoZXIpCi0gICAgewot
ICAgICAgICBpZiAoY291bGRPdmVyZmxvd1N1YjxUPihvdGhlcikpCi0gICAgICAgICAgICByZXR1
cm4gdG9wPFQ+KCk7Ci0gICAgICAgIHJldHVybiBJbnRSYW5nZShtX21pbiAtIG90aGVyLm1fbWF4
LCBtX21heCAtIG90aGVyLm1fbWluKTsKLSAgICB9Ci0KLSAgICBJbnRSYW5nZSBzdWIoY29uc3Qg
SW50UmFuZ2UmIG90aGVyLCBUeXBlIHR5cGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKLSAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAgICAgICAgIHJldHVybiBzdWI8aW50MzJfdD4o
b3RoZXIpOwotICAgICAgICBjYXNlIEludDY0OgotICAgICAgICAgICAgcmV0dXJuIHN1YjxpbnQ2
NF90PihvdGhlcik7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIEludFJhbmdlKCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIEludFJhbmdlIG11bChj
b25zdCBJbnRSYW5nZSYgb3RoZXIpCi0gICAgewotICAgICAgICBpZiAoY291bGRPdmVyZmxvd011
bDxUPihvdGhlcikpCi0gICAgICAgICAgICByZXR1cm4gdG9wPFQ+KCk7Ci0gICAgICAgIHJldHVy
biBJbnRSYW5nZSgKLSAgICAgICAgICAgIHN0ZDo6bWluKAotICAgICAgICAgICAgICAgIHN0ZDo6
bWluKG1fbWluICogb3RoZXIubV9taW4sIG1fbWluICogb3RoZXIubV9tYXgpLAotICAgICAgICAg
ICAgICAgIHN0ZDo6bWluKG1fbWF4ICogb3RoZXIubV9taW4sIG1fbWF4ICogb3RoZXIubV9tYXgp
KSwKLSAgICAgICAgICAgIHN0ZDo6bWF4KAotICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1fbWlu
ICogb3RoZXIubV9taW4sIG1fbWluICogb3RoZXIubV9tYXgpLAotICAgICAgICAgICAgICAgIHN0
ZDo6bWF4KG1fbWF4ICogb3RoZXIubV9taW4sIG1fbWF4ICogb3RoZXIubV9tYXgpKSk7Ci0gICAg
fQotCi0gICAgSW50UmFuZ2UgbXVsKGNvbnN0IEludFJhbmdlJiBvdGhlciwgVHlwZSB0eXBlKQot
ICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0gICAg
ICAgICAgICByZXR1cm4gbXVsPGludDMyX3Q+KG90aGVyKTsKLSAgICAgICAgY2FzZSBJbnQ2NDoK
LSAgICAgICAgICAgIHJldHVybiBtdWw8aW50NjRfdD4ob3RoZXIpOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAg
IHJldHVybiBJbnRSYW5nZSgpOwotICAgICAgICB9Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlu
dDY0X3QgbV9taW4geyAwIH07Ci0gICAgaW50NjRfdCBtX21heCB7IDAgfTsKLX07Ci0KLWNsYXNz
IFJlZHVjZVN0cmVuZ3RoIHsKLXB1YmxpYzoKLSAgICBSZWR1Y2VTdHJlbmd0aChQcm9jZWR1cmUm
IHByb2MpCi0gICAgICAgIDogbV9wcm9jKHByb2MpCi0gICAgICAgICwgbV9pbnNlcnRpb25TZXQo
cHJvYykKLSAgICAgICAgLCBtX2Jsb2NrSW5zZXJ0aW9uU2V0KHByb2MpCi0gICAgewotICAgIH0K
LQotICAgIGJvb2wgcnVuKCkKLSAgICB7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0g
ICAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOwotICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0g
ICAgICAgIGRvIHsKLSAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAgICAg
bV9jaGFuZ2VkQ0ZHID0gZmFsc2U7Ci0gICAgICAgICAgICArK2luZGV4OwotCi0gICAgICAgICAg
ICBpZiAoZmlyc3QpCi0gICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKLSAgICAgICAgICAg
IGVsc2UgaWYgKEIzUmVkdWNlU3RyZW5ndGhJbnRlcm5hbDo6dmVyYm9zZSkgewotICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkIzIGFmdGVyIGl0ZXJhdGlvbiAjIiwgaW5kZXggLSAxLCAiIG9mIHJl
ZHVjZVN0cmVuZ3RoOlxuIik7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZyhtX3Byb2MpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBzaW1wbGlmeUNGRygpOwotCi0g
ICAgICAgICAgICBpZiAobV9jaGFuZ2VkQ0ZHKSB7Ci0gICAgICAgICAgICAgICAgbV9wcm9jLnJl
c2V0UmVhY2hhYmlsaXR5KCk7Ci0gICAgICAgICAgICAgICAgbV9wcm9jLmludmFsaWRhdGVDRkco
KTsKLSAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBXZSBkZWZpbml0ZWx5IHdhbnQgdG8gZG8gRENFIGJlZm9yZSB3ZSBkbyBD
U0Ugc28gdGhhdCB3ZSBkb24ndCBob2lzdCB0aGluZ3MuIEZvcgotICAgICAgICAgICAgLy8gZXhh
bXBsZToKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBAZGVhZCA9IE11bChAYSwgQGIp
Ci0gICAgICAgICAgICAvLyAuLi4gbG90cyBvZiBjb250cm9sIGZsb3cgYW5kIHN0dWZmCi0gICAg
ICAgICAgICAvLyBAdGhpbmcgPSBNdWwoQGEsIEBiKQotICAgICAgICAgICAgLy8KLSAgICAgICAg
ICAgIC8vIElmIHdlIGRvIENTRSBiZWZvcmUgRENFLCB3ZSB3aWxsIHJlbW92ZSBAdGhpbmcgYW5k
IGtlZXAgQGRlYWQuIEVmZmVjdGl2ZWx5LCB3ZSB3aWxsCi0gICAgICAgICAgICAvLyAiaG9pc3Qi
IEB0aGluZy4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHdlIHJ1biBEQ0UgYmVmb3JlIENTRSwgd2Ug
d2lsbCBraWxsIEBkZWFkIGFuZAotICAgICAgICAgICAgLy8ga2VlcCBAdGhpbmcuIFRoYXQncyBi
ZXR0ZXIsIHNpbmNlIHdlIHVzdWFsbHkgd2FudCB0aGluZ3MgdG8gc3RheSB3aGVyZXZlciB0aGUg
Y2xpZW50Ci0gICAgICAgICAgICAvLyBwdXQgdGhlbS4gV2UncmUgbm90IGFjdHVhbGx5IHNtYXJ0
IGVub3VnaCB0byBtb3ZlIHRoaW5ncyBhcm91bmQgYXQgcmFuZG9tLgotICAgICAgICAgICAgbV9j
aGFuZ2VkIHw9IGVsaW1pbmF0ZURlYWRDb2RlSW1wbChtX3Byb2MpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBzaW1wbGlmeVNTQSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
bV9wcm9jLm9wdExldmVsKCkgPj0gMikgewotICAgICAgICAgICAgICAgIG1fcHJvYy5yZXNldFZh
bHVlT3duZXJzKCk7Ci0gICAgICAgICAgICAgICAgbV9kb21pbmF0b3JzID0gJm1fcHJvYy5kb21p
bmF0b3JzKCk7IC8vIFJlY29tcHV0ZSBpZiBuZWNlc3NhcnkuCi0gICAgICAgICAgICAgICAgbV9w
dXJlQ1NFLmNsZWFyKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBtX3Byb2MuYmxvY2tzSW5QcmVPcmRlcigpKSB7Ci0gICAgICAgICAgICAg
ICAgbV9ibG9jayA9IGJsb2NrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZv
ciAobV9pbmRleCA9IDA7IG1faW5kZXggPCBibG9jay0+c2l6ZSgpOyArK21faW5kZXgpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKEIzUmVkdWNlU3RyZW5ndGhJbnRlcm5hbDo6dmVyYm9zZSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiTG9va2luZyBhdCAiLCAqYmxvY2ssICIgIyIsIG1faW5kZXgsICI6ICIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVlcER1bXAobV9wcm9jLCBibG9jay0+YXQobV9pbmRl
eCkpLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBt
X3ZhbHVlID0gbV9ibG9jay0+YXQobV9pbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFs
dWUtPnBlcmZvcm1TdWJzdGl0dXRpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgcmVkdWNlVmFs
dWVTdHJlbmd0aCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9wcm9jLm9wdExldmVsKCkg
Pj0gMikKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VJZlJlZHVuZGFudCgpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKG1f
YmxvY2spOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtX2NoYW5nZWRDRkcgfD0gbV9i
bG9ja0luc2VydGlvblNldC5leGVjdXRlKCk7Ci0gICAgICAgICAgICBoYW5kbGVDaGFuZ2VkQ0ZH
SWZOZWNlc3NhcnkoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmVzdWx0IHw9IG1fY2hh
bmdlZDsKLSAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkICYmIG1fcHJvYy5vcHRMZXZlbCgpID49
IDIpOwotICAgICAgICAKLSAgICAgICAgaWYgKG1fcHJvYy5vcHRMZXZlbCgpIDwgMikgewotICAg
ICAgICAgICAgbV9jaGFuZ2VkQ0ZHID0gZmFsc2U7Ci0gICAgICAgICAgICBzaW1wbGlmeUNGRygp
OwotICAgICAgICAgICAgaGFuZGxlQ2hhbmdlZENGR0lmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotcHJpdmF0ZToK
LSAgICB2b2lkIHJlZHVjZVZhbHVlU3RyZW5ndGgoKQotICAgIHsKLSAgICAgICAgc3dpdGNoICht
X3ZhbHVlLT5vcGNvZGUoKSkgewotICAgICAgICBjYXNlIE9wYXF1ZToKLSAgICAgICAgICAgIC8v
IFR1cm4gdGhpczogT3BhcXVlKE9wYXF1ZSh2YWx1ZSkpCi0gICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IE9wYXF1ZSh2YWx1ZSkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bj
b2RlKCkgPT0gT3BhcXVlKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eSht
X3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFkZDoKLSAg
ICAgICAgICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBBZGQgJiYgbV92YWx1ZS0+aXNJ
bnRlZ2VyKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFkZChBZGQodmFsdWUs
IGNvbnN0YW50MSksIGNvbnN0YW50MikKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEFk
ZCh2YWx1ZSwgY29uc3RhbnQxICsgY29uc3RhbnQyKQotICAgICAgICAgICAgICAgIFZhbHVlKiBu
ZXdTdW0gPSBtX3ZhbHVlLT5jaGlsZCgxKS0+YWRkQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5j
aGlsZCgwKS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgIGlmIChuZXdTdW0pIHsKLSAgICAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUobV9pbmRleCwgbmV3U3Vt
KTsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGls
ZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0g
bmV3U3VtOwotICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBBZGQoQWRkKHZhbHVlLCBjb25zdGFudCksIG90
aGVyVmFsdWUpCi0gICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBZGQoQWRkKHZhbHVlLCBv
dGhlclZhbHVlKSwgY29uc3RhbnQpCi0gICAgICAgICAgICAgICAgaWYgKCFtX3ZhbHVlLT5jaGls
ZCgxKS0+aGFzSW50KCkgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5oYXNJbnQoKSkg
ewotICAgICAgICAgICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIFZhbHVlKiBjb25zdGFudCA9IG1fdmFsdWUt
PmNoaWxkKDApLT5jaGlsZCgxKTsKLSAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG90aGVyVmFs
dWUgPSBtX3ZhbHVlLT5jaGlsZCgxKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjb3Vs
ZCBjcmVhdGUgZHVwbGljYXRlIGNvZGUgaWYgQWRkKHZhbHVlLCBjb25zdGFudCkgaXMgdXNlZCBl
bHNld2hlcmUuCi0gICAgICAgICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIHdlIGFscmVhZHkgbW9k
ZWwgYWRkaW5nIGEgY29uc3RhbnQgYXMgaWYgaXQgd2FzIGZyZWUgaW4gb3RoZXIgcGxhY2VzCi0g
ICAgICAgICAgICAgICAgICAgIC8vIHNvIGxldCdzIGp1c3Qgcm9sbCB3aXRoIGl0LiBUaGUgYWx0
ZXJuYXRpdmUgd291bGQgbWVhbiBoYXZpbmcgdG8gZG8gZ29vZCB1c2UKLSAgICAgICAgICAgICAg
ICAgICAgLy8gY291bnRzLCB3aGljaCByZWR1Y2VTdHJlbmd0aCgpIGN1cnJlbnRseSBkb2Vzbid0
IGhhdmUuCi0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbmRleCwgQWRkLCBtX3ZhbHVlLT5vcmlnaW4oKSwgdmFsdWUs
IG90aGVyVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgxKSA9IGNv
bnN0YW50OwotICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQWRkKG90aGVyVmFsdWUsIEFkZCh2
YWx1ZSwgY29uc3RhbnQpKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBZGQoQWRkKHZhbHVl
LCBvdGhlclZhbHVlKSwgY29uc3RhbnQpCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+aXNJbnRl
Z2VyKCkKLSAgICAgICAgICAgICAgICAmJiAhbV92YWx1ZS0+Y2hpbGQoMCktPmhhc0ludCgpCi0g
ICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPm9wY29kZSgpID09IEFkZAotICAg
ICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgxKS0+aGFzSW50KCkpIHsK
LSAgICAgICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQo
MCk7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMSkt
PmNoaWxkKDEpOwotICAgICAgICAgICAgICAgIFZhbHVlKiBvdGhlclZhbHVlID0gbV92YWx1ZS0+
Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBjcmVhdGVzIGEgZHVwbGljYXRlIGFk
ZC4gVGhhdCdzIGRhbmdlcm91cyBidXQgcHJvYmFibHkgZmluZSwgc2VlIGFib3ZlLgotICAgICAg
ICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0KLSAgICAgICAgICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgs
IEFkZCwgbV92YWx1ZS0+b3JpZ2luKCksIHZhbHVlLCBvdGhlclZhbHVlKTsKLSAgICAgICAgICAg
ICAgICBtX3ZhbHVlLT5jaGlsZCgxKSA9IGNvbnN0YW50OwotICAgICAgICAgICAgICAgIG1fY2hh
bmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQWRkKGNvbnN0YW50MSwgY29uc3Rh
bnQyKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgKyBjb25zdGFudDIKLSAg
ICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnRBZGQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+YWRk
Q29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpIHsKLSAgICAgICAgICAgICAgICBy
ZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0YW50QWRkKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRlZ2VyIEFkZCh2
YWx1ZSwgdmFsdWUpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNobCh2YWx1ZSwgMSkKLSAg
ICAgICAgICAgIC8vIFRoaXMgaXMgYSB1c2VmdWwgY2Fub25pY2FsaXphdGlvbi4gSXQncyBub3Qg
bWVhbnQgdG8gYmUgYSBzdHJlbmd0aCByZWR1Y3Rpb24uCi0gICAgICAgICAgICBpZiAobV92YWx1
ZS0+aXNJbnRlZ2VyKCkgJiYgbV92YWx1ZS0+Y2hpbGQoMCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkp
IHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAg
ICAgICBtX3Byb2MuYWRkPFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgIFNobCwgbV92
YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLAotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4obV9pbmRleCwgbV92YWx1ZS0+
b3JpZ2luKCksIDEpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQWRkKHZhbHVlLCB6ZXJvKQotICAgICAgICAgICAg
Ly8gSW50byBhbiBJZGVudGl0eS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBBZGRp
dGlvbiBpcyBzdWJ0bGUgd2l0aCBkb3VibGVzLiBaZXJvIGlzIG5vdCB0aGUgbmV1dHJhbCB2YWx1
ZSwgbmVnYXRpdmUgemVybyBpczoKLSAgICAgICAgICAgIC8vICAgIDAgKyAwID0gMAotICAgICAg
ICAgICAgLy8gICAgMCArIC0wID0gMAotICAgICAgICAgICAgLy8gICAgLTAgKyAwID0gMAotICAg
ICAgICAgICAgLy8gICAgLTAgKyAtMCA9IC0wCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hp
bGQoMSktPmlzSW50KDApIHx8IG1fdmFsdWUtPmNoaWxkKDEpLT5pc05lZ2F0aXZlWmVybygpKSB7
Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
IChtX3ZhbHVlLT5pc0ludGVnZXIoKSkgewotICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczog
SW50ZWdlciBBZGQodmFsdWUsIE5lZyhvdGhlclZhbHVlKSkKLSAgICAgICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IFN1Yih2YWx1ZSwgb3RoZXJWYWx1ZSkKLSAgICAgICAgICAgICAgICBpZiAobV92
YWx1ZS0+Y2hpbGQoMSktPm9wY29kZSgpID09IE5lZykgewotICAgICAgICAgICAgICAgICAgICBy
ZXBsYWNlV2l0aE5ldzxWYWx1ZT4oU3ViLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hp
bGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhp
czogSW50ZWdlciBBZGQoTmVnKHZhbHVlKSwgb3RoZXJWYWx1ZSkKLSAgICAgICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IFN1YihvdGhlclZhbHVlLCB2YWx1ZSkKLSAgICAgICAgICAgICAgICBpZiAo
bV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IE5lZykgewotICAgICAgICAgICAgICAgICAg
ICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oU3ViLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+
Y2hpbGQoMSksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFR1cm4g
dGhpczogSW50ZWdlciBBZGQoU3ViKDAsIHZhbHVlKSwgLTEpCi0gICAgICAgICAgICAgICAgLy8g
SW50byB0aGlzOiBCaXRYb3IodmFsdWUsIC0xKQotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVl
LT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU3ViCi0gICAgICAgICAgICAgICAgICAgICYmIG1fdmFs
dWUtPmNoaWxkKDEpLT5pc0ludCgtMSkKLSAgICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+
Y2hpbGQoMCktPmNoaWxkKDApLT5pc0ludCgwKSkgewotICAgICAgICAgICAgICAgICAgICByZXBs
YWNlV2l0aE5ldzxWYWx1ZT4oQml0WG9yLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hp
bGQoMCktPmNoaWxkKDEpLCBtX3ZhbHVlLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChoYW5kbGVN
dWxEaXN0cmlidXRpdml0eSgpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTdWI6Ci0gICAgICAg
ICAgICAvLyBUdXJuIHRoaXM6IFN1Yihjb25zdGFudDEsIGNvbnN0YW50MikKLSAgICAgICAgICAg
IC8vIEludG8gdGhpczogY29uc3RhbnQxIC0gY29uc3RhbnQyCi0gICAgICAgICAgICBpZiAoVmFs
dWUqIGNvbnN0YW50U3ViID0gbV92YWx1ZS0+Y2hpbGQoMCktPnN1YkNvbnN0YW50KG1fcHJvYywg
bV92YWx1ZS0+Y2hpbGQoMSkpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1
ZShjb25zdGFudFN1Yik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5pc0ludGVnZXIoKSkgewotICAgICAgICAgICAgICAg
IC8vIFR1cm4gdGhpczogU3ViKHZhbHVlLCBjb25zdGFudCkKLSAgICAgICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IEFkZCh2YWx1ZSwgLWNvbnN0YW50KQotICAgICAgICAgICAgICAgIGlmIChWYWx1
ZSogbmVnYXRlZENvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMSktPm5lZ0NvbnN0YW50KG1fcHJv
YykpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUobV9p
bmRleCwgbmVnYXRlZENvbnN0YW50KTsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhO
ZXc8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgQWRkLCBtX3ZhbHVlLT5vcmlnaW4o
KSwgbV92YWx1ZS0+Y2hpbGQoMCksIG5lZ2F0ZWRDb25zdGFudCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAvLyBUdXJuIHRoaXM6IFN1YigwLCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IE5lZyh2YWx1ZSkKLSAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQo
MCktPmlzSW50KDApKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVl
PihOZWcsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgxKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8v
IFR1cm4gdGhpczogU3ViKHZhbHVlLCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IDAKLSAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCkgPT0gbV92YWx1ZS0+
Y2hpbGQoMSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShtX3By
b2MuYWRkSW50Q29uc3RhbnQobV92YWx1ZSwgMCkpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFN1
Yih2YWx1ZSwgTmVnKG90aGVyVmFsdWUpKQotICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczog
QWRkKHZhbHVlLCBvdGhlclZhbHVlKQotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGls
ZCgxKS0+b3Bjb2RlKCkgPT0gTmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRo
TmV3PFZhbHVlPihBZGQsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92
YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGhhbmRsZU11bERpc3RyaWJ1
dGl2aXR5KCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIE5lZzoKLSAgICAg
ICAgICAgIC8vIFR1cm4gdGhpczogTmVnKGNvbnN0YW50KQotICAgICAgICAgICAgLy8gSW50byB0
aGlzOiAtY29uc3RhbnQKLSAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3ZhbHVl
LT5jaGlsZCgwKS0+bmVnQ29uc3RhbnQobV9wcm9jKSkgewotICAgICAgICAgICAgICAgIHJlcGxh
Y2VXaXRoTmV3VmFsdWUoY29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE5lZyhOZWco
dmFsdWUpKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZQotICAgICAgICAgICAgaWYg
KG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBOZWcpIHsKLSAgICAgICAgICAgICAgICBy
ZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtX3ZhbHVl
LT5pc0ludGVnZXIoKSkgewotICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBO
ZWcoU3ViKHZhbHVlLCBvdGhlclZhbHVlKSkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6
IFN1YihvdGhlclZhbHVlLCB2YWx1ZSkKLSAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hp
bGQoMCktPm9wY29kZSgpID09IFN1YikgewotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0
aE5ldzxWYWx1ZT4oU3ViLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNo
aWxkKDEpLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBUdXJuIHRo
aXM6IEludGVnZXIgTmVnKE11bCh2YWx1ZSwgYykpCi0gICAgICAgICAgICAgICAgLy8gSW50byB0
aGlzOiBNdWwodmFsdWUsIC1jKSwgYXMgbG9uZyBhcyAtYyBkb2VzIG5vdCBvdmVyZmxvdwotICAg
ICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gTXVsICYmIG1f
dmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaW50NjRfdCBmYWN0b3IgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmFzSW50KCk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT50eXBlKCkgPT0gSW50MzIgJiYgZmFj
dG9yICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBWYWx1ZSogbmV3RmFjdG9yID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENv
bnN0MzJWYWx1ZT4obV9pbmRleCwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5vcmlnaW4o
KSwgLWZhY3Rvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1
ZT4oTXVsLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLCBu
ZXdGYWN0b3IpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fdmFsdWUtPnR5cGUo
KSA9PSBJbnQ2NCAmJiBmYWN0b3IgIT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWlu
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdGYWN0b3IgPSBtX2luc2Vy
dGlvblNldC5pbnNlcnQ8Q29uc3Q2NFZhbHVlPihtX2luZGV4LCBtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMSktPm9yaWdpbigpLCAtZmFjdG9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
cGxhY2VXaXRoTmV3PFZhbHVlPihNdWwsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGls
ZCgwKS0+Y2hpbGQoMCksIG5ld0ZhY3Rvcik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgY2FzZSBNdWw6Ci0gICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7Ci0KLSAg
ICAgICAgICAgIC8vIFR1cm4gdGhpczogTXVsKGNvbnN0YW50MSwgY29uc3RhbnQyKQotICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgKiBjb25zdGFudDIKLSAgICAgICAgICAgIGlm
IChWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+bXVsQ29uc3RhbnQobV9wcm9jLCBt
X3ZhbHVlLT5jaGlsZCgxKSkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVl
KHZhbHVlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKSkgewotICAgICAgICAgICAgICAg
IGludDY0X3QgZmFjdG9yID0gbV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50KCk7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2YWx1ZSwgMCkKLSAgICAgICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IDAKLSAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgZG8gdGhp
cyBmb3IgZG91YmxlcyBiZWNhdXNlIHRoYXQncyB3cm9uZy4gRm9yIGV4YW1wbGUsIC0xICogMAot
ICAgICAgICAgICAgICAgIC8vIGFuZCAxICogMCB5aWVsZCBkaWZmZXJlbnQgcmVzdWx0cy4KLSAg
ICAgICAgICAgICAgICBpZiAoIWZhY3RvcikgewotICAgICAgICAgICAgICAgICAgICByZXBsYWNl
V2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBN
dWwodmFsdWUsIDEpCi0gICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZQotICAgICAg
ICAgICAgICAgIGlmIChmYWN0b3IgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICByZXBsYWNl
V2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBN
dWwodmFsdWUsIC0xKQotICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogTmVnKHZhbHVlKQot
ICAgICAgICAgICAgICAgIGlmIChmYWN0b3IgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAg
cmVwbGFjZVdpdGhOZXc8VmFsdWU+KE5lZywgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNo
aWxkKDApKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTXVsKHZhbHVl
LCBjb25zdGFudCkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNobCh2YWx1ZSwgbG9n
Mihjb25zdGFudCkpCi0gICAgICAgICAgICAgICAgaWYgKGhhc09uZUJpdFNldChmYWN0b3IpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNoaWZ0QW1vdW50ID0gV1RGOjpmYXN0TG9n
MihzdGF0aWNfY2FzdDx1aW50NjRfdD4oZmFjdG9yKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJl
cGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3Byb2MuYWRkPFZh
bHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGwsIG1fdmFsdWUtPm9yaWdpbigp
LCBtX3ZhbHVlLT5jaGlsZCgwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIHNoaWZ0QW1vdW50KSkpOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNEb3VibGUoKSkgewotICAgICAgICAgICAgICAg
IGRvdWJsZSBmYWN0b3IgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+YXNEb3VibGUoKTsKLQotICAgICAg
ICAgICAgICAgIC8vIFR1cm4gdGhpczogTXVsKHZhbHVlLCAxKQotICAgICAgICAgICAgICAgIC8v
IEludG8gdGhpczogdmFsdWUKLSAgICAgICAgICAgICAgICBpZiAoZmFjdG9yID09IDEpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmlzSW50ZWdlcigpKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRlZ2VyIE11bCh2YWx1ZSwgTmVnKG90aGVyVmFsdWUp
KQotICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogTmVnKE11bCh2YWx1ZSwgb3RoZXJWYWx1
ZSkpCi0gICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5vcGNvZGUoKSA9PSBO
ZWcpIHsKLSAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG5ld011bCA9IG1faW5zZXJ0aW9uU2V0
Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgTXVsLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+
Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPihOZWcsIG1fdmFsdWUtPm9yaWdpbigpLCBuZXdNdWwp
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRlZ2VyIE11bChOZWcodmFsdWUpLCBvdGhlclZhbHVl
KQotICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogTmVnKE11bCh2YWx1ZSwgdmFsdWUyKSkK
LSAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IE5lZykg
ewotICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbmV3TXVsID0gbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0PFZhbHVlPihtX2luZGV4LCBNdWwsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGls
ZCgwKS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICAgICAg
cmVwbGFjZVdpdGhOZXc8VmFsdWU+KE5lZywgbV92YWx1ZS0+b3JpZ2luKCksIG5ld011bCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBEaXY6Ci0gICAgICAgICAg
ICAvLyBUdXJuIHRoaXM6IERpdihjb25zdGFudDEsIGNvbnN0YW50MikKLSAgICAgICAgICAgIC8v
IEludG8gdGhpczogY29uc3RhbnQxIC8gY29uc3RhbnQyCi0gICAgICAgICAgICAvLyBOb3RlIHRo
YXQgdGhpcyB1c2VzIERpdjxDaGlsbD4gc2VtYW50aWNzLiBUaGF0J3MgZmluZSwgYmVjYXVzZSB0
aGUgcnVsZXMgZm9yIERpdgotICAgICAgICAgICAgLy8gYXJlIHN0cmljdGx5IHdlYWtlcjogaXQg
aGFzIGNvcm5lciBjYXNlcyB3aGVyZSBpdCdzIGFsbG93ZWQgdG8gZG8gYW55dGhpbmcgaXQKLSAg
ICAgICAgICAgIC8vIGxpa2VzLgotICAgICAgICAgICAgaWYgKHJlcGxhY2VXaXRoTmV3VmFsdWUo
bV92YWx1ZS0+Y2hpbGQoMCktPmRpdkNvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkp
KSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNo
aWxkKDEpLT5oYXNJbnQoKSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+Y2hp
bGQoMSktPmFzSW50KCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIC0xOgotICAgICAgICAgICAg
ICAgICAgICAvLyBUdXJuIHRoaXM6IERpdih2YWx1ZSwgLTEpCi0gICAgICAgICAgICAgICAgICAg
IC8vIEludG8gdGhpczogTmVnKHZhbHVlKQotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0
aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmFkZDxWYWx1ZT4oTmVn
LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCkpKTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIFR1cm4gdGhpczogRGl2KHZhbHVlLCAwKQotICAgICAgICAgICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IDAKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIGRvIHRoaXMgYmVjYXVz
ZSBpdCdzIHByZWNpc2VseSBjb3JyZWN0IGZvciBDaGlsbERpdiBhbmQgZm9yIERpdiB3ZQotICAg
ICAgICAgICAgICAgICAgICAvLyBhcmUgYWxsb3dlZCB0byBkbyB3aGF0ZXZlciB3ZSB3YW50Lgot
ICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDEp
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIDE6
Ci0gICAgICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRGl2KHZhbHVlLCAxKQotICAgICAg
ICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHZhbHVlCi0gICAgICAgICAgICAgICAgICAgIHJl
cGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAg
IC8vIFBlcmZvcm0gc3VwZXIgY29tcHJlaGVuc2l2ZSBzdHJlbmd0aCByZWR1Y3Rpb24gb2YgZGl2
aXNpb24uIEN1cnJlbnRseSB3ZQotICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IGRvIHRoaXMg
Zm9yIDMyLWJpdCBkaXZpc2lvbnMsIHNpbmNlIHdlIG5lZWQgYSBoaWdoIG11bHRpcGx5Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIG9wZXJhdGlvbi4gV2UgZW11bGF0ZSBpdCB1c2luZyA2NC1iaXQg
bXVsdGlwbHkuIFdlIGNhbid0IGVtdWxhdGUgNjQtYml0Ci0gICAgICAgICAgICAgICAgICAgIC8v
IGhpZ2ggbXVsdGlwbHkgd2l0aCBhIDEyOC1iaXQgbXVsdGlwbHkgYmVjYXVzZSB3ZSBkb24ndCBo
YXZlIGEgMTI4LWJpdAotICAgICAgICAgICAgICAgICAgICAvLyBtdWx0aXBseS4gV2UgY291bGQg
ZG8gaXQgd2l0aCBhIHBhdGNocG9pbnQgaWYgd2UgY2FyZWQgYmFkbHkgZW5vdWdoLgotCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT50eXBlKCkgIT0gSW50MzIpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChtX3Byb2Mub3B0TGV2ZWwoKSA8IDIpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGRpdmlzb3IgPSBtX3ZhbHVl
LT5jaGlsZCgxKS0+YXNJbnQzMigpOwotICAgICAgICAgICAgICAgICAgICBEaXZpc2lvbk1hZ2lj
PGludDMyX3Q+IG1hZ2ljID0gY29tcHV0ZURpdmlzaW9uTWFnaWMoZGl2aXNvcik7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgLy8gUGVyZm9ybSB0aGUgImhpZ2giIG11bHRpcGxpY2F0aW9uLiBXZSBk
byBpdCBqdXN0IHRvIGdldCB0aGUgaGlnaCBiaXRzLgotICAgICAgICAgICAgICAgICAgICAvLyBU
aGlzIGlzIHNvcnQgb2YgbGlrZSBtdWx0aXBseWluZyBieSB0aGUgcmVjaXByb2NhbCwganVzdCBt
b3JlIGduYXJseS4gSXQncwotICAgICAgICAgICAgICAgICAgICAvLyBmcm9tIEhhY2tlcidzIERl
bGlnaHQgYW5kIEkgZG9uJ3QgY2xhaW0gdG8gdW5kZXJzdGFuZCBpdC4KLSAgICAgICAgICAgICAg
ICAgICAgVmFsdWUqIG1hZ2ljUXVvdGllbnQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+
KAotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgVHJ1bmMsIG1fdmFsdWUtPm9yaWdp
bigpLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVl
PigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBaU2hyLCBtX3ZhbHVlLT5v
cmlnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBNdWws
IG1fdmFsdWUtPm9yaWdpbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9pbmRleCwgU0V4dDMyLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQo
MCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnQ8Q29uc3Q2NFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
aW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCBtYWdpYy5tYWdpY011bHRpcGxpZXIpKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVl
PigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgbV92YWx1ZS0+b3Jp
Z2luKCksIDMyKSkpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChkaXZpc29yID4gMCAmJiBt
YWdpYy5tYWdpY011bHRpcGxpZXIgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYWdp
Y1F1b3RpZW50ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2luZGV4LCBBZGQsIG1fdmFsdWUtPm9yaWdpbigpLCBtYWdpY1F1b3Rp
ZW50LCBtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGRpdmlzb3IgPCAwICYmIG1hZ2ljLm1hZ2ljTXVsdGlwbGllciA+IDAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hZ2ljUXVvdGllbnQgPSBtX2luc2VydGlvblNl
dC5pbnNlcnQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIFN1
YiwgbV92YWx1ZS0+b3JpZ2luKCksIG1hZ2ljUXVvdGllbnQsIG1fdmFsdWUtPmNoaWxkKDApKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAobWFnaWMuc2hp
ZnQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYWdpY1F1b3RpZW50ID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2lu
ZGV4LCBTU2hyLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbWFnaWNRdW90aWVudCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPigKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCks
IG1hZ2ljLnNoaWZ0KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgcmVwbGFjZVdpdGhJZGVudGl0eSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRl
eCwgQWRkLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbWFnaWNRdW90aWVudCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBaU2hyLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbWFn
aWNRdW90aWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4oKSwgMzEpKSkpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFVEaXY6Ci0g
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFVEaXYoY29uc3RhbnQxLCBjb25zdGFudDIpCi0gICAg
ICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50MSAvIGNvbnN0YW50MgotICAgICAgICAgICAg
aWYgKHJlcGxhY2VXaXRoTmV3VmFsdWUobV92YWx1ZS0+Y2hpbGQoMCktPnVEaXZDb25zdGFudCht
X3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKLSAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG1fdmFsdWUtPmNoaWxkKDEpLT5hc0ludCgpKSB7Ci0gICAgICAgICAgICAg
ICAgY2FzZSAwOgotICAgICAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFVEaXYodmFsdWUs
IDApCi0gICAgICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogMAotICAgICAgICAgICAgICAg
ICAgICAvLyBXZSBjYW4gZG8gd2hhdGV2ZXIgd2Ugd2FudCBoZXJlIHNvIHdlIG1pZ2h0IGFzIHdl
bGwgZG8gdGhlIGNoaWxsIHRoaW5nLAotICAgICAgICAgICAgICAgICAgICAvLyBpbiBjYXNlIHdl
IGFkZCBjaGlsbCB2ZXJzaW9ucyBvZiBVRGl2IGluIHRoZSBmdXR1cmUuCi0gICAgICAgICAgICAg
ICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBVRGl2KHZhbHVlLCAxKQotICAgICAgICAgICAgICAgICAg
ICAvLyBJbnRvIHRoaXM6IHZhbHVlCi0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRl
bnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIGRvIGNvbXByZWhlbnNpdmUgc3RyZW5ndGggcmVkdWN0aW9uIGZvciB1bnNpZ25lZCBu
dW1iZXJzLiBMaWtlbHksCi0gICAgICAgICAgICAgICAgICAgIC8vIHdlIHdpbGwganVzdCB3YW50
IGNvcHkgd2hhdCBsbHZtIGRvZXMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjQ4MDkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBNb2Q6
Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE1vZChjb25zdGFudDEsIGNvbnN0YW50MikKLSAg
ICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxIC8gY29uc3RhbnQyCi0gICAgICAgICAg
ICAvLyBOb3RlIHRoYXQgdGhpcyB1c2VzIE1vZDxDaGlsbD4gc2VtYW50aWNzLgotICAgICAgICAg
ICAgaWYgKHJlcGxhY2VXaXRoTmV3VmFsdWUobV92YWx1ZS0+Y2hpbGQoMCktPm1vZENvbnN0YW50
KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAgICAgLy8gTW9kdWxvIGJ5IGNvbnN0YW50IGlzIG1vcmUgZWZmaWNpZW50IGlmIHdl
IHR1cm4gaXQgaW50byBEaXYsIGFuZCB0aGVuIGxldCBEaXYgZ2V0Ci0gICAgICAgICAgICAvLyBv
cHRpbWl6ZWQuCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpKSB7
Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQoKSkgewot
ICAgICAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlz
OiBNb2QodmFsdWUsIDApCi0gICAgICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogMAotICAg
ICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGNvcnJlY3QgYWNjb3JkaW5nIHRvIENoaWxsTW9k
IHNlbWFudGljcy4KLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3Zh
bHVlLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fcHJvYy5vcHRMZXZlbCgp
IDwgMikKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBNb2QoTiwgRCkKLSAgICAgICAg
ICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTdWIoTiwgTXVsKERpdihOLCBEKSwgRCkpCi0gICAg
ICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBzcGVl
ZC11cCBiZWNhdXNlIHdlIHVzZSBvdXIgZXhpc3RpbmcgRGl2IG9wdGltaXphdGlvbnMuCi0gICAg
ICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgIC8vIEhlcmUncyBhbiBlYXNp
ZXIgd2F5IHRvIGxvb2sgYXQgaXQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICBOICUgRCA9
IE4gLSBOIC8gRCAqIEQKLSAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAg
ICAgLy8gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3Qgd29yayBmb3IgRCA9IDAgYW5kIENoaWxsTW9k
LiBUaGUgZXhwZWN0ZWQgcmVzdWx0IGlzIDAuCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoYXQn
cyB3aHkgd2UgaGF2ZSBhIHNwZWNpYWwtY2FzZSBhYm92ZS4KLSAgICAgICAgICAgICAgICAgICAg
Ly8gICAgIFggJSAwID0gWCAtIFggLyAwICogMCA9IFggICAgIChzaG91bGQgYmUgMCkKLSAgICAg
ICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBkb2VzIHdvcmsg
Zm9yIHRoZSBEID0gLTEgc3BlY2lhbCBjYXNlLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAg
LTJeMzEgJSAtMSA9IC0yXjMxIC0gLTJeMzEgLyAtMSAqIC0xCi0gICAgICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgICAgID0gLTJeMzEgLSAtMl4zMSAqIC0xCi0gICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgICAgID0gLTJeMzEgLSAtMl4zMQotICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgICA9IDAKLQotICAgICAgICAgICAgICAgICAgICBLaW5kIGRpdktp
bmQgPSBEaXY7Ci0gICAgICAgICAgICAgICAgICAgIGRpdktpbmQuc2V0SXNDaGlsbChtX3ZhbHVl
LT5pc0NoaWxsKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHko
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIFN1YiwgbV92YWx1ZS0+b3JpZ2lu
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgTXVsLCBtX3ZhbHVlLT5vcmln
aW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0PFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgs
IGRpdktpbmQsIG1fdmFsdWUtPm9yaWdpbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMSkpKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgY2FzZSBVTW9kOgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBVTW9kKGNvbnN0YW50
MSwgY29uc3RhbnQyKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgLyBjb25z
dGFudDIKLSAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUobV92YWx1ZS0+Y2hpbGQoMCkt
PnVNb2RDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSk7Ci0gICAgICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGRvIHdoYXQgd2UgZG8gZm9yIE1vZCBzaW5jZSB0aGUgc2FtZSBw
cmluY2lwbGUgYXBwbGllcyBoZXJlLgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDgwOQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgY2FzZSBCaXRBbmQ6Ci0gICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7Ci0KLSAg
ICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKGNvbnN0YW50MSwgY29uc3RhbnQyKQotICAg
ICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgJiBjb25zdGFudDIKLSAgICAgICAgICAg
IGlmIChWYWx1ZSogY29uc3RhbnRCaXRBbmQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Yml0QW5kQ29u
c3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpIHsKLSAgICAgICAgICAgICAgICByZXBs
YWNlV2l0aE5ld1ZhbHVlKGNvbnN0YW50Qml0QW5kKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoQml0QW5k
KHZhbHVlLCBjb25zdGFudDEpLCBjb25zdGFudDIpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6
IEJpdEFuZCh2YWx1ZSwgY29uc3RhbnQxICYgY29uc3RhbnQyKS4KLSAgICAgICAgICAgIGlmICht
X3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0QW5kKSB7Ci0gICAgICAgICAgICAgICAg
VmFsdWUqIG5ld0NvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMSktPmJpdEFuZENvbnN0YW50KG1f
cHJvYywgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICBpZiAo
bmV3Q29uc3RhbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
VmFsdWUobV9pbmRleCwgbmV3Q29uc3RhbnQpOwotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVl
LT5jaGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAg
ICAgICAgbV92YWx1ZS0+Y2hpbGQoMSkgPSBuZXdDb25zdGFudDsKLSAgICAgICAgICAgICAgICAg
ICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKHZhbHVlWCwgdmFsdWVYKQotICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZVguCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hp
bGQoMCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0
aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQodmFsdWUsIHpl
cm8tY29uc3RhbnQpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHplcm8tY29uc3RhbnQuCi0g
ICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50KDApKSB7Ci0gICAgICAgICAg
ICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgxKSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczog
Qml0QW5kKHZhbHVlLCBhbGwtb25lcykKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogdmFsdWUu
Ci0gICAgICAgICAgICBpZiAoKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQ2NCAmJiBtX3ZhbHVlLT5j
aGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpKSkKLSAg
ICAgICAgICAgICAgICB8fCAobV92YWx1ZS0+dHlwZSgpID09IEludDMyICYmIG1fdmFsdWUtPmNo
aWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpKSkgewot
ICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBU
dXJuIHRoaXM6IEJpdEFuZCg2NC1iaXQgdmFsdWUsIDMyIG9uZXMpCi0gICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IFpFeHQzMihUcnVuYyg2NC1iaXQgdmFsdWUpKQotICAgICAgICAgICAgaWYgKG1f
dmFsdWUtPmNoaWxkKDEpLT5pc0ludDY0KDB4ZmZmZmZmZmZsbHUpKSB7Ci0gICAgICAgICAgICAg
ICAgVmFsdWUqIG5ld1ZhbHVlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAg
ICAgICAgICAgICAgICAgbV9pbmRleCwgWkV4dDMyLCBtX3ZhbHVlLT5vcmlnaW4oKSwKLSAgICAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBUcnVu
YywgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApKSk7Ci0gICAgICAgICAgICAg
ICAgcmVwbGFjZVdpdGhJZGVudGl0eShuZXdWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKFNFeHQ4
KHZhbHVlKSwgbWFzaykgd2hlcmUgKG1hc2sgJiAweGZmZmZmZjAwKSA9PSAwCi0gICAgICAgICAg
ICAvLyBJbnRvIHRoaXM6IEJpdEFuZCh2YWx1ZSwgbWFzaykKLSAgICAgICAgICAgIGlmIChtX3Zh
bHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU0V4dDggJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmhh
c0ludDMyKCkKLSAgICAgICAgICAgICAgICAmJiAhKG1fdmFsdWUtPmNoaWxkKDEpLT5hc0ludDMy
KCkgJiAweGZmZmZmZjAwKSkgewotICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0g
bV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIC8vIFR1cm4gdGhpczogQml0QW5kKFNFeHQxNih2YWx1ZSksIG1hc2spIHdoZXJlIChtYXNr
ICYgMHhmZmZmMDAwMCkgPT0gMAotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCaXRBbmQodmFs
dWUsIG1hc2spCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09
IFNFeHQxNiAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50MzIoKQotICAgICAgICAgICAgICAg
ICYmICEobV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50MzIoKSAmIDB4ZmZmZjAwMDApKSB7Ci0gICAg
ICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQo
MCk7Ci0gICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQo
U0V4dDMyKHZhbHVlKSwgbWFzaykgd2hlcmUgKG1hc2sgJiAweGZmZmZmZmZmMDAwMDAwMDApID09
IDAKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0QW5kKFpFeHQzMih2YWx1ZSksIG1hc2sp
Ci0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFNFeHQzMiAm
JiBtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50MzIoKQotICAgICAgICAgICAgICAgICYmICEobV92
YWx1ZS0+Y2hpbGQoMSktPmFzSW50MzIoKSAmIDB4ZmZmZmZmZmYwMDAwMDAwMGxsdSkpIHsKLSAg
ICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxW
YWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIFpFeHQzMiwgbV92YWx1ZS0+b3Jp
Z2luKCksCi0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSwg
bV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICBtX2NoYW5nZWQg
PSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZChPcCh2YWx1ZSwgY29uc3RhbnQxKSwgY29uc3RhbnQy
KQotICAgICAgICAgICAgLy8gICAgIHdoZXJlICEoY29uc3RhbnQxICYgY29uc3RhbnQyKQotICAg
ICAgICAgICAgLy8gICAgICAgYW5kIE9wIGlzIEJpdE9yIG9yIEJpdFhvcgotICAgICAgICAgICAg
Ly8gaW50byB0aGlzOiBCaXRBbmQodmFsdWUsIGNvbnN0YW50MikKLSAgICAgICAgICAgIGlmICht
X3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKLSAgICAgICAgICAgICAgICBpbnQ2NF90IGNv
bnN0YW50MiA9IG1fdmFsdWUtPmNoaWxkKDEpLT5hc0ludCgpOwotICAgICAgICAgICAgICAgIHN3
aXRjaCAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBCaXRPcjoKLSAgICAgICAgICAgICAgICBjYXNlIEJpdFhvcjoKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aGFzSW50KCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICYmICEobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5hc0ludCgpICYg
Y29uc3RhbnQyKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkg
PSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAv
LyBUdXJuIHRoaXM6IEJpdEFuZChCaXRYb3IoeDEsIGFsbE9uZXMpLCBCaXRYb3IoeDIsIGFsbE9u
ZXMpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdFhvcihCaXRPcih4MSwgeDIpLCBhbGxP
bmVzKQotICAgICAgICAgICAgLy8gQnkgYXBwbHlpbmcgRGUgTW9yZ2FuIGxhd3MKLSAgICAgICAg
ICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0WG9yCi0gICAgICAgICAg
ICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPm9wY29kZSgpID09IEJpdFhvcgotICAgICAgICAg
ICAgICAgICYmICgobV92YWx1ZS0+dHlwZSgpID09IEludDY0Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDY0X3Q+OjptYXgoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIG1fdmFs
dWUtPmNoaWxkKDEpLT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRf
dD46Om1heCgpKSkKLSAgICAgICAgICAgICAgICAgICAgfHwgKG1fdmFsdWUtPnR5cGUoKSA9PSBJ
bnQzMgotICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxk
KDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSktPmlzSW50KHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkpKSkgewotICAgICAgICAgICAgICAg
IFZhbHVlKiBiaXRPciA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgQml0
T3IsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCksIG1fdmFs
dWUtPmNoaWxkKDEpLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8
VmFsdWU+KEJpdFhvciwgbV92YWx1ZS0+b3JpZ2luKCksIGJpdE9yLCBtX3ZhbHVlLT5jaGlsZCgx
KS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZChCaXRYb3IoeCwgYWxsT25lcyksIGMpCi0g
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdFhvcihCaXRPcih4LCB+YyksIGFsbE9uZXMpCi0g
ICAgICAgICAgICAvLyBUaGlzIGlzIGEgdmFyaWF0aW9uIG9uIHRoZSBwcmV2aW91cyBvcHRpbWl6
YXRpb24sIHRyZWF0aW5nIGMgYXMgaWYgaXQgd2VyZSBCaXRYb3IofmMsIGFsbE9uZXMpCi0gICAg
ICAgICAgICAvLyBJdCBkb2VzIG5vdCByZWR1Y2UgdGhlIG51bWJlciBvZiBvcGVyYXRpb25zLCBi
dXQgcHJvdmlkZXMgc29tZSBub3JtYWxpemF0aW9uICh3ZSB0cnkgdG8gZ2V0IEJpdFhvciBieSBh
bGxPbmVzIGF0IHRoZSBvdXRlcm1vc3QgcG9pbnQpLCBhbmQgc29tZSBjaGFuY2UgdG8gZmxvYXQg
WG9ycyB0byBhIHBsYWNlIHdoZXJlIHRoZXkgbWlnaHQgZ2V0IGVsaW1pbmF0ZWQuCi0gICAgICAg
ICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdFhvcgotICAgICAgICAg
ICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKQotICAgICAgICAgICAgICAgICYm
ICgobV92YWx1ZS0+dHlwZSgpID09IEludDY0Ci0gICAgICAgICAgICAgICAgICAgICAgICAmJiBt
X3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDY0X3Q+OjptYXgoKSkpCi0gICAgICAgICAgICAgICAgICAgIHx8IChtX3ZhbHVlLT50eXBlKCkg
PT0gSW50MzIKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5j
aGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkpKSB7
Ci0gICAgICAgICAgICAgICAgVmFsdWUqIGJpdE9yID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZh
bHVlPihtX2luZGV4LCBCaXRPciwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDAp
LT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSktPmJpdFhvckNvbnN0YW50KG1fcHJvYywgbV92
YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpKSk7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhO
ZXc8VmFsdWU+KEJpdFhvciwgbV92YWx1ZS0+b3JpZ2luKCksIGJpdE9yLCBtX3ZhbHVlLT5jaGls
ZCgwKS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEJpdE9yOgotICAgICAgICAgICAg
aGFuZGxlQ29tbXV0YXRpdml0eSgpOwotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdE9y
KGNvbnN0YW50MSwgY29uc3RhbnQyKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFu
dDEgfCBjb25zdGFudDIKLSAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnRCaXRPciA9IG1f
dmFsdWUtPmNoaWxkKDApLT5iaXRPckNvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkp
KSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudEJpdE9yKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBCaXRPcihCaXRPcih2YWx1ZSwgY29uc3RhbnQxKSwgY29uc3RhbnQyKQotICAg
ICAgICAgICAgLy8gSW50byB0aGlzOiBCaXRPcih2YWx1ZSwgY29uc3RhbnQxICYgY29uc3RhbnQy
KS4KLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0T3Ip
IHsKLSAgICAgICAgICAgICAgICBWYWx1ZSogbmV3Q29uc3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgx
KS0+Yml0T3JDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKG5ld0NvbnN0YW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydFZhbHVlKG1faW5kZXgsIG5ld0NvbnN0YW50KTsKLSAgICAgICAg
ICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQo
MCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gbmV3Q29uc3RhbnQ7
Ci0gICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdE9yKHZhbHVl
WCwgdmFsdWVYKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZVguCi0gICAgICAgICAg
ICBpZiAobV92YWx1ZS0+Y2hpbGQoMCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkpIHsKLSAgICAgICAg
ICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlz
OiBCaXRPcih2YWx1ZSwgemVyby1jb25zdGFudCkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczog
dmFsdWUuCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50KDApKSB7Ci0g
ICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogQml0T3IodmFsdWUsIGFsbC1vbmVzKQotICAgICAgICAgICAgLy8gSW50byB0aGlz
OiBhbGwtb25lcy4KLSAgICAgICAgICAgIGlmICgobV92YWx1ZS0+dHlwZSgpID09IEludDY0ICYm
IG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6
bWF4KCkpKQotICAgICAgICAgICAgICAgIHx8IChtX3ZhbHVlLT50eXBlKCkgPT0gSW50MzIgJiYg
bV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+Ojpt
YXgoKSkpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5j
aGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIC8vIFR1cm4gdGhpczogQml0T3IoQml0WG9yKHgxLCBhbGxPbmVzKSwgQml0WG9yKHgy
LCBhbGxPbmVzKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCaXRYb3IoQml0QW5kKHgxLCB4
MiksIGFsbE9uZXMpCi0gICAgICAgICAgICAvLyBCeSBhcHBseWluZyBEZSBNb3JnYW4gbGF3cwot
ICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXRYb3IKLSAg
ICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+b3Bjb2RlKCkgPT0gQml0WG9yCi0g
ICAgICAgICAgICAgICAgJiYgKChtX3ZhbHVlLT50eXBlKCkgPT0gSW50NjQKLSAgICAgICAgICAg
ICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
JiYgbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQ2NF90Pjo6bWF4KCkpKQotICAgICAgICAgICAgICAgICAgICB8fCAobV92YWx1ZS0+dHlw
ZSgpID09IEludDMyCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgw
KS0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgxKS0+
aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkpKSB7Ci0gICAgICAg
ICAgICAgICAgVmFsdWUqIGJpdEFuZCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9p
bmRleCwgQml0QW5kLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxk
KDApLCBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgIHJlcGxh
Y2VXaXRoTmV3PFZhbHVlPihCaXRYb3IsIG1fdmFsdWUtPm9yaWdpbigpLCBiaXRBbmQsIG1fdmFs
dWUtPmNoaWxkKDEpLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0T3IoQml0WG9yKHgsIGFsbE9u
ZXMpLCBjKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCaXRYb3IoQml0QW5kKHgsIH5jKSwg
YWxsT25lcykKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB2YXJpYXRpb24gb24gdGhlIHByZXZp
b3VzIG9wdGltaXphdGlvbiwgdHJlYXRpbmcgYyBhcyBpZiBpdCB3ZXJlIEJpdFhvcih+YywgYWxs
T25lcykKLSAgICAgICAgICAgIC8vIEl0IGRvZXMgbm90IHJlZHVjZSB0aGUgbnVtYmVyIG9mIG9w
ZXJhdGlvbnMsIGJ1dCBwcm92aWRlcyBzb21lIG5vcm1hbGl6YXRpb24gKHdlIHRyeSB0byBnZXQg
Qml0WG9yIGJ5IGFsbE9uZXMgYXQgdGhlIG91dGVybW9zdCBwb2ludCksIGFuZCBzb21lIGNoYW5j
ZSB0byBmbG9hdCBYb3JzIHRvIGEgcGxhY2Ugd2hlcmUgdGhleSBtaWdodCBnZXQgZWxpbWluYXRl
ZC4KLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0WG9y
Ci0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpCi0gICAgICAg
ICAgICAgICAgJiYgKChtX3ZhbHVlLT50eXBlKCkgPT0gSW50NjQKLSAgICAgICAgICAgICAgICAg
ICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50NjRfdD46Om1heCgpKSkKLSAgICAgICAgICAgICAgICAgICAgfHwgKG1fdmFs
dWUtPnR5cGUoKSA9PSBJbnQzMgotICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+
Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6
bWF4KCkpKSkpIHsKLSAgICAgICAgICAgICAgICBWYWx1ZSogYml0QW5kID0gbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBCaXRBbmQsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3Zh
bHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpLT5iaXRYb3JDb25zdGFu
dChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSkpOwotICAgICAgICAgICAgICAg
IHJlcGxhY2VXaXRoTmV3PFZhbHVlPihCaXRYb3IsIG1fdmFsdWUtPm9yaWdpbigpLCBiaXRBbmQs
IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChoYW5kbGVCaXRBbmREaXN0cmlidXRpdml0
eSgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICBjYXNlIEJpdFhvcjoKLSAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKLQot
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IoY29uc3RhbnQxLCBjb25zdGFudDIpCi0g
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50MSBeIGNvbnN0YW50MgotICAgICAgICAg
ICAgaWYgKFZhbHVlKiBjb25zdGFudEJpdFhvciA9IG1fdmFsdWUtPmNoaWxkKDApLT5iaXRYb3JD
b25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkgewotICAgICAgICAgICAgICAgIHJl
cGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnRCaXRYb3IpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdFhvcihCaXRY
b3IodmFsdWUsIGNvbnN0YW50MSksIGNvbnN0YW50MikKLSAgICAgICAgICAgIC8vIEludG8gdGhp
czogQml0WG9yKHZhbHVlLCBjb25zdGFudDEgXiBjb25zdGFudDIpLgotICAgICAgICAgICAgaWYg
KG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXRYb3IpIHsKLSAgICAgICAgICAgICAg
ICBWYWx1ZSogbmV3Q29uc3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+Yml0WG9yQ29uc3RhbnQo
bV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgIGlm
IChuZXdDb25zdGFudCkgewotICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnRWYWx1ZShtX2luZGV4LCBuZXdDb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFs
dWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAg
ICAgICAgICBtX3ZhbHVlLT5jaGlsZCgxKSA9IG5ld0NvbnN0YW50OwotICAgICAgICAgICAgICAg
ICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IoY29tcGFyZSwgMSkKLSAgICAgICAg
ICAgIC8vIEludG8gdGhpczogaW52ZXJ0ZWRDb21wYXJlCi0gICAgICAgICAgICBpZiAobV92YWx1
ZS0+Y2hpbGQoMSktPmlzSW50MzIoMSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoVmFsdWUqIGlu
dmVydGVkQ29tcGFyZSA9IG1fdmFsdWUtPmNoaWxkKDApLT5pbnZlcnRlZENvbXBhcmUobV9wcm9j
KSkgewotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGludmVydGVkQ29t
cGFyZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IodmFsdWVYLCB2
YWx1ZVgpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHplcm8tY29uc3RhbnQuCi0gICAgICAg
ICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkpIHsKLSAgICAg
ICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fcHJvYy5hZGRJbnRDb25zdGFudChtX3Zh
bHVlLCAwKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIC8vIFR1cm4gdGhpczogQml0WG9yKHZhbHVlLCB6ZXJvLWNvbnN0YW50KQotICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZS4KLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGls
ZCgxKS0+aXNJbnQoMCkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1f
dmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChoYW5kbGVCaXRBbmREaXN0cmlidXRp
dml0eSgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICBjYXNlIFNobDoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU2hsKGNvbnN0YW50
MSwgY29uc3RhbnQyKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgPDwgY29u
c3RhbnQyCi0gICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQo
MCktPnNobENvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSB7Ci0gICAgICAgICAg
ICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU2hsKDxTfFo+
U2hyKEB4LCBAY29uc3QpLCBAY29uc3QpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdEFu
ZChAeCwgLSgxPDxAY29uc3QpKQotICAgICAgICAgICAgaWYgKChtX3ZhbHVlLT5jaGlsZCgwKS0+
b3Bjb2RlKCkgPT0gU1NociB8fCBtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gWlNocikK
LSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhhc0ludCgp
Ci0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpCi0gICAgICAg
ICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5hc0ludCgpID09IG1fdmFs
dWUtPmNoaWxkKDEpLT5hc0ludCgpKSB7Ci0gICAgICAgICAgICAgICAgaW50IHNoaWZ0QW1vdW50
ID0gbV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50KCkgJiAobV92YWx1ZS0+dHlwZSgpID09IEludDMy
ID8gMzEgOiA2Myk7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIG5ld0NvbnN0ID0gbV9wcm9jLmFk
ZEludENvbnN0YW50KG1fdmFsdWUsIC0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oMXVsbCA8PCBzaGlm
dEFtb3VudCkpOwotICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydFZhbHVlKG1f
aW5kZXgsIG5ld0NvbnN0KTsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4o
Qml0QW5kLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLCBu
ZXdDb25zdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGhhbmRsZVNoaWZ0QW1vdW50KCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICBjYXNlIFNTaHI6Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNTaHIoY29uc3RhbnQxLCBj
b25zdGFudDIpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50MSA+PiBjb25zdGFu
dDIKLSAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+
c1NockNvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSB7Ci0gICAgICAgICAgICAg
ICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aGFz
SW50MzIoKQotICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9
PSBTaGwKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhh
c0ludDMyKCkKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQzMigp
ID09IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+YXNJbnQzMigpKSB7Ci0gICAgICAgICAg
ICAgICAgc3dpdGNoIChtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQzMigpKSB7Ci0gICAgICAgICAg
ICAgICAgY2FzZSAxNjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPnR5cGUoKSA9
PSBJbnQzMikgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTU2hyKFNo
bCh2YWx1ZSwgMTYpLCAxNikKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczog
U0V4dDE2KHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Byb2MuYWRkPFZhbHVlPigKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU0V4dDE2LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92
YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIDI0OgotICAgICAg
ICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+dHlwZSgpID09IEludDMyKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNTaHIoU2hsKHZhbHVlLCAyNCksIDI0KQotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0OCh2YWx1ZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9wcm9jLmFkZDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNFeHQ4LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDAp
KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgICAgICAgICBjYXNlIDMyOgotICAgICAgICAgICAgICAgICAgICBpZiAobV92YWx1
ZS0+dHlwZSgpID09IEludDY0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUdXJuIHRo
aXM6IFNTaHIoU2hsKHZhbHVlLCAzMiksIDMyKQotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SW50byB0aGlzOiBTRXh0MzIoVHJ1bmModmFsdWUpKQotICAgICAgICAgICAgICAgICAgICAgICAg
cmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Byb2Mu
YWRkPFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0V4dDMyLCBtX3Zh
bHVlLT5vcmlnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1faW5kZXgsIFRydW5jLCBtX3ZhbHVlLT5vcmlnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSkpKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBBZGQgY2FzZXMgZm9yIDQ4IGFuZCA1NiwgYnV0IHRoYXQgd291bGQgdHJh
bnNsYXRlIHRvIFNFeHQzMihTRXh0OCkgb3IKLSAgICAgICAgICAgICAgICAvLyBTRXh0MzIoU0V4
dDE2KSwgd2hpY2ggd2UgZG9uJ3QgY3VycmVudGx5IGxvd2VyIGVmZmljaWVudGx5LgotCi0gICAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPm9wY29kZSgpICE9IFNT
aHIpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBoYW5kbGVTaGlmdEFtb3VudCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Y2FzZSBaU2hyOgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBaU2hyKGNvbnN0YW50MSwgY29u
c3RhbnQyKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiAodW5zaWduZWQpY29uc3RhbnQxID4+
IGNvbnN0YW50MgotICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fdmFsdWUtPmNo
aWxkKDApLT56U2hyQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpIHsKLSAgICAg
ICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0YW50KTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaGFuZGxlU2hpZnRBbW91bnQo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgUm90UjoKLSAgICAgICAgICAg
IC8vIFR1cm4gdGhpczogUm90Uihjb25zdGFudDEsIGNvbnN0YW50MikKLSAgICAgICAgICAgIC8v
IEludG8gdGhpczogKGNvbnN0YW50MSA+PiBjb25zdGFudDIpIHwgKGNvbnN0YW50MSA8PCBzaXpl
b2YoY29uc3RhbnQxKSAqIDggLSBjb25zdGFudDIpCi0gICAgICAgICAgICBpZiAoVmFsdWUqIGNv
bnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPnJvdFJDb25zdGFudChtX3Byb2MsIG1fdmFsdWUt
PmNoaWxkKDEpKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoY29uc3Rh
bnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBoYW5kbGVTaGlmdEFtb3VudCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2Fz
ZSBSb3RMOgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBSb3RMKGNvbnN0YW50MSwgY29uc3Rh
bnQyKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiAoY29uc3RhbnQxIDw8IGNvbnN0YW50Mikg
fCAoY29uc3RhbnQxID4+IHNpemVvZihjb25zdGFudDEpICogOCAtIGNvbnN0YW50MikKLSAgICAg
ICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+cm90TENvbnN0
YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFj
ZVdpdGhOZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGhhbmRsZVNoaWZ0QW1vdW50KCk7Ci0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICBjYXNlIEFiczoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQWJz
KGNvbnN0YW50KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBmYWJzPHZhbHVlLT50eXBlKCk+
KGNvbnN0YW50KQotICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fdmFsdWUtPmNo
aWxkKDApLT5hYnNDb25zdGFudChtX3Byb2MpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdp
dGhOZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQWJzKEFicyh2YWx1ZSkpCi0gICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IEFicyh2YWx1ZSkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5j
aGlsZCgwKS0+b3Bjb2RlKCkgPT0gQWJzKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJ
ZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFi
cyhOZWcodmFsdWUpKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBYnModmFsdWUpCi0gICAg
ICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IE5lZykgewotICAgICAg
ICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDAp
OwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQWJzKEJpdHdp
c2VDYXN0KHZhbHVlKSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0d2lzZUNhc3QoQW5k
KHZhbHVlLCBtYXNrLXRvcC1iaXQpKQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDAp
LT5vcGNvZGUoKSA9PSBCaXR3aXNlQ2FzdCkgewotICAgICAgICAgICAgICAgIFZhbHVlKiBtYXNr
OwotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT50eXBlKCkgPT0gRG91YmxlKQotICAgICAg
ICAgICAgICAgICAgICBtYXNrID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0NjRWYWx1ZT4o
bV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIH4oMWxsIDw8IDYzKSk7Ci0gICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBtYXNrID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0
PENvbnN0MzJWYWx1ZT4obV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIH4oMWwgPDwgMzEpKTsK
LQotICAgICAgICAgICAgICAgIFZhbHVlKiBiaXRBbmQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8
VmFsdWU+KG1faW5kZXgsIEJpdEFuZCwgbV92YWx1ZS0+b3JpZ2luKCksCi0gICAgICAgICAgICAg
ICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSwKLSAgICAgICAgICAgICAgICAgICAg
bWFzayk7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIGNhc3QgPSBtX2luc2VydGlvblNldC5pbnNl
cnQ8VmFsdWU+KG1faW5kZXgsIEJpdHdpc2VDYXN0LCBtX3ZhbHVlLT5vcmlnaW4oKSwgYml0QW5k
KTsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KGNhc3QpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgY2FzZSBDZWlsOgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBDZWlsKGNvbnN0YW50KQot
ICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjZWlsPHZhbHVlLT50eXBlKCk+KGNvbnN0YW50KQot
ICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDApLT5jZWls
Q29uc3RhbnQobV9wcm9jKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUo
Y29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAvLyBUdXJuIHRoaXM6IENlaWwocm91bmRlZFZhbHVlKQotICAgICAgICAgICAgLy8g
SW50byB0aGlzOiByb3VuZGVkVmFsdWUKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgw
KS0+aXNSb3VuZGVkKCkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1f
dmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRmxvb3I6Ci0gICAgICAgICAgICAv
LyBUdXJuIHRoaXM6IEZsb29yKGNvbnN0YW50KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBm
bG9vcjx2YWx1ZS0+dHlwZSgpPihjb25zdGFudCkKLSAgICAgICAgICAgIGlmIChWYWx1ZSogY29u
c3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Zmxvb3JDb25zdGFudChtX3Byb2MpKSB7Ci0gICAg
ICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRmxv
b3Iocm91bmRlZFZhbHVlKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiByb3VuZGVkVmFsdWUK
LSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aXNSb3VuZGVkKCkpIHsKLSAgICAg
ICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgU3FydDoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU3FydChjb25zdGFu
dCkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogc3FydDx2YWx1ZS0+dHlwZSgpPihjb25zdGFu
dCkKLSAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+
c3FydENvbnN0YW50KG1fcHJvYykpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1Zh
bHVlKGNvbnN0YW50KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQml0d2lzZUNhc3Q6Ci0gICAgICAgICAg
ICAvLyBUdXJuIHRoaXM6IEJpdHdpc2VDYXN0KGNvbnN0YW50KQotICAgICAgICAgICAgLy8gSW50
byB0aGlzOiBiaXR3aXNlX2Nhc3Q8dmFsdWUtPnR5cGUoKT4oY29uc3RhbnQpCi0gICAgICAgICAg
ICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmJpdHdpc2VDYXN0Q29u
c3RhbnQobV9wcm9jKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoY29u
c3RhbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAvLyBUdXJuIHRoaXM6IEJpdHdpc2VDYXN0KEJpdHdpc2VDYXN0KHZhbHVlKSkKLSAgICAg
ICAgICAgIC8vIEludG8gdGhpczogdmFsdWUKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGls
ZCgwKS0+b3Bjb2RlKCkgPT0gQml0d2lzZUNhc3QpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNl
V2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBj
YXNlIFNFeHQ4OgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0OChjb25zdGFudCkKLSAg
ICAgICAgICAgIC8vIEludG8gdGhpczogc3RhdGljX2Nhc3Q8aW50OF90Pihjb25zdGFudCkKLSAg
ICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aGFzSW50MzIoKSkgewotICAgICAgICAg
ICAgICAgIGludDMyX3QgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8aW50OF90PihtX3ZhbHVlLT5jaGls
ZCgwKS0+YXNJbnQzMigpKTsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1f
cHJvYy5hZGRJbnRDb25zdGFudChtX3ZhbHVlLCByZXN1bHQpKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0OChT
RXh0OCh2YWx1ZSkpCi0gICAgICAgICAgICAvLyAgIG9yIHRoaXM6IFNFeHQ4KFNFeHQxNih2YWx1
ZSkpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNFeHQ4KHZhbHVlKQotICAgICAgICAgICAg
aWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBTRXh0OCB8fCBtX3ZhbHVlLT5jaGls
ZCgwKS0+b3Bjb2RlKCkgPT0gU0V4dDE2KSB7Ci0gICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hp
bGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgbV9j
aGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1fdmFsdWUt
PmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXRBbmQgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxk
KDEpLT5oYXNJbnQzMigpKSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIGlucHV0ID0gbV92YWx1
ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIGludDMyX3QgbWFzayA9IG1f
dmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+YXNJbnQzMigpOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDgoQml0QW5kKGlucHV0LCBtYXNrKSkg
d2hlcmUgKG1hc2sgJiAweGZmKSA9PSAweGZmCi0gICAgICAgICAgICAgICAgLy8gSW50byB0aGlz
OiBTRXh0OChpbnB1dCkKLSAgICAgICAgICAgICAgICBpZiAoKG1hc2sgJiAweGZmKSA9PSAweGZm
KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gaW5wdXQ7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAvLyBUdXJuIHRoaXM6IFNFeHQ4KEJpdEFuZChpbnB1dCwgbWFzaykpIHdoZXJlIChtYXNrICYg
MHg4MCkgPT0gMAotICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0QW5kKGlucHV0LCBj
b25zdCAmIDB4N2YpCi0gICAgICAgICAgICAgICAgaWYgKCEobWFzayAmIDB4ODApKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgICAg
ICAgICBtX3Byb2MuYWRkPFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXRB
bmQsIG1fdmFsdWUtPm9yaWdpbigpLCBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPigKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIG1hc2sgJiAweDdmKSkp
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9wcm9jLmhhc1F1aXJrcygp
KSB7Ci0gICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0OChBdG9taWNYY2hnX19fKQot
ICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogQXRvbWljWGNoZ19fXwotICAgICAgICAgICAg
ICAgIGlmIChpc0F0b21pY1hjaGcobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpKQotICAgICAg
ICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+YXM8QXRvbWljVmFsdWU+KCktPmFj
Y2Vzc1dpZHRoKCkgPT0gV2lkdGg4KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRo
SWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICBjYXNlIFNFeHQxNjoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDE2KGNv
bnN0YW50KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBzdGF0aWNfY2FzdDxpbnQxNl90Pihj
b25zdGFudCkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aGFzSW50MzIoKSkg
ewotICAgICAgICAgICAgICAgIGludDMyX3QgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8aW50MTZfdD4o
bV92YWx1ZS0+Y2hpbGQoMCktPmFzSW50MzIoKSk7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdp
dGhOZXdWYWx1ZShtX3Byb2MuYWRkSW50Q29uc3RhbnQobV92YWx1ZSwgcmVzdWx0KSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4g
dGhpczogU0V4dDE2KFNFeHQxNih2YWx1ZSkpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNF
eHQxNih2YWx1ZSkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkg
PT0gU0V4dDE2KSB7Ci0gICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVl
LT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0MTYoU0V4dDgo
dmFsdWUpKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0OCh2YWx1ZSkKLSAgICAgICAg
ICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU0V4dDgpIHsKLSAgICAgICAg
ICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1fdmFsdWUt
PmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXRBbmQgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxk
KDEpLT5oYXNJbnQzMigpKSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIGlucHV0ID0gbV92YWx1
ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIGludDMyX3QgbWFzayA9IG1f
dmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+YXNJbnQzMigpOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDE2KEJpdEFuZChpbnB1dCwgbWFzaykp
IHdoZXJlIChtYXNrICYgMHhmZmZmKSA9PSAweGZmZmYKLSAgICAgICAgICAgICAgICAvLyBJbnRv
IHRoaXM6IFNFeHQxNihpbnB1dCkKLSAgICAgICAgICAgICAgICBpZiAoKG1hc2sgJiAweGZmZmYp
ID09IDB4ZmZmZikgewotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9IGlu
cHV0OwotICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0MTYoQml0QW5kKGlucHV0LCBtYXNrKSkgd2hl
cmUgKG1hc2sgJiAweDgwMDApID09IDAKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJp
dEFuZChpbnB1dCwgY29uc3QgJiAweDdmZmYpCi0gICAgICAgICAgICAgICAgaWYgKCEobWFzayAm
IDB4ODAwMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1fcHJvYy5hZGQ8VmFsdWU+KAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEJpdEFuZCwgbV92YWx1ZS0+b3JpZ2luKCksIGlucHV0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDMyVmFsdWU+KAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4o
KSwgbWFzayAmIDB4N2ZmZikpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIW1fcHJvYy5oYXNR
dWlya3MoKSkgewotICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDE2KEF0b21pY1hj
aGdfX18pCi0gICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBdG9taWNYY2hnX19fCi0gICAg
ICAgICAgICAgICAgaWYgKGlzQXRvbWljWGNoZyhtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkp
Ci0gICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5hczxBdG9taWNWYWx1
ZT4oKS0+YWNjZXNzV2lkdGgoKSA9PSBXaWR0aDE2KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
cGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICBjYXNlIFNFeHQzMjoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczog
U0V4dDMyKGNvbnN0YW50KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBzdGF0aWNfY2FzdDxp
bnQ2NF90Pihjb25zdGFudCkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aGFz
SW50MzIoKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUobV9wcm9jLmFk
ZEludENvbnN0YW50KG1fdmFsdWUsIG1fdmFsdWUtPmNoaWxkKDApLT5hc0ludDMyKCkpKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVy
biB0aGlzOiBTRXh0MzIoQml0QW5kKGlucHV0LCBtYXNrKSkgd2hlcmUgKG1hc2sgJiAweDgwMDAw
MDAwKSA9PSAwCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFpFeHQzMihCaXRBbmQoaW5wdXQs
IG1hc2spKQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBC
aXRBbmQgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5oYXNJbnQzMigpCi0gICAgICAg
ICAgICAgICAgJiYgIShtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmFzSW50MzIoKSAmIDB4
ODAwMDAwMDApKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAg
ICAgICAgICAgICAgICAgbV9wcm9jLmFkZDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAg
ICBaRXh0MzIsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgY2FzZSBaRXh0MzI6Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFpFeHQzMihjb25z
dGFudCkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0
YXRpY19jYXN0PHVpbnQzMl90Pihjb25zdGFudCkpCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+
Y2hpbGQoMCktPmhhc0ludDMyKCkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1Zh
bHVlKAotICAgICAgICAgICAgICAgICAgICBtX3Byb2MuYWRkSW50Q29uc3RhbnQoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PHVpbnQzMl90PihtX3ZhbHVlLT5jaGlsZCgwKS0+
YXNJbnQzMigpKSkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgVHJ1bmM6Ci0gICAgICAgICAgICAvLyBU
dXJuIHRoaXM6IFRydW5jKGNvbnN0YW50KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBzdGF0
aWNfY2FzdDxpbnQzMl90Pihjb25zdGFudCkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGls
ZCgwKS0+aGFzSW50NjQoKSB8fCBtX3ZhbHVlLT5jaGlsZCgwKS0+aGFzRG91YmxlKCkpIHsKLSAg
ICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgICAgICBt
X3Byb2MuYWRkSW50Q29uc3RhbnQobV92YWx1ZSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obV92YWx1
ZS0+Y2hpbGQoMCktPmFzSW50NjQoKSkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBUcnVuYyhTRXh0MzIodmFsdWUp
KSBvciBUcnVuYyhaRXh0MzIodmFsdWUpKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1
ZQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBTRXh0MzIg
fHwgbV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFpFeHQzMikgewotICAgICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVy
biB0aGlzOiBUcnVuYyhPcCh2YWx1ZSwgY29uc3RhbnQpKQotICAgICAgICAgICAgLy8gICAgIHdo
ZXJlICEoY29uc3RhbnQgJiAweGZmZmZmZmZmKQotICAgICAgICAgICAgLy8gICAgICAgYW5kIE9w
IGlzIEFkZCwgU3ViLCBCaXRPciwgb3IgQml0WG9yCi0gICAgICAgICAgICAvLyBpbnRvIHRoaXM6
IFRydW5jKHZhbHVlKQotICAgICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bj
b2RlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQWRkOgotICAgICAgICAgICAgY2FzZSBTdWI6Ci0g
ICAgICAgICAgICBjYXNlIEJpdE9yOgotICAgICAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAg
ICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aGFzSW50NjQoKQotICAg
ICAgICAgICAgICAgICAgICAmJiAhKG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+YXNJbnQ2
NCgpICYgMHhmZmZmZmZmZmxsKSkgewotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGls
ZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICAgICAg
bV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgIGNhc2UgSVRvRDoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogSVRvRChjb25z
dGFudCkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQ29uc3REb3VibGUoY29uc3RhbnQpCi0g
ICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmlUb0RD
b25zdGFudChtX3Byb2MpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShj
b25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICBjYXNlIElUb0Y6Ci0gICAgICAgICAgICAvLyBUdXJuIHRo
aXM6IElUb0YoY29uc3RhbnQpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IENvbnN0RmxvYXQo
Y29uc3RhbnQpCi0gICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hp
bGQoMCktPmlUb0ZDb25zdGFudChtX3Byb2MpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdp
dGhOZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEZsb2F0VG9Eb3VibGU6Ci0g
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEZsb2F0VG9Eb3VibGUoY29uc3RhbnQpCi0gICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IENvbnN0RG91YmxlKGNvbnN0YW50KQotICAgICAgICAgICAgaWYg
KFZhbHVlKiBjb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDApLT5mbG9hdFRvRG91YmxlQ29uc3Rh
bnQobV9wcm9jKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoY29uc3Rh
bnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBEb3VibGVUb0Zsb2F0OgotICAgICAgICAgICAgLy8gVHVy
biB0aGlzOiBEb3VibGVUb0Zsb2F0KEZsb2F0VG9Eb3VibGUodmFsdWUpKQotICAgICAgICAgICAg
Ly8gSW50byB0aGlzOiB2YWx1ZQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5v
cGNvZGUoKSA9PSBGbG9hdFRvRG91YmxlKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJ
ZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IERvdWJsZVRv
RmxvYXQoY29uc3RhbnQpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IENvbnN0RmxvYXQoY29u
c3RhbnQpCi0gICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQo
MCktPmRvdWJsZVRvRmxvYXRDb25zdGFudChtX3Byb2MpKSB7Ci0gICAgICAgICAgICAgICAgcmVw
bGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKK2NsYXNzIFJlZHVjZVN0cmVuZ3RoIHsKK3B1
YmxpYzoKKyAgICBSZWR1Y2VTdHJlbmd0aChQcm9jZWR1cmUmIHByb2MpCisgICAgICAgIDogbV9w
cm9jKHByb2MpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQocHJvYykKKyAgICAgICAgLCBtX2Js
b2NrSW5zZXJ0aW9uU2V0KHByb2MpCisgICAgeworICAgIH0KIAotICAgICAgICBjYXNlIFNlbGVj
dDoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU2VsZWN0KGNvbnN0YW50LCBhLCBiKQotICAg
ICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudCA/IGEgOiBiCi0gICAgICAgICAgICBpZiAo
bV92YWx1ZS0+Y2hpbGQoMCktPmhhc0ludDMyKCkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNl
V2l0aElkZW50aXR5KAotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+YXNJ
bnQzMigpID8gbV92YWx1ZS0+Y2hpbGQoMSkgOiBtX3ZhbHVlLT5jaGlsZCgyKSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgYm9vbCBydW4oKQorICAgIHsKKyAg
ICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBmaXJzdCA9IHRydWU7Cisg
ICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgbV9j
aGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBtX2NoYW5nZWRDRkcgPSBmYWxzZTsKKyAgICAg
ICAgICAgICsraW5kZXg7CiAKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU2VsZWN0KEVxdWFs
KHgsIDApLCBhLCBiKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTZWxlY3QoeCwgYiwgYSkK
LSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gRXF1YWwgJiYg
bV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0ludCgwKSkgewotICAgICAgICAgICAgICAg
IG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAg
ICAgICAgICAgIHN0ZDo6c3dhcChtX3ZhbHVlLT5jaGlsZCgxKSwgbV92YWx1ZS0+Y2hpbGQoMikp
OwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBpZiAoZmlyc3QpCisgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxz
ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKEIzUmVkdWNlU3RyZW5ndGhJbnRlcm5hbDo6dmVyYm9z
ZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coIkIzIGFmdGVyIGl0ZXJhdGlvbiAjIiwgaW5k
ZXggLSAxLCAiIG9mIHJlZHVjZVN0cmVuZ3RoOlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxv
ZyhtX3Byb2MpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNl
bGVjdChCaXRYb3IoYm9vbCwgMSksIGEsIGIpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNl
bGVjdChib29sLCBiLCBhKQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNv
ZGUoKSA9PSBCaXRYb3IKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hp
bGQoMSktPmlzSW50MzIoMSkKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMCktPnJldHVybnNCb29sKCkpIHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGls
ZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICBzdGQ6
OnN3YXAobV92YWx1ZS0+Y2hpbGQoMSksIG1fdmFsdWUtPmNoaWxkKDIpKTsKLSAgICAgICAgICAg
ICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgc2ltcGxpZnlDRkcoKTsKIAotICAgICAgICAgICAgLy8gVHVybiB0
aGlzOiBTZWxlY3QoQml0QW5kKGJvb2wsIHh5ejEpLCBhLCBiKQotICAgICAgICAgICAgLy8gSW50
byB0aGlzOiBTZWxlY3QoYm9vbCwgYSwgYikKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGls
ZCgwKS0+b3Bjb2RlKCkgPT0gQml0QW5kCi0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hp
bGQoMCktPmNoaWxkKDEpLT5oYXNJbnQoKQotICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNo
aWxkKDApLT5jaGlsZCgxKS0+YXNJbnQoKSAmIDEKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVl
LT5jaGlsZCgwKS0+Y2hpbGQoMCktPnJldHVybnNCb29sKCkpIHsKLSAgICAgICAgICAgICAgICBt
X3ZhbHVlLT5jaGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKKyAgICAgICAg
ICAgIGlmIChtX2NoYW5nZWRDRkcpIHsKKyAgICAgICAgICAgICAgICBtX3Byb2MucmVzZXRSZWFj
aGFiaWxpdHkoKTsKKyAgICAgICAgICAgICAgICBtX3Byb2MuaW52YWxpZGF0ZUNGRygpOwogICAg
ICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU2VsZWN0KHN0dWZmLCB4
LCB4KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiB4Ci0gICAgICAgICAgICBpZiAobV92YWx1
ZS0+Y2hpbGQoMSkgPT0gbV92YWx1ZS0+Y2hpbGQoMikpIHsKLSAgICAgICAgICAgICAgICByZXBs
YWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgTG9h
ZDhaOgotICAgICAgICBjYXNlIExvYWQ4UzoKLSAgICAgICAgY2FzZSBMb2FkMTZaOgotICAgICAg
ICBjYXNlIExvYWQxNlM6Ci0gICAgICAgIGNhc2UgTG9hZDoKLSAgICAgICAgY2FzZSBTdG9yZTg6
Ci0gICAgICAgIGNhc2UgU3RvcmUxNjoKLSAgICAgICAgY2FzZSBTdG9yZTogewotICAgICAgICAg
ICAgVmFsdWUqIGFkZHJlc3MgPSBtX3ZhbHVlLT5sYXN0Q2hpbGQoKTsKLSAgICAgICAgICAgIE1l
bW9yeVZhbHVlKiBtZW1vcnkgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKLQotICAgICAg
ICAgICAgLy8gVHVybiB0aGlzOiBMb2FkKEFkZChhZGRyZXNzLCBvZmZzZXQxKSwgb2Zmc2V0ID0g
b2Zmc2V0MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogTG9hZChhZGRyZXNzLCBvZmZzZXQg
PSBvZmZzZXQxICsgb2Zmc2V0MikKKyAgICAgICAgICAgIC8vIFdlIGRlZmluaXRlbHkgd2FudCB0
byBkbyBEQ0UgYmVmb3JlIHdlIGRvIENTRSBzbyB0aGF0IHdlIGRvbid0IGhvaXN0IHRoaW5ncy4g
Rm9yCisgICAgICAgICAgICAvLyBleGFtcGxlOgogICAgICAgICAgICAgLy8KLSAgICAgICAgICAg
IC8vIEFsc28gdHVybnMgdGhpczogU3RvcmUodmFsdWUsIEFkZChhZGRyZXNzLCBvZmZzZXQxKSwg
b2Zmc2V0ID0gb2Zmc2V0MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogU3RvcmUodmFsdWUs
IGFkZHJlc3MsIG9mZnNldCA9IG9mZnNldDEgKyBvZmZzZXQyKQotICAgICAgICAgICAgaWYgKGFk
ZHJlc3MtPm9wY29kZSgpID09IEFkZCAmJiBhZGRyZXNzLT5jaGlsZCgxKS0+aGFzSW50UHRyKCkp
IHsKLSAgICAgICAgICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSBhZGRyZXNzLT5jaGlsZCgxKS0+
YXNJbnRQdHIoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXN1bU92ZXJmbG93czxpbnRwdHJfdD4o
b2Zmc2V0LCBtZW1vcnktPm9mZnNldCgpKSkgewotICAgICAgICAgICAgICAgICAgICBvZmZzZXQg
Kz0gbWVtb3J5LT5vZmZzZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgVmFsdWU6Ok9mZnNldFR5
cGUgc21hbGxPZmZzZXQgPSBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4ob2Zmc2V0KTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHNtYWxsT2Zmc2V0ID09IG9mZnNldCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkcmVzcyA9IGFkZHJlc3MtPmNoaWxkKDApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgbWVtb3J5LT5sYXN0Q2hpbGQoKSA9IGFkZHJlc3M7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtZW1vcnktPnNldE9mZnNldChzbWFsbE9mZnNldCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRo
aXM6IExvYWQoY29uc3RhbnQxLCBvZmZzZXQgPSBjb25zdGFudDIpCi0gICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IExvYWQoY29uc3RhbnQxICsgY29uc3RhbnQyKQorICAgICAgICAgICAgLy8gQGRl
YWQgPSBNdWwoQGEsIEBiKQorICAgICAgICAgICAgLy8gLi4uIGxvdHMgb2YgY29udHJvbCBmbG93
IGFuZCBzdHVmZgorICAgICAgICAgICAgLy8gQHRoaW5nID0gTXVsKEBhLCBAYikKICAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICAvLyBUaGlzIGlzIGEgZnVuIGNhbm9uaWNhbGl6YXRpb24uIEl0
IHB1cmVseSByZWdyZXNzZXMgbmFpdmVseSBnZW5lcmF0ZWQgY29kZS4gV2UgcmVseQotICAgICAg
ICAgICAgLy8gb24gY29uc3RhbnQgbWF0ZXJpYWxpemF0aW9uIHRvIGJlIHNtYXJ0IGVub3VnaCB0
byBtYXRlcmlhbGl6ZSB0aGlzIGNvbnN0YW50IHRoZSBzbWFydAotICAgICAgICAgICAgLy8gd2F5
LiBXZSB3YW50IHRoaXMgY2Fub25pY2FsaXphdGlvbiBiZWNhdXNlIHdlIHdhbnQgdG8ga25vdyBp
ZiB0d28gbWVtb3J5IGFjY2Vzc2VzIHNlZQotICAgICAgICAgICAgLy8gdGhlIHNhbWUgYWRkcmVz
cy4KLSAgICAgICAgICAgIGlmIChtZW1vcnktPm9mZnNldCgpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKFZhbHVlKiBuZXdBZGRyZXNzID0gYWRkcmVzcy0+YWRkQ29uc3RhbnQobV9wcm9jLCBtZW1v
cnktPm9mZnNldCgpKSkgewotICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnRWYWx1ZShtX2luZGV4LCBuZXdBZGRyZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgYWRkcmVz
cyA9IG5ld0FkZHJlc3M7Ci0gICAgICAgICAgICAgICAgICAgIG1lbW9yeS0+bGFzdENoaWxkKCkg
PSBuZXdBZGRyZXNzOwotICAgICAgICAgICAgICAgICAgICBtZW1vcnktPnNldE9mZnNldCgwKTsK
LSAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9CisgICAgICAgICAgICAvLyBJZiB3ZSBkbyBDU0UgYmVmb3JlIERDRSwgd2Ugd2lsbCByZW1v
dmUgQHRoaW5nIGFuZCBrZWVwIEBkZWFkLiBFZmZlY3RpdmVseSwgd2Ugd2lsbAorICAgICAgICAg
ICAgLy8gImhvaXN0IiBAdGhpbmcuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB3ZSBydW4gRENFIGJl
Zm9yZSBDU0UsIHdlIHdpbGwga2lsbCBAZGVhZCBhbmQKKyAgICAgICAgICAgIC8vIGtlZXAgQHRo
aW5nLiBUaGF0J3MgYmV0dGVyLCBzaW5jZSB3ZSB1c3VhbGx5IHdhbnQgdGhpbmdzIHRvIHN0YXkg
d2hlcmV2ZXIgdGhlIGNsaWVudAorICAgICAgICAgICAgLy8gcHV0IHRoZW0uIFdlJ3JlIG5vdCBh
Y3R1YWxseSBzbWFydCBlbm91Z2ggdG8gbW92ZSB0aGluZ3MgYXJvdW5kIGF0IHJhbmRvbS4KKyAg
ICAgICAgICAgIG1fY2hhbmdlZCB8PSBlbGltaW5hdGVEZWFkQ29kZUltcGwobV9wcm9jKTsKIAot
ICAgICAgICBjYXNlIENDYWxsOiB7Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IENhbGwoZm1v
ZCwgY29uc3RhbnQxLCBjb25zdGFudDIpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGZjYWxs
LWNvbnN0YW50KGNvbnN0YW50MSwgY29uc3RhbnQyKQotICAgICAgICAgICAgYXV0byogZm1vZERv
dWJsZSA9IHRhZ0NGdW5jdGlvblB0cjxkb3VibGUgKCopKGRvdWJsZSwgZG91YmxlKT4oZm1vZCwg
QjNDQ2FsbFB0clRhZyk7Ci0gICAgICAgICAgICBpZiAobV92YWx1ZS0+dHlwZSgpID09IERvdWJs
ZQotICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMwotICAgICAg
ICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5pc0ludFB0cihyZWludGVycHJldF9jYXN0
PGludHB0cl90PihmbW9kRG91YmxlKSkKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGls
ZCgxKS0+dHlwZSgpID09IERvdWJsZQotICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxk
KDIpLT50eXBlKCkgPT0gRG91YmxlKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdW
YWx1ZShtX3ZhbHVlLT5jaGlsZCgxKS0+bW9kQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGls
ZCgyKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBFcXVhbDoKLSAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKLQot
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBFcXVhbChib29sLCAwKQotICAgICAgICAgICAgLy8g
SW50byB0aGlzOiBCaXRYb3IoYm9vbCwgMSkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGls
ZCgwKS0+cmV0dXJuc0Jvb2woKSAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQzMigwKSkgewot
ICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPigKLSAgICAgICAgICAgICAgICAg
ICAgQml0WG9yLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCksCi0gICAgICAg
ICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDMyVmFsdWU+KG1faW5kZXgs
IG1fdmFsdWUtPm9yaWdpbigpLCAxKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpcyBFcXVhbChib29s
LCAxKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBib29sCi0gICAgICAgICAgICBpZiAobV92
YWx1ZS0+Y2hpbGQoMCktPnJldHVybnNCb29sKCkgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50
MzIoMSkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNo
aWxkKDApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHNpbXBsaWZ5U1NBKCk7CiAKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRXF1YWwoY29u
c3QxLCBjb25zdDIpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0MSA9PSBjb25zdDIK
LSAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgbV9wcm9j
LmFkZEJvb2xDb25zdGFudCgKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+b3JpZ2luKCks
Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLT5lcXVhbENvbnN0YW50KG1f
dmFsdWUtPmNoaWxkKDEpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBOb3RFcXVhbDoKLSAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsK
LQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5yZXR1cm5zQm9vbCgpKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBOb3RFcXVhbChib29sLCAwKQotICAgICAgICAg
ICAgICAgIC8vIEludG8gdGhpczogYm9vbAotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5j
aGlsZCgxKS0+aXNJbnQzMigwKSkgewotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElk
ZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogTm90RXF1YWwoYm9vbCwgMSkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6
IEVxdWFsKGJvb2wsIDApCi0gICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5p
c0ludDMyKDEpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPigK
LSAgICAgICAgICAgICAgICAgICAgICAgIEVxdWFsLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1
ZS0+Y2hpbGQoMCksCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnRJbnRDb25zdGFudChtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4oKSwgSW50MzIsIDApKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKG1fcHJvYy5vcHRMZXZlbCgpID49IDIpIHsKKyAgICAgICAgICAgICAgICBtX3Byb2MucmVz
ZXRWYWx1ZU93bmVycygpOworICAgICAgICAgICAgICAgIG1fZG9taW5hdG9ycyA9ICZtX3Byb2Mu
ZG9taW5hdG9ycygpOyAvLyBSZWNvbXB1dGUgaWYgbmVjZXNzYXJ5LgorICAgICAgICAgICAgICAg
IG1fcHVyZUNTRS5jbGVhcigpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBUdXJu
IHRoaXM6IE5vdEVxdWFsKGNvbnN0MSwgY29uc3QyKQotICAgICAgICAgICAgLy8gSW50byB0aGlz
OiBjb25zdDEgIT0gY29uc3QyCi0gICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAg
ICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQoCi0gICAgICAgICAgICAgICAgICAg
IG1fdmFsdWUtPm9yaWdpbigpLAotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgw
KS0+bm90RXF1YWxDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIGNhc2UgTGVzc1RoYW46Ci0gICAgICAgIGNhc2UgR3JlYXRlclRoYW46
Ci0gICAgICAgIGNhc2UgTGVzc0VxdWFsOgotICAgICAgICBjYXNlIEdyZWF0ZXJFcXVhbDoKLSAg
ICAgICAgY2FzZSBBYm92ZToKLSAgICAgICAgY2FzZSBCZWxvdzoKLSAgICAgICAgY2FzZSBBYm92
ZUVxdWFsOgotICAgICAgICBjYXNlIEJlbG93RXF1YWw6IHsKLSAgICAgICAgICAgIENhbm9uaWNh
bGl6ZWRDb21wYXJpc29uIGNvbXBhcmlzb24gPSBjYW5vbmljYWxpemVDb21wYXJpc29uKG1fdmFs
dWUpOwotICAgICAgICAgICAgVHJpU3RhdGUgcmVzdWx0ID0gTWl4ZWRUcmlTdGF0ZTsKLSAgICAg
ICAgICAgIHN3aXRjaCAoY29tcGFyaXNvbi5vcGNvZGUpIHsKLSAgICAgICAgICAgIGNhc2UgTGVz
c1RoYW46Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcGFyaXNvbi5vcGVyYW5kc1sxXS0+
Z3JlYXRlclRoYW5Db25zdGFudChjb21wYXJpc29uLm9wZXJhbmRzWzBdKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgR3JlYXRlclRoYW46Ci0gICAgICAgICAgICAg
ICAgcmVzdWx0ID0gY29tcGFyaXNvbi5vcGVyYW5kc1sxXS0+bGVzc1RoYW5Db25zdGFudChjb21w
YXJpc29uLm9wZXJhbmRzWzBdKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgTGVzc0VxdWFsOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXBhcmlzb24ub3Bl
cmFuZHNbMV0tPmdyZWF0ZXJFcXVhbENvbnN0YW50KGNvbXBhcmlzb24ub3BlcmFuZHNbMF0pOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBHcmVhdGVyRXF1YWw6Ci0g
ICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcGFyaXNvbi5vcGVyYW5kc1sxXS0+bGVzc0VxdWFs
Q29uc3RhbnQoY29tcGFyaXNvbi5vcGVyYW5kc1swXSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIEFib3ZlOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXBh
cmlzb24ub3BlcmFuZHNbMV0tPmJlbG93Q29uc3RhbnQoY29tcGFyaXNvbi5vcGVyYW5kc1swXSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEJlbG93OgotICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IGNvbXBhcmlzb24ub3BlcmFuZHNbMV0tPmFib3ZlQ29uc3RhbnQo
Y29tcGFyaXNvbi5vcGVyYW5kc1swXSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIEFib3ZlRXF1YWw6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcGFyaXNv
bi5vcGVyYW5kc1sxXS0+YmVsb3dFcXVhbENvbnN0YW50KGNvbXBhcmlzb24ub3BlcmFuZHNbMF0p
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBCZWxvd0VxdWFsOgot
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXBhcmlzb24ub3BlcmFuZHNbMV0tPmFib3ZlRXF1
YWxDb25zdGFudChjb21wYXJpc29uLm9wZXJhbmRzWzBdKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIFBlZXBob2xlT3B0aW1pemVyIHBlZXBob2xlKG1fcHJvYywgbV9pbnNlcnRpb25T
ZXQpOworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYy5ibG9ja3NJ
blByZU9yZGVyKCkpIHsKKyAgICAgICAgICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CiAKLSAgICAg
ICAgICAgIGlmIChhdXRvKiBjb25zdGFudCA9IG1fcHJvYy5hZGRCb29sQ29uc3RhbnQobV92YWx1
ZS0+b3JpZ2luKCksIHJlc3VsdCkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1Zh
bHVlKGNvbnN0YW50KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChjb21wYXJpc29uLm9wY29kZSAhPSBtX3ZhbHVlLT5vcGNvZGUoKSkgewot
ICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPihjb21wYXJpc29uLm9wY29kZSwg
bV92YWx1ZS0+b3JpZ2luKCksIGNvbXBhcmlzb24ub3BlcmFuZHNbMF0sIGNvbXBhcmlzb24ub3Bl
cmFuZHNbMV0pOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGZvciAo
bV9pbmRleCA9IDA7IG1faW5kZXggPCBibG9jay0+c2l6ZSgpOyArK21faW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKEIzUmVkdWNlU3RyZW5ndGhJbnRlcm5hbDo6dmVyYm9zZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiTG9va2luZyBhdCAiLCAqYmxvY2ssICIgIyIsIG1faW5kZXgsICI6ICIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVlcER1bXAobV9wcm9jLCBibG9jay0+YXQobV9pbmRleCkp
LCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtX3Zh
bHVlID0gbV9ibG9jay0+YXQobV9pbmRleCk7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUt
PnBlcmZvcm1TdWJzdGl0dXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgcGVlcGhvbGUuc2V0
SW5kZXgobV9pbmRleCk7CisgICAgICAgICAgICAgICAgICAgIHJlZHVjZVZhbHVlU3RyZW5ndGgo
cGVlcGhvbGUpOworICAgICAgICAgICAgICAgICAgICBpZiAobV9wcm9jLm9wdExldmVsKCkgPj0g
MikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VJZlJlZHVuZGFudCgpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKG1fYmxv
Y2spOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAg
ICAgICBjYXNlIEVxdWFsT3JVbm9yZGVyZWQ6Ci0gICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2
aXR5KCk7Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRXF1YWwoY29uc3QxLCBjb25zdDIp
Ci0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGlzdW5vcmRlcmVkKGNvbnN0MSwgY29uc3QyKSB8
fCBjb25zdDEgPT0gY29uc3QyLgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBFcXVhbCh2YWx1
ZSwgY29uc3RfTmFOKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiAxLgotICAgICAgICAgICAg
cmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0
YW50KAotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5vcmlnaW4oKSwKLSAgICAgICAgICAg
ICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMSktPmVxdWFsT3JVbm9yZGVyZWRDb25zdGFudChtX3Zh
bHVlLT5jaGlsZCgwKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgQ2hl
Y2tBZGQ6IHsKLSAgICAgICAgICAgIGlmIChyZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNo
aWxkKDApLT5jaGVja0FkZENvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSkKLSAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG1fY2hhbmdlZENGRyB8PSBtX2Jsb2Nr
SW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKKyAgICAgICAgICAgIGhhbmRsZUNoYW5nZWRDRkdJZk5l
Y2Vzc2FyeSgpOwogCi0gICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMCkpIHsKLSAg
ICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlc3VsdCB8
PSBtX2NoYW5nZWQ7CisgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCAmJiBtX3Byb2Mub3B0TGV2
ZWwoKSA+PSAyKTsKIAotICAgICAgICAgICAgSW50UmFuZ2UgbGVmdFJhbmdlID0gcmFuZ2VGb3Io
bV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgSW50UmFuZ2UgcmlnaHRSYW5nZSA9IHJh
bmdlRm9yKG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgIGlmICghbGVmdFJhbmdlLmNv
dWxkT3ZlcmZsb3dBZGQocmlnaHRSYW5nZSwgbV92YWx1ZS0+dHlwZSgpKSkgewotICAgICAgICAg
ICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgICAgIG1fcHJvYy5h
ZGQ8VmFsdWU+KEFkZCwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLCBtX3Zh
bHVlLT5jaGlsZCgxKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChtX3Byb2Mub3B0TGV2ZWwoKSA8IDIpIHsK
KyAgICAgICAgICAgIG1fY2hhbmdlZENGRyA9IGZhbHNlOworICAgICAgICAgICAgc2ltcGxpZnlD
RkcoKTsKKyAgICAgICAgICAgIGhhbmRsZUNoYW5nZWRDRkdJZk5lY2Vzc2FyeSgpOwogICAgICAg
ICB9CiAKLSAgICAgICAgY2FzZSBDaGVja1N1YjogewotICAgICAgICAgICAgaWYgKHJlcGxhY2VX
aXRoTmV3VmFsdWUobV92YWx1ZS0+Y2hpbGQoMCktPmNoZWNrU3ViQ29uc3RhbnQobV9wcm9jLCBt
X3ZhbHVlLT5jaGlsZCgxKSkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg
ICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50KDApKSB7Ci0gICAgICAgICAgICAgICAgcmVw
bGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChWYWx1ZSogbmVnYXRlZENvbnN0
YW50ID0gbV92YWx1ZS0+Y2hpbGQoMSktPmNoZWNrTmVnQ29uc3RhbnQobV9wcm9jKSkgewotICAg
ICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydFZhbHVlKG1faW5kZXgsIG5lZ2F0ZWRD
b25zdGFudCk7Ci0gICAgICAgICAgICAgICAgbV92YWx1ZS0+YXM8Q2hlY2tWYWx1ZT4oKS0+Y29u
dmVydFRvQWRkKCk7Ci0gICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMSkgPSBuZWdhdGVk
Q29uc3RhbnQ7Ci0gICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CiAKLSAgICAgICAgICAgIEludFJhbmdlIGxlZnRSYW5nZSA9IHJhbmdlRm9yKG1fdmFsdWUtPmNo
aWxkKDApKTsKLSAgICAgICAgICAgIEludFJhbmdlIHJpZ2h0UmFuZ2UgPSByYW5nZUZvcihtX3Zh
bHVlLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICBpZiAoIWxlZnRSYW5nZS5jb3VsZE92ZXJmbG93
U3ViKHJpZ2h0UmFuZ2UsIG1fdmFsdWUtPnR5cGUoKSkpIHsKLSAgICAgICAgICAgICAgICByZXBs
YWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgICAgICBtX3Byb2MuYWRkPFZhbHVlPihT
dWIsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQo
MSkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KK3ByaXZhdGU6Cisg
ICAgdm9pZCByZWR1Y2VWYWx1ZVN0cmVuZ3RoKFBlZXBob2xlT3B0aW1pemVyJiBwZWVwaG9sZSkK
KyAgICB7CisgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+b3Bjb2RlKCkpIHsKKyAgICAgICAgY2Fz
ZSBDQ2FsbDoKKyAgICAgICAgICAgIG1fY2hhbmdlZCB8PSBwZWVwaG9sZS50cnlTaW1wbGlmeUND
YWxsKG1fdmFsdWUtPmFzPENDYWxsVmFsdWU+KCkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KIAotICAgICAgICBjYXNlIENoZWNrTXVsOiB7Ci0gICAgICAgICAgICBpZiAocmVwbGFj
ZVdpdGhOZXdWYWx1ZShtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hlY2tNdWxDb25zdGFudChtX3Byb2Ms
IG1fdmFsdWUtPmNoaWxkKDEpKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQ2hlY2tBZGQ6CisgICAgICAgICAgICBtX2NoYW5nZWQgfD0gcGVlcGhvbGUudHJ5U2ltcGxp
ZnlDaGVja0FkZChtX3ZhbHVlLT5hczxDaGVja1ZhbHVlPigpKTsKKyAgICAgICAgICAgIGJyZWFr
OwogCi0gICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7Ci0KLSAgICAgICAgICAgIGlm
IChtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKLSAgICAgICAgICAgICAgICBib29sIG1v
ZGlmaWVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPmNoaWxkKDEp
LT5hc0ludCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgICAg
ICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fcHJvYy5hZGRJbnRDb25zdGFudChtX3ZhbHVlLCAwKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMToKLSAg
ICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMjoKLSAg
ICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+YXM8Q2hlY2tWYWx1ZT4oKS0+Y29udmVydFRvQWRk
KCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gbV92YWx1ZS0+Y2hp
bGQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgICAgIG1vZGlmaWVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobW9kaWZpZWQpCi0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICBjYXNlIENoZWNrU3ViOgor
ICAgICAgICAgICAgbV9jaGFuZ2VkIHw9IHBlZXBob2xlLnRyeVNpbXBsaWZ5Q2hlY2tTdWIobV92
YWx1ZS0+YXM8Q2hlY2tWYWx1ZT4oKSk7CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAg
ICAgSW50UmFuZ2UgbGVmdFJhbmdlID0gcmFuZ2VGb3IobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAg
ICAgICAgICAgSW50UmFuZ2UgcmlnaHRSYW5nZSA9IHJhbmdlRm9yKG1fdmFsdWUtPmNoaWxkKDEp
KTsKLSAgICAgICAgICAgIGlmICghbGVmdFJhbmdlLmNvdWxkT3ZlcmZsb3dNdWwocmlnaHRSYW5n
ZSwgbV92YWx1ZS0+dHlwZSgpKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFs
dWUoCi0gICAgICAgICAgICAgICAgICAgIG1fcHJvYy5hZGQ8VmFsdWU+KE11bCwgbV92YWx1ZS0+
b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICBjYXNlIENoZWNrTXVsOgor
ICAgICAgICAgICAgbV9jaGFuZ2VkIHw9IHBlZXBob2xlLnRyeVNpbXBsaWZ5Q2hlY2tNdWwobV92
YWx1ZS0+YXM8Q2hlY2tWYWx1ZT4oKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQog
CiAgICAgICAgIGNhc2UgQ2hlY2s6IHsKLSAgICAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrVmFs
dWUgPSBtX3ZhbHVlLT5hczxDaGVja1ZhbHVlPigpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoY2hlY2tWYWx1ZS0+Y2hpbGQoMCktPmlzTGlrZVplcm8oKSkgewotICAgICAgICAgICAg
ICAgIGNoZWNrVmFsdWUtPnJlcGxhY2VXaXRoTm9wKCk7CisgICAgICAgICAgICBpZiAocGVlcGhv
bGUudHJ5U2ltcGxpZnlDaGVjayhtX3ZhbHVlLT5hczxDaGVja1ZhbHVlPigpKSkgewogICAgICAg
ICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkQ0ZH
ID0gdHJ1ZTsgLy8gQSBiaXQgY29uc2VydmF0aXZlLCBidXQgc291bmQuCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjaGVja1ZhbHVlLT5j
aGlsZCgwKS0+aXNMaWtlTm9uWmVybygpKSB7Ci0gICAgICAgICAgICAgICAgUGF0Y2hwb2ludFZh
bHVlKiBwYXRjaHBvaW50ID0KLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0PFBhdGNocG9pbnRWYWx1ZT4obV9pbmRleCwgVm9pZCwgY2hlY2tWYWx1ZS0+b3JpZ2luKCkp
OwotCi0gICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHMoKTsKLSAg
ICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzID0gSGVhcFJhbmdlOjp0b3Ao
KTsKLSAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLmV4aXRzU2lkZXdheXMgPSB0
cnVlOwotCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGNoZWNrVmFs
dWUtPm51bUNoaWxkcmVuKCk7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+
YXBwZW5kKGNoZWNrVmFsdWUtPmNvbnN0cmFpbmVkQ2hpbGQoaSkpOwotCi0gICAgICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKGNoZWNrVmFsdWUtPmdlbmVyYXRvcigpKTsKLQot
ICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIHJlc3Qgb2YgdGhlIGJsb2NrIHdpdGggYW4g
T29wcy4KLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4ICsgMTsgaSA8
IG1fYmxvY2stPnNpemUoKSAtIDE7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgbV9ibG9jay0+
YXQoaSktPnJlcGxhY2VXaXRoQm90dG9tKG1faW5zZXJ0aW9uU2V0LCBtX2luZGV4KTsKLSAgICAg
ICAgICAgICAgICBtX2Jsb2NrLT5sYXN0KCktPnJlcGxhY2VXaXRoT29wcyhtX2Jsb2NrKTsKLSAg
ICAgICAgICAgICAgICBtX2Jsb2NrLT5sYXN0KCktPnNldE9yaWdpbihjaGVja1ZhbHVlLT5vcmln
aW4oKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIG91cnNlbHZlcyBsYXN0LgotICAg
ICAgICAgICAgICAgIGNoZWNrVmFsdWUtPnJlcGxhY2VXaXRoTm9wKCk7Ci0gICAgICAgICAgICAg
ICAgbV9jaGFuZ2VkQ0ZHID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKGNoZWNrVmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9
PSBOb3RFcXVhbAotICAgICAgICAgICAgICAgICYmIGNoZWNrVmFsdWUtPmNoaWxkKDApLT5jaGls
ZCgxKS0+aXNJbnQoMCkpIHsKLSAgICAgICAgICAgICAgICBjaGVja1ZhbHVlLT5jaGlsZCgwKSA9
IGNoZWNrVmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICBtX2NoYW5n
ZWQgPSB0cnVlOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAo
bV9wcm9jLm9wdExldmVsKCkgPCAyKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjA1OCw2
ICsyNDgsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gYmxvY2tzLiBUaGlzIGlzIHByZXR0
eSBtdWNoIGd1YXJhbnRlZWQgc2luY2Ugb25lIG9mIHRob3NlIGJsb2NrcyB3aWxsIHJlcGxhY2Ug
YWxsCiAgICAgICAgICAgICAvLyB1c2VzIG9mIHRoZSBTZWxlY3Qgd2l0aCBhIGNvbnN0YW50LCBh
bmQgdGhhdCBjb25zdGFudCB3aWxsIGJlIHRyYW5zaXRpdmVseSB1c2VkCiAgICAgICAgICAgICAv
LyBmcm9tIHRoZSBjaGVjay4KKyAgICAgICAgICAgIC8vIEZJWE1FOiB0aGUgY29tbWVudCBhYm92
ZSB0YWxrcyBhYm91dCBhIHNlbGVjdCB3aXRoIG9uZSBjb25zdGFudCBvcGVyYW5kLCBidXQgdGhl
IGNvZGUgYmVsb3cKKyAgICAgICAgICAgIC8vIHNlYXJjaGVzIGZvciBvbmUgd2l0aCBjb25zdGFu
dHMgb24gYm90aCBzaWRlcy4KICAgICAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzZWxl
Y3RTcGVjaWFsaXphdGlvbkJvdW5kID0gMzsKICAgICAgICAgICAgIFZhbHVlKiBzZWxlY3QgPSBm
aW5kUmVjZW50Tm9kZU1hdGNoaW5nKAogICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDAp
LCBzZWxlY3RTcGVjaWFsaXphdGlvbkJvdW5kLApAQCAtMjA3NCw2MiArMjY2LDEyIEBAIHByaXZh
dGU6CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEJyYW5jaDogewotICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBCcmFuY2goTm90RXF1YWwoeCwgMCkpCi0gICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IEJyYW5jaCh4KQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUo
KSA9PSBOb3RFcXVhbCAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50KDApKSB7
Ci0gICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCcmFuY2goRXF1YWwoeCwgMCksIHRoZW4s
IGVsc2UpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJyYW5jaCh4LCBlbHNlLCB0aGVuKQot
ICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBFcXVhbCAmJiBt
X3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50KDApKSB7Ci0gICAgICAgICAgICAgICAg
bV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAg
ICAgICAgICAgc3RkOjpzd2FwKG1fYmxvY2stPnRha2VuKCksIG1fYmxvY2stPm5vdFRha2VuKCkp
OwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQnJhbmNoKEJpdFhvcihib29sLCAx
KSwgdGhlbiwgZWxzZSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQnJhbmNoKGJvb2wsIGVs
c2UsIHRoZW4pCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09
IEJpdFhvcgotICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+
aXNJbnQzMigxKQotICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgw
KS0+cmV0dXJuc0Jvb2woKSkgewotICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0g
bV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIHN0ZDo6c3dhcCht
X2Jsb2NrLT50YWtlbigpLCBtX2Jsb2NrLT5ub3RUYWtlbigpKTsKLSAgICAgICAgICAgICAgICBt
X2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRo
aXM6IEJyYW5jaChCaXRBbmQoYm9vbCwgeHliMSksIHRoZW4sIGVsc2UpCi0gICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IEJyYW5jaChib29sLCB0aGVuLCBlbHNlKQotICAgICAgICAgICAgaWYgKG1f
dmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXRBbmQKLSAgICAgICAgICAgICAgICAmJiBt
X3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhhc0ludCgpCi0gICAgICAgICAgICAgICAgJiYg
bV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5hc0ludCgpICYgMQotICAgICAgICAgICAgICAg
ICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKS0+cmV0dXJuc0Jvb2woKSkgewotICAgICAg
ICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDAp
OworICAgICAgICAgICAgaWYgKHBlZXBob2xlLnRyeVNpbXBsaWZ5QnJhbmNoKG1fdmFsdWUpKSB7
CiAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtX2No
YW5nZWRDRkcgPSB0cnVlOyAvLyBBIGJpdCBjb25zZXJ2YXRpdmUsIGJ1dCBuZXZlciB1bnNvdW5k
LgogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBUcmlTdGF0ZSB0cmlTdGF0ZSA9IG1fdmFs
dWUtPmNoaWxkKDApLT5hc1RyaVN0YXRlKCk7Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczog
QnJhbmNoKDAsIHRoZW4sIGVsc2UpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEp1bXAoZWxz
ZSkKLSAgICAgICAgICAgIGlmICh0cmlTdGF0ZSA9PSBGYWxzZVRyaVN0YXRlKSB7Ci0gICAgICAg
ICAgICAgICAgbV9ibG9jay0+dGFrZW4oKS5ibG9jaygpLT5yZW1vdmVQcmVkZWNlc3NvcihtX2Js
b2NrKTsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aEp1bXAobV9ibG9jaywg
bV9ibG9jay0+bm90VGFrZW4oKSk7Ci0gICAgICAgICAgICAgICAgbV9jaGFuZ2VkQ0ZHID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBCcmFuY2gobm90IDAsIHRoZW4sIGVsc2UpCi0gICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IEp1bXAodGhlbikKLSAgICAgICAgICAgIGlmICh0cmlTdGF0ZSA9PSBUcnVlVHJp
U3RhdGUpIHsKLSAgICAgICAgICAgICAgICBtX2Jsb2NrLT5ub3RUYWtlbigpLmJsb2NrKCktPnJl
bW92ZVByZWRlY2Vzc29yKG1fYmxvY2spOwotICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxh
Y2VXaXRoSnVtcChtX2Jsb2NrLCBtX2Jsb2NrLT50YWtlbigpKTsKLSAgICAgICAgICAgICAgICBt
X2NoYW5nZWRDRkcgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAobV9wcm9jLm9wdExldmVsKCkgPj0gMikgeworICAgICAgICAg
ICAgaWYgKG1fdmFsdWUtPm9wY29kZSgpID09IEJyYW5jaCAmJiBtX3Byb2Mub3B0TGV2ZWwoKSA+
PSAyKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgYSBjaGVjayBmb3IgdGhlIHNhbWUgcHJvcGVy
dHkgZG9taW5hdGVzIHVzLCB3ZSBjYW4ga2lsbCB0aGUgYnJhbmNoLiBUaGlzIHNvcnQKICAgICAg
ICAgICAgICAgICAvLyBvZiBtYWtlcyBzZW5zZSBoZXJlIGJlY2F1c2UgaXQncyBjaGVhcCwgYnV0
IGhhY2tzIGxpa2UgdGhpcyBzaG93IHRoYXQgd2UncmUgZ29pbmcKICAgICAgICAgICAgICAgICAv
LyB0byBuZWVkIFNDQ1AuCkBAIC0yMTQ3LDYgKzI4OSwxMCBAQCBwcml2YXRlOgogICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmIChWYWx1ZSog
bmV3VmFsdWUgPSBwZWVwaG9sZS50cnlSZWR1Y2UobV92YWx1ZSkpIHsKKyAgICAgICAgICAgICAg
ICByZXBsYWNlV2l0aElkZW50aXR5KG5ld1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX2NoYW5n
ZWQgPSB0cnVlOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0yMjkyLDI0OSArNDM4LDYgQEAgcHJpdmF0ZToKICAgICAgICAgcHJlZGVjZXNz
b3ItPnVwZGF0ZVByZWRlY2Vzc29yc0FmdGVyKCk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wg
c2hvdWxkU3dhcEJpbmFyeU9wZXJhbmRzKFZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIC8v
IE5vdGUgdGhhdCB3ZSBoYXZlIGNvbW11dGF0aXZlIG9wZXJhdGlvbnMgdGhhdCB0YWtlIG1vcmUg
dGhhbiB0d28gY2hpbGRyZW4uIFRob3NlIG9wZXJhdGlvbnMgbWF5Ci0gICAgICAgIC8vIGNvbW11
dGUgdGhlaXIgZmlyc3QgdHdvIGNoaWxkcmVuIHdoaWxlIGxlYXZpbmcgdGhlIHJlc3QgdW5hZmZl
Y3RlZC4KLSAgICAgICAgQVNTRVJUKHZhbHVlLT5udW1DaGlsZHJlbigpID49IDIpOwotCi0gICAg
ICAgIC8vIExlYXZlIGl0IGFsb25lIGlmIHRoZSByaWdodCBjaGlsZCBpcyBhIGNvbnN0YW50Lgot
ICAgICAgICBpZiAodmFsdWUtPmNoaWxkKDEpLT5pc0NvbnN0YW50KCkKLSAgICAgICAgICAgIHx8
IHZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICh2YWx1ZS0+Y2hpbGQoMCktPmlzQ29uc3Rh
bnQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGlmICh2YWx1ZS0+Y2hp
bGQoMSktPm9wY29kZSgpID09IEF0b21pY1N0cm9uZ0NBUykKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgICAgIC8vIFNvcnQgdGhlIG9wZXJhbmRzLiBUaGlzIGlzIGFuIGltcG9ydGFu
dCBjYW5vbmljYWxpemF0aW9uLiBXZSB1c2UgdGhlIGluZGV4IGluc3RlYWQgb2YKLSAgICAgICAg
Ly8gdGhlIGFkZHJlc3MgdG8gbWFrZSB0aGlzIGF0IGxlYXN0IHNsaWdodGx5IGRldGVybWluaXN0
aWMuCi0gICAgICAgIGlmICh2YWx1ZS0+Y2hpbGQoMCktPmluZGV4KCkgPiB2YWx1ZS0+Y2hpbGQo
MSktPmluZGV4KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gVHVybiB0aGlzOiBBZGQoY29uc3RhbnQsIHZhbHVlKQot
ICAgIC8vIEludG8gdGhpczogQWRkKHZhbHVlLCBjb25zdGFudCkKLSAgICAvLwotICAgIC8vIEFs
c286Ci0gICAgLy8gVHVybiB0aGlzOiBBZGQodmFsdWUxLCB2YWx1ZTIpCi0gICAgLy8gSW50byB0
aGlzOiBBZGQodmFsdWUyLCB2YWx1ZTEpCi0gICAgLy8gSWYgd2UgZGVjaWRlIHRoYXQgdmFsdWUy
IGNvbWluZyBmaXJzdCBpcyB0aGUgY2Fub25pY2FsIG9yZGVyaW5nLgotICAgIHZvaWQgaGFuZGxl
Q29tbXV0YXRpdml0eSgpCi0gICAgewotICAgICAgICBpZiAoc2hvdWxkU3dhcEJpbmFyeU9wZXJh
bmRzKG1fdmFsdWUpKSB7Ci0gICAgICAgICAgICBzdGQ6OnN3YXAobV92YWx1ZS0+Y2hpbGQoMCks
IG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICAvLyBGb3IgT3A9PUFkZCBvciBTdWIsIHR1cm4gYW55IG9mIHRo
ZXNlOgotICAgIC8vICAgICAgT3AoTXVsKHgxLCB4MiksIE11bCh4MSwgeDMpKQotICAgIC8vICAg
ICAgT3AoTXVsKHgyLCB4MSksIE11bCh4MSwgeDMpKQotICAgIC8vICAgICAgT3AoTXVsKHgxLCB4
MiksIE11bCh4MywgeDEpKQotICAgIC8vICAgICAgT3AoTXVsKHgyLCB4MSksIE11bCh4MywgeDEp
KQotICAgIC8vIEludG8gdGhpczogTXVsKHgxLCBPcCh4MiwgeDMpKQotICAgIGJvb2wgaGFuZGxl
TXVsRGlzdHJpYnV0aXZpdHkoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdmFsdWUtPm9wY29k
ZSgpID09IEFkZCB8fCBtX3ZhbHVlLT5vcGNvZGUoKSA9PSBTdWIpOwotICAgICAgICBWYWx1ZSog
eDEgPSBudWxscHRyOwotICAgICAgICBWYWx1ZSogeDIgPSBudWxscHRyOwotICAgICAgICBWYWx1
ZSogeDMgPSBudWxscHRyOwotICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgp
ID09IE11bCAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+b3Bjb2RlKCkgPT0gTXVsKSB7Ci0gICAgICAg
ICAgICBWYWx1ZSogeDEgPSBudWxscHRyOwotICAgICAgICAgICAgVmFsdWUqIHgyID0gbnVsbHB0
cjsKLSAgICAgICAgICAgIFZhbHVlKiB4MyA9IG51bGxwdHI7Ci0gICAgICAgICAgICBpZiAobV92
YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApID09IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKSkg
ewotICAgICAgICAgICAgICAgIC8vIE9wKE11bCh4MSwgeDIpLCBNdWwoeDEsIHgzKSkKLSAgICAg
ICAgICAgICAgICB4MSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAg
ICAgICB4MiA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKTsKLSAgICAgICAgICAgICAgICB4
MyA9IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgxKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
bV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpID09IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgw
KSkgewotICAgICAgICAgICAgICAgIC8vIE9wKE11bCh4MiwgeDEpLCBNdWwoeDEsIHgzKSkKLSAg
ICAgICAgICAgICAgICB4MSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKTsKLSAgICAgICAg
ICAgICAgICB4MiA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAg
ICB4MyA9IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgxKTsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApID09IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGls
ZCgxKSkgewotICAgICAgICAgICAgICAgIC8vIE9wKE11bCh4MSwgeDIpLCBNdWwoeDMsIHgxKSkK
LSAgICAgICAgICAgICAgICB4MSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAg
ICAgICAgICAgICB4MiA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKTsKLSAgICAgICAgICAg
ICAgICB4MyA9IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKTsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpID09IG1fdmFsdWUtPmNoaWxkKDEpLT5j
aGlsZCgxKSkgewotICAgICAgICAgICAgICAgIC8vIE9wKE11bCh4MiwgeDEpLCBNdWwoeDMsIHgx
KSkKLSAgICAgICAgICAgICAgICB4MSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKTsKLSAg
ICAgICAgICAgICAgICB4MiA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAg
ICAgICAgICB4MyA9IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBpZiAoeDEgIT0gbnVsbHB0cikgewotICAgICAgICAgICAgQVNT
RVJUKHgyICE9IG51bGxwdHIgJiYgeDMgIT0gbnVsbHB0cik7Ci0gICAgICAgICAgICBWYWx1ZSog
bmV3T3AgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIG1fdmFsdWUtPm9w
Y29kZSgpLCBtX3ZhbHVlLT5vcmlnaW4oKSwgeDIsIHgzKTsKLSAgICAgICAgICAgIHJlcGxhY2VX
aXRoTmV3PFZhbHVlPihNdWwsIG1fdmFsdWUtPm9yaWdpbigpLCB4MSwgbmV3T3ApOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIC8vIEZvciBPcD09Qml0T3Igb3IgQml0WG9yLCB0dXJuIGFueSBvZiB0aGVzZToK
LSAgICAvLyAgICAgIE9wKEJpdEFuZCh4MSwgeDIpLCBCaXRBbmQoeDEsIHgzKSkKLSAgICAvLyAg
ICAgIE9wKEJpdEFuZCh4MiwgeDEpLCBCaXRBbmQoeDEsIHgzKSkKLSAgICAvLyAgICAgIE9wKEJp
dEFuZCh4MSwgeDIpLCBCaXRBbmQoeDMsIHgxKSkKLSAgICAvLyAgICAgIE9wKEJpdEFuZCh4Miwg
eDEpLCBCaXRBbmQoeDMsIHgxKSkKLSAgICAvLyBJbnRvIHRoaXM6IEJpdEFuZChPcCh4MiwgeDMp
LCB4MSkKLSAgICAvLyBBbmQgYW55IG9mIHRoZXNlOgotICAgIC8vICAgICAgT3AoQml0QW5kKHgx
LCB4MiksIHgxKQotICAgIC8vICAgICAgT3AoQml0QW5kKHgyLCB4MSksIHgxKQotICAgIC8vICAg
ICAgT3AoeDEsIEJpdEFuZCh4MSwgeDIpKQotICAgIC8vICAgICAgT3AoeDEsIEJpdEFuZCh4Miwg
eDEpKQotICAgIC8vIEludG8gdGhpczogQml0QW5kKE9wKHgyLCB4MSksIHgxKQotICAgIC8vIFRo
aXMgc2Vjb25kIHNldCBpcyBlcXVpdmFsZW50IHRvIGRvaW5nIHgxID0+IEJpdEFuZCh4MSwgeDEp
LCBhbmQgdGhlbiBhcHBseWluZyB0aGUgZmlyc3Qgc2V0LgotICAgIC8vIEl0IGRvZXMgbm90IHJl
ZHVjZSB0aGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMgZXhlY3V0ZWQsIGJ1dCBwcm92aWRlcyBzb21l
IHVzZWZ1bCBub3JtYWxpemF0aW9uOiB3ZSBwcmVmZXIgdG8gaGF2ZSBCaXRBbmQgYXQgdGhlIG91
dGVybW9zdCwgdGhlbiBCaXRYb3IsIGFuZCBmaW5hbGx5IEJpdE9yIGF0IHRoZSBpbm5lcm1vc3QK
LSAgICBib29sIGhhbmRsZUJpdEFuZERpc3RyaWJ1dGl2aXR5KCkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChtX3ZhbHVlLT5vcGNvZGUoKSA9PSBCaXRPciB8fCBtX3ZhbHVlLT5vcGNvZGUoKSA9PSBC
aXRYb3IpOwotICAgICAgICBWYWx1ZSogeDEgPSBudWxscHRyOwotICAgICAgICBWYWx1ZSogeDIg
PSBudWxscHRyOwotICAgICAgICBWYWx1ZSogeDMgPSBudWxscHRyOwotICAgICAgICBpZiAobV92
YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdEFuZCAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+
b3Bjb2RlKCkgPT0gQml0QW5kKSB7Ci0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCkt
PmNoaWxkKDApID09IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKSkgewotICAgICAgICAgICAg
ICAgIHgxID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIHgy
ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpOwotICAgICAgICAgICAgICAgIHgzID0gbV92
YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3ZhbHVl
LT5jaGlsZCgwKS0+Y2hpbGQoMSkgPT0gbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDApKSB7Ci0g
ICAgICAgICAgICAgICAgeDEgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSk7Ci0gICAgICAg
ICAgICAgICAgeDIgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAg
ICAgeDMgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSk7Ci0gICAgICAgICAgICB9IGVsc2Ug
aWYgKG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hp
bGQoMSkpIHsKLSAgICAgICAgICAgICAgICB4MSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgw
KTsKLSAgICAgICAgICAgICAgICB4MiA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKTsKLSAg
ICAgICAgICAgICAgICB4MyA9IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKTsKLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpID09IG1fdmFsdWUtPmNo
aWxkKDEpLT5jaGlsZCgxKSkgewotICAgICAgICAgICAgICAgIHgxID0gbV92YWx1ZS0+Y2hpbGQo
MCktPmNoaWxkKDEpOwotICAgICAgICAgICAgICAgIHgyID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNo
aWxkKDApOwotICAgICAgICAgICAgICAgIHgzID0gbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDAp
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5v
cGNvZGUoKSA9PSBCaXRBbmQpIHsKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkpIHsKLSAgICAgICAgICAgICAgICB4MSA9IHgz
ID0gbV92YWx1ZS0+Y2hpbGQoMSk7Ci0gICAgICAgICAgICAgICAgeDIgPSBtX3ZhbHVlLT5jaGls
ZCgwKS0+Y2hpbGQoMSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fdmFsdWUtPmNoaWxkKDAp
LT5jaGlsZCgxKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKSkgewotICAgICAgICAgICAgICAgIHgxID0g
eDMgPSBtX3ZhbHVlLT5jaGlsZCgxKTsKLSAgICAgICAgICAgICAgICB4MiA9IG1fdmFsdWUtPmNo
aWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChtX3Zh
bHVlLT5jaGlsZCgxKS0+b3Bjb2RlKCkgPT0gQml0QW5kKSB7Ci0gICAgICAgICAgICBpZiAobV92
YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDApID09IG1fdmFsdWUtPmNoaWxkKDApKSB7Ci0gICAgICAg
ICAgICAgICAgeDEgPSB4MyA9IG1fdmFsdWUtPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIHgy
ID0gbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpOwotICAgICAgICAgICAgfSBlbHNlIGlmICht
X3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSkgPT0gbV92YWx1ZS0+Y2hpbGQoMCkpIHsKLSAgICAg
ICAgICAgICAgICB4MSA9IHgzID0gbV92YWx1ZS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAg
eDIgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKHgxICE9IG51bGxwdHIpIHsKLSAgICAgICAgICAgIEFTU0VSVCh4MiAh
PSBudWxscHRyICYmIHgzICE9IG51bGxwdHIpOwotICAgICAgICAgICAgVmFsdWUqIGJpdE9wID0g
bV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBtX3ZhbHVlLT5vcGNvZGUoKSwg
bV92YWx1ZS0+b3JpZ2luKCksIHgyLCB4Myk7Ci0gICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxW
YWx1ZT4oQml0QW5kLCBtX3ZhbHVlLT5vcmlnaW4oKSwgeDEsIGJpdE9wKTsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBzdHJ1Y3QgQ2Fub25pY2FsaXplZENvbXBhcmlzb24gewotICAgICAgICBPcGNvZGUgb3Bj
b2RlOwotICAgICAgICBWYWx1ZSogb3BlcmFuZHNbMl07Ci0gICAgfTsKLSAgICBzdGF0aWMgQ2Fu
b25pY2FsaXplZENvbXBhcmlzb24gY2Fub25pY2FsaXplQ29tcGFyaXNvbihWYWx1ZSogdmFsdWUp
Ci0gICAgewotICAgICAgICBhdXRvIGZsaXAgPSBbXSAoT3Bjb2RlIG9wY29kZSkgewotICAgICAg
ICAgICAgc3dpdGNoIChvcGNvZGUpIHsKLSAgICAgICAgICAgIGNhc2UgTGVzc1RoYW46Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIEdyZWF0ZXJUaGFuOwotICAgICAgICAgICAgY2FzZSBHcmVhdGVy
VGhhbjoKLSAgICAgICAgICAgICAgICByZXR1cm4gTGVzc1RoYW47Ci0gICAgICAgICAgICBjYXNl
IExlc3NFcXVhbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gR3JlYXRlckVxdWFsOwotICAgICAg
ICAgICAgY2FzZSBHcmVhdGVyRXF1YWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIExlc3NFcXVh
bDsKLSAgICAgICAgICAgIGNhc2UgQWJvdmU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEJlbG93
OwotICAgICAgICAgICAgY2FzZSBCZWxvdzoKLSAgICAgICAgICAgICAgICByZXR1cm4gQWJvdmU7
Ci0gICAgICAgICAgICBjYXNlIEFib3ZlRXF1YWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEJl
bG93RXF1YWw7Ci0gICAgICAgICAgICBjYXNlIEJlbG93RXF1YWw6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIEFib3ZlRXF1YWw7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IHJldHVybiBvcGNvZGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICAgIGlmIChz
aG91bGRTd2FwQmluYXJ5T3BlcmFuZHModmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIHsgZmxp
cCh2YWx1ZS0+b3Bjb2RlKCkpLCB7IHZhbHVlLT5jaGlsZCgxKSwgdmFsdWUtPmNoaWxkKDApIH0g
fTsKLSAgICAgICAgcmV0dXJuIHsgdmFsdWUtPm9wY29kZSgpLCB7IHZhbHVlLT5jaGlsZCgwKSwg
dmFsdWUtPmNoaWxkKDEpIH0gfTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
cmVhbGx5IGJlIGEgZm9yd2FyZCBhbmFseXNpcy4gSW5zdGVhZCwgd2UgdXNlcyBhIGJvdW5kZWQt
c2VhcmNoIGJhY2t3YXJkcwotICAgIC8vIGFuYWx5c2lzLgotICAgIEludFJhbmdlIHJhbmdlRm9y
KFZhbHVlKiB2YWx1ZSwgdW5zaWduZWQgdGltZVRvTGl2ZSA9IDUpCi0gICAgewotICAgICAgICBp
ZiAoIXRpbWVUb0xpdmUpCi0gICAgICAgICAgICByZXR1cm4gSW50UmFuZ2U6OnRvcCh2YWx1ZS0+
dHlwZSgpKTsKLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7Ci0g
ICAgICAgIGNhc2UgQ29uc3QzMjoKLSAgICAgICAgY2FzZSBDb25zdDY0OiB7Ci0gICAgICAgICAg
ICBpbnQ2NF90IGludFZhbHVlID0gdmFsdWUtPmFzSW50KCk7Ci0gICAgICAgICAgICByZXR1cm4g
SW50UmFuZ2UoaW50VmFsdWUsIGludFZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2Ug
Qml0QW5kOgotICAgICAgICAgICAgaWYgKHZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIEludFJhbmdlOjpyYW5nZUZvck1hc2sodmFsdWUtPmNoaWxkKDEp
LT5hc0ludCgpLCB2YWx1ZS0+dHlwZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IGNhc2UgU1NocjoKLSAgICAgICAgICAgIGlmICh2YWx1ZS0+Y2hpbGQoMSktPmhhc0ludDMyKCkp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2VGb3IodmFsdWUtPmNoaWxkKDApLCB0aW1l
VG9MaXZlIC0gMSkuc1NocigKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUtPmNoaWxkKDEpLT5h
c0ludDMyKCksIHZhbHVlLT50eXBlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgY2FzZSBaU2hyOgotICAgICAgICAgICAgaWYgKHZhbHVlLT5jaGlsZCgx
KS0+aGFzSW50MzIoKSkgewotICAgICAgICAgICAgICAgIHJldHVybiByYW5nZUZvcih2YWx1ZS0+
Y2hpbGQoMCksIHRpbWVUb0xpdmUgLSAxKS56U2hyKAotICAgICAgICAgICAgICAgICAgICB2YWx1
ZS0+Y2hpbGQoMSktPmFzSW50MzIoKSwgdmFsdWUtPnR5cGUoKSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNobDoKLSAgICAgICAgICAgIGlmICh2
YWx1ZS0+Y2hpbGQoMSktPmhhc0ludDMyKCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmFu
Z2VGb3IodmFsdWUtPmNoaWxkKDApLCB0aW1lVG9MaXZlIC0gMSkuc2hsKAotICAgICAgICAgICAg
ICAgICAgICB2YWx1ZS0+Y2hpbGQoMSktPmFzSW50MzIoKSwgdmFsdWUtPnR5cGUoKSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEFkZDoKLSAgICAg
ICAgICAgIHJldHVybiByYW5nZUZvcih2YWx1ZS0+Y2hpbGQoMCksIHRpbWVUb0xpdmUgLSAxKS5h
ZGQoCi0gICAgICAgICAgICAgICAgcmFuZ2VGb3IodmFsdWUtPmNoaWxkKDEpLCB0aW1lVG9MaXZl
IC0gMSksIHZhbHVlLT50eXBlKCkpOwotCi0gICAgICAgIGNhc2UgU3ViOgotICAgICAgICAgICAg
cmV0dXJuIHJhbmdlRm9yKHZhbHVlLT5jaGlsZCgwKSwgdGltZVRvTGl2ZSAtIDEpLnN1YigKLSAg
ICAgICAgICAgICAgICByYW5nZUZvcih2YWx1ZS0+Y2hpbGQoMSksIHRpbWVUb0xpdmUgLSAxKSwg
dmFsdWUtPnR5cGUoKSk7Ci0KLSAgICAgICAgY2FzZSBNdWw6Ci0gICAgICAgICAgICByZXR1cm4g
cmFuZ2VGb3IodmFsdWUtPmNoaWxkKDApLCB0aW1lVG9MaXZlIC0gMSkubXVsKAotICAgICAgICAg
ICAgICAgIHJhbmdlRm9yKHZhbHVlLT5jaGlsZCgxKSwgdGltZVRvTGl2ZSAtIDEpLCB2YWx1ZS0+
dHlwZSgpKTsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4gSW50UmFuZ2U6OnRvcCh2YWx1ZS0+dHlwZSgpKTsKLSAgICB9
Ci0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50
cz4KICAgICB2b2lkIHJlcGxhY2VXaXRoTmV3KEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCiAgICAg
ewpAQCAtMjU1NywyNyArNDYwLDYgQEAgcHJpdmF0ZToKICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1
ZTsKICAgICB9CiAKLSAgICB2b2lkIGhhbmRsZVNoaWZ0QW1vdW50KCkKLSAgICB7Ci0gICAgICAg
IC8vIFNoaWZ0IGFueXRoaW5nIGJ5IHplcm8gaXMgaWRlbnRpdHkuCi0gICAgICAgIGlmIChtX3Zh
bHVlLT5jaGlsZCgxKS0+aXNJbnQzMigwKSkgewotICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVu
dGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBUaGUgc2hpZnQgYWxyZWFkeSBtYXNrcyBpdHMgc2hpZnQgYW1vdW50LiBJ
ZiB0aGUgc2hpZnQgYW1vdW50IGlzIGJlaW5nIG1hc2tlZCBieSBhCi0gICAgICAgIC8vIHJlZHVu
ZGFudCBhbW91bnQsIHRoZW4gcmVtb3ZlIHRoZSBtYXNrLiBGb3IgZXhhbXBsZSwKLSAgICAgICAg
Ly8gVHVybiB0aGlzOiBTaGwoQHgsIEJpdEFuZChAeSwgNjMpKQotICAgICAgICAvLyBJbnRvIHRo
aXM6IFNobChAeCwgQHkpCi0gICAgICAgIHVuc2lnbmVkIG1hc2sgPSBzaXplb2ZUeXBlKG1fdmFs
dWUtPnR5cGUoKSkgKiA4IC0gMTsKLSAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5vcGNv
ZGUoKSA9PSBCaXRBbmQKLSAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgx
KS0+aGFzSW50MzIoKQotICAgICAgICAgICAgJiYgKG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgx
KS0+YXNJbnQzMigpICYgbWFzaykgPT0gbWFzaykgewotICAgICAgICAgICAgbV92YWx1ZS0+Y2hp
bGQoMSkgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICBtX2NoYW5n
ZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgdm9pZCByZXBsYWNlSWZSZWR1bmRh
bnQoKQogICAgIHsKICAgICAgICAgbV9jaGFuZ2VkIHw9IG1fcHVyZUNTRS5wcm9jZXNzKG1fdmFs
dWUsICptX2RvbWluYXRvcnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsaWRhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3Bw
CmluZGV4IGY1Y2Q3ZDJmMGM5Li5jOTI3MzJkYmJmOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbGlkYXRlLmNwcApAQCAtMjI2LDcgKzIyNiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IGNhc2UgU1NocjoKICAgICAgICAgICAgIGNhc2UgWlNocjoKICAgICAgICAgICAgIGNhc2UgUm90
UjoKLSAgICAgICAgICAgICAgICBjYXNlIFJvdEw6CisgICAgICAgICAgICBjYXNlIFJvdEw6CiAg
ICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCkuaGFzRXh0cmFCaXRzKCksICgi
QXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxk
cmVuKCkgPT0gMiwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAppbmRleCBhYThlNDk5NzE0NS4uMmIyODFk
N2ExNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCkBAIC0yMzY5LDcgKzIzNjks
NyBAQCB2b2lkIHRlc3ROZWdNdWxBcmdJbW0oaW50NjRfdCBhLCBpbnQ2NF90IGIpCiAgICAgVmFs
dWUqIHJlc3VsdCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgTmVnLCBPcmlnaW4oKSwg
bXVsKTsKICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCks
IHJlc3VsdCk7CiAKLSAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2MsIGEpID09
IC0oYSAqIGIpKTsKKyAgICBDSEVDS19FUShjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2MsIGEp
LCAtKGEgKiBiKSk7CiB9CiAKIHZvaWQgdGVzdFN1Yk11bE11bEFyZ3MoaW50NjRfdCBhLCBpbnQ2
NF90IGIsIGludDY0X3QgYykKQEAgLTE2ODYzLDcgKzE2ODYzLDcgQEAgdm9pZCB0ZXN0RmxvYXRF
cXVhbE9yVW5vcmRlcmVkRG9udEZvbGQoKQogICAgICAgICBmb3IgKGF1dG8mIHNlY29uZCA6IGZs
b2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4oKSkgewogICAgICAgICAgICAgZmxvYXQgYiA9IHNl
Y29uZC52YWx1ZTsKICAgICAgICAgICAgIGJvb2wgZXhwZWN0ZWRSZXN1bHQgPSAoYSA9PSBiKSB8
fCBzdGQ6OmlzdW5vcmRlcmVkKGEsIGIpOwotICAgICAgICAgICAgQ0hFQ0soISFpbnZva2U8aW50
MzJfdD4oKmNvZGUsIHN0YXRpY19jYXN0PGRvdWJsZT4oYikpID09IGV4cGVjdGVkUmVzdWx0KTsK
KyAgICAgICAgICAgIENIRUNLX0VRKCEhaW52b2tlPGludDMyX3Q+KCpjb2RlLCBzdGF0aWNfY2Fz
dDxkb3VibGU+KGIpKSwgZXhwZWN0ZWRSZXN1bHQpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCmluZGV4IGNjNGJiMzk3NmExLi4wMDhi
ZmU0NmEzNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcApAQCAtNTAs
NiArNTAsNyBAQCB1c2luZyBuYW1lc3BhY2UgQjM7CiAKIE91dHB1dDo6T3V0cHV0KFN0YXRlJiBz
dGF0ZSkKICAgICA6IG1fcHJvYygqc3RhdGUucHJvYykKKyAgICAsIG1fcGVlcGhvbGUobV9wcm9j
KQogewogfQogCkBAIC04OCw2ICs4OSw3IEBAIExCYXNpY0Jsb2NrIE91dHB1dDo6YXBwZW5kVG8o
TEJhc2ljQmxvY2sgYmxvY2ssIExCYXNpY0Jsb2NrIG5leHRCbG9jaykKIHZvaWQgT3V0cHV0Ojph
cHBlbmRUbyhMQmFzaWNCbG9jayBibG9jaykKIHsKICAgICBtX2Jsb2NrID0gYmxvY2s7CisgICAg
bV9wZWVwaG9sZS5zZXRCbG9jayhtX2Jsb2NrKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6ZnJhbWVQ
b2ludGVyKCkKQEAgLTEyOSwxMzMgKzEzMSwxMTMgQEAgTFZhbHVlIE91dHB1dDo6cGhpKExUeXBl
IHR5cGUpCiAKIExWYWx1ZSBPdXRwdXQ6Om9wYXF1ZShMVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0
dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBPcGFxdWUsIG9yaWdpbigpLCB2
YWx1ZSk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlT3BhcXVlKHZhbHVlLT50eXBlKCks
IG9yaWdpbigpLCB2YWx1ZSk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmFkZChMVmFsdWUgbGVmdCwg
TFZhbHVlIHJpZ2h0KQogewotICAgIGlmIChWYWx1ZSogcmVzdWx0ID0gbGVmdC0+YWRkQ29uc3Rh
bnQobV9wcm9jLCByaWdodCkpIHsKLSAgICAgICAgbV9ibG9jay0+YXBwZW5kKHJlc3VsdCk7Ci0g
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmRO
ZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpBZGQsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7Cisg
ICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlQWRkKGxlZnQtPnR5cGUoKSwgb3JpZ2luKCksIGxl
ZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6c3ViKExWYWx1ZSBsZWZ0LCBMVmFsdWUg
cmlnaHQpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJv
YywgQjM6OlN1Yiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9s
ZS5yZWR1Y2VTdWIobGVmdC0+dHlwZSgpLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBM
VmFsdWUgT3V0cHV0OjptdWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICByZXR1
cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6TXVsLCBvcmlnaW4o
KSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZU11bChsZWZ0LT50
eXBlKCksIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmRpdihM
VmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmRO
ZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpEaXYsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7Cisg
ICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlRGl2KGxlZnQtPnR5cGUoKSwgb3JpZ2luKCksIGxl
ZnQsIHJpZ2h0LCBmYWxzZSk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmNoaWxsRGl2KExWYWx1ZSBs
ZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6
VmFsdWU+KG1fcHJvYywgY2hpbGwoQjM6OkRpdiksIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7Cisg
ICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlRGl2KGxlZnQtPnR5cGUoKSwgb3JpZ2luKCksIGxl
ZnQsIHJpZ2h0LCB0cnVlKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6bW9kKExWYWx1ZSBsZWZ0LCBM
VmFsdWUgcmlnaHQpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+
KG1fcHJvYywgQjM6Ok1vZCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9w
ZWVwaG9sZS5yZWR1Y2VNb2QobGVmdC0+dHlwZSgpLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQsIGZh
bHNlKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6Y2hpbGxNb2QoTFZhbHVlIGxlZnQsIExWYWx1ZSBy
aWdodCkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9j
LCBjaGlsbChCMzo6TW9kKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9w
ZWVwaG9sZS5yZWR1Y2VNb2QobGVmdC0+dHlwZSgpLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQsIHRy
dWUpOwogfQogCiBMVmFsdWUgT3V0cHV0OjpuZWcoTFZhbHVlIHZhbHVlKQogewotICAgIHJldHVy
biBtX2Jsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQjM6Ok5lZywgb3JpZ2luKCksIHZh
bHVlKTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VOZWcodmFsdWUtPnR5cGUoKSwgb3Jp
Z2luKCksIHZhbHVlKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6ZG91YmxlQWRkKExWYWx1ZSBsZWZ0
LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFs
dWU+KG1fcHJvYywgQjM6OkFkZCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4g
bV9wZWVwaG9sZS5yZWR1Y2VBZGQobGVmdC0+dHlwZSgpLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQp
OwogfQogCiBMVmFsdWUgT3V0cHV0Ojpkb3VibGVTdWIoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdo
dCkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBC
Mzo6U3ViLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJl
ZHVjZVN1YihsZWZ0LT50eXBlKCksIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1
ZSBPdXRwdXQ6OmRvdWJsZU11bChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIHJl
dHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpNdWwsIG9yaWdp
bigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlTXVsKGxlZnQt
PnR5cGUoKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6ZG91
YmxlRGl2KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2st
PmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkRpdiwgb3JpZ2luKCksIGxlZnQsIHJp
Z2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VEaXYobGVmdC0+dHlwZSgpLCBvcmln
aW4oKSwgbGVmdCwgcmlnaHQsIGZhbHNlKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6ZG91YmxlTW9k
KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVu
ZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6Ok1vZCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsK
KyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VNb2QobGVmdC0+dHlwZSgpLCBvcmlnaW4oKSwg
bGVmdCwgcmlnaHQsIGZhbHNlKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6Yml0QW5kKExWYWx1ZSBs
ZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6
VmFsdWU+KG1fcHJvYywgQjM6OkJpdEFuZCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICBy
ZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VCaXRBbmQobGVmdC0+dHlwZSgpLCBvcmlnaW4oKSwgbGVm
dCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0cHV0OjpiaXRPcihMVmFsdWUgbGVmdCwgTFZhbHVl
IHJpZ2h0KQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3By
b2MsIEIzOjpCaXRPciwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVw
aG9sZS5yZWR1Y2VCaXRPcihsZWZ0LT50eXBlKCksIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiB9
CiAKIExWYWx1ZSBPdXRwdXQ6OmJpdFhvcihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewot
ICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpCaXRY
b3IsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNl
Qml0WG9yKGxlZnQtPnR5cGUoKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVl
IE91dHB1dDo6c2hsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgcmlnaHQgPSBj
YXN0VG9JbnQzMihyaWdodCk7Ci0gICAgaWYgKFZhbHVlKiByZXN1bHQgPSBsZWZ0LT5zaGxDb25z
dGFudChtX3Byb2MsIHJpZ2h0KSkgewotICAgICAgICBtX2Jsb2NrLT5hcHBlbmQocmVzdWx0KTsK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVu
ZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlNobCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsK
KyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VTaGwobGVmdC0+dHlwZSgpLCBvcmlnaW4oKSwg
bGVmdCwgY2FzdFRvSW50MzIocmlnaHQpKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6YVNocihMVmFs
dWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIHJpZ2h0ID0gY2FzdFRvSW50MzIocmlnaHQp
OwotICAgIGlmIChWYWx1ZSogcmVzdWx0ID0gbGVmdC0+c1NockNvbnN0YW50KG1fcHJvYywgcmln
aHQpKSB7Ci0gICAgICAgIG1fYmxvY2stPmFwcGVuZChyZXN1bHQpOwotICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIH0KLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4o
bV9wcm9jLCBCMzo6U1Nociwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9w
ZWVwaG9sZS5yZWR1Y2VTU2hyKGxlZnQtPnR5cGUoKSwgb3JpZ2luKCksIGxlZnQsIGNhc3RUb0lu
dDMyKHJpZ2h0KSk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmxTaHIoTFZhbHVlIGxlZnQsIExWYWx1
ZSByaWdodCkKIHsKLSAgICByaWdodCA9IGNhc3RUb0ludDMyKHJpZ2h0KTsKLSAgICBpZiAoVmFs
dWUqIHJlc3VsdCA9IGxlZnQtPnpTaHJDb25zdGFudChtX3Byb2MsIHJpZ2h0KSkgewotICAgICAg
ICBtX2Jsb2NrLT5hcHBlbmQocmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlpT
aHIsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNl
WlNocihsZWZ0LT50eXBlKCksIG9yaWdpbigpLCBsZWZ0LCBjYXN0VG9JbnQzMihyaWdodCkpOwog
fQogCiBMVmFsdWUgT3V0cHV0OjpiaXROb3QoTFZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBt
X2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpCaXRYb3IsIG9yaWdpbigp
LAotICAgICAgICB2YWx1ZSwKLSAgICAgICAgbV9ibG9jay0+YXBwZW5kSW50Q29uc3RhbnQobV9w
cm9jLCBvcmlnaW4oKSwgdmFsdWUtPnR5cGUoKSwgLTEpKTsKKyAgICBWYWx1ZSogYWxsT25lcyA9
IG1fYmxvY2stPmFwcGVuZEludENvbnN0YW50KG1fcHJvYywgb3JpZ2luKCksIHZhbHVlLT50eXBl
KCksIC0xKTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VCaXRYb3IodmFsdWUtPnR5cGUo
KSwgb3JpZ2luKCksIHZhbHVlLCBhbGxPbmVzKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6bG9naWNh
bE5vdChMVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6
VmFsdWU+KG1fcHJvYywgQjM6OkVxdWFsLCBvcmlnaW4oKSwgdmFsdWUsIGludDMyWmVybyk7Cisg
ICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlRXF1YWwoSW50MzIsIG9yaWdpbigpLCB2YWx1ZSwg
aW50MzJaZXJvKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6Y3RsejMyKExWYWx1ZSBvcGVyYW5kKQpA
QCAtMjY1LDE3ICsyNDcsMTcgQEAgTFZhbHVlIE91dHB1dDo6Y3RsejMyKExWYWx1ZSBvcGVyYW5k
KQogCiBMVmFsdWUgT3V0cHV0Ojpkb3VibGVBYnMoTFZhbHVlIHZhbHVlKQogewotICAgIHJldHVy
biBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpBYnMsIG9yaWdpbigp
LCB2YWx1ZSk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlQWJzKHZhbHVlLT50eXBlKCks
IG9yaWdpbigpLCB2YWx1ZSk7CiB9CiAKLUxWYWx1ZSBPdXRwdXQ6OmRvdWJsZUNlaWwoTFZhbHVl
IG9wZXJhbmQpCitMVmFsdWUgT3V0cHV0Ojpkb3VibGVDZWlsKExWYWx1ZSB2YWx1ZSkKIHsKLSAg
ICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Q2VpbCwg
b3JpZ2luKCksIG9wZXJhbmQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZUNlaWwodmFs
dWUtPnR5cGUoKSwgb3JpZ2luKCksIHZhbHVlKTsKIH0KIAotTFZhbHVlIE91dHB1dDo6ZG91Ymxl
Rmxvb3IoTFZhbHVlIG9wZXJhbmQpCitMVmFsdWUgT3V0cHV0Ojpkb3VibGVGbG9vcihMVmFsdWUg
dmFsdWUpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJv
YywgQjM6OkZsb29yLCBvcmlnaW4oKSwgb3BlcmFuZCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUu
cmVkdWNlRmxvb3IodmFsdWUtPnR5cGUoKSwgb3JpZ2luKCksIHZhbHVlKTsKIH0KIAogTFZhbHVl
IE91dHB1dDo6ZG91YmxlVHJ1bmMoTFZhbHVlIHZhbHVlKQpAQCAtMzEyLDEzICsyOTQsMTMgQEAg
TFZhbHVlIE91dHB1dDo6ZG91YmxlUG93aShMVmFsdWUgeCwgTFZhbHVlIHkpCiAgICAgLy8gc2hv
dWxkIGJlIGludm9sdmVkIGluIGFueSBvcGVyYXRpb24gdGhhdCBjcmVhdGVzIGJsb2Nrcy4KICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyMjIzCiAgICAg
YXV0byByZXN1bHQgPSBwb3dEb3VibGVJbnQzMihtX3Byb2MsIG1fYmxvY2ssIG9yaWdpbigpLCB4
LCB5KTsKLSAgICBtX2Jsb2NrID0gcmVzdWx0LmZpcnN0OworICAgIGFwcGVuZFRvKHJlc3VsdC5m
aXJzdCk7CiAgICAgcmV0dXJuIHJlc3VsdC5zZWNvbmQ7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmRv
dWJsZVNxcnQoTFZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8
QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpTcXJ0LCBvcmlnaW4oKSwgdmFsdWUpOworICAgIHJldHVy
biBtX3BlZXBob2xlLnJlZHVjZVNxcnQodmFsdWUtPnR5cGUoKSwgb3JpZ2luKCksIHZhbHVlKTsK
IH0KIAogTFZhbHVlIE91dHB1dDo6ZG91YmxlVG9JbnQoTFZhbHVlIHZhbHVlKQpAQCAtMzQ3LDcg
KzMyOSw3IEBAIExWYWx1ZSBPdXRwdXQ6OmRvdWJsZVRvVUludChMVmFsdWUgdmFsdWUpCiAKIExW
YWx1ZSBPdXRwdXQ6OnNpZ25FeHQzMlRvNjQoTFZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBt
X2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpTRXh0MzIsIG9yaWdpbigp
LCB2YWx1ZSk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlU0V4dDMyKEludDY0LCBvcmln
aW4oKSwgdmFsdWUpOwogfQogCiBMVmFsdWUgT3V0cHV0OjpzaWduRXh0MzJUb1B0cihMVmFsdWUg
dmFsdWUpCkBAIC0zNTksMTQgKzM0MSwxMiBAQCBMVmFsdWUgT3V0cHV0Ojp6ZXJvRXh0KExWYWx1
ZSB2YWx1ZSwgTFR5cGUgdHlwZSkKIHsKICAgICBpZiAodmFsdWUtPnR5cGUoKSA9PSB0eXBlKQog
ICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgaWYgKHZhbHVlLT5oYXNJbnQzMigpKQotICAgICAg
ICByZXR1cm4gbV9ibG9jay0+YXBwZW5kSW50Q29uc3RhbnQobV9wcm9jLCBvcmlnaW4oKSwgSW50
NjQsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUtPmFz
SW50MzIoKSkpKTsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9w
cm9jLCBCMzo6WkV4dDMyLCBvcmlnaW4oKSwgdmFsdWUpOworICAgIHJldHVybiBtX3BlZXBob2xl
LnJlZHVjZVpFeHQzMihJbnQ2NCwgb3JpZ2luKCksIHZhbHVlKTsKIH0KIAogTFZhbHVlIE91dHB1
dDo6aW50VG9Eb3VibGUoTFZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBl
bmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpJVG9ELCBvcmlnaW4oKSwgdmFsdWUpOworICAg
IHJldHVybiBtX3BlZXBob2xlLnJlZHVjZUlUb0QoRG91YmxlLCBvcmlnaW4oKSwgdmFsdWUpOwog
fQogCiBMVmFsdWUgT3V0cHV0Ojp1bnNpZ25lZFRvRG91YmxlKExWYWx1ZSB2YWx1ZSkKQEAgLTM3
OCwxOSArMzU4LDE3IEBAIExWYWx1ZSBPdXRwdXQ6OmNhc3RUb0ludDMyKExWYWx1ZSB2YWx1ZSkK
IHsKICAgICBpZiAodmFsdWUtPnR5cGUoKSA9PSBJbnQzMikKICAgICAgICAgcmV0dXJuIHZhbHVl
OwotICAgIGlmICh2YWx1ZS0+aGFzSW50NjQoKSkKLSAgICAgICAgcmV0dXJuIGNvbnN0SW50MzIo
c3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUtPmFzSW50NjQoKSkpOwotICAgIHJldHVybiBtX2Js
b2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpUcnVuYywgb3JpZ2luKCksIHZh
bHVlKTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VUcnVuYyhJbnQzMiwgb3JpZ2luKCks
IHZhbHVlKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6ZG91YmxlVG9GbG9hdChMVmFsdWUgdmFsdWUp
CiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6
OkRvdWJsZVRvRmxvYXQsIG9yaWdpbigpLCB2YWx1ZSk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUu
cmVkdWNlRG91YmxlVG9GbG9hdChGbG9hdCwgb3JpZ2luKCksIHZhbHVlKTsKIH0KIAogTFZhbHVl
IE91dHB1dDo6ZmxvYXRUb0RvdWJsZShMVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIG1fYmxv
Y2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkZsb2F0VG9Eb3VibGUsIG9yaWdp
bigpLCB2YWx1ZSk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlRmxvYXRUb0RvdWJsZShE
b3VibGUsIG9yaWdpbigpLCB2YWx1ZSk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmxvYWQoVHlwZWRQ
b2ludGVyIHBvaW50ZXIsIExUeXBlIHR5cGUpCkBAIC00ODUsMTE3ICs0NjMsODcgQEAgTFZhbHVl
IE91dHB1dDo6YmFzZUluZGV4KExWYWx1ZSBiYXNlLCBMVmFsdWUgaW5kZXgsIFNjYWxlIHNjYWxl
LCBwdHJkaWZmX3Qgb2Zmc2UKIAogTFZhbHVlIE91dHB1dDo6ZXF1YWwoTFZhbHVlIGxlZnQsIExW
YWx1ZSByaWdodCkKIHsKLSAgICBUcmlTdGF0ZSByZXN1bHQgPSBsZWZ0LT5lcXVhbENvbnN0YW50
KHJpZ2h0KTsKLSAgICBpZiAocmVzdWx0ICE9IE1peGVkVHJpU3RhdGUpCi0gICAgICAgIHJldHVy
biBjb25zdEJvb2wocmVzdWx0ID09IFRydWVUcmlTdGF0ZSk7Ci0gICAgcmV0dXJuIG1fYmxvY2st
PmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkVxdWFsLCBvcmlnaW4oKSwgbGVmdCwg
cmlnaHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZUVxdWFsKEludDMyLCBvcmlnaW4o
KSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0cHV0Ojpub3RFcXVhbChMVmFsdWUgbGVm
dCwgTFZhbHVlIHJpZ2h0KQogewotICAgIFRyaVN0YXRlIHJlc3VsdCA9IGxlZnQtPm5vdEVxdWFs
Q29uc3RhbnQocmlnaHQpOwotICAgIGlmIChyZXN1bHQgIT0gTWl4ZWRUcmlTdGF0ZSkKLSAgICAg
ICAgcmV0dXJuIGNvbnN0Qm9vbChyZXN1bHQgPT0gVHJ1ZVRyaVN0YXRlKTsKLSAgICByZXR1cm4g
bV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Tm90RXF1YWwsIG9yaWdp
bigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlTm90RXF1YWwo
SW50MzIsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmFib3Zl
KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgVHJpU3RhdGUgcmVzdWx0ID0gbGVm
dC0+YWJvdmVDb25zdGFudChyaWdodCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBNaXhlZFRyaVN0YXRl
KQotICAgICAgICByZXR1cm4gY29uc3RCb29sKHJlc3VsdCA9PSBUcnVlVHJpU3RhdGUpOwotICAg
IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpBYm92ZSwg
b3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VBYm92
ZShJbnQzMiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6YWJv
dmVPckVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgVHJpU3RhdGUgcmVz
dWx0ID0gbGVmdC0+YWJvdmVFcXVhbENvbnN0YW50KHJpZ2h0KTsKLSAgICBpZiAocmVzdWx0ICE9
IE1peGVkVHJpU3RhdGUpCi0gICAgICAgIHJldHVybiBjb25zdEJvb2wocmVzdWx0ID09IFRydWVU
cmlTdGF0ZSk7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJv
YywgQjM6OkFib3ZlRXF1YWwsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1f
cGVlcGhvbGUucmVkdWNlQWJvdmVFcXVhbChJbnQzMiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsK
IH0KIAogTFZhbHVlIE91dHB1dDo6YmVsb3coTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsK
LSAgICBUcmlTdGF0ZSByZXN1bHQgPSBsZWZ0LT5iZWxvd0NvbnN0YW50KHJpZ2h0KTsKLSAgICBp
ZiAocmVzdWx0ICE9IE1peGVkVHJpU3RhdGUpCi0gICAgICAgIHJldHVybiBjb25zdEJvb2wocmVz
dWx0ID09IFRydWVUcmlTdGF0ZSk7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6
VmFsdWU+KG1fcHJvYywgQjM6OkJlbG93LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJl
dHVybiBtX3BlZXBob2xlLnJlZHVjZUJlbG93KEludDMyLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQp
OwogfQogCiBMVmFsdWUgT3V0cHV0OjpiZWxvd09yRXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSBy
aWdodCkKIHsKLSAgICBUcmlTdGF0ZSByZXN1bHQgPSBsZWZ0LT5iZWxvd0VxdWFsQ29uc3RhbnQo
cmlnaHQpOwotICAgIGlmIChyZXN1bHQgIT0gTWl4ZWRUcmlTdGF0ZSkKLSAgICAgICAgcmV0dXJu
IGNvbnN0Qm9vbChyZXN1bHQgPT0gVHJ1ZVRyaVN0YXRlKTsKLSAgICByZXR1cm4gbV9ibG9jay0+
YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6QmVsb3dFcXVhbCwgb3JpZ2luKCksIGxl
ZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VCZWxvd0VxdWFsKEludDMy
LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0cHV0OjpncmVhdGVyVGhh
bihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIFRyaVN0YXRlIHJlc3VsdCA9IGxl
ZnQtPmdyZWF0ZXJUaGFuQ29uc3RhbnQocmlnaHQpOwotICAgIGlmIChyZXN1bHQgIT0gTWl4ZWRU
cmlTdGF0ZSkKLSAgICAgICAgcmV0dXJuIGNvbnN0Qm9vbChyZXN1bHQgPT0gVHJ1ZVRyaVN0YXRl
KTsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6
R3JlYXRlclRoYW4sIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhv
bGUucmVkdWNlR3JlYXRlclRoYW4oSW50MzIsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiB9CiAK
IExWYWx1ZSBPdXRwdXQ6OmdyZWF0ZXJUaGFuT3JFcXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJp
Z2h0KQogewotICAgIFRyaVN0YXRlIHJlc3VsdCA9IGxlZnQtPmdyZWF0ZXJFcXVhbENvbnN0YW50
KHJpZ2h0KTsKLSAgICBpZiAocmVzdWx0ICE9IE1peGVkVHJpU3RhdGUpCi0gICAgICAgIHJldHVy
biBjb25zdEJvb2wocmVzdWx0ID09IFRydWVUcmlTdGF0ZSk7Ci0gICAgcmV0dXJuIG1fYmxvY2st
PmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkdyZWF0ZXJFcXVhbCwgb3JpZ2luKCks
IGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VHcmVhdGVyRXF1YWwo
SW50MzIsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6Omxlc3NU
aGFuKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgVHJpU3RhdGUgcmVzdWx0ID0g
bGVmdC0+bGVzc1RoYW5Db25zdGFudChyaWdodCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBNaXhlZFRy
aVN0YXRlKQotICAgICAgICByZXR1cm4gY29uc3RCb29sKHJlc3VsdCA9PSBUcnVlVHJpU3RhdGUp
OwotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpM
ZXNzVGhhbiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5y
ZWR1Y2VMZXNzVGhhbihJbnQzMiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVl
IE91dHB1dDo6bGVzc1RoYW5PckVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0g
ICAgVHJpU3RhdGUgcmVzdWx0ID0gbGVmdC0+bGVzc0VxdWFsQ29uc3RhbnQocmlnaHQpOwotICAg
IGlmIChyZXN1bHQgIT0gTWl4ZWRUcmlTdGF0ZSkKLSAgICAgICAgcmV0dXJuIGNvbnN0Qm9vbChy
ZXN1bHQgPT0gVHJ1ZVRyaVN0YXRlKTsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIz
OjpWYWx1ZT4obV9wcm9jLCBCMzo6TGVzc0VxdWFsLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwor
ICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZUxlc3NFcXVhbChJbnQzMiwgb3JpZ2luKCksIGxl
ZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6ZG91YmxlRXF1YWwoTFZhbHVlIGxlZnQs
IExWYWx1ZSByaWdodCkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1
ZT4obV9wcm9jLCBCMzo6RXF1YWwsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJu
IG1fcGVlcGhvbGUucmVkdWNlRXF1YWwoSW50MzIsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiB9
CiAKIExWYWx1ZSBPdXRwdXQ6OmRvdWJsZUVxdWFsT3JVbm9yZGVyZWQoTFZhbHVlIGxlZnQsIExW
YWx1ZSByaWdodCkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4o
bV9wcm9jLCBCMzo6RXF1YWxPclVub3JkZXJlZCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAg
ICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VFcXVhbE9yVW5vcmRlcmVkKEludDMyLCBvcmlnaW4o
KSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0cHV0Ojpkb3VibGVOb3RFcXVhbE9yVW5v
cmRlcmVkKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2st
PmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6Ok5vdEVxdWFsLCBvcmlnaW4oKSwgbGVm
dCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZU5vdEVxdWFsKEludDMyLCBv
cmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0cHV0Ojpkb3VibGVMZXNzVGhh
bihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBl
bmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpMZXNzVGhhbiwgb3JpZ2luKCksIGxlZnQsIHJp
Z2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VMZXNzVGhhbihJbnQzMiwgb3JpZ2lu
KCksIGxlZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6ZG91YmxlTGVzc1RoYW5PckVx
dWFsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFw
cGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6Okxlc3NFcXVhbCwgb3JpZ2luKCksIGxlZnQs
IHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VMZXNzRXF1YWwoSW50MzIsIG9y
aWdpbigpLCBsZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmRvdWJsZUdyZWF0ZXJU
aGFuKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFw
cGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkdyZWF0ZXJUaGFuLCBvcmlnaW4oKSwgbGVm
dCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZUdyZWF0ZXJUaGFuKEludDMy
LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0cHV0Ojpkb3VibGVHcmVh
dGVyVGhhbk9yRXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICByZXR1cm4g
bV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6R3JlYXRlckVxdWFsLCBv
cmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZUdyZWF0
ZXJFcXVhbChJbnQzMiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVlIE91dHB1
dDo6ZG91YmxlTm90RXF1YWxBbmRPcmRlcmVkKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCkBA
IC02MjUsMzMgKzU3MywyNyBAQCBMVmFsdWUgT3V0cHV0Ojpkb3VibGVHcmVhdGVyVGhhbk9yRXF1
YWxPclVub3JkZXJlZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogCiBMVmFsdWUgT3V0cHV0
Ojppc1plcm8zMihMVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5l
dzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkVxdWFsLCBvcmlnaW4oKSwgdmFsdWUsIGludDMyWmVy
byk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlRXF1YWwoSW50MzIsIG9yaWdpbigpLCB2
YWx1ZSwgaW50MzJaZXJvKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6bm90WmVybzMyKExWYWx1ZSB2
YWx1ZSkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9j
LCBCMzo6Tm90RXF1YWwsIG9yaWdpbigpLCB2YWx1ZSwgaW50MzJaZXJvKTsKKyAgICByZXR1cm4g
bV9wZWVwaG9sZS5yZWR1Y2VOb3RFcXVhbChJbnQzMiwgb3JpZ2luKCksIHZhbHVlLCBpbnQzMlpl
cm8pOwogfQogCiBMVmFsdWUgT3V0cHV0Ojppc1plcm82NChMVmFsdWUgdmFsdWUpCiB7Ci0gICAg
cmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkVxdWFsLCBv
cmlnaW4oKSwgdmFsdWUsIGludDY0WmVybyk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNl
RXF1YWwoSW50MzIsIG9yaWdpbigpLCB2YWx1ZSwgaW50NjRaZXJvKTsKIH0KIAogTFZhbHVlIE91
dHB1dDo6bm90WmVybzY0KExWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBw
ZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Tm90RXF1YWwsIG9yaWdpbigpLCB2YWx1ZSwg
aW50NjRaZXJvKTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VOb3RFcXVhbChJbnQzMiwg
b3JpZ2luKCksIHZhbHVlLCBpbnQ2NFplcm8pOwogfQogCiBMVmFsdWUgT3V0cHV0OjpzZWxlY3Qo
TFZhbHVlIHZhbHVlLCBMVmFsdWUgdGFrZW4sIExWYWx1ZSBub3RUYWtlbikKIHsKLSAgICBpZiAo
dmFsdWUtPmhhc0ludDMyKCkpIHsKLSAgICAgICAgaWYgKHZhbHVlLT5hc0ludDMyKCkpCi0gICAg
ICAgICAgICByZXR1cm4gdGFrZW47Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBu
b3RUYWtlbjsKLSAgICB9Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+
KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksIHZhbHVlLCB0YWtlbiwgbm90VGFrZW4pOwor
ICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZVNlbGVjdCh0YWtlbi0+dHlwZSgpLCBvcmlnaW4o
KSwgdmFsdWUsIHRha2VuLCBub3RUYWtlbik7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmF0b21pY1hj
aGdBZGQoTFZhbHVlIG9wZXJhbmQsIFR5cGVkUG9pbnRlciBwb2ludGVyLCBXaWR0aCB3aWR0aCkK
QEAgLTc4MSw4ICs3MjMsOCBAQCBWYWx1ZUZyb21CbG9jayBPdXRwdXQ6OmFuY2hvcihMVmFsdWUg
dmFsdWUpCiAKIExWYWx1ZSBPdXRwdXQ6OmJpdENhc3QoTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBl
KQogewotICAgIEFTU0VSVF9VTlVTRUQodHlwZSwgdHlwZSA9PSBJbnQ2NCB8fCB0eXBlID09IERv
dWJsZSk7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywg
QjM6OkJpdHdpc2VDYXN0LCBvcmlnaW4oKSwgdmFsdWUpOworICAgIEFTU0VSVCh0eXBlID09IElu
dDY0IHx8IHR5cGUgPT0gRG91YmxlKTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VCaXR3
aXNlQ2FzdCh0eXBlLCBvcmlnaW4oKSwgdmFsdWUpOwogfQogCiBMVmFsdWUgT3V0cHV0Ojpmcm91
bmQoTFZhbHVlIGRvdWJsZVZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPdXRwdXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgK
aW5kZXggN2ExZmFlZWE2MzAuLjgyY2I1M2ZmMTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT3V0cHV0LmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIK
ICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiQjNGcmVxdWVudGVkQmxvY2su
aCIKKyNpbmNsdWRlICJCM1BlZXBob2xlT3B0aW1pemVyLmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1
cmUuaCIKICNpbmNsdWRlICJCM1N3aXRjaFZhbHVlLmgiCiAjaW5jbHVkZSAiQjNXaWR0aC5oIgpA
QCAtNDUyLDcgKzQ1Myw3IEBAIHB1YmxpYzoKICNwcmFnbWEgbWFyayAtIFN0YXRlcwogI2VuZGlm
CiAgICAgQjM6OlByb2NlZHVyZSYgbV9wcm9jOwotCisgICAgQjM6OlBlZXBob2xlT3B0aW1pemVy
IG1fcGVlcGhvbGU7CiAgICAgREZHOjpOb2RlKiBtX29yaWdpbiB7IG51bGxwdHIgfTsKICAgICBM
QmFzaWNCbG9jayBtX2Jsb2NrIHsgbnVsbHB0ciB9OwogICAgIExCYXNpY0Jsb2NrIG1fbmV4dEJs
b2NrIHsgbnVsbHB0ciB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366765</attachid>
            <date>2019-04-04 15:46:14 -0700</date>
            <delta_ts>2019-04-04 17:06:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch196578</filename>
            <type>text/plain</type>
            <size>234659</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGNkNjU0YTEyZDJjLi5iOWJhYzJlMjYxMiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTc5IEBACisyMDE5LTA0LTA0ICBSb2Jp
biBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAgICAgICAgQjMgcGVlcGhvbGUg
b3B0aW1pemF0aW9ucyBzaG91bGQgbGl2ZSBpbiB0aGVpciBvd24gZmlsZSwgYW5kIGJlIHVzZWQg
YnkgRlRMT3V0cHV0LmNwcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTk2NTc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQ3VycmVudGx5IHRoZSBwZWVwaG9sZSBvcHRpbWl6YXRpb25zIGZvciBCMyBsaXZl
IGluIEIzUmVkdWNlU3RyZW5ndGggYW5kIGFyZSByYXRoZXIgdGllZCB0byBpdCwgYW5hbHl6aW5n
IGFuIGV4aXN0aW5nIHZhbHVlCisgICAgICAgICwgYW5kICh0eXBpY2FsbHkpIHJlcGxhY2luZyBp
dCB3aXRoIGFuIGlkZW50aXR5IHRvIGEgbmV3IChzaW1wbGVyKSB2YWx1ZSB0aGF0IHRoZXkgY3Jl
YXRlLgorICAgICAgICBXaXRoIHRoaXMgcGF0Y2gsIHRoZXkgaW5zdGVhZCBsaXZlIGluIHRoZWly
IG93biBjbGFzcyBCM1BlZXBob2xlT3B0aW1pemVyLCBjcmVhdGluZyBhIG5ldyB2YWx1ZSAob3B0
aW9uYWxseSBvbmx5IGlmIHRoZXkgY2FuIGRvIHNvIGNsZXZlcmx5KSwKKyAgICAgICAgbGVhdmlu
ZyB0aGUgY2FsbGVyIGRvIHRoZSByZXBsYWNlV2l0aElkZW50aXR5IG9uIHRoZSBvbGQgZGVmaW5p
dGlvbi4KKyAgICAgICAgVGhpcyBoYXMgc2V2ZXJhbCBiZW5lZml0czoKKyAgICAgICAgLSBVc2Vy
cyBvZiBCMyBjYW4gbm93IHVzZSB0aGlzIGludGVyZmFjZSB0byBjcmVhdGUgdmFsdWVzLCBvcHRp
bWl6aW5nIHRoZW0gb24gdGhlIGZseTsgYXZvaWRpbmcgYWxsb2NhdGluZyBCMzo6VmFsdWUgcyBq
dXN0IHRvIHNpbXBsaWZ5IHRoZW0uCisgICAgICAgICAgVGhpcyBwYXRjaCBwb3J0cyBGVExPdXRw
dXQuY3BwIHRvIHVzZSB0aGlzIGZhY2lsaXR5LgorICAgICAgICAtIFRoZSBvcHRpbWl6YXRpb25z
IGFyZSBzaWduaWZpY2FudGx5IHRlcnNlciBhbmQgbW9yZSByZWFkYWJsZSwgYXMgd2UgY2FuIGdp
dmUgbmFtZXMgdG8gdGhlIGFyZ3VtZW50cyAoZS5nLiBsZWZ0L3JpZ2h0IHZzIG1fdmFsdWUtPmNo
aWxkKDApL21fdmFsdWUtPmNoaWxkKDEpKQorICAgICAgICAgIFRoaXMgaGVscGVkIG1lIG5vdGlj
ZSB0aGF0IGEgY291cGxlIG9wdGltaXphdGlvbnMgd2VyZSBkZWFkIHdoaWxlIHdyaXRpbmcgdGhl
IHBhdGNoIChlLmcuIEFkZChOZWcoeCksIC0xKT0+Qml0WG9yKHgsIC0xKSBuZXZlciB0cmlnZ2Vy
ZWQgYXMgQWRkKE5lZyh4KSwgeSk9PlN1Yih5LCB4KSByYW4gYmVmb3JlIGl0KSwgYW5kIGZpeCB0
aGVtLgorICAgICAgICAtIFRoZSBvcHRpbWl6YXRpb25zIG5vdyBuYXR1cmFsbHkgcnVuIHRvIGEg
bG9jYWwgZml4cG9pbnQuIFRoaXMgY3VycmVudGx5IGlzIGEgbmVnbGlnaWJsZSBiZW5lZml0IGFz
IHdlIGRvbid0IGhhdmUgdGhhdCBtYW55IG9wdGltaXphdGlvbnMKKyAgICAgICAgICAsIGJ1dCBp
dCBlbnN1cmVzIHdlIGNhbiBhZGQgbWFueSBtb3JlIHdpdGhvdXQgc2lnbmlmaWNhbnRseSBpbmNy
ZWFzaW5nIHRoZSB0aW1lIHNwZW50IGluIEIzUmVkdWNlU3RyZW5ndGgKKyAgICAgICAgLSBMb25n
IHRlcm0gSSBwbGFuIHRvIGFkZCBhbiBhYnN0cmFjdCBpbnRlcnByZXRlci9mb3J3YXJkIHZhbHVl
IGFuYWx5emVyIHRvIEIzLCB3aGljaCB3b3VsZCBiZSBhIGxvdCBtb3JlIGFjY3VyYXRlIHRoYW4g
dGhlIGN1cnJlbnQgYm91bmRlZCBiYWNrd2FyZHMgYW5hbHlzaXMgaW4gQjNSZWR1Y2VTdHJlbmd0
aC4KKyAgICAgICAgICBUaGlzIHJlZmFjdG9yIGlzIG5lZWRlZCBhcyBhIHN0ZXAgdG93YXJkcyB0
aGlzLgorCisgICAgICAgIEkgbGVhdmUgaW4gQjNSZWR1Y2VTdHJlbmd0aCB0aGUgbm9uLWxvY2Fs
IG9wdGltaXphdGlvbnMgZm9yIEJyYW5jaCBhbmQgQ2hlY2suCisgICAgICAgIEkgYWxzbyBoYWQg
dG8gbW92ZSBJbnRSYW5nZSB0byBpdHMgb3duIEIzSW50UmFuZ2UuaCBmaWxlLCBzaW5jZSBpdCBp
cyBub3cgdXNlZCBieSBCM1BlZXBob2xlT3B0aW1pemVyLmNwcCBhbmQgbm90IEIzUmVkdWNlU3Ry
ZW5ndGguY3BwCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBhcyB0aGlzIGlzIGEgcmVmYWN0b3Ig
YW5kIGFsbCBvZiB0aGlzIGNvZGUgaXMgYWxyZWFkeSB0ZXN0ZWQuCisKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMu
dHh0OgorICAgICAgICAqIGIzL0IzRHVwbGljYXRlVGFpbHMuY3BwOgorICAgICAgICAqIGIzL0Iz
SW50UmFuZ2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpJbnRSYW5nZTo6SW50UmFuZ2Up
OgorICAgICAgICAoSlNDOjpCMzo6SW50UmFuZ2U6OnRvcCk6CisgICAgICAgIChKU0M6OkIzOjpJ
bnRSYW5nZTo6cmFuZ2VGb3JNYXNrKToKKyAgICAgICAgKEpTQzo6QjM6OkludFJhbmdlOjpyYW5n
ZUZvclpTaHIpOgorICAgICAgICAoSlNDOjpCMzo6SW50UmFuZ2U6Om1pbiBjb25zdCk6CisgICAg
ICAgIChKU0M6OkIzOjpJbnRSYW5nZTo6bWF4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6Oklu
dFJhbmdlOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkludFJhbmdlOjpjb3VsZE92
ZXJmbG93QWRkKToKKyAgICAgICAgKEpTQzo6QjM6OkludFJhbmdlOjpjb3VsZE92ZXJmbG93U3Vi
KToKKyAgICAgICAgKEpTQzo6QjM6OkludFJhbmdlOjpjb3VsZE92ZXJmbG93TXVsKToKKyAgICAg
ICAgKEpTQzo6QjM6OkludFJhbmdlOjpzaGwpOgorICAgICAgICAoSlNDOjpCMzo6SW50UmFuZ2U6
OnNTaHIpOgorICAgICAgICAoSlNDOjpCMzo6SW50UmFuZ2U6OnpTaHIpOgorICAgICAgICAoSlND
OjpCMzo6SW50UmFuZ2U6OmFkZCk6CisgICAgICAgIChKU0M6OkIzOjpJbnRSYW5nZTo6c3ViKToK
KyAgICAgICAgKEpTQzo6QjM6OkludFJhbmdlOjptdWwpOgorICAgICAgICAqIGIzL0IzTG93ZXJN
YWNyb3MuY3BwOgorICAgICAgICAqIGIzL0IzUGVlcGhvbGVPcHRpbWl6ZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjphcHBlbmRUb0N1cnJlbnRCbG9j
ayk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6ZW1pdCk6CisgICAgICAg
IChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlT3BhcXVlKToKKyAgICAgICAgKEpT
Qzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VBZGQpOgorICAgICAgICAoSlNDOjpCMzo6
UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVN1Yik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9s
ZU9wdGltaXplcjo6cmVkdWNlTmVnKToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1p
emVyOjpyZWR1Y2VNdWwpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJl
ZHVjZURpdik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlVURp
dik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlTW9kKToKKyAg
ICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VVTW9kKToKKyAgICAgICAg
KEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VCaXRBbmQpOgorICAgICAgICAoSlND
OjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUJpdE9yKToKKyAgICAgICAgKEpTQzo6QjM6
OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VCaXRYb3IpOgorICAgICAgICAoSlNDOjpCMzo6UGVl
cGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVNobCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9w
dGltaXplcjo6cmVkdWNlU1Nocik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXpl
cjo6cmVkdWNlWlNocik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVk
dWNlUm90Uik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlUm90
TCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlQWJzKToKKyAg
ICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VDZWlsKToKKyAgICAgICAg
KEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VGbG9vcik6CisgICAgICAgIChKU0M6
OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlU3FydCk6CisgICAgICAgIChKU0M6OkIzOjpQ
ZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlQml0d2lzZUNhc3QpOgorICAgICAgICAoSlNDOjpCMzo6
UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVNFeHQ4KToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBo
b2xlT3B0aW1pemVyOjpyZWR1Y2VTRXh0MTYpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVP
cHRpbWl6ZXI6OnJlZHVjZVNFeHQzMik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGlt
aXplcjo6cmVkdWNlWkV4dDMyKToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVy
OjpyZWR1Y2VUcnVuYyk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVk
dWNlSVRvRCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlSVRv
Rik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlRmxvYXRUb0Rv
dWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlRG91Ymxl
VG9GbG9hdCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlU2Vs
ZWN0KToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VMb2FkU3Rv
cmUpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUVxdWFsKToK
KyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VOb3RFcXVhbCk6Cisg
ICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlRXF1YWxPclVub3JkZXJl
ZCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlTGVzc1RoYW4p
OgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUdyZWF0ZXJUaGFu
KToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VMZXNzRXF1YWwp
OgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUdyZWF0ZXJFcXVh
bCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlQWJvdmUpOgor
ICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUJlbG93KToKKyAgICAg
ICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VBYm92ZUVxdWFsKToKKyAgICAg
ICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VCZWxvd0VxdWFsKToKKyAgICAg
ICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjp0cnlSZWR1Y2UpOgorICAgICAgICAoSlND
OjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnRyeVNpbXBsaWZ5QnJhbmNoKToKKyAgICAgICAgKEpT
Qzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjp0cnlTaW1wbGlmeUNDYWxsKToKKyAgICAgICAgKEpT
Qzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjp0cnlTaW1wbGlmeUNoZWNrQWRkKToKKyAgICAgICAg
KEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjp0cnlTaW1wbGlmeUNoZWNrU3ViKToKKyAgICAg
ICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjp0cnlTaW1wbGlmeUNoZWNrTXVsKToKKyAg
ICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjp0cnlTaW1wbGlmeUNoZWNrKToKKyAg
ICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpzaG91bGRHb0JlZm9yZSk6CisgICAg
ICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6dHJ5UmVkdWNlTXVsRGlzdHJpYnV0aXZp
dHkpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnRyeVJlZHVjZUJpdEFu
ZERpc3RyaWJ1dGl2aXR5KToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjp0
cnlSZWR1Y2VTaGlmdE9yUm90YXRlKToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1p
emVyOjpyYW5nZUZvcik6CisgICAgICAgICogYjMvQjNQZWVwaG9sZU9wdGltaXplci5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpQZWVwaG9sZU9wdGltaXpl
cik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6c2V0SW5kZXgpOgorICAg
ICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnNldEJsb2NrKToKKyAgICAgICAgKiBi
My9CM1JlZHVjZVN0cmVuZ3RoLmNwcDoKKyAgICAgICAgKiBiMy9CM1ZhbGlkYXRlLmNwcDoKKyAg
ICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6dGVzdE5lZ011bEFyZ0lt
bSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0RmxvYXRFcXVhbE9yVW5vcmRlcmVkRG9udEZvbGQp
OgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1
dDo6T3V0cHV0KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmFwcGVuZFRvKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpPdXRwdXQ6Om9wYXF1ZSk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0
OjphZGQpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6c3ViKToKKyAgICAgICAgKEpTQzo6
RlRMOjpPdXRwdXQ6Om11bCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpkaXYpOgorICAg
ICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6Y2hpbGxEaXYpOgorICAgICAgICAoSlNDOjpGVEw6Ok91
dHB1dDo6bW9kKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmNoaWxsTW9kKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpPdXRwdXQ6Om5lZyk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpk
b3VibGVBZGQpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlU3ViKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmRvdWJsZU11bCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0
cHV0Ojpkb3VibGVEaXYpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlTW9kKToK
KyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmJpdEFuZCk6CisgICAgICAgIChKU0M6OkZUTDo6
T3V0cHV0OjpiaXRPcik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpiaXRYb3IpOgorICAg
ICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6c2hsKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6
OmFTaHIpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bFNocik6CisgICAgICAgIChKU0M6
OkZUTDo6T3V0cHV0OjpiaXROb3QpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bG9naWNh
bE5vdCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpkb3VibGVBYnMpOgorICAgICAgICAo
SlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlQ2VpbCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0
Ojpkb3VibGVGbG9vcik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpkb3VibGVQb3dpKToK
KyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmRvdWJsZVNxcnQpOgorICAgICAgICAoSlNDOjpG
VEw6Ok91dHB1dDo6c2lnbkV4dDMyVG82NCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojp6
ZXJvRXh0KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmludFRvRG91YmxlKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmNhc3RUb0ludDMyKToKKyAgICAgICAgKEpTQzo6RlRMOjpP
dXRwdXQ6OmRvdWJsZVRvRmxvYXQpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZmxvYXRU
b0RvdWJsZSk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjplcXVhbCk6CisgICAgICAgIChK
U0M6OkZUTDo6T3V0cHV0Ojpub3RFcXVhbCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojph
Ym92ZSk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjphYm92ZU9yRXF1YWwpOgorICAgICAg
ICAoSlNDOjpGVEw6Ok91dHB1dDo6YmVsb3cpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6
YmVsb3dPckVxdWFsKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmdyZWF0ZXJUaGFuKToK
KyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmdyZWF0ZXJUaGFuT3JFcXVhbCk6CisgICAgICAg
IChKU0M6OkZUTDo6T3V0cHV0OjpsZXNzVGhhbik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0
OjpsZXNzVGhhbk9yRXF1YWwpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlRXF1
YWwpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlRXF1YWxPclVub3JkZXJlZCk6
CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpkb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKToK
KyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmRvdWJsZUxlc3NUaGFuKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpPdXRwdXQ6OmRvdWJsZUxlc3NUaGFuT3JFcXVhbCk6CisgICAgICAgIChKU0M6OkZU
TDo6T3V0cHV0Ojpkb3VibGVHcmVhdGVyVGhhbik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0
Ojpkb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6
aXNaZXJvMzIpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bm90WmVybzMyKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmlzWmVybzY0KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRw
dXQ6Om5vdFplcm82NCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpzZWxlY3QpOgorICAg
ICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6Yml0Q2FzdCk6CisgICAgICAgICogZnRsL0ZUTE91dHB1
dC5oOgorCiAyMDE5LTA0LTA0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIGJ1aWxkIGZpeCBmb3IgQ0xvb3AgYWZ0ZXIgcjI0Mzg4NgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkM2ZmMTA1Nzc1Ny4uOGZhNDg4MTI4NTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC04NTIsNiArODUyLDggQEAKIAkJMkFGNzM4
MkQxOEJCQkY5MjAwOEE1QTM3IC8qIFN0cnVjdHVyZUlEVGFibGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBRjczODJCMThCQkJGOTIwMDhBNUEzNyAv
KiBTdHJ1Y3R1cmVJRFRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMkQzNDJGMzZGNzI0NDA5NjgwNEFEQjI0IC8qIFNvdXJjZU9yaWdpbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDI1QkExMzM3
RTQzNDRFMUIyNjlBNjcxIC8qIFNvdXJjZU9yaWdpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTMzOTVDNzA3MjI1NTVGNkQwMEJEQkZBRCAvKiBC
M0VsaW1pbmF0ZURlYWRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMzk1QzcwNTIyNTU1RjZEMDBCREJGQUQgLyogQjNFbGltaW5hdGVEZWFkQ29k
ZS5oICovOyB9OworCQkzMzI0QUJCQTIyNTNFMDFEMDBDMzdFMUIgLyogQjNQZWVwaG9sZU9wdGlt
aXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzMy
NEFCQjgyMjUzRTAxRDAwQzM3RTFCIC8qIEIzUGVlcGhvbGVPcHRpbWl6ZXIuaCAqLzsgfTsKKwkJ
MzMyNEFCQkMyMjU2N0MyNTAwQzM3RTFCIC8qIEIzSW50UmFuZ2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzMjRBQkJCMjI1NjdDMjQwMEMzN0UxQiAv
KiBCM0ludFJhbmdlLmggKi87IH07CiAJCTM3MUQ4NDJEMTdDOThCNkUwMEVDRjk5NCAvKiBsaWJ6
LmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzcxRDg0MkMxN0M5OEI2RTAwRUNGOTk0IC8qIGxpYnouZHlsaWIgKi87IH07CiAJCTM3QzczOEQy
MUVEQjU2RTQwMDNGMkIwQiAvKiBQYXJzZUludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzdDNzM4RDExRURCNTY3MjAwM0YyQjBCIC8qIFBhcnNlSW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDEy
OTUyNzcxRDJDRjZCQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFw
cGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQxMjk1MjczMUQyQ0Y2QUMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5h
bHNfd3JhcHBlcl9oZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTMzNDUsNiArMzM0Nyw5IEBACiAJCTMzNzQzNjRBMjI0RDc5RUYwMEM4
QzIyNyAvKiBCM09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzLmg7IHBhdGggPSBiMy9C
M09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzM5NUM3MDQyMjU1NUY2QzAwQkRCRkFEIC8qIEIzRWxpbWluYXRlRGVhZENv
ZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNFbGltaW5hdGVE
ZWFkQ29kZS5jcHA7IHBhdGggPSBiMy9CM0VsaW1pbmF0ZURlYWRDb2RlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzM5NUM3MDUyMjU1NUY2RDAwQkRCRkFEIC8qIEIzRWxpbWlu
YXRlRGVhZENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNFbGltaW5h
dGVEZWFkQ29kZS5oOyBwYXRoID0gYjMvQjNFbGltaW5hdGVEZWFkQ29kZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkzMzI0QUJCNzIyNTNFMDFDMDBDMzdFMUIgLyogQjNQZWVwaG9s
ZU9wdGltaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1Bl
ZXBob2xlT3B0aW1pemVyLmNwcDsgcGF0aCA9IGIzL0IzUGVlcGhvbGVPcHRpbWl6ZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMzI0QUJCODIyNTNFMDFEMDBDMzdFMUIgLyog
QjNQZWVwaG9sZU9wdGltaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
M1BlZXBob2xlT3B0aW1pemVyLmg7IHBhdGggPSBiMy9CM1BlZXBob2xlT3B0aW1pemVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzMjRBQkJCMjI1NjdDMjQwMEMzN0UxQiAvKiBC
M0ludFJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzSW50UmFuZ2Uu
aDsgcGF0aCA9IGIzL0IzSW50UmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MzcxMTlBNzcyMENDQjVEQzAwMkM2REM5IC8qIFdlYktpdFRhcmdldENvbmRpdGlvbmFscy54Y2Nv
bmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQueGNjb25maWc7IHBhdGggPSBXZWJLaXRUYXJnZXRDb25kaXRpb25hbHMueGNjb25maWc7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MUQ4NDJDMTdDOThCNkUwMEVDRjk5NCAvKiBs
aWJ6LmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJ6LmR5bGliOyBwYXRoID0gdXNy
L2xpYi9saWJ6LmR5bGliOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsgfTsKIAkJMzdDNzM4RDExRURC
NTY3MjAwM0YyQjBCIC8qIFBhcnNlSW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBhcnNlSW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01Mzk0LDYgKzUz
OTksNyBAQAogCQkJCTBGRUM4NUI0MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNldC5j
cHAgKi8sCiAJCQkJMEZFQzg1QjUxQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5zZXJ0aW9uU2V0Lmgg
Ki8sCiAJCQkJMEZFQzg1QjYxQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5zZXJ0aW9uU2V0SW5saW5l
cy5oICovLAorCQkJCTMzMjRBQkJCMjI1NjdDMjQwMEMzN0UxQiAvKiBCM0ludFJhbmdlLmggKi8s
CiAJCQkJMEZERjY3RDAxRDlDNjA4NjAwMUI5ODI1IC8qIEIzS2luZC5jcHAgKi8sCiAJCQkJMEZE
RjY3RDExRDlDNjA4NjAwMUI5ODI1IC8qIEIzS2luZC5oICovLAogCQkJCTQzNkU1NDUxMUM0NjhF
NUYwMEI1QUY3MyAvKiBCM0xlZ2FsaXplTWVtb3J5T2Zmc2V0cy5jcHAgKi8sCkBAIC01NDI5LDYg
KzU0MzUsOCBAQAogCQkJCTBGRUM4NEREMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRW
YWx1ZS5jcHAgKi8sCiAJCQkJMEZFQzg0REUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2lu
dFZhbHVlLmggKi8sCiAJCQkJNzk5RUY3QzMxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdp
bk1hcC5oICovLAorCQkJCTMzMjRBQkI3MjI1M0UwMUMwMEMzN0UxQiAvKiBCM1BlZXBob2xlT3B0
aW1pemVyLmNwcCAqLywKKwkJCQkzMzI0QUJCODIyNTNFMDFEMDBDMzdFMUIgLyogQjNQZWVwaG9s
ZU9wdGltaXplci5oICovLAogCQkJCTBGRUM4NERGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNl
U2NvcGUuY3BwICovLAogCQkJCTBGRUM4NEUwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2Nv
cGUuaCAqLywKIAkJCQkwRjM3MzA4QTFDMEJEMjkxMDAwNTJCRkEgLyogQjNQaGlDaGlsZHJlbi5j
cHAgKi8sCkBAIC04NjI3LDYgKzg2MzUsNyBAQAogCQkJCTUyM0ZEODhFMjI1NTY2QzkwMDNCM0RD
QyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDODVCQjFCRTE0NjJGMDA4MEZGNzQgLyogQjNJbnNlcnRpb25TZXRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkRGNjdEMjFEOUM2RDI3MDAxQjk4MjUgLyogQjNLaW5kLmggaW4g
SGVhZGVycyAqLywKKwkJCQkzMzI0QUJCQTIyNTNFMDFEMDBDMzdFMUIgLyogQjNQZWVwaG9sZU9w
dGltaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2RTU0NTMxQzQ2OEU3NDAwQjVBRjczIC8q
IEIzTGVnYWxpemVNZW1vcnlPZmZzZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOEUxRTFC
RjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDMx
OURBMDQxQzFCRTQwRDAwMUQyNjBCIC8qIEIzTG93ZXJNYWNyb3NBZnRlck9wdGltaXphdGlvbnMu
aCBpbiBIZWFkZXJzICovLApAQCAtOTk0Niw2ICs5OTU1LDcgQEAKIAkJCQlBRDJGQ0MxQTFEQjU5
Q0IyMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUFEMkZDQkY3MURCNThEQUQwMEIzRTczNiAvKiBXZWJBc3NlbWJseU1lbW9y
eVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNDMUIxREI1OUNCMjAwQjNFNzM2
IC8qIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MzMyNEFCQkMyMjU2N0MyNTAwQzM3RTFCIC8qIEIzSW50UmFuZ2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCUFEMkZDQzAxMURCNThEQUQwMEIzRTczNiAvKiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0MxQzFEQjU5Q0IyMDBCM0U3MzYgLyogV2Vi
QXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZD
QzAzMURCNThEQUQwMEIzRTczNiAvKiBXZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5kZXggMjRjMmQ2ODUzMjMuLjJh
MzQwZDdkY2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC0xNDksNiArMTQ5LDcg
QEAgYjMvQjNPcmlnaW4uY3BwCiBiMy9CM09yaWdpbkR1bXAuY3BwCiBiMy9CM1BhdGNocG9pbnRT
cGVjaWFsLmNwcAogYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCitiMy9CM1BlZXBob2xlT3B0aW1p
emVyLmNwcAogYjMvQjNQaGFzZVNjb3BlLmNwcAogYjMvQjNQaGlDaGlsZHJlbi5jcHAKIGIzL0Iz
UHJvY2VkdXJlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRHVw
bGljYXRlVGFpbHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRHVwbGljYXRlVGFp
bHMuY3BwCmluZGV4IGNmZjQ0YTRjMWUwLi40MTU3NWNhM2I5YyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzRHVwbGljYXRlVGFpbHMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0R1cGxpY2F0ZVRhaWxzLmNwcApAQCAtNjYsNyArNjYsNyBAQCBwdWJs
aWM6CiAgICAgICAgIGJyZWFrQ3JpdGljYWxFZGdlcyhtX3Byb2MpOwogICAgICAgICAKICAgICAg
ICAgLy8gRmluZCBibG9ja3MgdGhhdCB3b3VsZCBiZSBjYW5kaWRhdGVzIGZvciB0YWlsIGR1cGxp
Y2F0aW9uLiBUaGV5IG11c3QgYmUgc21hbGwgZW5vdWdoCi0gICAgICAgIC8vIGFuZCB0aGV5IG11
Y2ggbm90IGhhdmUgdG9vIG1hbnkgc3VjY2Vzc29ycy4KKyAgICAgICAgLy8gYW5kIHRoZXkgbXVz
dCBub3QgaGF2ZSB0b28gbWFueSBzdWNjZXNzb3JzLgogCiAgICAgICAgIG1fcHJvYy5yZXNldFZh
bHVlT3duZXJzKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0lu
dFJhbmdlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnRSYW5nZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44YmNiOTE5MTQ3NwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ludFJhbmdlLmgKQEAgLTAsMCArMSwz
NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1R5cGUuaCIKKyNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKKy8vIEZJWE1FOiBUaGlzIEludFJhbmdlIHN0dWZmIHNob3VsZCBiZSByZWZhY3RvcmVk
IGludG8gYSBnZW5lcmFsIGFic3RyYWN0IGRvbWFpbi4KKy8vIEl0IGNvdWxkIGVhc2lseSBiZSBl
eHRlbmRlZCBpbiBsb3RzIG9mIGRpcmVjdGlvbnMsIGluY2x1ZGluZyBhIGtub3duQml0cyBhbmFs
eXNpcywgc3VwcG9ydGluZyBtYW55IG1vcmUgb3Bjb2RlcywgYmVpbmcgc2lnbmlmaWNhbnRseSBt
b3JlIHByZWNpc2UsIGV0Yy4uCitjbGFzcyBJbnRSYW5nZSB7CitwdWJsaWM6CisgICAgSW50UmFu
Z2UoKQorICAgIHsKKyAgICB9CisKKyAgICBJbnRSYW5nZShpbnQ2NF90IG1pbiwgaW50NjRfdCBt
YXgpCisgICAgICAgIDogbV9taW4obWluKQorICAgICAgICAsIG1fbWF4KG1heCkKKyAgICB7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgSW50UmFuZ2UgdG9w
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBJbnRSYW5nZShzdGQ6Om51bWVyaWNfbGltaXRzPFQ+
OjptaW4oKSwgc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCkpOworICAgIH0KKworICAgIHN0
YXRpYyBJbnRSYW5nZSB0b3AoVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICByZXR1cm4gdG9wPGludDMyX3Q+
KCk7CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICByZXR1cm4gdG9wPGludDY0X3Q+
KCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIEludFJhbmdlKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBJbnRSYW5nZSByYW5nZUZv
ck1hc2soVCBtYXNrKQorICAgIHsKKyAgICAgICAgaWYgKCEobWFzayArIDEpKQorICAgICAgICAg
ICAgcmV0dXJuIHRvcDxUPigpOworICAgICAgICByZXR1cm4gSW50UmFuZ2UoMCwgbWFzayk7Cisg
ICAgfQorCisgICAgc3RhdGljIEludFJhbmdlIHJhbmdlRm9yTWFzayhpbnQ2NF90IG1hc2ssIFR5
cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIElu
dDMyOgorICAgICAgICAgICAgcmV0dXJuIHJhbmdlRm9yTWFzazxpbnQzMl90PihzdGF0aWNfY2Fz
dDxpbnQzMl90PihtYXNrKSk7CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICByZXR1
cm4gcmFuZ2VGb3JNYXNrPGludDY0X3Q+KG1hc2spOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBJ
bnRSYW5nZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
KyAgICBzdGF0aWMgSW50UmFuZ2UgcmFuZ2VGb3JaU2hyKGludDMyX3Qgc2hpZnRBbW91bnQpCisg
ICAgeworICAgICAgICB0eXBlbmFtZSBzdGQ6Om1ha2VfdW5zaWduZWQ8VD46OnR5cGUgbWFzayA9
IDA7CisgICAgICAgIG1hc2stLTsKKyAgICAgICAgbWFzayA+Pj0gc2hpZnRBbW91bnQ7CisgICAg
ICAgIHJldHVybiByYW5nZUZvck1hc2s8VD4oc3RhdGljX2Nhc3Q8VD4obWFzaykpOworICAgIH0K
KworICAgIHN0YXRpYyBJbnRSYW5nZSByYW5nZUZvclpTaHIoaW50MzJfdCBzaGlmdEFtb3VudCwg
VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2Ug
SW50MzI6CisgICAgICAgICAgICByZXR1cm4gcmFuZ2VGb3JaU2hyPGludDMyX3Q+KHNoaWZ0QW1v
dW50KTsKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIHJldHVybiByYW5nZUZvclpT
aHI8aW50NjRfdD4oc2hpZnRBbW91bnQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSYW5n
ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgaW50NjRfdCBtaW4oKSBjb25zdCB7IHJldHVy
biBtX21pbjsgfQorICAgIGludDY0X3QgbWF4KCkgY29uc3QgeyByZXR1cm4gbV9tYXg7IH0KKwor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0
LnByaW50KCJbIiwgbV9taW4sICIsIiwgbV9tYXgsICJdIik7CisgICAgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KKyAgICBib29sIGNvdWxkT3ZlcmZsb3dBZGQoY29uc3QgSW50UmFuZ2Um
IG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN1bU92ZXJmbG93czxUPihtX21pbiwgb3Ro
ZXIubV9taW4pCisgICAgICAgICAgICB8fCBzdW1PdmVyZmxvd3M8VD4obV9taW4sIG90aGVyLm1f
bWF4KQorICAgICAgICAgICAgfHwgc3VtT3ZlcmZsb3dzPFQ+KG1fbWF4LCBvdGhlci5tX21pbikK
KyAgICAgICAgICAgIHx8IHN1bU92ZXJmbG93czxUPihtX21heCwgb3RoZXIubV9tYXgpOworICAg
IH0KKworICAgIGJvb2wgY291bGRPdmVyZmxvd0FkZChjb25zdCBJbnRSYW5nZSYgb3RoZXIsIFR5
cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIElu
dDMyOgorICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dBZGQ8aW50MzJfdD4ob3RoZXIp
OworICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dB
ZGQ8aW50NjRfdD4ob3RoZXIpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
IGJvb2wgY291bGRPdmVyZmxvd1N1Yihjb25zdCBJbnRSYW5nZSYgb3RoZXIpCisgICAgeworICAg
ICAgICByZXR1cm4gZGlmZmVyZW5jZU92ZXJmbG93czxUPihtX21pbiwgb3RoZXIubV9taW4pCisg
ICAgICAgICAgICB8fCBkaWZmZXJlbmNlT3ZlcmZsb3dzPFQ+KG1fbWluLCBvdGhlci5tX21heCkK
KyAgICAgICAgICAgIHx8IGRpZmZlcmVuY2VPdmVyZmxvd3M8VD4obV9tYXgsIG90aGVyLm1fbWlu
KQorICAgICAgICAgICAgfHwgZGlmZmVyZW5jZU92ZXJmbG93czxUPihtX21heCwgb3RoZXIubV9t
YXgpOworICAgIH0KKworICAgIGJvb2wgY291bGRPdmVyZmxvd1N1Yihjb25zdCBJbnRSYW5nZSYg
b3RoZXIsIFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAg
ICBjYXNlIEludDMyOgorICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dTdWI8aW50MzJf
dD4ob3RoZXIpOworICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgcmV0dXJuIGNvdWxk
T3ZlcmZsb3dTdWI8aW50NjRfdD4ob3RoZXIpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIGJvb2wgY291bGRPdmVyZmxvd011bChjb25zdCBJbnRSYW5nZSYgb3RoZXIpCisg
ICAgeworICAgICAgICByZXR1cm4gcHJvZHVjdE92ZXJmbG93czxUPihtX21pbiwgb3RoZXIubV9t
aW4pCisgICAgICAgICAgICB8fCBwcm9kdWN0T3ZlcmZsb3dzPFQ+KG1fbWluLCBvdGhlci5tX21h
eCkKKyAgICAgICAgICAgIHx8IHByb2R1Y3RPdmVyZmxvd3M8VD4obV9tYXgsIG90aGVyLm1fbWlu
KQorICAgICAgICAgICAgfHwgcHJvZHVjdE92ZXJmbG93czxUPihtX21heCwgb3RoZXIubV9tYXgp
OworICAgIH0KKworICAgIGJvb2wgY291bGRPdmVyZmxvd011bChjb25zdCBJbnRSYW5nZSYgb3Ro
ZXIsIFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBj
YXNlIEludDMyOgorICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dNdWw8aW50MzJfdD4o
b3RoZXIpOworICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3Zl
cmZsb3dNdWw8aW50NjRfdD4ob3RoZXIpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIEludFJhbmdlIHNobChpbnQzMl90IHNoaWZ0QW1vdW50KQorICAgIHsKKyAgICAgICAg
VCBuZXdNaW4gPSBzdGF0aWNfY2FzdDxUPihtX21pbikgPDwgc3RhdGljX2Nhc3Q8VD4oc2hpZnRB
bW91bnQpOworICAgICAgICBUIG5ld01heCA9IHN0YXRpY19jYXN0PFQ+KG1fbWF4KSA8PCBzdGF0
aWNfY2FzdDxUPihzaGlmdEFtb3VudCk7CisKKyAgICAgICAgaWYgKChuZXdNaW4gPj4gc2hpZnRB
bW91bnQpICE9IHN0YXRpY19jYXN0PFQ+KG1fbWluKSkKKyAgICAgICAgICAgIG5ld01pbiA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8VD46Om1pbigpOworICAgICAgICBpZiAoKG5ld01heCA+PiBzaGlm
dEFtb3VudCkgIT0gc3RhdGljX2Nhc3Q8VD4obV9tYXgpKQorICAgICAgICAgICAgbmV3TWF4ID0g
c3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCk7CisKKyAgICAgICAgcmV0dXJuIEludFJhbmdl
KG5ld01pbiwgbmV3TWF4KTsKKyAgICB9CisKKyAgICBJbnRSYW5nZSBzaGwoaW50MzJfdCBzaGlm
dEFtb3VudCwgVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
ICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICByZXR1cm4gc2hsPGludDMyX3Q+KHNoaWZ0QW1v
dW50KTsKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIHJldHVybiBzaGw8aW50NjRf
dD4oc2hpZnRBbW91bnQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBJbnRSYW5nZSBz
U2hyKGludDMyX3Qgc2hpZnRBbW91bnQpCisgICAgeworICAgICAgICBUIG5ld01pbiA9IHN0YXRp
Y19jYXN0PFQ+KG1fbWluKSA+PiBzdGF0aWNfY2FzdDxUPihzaGlmdEFtb3VudCk7CisgICAgICAg
IFQgbmV3TWF4ID0gc3RhdGljX2Nhc3Q8VD4obV9tYXgpID4+IHN0YXRpY19jYXN0PFQ+KHNoaWZ0
QW1vdW50KTsKKworICAgICAgICByZXR1cm4gSW50UmFuZ2UobmV3TWluLCBuZXdNYXgpOworICAg
IH0KKworICAgIEludFJhbmdlIHNTaHIoaW50MzJfdCBzaGlmdEFtb3VudCwgVHlwZSB0eXBlKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAg
ICAgICAgICByZXR1cm4gc1NocjxpbnQzMl90PihzaGlmdEFtb3VudCk7CisgICAgICAgIGNhc2Ug
SW50NjQ6CisgICAgICAgICAgICByZXR1cm4gc1NocjxpbnQ2NF90PihzaGlmdEFtb3VudCk7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgcmV0dXJuIEludFJhbmdlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIEludFJhbmdlIHpTaHIoaW50MzJfdCBzaGlmdEFt
b3VudCkKKyAgICB7CisgICAgICAgIC8vIFRoaXMgaXMgYW4gYXdrd2FyZCBjb3JuZXIgY2FzZSBm
b3IgYWxsIG9mIHRoZSBvdGhlciBsb2dpYy4KKyAgICAgICAgaWYgKCFzaGlmdEFtb3VudCkKKyAg
ICAgICAgICAgIHJldHVybiAqdGhpczsKKworICAgICAgICAvLyBJZiB0aGUgaW5wdXQgcmFuZ2Ug
bWF5IGJlIG5lZ2F0aXZlLCB0aGVuIGFsbCB3ZSBjYW4gc2F5IGFib3V0IHRoZSBvdXRwdXQgcmFu
Z2UgaXMgdGhhdCBpdAorICAgICAgICAvLyB3aWxsIGJlIG1hc2tlZC4gVGhhdCdzIGJlY2F1c2Ug
LTEgcmlnaHQgc2hpZnRlZCBqdXN0IHByb2R1Y2VzIHRoYXQgbWFzay4KKyAgICAgICAgaWYgKG1f
bWluIDwgMCkKKyAgICAgICAgICAgIHJldHVybiByYW5nZUZvclpTaHI8VD4oc2hpZnRBbW91bnQp
OworCisgICAgICAgIC8vIElmIHRoZSBpbnB1dCByYW5nZSBpcyBub24tbmVnYXRpdmUsIHRoZW4g
dGhpcyBqdXN0IGJyaW5ncyB0aGUgcmFuZ2UgY2xvc2VyIHRvIHplcm8uCisgICAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgc3RkOjptYWtlX3Vuc2lnbmVkPFQ+Ojp0eXBlIFVuc2lnbmVkVDsKKyAgICAg
ICAgVW5zaWduZWRUIG5ld01pbiA9IHN0YXRpY19jYXN0PFVuc2lnbmVkVD4obV9taW4pID4+IHN0
YXRpY19jYXN0PFVuc2lnbmVkVD4oc2hpZnRBbW91bnQpOworICAgICAgICBVbnNpZ25lZFQgbmV3
TWF4ID0gc3RhdGljX2Nhc3Q8VW5zaWduZWRUPihtX21heCkgPj4gc3RhdGljX2Nhc3Q8VW5zaWdu
ZWRUPihzaGlmdEFtb3VudCk7CisKKyAgICAgICAgcmV0dXJuIEludFJhbmdlKG5ld01pbiwgbmV3
TWF4KTsKKyAgICB9CisKKyAgICBJbnRSYW5nZSB6U2hyKGludDMyX3Qgc2hpZnRBbW91bnQsIFR5
cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIElu
dDMyOgorICAgICAgICAgICAgcmV0dXJuIHpTaHI8aW50MzJfdD4oc2hpZnRBbW91bnQpOworICAg
ICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgcmV0dXJuIHpTaHI8aW50NjRfdD4oc2hpZnRB
bW91bnQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBJbnRSYW5nZSBhZGQoY29uc3Qg
SW50UmFuZ2UmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKGNvdWxkT3ZlcmZsb3dBZGQ8VD4o
b3RoZXIpKQorICAgICAgICAgICAgcmV0dXJuIHRvcDxUPigpOworICAgICAgICByZXR1cm4gSW50
UmFuZ2UobV9taW4gKyBvdGhlci5tX21pbiwgbV9tYXggKyBvdGhlci5tX21heCk7CisgICAgfQor
CisgICAgSW50UmFuZ2UgYWRkKGNvbnN0IEludFJhbmdlJiBvdGhlciwgVHlwZSB0eXBlKQorICAg
IHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAg
ICAgICByZXR1cm4gYWRkPGludDMyX3Q+KG90aGVyKTsKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAg
ICAgICAgICAgIHJldHVybiBhZGQ8aW50NjRfdD4ob3RoZXIpOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJl
dHVybiBJbnRSYW5nZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KKyAgICBJbnRSYW5nZSBzdWIoY29uc3QgSW50UmFuZ2UmIG90aGVyKQorICAgIHsKKyAg
ICAgICAgaWYgKGNvdWxkT3ZlcmZsb3dTdWI8VD4ob3RoZXIpKQorICAgICAgICAgICAgcmV0dXJu
IHRvcDxUPigpOworICAgICAgICByZXR1cm4gSW50UmFuZ2UobV9taW4gLSBvdGhlci5tX21heCwg
bV9tYXggLSBvdGhlci5tX21pbik7CisgICAgfQorCisgICAgSW50UmFuZ2Ugc3ViKGNvbnN0IElu
dFJhbmdlJiBvdGhlciwgVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICByZXR1cm4gc3ViPGludDMyX3Q+KG90
aGVyKTsKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIHJldHVybiBzdWI8aW50NjRf
dD4ob3RoZXIpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOworICAgICAgICB9
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBJbnRSYW5nZSBtdWwoY29u
c3QgSW50UmFuZ2UmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKGNvdWxkT3ZlcmZsb3dNdWw8
VD4ob3RoZXIpKQorICAgICAgICAgICAgcmV0dXJuIHRvcDxUPigpOworICAgICAgICByZXR1cm4g
SW50UmFuZ2UoCisgICAgICAgICAgICBzdGQ6Om1pbigKKyAgICAgICAgICAgICAgICBzdGQ6Om1p
bihtX21pbiAqIG90aGVyLm1fbWluLCBtX21pbiAqIG90aGVyLm1fbWF4KSwKKyAgICAgICAgICAg
ICAgICBzdGQ6Om1pbihtX21heCAqIG90aGVyLm1fbWluLCBtX21heCAqIG90aGVyLm1fbWF4KSks
CisgICAgICAgICAgICBzdGQ6Om1heCgKKyAgICAgICAgICAgICAgICBzdGQ6Om1heChtX21pbiAq
IG90aGVyLm1fbWluLCBtX21pbiAqIG90aGVyLm1fbWF4KSwKKyAgICAgICAgICAgICAgICBzdGQ6
Om1heChtX21heCAqIG90aGVyLm1fbWluLCBtX21heCAqIG90aGVyLm1fbWF4KSkpOworICAgIH0K
KworICAgIEludFJhbmdlIG11bChjb25zdCBJbnRSYW5nZSYgb3RoZXIsIFR5cGUgdHlwZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAg
ICAgICAgcmV0dXJuIG11bDxpbnQzMl90PihvdGhlcik7CisgICAgICAgIGNhc2UgSW50NjQ6Cisg
ICAgICAgICAgICByZXR1cm4gbXVsPGludDY0X3Q+KG90aGVyKTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBy
ZXR1cm4gSW50UmFuZ2UoKTsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQ2
NF90IG1fbWluIHsgMCB9OworICAgIGludDY0X3QgbV9tYXggeyAwIH07Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAKaW5kZXggNGM1OTRkMjRiMzMuLjk5ZmFm
NDBjMmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jv
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCkBA
IC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiQjNJbnNlcnRpb25TZXRJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiQjNNZW1vcnlWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJCM1BhdGNocG9pbnRWYWx1
ZS5oIgorI2luY2x1ZGUgIkIzUGVlcGhvbGVPcHRpbWl6ZXIuaCIKICNpbmNsdWRlICJCM1BoYXNl
U2NvcGUuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJCM1N0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIgpAQCAtODgsNyArODksOSBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIHZvaWQgcHJvY2Vzc0N1cnJlbnRCbG9jaygpCiAgICAgeworICAgICAgICBQZWVw
aG9sZU9wdGltaXplciBwZWVwaG9sZShtX3Byb2MsIG1faW5zZXJ0aW9uU2V0KTsKICAgICAgICAg
Zm9yIChtX2luZGV4ID0gMDsgbV9pbmRleCA8IG1fYmxvY2stPnNpemUoKTsgKyttX2luZGV4KSB7
CisgICAgICAgICAgICBwZWVwaG9sZS5zZXRJbmRleChtX2luZGV4KTsKICAgICAgICAgICAgIG1f
dmFsdWUgPSBtX2Jsb2NrLT5hdChtX2luZGV4KTsKICAgICAgICAgICAgIG1fb3JpZ2luID0gbV92
YWx1ZS0+b3JpZ2luKCk7CiAgICAgICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7
CkBAIC05Niw2ICs5OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUt
PmlzQ2hpbGwoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoaXNBUk02NCgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBiZWZvcmUgPSBtX2Jsb2NrSW5zZXJ0aW9u
U2V0LnNwbGl0Rm9yd2FyZChtX2Jsb2NrLCBtX2luZGV4LCAmbV9pbnNlcnRpb25TZXQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcGVlcGhvbGUuc2V0SW5kZXgobV9pbmRleCk7IC8vIHNwbGl0
Rm9yd2FyZCByZXNldHMgbV9pbmRleCwgc28gd2UgbXVzdCB1cGRhdGUgdGhlIGNvcHkgaW4gcGVl
cGhvbGUKICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHplcm9EZW5DYXNlID0g
bV9ibG9ja0luc2VydGlvblNldC5pbnNlcnRCZWZvcmUobV9ibG9jayk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBub3JtYWxNb2RDYXNlID0gbV9ibG9ja0luc2VydGlvblNl
dC5pbnNlcnRCZWZvcmUobV9ibG9jayk7CiAKQEAgLTEyNCw3ICsxMjgsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlLT51cGRhdGVQcmVkZWNlc3NvcnNBZnRlcigp
OwogICAgICAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBtYWtlRGl2aXNpb25DaGls
bChNb2QpOworICAgICAgICAgICAgICAgICAgICAgICAgbWFrZURpdmlzaW9uQ2hpbGwoTW9kLCBw
ZWVwaG9sZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAKQEAgLTEzOSwyMSArMTQzLDIxIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkocmVzdWx0KTsKICAgICAg
ICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKG1fdmFsdWUtPnR5cGUoKSA9PSBGbG9hdCkgewotICAgICAgICAgICAgICAgICAgICBWYWx1
ZSogbnVtZXJhdG9yQXNEb3VibGUgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5k
ZXgsIEZsb2F0VG9Eb3VibGUsIG1fb3JpZ2luLCBtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIFZhbHVlKiBkZW5vbWluYXRvckFzRG91YmxlID0gbV9pbnNlcnRpb25TZXQu
aW5zZXJ0PFZhbHVlPihtX2luZGV4LCBGbG9hdFRvRG91YmxlLCBtX29yaWdpbiwgbV92YWx1ZS0+
Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbnVtZXJhdG9yQXNEb3VibGUg
PSBwZWVwaG9sZS5yZWR1Y2VGbG9hdFRvRG91YmxlKERvdWJsZSwgbV9vcmlnaW4sIG1fdmFsdWUt
PmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGRlbm9taW5hdG9yQXNEb3Vi
bGUgPSBwZWVwaG9sZS5yZWR1Y2VGbG9hdFRvRG91YmxlKERvdWJsZSwgbV9vcmlnaW4sIG1fdmFs
dWUtPmNoaWxkKDEpKTsKICAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGZ1bmN0aW9uQWRkcmVz
cyA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdFB0clZhbHVlPihtX2luZGV4LCBtX29yaWdp
biwgZm1vZERvdWJsZSk7CiAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBkb3VibGVNb2QgPSBt
X2luc2VydGlvblNldC5pbnNlcnQ8Q0NhbGxWYWx1ZT4obV9pbmRleCwgRG91YmxlLCBtX29yaWdp
biwKICAgICAgICAgICAgICAgICAgICAgICAgIEVmZmVjdHM6Om5vbmUoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIGZ1bmN0aW9uQWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgIG51
bWVyYXRvckFzRG91YmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgZGVub21pbmF0b3JBc0Rv
dWJsZSk7Ci0gICAgICAgICAgICAgICAgICAgIFZhbHVlKiByZXN1bHQgPSBtX2luc2VydGlvblNl
dC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIERvdWJsZVRvRmxvYXQsIG1fb3JpZ2luLCBkb3VibGVN
b2QpOworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogcmVzdWx0ID0gcGVlcGhvbGUucmVkdWNl
RG91YmxlVG9GbG9hdChGbG9hdCwgbV9vcmlnaW4sIGRvdWJsZU1vZCk7CiAgICAgICAgICAgICAg
ICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkocmVzdWx0KTsKICAgICAgICAgICAg
ICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlz
QVJNNjQoKSkgewotICAgICAgICAgICAgICAgICAgICBWYWx1ZSogZGl2UmVzdWx0ID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBjaGlsbChEaXYpLCBtX29yaWdpbiwgbV92
YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICAgICAg
VmFsdWUqIG11bHRpcGxpZWRCYWNrID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2lu
ZGV4LCBNdWwsIG1fb3JpZ2luLCBkaXZSZXN1bHQsIG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAg
ICAgICAgICAgICAgICAgVmFsdWUqIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1
ZT4obV9pbmRleCwgU3ViLCBtX29yaWdpbiwgbV92YWx1ZS0+Y2hpbGQoMCksIG11bHRpcGxpZWRC
YWNrKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGRpdlJlc3VsdCA9IHBlZXBob2xlLnJl
ZHVjZURpdihtX3ZhbHVlLT50eXBlKCksIG1fb3JpZ2luLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92
YWx1ZS0+Y2hpbGQoMSksIHRydWUpOworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbXVsdGlw
bGllZEJhY2sgPSBwZWVwaG9sZS5yZWR1Y2VNdWwobV92YWx1ZS0+dHlwZSgpLCBtX29yaWdpbiwg
ZGl2UmVzdWx0LCBtX3ZhbHVlLT5jaGlsZCgxKSk7CisgICAgICAgICAgICAgICAgICAgIFZhbHVl
KiByZXN1bHQgPSBwZWVwaG9sZS5yZWR1Y2VTdWIobV92YWx1ZS0+dHlwZSgpLCBtX29yaWdpbiwg
bV92YWx1ZS0+Y2hpbGQoMCksIG11bHRpcGxpZWRCYWNrKTsKICAgICAgICAgICAgICAgICAgICAg
bV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShyZXN1bHQpOwogICAgICAgICAgICAgICAgICAg
ICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KQEAgLTE2Miw5ICsxNjYsOSBA
QCBwcml2YXRlOgogCiAgICAgICAgICAgICBjYXNlIFVNb2Q6IHsKICAgICAgICAgICAgICAgICBp
ZiAoaXNBUk02NCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFZhbHVlKiBkaXZSZXN1bHQgPSBt
X2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIFVEaXYsIG1fb3JpZ2luLCBtX3Zh
bHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgICAgICBW
YWx1ZSogbXVsdGlwbGllZEJhY2sgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5k
ZXgsIE11bCwgbV9vcmlnaW4sIGRpdlJlc3VsdCwgbV92YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAg
ICAgICAgICAgICAgICBWYWx1ZSogcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVl
PihtX2luZGV4LCBTdWIsIG1fb3JpZ2luLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbXVsdGlwbGllZEJh
Y2spOworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogZGl2UmVzdWx0ID0gcGVlcGhvbGUucmVk
dWNlVURpdihtX3ZhbHVlLT50eXBlKCksIG1fb3JpZ2luLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92
YWx1ZS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbXVsdGlwbGllZEJh
Y2sgPSBwZWVwaG9sZS5yZWR1Y2VNdWwobV92YWx1ZS0+dHlwZSgpLCBtX29yaWdpbiwgZGl2UmVz
dWx0LCBtX3ZhbHVlLT5jaGlsZCgxKSk7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiByZXN1
bHQgPSBwZWVwaG9sZS5yZWR1Y2VTdWIobV92YWx1ZS0+dHlwZSgpLCBtX29yaWdpbiwgbV92YWx1
ZS0+Y2hpbGQoMCksIG11bHRpcGxpZWRCYWNrKTsKICAgICAgICAgICAgICAgICAgICAgbV92YWx1
ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShyZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KQEAgLTE3Myw3ICsxNzcsNyBAQCBwcml2
YXRlOgogCiAgICAgICAgICAgICBjYXNlIERpdjogewogICAgICAgICAgICAgICAgIGlmIChtX3Zh
bHVlLT5pc0NoaWxsKCkpCi0gICAgICAgICAgICAgICAgICAgIG1ha2VEaXZpc2lvbkNoaWxsKERp
dik7CisgICAgICAgICAgICAgICAgICAgIG1ha2VEaXZpc2lvbkNoaWxsKERpdiwgcGVlcGhvbGUp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCkBAIC0yMjUsMTAgKzIy
OSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKCFpc1g4NigpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIE9uIEFSTSwgdGhlIGxvYWQgcGFydCBvZiB0aGUgQ0FTIGRvZXMgYSBs
b2FkIHdpdGggemVybyBleHRlbnNpb24uIFRoZXJlZm9yZSwgd2UgbmVlZAogICAgICAgICAgICAg
ICAgICAgICAvLyB0byB6ZXJvLWV4dGVuZCB0aGUgaW5wdXQuCi0gICAgICAgICAgICAgICAgICAg
IFZhbHVlKiBtYXNrZWRFeHBlY3RlZFZhbHVlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVl
PigKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIEJpdEFuZCwgbV9vcmlnaW4sIGV4
cGVjdGVkVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnRJbnRDb25zdGFudChtX2luZGV4LCBleHBlY3RlZFZhbHVlLCBtYXNrKHdpZHRoKSkpOwotICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG1hc2tWYWx1ZSA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydEludENvbnN0YW50KG1faW5kZXgsIGV4cGVjdGVkVmFsdWUs
IG1hc2sod2lkdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG1hc2tlZEV4cGVjdGVk
VmFsdWUgPSBwZWVwaG9sZS5yZWR1Y2VCaXRBbmQobV92YWx1ZS0+dHlwZSgpLCBtX29yaWdpbiwg
ZXhwZWN0ZWRWYWx1ZSwgbWFza1ZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgYXRvbWljLT5j
aGlsZCgwKSA9IG1hc2tlZEV4cGVjdGVkVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgIG1fY2hh
bmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzI0LDcgKzMyNiw3IEBAIHByaXZh
dGU6CiAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUobV9ibG9jayk7CiAgICAgfQogCi0g
ICAgdm9pZCBtYWtlRGl2aXNpb25DaGlsbChPcGNvZGUgbm9uQ2hpbGxPcGNvZGUpCisgICAgdm9p
ZCBtYWtlRGl2aXNpb25DaGlsbChPcGNvZGUgbm9uQ2hpbGxPcGNvZGUsIFBlZXBob2xlT3B0aW1p
emVyJiBwZWVwaG9sZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChub25DaGlsbE9wY29kZSA9PSBE
aXYgfHwgbm9uQ2hpbGxPcGNvZGUgPT0gTW9kKTsKIApAQCAtMzQ4LDE2ICszNTAsMTcgQEAgcHJp
dmF0ZToKICAgICAgICAgLy8gZG9uZToKICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKIAorICAg
ICAgICBUeXBlIHR5cGUgPSBtX3ZhbHVlLT50eXBlKCk7CisKICAgICAgICAgVmFsdWUqIG51bSA9
IG1fdmFsdWUtPmNoaWxkKDApOwogICAgICAgICBWYWx1ZSogZGVuID0gbV92YWx1ZS0+Y2hpbGQo
MSk7CiAKICAgICAgICAgVmFsdWUqIG9uZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydEludENvbnN0
YW50KG1faW5kZXgsIG1fdmFsdWUsIDEpOwotICAgICAgICBWYWx1ZSogaXNEZW5PSyA9IG1faW5z
ZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAgICBtX2luZGV4LCBBYm92ZSwgbV9v
cmlnaW4sCi0gICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgs
IEFkZCwgbV9vcmlnaW4sIGRlbiwgb25lKSwKLSAgICAgICAgICAgIG9uZSk7CisgICAgICAgIFZh
bHVlKiBkZW5QbHVzT25lID0gcGVlcGhvbGUucmVkdWNlQWRkKHR5cGUsIG1fb3JpZ2luLCBkZW4s
IG9uZSk7CisgICAgICAgIFZhbHVlKiBpc0Rlbk9LID0gcGVlcGhvbGUucmVkdWNlQWJvdmUodHlw
ZSwgbV9vcmlnaW4sIGRlblBsdXNPbmUsIG9uZSk7CiAKICAgICAgICAgQmFzaWNCbG9jayogYmVm
b3JlID0gbV9ibG9ja0luc2VydGlvblNldC5zcGxpdEZvcndhcmQobV9ibG9jaywgbV9pbmRleCwg
Jm1faW5zZXJ0aW9uU2V0KTsKKyAgICAgICAgcGVlcGhvbGUuc2V0SW5kZXgobV9pbmRleCk7CiAK
ICAgICAgICAgQmFzaWNCbG9jayogbm9ybWFsRGl2Q2FzZSA9IG1fYmxvY2tJbnNlcnRpb25TZXQu
aW5zZXJ0QmVmb3JlKG1fYmxvY2spOwogICAgICAgICBCYXNpY0Jsb2NrKiBzaGFkeURlbkNhc2Ug
PSBtX2Jsb2NrSW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZShtX2Jsb2NrKTsKQEAgLTM4OCw3ICsz
OTEsNyBAQCBwcml2YXRlOgogICAgICAgICB6ZXJvRGVuQ2FzZS0+c2V0U3VjY2Vzc29ycyhGcmVx
dWVudGVkQmxvY2sobV9ibG9jaykpOwogCiAgICAgICAgIGludDY0X3QgYmFkTnVtZXJhdG9yQ29u
c3QgPSAwOwotICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPnR5cGUoKSkgeworICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBJbnQzMjoKICAgICAgICAgICAgIGJhZE51bWVyYXRv
ckNvbnN0ID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCk7CiAgICAgICAgICAg
ICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BlZXBob2xl
T3B0aW1pemVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BlZXBob2xlT3B0aW1p
emVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjIwMzQ2YThj
YzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQZWVwaG9s
ZU9wdGltaXplci5jcHAKQEAgLTAsMCArMSwxODUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
UGVlcGhvbGVPcHRpbWl6ZXIuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJC
M0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNDb21wdXRlRGl2aXNpb25NYWdpYy5o
IgorI2luY2x1ZGUgIkIzSW5zZXJ0aW9uU2V0SW5saW5lcy5oIgorI2luY2x1ZGUgIkIzSW50UmFu
Z2UuaCIKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzUHJv
Y2VkdXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVl
SW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworVmFsdWUqIFBl
ZXBob2xlT3B0aW1pemVyOjphcHBlbmRUb0N1cnJlbnRCbG9jayhWYWx1ZSogdmFsdWUpCit7Cisg
ICAgaWYgKG1faW5zZXJ0aW9uU2V0KQorICAgICAgICByZXR1cm4gbV9pbnNlcnRpb25TZXQtPmlu
c2VydFZhbHVlKG1faW5kZXgsIHZhbHVlKTsKKyAgICBBU1NFUlQoISFtX2Jsb2NrKTsKKyAgICBt
X2Jsb2NrLT5hcHBlbmQodmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZSogUGVlcGhv
bGVPcHRpbWl6ZXI6OmVtaXQoQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICByZXR1cm4g
YXBwZW5kVG9DdXJyZW50QmxvY2sobV9wcm9jLmFkZDxWYWx1ZVR5cGU+KGFyZ3VtZW50cy4uLikp
OworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZU9wYXF1ZShUeXBlLCBPcmln
aW4gb3JpZ2luLCBWYWx1ZSogY2hpbGQsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4g
dGhpczogT3BhcXVlKE9wYXF1ZSh2YWx1ZSkpCisgICAgLy8gSW50byB0aGlzOiBPcGFxdWUodmFs
dWUpCisgICAgaWYgKGNoaWxkLT5vcGNvZGUoKSA9PSBPcGFxdWUpCisgICAgICAgIHJldHVybiBj
aGlsZDsKKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oT3Bh
cXVlLCBvcmlnaW4sIGNoaWxkKTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1
Y2VBZGQoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0
LCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxlZnQp
KQorICAgICAgICByZXR1cm4gcmVkdWNlQWRkKHR5cGUsIG9yaWdpbiwgcmlnaHQsIGxlZnQpOwor
CisgICAgLy8gVHVybiB0aGlzOiBBZGQoY29uc3RhbnQxLCBjb25zdGFudDIpCisgICAgLy8gSW50
byB0aGlzOiBjb25zdGFudDEgKyBjb25zdGFudDIKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0g
bGVmdC0+YWRkQ29uc3RhbnQobV9wcm9jLCByaWdodCkpCisgICAgICAgIHJldHVybiBhcHBlbmRU
b0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IEFkZCh2YWx1ZSwg
emVybykKKyAgICAvLyBJbnRvIGFuIElkZW50aXR5LgorICAgIC8vCisgICAgLy8gQWRkaXRpb24g
aXMgc3VidGxlIHdpdGggZG91Ymxlcy4gWmVybyBpcyBub3QgdGhlIG5ldXRyYWwgdmFsdWUsIG5l
Z2F0aXZlIHplcm8gaXM6CisgICAgLy8gICAgMCArIDAgPSAwCisgICAgLy8gICAgMCArIC0wID0g
MAorICAgIC8vICAgIC0wICsgMCA9IDAKKyAgICAvLyAgICAtMCArIC0wID0gLTAKKyAgICBpZiAo
cmlnaHQtPmlzSW50KDApIHx8IHJpZ2h0LT5pc05lZ2F0aXZlWmVybygpKQorICAgICAgICByZXR1
cm4gbGVmdDsKKworICAgIGlmIChpc0ludCh0eXBlKSkgeworICAgICAgICBpZiAobGVmdC0+b3Bj
b2RlKCkgPT0gQWRkKSB7CisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIgQWRkKEFk
ZCh2YWx1ZSwgY29uc3RhbnQxKSwgY29uc3RhbnQyKQorICAgICAgICAgICAgLy8gSW50byB0aGlz
OiBBZGQodmFsdWUsIGNvbnN0YW50MSArIGNvbnN0YW50MikKKyAgICAgICAgICAgIFZhbHVlKiBu
ZXdTdW0gPSByaWdodC0+YWRkQ29uc3RhbnQobV9wcm9jLCBsZWZ0LT5jaGlsZCgxKSk7CisgICAg
ICAgICAgICBpZiAobmV3U3VtKSB7CisgICAgICAgICAgICAgICAgbmV3U3VtID0gYXBwZW5kVG9D
dXJyZW50QmxvY2sobmV3U3VtKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVkdWNlQWRkKHR5
cGUsIG9yaWdpbiwgbGVmdC0+Y2hpbGQoMCksIG5ld1N1bSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIgQWRkKHZhbHVlLCB2YWx1ZSkK
KyAgICAgICAgLy8gSW50byB0aGlzOiBTaGwodmFsdWUsIDEpCisgICAgICAgIC8vIFRoaXMgaXMg
YSB1c2VmdWwgY2Fub25pY2FsaXphdGlvbi4gSXQncyBub3QgbWVhbnQgdG8gYmUgYSBzdHJlbmd0
aCByZWR1Y3Rpb24uCisgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KSB7CisgICAgICAgICAgICBW
YWx1ZSogc2hpZnRBbW91bnQgPSBlbWl0PENvbnN0MzJWYWx1ZT4ob3JpZ2luLCAxKTsKKyAgICAg
ICAgICAgIHJldHVybiByZWR1Y2VTaGwodHlwZSwgb3JpZ2luLCBsZWZ0LCBzaGlmdEFtb3VudCk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIgQWRkKHZhbHVlLCBO
ZWcob3RoZXJWYWx1ZSkpCisgICAgICAgIC8vIEludG8gdGhpczogU3ViKHZhbHVlLCBvdGhlclZh
bHVlKQorICAgICAgICBpZiAocmlnaHQtPm9wY29kZSgpID09IE5lZykKKyAgICAgICAgICAgIHJl
dHVybiByZWR1Y2VTdWIodHlwZSwgb3JpZ2luLCBsZWZ0LCByaWdodC0+Y2hpbGQoMCkpOworCisg
ICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBBZGQoTmVnKHZhbHVlKSwgb3RoZXJWYWx1ZSkK
KyAgICAgICAgLy8gSW50byB0aGlzOiBTdWIob3RoZXJWYWx1ZSwgdmFsdWUpCisgICAgICAgIGlm
IChsZWZ0LT5vcGNvZGUoKSA9PSBOZWcpCisgICAgICAgICAgICByZXR1cm4gcmVkdWNlU3ViKHR5
cGUsIG9yaWdpbiwgcmlnaHQsIGxlZnQtPmNoaWxkKDApKTsKKworICAgICAgICAvLyBUdXJuIHRo
aXM6IEludGVnZXIgQWRkKEFkZCh2YWx1ZSwgY29uc3RhbnQpLCBvdGhlclZhbHVlKQorICAgICAg
ICAvLyBJbnRvIHRoaXM6IEFkZChBZGQodmFsdWUsIG90aGVyVmFsdWUpLCBjb25zdGFudCkKKyAg
ICAgICAgLy8gRklYTUU6IHRoaXMgY2FuIGNhdXNlIGNvZGUgZHVwbGljYXRpb24sIGFuZCBzaG91
bGQgYmUgcmVtb3ZlZCBvbmNlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTQwODEgbGFuZHMKKyAgICAgICAgaWYgKGxlZnQtPm9wY29kZSgpID09IEFkZCAmJiBsZWZ0
LT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKKyAgICAgICAgICAgIFZhbHVlKiB2YWwgPSByZWR1Y2VB
ZGQodHlwZSwgb3JpZ2luLCBsZWZ0LT5jaGlsZCgwKSwgcmlnaHQpOworICAgICAgICAgICAgcmV0
dXJuIHJlZHVjZUFkZCh0eXBlLCBvcmlnaW4sIHZhbCwgbGVmdC0+Y2hpbGQoMSkpOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRlZ2VyIEFkZCh2YWx1ZSwgQWRkKG90aGVy
VmFsdWUsIGNvbnN0YW50KSkKKyAgICAgICAgLy8gSW50byB0aGlzOiBBZGQoQWRkKHZhbHVlLCBv
dGhlclZhbHVlKSwgY29uc3RhbnQpCisgICAgICAgIC8vIEZJWE1FOiB0aGlzIGNhbiBjYXVzZSBj
b2RlIGR1cGxpY2F0aW9uLCBhbmQgc2hvdWxkIGJlIHJlbW92ZWQgb25jZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0MDgxIGxhbmRzCisgICAgICAgIGlmIChyaWdo
dC0+b3Bjb2RlKCkgPT0gQWRkICYmIHJpZ2h0LT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKKyAgICAg
ICAgICAgIFZhbHVlKiB2YWwgPSByZWR1Y2VBZGQodHlwZSwgb3JpZ2luLCBsZWZ0LCByaWdodC0+
Y2hpbGQoMCkpOworICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUFkZCh0eXBlLCBvcmlnaW4sIHZh
bCwgcmlnaHQtPmNoaWxkKDEpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChWYWx1ZSogcmVz
dWx0ID0gdHJ5UmVkdWNlTXVsRGlzdHJpYnV0aXZpdHkoQWRkLCB0eXBlLCBvcmlnaW4sIGxlZnQs
IHJpZ2h0KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgcmV0dXJu
IGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihBZGQsIG9yaWdpbiwgbGVmdCwgcmln
aHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVN1YihUeXBlIHR5cGUs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVw
KQoreworICAgIC8vIFR1cm4gdGhpczogU3ViKGNvbnN0YW50MSwgY29uc3RhbnQyKQorICAgIC8v
IEludG8gdGhpczogY29uc3RhbnQxIC0gY29uc3RhbnQyCisgICAgaWYgKFZhbHVlKiBjb25zdGFu
dCA9IGxlZnQtPnN1YkNvbnN0YW50KG1fcHJvYywgcmlnaHQpKQorICAgICAgICByZXR1cm4gYXBw
ZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgaWYgKGlzSW50KHR5cGUpKSB7Cisg
ICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBTdWIodmFsdWUsIGNvbnN0YW50KQorICAgICAg
ICAvLyBJbnRvIHRoaXM6IEFkZCh2YWx1ZSwgLWNvbnN0YW50KQorICAgICAgICBpZiAoVmFsdWUq
IG5lZ2F0ZWRDb25zdGFudCA9IHJpZ2h0LT5uZWdDb25zdGFudChtX3Byb2MpKSB7CisgICAgICAg
ICAgICBuZWdhdGVkQ29uc3RhbnQgPSBhcHBlbmRUb0N1cnJlbnRCbG9jayhuZWdhdGVkQ29uc3Rh
bnQpOworICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUFkZCh0eXBlLCBvcmlnaW4sIGxlZnQsIG5l
Z2F0ZWRDb25zdGFudCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVn
ZXIgU3ViKDAsIHZhbHVlKQorICAgICAgICAvLyBJbnRvIHRoaXM6IE5lZyh2YWx1ZSkKKyAgICAg
ICAgaWYgKGxlZnQtPmlzSW50KDApKQorICAgICAgICAgICAgcmV0dXJuIHJlZHVjZU5lZyh0eXBl
LCBvcmlnaW4sIHJpZ2h0KTsKKworICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIgU3ViKHZh
bHVlLCB2YWx1ZSkKKyAgICAgICAgLy8gSW50byB0aGlzOiAwCisgICAgICAgIGlmIChsZWZ0ID09
IHJpZ2h0KQorICAgICAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKG1fcHJvYy5h
ZGRJbnRDb25zdGFudChvcmlnaW4sIHR5cGUsIDApKTsKKworICAgICAgICAvLyBUdXJuIHRoaXM6
IEludGVnZXIgU3ViKHZhbHVlLCBOZWcob3RoZXJWYWx1ZSkpCisgICAgICAgIC8vIEludG8gdGhp
czogQWRkKHZhbHVlLCBvdGhlclZhbHVlKQorICAgICAgICBpZiAocmlnaHQtPm9wY29kZSgpID09
IE5lZykKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VBZGQodHlwZSwgb3JpZ2luLCBsZWZ0LCBy
aWdodC0+Y2hpbGQoMCkpOworCisgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBTdWIoLTEs
IHZhbHVlKQorICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdFhvcih2YWx1ZSwgLTEpCisgICAgICAg
IGlmIChsZWZ0LT5pc0ludCgtMSkpCisgICAgICAgICAgICByZXR1cm4gcmVkdWNlQml0WG9yKHR5
cGUsIG9yaWdpbiwgcmlnaHQsIGxlZnQpOworCisgICAgICAgIGlmIChWYWx1ZSogcmVzdWx0ID0g
dHJ5UmVkdWNlTXVsRGlzdHJpYnV0aXZpdHkoU3ViLCB0eXBlLCBvcmlnaW4sIGxlZnQsIHJpZ2h0
KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgcmV0dXJuIGNhbkdp
dmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihTdWIsIG9yaWdpbiwgbGVmdCwgcmlnaHQpOwor
fQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZU5lZyhUeXBlIHR5cGUsIE9yaWdp
biBvcmlnaW4sIFZhbHVlKiBjaGlsZCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgLy8gVHVybiB0
aGlzOiBOZWcoY29uc3RhbnQpCisgICAgLy8gSW50byB0aGlzOiAtY29uc3RhbnQKKyAgICBpZiAo
VmFsdWUqIGNvbnN0YW50ID0gY2hpbGQtPm5lZ0NvbnN0YW50KG1fcHJvYykpCisgICAgICAgIHJl
dHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICAvLyBUdXJuIHRoaXM6
IE5lZyhOZWcodmFsdWUpKQorICAgIC8vIEludG8gdGhpczogdmFsdWUKKyAgICBpZiAoY2hpbGQt
Pm9wY29kZSgpID09IE5lZykKKyAgICAgICAgcmV0dXJuIGNoaWxkLT5jaGlsZCgwKTsKKworICAg
IC8vIFR1cm4gdGhpczogSW50ZWdlciBOZWcoU3ViKHZhbHVlLCBvdGhlclZhbHVlKSkKKyAgICAv
LyBJbnRvIHRoaXM6IFN1YihvdGhlclZhbHVlLCB2YWx1ZSkKKyAgICBpZiAoaXNJbnQodHlwZSkg
JiYgY2hpbGQtPm9wY29kZSgpID09IFN1YikKKyAgICAgICAgcmV0dXJuIHJlZHVjZVN1Yih0eXBl
LCBvcmlnaW4sIGNoaWxkLT5jaGlsZCgxKSwgY2hpbGQtPmNoaWxkKDApKTsKKworICAgIC8vIFR1
cm4gdGhpczogSW50ZWdlciBOZWcoTXVsKHZhbHVlLCBjKSkKKyAgICAvLyBJbnRvIHRoaXM6IE11
bCh2YWx1ZSwgLWMpLCBhcyBsb25nIGFzIC1jIGRvZXMgbm90IG92ZXJmbG93CisgICAgaWYgKGNo
aWxkLT5vcGNvZGUoKSA9PSBNdWwgJiYgY2hpbGQtPmNoaWxkKDEpLT5oYXNJbnQoKSkgeworICAg
ICAgICBpbnQ2NF90IGZhY3RvciA9IGNoaWxkLT5jaGlsZCgxKS0+YXNJbnQoKTsKKyAgICAgICAg
aWYgKHR5cGUgPT0gSW50MzIgJiYgZmFjdG9yICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJf
dD46Om1pbigpKSB7CisgICAgICAgICAgICBWYWx1ZSogbmV3RmFjdG9yID0gZW1pdDxDb25zdDMy
VmFsdWU+KGNoaWxkLT5jaGlsZCgxKS0+b3JpZ2luKCksIC1mYWN0b3IpOworICAgICAgICAgICAg
cmV0dXJuIHJlZHVjZU11bCh0eXBlLCBvcmlnaW4sIGNoaWxkLT5jaGlsZCgwKSwgbmV3RmFjdG9y
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZSA9PSBJbnQ2NCAmJiBmYWN0b3IgIT0gc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpIHsKKyAgICAgICAgICAgIFZhbHVlKiBu
ZXdGYWN0b3IgPSBlbWl0PENvbnN0NjRWYWx1ZT4oY2hpbGQtPmNoaWxkKDEpLT5vcmlnaW4oKSwg
LWZhY3Rvcik7CisgICAgICAgICAgICByZXR1cm4gcmVkdWNlTXVsKHR5cGUsIG9yaWdpbiwgY2hp
bGQtPmNoaWxkKDApLCBuZXdGYWN0b3IpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihOZWcsIG9yaWdpbiwgY2hpbGQpOwor
fQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZU11bChUeXBlIHR5cGUsIE9yaWdp
biBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwKQorewor
ICAgIGlmIChzaG91bGRHb0JlZm9yZShyaWdodCwgbGVmdCkpCisgICAgICAgIHJldHVybiByZWR1
Y2VNdWwodHlwZSwgb3JpZ2luLCByaWdodCwgbGVmdCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IE11
bChjb25zdGFudDEsIGNvbnN0YW50MikKKyAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50MSAqIGNv
bnN0YW50MgorICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBsZWZ0LT5tdWxDb25zdGFudChtX3By
b2MsIHJpZ2h0KSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50
KTsKKworICAgIGlmIChyaWdodC0+aGFzSW50KCkpIHsKKyAgICAgICAgaW50NjRfdCBmYWN0b3Ig
PSByaWdodC0+YXNJbnQoKTsKKworICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2YWx1ZSwgMCkK
KyAgICAgICAgLy8gSW50byB0aGlzOiAwCisgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCBk
byB0aGlzIGZvciBkb3VibGVzIGJlY2F1c2UgdGhhdCdzIHdyb25nLiBGb3IgZXhhbXBsZSwgLTEg
KiAwCisgICAgICAgIC8vIGFuZCAxICogMCB5aWVsZCBkaWZmZXJlbnQgcmVzdWx0cy4KKyAgICAg
ICAgaWYgKCFmYWN0b3IpCisgICAgICAgICAgICByZXR1cm4gcmlnaHQ7CisKKyAgICAgICAgLy8g
VHVybiB0aGlzOiBNdWwodmFsdWUsIDEpCisgICAgICAgIC8vIEludG8gdGhpczogdmFsdWUKKyAg
ICAgICAgaWYgKGZhY3RvciA9PSAxKQorICAgICAgICAgICAgcmV0dXJuIGxlZnQ7CisKKyAgICAg
ICAgLy8gVHVybiB0aGlzOiBNdWwodmFsdWUsIC0xKQorICAgICAgICAvLyBJbnRvIHRoaXM6IE5l
Zyh2YWx1ZSkKKyAgICAgICAgaWYgKGZhY3RvciA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBy
ZWR1Y2VOZWcodHlwZSwgb3JpZ2luLCBsZWZ0KTsKKworICAgICAgICAvLyBUdXJuIHRoaXM6IE11
bCh2YWx1ZSwgY29uc3RhbnQpCisgICAgICAgIC8vIEludG8gdGhpczogU2hsKHZhbHVlLCBsb2cy
KGNvbnN0YW50KSkKKyAgICAgICAgaWYgKGhhc09uZUJpdFNldChmYWN0b3IpKSB7CisgICAgICAg
ICAgICB1bnNpZ25lZCBzaGlmdEFtb3VudCA9IFdURjo6ZmFzdExvZzIoc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KGZhY3RvcikpOworICAgICAgICAgICAgVmFsdWUqIHNoaWZ0Q29uc3RhbnQgPSBlbWl0
PENvbnN0MzJWYWx1ZT4ob3JpZ2luLCBzaGlmdEFtb3VudCk7CisgICAgICAgICAgICByZXR1cm4g
cmVkdWNlU2hsKHR5cGUsIG9yaWdpbiwgbGVmdCwgc2hpZnRDb25zdGFudCk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgaWYgKHJpZ2h0LT5oYXNEb3VibGUoKSkgeworICAgICAgICBkb3VibGUgZmFj
dG9yID0gcmlnaHQtPmFzRG91YmxlKCk7CisKKyAgICAgICAgLy8gVHVybiB0aGlzOiBNdWwodmFs
dWUsIDEpCisgICAgICAgIC8vIEludG8gdGhpczogdmFsdWUKKyAgICAgICAgaWYgKGZhY3RvciA9
PSAxKQorICAgICAgICAgICAgcmV0dXJuIGxlZnQ7CisgICAgfQorCisgICAgaWYgKGlzSW50KHR5
cGUpKSB7CisgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBNdWwodmFsdWUsIE5lZyhvdGhl
clZhbHVlKSkKKyAgICAgICAgLy8gSW50byB0aGlzOiBOZWcoTXVsKHZhbHVlLCBvdGhlclZhbHVl
KSkKKyAgICAgICAgaWYgKHJpZ2h0LT5vcGNvZGUoKSA9PSBOZWcpIHsKKyAgICAgICAgICAgIFZh
bHVlKiBuZXdNdWwgPSByZWR1Y2VNdWwodHlwZSwgb3JpZ2luLCBsZWZ0LCByaWdodC0+Y2hpbGQo
MCkpOworICAgICAgICAgICAgcmV0dXJuIHJlZHVjZU5lZyh0eXBlLCBvcmlnaW4sIG5ld011bCk7
CisgICAgICAgIH0KKyAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRlZ2VyIE11bChOZWcodmFsdWUp
LCBvdGhlclZhbHVlKQorICAgICAgICAvLyBJbnRvIHRoaXM6IE5lZyhNdWwodmFsdWUsIG90aGVy
VmFsdWUpKQorICAgICAgICBpZiAobGVmdC0+b3Bjb2RlKCkgPT0gTmVnKSB7CisgICAgICAgICAg
ICBWYWx1ZSogbmV3TXVsID0gcmVkdWNlTXVsKHR5cGUsIG9yaWdpbiwgbGVmdC0+Y2hpbGQoMCks
IHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VOZWcodHlwZSwgb3JpZ2luLCBuZXdN
dWwpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIg
OiBlbWl0PFZhbHVlPihNdWwsIG9yaWdpbiwgbGVmdCwgcmlnaHQpOworfQorCitWYWx1ZSogUGVl
cGhvbGVPcHRpbWl6ZXI6OnJlZHVjZURpdihUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVl
KiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgaXNDaGlsbCwgYm9vbCBjYW5HaXZlVXApCit7Cisg
ICAgLy8gVHVybiB0aGlzOiBEaXYoY29uc3RhbnQxLCBjb25zdGFudDIpCisgICAgLy8gSW50byB0
aGlzOiBjb25zdGFudDEgLyBjb25zdGFudDIKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyB1c2VzIERp
djxDaGlsbD4gc2VtYW50aWNzLiBUaGF0J3MgZmluZSwgYmVjYXVzZSB0aGUgcnVsZXMgZm9yIERp
dgorICAgIC8vIGFyZSBzdHJpY3RseSB3ZWFrZXI6IGl0IGhhcyBjb3JuZXIgY2FzZXMgd2hlcmUg
aXQncyBhbGxvd2VkIHRvIGRvIGFueXRoaW5nIGl0CisgICAgLy8gbGlrZXMuCisgICAgaWYgKFZh
bHVlKiBjb25zdGFudCA9IGxlZnQtPmRpdkNvbnN0YW50KG1fcHJvYywgcmlnaHQpKQorICAgICAg
ICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgaWYgKHJpZ2h0
LT5oYXNJbnQoKSkgeworICAgICAgICBpbnQ2NF90IGRpdmlzb3IgPSByaWdodC0+YXNJbnQoKTsK
KyAgICAgICAgaWYgKGRpdmlzb3IgPT0gLTEpIHsKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczog
RGl2KHZhbHVlLCAtMSkKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogTmVnKHZhbHVlKQorICAg
ICAgICAgICAgcmV0dXJuIHJlZHVjZU5lZyh0eXBlLCBvcmlnaW4sIGxlZnQpOworICAgICAgICB9
CisgICAgICAgIGlmICghZGl2aXNvcikgeworICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBEaXYo
dmFsdWUsIDApCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IDAKKyAgICAgICAgICAgIC8vIFdl
IGNhbiBkbyB0aGlzIGJlY2F1c2UgaXQncyBwcmVjaXNlbHkgY29ycmVjdCBmb3IgQ2hpbGxEaXYg
YW5kIGZvciBEaXYgd2UKKyAgICAgICAgICAgIC8vIGFyZSBhbGxvd2VkIHRvIGRvIHdoYXRldmVy
IHdlIHdhbnQuCisgICAgICAgICAgICByZXR1cm4gcmlnaHQ7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGRpdmlzb3IgPT0gMSkgeworICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBEaXYodmFsdWUs
IDEpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHZhbHVlCisgICAgICAgICAgICByZXR1cm4g
bGVmdDsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZSA9PSBJbnQzMiAmJiBtX3Byb2Mub3B0
TGV2ZWwoKSA+PSAyKSB7CisgICAgICAgICAgICAvLyBQZXJmb3JtIHN1cGVyIGNvbXByZWhlbnNp
dmUgc3RyZW5ndGggcmVkdWN0aW9uIG9mIGRpdmlzaW9uLiBDdXJyZW50bHkgd2UKKyAgICAgICAg
ICAgIC8vIG9ubHkgZG8gdGhpcyBmb3IgMzItYml0IGRpdmlzaW9ucywgc2luY2Ugd2UgbmVlZCBh
IGhpZ2ggbXVsdGlwbHkKKyAgICAgICAgICAgIC8vIG9wZXJhdGlvbi4gV2UgZW11bGF0ZSBpdCB1
c2luZyA2NC1iaXQgbXVsdGlwbHkuIFdlIGNhbid0IGVtdWxhdGUgNjQtYml0CisgICAgICAgICAg
ICAvLyBoaWdoIG11bHRpcGx5IHdpdGggYSAxMjgtYml0IG11bHRpcGx5IGJlY2F1c2Ugd2UgZG9u
J3QgaGF2ZSBhIDEyOC1iaXQKKyAgICAgICAgICAgIC8vIG11bHRpcGx5LiBXZSBjb3VsZCBkbyBp
dCB3aXRoIGEgcGF0Y2hwb2ludCBpZiB3ZSBjYXJlZCBiYWRseSBlbm91Z2guCisgICAgICAgICAg
ICBpbnQzMl90IGRpdmlzb3IzMiA9IHJpZ2h0LT5hc0ludDMyKCk7CisgICAgICAgICAgICBEaXZp
c2lvbk1hZ2ljPGludDMyX3Q+IG1hZ2ljID0gY29tcHV0ZURpdmlzaW9uTWFnaWMoZGl2aXNvcjMy
KTsKKyAgICAgICAgICAgIC8vIFBlcmZvcm0gdGhlICJoaWdoIiBtdWx0aXBsaWNhdGlvbi4gV2Ug
ZG8gaXQganVzdCB0byBnZXQgdGhlIGhpZ2ggYml0cy4KKyAgICAgICAgICAgIC8vIFRoaXMgaXMg
c29ydCBvZiBsaWtlIG11bHRpcGx5aW5nIGJ5IHRoZSByZWNpcHJvY2FsLCBqdXN0IG1vcmUgZ25h
cmx5LiBJdCdzCisgICAgICAgICAgICAvLyBmcm9tIEhhY2tlcidzIERlbGlnaHQgYW5kIEkgZG9u
J3QgY2xhaW0gdG8gdW5kZXJzdGFuZCBpdC4KKyAgICAgICAgICAgIFZhbHVlKiBjb25zdE1hZ2lj
TXVsdGlwbGllciA9IGVtaXQ8Q29uc3Q2NFZhbHVlPihvcmlnaW4sIG1hZ2ljLm1hZ2ljTXVsdGlw
bGllcik7CisgICAgICAgICAgICBWYWx1ZSogc2V4dDMyTGVmdCA9IHJlZHVjZVNFeHQzMih0eXBl
LCBvcmlnaW4sIGxlZnQpOworICAgICAgICAgICAgVmFsdWUqIG11bExlZnQgPSByZWR1Y2VNdWwo
SW50NjQsIG9yaWdpbiwgc2V4dDMyTGVmdCwgY29uc3RNYWdpY011bHRpcGxpZXIpOworICAgICAg
ICAgICAgVmFsdWUqIGNvbnN0MzIgPSBlbWl0PENvbnN0MzJWYWx1ZT4ob3JpZ2luLCAzMik7Cisg
ICAgICAgICAgICBWYWx1ZSogbGFyZ2VNYWdpY1F1b3RpZW50ID0gcmVkdWNlWlNocih0eXBlLCBv
cmlnaW4sIG11bExlZnQsIGNvbnN0MzIpOworICAgICAgICAgICAgVmFsdWUqIG1hZ2ljUXVvdGll
bnQgPSByZWR1Y2VUcnVuYyh0eXBlLCBvcmlnaW4sIGxhcmdlTWFnaWNRdW90aWVudCk7CisgICAg
ICAgICAgICBpZiAoZGl2aXNvcjMyID4gMCAmJiBtYWdpYy5tYWdpY011bHRpcGxpZXIgPCAwKQor
ICAgICAgICAgICAgICAgIG1hZ2ljUXVvdGllbnQgPSByZWR1Y2VBZGQoSW50MzIsIG9yaWdpbiwg
bWFnaWNRdW90aWVudCwgbGVmdCk7CisgICAgICAgICAgICBpZiAoZGl2aXNvcjMyIDwgMCAmJiBt
YWdpYy5tYWdpY011bHRpcGxpZXIgPiAwKQorICAgICAgICAgICAgICAgIG1hZ2ljUXVvdGllbnQg
PSByZWR1Y2VTdWIoSW50MzIsIG9yaWdpbiwgbWFnaWNRdW90aWVudCwgbGVmdCk7CisgICAgICAg
ICAgICBpZiAobWFnaWMuc2hpZnQgPiAwKSB7CisgICAgICAgICAgICAgICAgVmFsdWUqIGNvbnN0
TWFnaWNTaGlmdCA9IGVtaXQ8Q29uc3QzMlZhbHVlPihvcmlnaW4sIG1hZ2ljLnNoaWZ0KTsKKyAg
ICAgICAgICAgICAgICBtYWdpY1F1b3RpZW50ID0gcmVkdWNlU1Nocih0eXBlLCBvcmlnaW4sIG1h
Z2ljUXVvdGllbnQsIGNvbnN0TWFnaWNTaGlmdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBWYWx1ZSogY29uc3QzMSA9IGVtaXQ8Q29uc3QzMlZhbHVlPihvcmlnaW4sIDMxKTsKKyAgICAg
ICAgICAgIFZhbHVlKiBzaGlmdGVkTWFnaWNRdW90aWVudCA9IHJlZHVjZVpTaHIodHlwZSwgb3Jp
Z2luLCBtYWdpY1F1b3RpZW50LCBjb25zdDMxKTsKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VB
ZGQoSW50MzIsIG9yaWdpbiwgbWFnaWNRdW90aWVudCwgc2hpZnRlZE1hZ2ljUXVvdGllbnQpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNhbkdpdmVVcCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgS2luZCBkaXZLaW5kID0gRGl2OworICAgIGRpdktpbmQuc2V0SXNDaGlsbChp
c0NoaWxsKTsKKyAgICByZXR1cm4gZW1pdDxWYWx1ZT4oZGl2S2luZCwgb3JpZ2luLCBsZWZ0LCBy
aWdodCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlVURpdihUeXBlLCBP
cmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCkK
K3sKKyAgICAvLyBUdXJuIHRoaXM6IFVEaXYoY29uc3RhbnQxLCBjb25zdGFudDIpCisgICAgLy8g
SW50byB0aGlzOiBjb25zdGFudDEgLyBjb25zdGFudDIKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50
ID0gbGVmdC0+dURpdkNvbnN0YW50KG1fcHJvYywgcmlnaHQpKQorICAgICAgICByZXR1cm4gYXBw
ZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgaWYgKHJpZ2h0LT5oYXNJbnQoKSkg
eworICAgICAgICBpbnQ2NF90IGRpdmlzb3IgPSByaWdodC0+YXNJbnQoKTsKKyAgICAgICAgaWYg
KCFkaXZpc29yKSB7CisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFVEaXYodmFsdWUsIDApCisg
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IDAKKyAgICAgICAgICAgIC8vIFdlIGNhbiBkbyB3aGF0
ZXZlciB3ZSB3YW50IGhlcmUgc28gd2UgbWlnaHQgYXMgd2VsbCBkbyB0aGUgY2hpbGwgdGhpbmcs
CisgICAgICAgICAgICAvLyBpbiBjYXNlIHdlIGFkZCBjaGlsbCB2ZXJzaW9ucyBvZiBVRGl2IGlu
IHRoZSBmdXR1cmUuCisgICAgICAgICAgICByZXR1cm4gcmlnaHQ7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGRpdmlzb3IgPT0gMSkgeworICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBVRGl2KHZh
bHVlLCAxKQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZQorICAgICAgICAgICAgcmV0
dXJuIGxlZnQ7CisgICAgICAgIH0KKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyBjb21w
cmVoZW5zaXZlIHN0cmVuZ3RoIHJlZHVjdGlvbiBmb3IgdW5zaWduZWQgbnVtYmVycy4gTGlrZWx5
LAorICAgICAgICAvLyB3ZSB3aWxsIGp1c3Qgd2FudCBjb3B5IHdoYXQgbGx2bSBkb2VzLiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0ODA5CisgICAgfQorCisgICAg
cmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihVRGl2LCBvcmlnaW4sIGxl
ZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VNb2QoVHlw
ZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGlz
Q2hpbGwsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogTW9kKGNvbnN0YW50
MSwgY29uc3RhbnQyKQorICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxICUgY29uc3RhbnQyCisg
ICAgLy8gTm90ZSB0aGF0IHRoaXMgdXNlcyBNb2Q8Q2hpbGw+IHNlbWFudGljcy4KKyAgICBpZiAo
VmFsdWUqIGNvbnN0YW50ID0gbGVmdC0+bW9kQ29uc3RhbnQobV9wcm9jLCByaWdodCkpCisgICAg
ICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICBpZiAocmln
aHQtPmhhc0ludCgpKSB7CisgICAgICAgIGludDY0X3QgZGl2aXNvciA9IHJpZ2h0LT5hc0ludCgp
OworICAgICAgICBpZiAoIWRpdmlzb3IpIHsKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTW9k
KHZhbHVlLCAwKQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiAwCisgICAgICAgICAgICAvLyBU
aGlzIGlzIGNvcnJlY3QgYWNjb3JkaW5nIHRvIENoaWxsTW9kIHNlbWFudGljcy4KKyAgICAgICAg
ICAgIHJldHVybiByaWdodDsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZSA9PSBJbnQzMiAm
JiBtX3Byb2Mub3B0TGV2ZWwoKSA+PSAyKSB7CisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE1v
ZChOLCBEKQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTdWIoTiwgTXVsKERpdihOLCBEKSwg
RCkpCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWVkLXVwIGJl
Y2F1c2Ugd2UgdXNlIG91ciBleGlzdGluZyBEaXYgb3B0aW1pemF0aW9ucy4KKyAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAvLyBIZXJlJ3MgYW4gZWFzaWVyIHdheSB0byBsb29rIGF0IGl0Ogor
ICAgICAgICAgICAgLy8gICAgIE4gJSBEID0gTiAtIE4gLyBEICogRAorICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IHdvcmsgZm9yIEQgPSAwIGFu
ZCBDaGlsbE1vZC4gVGhlIGV4cGVjdGVkIHJlc3VsdCBpcyAwLgorICAgICAgICAgICAgLy8gVGhh
dCdzIHdoeSB3ZSBoYXZlIGEgc3BlY2lhbC1jYXNlIGFib3ZlLgorICAgICAgICAgICAgLy8gICAg
IFggJSAwID0gWCAtIFggLyAwICogMCA9IFggICAgIChzaG91bGQgYmUgMCkKKyAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAvLyBUaGlzIGRvZXMgd29yayBmb3IgdGhlIEQgPSAtMSBzcGVjaWFs
IGNhc2UuCisgICAgICAgICAgICAvLyAgICAgLTJeMzEgJSAtMSA9IC0yXjMxIC0gLTJeMzEgLyAt
MSAqIC0xCisgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICA9IC0yXjMxIC0gLTJeMzEgKiAt
MQorICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgPSAtMl4zMSAtIC0yXjMxCisgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgICA9IDAKKyAgICAgICAgICAgIFZhbHVlKiBkaXYgPSByZWR1
Y2VEaXYodHlwZSwgb3JpZ2luLCBsZWZ0LCByaWdodCwgaXNDaGlsbCk7CisgICAgICAgICAgICBW
YWx1ZSogbXVsID0gcmVkdWNlTXVsKHR5cGUsIG9yaWdpbiwgZGl2LCByaWdodCk7CisgICAgICAg
ICAgICByZXR1cm4gcmVkdWNlU3ViKHR5cGUsIG9yaWdpbiwgbGVmdCwgbXVsKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmIChjYW5HaXZlVXApCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIEtpbmQgbW9kS2luZCA9IE1vZDsKKyAgICBtb2RLaW5kLnNldElzQ2hpbGwoaXNDaGlsbCk7
CisgICAgcmV0dXJuIGVtaXQ8VmFsdWU+KG1vZEtpbmQsIG9yaWdpbiwgbGVmdCwgcmlnaHQpOwor
fQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVVNb2QoVHlwZSwgT3JpZ2luIG9y
aWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAg
Ly8gVHVybiB0aGlzOiBVTW9kKGNvbnN0YW50MSwgY29uc3RhbnQyKQorICAgIC8vIEludG8gdGhp
czogY29uc3RhbnQxICUgY29uc3RhbnQyCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGxlZnQt
PnVNb2RDb25zdGFudChtX3Byb2MsIHJpZ2h0KSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3Vy
cmVudEJsb2NrKGNvbnN0YW50KTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZG8gd2hhdCB3
ZSBkbyBmb3IgTW9kIHNpbmNlIHRoZSBzYW1lIHByaW5jaXBsZSBhcHBsaWVzIGhlcmUuCisgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDgwOQorCisgICAg
cmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihVTW9kLCBvcmlnaW4sIGxl
ZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VCaXRBbmQo
VHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29s
IGNhbkdpdmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxlZnQpKQorICAg
ICAgICByZXR1cm4gcmVkdWNlQml0QW5kKHR5cGUsIG9yaWdpbiwgcmlnaHQsIGxlZnQpOworCisg
ICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoY29uc3RhbnQxLCBjb25zdGFudDIpCisgICAgLy8gSW50
byB0aGlzOiBjb25zdGFudDEgJiBjb25zdGFudDIKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0g
bGVmdC0+Yml0QW5kQ29uc3RhbnQobV9wcm9jLCByaWdodCkpCisgICAgICAgIHJldHVybiBhcHBl
bmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZCh2
YWx1ZVgsIHZhbHVlWCkKKyAgICAvLyBJbnRvIHRoaXM6IHZhbHVlWC4KKyAgICBpZiAobGVmdCA9
PSByaWdodCkKKyAgICAgICAgcmV0dXJuIGxlZnQ7CisKKyAgICAvLyBUdXJuIHRoaXM6IEJpdEFu
ZCh2YWx1ZSwgemVyby1jb25zdGFudCkKKyAgICAvLyBJbnRvIHRoaXM6IHplcm8tY29uc3RhbnQu
CisgICAgaWYgKHJpZ2h0LT5pc0ludCgwKSkKKyAgICAgICAgcmV0dXJuIHJpZ2h0OworCisgICAg
Ly8gVHVybiB0aGlzOiBCaXRBbmQodmFsdWUsIGFsbC1vbmVzKQorICAgIC8vIEludG8gdGhpczog
dmFsdWUuCisgICAgaWYgKCh0eXBlID09IEludDY0ICYmIHJpZ2h0LT5pc0ludChzdGQ6Om51bWVy
aWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpKQorICAgICAgICB8fCAodHlwZSA9PSBJbnQzMiAm
JiByaWdodC0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkpIHsK
KyAgICAgICAgcmV0dXJuIGxlZnQ7CisgICAgfQorCisgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQo
Qml0QW5kKHZhbHVlLCBjb25zdGFudDEpLCBjb25zdGFudDIpCisgICAgLy8gSW50byB0aGlzOiBC
aXRBbmQodmFsdWUsIGNvbnN0YW50MSAmIGNvbnN0YW50MikuCisgICAgaWYgKGxlZnQtPm9wY29k
ZSgpID09IEJpdEFuZCkgeworICAgICAgICBWYWx1ZSogbmV3Q29uc3RhbnQgPSByaWdodC0+Yml0
QW5kQ29uc3RhbnQobV9wcm9jLCBsZWZ0LT5jaGlsZCgxKSk7CisgICAgICAgIGlmIChuZXdDb25z
dGFudCkgeworICAgICAgICAgICAgbmV3Q29uc3RhbnQgPSBhcHBlbmRUb0N1cnJlbnRCbG9jayhu
ZXdDb25zdGFudCk7CisgICAgICAgICAgICByZXR1cm4gcmVkdWNlQml0QW5kKHR5cGUsIG9yaWdp
biwgbGVmdC0+Y2hpbGQoMCksIG5ld0NvbnN0YW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIFR1cm4gdGhpczogQml0QW5kKDY0LWJpdCB2YWx1ZSwgMzIgb25lcykKKyAgICAvLyBJbnRv
IHRoaXM6IFpFeHQzMihUcnVuYyg2NC1iaXQgdmFsdWUpKQorICAgIGlmIChyaWdodC0+aXNJbnQ2
NCgweGZmZmZmZmZmbGx1KSkgeworICAgICAgICBWYWx1ZSogdHJ1bmMgPSByZWR1Y2VUcnVuYyh0
eXBlLCBvcmlnaW4sIGxlZnQpOworICAgICAgICByZXR1cm4gcmVkdWNlWkV4dDMyKHR5cGUsIG9y
aWdpbiwgdHJ1bmMpOworICAgIH0KKworICAgIC8vIFR1cm4gdGhpczogQml0QW5kKFNFeHQ4KHZh
bHVlKSwgbWFzaykgd2hlcmUgKG1hc2sgJiAweGZmZmZmZjAwKSA9PSAwCisgICAgLy8gSW50byB0
aGlzOiBCaXRBbmQodmFsdWUsIG1hc2spCisgICAgaWYgKGxlZnQtPm9wY29kZSgpID09IFNFeHQ4
ICYmIHJpZ2h0LT5oYXNJbnQzMigpICYmICEocmlnaHQtPmFzSW50MzIoKSAmIDB4ZmZmZmZmMDAp
KQorICAgICAgICByZXR1cm4gcmVkdWNlQml0QW5kKHR5cGUsIG9yaWdpbiwgbGVmdC0+Y2hpbGQo
MCksIHJpZ2h0KTsKKworICAgIC8vIFR1cm4gdGhpczogQml0QW5kKFNFeHQxNih2YWx1ZSksIG1h
c2spIHdoZXJlIChtYXNrICYgMHhmZmZmMDAwMCkgPT0gMAorICAgIC8vIEludG8gdGhpczogQml0
QW5kKHZhbHVlLCBtYXNrKQorICAgIGlmIChsZWZ0LT5vcGNvZGUoKSA9PSBTRXh0MTYgJiYgcmln
aHQtPmhhc0ludDMyKCkgJiYgIShyaWdodC0+YXNJbnQzMigpICYgMHhmZmZmMDAwMCkpCisgICAg
ICAgIHJldHVybiByZWR1Y2VCaXRBbmQodHlwZSwgb3JpZ2luLCBsZWZ0LT5jaGlsZCgwKSwgcmln
aHQpOworCisgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoU0V4dDMyKHZhbHVlKSwgbWFzaykgd2hl
cmUgKG1hc2sgJiAweGZmZmZmZmZmMDAwMDAwMDApID09IDAKKyAgICAvLyBJbnRvIHRoaXM6IEJp
dEFuZChaRXh0MzIodmFsdWUpLCBtYXNrKQorICAgIGlmIChsZWZ0LT5vcGNvZGUoKSA9PSBTRXh0
MzIgJiYgcmlnaHQtPmhhc0ludDY0KCkKKyAgICAgICAgJiYgIShyaWdodC0+YXNJbnQ2NCgpICYg
MHhmZmZmZmZmZjAwMDAwMDAwbGx1KSkgeworICAgICAgICBWYWx1ZSogemV4dDMyID0gcmVkdWNl
WkV4dDMyKHR5cGUsIG9yaWdpbiwgbGVmdC0+Y2hpbGQoMCkpOworICAgICAgICByZXR1cm4gcmVk
dWNlQml0QW5kKHR5cGUsIG9yaWdpbiwgemV4dDMyLCByaWdodCk7CisgICAgfQorCisgICAgLy8g
VHVybiB0aGlzOiBCaXRBbmQoT3AodmFsdWUsIGNvbnN0YW50MSksIGNvbnN0YW50MikKKyAgICAv
LyAgICAgd2hlcmUgIShjb25zdGFudDEgJiBjb25zdGFudDIpCisgICAgLy8gICAgICAgYW5kIE9w
IGlzIEJpdE9yIG9yIEJpdFhvcgorICAgIC8vIGludG8gdGhpczogQml0QW5kKHZhbHVlLCBjb25z
dGFudDIpCisgICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHRoaXMgZm9yIG5vbi1jb25zdGFudCBj
b25zdGFudDIgaGVyZSBvbmNlIHdlIGhhdmUgYSBrbm93bkJpdHMgYW5hbHlzaXMuCisgICAgaWYg
KHJpZ2h0LT5oYXNJbnQoKSkgeworICAgICAgICBpbnQ2NF90IGNvbnN0YW50MiA9IHJpZ2h0LT5h
c0ludCgpOworICAgICAgICBzd2l0Y2ggKGxlZnQtPm9wY29kZSgpKSB7CisgICAgICAgIGNhc2Ug
Qml0T3I6CisgICAgICAgIGNhc2UgQml0WG9yOgorICAgICAgICAgICAgaWYgKGxlZnQtPmNoaWxk
KDEpLT5oYXNJbnQoKSAmJiAhKGxlZnQtPmNoaWxkKDEpLT5hc0ludCgpICYgY29uc3RhbnQyKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gcmVkdWNlQml0QW5kKHR5cGUsIG9yaWdpbiwgbGVmdC0+
Y2hpbGQoMCksIHJpZ2h0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUdXJuIHRoaXM6
IEJpdEFuZChCaXRYb3IoeDEsIGFsbE9uZXMpLCBCaXRYb3IoeDIsIGFsbE9uZXMpCisgICAgLy8g
SW50byB0aGlzOiBCaXRYb3IoQml0T3IoeDEsIHgyKSwgYWxsT25lcykKKyAgICAvLyBCeSBhcHBs
eWluZyBEZSBNb3JnYW4gbGF3cworICAgIC8vIEZJWE1FOiB3aXRoIGEga25vd25CaXRzIGFuYWx5
c2lzLCB0aGlzIGNvdWxkIGV4dGVuZCB0byBhbnkgY29uc3RhbnQgdGhhdCBpbmNsdWRlcyBhbGwg
Yml0cyBpbiB4MSBhbmQgeDIKKyAgICBpZiAobGVmdC0+b3Bjb2RlKCkgPT0gQml0WG9yCisgICAg
ICAgICYmIHJpZ2h0LT5vcGNvZGUoKSA9PSBCaXRYb3IKKyAgICAgICAgJiYgKCh0eXBlID09IElu
dDY0CisgICAgICAgICAgICAmJiBsZWZ0LT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xp
bWl0czx1aW50NjRfdD46Om1heCgpKQorICAgICAgICAgICAgJiYgcmlnaHQtPmNoaWxkKDEpLT5p
c0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpKQorICAgICAgICB8fCAo
dHlwZSA9PSBJbnQzMgorICAgICAgICAgICAgJiYgbGVmdC0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkKKyAgICAgICAgICAgICYmIHJpZ2h0LT5j
aGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkpKSB7
CisgICAgICAgIFZhbHVlKiBiaXRPciA9IHJlZHVjZUJpdE9yKHR5cGUsIG9yaWdpbiwgbGVmdC0+
Y2hpbGQoMCksIHJpZ2h0LT5jaGlsZCgwKSk7CisgICAgICAgIHJldHVybiByZWR1Y2VCaXRYb3Io
dHlwZSwgb3JpZ2luLCBiaXRPciwgbGVmdC0+Y2hpbGQoMSkpOworICAgIH0KKworICAgIC8vIFR1
cm4gdGhpczogQml0QW5kKEJpdFhvcih4LCBhbGxPbmVzKSwgYykKKyAgICAvLyBJbnRvIHRoaXM6
IEJpdFhvcihCaXRPcih4LCB+YyksIGFsbE9uZXMpCisgICAgLy8gVGhpcyBpcyBhIHZhcmlhdGlv
biBvbiB0aGUgcHJldmlvdXMgb3B0aW1pemF0aW9uLCB0cmVhdGluZyBjIGFzIGlmIGl0IHdlcmUg
Qml0WG9yKH5jLCBhbGxPbmVzKQorICAgIC8vIEl0IGRvZXMgbm90IHJlZHVjZSB0aGUgbnVtYmVy
IG9mIG9wZXJhdGlvbnMsIGJ1dCBwcm92aWRlcyBzb21lIG5vcm1hbGl6YXRpb24gKHdlIHRyeSB0
byBnZXQgQml0WG9yIGJ5IGFsbE9uZXMgYXQgdGhlIG91dGVybW9zdCBwb2ludCksIGFuZCBzb21l
IGNoYW5jZSB0byBmbG9hdCBYb3JzIHRvIGEgcGxhY2Ugd2hlcmUgdGhleSBtaWdodCBnZXQgZWxp
bWluYXRlZC4KKyAgICBpZiAobGVmdC0+b3Bjb2RlKCkgPT0gQml0WG9yCisgICAgICAgICYmIHJp
Z2h0LT5oYXNJbnQoKQorICAgICAgICAmJiAoKHR5cGUgPT0gSW50NjQgJiYgbGVmdC0+Y2hpbGQo
MSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSkpCisgICAgICAg
IHx8ICh0eXBlID09IEludDMyICYmIGxlZnQtPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpKSkpIHsKKyAgICAgICAgVmFsdWUqIGJpdE9yID0gcmVk
dWNlQml0T3IodHlwZSwgb3JpZ2luLCBsZWZ0LT5jaGlsZCgwKSwgcmlnaHQtPmJpdFhvckNvbnN0
YW50KG1fcHJvYywgbGVmdC0+Y2hpbGQoMSkpKTsKKyAgICAgICAgcmV0dXJuIHJlZHVjZUJpdFhv
cih0eXBlLCBvcmlnaW4sIGJpdE9yLCBsZWZ0LT5jaGlsZCgxKSk7CisgICAgfQorCisgICAgcmV0
dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihCaXRBbmQsIG9yaWdpbiwgbGVm
dCwgcmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUJpdE9yKFR5
cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBj
YW5HaXZlVXApCit7CisgICAgaWYgKHNob3VsZEdvQmVmb3JlKHJpZ2h0LCBsZWZ0KSkKKyAgICAg
ICAgcmV0dXJuIHJlZHVjZUJpdE9yKHR5cGUsIG9yaWdpbiwgcmlnaHQsIGxlZnQpOworCisgICAg
Ly8gVHVybiB0aGlzOiBCaXRPcihjb25zdGFudDEsIGNvbnN0YW50MikKKyAgICAvLyBJbnRvIHRo
aXM6IGNvbnN0YW50MSB8IGNvbnN0YW50MgorICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBsZWZ0
LT5iaXRPckNvbnN0YW50KG1fcHJvYywgcmlnaHQpKQorICAgICAgICByZXR1cm4gYXBwZW5kVG9D
dXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgLy8gVHVybiB0aGlzOiBCaXRPcihCaXRPcih2
YWx1ZSwgY29uc3RhbnQxKSwgY29uc3RhbnQyKQorICAgIC8vIEludG8gdGhpczogQml0T3IodmFs
dWUsIGNvbnN0YW50MSB8IGNvbnN0YW50MikuCisgICAgaWYgKGxlZnQtPm9wY29kZSgpID09IEJp
dE9yKSB7CisgICAgICAgIFZhbHVlKiBuZXdDb25zdGFudCA9IHJpZ2h0LT5iaXRPckNvbnN0YW50
KG1fcHJvYywgbGVmdC0+Y2hpbGQoMSkpOworICAgICAgICBpZiAobmV3Q29uc3RhbnQpIHsKKyAg
ICAgICAgICAgIG5ld0NvbnN0YW50ID0gYXBwZW5kVG9DdXJyZW50QmxvY2sobmV3Q29uc3RhbnQp
OworICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUJpdE9yKHR5cGUsIG9yaWdpbiwgbGVmdC0+Y2hp
bGQoMCksIG5ld0NvbnN0YW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFR1cm4gdGhp
czogQml0T3IodmFsdWVYLCB2YWx1ZVgpCisgICAgLy8gSW50byB0aGlzOiB2YWx1ZVguCisgICAg
aWYgKGxlZnQgPT0gcmlnaHQpCisgICAgICAgIHJldHVybiBsZWZ0OworCisgICAgLy8gVHVybiB0
aGlzOiBCaXRPcih2YWx1ZSwgemVyby1jb25zdGFudCkKKyAgICAvLyBJbnRvIHRoaXM6IHZhbHVl
LgorICAgIGlmIChyaWdodC0+aXNJbnQoMCkpCisgICAgICAgIHJldHVybiBsZWZ0OworCisgICAg
Ly8gVHVybiB0aGlzOiBCaXRPcih2YWx1ZSwgYWxsLW9uZXMpCisgICAgLy8gSW50byB0aGlzOiBh
bGwtb25lcy4KKyAgICAvLyBGSVhNRTogb25jZSB3ZSBoYXZlIGEga25vd25CaXRzIGFuYWx5c2lz
LCB0aGlzLCB0aGUgYmFzaWMgY29uc3RhbnRzIGNhc2UsIGFuZCBtb3JlIHdpbGwgYmUgdHJpdmlh
bGx5IG1lcmdlZC4KKyAgICBpZiAoKHR5cGUgPT0gSW50NjQgJiYgcmlnaHQtPmlzSW50KHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSkpCisgICAgICAgIHx8ICh0eXBlID09IElu
dDMyICYmIHJpZ2h0LT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkp
KSkgeworICAgICAgICByZXR1cm4gcmlnaHQ7CisgICAgfQorCisgICAgLy8gVHVybiB0aGlzOiBC
aXRPcihCaXRYb3IoeDEsIGFsbE9uZXMpLCBCaXRYb3IoeDIsIGFsbE9uZXMpCisgICAgLy8gSW50
byB0aGlzOiBCaXRYb3IoQml0QW5kKHgxLCB4MiksIGFsbE9uZXMpCisgICAgLy8gQnkgYXBwbHlp
bmcgRGUgTW9yZ2FuIGxhd3MKKyAgICAvLyBGSVhNRTogbGlrZSBmb3IgdGhlIHNpbWlsYXIgcnVs
ZSBmb3IgQml0QW5kLCB3aXRoIGEga25vd25CaXRzIGFuYWx5c2lzIHdlIGNvdWxkIGRvIHNvbWV0
aGluZyBzaW1pbGFyIGZvciBjb25zdGFudHMgb3RoZXIgdGhhbiBhbGxPbmVzCisgICAgaWYgKGxl
ZnQtPm9wY29kZSgpID09IEJpdFhvcgorICAgICAgICAmJiByaWdodC0+b3Bjb2RlKCkgPT0gQml0
WG9yCisgICAgICAgICYmICgodHlwZSA9PSBJbnQ2NAorICAgICAgICAgICAgJiYgbGVmdC0+Y2hp
bGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSkKKyAgICAg
ICAgICAgICYmIHJpZ2h0LT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50
NjRfdD46Om1heCgpKSkKKyAgICAgICAgfHwgKHR5cGUgPT0gSW50MzIKKyAgICAgICAgICAgICYm
IGxlZnQtPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4
KCkpCisgICAgICAgICAgICAmJiByaWdodC0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKSkpKSkgeworICAgICAgICBWYWx1ZSogYml0QW5kID0gcmVk
dWNlQml0QW5kKHR5cGUsIG9yaWdpbiwgbGVmdC0+Y2hpbGQoMCksIHJpZ2h0LT5jaGlsZCgwKSk7
CisgICAgICAgIHJldHVybiByZWR1Y2VCaXRYb3IodHlwZSwgb3JpZ2luLCBiaXRBbmQsIHJpZ2h0
LT5jaGlsZCgxKSk7CisgICAgfQorCisgICAgLy8gVHVybiB0aGlzOiBCaXRPcihCaXRYb3IoeCwg
YWxsT25lcyksIGMpCisgICAgLy8gSW50byB0aGlzOiBCaXRYb3IoQml0QW5kKHgsIH5jKSwgYWxs
T25lcykKKyAgICAvLyBUaGlzIGlzIGEgdmFyaWF0aW9uIG9uIHRoZSBwcmV2aW91cyBvcHRpbWl6
YXRpb24sIHRyZWF0aW5nIGMgYXMgaWYgaXQgd2VyZSBCaXRYb3IofmMsIGFsbE9uZXMpCisgICAg
Ly8gSXQgZG9lcyBub3QgcmVkdWNlIHRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucywgYnV0IHByb3Zp
ZGVzIHNvbWUgbm9ybWFsaXphdGlvbiAod2UgdHJ5IHRvIGdldCBCaXRYb3IgYnkgYWxsT25lcyBh
dCB0aGUgb3V0ZXJtb3N0IHBvaW50KSwKKyAgICAvLyBhbmQgc29tZSBjaGFuY2UgdG8gZmxvYXQg
WG9ycyB0byBhIHBsYWNlIHdoZXJlIHRoZXkgbWlnaHQgZ2V0IGVsaW1pbmF0ZWQuCisgICAgaWYg
KGxlZnQtPm9wY29kZSgpID09IEJpdFhvcgorICAgICAgICAmJiByaWdodC0+aGFzSW50KCkKKyAg
ICAgICAgJiYgKCh0eXBlID09IEludDY0CisgICAgICAgICAgICAmJiBsZWZ0LT5jaGlsZCgxKS0+
aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpKSkKKyAgICAgICAgfHwg
KHR5cGUgPT0gSW50MzIKKyAgICAgICAgICAgICYmIGxlZnQtPmNoaWxkKDEpLT5pc0ludChzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpKSkpIHsKKyAgICAgICAgVmFsdWUqIGJp
dEFuZCA9IHJlZHVjZUJpdEFuZCh0eXBlLCBvcmlnaW4sIGxlZnQtPmNoaWxkKDApLCByaWdodC0+
Yml0WG9yQ29uc3RhbnQobV9wcm9jLCBsZWZ0LT5jaGlsZCgxKSkpOworICAgICAgICByZXR1cm4g
cmVkdWNlQml0WG9yKHR5cGUsIG9yaWdpbiwgYml0QW5kLCBsZWZ0LT5jaGlsZCgxKSk7CisgICAg
fQorCisgICAgaWYgKFZhbHVlKiByZXN1bHQgPSB0cnlSZWR1Y2VCaXRBbmREaXN0cmlidXRpdml0
eShCaXRPciwgdHlwZSwgb3JpZ2luLCBsZWZ0LCByaWdodCkpCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KEJpdE9y
LCBvcmlnaW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpy
ZWR1Y2VCaXRYb3IoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUq
IHJpZ2h0LCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQs
IGxlZnQpKQorICAgICAgICByZXR1cm4gcmVkdWNlQml0WG9yKHR5cGUsIG9yaWdpbiwgcmlnaHQs
IGxlZnQpOworCisgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IoY29uc3RhbnQxLCBjb25zdGFudDIp
CisgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgXiBjb25zdGFudDIKKyAgICBpZiAoVmFsdWUq
IGNvbnN0YW50ID0gbGVmdC0+Yml0WG9yQ29uc3RhbnQobV9wcm9jLCByaWdodCkpCisgICAgICAg
IHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICAvLyBUdXJuIHRo
aXM6IEJpdFhvcihCaXRYb3IodmFsdWUsIGNvbnN0YW50MSksIGNvbnN0YW50MikKKyAgICAvLyBJ
bnRvIHRoaXM6IEJpdFhvcih2YWx1ZSwgY29uc3RhbnQxIF4gY29uc3RhbnQyKS4KKyAgICBpZiAo
bGVmdC0+b3Bjb2RlKCkgPT0gQml0WG9yKSB7CisgICAgICAgIFZhbHVlKiBuZXdDb25zdGFudCA9
IHJpZ2h0LT5iaXRYb3JDb25zdGFudChtX3Byb2MsIGxlZnQtPmNoaWxkKDEpKTsKKyAgICAgICAg
aWYgKG5ld0NvbnN0YW50KSB7CisgICAgICAgICAgICBuZXdDb25zdGFudCA9IGFwcGVuZFRvQ3Vy
cmVudEJsb2NrKG5ld0NvbnN0YW50KTsKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VCaXRYb3Io
dHlwZSwgb3JpZ2luLCBsZWZ0LT5jaGlsZCgwKSwgbmV3Q29uc3RhbnQpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IoY29tcGFyZSwgMSkKKyAgICAvLyBJbnRv
IHRoaXM6IGludmVydGVkQ29tcGFyZQorICAgIGlmIChyaWdodC0+aXNJbnQzMigxKSkgeworICAg
ICAgICBpZiAoVmFsdWUqIGludmVydGVkQ29tcGFyZSA9IGxlZnQtPmludmVydGVkQ29tcGFyZSht
X3Byb2MpKQorICAgICAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKGludmVydGVk
Q29tcGFyZSk7CisgICAgfQorCisgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IodmFsdWVYLCB2YWx1
ZVgpCisgICAgLy8gSW50byB0aGlzOiB6ZXJvLWNvbnN0YW50LgorICAgIGlmIChsZWZ0ID09IHJp
Z2h0KQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2sobV9wcm9jLmFkZEludENv
bnN0YW50KG9yaWdpbiwgdHlwZSwgMCkpOworCisgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IodmFs
dWUsIHplcm8tY29uc3RhbnQpCisgICAgLy8gSW50byB0aGlzOiB2YWx1ZS4KKyAgICBpZiAocmln
aHQtPmlzSW50KDApKQorICAgICAgICByZXR1cm4gbGVmdDsKKworICAgIGlmIChWYWx1ZSogcmVz
dWx0ID0gdHJ5UmVkdWNlQml0QW5kRGlzdHJpYnV0aXZpdHkoQml0WG9yLCB0eXBlLCBvcmlnaW4s
IGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIHJldHVybiBjYW5H
aXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oQml0WG9yLCBvcmlnaW4sIGxlZnQsIHJpZ2h0
KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VTaGwoVHlwZSB0eXBlLCBP
cmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCkK
K3sKKyAgICAvLyBUdXJuIHRoaXM6IFNobChjb25zdGFudDEsIGNvbnN0YW50MikKKyAgICAvLyBJ
bnRvIHRoaXM6IGNvbnN0YW50MSA8PCBjb25zdGFudDIKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50
ID0gbGVmdC0+c2hsQ29uc3RhbnQobV9wcm9jLCByaWdodCkpCisgICAgICAgIHJldHVybiBhcHBl
bmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IFNobCg8U3xa
PlNocihAeCwgQGNvbnN0KSwgQGNvbnN0KQorICAgIC8vIEludG8gdGhpczogQml0QW5kKEB4LCAt
KDE8PEBjb25zdCkpCisgICAgaWYgKChsZWZ0LT5vcGNvZGUoKSA9PSBTU2hyIHx8IGxlZnQtPm9w
Y29kZSgpID09IFpTaHIpCisgICAgICAgICYmIGxlZnQtPmNoaWxkKDEpLT5oYXNJbnQoKQorICAg
ICAgICAmJiByaWdodC0+aGFzSW50KCkKKyAgICAgICAgJiYgbGVmdC0+Y2hpbGQoMSktPmFzSW50
KCkgPT0gcmlnaHQtPmFzSW50KCkpIHsKKyAgICAgICAgaW50IHNoaWZ0QW1vdW50ID0gcmlnaHQt
PmFzSW50KCkgJiAodHlwZSA9PSBJbnQzMiA/IDMxIDogNjMpOworICAgICAgICBWYWx1ZSogbmV3
Q29uc3QgPSBhcHBlbmRUb0N1cnJlbnRCbG9jayhtX3Byb2MuYWRkSW50Q29uc3RhbnQob3JpZ2lu
LCB0eXBlLCAtIHN0YXRpY19jYXN0PGludDY0X3Q+KDF1bGwgPDwgc2hpZnRBbW91bnQpKSk7Cisg
ICAgICAgIHJldHVybiByZWR1Y2VCaXRBbmQodHlwZSwgb3JpZ2luLCBsZWZ0LT5jaGlsZCgwKSwg
bmV3Q29uc3QpOworICAgIH0KKworICAgIGlmIChWYWx1ZSogcmVzdWx0ID0gdHJ5UmVkdWNlU2hp
ZnRPclJvdGF0ZShTaGwsIHR5cGUsIG9yaWdpbiwgbGVmdCwgcmlnaHQpKQorICAgICAgICByZXR1
cm4gcmVzdWx0OworCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVl
PihTaGwsIG9yaWdpbiwgbGVmdCwgcmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6
ZXI6OnJlZHVjZVNTaHIoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFs
dWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6IFNTaHIoY29u
c3RhbnQxLCBjb25zdGFudDIpCisgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgPj4gY29uc3Rh
bnQyCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGxlZnQtPnNTaHJDb25zdGFudChtX3Byb2Ms
IHJpZ2h0KSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50KTsK
KworICAgIGlmIChyaWdodC0+aGFzSW50MzIoKQorICAgICAgICAmJiBsZWZ0LT5vcGNvZGUoKSA9
PSBTaGwKKyAgICAgICAgJiYgbGVmdC0+Y2hpbGQoMSktPmhhc0ludDMyKCkKKyAgICAgICAgJiYg
cmlnaHQtPmFzSW50MzIoKSA9PSBsZWZ0LT5jaGlsZCgxKS0+YXNJbnQzMigpKSB7CisgICAgICAg
IGlmIChyaWdodC0+YXNJbnQzMigpID09IDE2ICYmIHR5cGUgPT0gSW50MzIpIHsKKyAgICAgICAg
ICAgIC8vIFR1cm4gdGhpczogU1NocihTaGwodmFsdWUsIDE2KSwgMTYpCisgICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IFNFeHQxNih2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VTRXh0
MTYodHlwZSwgb3JpZ2luLCBsZWZ0LT5jaGlsZCgwKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHJpZ2h0LT5hc0ludDMyKCkgPT0gMjQgJiYgdHlwZSA9PSBJbnQzMikgeworICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBTU2hyKFNobCh2YWx1ZSwgMjQpLCAyNCkKKyAgICAgICAgICAgIC8vIElu
dG8gdGhpczogU0V4dDgodmFsdWUpCisgICAgICAgICAgICByZXR1cm4gcmVkdWNlU0V4dDgodHlw
ZSwgb3JpZ2luLCBsZWZ0LT5jaGlsZCgwKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJpZ2h0
LT5hc0ludDMyKCkgPT0gMzIgJiYgdHlwZSA9PSBJbnQ2NCkgeworICAgICAgICAgICAgLy8gVHVy
biB0aGlzOiBTU2hyKFNobCh2YWx1ZSwgMzIpLCAzMikKKyAgICAgICAgICAgIC8vIEludG8gdGhp
czogU0V4dDMyKFRydW5jKHZhbHVlKSkKKyAgICAgICAgICAgIFZhbHVlKiB0cnVuYyA9IHJlZHVj
ZVRydW5jKHR5cGUsIG9yaWdpbiwgbGVmdC0+Y2hpbGQoMCkpOworICAgICAgICAgICAgcmV0dXJu
IHJlZHVjZVNFeHQzMih0eXBlLCBvcmlnaW4sIHRydW5jKTsKKyAgICAgICAgfQorICAgICAgICAv
LyBGSVhNRTogQWRkIGNhc2VzIGZvciA0OCBhbmQgNTYsIGJ1dCB0aGF0IHdvdWxkIHRyYW5zbGF0
ZSB0byBTRXh0MzIoU0V4dDgpIG9yCisgICAgICAgIC8vIFNFeHQzMihTRXh0MTYpLCB3aGljaCB3
ZSBkb24ndCBjdXJyZW50bHkgbG93ZXIgZWZmaWNpZW50bHkuCisgICAgfQorCisgICAgaWYgKFZh
bHVlKiByZXN1bHQgPSB0cnlSZWR1Y2VTaGlmdE9yUm90YXRlKFNTaHIsIHR5cGUsIG9yaWdpbiwg
bGVmdCwgcmlnaHQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgcmV0dXJuIGNhbkdp
dmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihTU2hyLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KTsK
K30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VaU2hyKFR5cGUgdHlwZSwgT3Jp
Z2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXApCit7
CisgICAgLy8gVHVybiB0aGlzOiBaU2hyKGNvbnN0YW50MSwgY29uc3RhbnQyKQorICAgIC8vIElu
dG8gdGhpczogKHVuc2lnbmVkKWNvbnN0YW50MSA+PiBjb25zdGFudDIKKyAgICBpZiAoVmFsdWUq
IGNvbnN0YW50ID0gbGVmdC0+elNockNvbnN0YW50KG1fcHJvYywgcmlnaHQpKQorICAgICAgICBy
ZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgaWYgKFZhbHVlKiBy
ZXN1bHQgPSB0cnlSZWR1Y2VTaGlmdE9yUm90YXRlKFpTaHIsIHR5cGUsIG9yaWdpbiwgbGVmdCwg
cmlnaHQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/
IG51bGxwdHIgOiBlbWl0PFZhbHVlPihaU2hyLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KTsKK30KKwor
VmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VSb3RSKFR5cGUgdHlwZSwgT3JpZ2luIG9y
aWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAg
Ly8gVHVybiB0aGlzOiBSb3RSKGNvbnN0YW50MSwgY29uc3RhbnQyKQorICAgIC8vIEludG8gdGhp
czogKGNvbnN0YW50MSA+PiBjb25zdGFudDIpIHwgKGNvbnN0YW50MSA8PCBzaXplb2YoY29uc3Rh
bnQxKSAqIDggLSBjb25zdGFudDIpCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGxlZnQtPnJv
dFJDb25zdGFudChtX3Byb2MsIHJpZ2h0KSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVu
dEJsb2NrKGNvbnN0YW50KTsKKworICAgIGlmIChWYWx1ZSogcmVzdWx0ID0gdHJ5UmVkdWNlU2hp
ZnRPclJvdGF0ZShSb3RSLCB0eXBlLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1
ZT4oUm90Uiwgb3JpZ2luLCBsZWZ0LCByaWdodCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGlt
aXplcjo6cmVkdWNlUm90TChUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBW
YWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogUm90TChj
b25zdGFudDEsIGNvbnN0YW50MikKKyAgICAvLyBJbnRvIHRoaXM6IChjb25zdGFudDEgPDwgY29u
c3RhbnQyKSB8IChjb25zdGFudDEgPj4gc2l6ZW9mKGNvbnN0YW50MSkgKiA4IC0gY29uc3RhbnQy
KQorICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBsZWZ0LT5yb3RMQ29uc3RhbnQobV9wcm9jLCBy
aWdodCkpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisK
KyAgICBpZiAoVmFsdWUqIHJlc3VsdCA9IHRyeVJlZHVjZVNoaWZ0T3JSb3RhdGUoUm90TCwgdHlw
ZSwgb3JpZ2luLCBsZWZ0LCByaWdodCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBy
ZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KFJvdEwsIG9yaWdpbiwgbGVm
dCwgcmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUFicyhUeXBl
IHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBjaGlsZCwgYm9vbCBjYW5HaXZlVXApCit7Cisg
ICAgLy8gVHVybiB0aGlzOiBBYnMoY29uc3RhbnQpCisgICAgLy8gSW50byB0aGlzOiBmYWJzPHR5
cGU+KGNvbnN0YW50KQorICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBjaGlsZC0+YWJzQ29uc3Rh
bnQobV9wcm9jKSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50
KTsKKworICAgIC8vIFR1cm4gdGhpczogQWJzKEFicyh2YWx1ZSkpCisgICAgLy8gSW50byB0aGlz
OiBBYnModmFsdWUpCisgICAgaWYgKGNoaWxkLT5vcGNvZGUoKSA9PSBBYnMpCisgICAgICAgIHJl
dHVybiBjaGlsZDsKKworICAgIC8vIFR1cm4gdGhpczogQWJzKE5lZyh2YWx1ZSkpCisgICAgLy8g
SW50byB0aGlzOiBBYnModmFsdWUpCisgICAgaWYgKGNoaWxkLT5vcGNvZGUoKSA9PSBOZWcpCisg
ICAgICAgIHJldHVybiByZWR1Y2VBYnModHlwZSwgb3JpZ2luLCBjaGlsZC0+Y2hpbGQoMCkpOwor
CisgICAgLy8gVHVybiB0aGlzOiBBYnMoQml0d2lzZUNhc3QodmFsdWUpKQorICAgIC8vIEludG8g
dGhpczogQml0d2lzZUNhc3QoQW5kKHZhbHVlLCBtYXNrLXRvcC1iaXQpKQorICAgIGlmIChjaGls
ZC0+b3Bjb2RlKCkgPT0gQml0d2lzZUNhc3QpIHsKKyAgICAgICAgVmFsdWUqIG1hc2s7CisgICAg
ICAgIGlmICh0eXBlID09IERvdWJsZSkKKyAgICAgICAgICAgIG1hc2sgPSBlbWl0PENvbnN0NjRW
YWx1ZT4ob3JpZ2luLCB+KDFsbCA8PCA2MykpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
YXNrID0gZW1pdDxDb25zdDMyVmFsdWU+KG9yaWdpbiwgfigxbGwgPDwgMzEpKTsKKworICAgICAg
ICBWYWx1ZSogYml0QW5kID0gcmVkdWNlQml0QW5kKHR5cGUgPT0gRG91YmxlID8gSW50NjQgOiBJ
bnQzMiwgb3JpZ2luLCBjaGlsZC0+Y2hpbGQoMCksIG1hc2spOworICAgICAgICByZXR1cm4gcmVk
dWNlQml0d2lzZUNhc3QodHlwZSwgb3JpZ2luLCBiaXRBbmQpOworICAgIH0KKworICAgIHJldHVy
biBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oQWJzLCBvcmlnaW4sIGNoaWxkKTsK
K30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VDZWlsKFR5cGUsIE9yaWdpbiBv
cmlnaW4sIFZhbHVlKiBjaGlsZCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgLy8gVHVybiB0aGlz
OiBDZWlsKGNvbnN0YW50KQorICAgIC8vIEludG8gdGhpczogY2VpbDx0eXBlPihjb25zdGFudCkK
KyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gY2hpbGQtPmNlaWxDb25zdGFudChtX3Byb2MpKQor
ICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgLy8g
VHVybiB0aGlzOiBDZWlsKHJvdW5kZWRWYWx1ZSkKKyAgICAvLyBJbnRvIHRoaXM6IHJvdW5kZWRW
YWx1ZQorICAgIGlmIChjaGlsZC0+aXNSb3VuZGVkKCkpCisgICAgICAgIHJldHVybiBjaGlsZDsK
KworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oQ2VpbCwgb3Jp
Z2luLCBjaGlsZCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlRmxvb3Io
VHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGNoaWxkLCBib29sIGNhbkdpdmVVcCkKK3sKKyAg
ICAvLyBUdXJuIHRoaXM6IEZsb29yKGNvbnN0YW50KQorICAgIC8vIEludG8gdGhpczogZmxvb3I8
dHlwZT4oY29uc3RhbnQpCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGNoaWxkLT5mbG9vckNv
bnN0YW50KG1fcHJvYykpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25z
dGFudCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IEZsb29yKHJvdW5kZWRWYWx1ZSkKKyAgICAvLyBJ
bnRvIHRoaXM6IHJvdW5kZWRWYWx1ZQorICAgIGlmIChjaGlsZC0+aXNSb3VuZGVkKCkpCisgICAg
ICAgIHJldHVybiBjaGlsZDsKKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1p
dDxWYWx1ZT4oRmxvb3IsIG9yaWdpbiwgY2hpbGQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRp
bWl6ZXI6OnJlZHVjZVNxcnQoVHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGNoaWxkLCBib29s
IGNhbkdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6IFNxcnQoY29uc3RhbnQpCisgICAgLy8g
SW50byB0aGlzOiBzcXJ0PHR5cGU+KGNvbnN0YW50KQorICAgIGlmIChWYWx1ZSogY29uc3RhbnQg
PSBjaGlsZC0+c3FydENvbnN0YW50KG1fcHJvYykpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1
cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0ciA6
IGVtaXQ8VmFsdWU+KFNxcnQsIG9yaWdpbiwgY2hpbGQpOworfQorCitWYWx1ZSogUGVlcGhvbGVP
cHRpbWl6ZXI6OnJlZHVjZUJpdHdpc2VDYXN0KFR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBj
aGlsZCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgLy8gVHVybiB0aGlzOiBCaXR3aXNlQ2FzdChj
b25zdGFudCkKKyAgICAvLyBJbnRvIHRoaXM6IGJpdHdpc2VDYXN0PHR5cGU+KGNvbnN0YW50KQor
ICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBjaGlsZC0+Yml0d2lzZUNhc3RDb25zdGFudChtX3By
b2MpKQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisg
ICAgLy8gVHVybiB0aGlzOiBCaXR3aXNlQ2FzdChCaXR3aXNlQ2FzdCh2YWx1ZSkpCisgICAgLy8g
SW50byB0aGlzOiB2YWx1ZQorICAgIGlmIChjaGlsZC0+b3Bjb2RlKCkgPT0gQml0d2lzZUNhc3Qp
CisgICAgICAgIHJldHVybiBjaGlsZC0+Y2hpbGQoMCk7CisKKyAgICByZXR1cm4gY2FuR2l2ZVVw
ID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KEJpdHdpc2VDYXN0LCBvcmlnaW4sIGNoaWxkKTsKK30K
KworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VTRXh0OChUeXBlIHR5cGUsIE9yaWdp
biBvcmlnaW4sIFZhbHVlKiBjaGlsZCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgLy8gVHVybiB0
aGlzOiBTRXh0OChjb25zdGFudCkKKyAgICAvLyBJbnRvIHRoaXM6IHN0YXRpY19jYXN0PGludDhf
dD4oY29uc3RhbnQpCisgICAgaWYgKGNoaWxkLT5oYXNJbnQzMigpKSB7CisgICAgICAgIGludDMy
X3QgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8aW50OF90PihjaGlsZC0+YXNJbnQzMigpKTsKKyAgICAg
ICAgcmV0dXJuIGVtaXQ8Q29uc3QzMlZhbHVlPihvcmlnaW4sIHJlc3VsdCk7CisgICAgfQorCisg
ICAgLy8gVHVybiB0aGlzOiBTRXh0OChTRXh0OCh2YWx1ZSkpCisgICAgLy8gICBvciB0aGlzOiBT
RXh0OChTRXh0MTYodmFsdWUpKQorICAgIC8vIEludG8gdGhpczogU0V4dDgodmFsdWUpCisgICAg
aWYgKGNoaWxkLT5vcGNvZGUoKSA9PSBTRXh0OCB8fCBjaGlsZC0+b3Bjb2RlKCkgPT0gU0V4dDE2
KQorICAgICAgICByZXR1cm4gcmVkdWNlU0V4dDgodHlwZSwgb3JpZ2luLCBjaGlsZC0+Y2hpbGQo
MCkpOworCisgICAgaWYgKGNoaWxkLT5vcGNvZGUoKSA9PSBCaXRBbmQgJiYgY2hpbGQtPmNoaWxk
KDEpLT5oYXNJbnQzMigpKSB7CisgICAgICAgIFZhbHVlKiBpbnB1dCA9IGNoaWxkLT5jaGlsZCgw
KTsKKyAgICAgICAgaW50MzJfdCBtYXNrID0gY2hpbGQtPmNoaWxkKDEpLT5hc0ludDMyKCk7CisK
KyAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0OChCaXRBbmQoaW5wdXQsIG1hc2spKSB3aGVyZSAo
bWFzayAmIDB4ZmYpID09IDB4ZmYKKyAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0OChpbnB1dCkK
KyAgICAgICAgaWYgKChtYXNrICYgMHhmZikgPT0gMHhmZikKKyAgICAgICAgICAgIHJldHVybiBy
ZWR1Y2VTRXh0OCh0eXBlLCBvcmlnaW4sIGlucHV0KTsKKworICAgICAgICAvLyBUdXJuIHRoaXM6
IFNFeHQ4KEJpdEFuZChpbnB1dCwgbWFzaykpIHdoZXJlIChtYXNrICYgMHg4MCkgPT0gMAorICAg
ICAgICAvLyBJbnRvIHRoaXM6IEJpdEFuZChpbnB1dCwgY29uc3QgJiAweDdmKQorICAgICAgICBp
ZiAoIShtYXNrICYgMHg4MCkpIHsKKyAgICAgICAgICAgIFZhbHVlKiBuZXdDb25zdCA9IGVtaXQ8
Q29uc3QzMlZhbHVlPihvcmlnaW4sIG1hc2sgJiAweDdmKTsKKyAgICAgICAgICAgIHJldHVybiBy
ZWR1Y2VCaXRBbmQodHlwZSwgb3JpZ2luLCBpbnB1dCwgbmV3Q29uc3QpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKCFtX3Byb2MuaGFzUXVpcmtzKCkpIHsKKyAgICAgICAgLy8gVHVybiB0
aGlzOiBTRXh0OChBdG9taWNYY2hnX19fKQorICAgICAgICAvLyBJbnRvIHRoaXM6IEF0b21pY1hj
aGdfX18KKyAgICAgICAgaWYgKGlzQXRvbWljWGNoZyhjaGlsZC0+b3Bjb2RlKCkpICYmIGNoaWxk
LT5hczxBdG9taWNWYWx1ZT4oKS0+YWNjZXNzV2lkdGgoKSA9PSBXaWR0aDgpCisgICAgICAgICAg
ICByZXR1cm4gY2hpbGQ7CisgICAgfQorCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIg
OiBlbWl0PFZhbHVlPihTRXh0OCwgb3JpZ2luLCBjaGlsZCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9s
ZU9wdGltaXplcjo6cmVkdWNlU0V4dDE2KFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUq
IGNoaWxkLCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6IFNFeHQxNihjb25z
dGFudCkKKyAgICAvLyBJbnRvIHRoaXM6IHN0YXRpY19jYXN0PGludDE2X3Q+KGNvbnN0YW50KQor
ICAgIGlmIChjaGlsZC0+aGFzSW50MzIoKSkgeworICAgICAgICBpbnQzMl90IHJlc3VsdCA9IHN0
YXRpY19jYXN0PGludDE2X3Q+KGNoaWxkLT5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gZW1p
dDxDb25zdDMyVmFsdWU+KG9yaWdpbiwgcmVzdWx0KTsKKyAgICB9CisKKyAgICAvLyBUdXJuIHRo
aXM6IFNFeHQxNihTRXh0MTYodmFsdWUpKQorICAgIC8vIEludG8gdGhpczogU0V4dDE2KHZhbHVl
KQorICAgIC8vIGFuZCB0dXJuIHRoaXM6IFNFeHQxNihTRXh0OCh2YWx1ZSkpCisgICAgLy8gSW50
byB0aGlzOiBTRXh0OCh2YWx1ZSkKKyAgICBpZiAoY2hpbGQtPm9wY29kZSgpID09IFNFeHQxNiB8
fCBjaGlsZC0+b3Bjb2RlKCkgPT0gU0V4dDgpCisgICAgICAgIHJldHVybiBjaGlsZDsKKworICAg
IGlmIChjaGlsZC0+b3Bjb2RlKCkgPT0gQml0QW5kICYmIGNoaWxkLT5jaGlsZCgxKS0+aGFzSW50
MzIoKSkgeworICAgICAgICBWYWx1ZSogaW5wdXQgPSBjaGlsZC0+Y2hpbGQoMCk7CisgICAgICAg
IGludDMyX3QgbWFzayA9IGNoaWxkLT5jaGlsZCgxKS0+YXNJbnQzMigpOworCisgICAgICAgIC8v
IFR1cm4gdGhpczogU0V4dDE2KEJpdEFuZChpbnB1dCwgbWFzaykpIHdoZXJlIChtYXNrICYgMHhm
ZmZmKSA9PSAweGZmZmYKKyAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0MTYoaW5wdXQpCisgICAg
ICAgIGlmICgobWFzayAmIDB4ZmZmZikgPT0gMHhmZmZmKQorICAgICAgICAgICAgcmV0dXJuIHJl
ZHVjZVNFeHQxNih0eXBlLCBvcmlnaW4sIGlucHV0KTsKKworICAgICAgICAvLyBUdXJuIHRoaXM6
IFNFeHQxNihCaXRBbmQoaW5wdXQsIG1hc2spKSB3aGVyZSAobWFzayAmIDB4ODAwMCkgPT0gMAor
ICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdEFuZChpbnB1dCwgY29uc3QgJiAweDdmZmYpCisgICAg
ICAgIGlmICghKG1hc2sgJiAweDgwMDApKSB7CisgICAgICAgICAgICBWYWx1ZSogbmV3Q29uc3Qg
PSBlbWl0PENvbnN0MzJWYWx1ZT4ob3JpZ2luLCBtYXNrICYgMHg3ZmZmKTsKKyAgICAgICAgICAg
IHJldHVybiByZWR1Y2VCaXRBbmQodHlwZSwgb3JpZ2luLCBpbnB1dCwgbmV3Q29uc3QpOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCFtX3Byb2MuaGFzUXVpcmtzKCkpIHsKKyAgICAgICAg
Ly8gVHVybiB0aGlzOiBTRXh0MTYoQXRvbWljWGNoZ19fXykKKyAgICAgICAgLy8gSW50byB0aGlz
OiBBdG9taWNYY2hnX19fCisgICAgICAgIGlmIChpc0F0b21pY1hjaGcoY2hpbGQtPm9wY29kZSgp
KSAmJiBjaGlsZC0+YXM8QXRvbWljVmFsdWU+KCktPmFjY2Vzc1dpZHRoKCkgPT0gV2lkdGgxNikK
KyAgICAgICAgICAgIHJldHVybiBjaGlsZDsKKyAgICB9CisKKyAgICByZXR1cm4gY2FuR2l2ZVVw
ID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KFNFeHQxNiwgb3JpZ2luLCBjaGlsZCk7Cit9CisKK1Zh
bHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlU0V4dDMyKFR5cGUgdHlwZSwgT3JpZ2luIG9y
aWdpbiwgVmFsdWUqIGNoaWxkLCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6
IFNFeHQzMihjb25zdGFudCkKKyAgICAvLyBJbnRvIHRoaXM6IHN0YXRpY19jYXN0PGludDY0X3Q+
KGNvbnN0YW50KQorICAgIGlmIChjaGlsZC0+aGFzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIGVt
aXQ8Q29uc3Q2NFZhbHVlPihvcmlnaW4sIGNoaWxkLT5hc0ludDMyKCkpOworCisgICAgLy8gVHVy
biB0aGlzOiBTRXh0MzIoQml0QW5kKGlucHV0LCBtYXNrKSkgd2hlcmUgKG1hc2sgJiAweDgwMDAw
MDAwKSA9PSAwCisgICAgLy8gSW50byB0aGlzOiBaRXh0MzIoQml0QW5kKGlucHV0LCBtYXNrKSkK
KyAgICBpZiAoY2hpbGQtPm9wY29kZSgpID09IEJpdEFuZCAmJiBjaGlsZC0+Y2hpbGQoMSktPmhh
c0ludDMyKCkKKyAgICAgICAgJiYgIShjaGlsZC0+Y2hpbGQoMSktPmFzSW50MzIoKSAmIDB4ODAw
MDAwMDApKSB7CisgICAgICAgIHJldHVybiByZWR1Y2VaRXh0MzIodHlwZSwgb3JpZ2luLCBjaGls
ZCk7CisgICAgfQorCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVl
PihTRXh0MzIsIG9yaWdpbiwgY2hpbGQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6
OnJlZHVjZVpFeHQzMihUeXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogY2hpbGQsIGJvb2wgY2Fu
R2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogWkV4dDMyKGNvbnN0YW50KQorICAgIC8vIElu
dG8gdGhpczogc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb25z
dGFudCkpCisgICAgaWYgKGNoaWxkLT5oYXNJbnQzMigpKSB7CisgICAgICAgIHVpbnQ2NF90IHJl
c3VsdCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDx1aW50MzJfdD4oY2hpbGQt
PmFzSW50MzIoKSkpOworICAgICAgICByZXR1cm4gZW1pdDxDb25zdDY0VmFsdWU+KG9yaWdpbiwg
cmVzdWx0KTsKKyAgICB9CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8
VmFsdWU+KFpFeHQzMiwgb3JpZ2luLCBjaGlsZCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGlt
aXplcjo6cmVkdWNlVHJ1bmMoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogY2hpbGQs
IGJvb2wgY2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogVHJ1bmMoY29uc3RhbnQpCisg
ICAgLy8gSW50byB0aGlzOiBzdGF0aWNfY2FzdDxpbnQzMl90Pihjb25zdGFudCkKKyAgICBpZiAo
Y2hpbGQtPmhhc0ludDY0KCkgfHwgY2hpbGQtPmhhc0RvdWJsZSgpKQorICAgICAgICByZXR1cm4g
ZW1pdDxDb25zdDMyVmFsdWU+KG9yaWdpbiwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oY2hpbGQtPmFz
SW50NjQoKSkpOworCisgICAgLy8gVHVybiB0aGlzOiBUcnVuYyhTRXh0MzIodmFsdWUpKSBvciBU
cnVuYyhaRXh0MzIodmFsdWUpKQorICAgIC8vIEludG8gdGhpczogdmFsdWUKKyAgICBpZiAoY2hp
bGQtPm9wY29kZSgpID09IFNFeHQzMiB8fCBjaGlsZC0+b3Bjb2RlKCkgPT0gWkV4dDMyKQorICAg
ICAgICByZXR1cm4gY2hpbGQtPmNoaWxkKDApOworCisgICAgLy8gVHVybiB0aGlzOiBUcnVuYyhP
cCh2YWx1ZSwgY29uc3RhbnQpKQorICAgIC8vICAgICB3aGVyZSAhKGNvbnN0YW50ICYgMHhmZmZm
ZmZmZikKKyAgICAvLyAgICAgICBhbmQgT3AgaXMgQWRkLCBTdWIsIEJpdE9yLCBvciBCaXRYb3IK
KyAgICAvLyBpbnRvIHRoaXM6IFRydW5jKHZhbHVlKQorICAgIC8vIEZJWE1FOiB0aGlzIGlzIGp1
c3QgYSBzcGVjaWFsIGNhc2Ugb2YgYSBtb3JlIGdlbmVyYWwgdXNlZEJpdHMgYW5hbHlzaXMuCisg
ICAgc3dpdGNoIChjaGlsZC0+b3Bjb2RlKCkpIHsKKyAgICBjYXNlIEFkZDoKKyAgICBjYXNlIFN1
YjoKKyAgICBjYXNlIEJpdE9yOgorICAgIGNhc2UgQml0WG9yOgorICAgICAgICBpZiAoY2hpbGQt
PmNoaWxkKDEpLT5oYXNJbnQ2NCgpICYmICEoY2hpbGQtPmNoaWxkKDEpLT5hc0ludDY0KCkgJiAw
eGZmZmZmZmZmbGwpKQorICAgICAgICAgICAgcmV0dXJuIHJlZHVjZVRydW5jKHR5cGUsIG9yaWdp
biwgY2hpbGQtPmNoaWxkKDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0
PFZhbHVlPihUcnVuYywgb3JpZ2luLCBjaGlsZCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGlt
aXplcjo6cmVkdWNlSVRvRChUeXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogY2hpbGQsIGJvb2wg
Y2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogSVRvRChjb25zdGFudCkKKyAgICAvLyBJ
bnRvIHRoaXM6IENvbnN0RG91YmxlKGNvbnN0YW50KQorICAgIGlmIChWYWx1ZSogY29uc3RhbnQg
PSBjaGlsZC0+aVRvRENvbnN0YW50KG1fcHJvYykpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1
cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0ciA6
IGVtaXQ8VmFsdWU+KElUb0QsIG9yaWdpbiwgY2hpbGQpOworfQorCitWYWx1ZSogUGVlcGhvbGVP
cHRpbWl6ZXI6OnJlZHVjZUlUb0YoVHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGNoaWxkLCBi
b29sIGNhbkdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6IElUb0YoY29uc3RhbnQpCisgICAg
Ly8gSW50byB0aGlzOiBDb25zdEZsb2F0KGNvbnN0YW50KQorICAgIGlmIChWYWx1ZSogY29uc3Rh
bnQgPSBjaGlsZC0+aVRvRkNvbnN0YW50KG1fcHJvYykpCisgICAgICAgIHJldHVybiBhcHBlbmRU
b0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0
ciA6IGVtaXQ8VmFsdWU+KElUb0YsIG9yaWdpbiwgY2hpbGQpOworfQorCitWYWx1ZSogUGVlcGhv
bGVPcHRpbWl6ZXI6OnJlZHVjZUZsb2F0VG9Eb3VibGUoVHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFs
dWUqIGNoaWxkLCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6IEZsb2F0VG9E
b3VibGUoY29uc3RhbnQpCisgICAgLy8gSW50byB0aGlzOiBDb25zdERvdWJsZShjb25zdGFudCkK
KyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gY2hpbGQtPmZsb2F0VG9Eb3VibGVDb25zdGFudCht
X3Byb2MpKQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOwor
CisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihGbG9hdFRvRG91
YmxlLCBvcmlnaW4sIGNoaWxkKTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1
Y2VEb3VibGVUb0Zsb2F0KFR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBjaGlsZCwgYm9vbCBj
YW5HaXZlVXApCit7CisgICAgLy8gVHVybiB0aGlzOiBEb3VibGVUb0Zsb2F0KGNvbnN0YW50KQor
ICAgIC8vIEludG8gdGhpczogQ29uc3RGbG9hdChjb25zdGFudCkKKyAgICBpZiAoVmFsdWUqIGNv
bnN0YW50ID0gY2hpbGQtPmRvdWJsZVRvRmxvYXRDb25zdGFudChtX3Byb2MpKQorICAgICAgICBy
ZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgLy8gVHVybiB0aGlz
OiBEb3VibGVUb0Zsb2F0KEZsb2F0VG9Eb3VibGUodmFsdWUpKQorICAgIC8vIEludG8gdGhpczog
dmFsdWUKKyAgICBpZiAoY2hpbGQtPm9wY29kZSgpID09IEZsb2F0VG9Eb3VibGUpCisgICAgICAg
IHJldHVybiBjaGlsZC0+Y2hpbGQoMCk7CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0
ciA6IGVtaXQ8VmFsdWU+KERvdWJsZVRvRmxvYXQsIG9yaWdpbiwgY2hpbGQpOworfQorCitWYWx1
ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVNlbGVjdChUeXBlIHR5cGUsIE9yaWdpbiBvcmln
aW4sIFZhbHVlKiBjb25kLCBWYWx1ZSogaWZUcnVlLCBWYWx1ZSogaWZGYWxzZSwgYm9vbCBjYW5H
aXZlVXApCit7CisgICAgLy8gVHVybiB0aGlzOiBTZWxlY3QoY29uc3RhbnQsIGEsIGIpCisgICAg
Ly8gSW50byB0aGlzOiBjb25zdGFudCA/IGEgOiBiCisgICAgaWYgKGNvbmQtPmhhc0ludDMyKCkp
CisgICAgICAgIHJldHVybiBjb25kLT5hc0ludDMyKCkgPyBpZlRydWUgOiBpZkZhbHNlOworCisg
ICAgLy8gVHVybiB0aGlzOiBTZWxlY3QoRXF1YWwoeCwgMCksIGEsIGIpCisgICAgLy8gSW50byB0
aGlzOiBTZWxlY3QoeCwgYiwgYSkKKyAgICBpZiAoY29uZC0+b3Bjb2RlKCkgPT0gRXF1YWwgJiYg
Y29uZC0+Y2hpbGQoMSktPmlzSW50KDApKQorICAgICAgICByZXR1cm4gcmVkdWNlU2VsZWN0KHR5
cGUsIG9yaWdpbiwgY29uZC0+Y2hpbGQoMCksIGlmRmFsc2UsIGlmVHJ1ZSk7CisKKyAgICAvLyBU
dXJuIHRoaXM6IFNlbGVjdChCaXRYb3IoYm9vbCwgMSksIGEsIGIpCisgICAgLy8gSW50byB0aGlz
OiBTZWxlY3QoYm9vbCwgYiwgYSkKKyAgICBpZiAoY29uZC0+b3Bjb2RlKCkgPT0gQml0WG9yICYm
IGNvbmQtPmNoaWxkKDEpLT5pc0ludDMyKDEpICYmIGNvbmQtPmNoaWxkKDApLT5yZXR1cm5zQm9v
bCgpKQorICAgICAgICByZXR1cm4gcmVkdWNlU2VsZWN0KHR5cGUsIG9yaWdpbiwgY29uZC0+Y2hp
bGQoMCksIGlmRmFsc2UsIGlmVHJ1ZSk7CisKKyAgICAvLyBUdXJuIHRoaXM6IFNlbGVjdChCaXRB
bmQoYm9vbCwgeHl6MSksIGEsIGIpCisgICAgLy8gSW50byB0aGlzOiBTZWxlY3QoYm9vbCwgYSwg
YikKKyAgICBpZiAoY29uZC0+b3Bjb2RlKCkgPT0gQml0QW5kCisgICAgICAgICYmIGNvbmQtPmNo
aWxkKDEpLT5oYXNJbnQoKQorICAgICAgICAmJiBjb25kLT5jaGlsZCgxKS0+YXNJbnQoKSAmIDEK
KyAgICAgICAgJiYgY29uZC0+Y2hpbGQoMCktPnJldHVybnNCb29sKCkpIHsKKyAgICAgICAgcmV0
dXJuIHJlZHVjZVNlbGVjdCh0eXBlLCBvcmlnaW4sIGNvbmQtPmNoaWxkKDApLCBpZlRydWUsIGlm
RmFsc2UpOworICAgIH0KKworICAgIC8vIFR1cm4gdGhpczogU2VsZWN0KHN0dWZmLCB4LCB4KQor
ICAgIC8vIEludG8gdGhpczogeAorICAgIGlmIChpZlRydWUgPT0gaWZGYWxzZSkKKyAgICAgICAg
cmV0dXJuIGlmVHJ1ZTsKKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxW
YWx1ZT4oU2VsZWN0LCBvcmlnaW4sIGNvbmQsIGlmVHJ1ZSwgaWZGYWxzZSk7Cit9CisKK1ZhbHVl
KiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlTG9hZFN0b3JlKE9wY29kZSBvcCwgVHlwZSB0eXBl
LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogYWRkcmVzcywgVmFsdWU6Ok9mZnNldFR5cGUgb2Zmc2V0
LCBWYWx1ZSogdmFsdWVTdG9yZWQsIEhlYXBSYW5nZSByYW5nZSwgSGVhcFJhbmdlIGZlbmNlUmFu
Z2UsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogTG9hZChBZGQoYWRkcmVz
cywgb2Zmc2V0MSksIG9mZnNldCA9IG9mZnNldDIpCisgICAgLy8gSW50byB0aGlzOiBMb2FkKGFk
ZHJlc3MsIG9mZnNldCA9IG9mZnNldDEgKyBvZmZzZXQyKQorICAgIC8vCisgICAgLy8gQWxzbyB0
dXJucyB0aGlzOiBTdG9yZSh2YWx1ZSwgQWRkKGFkZHJlc3MsIG9mZnNldDEpLCBvZmZzZXQgPSBv
ZmZzZXQyKQorICAgIC8vIEludG8gdGhpczogU3RvcmUodmFsdWUsIGFkZHJlc3MsIG9mZnNldCA9
IG9mZnNldDEgKyBvZmZzZXQyKQorICAgIGlmIChhZGRyZXNzLT5vcGNvZGUoKSA9PSBBZGQgJiYg
YWRkcmVzcy0+Y2hpbGQoMSktPmhhc0ludFB0cigpKSB7CisgICAgICAgIGludHB0cl90IG9mZnNl
dDEgPSBhZGRyZXNzLT5jaGlsZCgxKS0+YXNJbnRQdHIoKTsKKyAgICAgICAgaWYgKCFzdW1PdmVy
Zmxvd3M8aW50cHRyX3Q+KG9mZnNldCwgb2Zmc2V0MSkpIHsKKyAgICAgICAgICAgIG9mZnNldDEg
Kz0gb2Zmc2V0OworICAgICAgICAgICAgVmFsdWU6Ok9mZnNldFR5cGUgc21hbGxPZmZzZXQgPSBz
dGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4ob2Zmc2V0MSk7CisgICAgICAgICAgICBpZiAo
c21hbGxPZmZzZXQgPT0gb2Zmc2V0MSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVkdWNlTG9h
ZFN0b3JlKG9wLCB0eXBlLCBvcmlnaW4sIGFkZHJlc3MtPmNoaWxkKDApLCBzbWFsbE9mZnNldCwg
dmFsdWVTdG9yZWQsIHJhbmdlLCBmZW5jZVJhbmdlKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIFR1cm4gdGhpczogTG9hZChjb25zdGFudDEsIG9mZnNldCA9IGNvbnN0YW50MikKKyAgICAv
LyBJbnRvIHRoaXM6IExvYWQoY29uc3RhbnQxICsgY29uc3RhbnQyKQorICAgIC8vCisgICAgLy8g
VGhpcyBpcyBhIGZ1biBjYW5vbmljYWxpemF0aW9uLiBJdCBwdXJlbHkgcmVncmVzc2VzIG5haXZl
bHkgZ2VuZXJhdGVkIGNvZGUuIFdlIHJlbHkKKyAgICAvLyBvbiBjb25zdGFudCBtYXRlcmlhbGl6
YXRpb24gdG8gYmUgc21hcnQgZW5vdWdoIHRvIG1hdGVyaWFsaXplIHRoaXMgY29uc3RhbnQgdGhl
IHNtYXJ0CisgICAgLy8gd2F5LiBXZSB3YW50IHRoaXMgY2Fub25pY2FsaXphdGlvbiBiZWNhdXNl
IHdlIHdhbnQgdG8ga25vdyBpZiB0d28gbWVtb3J5IGFjY2Vzc2VzIHNlZQorICAgIC8vIHRoZSBz
YW1lIGFkZHJlc3MuCisgICAgaWYgKG9mZnNldCkgeworICAgICAgICBpZiAoVmFsdWUqIG5ld0Fk
ZHJlc3MgPSBhZGRyZXNzLT5hZGRDb25zdGFudChtX3Byb2MsIG9mZnNldCkpCisgICAgICAgICAg
ICByZXR1cm4gcmVkdWNlTG9hZFN0b3JlKG9wLCB0eXBlLCBvcmlnaW4sIG5ld0FkZHJlc3MsIDAs
IHZhbHVlU3RvcmVkLCByYW5nZSwgZmVuY2VSYW5nZSk7CisgICAgfQorCisgICAgaWYgKGNhbkdp
dmVVcCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNh
c2UgTG9hZDhaOgorICAgIGNhc2UgTG9hZDhTOgorICAgIGNhc2UgTG9hZDE2WjoKKyAgICBjYXNl
IExvYWQxNlM6CisgICAgICAgIEFTU0VSVCghdmFsdWVTdG9yZWQpOworICAgICAgICByZXR1cm4g
ZW1pdDxNZW1vcnlWYWx1ZT4ob3AsIG9yaWdpbiwgYWRkcmVzcywgb2Zmc2V0LCByYW5nZSwgZmVu
Y2VSYW5nZSk7CisgICAgY2FzZSBMb2FkOgorICAgICAgICBBU1NFUlQoIXZhbHVlU3RvcmVkKTsK
KyAgICAgICAgcmV0dXJuIGVtaXQ8TWVtb3J5VmFsdWU+KG9wLCB0eXBlLCBvcmlnaW4sIGFkZHJl
c3MsIG9mZnNldCwgcmFuZ2UsIGZlbmNlUmFuZ2UpOworICAgIGNhc2UgU3RvcmU4OgorICAgIGNh
c2UgU3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlOgorICAgICAgICBBU1NFUlQoISF2YWx1ZVN0b3Jl
ZCk7CisgICAgICAgIHJldHVybiBlbWl0PE1lbW9yeVZhbHVlPihvcCwgb3JpZ2luLCB2YWx1ZVN0
b3JlZCwgYWRkcmVzcywgb2Zmc2V0LCByYW5nZSwgZmVuY2VSYW5nZSk7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUVxdWFs
KFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9v
bCBjYW5HaXZlVXApCit7CisgICAgaWYgKHNob3VsZEdvQmVmb3JlKHJpZ2h0LCBsZWZ0KSkKKyAg
ICAgICAgcmV0dXJuIHJlZHVjZUVxdWFsKHR5cGUsIG9yaWdpbiwgcmlnaHQsIGxlZnQpOworCisg
ICAgLy8gVHVybiB0aGlzOiBFcXVhbChib29sLCAwKQorICAgIC8vIEludG8gdGhpczogQml0WG9y
KGJvb2wsIDEpCisgICAgaWYgKGxlZnQtPnJldHVybnNCb29sKCkgJiYgcmlnaHQtPmlzSW50MzIo
MCkpIHsKKyAgICAgICAgVmFsdWUqIGNvbnN0MSA9IGVtaXQ8Q29uc3QzMlZhbHVlPihvcmlnaW4s
IDEpOworICAgICAgICByZXR1cm4gcmVkdWNlQml0WG9yKHR5cGUsIG9yaWdpbiwgbGVmdCwgY29u
c3QxKTsKKyAgICB9CisKKyAgICAvLyBUdXJuIHRoaXMgRXF1YWwoYm9vbCwgMSkKKyAgICAvLyBJ
bnRvIHRoaXM6IGJvb2wKKyAgICBpZiAobGVmdC0+cmV0dXJuc0Jvb2woKSAmJiByaWdodC0+aXNJ
bnQzMigxKSkKKyAgICAgICAgcmV0dXJuIGxlZnQ7CisKKyAgICAvLyBUdXJuIHRoaXM6IEVxdWFs
KGNvbnN0MSwgY29uc3QyKQorICAgIC8vIEludG8gdGhpczogY29uc3QxID09IGNvbnN0MgorICAg
IGlmIChWYWx1ZSogcmVzdWx0ID0gbV9wcm9jLmFkZEJvb2xDb25zdGFudChvcmlnaW4sIGxlZnQt
PmVxdWFsQ29uc3RhbnQocmlnaHQpKSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJs
b2NrKHJlc3VsdCk7CisKKyAgICAvLyBGSVhNRTogYXQgbGVhc3QgZm9yIGludGVnZXJzIHdlIHJl
YWxseSBzaG91bGQgaGF2ZSBFcXVhbCh4LCB4KSA9PiB0cnVlLCBldmVuIGZvciBub24tY29uc3Rh
bnRzLgorCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihFcXVh
bCwgb3JpZ2luLCBsZWZ0LCByaWdodCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6
cmVkdWNlTm90RXF1YWwoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFs
dWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmln
aHQsIGxlZnQpKQorICAgICAgICByZXR1cm4gcmVkdWNlTm90RXF1YWwodHlwZSwgb3JpZ2luLCBy
aWdodCwgbGVmdCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IE5vdEVxdWFsKGJvb2wsIDApCisgICAg
Ly8gSW50byB0aGlzOiBib29sCisgICAgaWYgKGxlZnQtPnJldHVybnNCb29sKCkgJiYgcmlnaHQt
PmlzSW50MzIoMCkpCisgICAgICAgIHJldHVybiBsZWZ0OworCisgICAgLy8gVHVybiB0aGlzOiBO
b3RFcXVhbChib29sLCAxKQorICAgIC8vIEludG8gdGhpczogQml0WG9yKGJvb2wsIDEpCisgICAg
aWYgKGxlZnQtPnJldHVybnNCb29sKCkgJiYgcmlnaHQtPmlzSW50MzIoMSkpCisgICAgICAgIHJl
dHVybiByZWR1Y2VCaXRYb3IodHlwZSwgb3JpZ2luLCBsZWZ0LCByaWdodCk7CisKKyAgICAvLyBU
dXJuIHRoaXM6IE5vdEVxdWFsKGNvbnN0MSwgY29uc3QyKQorICAgIC8vIEludG8gdGhpczogY29u
c3QxICE9IGNvbnN0MgorICAgIGlmIChWYWx1ZSogcmVzdWx0ID0gbV9wcm9jLmFkZEJvb2xDb25z
dGFudChvcmlnaW4sIGxlZnQtPm5vdEVxdWFsQ29uc3RhbnQocmlnaHQpKSkKKyAgICAgICAgcmV0
dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKHJlc3VsdCk7CisKKyAgICAvLyBGSVhNRTogYXQgbGVh
c3QgZm9yIGludGVnZXJzIHdlIHJlYWxseSBzaG91bGQgaGF2ZSBOb3RFcXVhbCh4LCB4KSA9PiBm
YWxzZSwgZXZlbiBmb3Igbm9uLWNvbnN0YW50cy4KKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBu
dWxscHRyIDogZW1pdDxWYWx1ZT4oTm90RXF1YWwsIG9yaWdpbiwgbGVmdCwgcmlnaHQpOworfQor
CitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUVxdWFsT3JVbm9yZGVyZWQoVHlwZSB0
eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdp
dmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxlZnQpKQorICAgICAgICBy
ZXR1cm4gcmVkdWNlRXF1YWxPclVub3JkZXJlZCh0eXBlLCBvcmlnaW4sIHJpZ2h0LCBsZWZ0KTsK
KworICAgIC8vIFR1cm4gdGhpczogRXF1YWxPclVub3JkZXJlZChjb25zdDEsIGNvbnN0MikKKyAg
ICAvLyBJbnRvIHRoaXM6IGlzTmFuKGNvbnN0MSkgfHwgaXNOYW4oY29uc3QyKSB8fCBjb25zdDEg
PT0gY29uc3QyCisgICAgaWYgKFZhbHVlKiByZXN1bHQgPSBtX3Byb2MuYWRkQm9vbENvbnN0YW50
KG9yaWdpbiwgbGVmdC0+ZXF1YWxPclVub3JkZXJlZENvbnN0YW50KHJpZ2h0KSkpCisgICAgICAg
IHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhyZXN1bHQpOworCisgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBhbHNvIGhhdmUgRXF1YWxPclVub3JkZXJlZCh4LCB4KSA9PiB0cnVlLgorICAgIC8v
IEFsc28gd2Ugc2hvdWxkIGhhdmUgRXF1YWxPclVub3JkZXJlZChjb25zdE5hbiwgeCkgPT4gdHJ1
ZSBhbmQgRXF1YWxPclVub3JkZXJlZCh4LCBjb25zdE5hbikgPT4gdHJ1ZQorCisgICAgcmV0dXJu
IGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihFcXVhbE9yVW5vcmRlcmVkLCBvcmln
aW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VM
ZXNzVGhhbihUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmln
aHQsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIGlmIChzaG91bGRHb0JlZm9yZShyaWdodCwgbGVm
dCkpCisgICAgICAgIHJldHVybiByZWR1Y2VHcmVhdGVyVGhhbih0eXBlLCBvcmlnaW4sIHJpZ2h0
LCBsZWZ0KTsKKworICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3Byb2MuYWRkQm9vbENvbnN0
YW50KG9yaWdpbiwgcmlnaHQtPmdyZWF0ZXJUaGFuQ29uc3RhbnQobGVmdCkpKQorICAgICAgICBy
ZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgcmV0dXJuIGNhbkdp
dmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihMZXNzVGhhbiwgb3JpZ2luLCBsZWZ0LCByaWdo
dCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlR3JlYXRlclRoYW4oVHlw
ZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNh
bkdpdmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxlZnQpKQorICAgICAg
ICByZXR1cm4gcmVkdWNlTGVzc1RoYW4odHlwZSwgb3JpZ2luLCByaWdodCwgbGVmdCk7CisKKyAg
ICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbV9wcm9jLmFkZEJvb2xDb25zdGFudChvcmlnaW4sIHJp
Z2h0LT5sZXNzVGhhbkNvbnN0YW50KGxlZnQpKSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3Vy
cmVudEJsb2NrKGNvbnN0YW50KTsKKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDog
ZW1pdDxWYWx1ZT4oR3JlYXRlclRoYW4sIG9yaWdpbiwgbGVmdCwgcmlnaHQpOworfQorCitWYWx1
ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUxlc3NFcXVhbChUeXBlIHR5cGUsIE9yaWdpbiBv
cmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwKQoreworICAg
IGlmIChzaG91bGRHb0JlZm9yZShyaWdodCwgbGVmdCkpCisgICAgICAgIHJldHVybiByZWR1Y2VH
cmVhdGVyRXF1YWwodHlwZSwgb3JpZ2luLCByaWdodCwgbGVmdCk7CisKKyAgICBpZiAoVmFsdWUq
IGNvbnN0YW50ID0gbV9wcm9jLmFkZEJvb2xDb25zdGFudChvcmlnaW4sIHJpZ2h0LT5ncmVhdGVy
RXF1YWxDb25zdGFudChsZWZ0KSkpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9j
ayhjb25zdGFudCk7CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFs
dWU+KExlc3NFcXVhbCwgb3JpZ2luLCBsZWZ0LCByaWdodCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9s
ZU9wdGltaXplcjo6cmVkdWNlR3JlYXRlckVxdWFsKFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwg
VmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgaWYgKHNo
b3VsZEdvQmVmb3JlKHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAgcmV0dXJuIHJlZHVjZUxlc3NFcXVh
bCh0eXBlLCBvcmlnaW4sIHJpZ2h0LCBsZWZ0KTsKKworICAgIGlmIChWYWx1ZSogY29uc3RhbnQg
PSBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG9yaWdpbiwgcmlnaHQtPmxlc3NFcXVhbENvbnN0YW50
KGxlZnQpKSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50KTsK
KworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oR3JlYXRlckVx
dWFsLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVy
OjpyZWR1Y2VBYm92ZShUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1
ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIGlmIChzaG91bGRHb0JlZm9yZShyaWdo
dCwgbGVmdCkpCisgICAgICAgIHJldHVybiByZWR1Y2VCZWxvdyh0eXBlLCBvcmlnaW4sIHJpZ2h0
LCBsZWZ0KTsKKworICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3Byb2MuYWRkQm9vbENvbnN0
YW50KG9yaWdpbiwgcmlnaHQtPmJlbG93Q29uc3RhbnQobGVmdCkpKQorICAgICAgICByZXR1cm4g
YXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/
IG51bGxwdHIgOiBlbWl0PFZhbHVlPihBYm92ZSwgb3JpZ2luLCBsZWZ0LCByaWdodCk7Cit9CisK
K1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlQmVsb3coVHlwZSB0eXBlLCBPcmlnaW4g
b3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCkKK3sKKyAg
ICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxlZnQpKQorICAgICAgICByZXR1cm4gcmVkdWNl
QWJvdmUodHlwZSwgb3JpZ2luLCByaWdodCwgbGVmdCk7CisKKyAgICBpZiAoVmFsdWUqIGNvbnN0
YW50ID0gbV9wcm9jLmFkZEJvb2xDb25zdGFudChvcmlnaW4sIHJpZ2h0LT5hYm92ZUNvbnN0YW50
KGxlZnQpKSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50KTsK
KworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oQmVsb3csIG9y
aWdpbiwgbGVmdCwgcmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVj
ZUFib3ZlRXF1YWwoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUq
IHJpZ2h0LCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQs
IGxlZnQpKQorICAgICAgICByZXR1cm4gcmVkdWNlQmVsb3dFcXVhbCh0eXBlLCBvcmlnaW4sIHJp
Z2h0LCBsZWZ0KTsKKworICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3Byb2MuYWRkQm9vbENv
bnN0YW50KG9yaWdpbiwgcmlnaHQtPmJlbG93RXF1YWxDb25zdGFudChsZWZ0KSkpCisgICAgICAg
IHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICByZXR1cm4gY2Fu
R2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KEFib3ZlRXF1YWwsIG9yaWdpbiwgbGVmdCwg
cmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUJlbG93RXF1YWwo
VHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29s
IGNhbkdpdmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxlZnQpKQorICAg
ICAgICByZXR1cm4gcmVkdWNlQWJvdmVFcXVhbCh0eXBlLCBvcmlnaW4sIHJpZ2h0LCBsZWZ0KTsK
KworICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG9yaWdp
biwgcmlnaHQtPmFib3ZlRXF1YWxDb25zdGFudChsZWZ0KSkpCisgICAgICAgIHJldHVybiBhcHBl
bmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8gbnVs
bHB0ciA6IGVtaXQ8VmFsdWU+KEJlbG93RXF1YWwsIG9yaWdpbiwgbGVmdCwgcmlnaHQpOworfQor
CitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnRyeVJlZHVjZShWYWx1ZSogdmFsdWUpCit7Cisg
ICAgc3dpdGNoICh2YWx1ZS0+b3Bjb2RlKCkpIHsKKyAgICBjYXNlIE9wYXF1ZToKKyAgICAgICAg
cmV0dXJuIHJlZHVjZU9wYXF1ZSh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVl
LT5jaGlsZCgwKSwgdHJ1ZSk7CisgICAgY2FzZSBBZGQ6CisgICAgICAgIHJldHVybiByZWR1Y2VB
ZGQodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVl
LT5jaGlsZCgxKSwgdHJ1ZSk7CisgICAgY2FzZSBTdWI6CisgICAgICAgIHJldHVybiByZWR1Y2VT
dWIodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVl
LT5jaGlsZCgxKSwgdHJ1ZSk7CisgICAgY2FzZSBOZWc6CisgICAgICAgIHJldHVybiByZWR1Y2VO
ZWcodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHRydWUp
OworICAgIGNhc2UgTXVsOgorICAgICAgICByZXR1cm4gcmVkdWNlTXVsKHZhbHVlLT50eXBlKCks
IHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIHRydWUp
OworICAgIGNhc2UgRGl2OgorICAgICAgICByZXR1cm4gcmVkdWNlRGl2KHZhbHVlLT50eXBlKCks
IHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIHZhbHVl
LT5pc0NoaWxsKCksIHRydWUpOworICAgIGNhc2UgVURpdjoKKyAgICAgICAgcmV0dXJuIHJlZHVj
ZVVEaXYodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZh
bHVlLT5jaGlsZCgxKSwgdHJ1ZSk7CisgICAgY2FzZSBNb2Q6CisgICAgICAgIHJldHVybiByZWR1
Y2VNb2QodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZh
bHVlLT5jaGlsZCgxKSwgdmFsdWUtPmlzQ2hpbGwoKSwgdHJ1ZSk7CisgICAgY2FzZSBVTW9kOgor
ICAgICAgICByZXR1cm4gcmVkdWNlVU1vZCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCks
IHZhbHVlLT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxkKDEpLCB0cnVlKTsKKyAgICBjYXNlIEJpdEFu
ZDoKKyAgICAgICAgcmV0dXJuIHJlZHVjZUJpdEFuZCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3Jp
Z2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxkKDEpLCB0cnVlKTsKKyAgICBjYXNl
IEJpdE9yOgorICAgICAgICByZXR1cm4gcmVkdWNlQml0T3IodmFsdWUtPnR5cGUoKSwgdmFsdWUt
Pm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgxKSwgdHJ1ZSk7CisgICAg
Y2FzZSBCaXRYb3I6CisgICAgICAgIHJldHVybiByZWR1Y2VCaXRYb3IodmFsdWUtPnR5cGUoKSwg
dmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgxKSwgdHJ1ZSk7
CisgICAgY2FzZSBTaGw6CisgICAgICAgIHJldHVybiByZWR1Y2VTaGwodmFsdWUtPnR5cGUoKSwg
dmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgxKSwgdHJ1ZSk7
CisgICAgY2FzZSBTU2hyOgorICAgICAgICByZXR1cm4gcmVkdWNlU1Nocih2YWx1ZS0+dHlwZSgp
LCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxkKDEpLCB0cnVl
KTsKKyAgICBjYXNlIFpTaHI6CisgICAgICAgIHJldHVybiByZWR1Y2VaU2hyKHZhbHVlLT50eXBl
KCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIHRy
dWUpOworICAgIGNhc2UgUm90UjoKKyAgICAgICAgcmV0dXJuIHJlZHVjZVJvdFIodmFsdWUtPnR5
cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgxKSwg
dHJ1ZSk7CisgICAgY2FzZSBSb3RMOgorICAgICAgICByZXR1cm4gcmVkdWNlUm90TCh2YWx1ZS0+
dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxkKDEp
LCB0cnVlKTsKKyAgICBjYXNlIEFiczoKKyAgICAgICAgcmV0dXJuIHJlZHVjZUFicyh2YWx1ZS0+
dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdHJ1ZSk7CisgICAgY2Fz
ZSBDZWlsOgorICAgICAgICByZXR1cm4gcmVkdWNlQ2VpbCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+
b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdHJ1ZSk7CisgICAgY2FzZSBGbG9vcjoKKyAgICAg
ICAgcmV0dXJuIHJlZHVjZUZsb29yKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFs
dWUtPmNoaWxkKDApLCB0cnVlKTsKKyAgICBjYXNlIFNxcnQ6CisgICAgICAgIHJldHVybiByZWR1
Y2VTcXJ0KHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB0
cnVlKTsKKyAgICBjYXNlIEJpdHdpc2VDYXN0OgorICAgICAgICByZXR1cm4gcmVkdWNlQml0d2lz
ZUNhc3QodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHRy
dWUpOworICAgIGNhc2UgU0V4dDg6CisgICAgICAgIHJldHVybiByZWR1Y2VTRXh0OCh2YWx1ZS0+
dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdHJ1ZSk7CisgICAgY2Fz
ZSBTRXh0MTY6CisgICAgICAgIHJldHVybiByZWR1Y2VTRXh0MTYodmFsdWUtPnR5cGUoKSwgdmFs
dWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHRydWUpOworICAgIGNhc2UgU0V4dDMyOgor
ICAgICAgICByZXR1cm4gcmVkdWNlU0V4dDMyKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4o
KSwgdmFsdWUtPmNoaWxkKDApLCB0cnVlKTsKKyAgICBjYXNlIFpFeHQzMjoKKyAgICAgICAgcmV0
dXJuIHJlZHVjZVpFeHQzMih2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5j
aGlsZCgwKSwgdHJ1ZSk7CisgICAgY2FzZSBUcnVuYzoKKyAgICAgICAgcmV0dXJuIHJlZHVjZVRy
dW5jKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB0cnVl
KTsKKyAgICBjYXNlIElUb0Y6CisgICAgICAgIHJldHVybiByZWR1Y2VJVG9GKHZhbHVlLT50eXBl
KCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB0cnVlKTsKKyAgICBjYXNlIElU
b0Q6CisgICAgICAgIHJldHVybiByZWR1Y2VJVG9EKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmln
aW4oKSwgdmFsdWUtPmNoaWxkKDApLCB0cnVlKTsKKyAgICBjYXNlIEZsb2F0VG9Eb3VibGU6Cisg
ICAgICAgIHJldHVybiByZWR1Y2VGbG9hdFRvRG91YmxlKHZhbHVlLT50eXBlKCksIHZhbHVlLT5v
cmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB0cnVlKTsKKyAgICBjYXNlIERvdWJsZVRvRmxvYXQ6
CisgICAgICAgIHJldHVybiByZWR1Y2VEb3VibGVUb0Zsb2F0KHZhbHVlLT50eXBlKCksIHZhbHVl
LT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB0cnVlKTsKKyAgICBjYXNlIFNlbGVjdDoKKyAg
ICAgICAgcmV0dXJuIHJlZHVjZVNlbGVjdCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCks
IHZhbHVlLT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxkKDEpLCB2YWx1ZS0+Y2hpbGQoMiksIHRydWUp
OworICAgIGNhc2UgTG9hZDhaOgorICAgIGNhc2UgTG9hZDhTOgorICAgIGNhc2UgTG9hZDE2WjoK
KyAgICBjYXNlIExvYWQxNlM6CisgICAgY2FzZSBMb2FkOiB7CisgICAgICAgIE1lbW9yeVZhbHVl
KiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIHJldHVybiByZWR1
Y2VMb2FkU3RvcmUobWVtb3J5LT5vcGNvZGUoKSwgbWVtb3J5LT50eXBlKCksIG1lbW9yeS0+b3Jp
Z2luKCksIG1lbW9yeS0+Y2hpbGQoMCksIG1lbW9yeS0+b2Zmc2V0KCksIG51bGxwdHIsIG1lbW9y
eS0+cmFuZ2UoKSwgbWVtb3J5LT5mZW5jZVJhbmdlKCksIHRydWUpOworICAgIH0KKyAgICBjYXNl
IFN0b3JlODoKKyAgICBjYXNlIFN0b3JlMTY6CisgICAgY2FzZSBTdG9yZTogeworICAgICAgICBN
ZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICBy
ZXR1cm4gcmVkdWNlTG9hZFN0b3JlKG1lbW9yeS0+b3Bjb2RlKCksIG1lbW9yeS0+dHlwZSgpLCBt
ZW1vcnktPm9yaWdpbigpLCBtZW1vcnktPmNoaWxkKDEpLCBtZW1vcnktPm9mZnNldCgpLCBtZW1v
cnktPmNoaWxkKDApLCBtZW1vcnktPnJhbmdlKCksIG1lbW9yeS0+ZmVuY2VSYW5nZSgpLCB0cnVl
KTsKKyAgICB9CisgICAgY2FzZSBFcXVhbDoKKyAgICAgICAgcmV0dXJuIHJlZHVjZUVxdWFsKHZh
bHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hp
bGQoMSksIHRydWUpOworICAgIGNhc2UgTm90RXF1YWw6CisgICAgICAgIHJldHVybiByZWR1Y2VO
b3RFcXVhbCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwg
dmFsdWUtPmNoaWxkKDEpLCB0cnVlKTsKKyAgICBjYXNlIEVxdWFsT3JVbm9yZGVyZWQ6CisgICAg
ICAgIHJldHVybiByZWR1Y2VFcXVhbE9yVW5vcmRlcmVkKHZhbHVlLT50eXBlKCksIHZhbHVlLT5v
cmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIHRydWUpOworICAgIGNh
c2UgTGVzc1RoYW46CisgICAgICAgIHJldHVybiByZWR1Y2VMZXNzVGhhbih2YWx1ZS0+dHlwZSgp
LCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxkKDEpLCB0cnVl
KTsKKyAgICBjYXNlIEdyZWF0ZXJUaGFuOgorICAgICAgICByZXR1cm4gcmVkdWNlR3JlYXRlclRo
YW4odmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVl
LT5jaGlsZCgxKSwgdHJ1ZSk7CisgICAgY2FzZSBMZXNzRXF1YWw6CisgICAgICAgIHJldHVybiBy
ZWR1Y2VMZXNzRXF1YWwodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hp
bGQoMCksIHZhbHVlLT5jaGlsZCgxKSwgdHJ1ZSk7CisgICAgY2FzZSBHcmVhdGVyRXF1YWw6Cisg
ICAgICAgIHJldHVybiByZWR1Y2VHcmVhdGVyRXF1YWwodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9y
aWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgxKSwgdHJ1ZSk7CisgICAgY2Fz
ZSBBYm92ZToKKyAgICAgICAgcmV0dXJuIHJlZHVjZUFib3ZlKHZhbHVlLT50eXBlKCksIHZhbHVl
LT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIHRydWUpOworICAg
IGNhc2UgQmVsb3c6CisgICAgICAgIHJldHVybiByZWR1Y2VCZWxvdyh2YWx1ZS0+dHlwZSgpLCB2
YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxkKDEpLCB0cnVlKTsK
KyAgICBjYXNlIEFib3ZlRXF1YWw6CisgICAgICAgIHJldHVybiByZWR1Y2VBYm92ZUVxdWFsKHZh
bHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hp
bGQoMSksIHRydWUpOworICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICAgICAgcmV0dXJuIHJlZHVj
ZUJlbG93RXF1YWwodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQo
MCksIHZhbHVlLT5jaGlsZCgxKSwgdHJ1ZSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK2Jvb2wgUGVlcGhvbGVPcHRpbWl6ZXI6OnRyeVNpbXBsaWZ5
QnJhbmNoKFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQodmFsdWUtPm9wY29kZSgpID09IEJy
YW5jaCk7CisgICAgQVNTRVJUKCEhbV9pbnNlcnRpb25TZXQpOworICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gdmFsdWUtPm93bmVyOworICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworCisgICAgLy8g
U2ltcGxlIGZpeHBvaW50IGFzIHNvbWUgb2YgdGhlc2Ugb3B0aW1pemF0aW9ucyBrZWVwIGEgYnJh
bmNoIGFuZCBzbyBjYW4gYmUgY2hhaW5lZAorICAgIGZvciAoOzspIHsKKyAgICAgICAgLy8gVHVy
biB0aGlzOiBCcmFuY2goTm90RXF1YWwoeCwgMCkpCisgICAgICAgIC8vIEludG8gdGhpczogQnJh
bmNoKHgpCisgICAgICAgIGlmICh2YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IE5vdEVxdWFs
ICYmIHZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50KDApKSB7CisgICAgICAgICAgICB2
YWx1ZS0+Y2hpbGQoMCkgPSB2YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOworICAgICAgICAgICAg
Y2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIFR1cm4gdGhpczogQnJhbmNoKEVxdWFsKHgsIDApLCB0aGVuLCBlbHNlKQorICAgICAg
ICAvLyBJbnRvIHRoaXM6IEJyYW5jaCh4LCBlbHNlLCB0aGVuKQorICAgICAgICBpZiAodmFsdWUt
PmNoaWxkKDApLT5vcGNvZGUoKSA9PSBFcXVhbCAmJiB2YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEp
LT5pc0ludCgwKSkgeworICAgICAgICAgICAgdmFsdWUtPmNoaWxkKDApID0gdmFsdWUtPmNoaWxk
KDApLT5jaGlsZCgwKTsKKyAgICAgICAgICAgIHN0ZDo6c3dhcChibG9jay0+dGFrZW4oKSwgYmxv
Y2stPm5vdFRha2VuKCkpOworICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFR1cm4gdGhpczogQnJhbmNoKEJp
dFhvcihib29sLCAxKSwgdGhlbiwgZWxzZSkKKyAgICAgICAgLy8gSW50byB0aGlzOiBCcmFuY2go
Ym9vbCwgZWxzZSwgdGhlbikKKyAgICAgICAgaWYgKHZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkg
PT0gQml0WG9yCisgICAgICAgICAgICAmJiB2YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0lu
dDMyKDEpCisgICAgICAgICAgICAmJiB2YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLT5yZXR1cm5z
Qm9vbCgpKSB7CisgICAgICAgICAgICB2YWx1ZS0+Y2hpbGQoMCkgPSB2YWx1ZS0+Y2hpbGQoMCkt
PmNoaWxkKDApOworICAgICAgICAgICAgc3RkOjpzd2FwKGJsb2NrLT50YWtlbigpLCBibG9jay0+
bm90VGFrZW4oKSk7CisgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gVHVybiB0aGlzOiBCcmFuY2goQml0QW5k
KGJvb2wsIHh5YjEpLCB0aGVuLCBlbHNlKQorICAgICAgICAvLyBJbnRvIHRoaXM6IEJyYW5jaChi
b29sLCB0aGVuLCBlbHNlKQorICAgICAgICBpZiAodmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9
PSBCaXRBbmQKKyAgICAgICAgICAgICYmIHZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhhc0lu
dCgpCisgICAgICAgICAgICAmJiB2YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5hc0ludCgpICYg
MQorICAgICAgICAgICAgJiYgdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKS0+cmV0dXJuc0Jvb2wo
KSkgeworICAgICAgICAgICAgdmFsdWUtPmNoaWxkKDApID0gdmFsdWUtPmNoaWxkKDApLT5jaGls
ZCgwKTsKKyAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKworICAgICAgICBUcmlTdGF0ZSB0cmlTdGF0ZSA9IHZhbHVlLT5jaGlsZCgw
KS0+YXNUcmlTdGF0ZSgpOworCisgICAgICAgIC8vIFR1cm4gdGhpczogQnJhbmNoKDAsIHRoZW4s
IGVsc2UpCisgICAgICAgIC8vIEludG8gdGhpczogSnVtcChlbHNlKQorICAgICAgICBpZiAodHJp
U3RhdGUgPT0gRmFsc2VUcmlTdGF0ZSkgeworICAgICAgICAgICAgYmxvY2stPnRha2VuKCkuYmxv
Y2soKS0+cmVtb3ZlUHJlZGVjZXNzb3IoYmxvY2spOworICAgICAgICAgICAgdmFsdWUtPnJlcGxh
Y2VXaXRoSnVtcChibG9jaywgYmxvY2stPm5vdFRha2VuKCkpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBUdXJuIHRoaXM6IEJyYW5jaChub3QgMCwg
dGhlbiwgZWxzZSkKKyAgICAgICAgLy8gSW50byB0aGlzOiBKdW1wKHRoZW4pCisgICAgICAgIGlm
ICh0cmlTdGF0ZSA9PSBUcnVlVHJpU3RhdGUpIHsKKyAgICAgICAgICAgIGJsb2NrLT5ub3RUYWtl
bigpLmJsb2NrKCktPnJlbW92ZVByZWRlY2Vzc29yKGJsb2NrKTsKKyAgICAgICAgICAgIHZhbHVl
LT5yZXBsYWNlV2l0aEp1bXAoYmxvY2ssIGJsb2NrLT50YWtlbigpKTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVy
biBjaGFuZ2VkOworfQorCitib29sIFBlZXBob2xlT3B0aW1pemVyOjp0cnlTaW1wbGlmeUNDYWxs
KENDYWxsVmFsdWUqIHZhbHVlKQoreworICAgIEFTU0VSVCh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ0Nh
bGwpOworICAgIEFTU0VSVCghIW1faW5zZXJ0aW9uU2V0KTsKKyAgICAvLyBUdXJuIHRoaXM6IENh
bGwoZm1vZCwgY29uc3RhbnQxLCBjb25zdGFudDIpCisgICAgLy8gSW50byB0aGlzOiBmY2FsbC1j
b25zdGFudChjb25zdGFudDEsIGNvbnN0YW50MikKKyAgICBhdXRvKiBmbW9kRG91YmxlID0gdGFn
Q0Z1bmN0aW9uUHRyPGRvdWJsZSAoKikoZG91YmxlLCBkb3VibGUpPihmbW9kLCBCM0NDYWxsUHRy
VGFnKTsKKyAgICBpZiAodmFsdWUtPnR5cGUoKSA9PSBEb3VibGUKKyAgICAgICAgJiYgdmFsdWUt
Pm51bUNoaWxkcmVuKCkgPT0gMworICAgICAgICAmJiB2YWx1ZS0+Y2hpbGQoMCktPmlzSW50UHRy
KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZtb2REb3VibGUpKQorICAgICAgICAmJiB2YWx1
ZS0+Y2hpbGQoMSktPnR5cGUoKSA9PSBEb3VibGUKKyAgICAgICAgJiYgdmFsdWUtPmNoaWxkKDIp
LT50eXBlKCkgPT0gRG91YmxlKSB7CisgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSB2YWx1
ZS0+Y2hpbGQoMSktPm1vZENvbnN0YW50KG1fcHJvYywgdmFsdWUtPmNoaWxkKDIpKSkgeworICAg
ICAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkoYXBwZW5kVG9DdXJyZW50QmxvY2so
Y29uc3RhbnQpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQZWVwaG9sZU9wdGltaXplcjo6dHJ5U2ltcGxp
ZnlDaGVja0FkZChDaGVja1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQodmFsdWUtPm9wY29k
ZSgpID09IENoZWNrQWRkKTsKKyAgICBBU1NFUlQoISFtX2luc2VydGlvblNldCk7CisgICAgVmFs
dWUqIGxlZnQgPSB2YWx1ZS0+Y2hpbGQoMCk7CisgICAgVmFsdWUqIHJpZ2h0ID0gdmFsdWUtPmNo
aWxkKDEpOworCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGxlZnQtPmNoZWNrQWRkQ29uc3Rh
bnQobV9wcm9jLCByaWdodCkpIHsKKyAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHko
YXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgaWYgKHNob3VsZEdvQmVmb3JlKHJpZ2h0LCBsZWZ0KSkgeworICAgICAgICBz
dGQ6OnN3YXAodmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSkpOworICAgICAgICB0cnlT
aW1wbGlmeUNoZWNrQWRkKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgaWYgKHJpZ2h0LT5pc0ludCgwKSkgeworICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhJZGVu
dGl0eShsZWZ0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKCFyYW5n
ZUZvcihsZWZ0KS5jb3VsZE92ZXJmbG93QWRkKHJhbmdlRm9yKHJpZ2h0KSwgdmFsdWUtPnR5cGUo
KSkpIHsKKyAgICAgICAgVmFsdWUqIGFkZCA9IHJlZHVjZUFkZCh2YWx1ZS0+dHlwZSgpLCB2YWx1
ZS0+b3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoSWRl
bnRpdHkoYWRkKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIFBlZXBob2xlT3B0aW1pemVyOjp0cnlTaW1wbGlmeUNoZWNrU3ViKENo
ZWNrVmFsdWUqIHZhbHVlKQoreworICAgIEFTU0VSVCh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2tT
dWIpOworICAgIEFTU0VSVCghIW1faW5zZXJ0aW9uU2V0KTsKKyAgICBWYWx1ZSogbGVmdCA9IHZh
bHVlLT5jaGlsZCgwKTsKKyAgICBWYWx1ZSogcmlnaHQgPSB2YWx1ZS0+Y2hpbGQoMSk7CisKKyAg
ICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbGVmdC0+Y2hlY2tTdWJDb25zdGFudChtX3Byb2MsIHJp
Z2h0KSkgeworICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShhcHBlbmRUb0N1cnJl
bnRCbG9jayhjb25zdGFudCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBp
ZiAocmlnaHQtPmlzSW50KDApKSB7CisgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5
KGxlZnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoVmFsdWUqIG5l
Z2F0ZWRDb25zdGFudCA9IHJpZ2h0LT5jaGVja05lZ0NvbnN0YW50KG1fcHJvYykpIHsKKyAgICAg
ICAgbmVnYXRlZENvbnN0YW50ID0gYXBwZW5kVG9DdXJyZW50QmxvY2sobmVnYXRlZENvbnN0YW50
KTsKKyAgICAgICAgdmFsdWUtPmNvbnZlcnRUb0FkZCgpOworICAgICAgICB2YWx1ZS0+Y2hpbGQo
MSkgPSBuZWdhdGVkQ29uc3RhbnQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IGlmICghcmFuZ2VGb3IobGVmdCkuY291bGRPdmVyZmxvd1N1YihyYW5nZUZvcihyaWdodCksIHZh
bHVlLT50eXBlKCkpKSB7CisgICAgICAgIFZhbHVlKiBzdWIgPSByZWR1Y2VTdWIodmFsdWUtPnR5
cGUoKSwgdmFsdWUtPm9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgICAgIHZhbHVlLT5yZXBs
YWNlV2l0aElkZW50aXR5KHN1Yik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQZWVwaG9sZU9wdGltaXplcjo6dHJ5U2ltcGxpZnlD
aGVja011bChDaGVja1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQodmFsdWUtPm9wY29kZSgp
ID09IENoZWNrTXVsKTsKKyAgICBBU1NFUlQoISFtX2luc2VydGlvblNldCk7CisgICAgVmFsdWUq
IGxlZnQgPSB2YWx1ZS0+Y2hpbGQoMCk7CisgICAgVmFsdWUqIHJpZ2h0ID0gdmFsdWUtPmNoaWxk
KDEpOworCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGxlZnQtPmNoZWNrTXVsQ29uc3RhbnQo
bV9wcm9jLCByaWdodCkpIHsKKyAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkoYXBw
ZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgaWYgKHNob3VsZEdvQmVmb3JlKHJpZ2h0LCBsZWZ0KSkgeworICAgICAgICBzdGQ6
OnN3YXAodmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSkpOworICAgICAgICB0cnlTaW1w
bGlmeUNoZWNrTXVsKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
aWYgKHJpZ2h0LT5oYXNJbnQoKSkgeworICAgICAgICBpZiAoIXJpZ2h0LT5hc0ludCgpKSB7Cisg
ICAgICAgICAgICBWYWx1ZSogY29uc3QwID0gYXBwZW5kVG9DdXJyZW50QmxvY2sobV9wcm9jLmFk
ZEludENvbnN0YW50KHZhbHVlLCAwKSk7CisgICAgICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhJ
ZGVudGl0eShjb25zdDApOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHJpZ2h0LT5hc0ludCgpID09IDEpIHsKKyAgICAgICAgICAgIHZhbHVlLT5yZXBs
YWNlV2l0aElkZW50aXR5KGxlZnQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHJpZ2h0LT5hc0ludCgpID09IDIpIHsKKyAgICAgICAgICAgIHZhbHVl
LT5jb252ZXJ0VG9BZGQoKTsKKyAgICAgICAgICAgIHZhbHVlLT5jaGlsZCgxKSA9IHZhbHVlLT5j
aGlsZCgwKTsKKyAgICAgICAgICAgIHRyeVNpbXBsaWZ5Q2hlY2tBZGQodmFsdWUpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworCisgICAgfQorICAgIGlmIChyaWdodC0+
aXNJbnQoMCkpIHsKKyAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkobGVmdCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICghcmFuZ2VGb3IobGVmdCkuY291
bGRPdmVyZmxvd011bChyYW5nZUZvcihyaWdodCksIHZhbHVlLT50eXBlKCkpKSB7CisgICAgICAg
IFZhbHVlKiBtdWwgPSByZWR1Y2VNdWwodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCBs
ZWZ0LCByaWdodCk7CisgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KG11bCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBQZWVwaG9sZU9wdGltaXplcjo6dHJ5U2ltcGxpZnlDaGVjayhDaGVja1ZhbHVlKiB2YWx1ZSkK
K3sKKyAgICBBU1NFUlQodmFsdWUtPm9wY29kZSgpID09IENoZWNrKTsKKyAgICBBU1NFUlQoISFt
X2luc2VydGlvblNldCk7CisKKyAgICBpZiAodmFsdWUtPmNoaWxkKDApLT5pc0xpa2VaZXJvKCkp
IHsKKyAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoTm9wKCk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIGlmICh2YWx1ZS0+Y2hpbGQoMCktPmlzTGlrZU5vblplcm8oKSkgewor
ICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBlbWl0PFBhdGNocG9pbnRWYWx1
ZT4oVm9pZCwgdmFsdWUtPm9yaWdpbigpKS0+YXM8UGF0Y2hwb2ludFZhbHVlPigpOworCisgICAg
ICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzKCk7CisgICAgICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMucmVhZHMgPSBIZWFwUmFuZ2U6OnRvcCgpOworICAgICAgICBwYXRjaHBvaW50LT5l
ZmZlY3RzLmV4aXRzU2lkZXdheXMgPSB0cnVlOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDE7IGkgPCB2YWx1ZS0+bnVtQ2hpbGRyZW4oKTsgKytpKQorICAgICAgICAgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kKHZhbHVlLT5jb25zdHJhaW5lZENoaWxkKGkpKTsKKworICAgICAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IodmFsdWUtPmdlbmVyYXRvcigpKTsKKworICAgICAgICAvLyBSZXBs
YWNlIHRoZSByZXN0IG9mIHRoZSBibG9jayB3aXRoIGFuIE9vcHMuCisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG1faW5kZXggKyAxOyBpIDwgdmFsdWUtPm93bmVyLT5zaXplKCkgLSAxOyArK2kp
CisgICAgICAgICAgICB2YWx1ZS0+b3duZXItPmF0KGkpLT5yZXBsYWNlV2l0aEJvdHRvbSgqbV9p
bnNlcnRpb25TZXQsIG1faW5kZXgpOworICAgICAgICB2YWx1ZS0+b3duZXItPmxhc3QoKS0+cmVw
bGFjZVdpdGhPb3BzKHZhbHVlLT5vd25lcik7CisgICAgICAgIHZhbHVlLT5vd25lci0+bGFzdCgp
LT5zZXRPcmlnaW4odmFsdWUtPm9yaWdpbigpKTsKKworICAgICAgICAvLyBSZXBsYWNlIG91cnNl
bHZlcyBsYXN0LgorICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhOb3AoKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0g
Tm90RXF1YWwKKyAgICAgICAgJiYgdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQoMCkp
IHsKKyAgICAgICAgdmFsdWUtPmNoaWxkKDApID0gdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisv
LyBSZXR1cm5zIHRydWUgaWYgeCA8IHkgZm9yIHNvbWUgb3JkZXIgc3VjaCB0aGF0OgorLy8gQXRv
bWljU3Ryb25nQ0FTIGFyZSBhbHdheXMgYXQgdGhlIGJlZ2lubmluZyAodXNlZCBieSBzb21lIHBh
dHRlcm5zIGluIEIzTG93ZXJUb0FpcikKKy8vIENvbnN0YW50cyBhcmUgYWx3YXlzIGF0IHRoZSBl
bmQgKHVzZWQgYnkgc29tZSBvdGhlciBwYXR0ZXJucyBmb3Igc3RyZW5ndGggcmVkdWN0aW9uKQor
Ly8gRXZlcnl0aGluZyBlbHNlIGlzIHNvcnRlZCBieSBpbmRleCAoYXMgYSBjYW5vbmljYWxpemF0
aW9uIHRoYXQgaGVscHMgcGFzc2VzIGxpa2UgQ1NFKQorYm9vbCBQZWVwaG9sZU9wdGltaXplcjo6
c2hvdWxkR29CZWZvcmUoVmFsdWUqIHgsIFZhbHVlKiB5KQoreworICAgIGlmICgoeC0+aXNDb25z
dGFudCgpICYmICF5LT5pc0NvbnN0YW50KCkpCisgICAgICAgIHx8ICh5LT5vcGNvZGUoKSA9PSBB
dG9taWNTdHJvbmdDQVMgJiYgISh4LT5vcGNvZGUoKSA9PSBBdG9taWNTdHJvbmdDQVMpKSkgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiAoKHktPmlzQ29uc3RhbnQo
KSAmJiAheC0+aXNDb25zdGFudCgpKQorICAgICAgICB8fCAoeC0+b3Bjb2RlKCkgPT0gQXRvbWlj
U3Ryb25nQ0FTICYmICEoeS0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTKSkKKyAgICAgICAg
fHwgKHgtPmluZGV4KCkgPCB5LT5pbmRleCgpKSk7Cit9CisKKy8vIEZvciBPcD09QWRkIG9yIFN1
YiwgdHVybiBhbnkgb2YgdGhlc2U6CisvLyAgICAgIE9wKE11bCh4MSwgeDIpLCBNdWwoeDEsIHgz
KSkKKy8vICAgICAgT3AoTXVsKHgyLCB4MSksIE11bCh4MSwgeDMpKQorLy8gICAgICBPcChNdWwo
eDEsIHgyKSwgTXVsKHgzLCB4MSkpCisvLyAgICAgIE9wKE11bCh4MiwgeDEpLCBNdWwoeDMsIHgx
KSkKKy8vIEludG8gdGhpczogTXVsKHgxLCBPcCh4MiwgeDMpKQorVmFsdWUqIFBlZXBob2xlT3B0
aW1pemVyOjp0cnlSZWR1Y2VNdWxEaXN0cmlidXRpdml0eShPcGNvZGUgb3AsIFR5cGUgdHlwZSwg
T3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKK3sKKyAgICBBU1NFUlQo
b3AgPT0gQWRkIHx8IG9wID09IFN1Yik7CisgICAgVmFsdWUqIHgxID0gbnVsbHB0cjsKKyAgICBW
YWx1ZSogeDIgPSBudWxscHRyOworICAgIFZhbHVlKiB4MyA9IG51bGxwdHI7CisgICAgaWYgKGxl
ZnQtPm9wY29kZSgpID09IE11bCAmJiByaWdodC0+b3Bjb2RlKCkgPT0gTXVsKSB7CisgICAgICAg
IGlmIChsZWZ0LT5jaGlsZCgwKSA9PSByaWdodC0+Y2hpbGQoMCkpIHsKKyAgICAgICAgICAgIC8v
IE9wKE11bCh4MSwgeDIpLCBNdWwoeDEsIHgzKSkKKyAgICAgICAgICAgIHgxID0gbGVmdC0+Y2hp
bGQoMCk7CisgICAgICAgICAgICB4MiA9IGxlZnQtPmNoaWxkKDEpOworICAgICAgICAgICAgeDMg
PSByaWdodC0+Y2hpbGQoMSk7CisgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+Y2hpbGQoMSkgPT0g
cmlnaHQtPmNoaWxkKDApKSB7CisgICAgICAgICAgICAvLyBPcChNdWwoeDIsIHgxKSwgTXVsKHgx
LCB4MykpCisgICAgICAgICAgICB4MSA9IGxlZnQtPmNoaWxkKDEpOworICAgICAgICAgICAgeDIg
PSBsZWZ0LT5jaGlsZCgwKTsKKyAgICAgICAgICAgIHgzID0gcmlnaHQtPmNoaWxkKDEpOworICAg
ICAgICB9IGVsc2UgaWYgKGxlZnQtPmNoaWxkKDApID09IHJpZ2h0LT5jaGlsZCgxKSkgeworICAg
ICAgICAgICAgLy8gT3AoTXVsKHgxLCB4MiksIE11bCh4MywgeDEpKQorICAgICAgICAgICAgeDEg
PSBsZWZ0LT5jaGlsZCgwKTsKKyAgICAgICAgICAgIHgyID0gbGVmdC0+Y2hpbGQoMSk7CisgICAg
ICAgICAgICB4MyA9IHJpZ2h0LT5jaGlsZCgwKTsKKyAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5j
aGlsZCgxKSA9PSByaWdodC0+Y2hpbGQoMSkpIHsKKyAgICAgICAgICAgIC8vIE9wKE11bCh4Miwg
eDEpLCBNdWwoeDMsIHgxKSkKKyAgICAgICAgICAgIHgxID0gbGVmdC0+Y2hpbGQoMSk7CisgICAg
ICAgICAgICB4MiA9IGxlZnQtPmNoaWxkKDApOworICAgICAgICAgICAgeDMgPSByaWdodC0+Y2hp
bGQoMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHgxICE9IG51bGxwdHIpIHsKKyAgICAg
ICAgQVNTRVJUKHgyICE9IG51bGxwdHIgJiYgeDMgIT0gbnVsbHB0cik7CisgICAgICAgIFZhbHVl
KiBuZXdPcCA9IG9wID09IEFkZCA/IHJlZHVjZUFkZCh0eXBlLCBvcmlnaW4sIHgyLCB4MykgOiBy
ZWR1Y2VTdWIodHlwZSwgb3JpZ2luLCB4MiwgeDMpOworICAgICAgICByZXR1cm4gcmVkdWNlTXVs
KHR5cGUsIG9yaWdpbiwgeDEsIG5ld09wKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKKy8vIEZvciBPcD09Qml0T3Igb3IgQml0WG9yLCB0dXJuIGFueSBvZiB0aGVzZToKKy8vICAg
ICAgT3AoQml0QW5kKHgxLCB4MiksIEJpdEFuZCh4MSwgeDMpKQorLy8gICAgICBPcChCaXRBbmQo
eDIsIHgxKSwgQml0QW5kKHgxLCB4MykpCisvLyAgICAgIE9wKEJpdEFuZCh4MSwgeDIpLCBCaXRB
bmQoeDMsIHgxKSkKKy8vICAgICAgT3AoQml0QW5kKHgyLCB4MSksIEJpdEFuZCh4MywgeDEpKQor
Ly8gSW50byB0aGlzOiBCaXRBbmQoT3AoeDIsIHgzKSwgeDEpCisvLyBBbmQgYW55IG9mIHRoZXNl
OgorLy8gICAgICBPcChCaXRBbmQoeDEsIHgyKSwgeDEpCisvLyAgICAgIE9wKEJpdEFuZCh4Miwg
eDEpLCB4MSkKKy8vICAgICAgT3AoeDEsIEJpdEFuZCh4MSwgeDIpKQorLy8gICAgICBPcCh4MSwg
Qml0QW5kKHgyLCB4MSkpCisvLyBJbnRvIHRoaXM6IEJpdEFuZChPcCh4MiwgeDEpLCB4MSkKKy8v
IFRoaXMgc2Vjb25kIHNldCBpcyBlcXVpdmFsZW50IHRvIGRvaW5nIHgxID0+IEJpdEFuZCh4MSwg
eDEpLCBhbmQgdGhlbiBhcHBseWluZyB0aGUgZmlyc3Qgc2V0LgorLy8gSXQgZG9lcyBub3QgcmVk
dWNlIHRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBleGVjdXRlZCwgYnV0IHByb3ZpZGVzIHNvbWUg
dXNlZnVsIG5vcm1hbGl6YXRpb246IHdlIHByZWZlciB0byBoYXZlIEJpdEFuZCBhdCB0aGUgb3V0
ZXJtb3N0LCB0aGVuIEJpdFhvciwgYW5kIGZpbmFsbHkgQml0T3IgYXQgdGhlIGlubmVybW9zdAor
VmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjp0cnlSZWR1Y2VCaXRBbmREaXN0cmlidXRpdml0eShP
cGNvZGUgb3AsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiBy
aWdodCkKK3sKKyAgICBBU1NFUlQob3AgPT0gQml0T3IgfHwgb3AgPT0gQml0WG9yKTsKKyAgICBW
YWx1ZSogeDEgPSBudWxscHRyOworICAgIFZhbHVlKiB4MiA9IG51bGxwdHI7CisgICAgVmFsdWUq
IHgzID0gbnVsbHB0cjsKKyAgICBpZiAobGVmdC0+b3Bjb2RlKCkgPT0gQml0QW5kICYmIHJpZ2h0
LT5vcGNvZGUoKSA9PSBCaXRBbmQpIHsKKyAgICAgICAgaWYgKGxlZnQtPmNoaWxkKDApID09IHJp
Z2h0LT5jaGlsZCgwKSkgeworICAgICAgICAgICAgeDEgPSBsZWZ0LT5jaGlsZCgwKTsKKyAgICAg
ICAgICAgIHgyID0gbGVmdC0+Y2hpbGQoMSk7CisgICAgICAgICAgICB4MyA9IHJpZ2h0LT5jaGls
ZCgxKTsKKyAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5jaGlsZCgxKSA9PSByaWdodC0+Y2hpbGQo
MCkpIHsKKyAgICAgICAgICAgIHgxID0gbGVmdC0+Y2hpbGQoMSk7CisgICAgICAgICAgICB4MiA9
IGxlZnQtPmNoaWxkKDApOworICAgICAgICAgICAgeDMgPSByaWdodC0+Y2hpbGQoMSk7CisgICAg
ICAgIH0gZWxzZSBpZiAobGVmdC0+Y2hpbGQoMCkgPT0gcmlnaHQtPmNoaWxkKDEpKSB7CisgICAg
ICAgICAgICB4MSA9IGxlZnQtPmNoaWxkKDApOworICAgICAgICAgICAgeDIgPSBsZWZ0LT5jaGls
ZCgxKTsKKyAgICAgICAgICAgIHgzID0gcmlnaHQtPmNoaWxkKDApOworICAgICAgICB9IGVsc2Ug
aWYgKGxlZnQtPmNoaWxkKDEpID09IHJpZ2h0LT5jaGlsZCgxKSkgeworICAgICAgICAgICAgeDEg
PSBsZWZ0LT5jaGlsZCgxKTsKKyAgICAgICAgICAgIHgyID0gbGVmdC0+Y2hpbGQoMCk7CisgICAg
ICAgICAgICB4MyA9IHJpZ2h0LT5jaGlsZCgwKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAo
bGVmdC0+b3Bjb2RlKCkgPT0gQml0QW5kKSB7CisgICAgICAgIGlmIChsZWZ0LT5jaGlsZCgwKSA9
PSByaWdodCkgeworICAgICAgICAgICAgeDEgPSB4MyA9IHJpZ2h0OworICAgICAgICAgICAgeDIg
PSBsZWZ0LT5jaGlsZCgxKTsKKyAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5jaGlsZCgxKSA9PSBy
aWdodCkgeworICAgICAgICAgICAgeDEgPSB4MyA9IHJpZ2h0OworICAgICAgICAgICAgeDIgPSBs
ZWZ0LT5jaGlsZCgwKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAocmlnaHQtPm9wY29kZSgp
ID09IEJpdEFuZCkgeworICAgICAgICBpZiAocmlnaHQtPmNoaWxkKDApID09IGxlZnQpIHsKKyAg
ICAgICAgICAgIHgxID0geDMgPSBsZWZ0OworICAgICAgICAgICAgeDIgPSByaWdodC0+Y2hpbGQo
MSk7CisgICAgICAgIH0gZWxzZSBpZiAocmlnaHQtPmNoaWxkKDEpID09IGxlZnQpIHsKKyAgICAg
ICAgICAgIHgxID0geDMgPSBsZWZ0OworICAgICAgICAgICAgeDIgPSByaWdodC0+Y2hpbGQoMCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHgxICE9IG51bGxwdHIpIHsKKyAgICAgICAgQVNT
RVJUKHgyICE9IG51bGxwdHIgJiYgeDMgIT0gbnVsbHB0cik7CisgICAgICAgIFZhbHVlKiBuZXdP
cCA9IG9wID09IEJpdE9yID8gcmVkdWNlQml0T3IodHlwZSwgb3JpZ2luLCB4MiwgeDMpIDogcmVk
dWNlQml0WG9yKHR5cGUsIG9yaWdpbiwgeDIsIHgzKTsKKyAgICAgICAgcmV0dXJuIHJlZHVjZUJp
dEFuZCh0eXBlLCBvcmlnaW4sIHgxLCBuZXdPcCk7CisgICAgfQorICAgIHJldHVybiBudWxscHRy
OworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnRyeVJlZHVjZVNoaWZ0T3JSb3RhdGUo
T3Bjb2RlIG9wLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSog
cmlnaHQpCit7CisgICAgLy8gU2hpZnQgYW55dGhpbmcgYnkgemVybyBpcyBpZGVudGl0eS4KKyAg
ICBpZiAocmlnaHQtPmlzSW50MzIoMCkpCisgICAgICAgIHJldHVybiBsZWZ0OworCisgICAgLy8g
VGhlIHNoaWZ0IGFscmVhZHkgbWFza3MgaXRzIHNoaWZ0IGFtb3VudC4gSWYgdGhlIHNoaWZ0IGFt
b3VudCBpcyBiZWluZyBtYXNrZWQgYnkgYQorICAgIC8vIHJlZHVuZGFudCBhbW91bnQsIHRoZW4g
cmVtb3ZlIHRoZSBtYXNrLiBGb3IgZXhhbXBsZSwKKyAgICAvLyBUdXJuIHRoaXM6IFNobChAeCwg
Qml0QW5kKEB5LCA2MykpCisgICAgLy8gSW50byB0aGlzOiBTaGwoQHgsIEB5KQorICAgIHVuc2ln
bmVkIG1hc2sgPSBzaXplb2ZUeXBlKHR5cGUpICogOCAtIDE7CisgICAgaWYgKHJpZ2h0LT5vcGNv
ZGUoKSA9PSBCaXRBbmQKKyAgICAgICAgJiYgcmlnaHQtPmNoaWxkKDEpLT5oYXNJbnQzMigpCisg
ICAgICAgICYmIChyaWdodC0+Y2hpbGQoMSktPmFzSW50MzIoKSAmIG1hc2spID09IG1hc2spIHsK
KyAgICAgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIFNobDoKKyAgICAgICAgICAgIHJl
dHVybiByZWR1Y2VTaGwodHlwZSwgb3JpZ2luLCBsZWZ0LCByaWdodC0+Y2hpbGQoMCkpOworICAg
ICAgICBjYXNlIFNTaHI6CisgICAgICAgICAgICByZXR1cm4gcmVkdWNlU1Nocih0eXBlLCBvcmln
aW4sIGxlZnQsIHJpZ2h0LT5jaGlsZCgwKSk7CisgICAgICAgIGNhc2UgWlNocjoKKyAgICAgICAg
ICAgIHJldHVybiByZWR1Y2VaU2hyKHR5cGUsIG9yaWdpbiwgbGVmdCwgcmlnaHQtPmNoaWxkKDAp
KTsKKyAgICAgICAgY2FzZSBSb3RMOgorICAgICAgICAgICAgcmV0dXJuIHJlZHVjZVJvdEwodHlw
ZSwgb3JpZ2luLCBsZWZ0LCByaWdodC0+Y2hpbGQoMCkpOworICAgICAgICBjYXNlIFJvdFI6Cisg
ICAgICAgICAgICByZXR1cm4gcmVkdWNlUm90Uih0eXBlLCBvcmlnaW4sIGxlZnQsIHJpZ2h0LT5j
aGlsZCgwKSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKKy8vIEZJWE1FOiBUaGlzIGlzIGEgYmFzaWMgYm91bmRlZCBiYWNrd2FyZHMgYW5hbHlzaXMu
CisvLyBXZSBzaG91bGQgbWFrZSBQZWVwaG9sZU9wdGltaXplciBwYXJhbWV0cmljIGluIHRoaXMg
YW5hbHlzaXMsIHRvIHN1cHBvcnQgYSBmb3J3YXJkIGFuYWx5c2lzLgorSW50UmFuZ2UgUGVlcGhv
bGVPcHRpbWl6ZXI6OnJhbmdlRm9yKFZhbHVlKiB2YWx1ZSwgdW5zaWduZWQgdGltZVRvTGl2ZSkK
K3sKKyAgICBpZiAoIXRpbWVUb0xpdmUpCisgICAgICAgIHJldHVybiBJbnRSYW5nZTo6dG9wKHZh
bHVlLT50eXBlKCkpOworCisgICAgc3dpdGNoICh2YWx1ZS0+b3Bjb2RlKCkpIHsKKyAgICBjYXNl
IENvbnN0MzI6CisgICAgY2FzZSBDb25zdDY0OiB7CisgICAgICAgIGludDY0X3QgaW50VmFsdWUg
PSB2YWx1ZS0+YXNJbnQoKTsKKyAgICAgICAgcmV0dXJuIEludFJhbmdlKGludFZhbHVlLCBpbnRW
YWx1ZSk7CisgICAgfQorCisgICAgY2FzZSBCaXRBbmQ6CisgICAgICAgIGlmICh2YWx1ZS0+Y2hp
bGQoMSktPmhhc0ludCgpKQorICAgICAgICAgICAgcmV0dXJuIEludFJhbmdlOjpyYW5nZUZvck1h
c2sodmFsdWUtPmNoaWxkKDEpLT5hc0ludCgpLCB2YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIFNTaHI6CisgICAgICAgIGlmICh2YWx1ZS0+Y2hpbGQoMSktPmhhc0lu
dDMyKCkpCisgICAgICAgICAgICByZXR1cm4gcmFuZ2VGb3IodmFsdWUtPmNoaWxkKDApLCB0aW1l
VG9MaXZlIC0gMSkuc1Nocih2YWx1ZS0+Y2hpbGQoMSktPmFzSW50MzIoKSwgdmFsdWUtPnR5cGUo
KSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBaU2hyOgorICAgICAgICBpZiAodmFsdWUt
PmNoaWxkKDEpLT5oYXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHJhbmdlRm9yKHZhbHVl
LT5jaGlsZCgwKSwgdGltZVRvTGl2ZSAtIDEpLnpTaHIodmFsdWUtPmNoaWxkKDEpLT5hc0ludDMy
KCksIHZhbHVlLT50eXBlKCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU2hsOgorICAg
ICAgICBpZiAodmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJu
IHJhbmdlRm9yKHZhbHVlLT5jaGlsZCgwKSwgdGltZVRvTGl2ZSAtIDEpLnNobCh2YWx1ZS0+Y2hp
bGQoMSktPmFzSW50MzIoKSwgdmFsdWUtPnR5cGUoKSk7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBBZGQ6CisgICAgICAgIHJldHVybiByYW5nZUZvcih2YWx1ZS0+Y2hpbGQoMCksIHRpbWVU
b0xpdmUgLSAxKS5hZGQocmFuZ2VGb3IodmFsdWUtPmNoaWxkKDEpLCB0aW1lVG9MaXZlIC0gMSks
IHZhbHVlLT50eXBlKCkpOworCisgICAgY2FzZSBTdWI6CisgICAgICAgIHJldHVybiByYW5nZUZv
cih2YWx1ZS0+Y2hpbGQoMCksIHRpbWVUb0xpdmUgLSAxKS5zdWIocmFuZ2VGb3IodmFsdWUtPmNo
aWxkKDEpLCB0aW1lVG9MaXZlIC0gMSksIHZhbHVlLT50eXBlKCkpOworCisgICAgY2FzZSBNdWw6
CisgICAgICAgIHJldHVybiByYW5nZUZvcih2YWx1ZS0+Y2hpbGQoMCksIHRpbWVUb0xpdmUgLSAx
KS5tdWwocmFuZ2VGb3IodmFsdWUtPmNoaWxkKDEpLCB0aW1lVG9MaXZlIC0gMSksIHZhbHVlLT50
eXBlKCkpOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0
dXJuIEludFJhbmdlOjp0b3AodmFsdWUtPnR5cGUoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUGVlcGhvbGVPcHRpbWl6ZXIuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1BlZXBob2xlT3B0aW1pemVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLmEyMGUxNDY4Yzc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUGVlcGhvbGVPcHRpbWl6ZXIuaApAQCAtMCwwICsxLDE1NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgorI2lu
Y2x1ZGUgIkIzQ2hlY2tWYWx1ZS5oIgorI2luY2x1ZGUgIkIzSW5zZXJ0aW9uU2V0LmgiCisjaW5j
bHVkZSAiQjNQcm9jZWR1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2NsYXNzIEludFJhbmdlOworY2xhc3MgUHJvY2VkdXJlOworCisvLyBUaGlzIGNsYXNzIGNhbiBi
ZSB1c2VkIGluIHR3byBtb2RlcywgdGhhdCBjb3JyZXNwb25kIHRvIHRoZSB0d28gd2F5cyBvZiBj
b25zdHJ1Y3RpbmcgaXQuCisvLyBJbiB0aGUgZmlyc3QgbW9kZSwgaXQgaXMgcGFzc2VkIGFuIGlu
c2VydGlvblNldCwgYW5kIHVzZXMgaXQgdG8gY29uc3RydWN0IG5ldyB2YWx1ZXMuCisvLyBJdCBp
cyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8ga2VlcCB0aGUgaW5kZXggdXAtdG8tZGF0
ZSB3aXRoIHNldEluZGV4LAorLy8gYW5kIHRvIGV4ZWN1dGUgdGhlIGluc2VydGlvblNldCBvbmNl
IGl0IGlzIGRvbmUgd2l0aCB0aGUgY3VycmVudCBiYXNpYyBibG9jay4KKy8vIFRoaXMgbW9kZSBp
cyBwcmltYXJpbHkgdXNlZCBieSBCM1JlZHVjZVN0cmVuZ3RoLgorLy8gSW4gdGhlIHNlY29uZCBt
b2RlLCBpdCBpcyBwYXNzZWQgYSBwb2ludGVyIHRvIGEgYmFzaWMgYmxvY2ssIGFuZCBjb25zdHJ1
Y3QgbmV3IHZhbHVlcyBieSBhcHBlbmRpbmcgdGhlbSBhdCB0aGUgZW5kLgorLy8gSW4gdGhpcyBt
b2RlLCB0aGUgY2FsbGVyJ3Mgb25seSByZXNwb25zaWJpbGl0eSBpcyB0byB1cGRhdGUgdGhlIGJs
b2NrIHBvaW50ZXIgd2l0aCBzZXRCbG9jayB3aGVuZXZlciBuZWVkZWQuCisvLyBUaGlzIG1vZGUg
aXMgcHJpbWFyaWx5IHVzZWQgYnkgRlRMT3V0cHV0LgorY2xhc3MgUGVlcGhvbGVPcHRpbWl6ZXIg
eworcHVibGljOgorICAgIFBlZXBob2xlT3B0aW1pemVyKFByb2NlZHVyZSYgcHJvYywgSW5zZXJ0
aW9uU2V0JiBpbnNlcnRpb25TZXQpCisgICAgICAgIDogbV9wcm9jKHByb2MpCisgICAgICAgICwg
bV9pbnNlcnRpb25TZXQoJmluc2VydGlvblNldCkKKyAgICAgICAgLCBtX2luZGV4KDApCisgICAg
eworICAgIH0KKworICAgIFBlZXBob2xlT3B0aW1pemVyKFByb2NlZHVyZSYgcHJvYywgQmFzaWNC
bG9jayogYmxvY2sgPSBudWxscHRyKQorICAgICAgICA6IG1fcHJvYyhwcm9jKQorICAgICAgICAs
IG1fYmxvY2soYmxvY2spCisgICAgeworICAgIH0KKworICAgIHZvaWQgc2V0SW5kZXgodW5zaWdu
ZWQgaW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoISFtX2luc2VydGlvblNldCk7CisgICAg
ICAgIG1faW5kZXggPSBpbmRleDsKKyAgICB9CisKKyAgICB2b2lkIHNldEJsb2NrKEJhc2ljQmxv
Y2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2luc2VydGlvblNldCk7CisgICAg
ICAgIG1fYmxvY2sgPSBibG9jazsKKyAgICB9CisKKyAgICBWYWx1ZSogcmVkdWNlT3BhcXVlKFR5
cGUsIE9yaWdpbiwgVmFsdWUqIGNoaWxkLCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBW
YWx1ZSogcmVkdWNlQWRkKFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwg
Ym9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZVN1YihUeXBlLCBPcmln
aW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOwor
ICAgIFZhbHVlKiByZWR1Y2VOZWcoVHlwZSwgT3JpZ2luLCBWYWx1ZSosIGJvb2wgY2FuR2l2ZVVw
ID0gZmFsc2UpOworICAgIFZhbHVlKiByZWR1Y2VNdWwoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVm
dCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVk
dWNlRGl2KFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBpc0No
aWxsLCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlVURpdihUeXBl
LCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwID0gZmFs
c2UpOworICAgIFZhbHVlKiByZWR1Y2VNb2QoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFs
dWUqIHJpZ2h0LCBib29sIGlzQ2hpbGwsIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZh
bHVlKiByZWR1Y2VVTW9kKFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwg
Ym9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZUJpdEFuZChUeXBlLCBP
cmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2Up
OworICAgIFZhbHVlKiByZWR1Y2VCaXRPcihUeXBlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1
ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZhbHVlKiByZWR1Y2VCaXRY
b3IoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVV
cCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlU2hsKFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxl
ZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJl
ZHVjZVNTaHIoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNh
bkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlWlNocihUeXBlLCBPcmlnaW4sIFZh
bHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZh
bHVlKiByZWR1Y2VSb3RMKFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwg
Ym9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZVJvdFIoVHlwZSwgT3Jp
Z2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsK
KyAgICBWYWx1ZSogcmVkdWNlQWJzKFR5cGUsIE9yaWdpbiwgVmFsdWUqLCBib29sIGNhbkdpdmVV
cCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlQ2VpbChUeXBlLCBPcmlnaW4sIFZhbHVlKiwg
Ym9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZUZsb29yKFR5cGUsIE9y
aWdpbiwgVmFsdWUqLCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNl
Qml0d2lzZUNhc3QoVHlwZSwgT3JpZ2luLCBWYWx1ZSosIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2Up
OworICAgIFZhbHVlKiByZWR1Y2VTcXJ0KFR5cGUsIE9yaWdpbiwgVmFsdWUqLCBib29sIGNhbkdp
dmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlU0V4dDgoVHlwZSwgT3JpZ2luLCBWYWx1
ZSosIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZhbHVlKiByZWR1Y2VTRXh0MTYoVHlw
ZSwgT3JpZ2luLCBWYWx1ZSosIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZhbHVlKiBy
ZWR1Y2VTRXh0MzIoVHlwZSwgT3JpZ2luLCBWYWx1ZSosIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2Up
OworICAgIFZhbHVlKiByZWR1Y2VaRXh0MzIoVHlwZSwgT3JpZ2luLCBWYWx1ZSosIGJvb2wgY2Fu
R2l2ZVVwID0gZmFsc2UpOworICAgIFZhbHVlKiByZWR1Y2VUcnVuYyhUeXBlLCBPcmlnaW4sIFZh
bHVlKiwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZUlUb0QoVHlw
ZSwgT3JpZ2luLCBWYWx1ZSosIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZhbHVlKiBy
ZWR1Y2VJVG9GKFR5cGUsIE9yaWdpbiwgVmFsdWUqLCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsK
KyAgICBWYWx1ZSogcmVkdWNlRmxvYXRUb0RvdWJsZShUeXBlLCBPcmlnaW4sIFZhbHVlKiwgYm9v
bCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZURvdWJsZVRvRmxvYXQoVHlw
ZSwgT3JpZ2luLCBWYWx1ZSosIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZhbHVlKiBy
ZWR1Y2VTZWxlY3QoVHlwZSwgT3JpZ2luLCBWYWx1ZSogY29uZCwgVmFsdWUqIGlmVHJ1ZSwgVmFs
dWUqIGlmRmFsc2UsIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZhbHVlKiByZWR1Y2VM
b2FkU3RvcmUoT3Bjb2RlLCBUeXBlLCBPcmlnaW4sIFZhbHVlKiBhZGRyZXNzLCBWYWx1ZTo6T2Zm
c2V0VHlwZSwgVmFsdWUqIHZhbHVlU3RvcmVkID0gbnVsbHB0ciwgSGVhcFJhbmdlID0gSGVhcFJh
bmdlOjp0b3AoKSwgSGVhcFJhbmdlIGZlbmNlUmFuZ2UgPSBIZWFwUmFuZ2UoKSwgYm9vbCBjYW5H
aXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZUVxdWFsKFR5cGUsIE9yaWdpbiwgVmFs
dWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFs
dWUqIHJlZHVjZU5vdEVxdWFsKFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdo
dCwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZUVxdWFsT3JVbm9y
ZGVyZWQoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdp
dmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlTGVzc1RoYW4oVHlwZSwgT3JpZ2luLCBW
YWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBW
YWx1ZSogcmVkdWNlR3JlYXRlclRoYW4oVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUq
IHJpZ2h0LCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlTGVzc0Vx
dWFsKFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZl
VXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZUdyZWF0ZXJFcXVhbChUeXBlLCBPcmlnaW4s
IFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAg
IFZhbHVlKiByZWR1Y2VBYm92ZShUeXBlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmln
aHQsIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZhbHVlKiByZWR1Y2VCZWxvdyhUeXBl
LCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwID0gZmFs
c2UpOworICAgIFZhbHVlKiByZWR1Y2VBYm92ZUVxdWFsKFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxl
ZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJl
ZHVjZUJlbG93RXF1YWwoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBi
b29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICAvLyBEaXNwYXRjaCBvbiB0aGUgb3Bjb2RlIHRv
IGFueSBvZiB0aGUgZnVuY3Rpb25zIGFib3ZlLCB3aXRoIGNhbkdpdmVVcCA9IHRydWUuCisgICAg
VmFsdWUqIHRyeVJlZHVjZShWYWx1ZSopOworCisgICAgLy8gVGhpcyBtZXRob2QgaGFzIGEgY29t
cGxldGVseSBkaWZmZXJlbnQgaW50ZXJmYWNlLCBiZWNhdXNlIGl0IGNhbm5vdCBiZSB1c2VkIG9u
IHRoZSBmbHkgd2hpbGUgY3JlYXRpbmcgQjMsCisgICAgLy8gYXMgaXQgbW9kaWZpZXMgdGhlIGJs
b2NrJ3Mgc3VjY2Vzc29ycy4KKyAgICAvLyBJdCBzaW1wbHkgcmV0dXJucyB0cnVlIGlmIGl0IHdh
cyBhYmxlIHRvIG9wdGltaXplIG9yIGNhbm9uaWNhbGl6ZSB0aGUgYnJhbmNoIGFuZCBmYWxzZSBv
dGhlcndpc2UuCisgICAgYm9vbCB0cnlTaW1wbGlmeUJyYW5jaChWYWx1ZSopOworICAgIC8vIFNp
bWlsYXJpbHkgdGhlc2UgbWV0aG9kcyBzaG91bGQgbm90IGJlIGNhbGxlZCB3aGVuIGNvbnN0cnVj
dGluZyBhIHZhcmFyZ3Mgb3BlcmF0aW9uIHBpZWNld2lzZSBhcyBpcyBjb21tb25seSBkb25lCisg
ICAgLy8gYnkgRlRMTG93ZXJERkdUb0IzOiB3ZSBkb24ndCB3YW50IGNsaWVudHMgdHJ5aW5nIHRv
IG11dGF0ZSBhIENoZWNrQWRkIGFmdGVyIHdlJ3ZlIHRyYW5zZm9ybWVkIGl0IGludG8gYW4gSWRl
bnRpdHkuCisgICAgLy8gVGhleSByZXR1cm4gdHJ1ZSBpZiB0aGV5IHdlcmUgYWJsZSB0byBkbyBh
bnkgb3B0aW1pemF0aW9uIG9yIGNhbm9uaWNhbGl6YXRpb24sIGFuZCBmYWxzZSBvdGhlcndpc2Uu
CisgICAgYm9vbCB0cnlTaW1wbGlmeUNDYWxsKENDYWxsVmFsdWUqKTsKKyAgICBib29sIHRyeVNp
bXBsaWZ5Q2hlY2tBZGQoQ2hlY2tWYWx1ZSopOworICAgIGJvb2wgdHJ5U2ltcGxpZnlDaGVja1N1
YihDaGVja1ZhbHVlKik7CisgICAgYm9vbCB0cnlTaW1wbGlmeUNoZWNrTXVsKENoZWNrVmFsdWUq
KTsKKyAgICBib29sIHRyeVNpbXBsaWZ5Q2hlY2soQ2hlY2tWYWx1ZSopOworCitwcml2YXRlOgor
ICAgIFZhbHVlKiBhcHBlbmRUb0N1cnJlbnRCbG9jayhWYWx1ZSopOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlKiBlbWl0
KEFyZ3VtZW50cy4uLik7CisKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRHb0JlZm9yZShWYWx1ZSos
IFZhbHVlKik7CisKKyAgICBWYWx1ZSogdHJ5UmVkdWNlTXVsRGlzdHJpYnV0aXZpdHkoT3Bjb2Rl
LCBUeXBlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpOworICAgIFZhbHVlKiB0
cnlSZWR1Y2VCaXRBbmREaXN0cmlidXRpdml0eShPcGNvZGUsIFR5cGUsIE9yaWdpbiwgVmFsdWUq
IGxlZnQsIFZhbHVlKiByaWdodCk7CisgICAgVmFsdWUqIHRyeVJlZHVjZVNoaWZ0T3JSb3RhdGUo
T3Bjb2RlLCBUeXBlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpOworCisgICAg
c3RhdGljIEludFJhbmdlIHJhbmdlRm9yKFZhbHVlKiwgdW5zaWduZWQgdGltZVRvTGl2ZSA9IDUp
OworCisgICAgUHJvY2VkdXJlJiBtX3Byb2M7CisgICAgSW5zZXJ0aW9uU2V0KiBtX2luc2VydGlv
blNldCB7IG51bGxwdHIgfTsKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0ciB9Owor
ICAgIHVuc2lnbmVkIG1faW5kZXggeyAwIH07Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKaW5kZXggOWU2MjE1OTQyZjMuLmYyN2Q2ZmIwNGRjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiQjNFbGltaW5hdGVEZWFkQ29kZS5oIgogI2lu
Y2x1ZGUgIkIzSW5zZXJ0aW9uU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWVJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiQjNQZWVwaG9sZU9wdGltaXplci5oIgogI2luY2x1ZGUgIkIz
UGhhc2VTY29wZS5oIgogI2luY2x1ZGUgIkIzUGhpQ2hpbGRyZW4uaCIKICNpbmNsdWRlICJCM1By
b2NlZHVyZUlubGluZXMuaCIKQEAgLTkzLDE5MzMgKzk0LDEyMiBAQCBuYW1lc3BhY2UgQjNSZWR1
Y2VTdHJlbmd0aEludGVybmFsIHsKIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsK
IH0KIAotLy8gRklYTUU6IFRoaXMgSW50UmFuZ2Ugc3R1ZmYgc2hvdWxkIGJlIHJlZmFjdG9yZWQg
aW50byBhIGdlbmVyYWwgY29uc3RhbnQgcHJvcGFnYXRvci4gSXQncyB3ZWlyZAotLy8gdGhhdCBp
dCdzIGp1c3Qgc2l0dGluZyBoZXJlIGluIHRoaXMgZmlsZS4KLWNsYXNzIEludFJhbmdlIHsKLXB1
YmxpYzoKLSAgICBJbnRSYW5nZSgpCi0gICAgewotICAgIH0KLQotICAgIEludFJhbmdlKGludDY0
X3QgbWluLCBpbnQ2NF90IG1heCkKLSAgICAgICAgOiBtX21pbihtaW4pCi0gICAgICAgICwgbV9t
YXgobWF4KQotICAgIHsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0
YXRpYyBJbnRSYW5nZSB0b3AoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEludFJhbmdlKHN0ZDo6
bnVtZXJpY19saW1pdHM8VD46Om1pbigpLCBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKSk7
Ci0gICAgfQotCi0gICAgc3RhdGljIEludFJhbmdlIHRvcChUeXBlIHR5cGUpCi0gICAgewotICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAgICAgICAgIHJl
dHVybiB0b3A8aW50MzJfdD4oKTsKLSAgICAgICAgY2FzZSBJbnQ2NDoKLSAgICAgICAgICAgIHJl
dHVybiB0b3A8aW50NjRfdD4oKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gSW50UmFuZ2UoKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGlj
IEludFJhbmdlIHJhbmdlRm9yTWFzayhUIG1hc2spCi0gICAgewotICAgICAgICBpZiAoIShtYXNr
ICsgMSkpCi0gICAgICAgICAgICByZXR1cm4gdG9wPFQ+KCk7Ci0gICAgICAgIHJldHVybiBJbnRS
YW5nZSgwLCBtYXNrKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSW50UmFuZ2UgcmFuZ2VGb3JNYXNr
KGludDY0X3QgbWFzaywgVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7
Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAgICByZXR1cm4gcmFuZ2VGb3JNYXNrPGlu
dDMyX3Q+KHN0YXRpY19jYXN0PGludDMyX3Q+KG1hc2spKTsKLSAgICAgICAgY2FzZSBJbnQ2NDoK
LSAgICAgICAgICAgIHJldHVybiByYW5nZUZvck1hc2s8aW50NjRfdD4obWFzayk7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICAgICAgcmV0dXJuIEludFJhbmdlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBJbnRSYW5nZSByYW5nZUZvclpTaHIoaW50MzJf
dCBzaGlmdEFtb3VudCkKLSAgICB7Ci0gICAgICAgIHR5cGVuYW1lIHN0ZDo6bWFrZV91bnNpZ25l
ZDxUPjo6dHlwZSBtYXNrID0gMDsKLSAgICAgICAgbWFzay0tOwotICAgICAgICBtYXNrID4+PSBz
aGlmdEFtb3VudDsKLSAgICAgICAgcmV0dXJuIHJhbmdlRm9yTWFzazxUPihzdGF0aWNfY2FzdDxU
PihtYXNrKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIEludFJhbmdlIHJhbmdlRm9yWlNocihpbnQz
Ml90IHNoaWZ0QW1vdW50LCBUeXBlIHR5cGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKLSAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAgICAgICAgIHJldHVybiByYW5nZUZvclpTaHI8
aW50MzJfdD4oc2hpZnRBbW91bnQpOwotICAgICAgICBjYXNlIEludDY0OgotICAgICAgICAgICAg
cmV0dXJuIHJhbmdlRm9yWlNocjxpbnQ2NF90PihzaGlmdEFtb3VudCk7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAg
ICAgcmV0dXJuIEludFJhbmdlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbnQ2NF90IG1p
bigpIGNvbnN0IHsgcmV0dXJuIG1fbWluOyB9Ci0gICAgaW50NjRfdCBtYXgoKSBjb25zdCB7IHJl
dHVybiBtX21heDsgfQotCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci0g
ICAgewotICAgICAgICBvdXQucHJpbnQoIlsiLCBtX21pbiwgIiwiLCBtX21heCwgIl0iKTsKLSAg
ICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGJvb2wgY291bGRPdmVyZmxvd0Fk
ZChjb25zdCBJbnRSYW5nZSYgb3RoZXIpCi0gICAgewotICAgICAgICByZXR1cm4gc3VtT3ZlcmZs
b3dzPFQ+KG1fbWluLCBvdGhlci5tX21pbikKLSAgICAgICAgICAgIHx8IHN1bU92ZXJmbG93czxU
PihtX21pbiwgb3RoZXIubV9tYXgpCi0gICAgICAgICAgICB8fCBzdW1PdmVyZmxvd3M8VD4obV9t
YXgsIG90aGVyLm1fbWluKQotICAgICAgICAgICAgfHwgc3VtT3ZlcmZsb3dzPFQ+KG1fbWF4LCBv
dGhlci5tX21heCk7Ci0gICAgfQotCi0gICAgYm9vbCBjb3VsZE92ZXJmbG93QWRkKGNvbnN0IElu
dFJhbmdlJiBvdGhlciwgVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7
Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAgICByZXR1cm4gY291bGRPdmVyZmxvd0Fk
ZDxpbnQzMl90PihvdGhlcik7Ci0gICAgICAgIGNhc2UgSW50NjQ6Ci0gICAgICAgICAgICByZXR1
cm4gY291bGRPdmVyZmxvd0FkZDxpbnQ2NF90PihvdGhlcik7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci0gICAgYm9vbCBjb3VsZE92ZXJmbG93U3ViKGNvbnN0IEludFJhbmdlJiBv
dGhlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBkaWZmZXJlbmNlT3ZlcmZsb3dzPFQ+KG1fbWlu
LCBvdGhlci5tX21pbikKLSAgICAgICAgICAgIHx8IGRpZmZlcmVuY2VPdmVyZmxvd3M8VD4obV9t
aW4sIG90aGVyLm1fbWF4KQotICAgICAgICAgICAgfHwgZGlmZmVyZW5jZU92ZXJmbG93czxUPiht
X21heCwgb3RoZXIubV9taW4pCi0gICAgICAgICAgICB8fCBkaWZmZXJlbmNlT3ZlcmZsb3dzPFQ+
KG1fbWF4LCBvdGhlci5tX21heCk7Ci0gICAgfQotCi0gICAgYm9vbCBjb3VsZE92ZXJmbG93U3Vi
KGNvbnN0IEludFJhbmdlJiBvdGhlciwgVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNo
ICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAgICByZXR1cm4gY291bGRP
dmVyZmxvd1N1YjxpbnQzMl90PihvdGhlcik7Ci0gICAgICAgIGNhc2UgSW50NjQ6Ci0gICAgICAg
ICAgICByZXR1cm4gY291bGRPdmVyZmxvd1N1YjxpbnQ2NF90PihvdGhlcik7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgYm9vbCBjb3VsZE92ZXJmbG93TXVsKGNvbnN0IElu
dFJhbmdlJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBwcm9kdWN0T3ZlcmZsb3dzPFQ+
KG1fbWluLCBvdGhlci5tX21pbikKLSAgICAgICAgICAgIHx8IHByb2R1Y3RPdmVyZmxvd3M8VD4o
bV9taW4sIG90aGVyLm1fbWF4KQotICAgICAgICAgICAgfHwgcHJvZHVjdE92ZXJmbG93czxUPiht
X21heCwgb3RoZXIubV9taW4pCi0gICAgICAgICAgICB8fCBwcm9kdWN0T3ZlcmZsb3dzPFQ+KG1f
bWF4LCBvdGhlci5tX21heCk7Ci0gICAgfQotCi0gICAgYm9vbCBjb3VsZE92ZXJmbG93TXVsKGNv
bnN0IEludFJhbmdlJiBvdGhlciwgVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0
eXBlKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAgICByZXR1cm4gY291bGRPdmVy
Zmxvd011bDxpbnQzMl90PihvdGhlcik7Ci0gICAgICAgIGNhc2UgSW50NjQ6Ci0gICAgICAgICAg
ICByZXR1cm4gY291bGRPdmVyZmxvd011bDxpbnQ2NF90PihvdGhlcik7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgSW50UmFuZ2Ugc2hsKGludDMyX3Qgc2hpZnRBbW91bnQp
Ci0gICAgewotICAgICAgICBUIG5ld01pbiA9IHN0YXRpY19jYXN0PFQ+KG1fbWluKSA8PCBzdGF0
aWNfY2FzdDxUPihzaGlmdEFtb3VudCk7Ci0gICAgICAgIFQgbmV3TWF4ID0gc3RhdGljX2Nhc3Q8
VD4obV9tYXgpIDw8IHN0YXRpY19jYXN0PFQ+KHNoaWZ0QW1vdW50KTsKLQotICAgICAgICBpZiAo
KG5ld01pbiA+PiBzaGlmdEFtb3VudCkgIT0gc3RhdGljX2Nhc3Q8VD4obV9taW4pKQotICAgICAg
ICAgICAgbmV3TWluID0gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWluKCk7Ci0gICAgICAgIGlm
ICgobmV3TWF4ID4+IHNoaWZ0QW1vdW50KSAhPSBzdGF0aWNfY2FzdDxUPihtX21heCkpCi0gICAg
ICAgICAgICBuZXdNYXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKTsKLQotICAgICAg
ICByZXR1cm4gSW50UmFuZ2UobmV3TWluLCBuZXdNYXgpOwotICAgIH0KLQotICAgIEludFJhbmdl
IHNobChpbnQzMl90IHNoaWZ0QW1vdW50LCBUeXBlIHR5cGUpCi0gICAgewotICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAgICAgICAgIHJldHVybiBzaGw8
aW50MzJfdD4oc2hpZnRBbW91bnQpOwotICAgICAgICBjYXNlIEludDY0OgotICAgICAgICAgICAg
cmV0dXJuIHNobDxpbnQ2NF90PihzaGlmdEFtb3VudCk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJu
IEludFJhbmdlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotICAgIEludFJhbmdlIHNTaHIoaW50MzJfdCBzaGlmdEFtb3VudCkKLSAgICB7Ci0gICAgICAg
IFQgbmV3TWluID0gc3RhdGljX2Nhc3Q8VD4obV9taW4pID4+IHN0YXRpY19jYXN0PFQ+KHNoaWZ0
QW1vdW50KTsKLSAgICAgICAgVCBuZXdNYXggPSBzdGF0aWNfY2FzdDxUPihtX21heCkgPj4gc3Rh
dGljX2Nhc3Q8VD4oc2hpZnRBbW91bnQpOwotCi0gICAgICAgIHJldHVybiBJbnRSYW5nZShuZXdN
aW4sIG5ld01heCk7Ci0gICAgfQotCi0gICAgSW50UmFuZ2Ugc1NocihpbnQzMl90IHNoaWZ0QW1v
dW50LCBUeXBlIHR5cGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAg
Y2FzZSBJbnQzMjoKLSAgICAgICAgICAgIHJldHVybiBzU2hyPGludDMyX3Q+KHNoaWZ0QW1vdW50
KTsKLSAgICAgICAgY2FzZSBJbnQ2NDoKLSAgICAgICAgICAgIHJldHVybiBzU2hyPGludDY0X3Q+
KHNoaWZ0QW1vdW50KTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gSW50UmFuZ2UoKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgSW50UmFuZ2UgelNo
cihpbnQzMl90IHNoaWZ0QW1vdW50KQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBpcyBhbiBhd2t3
YXJkIGNvcm5lciBjYXNlIGZvciBhbGwgb2YgdGhlIG90aGVyIGxvZ2ljLgotICAgICAgICBpZiAo
IXNoaWZ0QW1vdW50KQotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgICAgIC8vIElm
IHRoZSBpbnB1dCByYW5nZSBtYXkgYmUgbmVnYXRpdmUsIHRoZW4gYWxsIHdlIGNhbiBzYXkgYWJv
dXQgdGhlIG91dHB1dCByYW5nZSBpcyB0aGF0IGl0Ci0gICAgICAgIC8vIHdpbGwgYmUgbWFza2Vk
LiBUaGF0J3MgYmVjYXVzZSAtMSByaWdodCBzaGlmdGVkIGp1c3QgcHJvZHVjZXMgdGhhdCBtYXNr
LgotICAgICAgICBpZiAobV9taW4gPCAwKQotICAgICAgICAgICAgcmV0dXJuIHJhbmdlRm9yWlNo
cjxUPihzaGlmdEFtb3VudCk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIGlucHV0IHJhbmdlIGlzIG5v
bi1uZWdhdGl2ZSwgdGhlbiB0aGlzIGp1c3QgYnJpbmdzIHRoZSByYW5nZSBjbG9zZXIgdG8gemVy
by4KLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Om1ha2VfdW5zaWduZWQ8VD46OnR5cGUg
VW5zaWduZWRUOwotICAgICAgICBVbnNpZ25lZFQgbmV3TWluID0gc3RhdGljX2Nhc3Q8VW5zaWdu
ZWRUPihtX21pbikgPj4gc3RhdGljX2Nhc3Q8VW5zaWduZWRUPihzaGlmdEFtb3VudCk7Ci0gICAg
ICAgIFVuc2lnbmVkVCBuZXdNYXggPSBzdGF0aWNfY2FzdDxVbnNpZ25lZFQ+KG1fbWF4KSA+PiBz
dGF0aWNfY2FzdDxVbnNpZ25lZFQ+KHNoaWZ0QW1vdW50KTsKLSAgICAgICAgCi0gICAgICAgIHJl
dHVybiBJbnRSYW5nZShuZXdNaW4sIG5ld01heCk7Ci0gICAgfQotCi0gICAgSW50UmFuZ2UgelNo
cihpbnQzMl90IHNoaWZ0QW1vdW50LCBUeXBlIHR5cGUpCi0gICAgewotICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKLSAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAgICAgICAgIHJldHVybiB6U2hyPGlu
dDMyX3Q+KHNoaWZ0QW1vdW50KTsKLSAgICAgICAgY2FzZSBJbnQ2NDoKLSAgICAgICAgICAgIHJl
dHVybiB6U2hyPGludDY0X3Q+KHNoaWZ0QW1vdW50KTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4g
SW50UmFuZ2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci0gICAgSW50UmFuZ2UgYWRkKGNvbnN0IEludFJhbmdlJiBvdGhlcikKLSAgICB7Ci0gICAgICAg
IGlmIChjb3VsZE92ZXJmbG93QWRkPFQ+KG90aGVyKSkKLSAgICAgICAgICAgIHJldHVybiB0b3A8
VD4oKTsKLSAgICAgICAgcmV0dXJuIEludFJhbmdlKG1fbWluICsgb3RoZXIubV9taW4sIG1fbWF4
ICsgb3RoZXIubV9tYXgpOwotICAgIH0KLQotICAgIEludFJhbmdlIGFkZChjb25zdCBJbnRSYW5n
ZSYgb3RoZXIsIFR5cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAg
ICAgICBjYXNlIEludDMyOgotICAgICAgICAgICAgcmV0dXJuIGFkZDxpbnQzMl90PihvdGhlcik7
Ci0gICAgICAgIGNhc2UgSW50NjQ6Ci0gICAgICAgICAgICByZXR1cm4gYWRkPGludDY0X3Q+KG90
aGVyKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gSW50UmFuZ2UoKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgSW50UmFuZ2Ugc3ViKGNvbnN0IElu
dFJhbmdlJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmIChjb3VsZE92ZXJmbG93U3ViPFQ+KG90
aGVyKSkKLSAgICAgICAgICAgIHJldHVybiB0b3A8VD4oKTsKLSAgICAgICAgcmV0dXJuIEludFJh
bmdlKG1fbWluIC0gb3RoZXIubV9tYXgsIG1fbWF4IC0gb3RoZXIubV9taW4pOwotICAgIH0KLQot
ICAgIEludFJhbmdlIHN1Yihjb25zdCBJbnRSYW5nZSYgb3RoZXIsIFR5cGUgdHlwZSkKLSAgICB7
Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEludDMyOgotICAgICAgICAg
ICAgcmV0dXJuIHN1YjxpbnQzMl90PihvdGhlcik7Ci0gICAgICAgIGNhc2UgSW50NjQ6Ci0gICAg
ICAgICAgICByZXR1cm4gc3ViPGludDY0X3Q+KG90aGVyKTsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1
cm4gSW50UmFuZ2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci0gICAgSW50UmFuZ2UgbXVsKGNvbnN0IEludFJhbmdlJiBvdGhlcikKLSAgICB7Ci0gICAg
ICAgIGlmIChjb3VsZE92ZXJmbG93TXVsPFQ+KG90aGVyKSkKLSAgICAgICAgICAgIHJldHVybiB0
b3A8VD4oKTsKLSAgICAgICAgcmV0dXJuIEludFJhbmdlKAotICAgICAgICAgICAgc3RkOjptaW4o
Ci0gICAgICAgICAgICAgICAgc3RkOjptaW4obV9taW4gKiBvdGhlci5tX21pbiwgbV9taW4gKiBv
dGhlci5tX21heCksCi0gICAgICAgICAgICAgICAgc3RkOjptaW4obV9tYXggKiBvdGhlci5tX21p
biwgbV9tYXggKiBvdGhlci5tX21heCkpLAotICAgICAgICAgICAgc3RkOjptYXgoCi0gICAgICAg
ICAgICAgICAgc3RkOjptYXgobV9taW4gKiBvdGhlci5tX21pbiwgbV9taW4gKiBvdGhlci5tX21h
eCksCi0gICAgICAgICAgICAgICAgc3RkOjptYXgobV9tYXggKiBvdGhlci5tX21pbiwgbV9tYXgg
KiBvdGhlci5tX21heCkpKTsKLSAgICB9Ci0KLSAgICBJbnRSYW5nZSBtdWwoY29uc3QgSW50UmFu
Z2UmIG90aGVyLCBUeXBlIHR5cGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAg
ICAgICAgY2FzZSBJbnQzMjoKLSAgICAgICAgICAgIHJldHVybiBtdWw8aW50MzJfdD4ob3RoZXIp
OwotICAgICAgICBjYXNlIEludDY0OgotICAgICAgICAgICAgcmV0dXJuIG11bDxpbnQ2NF90Pihv
dGhlcik7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIEludFJhbmdlKCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgaW50NjRfdCBtX21pbiB7IDAgfTsKLSAgICBpbnQ2NF90IG1f
bWF4IHsgMCB9OwotfTsKLQotY2xhc3MgUmVkdWNlU3RyZW5ndGggewotcHVibGljOgotICAgIFJl
ZHVjZVN0cmVuZ3RoKFByb2NlZHVyZSYgcHJvYykKLSAgICAgICAgOiBtX3Byb2MocHJvYykKLSAg
ICAgICAgLCBtX2luc2VydGlvblNldChwcm9jKQotICAgICAgICAsIG1fYmxvY2tJbnNlcnRpb25T
ZXQocHJvYykKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBydW4oKQotICAgIHsKLSAgICAgICAg
Ym9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBmaXJzdCA9IHRydWU7Ci0gICAgICAg
IHVuc2lnbmVkIGluZGV4ID0gMDsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgbV9jaGFuZ2Vk
ID0gZmFsc2U7Ci0gICAgICAgICAgICBtX2NoYW5nZWRDRkcgPSBmYWxzZTsKLSAgICAgICAgICAg
ICsraW5kZXg7Ci0KLSAgICAgICAgICAgIGlmIChmaXJzdCkKLSAgICAgICAgICAgICAgICBmaXJz
dCA9IGZhbHNlOwotICAgICAgICAgICAgZWxzZSBpZiAoQjNSZWR1Y2VTdHJlbmd0aEludGVybmFs
Ojp2ZXJib3NlKSB7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiQjMgYWZ0ZXIgaXRlcmF0aW9u
ICMiLCBpbmRleCAtIDEsICIgb2YgcmVkdWNlU3RyZW5ndGg6XG4iKTsKLSAgICAgICAgICAgICAg
ICBkYXRhTG9nKG1fcHJvYyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIHNpbXBsaWZ5Q0ZHKCk7Ci0KLSAgICAgICAgICAgIGlmIChtX2NoYW5nZWRDRkcpIHsKLSAg
ICAgICAgICAgICAgICBtX3Byb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKLSAgICAgICAgICAgICAg
ICBtX3Byb2MuaW52YWxpZGF0ZUNGRygpOwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRy
dWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFdlIGRlZmluaXRlbHkgd2FudCB0
byBkbyBEQ0UgYmVmb3JlIHdlIGRvIENTRSBzbyB0aGF0IHdlIGRvbid0IGhvaXN0IHRoaW5ncy4g
Rm9yCi0gICAgICAgICAgICAvLyBleGFtcGxlOgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAg
IC8vIEBkZWFkID0gTXVsKEBhLCBAYikKLSAgICAgICAgICAgIC8vIC4uLiBsb3RzIG9mIGNvbnRy
b2wgZmxvdyBhbmQgc3R1ZmYKLSAgICAgICAgICAgIC8vIEB0aGluZyA9IE11bChAYSwgQGIpCi0g
ICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gSWYgd2UgZG8gQ1NFIGJlZm9yZSBEQ0UsIHdl
IHdpbGwgcmVtb3ZlIEB0aGluZyBhbmQga2VlcCBAZGVhZC4gRWZmZWN0aXZlbHksIHdlIHdpbGwK
LSAgICAgICAgICAgIC8vICJob2lzdCIgQHRoaW5nLiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgd2Ug
cnVuIERDRSBiZWZvcmUgQ1NFLCB3ZSB3aWxsIGtpbGwgQGRlYWQgYW5kCi0gICAgICAgICAgICAv
LyBrZWVwIEB0aGluZy4gVGhhdCdzIGJldHRlciwgc2luY2Ugd2UgdXN1YWxseSB3YW50IHRoaW5n
cyB0byBzdGF5IHdoZXJldmVyIHRoZSBjbGllbnQKLSAgICAgICAgICAgIC8vIHB1dCB0aGVtLiBX
ZSdyZSBub3QgYWN0dWFsbHkgc21hcnQgZW5vdWdoIHRvIG1vdmUgdGhpbmdzIGFyb3VuZCBhdCBy
YW5kb20uCi0gICAgICAgICAgICBtX2NoYW5nZWQgfD0gZWxpbWluYXRlRGVhZENvZGVJbXBsKG1f
cHJvYyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNpbXBsaWZ5U1NBKCk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmIChtX3Byb2Mub3B0TGV2ZWwoKSA+PSAyKSB7Ci0gICAgICAg
ICAgICAgICAgbV9wcm9jLnJlc2V0VmFsdWVPd25lcnMoKTsKLSAgICAgICAgICAgICAgICBtX2Rv
bWluYXRvcnMgPSAmbV9wcm9jLmRvbWluYXRvcnMoKTsgLy8gUmVjb21wdXRlIGlmIG5lY2Vzc2Fy
eS4KLSAgICAgICAgICAgICAgICBtX3B1cmVDU0UuY2xlYXIoKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYy5ibG9ja3NJblByZU9y
ZGVyKCkpIHsKLSAgICAgICAgICAgICAgICBtX2Jsb2NrID0gYmxvY2s7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgZm9yIChtX2luZGV4ID0gMDsgbV9pbmRleCA8IGJsb2NrLT5z
aXplKCk7ICsrbV9pbmRleCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoQjNSZWR1Y2VTdHJl
bmd0aEludGVybmFsOjp2ZXJib3NlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMb29raW5nIGF0ICIsICpibG9jaywgIiAj
IiwgbV9pbmRleCwgIjogIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWVwRHVtcCht
X3Byb2MsIGJsb2NrLT5hdChtX2luZGV4KSksICJcbiIpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBtX2Jsb2NrLT5hdChtX2luZGV4KTsKLSAg
ICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+cGVyZm9ybVN1YnN0aXR1dGlvbigpOwotICAgICAg
ICAgICAgICAgICAgICByZWR1Y2VWYWx1ZVN0cmVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChtX3Byb2Mub3B0TGV2ZWwoKSA+PSAyKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVw
bGFjZUlmUmVkdW5kYW50KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0LmV4ZWN1dGUobV9ibG9jayk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIG1fY2hhbmdlZENGRyB8PSBtX2Jsb2NrSW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKLSAgICAg
ICAgICAgIGhhbmRsZUNoYW5nZWRDRkdJZk5lY2Vzc2FyeSgpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICByZXN1bHQgfD0gbV9jaGFuZ2VkOwotICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQg
JiYgbV9wcm9jLm9wdExldmVsKCkgPj0gMik7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9wcm9j
Lm9wdExldmVsKCkgPCAyKSB7Ci0gICAgICAgICAgICBtX2NoYW5nZWRDRkcgPSBmYWxzZTsKLSAg
ICAgICAgICAgIHNpbXBsaWZ5Q0ZHKCk7Ci0gICAgICAgICAgICBoYW5kbGVDaGFuZ2VkQ0ZHSWZO
ZWNlc3NhcnkoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIHZvaWQgcmVkdWNlVmFsdWVTdHJlbmd0aCgpCi0g
ICAgewotICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7Ci0gICAgICAgIGNhc2Ug
T3BhcXVlOgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBPcGFxdWUoT3BhcXVlKHZhbHVlKSkK
LSAgICAgICAgICAgIC8vIEludG8gdGhpczogT3BhcXVlKHZhbHVlKQotICAgICAgICAgICAgaWYg
KG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBPcGFxdWUpIHsKLSAgICAgICAgICAgICAg
ICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgQWRkOgotICAgICAgICAgICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgp
ID09IEFkZCAmJiBtX3ZhbHVlLT5pc0ludGVnZXIoKSkgewotICAgICAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogQWRkKEFkZCh2YWx1ZSwgY29uc3RhbnQxKSwgY29uc3RhbnQyKQotICAgICAgICAg
ICAgICAgIC8vIEludG8gdGhpczogQWRkKHZhbHVlLCBjb25zdGFudDEgKyBjb25zdGFudDIpCi0g
ICAgICAgICAgICAgICAgVmFsdWUqIG5ld1N1bSA9IG1fdmFsdWUtPmNoaWxkKDEpLT5hZGRDb25z
dGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKG5ld1N1bSkgewotICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnRWYWx1ZShtX2luZGV4LCBuZXdTdW0pOwotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5j
aGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV92YWx1ZS0+Y2hpbGQoMSkgPSBuZXdTdW07Ci0gICAgICAgICAgICAgICAgICAgIG1fY2hh
bmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFkZChB
ZGQodmFsdWUsIGNvbnN0YW50KSwgb3RoZXJWYWx1ZSkKLSAgICAgICAgICAgICAgICAvLyBJbnRv
IHRoaXM6IEFkZChBZGQodmFsdWUsIG90aGVyVmFsdWUpLCBjb25zdGFudCkKLSAgICAgICAgICAg
ICAgICBpZiAoIW1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKSAmJiBtX3ZhbHVlLT5jaGlsZCgw
KS0+Y2hpbGQoMSktPmhhc0ludCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFZhbHVlKiB2YWx1
ZSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgVmFs
dWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpOwotICAgICAgICAgICAg
ICAgICAgICBWYWx1ZSogb3RoZXJWYWx1ZSA9IG1fdmFsdWUtPmNoaWxkKDEpOwotICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIGNvdWxkIGNyZWF0ZSBkdXBsaWNhdGUgY29kZSBpZiBBZGQodmFs
dWUsIGNvbnN0YW50KSBpcyB1c2VkIGVsc2V3aGVyZS4KLSAgICAgICAgICAgICAgICAgICAgLy8g
SG93ZXZlciwgd2UgYWxyZWFkeSBtb2RlbCBhZGRpbmcgYSBjb25zdGFudCBhcyBpZiBpdCB3YXMg
ZnJlZSBpbiBvdGhlciBwbGFjZXMKLSAgICAgICAgICAgICAgICAgICAgLy8gc28gbGV0J3MganVz
dCByb2xsIHdpdGggaXQuIFRoZSBhbHRlcm5hdGl2ZSB3b3VsZCBtZWFuIGhhdmluZyB0byBkbyBn
b29kIHVzZQotICAgICAgICAgICAgICAgICAgICAvLyBjb3VudHMsIHdoaWNoIHJlZHVjZVN0cmVu
Z3RoKCkgY3VycmVudGx5IGRvZXNuJ3QgaGF2ZS4KLSAgICAgICAgICAgICAgICAgICAgbV92YWx1
ZS0+Y2hpbGQoMCkgPQotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0PFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBBZGQsIG1f
dmFsdWUtPm9yaWdpbigpLCB2YWx1ZSwgb3RoZXJWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAg
IG1fdmFsdWUtPmNoaWxkKDEpID0gY29uc3RhbnQ7Ci0gICAgICAgICAgICAgICAgICAgIG1fY2hh
bmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gVHVybiB0aGlz
OiBBZGQob3RoZXJWYWx1ZSwgQWRkKHZhbHVlLCBjb25zdGFudCkpCi0gICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IEFkZChBZGQodmFsdWUsIG90aGVyVmFsdWUpLCBjb25zdGFudCkKLSAgICAgICAg
ICAgIGlmIChtX3ZhbHVlLT5pc0ludGVnZXIoKQotICAgICAgICAgICAgICAgICYmICFtX3ZhbHVl
LT5jaGlsZCgwKS0+aGFzSW50KCkKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgx
KS0+b3Bjb2RlKCkgPT0gQWRkCi0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSkt
PmNoaWxkKDEpLT5oYXNJbnQoKSkgewotICAgICAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1f
dmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICBWYWx1ZSogY29uc3Rh
bnQgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSk7Ci0gICAgICAgICAgICAgICAgVmFsdWUq
IG90aGVyVmFsdWUgPSBtX3ZhbHVlLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICAvLyBUaGlz
IGNyZWF0ZXMgYSBkdXBsaWNhdGUgYWRkLiBUaGF0J3MgZGFuZ2Vyb3VzIGJ1dCBwcm9iYWJseSBm
aW5lLCBzZWUgYWJvdmUuCi0gICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPQotICAg
ICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pbmRleCwgQWRkLCBtX3ZhbHVlLT5vcmlnaW4oKSwgdmFsdWUsIG90
aGVyVmFsdWUpOwotICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gY29uc3RhbnQ7
Ci0gICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gVHVybiB0aGlz
OiBBZGQoY29uc3RhbnQxLCBjb25zdGFudDIpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNv
bnN0YW50MSArIGNvbnN0YW50MgotICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudEFkZCA9
IG1fdmFsdWUtPmNoaWxkKDApLT5hZGRDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEp
KSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnRBZGQpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBU
dXJuIHRoaXM6IEludGVnZXIgQWRkKHZhbHVlLCB2YWx1ZSkKLSAgICAgICAgICAgIC8vIEludG8g
dGhpczogU2hsKHZhbHVlLCAxKQotICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHVzZWZ1bCBjYW5v
bmljYWxpemF0aW9uLiBJdCdzIG5vdCBtZWFudCB0byBiZSBhIHN0cmVuZ3RoIHJlZHVjdGlvbi4K
LSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5pc0ludGVnZXIoKSAmJiBtX3ZhbHVlLT5jaGlsZCgw
KSA9PSBtX3ZhbHVlLT5jaGlsZCgxKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3
VmFsdWUoCi0gICAgICAgICAgICAgICAgICAgIG1fcHJvYy5hZGQ8VmFsdWU+KAotICAgICAgICAg
ICAgICAgICAgICAgICAgU2hsLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZh
bHVlPihtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4oKSwgMSkpKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBBZGQodmFs
dWUsIHplcm8pCi0gICAgICAgICAgICAvLyBJbnRvIGFuIElkZW50aXR5LgotICAgICAgICAgICAg
Ly8KLSAgICAgICAgICAgIC8vIEFkZGl0aW9uIGlzIHN1YnRsZSB3aXRoIGRvdWJsZXMuIFplcm8g
aXMgbm90IHRoZSBuZXV0cmFsIHZhbHVlLCBuZWdhdGl2ZSB6ZXJvIGlzOgotICAgICAgICAgICAg
Ly8gICAgMCArIDAgPSAwCi0gICAgICAgICAgICAvLyAgICAwICsgLTAgPSAwCi0gICAgICAgICAg
ICAvLyAgICAtMCArIDAgPSAwCi0gICAgICAgICAgICAvLyAgICAtMCArIC0wID0gLTAKLSAgICAg
ICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMCkgfHwgbV92YWx1ZS0+Y2hpbGQo
MSktPmlzTmVnYXRpdmVaZXJvKCkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50
aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmlzSW50ZWdlcigpKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRlZ2VyIEFkZCh2YWx1ZSwgTmVnKG90aGVyVmFsdWUp
KQotICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogU3ViKHZhbHVlLCBvdGhlclZhbHVlKQot
ICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+b3Bjb2RlKCkgPT0gTmVnKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPihTdWIsIG1fdmFsdWUt
Pm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDAp
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRlZ2VyIEFkZChOZWcodmFsdWUpLCBvdGhlclZh
bHVlKQotICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogU3ViKG90aGVyVmFsdWUsIHZhbHVl
KQotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gTmVn
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPihTdWIsIG1fdmFs
dWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgxKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxk
KDApKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRlZ2VyIEFkZChTdWIoMCwgdmFsdWUpLCAt
MSkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdFhvcih2YWx1ZSwgLTEpCi0gICAg
ICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBTdWIKLSAgICAg
ICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50KC0xKQotICAgICAgICAg
ICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCktPmlzSW50KDApKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPihCaXRYb3IsIG1fdmFsdWUt
Pm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSksIG1fdmFsdWUtPmNoaWxkKDEp
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgaWYgKGhhbmRsZU11bERpc3RyaWJ1dGl2aXR5KCkpCi0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICBjYXNlIFN1YjoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU3ViKGNvbnN0YW50MSwg
Y29uc3RhbnQyKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgLSBjb25zdGFu
dDIKLSAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnRTdWIgPSBtX3ZhbHVlLT5jaGlsZCgw
KS0+c3ViQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpIHsKLSAgICAgICAgICAg
ICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0YW50U3ViKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmlzSW50ZWdl
cigpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTdWIodmFsdWUsIGNvbnN0YW50
KQotICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogQWRkKHZhbHVlLCAtY29uc3RhbnQpCi0g
ICAgICAgICAgICAgICAgaWYgKFZhbHVlKiBuZWdhdGVkQ29uc3RhbnQgPSBtX3ZhbHVlLT5jaGls
ZCgxKS0+bmVnQ29uc3RhbnQobV9wcm9jKSkgewotICAgICAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnRWYWx1ZShtX2luZGV4LCBuZWdhdGVkQ29uc3RhbnQpOwotICAgICAgICAg
ICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAg
ICBBZGQsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbmVnYXRlZENvbnN0
YW50KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU3ViKDAsIHZhbHVl
KQotICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogTmVnKHZhbHVlKQotICAgICAgICAgICAg
ICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aXNJbnQoMCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KE5lZywgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUt
PmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTdWIodmFsdWUsIHZhbHVlKQotICAg
ICAgICAgICAgICAgIC8vIEludG8gdGhpczogMAotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVl
LT5jaGlsZCgwKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKSkgewotICAgICAgICAgICAgICAgICAgICBy
ZXBsYWNlV2l0aE5ld1ZhbHVlKG1fcHJvYy5hZGRJbnRDb25zdGFudChtX3ZhbHVlLCAwKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIC8vIFR1cm4gdGhpczogU3ViKHZhbHVlLCBOZWcob3RoZXJWYWx1ZSkpCi0gICAgICAg
ICAgICAgICAgLy8gSW50byB0aGlzOiBBZGQodmFsdWUsIG90aGVyVmFsdWUpCi0gICAgICAgICAg
ICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5vcGNvZGUoKSA9PSBOZWcpIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KEFkZCwgbV92YWx1ZS0+b3JpZ2luKCks
IG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCkpOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoaGFuZGxlTXVsRGlzdHJpYnV0aXZpdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgTmVnOgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBOZWcoY29uc3RhbnQp
Ci0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IC1jb25zdGFudAotICAgICAgICAgICAgaWYgKFZh
bHVlKiBjb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDApLT5uZWdDb25zdGFudChtX3Byb2MpKSB7
Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IC8vIFR1cm4gdGhpczogTmVnKE5lZyh2YWx1ZSkpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6
IHZhbHVlCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IE5l
ZykgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQo
MCktPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmlzSW50ZWdlcigpKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBJbnRlZ2VyIE5lZyhTdWIodmFsdWUsIG90aGVyVmFsdWUpKQotICAgICAg
ICAgICAgICAgIC8vIEludG8gdGhpczogU3ViKG90aGVyVmFsdWUsIHZhbHVlKQotICAgICAgICAg
ICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU3ViKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPihTdWIsIG1fdmFsdWUtPm9yaWdpbigp
LCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgw
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBOZWcoTXVsKHZhbHVlLCBjKSkKLSAg
ICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IE11bCh2YWx1ZSwgLWMpLCBhcyBsb25nIGFzIC1j
IGRvZXMgbm90IG92ZXJmbG93Ci0gICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDAp
LT5vcGNvZGUoKSA9PSBNdWwgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5oYXNJbnQo
KSkgewotICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IGZhY3RvciA9IG1fdmFsdWUtPmNoaWxk
KDApLT5jaGlsZCgxKS0+YXNJbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUt
PnR5cGUoKSA9PSBJbnQzMiAmJiBmYWN0b3IgIT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90
Pjo6bWluKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdGYWN0b3IgPSBt
X2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPihtX2luZGV4LCBtX3ZhbHVlLT5jaGls
ZCgwKS0+Y2hpbGQoMSktPm9yaWdpbigpLCAtZmFjdG9yKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPihNdWwsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVl
LT5jaGlsZCgwKS0+Y2hpbGQoMCksIG5ld0ZhY3Rvcik7Ci0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAobV92YWx1ZS0+dHlwZSgpID09IEludDY0ICYmIGZhY3RvciAhPSBzdGQ6Om51bWVy
aWNfbGltaXRzPGludDY0X3Q+OjptaW4oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgVmFs
dWUqIG5ld0ZhY3RvciA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDY0VmFsdWU+KG1faW5k
ZXgsIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+b3JpZ2luKCksIC1mYWN0b3IpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KE11bCwgbV92YWx1ZS0+
b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSwgbmV3RmFjdG9yKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotCi0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIE11bDoKLSAgICAgICAgICAgIGhhbmRs
ZUNvbW11dGF0aXZpdHkoKTsKLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBNdWwoY29uc3Rh
bnQxLCBjb25zdGFudDIpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50MSAqIGNv
bnN0YW50MgotICAgICAgICAgICAgaWYgKFZhbHVlKiB2YWx1ZSA9IG1fdmFsdWUtPmNoaWxkKDAp
LT5tdWxDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkgewotICAgICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUodmFsdWUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmhhc0lu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgaW50NjRfdCBmYWN0b3IgPSBtX3ZhbHVlLT5jaGlsZCgx
KS0+YXNJbnQoKTsKLQotICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTXVsKHZhbHVlLCAw
KQotICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogMAotICAgICAgICAgICAgICAgIC8vIE5v
dGUgdGhhdCB3ZSBkb24ndCBkbyB0aGlzIGZvciBkb3VibGVzIGJlY2F1c2UgdGhhdCdzIHdyb25n
LiBGb3IgZXhhbXBsZSwgLTEgKiAwCi0gICAgICAgICAgICAgICAgLy8gYW5kIDEgKiAwIHlpZWxk
IGRpZmZlcmVudCByZXN1bHRzLgotICAgICAgICAgICAgICAgIGlmICghZmFjdG9yKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMSkpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2YWx1ZSwgMSkKLSAgICAgICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IHZhbHVlCi0gICAgICAgICAgICAgICAgaWYgKGZhY3RvciA9PSAxKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2YWx1ZSwgLTEpCi0gICAgICAgICAgICAgICAgLy8g
SW50byB0aGlzOiBOZWcodmFsdWUpCi0gICAgICAgICAgICAgICAgaWYgKGZhY3RvciA9PSAtMSkg
ewotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oTmVnLCBtX3ZhbHVl
LT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBNdWwodmFsdWUsIGNvbnN0YW50KQotICAgICAgICAgICAgICAgIC8vIElu
dG8gdGhpczogU2hsKHZhbHVlLCBsb2cyKGNvbnN0YW50KSkKLSAgICAgICAgICAgICAgICBpZiAo
aGFzT25lQml0U2V0KGZhY3RvcikpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hp
ZnRBbW91bnQgPSBXVEY6OmZhc3RMb2cyKHN0YXRpY19jYXN0PHVpbnQ2NF90PihmYWN0b3IpKTsK
LSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1fcHJvYy5hZGQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNobCwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDMyVmFsdWU+KAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4oKSwg
c2hpZnRBbW91bnQpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmhhc0RvdWJs
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgZG91YmxlIGZhY3RvciA9IG1fdmFsdWUtPmNoaWxkKDEp
LT5hc0RvdWJsZSgpOwotCi0gICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBNdWwodmFsdWUs
IDEpCi0gICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZQotICAgICAgICAgICAgICAg
IGlmIChmYWN0b3IgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50
aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+
aXNJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIgTXVs
KHZhbHVlLCBOZWcob3RoZXJWYWx1ZSkpCi0gICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBO
ZWcoTXVsKHZhbHVlLCBvdGhlclZhbHVlKSkKLSAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+
Y2hpbGQoMSktPm9wY29kZSgpID09IE5lZykgewotICAgICAgICAgICAgICAgICAgICBWYWx1ZSog
bmV3TXVsID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBNdWwsIG1fdmFs
dWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxk
KDApKTsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KE5lZywgbV92
YWx1ZS0+b3JpZ2luKCksIG5ld011bCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIgTXVs
KE5lZyh2YWx1ZSksIG90aGVyVmFsdWUpCi0gICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBO
ZWcoTXVsKHZhbHVlLCB2YWx1ZTIpKQotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGls
ZCgwKS0+b3Bjb2RlKCkgPT0gTmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdN
dWwgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIE11bCwgbV92YWx1ZS0+
b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkp
OwotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oTmVnLCBtX3ZhbHVl
LT5vcmlnaW4oKSwgbmV3TXVsKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICBjYXNlIERpdjoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRGl2KGNvbnN0YW50MSwgY29u
c3RhbnQyKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgLyBjb25zdGFudDIK
LSAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIHVzZXMgRGl2PENoaWxsPiBzZW1hbnRpY3Mu
IFRoYXQncyBmaW5lLCBiZWNhdXNlIHRoZSBydWxlcyBmb3IgRGl2Ci0gICAgICAgICAgICAvLyBh
cmUgc3RyaWN0bHkgd2Vha2VyOiBpdCBoYXMgY29ybmVyIGNhc2VzIHdoZXJlIGl0J3MgYWxsb3dl
ZCB0byBkbyBhbnl0aGluZyBpdAotICAgICAgICAgICAgLy8gbGlrZXMuCi0gICAgICAgICAgICBp
ZiAocmVwbGFjZVdpdGhOZXdWYWx1ZShtX3ZhbHVlLT5jaGlsZCgwKS0+ZGl2Q29uc3RhbnQobV9w
cm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpKSB7Ci0gICAgICAgICAgICAg
ICAgc3dpdGNoIChtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQoKSkgewotICAgICAgICAgICAgICAg
IGNhc2UgLTE6Ci0gICAgICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRGl2KHZhbHVlLCAt
MSkKLSAgICAgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBOZWcodmFsdWUpCi0gICAgICAg
ICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBtX3Byb2MuYWRkPFZhbHVlPihOZWcsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGls
ZCgwKSkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNh
c2UgMDoKLSAgICAgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBEaXYodmFsdWUsIDApCi0g
ICAgICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogMAotICAgICAgICAgICAgICAgICAgICAv
LyBXZSBjYW4gZG8gdGhpcyBiZWNhdXNlIGl0J3MgcHJlY2lzZWx5IGNvcnJlY3QgZm9yIENoaWxs
RGl2IGFuZCBmb3IgRGl2IHdlCi0gICAgICAgICAgICAgICAgICAgIC8vIGFyZSBhbGxvd2VkIHRv
IGRvIHdoYXRldmVyIHdlIHdhbnQuCi0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRl
bnRpdHkobV92YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlz
OiBEaXYodmFsdWUsIDEpCi0gICAgICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogdmFsdWUK
LSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgw
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICAgICAgLy8gUGVyZm9ybSBzdXBlciBjb21wcmVoZW5zaXZlIHN0
cmVuZ3RoIHJlZHVjdGlvbiBvZiBkaXZpc2lvbi4gQ3VycmVudGx5IHdlCi0gICAgICAgICAgICAg
ICAgICAgIC8vIG9ubHkgZG8gdGhpcyBmb3IgMzItYml0IGRpdmlzaW9ucywgc2luY2Ugd2UgbmVl
ZCBhIGhpZ2ggbXVsdGlwbHkKLSAgICAgICAgICAgICAgICAgICAgLy8gb3BlcmF0aW9uLiBXZSBl
bXVsYXRlIGl0IHVzaW5nIDY0LWJpdCBtdWx0aXBseS4gV2UgY2FuJ3QgZW11bGF0ZSA2NC1iaXQK
LSAgICAgICAgICAgICAgICAgICAgLy8gaGlnaCBtdWx0aXBseSB3aXRoIGEgMTI4LWJpdCBtdWx0
aXBseSBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYSAxMjgtYml0Ci0gICAgICAgICAgICAgICAgICAg
IC8vIG11bHRpcGx5LiBXZSBjb3VsZCBkbyBpdCB3aXRoIGEgcGF0Y2hwb2ludCBpZiB3ZSBjYXJl
ZCBiYWRseSBlbm91Z2guCi0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPnR5cGUo
KSAhPSBJbnQzMikKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fcHJvYy5vcHRMZXZlbCgpIDwgMikK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAgIGlu
dDMyX3QgZGl2aXNvciA9IG1fdmFsdWUtPmNoaWxkKDEpLT5hc0ludDMyKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIERpdmlzaW9uTWFnaWM8aW50MzJfdD4gbWFnaWMgPSBjb21wdXRlRGl2aXNpb25N
YWdpYyhkaXZpc29yKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBQZXJmb3JtIHRoZSAiaGln
aCIgbXVsdGlwbGljYXRpb24uIFdlIGRvIGl0IGp1c3QgdG8gZ2V0IHRoZSBoaWdoIGJpdHMuCi0g
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgc29ydCBvZiBsaWtlIG11bHRpcGx5aW5nIGJ5
IHRoZSByZWNpcHJvY2FsLCBqdXN0IG1vcmUgZ25hcmx5LiBJdCdzCi0gICAgICAgICAgICAgICAg
ICAgIC8vIGZyb20gSGFja2VyJ3MgRGVsaWdodCBhbmQgSSBkb24ndCBjbGFpbSB0byB1bmRlcnN0
YW5kIGl0LgotICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbWFnaWNRdW90aWVudCA9IG1faW5z
ZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4
LCBUcnVuYywgbV92YWx1ZS0+b3JpZ2luKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
aW5kZXgsIFpTaHIsIG1fdmFsdWUtPm9yaWdpbigpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW5kZXgsIE11bCwgbV92YWx1ZS0+b3JpZ2luKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBTRXh0MzIsIG1fdmFsdWUtPm9y
aWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDY0VmFsdWU+KAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIG1hZ2ljLm1h
Z2ljTXVsdGlwbGllcikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydDxDb25zdDMyVmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4oKSwgMzIpKSk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGRpdmlzb3IgPiAwICYmIG1hZ2ljLm1hZ2ljTXVsdGlwbGllciA8IDApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1hZ2ljUXVvdGllbnQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8
VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIEFkZCwgbV92YWx1
ZS0+b3JpZ2luKCksIG1hZ2ljUXVvdGllbnQsIG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoZGl2aXNvciA8IDAgJiYgbWFn
aWMubWFnaWNNdWx0aXBsaWVyID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWFnaWNR
dW90aWVudCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9pbmRleCwgU3ViLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbWFnaWNRdW90aWVu
dCwgbV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChtYWdpYy5zaGlmdCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1hZ2ljUXVvdGllbnQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIFNTaHIsIG1fdmFsdWUtPm9yaWdpbigpLCBtYWdp
Y1F1b3RpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydDxDb25zdDMyVmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2lu
ZGV4LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbWFnaWMuc2hpZnQpKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KAotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2luZGV4LCBBZGQsIG1fdmFsdWUtPm9yaWdpbigpLCBtYWdpY1F1
b3RpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIFpTaHIs
IG1fdmFsdWUtPm9yaWdpbigpLCBtYWdpY1F1b3RpZW50LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPigKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCAz
MSkpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgIGNhc2UgVURpdjoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogVURpdihjb25z
dGFudDEsIGNvbnN0YW50MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxIC8g
Y29uc3RhbnQyCi0gICAgICAgICAgICBpZiAocmVwbGFjZVdpdGhOZXdWYWx1ZShtX3ZhbHVlLT5j
aGlsZCgwKS0+dURpdkNvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSkKLSAgICAg
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5o
YXNJbnQoKSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+Y2hpbGQoMSktPmFz
SW50KCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAgICAgIC8v
IFR1cm4gdGhpczogVURpdih2YWx1ZSwgMCkKLSAgICAgICAgICAgICAgICAgICAgLy8gSW50byB0
aGlzOiAwCi0gICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBkbyB3aGF0ZXZlciB3ZSB3YW50
IGhlcmUgc28gd2UgbWlnaHQgYXMgd2VsbCBkbyB0aGUgY2hpbGwgdGhpbmcsCi0gICAgICAgICAg
ICAgICAgICAgIC8vIGluIGNhc2Ugd2UgYWRkIGNoaWxsIHZlcnNpb25zIG9mIFVEaXYgaW4gdGhl
IGZ1dHVyZS4KLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVl
LT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAg
ICAgY2FzZSAxOgotICAgICAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFVEaXYodmFsdWUs
IDEpCi0gICAgICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogdmFsdWUKLSAgICAgICAgICAg
ICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZG8gY29tcHJlaGVuc2l2ZSBzdHJlbmd0aCBy
ZWR1Y3Rpb24gZm9yIHVuc2lnbmVkIG51bWJlcnMuIExpa2VseSwKLSAgICAgICAgICAgICAgICAg
ICAgLy8gd2Ugd2lsbCBqdXN0IHdhbnQgY29weSB3aGF0IGxsdm0gZG9lcy4gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDgwOQotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBjYXNlIE1vZDoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTW9kKGNv
bnN0YW50MSwgY29uc3RhbnQyKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEg
LyBjb25zdGFudDIKLSAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIHVzZXMgTW9kPENoaWxs
PiBzZW1hbnRpY3MuCi0gICAgICAgICAgICBpZiAocmVwbGFjZVdpdGhOZXdWYWx1ZShtX3ZhbHVl
LT5jaGlsZCgwKS0+bW9kQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpKQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAvLyBNb2R1bG8gYnkgY29uc3RhbnQg
aXMgbW9yZSBlZmZpY2llbnQgaWYgd2UgdHVybiBpdCBpbnRvIERpdiwgYW5kIHRoZW4gbGV0IERp
diBnZXQKLSAgICAgICAgICAgIC8vIG9wdGltaXplZC4KLSAgICAgICAgICAgIGlmIChtX3ZhbHVl
LT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fdmFsdWUt
PmNoaWxkKDEpLT5hc0ludCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAg
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE1vZCh2YWx1ZSwgMCkKLSAgICAgICAgICAgICAgICAg
ICAgLy8gSW50byB0aGlzOiAwCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgY29ycmVj
dCBhY2NvcmRpbmcgdG8gQ2hpbGxNb2Qgc2VtYW50aWNzLgotICAgICAgICAgICAgICAgICAgICBy
ZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAg
ICBpZiAobV9wcm9jLm9wdExldmVsKCkgPCAyKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAvLyBUdXJuIHRo
aXM6IE1vZChOLCBEKQotICAgICAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFN1YihOLCBN
dWwoRGl2KE4sIEQpLCBEKSkKLSAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAg
ICAgICAgLy8gVGhpcyBpcyBhIHNwZWVkLXVwIGJlY2F1c2Ugd2UgdXNlIG91ciBleGlzdGluZyBE
aXYgb3B0aW1pemF0aW9ucy4KLSAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAg
ICAgICAgLy8gSGVyZSdzIGFuIGVhc2llciB3YXkgdG8gbG9vayBhdCBpdDoKLSAgICAgICAgICAg
ICAgICAgICAgLy8gICAgIE4gJSBEID0gTiAtIE4gLyBEICogRAotICAgICAgICAgICAgICAgICAg
ICAvLwotICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCB3b3Jr
IGZvciBEID0gMCBhbmQgQ2hpbGxNb2QuIFRoZSBleHBlY3RlZCByZXN1bHQgaXMgMC4KLSAgICAg
ICAgICAgICAgICAgICAgLy8gVGhhdCdzIHdoeSB3ZSBoYXZlIGEgc3BlY2lhbC1jYXNlIGFib3Zl
LgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgWCAlIDAgPSBYIC0gWCAvIDAgKiAwID0gWCAg
ICAgKHNob3VsZCBiZSAwKQotICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAg
ICAgICAvLyBUaGlzIGRvZXMgd29yayBmb3IgdGhlIEQgPSAtMSBzcGVjaWFsIGNhc2UuCi0gICAg
ICAgICAgICAgICAgICAgIC8vICAgICAtMl4zMSAlIC0xID0gLTJeMzEgLSAtMl4zMSAvIC0xICog
LTEKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgPSAtMl4zMSAtIC0yXjMx
ICogLTEKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgPSAtMl4zMSAtIC0y
XjMxCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgID0gMAotCi0gICAgICAg
ICAgICAgICAgICAgIEtpbmQgZGl2S2luZCA9IERpdjsKLSAgICAgICAgICAgICAgICAgICAgZGl2
S2luZC5zZXRJc0NoaWxsKG1fdmFsdWUtPmlzQ2hpbGwoKSk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgcmVwbGFjZVdpdGhJZGVudGl0eSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRl
eCwgU3ViLCBtX3ZhbHVlLT5vcmlnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X3ZhbHVlLT5jaGlsZCgwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2lu
ZGV4LCBNdWwsIG1fdmFsdWUtPm9yaWdpbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pbmRleCwgZGl2S2luZCwgbV92YWx1ZS0+b3JpZ2luKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1
ZS0+Y2hpbGQoMSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5j
aGlsZCgxKSkpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFVNb2Q6Ci0gICAgICAgICAgICAvLyBU
dXJuIHRoaXM6IFVNb2QoY29uc3RhbnQxLCBjb25zdGFudDIpCi0gICAgICAgICAgICAvLyBJbnRv
IHRoaXM6IGNvbnN0YW50MSAvIGNvbnN0YW50MgotICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdW
YWx1ZShtX3ZhbHVlLT5jaGlsZCgwKS0+dU1vZENvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hp
bGQoMSkpKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZG8gd2hhdCB3ZSBkbyBm
b3IgTW9kIHNpbmNlIHRoZSBzYW1lIHByaW5jaXBsZSBhcHBsaWVzIGhlcmUuCi0gICAgICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0ODA5Ci0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEJpdEFuZDoKLSAgICAgICAgICAgIGhhbmRs
ZUNvbW11dGF0aXZpdHkoKTsKLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoY29u
c3RhbnQxLCBjb25zdGFudDIpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50MSAm
IGNvbnN0YW50MgotICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudEJpdEFuZCA9IG1fdmFs
dWUtPmNoaWxkKDApLT5iaXRBbmRDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkg
ewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnRCaXRBbmQpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBU
dXJuIHRoaXM6IEJpdEFuZChCaXRBbmQodmFsdWUsIGNvbnN0YW50MSksIGNvbnN0YW50MikKLSAg
ICAgICAgICAgIC8vIEludG8gdGhpczogQml0QW5kKHZhbHVlLCBjb25zdGFudDEgJiBjb25zdGFu
dDIpLgotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXRB
bmQpIHsKLSAgICAgICAgICAgICAgICBWYWx1ZSogbmV3Q29uc3RhbnQgPSBtX3ZhbHVlLT5jaGls
ZCgxKS0+Yml0QW5kQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkp
OwotICAgICAgICAgICAgICAgIGlmIChuZXdDb25zdGFudCkgewotICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnRWYWx1ZShtX2luZGV4LCBuZXdDb25zdGFudCk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNo
aWxkKDApOwotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgxKSA9IG5ld0NvbnN0
YW50OwotICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQo
dmFsdWVYLCB2YWx1ZVgpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHZhbHVlWC4KLSAgICAg
ICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKSkgewotICAg
ICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJu
IHRoaXM6IEJpdEFuZCh2YWx1ZSwgemVyby1jb25zdGFudCkKLSAgICAgICAgICAgIC8vIEludG8g
dGhpczogemVyby1jb25zdGFudC4KLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+
aXNJbnQoMCkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUt
PmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQodmFsdWUsIGFsbC1vbmVzKQotICAgICAgICAg
ICAgLy8gSW50byB0aGlzOiB2YWx1ZS4KLSAgICAgICAgICAgIGlmICgobV92YWx1ZS0+dHlwZSgp
ID09IEludDY0ICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQ2NF90Pjo6bWF4KCkpKQotICAgICAgICAgICAgICAgIHx8IChtX3ZhbHVlLT50eXBlKCkg
PT0gSW50MzIgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludDMyX3Q+OjptYXgoKSkpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0
eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKDY0LWJpdCB2YWx1ZSwgMzIg
b25lcykKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogWkV4dDMyKFRydW5jKDY0LWJpdCB2YWx1
ZSkpCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50NjQoMHhmZmZmZmZm
ZmxsdSkpIHsKLSAgICAgICAgICAgICAgICBWYWx1ZSogbmV3VmFsdWUgPSBtX2luc2VydGlvblNl
dC5pbnNlcnQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBaRXh0MzIsIG1f
dmFsdWUtPm9yaWdpbigpLAotICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnQ8VmFsdWU+KG1faW5kZXgsIFRydW5jLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hp
bGQoMCkpKTsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG5ld1ZhbHVlKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBCaXRBbmQoU0V4dDgodmFsdWUpLCBtYXNrKSB3aGVyZSAobWFzayAmIDB4ZmZm
ZmZmMDApID09IDAKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0QW5kKHZhbHVlLCBtYXNr
KQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBTRXh0OCAm
JiBtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50MzIoKQotICAgICAgICAgICAgICAgICYmICEobV92
YWx1ZS0+Y2hpbGQoMSktPmFzSW50MzIoKSAmIDB4ZmZmZmZmMDApKSB7Ci0gICAgICAgICAgICAg
ICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAg
ICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoU0V4dDE2KHZh
bHVlKSwgbWFzaykgd2hlcmUgKG1hc2sgJiAweGZmZmYwMDAwKSA9PSAwCi0gICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IEJpdEFuZCh2YWx1ZSwgbWFzaykKLSAgICAgICAgICAgIGlmIChtX3ZhbHVl
LT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU0V4dDE2ICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJ
bnQzMigpCi0gICAgICAgICAgICAgICAgJiYgIShtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQzMigp
ICYgMHhmZmZmMDAwMCkpIHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9IG1f
dmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0
cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAvLyBUdXJuIHRoaXM6IEJpdEFuZChTRXh0MzIodmFsdWUpLCBtYXNrKSB3aGVyZSAobWFzayAm
IDB4ZmZmZmZmZmYwMDAwMDAwMCkgPT0gMAotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCaXRB
bmQoWkV4dDMyKHZhbHVlKSwgbWFzaykKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgw
KS0+b3Bjb2RlKCkgPT0gU0V4dDMyICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQzMigpCi0g
ICAgICAgICAgICAgICAgJiYgIShtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQzMigpICYgMHhmZmZm
ZmZmZjAwMDAwMDAwbGx1KSkgewotICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0g
bV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgbV9pbmRl
eCwgWkV4dDMyLCBtX3ZhbHVlLT5vcmlnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1
ZS0+Y2hpbGQoMCktPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkpOwotICAg
ICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKE9wKHZhbHVl
LCBjb25zdGFudDEpLCBjb25zdGFudDIpCi0gICAgICAgICAgICAvLyAgICAgd2hlcmUgIShjb25z
dGFudDEgJiBjb25zdGFudDIpCi0gICAgICAgICAgICAvLyAgICAgICBhbmQgT3AgaXMgQml0T3Ig
b3IgQml0WG9yCi0gICAgICAgICAgICAvLyBpbnRvIHRoaXM6IEJpdEFuZCh2YWx1ZSwgY29uc3Rh
bnQyKQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKSkgewotICAg
ICAgICAgICAgICAgIGludDY0X3QgY29uc3RhbnQyID0gbV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50
KCk7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkp
IHsKLSAgICAgICAgICAgICAgICBjYXNlIEJpdE9yOgotICAgICAgICAgICAgICAgIGNhc2UgQml0
WG9yOgotICAgICAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEp
LT5oYXNJbnQoKQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgIShtX3ZhbHVlLT5jaGlsZCgw
KS0+Y2hpbGQoMSktPmFzSW50KCkgJiBjb25zdGFudDIpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKEJpdFhvcih4MSwgYWxs
T25lcyksIEJpdFhvcih4MiwgYWxsT25lcykKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0
WG9yKEJpdE9yKHgxLCB4MiksIGFsbE9uZXMpCi0gICAgICAgICAgICAvLyBCeSBhcHBseWluZyBE
ZSBNb3JnYW4gbGF3cwotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUo
KSA9PSBCaXRYb3IKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+b3Bjb2Rl
KCkgPT0gQml0WG9yCi0gICAgICAgICAgICAgICAgJiYgKChtX3ZhbHVlLT50eXBlKCkgPT0gSW50
NjQKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgx
KS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpLT5pc0ludChzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpKQotICAgICAgICAgICAgICAgICAgICB8
fCAobV92YWx1ZS0+dHlwZSgpID09IEludDMyCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBt
X3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDMyX3Q+OjptYXgoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxk
KDEpLT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgp
KSkpKSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIGJpdE9yID0gbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0PFZhbHVlPihtX2luZGV4LCBCaXRPciwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNo
aWxkKDApLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDApKTsKLSAgICAgICAg
ICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oQml0WG9yLCBtX3ZhbHVlLT5vcmlnaW4oKSwg
Yml0T3IsIG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKEJp
dFhvcih4LCBhbGxPbmVzKSwgYykKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0WG9yKEJp
dE9yKHgsIH5jKSwgYWxsT25lcykKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB2YXJpYXRpb24g
b24gdGhlIHByZXZpb3VzIG9wdGltaXphdGlvbiwgdHJlYXRpbmcgYyBhcyBpZiBpdCB3ZXJlIEJp
dFhvcih+YywgYWxsT25lcykKLSAgICAgICAgICAgIC8vIEl0IGRvZXMgbm90IHJlZHVjZSB0aGUg
bnVtYmVyIG9mIG9wZXJhdGlvbnMsIGJ1dCBwcm92aWRlcyBzb21lIG5vcm1hbGl6YXRpb24gKHdl
IHRyeSB0byBnZXQgQml0WG9yIGJ5IGFsbE9uZXMgYXQgdGhlIG91dGVybW9zdCBwb2ludCksIGFu
ZCBzb21lIGNoYW5jZSB0byBmbG9hdCBYb3JzIHRvIGEgcGxhY2Ugd2hlcmUgdGhleSBtaWdodCBn
ZXQgZWxpbWluYXRlZC4KLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2Rl
KCkgPT0gQml0WG9yCi0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmhhc0lu
dCgpCi0gICAgICAgICAgICAgICAgJiYgKChtX3ZhbHVlLT50eXBlKCkgPT0gSW50NjQKLSAgICAg
ICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQo
c3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpKSkKLSAgICAgICAgICAgICAgICAg
ICAgfHwgKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQzMgotICAgICAgICAgICAgICAgICAgICAgICAg
JiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQzMl90Pjo6bWF4KCkpKSkpIHsKLSAgICAgICAgICAgICAgICBWYWx1ZSogYml0T3IgPSBt
X2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIEJpdE9yLCBtX3ZhbHVlLT5vcmln
aW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKS0+Yml0
WG9yQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkpKTsKLSAgICAg
ICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oQml0WG9yLCBtX3ZhbHVlLT5vcmlnaW4o
KSwgYml0T3IsIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNh
c2UgQml0T3I6Ci0gICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7Ci0KLSAgICAgICAg
ICAgIC8vIFR1cm4gdGhpczogQml0T3IoY29uc3RhbnQxLCBjb25zdGFudDIpCi0gICAgICAgICAg
ICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50MSB8IGNvbnN0YW50MgotICAgICAgICAgICAgaWYgKFZh
bHVlKiBjb25zdGFudEJpdE9yID0gbV92YWx1ZS0+Y2hpbGQoMCktPmJpdE9yQ29uc3RhbnQobV9w
cm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5l
d1ZhbHVlKGNvbnN0YW50Qml0T3IpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdE9yKEJpdE9yKHZhbHVlLCBjb25z
dGFudDEpLCBjb25zdGFudDIpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdE9yKHZhbHVl
LCBjb25zdGFudDEgJiBjb25zdGFudDIpLgotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxk
KDApLT5vcGNvZGUoKSA9PSBCaXRPcikgewotICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdDb25z
dGFudCA9IG1fdmFsdWUtPmNoaWxkKDEpLT5iaXRPckNvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+
Y2hpbGQoMCktPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICBpZiAobmV3Q29uc3RhbnQpIHsK
LSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUobV9pbmRleCwg
bmV3Q29uc3RhbnQpOwotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9IG1f
dmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+
Y2hpbGQoMSkgPSBuZXdDb25zdGFudDsKLSAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8v
IFR1cm4gdGhpczogQml0T3IodmFsdWVYLCB2YWx1ZVgpCi0gICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IHZhbHVlWC4KLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKSA9PSBtX3ZhbHVl
LT5jaGlsZCgxKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1
ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdE9yKHZhbHVlLCB6ZXJvLWNvbnN0YW50KQotICAg
ICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZS4KLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5j
aGlsZCgxKS0+aXNJbnQoMCkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5
KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRPcih2YWx1ZSwgYWxsLW9uZXMpCi0g
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGFsbC1vbmVzLgotICAgICAgICAgICAgaWYgKChtX3Zh
bHVlLT50eXBlKCkgPT0gSW50NjQgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSkpCi0gICAgICAgICAgICAgICAgfHwgKG1fdmFs
dWUtPnR5cGUoKSA9PSBJbnQzMiAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNl
V2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRPcihCaXRYb3Io
eDEsIGFsbE9uZXMpLCBCaXRYb3IoeDIsIGFsbE9uZXMpCi0gICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IEJpdFhvcihCaXRBbmQoeDEsIHgyKSwgYWxsT25lcykKLSAgICAgICAgICAgIC8vIEJ5IGFw
cGx5aW5nIERlIE1vcmdhbiBsYXdzCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCkt
Pm9wY29kZSgpID09IEJpdFhvcgotICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEp
LT5vcGNvZGUoKSA9PSBCaXRYb3IKLSAgICAgICAgICAgICAgICAmJiAoKG1fdmFsdWUtPnR5cGUo
KSA9PSBJbnQ2NAotICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCkt
PmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSktPmlz
SW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSkpCi0gICAgICAgICAgICAg
ICAgICAgIHx8IChtX3ZhbHVlLT50eXBlKCkgPT0gSW50MzIKLSAgICAgICAgICAgICAgICAgICAg
ICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV92YWx1
ZS0+Y2hpbGQoMSktPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90
Pjo6bWF4KCkpKSkpIHsKLSAgICAgICAgICAgICAgICBWYWx1ZSogYml0QW5kID0gbV9pbnNlcnRp
b25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBCaXRBbmQsIG1fdmFsdWUtPm9yaWdpbigpLCBt
X3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKSk7
Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KEJpdFhvciwgbV92YWx1ZS0+
b3JpZ2luKCksIGJpdEFuZCwgbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlz
OiBCaXRPcihCaXRYb3IoeCwgYWxsT25lcyksIGMpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6
IEJpdFhvcihCaXRBbmQoeCwgfmMpLCBhbGxPbmVzKQotICAgICAgICAgICAgLy8gVGhpcyBpcyBh
IHZhcmlhdGlvbiBvbiB0aGUgcHJldmlvdXMgb3B0aW1pemF0aW9uLCB0cmVhdGluZyBjIGFzIGlm
IGl0IHdlcmUgQml0WG9yKH5jLCBhbGxPbmVzKQotICAgICAgICAgICAgLy8gSXQgZG9lcyBub3Qg
cmVkdWNlIHRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucywgYnV0IHByb3ZpZGVzIHNvbWUgbm9ybWFs
aXphdGlvbiAod2UgdHJ5IHRvIGdldCBCaXRYb3IgYnkgYWxsT25lcyBhdCB0aGUgb3V0ZXJtb3N0
IHBvaW50KSwgYW5kIHNvbWUgY2hhbmNlIHRvIGZsb2F0IFhvcnMgdG8gYSBwbGFjZSB3aGVyZSB0
aGV5IG1pZ2h0IGdldCBlbGltaW5hdGVkLgotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxk
KDApLT5vcGNvZGUoKSA9PSBCaXRYb3IKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGls
ZCgxKS0+aGFzSW50KCkKLSAgICAgICAgICAgICAgICAmJiAoKG1fdmFsdWUtPnR5cGUoKSA9PSBJ
bnQ2NAotICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxk
KDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpKQotICAgICAg
ICAgICAgICAgICAgICB8fCAobV92YWx1ZS0+dHlwZSgpID09IEludDMyCi0gICAgICAgICAgICAg
ICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkpKSkgewotICAgICAgICAgICAgICAgIFZhbHVl
KiBiaXRBbmQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIEJpdEFuZCwg
bV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSwgbV92YWx1ZS0+
Y2hpbGQoMSktPmJpdFhvckNvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxk
KDEpKSk7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KEJpdFhvciwgbV92
YWx1ZS0+b3JpZ2luKCksIGJpdEFuZCwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGhh
bmRsZUJpdEFuZERpc3RyaWJ1dGl2aXR5KCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQml0WG9yOgotICAgICAgICAgICAgaGFu
ZGxlQ29tbXV0YXRpdml0eSgpOwotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdFhvcihj
b25zdGFudDEsIGNvbnN0YW50MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3RhbnQx
IF4gY29uc3RhbnQyCi0gICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50Qml0WG9yID0gbV92
YWx1ZS0+Y2hpbGQoMCktPmJpdFhvckNvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkp
KSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudEJpdFhvcik7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8v
IFR1cm4gdGhpczogQml0WG9yKEJpdFhvcih2YWx1ZSwgY29uc3RhbnQxKSwgY29uc3RhbnQyKQot
ICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCaXRYb3IodmFsdWUsIGNvbnN0YW50MSBeIGNvbnN0
YW50MikuCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJp
dFhvcikgewotICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdDb25zdGFudCA9IG1fdmFsdWUtPmNo
aWxkKDEpLT5iaXRYb3JDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgx
KSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5ld0NvbnN0YW50KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydFZhbHVlKG1faW5kZXgsIG5ld0NvbnN0YW50KTsKLSAg
ICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gbmV3Q29u
c3RhbnQ7Ci0gICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdFhv
cihjb21wYXJlLCAxKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBpbnZlcnRlZENvbXBhcmUK
LSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQzMigxKSkgewotICAgICAg
ICAgICAgICAgIGlmIChWYWx1ZSogaW52ZXJ0ZWRDb21wYXJlID0gbV92YWx1ZS0+Y2hpbGQoMCkt
PmludmVydGVkQ29tcGFyZShtX3Byb2MpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VX
aXRoTmV3VmFsdWUoaW52ZXJ0ZWRDb21wYXJlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJu
IHRoaXM6IEJpdFhvcih2YWx1ZVgsIHZhbHVlWCkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczog
emVyby1jb25zdGFudC4KLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKSA9PSBtX3Zh
bHVlLT5jaGlsZCgxKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUobV9w
cm9jLmFkZEludENvbnN0YW50KG1fdmFsdWUsIDApKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IodmFsdWUs
IHplcm8tY29uc3RhbnQpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHZhbHVlLgotICAgICAg
ICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludCgwKSkgewotICAgICAgICAgICAgICAg
IHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KGhhbmRsZUJpdEFuZERpc3RyaWJ1dGl2aXR5KCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU2hsOgotICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBTaGwoY29uc3RhbnQxLCBjb25zdGFudDIpCi0gICAgICAgICAgICAvLyBJbnRv
IHRoaXM6IGNvbnN0YW50MSA8PCBjb25zdGFudDIKLSAgICAgICAgICAgIGlmIChWYWx1ZSogY29u
c3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+c2hsQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5j
aGlsZCgxKSkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0YW50
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBTaGwoPFN8Wj5TaHIoQHgsIEBjb25zdCksIEBjb25zdCkKLSAgICAgICAg
ICAgIC8vIEludG8gdGhpczogQml0QW5kKEB4LCAtKDE8PEBjb25zdCkpCi0gICAgICAgICAgICBp
ZiAoKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBTU2hyIHx8IG1fdmFsdWUtPmNoaWxk
KDApLT5vcGNvZGUoKSA9PSBaU2hyKQotICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxk
KDApLT5jaGlsZCgxKS0+aGFzSW50KCkKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGls
ZCgxKS0+aGFzSW50KCkKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hp
bGQoMSktPmFzSW50KCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50KCkpIHsKLSAgICAgICAg
ICAgICAgICBpbnQgc2hpZnRBbW91bnQgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQoKSAmICht
X3ZhbHVlLT50eXBlKCkgPT0gSW50MzIgPyAzMSA6IDYzKTsKLSAgICAgICAgICAgICAgICBWYWx1
ZSogbmV3Q29uc3QgPSBtX3Byb2MuYWRkSW50Q29uc3RhbnQobV92YWx1ZSwgLSBzdGF0aWNfY2Fz
dDxpbnQ2NF90PigxdWxsIDw8IHNoaWZ0QW1vdW50KSk7Ci0gICAgICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0VmFsdWUobV9pbmRleCwgbmV3Q29uc3QpOwotICAgICAgICAgICAgICAg
IHJlcGxhY2VXaXRoTmV3PFZhbHVlPihCaXRBbmQsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVl
LT5jaGlsZCgwKS0+Y2hpbGQoMCksIG5ld0NvbnN0KTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaGFuZGxlU2hpZnRBbW91bnQoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1NocjoKLSAgICAgICAgICAgIC8vIFR1cm4g
dGhpczogU1Nocihjb25zdGFudDEsIGNvbnN0YW50MikKLSAgICAgICAgICAgIC8vIEludG8gdGhp
czogY29uc3RhbnQxID4+IGNvbnN0YW50MgotICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFu
dCA9IG1fdmFsdWUtPmNoaWxkKDApLT5zU2hyQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGls
ZCgxKSkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0YW50KTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYg
KG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQzMigpCi0gICAgICAgICAgICAgICAgJiYgbV92YWx1
ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFNobAotICAgICAgICAgICAgICAgICYmIG1fdmFsdWUt
PmNoaWxkKDApLT5jaGlsZCgxKS0+aGFzSW50MzIoKQotICAgICAgICAgICAgICAgICYmIG1fdmFs
dWUtPmNoaWxkKDEpLT5hc0ludDMyKCkgPT0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5h
c0ludDMyKCkpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPmNoaWxkKDEpLT5h
c0ludDMyKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDE2OgotICAgICAgICAgICAgICAgICAg
ICBpZiAobV92YWx1ZS0+dHlwZSgpID09IEludDMyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBUdXJuIHRoaXM6IFNTaHIoU2hsKHZhbHVlLCAxNiksIDE2KQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0MTYodmFsdWUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
cHJvYy5hZGQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRXh0MTYs
IG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkpKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg
ICAgICAgIGNhc2UgMjQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT50eXBlKCkg
PT0gSW50MzIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU1NocihT
aGwodmFsdWUsIDI0KSwgMjQpCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6
IFNFeHQ4KHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Byb2MuYWRkPFZhbHVlPigKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU0V4dDgsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3Zh
bHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgMzI6Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT50eXBlKCkgPT0gSW50NjQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU1NocihTaGwodmFsdWUsIDMyKSwgMzIpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNFeHQzMihUcnVuYyh2YWx1ZSkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fcHJvYy5hZGQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTRXh0MzIsIG1fdmFsdWUtPm9yaWdpbigpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgVHJ1bmMsIG1fdmFsdWUtPm9yaWdpbigp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkt
PmNoaWxkKDApKSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBjYXNlcyBmb3IgNDggYW5k
IDU2LCBidXQgdGhhdCB3b3VsZCB0cmFuc2xhdGUgdG8gU0V4dDMyKFNFeHQ4KSBvcgotICAgICAg
ICAgICAgICAgIC8vIFNFeHQzMihTRXh0MTYpLCB3aGljaCB3ZSBkb24ndCBjdXJyZW50bHkgbG93
ZXIgZWZmaWNpZW50bHkuCi0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAo
bV92YWx1ZS0+b3Bjb2RlKCkgIT0gU1NocikKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGhhbmRsZVNoaWZ0QW1vdW50KCk7Ci0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFpTaHI6Ci0gICAgICAgICAgICAvLyBUdXJuIHRo
aXM6IFpTaHIoY29uc3RhbnQxLCBjb25zdGFudDIpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6
ICh1bnNpZ25lZCljb25zdGFudDEgPj4gY29uc3RhbnQyCi0gICAgICAgICAgICBpZiAoVmFsdWUq
IGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPnpTaHJDb25zdGFudChtX3Byb2MsIG1fdmFs
dWUtPmNoaWxkKDEpKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoY29u
c3RhbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBoYW5kbGVTaGlmdEFtb3VudCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Y2FzZSBSb3RSOgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBSb3RSKGNvbnN0YW50MSwgY29u
c3RhbnQyKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiAoY29uc3RhbnQxID4+IGNvbnN0YW50
MikgfCAoY29uc3RhbnQxIDw8IHNpemVvZihjb25zdGFudDEpICogOCAtIGNvbnN0YW50MikKLSAg
ICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+cm90UkNv
bnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSB7Ci0gICAgICAgICAgICAgICAgcmVw
bGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGhhbmRsZVNoaWZ0QW1vdW50KCk7Ci0gICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICBjYXNlIFJvdEw6Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6
IFJvdEwoY29uc3RhbnQxLCBjb25zdGFudDIpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IChj
b25zdGFudDEgPDwgY29uc3RhbnQyKSB8IChjb25zdGFudDEgPj4gc2l6ZW9mKGNvbnN0YW50MSkg
KiA4IC0gY29uc3RhbnQyKQotICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fdmFs
dWUtPmNoaWxkKDApLT5yb3RMQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpIHsK
LSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0YW50KTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaGFuZGxlU2hpZnRB
bW91bnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQWJzOgotICAgICAg
ICAgICAgLy8gVHVybiB0aGlzOiBBYnMoY29uc3RhbnQpCi0gICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IGZhYnM8dmFsdWUtPnR5cGUoKT4oY29uc3RhbnQpCi0gICAgICAgICAgICBpZiAoVmFsdWUq
IGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmFic0NvbnN0YW50KG1fcHJvYykpIHsKLSAg
ICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0YW50KTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBB
YnMoQWJzKHZhbHVlKSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQWJzKHZhbHVlKQotICAg
ICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBBYnMpIHsKLSAgICAg
ICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIC8vIFR1cm4gdGhpczogQWJzKE5lZyh2YWx1ZSkpCi0gICAgICAgICAgICAvLyBJbnRv
IHRoaXM6IEFicyh2YWx1ZSkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bj
b2RlKCkgPT0gTmVnKSB7Ci0gICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3Zh
bHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBBYnMoQml0d2lzZUNhc3QodmFsdWUpKQotICAgICAgICAgICAgLy8gSW50
byB0aGlzOiBCaXR3aXNlQ2FzdChBbmQodmFsdWUsIG1hc2stdG9wLWJpdCkpCi0gICAgICAgICAg
ICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdHdpc2VDYXN0KSB7Ci0gICAg
ICAgICAgICAgICAgVmFsdWUqIG1hc2s7Ci0gICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPnR5
cGUoKSA9PSBEb3VibGUpCi0gICAgICAgICAgICAgICAgICAgIG1hc2sgPSBtX2luc2VydGlvblNl
dC5pbnNlcnQ8Q29uc3Q2NFZhbHVlPihtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4oKSwgfigxbGwg
PDwgNjMpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1hc2sg
PSBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPihtX2luZGV4LCBtX3ZhbHVlLT5v
cmlnaW4oKSwgfigxbCA8PCAzMSkpOwotCi0gICAgICAgICAgICAgICAgVmFsdWUqIGJpdEFuZCA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgQml0QW5kLCBtX3ZhbHVlLT5v
cmlnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDAp
LAotICAgICAgICAgICAgICAgICAgICBtYXNrKTsKLSAgICAgICAgICAgICAgICBWYWx1ZSogY2Fz
dCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgQml0d2lzZUNhc3QsIG1f
dmFsdWUtPm9yaWdpbigpLCBiaXRBbmQpOwotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRl
bnRpdHkoY2FzdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIENlaWw6Ci0gICAgICAgICAgICAvLyBUdXJu
IHRoaXM6IENlaWwoY29uc3RhbnQpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNlaWw8dmFs
dWUtPnR5cGUoKT4oY29uc3RhbnQpCi0gICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0g
bV92YWx1ZS0+Y2hpbGQoMCktPmNlaWxDb25zdGFudChtX3Byb2MpKSB7Ci0gICAgICAgICAgICAg
ICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQ2VpbChyb3VuZGVk
VmFsdWUpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHJvdW5kZWRWYWx1ZQotICAgICAgICAg
ICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5pc1JvdW5kZWQoKSkgewotICAgICAgICAgICAgICAg
IHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2Fz
ZSBGbG9vcjoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRmxvb3IoY29uc3RhbnQpCi0gICAg
ICAgICAgICAvLyBJbnRvIHRoaXM6IGZsb29yPHZhbHVlLT50eXBlKCk+KGNvbnN0YW50KQotICAg
ICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDApLT5mbG9vckNv
bnN0YW50KG1fcHJvYykpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNv
bnN0YW50KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgLy8gVHVybiB0aGlzOiBGbG9vcihyb3VuZGVkVmFsdWUpCi0gICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IHJvdW5kZWRWYWx1ZQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDAp
LT5pc1JvdW5kZWQoKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92
YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTcXJ0OgotICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBTcXJ0KGNvbnN0YW50KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBzcXJ0
PHZhbHVlLT50eXBlKCk+KGNvbnN0YW50KQotICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFu
dCA9IG1fdmFsdWUtPmNoaWxkKDApLT5zcXJ0Q29uc3RhbnQobV9wcm9jKSkgewotICAgICAgICAg
ICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBC
aXR3aXNlQ2FzdDoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0d2lzZUNhc3QoY29uc3Rh
bnQpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGJpdHdpc2VfY2FzdDx2YWx1ZS0+dHlwZSgp
Pihjb25zdGFudCkKLSAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3ZhbHVlLT5j
aGlsZCgwKS0+Yml0d2lzZUNhc3RDb25zdGFudChtX3Byb2MpKSB7Ci0gICAgICAgICAgICAgICAg
cmVwbGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0d2lzZUNhc3QoQml0
d2lzZUNhc3QodmFsdWUpKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZQotICAgICAg
ICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXR3aXNlQ2FzdCkgewot
ICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCktPmNo
aWxkKDApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU0V4dDg6Ci0gICAgICAgICAgICAvLyBUdXJuIHRo
aXM6IFNFeHQ4KGNvbnN0YW50KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBzdGF0aWNfY2Fz
dDxpbnQ4X3Q+KGNvbnN0YW50KQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5o
YXNJbnQzMigpKSB7Ci0gICAgICAgICAgICAgICAgaW50MzJfdCByZXN1bHQgPSBzdGF0aWNfY2Fz
dDxpbnQ4X3Q+KG1fdmFsdWUtPmNoaWxkKDApLT5hc0ludDMyKCkpOwotICAgICAgICAgICAgICAg
IHJlcGxhY2VXaXRoTmV3VmFsdWUobV9wcm9jLmFkZEludENvbnN0YW50KG1fdmFsdWUsIHJlc3Vs
dCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAvLyBUdXJuIHRoaXM6IFNFeHQ4KFNFeHQ4KHZhbHVlKSkKLSAgICAgICAgICAgIC8vICAgb3Ig
dGhpczogU0V4dDgoU0V4dDE2KHZhbHVlKSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogU0V4
dDgodmFsdWUpCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09
IFNFeHQ4IHx8IG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBTRXh0MTYpIHsKLSAgICAg
ICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgw
KTsKLSAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdEFuZCAmJiBt
X3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhhc0ludDMyKCkpIHsKLSAgICAgICAgICAgICAg
ICBWYWx1ZSogaW5wdXQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAg
ICAgICAgaW50MzJfdCBtYXNrID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5hc0ludDMy
KCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0
OChCaXRBbmQoaW5wdXQsIG1hc2spKSB3aGVyZSAobWFzayAmIDB4ZmYpID09IDB4ZmYKLSAgICAg
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNFeHQ4KGlucHV0KQotICAgICAgICAgICAgICAgIGlm
ICgobWFzayAmIDB4ZmYpID09IDB4ZmYpIHsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+
Y2hpbGQoMCkgPSBpbnB1dDsKLSAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDgoQml0QW5kKGlucHV0
LCBtYXNrKSkgd2hlcmUgKG1hc2sgJiAweDgwKSA9PSAwCi0gICAgICAgICAgICAgICAgLy8gSW50
byB0aGlzOiBCaXRBbmQoaW5wdXQsIGNvbnN0ICYgMHg3ZikKLSAgICAgICAgICAgICAgICBpZiAo
IShtYXNrICYgMHg4MCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcHJvYy5hZGQ8VmFsdWU+KAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEJpdEFuZCwgbV92YWx1ZS0+b3JpZ2luKCksIGlucHV0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDMyVmFs
dWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBtX3ZhbHVlLT5v
cmlnaW4oKSwgbWFzayAmIDB4N2YpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKCFtX3Byb2MuaGFzUXVpcmtzKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6
IFNFeHQ4KEF0b21pY1hjaGdfX18pCi0gICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBdG9t
aWNYY2hnX19fCi0gICAgICAgICAgICAgICAgaWYgKGlzQXRvbWljWGNoZyhtX3ZhbHVlLT5jaGls
ZCgwKS0+b3Bjb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDAp
LT5hczxBdG9taWNWYWx1ZT4oKS0+YWNjZXNzV2lkdGgoKSA9PSBXaWR0aDgpIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU0V4dDE2OgotICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBTRXh0MTYoY29uc3RhbnQpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6
IHN0YXRpY19jYXN0PGludDE2X3Q+KGNvbnN0YW50KQotICAgICAgICAgICAgaWYgKG1fdmFsdWUt
PmNoaWxkKDApLT5oYXNJbnQzMigpKSB7Ci0gICAgICAgICAgICAgICAgaW50MzJfdCByZXN1bHQg
PSBzdGF0aWNfY2FzdDxpbnQxNl90PihtX3ZhbHVlLT5jaGlsZCgwKS0+YXNJbnQzMigpKTsKLSAg
ICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fcHJvYy5hZGRJbnRDb25zdGFudCht
X3ZhbHVlLCByZXN1bHQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0MTYoU0V4dDE2KHZhbHVlKSkKLSAgICAg
ICAgICAgIC8vIEludG8gdGhpczogU0V4dDE2KHZhbHVlKQotICAgICAgICAgICAgaWYgKG1fdmFs
dWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBTRXh0MTYpIHsKLSAgICAgICAgICAgICAgICBtX3Zh
bHVlLT5jaGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAg
ICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBU
dXJuIHRoaXM6IFNFeHQxNihTRXh0OCh2YWx1ZSkpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6
IFNFeHQ4KHZhbHVlKQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUo
KSA9PSBTRXh0OCkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1
ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdEFuZCAmJiBt
X3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhhc0ludDMyKCkpIHsKLSAgICAgICAgICAgICAg
ICBWYWx1ZSogaW5wdXQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAg
ICAgICAgaW50MzJfdCBtYXNrID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5hc0ludDMy
KCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0
MTYoQml0QW5kKGlucHV0LCBtYXNrKSkgd2hlcmUgKG1hc2sgJiAweGZmZmYpID09IDB4ZmZmZgot
ICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogU0V4dDE2KGlucHV0KQotICAgICAgICAgICAg
ICAgIGlmICgobWFzayAmIDB4ZmZmZikgPT0gMHhmZmZmKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG1fdmFsdWUtPmNoaWxkKDApID0gaW5wdXQ7Ci0gICAgICAgICAgICAgICAgICAgIG1fY2hhbmdl
ZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNFeHQxNihC
aXRBbmQoaW5wdXQsIG1hc2spKSB3aGVyZSAobWFzayAmIDB4ODAwMCkgPT0gMAotICAgICAgICAg
ICAgICAgIC8vIEludG8gdGhpczogQml0QW5kKGlucHV0LCBjb25zdCAmIDB4N2ZmZikKLSAgICAg
ICAgICAgICAgICBpZiAoIShtYXNrICYgMHg4MDAwKSkgewotICAgICAgICAgICAgICAgICAgICBy
ZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmFkZDxW
YWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0QW5kLCBtX3ZhbHVlLT5vcmln
aW4oKSwgaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0PENvbnN0MzJWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
aW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCBtYXNrICYgMHg3ZmZmKSkpOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmICghbV9wcm9jLmhhc1F1aXJrcygpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHVy
biB0aGlzOiBTRXh0MTYoQXRvbWljWGNoZ19fXykKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IEF0b21pY1hjaGdfX18KLSAgICAgICAgICAgICAgICBpZiAoaXNBdG9taWNYY2hnKG1fdmFs
dWUtPmNoaWxkKDApLT5vcGNvZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+
Y2hpbGQoMCktPmFzPEF0b21pY1ZhbHVlPigpLT5hY2Nlc3NXaWR0aCgpID09IFdpZHRoMTYpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgw
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU0V4dDMyOgotICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0MzIoY29uc3RhbnQpCi0gICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IHN0YXRpY19jYXN0PGludDY0X3Q+KGNvbnN0YW50KQotICAgICAgICAgICAgaWYg
KG1fdmFsdWUtPmNoaWxkKDApLT5oYXNJbnQzMigpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFj
ZVdpdGhOZXdWYWx1ZShtX3Byb2MuYWRkSW50Q29uc3RhbnQobV92YWx1ZSwgbV92YWx1ZS0+Y2hp
bGQoMCktPmFzSW50MzIoKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNFeHQzMihCaXRBbmQoaW5wdXQsIG1hc2sp
KSB3aGVyZSAobWFzayAmIDB4ODAwMDAwMDApID09IDAKLSAgICAgICAgICAgIC8vIEludG8gdGhp
czogWkV4dDMyKEJpdEFuZChpbnB1dCwgbWFzaykpCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+
Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdEFuZCAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQo
MSktPmhhc0ludDMyKCkKLSAgICAgICAgICAgICAgICAmJiAhKG1fdmFsdWUtPmNoaWxkKDApLT5j
aGlsZCgxKS0+YXNJbnQzMigpICYgMHg4MDAwMDAwMCkpIHsKLSAgICAgICAgICAgICAgICByZXBs
YWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgICAgICBtX3Byb2MuYWRkPFZhbHVlPigK
LSAgICAgICAgICAgICAgICAgICAgICAgIFpFeHQzMiwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFs
dWUtPmNoaWxkKDApKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFpFeHQzMjoKLSAgICAgICAgICAgIC8v
IFR1cm4gdGhpczogWkV4dDMyKGNvbnN0YW50KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBz
dGF0aWNfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNvbnN0YW50KSkKLSAg
ICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aGFzSW50MzIoKSkgewotICAgICAgICAg
ICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgICAgIG1fcHJvYy5h
ZGRJbnRDb25zdGFudCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KG1fdmFsdWUtPmNoaWxkKDApLT5hc0ludDMyKCkpKSkpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBU
cnVuYzoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogVHJ1bmMoY29uc3RhbnQpCi0gICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IHN0YXRpY19jYXN0PGludDMyX3Q+KGNvbnN0YW50KQotICAgICAg
ICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5oYXNJbnQ2NCgpIHx8IG1fdmFsdWUtPmNoaWxk
KDApLT5oYXNEb3VibGUoKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUo
Ci0gICAgICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRJbnRDb25zdGFudChtX3ZhbHVlLCBzdGF0
aWNfY2FzdDxpbnQzMl90PihtX3ZhbHVlLT5jaGlsZCgwKS0+YXNJbnQ2NCgpKSkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRo
aXM6IFRydW5jKFNFeHQzMih2YWx1ZSkpIG9yIFRydW5jKFpFeHQzMih2YWx1ZSkpCi0gICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IHZhbHVlCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQo
MCktPm9wY29kZSgpID09IFNFeHQzMiB8fCBtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0g
WkV4dDMyKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5j
aGlsZCgwKS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFRydW5jKE9wKHZhbHVlLCBjb25zdGFudCkp
Ci0gICAgICAgICAgICAvLyAgICAgd2hlcmUgIShjb25zdGFudCAmIDB4ZmZmZmZmZmYpCi0gICAg
ICAgICAgICAvLyAgICAgICBhbmQgT3AgaXMgQWRkLCBTdWIsIEJpdE9yLCBvciBCaXRYb3IKLSAg
ICAgICAgICAgIC8vIGludG8gdGhpczogVHJ1bmModmFsdWUpCi0gICAgICAgICAgICBzd2l0Y2gg
KG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSkgewotICAgICAgICAgICAgY2FzZSBBZGQ6Ci0g
ICAgICAgICAgICBjYXNlIFN1YjoKLSAgICAgICAgICAgIGNhc2UgQml0T3I6Ci0gICAgICAgICAg
ICBjYXNlIEJpdFhvcjoKLSAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmNo
aWxkKDEpLT5oYXNJbnQ2NCgpCi0gICAgICAgICAgICAgICAgICAgICYmICEobV92YWx1ZS0+Y2hp
bGQoMCktPmNoaWxkKDEpLT5hc0ludDY0KCkgJiAweGZmZmZmZmZmbGwpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDAp
OwotICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJVG9EOgotICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBJVG9EKGNvbnN0YW50KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBD
b25zdERvdWJsZShjb25zdGFudCkKLSAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBt
X3ZhbHVlLT5jaGlsZCgwKS0+aVRvRENvbnN0YW50KG1fcHJvYykpIHsKLSAgICAgICAgICAgICAg
ICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0YW50KTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSVRvRjoK
LSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogSVRvRihjb25zdGFudCkKLSAgICAgICAgICAgIC8v
IEludG8gdGhpczogQ29uc3RGbG9hdChjb25zdGFudCkKLSAgICAgICAgICAgIGlmIChWYWx1ZSog
Y29uc3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+aVRvRkNvbnN0YW50KG1fcHJvYykpIHsKLSAg
ICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0YW50KTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IGNhc2UgRmxvYXRUb0RvdWJsZToKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRmxvYXRUb0Rv
dWJsZShjb25zdGFudCkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQ29uc3REb3VibGUoY29u
c3RhbnQpCi0gICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQo
MCktPmZsb2F0VG9Eb3VibGVDb25zdGFudChtX3Byb2MpKSB7Ci0gICAgICAgICAgICAgICAgcmVw
bGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIERvdWJsZVRvRmxv
YXQ6Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IERvdWJsZVRvRmxvYXQoRmxvYXRUb0RvdWJs
ZSh2YWx1ZSkpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHZhbHVlCi0gICAgICAgICAgICBp
ZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEZsb2F0VG9Eb3VibGUpIHsKLSAgICAg
ICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgw
KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IC8vIFR1cm4gdGhpczogRG91YmxlVG9GbG9hdChjb25zdGFudCkKLSAgICAgICAgICAgIC8vIElu
dG8gdGhpczogQ29uc3RGbG9hdChjb25zdGFudCkKLSAgICAgICAgICAgIGlmIChWYWx1ZSogY29u
c3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+ZG91YmxlVG9GbG9hdENvbnN0YW50KG1fcHJvYykp
IHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0YW50KTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworY2xh
c3MgUmVkdWNlU3RyZW5ndGggeworcHVibGljOgorICAgIFJlZHVjZVN0cmVuZ3RoKFByb2NlZHVy
ZSYgcHJvYykKKyAgICAgICAgOiBtX3Byb2MocHJvYykKKyAgICAgICAgLCBtX2luc2VydGlvblNl
dChwcm9jKQorICAgICAgICAsIG1fYmxvY2tJbnNlcnRpb25TZXQocHJvYykKKyAgICB7CisgICAg
fQogCi0gICAgICAgIGNhc2UgU2VsZWN0OgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTZWxl
Y3QoY29uc3RhbnQsIGEsIGIpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50ID8g
YSA6IGIKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aGFzSW50MzIoKSkgewot
ICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkoCi0gICAgICAgICAgICAgICAgICAg
IG1fdmFsdWUtPmNoaWxkKDApLT5hc0ludDMyKCkgPyBtX3ZhbHVlLT5jaGlsZCgxKSA6IG1fdmFs
dWUtPmNoaWxkKDIpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAg
ICBib29sIHJ1bigpCisgICAgeworICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgICAg
ICBib29sIGZpcnN0ID0gdHJ1ZTsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOworICAgICAg
ICBkbyB7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fY2hh
bmdlZENGRyA9IGZhbHNlOworICAgICAgICAgICAgKytpbmRleDsKIAotICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBTZWxlY3QoRXF1YWwoeCwgMCksIGEsIGIpCi0gICAgICAgICAgICAvLyBJbnRv
IHRoaXM6IFNlbGVjdCh4LCBiLCBhKQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDAp
LT5vcGNvZGUoKSA9PSBFcXVhbCAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50
KDApKSB7Ci0gICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGls
ZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgc3RkOjpzd2FwKG1fdmFsdWUtPmNoaWxk
KDEpLCBtX3ZhbHVlLT5jaGlsZCgyKSk7Ci0gICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChmaXJzdCkKKyAgICAg
ICAgICAgICAgICBmaXJzdCA9IGZhbHNlOworICAgICAgICAgICAgZWxzZSBpZiAoQjNSZWR1Y2VT
dHJlbmd0aEludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiQjMg
YWZ0ZXIgaXRlcmF0aW9uICMiLCBpbmRleCAtIDEsICIgb2YgcmVkdWNlU3RyZW5ndGg6XG4iKTsK
KyAgICAgICAgICAgICAgICBkYXRhTG9nKG1fcHJvYyk7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIC8vIFR1cm4gdGhpczogU2VsZWN0KEJpdFhvcihib29sLCAxKSwgYSwgYikKLSAgICAg
ICAgICAgIC8vIEludG8gdGhpczogU2VsZWN0KGJvb2wsIGIsIGEpCi0gICAgICAgICAgICBpZiAo
bV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdFhvcgotICAgICAgICAgICAgICAgICYm
IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQzMigxKQotICAgICAgICAgICAgICAg
ICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKS0+cmV0dXJuc0Jvb2woKSkgewotICAgICAg
ICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDAp
OwotICAgICAgICAgICAgICAgIHN0ZDo6c3dhcChtX3ZhbHVlLT5jaGlsZCgxKSwgbV92YWx1ZS0+
Y2hpbGQoMikpOwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBzaW1wbGlmeUNGRygpOwog
Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNlbGVjdChCaXRBbmQoYm9vbCwgeHl6MSksIGEs
IGIpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNlbGVjdChib29sLCBhLCBiKQotICAgICAg
ICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXRBbmQKLSAgICAgICAg
ICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhhc0ludCgpCi0gICAgICAg
ICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5hc0ludCgpICYgMQotICAg
ICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKS0+cmV0dXJuc0Jvb2wo
KSkgewotICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQo
MCktPmNoaWxkKDApOworICAgICAgICAgICAgaWYgKG1fY2hhbmdlZENGRykgeworICAgICAgICAg
ICAgICAgIG1fcHJvYy5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgICAgICAgICAgICAgIG1fcHJv
Yy5pbnZhbGlkYXRlQ0ZHKCk7CiAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVy
biB0aGlzOiBTZWxlY3Qoc3R1ZmYsIHgsIHgpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHgK
LSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKSA9PSBtX3ZhbHVlLT5jaGlsZCgyKSkg
ewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMSkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJl
YWs7CiAKLSAgICAgICAgY2FzZSBMb2FkOFo6Ci0gICAgICAgIGNhc2UgTG9hZDhTOgotICAgICAg
ICBjYXNlIExvYWQxNlo6Ci0gICAgICAgIGNhc2UgTG9hZDE2UzoKLSAgICAgICAgY2FzZSBMb2Fk
OgotICAgICAgICBjYXNlIFN0b3JlODoKLSAgICAgICAgY2FzZSBTdG9yZTE2OgotICAgICAgICBj
YXNlIFN0b3JlOiB7Ci0gICAgICAgICAgICBWYWx1ZSogYWRkcmVzcyA9IG1fdmFsdWUtPmxhc3RD
aGlsZCgpOwotICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IG1fdmFsdWUtPmFzPE1l
bW9yeVZhbHVlPigpOwotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IExvYWQoQWRkKGFkZHJl
c3MsIG9mZnNldDEpLCBvZmZzZXQgPSBvZmZzZXQyKQotICAgICAgICAgICAgLy8gSW50byB0aGlz
OiBMb2FkKGFkZHJlc3MsIG9mZnNldCA9IG9mZnNldDEgKyBvZmZzZXQyKQorICAgICAgICAgICAg
Ly8gV2UgZGVmaW5pdGVseSB3YW50IHRvIGRvIERDRSBiZWZvcmUgd2UgZG8gQ1NFIHNvIHRoYXQg
d2UgZG9uJ3QgaG9pc3QgdGhpbmdzLiBGb3IKKyAgICAgICAgICAgIC8vIGV4YW1wbGU6CiAgICAg
ICAgICAgICAvLwotICAgICAgICAgICAgLy8gQWxzbyB0dXJucyB0aGlzOiBTdG9yZSh2YWx1ZSwg
QWRkKGFkZHJlc3MsIG9mZnNldDEpLCBvZmZzZXQgPSBvZmZzZXQyKQotICAgICAgICAgICAgLy8g
SW50byB0aGlzOiBTdG9yZSh2YWx1ZSwgYWRkcmVzcywgb2Zmc2V0ID0gb2Zmc2V0MSArIG9mZnNl
dDIpCi0gICAgICAgICAgICBpZiAoYWRkcmVzcy0+b3Bjb2RlKCkgPT0gQWRkICYmIGFkZHJlc3Mt
PmNoaWxkKDEpLT5oYXNJbnRQdHIoKSkgewotICAgICAgICAgICAgICAgIGludHB0cl90IG9mZnNl
dCA9IGFkZHJlc3MtPmNoaWxkKDEpLT5hc0ludFB0cigpOwotICAgICAgICAgICAgICAgIGlmICgh
c3VtT3ZlcmZsb3dzPGludHB0cl90PihvZmZzZXQsIG1lbW9yeS0+b2Zmc2V0KCkpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG9mZnNldCArPSBtZW1vcnktPm9mZnNldCgpOwotICAgICAgICAgICAg
ICAgICAgICBWYWx1ZTo6T2Zmc2V0VHlwZSBzbWFsbE9mZnNldCA9IHN0YXRpY19jYXN0PFZhbHVl
OjpPZmZzZXRUeXBlPihvZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc21hbGxPZmZz
ZXQgPT0gb2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzID0gYWRkcmVz
cy0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnktPmxhc3RDaGlsZCgp
ID0gYWRkcmVzczsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeS0+c2V0T2Zmc2V0KHNt
YWxsT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTG9hZChjb25zdGFudDEsIG9mZnNldCA9IGNvbnN0
YW50MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogTG9hZChjb25zdGFudDEgKyBjb25zdGFu
dDIpCisgICAgICAgICAgICAvLyBAZGVhZCA9IE11bChAYSwgQGIpCisgICAgICAgICAgICAvLyAu
Li4gbG90cyBvZiBjb250cm9sIGZsb3cgYW5kIHN0dWZmCisgICAgICAgICAgICAvLyBAdGhpbmcg
PSBNdWwoQGEsIEBiKQogICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBm
dW4gY2Fub25pY2FsaXphdGlvbi4gSXQgcHVyZWx5IHJlZ3Jlc3NlcyBuYWl2ZWx5IGdlbmVyYXRl
ZCBjb2RlLiBXZSByZWx5Ci0gICAgICAgICAgICAvLyBvbiBjb25zdGFudCBtYXRlcmlhbGl6YXRp
b24gdG8gYmUgc21hcnQgZW5vdWdoIHRvIG1hdGVyaWFsaXplIHRoaXMgY29uc3RhbnQgdGhlIHNt
YXJ0Ci0gICAgICAgICAgICAvLyB3YXkuIFdlIHdhbnQgdGhpcyBjYW5vbmljYWxpemF0aW9uIGJl
Y2F1c2Ugd2Ugd2FudCB0byBrbm93IGlmIHR3byBtZW1vcnkgYWNjZXNzZXMgc2VlCi0gICAgICAg
ICAgICAvLyB0aGUgc2FtZSBhZGRyZXNzLgotICAgICAgICAgICAgaWYgKG1lbW9yeS0+b2Zmc2V0
KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoVmFsdWUqIG5ld0FkZHJlc3MgPSBhZGRyZXNzLT5h
ZGRDb25zdGFudChtX3Byb2MsIG1lbW9yeS0+b2Zmc2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydFZhbHVlKG1faW5kZXgsIG5ld0FkZHJlc3MpOwotICAg
ICAgICAgICAgICAgICAgICBhZGRyZXNzID0gbmV3QWRkcmVzczsKLSAgICAgICAgICAgICAgICAg
ICAgbWVtb3J5LT5sYXN0Q2hpbGQoKSA9IG5ld0FkZHJlc3M7Ci0gICAgICAgICAgICAgICAgICAg
IG1lbW9yeS0+c2V0T2Zmc2V0KDApOwotICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0
cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIC8vIElmIHdlIGRvIENTRSBi
ZWZvcmUgRENFLCB3ZSB3aWxsIHJlbW92ZSBAdGhpbmcgYW5kIGtlZXAgQGRlYWQuIEVmZmVjdGl2
ZWx5LCB3ZSB3aWxsCisgICAgICAgICAgICAvLyAiaG9pc3QiIEB0aGluZy4gT24gdGhlIG90aGVy
IGhhbmQsIGlmIHdlIHJ1biBEQ0UgYmVmb3JlIENTRSwgd2Ugd2lsbCBraWxsIEBkZWFkIGFuZAor
ICAgICAgICAgICAgLy8ga2VlcCBAdGhpbmcuIFRoYXQncyBiZXR0ZXIsIHNpbmNlIHdlIHVzdWFs
bHkgd2FudCB0aGluZ3MgdG8gc3RheSB3aGVyZXZlciB0aGUgY2xpZW50CisgICAgICAgICAgICAv
LyBwdXQgdGhlbS4gV2UncmUgbm90IGFjdHVhbGx5IHNtYXJ0IGVub3VnaCB0byBtb3ZlIHRoaW5n
cyBhcm91bmQgYXQgcmFuZG9tLgorICAgICAgICAgICAgbV9jaGFuZ2VkIHw9IGVsaW1pbmF0ZURl
YWRDb2RlSW1wbChtX3Byb2MpOwogCi0gICAgICAgIGNhc2UgQ0NhbGw6IHsKLSAgICAgICAgICAg
IC8vIFR1cm4gdGhpczogQ2FsbChmbW9kLCBjb25zdGFudDEsIGNvbnN0YW50MikKLSAgICAgICAg
ICAgIC8vIEludG8gdGhpczogZmNhbGwtY29uc3RhbnQoY29uc3RhbnQxLCBjb25zdGFudDIpCi0g
ICAgICAgICAgICBhdXRvKiBmbW9kRG91YmxlID0gdGFnQ0Z1bmN0aW9uUHRyPGRvdWJsZSAoKiko
ZG91YmxlLCBkb3VibGUpPihmbW9kLCBCM0NDYWxsUHRyVGFnKTsKLSAgICAgICAgICAgIGlmICht
X3ZhbHVlLT50eXBlKCkgPT0gRG91YmxlCi0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+bnVt
Q2hpbGRyZW4oKSA9PSAzCi0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmlz
SW50UHRyKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZtb2REb3VibGUpKQotICAgICAgICAg
ICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT50eXBlKCkgPT0gRG91YmxlCi0gICAgICAgICAg
ICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMiktPnR5cGUoKSA9PSBEb3VibGUpIHsKLSAgICAgICAg
ICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNoaWxkKDEpLT5tb2RDb25zdGFu
dChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDIpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEVxdWFsOgotICAgICAgICAgICAgaGFu
ZGxlQ29tbXV0YXRpdml0eSgpOwotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEVxdWFsKGJv
b2wsIDApCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdFhvcihib29sLCAxKQotICAgICAg
ICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5yZXR1cm5zQm9vbCgpICYmIG1fdmFsdWUtPmNo
aWxkKDEpLT5pc0ludDMyKDApKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFs
dWU+KAotICAgICAgICAgICAgICAgICAgICBCaXRYb3IsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3Zh
bHVlLT5jaGlsZCgwKSwKLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
PENvbnN0MzJWYWx1ZT4obV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIDEpKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Ly8gVHVybiB0aGlzIEVxdWFsKGJvb2wsIDEpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGJv
b2wKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+cmV0dXJuc0Jvb2woKSAmJiBt
X3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQzMigxKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VX
aXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgc2ltcGxpZnlTU0EoKTsKIAotICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBFcXVhbChjb25zdDEsIGNvbnN0MikKLSAgICAgICAgICAgIC8vIEludG8g
dGhpczogY29uc3QxID09IGNvbnN0MgotICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgK
LSAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KAotICAgICAgICAgICAgICAg
ICAgICBtX3ZhbHVlLT5vcmlnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hp
bGQoMCktPmVxdWFsQ29uc3RhbnQobV92YWx1ZS0+Y2hpbGQoMSkpKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIE5vdEVxdWFsOgotICAgICAgICAgICAg
aGFuZGxlQ29tbXV0YXRpdml0eSgpOwotCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQo
MCktPnJldHVybnNCb29sKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE5vdEVx
dWFsKGJvb2wsIDApCi0gICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBib29sCi0gICAgICAg
ICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludDMyKDApKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBOb3RFcXVhbChib29sLCAxKQotICAgICAg
ICAgICAgICAgIC8vIEludG8gdGhpczogRXF1YWwoYm9vbCwgMCkKLSAgICAgICAgICAgICAgICBp
ZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50MzIoMSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
cmVwbGFjZVdpdGhOZXc8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgRXF1YWwsIG1f
dmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydEludENvbnN0YW50KG1faW5kZXgsIG1fdmFsdWUtPm9y
aWdpbigpLCBJbnQzMiwgMCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9wcm9jLm9wdExldmVsKCkgPj0gMikgeworICAg
ICAgICAgICAgICAgIG1fcHJvYy5yZXNldFZhbHVlT3duZXJzKCk7CisgICAgICAgICAgICAgICAg
bV9kb21pbmF0b3JzID0gJm1fcHJvYy5kb21pbmF0b3JzKCk7IC8vIFJlY29tcHV0ZSBpZiBuZWNl
c3NhcnkuCisgICAgICAgICAgICAgICAgbV9wdXJlQ1NFLmNsZWFyKCk7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTm90RXF1YWwoY29uc3QxLCBjb25zdDIpCi0g
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0MSAhPSBjb25zdDIKLSAgICAgICAgICAgIHJl
cGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFu
dCgKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+b3JpZ2luKCksCi0gICAgICAgICAgICAg
ICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLT5ub3RFcXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxk
KDEpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBMZXNzVGhhbjoKLSAg
ICAgICAgY2FzZSBHcmVhdGVyVGhhbjoKLSAgICAgICAgY2FzZSBMZXNzRXF1YWw6Ci0gICAgICAg
IGNhc2UgR3JlYXRlckVxdWFsOgotICAgICAgICBjYXNlIEFib3ZlOgotICAgICAgICBjYXNlIEJl
bG93OgotICAgICAgICBjYXNlIEFib3ZlRXF1YWw6Ci0gICAgICAgIGNhc2UgQmVsb3dFcXVhbDog
ewotICAgICAgICAgICAgQ2Fub25pY2FsaXplZENvbXBhcmlzb24gY29tcGFyaXNvbiA9IGNhbm9u
aWNhbGl6ZUNvbXBhcmlzb24obV92YWx1ZSk7Ci0gICAgICAgICAgICBUcmlTdGF0ZSByZXN1bHQg
PSBNaXhlZFRyaVN0YXRlOwotICAgICAgICAgICAgc3dpdGNoIChjb21wYXJpc29uLm9wY29kZSkg
ewotICAgICAgICAgICAgY2FzZSBMZXNzVGhhbjoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBj
b21wYXJpc29uLm9wZXJhbmRzWzFdLT5ncmVhdGVyVGhhbkNvbnN0YW50KGNvbXBhcmlzb24ub3Bl
cmFuZHNbMF0pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBHcmVh
dGVyVGhhbjoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21wYXJpc29uLm9wZXJhbmRzWzFd
LT5sZXNzVGhhbkNvbnN0YW50KGNvbXBhcmlzb24ub3BlcmFuZHNbMF0pOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBMZXNzRXF1YWw6Ci0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gY29tcGFyaXNvbi5vcGVyYW5kc1sxXS0+Z3JlYXRlckVxdWFsQ29uc3RhbnQoY29t
cGFyaXNvbi5vcGVyYW5kc1swXSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIEdyZWF0ZXJFcXVhbDoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21wYXJpc29u
Lm9wZXJhbmRzWzFdLT5sZXNzRXF1YWxDb25zdGFudChjb21wYXJpc29uLm9wZXJhbmRzWzBdKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQWJvdmU6Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0ID0gY29tcGFyaXNvbi5vcGVyYW5kc1sxXS0+YmVsb3dDb25zdGFudChj
b21wYXJpc29uLm9wZXJhbmRzWzBdKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgQmVsb3c6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcGFyaXNvbi5vcGVy
YW5kc1sxXS0+YWJvdmVDb25zdGFudChjb21wYXJpc29uLm9wZXJhbmRzWzBdKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQWJvdmVFcXVhbDoKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSBjb21wYXJpc29uLm9wZXJhbmRzWzFdLT5iZWxvd0VxdWFsQ29uc3RhbnQo
Y29tcGFyaXNvbi5vcGVyYW5kc1swXSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIEJlbG93RXF1YWw6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcGFyaXNv
bi5vcGVyYW5kc1sxXS0+YWJvdmVFcXVhbENvbnN0YW50KGNvbXBhcmlzb24ub3BlcmFuZHNbMF0p
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgUGVlcGhvbGVPcHRpbWl6ZXIgcGVlcGhv
bGUobV9wcm9jLCBtX2luc2VydGlvblNldCk7CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogbV9wcm9jLmJsb2Nrc0luUHJlT3JkZXIoKSkgeworICAgICAgICAgICAgICAgIG1f
YmxvY2sgPSBibG9jazsKIAotICAgICAgICAgICAgaWYgKGF1dG8qIGNvbnN0YW50ID0gbV9wcm9j
LmFkZEJvb2xDb25zdGFudChtX3ZhbHVlLT5vcmlnaW4oKSwgcmVzdWx0KSkgewotICAgICAgICAg
ICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNvbXBhcmlzb24ub3Bjb2RlICE9
IG1fdmFsdWUtPm9wY29kZSgpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFs
dWU+KGNvbXBhcmlzb24ub3Bjb2RlLCBtX3ZhbHVlLT5vcmlnaW4oKSwgY29tcGFyaXNvbi5vcGVy
YW5kc1swXSwgY29tcGFyaXNvbi5vcGVyYW5kc1sxXSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgZm9yIChtX2luZGV4ID0gMDsgbV9pbmRleCA8IGJsb2NrLT5zaXpl
KCk7ICsrbV9pbmRleCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoQjNSZWR1Y2VTdHJlbmd0
aEludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMb29raW5nIGF0ICIsICpibG9jaywgIiAjIiwg
bV9pbmRleCwgIjogIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWVwRHVtcChtX3By
b2MsIGJsb2NrLT5hdChtX2luZGV4KSksICJcbiIpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBtX2Jsb2NrLT5hdChtX2luZGV4KTsKKyAgICAg
ICAgICAgICAgICAgICAgbV92YWx1ZS0+cGVyZm9ybVN1YnN0aXR1dGlvbigpOworICAgICAgICAg
ICAgICAgICAgICBwZWVwaG9sZS5zZXRJbmRleChtX2luZGV4KTsKKyAgICAgICAgICAgICAgICAg
ICAgcmVkdWNlVmFsdWVTdHJlbmd0aChwZWVwaG9sZSk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChtX3Byb2Mub3B0TGV2ZWwoKSA+PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFj
ZUlmUmVkdW5kYW50KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0LmV4ZWN1dGUobV9ibG9jayk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgRXF1YWxPclVub3JkZXJlZDoKLSAgICAg
ICAgICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKLQotICAgICAgICAgICAgLy8gVHVybiB0aGlz
OiBFcXVhbChjb25zdDEsIGNvbnN0MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogaXN1bm9y
ZGVyZWQoY29uc3QxLCBjb25zdDIpIHx8IGNvbnN0MSA9PSBjb25zdDIuCi0gICAgICAgICAgICAv
LyBUdXJuIHRoaXM6IEVxdWFsKHZhbHVlLCBjb25zdF9OYU4pCi0gICAgICAgICAgICAvLyBJbnRv
IHRoaXM6IDEuCi0gICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAg
ICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQoCi0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWUt
Pm9yaWdpbigpLAotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgxKS0+ZXF1YWxP
clVub3JkZXJlZENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDApKSkpOwotICAgICAgICAgICAgYnJl
YWs7CiAKLSAgICAgICAgY2FzZSBDaGVja0FkZDogewotICAgICAgICAgICAgaWYgKHJlcGxhY2VX
aXRoTmV3VmFsdWUobV92YWx1ZS0+Y2hpbGQoMCktPmNoZWNrQWRkQ29uc3RhbnQobV9wcm9jLCBt
X3ZhbHVlLT5jaGlsZCgxKSkpKQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
bV9jaGFuZ2VkQ0ZHIHw9IG1fYmxvY2tJbnNlcnRpb25TZXQuZXhlY3V0ZSgpOworICAgICAgICAg
ICAgaGFuZGxlQ2hhbmdlZENGR0lmTmVjZXNzYXJ5KCk7CiAKLSAgICAgICAgICAgIGhhbmRsZUNv
bW11dGF0aXZpdHkoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNo
aWxkKDEpLT5pc0ludCgwKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHko
bV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmVzdWx0IHw9IG1fY2hhbmdlZDsKKyAgICAgICAgfSB3aGlsZSAobV9j
aGFuZ2VkICYmIG1fcHJvYy5vcHRMZXZlbCgpID49IDIpOwogCi0gICAgICAgICAgICBJbnRSYW5n
ZSBsZWZ0UmFuZ2UgPSByYW5nZUZvcihtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICBJ
bnRSYW5nZSByaWdodFJhbmdlID0gcmFuZ2VGb3IobV92YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAg
ICAgICAgaWYgKCFsZWZ0UmFuZ2UuY291bGRPdmVyZmxvd0FkZChyaWdodFJhbmdlLCBtX3ZhbHVl
LT50eXBlKCkpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAg
ICAgICAgICAgICAgICAgbV9wcm9jLmFkZDxWYWx1ZT4oQWRkLCBtX3ZhbHVlLT5vcmlnaW4oKSwg
bV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKG1f
cHJvYy5vcHRMZXZlbCgpIDwgMikgeworICAgICAgICAgICAgbV9jaGFuZ2VkQ0ZHID0gZmFsc2U7
CisgICAgICAgICAgICBzaW1wbGlmeUNGRygpOworICAgICAgICAgICAgaGFuZGxlQ2hhbmdlZENG
R0lmTmVjZXNzYXJ5KCk7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIENoZWNrU3ViOiB7Ci0g
ICAgICAgICAgICBpZiAocmVwbGFjZVdpdGhOZXdWYWx1ZShtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hl
Y2tTdWJDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkpCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMCkp
IHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDAp
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKFZhbHVlKiBuZWdhdGVkQ29uc3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hlY2tOZWdD
b25zdGFudChtX3Byb2MpKSB7Ci0gICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
VmFsdWUobV9pbmRleCwgbmVnYXRlZENvbnN0YW50KTsKLSAgICAgICAgICAgICAgICBtX3ZhbHVl
LT5hczxDaGVja1ZhbHVlPigpLT5jb252ZXJ0VG9BZGQoKTsKLSAgICAgICAgICAgICAgICBtX3Zh
bHVlLT5jaGlsZCgxKSA9IG5lZ2F0ZWRDb25zdGFudDsKLSAgICAgICAgICAgICAgICBtX2NoYW5n
ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KIAotICAgICAgICAgICAgSW50UmFuZ2UgbGVmdFJhbmdl
ID0gcmFuZ2VGb3IobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgSW50UmFuZ2Ugcmln
aHRSYW5nZSA9IHJhbmdlRm9yKG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgIGlmICgh
bGVmdFJhbmdlLmNvdWxkT3ZlcmZsb3dTdWIocmlnaHRSYW5nZSwgbV92YWx1ZS0+dHlwZSgpKSkg
ewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAg
ICAgIG1fcHJvYy5hZGQ8VmFsdWU+KFN1YiwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNo
aWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQorcHJpdmF0ZToKKyAgICB2b2lkIHJlZHVjZVZhbHVlU3RyZW5ndGgoUGVlcGhv
bGVPcHRpbWl6ZXImIHBlZXBob2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5v
cGNvZGUoKSkgeworICAgICAgICBjYXNlIENDYWxsOgorICAgICAgICAgICAgbV9jaGFuZ2VkIHw9
IHBlZXBob2xlLnRyeVNpbXBsaWZ5Q0NhbGwobV92YWx1ZS0+YXM8Q0NhbGxWYWx1ZT4oKSk7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogCi0gICAgICAgIGNhc2UgQ2hlY2tNdWw6IHsK
LSAgICAgICAgICAgIGlmIChyZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNoaWxkKDApLT5j
aGVja011bENvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSkKLSAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDaGVja0FkZDoKKyAgICAgICAgICAgIG1fY2hhbmdl
ZCB8PSBwZWVwaG9sZS50cnlTaW1wbGlmeUNoZWNrQWRkKG1fdmFsdWUtPmFzPENoZWNrVmFsdWU+
KCkpOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0aXZp
dHkoKTsKLQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKSkgewot
ICAgICAgICAgICAgICAgIGJvb2wgbW9kaWZpZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHN3
aXRjaCAobV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50KCkpIHsKLSAgICAgICAgICAgICAgICBjYXNl
IDA6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUobV9wcm9jLmFkZElu
dENvbnN0YW50KG1fdmFsdWUsIDApKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50
aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5hczxDaGVj
a1ZhbHVlPigpLT5jb252ZXJ0VG9BZGQoKTsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+
Y2hpbGQoMSkgPSBtX3ZhbHVlLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgbV9jaGFu
Z2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWQgPSBmYWxzZTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlm
IChtb2RpZmllZCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgICAgICAgICBtX2NoYW5nZWQgfD0gcGVlcGhvbGUu
dHJ5U2ltcGxpZnlDaGVja1N1YihtX3ZhbHVlLT5hczxDaGVja1ZhbHVlPigpKTsKKyAgICAgICAg
ICAgIGJyZWFrOwogCi0gICAgICAgICAgICBJbnRSYW5nZSBsZWZ0UmFuZ2UgPSByYW5nZUZvciht
X3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICBJbnRSYW5nZSByaWdodFJhbmdlID0gcmFu
Z2VGb3IobV92YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgaWYgKCFsZWZ0UmFuZ2UuY291
bGRPdmVyZmxvd011bChyaWdodFJhbmdlLCBtX3ZhbHVlLT50eXBlKCkpKSB7Ci0gICAgICAgICAg
ICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmFk
ZDxWYWx1ZT4oTXVsLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFs
dWUtPmNoaWxkKDEpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgICAgICBtX2NoYW5nZWQgfD0gcGVlcGhvbGUu
dHJ5U2ltcGxpZnlDaGVja011bChtX3ZhbHVlLT5hczxDaGVja1ZhbHVlPigpKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9CiAKICAgICAgICAgY2FzZSBDaGVjazogewotICAgICAgICAg
ICAgQ2hlY2tWYWx1ZSogY2hlY2tWYWx1ZSA9IG1fdmFsdWUtPmFzPENoZWNrVmFsdWU+KCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChjaGVja1ZhbHVlLT5jaGlsZCgwKS0+aXNMaWtl
WmVybygpKSB7Ci0gICAgICAgICAgICAgICAgY2hlY2tWYWx1ZS0+cmVwbGFjZVdpdGhOb3AoKTsK
KyAgICAgICAgICAgIGlmIChwZWVwaG9sZS50cnlTaW1wbGlmeUNoZWNrKG1fdmFsdWUtPmFzPENo
ZWNrVmFsdWU+KCkpKSB7CiAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBtX2NoYW5nZWRDRkcgPSB0cnVlOyAvLyBBIGJpdCBjb25zZXJ2YXRpdmUsIGJ1
dCBzb3VuZC4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKGNoZWNrVmFsdWUtPmNoaWxkKDApLT5pc0xpa2VOb25aZXJvKCkpIHsKLSAgICAg
ICAgICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPQotICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8UGF0Y2hwb2ludFZhbHVlPihtX2luZGV4LCBWb2lk
LCBjaGVja1ZhbHVlLT5vcmlnaW4oKSk7Ci0KLSAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5l
ZmZlY3RzID0gRWZmZWN0cygpOwotICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMu
cmVhZHMgPSBIZWFwUmFuZ2U6OnRvcCgpOwotICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVm
ZmVjdHMuZXhpdHNTaWRld2F5cyA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAxOyBpIDwgY2hlY2tWYWx1ZS0+bnVtQ2hpbGRyZW4oKTsgKytpKQotICAgICAgICAg
ICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoY2hlY2tWYWx1ZS0+Y29uc3RyYWluZWRDaGls
ZChpKSk7Ci0KLSAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoY2hlY2tW
YWx1ZS0+Z2VuZXJhdG9yKCkpOwotCi0gICAgICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgcmVz
dCBvZiB0aGUgYmxvY2sgd2l0aCBhbiBPb3BzLgotICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1faW5kZXggKyAxOyBpIDwgbV9ibG9jay0+c2l6ZSgpIC0gMTsgKytpKQotICAgICAg
ICAgICAgICAgICAgICBtX2Jsb2NrLT5hdChpKS0+cmVwbGFjZVdpdGhCb3R0b20obV9pbnNlcnRp
b25TZXQsIG1faW5kZXgpOwotICAgICAgICAgICAgICAgIG1fYmxvY2stPmxhc3QoKS0+cmVwbGFj
ZVdpdGhPb3BzKG1fYmxvY2spOwotICAgICAgICAgICAgICAgIG1fYmxvY2stPmxhc3QoKS0+c2V0
T3JpZ2luKGNoZWNrVmFsdWUtPm9yaWdpbigpKTsKLQotICAgICAgICAgICAgICAgIC8vIFJlcGxh
Y2Ugb3Vyc2VsdmVzIGxhc3QuCi0gICAgICAgICAgICAgICAgY2hlY2tWYWx1ZS0+cmVwbGFjZVdp
dGhOb3AoKTsKLSAgICAgICAgICAgICAgICBtX2NoYW5nZWRDRkcgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY2hlY2tWYWx1
ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IE5vdEVxdWFsCi0gICAgICAgICAgICAgICAgJiYgY2hl
Y2tWYWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0ludCgwKSkgewotICAgICAgICAgICAgICAg
IGNoZWNrVmFsdWUtPmNoaWxkKDApID0gY2hlY2tWYWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwot
ICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGlmIChtX3Byb2Mub3B0TGV2ZWwoKSA8IDIpCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC0yMDU4LDYgKzI0OCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAv
LyBibG9ja3MuIFRoaXMgaXMgcHJldHR5IG11Y2ggZ3VhcmFudGVlZCBzaW5jZSBvbmUgb2YgdGhv
c2UgYmxvY2tzIHdpbGwgcmVwbGFjZSBhbGwKICAgICAgICAgICAgIC8vIHVzZXMgb2YgdGhlIFNl
bGVjdCB3aXRoIGEgY29uc3RhbnQsIGFuZCB0aGF0IGNvbnN0YW50IHdpbGwgYmUgdHJhbnNpdGl2
ZWx5IHVzZWQKICAgICAgICAgICAgIC8vIGZyb20gdGhlIGNoZWNrLgorICAgICAgICAgICAgLy8g
RklYTUU6IHRoZSBjb21tZW50IGFib3ZlIHRhbGtzIGFib3V0IGEgc2VsZWN0IHdpdGggb25lIGNv
bnN0YW50IG9wZXJhbmQsIGJ1dCB0aGUgY29kZSBiZWxvdworICAgICAgICAgICAgLy8gc2VhcmNo
ZXMgZm9yIG9uZSB3aXRoIGNvbnN0YW50cyBvbiBib3RoIHNpZGVzLgogICAgICAgICAgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIHNlbGVjdFNwZWNpYWxpemF0aW9uQm91bmQgPSAzOwogICAgICAg
ICAgICAgVmFsdWUqIHNlbGVjdCA9IGZpbmRSZWNlbnROb2RlTWF0Y2hpbmcoCiAgICAgICAgICAg
ICAgICAgbV92YWx1ZS0+Y2hpbGQoMCksIHNlbGVjdFNwZWNpYWxpemF0aW9uQm91bmQsCkBAIC0y
MDc0LDYyICsyNjYsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQnJh
bmNoOiB7Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJyYW5jaChOb3RFcXVhbCh4LCAwKSkK
LSAgICAgICAgICAgIC8vIEludG8gdGhpczogQnJhbmNoKHgpCi0gICAgICAgICAgICBpZiAobV92
YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IE5vdEVxdWFsICYmIG1fdmFsdWUtPmNoaWxkKDAp
LT5jaGlsZCgxKS0+aXNJbnQoMCkpIHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgw
KSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICBtX2NoYW5n
ZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJy
YW5jaChFcXVhbCh4LCAwKSwgdGhlbiwgZWxzZSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczog
QnJhbmNoKHgsIGVsc2UsIHRoZW4pCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCkt
Pm9wY29kZSgpID09IEVxdWFsICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQo
MCkpIHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxk
KDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICBzdGQ6OnN3YXAobV9ibG9jay0+dGFrZW4o
KSwgbV9ibG9jay0+bm90VGFrZW4oKSk7Ci0gICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gVHVybiB0aGlz
OiBCcmFuY2goQml0WG9yKGJvb2wsIDEpLCB0aGVuLCBlbHNlKQotICAgICAgICAgICAgLy8gSW50
byB0aGlzOiBCcmFuY2goYm9vbCwgZWxzZSwgdGhlbikKLSAgICAgICAgICAgIGlmIChtX3ZhbHVl
LT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0WG9yCi0gICAgICAgICAgICAgICAgJiYgbV92YWx1
ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0ludDMyKDEpCi0gICAgICAgICAgICAgICAgJiYgbV92
YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLT5yZXR1cm5zQm9vbCgpKSB7Ci0gICAgICAgICAgICAg
ICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAg
ICAgICAgICAgICAgc3RkOjpzd2FwKG1fYmxvY2stPnRha2VuKCksIG1fYmxvY2stPm5vdFRha2Vu
KCkpOwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQnJhbmNoKEJpdEFuZChib29sLCB4eWIxKSwgdGhl
biwgZWxzZSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQnJhbmNoKGJvb2wsIHRoZW4sIGVs
c2UpCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdEFu
ZAotICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aGFzSW50
KCkKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmFzSW50
KCkgJiAxCi0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLT5y
ZXR1cm5zQm9vbCgpKSB7Ci0gICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3Zh
bHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICBpZiAocGVlcGhvbGUudHJ5U2lt
cGxpZnlCcmFuY2gobV92YWx1ZSkpIHsKICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgIG1fY2hhbmdlZENGRyA9IHRydWU7IC8vIEEgYml0IGNvbnNlcnZh
dGl2ZSwgYnV0IG5ldmVyIHVuc291bmQuCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFRy
aVN0YXRlIHRyaVN0YXRlID0gbV92YWx1ZS0+Y2hpbGQoMCktPmFzVHJpU3RhdGUoKTsKLQotICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBCcmFuY2goMCwgdGhlbiwgZWxzZSkKLSAgICAgICAgICAg
IC8vIEludG8gdGhpczogSnVtcChlbHNlKQotICAgICAgICAgICAgaWYgKHRyaVN0YXRlID09IEZh
bHNlVHJpU3RhdGUpIHsKLSAgICAgICAgICAgICAgICBtX2Jsb2NrLT50YWtlbigpLmJsb2NrKCkt
PnJlbW92ZVByZWRlY2Vzc29yKG1fYmxvY2spOwotICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJl
cGxhY2VXaXRoSnVtcChtX2Jsb2NrLCBtX2Jsb2NrLT5ub3RUYWtlbigpKTsKLSAgICAgICAgICAg
ICAgICBtX2NoYW5nZWRDRkcgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJyYW5jaChub3QgMCwgdGhlbiwg
ZWxzZSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogSnVtcCh0aGVuKQotICAgICAgICAgICAg
aWYgKHRyaVN0YXRlID09IFRydWVUcmlTdGF0ZSkgewotICAgICAgICAgICAgICAgIG1fYmxvY2st
Pm5vdFRha2VuKCkuYmxvY2soKS0+cmVtb3ZlUHJlZGVjZXNzb3IobV9ibG9jayk7Ci0gICAgICAg
ICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhKdW1wKG1fYmxvY2ssIG1fYmxvY2stPnRha2Vu
KCkpOwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZENGRyA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtX3Byb2Mub3B0TGV2
ZWwoKSA+PSAyKSB7CisgICAgICAgICAgICBpZiAobV92YWx1ZS0+b3Bjb2RlKCkgPT0gQnJhbmNo
ICYmIG1fcHJvYy5vcHRMZXZlbCgpID49IDIpIHsKICAgICAgICAgICAgICAgICAvLyBJZiBhIGNo
ZWNrIGZvciB0aGUgc2FtZSBwcm9wZXJ0eSBkb21pbmF0ZXMgdXMsIHdlIGNhbiBraWxsIHRoZSBi
cmFuY2guIFRoaXMgc29ydAogICAgICAgICAgICAgICAgIC8vIG9mIG1ha2VzIHNlbnNlIGhlcmUg
YmVjYXVzZSBpdCdzIGNoZWFwLCBidXQgaGFja3MgbGlrZSB0aGlzIHNob3cgdGhhdCB3ZSdyZSBn
b2luZwogICAgICAgICAgICAgICAgIC8vIHRvIG5lZWQgU0NDUC4KQEAgLTIxNDcsNiArMjg5LDEw
IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgaWYgKFZhbHVlKiBuZXdWYWx1ZSA9IHBlZXBob2xlLnRyeVJlZHVjZShtX3Zh
bHVlKSkgeworICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobmV3VmFsdWUpOwor
ICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTIyOTIsMjQ5ICs0MzgsNiBAQCBwcml2
YXRlOgogICAgICAgICBwcmVkZWNlc3Nvci0+dXBkYXRlUHJlZGVjZXNzb3JzQWZ0ZXIoKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRTd2FwQmluYXJ5T3BlcmFuZHMoVmFsdWUqIHZh
bHVlKQotICAgIHsKLSAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGhhdmUgY29tbXV0YXRpdmUgb3Bl
cmF0aW9ucyB0aGF0IHRha2UgbW9yZSB0aGFuIHR3byBjaGlsZHJlbi4gVGhvc2Ugb3BlcmF0aW9u
cyBtYXkKLSAgICAgICAgLy8gY29tbXV0ZSB0aGVpciBmaXJzdCB0d28gY2hpbGRyZW4gd2hpbGUg
bGVhdmluZyB0aGUgcmVzdCB1bmFmZmVjdGVkLgotICAgICAgICBBU1NFUlQodmFsdWUtPm51bUNo
aWxkcmVuKCkgPj0gMik7Ci0KLSAgICAgICAgLy8gTGVhdmUgaXQgYWxvbmUgaWYgdGhlIHJpZ2h0
IGNoaWxkIGlzIGEgY29uc3RhbnQuCi0gICAgICAgIGlmICh2YWx1ZS0+Y2hpbGQoMSktPmlzQ29u
c3RhbnQoKQotICAgICAgICAgICAgfHwgdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBBdG9t
aWNTdHJvbmdDQVMpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKHZh
bHVlLT5jaGlsZCgwKS0+aXNDb25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICAgICAgaWYgKHZhbHVlLT5jaGlsZCgxKS0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FT
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgLy8gU29ydCB0aGUgb3BlcmFu
ZHMuIFRoaXMgaXMgYW4gaW1wb3J0YW50IGNhbm9uaWNhbGl6YXRpb24uIFdlIHVzZSB0aGUgaW5k
ZXggaW5zdGVhZCBvZgotICAgICAgICAvLyB0aGUgYWRkcmVzcyB0byBtYWtlIHRoaXMgYXQgbGVh
c3Qgc2xpZ2h0bHkgZGV0ZXJtaW5pc3RpYy4KLSAgICAgICAgaWYgKHZhbHVlLT5jaGlsZCgwKS0+
aW5kZXgoKSA+IHZhbHVlLT5jaGlsZCgxKS0+aW5kZXgoKSkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBUdXJuIHRoaXM6
IEFkZChjb25zdGFudCwgdmFsdWUpCi0gICAgLy8gSW50byB0aGlzOiBBZGQodmFsdWUsIGNvbnN0
YW50KQotICAgIC8vCi0gICAgLy8gQWxzbzoKLSAgICAvLyBUdXJuIHRoaXM6IEFkZCh2YWx1ZTEs
IHZhbHVlMikKLSAgICAvLyBJbnRvIHRoaXM6IEFkZCh2YWx1ZTIsIHZhbHVlMSkKLSAgICAvLyBJ
ZiB3ZSBkZWNpZGUgdGhhdCB2YWx1ZTIgY29taW5nIGZpcnN0IGlzIHRoZSBjYW5vbmljYWwgb3Jk
ZXJpbmcuCi0gICAgdm9pZCBoYW5kbGVDb21tdXRhdGl2aXR5KCkKLSAgICB7Ci0gICAgICAgIGlm
IChzaG91bGRTd2FwQmluYXJ5T3BlcmFuZHMobV92YWx1ZSkpIHsKLSAgICAgICAgICAgIHN0ZDo6
c3dhcChtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAg
bV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEZvciBPcD09QWRk
IG9yIFN1YiwgdHVybiBhbnkgb2YgdGhlc2U6Ci0gICAgLy8gICAgICBPcChNdWwoeDEsIHgyKSwg
TXVsKHgxLCB4MykpCi0gICAgLy8gICAgICBPcChNdWwoeDIsIHgxKSwgTXVsKHgxLCB4MykpCi0g
ICAgLy8gICAgICBPcChNdWwoeDEsIHgyKSwgTXVsKHgzLCB4MSkpCi0gICAgLy8gICAgICBPcChN
dWwoeDIsIHgxKSwgTXVsKHgzLCB4MSkpCi0gICAgLy8gSW50byB0aGlzOiBNdWwoeDEsIE9wKHgy
LCB4MykpCi0gICAgYm9vbCBoYW5kbGVNdWxEaXN0cmlidXRpdml0eSgpCi0gICAgewotICAgICAg
ICBBU1NFUlQobV92YWx1ZS0+b3Bjb2RlKCkgPT0gQWRkIHx8IG1fdmFsdWUtPm9wY29kZSgpID09
IFN1Yik7Ci0gICAgICAgIFZhbHVlKiB4MSA9IG51bGxwdHI7Ci0gICAgICAgIFZhbHVlKiB4MiA9
IG51bGxwdHI7Ci0gICAgICAgIFZhbHVlKiB4MyA9IG51bGxwdHI7Ci0gICAgICAgIGlmIChtX3Zh
bHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gTXVsICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5vcGNv
ZGUoKSA9PSBNdWwpIHsKLSAgICAgICAgICAgIFZhbHVlKiB4MSA9IG51bGxwdHI7Ci0gICAgICAg
ICAgICBWYWx1ZSogeDIgPSBudWxscHRyOwotICAgICAgICAgICAgVmFsdWUqIHgzID0gbnVsbHB0
cjsKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkgPT0gbV92YWx1
ZS0+Y2hpbGQoMSktPmNoaWxkKDApKSB7Ci0gICAgICAgICAgICAgICAgLy8gT3AoTXVsKHgxLCB4
MiksIE11bCh4MSwgeDMpKQotICAgICAgICAgICAgICAgIHgxID0gbV92YWx1ZS0+Y2hpbGQoMCkt
PmNoaWxkKDApOwotICAgICAgICAgICAgICAgIHgyID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxk
KDEpOwotICAgICAgICAgICAgICAgIHgzID0gbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpOwot
ICAgICAgICAgICAgfSBlbHNlIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkgPT0gbV92
YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDApKSB7Ci0gICAgICAgICAgICAgICAgLy8gT3AoTXVsKHgy
LCB4MSksIE11bCh4MSwgeDMpKQotICAgICAgICAgICAgICAgIHgxID0gbV92YWx1ZS0+Y2hpbGQo
MCktPmNoaWxkKDEpOwotICAgICAgICAgICAgICAgIHgyID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNo
aWxkKDApOwotICAgICAgICAgICAgICAgIHgzID0gbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEp
OwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkgPT0g
bV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpKSB7Ci0gICAgICAgICAgICAgICAgLy8gT3AoTXVs
KHgxLCB4MiksIE11bCh4MywgeDEpKQotICAgICAgICAgICAgICAgIHgxID0gbV92YWx1ZS0+Y2hp
bGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIHgyID0gbV92YWx1ZS0+Y2hpbGQoMCkt
PmNoaWxkKDEpOwotICAgICAgICAgICAgICAgIHgzID0gbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxk
KDApOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkg
PT0gbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpKSB7Ci0gICAgICAgICAgICAgICAgLy8gT3Ao
TXVsKHgyLCB4MSksIE11bCh4MywgeDEpKQotICAgICAgICAgICAgICAgIHgxID0gbV92YWx1ZS0+
Y2hpbGQoMCktPmNoaWxkKDEpOwotICAgICAgICAgICAgICAgIHgyID0gbV92YWx1ZS0+Y2hpbGQo
MCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIHgzID0gbV92YWx1ZS0+Y2hpbGQoMSktPmNo
aWxkKDApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICh4MSAhPSBudWxs
cHRyKSB7Ci0gICAgICAgICAgICBBU1NFUlQoeDIgIT0gbnVsbHB0ciAmJiB4MyAhPSBudWxscHRy
KTsKLSAgICAgICAgICAgIFZhbHVlKiBuZXdPcCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1
ZT4obV9pbmRleCwgbV92YWx1ZS0+b3Bjb2RlKCksIG1fdmFsdWUtPm9yaWdpbigpLCB4MiwgeDMp
OwotICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KE11bCwgbV92YWx1ZS0+b3JpZ2lu
KCksIHgxLCBuZXdPcCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gRm9yIE9wPT1CaXRPciBvciBCaXRY
b3IsIHR1cm4gYW55IG9mIHRoZXNlOgotICAgIC8vICAgICAgT3AoQml0QW5kKHgxLCB4MiksIEJp
dEFuZCh4MSwgeDMpKQotICAgIC8vICAgICAgT3AoQml0QW5kKHgyLCB4MSksIEJpdEFuZCh4MSwg
eDMpKQotICAgIC8vICAgICAgT3AoQml0QW5kKHgxLCB4MiksIEJpdEFuZCh4MywgeDEpKQotICAg
IC8vICAgICAgT3AoQml0QW5kKHgyLCB4MSksIEJpdEFuZCh4MywgeDEpKQotICAgIC8vIEludG8g
dGhpczogQml0QW5kKE9wKHgyLCB4MyksIHgxKQotICAgIC8vIEFuZCBhbnkgb2YgdGhlc2U6Ci0g
ICAgLy8gICAgICBPcChCaXRBbmQoeDEsIHgyKSwgeDEpCi0gICAgLy8gICAgICBPcChCaXRBbmQo
eDIsIHgxKSwgeDEpCi0gICAgLy8gICAgICBPcCh4MSwgQml0QW5kKHgxLCB4MikpCi0gICAgLy8g
ICAgICBPcCh4MSwgQml0QW5kKHgyLCB4MSkpCi0gICAgLy8gSW50byB0aGlzOiBCaXRBbmQoT3Ao
eDIsIHgxKSwgeDEpCi0gICAgLy8gVGhpcyBzZWNvbmQgc2V0IGlzIGVxdWl2YWxlbnQgdG8gZG9p
bmcgeDEgPT4gQml0QW5kKHgxLCB4MSksIGFuZCB0aGVuIGFwcGx5aW5nIHRoZSBmaXJzdCBzZXQu
Ci0gICAgLy8gSXQgZG9lcyBub3QgcmVkdWNlIHRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBleGVj
dXRlZCwgYnV0IHByb3ZpZGVzIHNvbWUgdXNlZnVsIG5vcm1hbGl6YXRpb246IHdlIHByZWZlciB0
byBoYXZlIEJpdEFuZCBhdCB0aGUgb3V0ZXJtb3N0LCB0aGVuIEJpdFhvciwgYW5kIGZpbmFsbHkg
Qml0T3IgYXQgdGhlIGlubmVybW9zdAotICAgIGJvb2wgaGFuZGxlQml0QW5kRGlzdHJpYnV0aXZp
dHkoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdmFsdWUtPm9wY29kZSgpID09IEJpdE9yIHx8
IG1fdmFsdWUtPm9wY29kZSgpID09IEJpdFhvcik7Ci0gICAgICAgIFZhbHVlKiB4MSA9IG51bGxw
dHI7Ci0gICAgICAgIFZhbHVlKiB4MiA9IG51bGxwdHI7Ci0gICAgICAgIFZhbHVlKiB4MyA9IG51
bGxwdHI7Ci0gICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0QW5k
ICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5vcGNvZGUoKSA9PSBCaXRBbmQpIHsKLSAgICAgICAgICAg
IGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSktPmNo
aWxkKDApKSB7Ci0gICAgICAgICAgICAgICAgeDEgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQo
MCk7Ci0gICAgICAgICAgICAgICAgeDIgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSk7Ci0g
ICAgICAgICAgICAgICAgeDMgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSk7Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSA9PSBtX3ZhbHVlLT5j
aGlsZCgxKS0+Y2hpbGQoMCkpIHsKLSAgICAgICAgICAgICAgICB4MSA9IG1fdmFsdWUtPmNoaWxk
KDApLT5jaGlsZCgxKTsKLSAgICAgICAgICAgICAgICB4MiA9IG1fdmFsdWUtPmNoaWxkKDApLT5j
aGlsZCgwKTsKLSAgICAgICAgICAgICAgICB4MyA9IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgx
KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApID09
IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgxKSkgewotICAgICAgICAgICAgICAgIHgxID0gbV92
YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIHgyID0gbV92YWx1ZS0+
Y2hpbGQoMCktPmNoaWxkKDEpOwotICAgICAgICAgICAgICAgIHgzID0gbV92YWx1ZS0+Y2hpbGQo
MSktPmNoaWxkKDApOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMSkgPT0gbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpKSB7Ci0gICAgICAgICAgICAg
ICAgeDEgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSk7Ci0gICAgICAgICAgICAgICAgeDIg
PSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgeDMgPSBtX3Zh
bHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBp
ZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdEFuZCkgewotICAgICAgICAgICAg
aWYgKG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKSkgewot
ICAgICAgICAgICAgICAgIHgxID0geDMgPSBtX3ZhbHVlLT5jaGlsZCgxKTsKLSAgICAgICAgICAg
ICAgICB4MiA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKTsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpID09IG1fdmFsdWUtPmNoaWxkKDEpKSB7
Ci0gICAgICAgICAgICAgICAgeDEgPSB4MyA9IG1fdmFsdWUtPmNoaWxkKDEpOwotICAgICAgICAg
ICAgICAgIHgyID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5vcGNvZGUoKSA9PSBCaXRBbmQp
IHsKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCkgPT0gbV92YWx1
ZS0+Y2hpbGQoMCkpIHsKLSAgICAgICAgICAgICAgICB4MSA9IHgzID0gbV92YWx1ZS0+Y2hpbGQo
MCk7Ci0gICAgICAgICAgICAgICAgeDIgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSk7Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgxKSA9PSBtX3Zh
bHVlLT5jaGlsZCgwKSkgewotICAgICAgICAgICAgICAgIHgxID0geDMgPSBtX3ZhbHVlLT5jaGls
ZCgwKTsKLSAgICAgICAgICAgICAgICB4MiA9IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoeDEgIT0gbnVsbHB0cikgewot
ICAgICAgICAgICAgQVNTRVJUKHgyICE9IG51bGxwdHIgJiYgeDMgIT0gbnVsbHB0cik7Ci0gICAg
ICAgICAgICBWYWx1ZSogYml0T3AgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5k
ZXgsIG1fdmFsdWUtPm9wY29kZSgpLCBtX3ZhbHVlLT5vcmlnaW4oKSwgeDIsIHgzKTsKLSAgICAg
ICAgICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPihCaXRBbmQsIG1fdmFsdWUtPm9yaWdpbigpLCB4
MSwgYml0T3ApOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHN0cnVjdCBDYW5vbmljYWxpemVkQ29tcGFyaXNv
biB7Ci0gICAgICAgIE9wY29kZSBvcGNvZGU7Ci0gICAgICAgIFZhbHVlKiBvcGVyYW5kc1syXTsK
LSAgICB9OwotICAgIHN0YXRpYyBDYW5vbmljYWxpemVkQ29tcGFyaXNvbiBjYW5vbmljYWxpemVD
b21wYXJpc29uKFZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGF1dG8gZmxpcCA9IFtdIChP
cGNvZGUgb3Bjb2RlKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG9wY29kZSkgewotICAgICAgICAg
ICAgY2FzZSBMZXNzVGhhbjoKLSAgICAgICAgICAgICAgICByZXR1cm4gR3JlYXRlclRoYW47Ci0g
ICAgICAgICAgICBjYXNlIEdyZWF0ZXJUaGFuOgotICAgICAgICAgICAgICAgIHJldHVybiBMZXNz
VGhhbjsKLSAgICAgICAgICAgIGNhc2UgTGVzc0VxdWFsOgotICAgICAgICAgICAgICAgIHJldHVy
biBHcmVhdGVyRXF1YWw7Ci0gICAgICAgICAgICBjYXNlIEdyZWF0ZXJFcXVhbDoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gTGVzc0VxdWFsOwotICAgICAgICAgICAgY2FzZSBBYm92ZToKLSAgICAg
ICAgICAgICAgICByZXR1cm4gQmVsb3c7Ci0gICAgICAgICAgICBjYXNlIEJlbG93OgotICAgICAg
ICAgICAgICAgIHJldHVybiBBYm92ZTsKLSAgICAgICAgICAgIGNhc2UgQWJvdmVFcXVhbDoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gQmVsb3dFcXVhbDsKLSAgICAgICAgICAgIGNhc2UgQmVsb3dF
cXVhbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gQWJvdmVFcXVhbDsKLSAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9wY29kZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfTsKLSAgICAgICAgaWYgKHNob3VsZFN3YXBCaW5hcnlPcGVyYW5kcyh2YWx1ZSkpCi0g
ICAgICAgICAgICByZXR1cm4geyBmbGlwKHZhbHVlLT5vcGNvZGUoKSksIHsgdmFsdWUtPmNoaWxk
KDEpLCB2YWx1ZS0+Y2hpbGQoMCkgfSB9OwotICAgICAgICByZXR1cm4geyB2YWx1ZS0+b3Bjb2Rl
KCksIHsgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSkgfSB9OwotICAgIH0KLQotICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCByZWFsbHkgYmUgYSBmb3J3YXJkIGFuYWx5c2lzLiBJbnN0
ZWFkLCB3ZSB1c2VzIGEgYm91bmRlZC1zZWFyY2ggYmFja3dhcmRzCi0gICAgLy8gYW5hbHlzaXMu
Ci0gICAgSW50UmFuZ2UgcmFuZ2VGb3IoVmFsdWUqIHZhbHVlLCB1bnNpZ25lZCB0aW1lVG9MaXZl
ID0gNSkKLSAgICB7Ci0gICAgICAgIGlmICghdGltZVRvTGl2ZSkKLSAgICAgICAgICAgIHJldHVy
biBJbnRSYW5nZTo6dG9wKHZhbHVlLT50eXBlKCkpOwotICAgICAgICAKLSAgICAgICAgc3dpdGNo
ICh2YWx1ZS0+b3Bjb2RlKCkpIHsKLSAgICAgICAgY2FzZSBDb25zdDMyOgotICAgICAgICBjYXNl
IENvbnN0NjQ6IHsKLSAgICAgICAgICAgIGludDY0X3QgaW50VmFsdWUgPSB2YWx1ZS0+YXNJbnQo
KTsKLSAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZShpbnRWYWx1ZSwgaW50VmFsdWUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgY2FzZSBCaXRBbmQ6Ci0gICAgICAgICAgICBpZiAodmFsdWUtPmNo
aWxkKDEpLT5oYXNJbnQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSW50UmFuZ2U6OnJhbmdl
Rm9yTWFzayh2YWx1ZS0+Y2hpbGQoMSktPmFzSW50KCksIHZhbHVlLT50eXBlKCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTU2hyOgotICAgICAgICAgICAgaWYgKHZhbHVl
LT5jaGlsZCgxKS0+aGFzSW50MzIoKSkgewotICAgICAgICAgICAgICAgIHJldHVybiByYW5nZUZv
cih2YWx1ZS0+Y2hpbGQoMCksIHRpbWVUb0xpdmUgLSAxKS5zU2hyKAotICAgICAgICAgICAgICAg
ICAgICB2YWx1ZS0+Y2hpbGQoMSktPmFzSW50MzIoKSwgdmFsdWUtPnR5cGUoKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFpTaHI6Ci0gICAgICAg
ICAgICBpZiAodmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQzMigpKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHJhbmdlRm9yKHZhbHVlLT5jaGlsZCgwKSwgdGltZVRvTGl2ZSAtIDEpLnpTaHIoCi0g
ICAgICAgICAgICAgICAgICAgIHZhbHVlLT5jaGlsZCgxKS0+YXNJbnQzMigpLCB2YWx1ZS0+dHlw
ZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2Ug
U2hsOgotICAgICAgICAgICAgaWYgKHZhbHVlLT5jaGlsZCgxKS0+aGFzSW50MzIoKSkgewotICAg
ICAgICAgICAgICAgIHJldHVybiByYW5nZUZvcih2YWx1ZS0+Y2hpbGQoMCksIHRpbWVUb0xpdmUg
LSAxKS5zaGwoCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlLT5jaGlsZCgxKS0+YXNJbnQzMigp
LCB2YWx1ZS0+dHlwZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgQWRkOgotICAgICAgICAgICAgcmV0dXJuIHJhbmdlRm9yKHZhbHVlLT5jaGls
ZCgwKSwgdGltZVRvTGl2ZSAtIDEpLmFkZCgKLSAgICAgICAgICAgICAgICByYW5nZUZvcih2YWx1
ZS0+Y2hpbGQoMSksIHRpbWVUb0xpdmUgLSAxKSwgdmFsdWUtPnR5cGUoKSk7Ci0KLSAgICAgICAg
Y2FzZSBTdWI6Ci0gICAgICAgICAgICByZXR1cm4gcmFuZ2VGb3IodmFsdWUtPmNoaWxkKDApLCB0
aW1lVG9MaXZlIC0gMSkuc3ViKAotICAgICAgICAgICAgICAgIHJhbmdlRm9yKHZhbHVlLT5jaGls
ZCgxKSwgdGltZVRvTGl2ZSAtIDEpLCB2YWx1ZS0+dHlwZSgpKTsKLQotICAgICAgICBjYXNlIE11
bDoKLSAgICAgICAgICAgIHJldHVybiByYW5nZUZvcih2YWx1ZS0+Y2hpbGQoMCksIHRpbWVUb0xp
dmUgLSAxKS5tdWwoCi0gICAgICAgICAgICAgICAgcmFuZ2VGb3IodmFsdWUtPmNoaWxkKDEpLCB0
aW1lVG9MaXZlIC0gMSksIHZhbHVlLT50eXBlKCkpOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBJbnRSYW5nZTo6dG9w
KHZhbHVlLT50eXBlKCkpOwotICAgIH0KLQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlw
ZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgogICAgIHZvaWQgcmVwbGFjZVdpdGhOZXcoQXJndW1l
bnRzLi4uIGFyZ3VtZW50cykKICAgICB7CkBAIC0yNTU3LDI3ICs0NjAsNiBAQCBwcml2YXRlOgog
ICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgIH0KIAotICAgIHZvaWQgaGFuZGxlU2hpZnRB
bW91bnQoKQotICAgIHsKLSAgICAgICAgLy8gU2hpZnQgYW55dGhpbmcgYnkgemVybyBpcyBpZGVu
dGl0eS4KLSAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludDMyKDApKSB7Ci0gICAg
ICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoZSBzaGlmdCBhbHJlYWR5IG1h
c2tzIGl0cyBzaGlmdCBhbW91bnQuIElmIHRoZSBzaGlmdCBhbW91bnQgaXMgYmVpbmcgbWFza2Vk
IGJ5IGEKLSAgICAgICAgLy8gcmVkdW5kYW50IGFtb3VudCwgdGhlbiByZW1vdmUgdGhlIG1hc2su
IEZvciBleGFtcGxlLAotICAgICAgICAvLyBUdXJuIHRoaXM6IFNobChAeCwgQml0QW5kKEB5LCA2
MykpCi0gICAgICAgIC8vIEludG8gdGhpczogU2hsKEB4LCBAeSkKLSAgICAgICAgdW5zaWduZWQg
bWFzayA9IHNpemVvZlR5cGUobV92YWx1ZS0+dHlwZSgpKSAqIDggLSAxOwotICAgICAgICBpZiAo
bV92YWx1ZS0+Y2hpbGQoMSktPm9wY29kZSgpID09IEJpdEFuZAotICAgICAgICAgICAgJiYgbV92
YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpLT5oYXNJbnQzMigpCi0gICAgICAgICAgICAmJiAobV92
YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpLT5hc0ludDMyKCkgJiBtYXNrKSA9PSBtYXNrKSB7Ci0g
ICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgxKSA9IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgw
KTsKLSAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAg
ICB2b2lkIHJlcGxhY2VJZlJlZHVuZGFudCgpCiAgICAgewogICAgICAgICBtX2NoYW5nZWQgfD0g
bV9wdXJlQ1NFLnByb2Nlc3MobV92YWx1ZSwgKm1fZG9taW5hdG9ycyk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKaW5kZXggZjVjZDdkMmYwYzkuLmM5MjczMmRiYmY4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCkBAIC0yMjYsNyArMjI2LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgY2FzZSBTU2hyOgogICAgICAgICAgICAgY2FzZSBaU2hy
OgogICAgICAgICAgICAgY2FzZSBSb3RSOgotICAgICAgICAgICAgICAgIGNhc2UgUm90TDoKKyAg
ICAgICAgICAgIGNhc2UgUm90TDoKICAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtp
bmQoKS5oYXNFeHRyYUJpdHMoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAyLCAoIkF0ICIsICp2YWx1ZSkpOwogICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxkKDApLT50
eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmgKaW5kZXggNmY4NmVhMGRmMGIuLjc2NzM2ODRl
NjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNh
bGxlZVNhdmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVD
YWxsZWVTYXZlcy5oCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCisj
aW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKKwogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgewogCiBjbGFzcyBDb2RlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
LmNwcAppbmRleCBhYThlNDk5NzE0NS4uMmIyODFkN2ExNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My90ZXN0YjMuY3BwCkBAIC0yMzY5LDcgKzIzNjksNyBAQCB2b2lkIHRlc3ROZWdNdWxBcmdJbW0o
aW50NjRfdCBhLCBpbnQ2NF90IGIpCiAgICAgVmFsdWUqIHJlc3VsdCA9IHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgTmVnLCBPcmlnaW4oKSwgbXVsKTsKICAgICByb290LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7CiAKLSAgICBDSEVDSyhjb21w
aWxlQW5kUnVuPGludDY0X3Q+KHByb2MsIGEpID09IC0oYSAqIGIpKTsKKyAgICBDSEVDS19FUShj
b21waWxlQW5kUnVuPGludDY0X3Q+KHByb2MsIGEpLCAtKGEgKiBiKSk7CiB9CiAKIHZvaWQgdGVz
dFN1Yk11bE11bEFyZ3MoaW50NjRfdCBhLCBpbnQ2NF90IGIsIGludDY0X3QgYykKQEAgLTE2ODYz
LDcgKzE2ODYzLDcgQEAgdm9pZCB0ZXN0RmxvYXRFcXVhbE9yVW5vcmRlcmVkRG9udEZvbGQoKQog
ICAgICAgICBmb3IgKGF1dG8mIHNlY29uZCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4o
KSkgewogICAgICAgICAgICAgZmxvYXQgYiA9IHNlY29uZC52YWx1ZTsKICAgICAgICAgICAgIGJv
b2wgZXhwZWN0ZWRSZXN1bHQgPSAoYSA9PSBiKSB8fCBzdGQ6OmlzdW5vcmRlcmVkKGEsIGIpOwot
ICAgICAgICAgICAgQ0hFQ0soISFpbnZva2U8aW50MzJfdD4oKmNvZGUsIHN0YXRpY19jYXN0PGRv
dWJsZT4oYikpID09IGV4cGVjdGVkUmVzdWx0KTsKKyAgICAgICAgICAgIENIRUNLX0VRKCEhaW52
b2tlPGludDMyX3Q+KCpjb2RlLCBzdGF0aWNfY2FzdDxkb3VibGU+KGIpKSwgZXhwZWN0ZWRSZXN1
bHQpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPdXRwdXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRw
dXQuY3BwCmluZGV4IGNjNGJiMzk3NmExLi4wMDhiZmU0NmEzNSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT3V0cHV0LmNwcApAQCAtNTAsNiArNTAsNyBAQCB1c2luZyBuYW1lc3BhY2Ug
QjM7CiAKIE91dHB1dDo6T3V0cHV0KFN0YXRlJiBzdGF0ZSkKICAgICA6IG1fcHJvYygqc3RhdGUu
cHJvYykKKyAgICAsIG1fcGVlcGhvbGUobV9wcm9jKQogewogfQogCkBAIC04OCw2ICs4OSw3IEBA
IExCYXNpY0Jsb2NrIE91dHB1dDo6YXBwZW5kVG8oTEJhc2ljQmxvY2sgYmxvY2ssIExCYXNpY0Js
b2NrIG5leHRCbG9jaykKIHZvaWQgT3V0cHV0OjphcHBlbmRUbyhMQmFzaWNCbG9jayBibG9jaykK
IHsKICAgICBtX2Jsb2NrID0gYmxvY2s7CisgICAgbV9wZWVwaG9sZS5zZXRCbG9jayhtX2Jsb2Nr
KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6ZnJhbWVQb2ludGVyKCkKQEAgLTEyOSwxMzMgKzEzMSwx
MTMgQEAgTFZhbHVlIE91dHB1dDo6cGhpKExUeXBlIHR5cGUpCiAKIExWYWx1ZSBPdXRwdXQ6Om9w
YXF1ZShMVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBPcGFxdWUsIG9yaWdpbigpLCB2YWx1ZSk7CisgICAgcmV0dXJuIG1fcGVlcGhv
bGUucmVkdWNlT3BhcXVlKHZhbHVlLT50eXBlKCksIG9yaWdpbigpLCB2YWx1ZSk7CiB9CiAKIExW
YWx1ZSBPdXRwdXQ6OmFkZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIGlmIChW
YWx1ZSogcmVzdWx0ID0gbGVmdC0+YWRkQ29uc3RhbnQobV9wcm9jLCByaWdodCkpIHsKLSAgICAg
ICAgbV9ibG9jay0+YXBwZW5kKHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpB
ZGQsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNl
QWRkKGxlZnQtPnR5cGUoKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVlIE91
dHB1dDo6c3ViKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgcmV0dXJuIG1fYmxv
Y2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlN1Yiwgb3JpZ2luKCksIGxlZnQs
IHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VTdWIobGVmdC0+dHlwZSgpLCBv
cmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0cHV0OjptdWwoTFZhbHVlIGxl
ZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpW
YWx1ZT4obV9wcm9jLCBCMzo6TXVsLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVy
biBtX3BlZXBob2xlLnJlZHVjZU11bChsZWZ0LT50eXBlKCksIG9yaWdpbigpLCBsZWZ0LCByaWdo
dCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmRpdihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQog
ewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpE
aXYsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNl
RGl2KGxlZnQtPnR5cGUoKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0LCBmYWxzZSk7CiB9CiAKIExW
YWx1ZSBPdXRwdXQ6OmNoaWxsRGl2KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAg
cmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgY2hpbGwoQjM6OkRp
diksIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNl
RGl2KGxlZnQtPnR5cGUoKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0LCB0cnVlKTsKIH0KIAogTFZh
bHVlIE91dHB1dDo6bW9kKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgcmV0dXJu
IG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6Ok1vZCwgb3JpZ2luKCks
IGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VNb2QobGVmdC0+dHlw
ZSgpLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQsIGZhbHNlKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6
Y2hpbGxNb2QoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICByZXR1cm4gbV9ibG9j
ay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBjaGlsbChCMzo6TW9kKSwgb3JpZ2luKCks
IGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VNb2QobGVmdC0+dHlw
ZSgpLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQsIHRydWUpOwogfQogCiBMVmFsdWUgT3V0cHV0Ojpu
ZWcoTFZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgQjM6Ok5lZywgb3JpZ2luKCksIHZhbHVlKTsKKyAgICByZXR1cm4gbV9wZWVwaG9s
ZS5yZWR1Y2VOZWcodmFsdWUtPnR5cGUoKSwgb3JpZ2luKCksIHZhbHVlKTsKIH0KIAogTFZhbHVl
IE91dHB1dDo6ZG91YmxlQWRkKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgcmV0
dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkFkZCwgb3JpZ2lu
KCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VBZGQobGVmdC0+
dHlwZSgpLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0cHV0Ojpkb3Vi
bGVTdWIoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+
YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6U3ViLCBvcmlnaW4oKSwgbGVmdCwgcmln
aHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZVN1YihsZWZ0LT50eXBlKCksIG9yaWdp
bigpLCBsZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmRvdWJsZU11bChMVmFsdWUg
bGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6
OlZhbHVlPihtX3Byb2MsIEIzOjpNdWwsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0
dXJuIG1fcGVlcGhvbGUucmVkdWNlTXVsKGxlZnQtPnR5cGUoKSwgb3JpZ2luKCksIGxlZnQsIHJp
Z2h0KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6ZG91YmxlRGl2KExWYWx1ZSBsZWZ0LCBMVmFsdWUg
cmlnaHQpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJv
YywgQjM6OkRpdiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9s
ZS5yZWR1Y2VEaXYobGVmdC0+dHlwZSgpLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQsIGZhbHNlKTsK
IH0KIAogTFZhbHVlIE91dHB1dDo6ZG91YmxlTW9kKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQp
CiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6
Ok1vZCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1
Y2VNb2QobGVmdC0+dHlwZSgpLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQsIGZhbHNlKTsKIH0KIAog
TFZhbHVlIE91dHB1dDo6Yml0QW5kKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAg
cmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkJpdEFuZCwg
b3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VCaXRB
bmQobGVmdC0+dHlwZSgpLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0
cHV0OjpiaXRPcihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIHJldHVybiBtX2Js
b2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpCaXRPciwgb3JpZ2luKCksIGxl
ZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VCaXRPcihsZWZ0LT50eXBl
KCksIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmJpdFhvcihM
VmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmRO
ZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpCaXRYb3IsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7
CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlQml0WG9yKGxlZnQtPnR5cGUoKSwgb3JpZ2lu
KCksIGxlZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6c2hsKExWYWx1ZSBsZWZ0LCBM
VmFsdWUgcmlnaHQpCiB7Ci0gICAgcmlnaHQgPSBjYXN0VG9JbnQzMihyaWdodCk7Ci0gICAgaWYg
KFZhbHVlKiByZXN1bHQgPSBsZWZ0LT5zaGxDb25zdGFudChtX3Byb2MsIHJpZ2h0KSkgewotICAg
ICAgICBtX2Jsb2NrLT5hcHBlbmQocmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6
OlNobCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1
Y2VTaGwobGVmdC0+dHlwZSgpLCBvcmlnaW4oKSwgbGVmdCwgY2FzdFRvSW50MzIocmlnaHQpKTsK
IH0KIAogTFZhbHVlIE91dHB1dDo6YVNocihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewot
ICAgIHJpZ2h0ID0gY2FzdFRvSW50MzIocmlnaHQpOwotICAgIGlmIChWYWx1ZSogcmVzdWx0ID0g
bGVmdC0+c1NockNvbnN0YW50KG1fcHJvYywgcmlnaHQpKSB7Ci0gICAgICAgIG1fYmxvY2stPmFw
cGVuZChyZXN1bHQpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICByZXR1cm4g
bV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6U1Nociwgb3JpZ2luKCks
IGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VTU2hyKGxlZnQtPnR5
cGUoKSwgb3JpZ2luKCksIGxlZnQsIGNhc3RUb0ludDMyKHJpZ2h0KSk7CiB9CiAKIExWYWx1ZSBP
dXRwdXQ6OmxTaHIoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICByaWdodCA9IGNh
c3RUb0ludDMyKHJpZ2h0KTsKLSAgICBpZiAoVmFsdWUqIHJlc3VsdCA9IGxlZnQtPnpTaHJDb25z
dGFudChtX3Byb2MsIHJpZ2h0KSkgewotICAgICAgICBtX2Jsb2NrLT5hcHBlbmQocmVzdWx0KTsK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVu
ZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlpTaHIsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7
CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlWlNocihsZWZ0LT50eXBlKCksIG9yaWdpbigp
LCBsZWZ0LCBjYXN0VG9JbnQzMihyaWdodCkpOwogfQogCiBMVmFsdWUgT3V0cHV0OjpiaXROb3Qo
TFZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVl
PihtX3Byb2MsIEIzOjpCaXRYb3IsIG9yaWdpbigpLAotICAgICAgICB2YWx1ZSwKLSAgICAgICAg
bV9ibG9jay0+YXBwZW5kSW50Q29uc3RhbnQobV9wcm9jLCBvcmlnaW4oKSwgdmFsdWUtPnR5cGUo
KSwgLTEpKTsKKyAgICBWYWx1ZSogYWxsT25lcyA9IG1fYmxvY2stPmFwcGVuZEludENvbnN0YW50
KG1fcHJvYywgb3JpZ2luKCksIHZhbHVlLT50eXBlKCksIC0xKTsKKyAgICByZXR1cm4gbV9wZWVw
aG9sZS5yZWR1Y2VCaXRYb3IodmFsdWUtPnR5cGUoKSwgb3JpZ2luKCksIHZhbHVlLCBhbGxPbmVz
KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6bG9naWNhbE5vdChMVmFsdWUgdmFsdWUpCiB7Ci0gICAg
cmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkVxdWFsLCBv
cmlnaW4oKSwgdmFsdWUsIGludDMyWmVybyk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNl
RXF1YWwoSW50MzIsIG9yaWdpbigpLCB2YWx1ZSwgaW50MzJaZXJvKTsKIH0KIAogTFZhbHVlIE91
dHB1dDo6Y3RsejMyKExWYWx1ZSBvcGVyYW5kKQpAQCAtMjY1LDE3ICsyNDcsMTcgQEAgTFZhbHVl
IE91dHB1dDo6Y3RsejMyKExWYWx1ZSBvcGVyYW5kKQogCiBMVmFsdWUgT3V0cHV0Ojpkb3VibGVB
YnMoTFZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZh
bHVlPihtX3Byb2MsIEIzOjpBYnMsIG9yaWdpbigpLCB2YWx1ZSk7CisgICAgcmV0dXJuIG1fcGVl
cGhvbGUucmVkdWNlQWJzKHZhbHVlLT50eXBlKCksIG9yaWdpbigpLCB2YWx1ZSk7CiB9CiAKLUxW
YWx1ZSBPdXRwdXQ6OmRvdWJsZUNlaWwoTFZhbHVlIG9wZXJhbmQpCitMVmFsdWUgT3V0cHV0Ojpk
b3VibGVDZWlsKExWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3
PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Q2VpbCwgb3JpZ2luKCksIG9wZXJhbmQpOworICAgIHJl
dHVybiBtX3BlZXBob2xlLnJlZHVjZUNlaWwodmFsdWUtPnR5cGUoKSwgb3JpZ2luKCksIHZhbHVl
KTsKIH0KIAotTFZhbHVlIE91dHB1dDo6ZG91YmxlRmxvb3IoTFZhbHVlIG9wZXJhbmQpCitMVmFs
dWUgT3V0cHV0Ojpkb3VibGVGbG9vcihMVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIG1fYmxv
Y2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkZsb29yLCBvcmlnaW4oKSwgb3Bl
cmFuZCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlRmxvb3IodmFsdWUtPnR5cGUoKSwg
b3JpZ2luKCksIHZhbHVlKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6ZG91YmxlVHJ1bmMoTFZhbHVl
IHZhbHVlKQpAQCAtMzEyLDEzICsyOTQsMTMgQEAgTFZhbHVlIE91dHB1dDo6ZG91YmxlUG93aShM
VmFsdWUgeCwgTFZhbHVlIHkpCiAgICAgLy8gc2hvdWxkIGJlIGludm9sdmVkIGluIGFueSBvcGVy
YXRpb24gdGhhdCBjcmVhdGVzIGJsb2Nrcy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUyMjIzCiAgICAgYXV0byByZXN1bHQgPSBwb3dEb3VibGVJbnQz
MihtX3Byb2MsIG1fYmxvY2ssIG9yaWdpbigpLCB4LCB5KTsKLSAgICBtX2Jsb2NrID0gcmVzdWx0
LmZpcnN0OworICAgIGFwcGVuZFRvKHJlc3VsdC5maXJzdCk7CiAgICAgcmV0dXJuIHJlc3VsdC5z
ZWNvbmQ7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmRvdWJsZVNxcnQoTFZhbHVlIHZhbHVlKQogewot
ICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpTcXJ0
LCBvcmlnaW4oKSwgdmFsdWUpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZVNxcnQodmFs
dWUtPnR5cGUoKSwgb3JpZ2luKCksIHZhbHVlKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6ZG91Ymxl
VG9JbnQoTFZhbHVlIHZhbHVlKQpAQCAtMzQ3LDcgKzMyOSw3IEBAIExWYWx1ZSBPdXRwdXQ6OmRv
dWJsZVRvVUludChMVmFsdWUgdmFsdWUpCiAKIExWYWx1ZSBPdXRwdXQ6OnNpZ25FeHQzMlRvNjQo
TFZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVl
PihtX3Byb2MsIEIzOjpTRXh0MzIsIG9yaWdpbigpLCB2YWx1ZSk7CisgICAgcmV0dXJuIG1fcGVl
cGhvbGUucmVkdWNlU0V4dDMyKEludDY0LCBvcmlnaW4oKSwgdmFsdWUpOwogfQogCiBMVmFsdWUg
T3V0cHV0OjpzaWduRXh0MzJUb1B0cihMVmFsdWUgdmFsdWUpCkBAIC0zNTksMTQgKzM0MSwxMiBA
QCBMVmFsdWUgT3V0cHV0Ojp6ZXJvRXh0KExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkKIHsKICAg
ICBpZiAodmFsdWUtPnR5cGUoKSA9PSB0eXBlKQogICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAg
aWYgKHZhbHVlLT5oYXNJbnQzMigpKQotICAgICAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kSW50
Q29uc3RhbnQobV9wcm9jLCBvcmlnaW4oKSwgSW50NjQsIHN0YXRpY19jYXN0PHVpbnQ2NF90Pihz
dGF0aWNfY2FzdDx1aW50MzJfdD4odmFsdWUtPmFzSW50MzIoKSkpKTsKLSAgICByZXR1cm4gbV9i
bG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6WkV4dDMyLCBvcmlnaW4oKSwg
dmFsdWUpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZVpFeHQzMihJbnQ2NCwgb3JpZ2lu
KCksIHZhbHVlKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6aW50VG9Eb3VibGUoTFZhbHVlIHZhbHVl
KQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIz
OjpJVG9ELCBvcmlnaW4oKSwgdmFsdWUpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZUlU
b0QoRG91YmxlLCBvcmlnaW4oKSwgdmFsdWUpOwogfQogCiBMVmFsdWUgT3V0cHV0Ojp1bnNpZ25l
ZFRvRG91YmxlKExWYWx1ZSB2YWx1ZSkKQEAgLTM3OCwxOSArMzU4LDE3IEBAIExWYWx1ZSBPdXRw
dXQ6OmNhc3RUb0ludDMyKExWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPnR5cGUoKSA9
PSBJbnQzMikKICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIGlmICh2YWx1ZS0+aGFzSW50NjQo
KSkKLSAgICAgICAgcmV0dXJuIGNvbnN0SW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUt
PmFzSW50NjQoKSkpOwotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPiht
X3Byb2MsIEIzOjpUcnVuYywgb3JpZ2luKCksIHZhbHVlKTsKKyAgICByZXR1cm4gbV9wZWVwaG9s
ZS5yZWR1Y2VUcnVuYyhJbnQzMiwgb3JpZ2luKCksIHZhbHVlKTsKIH0KIAogTFZhbHVlIE91dHB1
dDo6ZG91YmxlVG9GbG9hdChMVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFw
cGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkRvdWJsZVRvRmxvYXQsIG9yaWdpbigpLCB2
YWx1ZSk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlRG91YmxlVG9GbG9hdChGbG9hdCwg
b3JpZ2luKCksIHZhbHVlKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6ZmxvYXRUb0RvdWJsZShMVmFs
dWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1f
cHJvYywgQjM6OkZsb2F0VG9Eb3VibGUsIG9yaWdpbigpLCB2YWx1ZSk7CisgICAgcmV0dXJuIG1f
cGVlcGhvbGUucmVkdWNlRmxvYXRUb0RvdWJsZShEb3VibGUsIG9yaWdpbigpLCB2YWx1ZSk7CiB9
CiAKIExWYWx1ZSBPdXRwdXQ6OmxvYWQoVHlwZWRQb2ludGVyIHBvaW50ZXIsIExUeXBlIHR5cGUp
CkBAIC00ODUsMTE3ICs0NjMsODcgQEAgTFZhbHVlIE91dHB1dDo6YmFzZUluZGV4KExWYWx1ZSBi
YXNlLCBMVmFsdWUgaW5kZXgsIFNjYWxlIHNjYWxlLCBwdHJkaWZmX3Qgb2Zmc2UKIAogTFZhbHVl
IE91dHB1dDo6ZXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICBUcmlTdGF0
ZSByZXN1bHQgPSBsZWZ0LT5lcXVhbENvbnN0YW50KHJpZ2h0KTsKLSAgICBpZiAocmVzdWx0ICE9
IE1peGVkVHJpU3RhdGUpCi0gICAgICAgIHJldHVybiBjb25zdEJvb2wocmVzdWx0ID09IFRydWVU
cmlTdGF0ZSk7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJv
YywgQjM6OkVxdWFsLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBo
b2xlLnJlZHVjZUVxdWFsKEludDMyLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFs
dWUgT3V0cHV0Ojpub3RFcXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIFRy
aVN0YXRlIHJlc3VsdCA9IGxlZnQtPm5vdEVxdWFsQ29uc3RhbnQocmlnaHQpOwotICAgIGlmIChy
ZXN1bHQgIT0gTWl4ZWRUcmlTdGF0ZSkKLSAgICAgICAgcmV0dXJuIGNvbnN0Qm9vbChyZXN1bHQg
PT0gVHJ1ZVRyaVN0YXRlKTsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1
ZT4obV9wcm9jLCBCMzo6Tm90RXF1YWwsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0
dXJuIG1fcGVlcGhvbGUucmVkdWNlTm90RXF1YWwoSW50MzIsIG9yaWdpbigpLCBsZWZ0LCByaWdo
dCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmFib3ZlKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQp
CiB7Ci0gICAgVHJpU3RhdGUgcmVzdWx0ID0gbGVmdC0+YWJvdmVDb25zdGFudChyaWdodCk7Ci0g
ICAgaWYgKHJlc3VsdCAhPSBNaXhlZFRyaVN0YXRlKQotICAgICAgICByZXR1cm4gY29uc3RCb29s
KHJlc3VsdCA9PSBUcnVlVHJpU3RhdGUpOwotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8
QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpBYm92ZSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAg
ICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VBYm92ZShJbnQzMiwgb3JpZ2luKCksIGxlZnQsIHJp
Z2h0KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6YWJvdmVPckVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFs
dWUgcmlnaHQpCiB7Ci0gICAgVHJpU3RhdGUgcmVzdWx0ID0gbGVmdC0+YWJvdmVFcXVhbENvbnN0
YW50KHJpZ2h0KTsKLSAgICBpZiAocmVzdWx0ICE9IE1peGVkVHJpU3RhdGUpCi0gICAgICAgIHJl
dHVybiBjb25zdEJvb2wocmVzdWx0ID09IFRydWVUcmlTdGF0ZSk7Ci0gICAgcmV0dXJuIG1fYmxv
Y2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkFib3ZlRXF1YWwsIG9yaWdpbigp
LCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlQWJvdmVFcXVhbChJ
bnQzMiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6YmVsb3co
TFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICBUcmlTdGF0ZSByZXN1bHQgPSBsZWZ0
LT5iZWxvd0NvbnN0YW50KHJpZ2h0KTsKLSAgICBpZiAocmVzdWx0ICE9IE1peGVkVHJpU3RhdGUp
Ci0gICAgICAgIHJldHVybiBjb25zdEJvb2wocmVzdWx0ID09IFRydWVUcmlTdGF0ZSk7Ci0gICAg
cmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkJlbG93LCBv
cmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZUJlbG93
KEludDMyLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0cHV0OjpiZWxv
d09yRXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICBUcmlTdGF0ZSByZXN1
bHQgPSBsZWZ0LT5iZWxvd0VxdWFsQ29uc3RhbnQocmlnaHQpOwotICAgIGlmIChyZXN1bHQgIT0g
TWl4ZWRUcmlTdGF0ZSkKLSAgICAgICAgcmV0dXJuIGNvbnN0Qm9vbChyZXN1bHQgPT0gVHJ1ZVRy
aVN0YXRlKTsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9j
LCBCMzo6QmVsb3dFcXVhbCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9w
ZWVwaG9sZS5yZWR1Y2VCZWxvd0VxdWFsKEludDMyLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwog
fQogCiBMVmFsdWUgT3V0cHV0OjpncmVhdGVyVGhhbihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0
KQogewotICAgIFRyaVN0YXRlIHJlc3VsdCA9IGxlZnQtPmdyZWF0ZXJUaGFuQ29uc3RhbnQocmln
aHQpOwotICAgIGlmIChyZXN1bHQgIT0gTWl4ZWRUcmlTdGF0ZSkKLSAgICAgICAgcmV0dXJuIGNv
bnN0Qm9vbChyZXN1bHQgPT0gVHJ1ZVRyaVN0YXRlKTsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBw
ZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6R3JlYXRlclRoYW4sIG9yaWdpbigpLCBsZWZ0
LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlR3JlYXRlclRoYW4oSW50MzIs
IG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmdyZWF0ZXJUaGFu
T3JFcXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIFRyaVN0YXRlIHJlc3Vs
dCA9IGxlZnQtPmdyZWF0ZXJFcXVhbENvbnN0YW50KHJpZ2h0KTsKLSAgICBpZiAocmVzdWx0ICE9
IE1peGVkVHJpU3RhdGUpCi0gICAgICAgIHJldHVybiBjb25zdEJvb2wocmVzdWx0ID09IFRydWVU
cmlTdGF0ZSk7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJv
YywgQjM6OkdyZWF0ZXJFcXVhbCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4g
bV9wZWVwaG9sZS5yZWR1Y2VHcmVhdGVyRXF1YWwoSW50MzIsIG9yaWdpbigpLCBsZWZ0LCByaWdo
dCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6Omxlc3NUaGFuKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmln
aHQpCiB7Ci0gICAgVHJpU3RhdGUgcmVzdWx0ID0gbGVmdC0+bGVzc1RoYW5Db25zdGFudChyaWdo
dCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBNaXhlZFRyaVN0YXRlKQotICAgICAgICByZXR1cm4gY29u
c3RCb29sKHJlc3VsdCA9PSBUcnVlVHJpU3RhdGUpOwotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBl
bmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpMZXNzVGhhbiwgb3JpZ2luKCksIGxlZnQsIHJp
Z2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VMZXNzVGhhbihJbnQzMiwgb3JpZ2lu
KCksIGxlZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6bGVzc1RoYW5PckVxdWFsKExW
YWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgVHJpU3RhdGUgcmVzdWx0ID0gbGVmdC0+
bGVzc0VxdWFsQ29uc3RhbnQocmlnaHQpOwotICAgIGlmIChyZXN1bHQgIT0gTWl4ZWRUcmlTdGF0
ZSkKLSAgICAgICAgcmV0dXJuIGNvbnN0Qm9vbChyZXN1bHQgPT0gVHJ1ZVRyaVN0YXRlKTsKLSAg
ICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6TGVzc0Vx
dWFsLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVj
ZUxlc3NFcXVhbChJbnQzMiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVlIE91
dHB1dDo6ZG91YmxlRXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICByZXR1
cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RXF1YWwsIG9yaWdp
bigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlRXF1YWwoSW50
MzIsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmRvdWJsZUVx
dWFsT3JVbm9yZGVyZWQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICByZXR1cm4g
bV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RXF1YWxPclVub3JkZXJl
ZCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VF
cXVhbE9yVW5vcmRlcmVkKEludDMyLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFs
dWUgT3V0cHV0Ojpkb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKExWYWx1ZSBsZWZ0LCBMVmFsdWUg
cmlnaHQpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJv
YywgQjM6Ok5vdEVxdWFsLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiBtX3Bl
ZXBob2xlLnJlZHVjZU5vdEVxdWFsKEludDMyLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQog
CiBMVmFsdWUgT3V0cHV0Ojpkb3VibGVMZXNzVGhhbihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0
KQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIz
OjpMZXNzVGhhbiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9s
ZS5yZWR1Y2VMZXNzVGhhbihJbnQzMiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKIH0KIAogTFZh
bHVlIE91dHB1dDo6ZG91YmxlTGVzc1RoYW5PckVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmln
aHQpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywg
QjM6Okxlc3NFcXVhbCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVw
aG9sZS5yZWR1Y2VMZXNzRXF1YWwoSW50MzIsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiB9CiAK
IExWYWx1ZSBPdXRwdXQ6OmRvdWJsZUdyZWF0ZXJUaGFuKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmln
aHQpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywg
QjM6OkdyZWF0ZXJUaGFuLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiBtX3Bl
ZXBob2xlLnJlZHVjZUdyZWF0ZXJUaGFuKEludDMyLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwog
fQogCiBMVmFsdWUgT3V0cHV0Ojpkb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwoTFZhbHVlIGxlZnQs
IExWYWx1ZSByaWdodCkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1
ZT4obV9wcm9jLCBCMzo6R3JlYXRlckVxdWFsLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAg
IHJldHVybiBtX3BlZXBob2xlLnJlZHVjZUdyZWF0ZXJFcXVhbChJbnQzMiwgb3JpZ2luKCksIGxl
ZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6ZG91YmxlTm90RXF1YWxBbmRPcmRlcmVk
KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCkBAIC02MjUsMzMgKzU3MywyNyBAQCBMVmFsdWUg
T3V0cHV0Ojpkb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZChMVmFsdWUgbGVmdCwg
TFZhbHVlIHJpZ2h0KQogCiBMVmFsdWUgT3V0cHV0Ojppc1plcm8zMihMVmFsdWUgdmFsdWUpCiB7
Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkVx
dWFsLCBvcmlnaW4oKSwgdmFsdWUsIGludDMyWmVybyk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUu
cmVkdWNlRXF1YWwoSW50MzIsIG9yaWdpbigpLCB2YWx1ZSwgaW50MzJaZXJvKTsKIH0KIAogTFZh
bHVlIE91dHB1dDo6bm90WmVybzMyKExWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gbV9ibG9j
ay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Tm90RXF1YWwsIG9yaWdpbigpLCB2
YWx1ZSwgaW50MzJaZXJvKTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VOb3RFcXVhbChJ
bnQzMiwgb3JpZ2luKCksIHZhbHVlLCBpbnQzMlplcm8pOwogfQogCiBMVmFsdWUgT3V0cHV0Ojpp
c1plcm82NChMVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxC
Mzo6VmFsdWU+KG1fcHJvYywgQjM6OkVxdWFsLCBvcmlnaW4oKSwgdmFsdWUsIGludDY0WmVybyk7
CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlRXF1YWwoSW50MzIsIG9yaWdpbigpLCB2YWx1
ZSwgaW50NjRaZXJvKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6bm90WmVybzY0KExWYWx1ZSB2YWx1
ZSkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBC
Mzo6Tm90RXF1YWwsIG9yaWdpbigpLCB2YWx1ZSwgaW50NjRaZXJvKTsKKyAgICByZXR1cm4gbV9w
ZWVwaG9sZS5yZWR1Y2VOb3RFcXVhbChJbnQzMiwgb3JpZ2luKCksIHZhbHVlLCBpbnQ2NFplcm8p
OwogfQogCiBMVmFsdWUgT3V0cHV0OjpzZWxlY3QoTFZhbHVlIHZhbHVlLCBMVmFsdWUgdGFrZW4s
IExWYWx1ZSBub3RUYWtlbikKIHsKLSAgICBpZiAodmFsdWUtPmhhc0ludDMyKCkpIHsKLSAgICAg
ICAgaWYgKHZhbHVlLT5hc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdGFrZW47Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBub3RUYWtlbjsKLSAgICB9Ci0gICAgcmV0dXJu
IG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2lu
KCksIHZhbHVlLCB0YWtlbiwgbm90VGFrZW4pOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVj
ZVNlbGVjdCh0YWtlbi0+dHlwZSgpLCBvcmlnaW4oKSwgdmFsdWUsIHRha2VuLCBub3RUYWtlbik7
CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmF0b21pY1hjaGdBZGQoTFZhbHVlIG9wZXJhbmQsIFR5cGVk
UG9pbnRlciBwb2ludGVyLCBXaWR0aCB3aWR0aCkKQEAgLTc4MSw4ICs3MjMsOCBAQCBWYWx1ZUZy
b21CbG9jayBPdXRwdXQ6OmFuY2hvcihMVmFsdWUgdmFsdWUpCiAKIExWYWx1ZSBPdXRwdXQ6OmJp
dENhc3QoTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKQogewotICAgIEFTU0VSVF9VTlVTRUQodHlw
ZSwgdHlwZSA9PSBJbnQ2NCB8fCB0eXBlID09IERvdWJsZSk7Ci0gICAgcmV0dXJuIG1fYmxvY2st
PmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkJpdHdpc2VDYXN0LCBvcmlnaW4oKSwg
dmFsdWUpOworICAgIEFTU0VSVCh0eXBlID09IEludDY0IHx8IHR5cGUgPT0gRG91YmxlKTsKKyAg
ICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VCaXR3aXNlQ2FzdCh0eXBlLCBvcmlnaW4oKSwgdmFs
dWUpOwogfQogCiBMVmFsdWUgT3V0cHV0Ojpmcm91bmQoTFZhbHVlIGRvdWJsZVZhbHVlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKaW5kZXggN2ExZmFlZWE2MzAuLjgyY2I1M2Zm
MTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKQEAgLTMzLDYgKzMzLDcg
QEAKICNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgi
CiAjaW5jbHVkZSAiQjNGcmVxdWVudGVkQmxvY2suaCIKKyNpbmNsdWRlICJCM1BlZXBob2xlT3B0
aW1pemVyLmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKICNpbmNsdWRlICJCM1N3aXRjaFZh
bHVlLmgiCiAjaW5jbHVkZSAiQjNXaWR0aC5oIgpAQCAtNDUyLDcgKzQ1Myw3IEBAIHB1YmxpYzoK
ICNwcmFnbWEgbWFyayAtIFN0YXRlcwogI2VuZGlmCiAgICAgQjM6OlByb2NlZHVyZSYgbV9wcm9j
OwotCisgICAgQjM6OlBlZXBob2xlT3B0aW1pemVyIG1fcGVlcGhvbGU7CiAgICAgREZHOjpOb2Rl
KiBtX29yaWdpbiB7IG51bGxwdHIgfTsKICAgICBMQmFzaWNCbG9jayBtX2Jsb2NrIHsgbnVsbHB0
ciB9OwogICAgIExCYXNpY0Jsb2NrIG1fbmV4dEJsb2NrIHsgbnVsbHB0ciB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366774</attachid>
            <date>2019-04-04 17:06:46 -0700</date>
            <delta_ts>2019-04-17 16:00:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch196578</filename>
            <type>text/plain</type>
            <size>234681</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGNkNjU0YTEyZDJjLi5iOWJhYzJlMjYxMiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTc5IEBACisyMDE5LTA0LTA0ICBSb2Jp
biBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAgICAgICAgQjMgcGVlcGhvbGUg
b3B0aW1pemF0aW9ucyBzaG91bGQgbGl2ZSBpbiB0aGVpciBvd24gZmlsZSwgYW5kIGJlIHVzZWQg
YnkgRlRMT3V0cHV0LmNwcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTk2NTc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQ3VycmVudGx5IHRoZSBwZWVwaG9sZSBvcHRpbWl6YXRpb25zIGZvciBCMyBsaXZl
IGluIEIzUmVkdWNlU3RyZW5ndGggYW5kIGFyZSByYXRoZXIgdGllZCB0byBpdCwgYW5hbHl6aW5n
IGFuIGV4aXN0aW5nIHZhbHVlCisgICAgICAgICwgYW5kICh0eXBpY2FsbHkpIHJlcGxhY2luZyBp
dCB3aXRoIGFuIGlkZW50aXR5IHRvIGEgbmV3IChzaW1wbGVyKSB2YWx1ZSB0aGF0IHRoZXkgY3Jl
YXRlLgorICAgICAgICBXaXRoIHRoaXMgcGF0Y2gsIHRoZXkgaW5zdGVhZCBsaXZlIGluIHRoZWly
IG93biBjbGFzcyBCM1BlZXBob2xlT3B0aW1pemVyLCBjcmVhdGluZyBhIG5ldyB2YWx1ZSAob3B0
aW9uYWxseSBvbmx5IGlmIHRoZXkgY2FuIGRvIHNvIGNsZXZlcmx5KSwKKyAgICAgICAgbGVhdmlu
ZyB0aGUgY2FsbGVyIGRvIHRoZSByZXBsYWNlV2l0aElkZW50aXR5IG9uIHRoZSBvbGQgZGVmaW5p
dGlvbi4KKyAgICAgICAgVGhpcyBoYXMgc2V2ZXJhbCBiZW5lZml0czoKKyAgICAgICAgLSBVc2Vy
cyBvZiBCMyBjYW4gbm93IHVzZSB0aGlzIGludGVyZmFjZSB0byBjcmVhdGUgdmFsdWVzLCBvcHRp
bWl6aW5nIHRoZW0gb24gdGhlIGZseTsgYXZvaWRpbmcgYWxsb2NhdGluZyBCMzo6VmFsdWUgcyBq
dXN0IHRvIHNpbXBsaWZ5IHRoZW0uCisgICAgICAgICAgVGhpcyBwYXRjaCBwb3J0cyBGVExPdXRw
dXQuY3BwIHRvIHVzZSB0aGlzIGZhY2lsaXR5LgorICAgICAgICAtIFRoZSBvcHRpbWl6YXRpb25z
IGFyZSBzaWduaWZpY2FudGx5IHRlcnNlciBhbmQgbW9yZSByZWFkYWJsZSwgYXMgd2UgY2FuIGdp
dmUgbmFtZXMgdG8gdGhlIGFyZ3VtZW50cyAoZS5nLiBsZWZ0L3JpZ2h0IHZzIG1fdmFsdWUtPmNo
aWxkKDApL21fdmFsdWUtPmNoaWxkKDEpKQorICAgICAgICAgIFRoaXMgaGVscGVkIG1lIG5vdGlj
ZSB0aGF0IGEgY291cGxlIG9wdGltaXphdGlvbnMgd2VyZSBkZWFkIHdoaWxlIHdyaXRpbmcgdGhl
IHBhdGNoIChlLmcuIEFkZChOZWcoeCksIC0xKT0+Qml0WG9yKHgsIC0xKSBuZXZlciB0cmlnZ2Vy
ZWQgYXMgQWRkKE5lZyh4KSwgeSk9PlN1Yih5LCB4KSByYW4gYmVmb3JlIGl0KSwgYW5kIGZpeCB0
aGVtLgorICAgICAgICAtIFRoZSBvcHRpbWl6YXRpb25zIG5vdyBuYXR1cmFsbHkgcnVuIHRvIGEg
bG9jYWwgZml4cG9pbnQuIFRoaXMgY3VycmVudGx5IGlzIGEgbmVnbGlnaWJsZSBiZW5lZml0IGFz
IHdlIGRvbid0IGhhdmUgdGhhdCBtYW55IG9wdGltaXphdGlvbnMKKyAgICAgICAgICAsIGJ1dCBp
dCBlbnN1cmVzIHdlIGNhbiBhZGQgbWFueSBtb3JlIHdpdGhvdXQgc2lnbmlmaWNhbnRseSBpbmNy
ZWFzaW5nIHRoZSB0aW1lIHNwZW50IGluIEIzUmVkdWNlU3RyZW5ndGgKKyAgICAgICAgLSBMb25n
IHRlcm0gSSBwbGFuIHRvIGFkZCBhbiBhYnN0cmFjdCBpbnRlcnByZXRlci9mb3J3YXJkIHZhbHVl
IGFuYWx5emVyIHRvIEIzLCB3aGljaCB3b3VsZCBiZSBhIGxvdCBtb3JlIGFjY3VyYXRlIHRoYW4g
dGhlIGN1cnJlbnQgYm91bmRlZCBiYWNrd2FyZHMgYW5hbHlzaXMgaW4gQjNSZWR1Y2VTdHJlbmd0
aC4KKyAgICAgICAgICBUaGlzIHJlZmFjdG9yIGlzIG5lZWRlZCBhcyBhIHN0ZXAgdG93YXJkcyB0
aGlzLgorCisgICAgICAgIEkgbGVhdmUgaW4gQjNSZWR1Y2VTdHJlbmd0aCB0aGUgbm9uLWxvY2Fs
IG9wdGltaXphdGlvbnMgZm9yIEJyYW5jaCBhbmQgQ2hlY2suCisgICAgICAgIEkgYWxzbyBoYWQg
dG8gbW92ZSBJbnRSYW5nZSB0byBpdHMgb3duIEIzSW50UmFuZ2UuaCBmaWxlLCBzaW5jZSBpdCBp
cyBub3cgdXNlZCBieSBCM1BlZXBob2xlT3B0aW1pemVyLmNwcCBhbmQgbm90IEIzUmVkdWNlU3Ry
ZW5ndGguY3BwCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBhcyB0aGlzIGlzIGEgcmVmYWN0b3Ig
YW5kIGFsbCBvZiB0aGlzIGNvZGUgaXMgYWxyZWFkeSB0ZXN0ZWQuCisKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMu
dHh0OgorICAgICAgICAqIGIzL0IzRHVwbGljYXRlVGFpbHMuY3BwOgorICAgICAgICAqIGIzL0Iz
SW50UmFuZ2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpJbnRSYW5nZTo6SW50UmFuZ2Up
OgorICAgICAgICAoSlNDOjpCMzo6SW50UmFuZ2U6OnRvcCk6CisgICAgICAgIChKU0M6OkIzOjpJ
bnRSYW5nZTo6cmFuZ2VGb3JNYXNrKToKKyAgICAgICAgKEpTQzo6QjM6OkludFJhbmdlOjpyYW5n
ZUZvclpTaHIpOgorICAgICAgICAoSlNDOjpCMzo6SW50UmFuZ2U6Om1pbiBjb25zdCk6CisgICAg
ICAgIChKU0M6OkIzOjpJbnRSYW5nZTo6bWF4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6Oklu
dFJhbmdlOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkludFJhbmdlOjpjb3VsZE92
ZXJmbG93QWRkKToKKyAgICAgICAgKEpTQzo6QjM6OkludFJhbmdlOjpjb3VsZE92ZXJmbG93U3Vi
KToKKyAgICAgICAgKEpTQzo6QjM6OkludFJhbmdlOjpjb3VsZE92ZXJmbG93TXVsKToKKyAgICAg
ICAgKEpTQzo6QjM6OkludFJhbmdlOjpzaGwpOgorICAgICAgICAoSlNDOjpCMzo6SW50UmFuZ2U6
OnNTaHIpOgorICAgICAgICAoSlNDOjpCMzo6SW50UmFuZ2U6OnpTaHIpOgorICAgICAgICAoSlND
OjpCMzo6SW50UmFuZ2U6OmFkZCk6CisgICAgICAgIChKU0M6OkIzOjpJbnRSYW5nZTo6c3ViKToK
KyAgICAgICAgKEpTQzo6QjM6OkludFJhbmdlOjptdWwpOgorICAgICAgICAqIGIzL0IzTG93ZXJN
YWNyb3MuY3BwOgorICAgICAgICAqIGIzL0IzUGVlcGhvbGVPcHRpbWl6ZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjphcHBlbmRUb0N1cnJlbnRCbG9j
ayk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6ZW1pdCk6CisgICAgICAg
IChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlT3BhcXVlKToKKyAgICAgICAgKEpT
Qzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VBZGQpOgorICAgICAgICAoSlNDOjpCMzo6
UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVN1Yik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9s
ZU9wdGltaXplcjo6cmVkdWNlTmVnKToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1p
emVyOjpyZWR1Y2VNdWwpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJl
ZHVjZURpdik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlVURp
dik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlTW9kKToKKyAg
ICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VVTW9kKToKKyAgICAgICAg
KEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VCaXRBbmQpOgorICAgICAgICAoSlND
OjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUJpdE9yKToKKyAgICAgICAgKEpTQzo6QjM6
OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VCaXRYb3IpOgorICAgICAgICAoSlNDOjpCMzo6UGVl
cGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVNobCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9w
dGltaXplcjo6cmVkdWNlU1Nocik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXpl
cjo6cmVkdWNlWlNocik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVk
dWNlUm90Uik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlUm90
TCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlQWJzKToKKyAg
ICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VDZWlsKToKKyAgICAgICAg
KEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VGbG9vcik6CisgICAgICAgIChKU0M6
OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlU3FydCk6CisgICAgICAgIChKU0M6OkIzOjpQ
ZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlQml0d2lzZUNhc3QpOgorICAgICAgICAoSlNDOjpCMzo6
UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVNFeHQ4KToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBo
b2xlT3B0aW1pemVyOjpyZWR1Y2VTRXh0MTYpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVP
cHRpbWl6ZXI6OnJlZHVjZVNFeHQzMik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGlt
aXplcjo6cmVkdWNlWkV4dDMyKToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVy
OjpyZWR1Y2VUcnVuYyk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVk
dWNlSVRvRCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlSVRv
Rik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlRmxvYXRUb0Rv
dWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlRG91Ymxl
VG9GbG9hdCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlU2Vs
ZWN0KToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VMb2FkU3Rv
cmUpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUVxdWFsKToK
KyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VOb3RFcXVhbCk6Cisg
ICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlRXF1YWxPclVub3JkZXJl
ZCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlTGVzc1RoYW4p
OgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUdyZWF0ZXJUaGFu
KToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VMZXNzRXF1YWwp
OgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUdyZWF0ZXJFcXVh
bCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlQWJvdmUpOgor
ICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUJlbG93KToKKyAgICAg
ICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VBYm92ZUVxdWFsKToKKyAgICAg
ICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VCZWxvd0VxdWFsKToKKyAgICAg
ICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjp0cnlSZWR1Y2UpOgorICAgICAgICAoSlND
OjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnRyeVNpbXBsaWZ5QnJhbmNoKToKKyAgICAgICAgKEpT
Qzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjp0cnlTaW1wbGlmeUNDYWxsKToKKyAgICAgICAgKEpT
Qzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjp0cnlTaW1wbGlmeUNoZWNrQWRkKToKKyAgICAgICAg
KEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjp0cnlTaW1wbGlmeUNoZWNrU3ViKToKKyAgICAg
ICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjp0cnlTaW1wbGlmeUNoZWNrTXVsKToKKyAg
ICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjp0cnlTaW1wbGlmeUNoZWNrKToKKyAg
ICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpzaG91bGRHb0JlZm9yZSk6CisgICAg
ICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6dHJ5UmVkdWNlTXVsRGlzdHJpYnV0aXZp
dHkpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnRyeVJlZHVjZUJpdEFu
ZERpc3RyaWJ1dGl2aXR5KToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjp0
cnlSZWR1Y2VTaGlmdE9yUm90YXRlKToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1p
emVyOjpyYW5nZUZvcik6CisgICAgICAgICogYjMvQjNQZWVwaG9sZU9wdGltaXplci5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpQZWVwaG9sZU9wdGltaXpl
cik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6c2V0SW5kZXgpOgorICAg
ICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnNldEJsb2NrKToKKyAgICAgICAgKiBi
My9CM1JlZHVjZVN0cmVuZ3RoLmNwcDoKKyAgICAgICAgKiBiMy9CM1ZhbGlkYXRlLmNwcDoKKyAg
ICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6dGVzdE5lZ011bEFyZ0lt
bSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0RmxvYXRFcXVhbE9yVW5vcmRlcmVkRG9udEZvbGQp
OgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1
dDo6T3V0cHV0KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmFwcGVuZFRvKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpPdXRwdXQ6Om9wYXF1ZSk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0
OjphZGQpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6c3ViKToKKyAgICAgICAgKEpTQzo6
RlRMOjpPdXRwdXQ6Om11bCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpkaXYpOgorICAg
ICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6Y2hpbGxEaXYpOgorICAgICAgICAoSlNDOjpGVEw6Ok91
dHB1dDo6bW9kKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmNoaWxsTW9kKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpPdXRwdXQ6Om5lZyk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpk
b3VibGVBZGQpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlU3ViKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmRvdWJsZU11bCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0
cHV0Ojpkb3VibGVEaXYpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlTW9kKToK
KyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmJpdEFuZCk6CisgICAgICAgIChKU0M6OkZUTDo6
T3V0cHV0OjpiaXRPcik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpiaXRYb3IpOgorICAg
ICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6c2hsKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6
OmFTaHIpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bFNocik6CisgICAgICAgIChKU0M6
OkZUTDo6T3V0cHV0OjpiaXROb3QpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bG9naWNh
bE5vdCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpkb3VibGVBYnMpOgorICAgICAgICAo
SlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlQ2VpbCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0
Ojpkb3VibGVGbG9vcik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpkb3VibGVQb3dpKToK
KyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmRvdWJsZVNxcnQpOgorICAgICAgICAoSlNDOjpG
VEw6Ok91dHB1dDo6c2lnbkV4dDMyVG82NCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojp6
ZXJvRXh0KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmludFRvRG91YmxlKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmNhc3RUb0ludDMyKToKKyAgICAgICAgKEpTQzo6RlRMOjpP
dXRwdXQ6OmRvdWJsZVRvRmxvYXQpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZmxvYXRU
b0RvdWJsZSk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjplcXVhbCk6CisgICAgICAgIChK
U0M6OkZUTDo6T3V0cHV0Ojpub3RFcXVhbCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojph
Ym92ZSk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjphYm92ZU9yRXF1YWwpOgorICAgICAg
ICAoSlNDOjpGVEw6Ok91dHB1dDo6YmVsb3cpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6
YmVsb3dPckVxdWFsKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmdyZWF0ZXJUaGFuKToK
KyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmdyZWF0ZXJUaGFuT3JFcXVhbCk6CisgICAgICAg
IChKU0M6OkZUTDo6T3V0cHV0OjpsZXNzVGhhbik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0
OjpsZXNzVGhhbk9yRXF1YWwpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlRXF1
YWwpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlRXF1YWxPclVub3JkZXJlZCk6
CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpkb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKToK
KyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmRvdWJsZUxlc3NUaGFuKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpPdXRwdXQ6OmRvdWJsZUxlc3NUaGFuT3JFcXVhbCk6CisgICAgICAgIChKU0M6OkZU
TDo6T3V0cHV0Ojpkb3VibGVHcmVhdGVyVGhhbik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0
Ojpkb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6
aXNaZXJvMzIpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bm90WmVybzMyKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmlzWmVybzY0KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRw
dXQ6Om5vdFplcm82NCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpzZWxlY3QpOgorICAg
ICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6Yml0Q2FzdCk6CisgICAgICAgICogZnRsL0ZUTE91dHB1
dC5oOgorCiAyMDE5LTA0LTA0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIGJ1aWxkIGZpeCBmb3IgQ0xvb3AgYWZ0ZXIgcjI0Mzg4NgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkM2ZmMTA1Nzc1Ny4uOGZhNDg4MTI4NTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC04NTIsNiArODUyLDggQEAKIAkJMkFGNzM4
MkQxOEJCQkY5MjAwOEE1QTM3IC8qIFN0cnVjdHVyZUlEVGFibGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBRjczODJCMThCQkJGOTIwMDhBNUEzNyAv
KiBTdHJ1Y3R1cmVJRFRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMkQzNDJGMzZGNzI0NDA5NjgwNEFEQjI0IC8qIFNvdXJjZU9yaWdpbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDI1QkExMzM3
RTQzNDRFMUIyNjlBNjcxIC8qIFNvdXJjZU9yaWdpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTMzOTVDNzA3MjI1NTVGNkQwMEJEQkZBRCAvKiBC
M0VsaW1pbmF0ZURlYWRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMzk1QzcwNTIyNTU1RjZEMDBCREJGQUQgLyogQjNFbGltaW5hdGVEZWFkQ29k
ZS5oICovOyB9OworCQkzMzI0QUJCQTIyNTNFMDFEMDBDMzdFMUIgLyogQjNQZWVwaG9sZU9wdGlt
aXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzMy
NEFCQjgyMjUzRTAxRDAwQzM3RTFCIC8qIEIzUGVlcGhvbGVPcHRpbWl6ZXIuaCAqLzsgfTsKKwkJ
MzMyNEFCQkMyMjU2N0MyNTAwQzM3RTFCIC8qIEIzSW50UmFuZ2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzMjRBQkJCMjI1NjdDMjQwMEMzN0UxQiAv
KiBCM0ludFJhbmdlLmggKi87IH07CiAJCTM3MUQ4NDJEMTdDOThCNkUwMEVDRjk5NCAvKiBsaWJ6
LmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzcxRDg0MkMxN0M5OEI2RTAwRUNGOTk0IC8qIGxpYnouZHlsaWIgKi87IH07CiAJCTM3QzczOEQy
MUVEQjU2RTQwMDNGMkIwQiAvKiBQYXJzZUludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzdDNzM4RDExRURCNTY3MjAwM0YyQjBCIC8qIFBhcnNlSW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDEy
OTUyNzcxRDJDRjZCQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFw
cGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQxMjk1MjczMUQyQ0Y2QUMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5h
bHNfd3JhcHBlcl9oZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTMzNDUsNiArMzM0Nyw5IEBACiAJCTMzNzQzNjRBMjI0RDc5RUYwMEM4
QzIyNyAvKiBCM09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzLmg7IHBhdGggPSBiMy9C
M09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzM5NUM3MDQyMjU1NUY2QzAwQkRCRkFEIC8qIEIzRWxpbWluYXRlRGVhZENv
ZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNFbGltaW5hdGVE
ZWFkQ29kZS5jcHA7IHBhdGggPSBiMy9CM0VsaW1pbmF0ZURlYWRDb2RlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzM5NUM3MDUyMjU1NUY2RDAwQkRCRkFEIC8qIEIzRWxpbWlu
YXRlRGVhZENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNFbGltaW5h
dGVEZWFkQ29kZS5oOyBwYXRoID0gYjMvQjNFbGltaW5hdGVEZWFkQ29kZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkzMzI0QUJCNzIyNTNFMDFDMDBDMzdFMUIgLyogQjNQZWVwaG9s
ZU9wdGltaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1Bl
ZXBob2xlT3B0aW1pemVyLmNwcDsgcGF0aCA9IGIzL0IzUGVlcGhvbGVPcHRpbWl6ZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMzI0QUJCODIyNTNFMDFEMDBDMzdFMUIgLyog
QjNQZWVwaG9sZU9wdGltaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
M1BlZXBob2xlT3B0aW1pemVyLmg7IHBhdGggPSBiMy9CM1BlZXBob2xlT3B0aW1pemVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzMjRBQkJCMjI1NjdDMjQwMEMzN0UxQiAvKiBC
M0ludFJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzSW50UmFuZ2Uu
aDsgcGF0aCA9IGIzL0IzSW50UmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MzcxMTlBNzcyMENDQjVEQzAwMkM2REM5IC8qIFdlYktpdFRhcmdldENvbmRpdGlvbmFscy54Y2Nv
bmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQueGNjb25maWc7IHBhdGggPSBXZWJLaXRUYXJnZXRDb25kaXRpb25hbHMueGNjb25maWc7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MUQ4NDJDMTdDOThCNkUwMEVDRjk5NCAvKiBs
aWJ6LmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJ6LmR5bGliOyBwYXRoID0gdXNy
L2xpYi9saWJ6LmR5bGliOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsgfTsKIAkJMzdDNzM4RDExRURC
NTY3MjAwM0YyQjBCIC8qIFBhcnNlSW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBhcnNlSW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01Mzk0LDYgKzUz
OTksNyBAQAogCQkJCTBGRUM4NUI0MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNldC5j
cHAgKi8sCiAJCQkJMEZFQzg1QjUxQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5zZXJ0aW9uU2V0Lmgg
Ki8sCiAJCQkJMEZFQzg1QjYxQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5zZXJ0aW9uU2V0SW5saW5l
cy5oICovLAorCQkJCTMzMjRBQkJCMjI1NjdDMjQwMEMzN0UxQiAvKiBCM0ludFJhbmdlLmggKi8s
CiAJCQkJMEZERjY3RDAxRDlDNjA4NjAwMUI5ODI1IC8qIEIzS2luZC5jcHAgKi8sCiAJCQkJMEZE
RjY3RDExRDlDNjA4NjAwMUI5ODI1IC8qIEIzS2luZC5oICovLAogCQkJCTQzNkU1NDUxMUM0NjhF
NUYwMEI1QUY3MyAvKiBCM0xlZ2FsaXplTWVtb3J5T2Zmc2V0cy5jcHAgKi8sCkBAIC01NDI5LDYg
KzU0MzUsOCBAQAogCQkJCTBGRUM4NEREMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRW
YWx1ZS5jcHAgKi8sCiAJCQkJMEZFQzg0REUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2lu
dFZhbHVlLmggKi8sCiAJCQkJNzk5RUY3QzMxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdp
bk1hcC5oICovLAorCQkJCTMzMjRBQkI3MjI1M0UwMUMwMEMzN0UxQiAvKiBCM1BlZXBob2xlT3B0
aW1pemVyLmNwcCAqLywKKwkJCQkzMzI0QUJCODIyNTNFMDFEMDBDMzdFMUIgLyogQjNQZWVwaG9s
ZU9wdGltaXplci5oICovLAogCQkJCTBGRUM4NERGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNl
U2NvcGUuY3BwICovLAogCQkJCTBGRUM4NEUwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2Nv
cGUuaCAqLywKIAkJCQkwRjM3MzA4QTFDMEJEMjkxMDAwNTJCRkEgLyogQjNQaGlDaGlsZHJlbi5j
cHAgKi8sCkBAIC04NjI3LDYgKzg2MzUsNyBAQAogCQkJCTUyM0ZEODhFMjI1NTY2QzkwMDNCM0RD
QyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDODVCQjFCRTE0NjJGMDA4MEZGNzQgLyogQjNJbnNlcnRpb25TZXRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkRGNjdEMjFEOUM2RDI3MDAxQjk4MjUgLyogQjNLaW5kLmggaW4g
SGVhZGVycyAqLywKKwkJCQkzMzI0QUJCQTIyNTNFMDFEMDBDMzdFMUIgLyogQjNQZWVwaG9sZU9w
dGltaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2RTU0NTMxQzQ2OEU3NDAwQjVBRjczIC8q
IEIzTGVnYWxpemVNZW1vcnlPZmZzZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOEUxRTFC
RjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDMx
OURBMDQxQzFCRTQwRDAwMUQyNjBCIC8qIEIzTG93ZXJNYWNyb3NBZnRlck9wdGltaXphdGlvbnMu
aCBpbiBIZWFkZXJzICovLApAQCAtOTk0Niw2ICs5OTU1LDcgQEAKIAkJCQlBRDJGQ0MxQTFEQjU5
Q0IyMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUFEMkZDQkY3MURCNThEQUQwMEIzRTczNiAvKiBXZWJBc3NlbWJseU1lbW9y
eVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNDMUIxREI1OUNCMjAwQjNFNzM2
IC8qIFdlYkFzc2VtYmx5TWVtb3J5UHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MzMyNEFCQkMyMjU2N0MyNTAwQzM3RTFCIC8qIEIzSW50UmFuZ2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCUFEMkZDQzAxMURCNThEQUQwMEIzRTczNiAvKiBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDJGQ0MxQzFEQjU5Q0IyMDBCM0U3MzYgLyogV2Vi
QXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZD
QzAzMURCNThEQUQwMEIzRTczNiAvKiBXZWJBc3NlbWJseU1vZHVsZVByb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5kZXggMjRjMmQ2ODUzMjMuLjJh
MzQwZDdkY2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC0xNDksNiArMTQ5LDcg
QEAgYjMvQjNPcmlnaW4uY3BwCiBiMy9CM09yaWdpbkR1bXAuY3BwCiBiMy9CM1BhdGNocG9pbnRT
cGVjaWFsLmNwcAogYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCitiMy9CM1BlZXBob2xlT3B0aW1p
emVyLmNwcAogYjMvQjNQaGFzZVNjb3BlLmNwcAogYjMvQjNQaGlDaGlsZHJlbi5jcHAKIGIzL0Iz
UHJvY2VkdXJlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRHVw
bGljYXRlVGFpbHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRHVwbGljYXRlVGFp
bHMuY3BwCmluZGV4IGNmZjQ0YTRjMWUwLi40MTU3NWNhM2I5YyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzRHVwbGljYXRlVGFpbHMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0R1cGxpY2F0ZVRhaWxzLmNwcApAQCAtNjYsNyArNjYsNyBAQCBwdWJs
aWM6CiAgICAgICAgIGJyZWFrQ3JpdGljYWxFZGdlcyhtX3Byb2MpOwogICAgICAgICAKICAgICAg
ICAgLy8gRmluZCBibG9ja3MgdGhhdCB3b3VsZCBiZSBjYW5kaWRhdGVzIGZvciB0YWlsIGR1cGxp
Y2F0aW9uLiBUaGV5IG11c3QgYmUgc21hbGwgZW5vdWdoCi0gICAgICAgIC8vIGFuZCB0aGV5IG11
Y2ggbm90IGhhdmUgdG9vIG1hbnkgc3VjY2Vzc29ycy4KKyAgICAgICAgLy8gYW5kIHRoZXkgbXVz
dCBub3QgaGF2ZSB0b28gbWFueSBzdWNjZXNzb3JzLgogCiAgICAgICAgIG1fcHJvYy5yZXNldFZh
bHVlT3duZXJzKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0lu
dFJhbmdlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnRSYW5nZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44YmNiOTE5MTQ3NwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ludFJhbmdlLmgKQEAgLTAsMCArMSwz
NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1R5cGUuaCIKKyNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKKy8vIEZJWE1FOiBUaGlzIEludFJhbmdlIHN0dWZmIHNob3VsZCBiZSByZWZhY3RvcmVk
IGludG8gYSBnZW5lcmFsIGFic3RyYWN0IGRvbWFpbi4KKy8vIEl0IGNvdWxkIGVhc2lseSBiZSBl
eHRlbmRlZCBpbiBsb3RzIG9mIGRpcmVjdGlvbnMsIGluY2x1ZGluZyBhIGtub3duQml0cyBhbmFs
eXNpcywgc3VwcG9ydGluZyBtYW55IG1vcmUgb3Bjb2RlcywgYmVpbmcgc2lnbmlmaWNhbnRseSBt
b3JlIHByZWNpc2UsIGV0Yy4uCitjbGFzcyBJbnRSYW5nZSB7CitwdWJsaWM6CisgICAgSW50UmFu
Z2UoKQorICAgIHsKKyAgICB9CisKKyAgICBJbnRSYW5nZShpbnQ2NF90IG1pbiwgaW50NjRfdCBt
YXgpCisgICAgICAgIDogbV9taW4obWluKQorICAgICAgICAsIG1fbWF4KG1heCkKKyAgICB7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgSW50UmFuZ2UgdG9w
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBJbnRSYW5nZShzdGQ6Om51bWVyaWNfbGltaXRzPFQ+
OjptaW4oKSwgc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCkpOworICAgIH0KKworICAgIHN0
YXRpYyBJbnRSYW5nZSB0b3AoVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICByZXR1cm4gdG9wPGludDMyX3Q+
KCk7CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICByZXR1cm4gdG9wPGludDY0X3Q+
KCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIEludFJhbmdlKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBJbnRSYW5nZSByYW5nZUZv
ck1hc2soVCBtYXNrKQorICAgIHsKKyAgICAgICAgaWYgKCEobWFzayArIDEpKQorICAgICAgICAg
ICAgcmV0dXJuIHRvcDxUPigpOworICAgICAgICByZXR1cm4gSW50UmFuZ2UoMCwgbWFzayk7Cisg
ICAgfQorCisgICAgc3RhdGljIEludFJhbmdlIHJhbmdlRm9yTWFzayhpbnQ2NF90IG1hc2ssIFR5
cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIElu
dDMyOgorICAgICAgICAgICAgcmV0dXJuIHJhbmdlRm9yTWFzazxpbnQzMl90PihzdGF0aWNfY2Fz
dDxpbnQzMl90PihtYXNrKSk7CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICByZXR1
cm4gcmFuZ2VGb3JNYXNrPGludDY0X3Q+KG1hc2spOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBJ
bnRSYW5nZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
KyAgICBzdGF0aWMgSW50UmFuZ2UgcmFuZ2VGb3JaU2hyKGludDMyX3Qgc2hpZnRBbW91bnQpCisg
ICAgeworICAgICAgICB0eXBlbmFtZSBzdGQ6Om1ha2VfdW5zaWduZWQ8VD46OnR5cGUgbWFzayA9
IDA7CisgICAgICAgIG1hc2stLTsKKyAgICAgICAgbWFzayA+Pj0gc2hpZnRBbW91bnQ7CisgICAg
ICAgIHJldHVybiByYW5nZUZvck1hc2s8VD4oc3RhdGljX2Nhc3Q8VD4obWFzaykpOworICAgIH0K
KworICAgIHN0YXRpYyBJbnRSYW5nZSByYW5nZUZvclpTaHIoaW50MzJfdCBzaGlmdEFtb3VudCwg
VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2Ug
SW50MzI6CisgICAgICAgICAgICByZXR1cm4gcmFuZ2VGb3JaU2hyPGludDMyX3Q+KHNoaWZ0QW1v
dW50KTsKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIHJldHVybiByYW5nZUZvclpT
aHI8aW50NjRfdD4oc2hpZnRBbW91bnQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSYW5n
ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgaW50NjRfdCBtaW4oKSBjb25zdCB7IHJldHVy
biBtX21pbjsgfQorICAgIGludDY0X3QgbWF4KCkgY29uc3QgeyByZXR1cm4gbV9tYXg7IH0KKwor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0
LnByaW50KCJbIiwgbV9taW4sICIsIiwgbV9tYXgsICJdIik7CisgICAgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KKyAgICBib29sIGNvdWxkT3ZlcmZsb3dBZGQoY29uc3QgSW50UmFuZ2Um
IG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN1bU92ZXJmbG93czxUPihtX21pbiwgb3Ro
ZXIubV9taW4pCisgICAgICAgICAgICB8fCBzdW1PdmVyZmxvd3M8VD4obV9taW4sIG90aGVyLm1f
bWF4KQorICAgICAgICAgICAgfHwgc3VtT3ZlcmZsb3dzPFQ+KG1fbWF4LCBvdGhlci5tX21pbikK
KyAgICAgICAgICAgIHx8IHN1bU92ZXJmbG93czxUPihtX21heCwgb3RoZXIubV9tYXgpOworICAg
IH0KKworICAgIGJvb2wgY291bGRPdmVyZmxvd0FkZChjb25zdCBJbnRSYW5nZSYgb3RoZXIsIFR5
cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIElu
dDMyOgorICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dBZGQ8aW50MzJfdD4ob3RoZXIp
OworICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dB
ZGQ8aW50NjRfdD4ob3RoZXIpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
IGJvb2wgY291bGRPdmVyZmxvd1N1Yihjb25zdCBJbnRSYW5nZSYgb3RoZXIpCisgICAgeworICAg
ICAgICByZXR1cm4gZGlmZmVyZW5jZU92ZXJmbG93czxUPihtX21pbiwgb3RoZXIubV9taW4pCisg
ICAgICAgICAgICB8fCBkaWZmZXJlbmNlT3ZlcmZsb3dzPFQ+KG1fbWluLCBvdGhlci5tX21heCkK
KyAgICAgICAgICAgIHx8IGRpZmZlcmVuY2VPdmVyZmxvd3M8VD4obV9tYXgsIG90aGVyLm1fbWlu
KQorICAgICAgICAgICAgfHwgZGlmZmVyZW5jZU92ZXJmbG93czxUPihtX21heCwgb3RoZXIubV9t
YXgpOworICAgIH0KKworICAgIGJvb2wgY291bGRPdmVyZmxvd1N1Yihjb25zdCBJbnRSYW5nZSYg
b3RoZXIsIFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAg
ICBjYXNlIEludDMyOgorICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dTdWI8aW50MzJf
dD4ob3RoZXIpOworICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgcmV0dXJuIGNvdWxk
T3ZlcmZsb3dTdWI8aW50NjRfdD4ob3RoZXIpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIGJvb2wgY291bGRPdmVyZmxvd011bChjb25zdCBJbnRSYW5nZSYgb3RoZXIpCisg
ICAgeworICAgICAgICByZXR1cm4gcHJvZHVjdE92ZXJmbG93czxUPihtX21pbiwgb3RoZXIubV9t
aW4pCisgICAgICAgICAgICB8fCBwcm9kdWN0T3ZlcmZsb3dzPFQ+KG1fbWluLCBvdGhlci5tX21h
eCkKKyAgICAgICAgICAgIHx8IHByb2R1Y3RPdmVyZmxvd3M8VD4obV9tYXgsIG90aGVyLm1fbWlu
KQorICAgICAgICAgICAgfHwgcHJvZHVjdE92ZXJmbG93czxUPihtX21heCwgb3RoZXIubV9tYXgp
OworICAgIH0KKworICAgIGJvb2wgY291bGRPdmVyZmxvd011bChjb25zdCBJbnRSYW5nZSYgb3Ro
ZXIsIFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBj
YXNlIEludDMyOgorICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dNdWw8aW50MzJfdD4o
b3RoZXIpOworICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3Zl
cmZsb3dNdWw8aW50NjRfdD4ob3RoZXIpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIEludFJhbmdlIHNobChpbnQzMl90IHNoaWZ0QW1vdW50KQorICAgIHsKKyAgICAgICAg
VCBuZXdNaW4gPSBzdGF0aWNfY2FzdDxUPihtX21pbikgPDwgc3RhdGljX2Nhc3Q8VD4oc2hpZnRB
bW91bnQpOworICAgICAgICBUIG5ld01heCA9IHN0YXRpY19jYXN0PFQ+KG1fbWF4KSA8PCBzdGF0
aWNfY2FzdDxUPihzaGlmdEFtb3VudCk7CisKKyAgICAgICAgaWYgKChuZXdNaW4gPj4gc2hpZnRB
bW91bnQpICE9IHN0YXRpY19jYXN0PFQ+KG1fbWluKSkKKyAgICAgICAgICAgIG5ld01pbiA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8VD46Om1pbigpOworICAgICAgICBpZiAoKG5ld01heCA+PiBzaGlm
dEFtb3VudCkgIT0gc3RhdGljX2Nhc3Q8VD4obV9tYXgpKQorICAgICAgICAgICAgbmV3TWF4ID0g
c3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCk7CisKKyAgICAgICAgcmV0dXJuIEludFJhbmdl
KG5ld01pbiwgbmV3TWF4KTsKKyAgICB9CisKKyAgICBJbnRSYW5nZSBzaGwoaW50MzJfdCBzaGlm
dEFtb3VudCwgVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
ICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICByZXR1cm4gc2hsPGludDMyX3Q+KHNoaWZ0QW1v
dW50KTsKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIHJldHVybiBzaGw8aW50NjRf
dD4oc2hpZnRBbW91bnQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBJbnRSYW5nZSBz
U2hyKGludDMyX3Qgc2hpZnRBbW91bnQpCisgICAgeworICAgICAgICBUIG5ld01pbiA9IHN0YXRp
Y19jYXN0PFQ+KG1fbWluKSA+PiBzdGF0aWNfY2FzdDxUPihzaGlmdEFtb3VudCk7CisgICAgICAg
IFQgbmV3TWF4ID0gc3RhdGljX2Nhc3Q8VD4obV9tYXgpID4+IHN0YXRpY19jYXN0PFQ+KHNoaWZ0
QW1vdW50KTsKKworICAgICAgICByZXR1cm4gSW50UmFuZ2UobmV3TWluLCBuZXdNYXgpOworICAg
IH0KKworICAgIEludFJhbmdlIHNTaHIoaW50MzJfdCBzaGlmdEFtb3VudCwgVHlwZSB0eXBlKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAg
ICAgICAgICByZXR1cm4gc1NocjxpbnQzMl90PihzaGlmdEFtb3VudCk7CisgICAgICAgIGNhc2Ug
SW50NjQ6CisgICAgICAgICAgICByZXR1cm4gc1NocjxpbnQ2NF90PihzaGlmdEFtb3VudCk7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgcmV0dXJuIEludFJhbmdlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIEludFJhbmdlIHpTaHIoaW50MzJfdCBzaGlmdEFt
b3VudCkKKyAgICB7CisgICAgICAgIC8vIFRoaXMgaXMgYW4gYXdrd2FyZCBjb3JuZXIgY2FzZSBm
b3IgYWxsIG9mIHRoZSBvdGhlciBsb2dpYy4KKyAgICAgICAgaWYgKCFzaGlmdEFtb3VudCkKKyAg
ICAgICAgICAgIHJldHVybiAqdGhpczsKKworICAgICAgICAvLyBJZiB0aGUgaW5wdXQgcmFuZ2Ug
bWF5IGJlIG5lZ2F0aXZlLCB0aGVuIGFsbCB3ZSBjYW4gc2F5IGFib3V0IHRoZSBvdXRwdXQgcmFu
Z2UgaXMgdGhhdCBpdAorICAgICAgICAvLyB3aWxsIGJlIG1hc2tlZC4gVGhhdCdzIGJlY2F1c2Ug
LTEgcmlnaHQgc2hpZnRlZCBqdXN0IHByb2R1Y2VzIHRoYXQgbWFzay4KKyAgICAgICAgaWYgKG1f
bWluIDwgMCkKKyAgICAgICAgICAgIHJldHVybiByYW5nZUZvclpTaHI8VD4oc2hpZnRBbW91bnQp
OworCisgICAgICAgIC8vIElmIHRoZSBpbnB1dCByYW5nZSBpcyBub24tbmVnYXRpdmUsIHRoZW4g
dGhpcyBqdXN0IGJyaW5ncyB0aGUgcmFuZ2UgY2xvc2VyIHRvIHplcm8uCisgICAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgc3RkOjptYWtlX3Vuc2lnbmVkPFQ+Ojp0eXBlIFVuc2lnbmVkVDsKKyAgICAg
ICAgVW5zaWduZWRUIG5ld01pbiA9IHN0YXRpY19jYXN0PFVuc2lnbmVkVD4obV9taW4pID4+IHN0
YXRpY19jYXN0PFVuc2lnbmVkVD4oc2hpZnRBbW91bnQpOworICAgICAgICBVbnNpZ25lZFQgbmV3
TWF4ID0gc3RhdGljX2Nhc3Q8VW5zaWduZWRUPihtX21heCkgPj4gc3RhdGljX2Nhc3Q8VW5zaWdu
ZWRUPihzaGlmdEFtb3VudCk7CisKKyAgICAgICAgcmV0dXJuIEludFJhbmdlKG5ld01pbiwgbmV3
TWF4KTsKKyAgICB9CisKKyAgICBJbnRSYW5nZSB6U2hyKGludDMyX3Qgc2hpZnRBbW91bnQsIFR5
cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIElu
dDMyOgorICAgICAgICAgICAgcmV0dXJuIHpTaHI8aW50MzJfdD4oc2hpZnRBbW91bnQpOworICAg
ICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgcmV0dXJuIHpTaHI8aW50NjRfdD4oc2hpZnRB
bW91bnQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBJbnRSYW5nZSBhZGQoY29uc3Qg
SW50UmFuZ2UmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKGNvdWxkT3ZlcmZsb3dBZGQ8VD4o
b3RoZXIpKQorICAgICAgICAgICAgcmV0dXJuIHRvcDxUPigpOworICAgICAgICByZXR1cm4gSW50
UmFuZ2UobV9taW4gKyBvdGhlci5tX21pbiwgbV9tYXggKyBvdGhlci5tX21heCk7CisgICAgfQor
CisgICAgSW50UmFuZ2UgYWRkKGNvbnN0IEludFJhbmdlJiBvdGhlciwgVHlwZSB0eXBlKQorICAg
IHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAg
ICAgICByZXR1cm4gYWRkPGludDMyX3Q+KG90aGVyKTsKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAg
ICAgICAgICAgIHJldHVybiBhZGQ8aW50NjRfdD4ob3RoZXIpOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJl
dHVybiBJbnRSYW5nZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KKyAgICBJbnRSYW5nZSBzdWIoY29uc3QgSW50UmFuZ2UmIG90aGVyKQorICAgIHsKKyAg
ICAgICAgaWYgKGNvdWxkT3ZlcmZsb3dTdWI8VD4ob3RoZXIpKQorICAgICAgICAgICAgcmV0dXJu
IHRvcDxUPigpOworICAgICAgICByZXR1cm4gSW50UmFuZ2UobV9taW4gLSBvdGhlci5tX21heCwg
bV9tYXggLSBvdGhlci5tX21pbik7CisgICAgfQorCisgICAgSW50UmFuZ2Ugc3ViKGNvbnN0IElu
dFJhbmdlJiBvdGhlciwgVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICByZXR1cm4gc3ViPGludDMyX3Q+KG90
aGVyKTsKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIHJldHVybiBzdWI8aW50NjRf
dD4ob3RoZXIpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOworICAgICAgICB9
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBJbnRSYW5nZSBtdWwoY29u
c3QgSW50UmFuZ2UmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKGNvdWxkT3ZlcmZsb3dNdWw8
VD4ob3RoZXIpKQorICAgICAgICAgICAgcmV0dXJuIHRvcDxUPigpOworICAgICAgICByZXR1cm4g
SW50UmFuZ2UoCisgICAgICAgICAgICBzdGQ6Om1pbigKKyAgICAgICAgICAgICAgICBzdGQ6Om1p
bihtX21pbiAqIG90aGVyLm1fbWluLCBtX21pbiAqIG90aGVyLm1fbWF4KSwKKyAgICAgICAgICAg
ICAgICBzdGQ6Om1pbihtX21heCAqIG90aGVyLm1fbWluLCBtX21heCAqIG90aGVyLm1fbWF4KSks
CisgICAgICAgICAgICBzdGQ6Om1heCgKKyAgICAgICAgICAgICAgICBzdGQ6Om1heChtX21pbiAq
IG90aGVyLm1fbWluLCBtX21pbiAqIG90aGVyLm1fbWF4KSwKKyAgICAgICAgICAgICAgICBzdGQ6
Om1heChtX21heCAqIG90aGVyLm1fbWluLCBtX21heCAqIG90aGVyLm1fbWF4KSkpOworICAgIH0K
KworICAgIEludFJhbmdlIG11bChjb25zdCBJbnRSYW5nZSYgb3RoZXIsIFR5cGUgdHlwZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAg
ICAgICAgcmV0dXJuIG11bDxpbnQzMl90PihvdGhlcik7CisgICAgICAgIGNhc2UgSW50NjQ6Cisg
ICAgICAgICAgICByZXR1cm4gbXVsPGludDY0X3Q+KG90aGVyKTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBy
ZXR1cm4gSW50UmFuZ2UoKTsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQ2
NF90IG1fbWluIHsgMCB9OworICAgIGludDY0X3QgbV9tYXggeyAwIH07Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAKaW5kZXggNGM1OTRkMjRiMzMuLjk5ZmFm
NDBjMmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jv
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCkBA
IC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiQjNJbnNlcnRpb25TZXRJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiQjNNZW1vcnlWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJCM1BhdGNocG9pbnRWYWx1
ZS5oIgorI2luY2x1ZGUgIkIzUGVlcGhvbGVPcHRpbWl6ZXIuaCIKICNpbmNsdWRlICJCM1BoYXNl
U2NvcGUuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJCM1N0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIgpAQCAtODgsNyArODksOSBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIHZvaWQgcHJvY2Vzc0N1cnJlbnRCbG9jaygpCiAgICAgeworICAgICAgICBQZWVw
aG9sZU9wdGltaXplciBwZWVwaG9sZShtX3Byb2MsIG1faW5zZXJ0aW9uU2V0KTsKICAgICAgICAg
Zm9yIChtX2luZGV4ID0gMDsgbV9pbmRleCA8IG1fYmxvY2stPnNpemUoKTsgKyttX2luZGV4KSB7
CisgICAgICAgICAgICBwZWVwaG9sZS5zZXRJbmRleChtX2luZGV4KTsKICAgICAgICAgICAgIG1f
dmFsdWUgPSBtX2Jsb2NrLT5hdChtX2luZGV4KTsKICAgICAgICAgICAgIG1fb3JpZ2luID0gbV92
YWx1ZS0+b3JpZ2luKCk7CiAgICAgICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7
CkBAIC05Niw2ICs5OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUt
PmlzQ2hpbGwoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoaXNBUk02NCgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBiZWZvcmUgPSBtX2Jsb2NrSW5zZXJ0aW9u
U2V0LnNwbGl0Rm9yd2FyZChtX2Jsb2NrLCBtX2luZGV4LCAmbV9pbnNlcnRpb25TZXQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcGVlcGhvbGUuc2V0SW5kZXgobV9pbmRleCk7IC8vIHNwbGl0
Rm9yd2FyZCByZXNldHMgbV9pbmRleCwgc28gd2UgbXVzdCB1cGRhdGUgdGhlIGNvcHkgaW4gcGVl
cGhvbGUKICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHplcm9EZW5DYXNlID0g
bV9ibG9ja0luc2VydGlvblNldC5pbnNlcnRCZWZvcmUobV9ibG9jayk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBub3JtYWxNb2RDYXNlID0gbV9ibG9ja0luc2VydGlvblNl
dC5pbnNlcnRCZWZvcmUobV9ibG9jayk7CiAKQEAgLTEyNCw3ICsxMjgsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlLT51cGRhdGVQcmVkZWNlc3NvcnNBZnRlcigp
OwogICAgICAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBtYWtlRGl2aXNpb25DaGls
bChNb2QpOworICAgICAgICAgICAgICAgICAgICAgICAgbWFrZURpdmlzaW9uQ2hpbGwoTW9kLCBw
ZWVwaG9sZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAKQEAgLTEzOSwyMSArMTQzLDIxIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkocmVzdWx0KTsKICAgICAg
ICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKG1fdmFsdWUtPnR5cGUoKSA9PSBGbG9hdCkgewotICAgICAgICAgICAgICAgICAgICBWYWx1
ZSogbnVtZXJhdG9yQXNEb3VibGUgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5k
ZXgsIEZsb2F0VG9Eb3VibGUsIG1fb3JpZ2luLCBtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIFZhbHVlKiBkZW5vbWluYXRvckFzRG91YmxlID0gbV9pbnNlcnRpb25TZXQu
aW5zZXJ0PFZhbHVlPihtX2luZGV4LCBGbG9hdFRvRG91YmxlLCBtX29yaWdpbiwgbV92YWx1ZS0+
Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbnVtZXJhdG9yQXNEb3VibGUg
PSBwZWVwaG9sZS5yZWR1Y2VGbG9hdFRvRG91YmxlKERvdWJsZSwgbV9vcmlnaW4sIG1fdmFsdWUt
PmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGRlbm9taW5hdG9yQXNEb3Vi
bGUgPSBwZWVwaG9sZS5yZWR1Y2VGbG9hdFRvRG91YmxlKERvdWJsZSwgbV9vcmlnaW4sIG1fdmFs
dWUtPmNoaWxkKDEpKTsKICAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGZ1bmN0aW9uQWRkcmVz
cyA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdFB0clZhbHVlPihtX2luZGV4LCBtX29yaWdp
biwgZm1vZERvdWJsZSk7CiAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBkb3VibGVNb2QgPSBt
X2luc2VydGlvblNldC5pbnNlcnQ8Q0NhbGxWYWx1ZT4obV9pbmRleCwgRG91YmxlLCBtX29yaWdp
biwKICAgICAgICAgICAgICAgICAgICAgICAgIEVmZmVjdHM6Om5vbmUoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIGZ1bmN0aW9uQWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgIG51
bWVyYXRvckFzRG91YmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgZGVub21pbmF0b3JBc0Rv
dWJsZSk7Ci0gICAgICAgICAgICAgICAgICAgIFZhbHVlKiByZXN1bHQgPSBtX2luc2VydGlvblNl
dC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIERvdWJsZVRvRmxvYXQsIG1fb3JpZ2luLCBkb3VibGVN
b2QpOworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogcmVzdWx0ID0gcGVlcGhvbGUucmVkdWNl
RG91YmxlVG9GbG9hdChGbG9hdCwgbV9vcmlnaW4sIGRvdWJsZU1vZCk7CiAgICAgICAgICAgICAg
ICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkocmVzdWx0KTsKICAgICAgICAgICAg
ICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlz
QVJNNjQoKSkgewotICAgICAgICAgICAgICAgICAgICBWYWx1ZSogZGl2UmVzdWx0ID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBjaGlsbChEaXYpLCBtX29yaWdpbiwgbV92
YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICAgICAg
VmFsdWUqIG11bHRpcGxpZWRCYWNrID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2lu
ZGV4LCBNdWwsIG1fb3JpZ2luLCBkaXZSZXN1bHQsIG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAg
ICAgICAgICAgICAgICAgVmFsdWUqIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1
ZT4obV9pbmRleCwgU3ViLCBtX29yaWdpbiwgbV92YWx1ZS0+Y2hpbGQoMCksIG11bHRpcGxpZWRC
YWNrKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGRpdlJlc3VsdCA9IHBlZXBob2xlLnJl
ZHVjZURpdihtX3ZhbHVlLT50eXBlKCksIG1fb3JpZ2luLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92
YWx1ZS0+Y2hpbGQoMSksIHRydWUpOworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbXVsdGlw
bGllZEJhY2sgPSBwZWVwaG9sZS5yZWR1Y2VNdWwobV92YWx1ZS0+dHlwZSgpLCBtX29yaWdpbiwg
ZGl2UmVzdWx0LCBtX3ZhbHVlLT5jaGlsZCgxKSk7CisgICAgICAgICAgICAgICAgICAgIFZhbHVl
KiByZXN1bHQgPSBwZWVwaG9sZS5yZWR1Y2VTdWIobV92YWx1ZS0+dHlwZSgpLCBtX29yaWdpbiwg
bV92YWx1ZS0+Y2hpbGQoMCksIG11bHRpcGxpZWRCYWNrKTsKICAgICAgICAgICAgICAgICAgICAg
bV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShyZXN1bHQpOwogICAgICAgICAgICAgICAgICAg
ICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KQEAgLTE2Miw5ICsxNjYsOSBA
QCBwcml2YXRlOgogCiAgICAgICAgICAgICBjYXNlIFVNb2Q6IHsKICAgICAgICAgICAgICAgICBp
ZiAoaXNBUk02NCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFZhbHVlKiBkaXZSZXN1bHQgPSBt
X2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIFVEaXYsIG1fb3JpZ2luLCBtX3Zh
bHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgICAgICBW
YWx1ZSogbXVsdGlwbGllZEJhY2sgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5k
ZXgsIE11bCwgbV9vcmlnaW4sIGRpdlJlc3VsdCwgbV92YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAg
ICAgICAgICAgICAgICBWYWx1ZSogcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVl
PihtX2luZGV4LCBTdWIsIG1fb3JpZ2luLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbXVsdGlwbGllZEJh
Y2spOworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogZGl2UmVzdWx0ID0gcGVlcGhvbGUucmVk
dWNlVURpdihtX3ZhbHVlLT50eXBlKCksIG1fb3JpZ2luLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92
YWx1ZS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbXVsdGlwbGllZEJh
Y2sgPSBwZWVwaG9sZS5yZWR1Y2VNdWwobV92YWx1ZS0+dHlwZSgpLCBtX29yaWdpbiwgZGl2UmVz
dWx0LCBtX3ZhbHVlLT5jaGlsZCgxKSk7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiByZXN1
bHQgPSBwZWVwaG9sZS5yZWR1Y2VTdWIobV92YWx1ZS0+dHlwZSgpLCBtX29yaWdpbiwgbV92YWx1
ZS0+Y2hpbGQoMCksIG11bHRpcGxpZWRCYWNrKTsKICAgICAgICAgICAgICAgICAgICAgbV92YWx1
ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShyZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KQEAgLTE3Myw3ICsxNzcsNyBAQCBwcml2
YXRlOgogCiAgICAgICAgICAgICBjYXNlIERpdjogewogICAgICAgICAgICAgICAgIGlmIChtX3Zh
bHVlLT5pc0NoaWxsKCkpCi0gICAgICAgICAgICAgICAgICAgIG1ha2VEaXZpc2lvbkNoaWxsKERp
dik7CisgICAgICAgICAgICAgICAgICAgIG1ha2VEaXZpc2lvbkNoaWxsKERpdiwgcGVlcGhvbGUp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCkBAIC0yMjUsMTAgKzIy
OSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKCFpc1g4NigpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIE9uIEFSTSwgdGhlIGxvYWQgcGFydCBvZiB0aGUgQ0FTIGRvZXMgYSBs
b2FkIHdpdGggemVybyBleHRlbnNpb24uIFRoZXJlZm9yZSwgd2UgbmVlZAogICAgICAgICAgICAg
ICAgICAgICAvLyB0byB6ZXJvLWV4dGVuZCB0aGUgaW5wdXQuCi0gICAgICAgICAgICAgICAgICAg
IFZhbHVlKiBtYXNrZWRFeHBlY3RlZFZhbHVlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVl
PigKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIEJpdEFuZCwgbV9vcmlnaW4sIGV4
cGVjdGVkVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnRJbnRDb25zdGFudChtX2luZGV4LCBleHBlY3RlZFZhbHVlLCBtYXNrKHdpZHRoKSkpOwotICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG1hc2tWYWx1ZSA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydEludENvbnN0YW50KG1faW5kZXgsIGV4cGVjdGVkVmFsdWUs
IG1hc2sod2lkdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG1hc2tlZEV4cGVjdGVk
VmFsdWUgPSBwZWVwaG9sZS5yZWR1Y2VCaXRBbmQobV92YWx1ZS0+dHlwZSgpLCBtX29yaWdpbiwg
ZXhwZWN0ZWRWYWx1ZSwgbWFza1ZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgYXRvbWljLT5j
aGlsZCgwKSA9IG1hc2tlZEV4cGVjdGVkVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgIG1fY2hh
bmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzI0LDcgKzMyNiw3IEBAIHByaXZh
dGU6CiAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUobV9ibG9jayk7CiAgICAgfQogCi0g
ICAgdm9pZCBtYWtlRGl2aXNpb25DaGlsbChPcGNvZGUgbm9uQ2hpbGxPcGNvZGUpCisgICAgdm9p
ZCBtYWtlRGl2aXNpb25DaGlsbChPcGNvZGUgbm9uQ2hpbGxPcGNvZGUsIFBlZXBob2xlT3B0aW1p
emVyJiBwZWVwaG9sZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChub25DaGlsbE9wY29kZSA9PSBE
aXYgfHwgbm9uQ2hpbGxPcGNvZGUgPT0gTW9kKTsKIApAQCAtMzQ4LDE2ICszNTAsMTcgQEAgcHJp
dmF0ZToKICAgICAgICAgLy8gZG9uZToKICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKIAorICAg
ICAgICBUeXBlIHR5cGUgPSBtX3ZhbHVlLT50eXBlKCk7CisKICAgICAgICAgVmFsdWUqIG51bSA9
IG1fdmFsdWUtPmNoaWxkKDApOwogICAgICAgICBWYWx1ZSogZGVuID0gbV92YWx1ZS0+Y2hpbGQo
MSk7CiAKICAgICAgICAgVmFsdWUqIG9uZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydEludENvbnN0
YW50KG1faW5kZXgsIG1fdmFsdWUsIDEpOwotICAgICAgICBWYWx1ZSogaXNEZW5PSyA9IG1faW5z
ZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAgICBtX2luZGV4LCBBYm92ZSwgbV9v
cmlnaW4sCi0gICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgs
IEFkZCwgbV9vcmlnaW4sIGRlbiwgb25lKSwKLSAgICAgICAgICAgIG9uZSk7CisgICAgICAgIFZh
bHVlKiBkZW5QbHVzT25lID0gcGVlcGhvbGUucmVkdWNlQWRkKHR5cGUsIG1fb3JpZ2luLCBkZW4s
IG9uZSk7CisgICAgICAgIFZhbHVlKiBpc0Rlbk9LID0gcGVlcGhvbGUucmVkdWNlQWJvdmUodHlw
ZSwgbV9vcmlnaW4sIGRlblBsdXNPbmUsIG9uZSk7CiAKICAgICAgICAgQmFzaWNCbG9jayogYmVm
b3JlID0gbV9ibG9ja0luc2VydGlvblNldC5zcGxpdEZvcndhcmQobV9ibG9jaywgbV9pbmRleCwg
Jm1faW5zZXJ0aW9uU2V0KTsKKyAgICAgICAgcGVlcGhvbGUuc2V0SW5kZXgobV9pbmRleCk7CiAK
ICAgICAgICAgQmFzaWNCbG9jayogbm9ybWFsRGl2Q2FzZSA9IG1fYmxvY2tJbnNlcnRpb25TZXQu
aW5zZXJ0QmVmb3JlKG1fYmxvY2spOwogICAgICAgICBCYXNpY0Jsb2NrKiBzaGFkeURlbkNhc2Ug
PSBtX2Jsb2NrSW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZShtX2Jsb2NrKTsKQEAgLTM4OCw3ICsz
OTEsNyBAQCBwcml2YXRlOgogICAgICAgICB6ZXJvRGVuQ2FzZS0+c2V0U3VjY2Vzc29ycyhGcmVx
dWVudGVkQmxvY2sobV9ibG9jaykpOwogCiAgICAgICAgIGludDY0X3QgYmFkTnVtZXJhdG9yQ29u
c3QgPSAwOwotICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPnR5cGUoKSkgeworICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBJbnQzMjoKICAgICAgICAgICAgIGJhZE51bWVyYXRv
ckNvbnN0ID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCk7CiAgICAgICAgICAg
ICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BlZXBob2xl
T3B0aW1pemVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BlZXBob2xlT3B0aW1p
emVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYWE1N2Q1Mzkw
Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQZWVwaG9s
ZU9wdGltaXplci5jcHAKQEAgLTAsMCArMSwxODUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
UGVlcGhvbGVPcHRpbWl6ZXIuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJC
M0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNDb21wdXRlRGl2aXNpb25NYWdpYy5o
IgorI2luY2x1ZGUgIkIzSW5zZXJ0aW9uU2V0SW5saW5lcy5oIgorI2luY2x1ZGUgIkIzSW50UmFu
Z2UuaCIKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzUHJv
Y2VkdXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVl
SW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworVmFsdWUqIFBl
ZXBob2xlT3B0aW1pemVyOjphcHBlbmRUb0N1cnJlbnRCbG9jayhWYWx1ZSogdmFsdWUpCit7Cisg
ICAgaWYgKG1faW5zZXJ0aW9uU2V0KQorICAgICAgICByZXR1cm4gbV9pbnNlcnRpb25TZXQtPmlu
c2VydFZhbHVlKG1faW5kZXgsIHZhbHVlKTsKKyAgICBBU1NFUlQoISFtX2Jsb2NrKTsKKyAgICBt
X2Jsb2NrLT5hcHBlbmQodmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZSogUGVlcGhv
bGVPcHRpbWl6ZXI6OmVtaXQoQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICByZXR1cm4g
YXBwZW5kVG9DdXJyZW50QmxvY2sobV9wcm9jLmFkZDxWYWx1ZVR5cGU+KGFyZ3VtZW50cy4uLikp
OworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZU9wYXF1ZShUeXBlLCBPcmln
aW4gb3JpZ2luLCBWYWx1ZSogY2hpbGQsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4g
dGhpczogT3BhcXVlKE9wYXF1ZSh2YWx1ZSkpCisgICAgLy8gSW50byB0aGlzOiBPcGFxdWUodmFs
dWUpCisgICAgaWYgKGNoaWxkLT5vcGNvZGUoKSA9PSBPcGFxdWUpCisgICAgICAgIHJldHVybiBj
aGlsZDsKKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oT3Bh
cXVlLCBvcmlnaW4sIGNoaWxkKTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1
Y2VBZGQoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0
LCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxlZnQp
KQorICAgICAgICByZXR1cm4gcmVkdWNlQWRkKHR5cGUsIG9yaWdpbiwgcmlnaHQsIGxlZnQpOwor
CisgICAgLy8gVHVybiB0aGlzOiBBZGQoY29uc3RhbnQxLCBjb25zdGFudDIpCisgICAgLy8gSW50
byB0aGlzOiBjb25zdGFudDEgKyBjb25zdGFudDIKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0g
bGVmdC0+YWRkQ29uc3RhbnQobV9wcm9jLCByaWdodCkpCisgICAgICAgIHJldHVybiBhcHBlbmRU
b0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IEFkZCh2YWx1ZSwg
emVybykKKyAgICAvLyBJbnRvIGFuIElkZW50aXR5LgorICAgIC8vCisgICAgLy8gQWRkaXRpb24g
aXMgc3VidGxlIHdpdGggZG91Ymxlcy4gWmVybyBpcyBub3QgdGhlIG5ldXRyYWwgdmFsdWUsIG5l
Z2F0aXZlIHplcm8gaXM6CisgICAgLy8gICAgMCArIDAgPSAwCisgICAgLy8gICAgMCArIC0wID0g
MAorICAgIC8vICAgIC0wICsgMCA9IDAKKyAgICAvLyAgICAtMCArIC0wID0gLTAKKyAgICBpZiAo
cmlnaHQtPmlzSW50KDApIHx8IHJpZ2h0LT5pc05lZ2F0aXZlWmVybygpKQorICAgICAgICByZXR1
cm4gbGVmdDsKKworICAgIGlmIChpc0ludCh0eXBlKSkgeworICAgICAgICBpZiAobGVmdC0+b3Bj
b2RlKCkgPT0gQWRkKSB7CisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIgQWRkKEFk
ZCh2YWx1ZSwgY29uc3RhbnQxKSwgY29uc3RhbnQyKQorICAgICAgICAgICAgLy8gSW50byB0aGlz
OiBBZGQodmFsdWUsIGNvbnN0YW50MSArIGNvbnN0YW50MikKKyAgICAgICAgICAgIFZhbHVlKiBu
ZXdTdW0gPSByaWdodC0+YWRkQ29uc3RhbnQobV9wcm9jLCBsZWZ0LT5jaGlsZCgxKSk7CisgICAg
ICAgICAgICBpZiAobmV3U3VtKSB7CisgICAgICAgICAgICAgICAgbmV3U3VtID0gYXBwZW5kVG9D
dXJyZW50QmxvY2sobmV3U3VtKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVkdWNlQWRkKHR5
cGUsIG9yaWdpbiwgbGVmdC0+Y2hpbGQoMCksIG5ld1N1bSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIgQWRkKHZhbHVlLCB2YWx1ZSkK
KyAgICAgICAgLy8gSW50byB0aGlzOiBTaGwodmFsdWUsIDEpCisgICAgICAgIC8vIFRoaXMgaXMg
YSB1c2VmdWwgY2Fub25pY2FsaXphdGlvbi4gSXQncyBub3QgbWVhbnQgdG8gYmUgYSBzdHJlbmd0
aCByZWR1Y3Rpb24uCisgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KSB7CisgICAgICAgICAgICBW
YWx1ZSogc2hpZnRBbW91bnQgPSBlbWl0PENvbnN0MzJWYWx1ZT4ob3JpZ2luLCAxKTsKKyAgICAg
ICAgICAgIHJldHVybiByZWR1Y2VTaGwodHlwZSwgb3JpZ2luLCBsZWZ0LCBzaGlmdEFtb3VudCk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIgQWRkKHZhbHVlLCBO
ZWcob3RoZXJWYWx1ZSkpCisgICAgICAgIC8vIEludG8gdGhpczogU3ViKHZhbHVlLCBvdGhlclZh
bHVlKQorICAgICAgICBpZiAocmlnaHQtPm9wY29kZSgpID09IE5lZykKKyAgICAgICAgICAgIHJl
dHVybiByZWR1Y2VTdWIodHlwZSwgb3JpZ2luLCBsZWZ0LCByaWdodC0+Y2hpbGQoMCkpOworCisg
ICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBBZGQoTmVnKHZhbHVlKSwgb3RoZXJWYWx1ZSkK
KyAgICAgICAgLy8gSW50byB0aGlzOiBTdWIob3RoZXJWYWx1ZSwgdmFsdWUpCisgICAgICAgIGlm
IChsZWZ0LT5vcGNvZGUoKSA9PSBOZWcpCisgICAgICAgICAgICByZXR1cm4gcmVkdWNlU3ViKHR5
cGUsIG9yaWdpbiwgcmlnaHQsIGxlZnQtPmNoaWxkKDApKTsKKworICAgICAgICAvLyBUdXJuIHRo
aXM6IEludGVnZXIgQWRkKEFkZCh2YWx1ZSwgY29uc3RhbnQpLCBvdGhlclZhbHVlKQorICAgICAg
ICAvLyBJbnRvIHRoaXM6IEFkZChBZGQodmFsdWUsIG90aGVyVmFsdWUpLCBjb25zdGFudCkKKyAg
ICAgICAgLy8gRklYTUU6IHRoaXMgY2FuIGNhdXNlIGNvZGUgZHVwbGljYXRpb24sIGFuZCBzaG91
bGQgYmUgcmVtb3ZlZCBvbmNlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTQwODEgbGFuZHMKKyAgICAgICAgaWYgKGxlZnQtPm9wY29kZSgpID09IEFkZCAmJiBsZWZ0
LT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKKyAgICAgICAgICAgIFZhbHVlKiB2YWwgPSByZWR1Y2VB
ZGQodHlwZSwgb3JpZ2luLCBsZWZ0LT5jaGlsZCgwKSwgcmlnaHQpOworICAgICAgICAgICAgcmV0
dXJuIHJlZHVjZUFkZCh0eXBlLCBvcmlnaW4sIHZhbCwgbGVmdC0+Y2hpbGQoMSkpOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRlZ2VyIEFkZCh2YWx1ZSwgQWRkKG90aGVy
VmFsdWUsIGNvbnN0YW50KSkKKyAgICAgICAgLy8gSW50byB0aGlzOiBBZGQoQWRkKHZhbHVlLCBv
dGhlclZhbHVlKSwgY29uc3RhbnQpCisgICAgICAgIC8vIEZJWE1FOiB0aGlzIGNhbiBjYXVzZSBj
b2RlIGR1cGxpY2F0aW9uLCBhbmQgc2hvdWxkIGJlIHJlbW92ZWQgb25jZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0MDgxIGxhbmRzCisgICAgICAgIGlmIChyaWdo
dC0+b3Bjb2RlKCkgPT0gQWRkICYmIHJpZ2h0LT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKKyAgICAg
ICAgICAgIFZhbHVlKiB2YWwgPSByZWR1Y2VBZGQodHlwZSwgb3JpZ2luLCBsZWZ0LCByaWdodC0+
Y2hpbGQoMCkpOworICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUFkZCh0eXBlLCBvcmlnaW4sIHZh
bCwgcmlnaHQtPmNoaWxkKDEpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChWYWx1ZSogcmVz
dWx0ID0gdHJ5UmVkdWNlTXVsRGlzdHJpYnV0aXZpdHkoQWRkLCB0eXBlLCBvcmlnaW4sIGxlZnQs
IHJpZ2h0KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgcmV0dXJu
IGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihBZGQsIG9yaWdpbiwgbGVmdCwgcmln
aHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVN1YihUeXBlIHR5cGUs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVw
KQoreworICAgIC8vIFR1cm4gdGhpczogU3ViKGNvbnN0YW50MSwgY29uc3RhbnQyKQorICAgIC8v
IEludG8gdGhpczogY29uc3RhbnQxIC0gY29uc3RhbnQyCisgICAgaWYgKFZhbHVlKiBjb25zdGFu
dCA9IGxlZnQtPnN1YkNvbnN0YW50KG1fcHJvYywgcmlnaHQpKQorICAgICAgICByZXR1cm4gYXBw
ZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgaWYgKGlzSW50KHR5cGUpKSB7Cisg
ICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBTdWIodmFsdWUsIGNvbnN0YW50KQorICAgICAg
ICAvLyBJbnRvIHRoaXM6IEFkZCh2YWx1ZSwgLWNvbnN0YW50KQorICAgICAgICBpZiAoVmFsdWUq
IG5lZ2F0ZWRDb25zdGFudCA9IHJpZ2h0LT5uZWdDb25zdGFudChtX3Byb2MpKSB7CisgICAgICAg
ICAgICBuZWdhdGVkQ29uc3RhbnQgPSBhcHBlbmRUb0N1cnJlbnRCbG9jayhuZWdhdGVkQ29uc3Rh
bnQpOworICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUFkZCh0eXBlLCBvcmlnaW4sIGxlZnQsIG5l
Z2F0ZWRDb25zdGFudCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVn
ZXIgU3ViKDAsIHZhbHVlKQorICAgICAgICAvLyBJbnRvIHRoaXM6IE5lZyh2YWx1ZSkKKyAgICAg
ICAgaWYgKGxlZnQtPmlzSW50KDApKQorICAgICAgICAgICAgcmV0dXJuIHJlZHVjZU5lZyh0eXBl
LCBvcmlnaW4sIHJpZ2h0KTsKKworICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIgU3ViKHZh
bHVlLCB2YWx1ZSkKKyAgICAgICAgLy8gSW50byB0aGlzOiAwCisgICAgICAgIGlmIChsZWZ0ID09
IHJpZ2h0KQorICAgICAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKG1fcHJvYy5h
ZGRJbnRDb25zdGFudChvcmlnaW4sIHR5cGUsIDApKTsKKworICAgICAgICAvLyBUdXJuIHRoaXM6
IEludGVnZXIgU3ViKHZhbHVlLCBOZWcob3RoZXJWYWx1ZSkpCisgICAgICAgIC8vIEludG8gdGhp
czogQWRkKHZhbHVlLCBvdGhlclZhbHVlKQorICAgICAgICBpZiAocmlnaHQtPm9wY29kZSgpID09
IE5lZykKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VBZGQodHlwZSwgb3JpZ2luLCBsZWZ0LCBy
aWdodC0+Y2hpbGQoMCkpOworCisgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBTdWIoLTEs
IHZhbHVlKQorICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdFhvcih2YWx1ZSwgLTEpCisgICAgICAg
IGlmIChsZWZ0LT5pc0ludCgtMSkpCisgICAgICAgICAgICByZXR1cm4gcmVkdWNlQml0WG9yKHR5
cGUsIG9yaWdpbiwgcmlnaHQsIGxlZnQpOworCisgICAgICAgIGlmIChWYWx1ZSogcmVzdWx0ID0g
dHJ5UmVkdWNlTXVsRGlzdHJpYnV0aXZpdHkoU3ViLCB0eXBlLCBvcmlnaW4sIGxlZnQsIHJpZ2h0
KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgcmV0dXJuIGNhbkdp
dmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihTdWIsIG9yaWdpbiwgbGVmdCwgcmlnaHQpOwor
fQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZU5lZyhUeXBlIHR5cGUsIE9yaWdp
biBvcmlnaW4sIFZhbHVlKiBjaGlsZCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgLy8gVHVybiB0
aGlzOiBOZWcoY29uc3RhbnQpCisgICAgLy8gSW50byB0aGlzOiAtY29uc3RhbnQKKyAgICBpZiAo
VmFsdWUqIGNvbnN0YW50ID0gY2hpbGQtPm5lZ0NvbnN0YW50KG1fcHJvYykpCisgICAgICAgIHJl
dHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICAvLyBUdXJuIHRoaXM6
IE5lZyhOZWcodmFsdWUpKQorICAgIC8vIEludG8gdGhpczogdmFsdWUKKyAgICBpZiAoY2hpbGQt
Pm9wY29kZSgpID09IE5lZykKKyAgICAgICAgcmV0dXJuIGNoaWxkLT5jaGlsZCgwKTsKKworICAg
IC8vIFR1cm4gdGhpczogSW50ZWdlciBOZWcoU3ViKHZhbHVlLCBvdGhlclZhbHVlKSkKKyAgICAv
LyBJbnRvIHRoaXM6IFN1YihvdGhlclZhbHVlLCB2YWx1ZSkKKyAgICBpZiAoaXNJbnQodHlwZSkg
JiYgY2hpbGQtPm9wY29kZSgpID09IFN1YikKKyAgICAgICAgcmV0dXJuIHJlZHVjZVN1Yih0eXBl
LCBvcmlnaW4sIGNoaWxkLT5jaGlsZCgxKSwgY2hpbGQtPmNoaWxkKDApKTsKKworICAgIC8vIFR1
cm4gdGhpczogSW50ZWdlciBOZWcoTXVsKHZhbHVlLCBjKSkKKyAgICAvLyBJbnRvIHRoaXM6IE11
bCh2YWx1ZSwgLWMpLCBhcyBsb25nIGFzIC1jIGRvZXMgbm90IG92ZXJmbG93CisgICAgaWYgKGNo
aWxkLT5vcGNvZGUoKSA9PSBNdWwgJiYgY2hpbGQtPmNoaWxkKDEpLT5oYXNJbnQoKSkgeworICAg
ICAgICBpbnQ2NF90IGZhY3RvciA9IGNoaWxkLT5jaGlsZCgxKS0+YXNJbnQoKTsKKyAgICAgICAg
aWYgKHR5cGUgPT0gSW50MzIgJiYgZmFjdG9yICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJf
dD46Om1pbigpKSB7CisgICAgICAgICAgICBWYWx1ZSogbmV3RmFjdG9yID0gZW1pdDxDb25zdDMy
VmFsdWU+KGNoaWxkLT5jaGlsZCgxKS0+b3JpZ2luKCksIC1mYWN0b3IpOworICAgICAgICAgICAg
cmV0dXJuIHJlZHVjZU11bCh0eXBlLCBvcmlnaW4sIGNoaWxkLT5jaGlsZCgwKSwgbmV3RmFjdG9y
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZSA9PSBJbnQ2NCAmJiBmYWN0b3IgIT0gc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpIHsKKyAgICAgICAgICAgIFZhbHVlKiBu
ZXdGYWN0b3IgPSBlbWl0PENvbnN0NjRWYWx1ZT4oY2hpbGQtPmNoaWxkKDEpLT5vcmlnaW4oKSwg
LWZhY3Rvcik7CisgICAgICAgICAgICByZXR1cm4gcmVkdWNlTXVsKHR5cGUsIG9yaWdpbiwgY2hp
bGQtPmNoaWxkKDApLCBuZXdGYWN0b3IpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihOZWcsIG9yaWdpbiwgY2hpbGQpOwor
fQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZU11bChUeXBlIHR5cGUsIE9yaWdp
biBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwKQorewor
ICAgIGlmIChzaG91bGRHb0JlZm9yZShyaWdodCwgbGVmdCkpCisgICAgICAgIHJldHVybiByZWR1
Y2VNdWwodHlwZSwgb3JpZ2luLCByaWdodCwgbGVmdCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IE11
bChjb25zdGFudDEsIGNvbnN0YW50MikKKyAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50MSAqIGNv
bnN0YW50MgorICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBsZWZ0LT5tdWxDb25zdGFudChtX3By
b2MsIHJpZ2h0KSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50
KTsKKworICAgIGlmIChyaWdodC0+aGFzSW50KCkpIHsKKyAgICAgICAgaW50NjRfdCBmYWN0b3Ig
PSByaWdodC0+YXNJbnQoKTsKKworICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2YWx1ZSwgMCkK
KyAgICAgICAgLy8gSW50byB0aGlzOiAwCisgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCBk
byB0aGlzIGZvciBkb3VibGVzIGJlY2F1c2UgdGhhdCdzIHdyb25nLiBGb3IgZXhhbXBsZSwgLTEg
KiAwCisgICAgICAgIC8vIGFuZCAxICogMCB5aWVsZCBkaWZmZXJlbnQgcmVzdWx0cy4KKyAgICAg
ICAgaWYgKCFmYWN0b3IpCisgICAgICAgICAgICByZXR1cm4gcmlnaHQ7CisKKyAgICAgICAgLy8g
VHVybiB0aGlzOiBNdWwodmFsdWUsIDEpCisgICAgICAgIC8vIEludG8gdGhpczogdmFsdWUKKyAg
ICAgICAgaWYgKGZhY3RvciA9PSAxKQorICAgICAgICAgICAgcmV0dXJuIGxlZnQ7CisKKyAgICAg
ICAgLy8gVHVybiB0aGlzOiBNdWwodmFsdWUsIC0xKQorICAgICAgICAvLyBJbnRvIHRoaXM6IE5l
Zyh2YWx1ZSkKKyAgICAgICAgaWYgKGZhY3RvciA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBy
ZWR1Y2VOZWcodHlwZSwgb3JpZ2luLCBsZWZ0KTsKKworICAgICAgICAvLyBUdXJuIHRoaXM6IE11
bCh2YWx1ZSwgY29uc3RhbnQpCisgICAgICAgIC8vIEludG8gdGhpczogU2hsKHZhbHVlLCBsb2cy
KGNvbnN0YW50KSkKKyAgICAgICAgaWYgKGhhc09uZUJpdFNldChmYWN0b3IpKSB7CisgICAgICAg
ICAgICB1bnNpZ25lZCBzaGlmdEFtb3VudCA9IFdURjo6ZmFzdExvZzIoc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KGZhY3RvcikpOworICAgICAgICAgICAgVmFsdWUqIHNoaWZ0Q29uc3RhbnQgPSBlbWl0
PENvbnN0MzJWYWx1ZT4ob3JpZ2luLCBzaGlmdEFtb3VudCk7CisgICAgICAgICAgICByZXR1cm4g
cmVkdWNlU2hsKHR5cGUsIG9yaWdpbiwgbGVmdCwgc2hpZnRDb25zdGFudCk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgaWYgKHJpZ2h0LT5oYXNEb3VibGUoKSkgeworICAgICAgICBkb3VibGUgZmFj
dG9yID0gcmlnaHQtPmFzRG91YmxlKCk7CisKKyAgICAgICAgLy8gVHVybiB0aGlzOiBNdWwodmFs
dWUsIDEpCisgICAgICAgIC8vIEludG8gdGhpczogdmFsdWUKKyAgICAgICAgaWYgKGZhY3RvciA9
PSAxKQorICAgICAgICAgICAgcmV0dXJuIGxlZnQ7CisgICAgfQorCisgICAgaWYgKGlzSW50KHR5
cGUpKSB7CisgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBNdWwodmFsdWUsIE5lZyhvdGhl
clZhbHVlKSkKKyAgICAgICAgLy8gSW50byB0aGlzOiBOZWcoTXVsKHZhbHVlLCBvdGhlclZhbHVl
KSkKKyAgICAgICAgaWYgKHJpZ2h0LT5vcGNvZGUoKSA9PSBOZWcpIHsKKyAgICAgICAgICAgIFZh
bHVlKiBuZXdNdWwgPSByZWR1Y2VNdWwodHlwZSwgb3JpZ2luLCBsZWZ0LCByaWdodC0+Y2hpbGQo
MCkpOworICAgICAgICAgICAgcmV0dXJuIHJlZHVjZU5lZyh0eXBlLCBvcmlnaW4sIG5ld011bCk7
CisgICAgICAgIH0KKyAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRlZ2VyIE11bChOZWcodmFsdWUp
LCBvdGhlclZhbHVlKQorICAgICAgICAvLyBJbnRvIHRoaXM6IE5lZyhNdWwodmFsdWUsIG90aGVy
VmFsdWUpKQorICAgICAgICBpZiAobGVmdC0+b3Bjb2RlKCkgPT0gTmVnKSB7CisgICAgICAgICAg
ICBWYWx1ZSogbmV3TXVsID0gcmVkdWNlTXVsKHR5cGUsIG9yaWdpbiwgbGVmdC0+Y2hpbGQoMCks
IHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VOZWcodHlwZSwgb3JpZ2luLCBuZXdN
dWwpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIg
OiBlbWl0PFZhbHVlPihNdWwsIG9yaWdpbiwgbGVmdCwgcmlnaHQpOworfQorCitWYWx1ZSogUGVl
cGhvbGVPcHRpbWl6ZXI6OnJlZHVjZURpdihUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVl
KiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgaXNDaGlsbCwgYm9vbCBjYW5HaXZlVXApCit7Cisg
ICAgLy8gVHVybiB0aGlzOiBEaXYoY29uc3RhbnQxLCBjb25zdGFudDIpCisgICAgLy8gSW50byB0
aGlzOiBjb25zdGFudDEgLyBjb25zdGFudDIKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyB1c2VzIERp
djxDaGlsbD4gc2VtYW50aWNzLiBUaGF0J3MgZmluZSwgYmVjYXVzZSB0aGUgcnVsZXMgZm9yIERp
dgorICAgIC8vIGFyZSBzdHJpY3RseSB3ZWFrZXI6IGl0IGhhcyBjb3JuZXIgY2FzZXMgd2hlcmUg
aXQncyBhbGxvd2VkIHRvIGRvIGFueXRoaW5nIGl0CisgICAgLy8gbGlrZXMuCisgICAgaWYgKFZh
bHVlKiBjb25zdGFudCA9IGxlZnQtPmRpdkNvbnN0YW50KG1fcHJvYywgcmlnaHQpKQorICAgICAg
ICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgaWYgKHJpZ2h0
LT5oYXNJbnQoKSkgeworICAgICAgICBpbnQ2NF90IGRpdmlzb3IgPSByaWdodC0+YXNJbnQoKTsK
KyAgICAgICAgaWYgKGRpdmlzb3IgPT0gLTEpIHsKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczog
RGl2KHZhbHVlLCAtMSkKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogTmVnKHZhbHVlKQorICAg
ICAgICAgICAgcmV0dXJuIHJlZHVjZU5lZyh0eXBlLCBvcmlnaW4sIGxlZnQpOworICAgICAgICB9
CisgICAgICAgIGlmICghZGl2aXNvcikgeworICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBEaXYo
dmFsdWUsIDApCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IDAKKyAgICAgICAgICAgIC8vIFdl
IGNhbiBkbyB0aGlzIGJlY2F1c2UgaXQncyBwcmVjaXNlbHkgY29ycmVjdCBmb3IgQ2hpbGxEaXYg
YW5kIGZvciBEaXYgd2UKKyAgICAgICAgICAgIC8vIGFyZSBhbGxvd2VkIHRvIGRvIHdoYXRldmVy
IHdlIHdhbnQuCisgICAgICAgICAgICByZXR1cm4gcmlnaHQ7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGRpdmlzb3IgPT0gMSkgeworICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBEaXYodmFsdWUs
IDEpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHZhbHVlCisgICAgICAgICAgICByZXR1cm4g
bGVmdDsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZSA9PSBJbnQzMiAmJiBtX3Byb2Mub3B0
TGV2ZWwoKSA+PSAyKSB7CisgICAgICAgICAgICAvLyBQZXJmb3JtIHN1cGVyIGNvbXByZWhlbnNp
dmUgc3RyZW5ndGggcmVkdWN0aW9uIG9mIGRpdmlzaW9uLiBDdXJyZW50bHkgd2UKKyAgICAgICAg
ICAgIC8vIG9ubHkgZG8gdGhpcyBmb3IgMzItYml0IGRpdmlzaW9ucywgc2luY2Ugd2UgbmVlZCBh
IGhpZ2ggbXVsdGlwbHkKKyAgICAgICAgICAgIC8vIG9wZXJhdGlvbi4gV2UgZW11bGF0ZSBpdCB1
c2luZyA2NC1iaXQgbXVsdGlwbHkuIFdlIGNhbid0IGVtdWxhdGUgNjQtYml0CisgICAgICAgICAg
ICAvLyBoaWdoIG11bHRpcGx5IHdpdGggYSAxMjgtYml0IG11bHRpcGx5IGJlY2F1c2Ugd2UgZG9u
J3QgaGF2ZSBhIDEyOC1iaXQKKyAgICAgICAgICAgIC8vIG11bHRpcGx5LiBXZSBjb3VsZCBkbyBp
dCB3aXRoIGEgcGF0Y2hwb2ludCBpZiB3ZSBjYXJlZCBiYWRseSBlbm91Z2guCisgICAgICAgICAg
ICBpbnQzMl90IGRpdmlzb3IzMiA9IHJpZ2h0LT5hc0ludDMyKCk7CisgICAgICAgICAgICBEaXZp
c2lvbk1hZ2ljPGludDMyX3Q+IG1hZ2ljID0gY29tcHV0ZURpdmlzaW9uTWFnaWMoZGl2aXNvcjMy
KTsKKyAgICAgICAgICAgIC8vIFBlcmZvcm0gdGhlICJoaWdoIiBtdWx0aXBsaWNhdGlvbi4gV2Ug
ZG8gaXQganVzdCB0byBnZXQgdGhlIGhpZ2ggYml0cy4KKyAgICAgICAgICAgIC8vIFRoaXMgaXMg
c29ydCBvZiBsaWtlIG11bHRpcGx5aW5nIGJ5IHRoZSByZWNpcHJvY2FsLCBqdXN0IG1vcmUgZ25h
cmx5LiBJdCdzCisgICAgICAgICAgICAvLyBmcm9tIEhhY2tlcidzIERlbGlnaHQgYW5kIEkgZG9u
J3QgY2xhaW0gdG8gdW5kZXJzdGFuZCBpdC4KKyAgICAgICAgICAgIFZhbHVlKiBjb25zdE1hZ2lj
TXVsdGlwbGllciA9IGVtaXQ8Q29uc3Q2NFZhbHVlPihvcmlnaW4sIG1hZ2ljLm1hZ2ljTXVsdGlw
bGllcik7CisgICAgICAgICAgICBWYWx1ZSogc2V4dDMyTGVmdCA9IHJlZHVjZVNFeHQzMih0eXBl
LCBvcmlnaW4sIGxlZnQpOworICAgICAgICAgICAgVmFsdWUqIG11bExlZnQgPSByZWR1Y2VNdWwo
SW50NjQsIG9yaWdpbiwgc2V4dDMyTGVmdCwgY29uc3RNYWdpY011bHRpcGxpZXIpOworICAgICAg
ICAgICAgVmFsdWUqIGNvbnN0MzIgPSBlbWl0PENvbnN0MzJWYWx1ZT4ob3JpZ2luLCAzMik7Cisg
ICAgICAgICAgICBWYWx1ZSogbGFyZ2VNYWdpY1F1b3RpZW50ID0gcmVkdWNlWlNocih0eXBlLCBv
cmlnaW4sIG11bExlZnQsIGNvbnN0MzIpOworICAgICAgICAgICAgVmFsdWUqIG1hZ2ljUXVvdGll
bnQgPSByZWR1Y2VUcnVuYyh0eXBlLCBvcmlnaW4sIGxhcmdlTWFnaWNRdW90aWVudCk7CisgICAg
ICAgICAgICBpZiAoZGl2aXNvcjMyID4gMCAmJiBtYWdpYy5tYWdpY011bHRpcGxpZXIgPCAwKQor
ICAgICAgICAgICAgICAgIG1hZ2ljUXVvdGllbnQgPSByZWR1Y2VBZGQoSW50MzIsIG9yaWdpbiwg
bWFnaWNRdW90aWVudCwgbGVmdCk7CisgICAgICAgICAgICBpZiAoZGl2aXNvcjMyIDwgMCAmJiBt
YWdpYy5tYWdpY011bHRpcGxpZXIgPiAwKQorICAgICAgICAgICAgICAgIG1hZ2ljUXVvdGllbnQg
PSByZWR1Y2VTdWIoSW50MzIsIG9yaWdpbiwgbWFnaWNRdW90aWVudCwgbGVmdCk7CisgICAgICAg
ICAgICBpZiAobWFnaWMuc2hpZnQgPiAwKSB7CisgICAgICAgICAgICAgICAgVmFsdWUqIGNvbnN0
TWFnaWNTaGlmdCA9IGVtaXQ8Q29uc3QzMlZhbHVlPihvcmlnaW4sIG1hZ2ljLnNoaWZ0KTsKKyAg
ICAgICAgICAgICAgICBtYWdpY1F1b3RpZW50ID0gcmVkdWNlU1Nocih0eXBlLCBvcmlnaW4sIG1h
Z2ljUXVvdGllbnQsIGNvbnN0TWFnaWNTaGlmdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBWYWx1ZSogY29uc3QzMSA9IGVtaXQ8Q29uc3QzMlZhbHVlPihvcmlnaW4sIDMxKTsKKyAgICAg
ICAgICAgIFZhbHVlKiBzaGlmdGVkTWFnaWNRdW90aWVudCA9IHJlZHVjZVpTaHIodHlwZSwgb3Jp
Z2luLCBtYWdpY1F1b3RpZW50LCBjb25zdDMxKTsKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VB
ZGQoSW50MzIsIG9yaWdpbiwgbWFnaWNRdW90aWVudCwgc2hpZnRlZE1hZ2ljUXVvdGllbnQpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNhbkdpdmVVcCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgS2luZCBkaXZLaW5kID0gRGl2OworICAgIGRpdktpbmQuc2V0SXNDaGlsbChp
c0NoaWxsKTsKKyAgICByZXR1cm4gZW1pdDxWYWx1ZT4oZGl2S2luZCwgb3JpZ2luLCBsZWZ0LCBy
aWdodCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlVURpdihUeXBlLCBP
cmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCkK
K3sKKyAgICAvLyBUdXJuIHRoaXM6IFVEaXYoY29uc3RhbnQxLCBjb25zdGFudDIpCisgICAgLy8g
SW50byB0aGlzOiBjb25zdGFudDEgLyBjb25zdGFudDIKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50
ID0gbGVmdC0+dURpdkNvbnN0YW50KG1fcHJvYywgcmlnaHQpKQorICAgICAgICByZXR1cm4gYXBw
ZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgaWYgKHJpZ2h0LT5oYXNJbnQoKSkg
eworICAgICAgICBpbnQ2NF90IGRpdmlzb3IgPSByaWdodC0+YXNJbnQoKTsKKyAgICAgICAgaWYg
KCFkaXZpc29yKSB7CisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFVEaXYodmFsdWUsIDApCisg
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IDAKKyAgICAgICAgICAgIC8vIFdlIGNhbiBkbyB3aGF0
ZXZlciB3ZSB3YW50IGhlcmUgc28gd2UgbWlnaHQgYXMgd2VsbCBkbyB0aGUgY2hpbGwgdGhpbmcs
CisgICAgICAgICAgICAvLyBpbiBjYXNlIHdlIGFkZCBjaGlsbCB2ZXJzaW9ucyBvZiBVRGl2IGlu
IHRoZSBmdXR1cmUuCisgICAgICAgICAgICByZXR1cm4gcmlnaHQ7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGRpdmlzb3IgPT0gMSkgeworICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBVRGl2KHZh
bHVlLCAxKQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZQorICAgICAgICAgICAgcmV0
dXJuIGxlZnQ7CisgICAgICAgIH0KKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyBjb21w
cmVoZW5zaXZlIHN0cmVuZ3RoIHJlZHVjdGlvbiBmb3IgdW5zaWduZWQgbnVtYmVycy4gTGlrZWx5
LAorICAgICAgICAvLyB3ZSB3aWxsIGp1c3Qgd2FudCBjb3B5IHdoYXQgbGx2bSBkb2VzLiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0ODA5CisgICAgfQorCisgICAg
cmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihVRGl2LCBvcmlnaW4sIGxl
ZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VNb2QoVHlw
ZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGlz
Q2hpbGwsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogTW9kKGNvbnN0YW50
MSwgY29uc3RhbnQyKQorICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxICUgY29uc3RhbnQyCisg
ICAgLy8gTm90ZSB0aGF0IHRoaXMgdXNlcyBNb2Q8Q2hpbGw+IHNlbWFudGljcy4KKyAgICBpZiAo
VmFsdWUqIGNvbnN0YW50ID0gbGVmdC0+bW9kQ29uc3RhbnQobV9wcm9jLCByaWdodCkpCisgICAg
ICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICBpZiAocmln
aHQtPmhhc0ludCgpKSB7CisgICAgICAgIGludDY0X3QgZGl2aXNvciA9IHJpZ2h0LT5hc0ludCgp
OworICAgICAgICBpZiAoIWRpdmlzb3IpIHsKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTW9k
KHZhbHVlLCAwKQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiAwCisgICAgICAgICAgICAvLyBU
aGlzIGlzIGNvcnJlY3QgYWNjb3JkaW5nIHRvIENoaWxsTW9kIHNlbWFudGljcy4KKyAgICAgICAg
ICAgIHJldHVybiByaWdodDsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZSA9PSBJbnQzMiAm
JiBtX3Byb2Mub3B0TGV2ZWwoKSA+PSAyKSB7CisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE1v
ZChOLCBEKQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTdWIoTiwgTXVsKERpdihOLCBEKSwg
RCkpCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWVkLXVwIGJl
Y2F1c2Ugd2UgdXNlIG91ciBleGlzdGluZyBEaXYgb3B0aW1pemF0aW9ucy4KKyAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAvLyBIZXJlJ3MgYW4gZWFzaWVyIHdheSB0byBsb29rIGF0IGl0Ogor
ICAgICAgICAgICAgLy8gICAgIE4gJSBEID0gTiAtIE4gLyBEICogRAorICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IHdvcmsgZm9yIEQgPSAwIGFu
ZCBDaGlsbE1vZC4gVGhlIGV4cGVjdGVkIHJlc3VsdCBpcyAwLgorICAgICAgICAgICAgLy8gVGhh
dCdzIHdoeSB3ZSBoYXZlIGEgc3BlY2lhbC1jYXNlIGFib3ZlLgorICAgICAgICAgICAgLy8gICAg
IFggJSAwID0gWCAtIFggLyAwICogMCA9IFggICAgIChzaG91bGQgYmUgMCkKKyAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAvLyBUaGlzIGRvZXMgd29yayBmb3IgdGhlIEQgPSAtMSBzcGVjaWFs
IGNhc2UuCisgICAgICAgICAgICAvLyAgICAgLTJeMzEgJSAtMSA9IC0yXjMxIC0gLTJeMzEgLyAt
MSAqIC0xCisgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICA9IC0yXjMxIC0gLTJeMzEgKiAt
MQorICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgPSAtMl4zMSAtIC0yXjMxCisgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgICA9IDAKKyAgICAgICAgICAgIFZhbHVlKiBkaXYgPSByZWR1
Y2VEaXYodHlwZSwgb3JpZ2luLCBsZWZ0LCByaWdodCwgaXNDaGlsbCk7CisgICAgICAgICAgICBW
YWx1ZSogbXVsID0gcmVkdWNlTXVsKHR5cGUsIG9yaWdpbiwgZGl2LCByaWdodCk7CisgICAgICAg
ICAgICByZXR1cm4gcmVkdWNlU3ViKHR5cGUsIG9yaWdpbiwgbGVmdCwgbXVsKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmIChjYW5HaXZlVXApCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIEtpbmQgbW9kS2luZCA9IE1vZDsKKyAgICBtb2RLaW5kLnNldElzQ2hpbGwoaXNDaGlsbCk7
CisgICAgcmV0dXJuIGVtaXQ8VmFsdWU+KG1vZEtpbmQsIG9yaWdpbiwgbGVmdCwgcmlnaHQpOwor
fQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVVNb2QoVHlwZSwgT3JpZ2luIG9y
aWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAg
Ly8gVHVybiB0aGlzOiBVTW9kKGNvbnN0YW50MSwgY29uc3RhbnQyKQorICAgIC8vIEludG8gdGhp
czogY29uc3RhbnQxICUgY29uc3RhbnQyCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGxlZnQt
PnVNb2RDb25zdGFudChtX3Byb2MsIHJpZ2h0KSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3Vy
cmVudEJsb2NrKGNvbnN0YW50KTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZG8gd2hhdCB3
ZSBkbyBmb3IgTW9kIHNpbmNlIHRoZSBzYW1lIHByaW5jaXBsZSBhcHBsaWVzIGhlcmUuCisgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDgwOQorCisgICAg
cmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihVTW9kLCBvcmlnaW4sIGxl
ZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VCaXRBbmQo
VHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29s
IGNhbkdpdmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxlZnQpKQorICAg
ICAgICByZXR1cm4gcmVkdWNlQml0QW5kKHR5cGUsIG9yaWdpbiwgcmlnaHQsIGxlZnQpOworCisg
ICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoY29uc3RhbnQxLCBjb25zdGFudDIpCisgICAgLy8gSW50
byB0aGlzOiBjb25zdGFudDEgJiBjb25zdGFudDIKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0g
bGVmdC0+Yml0QW5kQ29uc3RhbnQobV9wcm9jLCByaWdodCkpCisgICAgICAgIHJldHVybiBhcHBl
bmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZCh2
YWx1ZVgsIHZhbHVlWCkKKyAgICAvLyBJbnRvIHRoaXM6IHZhbHVlWC4KKyAgICBpZiAobGVmdCA9
PSByaWdodCkKKyAgICAgICAgcmV0dXJuIGxlZnQ7CisKKyAgICAvLyBUdXJuIHRoaXM6IEJpdEFu
ZCh2YWx1ZSwgemVyby1jb25zdGFudCkKKyAgICAvLyBJbnRvIHRoaXM6IHplcm8tY29uc3RhbnQu
CisgICAgaWYgKHJpZ2h0LT5pc0ludCgwKSkKKyAgICAgICAgcmV0dXJuIHJpZ2h0OworCisgICAg
Ly8gVHVybiB0aGlzOiBCaXRBbmQodmFsdWUsIGFsbC1vbmVzKQorICAgIC8vIEludG8gdGhpczog
dmFsdWUuCisgICAgaWYgKCh0eXBlID09IEludDY0ICYmIHJpZ2h0LT5pc0ludChzdGQ6Om51bWVy
aWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpKQorICAgICAgICB8fCAodHlwZSA9PSBJbnQzMiAm
JiByaWdodC0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkpIHsK
KyAgICAgICAgcmV0dXJuIGxlZnQ7CisgICAgfQorCisgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQo
Qml0QW5kKHZhbHVlLCBjb25zdGFudDEpLCBjb25zdGFudDIpCisgICAgLy8gSW50byB0aGlzOiBC
aXRBbmQodmFsdWUsIGNvbnN0YW50MSAmIGNvbnN0YW50MikuCisgICAgaWYgKGxlZnQtPm9wY29k
ZSgpID09IEJpdEFuZCkgeworICAgICAgICBWYWx1ZSogbmV3Q29uc3RhbnQgPSByaWdodC0+Yml0
QW5kQ29uc3RhbnQobV9wcm9jLCBsZWZ0LT5jaGlsZCgxKSk7CisgICAgICAgIGlmIChuZXdDb25z
dGFudCkgeworICAgICAgICAgICAgbmV3Q29uc3RhbnQgPSBhcHBlbmRUb0N1cnJlbnRCbG9jayhu
ZXdDb25zdGFudCk7CisgICAgICAgICAgICByZXR1cm4gcmVkdWNlQml0QW5kKHR5cGUsIG9yaWdp
biwgbGVmdC0+Y2hpbGQoMCksIG5ld0NvbnN0YW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIFR1cm4gdGhpczogQml0QW5kKDY0LWJpdCB2YWx1ZSwgMzIgb25lcykKKyAgICAvLyBJbnRv
IHRoaXM6IFpFeHQzMihUcnVuYyg2NC1iaXQgdmFsdWUpKQorICAgIGlmIChyaWdodC0+aXNJbnQ2
NCgweGZmZmZmZmZmbGx1KSkgeworICAgICAgICBWYWx1ZSogdHJ1bmMgPSByZWR1Y2VUcnVuYyh0
eXBlLCBvcmlnaW4sIGxlZnQpOworICAgICAgICByZXR1cm4gcmVkdWNlWkV4dDMyKHR5cGUsIG9y
aWdpbiwgdHJ1bmMpOworICAgIH0KKworICAgIC8vIFR1cm4gdGhpczogQml0QW5kKFNFeHQ4KHZh
bHVlKSwgbWFzaykgd2hlcmUgKG1hc2sgJiAweGZmZmZmZjAwKSA9PSAwCisgICAgLy8gSW50byB0
aGlzOiBCaXRBbmQodmFsdWUsIG1hc2spCisgICAgaWYgKGxlZnQtPm9wY29kZSgpID09IFNFeHQ4
ICYmIHJpZ2h0LT5oYXNJbnQzMigpICYmICEocmlnaHQtPmFzSW50MzIoKSAmIDB4ZmZmZmZmMDAp
KQorICAgICAgICByZXR1cm4gcmVkdWNlQml0QW5kKHR5cGUsIG9yaWdpbiwgbGVmdC0+Y2hpbGQo
MCksIHJpZ2h0KTsKKworICAgIC8vIFR1cm4gdGhpczogQml0QW5kKFNFeHQxNih2YWx1ZSksIG1h
c2spIHdoZXJlIChtYXNrICYgMHhmZmZmMDAwMCkgPT0gMAorICAgIC8vIEludG8gdGhpczogQml0
QW5kKHZhbHVlLCBtYXNrKQorICAgIGlmIChsZWZ0LT5vcGNvZGUoKSA9PSBTRXh0MTYgJiYgcmln
aHQtPmhhc0ludDMyKCkgJiYgIShyaWdodC0+YXNJbnQzMigpICYgMHhmZmZmMDAwMCkpCisgICAg
ICAgIHJldHVybiByZWR1Y2VCaXRBbmQodHlwZSwgb3JpZ2luLCBsZWZ0LT5jaGlsZCgwKSwgcmln
aHQpOworCisgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoU0V4dDMyKHZhbHVlKSwgbWFzaykgd2hl
cmUgKG1hc2sgJiAweGZmZmZmZmZmMDAwMDAwMDApID09IDAKKyAgICAvLyBJbnRvIHRoaXM6IEJp
dEFuZChaRXh0MzIodmFsdWUpLCBtYXNrKQorICAgIGlmIChsZWZ0LT5vcGNvZGUoKSA9PSBTRXh0
MzIgJiYgcmlnaHQtPmhhc0ludDY0KCkKKyAgICAgICAgJiYgIShyaWdodC0+YXNJbnQ2NCgpICYg
MHhmZmZmZmZmZjAwMDAwMDAwbGx1KSkgeworICAgICAgICBWYWx1ZSogemV4dDMyID0gcmVkdWNl
WkV4dDMyKHR5cGUsIG9yaWdpbiwgbGVmdC0+Y2hpbGQoMCkpOworICAgICAgICByZXR1cm4gcmVk
dWNlQml0QW5kKHR5cGUsIG9yaWdpbiwgemV4dDMyLCByaWdodCk7CisgICAgfQorCisgICAgLy8g
VHVybiB0aGlzOiBCaXRBbmQoT3AodmFsdWUsIGNvbnN0YW50MSksIGNvbnN0YW50MikKKyAgICAv
LyAgICAgd2hlcmUgIShjb25zdGFudDEgJiBjb25zdGFudDIpCisgICAgLy8gICAgICAgYW5kIE9w
IGlzIEJpdE9yIG9yIEJpdFhvcgorICAgIC8vIGludG8gdGhpczogQml0QW5kKHZhbHVlLCBjb25z
dGFudDIpCisgICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHRoaXMgZm9yIG5vbi1jb25zdGFudCBj
b25zdGFudDIgaGVyZSBvbmNlIHdlIGhhdmUgYSBrbm93bkJpdHMgYW5hbHlzaXMuCisgICAgaWYg
KHJpZ2h0LT5oYXNJbnQoKSkgeworICAgICAgICBpbnQ2NF90IGNvbnN0YW50MiA9IHJpZ2h0LT5h
c0ludCgpOworICAgICAgICBzd2l0Y2ggKGxlZnQtPm9wY29kZSgpKSB7CisgICAgICAgIGNhc2Ug
Qml0T3I6CisgICAgICAgIGNhc2UgQml0WG9yOgorICAgICAgICAgICAgaWYgKGxlZnQtPmNoaWxk
KDEpLT5oYXNJbnQoKSAmJiAhKGxlZnQtPmNoaWxkKDEpLT5hc0ludCgpICYgY29uc3RhbnQyKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gcmVkdWNlQml0QW5kKHR5cGUsIG9yaWdpbiwgbGVmdC0+
Y2hpbGQoMCksIHJpZ2h0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUdXJuIHRoaXM6
IEJpdEFuZChCaXRYb3IoeDEsIGFsbE9uZXMpLCBCaXRYb3IoeDIsIGFsbE9uZXMpCisgICAgLy8g
SW50byB0aGlzOiBCaXRYb3IoQml0T3IoeDEsIHgyKSwgYWxsT25lcykKKyAgICAvLyBCeSBhcHBs
eWluZyBEZSBNb3JnYW4gbGF3cworICAgIC8vIEZJWE1FOiB3aXRoIGEga25vd25CaXRzIGFuYWx5
c2lzLCB0aGlzIGNvdWxkIGV4dGVuZCB0byBhbnkgY29uc3RhbnQgdGhhdCBpbmNsdWRlcyBhbGwg
Yml0cyBpbiB4MSBhbmQgeDIKKyAgICBpZiAobGVmdC0+b3Bjb2RlKCkgPT0gQml0WG9yCisgICAg
ICAgICYmIHJpZ2h0LT5vcGNvZGUoKSA9PSBCaXRYb3IKKyAgICAgICAgJiYgKCh0eXBlID09IElu
dDY0CisgICAgICAgICAgICAmJiBsZWZ0LT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xp
bWl0czx1aW50NjRfdD46Om1heCgpKQorICAgICAgICAgICAgJiYgcmlnaHQtPmNoaWxkKDEpLT5p
c0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpKQorICAgICAgICB8fCAo
dHlwZSA9PSBJbnQzMgorICAgICAgICAgICAgJiYgbGVmdC0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkKKyAgICAgICAgICAgICYmIHJpZ2h0LT5j
aGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkpKSB7
CisgICAgICAgIFZhbHVlKiBiaXRPciA9IHJlZHVjZUJpdE9yKHR5cGUsIG9yaWdpbiwgbGVmdC0+
Y2hpbGQoMCksIHJpZ2h0LT5jaGlsZCgwKSk7CisgICAgICAgIHJldHVybiByZWR1Y2VCaXRYb3Io
dHlwZSwgb3JpZ2luLCBiaXRPciwgbGVmdC0+Y2hpbGQoMSkpOworICAgIH0KKworICAgIC8vIFR1
cm4gdGhpczogQml0QW5kKEJpdFhvcih4LCBhbGxPbmVzKSwgYykKKyAgICAvLyBJbnRvIHRoaXM6
IEJpdFhvcihCaXRPcih4LCB+YyksIGFsbE9uZXMpCisgICAgLy8gVGhpcyBpcyBhIHZhcmlhdGlv
biBvbiB0aGUgcHJldmlvdXMgb3B0aW1pemF0aW9uLCB0cmVhdGluZyBjIGFzIGlmIGl0IHdlcmUg
Qml0WG9yKH5jLCBhbGxPbmVzKQorICAgIC8vIEl0IGRvZXMgbm90IHJlZHVjZSB0aGUgbnVtYmVy
IG9mIG9wZXJhdGlvbnMsIGJ1dCBwcm92aWRlcyBzb21lIG5vcm1hbGl6YXRpb24gKHdlIHRyeSB0
byBnZXQgQml0WG9yIGJ5IGFsbE9uZXMgYXQgdGhlIG91dGVybW9zdCBwb2ludCksIGFuZCBzb21l
IGNoYW5jZSB0byBmbG9hdCBYb3JzIHRvIGEgcGxhY2Ugd2hlcmUgdGhleSBtaWdodCBnZXQgZWxp
bWluYXRlZC4KKyAgICBpZiAobGVmdC0+b3Bjb2RlKCkgPT0gQml0WG9yCisgICAgICAgICYmIHJp
Z2h0LT5oYXNJbnQoKQorICAgICAgICAmJiAoKHR5cGUgPT0gSW50NjQgJiYgbGVmdC0+Y2hpbGQo
MSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSkpCisgICAgICAg
IHx8ICh0eXBlID09IEludDMyICYmIGxlZnQtPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpKSkpIHsKKyAgICAgICAgVmFsdWUqIGJpdE9yID0gcmVk
dWNlQml0T3IodHlwZSwgb3JpZ2luLCBsZWZ0LT5jaGlsZCgwKSwgcmlnaHQtPmJpdFhvckNvbnN0
YW50KG1fcHJvYywgbGVmdC0+Y2hpbGQoMSkpKTsKKyAgICAgICAgcmV0dXJuIHJlZHVjZUJpdFhv
cih0eXBlLCBvcmlnaW4sIGJpdE9yLCBsZWZ0LT5jaGlsZCgxKSk7CisgICAgfQorCisgICAgcmV0
dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihCaXRBbmQsIG9yaWdpbiwgbGVm
dCwgcmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUJpdE9yKFR5
cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBj
YW5HaXZlVXApCit7CisgICAgaWYgKHNob3VsZEdvQmVmb3JlKHJpZ2h0LCBsZWZ0KSkKKyAgICAg
ICAgcmV0dXJuIHJlZHVjZUJpdE9yKHR5cGUsIG9yaWdpbiwgcmlnaHQsIGxlZnQpOworCisgICAg
Ly8gVHVybiB0aGlzOiBCaXRPcihjb25zdGFudDEsIGNvbnN0YW50MikKKyAgICAvLyBJbnRvIHRo
aXM6IGNvbnN0YW50MSB8IGNvbnN0YW50MgorICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBsZWZ0
LT5iaXRPckNvbnN0YW50KG1fcHJvYywgcmlnaHQpKQorICAgICAgICByZXR1cm4gYXBwZW5kVG9D
dXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgLy8gVHVybiB0aGlzOiBCaXRPcihCaXRPcih2
YWx1ZSwgY29uc3RhbnQxKSwgY29uc3RhbnQyKQorICAgIC8vIEludG8gdGhpczogQml0T3IodmFs
dWUsIGNvbnN0YW50MSB8IGNvbnN0YW50MikuCisgICAgaWYgKGxlZnQtPm9wY29kZSgpID09IEJp
dE9yKSB7CisgICAgICAgIFZhbHVlKiBuZXdDb25zdGFudCA9IHJpZ2h0LT5iaXRPckNvbnN0YW50
KG1fcHJvYywgbGVmdC0+Y2hpbGQoMSkpOworICAgICAgICBpZiAobmV3Q29uc3RhbnQpIHsKKyAg
ICAgICAgICAgIG5ld0NvbnN0YW50ID0gYXBwZW5kVG9DdXJyZW50QmxvY2sobmV3Q29uc3RhbnQp
OworICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUJpdE9yKHR5cGUsIG9yaWdpbiwgbGVmdC0+Y2hp
bGQoMCksIG5ld0NvbnN0YW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFR1cm4gdGhp
czogQml0T3IodmFsdWVYLCB2YWx1ZVgpCisgICAgLy8gSW50byB0aGlzOiB2YWx1ZVguCisgICAg
aWYgKGxlZnQgPT0gcmlnaHQpCisgICAgICAgIHJldHVybiBsZWZ0OworCisgICAgLy8gVHVybiB0
aGlzOiBCaXRPcih2YWx1ZSwgemVyby1jb25zdGFudCkKKyAgICAvLyBJbnRvIHRoaXM6IHZhbHVl
LgorICAgIGlmIChyaWdodC0+aXNJbnQoMCkpCisgICAgICAgIHJldHVybiBsZWZ0OworCisgICAg
Ly8gVHVybiB0aGlzOiBCaXRPcih2YWx1ZSwgYWxsLW9uZXMpCisgICAgLy8gSW50byB0aGlzOiBh
bGwtb25lcy4KKyAgICAvLyBGSVhNRTogb25jZSB3ZSBoYXZlIGEga25vd25CaXRzIGFuYWx5c2lz
LCB0aGlzLCB0aGUgYmFzaWMgY29uc3RhbnRzIGNhc2UsIGFuZCBtb3JlIHdpbGwgYmUgdHJpdmlh
bGx5IG1lcmdlZC4KKyAgICBpZiAoKHR5cGUgPT0gSW50NjQgJiYgcmlnaHQtPmlzSW50KHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSkpCisgICAgICAgIHx8ICh0eXBlID09IElu
dDMyICYmIHJpZ2h0LT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkp
KSkgeworICAgICAgICByZXR1cm4gcmlnaHQ7CisgICAgfQorCisgICAgLy8gVHVybiB0aGlzOiBC
aXRPcihCaXRYb3IoeDEsIGFsbE9uZXMpLCBCaXRYb3IoeDIsIGFsbE9uZXMpCisgICAgLy8gSW50
byB0aGlzOiBCaXRYb3IoQml0QW5kKHgxLCB4MiksIGFsbE9uZXMpCisgICAgLy8gQnkgYXBwbHlp
bmcgRGUgTW9yZ2FuIGxhd3MKKyAgICAvLyBGSVhNRTogbGlrZSBmb3IgdGhlIHNpbWlsYXIgcnVs
ZSBmb3IgQml0QW5kLCB3aXRoIGEga25vd25CaXRzIGFuYWx5c2lzIHdlIGNvdWxkIGRvIHNvbWV0
aGluZyBzaW1pbGFyIGZvciBjb25zdGFudHMgb3RoZXIgdGhhbiBhbGxPbmVzCisgICAgaWYgKGxl
ZnQtPm9wY29kZSgpID09IEJpdFhvcgorICAgICAgICAmJiByaWdodC0+b3Bjb2RlKCkgPT0gQml0
WG9yCisgICAgICAgICYmICgodHlwZSA9PSBJbnQ2NAorICAgICAgICAgICAgJiYgbGVmdC0+Y2hp
bGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSkKKyAgICAg
ICAgICAgICYmIHJpZ2h0LT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50
NjRfdD46Om1heCgpKSkKKyAgICAgICAgfHwgKHR5cGUgPT0gSW50MzIKKyAgICAgICAgICAgICYm
IGxlZnQtPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4
KCkpCisgICAgICAgICAgICAmJiByaWdodC0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKSkpKSkgeworICAgICAgICBWYWx1ZSogYml0QW5kID0gcmVk
dWNlQml0QW5kKHR5cGUsIG9yaWdpbiwgbGVmdC0+Y2hpbGQoMCksIHJpZ2h0LT5jaGlsZCgwKSk7
CisgICAgICAgIHJldHVybiByZWR1Y2VCaXRYb3IodHlwZSwgb3JpZ2luLCBiaXRBbmQsIHJpZ2h0
LT5jaGlsZCgxKSk7CisgICAgfQorCisgICAgLy8gVHVybiB0aGlzOiBCaXRPcihCaXRYb3IoeCwg
YWxsT25lcyksIGMpCisgICAgLy8gSW50byB0aGlzOiBCaXRYb3IoQml0QW5kKHgsIH5jKSwgYWxs
T25lcykKKyAgICAvLyBUaGlzIGlzIGEgdmFyaWF0aW9uIG9uIHRoZSBwcmV2aW91cyBvcHRpbWl6
YXRpb24sIHRyZWF0aW5nIGMgYXMgaWYgaXQgd2VyZSBCaXRYb3IofmMsIGFsbE9uZXMpCisgICAg
Ly8gSXQgZG9lcyBub3QgcmVkdWNlIHRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucywgYnV0IHByb3Zp
ZGVzIHNvbWUgbm9ybWFsaXphdGlvbiAod2UgdHJ5IHRvIGdldCBCaXRYb3IgYnkgYWxsT25lcyBh
dCB0aGUgb3V0ZXJtb3N0IHBvaW50KSwKKyAgICAvLyBhbmQgc29tZSBjaGFuY2UgdG8gZmxvYXQg
WG9ycyB0byBhIHBsYWNlIHdoZXJlIHRoZXkgbWlnaHQgZ2V0IGVsaW1pbmF0ZWQuCisgICAgaWYg
KGxlZnQtPm9wY29kZSgpID09IEJpdFhvcgorICAgICAgICAmJiByaWdodC0+aGFzSW50KCkKKyAg
ICAgICAgJiYgKCh0eXBlID09IEludDY0CisgICAgICAgICAgICAmJiBsZWZ0LT5jaGlsZCgxKS0+
aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpKSkKKyAgICAgICAgfHwg
KHR5cGUgPT0gSW50MzIKKyAgICAgICAgICAgICYmIGxlZnQtPmNoaWxkKDEpLT5pc0ludChzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpKSkpIHsKKyAgICAgICAgVmFsdWUqIGJp
dEFuZCA9IHJlZHVjZUJpdEFuZCh0eXBlLCBvcmlnaW4sIGxlZnQtPmNoaWxkKDApLCByaWdodC0+
Yml0WG9yQ29uc3RhbnQobV9wcm9jLCBsZWZ0LT5jaGlsZCgxKSkpOworICAgICAgICByZXR1cm4g
cmVkdWNlQml0WG9yKHR5cGUsIG9yaWdpbiwgYml0QW5kLCBsZWZ0LT5jaGlsZCgxKSk7CisgICAg
fQorCisgICAgaWYgKFZhbHVlKiByZXN1bHQgPSB0cnlSZWR1Y2VCaXRBbmREaXN0cmlidXRpdml0
eShCaXRPciwgdHlwZSwgb3JpZ2luLCBsZWZ0LCByaWdodCkpCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KEJpdE9y
LCBvcmlnaW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpy
ZWR1Y2VCaXRYb3IoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUq
IHJpZ2h0LCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQs
IGxlZnQpKQorICAgICAgICByZXR1cm4gcmVkdWNlQml0WG9yKHR5cGUsIG9yaWdpbiwgcmlnaHQs
IGxlZnQpOworCisgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IoY29uc3RhbnQxLCBjb25zdGFudDIp
CisgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgXiBjb25zdGFudDIKKyAgICBpZiAoVmFsdWUq
IGNvbnN0YW50ID0gbGVmdC0+Yml0WG9yQ29uc3RhbnQobV9wcm9jLCByaWdodCkpCisgICAgICAg
IHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICAvLyBUdXJuIHRo
aXM6IEJpdFhvcihCaXRYb3IodmFsdWUsIGNvbnN0YW50MSksIGNvbnN0YW50MikKKyAgICAvLyBJ
bnRvIHRoaXM6IEJpdFhvcih2YWx1ZSwgY29uc3RhbnQxIF4gY29uc3RhbnQyKS4KKyAgICBpZiAo
bGVmdC0+b3Bjb2RlKCkgPT0gQml0WG9yKSB7CisgICAgICAgIFZhbHVlKiBuZXdDb25zdGFudCA9
IHJpZ2h0LT5iaXRYb3JDb25zdGFudChtX3Byb2MsIGxlZnQtPmNoaWxkKDEpKTsKKyAgICAgICAg
aWYgKG5ld0NvbnN0YW50KSB7CisgICAgICAgICAgICBuZXdDb25zdGFudCA9IGFwcGVuZFRvQ3Vy
cmVudEJsb2NrKG5ld0NvbnN0YW50KTsKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VCaXRYb3Io
dHlwZSwgb3JpZ2luLCBsZWZ0LT5jaGlsZCgwKSwgbmV3Q29uc3RhbnQpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IoY29tcGFyZSwgMSkKKyAgICAvLyBJbnRv
IHRoaXM6IGludmVydGVkQ29tcGFyZQorICAgIGlmIChyaWdodC0+aXNJbnQzMigxKSkgeworICAg
ICAgICBpZiAoVmFsdWUqIGludmVydGVkQ29tcGFyZSA9IGxlZnQtPmludmVydGVkQ29tcGFyZSht
X3Byb2MpKQorICAgICAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKGludmVydGVk
Q29tcGFyZSk7CisgICAgfQorCisgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IodmFsdWVYLCB2YWx1
ZVgpCisgICAgLy8gSW50byB0aGlzOiB6ZXJvLWNvbnN0YW50LgorICAgIGlmIChsZWZ0ID09IHJp
Z2h0KQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2sobV9wcm9jLmFkZEludENv
bnN0YW50KG9yaWdpbiwgdHlwZSwgMCkpOworCisgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IodmFs
dWUsIHplcm8tY29uc3RhbnQpCisgICAgLy8gSW50byB0aGlzOiB2YWx1ZS4KKyAgICBpZiAocmln
aHQtPmlzSW50KDApKQorICAgICAgICByZXR1cm4gbGVmdDsKKworICAgIGlmIChWYWx1ZSogcmVz
dWx0ID0gdHJ5UmVkdWNlQml0QW5kRGlzdHJpYnV0aXZpdHkoQml0WG9yLCB0eXBlLCBvcmlnaW4s
IGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIHJldHVybiBjYW5H
aXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oQml0WG9yLCBvcmlnaW4sIGxlZnQsIHJpZ2h0
KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VTaGwoVHlwZSB0eXBlLCBP
cmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCkK
K3sKKyAgICAvLyBUdXJuIHRoaXM6IFNobChjb25zdGFudDEsIGNvbnN0YW50MikKKyAgICAvLyBJ
bnRvIHRoaXM6IGNvbnN0YW50MSA8PCBjb25zdGFudDIKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50
ID0gbGVmdC0+c2hsQ29uc3RhbnQobV9wcm9jLCByaWdodCkpCisgICAgICAgIHJldHVybiBhcHBl
bmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IFNobCg8U3xa
PlNocihAeCwgQGNvbnN0KSwgQGNvbnN0KQorICAgIC8vIEludG8gdGhpczogQml0QW5kKEB4LCAt
KDE8PEBjb25zdCkpCisgICAgaWYgKChsZWZ0LT5vcGNvZGUoKSA9PSBTU2hyIHx8IGxlZnQtPm9w
Y29kZSgpID09IFpTaHIpCisgICAgICAgICYmIGxlZnQtPmNoaWxkKDEpLT5oYXNJbnQoKQorICAg
ICAgICAmJiByaWdodC0+aGFzSW50KCkKKyAgICAgICAgJiYgbGVmdC0+Y2hpbGQoMSktPmFzSW50
KCkgPT0gcmlnaHQtPmFzSW50KCkpIHsKKyAgICAgICAgaW50IHNoaWZ0QW1vdW50ID0gcmlnaHQt
PmFzSW50KCkgJiAodHlwZSA9PSBJbnQzMiA/IDMxIDogNjMpOworICAgICAgICBWYWx1ZSogbmV3
Q29uc3QgPSBhcHBlbmRUb0N1cnJlbnRCbG9jayhtX3Byb2MuYWRkSW50Q29uc3RhbnQob3JpZ2lu
LCB0eXBlLCAtIHN0YXRpY19jYXN0PGludDY0X3Q+KDF1bGwgPDwgc2hpZnRBbW91bnQpKSk7Cisg
ICAgICAgIHJldHVybiByZWR1Y2VCaXRBbmQodHlwZSwgb3JpZ2luLCBsZWZ0LT5jaGlsZCgwKSwg
bmV3Q29uc3QpOworICAgIH0KKworICAgIGlmIChWYWx1ZSogcmVzdWx0ID0gdHJ5UmVkdWNlU2hp
ZnRPclJvdGF0ZShTaGwsIHR5cGUsIG9yaWdpbiwgbGVmdCwgcmlnaHQpKQorICAgICAgICByZXR1
cm4gcmVzdWx0OworCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVl
PihTaGwsIG9yaWdpbiwgbGVmdCwgcmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6
ZXI6OnJlZHVjZVNTaHIoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFs
dWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6IFNTaHIoY29u
c3RhbnQxLCBjb25zdGFudDIpCisgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgPj4gY29uc3Rh
bnQyCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGxlZnQtPnNTaHJDb25zdGFudChtX3Byb2Ms
IHJpZ2h0KSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50KTsK
KworICAgIGlmIChyaWdodC0+aGFzSW50MzIoKQorICAgICAgICAmJiBsZWZ0LT5vcGNvZGUoKSA9
PSBTaGwKKyAgICAgICAgJiYgbGVmdC0+Y2hpbGQoMSktPmhhc0ludDMyKCkKKyAgICAgICAgJiYg
cmlnaHQtPmFzSW50MzIoKSA9PSBsZWZ0LT5jaGlsZCgxKS0+YXNJbnQzMigpKSB7CisgICAgICAg
IGlmIChyaWdodC0+YXNJbnQzMigpID09IDE2ICYmIHR5cGUgPT0gSW50MzIpIHsKKyAgICAgICAg
ICAgIC8vIFR1cm4gdGhpczogU1NocihTaGwodmFsdWUsIDE2KSwgMTYpCisgICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IFNFeHQxNih2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VTRXh0
MTYodHlwZSwgb3JpZ2luLCBsZWZ0LT5jaGlsZCgwKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHJpZ2h0LT5hc0ludDMyKCkgPT0gMjQgJiYgdHlwZSA9PSBJbnQzMikgeworICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBTU2hyKFNobCh2YWx1ZSwgMjQpLCAyNCkKKyAgICAgICAgICAgIC8vIElu
dG8gdGhpczogU0V4dDgodmFsdWUpCisgICAgICAgICAgICByZXR1cm4gcmVkdWNlU0V4dDgodHlw
ZSwgb3JpZ2luLCBsZWZ0LT5jaGlsZCgwKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJpZ2h0
LT5hc0ludDMyKCkgPT0gMzIgJiYgdHlwZSA9PSBJbnQ2NCkgeworICAgICAgICAgICAgLy8gVHVy
biB0aGlzOiBTU2hyKFNobCh2YWx1ZSwgMzIpLCAzMikKKyAgICAgICAgICAgIC8vIEludG8gdGhp
czogU0V4dDMyKFRydW5jKHZhbHVlKSkKKyAgICAgICAgICAgIFZhbHVlKiB0cnVuYyA9IHJlZHVj
ZVRydW5jKHR5cGUsIG9yaWdpbiwgbGVmdC0+Y2hpbGQoMCkpOworICAgICAgICAgICAgcmV0dXJu
IHJlZHVjZVNFeHQzMih0eXBlLCBvcmlnaW4sIHRydW5jKTsKKyAgICAgICAgfQorICAgICAgICAv
LyBGSVhNRTogQWRkIGNhc2VzIGZvciA0OCBhbmQgNTYsIGJ1dCB0aGF0IHdvdWxkIHRyYW5zbGF0
ZSB0byBTRXh0MzIoU0V4dDgpIG9yCisgICAgICAgIC8vIFNFeHQzMihTRXh0MTYpLCB3aGljaCB3
ZSBkb24ndCBjdXJyZW50bHkgbG93ZXIgZWZmaWNpZW50bHkuCisgICAgfQorCisgICAgaWYgKFZh
bHVlKiByZXN1bHQgPSB0cnlSZWR1Y2VTaGlmdE9yUm90YXRlKFNTaHIsIHR5cGUsIG9yaWdpbiwg
bGVmdCwgcmlnaHQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgcmV0dXJuIGNhbkdp
dmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihTU2hyLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KTsK
K30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VaU2hyKFR5cGUgdHlwZSwgT3Jp
Z2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXApCit7
CisgICAgLy8gVHVybiB0aGlzOiBaU2hyKGNvbnN0YW50MSwgY29uc3RhbnQyKQorICAgIC8vIElu
dG8gdGhpczogKHVuc2lnbmVkKWNvbnN0YW50MSA+PiBjb25zdGFudDIKKyAgICBpZiAoVmFsdWUq
IGNvbnN0YW50ID0gbGVmdC0+elNockNvbnN0YW50KG1fcHJvYywgcmlnaHQpKQorICAgICAgICBy
ZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgaWYgKFZhbHVlKiBy
ZXN1bHQgPSB0cnlSZWR1Y2VTaGlmdE9yUm90YXRlKFpTaHIsIHR5cGUsIG9yaWdpbiwgbGVmdCwg
cmlnaHQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/
IG51bGxwdHIgOiBlbWl0PFZhbHVlPihaU2hyLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KTsKK30KKwor
VmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VSb3RSKFR5cGUgdHlwZSwgT3JpZ2luIG9y
aWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAg
Ly8gVHVybiB0aGlzOiBSb3RSKGNvbnN0YW50MSwgY29uc3RhbnQyKQorICAgIC8vIEludG8gdGhp
czogKGNvbnN0YW50MSA+PiBjb25zdGFudDIpIHwgKGNvbnN0YW50MSA8PCBzaXplb2YoY29uc3Rh
bnQxKSAqIDggLSBjb25zdGFudDIpCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGxlZnQtPnJv
dFJDb25zdGFudChtX3Byb2MsIHJpZ2h0KSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVu
dEJsb2NrKGNvbnN0YW50KTsKKworICAgIGlmIChWYWx1ZSogcmVzdWx0ID0gdHJ5UmVkdWNlU2hp
ZnRPclJvdGF0ZShSb3RSLCB0eXBlLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1
ZT4oUm90Uiwgb3JpZ2luLCBsZWZ0LCByaWdodCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGlt
aXplcjo6cmVkdWNlUm90TChUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBW
YWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogUm90TChj
b25zdGFudDEsIGNvbnN0YW50MikKKyAgICAvLyBJbnRvIHRoaXM6IChjb25zdGFudDEgPDwgY29u
c3RhbnQyKSB8IChjb25zdGFudDEgPj4gc2l6ZW9mKGNvbnN0YW50MSkgKiA4IC0gY29uc3RhbnQy
KQorICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBsZWZ0LT5yb3RMQ29uc3RhbnQobV9wcm9jLCBy
aWdodCkpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisK
KyAgICBpZiAoVmFsdWUqIHJlc3VsdCA9IHRyeVJlZHVjZVNoaWZ0T3JSb3RhdGUoUm90TCwgdHlw
ZSwgb3JpZ2luLCBsZWZ0LCByaWdodCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBy
ZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KFJvdEwsIG9yaWdpbiwgbGVm
dCwgcmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUFicyhUeXBl
IHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBjaGlsZCwgYm9vbCBjYW5HaXZlVXApCit7Cisg
ICAgLy8gVHVybiB0aGlzOiBBYnMoY29uc3RhbnQpCisgICAgLy8gSW50byB0aGlzOiBmYWJzPHR5
cGU+KGNvbnN0YW50KQorICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBjaGlsZC0+YWJzQ29uc3Rh
bnQobV9wcm9jKSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50
KTsKKworICAgIC8vIFR1cm4gdGhpczogQWJzKEFicyh2YWx1ZSkpCisgICAgLy8gSW50byB0aGlz
OiBBYnModmFsdWUpCisgICAgaWYgKGNoaWxkLT5vcGNvZGUoKSA9PSBBYnMpCisgICAgICAgIHJl
dHVybiBjaGlsZDsKKworICAgIC8vIFR1cm4gdGhpczogQWJzKE5lZyh2YWx1ZSkpCisgICAgLy8g
SW50byB0aGlzOiBBYnModmFsdWUpCisgICAgaWYgKGNoaWxkLT5vcGNvZGUoKSA9PSBOZWcpCisg
ICAgICAgIHJldHVybiByZWR1Y2VBYnModHlwZSwgb3JpZ2luLCBjaGlsZC0+Y2hpbGQoMCkpOwor
CisgICAgLy8gVHVybiB0aGlzOiBBYnMoQml0d2lzZUNhc3QodmFsdWUpKQorICAgIC8vIEludG8g
dGhpczogQml0d2lzZUNhc3QoQW5kKHZhbHVlLCBtYXNrLXRvcC1iaXQpKQorICAgIGlmIChjaGls
ZC0+b3Bjb2RlKCkgPT0gQml0d2lzZUNhc3QpIHsKKyAgICAgICAgVmFsdWUqIG1hc2s7CisgICAg
ICAgIGlmICh0eXBlID09IERvdWJsZSkKKyAgICAgICAgICAgIG1hc2sgPSBlbWl0PENvbnN0NjRW
YWx1ZT4ob3JpZ2luLCB+KDFsbCA8PCA2MykpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
YXNrID0gZW1pdDxDb25zdDMyVmFsdWU+KG9yaWdpbiwgfigxbGwgPDwgMzEpKTsKKworICAgICAg
ICBWYWx1ZSogYml0QW5kID0gcmVkdWNlQml0QW5kKHR5cGUgPT0gRG91YmxlID8gSW50NjQgOiBJ
bnQzMiwgb3JpZ2luLCBjaGlsZC0+Y2hpbGQoMCksIG1hc2spOworICAgICAgICByZXR1cm4gcmVk
dWNlQml0d2lzZUNhc3QodHlwZSwgb3JpZ2luLCBiaXRBbmQpOworICAgIH0KKworICAgIHJldHVy
biBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oQWJzLCBvcmlnaW4sIGNoaWxkKTsK
K30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VDZWlsKFR5cGUsIE9yaWdpbiBv
cmlnaW4sIFZhbHVlKiBjaGlsZCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgLy8gVHVybiB0aGlz
OiBDZWlsKGNvbnN0YW50KQorICAgIC8vIEludG8gdGhpczogY2VpbDx0eXBlPihjb25zdGFudCkK
KyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gY2hpbGQtPmNlaWxDb25zdGFudChtX3Byb2MpKQor
ICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgLy8g
VHVybiB0aGlzOiBDZWlsKHJvdW5kZWRWYWx1ZSkKKyAgICAvLyBJbnRvIHRoaXM6IHJvdW5kZWRW
YWx1ZQorICAgIGlmIChjaGlsZC0+aXNSb3VuZGVkKCkpCisgICAgICAgIHJldHVybiBjaGlsZDsK
KworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oQ2VpbCwgb3Jp
Z2luLCBjaGlsZCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlRmxvb3Io
VHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGNoaWxkLCBib29sIGNhbkdpdmVVcCkKK3sKKyAg
ICAvLyBUdXJuIHRoaXM6IEZsb29yKGNvbnN0YW50KQorICAgIC8vIEludG8gdGhpczogZmxvb3I8
dHlwZT4oY29uc3RhbnQpCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGNoaWxkLT5mbG9vckNv
bnN0YW50KG1fcHJvYykpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25z
dGFudCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IEZsb29yKHJvdW5kZWRWYWx1ZSkKKyAgICAvLyBJ
bnRvIHRoaXM6IHJvdW5kZWRWYWx1ZQorICAgIGlmIChjaGlsZC0+aXNSb3VuZGVkKCkpCisgICAg
ICAgIHJldHVybiBjaGlsZDsKKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1p
dDxWYWx1ZT4oRmxvb3IsIG9yaWdpbiwgY2hpbGQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRp
bWl6ZXI6OnJlZHVjZVNxcnQoVHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGNoaWxkLCBib29s
IGNhbkdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6IFNxcnQoY29uc3RhbnQpCisgICAgLy8g
SW50byB0aGlzOiBzcXJ0PHR5cGU+KGNvbnN0YW50KQorICAgIGlmIChWYWx1ZSogY29uc3RhbnQg
PSBjaGlsZC0+c3FydENvbnN0YW50KG1fcHJvYykpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1
cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0ciA6
IGVtaXQ8VmFsdWU+KFNxcnQsIG9yaWdpbiwgY2hpbGQpOworfQorCitWYWx1ZSogUGVlcGhvbGVP
cHRpbWl6ZXI6OnJlZHVjZUJpdHdpc2VDYXN0KFR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBj
aGlsZCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgLy8gVHVybiB0aGlzOiBCaXR3aXNlQ2FzdChj
b25zdGFudCkKKyAgICAvLyBJbnRvIHRoaXM6IGJpdHdpc2VDYXN0PHR5cGU+KGNvbnN0YW50KQor
ICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBjaGlsZC0+Yml0d2lzZUNhc3RDb25zdGFudChtX3By
b2MpKQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisg
ICAgLy8gVHVybiB0aGlzOiBCaXR3aXNlQ2FzdChCaXR3aXNlQ2FzdCh2YWx1ZSkpCisgICAgLy8g
SW50byB0aGlzOiB2YWx1ZQorICAgIGlmIChjaGlsZC0+b3Bjb2RlKCkgPT0gQml0d2lzZUNhc3Qp
CisgICAgICAgIHJldHVybiBjaGlsZC0+Y2hpbGQoMCk7CisKKyAgICByZXR1cm4gY2FuR2l2ZVVw
ID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KEJpdHdpc2VDYXN0LCBvcmlnaW4sIGNoaWxkKTsKK30K
KworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VTRXh0OChUeXBlIHR5cGUsIE9yaWdp
biBvcmlnaW4sIFZhbHVlKiBjaGlsZCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgLy8gVHVybiB0
aGlzOiBTRXh0OChjb25zdGFudCkKKyAgICAvLyBJbnRvIHRoaXM6IHN0YXRpY19jYXN0PGludDhf
dD4oY29uc3RhbnQpCisgICAgaWYgKGNoaWxkLT5oYXNJbnQzMigpKSB7CisgICAgICAgIGludDMy
X3QgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8aW50OF90PihjaGlsZC0+YXNJbnQzMigpKTsKKyAgICAg
ICAgcmV0dXJuIGVtaXQ8Q29uc3QzMlZhbHVlPihvcmlnaW4sIHJlc3VsdCk7CisgICAgfQorCisg
ICAgLy8gVHVybiB0aGlzOiBTRXh0OChTRXh0OCh2YWx1ZSkpCisgICAgLy8gICBvciB0aGlzOiBT
RXh0OChTRXh0MTYodmFsdWUpKQorICAgIC8vIEludG8gdGhpczogU0V4dDgodmFsdWUpCisgICAg
aWYgKGNoaWxkLT5vcGNvZGUoKSA9PSBTRXh0OCB8fCBjaGlsZC0+b3Bjb2RlKCkgPT0gU0V4dDE2
KQorICAgICAgICByZXR1cm4gcmVkdWNlU0V4dDgodHlwZSwgb3JpZ2luLCBjaGlsZC0+Y2hpbGQo
MCkpOworCisgICAgaWYgKGNoaWxkLT5vcGNvZGUoKSA9PSBCaXRBbmQgJiYgY2hpbGQtPmNoaWxk
KDEpLT5oYXNJbnQzMigpKSB7CisgICAgICAgIFZhbHVlKiBpbnB1dCA9IGNoaWxkLT5jaGlsZCgw
KTsKKyAgICAgICAgaW50MzJfdCBtYXNrID0gY2hpbGQtPmNoaWxkKDEpLT5hc0ludDMyKCk7CisK
KyAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0OChCaXRBbmQoaW5wdXQsIG1hc2spKSB3aGVyZSAo
bWFzayAmIDB4ZmYpID09IDB4ZmYKKyAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0OChpbnB1dCkK
KyAgICAgICAgaWYgKChtYXNrICYgMHhmZikgPT0gMHhmZikKKyAgICAgICAgICAgIHJldHVybiBy
ZWR1Y2VTRXh0OCh0eXBlLCBvcmlnaW4sIGlucHV0KTsKKworICAgICAgICAvLyBUdXJuIHRoaXM6
IFNFeHQ4KEJpdEFuZChpbnB1dCwgbWFzaykpIHdoZXJlIChtYXNrICYgMHg4MCkgPT0gMAorICAg
ICAgICAvLyBJbnRvIHRoaXM6IEJpdEFuZChpbnB1dCwgY29uc3QgJiAweDdmKQorICAgICAgICBp
ZiAoIShtYXNrICYgMHg4MCkpIHsKKyAgICAgICAgICAgIFZhbHVlKiBuZXdDb25zdCA9IGVtaXQ8
Q29uc3QzMlZhbHVlPihvcmlnaW4sIG1hc2sgJiAweDdmKTsKKyAgICAgICAgICAgIHJldHVybiBy
ZWR1Y2VCaXRBbmQodHlwZSwgb3JpZ2luLCBpbnB1dCwgbmV3Q29uc3QpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKCFtX3Byb2MuaGFzUXVpcmtzKCkpIHsKKyAgICAgICAgLy8gVHVybiB0
aGlzOiBTRXh0OChBdG9taWNYY2hnX19fKQorICAgICAgICAvLyBJbnRvIHRoaXM6IEF0b21pY1hj
aGdfX18KKyAgICAgICAgaWYgKGlzQXRvbWljWGNoZyhjaGlsZC0+b3Bjb2RlKCkpICYmIGNoaWxk
LT5hczxBdG9taWNWYWx1ZT4oKS0+YWNjZXNzV2lkdGgoKSA9PSBXaWR0aDgpCisgICAgICAgICAg
ICByZXR1cm4gY2hpbGQ7CisgICAgfQorCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIg
OiBlbWl0PFZhbHVlPihTRXh0OCwgb3JpZ2luLCBjaGlsZCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9s
ZU9wdGltaXplcjo6cmVkdWNlU0V4dDE2KFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUq
IGNoaWxkLCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6IFNFeHQxNihjb25z
dGFudCkKKyAgICAvLyBJbnRvIHRoaXM6IHN0YXRpY19jYXN0PGludDE2X3Q+KGNvbnN0YW50KQor
ICAgIGlmIChjaGlsZC0+aGFzSW50MzIoKSkgeworICAgICAgICBpbnQzMl90IHJlc3VsdCA9IHN0
YXRpY19jYXN0PGludDE2X3Q+KGNoaWxkLT5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gZW1p
dDxDb25zdDMyVmFsdWU+KG9yaWdpbiwgcmVzdWx0KTsKKyAgICB9CisKKyAgICAvLyBUdXJuIHRo
aXM6IFNFeHQxNihTRXh0MTYodmFsdWUpKQorICAgIC8vIEludG8gdGhpczogU0V4dDE2KHZhbHVl
KQorICAgIC8vIGFuZCB0dXJuIHRoaXM6IFNFeHQxNihTRXh0OCh2YWx1ZSkpCisgICAgLy8gSW50
byB0aGlzOiBTRXh0OCh2YWx1ZSkKKyAgICBpZiAoY2hpbGQtPm9wY29kZSgpID09IFNFeHQxNiB8
fCBjaGlsZC0+b3Bjb2RlKCkgPT0gU0V4dDgpCisgICAgICAgIHJldHVybiBjaGlsZDsKKworICAg
IGlmIChjaGlsZC0+b3Bjb2RlKCkgPT0gQml0QW5kICYmIGNoaWxkLT5jaGlsZCgxKS0+aGFzSW50
MzIoKSkgeworICAgICAgICBWYWx1ZSogaW5wdXQgPSBjaGlsZC0+Y2hpbGQoMCk7CisgICAgICAg
IGludDMyX3QgbWFzayA9IGNoaWxkLT5jaGlsZCgxKS0+YXNJbnQzMigpOworCisgICAgICAgIC8v
IFR1cm4gdGhpczogU0V4dDE2KEJpdEFuZChpbnB1dCwgbWFzaykpIHdoZXJlIChtYXNrICYgMHhm
ZmZmKSA9PSAweGZmZmYKKyAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0MTYoaW5wdXQpCisgICAg
ICAgIGlmICgobWFzayAmIDB4ZmZmZikgPT0gMHhmZmZmKQorICAgICAgICAgICAgcmV0dXJuIHJl
ZHVjZVNFeHQxNih0eXBlLCBvcmlnaW4sIGlucHV0KTsKKworICAgICAgICAvLyBUdXJuIHRoaXM6
IFNFeHQxNihCaXRBbmQoaW5wdXQsIG1hc2spKSB3aGVyZSAobWFzayAmIDB4ODAwMCkgPT0gMAor
ICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdEFuZChpbnB1dCwgY29uc3QgJiAweDdmZmYpCisgICAg
ICAgIGlmICghKG1hc2sgJiAweDgwMDApKSB7CisgICAgICAgICAgICBWYWx1ZSogbmV3Q29uc3Qg
PSBlbWl0PENvbnN0MzJWYWx1ZT4ob3JpZ2luLCBtYXNrICYgMHg3ZmZmKTsKKyAgICAgICAgICAg
IHJldHVybiByZWR1Y2VCaXRBbmQodHlwZSwgb3JpZ2luLCBpbnB1dCwgbmV3Q29uc3QpOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCFtX3Byb2MuaGFzUXVpcmtzKCkpIHsKKyAgICAgICAg
Ly8gVHVybiB0aGlzOiBTRXh0MTYoQXRvbWljWGNoZ19fXykKKyAgICAgICAgLy8gSW50byB0aGlz
OiBBdG9taWNYY2hnX19fCisgICAgICAgIGlmIChpc0F0b21pY1hjaGcoY2hpbGQtPm9wY29kZSgp
KSAmJiBjaGlsZC0+YXM8QXRvbWljVmFsdWU+KCktPmFjY2Vzc1dpZHRoKCkgPT0gV2lkdGgxNikK
KyAgICAgICAgICAgIHJldHVybiBjaGlsZDsKKyAgICB9CisKKyAgICByZXR1cm4gY2FuR2l2ZVVw
ID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KFNFeHQxNiwgb3JpZ2luLCBjaGlsZCk7Cit9CisKK1Zh
bHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlU0V4dDMyKFR5cGUgdHlwZSwgT3JpZ2luIG9y
aWdpbiwgVmFsdWUqIGNoaWxkLCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6
IFNFeHQzMihjb25zdGFudCkKKyAgICAvLyBJbnRvIHRoaXM6IHN0YXRpY19jYXN0PGludDY0X3Q+
KGNvbnN0YW50KQorICAgIGlmIChjaGlsZC0+aGFzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIGVt
aXQ8Q29uc3Q2NFZhbHVlPihvcmlnaW4sIGNoaWxkLT5hc0ludDMyKCkpOworCisgICAgLy8gVHVy
biB0aGlzOiBTRXh0MzIoQml0QW5kKGlucHV0LCBtYXNrKSkgd2hlcmUgKG1hc2sgJiAweDgwMDAw
MDAwKSA9PSAwCisgICAgLy8gSW50byB0aGlzOiBaRXh0MzIoQml0QW5kKGlucHV0LCBtYXNrKSkK
KyAgICBpZiAoY2hpbGQtPm9wY29kZSgpID09IEJpdEFuZCAmJiBjaGlsZC0+Y2hpbGQoMSktPmhh
c0ludDMyKCkKKyAgICAgICAgJiYgIShjaGlsZC0+Y2hpbGQoMSktPmFzSW50MzIoKSAmIDB4ODAw
MDAwMDApKSB7CisgICAgICAgIHJldHVybiByZWR1Y2VaRXh0MzIodHlwZSwgb3JpZ2luLCBjaGls
ZCk7CisgICAgfQorCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVl
PihTRXh0MzIsIG9yaWdpbiwgY2hpbGQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6
OnJlZHVjZVpFeHQzMihUeXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogY2hpbGQsIGJvb2wgY2Fu
R2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogWkV4dDMyKGNvbnN0YW50KQorICAgIC8vIElu
dG8gdGhpczogc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb25z
dGFudCkpCisgICAgaWYgKGNoaWxkLT5oYXNJbnQzMigpKSB7CisgICAgICAgIHVpbnQ2NF90IHJl
c3VsdCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDx1aW50MzJfdD4oY2hpbGQt
PmFzSW50MzIoKSkpOworICAgICAgICByZXR1cm4gZW1pdDxDb25zdDY0VmFsdWU+KG9yaWdpbiwg
cmVzdWx0KTsKKyAgICB9CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8
VmFsdWU+KFpFeHQzMiwgb3JpZ2luLCBjaGlsZCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGlt
aXplcjo6cmVkdWNlVHJ1bmMoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogY2hpbGQs
IGJvb2wgY2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogVHJ1bmMoY29uc3RhbnQpCisg
ICAgLy8gSW50byB0aGlzOiBzdGF0aWNfY2FzdDxpbnQzMl90Pihjb25zdGFudCkKKyAgICBpZiAo
Y2hpbGQtPmhhc0ludDY0KCkgfHwgY2hpbGQtPmhhc0RvdWJsZSgpKQorICAgICAgICByZXR1cm4g
ZW1pdDxDb25zdDMyVmFsdWU+KG9yaWdpbiwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oY2hpbGQtPmFz
SW50NjQoKSkpOworCisgICAgLy8gVHVybiB0aGlzOiBUcnVuYyhTRXh0MzIodmFsdWUpKSBvciBU
cnVuYyhaRXh0MzIodmFsdWUpKQorICAgIC8vIEludG8gdGhpczogdmFsdWUKKyAgICBpZiAoY2hp
bGQtPm9wY29kZSgpID09IFNFeHQzMiB8fCBjaGlsZC0+b3Bjb2RlKCkgPT0gWkV4dDMyKQorICAg
ICAgICByZXR1cm4gY2hpbGQtPmNoaWxkKDApOworCisgICAgLy8gVHVybiB0aGlzOiBUcnVuYyhP
cCh2YWx1ZSwgY29uc3RhbnQpKQorICAgIC8vICAgICB3aGVyZSAhKGNvbnN0YW50ICYgMHhmZmZm
ZmZmZikKKyAgICAvLyAgICAgICBhbmQgT3AgaXMgQWRkLCBTdWIsIEJpdE9yLCBvciBCaXRYb3IK
KyAgICAvLyBpbnRvIHRoaXM6IFRydW5jKHZhbHVlKQorICAgIC8vIEZJWE1FOiB0aGlzIGlzIGp1
c3QgYSBzcGVjaWFsIGNhc2Ugb2YgYSBtb3JlIGdlbmVyYWwgdXNlZEJpdHMgYW5hbHlzaXMuCisg
ICAgc3dpdGNoIChjaGlsZC0+b3Bjb2RlKCkpIHsKKyAgICBjYXNlIEFkZDoKKyAgICBjYXNlIFN1
YjoKKyAgICBjYXNlIEJpdE9yOgorICAgIGNhc2UgQml0WG9yOgorICAgICAgICBpZiAoY2hpbGQt
PmNoaWxkKDEpLT5oYXNJbnQ2NCgpICYmICEoY2hpbGQtPmNoaWxkKDEpLT5hc0ludDY0KCkgJiAw
eGZmZmZmZmZmbGwpKQorICAgICAgICAgICAgcmV0dXJuIHJlZHVjZVRydW5jKHR5cGUsIG9yaWdp
biwgY2hpbGQtPmNoaWxkKDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0
PFZhbHVlPihUcnVuYywgb3JpZ2luLCBjaGlsZCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGlt
aXplcjo6cmVkdWNlSVRvRChUeXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogY2hpbGQsIGJvb2wg
Y2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogSVRvRChjb25zdGFudCkKKyAgICAvLyBJ
bnRvIHRoaXM6IENvbnN0RG91YmxlKGNvbnN0YW50KQorICAgIGlmIChWYWx1ZSogY29uc3RhbnQg
PSBjaGlsZC0+aVRvRENvbnN0YW50KG1fcHJvYykpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1
cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0ciA6
IGVtaXQ8VmFsdWU+KElUb0QsIG9yaWdpbiwgY2hpbGQpOworfQorCitWYWx1ZSogUGVlcGhvbGVP
cHRpbWl6ZXI6OnJlZHVjZUlUb0YoVHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGNoaWxkLCBi
b29sIGNhbkdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6IElUb0YoY29uc3RhbnQpCisgICAg
Ly8gSW50byB0aGlzOiBDb25zdEZsb2F0KGNvbnN0YW50KQorICAgIGlmIChWYWx1ZSogY29uc3Rh
bnQgPSBjaGlsZC0+aVRvRkNvbnN0YW50KG1fcHJvYykpCisgICAgICAgIHJldHVybiBhcHBlbmRU
b0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0
ciA6IGVtaXQ8VmFsdWU+KElUb0YsIG9yaWdpbiwgY2hpbGQpOworfQorCitWYWx1ZSogUGVlcGhv
bGVPcHRpbWl6ZXI6OnJlZHVjZUZsb2F0VG9Eb3VibGUoVHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFs
dWUqIGNoaWxkLCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6IEZsb2F0VG9E
b3VibGUoY29uc3RhbnQpCisgICAgLy8gSW50byB0aGlzOiBDb25zdERvdWJsZShjb25zdGFudCkK
KyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gY2hpbGQtPmZsb2F0VG9Eb3VibGVDb25zdGFudCht
X3Byb2MpKQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOwor
CisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihGbG9hdFRvRG91
YmxlLCBvcmlnaW4sIGNoaWxkKTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1
Y2VEb3VibGVUb0Zsb2F0KFR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBjaGlsZCwgYm9vbCBj
YW5HaXZlVXApCit7CisgICAgLy8gVHVybiB0aGlzOiBEb3VibGVUb0Zsb2F0KGNvbnN0YW50KQor
ICAgIC8vIEludG8gdGhpczogQ29uc3RGbG9hdChjb25zdGFudCkKKyAgICBpZiAoVmFsdWUqIGNv
bnN0YW50ID0gY2hpbGQtPmRvdWJsZVRvRmxvYXRDb25zdGFudChtX3Byb2MpKQorICAgICAgICBy
ZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgLy8gVHVybiB0aGlz
OiBEb3VibGVUb0Zsb2F0KEZsb2F0VG9Eb3VibGUodmFsdWUpKQorICAgIC8vIEludG8gdGhpczog
dmFsdWUKKyAgICBpZiAoY2hpbGQtPm9wY29kZSgpID09IEZsb2F0VG9Eb3VibGUpCisgICAgICAg
IHJldHVybiBjaGlsZC0+Y2hpbGQoMCk7CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0
ciA6IGVtaXQ8VmFsdWU+KERvdWJsZVRvRmxvYXQsIG9yaWdpbiwgY2hpbGQpOworfQorCitWYWx1
ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVNlbGVjdChUeXBlIHR5cGUsIE9yaWdpbiBvcmln
aW4sIFZhbHVlKiBjb25kLCBWYWx1ZSogaWZUcnVlLCBWYWx1ZSogaWZGYWxzZSwgYm9vbCBjYW5H
aXZlVXApCit7CisgICAgLy8gVHVybiB0aGlzOiBTZWxlY3QoY29uc3RhbnQsIGEsIGIpCisgICAg
Ly8gSW50byB0aGlzOiBjb25zdGFudCA/IGEgOiBiCisgICAgaWYgKGNvbmQtPmhhc0ludDMyKCkp
CisgICAgICAgIHJldHVybiBjb25kLT5hc0ludDMyKCkgPyBpZlRydWUgOiBpZkZhbHNlOworCisg
ICAgLy8gVHVybiB0aGlzOiBTZWxlY3QoRXF1YWwoeCwgMCksIGEsIGIpCisgICAgLy8gSW50byB0
aGlzOiBTZWxlY3QoeCwgYiwgYSkKKyAgICBpZiAoY29uZC0+b3Bjb2RlKCkgPT0gRXF1YWwgJiYg
Y29uZC0+Y2hpbGQoMSktPmlzSW50KDApKQorICAgICAgICByZXR1cm4gcmVkdWNlU2VsZWN0KHR5
cGUsIG9yaWdpbiwgY29uZC0+Y2hpbGQoMCksIGlmRmFsc2UsIGlmVHJ1ZSk7CisKKyAgICAvLyBU
dXJuIHRoaXM6IFNlbGVjdChCaXRYb3IoYm9vbCwgMSksIGEsIGIpCisgICAgLy8gSW50byB0aGlz
OiBTZWxlY3QoYm9vbCwgYiwgYSkKKyAgICBpZiAoY29uZC0+b3Bjb2RlKCkgPT0gQml0WG9yICYm
IGNvbmQtPmNoaWxkKDEpLT5pc0ludDMyKDEpICYmIGNvbmQtPmNoaWxkKDApLT5yZXR1cm5zQm9v
bCgpKQorICAgICAgICByZXR1cm4gcmVkdWNlU2VsZWN0KHR5cGUsIG9yaWdpbiwgY29uZC0+Y2hp
bGQoMCksIGlmRmFsc2UsIGlmVHJ1ZSk7CisKKyAgICAvLyBUdXJuIHRoaXM6IFNlbGVjdChCaXRB
bmQoYm9vbCwgeHl6MSksIGEsIGIpCisgICAgLy8gSW50byB0aGlzOiBTZWxlY3QoYm9vbCwgYSwg
YikKKyAgICBpZiAoY29uZC0+b3Bjb2RlKCkgPT0gQml0QW5kCisgICAgICAgICYmIGNvbmQtPmNo
aWxkKDEpLT5oYXNJbnQoKQorICAgICAgICAmJiBjb25kLT5jaGlsZCgxKS0+YXNJbnQoKSAmIDEK
KyAgICAgICAgJiYgY29uZC0+Y2hpbGQoMCktPnJldHVybnNCb29sKCkpIHsKKyAgICAgICAgcmV0
dXJuIHJlZHVjZVNlbGVjdCh0eXBlLCBvcmlnaW4sIGNvbmQtPmNoaWxkKDApLCBpZlRydWUsIGlm
RmFsc2UpOworICAgIH0KKworICAgIC8vIFR1cm4gdGhpczogU2VsZWN0KHN0dWZmLCB4LCB4KQor
ICAgIC8vIEludG8gdGhpczogeAorICAgIGlmIChpZlRydWUgPT0gaWZGYWxzZSkKKyAgICAgICAg
cmV0dXJuIGlmVHJ1ZTsKKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxW
YWx1ZT4oU2VsZWN0LCBvcmlnaW4sIGNvbmQsIGlmVHJ1ZSwgaWZGYWxzZSk7Cit9CisKK1ZhbHVl
KiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlTG9hZFN0b3JlKE9wY29kZSBvcCwgVHlwZSB0eXBl
LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogYWRkcmVzcywgVmFsdWU6Ok9mZnNldFR5cGUgb2Zmc2V0
LCBWYWx1ZSogdmFsdWVTdG9yZWQsIEhlYXBSYW5nZSByYW5nZSwgSGVhcFJhbmdlIGZlbmNlUmFu
Z2UsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogTG9hZChBZGQoYWRkcmVz
cywgb2Zmc2V0MSksIG9mZnNldCA9IG9mZnNldDIpCisgICAgLy8gSW50byB0aGlzOiBMb2FkKGFk
ZHJlc3MsIG9mZnNldCA9IG9mZnNldDEgKyBvZmZzZXQyKQorICAgIC8vCisgICAgLy8gQWxzbyB0
dXJucyB0aGlzOiBTdG9yZSh2YWx1ZSwgQWRkKGFkZHJlc3MsIG9mZnNldDEpLCBvZmZzZXQgPSBv
ZmZzZXQyKQorICAgIC8vIEludG8gdGhpczogU3RvcmUodmFsdWUsIGFkZHJlc3MsIG9mZnNldCA9
IG9mZnNldDEgKyBvZmZzZXQyKQorICAgIGlmIChhZGRyZXNzLT5vcGNvZGUoKSA9PSBBZGQgJiYg
YWRkcmVzcy0+Y2hpbGQoMSktPmhhc0ludFB0cigpKSB7CisgICAgICAgIGludHB0cl90IG9mZnNl
dDEgPSBhZGRyZXNzLT5jaGlsZCgxKS0+YXNJbnRQdHIoKTsKKyAgICAgICAgaWYgKCFzdW1PdmVy
Zmxvd3M8aW50cHRyX3Q+KG9mZnNldCwgb2Zmc2V0MSkpIHsKKyAgICAgICAgICAgIG9mZnNldDEg
Kz0gb2Zmc2V0OworICAgICAgICAgICAgVmFsdWU6Ok9mZnNldFR5cGUgc21hbGxPZmZzZXQgPSBz
dGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4ob2Zmc2V0MSk7CisgICAgICAgICAgICBpZiAo
c21hbGxPZmZzZXQgPT0gb2Zmc2V0MSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVkdWNlTG9h
ZFN0b3JlKG9wLCB0eXBlLCBvcmlnaW4sIGFkZHJlc3MtPmNoaWxkKDApLCBzbWFsbE9mZnNldCwg
dmFsdWVTdG9yZWQsIHJhbmdlLCBmZW5jZVJhbmdlKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIFR1cm4gdGhpczogTG9hZChjb25zdGFudDEsIG9mZnNldCA9IGNvbnN0YW50MikKKyAgICAv
LyBJbnRvIHRoaXM6IExvYWQoY29uc3RhbnQxICsgY29uc3RhbnQyKQorICAgIC8vCisgICAgLy8g
VGhpcyBpcyBhIGZ1biBjYW5vbmljYWxpemF0aW9uLiBJdCBwdXJlbHkgcmVncmVzc2VzIG5haXZl
bHkgZ2VuZXJhdGVkIGNvZGUuIFdlIHJlbHkKKyAgICAvLyBvbiBjb25zdGFudCBtYXRlcmlhbGl6
YXRpb24gdG8gYmUgc21hcnQgZW5vdWdoIHRvIG1hdGVyaWFsaXplIHRoaXMgY29uc3RhbnQgdGhl
IHNtYXJ0CisgICAgLy8gd2F5LiBXZSB3YW50IHRoaXMgY2Fub25pY2FsaXphdGlvbiBiZWNhdXNl
IHdlIHdhbnQgdG8ga25vdyBpZiB0d28gbWVtb3J5IGFjY2Vzc2VzIHNlZQorICAgIC8vIHRoZSBz
YW1lIGFkZHJlc3MuCisgICAgaWYgKG9mZnNldCkgeworICAgICAgICBpZiAoVmFsdWUqIG5ld0Fk
ZHJlc3MgPSBhZGRyZXNzLT5hZGRDb25zdGFudChtX3Byb2MsIG9mZnNldCkpCisgICAgICAgICAg
ICByZXR1cm4gcmVkdWNlTG9hZFN0b3JlKG9wLCB0eXBlLCBvcmlnaW4sIGFwcGVuZFRvQ3VycmVu
dEJsb2NrKG5ld0FkZHJlc3MpLCAwLCB2YWx1ZVN0b3JlZCwgcmFuZ2UsIGZlbmNlUmFuZ2UpOwor
ICAgIH0KKworICAgIGlmIChjYW5HaXZlVXApCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIExvYWQ4WjoKKyAgICBjYXNlIExvYWQ4UzoKKyAgICBj
YXNlIExvYWQxNlo6CisgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICBBU1NFUlQoIXZhbHVlU3Rv
cmVkKTsKKyAgICAgICAgcmV0dXJuIGVtaXQ8TWVtb3J5VmFsdWU+KG9wLCBvcmlnaW4sIGFkZHJl
c3MsIG9mZnNldCwgcmFuZ2UsIGZlbmNlUmFuZ2UpOworICAgIGNhc2UgTG9hZDoKKyAgICAgICAg
QVNTRVJUKCF2YWx1ZVN0b3JlZCk7CisgICAgICAgIHJldHVybiBlbWl0PE1lbW9yeVZhbHVlPihv
cCwgdHlwZSwgb3JpZ2luLCBhZGRyZXNzLCBvZmZzZXQsIHJhbmdlLCBmZW5jZVJhbmdlKTsKKyAg
ICBjYXNlIFN0b3JlODoKKyAgICBjYXNlIFN0b3JlMTY6CisgICAgY2FzZSBTdG9yZToKKyAgICAg
ICAgQVNTRVJUKCEhdmFsdWVTdG9yZWQpOworICAgICAgICByZXR1cm4gZW1pdDxNZW1vcnlWYWx1
ZT4ob3AsIG9yaWdpbiwgdmFsdWVTdG9yZWQsIGFkZHJlc3MsIG9mZnNldCwgcmFuZ2UsIGZlbmNl
UmFuZ2UpOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK30KKworVmFsdWUqIFBlZXBob2xl
T3B0aW1pemVyOjpyZWR1Y2VFcXVhbChUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBs
ZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIGlmIChzaG91bGRHb0Jl
Zm9yZShyaWdodCwgbGVmdCkpCisgICAgICAgIHJldHVybiByZWR1Y2VFcXVhbCh0eXBlLCBvcmln
aW4sIHJpZ2h0LCBsZWZ0KTsKKworICAgIC8vIFR1cm4gdGhpczogRXF1YWwoYm9vbCwgMCkKKyAg
ICAvLyBJbnRvIHRoaXM6IEJpdFhvcihib29sLCAxKQorICAgIGlmIChsZWZ0LT5yZXR1cm5zQm9v
bCgpICYmIHJpZ2h0LT5pc0ludDMyKDApKSB7CisgICAgICAgIFZhbHVlKiBjb25zdDEgPSBlbWl0
PENvbnN0MzJWYWx1ZT4ob3JpZ2luLCAxKTsKKyAgICAgICAgcmV0dXJuIHJlZHVjZUJpdFhvcih0
eXBlLCBvcmlnaW4sIGxlZnQsIGNvbnN0MSk7CisgICAgfQorCisgICAgLy8gVHVybiB0aGlzIEVx
dWFsKGJvb2wsIDEpCisgICAgLy8gSW50byB0aGlzOiBib29sCisgICAgaWYgKGxlZnQtPnJldHVy
bnNCb29sKCkgJiYgcmlnaHQtPmlzSW50MzIoMSkpCisgICAgICAgIHJldHVybiBsZWZ0OworCisg
ICAgLy8gVHVybiB0aGlzOiBFcXVhbChjb25zdDEsIGNvbnN0MikKKyAgICAvLyBJbnRvIHRoaXM6
IGNvbnN0MSA9PSBjb25zdDIKKyAgICBpZiAoVmFsdWUqIHJlc3VsdCA9IG1fcHJvYy5hZGRCb29s
Q29uc3RhbnQob3JpZ2luLCBsZWZ0LT5lcXVhbENvbnN0YW50KHJpZ2h0KSkpCisgICAgICAgIHJl
dHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhyZXN1bHQpOworCisgICAgLy8gRklYTUU6IGF0IGxl
YXN0IGZvciBpbnRlZ2VycyB3ZSByZWFsbHkgc2hvdWxkIGhhdmUgRXF1YWwoeCwgeCkgPT4gdHJ1
ZSwgZXZlbiBmb3Igbm9uLWNvbnN0YW50cy4KKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxs
cHRyIDogZW1pdDxWYWx1ZT4oRXF1YWwsIG9yaWdpbiwgbGVmdCwgcmlnaHQpOworfQorCitWYWx1
ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZU5vdEVxdWFsKFR5cGUgdHlwZSwgT3JpZ2luIG9y
aWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAg
aWYgKHNob3VsZEdvQmVmb3JlKHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAgcmV0dXJuIHJlZHVjZU5v
dEVxdWFsKHR5cGUsIG9yaWdpbiwgcmlnaHQsIGxlZnQpOworCisgICAgLy8gVHVybiB0aGlzOiBO
b3RFcXVhbChib29sLCAwKQorICAgIC8vIEludG8gdGhpczogYm9vbAorICAgIGlmIChsZWZ0LT5y
ZXR1cm5zQm9vbCgpICYmIHJpZ2h0LT5pc0ludDMyKDApKQorICAgICAgICByZXR1cm4gbGVmdDsK
KworICAgIC8vIFR1cm4gdGhpczogTm90RXF1YWwoYm9vbCwgMSkKKyAgICAvLyBJbnRvIHRoaXM6
IEJpdFhvcihib29sLCAxKQorICAgIGlmIChsZWZ0LT5yZXR1cm5zQm9vbCgpICYmIHJpZ2h0LT5p
c0ludDMyKDEpKQorICAgICAgICByZXR1cm4gcmVkdWNlQml0WG9yKHR5cGUsIG9yaWdpbiwgbGVm
dCwgcmlnaHQpOworCisgICAgLy8gVHVybiB0aGlzOiBOb3RFcXVhbChjb25zdDEsIGNvbnN0MikK
KyAgICAvLyBJbnRvIHRoaXM6IGNvbnN0MSAhPSBjb25zdDIKKyAgICBpZiAoVmFsdWUqIHJlc3Vs
dCA9IG1fcHJvYy5hZGRCb29sQ29uc3RhbnQob3JpZ2luLCBsZWZ0LT5ub3RFcXVhbENvbnN0YW50
KHJpZ2h0KSkpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhyZXN1bHQpOwor
CisgICAgLy8gRklYTUU6IGF0IGxlYXN0IGZvciBpbnRlZ2VycyB3ZSByZWFsbHkgc2hvdWxkIGhh
dmUgTm90RXF1YWwoeCwgeCkgPT4gZmFsc2UsIGV2ZW4gZm9yIG5vbi1jb25zdGFudHMuCisKKyAg
ICByZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KE5vdEVxdWFsLCBvcmln
aW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VF
cXVhbE9yVW5vcmRlcmVkKFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZh
bHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgaWYgKHNob3VsZEdvQmVmb3JlKHJp
Z2h0LCBsZWZ0KSkKKyAgICAgICAgcmV0dXJuIHJlZHVjZUVxdWFsT3JVbm9yZGVyZWQodHlwZSwg
b3JpZ2luLCByaWdodCwgbGVmdCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IEVxdWFsT3JVbm9yZGVy
ZWQoY29uc3QxLCBjb25zdDIpCisgICAgLy8gSW50byB0aGlzOiBpc05hbihjb25zdDEpIHx8IGlz
TmFuKGNvbnN0MikgfHwgY29uc3QxID09IGNvbnN0MgorICAgIGlmIChWYWx1ZSogcmVzdWx0ID0g
bV9wcm9jLmFkZEJvb2xDb25zdGFudChvcmlnaW4sIGxlZnQtPmVxdWFsT3JVbm9yZGVyZWRDb25z
dGFudChyaWdodCkpKQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2socmVzdWx0
KTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWxzbyBoYXZlIEVxdWFsT3JVbm9yZGVyZWQo
eCwgeCkgPT4gdHJ1ZS4KKyAgICAvLyBBbHNvIHdlIHNob3VsZCBoYXZlIEVxdWFsT3JVbm9yZGVy
ZWQoY29uc3ROYW4sIHgpID0+IHRydWUgYW5kIEVxdWFsT3JVbm9yZGVyZWQoeCwgY29uc3ROYW4p
ID0+IHRydWUKKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4o
RXF1YWxPclVub3JkZXJlZCwgb3JpZ2luLCBsZWZ0LCByaWdodCk7Cit9CisKK1ZhbHVlKiBQZWVw
aG9sZU9wdGltaXplcjo6cmVkdWNlTGVzc1RoYW4oVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBW
YWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICBpZiAoc2hv
dWxkR29CZWZvcmUocmlnaHQsIGxlZnQpKQorICAgICAgICByZXR1cm4gcmVkdWNlR3JlYXRlclRo
YW4odHlwZSwgb3JpZ2luLCByaWdodCwgbGVmdCk7CisKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50
ID0gbV9wcm9jLmFkZEJvb2xDb25zdGFudChvcmlnaW4sIHJpZ2h0LT5ncmVhdGVyVGhhbkNvbnN0
YW50KGxlZnQpKSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50
KTsKKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oTGVzc1Ro
YW4sIG9yaWdpbiwgbGVmdCwgcmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6
OnJlZHVjZUdyZWF0ZXJUaGFuKFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQs
IFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgaWYgKHNob3VsZEdvQmVmb3Jl
KHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAgcmV0dXJuIHJlZHVjZUxlc3NUaGFuKHR5cGUsIG9yaWdp
biwgcmlnaHQsIGxlZnQpOworCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fcHJvYy5hZGRC
b29sQ29uc3RhbnQob3JpZ2luLCByaWdodC0+bGVzc1RoYW5Db25zdGFudChsZWZ0KSkpCisgICAg
ICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICByZXR1cm4g
Y2FuR2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KEdyZWF0ZXJUaGFuLCBvcmlnaW4sIGxl
ZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VMZXNzRXF1
YWwoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBi
b29sIGNhbkdpdmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxlZnQpKQor
ICAgICAgICByZXR1cm4gcmVkdWNlR3JlYXRlckVxdWFsKHR5cGUsIG9yaWdpbiwgcmlnaHQsIGxl
ZnQpOworCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fcHJvYy5hZGRCb29sQ29uc3RhbnQo
b3JpZ2luLCByaWdodC0+Z3JlYXRlckVxdWFsQ29uc3RhbnQobGVmdCkpKQorICAgICAgICByZXR1
cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgcmV0dXJuIGNhbkdpdmVV
cCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihMZXNzRXF1YWwsIG9yaWdpbiwgbGVmdCwgcmlnaHQp
OworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUdyZWF0ZXJFcXVhbChUeXBl
IHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2Fu
R2l2ZVVwKQoreworICAgIGlmIChzaG91bGRHb0JlZm9yZShyaWdodCwgbGVmdCkpCisgICAgICAg
IHJldHVybiByZWR1Y2VMZXNzRXF1YWwodHlwZSwgb3JpZ2luLCByaWdodCwgbGVmdCk7CisKKyAg
ICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbV9wcm9jLmFkZEJvb2xDb25zdGFudChvcmlnaW4sIHJp
Z2h0LT5sZXNzRXF1YWxDb25zdGFudChsZWZ0KSkpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1
cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0ciA6
IGVtaXQ8VmFsdWU+KEdyZWF0ZXJFcXVhbCwgb3JpZ2luLCBsZWZ0LCByaWdodCk7Cit9CisKK1Zh
bHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlQWJvdmUoVHlwZSB0eXBlLCBPcmlnaW4gb3Jp
Z2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICBp
ZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxlZnQpKQorICAgICAgICByZXR1cm4gcmVkdWNlQmVs
b3codHlwZSwgb3JpZ2luLCByaWdodCwgbGVmdCk7CisKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50
ID0gbV9wcm9jLmFkZEJvb2xDb25zdGFudChvcmlnaW4sIHJpZ2h0LT5iZWxvd0NvbnN0YW50KGxl
ZnQpKSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50KTsKKwor
ICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oQWJvdmUsIG9yaWdp
biwgbGVmdCwgcmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUJl
bG93KFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwg
Ym9vbCBjYW5HaXZlVXApCit7CisgICAgaWYgKHNob3VsZEdvQmVmb3JlKHJpZ2h0LCBsZWZ0KSkK
KyAgICAgICAgcmV0dXJuIHJlZHVjZUFib3ZlKHR5cGUsIG9yaWdpbiwgcmlnaHQsIGxlZnQpOwor
CisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fcHJvYy5hZGRCb29sQ29uc3RhbnQob3JpZ2lu
LCByaWdodC0+YWJvdmVDb25zdGFudChsZWZ0KSkpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1
cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0ciA6
IGVtaXQ8VmFsdWU+KEJlbG93LCBvcmlnaW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBl
ZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VBYm92ZUVxdWFsKFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdp
biwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgaWYg
KHNob3VsZEdvQmVmb3JlKHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAgcmV0dXJuIHJlZHVjZUJlbG93
RXF1YWwodHlwZSwgb3JpZ2luLCByaWdodCwgbGVmdCk7CisKKyAgICBpZiAoVmFsdWUqIGNvbnN0
YW50ID0gbV9wcm9jLmFkZEJvb2xDb25zdGFudChvcmlnaW4sIHJpZ2h0LT5iZWxvd0VxdWFsQ29u
c3RhbnQobGVmdCkpKQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3Rh
bnQpOworCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihBYm92
ZUVxdWFsLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1p
emVyOjpyZWR1Y2VCZWxvd0VxdWFsKFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxl
ZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgaWYgKHNob3VsZEdvQmVm
b3JlKHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAgcmV0dXJuIHJlZHVjZUFib3ZlRXF1YWwodHlwZSwg
b3JpZ2luLCByaWdodCwgbGVmdCk7CisKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbV9wcm9j
LmFkZEJvb2xDb25zdGFudChvcmlnaW4sIHJpZ2h0LT5hYm92ZUVxdWFsQ29uc3RhbnQobGVmdCkp
KQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAg
cmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihCZWxvd0VxdWFsLCBvcmln
aW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjp0cnlSZWR1
Y2UoVmFsdWUqIHZhbHVlKQoreworICAgIHN3aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7CisgICAg
Y2FzZSBPcGFxdWU6CisgICAgICAgIHJldHVybiByZWR1Y2VPcGFxdWUodmFsdWUtPnR5cGUoKSwg
dmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHRydWUpOworICAgIGNhc2UgQWRkOgor
ICAgICAgICByZXR1cm4gcmVkdWNlQWRkKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwg
dmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIHRydWUpOworICAgIGNhc2UgU3ViOgor
ICAgICAgICByZXR1cm4gcmVkdWNlU3ViKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwg
dmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIHRydWUpOworICAgIGNhc2UgTmVnOgor
ICAgICAgICByZXR1cm4gcmVkdWNlTmVnKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwg
dmFsdWUtPmNoaWxkKDApLCB0cnVlKTsKKyAgICBjYXNlIE11bDoKKyAgICAgICAgcmV0dXJuIHJl
ZHVjZU11bCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwg
dmFsdWUtPmNoaWxkKDEpLCB0cnVlKTsKKyAgICBjYXNlIERpdjoKKyAgICAgICAgcmV0dXJuIHJl
ZHVjZURpdih2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwg
dmFsdWUtPmNoaWxkKDEpLCB2YWx1ZS0+aXNDaGlsbCgpLCB0cnVlKTsKKyAgICBjYXNlIFVEaXY6
CisgICAgICAgIHJldHVybiByZWR1Y2VVRGl2KHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4o
KSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIHRydWUpOworICAgIGNhc2UgTW9k
OgorICAgICAgICByZXR1cm4gcmVkdWNlTW9kKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4o
KSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIHZhbHVlLT5pc0NoaWxsKCksIHRy
dWUpOworICAgIGNhc2UgVU1vZDoKKyAgICAgICAgcmV0dXJuIHJlZHVjZVVNb2QodmFsdWUtPnR5
cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgxKSwg
dHJ1ZSk7CisgICAgY2FzZSBCaXRBbmQ6CisgICAgICAgIHJldHVybiByZWR1Y2VCaXRBbmQodmFs
dWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGls
ZCgxKSwgdHJ1ZSk7CisgICAgY2FzZSBCaXRPcjoKKyAgICAgICAgcmV0dXJuIHJlZHVjZUJpdE9y
KHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+
Y2hpbGQoMSksIHRydWUpOworICAgIGNhc2UgQml0WG9yOgorICAgICAgICByZXR1cm4gcmVkdWNl
Qml0WG9yKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2
YWx1ZS0+Y2hpbGQoMSksIHRydWUpOworICAgIGNhc2UgU2hsOgorICAgICAgICByZXR1cm4gcmVk
dWNlU2hsKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2
YWx1ZS0+Y2hpbGQoMSksIHRydWUpOworICAgIGNhc2UgU1NocjoKKyAgICAgICAgcmV0dXJuIHJl
ZHVjZVNTaHIodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCks
IHZhbHVlLT5jaGlsZCgxKSwgdHJ1ZSk7CisgICAgY2FzZSBaU2hyOgorICAgICAgICByZXR1cm4g
cmVkdWNlWlNocih2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgw
KSwgdmFsdWUtPmNoaWxkKDEpLCB0cnVlKTsKKyAgICBjYXNlIFJvdFI6CisgICAgICAgIHJldHVy
biByZWR1Y2VSb3RSKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxk
KDApLCB2YWx1ZS0+Y2hpbGQoMSksIHRydWUpOworICAgIGNhc2UgUm90TDoKKyAgICAgICAgcmV0
dXJuIHJlZHVjZVJvdEwodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hp
bGQoMCksIHZhbHVlLT5jaGlsZCgxKSwgdHJ1ZSk7CisgICAgY2FzZSBBYnM6CisgICAgICAgIHJl
dHVybiByZWR1Y2VBYnModmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hp
bGQoMCksIHRydWUpOworICAgIGNhc2UgQ2VpbDoKKyAgICAgICAgcmV0dXJuIHJlZHVjZUNlaWwo
dmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHRydWUpOwor
ICAgIGNhc2UgRmxvb3I6CisgICAgICAgIHJldHVybiByZWR1Y2VGbG9vcih2YWx1ZS0+dHlwZSgp
LCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdHJ1ZSk7CisgICAgY2FzZSBTcXJ0
OgorICAgICAgICByZXR1cm4gcmVkdWNlU3FydCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2lu
KCksIHZhbHVlLT5jaGlsZCgwKSwgdHJ1ZSk7CisgICAgY2FzZSBCaXR3aXNlQ2FzdDoKKyAgICAg
ICAgcmV0dXJuIHJlZHVjZUJpdHdpc2VDYXN0KHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4o
KSwgdmFsdWUtPmNoaWxkKDApLCB0cnVlKTsKKyAgICBjYXNlIFNFeHQ4OgorICAgICAgICByZXR1
cm4gcmVkdWNlU0V4dDgodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hp
bGQoMCksIHRydWUpOworICAgIGNhc2UgU0V4dDE2OgorICAgICAgICByZXR1cm4gcmVkdWNlU0V4
dDE2KHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB0cnVl
KTsKKyAgICBjYXNlIFNFeHQzMjoKKyAgICAgICAgcmV0dXJuIHJlZHVjZVNFeHQzMih2YWx1ZS0+
dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdHJ1ZSk7CisgICAgY2Fz
ZSBaRXh0MzI6CisgICAgICAgIHJldHVybiByZWR1Y2VaRXh0MzIodmFsdWUtPnR5cGUoKSwgdmFs
dWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHRydWUpOworICAgIGNhc2UgVHJ1bmM6Cisg
ICAgICAgIHJldHVybiByZWR1Y2VUcnVuYyh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCks
IHZhbHVlLT5jaGlsZCgwKSwgdHJ1ZSk7CisgICAgY2FzZSBJVG9GOgorICAgICAgICByZXR1cm4g
cmVkdWNlSVRvRih2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgw
KSwgdHJ1ZSk7CisgICAgY2FzZSBJVG9EOgorICAgICAgICByZXR1cm4gcmVkdWNlSVRvRCh2YWx1
ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdHJ1ZSk7CisgICAg
Y2FzZSBGbG9hdFRvRG91YmxlOgorICAgICAgICByZXR1cm4gcmVkdWNlRmxvYXRUb0RvdWJsZSh2
YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdHJ1ZSk7Cisg
ICAgY2FzZSBEb3VibGVUb0Zsb2F0OgorICAgICAgICByZXR1cm4gcmVkdWNlRG91YmxlVG9GbG9h
dCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdHJ1ZSk7
CisgICAgY2FzZSBTZWxlY3Q6CisgICAgICAgIHJldHVybiByZWR1Y2VTZWxlY3QodmFsdWUtPnR5
cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgxKSwg
dmFsdWUtPmNoaWxkKDIpLCB0cnVlKTsKKyAgICBjYXNlIExvYWQ4WjoKKyAgICBjYXNlIExvYWQ4
UzoKKyAgICBjYXNlIExvYWQxNlo6CisgICAgY2FzZSBMb2FkMTZTOgorICAgIGNhc2UgTG9hZDog
eworICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9yeVZhbHVlPigp
OworICAgICAgICByZXR1cm4gcmVkdWNlTG9hZFN0b3JlKG1lbW9yeS0+b3Bjb2RlKCksIG1lbW9y
eS0+dHlwZSgpLCBtZW1vcnktPm9yaWdpbigpLCBtZW1vcnktPmNoaWxkKDApLCBtZW1vcnktPm9m
ZnNldCgpLCBudWxscHRyLCBtZW1vcnktPnJhbmdlKCksIG1lbW9yeS0+ZmVuY2VSYW5nZSgpLCB0
cnVlKTsKKyAgICB9CisgICAgY2FzZSBTdG9yZTg6CisgICAgY2FzZSBTdG9yZTE2OgorICAgIGNh
c2UgU3RvcmU6IHsKKyAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVlLT5hczxNZW1v
cnlWYWx1ZT4oKTsKKyAgICAgICAgcmV0dXJuIHJlZHVjZUxvYWRTdG9yZShtZW1vcnktPm9wY29k
ZSgpLCBtZW1vcnktPnR5cGUoKSwgbWVtb3J5LT5vcmlnaW4oKSwgbWVtb3J5LT5jaGlsZCgxKSwg
bWVtb3J5LT5vZmZzZXQoKSwgbWVtb3J5LT5jaGlsZCgwKSwgbWVtb3J5LT5yYW5nZSgpLCBtZW1v
cnktPmZlbmNlUmFuZ2UoKSwgdHJ1ZSk7CisgICAgfQorICAgIGNhc2UgRXF1YWw6CisgICAgICAg
IHJldHVybiByZWR1Y2VFcXVhbCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVl
LT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxkKDEpLCB0cnVlKTsKKyAgICBjYXNlIE5vdEVxdWFsOgor
ICAgICAgICByZXR1cm4gcmVkdWNlTm90RXF1YWwodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdp
bigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgxKSwgdHJ1ZSk7CisgICAgY2FzZSBF
cXVhbE9yVW5vcmRlcmVkOgorICAgICAgICByZXR1cm4gcmVkdWNlRXF1YWxPclVub3JkZXJlZCh2
YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdmFsdWUtPmNo
aWxkKDEpLCB0cnVlKTsKKyAgICBjYXNlIExlc3NUaGFuOgorICAgICAgICByZXR1cm4gcmVkdWNl
TGVzc1RoYW4odmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCks
IHZhbHVlLT5jaGlsZCgxKSwgdHJ1ZSk7CisgICAgY2FzZSBHcmVhdGVyVGhhbjoKKyAgICAgICAg
cmV0dXJuIHJlZHVjZUdyZWF0ZXJUaGFuKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwg
dmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIHRydWUpOworICAgIGNhc2UgTGVzc0Vx
dWFsOgorICAgICAgICByZXR1cm4gcmVkdWNlTGVzc0VxdWFsKHZhbHVlLT50eXBlKCksIHZhbHVl
LT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIHRydWUpOworICAg
IGNhc2UgR3JlYXRlckVxdWFsOgorICAgICAgICByZXR1cm4gcmVkdWNlR3JlYXRlckVxdWFsKHZh
bHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hp
bGQoMSksIHRydWUpOworICAgIGNhc2UgQWJvdmU6CisgICAgICAgIHJldHVybiByZWR1Y2VBYm92
ZSh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdmFsdWUt
PmNoaWxkKDEpLCB0cnVlKTsKKyAgICBjYXNlIEJlbG93OgorICAgICAgICByZXR1cm4gcmVkdWNl
QmVsb3codmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZh
bHVlLT5jaGlsZCgxKSwgdHJ1ZSk7CisgICAgY2FzZSBBYm92ZUVxdWFsOgorICAgICAgICByZXR1
cm4gcmVkdWNlQWJvdmVFcXVhbCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVl
LT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxkKDEpLCB0cnVlKTsKKyAgICBjYXNlIEJlbG93RXF1YWw6
CisgICAgICAgIHJldHVybiByZWR1Y2VCZWxvd0VxdWFsKHZhbHVlLT50eXBlKCksIHZhbHVlLT5v
cmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIHRydWUpOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIFBlZXBob2xl
T3B0aW1pemVyOjp0cnlTaW1wbGlmeUJyYW5jaChWYWx1ZSogdmFsdWUpCit7CisgICAgQVNTRVJU
KHZhbHVlLT5vcGNvZGUoKSA9PSBCcmFuY2gpOworICAgIEFTU0VSVCghIW1faW5zZXJ0aW9uU2V0
KTsKKyAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHZhbHVlLT5vd25lcjsKKyAgICBib29sIGNoYW5n
ZWQgPSBmYWxzZTsKKworICAgIC8vIFNpbXBsZSBmaXhwb2ludCBhcyBzb21lIG9mIHRoZXNlIG9w
dGltaXphdGlvbnMga2VlcCBhIGJyYW5jaCBhbmQgc28gY2FuIGJlIGNoYWluZWQKKyAgICBmb3Ig
KDs7KSB7CisgICAgICAgIC8vIFR1cm4gdGhpczogQnJhbmNoKE5vdEVxdWFsKHgsIDApKQorICAg
ICAgICAvLyBJbnRvIHRoaXM6IEJyYW5jaCh4KQorICAgICAgICBpZiAodmFsdWUtPmNoaWxkKDAp
LT5vcGNvZGUoKSA9PSBOb3RFcXVhbCAmJiB2YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0lu
dCgwKSkgeworICAgICAgICAgICAgdmFsdWUtPmNoaWxkKDApID0gdmFsdWUtPmNoaWxkKDApLT5j
aGlsZCgwKTsKKyAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBUdXJuIHRoaXM6IEJyYW5jaChFcXVhbCh4LCAw
KSwgdGhlbiwgZWxzZSkKKyAgICAgICAgLy8gSW50byB0aGlzOiBCcmFuY2goeCwgZWxzZSwgdGhl
bikKKyAgICAgICAgaWYgKHZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gRXF1YWwgJiYgdmFs
dWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQoMCkpIHsKKyAgICAgICAgICAgIHZhbHVlLT5j
aGlsZCgwKSA9IHZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICBzdGQ6OnN3
YXAoYmxvY2stPnRha2VuKCksIGJsb2NrLT5ub3RUYWtlbigpKTsKKyAgICAgICAgICAgIGNoYW5n
ZWQgPSB0cnVlOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAv
LyBUdXJuIHRoaXM6IEJyYW5jaChCaXRYb3IoYm9vbCwgMSksIHRoZW4sIGVsc2UpCisgICAgICAg
IC8vIEludG8gdGhpczogQnJhbmNoKGJvb2wsIGVsc2UsIHRoZW4pCisgICAgICAgIGlmICh2YWx1
ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdFhvcgorICAgICAgICAgICAgJiYgdmFsdWUtPmNo
aWxkKDApLT5jaGlsZCgxKS0+aXNJbnQzMigxKQorICAgICAgICAgICAgJiYgdmFsdWUtPmNoaWxk
KDApLT5jaGlsZCgwKS0+cmV0dXJuc0Jvb2woKSkgeworICAgICAgICAgICAgdmFsdWUtPmNoaWxk
KDApID0gdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKKyAgICAgICAgICAgIHN0ZDo6c3dhcChi
bG9jay0+dGFrZW4oKSwgYmxvY2stPm5vdFRha2VuKCkpOworICAgICAgICAgICAgY2hhbmdlZCA9
IHRydWU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFR1
cm4gdGhpczogQnJhbmNoKEJpdEFuZChib29sLCB4eWIxKSwgdGhlbiwgZWxzZSkKKyAgICAgICAg
Ly8gSW50byB0aGlzOiBCcmFuY2goYm9vbCwgdGhlbiwgZWxzZSkKKyAgICAgICAgaWYgKHZhbHVl
LT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0QW5kCisgICAgICAgICAgICAmJiB2YWx1ZS0+Y2hp
bGQoMCktPmNoaWxkKDEpLT5oYXNJbnQoKQorICAgICAgICAgICAgJiYgdmFsdWUtPmNoaWxkKDAp
LT5jaGlsZCgxKS0+YXNJbnQoKSAmIDEKKyAgICAgICAgICAgICYmIHZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMCktPnJldHVybnNCb29sKCkpIHsKKyAgICAgICAgICAgIHZhbHVlLT5jaGlsZCgwKSA9
IHZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgVHJpU3RhdGUgdHJp
U3RhdGUgPSB2YWx1ZS0+Y2hpbGQoMCktPmFzVHJpU3RhdGUoKTsKKworICAgICAgICAvLyBUdXJu
IHRoaXM6IEJyYW5jaCgwLCB0aGVuLCBlbHNlKQorICAgICAgICAvLyBJbnRvIHRoaXM6IEp1bXAo
ZWxzZSkKKyAgICAgICAgaWYgKHRyaVN0YXRlID09IEZhbHNlVHJpU3RhdGUpIHsKKyAgICAgICAg
ICAgIGJsb2NrLT50YWtlbigpLmJsb2NrKCktPnJlbW92ZVByZWRlY2Vzc29yKGJsb2NrKTsKKyAg
ICAgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0aEp1bXAoYmxvY2ssIGJsb2NrLT5ub3RUYWtlbigp
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gVHVy
biB0aGlzOiBCcmFuY2gobm90IDAsIHRoZW4sIGVsc2UpCisgICAgICAgIC8vIEludG8gdGhpczog
SnVtcCh0aGVuKQorICAgICAgICBpZiAodHJpU3RhdGUgPT0gVHJ1ZVRyaVN0YXRlKSB7CisgICAg
ICAgICAgICBibG9jay0+bm90VGFrZW4oKS5ibG9jaygpLT5yZW1vdmVQcmVkZWNlc3NvcihibG9j
ayk7CisgICAgICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhKdW1wKGJsb2NrLCBibG9jay0+dGFr
ZW4oKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICByZXR1cm4gY2hhbmdlZDsKK30KKworYm9vbCBQZWVwaG9sZU9wdGlt
aXplcjo6dHJ5U2ltcGxpZnlDQ2FsbChDQ2FsbFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQo
dmFsdWUtPm9wY29kZSgpID09IENDYWxsKTsKKyAgICBBU1NFUlQoISFtX2luc2VydGlvblNldCk7
CisgICAgLy8gVHVybiB0aGlzOiBDYWxsKGZtb2QsIGNvbnN0YW50MSwgY29uc3RhbnQyKQorICAg
IC8vIEludG8gdGhpczogZmNhbGwtY29uc3RhbnQoY29uc3RhbnQxLCBjb25zdGFudDIpCisgICAg
YXV0byogZm1vZERvdWJsZSA9IHRhZ0NGdW5jdGlvblB0cjxkb3VibGUgKCopKGRvdWJsZSwgZG91
YmxlKT4oZm1vZCwgQjNDQ2FsbFB0clRhZyk7CisgICAgaWYgKHZhbHVlLT50eXBlKCkgPT0gRG91
YmxlCisgICAgICAgICYmIHZhbHVlLT5udW1DaGlsZHJlbigpID09IDMKKyAgICAgICAgJiYgdmFs
dWUtPmNoaWxkKDApLT5pc0ludFB0cihyZWludGVycHJldF9jYXN0PGludHB0cl90PihmbW9kRG91
YmxlKSkKKyAgICAgICAgJiYgdmFsdWUtPmNoaWxkKDEpLT50eXBlKCkgPT0gRG91YmxlCisgICAg
ICAgICYmIHZhbHVlLT5jaGlsZCgyKS0+dHlwZSgpID09IERvdWJsZSkgeworICAgICAgICBpZiAo
VmFsdWUqIGNvbnN0YW50ID0gdmFsdWUtPmNoaWxkKDEpLT5tb2RDb25zdGFudChtX3Byb2MsIHZh
bHVlLT5jaGlsZCgyKSkpIHsKKyAgICAgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5
KGFwcGVuZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUGVlcGhv
bGVPcHRpbWl6ZXI6OnRyeVNpbXBsaWZ5Q2hlY2tBZGQoQ2hlY2tWYWx1ZSogdmFsdWUpCit7Cisg
ICAgQVNTRVJUKHZhbHVlLT5vcGNvZGUoKSA9PSBDaGVja0FkZCk7CisgICAgQVNTRVJUKCEhbV9p
bnNlcnRpb25TZXQpOworICAgIFZhbHVlKiBsZWZ0ID0gdmFsdWUtPmNoaWxkKDApOworICAgIFZh
bHVlKiByaWdodCA9IHZhbHVlLT5jaGlsZCgxKTsKKworICAgIGlmIChWYWx1ZSogY29uc3RhbnQg
PSBsZWZ0LT5jaGVja0FkZENvbnN0YW50KG1fcHJvYywgcmlnaHQpKSB7CisgICAgICAgIHZhbHVl
LT5yZXBsYWNlV2l0aElkZW50aXR5KGFwcGVuZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50KSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChzaG91bGRHb0JlZm9yZShyaWdo
dCwgbGVmdCkpIHsKKyAgICAgICAgc3RkOjpzd2FwKHZhbHVlLT5jaGlsZCgwKSwgdmFsdWUtPmNo
aWxkKDEpKTsKKyAgICAgICAgdHJ5U2ltcGxpZnlDaGVja0FkZCh2YWx1ZSk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChyaWdodC0+aXNJbnQoMCkpIHsKKyAgICAgICAg
dmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkobGVmdCk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIGlmICghcmFuZ2VGb3IobGVmdCkuY291bGRPdmVyZmxvd0FkZChyYW5nZUZv
cihyaWdodCksIHZhbHVlLT50eXBlKCkpKSB7CisgICAgICAgIFZhbHVlKiBhZGQgPSByZWR1Y2VB
ZGQodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgICAg
IHZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KGFkZCk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQZWVwaG9sZU9wdGltaXplcjo6
dHJ5U2ltcGxpZnlDaGVja1N1YihDaGVja1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQodmFs
dWUtPm9wY29kZSgpID09IENoZWNrU3ViKTsKKyAgICBBU1NFUlQoISFtX2luc2VydGlvblNldCk7
CisgICAgVmFsdWUqIGxlZnQgPSB2YWx1ZS0+Y2hpbGQoMCk7CisgICAgVmFsdWUqIHJpZ2h0ID0g
dmFsdWUtPmNoaWxkKDEpOworCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGxlZnQtPmNoZWNr
U3ViQ29uc3RhbnQobV9wcm9jLCByaWdodCkpIHsKKyAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRo
SWRlbnRpdHkoYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgaWYgKHJpZ2h0LT5pc0ludCgwKSkgeworICAgICAgICB2YWx1
ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShsZWZ0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgaWYgKFZhbHVlKiBuZWdhdGVkQ29uc3RhbnQgPSByaWdodC0+Y2hlY2tOZWdDb25z
dGFudChtX3Byb2MpKSB7CisgICAgICAgIG5lZ2F0ZWRDb25zdGFudCA9IGFwcGVuZFRvQ3VycmVu
dEJsb2NrKG5lZ2F0ZWRDb25zdGFudCk7CisgICAgICAgIHZhbHVlLT5jb252ZXJ0VG9BZGQoKTsK
KyAgICAgICAgdmFsdWUtPmNoaWxkKDEpID0gbmVnYXRlZENvbnN0YW50OworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIXJhbmdlRm9yKGxlZnQpLmNvdWxkT3ZlcmZsb3dT
dWIocmFuZ2VGb3IocmlnaHQpLCB2YWx1ZS0+dHlwZSgpKSkgeworICAgICAgICBWYWx1ZSogc3Vi
ID0gcmVkdWNlU3ViKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgbGVmdCwgcmlnaHQp
OworICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShzdWIpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUGVlcGhvbGVP
cHRpbWl6ZXI6OnRyeVNpbXBsaWZ5Q2hlY2tNdWwoQ2hlY2tWYWx1ZSogdmFsdWUpCit7CisgICAg
QVNTRVJUKHZhbHVlLT5vcGNvZGUoKSA9PSBDaGVja011bCk7CisgICAgQVNTRVJUKCEhbV9pbnNl
cnRpb25TZXQpOworICAgIFZhbHVlKiBsZWZ0ID0gdmFsdWUtPmNoaWxkKDApOworICAgIFZhbHVl
KiByaWdodCA9IHZhbHVlLT5jaGlsZCgxKTsKKworICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBs
ZWZ0LT5jaGVja011bENvbnN0YW50KG1fcHJvYywgcmlnaHQpKSB7CisgICAgICAgIHZhbHVlLT5y
ZXBsYWNlV2l0aElkZW50aXR5KGFwcGVuZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50KSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChzaG91bGRHb0JlZm9yZShyaWdodCwg
bGVmdCkpIHsKKyAgICAgICAgc3RkOjpzd2FwKHZhbHVlLT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxk
KDEpKTsKKyAgICAgICAgdHJ5U2ltcGxpZnlDaGVja011bCh2YWx1ZSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIGlmIChyaWdodC0+aGFzSW50KCkpIHsKKyAgICAgICAgaWYg
KCFyaWdodC0+YXNJbnQoKSkgeworICAgICAgICAgICAgVmFsdWUqIGNvbnN0MCA9IGFwcGVuZFRv
Q3VycmVudEJsb2NrKG1fcHJvYy5hZGRJbnRDb25zdGFudCh2YWx1ZSwgMCkpOworICAgICAgICAg
ICAgdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkoY29uc3QwKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChyaWdodC0+YXNJbnQoKSA9PSAxKSB7Cisg
ICAgICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShsZWZ0KTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChyaWdodC0+YXNJbnQoKSA9PSAy
KSB7CisgICAgICAgICAgICB2YWx1ZS0+Y29udmVydFRvQWRkKCk7CisgICAgICAgICAgICB2YWx1
ZS0+Y2hpbGQoMSkgPSB2YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICB0cnlTaW1wbGlmeUNo
ZWNrQWRkKHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKwor
ICAgIH0KKyAgICBpZiAocmlnaHQtPmlzSW50KDApKSB7CisgICAgICAgIHZhbHVlLT5yZXBsYWNl
V2l0aElkZW50aXR5KGxlZnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBp
ZiAoIXJhbmdlRm9yKGxlZnQpLmNvdWxkT3ZlcmZsb3dNdWwocmFuZ2VGb3IocmlnaHQpLCB2YWx1
ZS0+dHlwZSgpKSkgeworICAgICAgICBWYWx1ZSogbXVsID0gcmVkdWNlTXVsKHZhbHVlLT50eXBl
KCksIHZhbHVlLT5vcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgICAgICB2YWx1ZS0+cmVwbGFj
ZVdpdGhJZGVudGl0eShtdWwpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUGVlcGhvbGVPcHRpbWl6ZXI6OnRyeVNpbXBsaWZ5Q2hl
Y2soQ2hlY2tWYWx1ZSogdmFsdWUpCit7CisgICAgQVNTRVJUKHZhbHVlLT5vcGNvZGUoKSA9PSBD
aGVjayk7CisgICAgQVNTRVJUKCEhbV9pbnNlcnRpb25TZXQpOworCisgICAgaWYgKHZhbHVlLT5j
aGlsZCgwKS0+aXNMaWtlWmVybygpKSB7CisgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0aE5vcCgp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAodmFsdWUtPmNoaWxkKDAp
LT5pc0xpa2VOb25aZXJvKCkpIHsKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50
ID0gZW1pdDxQYXRjaHBvaW50VmFsdWU+KFZvaWQsIHZhbHVlLT5vcmlnaW4oKSktPmFzPFBhdGNo
cG9pbnRWYWx1ZT4oKTsKKworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0cygp
OworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzID0gSGVhcFJhbmdlOjp0b3AoKTsK
KyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5leGl0c1NpZGV3YXlzID0gdHJ1ZTsKKworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgdmFsdWUtPm51bUNoaWxkcmVuKCk7ICsraSkK
KyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZCh2YWx1ZS0+Y29uc3RyYWluZWRDaGlsZChp
KSk7CisKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKHZhbHVlLT5nZW5lcmF0b3Io
KSk7CisKKyAgICAgICAgLy8gUmVwbGFjZSB0aGUgcmVzdCBvZiB0aGUgYmxvY2sgd2l0aCBhbiBP
b3BzLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4ICsgMTsgaSA8IHZhbHVlLT5v
d25lci0+c2l6ZSgpIC0gMTsgKytpKQorICAgICAgICAgICAgdmFsdWUtPm93bmVyLT5hdChpKS0+
cmVwbGFjZVdpdGhCb3R0b20oKm1faW5zZXJ0aW9uU2V0LCBtX2luZGV4KTsKKyAgICAgICAgdmFs
dWUtPm93bmVyLT5sYXN0KCktPnJlcGxhY2VXaXRoT29wcyh2YWx1ZS0+b3duZXIpOworICAgICAg
ICB2YWx1ZS0+b3duZXItPmxhc3QoKS0+c2V0T3JpZ2luKHZhbHVlLT5vcmlnaW4oKSk7CisKKyAg
ICAgICAgLy8gUmVwbGFjZSBvdXJzZWx2ZXMgbGFzdC4KKyAgICAgICAgdmFsdWUtPnJlcGxhY2VX
aXRoTm9wKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICh2YWx1ZS0+
Y2hpbGQoMCktPm9wY29kZSgpID09IE5vdEVxdWFsCisgICAgICAgICYmIHZhbHVlLT5jaGlsZCgw
KS0+Y2hpbGQoMSktPmlzSW50KDApKSB7CisgICAgICAgIHZhbHVlLT5jaGlsZCgwKSA9IHZhbHVl
LT5jaGlsZCgwKS0+Y2hpbGQoMCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKworLy8gUmV0dXJucyB0cnVlIGlmIHggPCB5IGZvciBzb21lIG9y
ZGVyIHN1Y2ggdGhhdDoKKy8vIEF0b21pY1N0cm9uZ0NBUyBhcmUgYWx3YXlzIGF0IHRoZSBiZWdp
bm5pbmcgKHVzZWQgYnkgc29tZSBwYXR0ZXJucyBpbiBCM0xvd2VyVG9BaXIpCisvLyBDb25zdGFu
dHMgYXJlIGFsd2F5cyBhdCB0aGUgZW5kICh1c2VkIGJ5IHNvbWUgb3RoZXIgcGF0dGVybnMgZm9y
IHN0cmVuZ3RoIHJlZHVjdGlvbikKKy8vIEV2ZXJ5dGhpbmcgZWxzZSBpcyBzb3J0ZWQgYnkgaW5k
ZXggKGFzIGEgY2Fub25pY2FsaXphdGlvbiB0aGF0IGhlbHBzIHBhc3NlcyBsaWtlIENTRSkKK2Jv
b2wgUGVlcGhvbGVPcHRpbWl6ZXI6OnNob3VsZEdvQmVmb3JlKFZhbHVlKiB4LCBWYWx1ZSogeSkK
K3sKKyAgICBpZiAoKHgtPmlzQ29uc3RhbnQoKSAmJiAheS0+aXNDb25zdGFudCgpKQorICAgICAg
ICB8fCAoeS0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTICYmICEoeC0+b3Bjb2RlKCkgPT0g
QXRvbWljU3Ryb25nQ0FTKSkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBy
ZXR1cm4gKCh5LT5pc0NvbnN0YW50KCkgJiYgIXgtPmlzQ29uc3RhbnQoKSkKKyAgICAgICAgfHwg
KHgtPm9wY29kZSgpID09IEF0b21pY1N0cm9uZ0NBUyAmJiAhKHktPm9wY29kZSgpID09IEF0b21p
Y1N0cm9uZ0NBUykpCisgICAgICAgIHx8ICh4LT5pbmRleCgpIDwgeS0+aW5kZXgoKSkpOworfQor
CisvLyBGb3IgT3A9PUFkZCBvciBTdWIsIHR1cm4gYW55IG9mIHRoZXNlOgorLy8gICAgICBPcChN
dWwoeDEsIHgyKSwgTXVsKHgxLCB4MykpCisvLyAgICAgIE9wKE11bCh4MiwgeDEpLCBNdWwoeDEs
IHgzKSkKKy8vICAgICAgT3AoTXVsKHgxLCB4MiksIE11bCh4MywgeDEpKQorLy8gICAgICBPcChN
dWwoeDIsIHgxKSwgTXVsKHgzLCB4MSkpCisvLyBJbnRvIHRoaXM6IE11bCh4MSwgT3AoeDIsIHgz
KSkKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6dHJ5UmVkdWNlTXVsRGlzdHJpYnV0aXZpdHko
T3Bjb2RlIG9wLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSog
cmlnaHQpCit7CisgICAgQVNTRVJUKG9wID09IEFkZCB8fCBvcCA9PSBTdWIpOworICAgIFZhbHVl
KiB4MSA9IG51bGxwdHI7CisgICAgVmFsdWUqIHgyID0gbnVsbHB0cjsKKyAgICBWYWx1ZSogeDMg
PSBudWxscHRyOworICAgIGlmIChsZWZ0LT5vcGNvZGUoKSA9PSBNdWwgJiYgcmlnaHQtPm9wY29k
ZSgpID09IE11bCkgeworICAgICAgICBpZiAobGVmdC0+Y2hpbGQoMCkgPT0gcmlnaHQtPmNoaWxk
KDApKSB7CisgICAgICAgICAgICAvLyBPcChNdWwoeDEsIHgyKSwgTXVsKHgxLCB4MykpCisgICAg
ICAgICAgICB4MSA9IGxlZnQtPmNoaWxkKDApOworICAgICAgICAgICAgeDIgPSBsZWZ0LT5jaGls
ZCgxKTsKKyAgICAgICAgICAgIHgzID0gcmlnaHQtPmNoaWxkKDEpOworICAgICAgICB9IGVsc2Ug
aWYgKGxlZnQtPmNoaWxkKDEpID09IHJpZ2h0LT5jaGlsZCgwKSkgeworICAgICAgICAgICAgLy8g
T3AoTXVsKHgyLCB4MSksIE11bCh4MSwgeDMpKQorICAgICAgICAgICAgeDEgPSBsZWZ0LT5jaGls
ZCgxKTsKKyAgICAgICAgICAgIHgyID0gbGVmdC0+Y2hpbGQoMCk7CisgICAgICAgICAgICB4MyA9
IHJpZ2h0LT5jaGlsZCgxKTsKKyAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5jaGlsZCgwKSA9PSBy
aWdodC0+Y2hpbGQoMSkpIHsKKyAgICAgICAgICAgIC8vIE9wKE11bCh4MSwgeDIpLCBNdWwoeDMs
IHgxKSkKKyAgICAgICAgICAgIHgxID0gbGVmdC0+Y2hpbGQoMCk7CisgICAgICAgICAgICB4MiA9
IGxlZnQtPmNoaWxkKDEpOworICAgICAgICAgICAgeDMgPSByaWdodC0+Y2hpbGQoMCk7CisgICAg
ICAgIH0gZWxzZSBpZiAobGVmdC0+Y2hpbGQoMSkgPT0gcmlnaHQtPmNoaWxkKDEpKSB7CisgICAg
ICAgICAgICAvLyBPcChNdWwoeDIsIHgxKSwgTXVsKHgzLCB4MSkpCisgICAgICAgICAgICB4MSA9
IGxlZnQtPmNoaWxkKDEpOworICAgICAgICAgICAgeDIgPSBsZWZ0LT5jaGlsZCgwKTsKKyAgICAg
ICAgICAgIHgzID0gcmlnaHQtPmNoaWxkKDApOworICAgICAgICB9CisgICAgfQorICAgIGlmICh4
MSAhPSBudWxscHRyKSB7CisgICAgICAgIEFTU0VSVCh4MiAhPSBudWxscHRyICYmIHgzICE9IG51
bGxwdHIpOworICAgICAgICBWYWx1ZSogbmV3T3AgPSBvcCA9PSBBZGQgPyByZWR1Y2VBZGQodHlw
ZSwgb3JpZ2luLCB4MiwgeDMpIDogcmVkdWNlU3ViKHR5cGUsIG9yaWdpbiwgeDIsIHgzKTsKKyAg
ICAgICAgcmV0dXJuIHJlZHVjZU11bCh0eXBlLCBvcmlnaW4sIHgxLCBuZXdPcCk7CisgICAgfQor
ICAgIHJldHVybiBudWxscHRyOworfQorCisvLyBGb3IgT3A9PUJpdE9yIG9yIEJpdFhvciwgdHVy
biBhbnkgb2YgdGhlc2U6CisvLyAgICAgIE9wKEJpdEFuZCh4MSwgeDIpLCBCaXRBbmQoeDEsIHgz
KSkKKy8vICAgICAgT3AoQml0QW5kKHgyLCB4MSksIEJpdEFuZCh4MSwgeDMpKQorLy8gICAgICBP
cChCaXRBbmQoeDEsIHgyKSwgQml0QW5kKHgzLCB4MSkpCisvLyAgICAgIE9wKEJpdEFuZCh4Miwg
eDEpLCBCaXRBbmQoeDMsIHgxKSkKKy8vIEludG8gdGhpczogQml0QW5kKE9wKHgyLCB4MyksIHgx
KQorLy8gQW5kIGFueSBvZiB0aGVzZToKKy8vICAgICAgT3AoQml0QW5kKHgxLCB4MiksIHgxKQor
Ly8gICAgICBPcChCaXRBbmQoeDIsIHgxKSwgeDEpCisvLyAgICAgIE9wKHgxLCBCaXRBbmQoeDEs
IHgyKSkKKy8vICAgICAgT3AoeDEsIEJpdEFuZCh4MiwgeDEpKQorLy8gSW50byB0aGlzOiBCaXRB
bmQoT3AoeDIsIHgxKSwgeDEpCisvLyBUaGlzIHNlY29uZCBzZXQgaXMgZXF1aXZhbGVudCB0byBk
b2luZyB4MSA9PiBCaXRBbmQoeDEsIHgxKSwgYW5kIHRoZW4gYXBwbHlpbmcgdGhlIGZpcnN0IHNl
dC4KKy8vIEl0IGRvZXMgbm90IHJlZHVjZSB0aGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMgZXhlY3V0
ZWQsIGJ1dCBwcm92aWRlcyBzb21lIHVzZWZ1bCBub3JtYWxpemF0aW9uOiB3ZSBwcmVmZXIgdG8g
aGF2ZSBCaXRBbmQgYXQgdGhlIG91dGVybW9zdCwgdGhlbiBCaXRYb3IsIGFuZCBmaW5hbGx5IEJp
dE9yIGF0IHRoZSBpbm5lcm1vc3QKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6dHJ5UmVkdWNl
Qml0QW5kRGlzdHJpYnV0aXZpdHkoT3Bjb2RlIG9wLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCit7CisgICAgQVNTRVJUKG9wID09IEJpdE9yIHx8
IG9wID09IEJpdFhvcik7CisgICAgVmFsdWUqIHgxID0gbnVsbHB0cjsKKyAgICBWYWx1ZSogeDIg
PSBudWxscHRyOworICAgIFZhbHVlKiB4MyA9IG51bGxwdHI7CisgICAgaWYgKGxlZnQtPm9wY29k
ZSgpID09IEJpdEFuZCAmJiByaWdodC0+b3Bjb2RlKCkgPT0gQml0QW5kKSB7CisgICAgICAgIGlm
IChsZWZ0LT5jaGlsZCgwKSA9PSByaWdodC0+Y2hpbGQoMCkpIHsKKyAgICAgICAgICAgIHgxID0g
bGVmdC0+Y2hpbGQoMCk7CisgICAgICAgICAgICB4MiA9IGxlZnQtPmNoaWxkKDEpOworICAgICAg
ICAgICAgeDMgPSByaWdodC0+Y2hpbGQoMSk7CisgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+Y2hp
bGQoMSkgPT0gcmlnaHQtPmNoaWxkKDApKSB7CisgICAgICAgICAgICB4MSA9IGxlZnQtPmNoaWxk
KDEpOworICAgICAgICAgICAgeDIgPSBsZWZ0LT5jaGlsZCgwKTsKKyAgICAgICAgICAgIHgzID0g
cmlnaHQtPmNoaWxkKDEpOworICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmNoaWxkKDApID09IHJp
Z2h0LT5jaGlsZCgxKSkgeworICAgICAgICAgICAgeDEgPSBsZWZ0LT5jaGlsZCgwKTsKKyAgICAg
ICAgICAgIHgyID0gbGVmdC0+Y2hpbGQoMSk7CisgICAgICAgICAgICB4MyA9IHJpZ2h0LT5jaGls
ZCgwKTsKKyAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5jaGlsZCgxKSA9PSByaWdodC0+Y2hpbGQo
MSkpIHsKKyAgICAgICAgICAgIHgxID0gbGVmdC0+Y2hpbGQoMSk7CisgICAgICAgICAgICB4MiA9
IGxlZnQtPmNoaWxkKDApOworICAgICAgICAgICAgeDMgPSByaWdodC0+Y2hpbGQoMCk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgaWYgKGxlZnQtPm9wY29kZSgpID09IEJpdEFuZCkgeworICAgICAg
ICBpZiAobGVmdC0+Y2hpbGQoMCkgPT0gcmlnaHQpIHsKKyAgICAgICAgICAgIHgxID0geDMgPSBy
aWdodDsKKyAgICAgICAgICAgIHgyID0gbGVmdC0+Y2hpbGQoMSk7CisgICAgICAgIH0gZWxzZSBp
ZiAobGVmdC0+Y2hpbGQoMSkgPT0gcmlnaHQpIHsKKyAgICAgICAgICAgIHgxID0geDMgPSByaWdo
dDsKKyAgICAgICAgICAgIHgyID0gbGVmdC0+Y2hpbGQoMCk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKHJpZ2h0LT5vcGNvZGUoKSA9PSBCaXRBbmQpIHsKKyAgICAgICAgaWYgKHJpZ2h0LT5j
aGlsZCgwKSA9PSBsZWZ0KSB7CisgICAgICAgICAgICB4MSA9IHgzID0gbGVmdDsKKyAgICAgICAg
ICAgIHgyID0gcmlnaHQtPmNoaWxkKDEpOworICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0LT5jaGls
ZCgxKSA9PSBsZWZ0KSB7CisgICAgICAgICAgICB4MSA9IHgzID0gbGVmdDsKKyAgICAgICAgICAg
IHgyID0gcmlnaHQtPmNoaWxkKDApOworICAgICAgICB9CisgICAgfQorICAgIGlmICh4MSAhPSBu
dWxscHRyKSB7CisgICAgICAgIEFTU0VSVCh4MiAhPSBudWxscHRyICYmIHgzICE9IG51bGxwdHIp
OworICAgICAgICBWYWx1ZSogbmV3T3AgPSBvcCA9PSBCaXRPciA/IHJlZHVjZUJpdE9yKHR5cGUs
IG9yaWdpbiwgeDIsIHgzKSA6IHJlZHVjZUJpdFhvcih0eXBlLCBvcmlnaW4sIHgyLCB4Myk7Cisg
ICAgICAgIHJldHVybiByZWR1Y2VCaXRBbmQodHlwZSwgb3JpZ2luLCB4MSwgbmV3T3ApOworICAg
IH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjp0
cnlSZWR1Y2VTaGlmdE9yUm90YXRlKE9wY29kZSBvcCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2lu
LCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQoreworICAgIC8vIFNoaWZ0IGFueXRoaW5nIGJ5
IHplcm8gaXMgaWRlbnRpdHkuCisgICAgaWYgKHJpZ2h0LT5pc0ludDMyKDApKQorICAgICAgICBy
ZXR1cm4gbGVmdDsKKworICAgIC8vIFRoZSBzaGlmdCBhbHJlYWR5IG1hc2tzIGl0cyBzaGlmdCBh
bW91bnQuIElmIHRoZSBzaGlmdCBhbW91bnQgaXMgYmVpbmcgbWFza2VkIGJ5IGEKKyAgICAvLyBy
ZWR1bmRhbnQgYW1vdW50LCB0aGVuIHJlbW92ZSB0aGUgbWFzay4gRm9yIGV4YW1wbGUsCisgICAg
Ly8gVHVybiB0aGlzOiBTaGwoQHgsIEJpdEFuZChAeSwgNjMpKQorICAgIC8vIEludG8gdGhpczog
U2hsKEB4LCBAeSkKKyAgICB1bnNpZ25lZCBtYXNrID0gc2l6ZW9mVHlwZSh0eXBlKSAqIDggLSAx
OworICAgIGlmIChyaWdodC0+b3Bjb2RlKCkgPT0gQml0QW5kCisgICAgICAgICYmIHJpZ2h0LT5j
aGlsZCgxKS0+aGFzSW50MzIoKQorICAgICAgICAmJiAocmlnaHQtPmNoaWxkKDEpLT5hc0ludDMy
KCkgJiBtYXNrKSA9PSBtYXNrKSB7CisgICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2Fz
ZSBTaGw6CisgICAgICAgICAgICByZXR1cm4gcmVkdWNlU2hsKHR5cGUsIG9yaWdpbiwgbGVmdCwg
cmlnaHQtPmNoaWxkKDApKTsKKyAgICAgICAgY2FzZSBTU2hyOgorICAgICAgICAgICAgcmV0dXJu
IHJlZHVjZVNTaHIodHlwZSwgb3JpZ2luLCBsZWZ0LCByaWdodC0+Y2hpbGQoMCkpOworICAgICAg
ICBjYXNlIFpTaHI6CisgICAgICAgICAgICByZXR1cm4gcmVkdWNlWlNocih0eXBlLCBvcmlnaW4s
IGxlZnQsIHJpZ2h0LT5jaGlsZCgwKSk7CisgICAgICAgIGNhc2UgUm90TDoKKyAgICAgICAgICAg
IHJldHVybiByZWR1Y2VSb3RMKHR5cGUsIG9yaWdpbiwgbGVmdCwgcmlnaHQtPmNoaWxkKDApKTsK
KyAgICAgICAgY2FzZSBSb3RSOgorICAgICAgICAgICAgcmV0dXJuIHJlZHVjZVJvdFIodHlwZSwg
b3JpZ2luLCBsZWZ0LCByaWdodC0+Y2hpbGQoMCkpOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiBudWxscHRyOworfQorCisvLyBGSVhNRTogVGhpcyBpcyBhIGJhc2ljIGJvdW5k
ZWQgYmFja3dhcmRzIGFuYWx5c2lzLgorLy8gV2Ugc2hvdWxkIG1ha2UgUGVlcGhvbGVPcHRpbWl6
ZXIgcGFyYW1ldHJpYyBpbiB0aGlzIGFuYWx5c2lzLCB0byBzdXBwb3J0IGEgZm9yd2FyZCBhbmFs
eXNpcy4KK0ludFJhbmdlIFBlZXBob2xlT3B0aW1pemVyOjpyYW5nZUZvcihWYWx1ZSogdmFsdWUs
IHVuc2lnbmVkIHRpbWVUb0xpdmUpCit7CisgICAgaWYgKCF0aW1lVG9MaXZlKQorICAgICAgICBy
ZXR1cm4gSW50UmFuZ2U6OnRvcCh2YWx1ZS0+dHlwZSgpKTsKKworICAgIHN3aXRjaCAodmFsdWUt
Pm9wY29kZSgpKSB7CisgICAgY2FzZSBDb25zdDMyOgorICAgIGNhc2UgQ29uc3Q2NDogeworICAg
ICAgICBpbnQ2NF90IGludFZhbHVlID0gdmFsdWUtPmFzSW50KCk7CisgICAgICAgIHJldHVybiBJ
bnRSYW5nZShpbnRWYWx1ZSwgaW50VmFsdWUpOworICAgIH0KKworICAgIGNhc2UgQml0QW5kOgor
ICAgICAgICBpZiAodmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKSkKKyAgICAgICAgICAgIHJldHVy
biBJbnRSYW5nZTo6cmFuZ2VGb3JNYXNrKHZhbHVlLT5jaGlsZCgxKS0+YXNJbnQoKSwgdmFsdWUt
PnR5cGUoKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU2hyOgorICAgICAgICBpZiAo
dmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHJhbmdlRm9y
KHZhbHVlLT5jaGlsZCgwKSwgdGltZVRvTGl2ZSAtIDEpLnNTaHIodmFsdWUtPmNoaWxkKDEpLT5h
c0ludDMyKCksIHZhbHVlLT50eXBlKCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgWlNo
cjoKKyAgICAgICAgaWYgKHZhbHVlLT5jaGlsZCgxKS0+aGFzSW50MzIoKSkKKyAgICAgICAgICAg
IHJldHVybiByYW5nZUZvcih2YWx1ZS0+Y2hpbGQoMCksIHRpbWVUb0xpdmUgLSAxKS56U2hyKHZh
bHVlLT5jaGlsZCgxKS0+YXNJbnQzMigpLCB2YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIFNobDoKKyAgICAgICAgaWYgKHZhbHVlLT5jaGlsZCgxKS0+aGFzSW50MzIo
KSkKKyAgICAgICAgICAgIHJldHVybiByYW5nZUZvcih2YWx1ZS0+Y2hpbGQoMCksIHRpbWVUb0xp
dmUgLSAxKS5zaGwodmFsdWUtPmNoaWxkKDEpLT5hc0ludDMyKCksIHZhbHVlLT50eXBlKCkpOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgQWRkOgorICAgICAgICByZXR1cm4gcmFuZ2VGb3Io
dmFsdWUtPmNoaWxkKDApLCB0aW1lVG9MaXZlIC0gMSkuYWRkKHJhbmdlRm9yKHZhbHVlLT5jaGls
ZCgxKSwgdGltZVRvTGl2ZSAtIDEpLCB2YWx1ZS0+dHlwZSgpKTsKKworICAgIGNhc2UgU3ViOgor
ICAgICAgICByZXR1cm4gcmFuZ2VGb3IodmFsdWUtPmNoaWxkKDApLCB0aW1lVG9MaXZlIC0gMSku
c3ViKHJhbmdlRm9yKHZhbHVlLT5jaGlsZCgxKSwgdGltZVRvTGl2ZSAtIDEpLCB2YWx1ZS0+dHlw
ZSgpKTsKKworICAgIGNhc2UgTXVsOgorICAgICAgICByZXR1cm4gcmFuZ2VGb3IodmFsdWUtPmNo
aWxkKDApLCB0aW1lVG9MaXZlIC0gMSkubXVsKHJhbmdlRm9yKHZhbHVlLT5jaGlsZCgxKSwgdGlt
ZVRvTGl2ZSAtIDEpLCB2YWx1ZS0+dHlwZSgpKTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHJldHVybiBJbnRSYW5nZTo6dG9wKHZhbHVlLT50eXBlKCkpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BlZXBob2xlT3B0aW1p
emVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQZWVwaG9sZU9wdGltaXplci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hMjBlMTQ2OGM3NgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BlZXBob2xlT3B0aW1pemVy
LmgKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJCM0NDYWxsVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NoZWNrVmFsdWUuaCIKKyNpbmNsdWRlICJC
M0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBJbnRSYW5nZTsKK2NsYXNzIFByb2NlZHVyZTsK
KworLy8gVGhpcyBjbGFzcyBjYW4gYmUgdXNlZCBpbiB0d28gbW9kZXMsIHRoYXQgY29ycmVzcG9u
ZCB0byB0aGUgdHdvIHdheXMgb2YgY29uc3RydWN0aW5nIGl0LgorLy8gSW4gdGhlIGZpcnN0IG1v
ZGUsIGl0IGlzIHBhc3NlZCBhbiBpbnNlcnRpb25TZXQsIGFuZCB1c2VzIGl0IHRvIGNvbnN0cnVj
dCBuZXcgdmFsdWVzLgorLy8gSXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGtl
ZXAgdGhlIGluZGV4IHVwLXRvLWRhdGUgd2l0aCBzZXRJbmRleCwKKy8vIGFuZCB0byBleGVjdXRl
IHRoZSBpbnNlcnRpb25TZXQgb25jZSBpdCBpcyBkb25lIHdpdGggdGhlIGN1cnJlbnQgYmFzaWMg
YmxvY2suCisvLyBUaGlzIG1vZGUgaXMgcHJpbWFyaWx5IHVzZWQgYnkgQjNSZWR1Y2VTdHJlbmd0
aC4KKy8vIEluIHRoZSBzZWNvbmQgbW9kZSwgaXQgaXMgcGFzc2VkIGEgcG9pbnRlciB0byBhIGJh
c2ljIGJsb2NrLCBhbmQgY29uc3RydWN0IG5ldyB2YWx1ZXMgYnkgYXBwZW5kaW5nIHRoZW0gYXQg
dGhlIGVuZC4KKy8vIEluIHRoaXMgbW9kZSwgdGhlIGNhbGxlcidzIG9ubHkgcmVzcG9uc2liaWxp
dHkgaXMgdG8gdXBkYXRlIHRoZSBibG9jayBwb2ludGVyIHdpdGggc2V0QmxvY2sgd2hlbmV2ZXIg
bmVlZGVkLgorLy8gVGhpcyBtb2RlIGlzIHByaW1hcmlseSB1c2VkIGJ5IEZUTE91dHB1dC4KK2Ns
YXNzIFBlZXBob2xlT3B0aW1pemVyIHsKK3B1YmxpYzoKKyAgICBQZWVwaG9sZU9wdGltaXplcihQ
cm9jZWR1cmUmIHByb2MsIEluc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0KQorICAgICAgICA6IG1f
cHJvYyhwcm9jKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KCZpbnNlcnRpb25TZXQpCisgICAg
ICAgICwgbV9pbmRleCgwKQorICAgIHsKKyAgICB9CisKKyAgICBQZWVwaG9sZU9wdGltaXplcihQ
cm9jZWR1cmUmIHByb2MsIEJhc2ljQmxvY2sqIGJsb2NrID0gbnVsbHB0cikKKyAgICAgICAgOiBt
X3Byb2MocHJvYykKKyAgICAgICAgLCBtX2Jsb2NrKGJsb2NrKQorICAgIHsKKyAgICB9CisKKyAg
ICB2b2lkIHNldEluZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEh
bV9pbnNlcnRpb25TZXQpOworICAgICAgICBtX2luZGV4ID0gaW5kZXg7CisgICAgfQorCisgICAg
dm9pZCBzZXRCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIEFTU0VSVCgh
bV9pbnNlcnRpb25TZXQpOworICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CisgICAgfQorCisgICAg
VmFsdWUqIHJlZHVjZU9wYXF1ZShUeXBlLCBPcmlnaW4sIFZhbHVlKiBjaGlsZCwgYm9vbCBjYW5H
aXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZUFkZChUeXBlLCBPcmlnaW4sIFZhbHVl
KiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZhbHVl
KiByZWR1Y2VTdWIoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29s
IGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlTmVnKFR5cGUsIE9yaWdpbiwg
VmFsdWUqLCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlTXVsKFR5
cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXAgPSBm
YWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZURpdihUeXBlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBW
YWx1ZSogcmlnaHQsIGJvb2wgaXNDaGlsbCwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAg
VmFsdWUqIHJlZHVjZVVEaXYoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0
LCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlTW9kKFR5cGUsIE9y
aWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBpc0NoaWxsLCBib29sIGNhbkdp
dmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlVU1vZChUeXBlLCBPcmlnaW4sIFZhbHVl
KiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZhbHVl
KiByZWR1Y2VCaXRBbmQoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBi
b29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlQml0T3IoVHlwZSwgT3Jp
Z2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsK
KyAgICBWYWx1ZSogcmVkdWNlQml0WG9yKFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVl
KiByaWdodCwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZVNobChU
eXBlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwID0g
ZmFsc2UpOworICAgIFZhbHVlKiByZWR1Y2VTU2hyKFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQs
IFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVj
ZVpTaHIoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdp
dmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlUm90TChUeXBlLCBPcmlnaW4sIFZhbHVl
KiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZhbHVl
KiByZWR1Y2VSb3RSKFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9v
bCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZUFicyhUeXBlLCBPcmlnaW4s
IFZhbHVlKiwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZUNlaWwo
VHlwZSwgT3JpZ2luLCBWYWx1ZSosIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZhbHVl
KiByZWR1Y2VGbG9vcihUeXBlLCBPcmlnaW4sIFZhbHVlKiwgYm9vbCBjYW5HaXZlVXAgPSBmYWxz
ZSk7CisgICAgVmFsdWUqIHJlZHVjZUJpdHdpc2VDYXN0KFR5cGUsIE9yaWdpbiwgVmFsdWUqLCBi
b29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlU3FydChUeXBlLCBPcmln
aW4sIFZhbHVlKiwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZVNF
eHQ4KFR5cGUsIE9yaWdpbiwgVmFsdWUqLCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBW
YWx1ZSogcmVkdWNlU0V4dDE2KFR5cGUsIE9yaWdpbiwgVmFsdWUqLCBib29sIGNhbkdpdmVVcCA9
IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlU0V4dDMyKFR5cGUsIE9yaWdpbiwgVmFsdWUqLCBi
b29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlWkV4dDMyKFR5cGUsIE9y
aWdpbiwgVmFsdWUqLCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNl
VHJ1bmMoVHlwZSwgT3JpZ2luLCBWYWx1ZSosIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAg
IFZhbHVlKiByZWR1Y2VJVG9EKFR5cGUsIE9yaWdpbiwgVmFsdWUqLCBib29sIGNhbkdpdmVVcCA9
IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlSVRvRihUeXBlLCBPcmlnaW4sIFZhbHVlKiwgYm9v
bCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZUZsb2F0VG9Eb3VibGUoVHlw
ZSwgT3JpZ2luLCBWYWx1ZSosIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZhbHVlKiBy
ZWR1Y2VEb3VibGVUb0Zsb2F0KFR5cGUsIE9yaWdpbiwgVmFsdWUqLCBib29sIGNhbkdpdmVVcCA9
IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlU2VsZWN0KFR5cGUsIE9yaWdpbiwgVmFsdWUqIGNv
bmQsIFZhbHVlKiBpZlRydWUsIFZhbHVlKiBpZkZhbHNlLCBib29sIGNhbkdpdmVVcCA9IGZhbHNl
KTsKKyAgICBWYWx1ZSogcmVkdWNlTG9hZFN0b3JlKE9wY29kZSwgVHlwZSwgT3JpZ2luLCBWYWx1
ZSogYWRkcmVzcywgVmFsdWU6Ok9mZnNldFR5cGUsIFZhbHVlKiB2YWx1ZVN0b3JlZCA9IG51bGxw
dHIsIEhlYXBSYW5nZSA9IEhlYXBSYW5nZTo6dG9wKCksIEhlYXBSYW5nZSBmZW5jZVJhbmdlID0g
SGVhcFJhbmdlKCksIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZhbHVlKiByZWR1Y2VF
cXVhbChUeXBlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2
ZVVwID0gZmFsc2UpOworICAgIFZhbHVlKiByZWR1Y2VOb3RFcXVhbChUeXBlLCBPcmlnaW4sIFZh
bHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZh
bHVlKiByZWR1Y2VFcXVhbE9yVW5vcmRlcmVkKFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZh
bHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZUxl
c3NUaGFuKFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5H
aXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZUdyZWF0ZXJUaGFuKFR5cGUsIE9yaWdp
biwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7Cisg
ICAgVmFsdWUqIHJlZHVjZUxlc3NFcXVhbChUeXBlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1
ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZhbHVlKiByZWR1Y2VHcmVh
dGVyRXF1YWwoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNh
bkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlQWJvdmUoVHlwZSwgT3JpZ2luLCBW
YWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBW
YWx1ZSogcmVkdWNlQmVsb3coVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0
LCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlQWJvdmVFcXVhbChU
eXBlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwID0g
ZmFsc2UpOworICAgIFZhbHVlKiByZWR1Y2VCZWxvd0VxdWFsKFR5cGUsIE9yaWdpbiwgVmFsdWUq
IGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgLy8gRGlz
cGF0Y2ggb24gdGhlIG9wY29kZSB0byBhbnkgb2YgdGhlIGZ1bmN0aW9ucyBhYm92ZSwgd2l0aCBj
YW5HaXZlVXAgPSB0cnVlLgorICAgIFZhbHVlKiB0cnlSZWR1Y2UoVmFsdWUqKTsKKworICAgIC8v
IFRoaXMgbWV0aG9kIGhhcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IGludGVyZmFjZSwgYmVjYXVz
ZSBpdCBjYW5ub3QgYmUgdXNlZCBvbiB0aGUgZmx5IHdoaWxlIGNyZWF0aW5nIEIzLAorICAgIC8v
IGFzIGl0IG1vZGlmaWVzIHRoZSBibG9jaydzIHN1Y2Nlc3NvcnMuCisgICAgLy8gSXQgc2ltcGx5
IHJldHVybnMgdHJ1ZSBpZiBpdCB3YXMgYWJsZSB0byBvcHRpbWl6ZSBvciBjYW5vbmljYWxpemUg
dGhlIGJyYW5jaCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorICAgIGJvb2wgdHJ5U2ltcGxpZnlCcmFu
Y2goVmFsdWUqKTsKKyAgICAvLyBTaW1pbGFyaWx5IHRoZXNlIG1ldGhvZHMgc2hvdWxkIG5vdCBi
ZSBjYWxsZWQgd2hlbiBjb25zdHJ1Y3RpbmcgYSB2YXJhcmdzIG9wZXJhdGlvbiBwaWVjZXdpc2Ug
YXMgaXMgY29tbW9ubHkgZG9uZQorICAgIC8vIGJ5IEZUTExvd2VyREZHVG9CMzogd2UgZG9uJ3Qg
d2FudCBjbGllbnRzIHRyeWluZyB0byBtdXRhdGUgYSBDaGVja0FkZCBhZnRlciB3ZSd2ZSB0cmFu
c2Zvcm1lZCBpdCBpbnRvIGFuIElkZW50aXR5LgorICAgIC8vIFRoZXkgcmV0dXJuIHRydWUgaWYg
dGhleSB3ZXJlIGFibGUgdG8gZG8gYW55IG9wdGltaXphdGlvbiBvciBjYW5vbmljYWxpemF0aW9u
LCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorICAgIGJvb2wgdHJ5U2ltcGxpZnlDQ2FsbChDQ2FsbFZh
bHVlKik7CisgICAgYm9vbCB0cnlTaW1wbGlmeUNoZWNrQWRkKENoZWNrVmFsdWUqKTsKKyAgICBi
b29sIHRyeVNpbXBsaWZ5Q2hlY2tTdWIoQ2hlY2tWYWx1ZSopOworICAgIGJvb2wgdHJ5U2ltcGxp
ZnlDaGVja011bChDaGVja1ZhbHVlKik7CisgICAgYm9vbCB0cnlTaW1wbGlmeUNoZWNrKENoZWNr
VmFsdWUqKTsKKworcHJpdmF0ZToKKyAgICBWYWx1ZSogYXBwZW5kVG9DdXJyZW50QmxvY2soVmFs
dWUqKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50cz4KKyAgICBWYWx1ZSogZW1pdChBcmd1bWVudHMuLi4pOworCisgICAgc3RhdGljIGJvb2wg
c2hvdWxkR29CZWZvcmUoVmFsdWUqLCBWYWx1ZSopOworCisgICAgVmFsdWUqIHRyeVJlZHVjZU11
bERpc3RyaWJ1dGl2aXR5KE9wY29kZSwgVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUq
IHJpZ2h0KTsKKyAgICBWYWx1ZSogdHJ5UmVkdWNlQml0QW5kRGlzdHJpYnV0aXZpdHkoT3Bjb2Rl
LCBUeXBlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpOworICAgIFZhbHVlKiB0
cnlSZWR1Y2VTaGlmdE9yUm90YXRlKE9wY29kZSwgVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwg
VmFsdWUqIHJpZ2h0KTsKKworICAgIHN0YXRpYyBJbnRSYW5nZSByYW5nZUZvcihWYWx1ZSosIHVu
c2lnbmVkIHRpbWVUb0xpdmUgPSA1KTsKKworICAgIFByb2NlZHVyZSYgbV9wcm9jOworICAgIElu
c2VydGlvblNldCogbV9pbnNlcnRpb25TZXQgeyBudWxscHRyIH07CisgICAgQmFzaWNCbG9jayog
bV9ibG9jayB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX2luZGV4IHsgMCB9OworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCmluZGV4IDllNjIx
NTk0MmYzLi5mMjdkNmZiMDRkYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUmVkdWNlU3RyZW5ndGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Jl
ZHVjZVN0cmVuZ3RoLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkIzRWxp
bWluYXRlRGVhZENvZGUuaCIKICNpbmNsdWRlICJCM0luc2VydGlvblNldElubGluZXMuaCIKICNp
bmNsdWRlICJCM01lbW9yeVZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzUGVlcGhvbGVPcHRp
bWl6ZXIuaCIKICNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKICNpbmNsdWRlICJCM1BoaUNoaWxk
cmVuLmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCkBAIC05MywxOTMzICs5NCwx
MjIgQEAgbmFtZXNwYWNlIEIzUmVkdWNlU3RyZW5ndGhJbnRlcm5hbCB7CiBzdGF0aWMgY29uc3Qg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKLS8vIEZJWE1FOiBUaGlzIEludFJhbmdlIHN0dWZm
IHNob3VsZCBiZSByZWZhY3RvcmVkIGludG8gYSBnZW5lcmFsIGNvbnN0YW50IHByb3BhZ2F0b3Iu
IEl0J3Mgd2VpcmQKLS8vIHRoYXQgaXQncyBqdXN0IHNpdHRpbmcgaGVyZSBpbiB0aGlzIGZpbGUu
Ci1jbGFzcyBJbnRSYW5nZSB7Ci1wdWJsaWM6Ci0gICAgSW50UmFuZ2UoKQotICAgIHsKLSAgICB9
Ci0KLSAgICBJbnRSYW5nZShpbnQ2NF90IG1pbiwgaW50NjRfdCBtYXgpCi0gICAgICAgIDogbV9t
aW4obWluKQotICAgICAgICAsIG1fbWF4KG1heCkKLSAgICB7Ci0gICAgfQotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgSW50UmFuZ2UgdG9wKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBJbnRSYW5nZShzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptaW4oKSwgc3RkOjpudW1l
cmljX2xpbWl0czxUPjo6bWF4KCkpOwotICAgIH0KLQotICAgIHN0YXRpYyBJbnRSYW5nZSB0b3Ao
VHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2Ug
SW50MzI6Ci0gICAgICAgICAgICByZXR1cm4gdG9wPGludDMyX3Q+KCk7Ci0gICAgICAgIGNhc2Ug
SW50NjQ6Ci0gICAgICAgICAgICByZXR1cm4gdG9wPGludDY0X3Q+KCk7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAg
ICAgcmV0dXJuIEludFJhbmdlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotICAgIHN0YXRpYyBJbnRSYW5nZSByYW5nZUZvck1hc2soVCBtYXNrKQotICAg
IHsKLSAgICAgICAgaWYgKCEobWFzayArIDEpKQotICAgICAgICAgICAgcmV0dXJuIHRvcDxUPigp
OwotICAgICAgICByZXR1cm4gSW50UmFuZ2UoMCwgbWFzayk7Ci0gICAgfQotCi0gICAgc3RhdGlj
IEludFJhbmdlIHJhbmdlRm9yTWFzayhpbnQ2NF90IG1hc2ssIFR5cGUgdHlwZSkKLSAgICB7Ci0g
ICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEludDMyOgotICAgICAgICAgICAg
cmV0dXJuIHJhbmdlRm9yTWFzazxpbnQzMl90PihzdGF0aWNfY2FzdDxpbnQzMl90PihtYXNrKSk7
Ci0gICAgICAgIGNhc2UgSW50NjQ6Ci0gICAgICAgICAgICByZXR1cm4gcmFuZ2VGb3JNYXNrPGlu
dDY0X3Q+KG1hc2spOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgSW50UmFu
Z2UgcmFuZ2VGb3JaU2hyKGludDMyX3Qgc2hpZnRBbW91bnQpCi0gICAgewotICAgICAgICB0eXBl
bmFtZSBzdGQ6Om1ha2VfdW5zaWduZWQ8VD46OnR5cGUgbWFzayA9IDA7Ci0gICAgICAgIG1hc2st
LTsKLSAgICAgICAgbWFzayA+Pj0gc2hpZnRBbW91bnQ7Ci0gICAgICAgIHJldHVybiByYW5nZUZv
ck1hc2s8VD4oc3RhdGljX2Nhc3Q8VD4obWFzaykpOwotICAgIH0KLQotICAgIHN0YXRpYyBJbnRS
YW5nZSByYW5nZUZvclpTaHIoaW50MzJfdCBzaGlmdEFtb3VudCwgVHlwZSB0eXBlKQotICAgIHsK
LSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAg
ICByZXR1cm4gcmFuZ2VGb3JaU2hyPGludDMyX3Q+KHNoaWZ0QW1vdW50KTsKLSAgICAgICAgY2Fz
ZSBJbnQ2NDoKLSAgICAgICAgICAgIHJldHVybiByYW5nZUZvclpTaHI8aW50NjRfdD4oc2hpZnRB
bW91bnQpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaW50NjRfdCBtaW4oKSBjb25zdCB7IHJldHVybiBtX21pbjsgfQotICAgIGlu
dDY0X3QgbWF4KCkgY29uc3QgeyByZXR1cm4gbV9tYXg7IH0KLQotICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAotICAgIHsKLSAgICAgICAgb3V0LnByaW50KCJbIiwgbV9taW4s
ICIsIiwgbV9tYXgsICJdIik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAg
ICBib29sIGNvdWxkT3ZlcmZsb3dBZGQoY29uc3QgSW50UmFuZ2UmIG90aGVyKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHN1bU92ZXJmbG93czxUPihtX21pbiwgb3RoZXIubV9taW4pCi0gICAgICAg
ICAgICB8fCBzdW1PdmVyZmxvd3M8VD4obV9taW4sIG90aGVyLm1fbWF4KQotICAgICAgICAgICAg
fHwgc3VtT3ZlcmZsb3dzPFQ+KG1fbWF4LCBvdGhlci5tX21pbikKLSAgICAgICAgICAgIHx8IHN1
bU92ZXJmbG93czxUPihtX21heCwgb3RoZXIubV9tYXgpOwotICAgIH0KLQotICAgIGJvb2wgY291
bGRPdmVyZmxvd0FkZChjb25zdCBJbnRSYW5nZSYgb3RoZXIsIFR5cGUgdHlwZSkKLSAgICB7Ci0g
ICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEludDMyOgotICAgICAgICAgICAg
cmV0dXJuIGNvdWxkT3ZlcmZsb3dBZGQ8aW50MzJfdD4ob3RoZXIpOwotICAgICAgICBjYXNlIElu
dDY0OgotICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dBZGQ8aW50NjRfdD4ob3RoZXIp
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGJvb2wgY291bGRPdmVyZmxv
d1N1Yihjb25zdCBJbnRSYW5nZSYgb3RoZXIpCi0gICAgewotICAgICAgICByZXR1cm4gZGlmZmVy
ZW5jZU92ZXJmbG93czxUPihtX21pbiwgb3RoZXIubV9taW4pCi0gICAgICAgICAgICB8fCBkaWZm
ZXJlbmNlT3ZlcmZsb3dzPFQ+KG1fbWluLCBvdGhlci5tX21heCkKLSAgICAgICAgICAgIHx8IGRp
ZmZlcmVuY2VPdmVyZmxvd3M8VD4obV9tYXgsIG90aGVyLm1fbWluKQotICAgICAgICAgICAgfHwg
ZGlmZmVyZW5jZU92ZXJmbG93czxUPihtX21heCwgb3RoZXIubV9tYXgpOwotICAgIH0KLQotICAg
IGJvb2wgY291bGRPdmVyZmxvd1N1Yihjb25zdCBJbnRSYW5nZSYgb3RoZXIsIFR5cGUgdHlwZSkK
LSAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEludDMyOgotICAg
ICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dTdWI8aW50MzJfdD4ob3RoZXIpOwotICAgICAg
ICBjYXNlIEludDY0OgotICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dTdWI8aW50NjRf
dD4ob3RoZXIpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGJvb2wgY291
bGRPdmVyZmxvd011bChjb25zdCBJbnRSYW5nZSYgb3RoZXIpCi0gICAgewotICAgICAgICByZXR1
cm4gcHJvZHVjdE92ZXJmbG93czxUPihtX21pbiwgb3RoZXIubV9taW4pCi0gICAgICAgICAgICB8
fCBwcm9kdWN0T3ZlcmZsb3dzPFQ+KG1fbWluLCBvdGhlci5tX21heCkKLSAgICAgICAgICAgIHx8
IHByb2R1Y3RPdmVyZmxvd3M8VD4obV9tYXgsIG90aGVyLm1fbWluKQotICAgICAgICAgICAgfHwg
cHJvZHVjdE92ZXJmbG93czxUPihtX21heCwgb3RoZXIubV9tYXgpOwotICAgIH0KLQotICAgIGJv
b2wgY291bGRPdmVyZmxvd011bChjb25zdCBJbnRSYW5nZSYgb3RoZXIsIFR5cGUgdHlwZSkKLSAg
ICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEludDMyOgotICAgICAg
ICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dNdWw8aW50MzJfdD4ob3RoZXIpOwotICAgICAgICBj
YXNlIEludDY0OgotICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dNdWw8aW50NjRfdD4o
b3RoZXIpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIEludFJhbmdlIHNo
bChpbnQzMl90IHNoaWZ0QW1vdW50KQotICAgIHsKLSAgICAgICAgVCBuZXdNaW4gPSBzdGF0aWNf
Y2FzdDxUPihtX21pbikgPDwgc3RhdGljX2Nhc3Q8VD4oc2hpZnRBbW91bnQpOwotICAgICAgICBU
IG5ld01heCA9IHN0YXRpY19jYXN0PFQ+KG1fbWF4KSA8PCBzdGF0aWNfY2FzdDxUPihzaGlmdEFt
b3VudCk7Ci0KLSAgICAgICAgaWYgKChuZXdNaW4gPj4gc2hpZnRBbW91bnQpICE9IHN0YXRpY19j
YXN0PFQ+KG1fbWluKSkKLSAgICAgICAgICAgIG5ld01pbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8
VD46Om1pbigpOwotICAgICAgICBpZiAoKG5ld01heCA+PiBzaGlmdEFtb3VudCkgIT0gc3RhdGlj
X2Nhc3Q8VD4obV9tYXgpKQotICAgICAgICAgICAgbmV3TWF4ID0gc3RkOjpudW1lcmljX2xpbWl0
czxUPjo6bWF4KCk7Ci0KLSAgICAgICAgcmV0dXJuIEludFJhbmdlKG5ld01pbiwgbmV3TWF4KTsK
LSAgICB9Ci0KLSAgICBJbnRSYW5nZSBzaGwoaW50MzJfdCBzaGlmdEFtb3VudCwgVHlwZSB0eXBl
KQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0g
ICAgICAgICAgICByZXR1cm4gc2hsPGludDMyX3Q+KHNoaWZ0QW1vdW50KTsKLSAgICAgICAgY2Fz
ZSBJbnQ2NDoKLSAgICAgICAgICAgIHJldHVybiBzaGw8aW50NjRfdD4oc2hpZnRBbW91bnQpOwot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBJbnRSYW5nZSBzU2hyKGludDMyX3Qgc2hpZnRB
bW91bnQpCi0gICAgewotICAgICAgICBUIG5ld01pbiA9IHN0YXRpY19jYXN0PFQ+KG1fbWluKSA+
PiBzdGF0aWNfY2FzdDxUPihzaGlmdEFtb3VudCk7Ci0gICAgICAgIFQgbmV3TWF4ID0gc3RhdGlj
X2Nhc3Q8VD4obV9tYXgpID4+IHN0YXRpY19jYXN0PFQ+KHNoaWZ0QW1vdW50KTsKLQotICAgICAg
ICByZXR1cm4gSW50UmFuZ2UobmV3TWluLCBuZXdNYXgpOwotICAgIH0KLQotICAgIEludFJhbmdl
IHNTaHIoaW50MzJfdCBzaGlmdEFtb3VudCwgVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgc3dp
dGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAgICByZXR1cm4gc1No
cjxpbnQzMl90PihzaGlmdEFtb3VudCk7Ci0gICAgICAgIGNhc2UgSW50NjQ6Ci0gICAgICAgICAg
ICByZXR1cm4gc1NocjxpbnQ2NF90PihzaGlmdEFtb3VudCk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0
dXJuIEludFJhbmdlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotICAgIEludFJhbmdlIHpTaHIoaW50MzJfdCBzaGlmdEFtb3VudCkKLSAgICB7Ci0gICAg
ICAgIC8vIFRoaXMgaXMgYW4gYXdrd2FyZCBjb3JuZXIgY2FzZSBmb3IgYWxsIG9mIHRoZSBvdGhl
ciBsb2dpYy4KLSAgICAgICAgaWYgKCFzaGlmdEFtb3VudCkKLSAgICAgICAgICAgIHJldHVybiAq
dGhpczsKLQotICAgICAgICAvLyBJZiB0aGUgaW5wdXQgcmFuZ2UgbWF5IGJlIG5lZ2F0aXZlLCB0
aGVuIGFsbCB3ZSBjYW4gc2F5IGFib3V0IHRoZSBvdXRwdXQgcmFuZ2UgaXMgdGhhdCBpdAotICAg
ICAgICAvLyB3aWxsIGJlIG1hc2tlZC4gVGhhdCdzIGJlY2F1c2UgLTEgcmlnaHQgc2hpZnRlZCBq
dXN0IHByb2R1Y2VzIHRoYXQgbWFzay4KLSAgICAgICAgaWYgKG1fbWluIDwgMCkKLSAgICAgICAg
ICAgIHJldHVybiByYW5nZUZvclpTaHI8VD4oc2hpZnRBbW91bnQpOwotCi0gICAgICAgIC8vIElm
IHRoZSBpbnB1dCByYW5nZSBpcyBub24tbmVnYXRpdmUsIHRoZW4gdGhpcyBqdXN0IGJyaW5ncyB0
aGUgcmFuZ2UgY2xvc2VyIHRvIHplcm8uCi0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpt
YWtlX3Vuc2lnbmVkPFQ+Ojp0eXBlIFVuc2lnbmVkVDsKLSAgICAgICAgVW5zaWduZWRUIG5ld01p
biA9IHN0YXRpY19jYXN0PFVuc2lnbmVkVD4obV9taW4pID4+IHN0YXRpY19jYXN0PFVuc2lnbmVk
VD4oc2hpZnRBbW91bnQpOwotICAgICAgICBVbnNpZ25lZFQgbmV3TWF4ID0gc3RhdGljX2Nhc3Q8
VW5zaWduZWRUPihtX21heCkgPj4gc3RhdGljX2Nhc3Q8VW5zaWduZWRUPihzaGlmdEFtb3VudCk7
Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gSW50UmFuZ2UobmV3TWluLCBuZXdNYXgpOwotICAg
IH0KLQotICAgIEludFJhbmdlIHpTaHIoaW50MzJfdCBzaGlmdEFtb3VudCwgVHlwZSB0eXBlKQot
ICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0gICAg
ICAgICAgICByZXR1cm4gelNocjxpbnQzMl90PihzaGlmdEFtb3VudCk7Ci0gICAgICAgIGNhc2Ug
SW50NjQ6Ci0gICAgICAgICAgICByZXR1cm4gelNocjxpbnQ2NF90PihzaGlmdEFtb3VudCk7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICAgICAgcmV0dXJuIEludFJhbmdlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIEludFJhbmdlIGFkZChjb25zdCBJbnRSYW5nZSYg
b3RoZXIpCi0gICAgewotICAgICAgICBpZiAoY291bGRPdmVyZmxvd0FkZDxUPihvdGhlcikpCi0g
ICAgICAgICAgICByZXR1cm4gdG9wPFQ+KCk7Ci0gICAgICAgIHJldHVybiBJbnRSYW5nZShtX21p
biArIG90aGVyLm1fbWluLCBtX21heCArIG90aGVyLm1fbWF4KTsKLSAgICB9Ci0KLSAgICBJbnRS
YW5nZSBhZGQoY29uc3QgSW50UmFuZ2UmIG90aGVyLCBUeXBlIHR5cGUpCi0gICAgewotICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAgICAgICAgIHJldHVy
biBhZGQ8aW50MzJfdD4ob3RoZXIpOwotICAgICAgICBjYXNlIEludDY0OgotICAgICAgICAgICAg
cmV0dXJuIGFkZDxpbnQ2NF90PihvdGhlcik7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIEludFJh
bmdlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAg
IEludFJhbmdlIHN1Yihjb25zdCBJbnRSYW5nZSYgb3RoZXIpCi0gICAgewotICAgICAgICBpZiAo
Y291bGRPdmVyZmxvd1N1YjxUPihvdGhlcikpCi0gICAgICAgICAgICByZXR1cm4gdG9wPFQ+KCk7
Ci0gICAgICAgIHJldHVybiBJbnRSYW5nZShtX21pbiAtIG90aGVyLm1fbWF4LCBtX21heCAtIG90
aGVyLm1fbWluKTsKLSAgICB9Ci0KLSAgICBJbnRSYW5nZSBzdWIoY29uc3QgSW50UmFuZ2UmIG90
aGVyLCBUeXBlIHR5cGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAg
Y2FzZSBJbnQzMjoKLSAgICAgICAgICAgIHJldHVybiBzdWI8aW50MzJfdD4ob3RoZXIpOwotICAg
ICAgICBjYXNlIEludDY0OgotICAgICAgICAgICAgcmV0dXJuIHN1YjxpbnQ2NF90PihvdGhlcik7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICAgICAgcmV0dXJuIEludFJhbmdlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIEludFJhbmdlIG11bChjb25zdCBJbnRSYW5n
ZSYgb3RoZXIpCi0gICAgewotICAgICAgICBpZiAoY291bGRPdmVyZmxvd011bDxUPihvdGhlcikp
Ci0gICAgICAgICAgICByZXR1cm4gdG9wPFQ+KCk7Ci0gICAgICAgIHJldHVybiBJbnRSYW5nZSgK
LSAgICAgICAgICAgIHN0ZDo6bWluKAotICAgICAgICAgICAgICAgIHN0ZDo6bWluKG1fbWluICog
b3RoZXIubV9taW4sIG1fbWluICogb3RoZXIubV9tYXgpLAotICAgICAgICAgICAgICAgIHN0ZDo6
bWluKG1fbWF4ICogb3RoZXIubV9taW4sIG1fbWF4ICogb3RoZXIubV9tYXgpKSwKLSAgICAgICAg
ICAgIHN0ZDo6bWF4KAotICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1fbWluICogb3RoZXIubV9t
aW4sIG1fbWluICogb3RoZXIubV9tYXgpLAotICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1fbWF4
ICogb3RoZXIubV9taW4sIG1fbWF4ICogb3RoZXIubV9tYXgpKSk7Ci0gICAgfQotCi0gICAgSW50
UmFuZ2UgbXVsKGNvbnN0IEludFJhbmdlJiBvdGhlciwgVHlwZSB0eXBlKQotICAgIHsKLSAgICAg
ICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAgICByZXR1
cm4gbXVsPGludDMyX3Q+KG90aGVyKTsKLSAgICAgICAgY2FzZSBJbnQ2NDoKLSAgICAgICAgICAg
IHJldHVybiBtdWw8aW50NjRfdD4ob3RoZXIpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBJbnRS
YW5nZSgpOwotICAgICAgICB9Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGludDY0X3QgbV9taW4g
eyAwIH07Ci0gICAgaW50NjRfdCBtX21heCB7IDAgfTsKLX07Ci0KLWNsYXNzIFJlZHVjZVN0cmVu
Z3RoIHsKLXB1YmxpYzoKLSAgICBSZWR1Y2VTdHJlbmd0aChQcm9jZWR1cmUmIHByb2MpCi0gICAg
ICAgIDogbV9wcm9jKHByb2MpCi0gICAgICAgICwgbV9pbnNlcnRpb25TZXQocHJvYykKLSAgICAg
ICAgLCBtX2Jsb2NrSW5zZXJ0aW9uU2V0KHByb2MpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wg
cnVuKCkKLSAgICB7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIGJvb2wg
Zmlyc3QgPSB0cnVlOwotICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0gICAgICAgIGRvIHsK
LSAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAgICAgbV9jaGFuZ2VkQ0ZH
ID0gZmFsc2U7Ci0gICAgICAgICAgICArK2luZGV4OwotCi0gICAgICAgICAgICBpZiAoZmlyc3Qp
Ci0gICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKEIz
UmVkdWNlU3RyZW5ndGhJbnRlcm5hbDo6dmVyYm9zZSkgewotICAgICAgICAgICAgICAgIGRhdGFM
b2coIkIzIGFmdGVyIGl0ZXJhdGlvbiAjIiwgaW5kZXggLSAxLCAiIG9mIHJlZHVjZVN0cmVuZ3Ro
OlxuIik7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZyhtX3Byb2MpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBzaW1wbGlmeUNGRygpOwotCi0gICAgICAgICAgICBp
ZiAobV9jaGFuZ2VkQ0ZHKSB7Ci0gICAgICAgICAgICAgICAgbV9wcm9jLnJlc2V0UmVhY2hhYmls
aXR5KCk7Ci0gICAgICAgICAgICAgICAgbV9wcm9jLmludmFsaWRhdGVDRkcoKTsKLSAgICAgICAg
ICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAv
LyBXZSBkZWZpbml0ZWx5IHdhbnQgdG8gZG8gRENFIGJlZm9yZSB3ZSBkbyBDU0Ugc28gdGhhdCB3
ZSBkb24ndCBob2lzdCB0aGluZ3MuIEZvcgotICAgICAgICAgICAgLy8gZXhhbXBsZToKLSAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICAvLyBAZGVhZCA9IE11bChAYSwgQGIpCi0gICAgICAgICAg
ICAvLyAuLi4gbG90cyBvZiBjb250cm9sIGZsb3cgYW5kIHN0dWZmCi0gICAgICAgICAgICAvLyBA
dGhpbmcgPSBNdWwoQGEsIEBiKQotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIElmIHdl
IGRvIENTRSBiZWZvcmUgRENFLCB3ZSB3aWxsIHJlbW92ZSBAdGhpbmcgYW5kIGtlZXAgQGRlYWQu
IEVmZmVjdGl2ZWx5LCB3ZSB3aWxsCi0gICAgICAgICAgICAvLyAiaG9pc3QiIEB0aGluZy4gT24g
dGhlIG90aGVyIGhhbmQsIGlmIHdlIHJ1biBEQ0UgYmVmb3JlIENTRSwgd2Ugd2lsbCBraWxsIEBk
ZWFkIGFuZAotICAgICAgICAgICAgLy8ga2VlcCBAdGhpbmcuIFRoYXQncyBiZXR0ZXIsIHNpbmNl
IHdlIHVzdWFsbHkgd2FudCB0aGluZ3MgdG8gc3RheSB3aGVyZXZlciB0aGUgY2xpZW50Ci0gICAg
ICAgICAgICAvLyBwdXQgdGhlbS4gV2UncmUgbm90IGFjdHVhbGx5IHNtYXJ0IGVub3VnaCB0byBt
b3ZlIHRoaW5ncyBhcm91bmQgYXQgcmFuZG9tLgotICAgICAgICAgICAgbV9jaGFuZ2VkIHw9IGVs
aW1pbmF0ZURlYWRDb2RlSW1wbChtX3Byb2MpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBz
aW1wbGlmeVNTQSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobV9wcm9jLm9wdExl
dmVsKCkgPj0gMikgewotICAgICAgICAgICAgICAgIG1fcHJvYy5yZXNldFZhbHVlT3duZXJzKCk7
Ci0gICAgICAgICAgICAgICAgbV9kb21pbmF0b3JzID0gJm1fcHJvYy5kb21pbmF0b3JzKCk7IC8v
IFJlY29tcHV0ZSBpZiBuZWNlc3NhcnkuCi0gICAgICAgICAgICAgICAgbV9wdXJlQ1NFLmNsZWFy
KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBtX3Byb2MuYmxvY2tzSW5QcmVPcmRlcigpKSB7Ci0gICAgICAgICAgICAgICAgbV9ibG9jayA9
IGJsb2NrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZvciAobV9pbmRleCA9
IDA7IG1faW5kZXggPCBibG9jay0+c2l6ZSgpOyArK21faW5kZXgpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKEIzUmVkdWNlU3RyZW5ndGhJbnRlcm5hbDo6dmVyYm9zZSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTG9v
a2luZyBhdCAiLCAqYmxvY2ssICIgIyIsIG1faW5kZXgsICI6ICIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVlcER1bXAobV9wcm9jLCBibG9jay0+YXQobV9pbmRleCkpLCAiXG4iKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlID0gbV9i
bG9jay0+YXQobV9pbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPnBlcmZvcm1T
dWJzdGl0dXRpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgcmVkdWNlVmFsdWVTdHJlbmd0aCgp
OwotICAgICAgICAgICAgICAgICAgICBpZiAobV9wcm9jLm9wdExldmVsKCkgPj0gMikKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcGxhY2VJZlJlZHVuZGFudCgpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKG1fYmxvY2spOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBtX2NoYW5nZWRDRkcgfD0gbV9ibG9ja0luc2VydGlv
blNldC5leGVjdXRlKCk7Ci0gICAgICAgICAgICBoYW5kbGVDaGFuZ2VkQ0ZHSWZOZWNlc3Nhcnko
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmVzdWx0IHw9IG1fY2hhbmdlZDsKLSAgICAg
ICAgfSB3aGlsZSAobV9jaGFuZ2VkICYmIG1fcHJvYy5vcHRMZXZlbCgpID49IDIpOwotICAgICAg
ICAKLSAgICAgICAgaWYgKG1fcHJvYy5vcHRMZXZlbCgpIDwgMikgewotICAgICAgICAgICAgbV9j
aGFuZ2VkQ0ZHID0gZmFsc2U7Ci0gICAgICAgICAgICBzaW1wbGlmeUNGRygpOwotICAgICAgICAg
ICAgaGFuZGxlQ2hhbmdlZENGR0lmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICB2b2lkIHJl
ZHVjZVZhbHVlU3RyZW5ndGgoKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5vcGNv
ZGUoKSkgewotICAgICAgICBjYXNlIE9wYXF1ZToKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczog
T3BhcXVlKE9wYXF1ZSh2YWx1ZSkpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IE9wYXF1ZSh2
YWx1ZSkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gT3Bh
cXVlKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGls
ZCgwKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFkZDoKLSAgICAgICAgICAgIGhh
bmRsZUNvbW11dGF0aXZpdHkoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fdmFs
dWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBBZGQgJiYgbV92YWx1ZS0+aXNJbnRlZ2VyKCkpIHsK
LSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFkZChBZGQodmFsdWUsIGNvbnN0YW50MSks
IGNvbnN0YW50MikKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEFkZCh2YWx1ZSwgY29u
c3RhbnQxICsgY29uc3RhbnQyKQotICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdTdW0gPSBtX3Zh
bHVlLT5jaGlsZCgxKS0+YWRkQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hp
bGQoMSkpOwotICAgICAgICAgICAgICAgIGlmIChuZXdTdW0pIHsKLSAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUobV9pbmRleCwgbmV3U3VtKTsKLSAgICAgICAg
ICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQo
MCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gbmV3U3VtOwotICAg
ICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgLy8gVHVybiB0aGlzOiBBZGQoQWRkKHZhbHVlLCBjb25zdGFudCksIG90aGVyVmFsdWUpCi0g
ICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBZGQoQWRkKHZhbHVlLCBvdGhlclZhbHVlKSwg
Y29uc3RhbnQpCi0gICAgICAgICAgICAgICAgaWYgKCFtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50
KCkgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5oYXNJbnQoKSkgewotICAgICAgICAg
ICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0g
ICAgICAgICAgICAgICAgICAgIFZhbHVlKiBjb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDApLT5j
aGlsZCgxKTsKLSAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG90aGVyVmFsdWUgPSBtX3ZhbHVl
LT5jaGlsZCgxKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjb3VsZCBjcmVhdGUgZHVw
bGljYXRlIGNvZGUgaWYgQWRkKHZhbHVlLCBjb25zdGFudCkgaXMgdXNlZCBlbHNld2hlcmUuCi0g
ICAgICAgICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIHdlIGFscmVhZHkgbW9kZWwgYWRkaW5nIGEg
Y29uc3RhbnQgYXMgaWYgaXQgd2FzIGZyZWUgaW4gb3RoZXIgcGxhY2VzCi0gICAgICAgICAgICAg
ICAgICAgIC8vIHNvIGxldCdzIGp1c3Qgcm9sbCB3aXRoIGl0LiBUaGUgYWx0ZXJuYXRpdmUgd291
bGQgbWVhbiBoYXZpbmcgdG8gZG8gZ29vZCB1c2UKLSAgICAgICAgICAgICAgICAgICAgLy8gY291
bnRzLCB3aGljaCByZWR1Y2VTdHJlbmd0aCgpIGN1cnJlbnRseSBkb2Vzbid0IGhhdmUuCi0gICAg
ICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9pbmRleCwgQWRkLCBtX3ZhbHVlLT5vcmlnaW4oKSwgdmFsdWUsIG90aGVyVmFsdWUp
OwotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgxKSA9IGNvbnN0YW50OwotICAg
ICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIC8vIFR1cm4gdGhpczogQWRkKG90aGVyVmFsdWUsIEFkZCh2YWx1ZSwgY29uc3Rh
bnQpKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBZGQoQWRkKHZhbHVlLCBvdGhlclZhbHVl
KSwgY29uc3RhbnQpCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+aXNJbnRlZ2VyKCkKLSAgICAg
ICAgICAgICAgICAmJiAhbV92YWx1ZS0+Y2hpbGQoMCktPmhhc0ludCgpCi0gICAgICAgICAgICAg
ICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPm9wY29kZSgpID09IEFkZAotICAgICAgICAgICAgICAg
ICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKLSAgICAgICAgICAg
ICAgICBWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCk7Ci0gICAgICAg
ICAgICAgICAgVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpOwot
ICAgICAgICAgICAgICAgIFZhbHVlKiBvdGhlclZhbHVlID0gbV92YWx1ZS0+Y2hpbGQoMCk7Ci0g
ICAgICAgICAgICAgICAgLy8gVGhpcyBjcmVhdGVzIGEgZHVwbGljYXRlIGFkZC4gVGhhdCdzIGRh
bmdlcm91cyBidXQgcHJvYmFibHkgZmluZSwgc2VlIGFib3ZlLgotICAgICAgICAgICAgICAgIG1f
dmFsdWUtPmNoaWxkKDApID0KLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0PFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIEFkZCwgbV92YWx1
ZS0+b3JpZ2luKCksIHZhbHVlLCBvdGhlclZhbHVlKTsKLSAgICAgICAgICAgICAgICBtX3ZhbHVl
LT5jaGlsZCgxKSA9IGNvbnN0YW50OwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIC8vIFR1cm4gdGhpczogQWRkKGNvbnN0YW50MSwgY29uc3RhbnQyKQotICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgKyBjb25zdGFudDIKLSAgICAgICAgICAgIGlm
IChWYWx1ZSogY29uc3RhbnRBZGQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+YWRkQ29uc3RhbnQobV9w
cm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5l
d1ZhbHVlKGNvbnN0YW50QWRkKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRlZ2VyIEFkZCh2YWx1ZSwgdmFsdWUp
Ci0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNobCh2YWx1ZSwgMSkKLSAgICAgICAgICAgIC8v
IFRoaXMgaXMgYSB1c2VmdWwgY2Fub25pY2FsaXphdGlvbi4gSXQncyBub3QgbWVhbnQgdG8gYmUg
YSBzdHJlbmd0aCByZWR1Y3Rpb24uCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+aXNJbnRlZ2Vy
KCkgJiYgbV92YWx1ZS0+Y2hpbGQoMCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkpIHsKLSAgICAgICAg
ICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgICAgICBtX3Byb2Mu
YWRkPFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgIFNobCwgbV92YWx1ZS0+b3JpZ2lu
KCksIG1fdmFsdWUtPmNoaWxkKDApLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4obV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIDEp
KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IC8vIFR1cm4gdGhpczogQWRkKHZhbHVlLCB6ZXJvKQotICAgICAgICAgICAgLy8gSW50byBhbiBJ
ZGVudGl0eS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBBZGRpdGlvbiBpcyBzdWJ0
bGUgd2l0aCBkb3VibGVzLiBaZXJvIGlzIG5vdCB0aGUgbmV1dHJhbCB2YWx1ZSwgbmVnYXRpdmUg
emVybyBpczoKLSAgICAgICAgICAgIC8vICAgIDAgKyAwID0gMAotICAgICAgICAgICAgLy8gICAg
MCArIC0wID0gMAotICAgICAgICAgICAgLy8gICAgLTAgKyAwID0gMAotICAgICAgICAgICAgLy8g
ICAgLTAgKyAtMCA9IC0wCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50
KDApIHx8IG1fdmFsdWUtPmNoaWxkKDEpLT5pc05lZ2F0aXZlWmVybygpKSB7Ci0gICAgICAgICAg
ICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5p
c0ludGVnZXIoKSkgewotICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBBZGQo
dmFsdWUsIE5lZyhvdGhlclZhbHVlKSkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFN1
Yih2YWx1ZSwgb3RoZXJWYWx1ZSkKLSAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQo
MSktPm9wY29kZSgpID09IE5lZykgewotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5l
dzxWYWx1ZT4oU3ViLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFs
dWUtPmNoaWxkKDEpLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBB
ZGQoTmVnKHZhbHVlKSwgb3RoZXJWYWx1ZSkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6
IFN1YihvdGhlclZhbHVlLCB2YWx1ZSkKLSAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hp
bGQoMCktPm9wY29kZSgpID09IE5lZykgewotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0
aE5ldzxWYWx1ZT4oU3ViLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMSksIG1f
dmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdl
ciBBZGQoU3ViKDAsIHZhbHVlKSwgLTEpCi0gICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBC
aXRYb3IodmFsdWUsIC0xKQotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+
b3Bjb2RlKCkgPT0gU3ViCi0gICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEp
LT5pc0ludCgtMSkKLSAgICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNo
aWxkKDApLT5pc0ludCgwKSkgewotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxW
YWx1ZT4oQml0WG9yLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxk
KDEpLCBtX3ZhbHVlLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChoYW5kbGVNdWxEaXN0cmlidXRp
dml0eSgpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTdWI6Ci0gICAgICAgICAgICAvLyBUdXJu
IHRoaXM6IFN1Yihjb25zdGFudDEsIGNvbnN0YW50MikKLSAgICAgICAgICAgIC8vIEludG8gdGhp
czogY29uc3RhbnQxIC0gY29uc3RhbnQyCi0gICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50
U3ViID0gbV92YWx1ZS0+Y2hpbGQoMCktPnN1YkNvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hp
bGQoMSkpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudFN1
Yik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmIChtX3ZhbHVlLT5pc0ludGVnZXIoKSkgewotICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhp
czogU3ViKHZhbHVlLCBjb25zdGFudCkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEFk
ZCh2YWx1ZSwgLWNvbnN0YW50KQotICAgICAgICAgICAgICAgIGlmIChWYWx1ZSogbmVnYXRlZENv
bnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMSktPm5lZ0NvbnN0YW50KG1fcHJvYykpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUobV9pbmRleCwgbmVnYXRl
ZENvbnN0YW50KTsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KAot
ICAgICAgICAgICAgICAgICAgICAgICAgQWRkLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+
Y2hpbGQoMCksIG5lZ2F0ZWRDb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBU
dXJuIHRoaXM6IFN1YigwLCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IE5l
Zyh2YWx1ZSkKLSAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmlzSW50KDAp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPihOZWcsIG1fdmFs
dWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczog
U3ViKHZhbHVlLCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IDAKLSAgICAg
ICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShtX3Byb2MuYWRkSW50Q29u
c3RhbnQobV92YWx1ZSwgMCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFN1Yih2YWx1ZSwgTmVn
KG90aGVyVmFsdWUpKQotICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogQWRkKHZhbHVlLCBv
dGhlclZhbHVlKQotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+b3Bjb2Rl
KCkgPT0gTmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPihB
ZGQsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQo
MSktPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGhhbmRsZU11bERpc3RyaWJ1dGl2aXR5KCkpCi0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIE5lZzoKLSAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogTmVnKGNvbnN0YW50KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiAtY29uc3Rh
bnQKLSAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+
bmVnQ29uc3RhbnQobV9wcm9jKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFs
dWUoY29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE5lZyhOZWcodmFsdWUpKQotICAg
ICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNo
aWxkKDApLT5vcGNvZGUoKSA9PSBOZWcpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElk
ZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5pc0ludGVnZXIo
KSkgewotICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBOZWcoU3ViKHZhbHVl
LCBvdGhlclZhbHVlKSkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFN1YihvdGhlclZh
bHVlLCB2YWx1ZSkKLSAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29k
ZSgpID09IFN1YikgewotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4o
U3ViLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLCBtX3Zh
bHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIg
TmVnKE11bCh2YWx1ZSwgYykpCi0gICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBNdWwodmFs
dWUsIC1jKSwgYXMgbG9uZyBhcyAtYyBkb2VzIG5vdCBvdmVyZmxvdwotICAgICAgICAgICAgICAg
IGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gTXVsICYmIG1fdmFsdWUtPmNoaWxk
KDApLT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50NjRfdCBm
YWN0b3IgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmFzSW50KCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChtX3ZhbHVlLT50eXBlKCkgPT0gSW50MzIgJiYgZmFjdG9yICE9IHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBWYWx1ZSogbmV3RmFjdG9yID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4o
bV9pbmRleCwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5vcmlnaW4oKSwgLWZhY3Rvcik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oTXVsLCBtX3Zh
bHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLCBuZXdGYWN0b3IpOwot
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQ2NCAm
JiBmYWN0b3IgIT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdGYWN0b3IgPSBtX2luc2VydGlvblNldC5pbnNl
cnQ8Q29uc3Q2NFZhbHVlPihtX2luZGV4LCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPm9y
aWdpbigpLCAtZmFjdG9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3
PFZhbHVlPihNdWwsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQo
MCksIG5ld0ZhY3Rvcik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBN
dWw6Ci0gICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7Ci0KLSAgICAgICAgICAgIC8v
IFR1cm4gdGhpczogTXVsKGNvbnN0YW50MSwgY29uc3RhbnQyKQotICAgICAgICAgICAgLy8gSW50
byB0aGlzOiBjb25zdGFudDEgKiBjb25zdGFudDIKLSAgICAgICAgICAgIGlmIChWYWx1ZSogdmFs
dWUgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+bXVsQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGls
ZCgxKSkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKHZhbHVlKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1f
dmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKSkgewotICAgICAgICAgICAgICAgIGludDY0X3QgZmFj
dG9yID0gbV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50KCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBU
dXJuIHRoaXM6IE11bCh2YWx1ZSwgMCkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IDAK
LSAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgZG8gdGhpcyBmb3IgZG91Ymxl
cyBiZWNhdXNlIHRoYXQncyB3cm9uZy4gRm9yIGV4YW1wbGUsIC0xICogMAotICAgICAgICAgICAg
ICAgIC8vIGFuZCAxICogMCB5aWVsZCBkaWZmZXJlbnQgcmVzdWx0cy4KLSAgICAgICAgICAgICAg
ICBpZiAoIWZhY3RvcikgewotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5
KG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBNdWwodmFsdWUsIDEp
Ci0gICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZQotICAgICAgICAgICAgICAgIGlm
IChmYWN0b3IgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5
KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBNdWwodmFsdWUsIC0x
KQotICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogTmVnKHZhbHVlKQotICAgICAgICAgICAg
ICAgIGlmIChmYWN0b3IgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhO
ZXc8VmFsdWU+KE5lZywgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTXVsKHZhbHVlLCBjb25zdGFudCkK
LSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNobCh2YWx1ZSwgbG9nMihjb25zdGFudCkp
Ci0gICAgICAgICAgICAgICAgaWYgKGhhc09uZUJpdFNldChmYWN0b3IpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHNoaWZ0QW1vdW50ID0gV1RGOjpmYXN0TG9nMihzdGF0aWNfY2Fz
dDx1aW50NjRfdD4oZmFjdG9yKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3
VmFsdWUoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3Byb2MuYWRkPFZhbHVlPigKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTaGwsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5j
aGlsZCgwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnQ8Q29uc3QzMlZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRl
eCwgbV92YWx1ZS0+b3JpZ2luKCksIHNoaWZ0QW1vdW50KSkpOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fdmFs
dWUtPmNoaWxkKDEpLT5oYXNEb3VibGUoKSkgewotICAgICAgICAgICAgICAgIGRvdWJsZSBmYWN0
b3IgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+YXNEb3VibGUoKTsKLQotICAgICAgICAgICAgICAgIC8v
IFR1cm4gdGhpczogTXVsKHZhbHVlLCAxKQotICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczog
dmFsdWUKLSAgICAgICAgICAgICAgICBpZiAoZmFjdG9yID09IDEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKG1fdmFsdWUtPmlzSW50ZWdlcigpKSB7Ci0gICAgICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBJbnRlZ2VyIE11bCh2YWx1ZSwgTmVnKG90aGVyVmFsdWUpKQotICAgICAgICAg
ICAgICAgIC8vIEludG8gdGhpczogTmVnKE11bCh2YWx1ZSwgb3RoZXJWYWx1ZSkpCi0gICAgICAg
ICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5vcGNvZGUoKSA9PSBOZWcpIHsKLSAgICAg
ICAgICAgICAgICAgICAgVmFsdWUqIG5ld011bCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1
ZT4obV9pbmRleCwgTXVsLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCksIG1f
dmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VX
aXRoTmV3PFZhbHVlPihOZWcsIG1fdmFsdWUtPm9yaWdpbigpLCBuZXdNdWwpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBJbnRlZ2VyIE11bChOZWcodmFsdWUpLCBvdGhlclZhbHVlKQotICAgICAgICAg
ICAgICAgIC8vIEludG8gdGhpczogTmVnKE11bCh2YWx1ZSwgdmFsdWUyKSkKLSAgICAgICAgICAg
ICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IE5lZykgewotICAgICAgICAg
ICAgICAgICAgICBWYWx1ZSogbmV3TXVsID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPiht
X2luZGV4LCBNdWwsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQo
MCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhO
ZXc8VmFsdWU+KE5lZywgbV92YWx1ZS0+b3JpZ2luKCksIG5ld011bCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBEaXY6Ci0gICAgICAgICAgICAvLyBUdXJuIHRo
aXM6IERpdihjb25zdGFudDEsIGNvbnN0YW50MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczog
Y29uc3RhbnQxIC8gY29uc3RhbnQyCi0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyB1c2Vz
IERpdjxDaGlsbD4gc2VtYW50aWNzLiBUaGF0J3MgZmluZSwgYmVjYXVzZSB0aGUgcnVsZXMgZm9y
IERpdgotICAgICAgICAgICAgLy8gYXJlIHN0cmljdGx5IHdlYWtlcjogaXQgaGFzIGNvcm5lciBj
YXNlcyB3aGVyZSBpdCdzIGFsbG93ZWQgdG8gZG8gYW55dGhpbmcgaXQKLSAgICAgICAgICAgIC8v
IGxpa2VzLgotICAgICAgICAgICAgaWYgKHJlcGxhY2VXaXRoTmV3VmFsdWUobV92YWx1ZS0+Y2hp
bGQoMCktPmRpdkNvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSkKLSAgICAgICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJ
bnQoKSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50
KCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIC0xOgotICAgICAgICAgICAgICAgICAgICAvLyBU
dXJuIHRoaXM6IERpdih2YWx1ZSwgLTEpCi0gICAgICAgICAgICAgICAgICAgIC8vIEludG8gdGhp
czogTmVnKHZhbHVlKQotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmFkZDxWYWx1ZT4oTmVnLCBtX3ZhbHVlLT5v
cmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCkpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAgICAgIC8vIFR1cm4g
dGhpczogRGl2KHZhbHVlLCAwKQotICAgICAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IDAK
LSAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIGRvIHRoaXMgYmVjYXVzZSBpdCdzIHByZWNp
c2VseSBjb3JyZWN0IGZvciBDaGlsbERpdiBhbmQgZm9yIERpdiB3ZQotICAgICAgICAgICAgICAg
ICAgICAvLyBhcmUgYWxsb3dlZCB0byBkbyB3aGF0ZXZlciB3ZSB3YW50LgotICAgICAgICAgICAg
ICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIFR1cm4gdGhpczogRGl2KHZhbHVlLCAxKQotICAgICAgICAgICAgICAgICAg
ICAvLyBJbnRvIHRoaXM6IHZhbHVlCi0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRl
bnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIFBlcmZvcm0g
c3VwZXIgY29tcHJlaGVuc2l2ZSBzdHJlbmd0aCByZWR1Y3Rpb24gb2YgZGl2aXNpb24uIEN1cnJl
bnRseSB3ZQotICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IGRvIHRoaXMgZm9yIDMyLWJpdCBk
aXZpc2lvbnMsIHNpbmNlIHdlIG5lZWQgYSBoaWdoIG11bHRpcGx5Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIG9wZXJhdGlvbi4gV2UgZW11bGF0ZSBpdCB1c2luZyA2NC1iaXQgbXVsdGlwbHkuIFdl
IGNhbid0IGVtdWxhdGUgNjQtYml0Ci0gICAgICAgICAgICAgICAgICAgIC8vIGhpZ2ggbXVsdGlw
bHkgd2l0aCBhIDEyOC1iaXQgbXVsdGlwbHkgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEgMTI4LWJp
dAotICAgICAgICAgICAgICAgICAgICAvLyBtdWx0aXBseS4gV2UgY291bGQgZG8gaXQgd2l0aCBh
IHBhdGNocG9pbnQgaWYgd2UgY2FyZWQgYmFkbHkgZW5vdWdoLgotCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChtX3ZhbHVlLT50eXBlKCkgIT0gSW50MzIpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICht
X3Byb2Mub3B0TGV2ZWwoKSA8IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGRpdmlzb3IgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+
YXNJbnQzMigpOwotICAgICAgICAgICAgICAgICAgICBEaXZpc2lvbk1hZ2ljPGludDMyX3Q+IG1h
Z2ljID0gY29tcHV0ZURpdmlzaW9uTWFnaWMoZGl2aXNvcik7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgLy8gUGVyZm9ybSB0aGUgImhpZ2giIG11bHRpcGxpY2F0aW9uLiBXZSBkbyBpdCBqdXN0IHRv
IGdldCB0aGUgaGlnaCBiaXRzLgotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHNvcnQg
b2YgbGlrZSBtdWx0aXBseWluZyBieSB0aGUgcmVjaXByb2NhbCwganVzdCBtb3JlIGduYXJseS4g
SXQncwotICAgICAgICAgICAgICAgICAgICAvLyBmcm9tIEhhY2tlcidzIERlbGlnaHQgYW5kIEkg
ZG9uJ3QgY2xhaW0gdG8gdW5kZXJzdGFuZCBpdC4KLSAgICAgICAgICAgICAgICAgICAgVmFsdWUq
IG1hZ2ljUXVvdGllbnQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pbmRleCwgVHJ1bmMsIG1fdmFsdWUtPm9yaWdpbigpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBaU2hyLCBtX3ZhbHVlLT5vcmlnaW4oKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBNdWwsIG1fdmFsdWUtPm9y
aWdpbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRl
eCwgU0V4dDMyLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCkpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3Q2NFZh
bHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIG1fdmFs
dWUtPm9yaWdpbigpLCBtYWdpYy5tYWdpY011bHRpcGxpZXIpKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPigKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIDMyKSkp
OwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChkaXZpc29yID4gMCAmJiBtYWdpYy5tYWdpY011
bHRpcGxpZXIgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYWdpY1F1b3RpZW50ID0g
bV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2luZGV4LCBBZGQsIG1fdmFsdWUtPm9yaWdpbigpLCBtYWdpY1F1b3RpZW50LCBtX3ZhbHVl
LT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
aWYgKGRpdmlzb3IgPCAwICYmIG1hZ2ljLm1hZ2ljTXVsdGlwbGllciA+IDApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1hZ2ljUXVvdGllbnQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFs
dWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIFN1YiwgbV92YWx1ZS0+
b3JpZ2luKCksIG1hZ2ljUXVvdGllbnQsIG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAobWFnaWMuc2hpZnQgPiAwKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtYWdpY1F1b3RpZW50ID0gbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0PFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBTU2hyLCBt
X3ZhbHVlLT5vcmlnaW4oKSwgbWFnaWNRdW90aWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPigKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIG1hZ2ljLnNoaWZ0
KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdp
dGhJZGVudGl0eSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgQWRkLCBtX3Zh
bHVlLT5vcmlnaW4oKSwgbWFnaWNRdW90aWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2luZGV4LCBaU2hyLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbWFnaWNRdW90aWVudCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENv
bnN0MzJWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4
LCBtX3ZhbHVlLT5vcmlnaW4oKSwgMzEpKSkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFVEaXY6Ci0gICAgICAgICAgICAv
LyBUdXJuIHRoaXM6IFVEaXYoY29uc3RhbnQxLCBjb25zdGFudDIpCi0gICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IGNvbnN0YW50MSAvIGNvbnN0YW50MgotICAgICAgICAgICAgaWYgKHJlcGxhY2VX
aXRoTmV3VmFsdWUobV92YWx1ZS0+Y2hpbGQoMCktPnVEaXZDb25zdGFudChtX3Byb2MsIG1fdmFs
dWUtPmNoaWxkKDEpKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlm
IChtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2gg
KG1fdmFsdWUtPmNoaWxkKDEpLT5hc0ludCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAwOgot
ICAgICAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFVEaXYodmFsdWUsIDApCi0gICAgICAg
ICAgICAgICAgICAgIC8vIEludG8gdGhpczogMAotICAgICAgICAgICAgICAgICAgICAvLyBXZSBj
YW4gZG8gd2hhdGV2ZXIgd2Ugd2FudCBoZXJlIHNvIHdlIG1pZ2h0IGFzIHdlbGwgZG8gdGhlIGNo
aWxsIHRoaW5nLAotICAgICAgICAgICAgICAgICAgICAvLyBpbiBjYXNlIHdlIGFkZCBjaGlsbCB2
ZXJzaW9ucyBvZiBVRGl2IGluIHRoZSBmdXR1cmUuCi0gICAgICAgICAgICAgICAgICAgIHJlcGxh
Y2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBVRGl2KHZhbHVlLCAxKQotICAgICAgICAgICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IHZhbHVlCi0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1
ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRvIGNv
bXByZWhlbnNpdmUgc3RyZW5ndGggcmVkdWN0aW9uIGZvciB1bnNpZ25lZCBudW1iZXJzLiBMaWtl
bHksCi0gICAgICAgICAgICAgICAgICAgIC8vIHdlIHdpbGwganVzdCB3YW50IGNvcHkgd2hhdCBs
bHZtIGRvZXMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ4MDkK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBNb2Q6Ci0gICAgICAgICAg
ICAvLyBUdXJuIHRoaXM6IE1vZChjb25zdGFudDEsIGNvbnN0YW50MikKLSAgICAgICAgICAgIC8v
IEludG8gdGhpczogY29uc3RhbnQxIC8gY29uc3RhbnQyCi0gICAgICAgICAgICAvLyBOb3RlIHRo
YXQgdGhpcyB1c2VzIE1vZDxDaGlsbD4gc2VtYW50aWNzLgotICAgICAgICAgICAgaWYgKHJlcGxh
Y2VXaXRoTmV3VmFsdWUobV92YWx1ZS0+Y2hpbGQoMCktPm1vZENvbnN0YW50KG1fcHJvYywgbV92
YWx1ZS0+Y2hpbGQoMSkpKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAg
Ly8gTW9kdWxvIGJ5IGNvbnN0YW50IGlzIG1vcmUgZWZmaWNpZW50IGlmIHdlIHR1cm4gaXQgaW50
byBEaXYsIGFuZCB0aGVuIGxldCBEaXYgZ2V0Ci0gICAgICAgICAgICAvLyBvcHRpbWl6ZWQuCi0g
ICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpKSB7Ci0gICAgICAgICAg
ICAgICAgc3dpdGNoIChtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQoKSkgewotICAgICAgICAgICAg
ICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBNb2QodmFsdWUs
IDApCi0gICAgICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogMAotICAgICAgICAgICAgICAg
ICAgICAvLyBUaGlzIGlzIGNvcnJlY3QgYWNjb3JkaW5nIHRvIENoaWxsTW9kIHNlbWFudGljcy4K
LSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgx
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fcHJvYy5vcHRMZXZlbCgpIDwgMikKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBNb2QoTiwgRCkKLSAgICAgICAgICAgICAgICAgICAg
Ly8gSW50byB0aGlzOiBTdWIoTiwgTXVsKERpdihOLCBEKSwgRCkpCi0gICAgICAgICAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBzcGVlZC11cCBiZWNhdXNl
IHdlIHVzZSBvdXIgZXhpc3RpbmcgRGl2IG9wdGltaXphdGlvbnMuCi0gICAgICAgICAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICAgICAgICAgIC8vIEhlcmUncyBhbiBlYXNpZXIgd2F5IHRvIGxv
b2sgYXQgaXQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICBOICUgRCA9IE4gLSBOIC8gRCAq
IEQKLSAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0
aGF0IHRoaXMgZG9lcyBub3Qgd29yayBmb3IgRCA9IDAgYW5kIENoaWxsTW9kLiBUaGUgZXhwZWN0
ZWQgcmVzdWx0IGlzIDAuCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoYXQncyB3aHkgd2UgaGF2
ZSBhIHNwZWNpYWwtY2FzZSBhYm92ZS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIFggJSAw
ID0gWCAtIFggLyAwICogMCA9IFggICAgIChzaG91bGQgYmUgMCkKLSAgICAgICAgICAgICAgICAg
ICAgLy8KLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBkb2VzIHdvcmsgZm9yIHRoZSBEID0g
LTEgc3BlY2lhbCBjYXNlLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgLTJeMzEgJSAtMSA9
IC0yXjMxIC0gLTJeMzEgLyAtMSAqIC0xCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICAgID0gLTJeMzEgLSAtMl4zMSAqIC0xCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICAgID0gLTJeMzEgLSAtMl4zMQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgICA9IDAKLQotICAgICAgICAgICAgICAgICAgICBLaW5kIGRpdktpbmQgPSBEaXY7Ci0g
ICAgICAgICAgICAgICAgICAgIGRpdktpbmQuc2V0SXNDaGlsbChtX3ZhbHVlLT5pc0NoaWxsKCkp
OwotCi0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkoCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW5kZXgsIFN1YiwgbV92YWx1ZS0+b3JpZ2luKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbmRleCwgTXVsLCBtX3ZhbHVlLT5vcmlnaW4oKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIGRpdktpbmQsIG1f
dmFsdWUtPm9yaWdpbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92
YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMSkpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBV
TW9kOgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBVTW9kKGNvbnN0YW50MSwgY29uc3RhbnQy
KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgLyBjb25zdGFudDIKLSAgICAg
ICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUobV92YWx1ZS0+Y2hpbGQoMCktPnVNb2RDb25zdGFu
dChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSk7Ci0gICAgICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIGRvIHdoYXQgd2UgZG8gZm9yIE1vZCBzaW5jZSB0aGUgc2FtZSBwcmluY2lwbGUgYXBw
bGllcyBoZXJlLgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NDgwOQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBCaXRB
bmQ6Ci0gICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7Ci0KLSAgICAgICAgICAgIC8v
IFR1cm4gdGhpczogQml0QW5kKGNvbnN0YW50MSwgY29uc3RhbnQyKQotICAgICAgICAgICAgLy8g
SW50byB0aGlzOiBjb25zdGFudDEgJiBjb25zdGFudDIKLSAgICAgICAgICAgIGlmIChWYWx1ZSog
Y29uc3RhbnRCaXRBbmQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Yml0QW5kQ29uc3RhbnQobV9wcm9j
LCBtX3ZhbHVlLT5jaGlsZCgxKSkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1Zh
bHVlKGNvbnN0YW50Qml0QW5kKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoQml0QW5kKHZhbHVlLCBjb25z
dGFudDEpLCBjb25zdGFudDIpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdEFuZCh2YWx1
ZSwgY29uc3RhbnQxICYgY29uc3RhbnQyKS4KLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGls
ZCgwKS0+b3Bjb2RlKCkgPT0gQml0QW5kKSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIG5ld0Nv
bnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMSktPmJpdEFuZENvbnN0YW50KG1fcHJvYywgbV92YWx1
ZS0+Y2hpbGQoMCktPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICBpZiAobmV3Q29uc3RhbnQp
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUobV9pbmRl
eCwgbmV3Q29uc3RhbnQpOwotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9
IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1
ZS0+Y2hpbGQoMSkgPSBuZXdDb25zdGFudDsKLSAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2Vk
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IC8vIFR1cm4gdGhpczogQml0QW5kKHZhbHVlWCwgdmFsdWVYKQotICAgICAgICAgICAgLy8gSW50
byB0aGlzOiB2YWx1ZVguCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCkgPT0gbV92
YWx1ZS0+Y2hpbGQoMSkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1f
dmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQodmFsdWUsIHplcm8tY29uc3RhbnQp
Ci0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHplcm8tY29uc3RhbnQuCi0gICAgICAgICAgICBp
ZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50KDApKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFj
ZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKHZhbHVl
LCBhbGwtb25lcykKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogdmFsdWUuCi0gICAgICAgICAg
ICBpZiAoKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQ2NCAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJ
bnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpKSkKLSAgICAgICAgICAgICAg
ICB8fCAobV92YWx1ZS0+dHlwZSgpID09IEludDMyICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5pc0lu
dChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpKSkgewotICAgICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJp
dEFuZCg2NC1iaXQgdmFsdWUsIDMyIG9uZXMpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFpF
eHQzMihUcnVuYyg2NC1iaXQgdmFsdWUpKQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxk
KDEpLT5pc0ludDY0KDB4ZmZmZmZmZmZsbHUpKSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIG5l
d1ZhbHVlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAgICAgICAgICAg
ICAgbV9pbmRleCwgWkV4dDMyLCBtX3ZhbHVlLT5vcmlnaW4oKSwKLSAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBUcnVuYywgbV92YWx1ZS0+
b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApKSk7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdp
dGhJZGVudGl0eShuZXdWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKFNFeHQ4KHZhbHVlKSwgbWFz
aykgd2hlcmUgKG1hc2sgJiAweGZmZmZmZjAwKSA9PSAwCi0gICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IEJpdEFuZCh2YWx1ZSwgbWFzaykKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgw
KS0+b3Bjb2RlKCkgPT0gU0V4dDggJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludDMyKCkKLSAg
ICAgICAgICAgICAgICAmJiAhKG1fdmFsdWUtPmNoaWxkKDEpLT5hc0ludDMyKCkgJiAweGZmZmZm
ZjAwKSkgewotICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hp
bGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4g
dGhpczogQml0QW5kKFNFeHQxNih2YWx1ZSksIG1hc2spIHdoZXJlIChtYXNrICYgMHhmZmZmMDAw
MCkgPT0gMAotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCaXRBbmQodmFsdWUsIG1hc2spCi0g
ICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFNFeHQxNiAmJiBt
X3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50MzIoKQotICAgICAgICAgICAgICAgICYmICEobV92YWx1
ZS0+Y2hpbGQoMSktPmFzSW50MzIoKSAmIDB4ZmZmZjAwMDApKSB7Ci0gICAgICAgICAgICAgICAg
bV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAg
ICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoU0V4dDMyKHZhbHVl
KSwgbWFzaykgd2hlcmUgKG1hc2sgJiAweGZmZmZmZmZmMDAwMDAwMDApID09IDAKLSAgICAgICAg
ICAgIC8vIEludG8gdGhpczogQml0QW5kKFpFeHQzMih2YWx1ZSksIG1hc2spCi0gICAgICAgICAg
ICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFNFeHQzMiAmJiBtX3ZhbHVlLT5j
aGlsZCgxKS0+aGFzSW50MzIoKQotICAgICAgICAgICAgICAgICYmICEobV92YWx1ZS0+Y2hpbGQo
MSktPmFzSW50MzIoKSAmIDB4ZmZmZmZmZmYwMDAwMDAwMGxsdSkpIHsKLSAgICAgICAgICAgICAg
ICBtX3ZhbHVlLT5jaGlsZCgwKSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAg
ICAgICAgICAgICAgICAgIG1faW5kZXgsIFpFeHQzMiwgbV92YWx1ZS0+b3JpZ2luKCksCi0gICAg
ICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hp
bGQoMCktPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJu
IHRoaXM6IEJpdEFuZChPcCh2YWx1ZSwgY29uc3RhbnQxKSwgY29uc3RhbnQyKQotICAgICAgICAg
ICAgLy8gICAgIHdoZXJlICEoY29uc3RhbnQxICYgY29uc3RhbnQyKQotICAgICAgICAgICAgLy8g
ICAgICAgYW5kIE9wIGlzIEJpdE9yIG9yIEJpdFhvcgotICAgICAgICAgICAgLy8gaW50byB0aGlz
OiBCaXRBbmQodmFsdWUsIGNvbnN0YW50MikKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGls
ZCgxKS0+aGFzSW50KCkpIHsKLSAgICAgICAgICAgICAgICBpbnQ2NF90IGNvbnN0YW50MiA9IG1f
dmFsdWUtPmNoaWxkKDEpLT5hc0ludCgpOwotICAgICAgICAgICAgICAgIHN3aXRjaCAobV92YWx1
ZS0+Y2hpbGQoMCktPm9wY29kZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBCaXRPcjoKLSAg
ICAgICAgICAgICAgICBjYXNlIEJpdFhvcjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fdmFs
dWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aGFzSW50KCkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICYmICEobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5hc0ludCgpICYgY29uc3RhbnQyKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5j
aGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6
IEJpdEFuZChCaXRYb3IoeDEsIGFsbE9uZXMpLCBCaXRYb3IoeDIsIGFsbE9uZXMpCi0gICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IEJpdFhvcihCaXRPcih4MSwgeDIpLCBhbGxPbmVzKQotICAgICAg
ICAgICAgLy8gQnkgYXBwbHlpbmcgRGUgTW9yZ2FuIGxhd3MKLSAgICAgICAgICAgIGlmIChtX3Zh
bHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0WG9yCi0gICAgICAgICAgICAgICAgJiYgbV92
YWx1ZS0+Y2hpbGQoMSktPm9wY29kZSgpID09IEJpdFhvcgotICAgICAgICAgICAgICAgICYmICgo
bV92YWx1ZS0+dHlwZSgpID09IEludDY0Ci0gICAgICAgICAgICAgICAgICAgICAgICAmJiBtX3Zh
bHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0
X3Q+OjptYXgoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEp
LT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpKSkK
LSAgICAgICAgICAgICAgICAgICAgfHwgKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQzMgotICAgICAg
ICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0ludChz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKSkpKSkgewotICAgICAgICAgICAgICAgIFZhbHVlKiBiaXRP
ciA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgQml0T3IsIG1fdmFsdWUt
Pm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEp
LT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KEJpdFhv
ciwgbV92YWx1ZS0+b3JpZ2luKCksIGJpdE9yLCBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAv
LyBUdXJuIHRoaXM6IEJpdEFuZChCaXRYb3IoeCwgYWxsT25lcyksIGMpCi0gICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IEJpdFhvcihCaXRPcih4LCB+YyksIGFsbE9uZXMpCi0gICAgICAgICAgICAv
LyBUaGlzIGlzIGEgdmFyaWF0aW9uIG9uIHRoZSBwcmV2aW91cyBvcHRpbWl6YXRpb24sIHRyZWF0
aW5nIGMgYXMgaWYgaXQgd2VyZSBCaXRYb3IofmMsIGFsbE9uZXMpCi0gICAgICAgICAgICAvLyBJ
dCBkb2VzIG5vdCByZWR1Y2UgdGhlIG51bWJlciBvZiBvcGVyYXRpb25zLCBidXQgcHJvdmlkZXMg
c29tZSBub3JtYWxpemF0aW9uICh3ZSB0cnkgdG8gZ2V0IEJpdFhvciBieSBhbGxPbmVzIGF0IHRo
ZSBvdXRlcm1vc3QgcG9pbnQpLCBhbmQgc29tZSBjaGFuY2UgdG8gZmxvYXQgWG9ycyB0byBhIHBs
YWNlIHdoZXJlIHRoZXkgbWlnaHQgZ2V0IGVsaW1pbmF0ZWQuCi0gICAgICAgICAgICBpZiAobV92
YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdFhvcgotICAgICAgICAgICAgICAgICYmIG1f
dmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKQotICAgICAgICAgICAgICAgICYmICgobV92YWx1ZS0+
dHlwZSgpID09IEludDY0Ci0gICAgICAgICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGls
ZCgwKS0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgo
KSkpCi0gICAgICAgICAgICAgICAgICAgIHx8IChtX3ZhbHVlLT50eXBlKCkgPT0gSW50MzIKLSAg
ICAgICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJ
bnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkpKSB7Ci0gICAgICAgICAg
ICAgICAgVmFsdWUqIGJpdE9yID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4
LCBCaXRPciwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSwg
bV92YWx1ZS0+Y2hpbGQoMSktPmJpdFhvckNvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQo
MCktPmNoaWxkKDEpKSk7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KEJp
dFhvciwgbV92YWx1ZS0+b3JpZ2luKCksIGJpdE9yLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQo
MSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICBjYXNlIEJpdE9yOgotICAgICAgICAgICAgaGFuZGxlQ29tbXV0
YXRpdml0eSgpOwotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdE9yKGNvbnN0YW50MSwg
Y29uc3RhbnQyKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgfCBjb25zdGFu
dDIKLSAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnRCaXRPciA9IG1fdmFsdWUtPmNoaWxk
KDApLT5iaXRPckNvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSB7Ci0gICAgICAg
ICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudEJpdE9yKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBC
aXRPcihCaXRPcih2YWx1ZSwgY29uc3RhbnQxKSwgY29uc3RhbnQyKQotICAgICAgICAgICAgLy8g
SW50byB0aGlzOiBCaXRPcih2YWx1ZSwgY29uc3RhbnQxICYgY29uc3RhbnQyKS4KLSAgICAgICAg
ICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0T3IpIHsKLSAgICAgICAg
ICAgICAgICBWYWx1ZSogbmV3Q29uc3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+Yml0T3JDb25z
dGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKG5ld0NvbnN0YW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydFZhbHVlKG1faW5kZXgsIG5ld0NvbnN0YW50KTsKLSAgICAgICAgICAgICAgICAgICAg
bV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gbmV3Q29uc3RhbnQ7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdE9yKHZhbHVlWCwgdmFsdWVYKQot
ICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZVguCi0gICAgICAgICAgICBpZiAobV92YWx1
ZS0+Y2hpbGQoMCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkpIHsKLSAgICAgICAgICAgICAgICByZXBs
YWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRPcih2YWx1
ZSwgemVyby1jb25zdGFudCkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogdmFsdWUuCi0gICAg
ICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50KDApKSB7Ci0gICAgICAgICAgICAg
ICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0
T3IodmFsdWUsIGFsbC1vbmVzKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBhbGwtb25lcy4K
LSAgICAgICAgICAgIGlmICgobV92YWx1ZS0+dHlwZSgpID09IEludDY0ICYmIG1fdmFsdWUtPmNo
aWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpKQotICAg
ICAgICAgICAgICAgIHx8IChtX3ZhbHVlLT50eXBlKCkgPT0gSW50MzIgJiYgbV92YWx1ZS0+Y2hp
bGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkpKSB7Ci0g
ICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgxKSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogQml0T3IoQml0WG9yKHgxLCBhbGxPbmVzKSwgQml0WG9yKHgyLCBhbGxPbmVzKQot
ICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCaXRYb3IoQml0QW5kKHgxLCB4MiksIGFsbE9uZXMp
Ci0gICAgICAgICAgICAvLyBCeSBhcHBseWluZyBEZSBNb3JnYW4gbGF3cwotICAgICAgICAgICAg
aWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXRYb3IKLSAgICAgICAgICAgICAg
ICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+b3Bjb2RlKCkgPT0gQml0WG9yCi0gICAgICAgICAgICAg
ICAgJiYgKChtX3ZhbHVlLT50eXBlKCkgPT0gSW50NjQKLSAgICAgICAgICAgICAgICAgICAgICAg
ICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0
czx1aW50NjRfdD46Om1heCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+
Y2hpbGQoMSktPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6
bWF4KCkpKQotICAgICAgICAgICAgICAgICAgICB8fCAobV92YWx1ZS0+dHlwZSgpID09IEludDMy
Ci0gICAgICAgICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkt
PmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkpKSB7Ci0gICAgICAgICAgICAgICAgVmFs
dWUqIGJpdEFuZCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgQml0QW5k
LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLCBtX3ZhbHVl
LT5jaGlsZCgxKS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3PFZh
bHVlPihCaXRYb3IsIG1fdmFsdWUtPm9yaWdpbigpLCBiaXRBbmQsIG1fdmFsdWUtPmNoaWxkKDEp
LT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0T3IoQml0WG9yKHgsIGFsbE9uZXMpLCBjKQotICAg
ICAgICAgICAgLy8gSW50byB0aGlzOiBCaXRYb3IoQml0QW5kKHgsIH5jKSwgYWxsT25lcykKLSAg
ICAgICAgICAgIC8vIFRoaXMgaXMgYSB2YXJpYXRpb24gb24gdGhlIHByZXZpb3VzIG9wdGltaXph
dGlvbiwgdHJlYXRpbmcgYyBhcyBpZiBpdCB3ZXJlIEJpdFhvcih+YywgYWxsT25lcykKLSAgICAg
ICAgICAgIC8vIEl0IGRvZXMgbm90IHJlZHVjZSB0aGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMsIGJ1
dCBwcm92aWRlcyBzb21lIG5vcm1hbGl6YXRpb24gKHdlIHRyeSB0byBnZXQgQml0WG9yIGJ5IGFs
bE9uZXMgYXQgdGhlIG91dGVybW9zdCBwb2ludCksIGFuZCBzb21lIGNoYW5jZSB0byBmbG9hdCBY
b3JzIHRvIGEgcGxhY2Ugd2hlcmUgdGhleSBtaWdodCBnZXQgZWxpbWluYXRlZC4KLSAgICAgICAg
ICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0WG9yCi0gICAgICAgICAg
ICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpCi0gICAgICAgICAgICAgICAgJiYg
KChtX3ZhbHVlLT50eXBlKCkgPT0gSW50NjQKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIG1f
dmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50
NjRfdD46Om1heCgpKSkKLSAgICAgICAgICAgICAgICAgICAgfHwgKG1fdmFsdWUtPnR5cGUoKSA9
PSBJbnQzMgotICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNo
aWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpKSkpIHsK
LSAgICAgICAgICAgICAgICBWYWx1ZSogYml0QW5kID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZh
bHVlPihtX2luZGV4LCBCaXRBbmQsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgw
KS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpLT5iaXRYb3JDb25zdGFudChtX3Byb2MsIG1f
dmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSkpOwotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRo
TmV3PFZhbHVlPihCaXRYb3IsIG1fdmFsdWUtPm9yaWdpbigpLCBiaXRBbmQsIG1fdmFsdWUtPmNo
aWxkKDApLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmIChoYW5kbGVCaXRBbmREaXN0cmlidXRpdml0eSgpKQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEJp
dFhvcjoKLSAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKLQotICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBCaXRYb3IoY29uc3RhbnQxLCBjb25zdGFudDIpCi0gICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IGNvbnN0YW50MSBeIGNvbnN0YW50MgotICAgICAgICAgICAgaWYgKFZhbHVl
KiBjb25zdGFudEJpdFhvciA9IG1fdmFsdWUtPmNoaWxkKDApLT5iaXRYb3JDb25zdGFudChtX3By
b2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3
VmFsdWUoY29uc3RhbnRCaXRYb3IpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdFhvcihCaXRYb3IodmFsdWUsIGNv
bnN0YW50MSksIGNvbnN0YW50MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0WG9yKHZh
bHVlLCBjb25zdGFudDEgXiBjb25zdGFudDIpLgotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNo
aWxkKDApLT5vcGNvZGUoKSA9PSBCaXRYb3IpIHsKLSAgICAgICAgICAgICAgICBWYWx1ZSogbmV3
Q29uc3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+Yml0WG9yQ29uc3RhbnQobV9wcm9jLCBtX3Zh
bHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgIGlmIChuZXdDb25zdGFu
dCkgewotICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRWYWx1ZShtX2lu
ZGV4LCBuZXdDb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDAp
ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgICAgICBtX3Zh
bHVlLT5jaGlsZCgxKSA9IG5ld0NvbnN0YW50OwotICAgICAgICAgICAgICAgICAgICBtX2NoYW5n
ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgLy8gVHVybiB0aGlzOiBCaXRYb3IoY29tcGFyZSwgMSkKLSAgICAgICAgICAgIC8vIEludG8g
dGhpczogaW52ZXJ0ZWRDb21wYXJlCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSkt
PmlzSW50MzIoMSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoVmFsdWUqIGludmVydGVkQ29tcGFy
ZSA9IG1fdmFsdWUtPmNoaWxkKDApLT5pbnZlcnRlZENvbXBhcmUobV9wcm9jKSkgewotICAgICAg
ICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGludmVydGVkQ29tcGFyZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IodmFsdWVYLCB2YWx1ZVgpCi0gICAg
ICAgICAgICAvLyBJbnRvIHRoaXM6IHplcm8tY29uc3RhbnQuCi0gICAgICAgICAgICBpZiAobV92
YWx1ZS0+Y2hpbGQoMCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkpIHsKLSAgICAgICAgICAgICAgICBy
ZXBsYWNlV2l0aE5ld1ZhbHVlKG1fcHJvYy5hZGRJbnRDb25zdGFudChtX3ZhbHVlLCAwKSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogQml0WG9yKHZhbHVlLCB6ZXJvLWNvbnN0YW50KQotICAgICAgICAgICAgLy8gSW50
byB0aGlzOiB2YWx1ZS4KLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQo
MCkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxk
KDApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmIChoYW5kbGVCaXRBbmREaXN0cmlidXRpdml0eSgpKQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNl
IFNobDoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU2hsKGNvbnN0YW50MSwgY29uc3RhbnQy
KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgPDwgY29uc3RhbnQyCi0gICAg
ICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPnNobENvbnN0
YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFj
ZVdpdGhOZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU2hsKDxTfFo+U2hyKEB4LCBAY29u
c3QpLCBAY29uc3QpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdEFuZChAeCwgLSgxPDxA
Y29uc3QpKQotICAgICAgICAgICAgaWYgKChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0g
U1NociB8fCBtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gWlNocikKLSAgICAgICAgICAg
ICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhhc0ludCgpCi0gICAgICAgICAg
ICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpCi0gICAgICAgICAgICAgICAgJiYg
bV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5hc0ludCgpID09IG1fdmFsdWUtPmNoaWxkKDEp
LT5hc0ludCgpKSB7Ci0gICAgICAgICAgICAgICAgaW50IHNoaWZ0QW1vdW50ID0gbV92YWx1ZS0+
Y2hpbGQoMSktPmFzSW50KCkgJiAobV92YWx1ZS0+dHlwZSgpID09IEludDMyID8gMzEgOiA2Myk7
Ci0gICAgICAgICAgICAgICAgVmFsdWUqIG5ld0NvbnN0ID0gbV9wcm9jLmFkZEludENvbnN0YW50
KG1fdmFsdWUsIC0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oMXVsbCA8PCBzaGlmdEFtb3VudCkpOwot
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydFZhbHVlKG1faW5kZXgsIG5ld0Nv
bnN0KTsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oQml0QW5kLCBtX3Zh
bHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLCBuZXdDb25zdCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGhhbmRs
ZVNoaWZ0QW1vdW50KCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNTaHI6
Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNTaHIoY29uc3RhbnQxLCBjb25zdGFudDIpCi0g
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50MSA+PiBjb25zdGFudDIKLSAgICAgICAg
ICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+c1NockNvbnN0YW50
KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdp
dGhOZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50MzIoKQotICAg
ICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBTaGwKLSAgICAg
ICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhhc0ludDMyKCkKLSAg
ICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQzMigpID09IG1fdmFsdWUt
PmNoaWxkKDApLT5jaGlsZCgxKS0+YXNJbnQzMigpKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNo
IChtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQzMigpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAx
NjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQzMikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTU2hyKFNobCh2YWx1ZSwgMTYp
LCAxNikKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogU0V4dDE2KHZhbHVl
KQotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX3Byb2MuYWRkPFZhbHVlPigKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU0V4dDE2LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQo
MCktPmNoaWxkKDApKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIDI0OgotICAgICAgICAgICAgICAgICAg
ICBpZiAobV92YWx1ZS0+dHlwZSgpID09IEludDMyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBUdXJuIHRoaXM6IFNTaHIoU2hsKHZhbHVlLCAyNCksIDI0KQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0OCh2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9w
cm9jLmFkZDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFeHQ4LCBt
X3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAg
ICAgICBjYXNlIDMyOgotICAgICAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+dHlwZSgpID09
IEludDY0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNTaHIoU2hs
KHZhbHVlLCAzMiksIDMyKQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBT
RXh0MzIoVHJ1bmModmFsdWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhO
ZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Byb2MuYWRkPFZhbHVlPigK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0V4dDMyLCBtX3ZhbHVlLT5vcmlnaW4o
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
PFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIFRy
dW5jLCBtX3ZhbHVlLT5vcmlnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSkpKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBBZGQgY2FzZXMgZm9yIDQ4IGFuZCA1NiwgYnV0IHRoYXQgd291bGQgdHJhbnNsYXRlIHRvIFNF
eHQzMihTRXh0OCkgb3IKLSAgICAgICAgICAgICAgICAvLyBTRXh0MzIoU0V4dDE2KSwgd2hpY2gg
d2UgZG9uJ3QgY3VycmVudGx5IGxvd2VyIGVmZmljaWVudGx5LgotCi0gICAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPm9wY29kZSgpICE9IFNTaHIpCi0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBoYW5kbGVT
aGlmdEFtb3VudCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBaU2hyOgot
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBaU2hyKGNvbnN0YW50MSwgY29uc3RhbnQyKQotICAg
ICAgICAgICAgLy8gSW50byB0aGlzOiAodW5zaWduZWQpY29uc3RhbnQxID4+IGNvbnN0YW50Mgot
ICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDApLT56U2hy
Q29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpIHsKLSAgICAgICAgICAgICAgICBy
ZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0YW50KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaGFuZGxlU2hpZnRBbW91bnQoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgUm90UjoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhp
czogUm90Uihjb25zdGFudDEsIGNvbnN0YW50MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczog
KGNvbnN0YW50MSA+PiBjb25zdGFudDIpIHwgKGNvbnN0YW50MSA8PCBzaXplb2YoY29uc3RhbnQx
KSAqIDggLSBjb25zdGFudDIpCi0gICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbV92
YWx1ZS0+Y2hpbGQoMCktPnJvdFJDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkg
ewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnQpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBoYW5kbGVTaGlm
dEFtb3VudCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBSb3RMOgotICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBSb3RMKGNvbnN0YW50MSwgY29uc3RhbnQyKQotICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiAoY29uc3RhbnQxIDw8IGNvbnN0YW50MikgfCAoY29uc3RhbnQx
ID4+IHNpemVvZihjb25zdGFudDEpICogOCAtIGNvbnN0YW50MikKLSAgICAgICAgICAgIGlmIChW
YWx1ZSogY29uc3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+cm90TENvbnN0YW50KG1fcHJvYywg
bV92YWx1ZS0+Y2hpbGQoMSkpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1
ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGhhbmRsZVNoaWZ0QW1vdW50KCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICBjYXNlIEFiczoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQWJzKGNvbnN0YW50KQot
ICAgICAgICAgICAgLy8gSW50byB0aGlzOiBmYWJzPHZhbHVlLT50eXBlKCk+KGNvbnN0YW50KQot
ICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDApLT5hYnND
b25zdGFudChtX3Byb2MpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShj
b25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIC8vIFR1cm4gdGhpczogQWJzKEFicyh2YWx1ZSkpCi0gICAgICAgICAgICAvLyBJbnRv
IHRoaXM6IEFicyh2YWx1ZSkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bj
b2RlKCkgPT0gQWJzKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3Zh
bHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFicyhOZWcodmFsdWUp
KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBYnModmFsdWUpCi0gICAgICAgICAgICBpZiAo
bV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IE5lZykgewotICAgICAgICAgICAgICAgIG1f
dmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAgICAg
ICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQWJzKEJpdHdpc2VDYXN0KHZhbHVl
KSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0d2lzZUNhc3QoQW5kKHZhbHVlLCBtYXNr
LXRvcC1iaXQpKQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9
PSBCaXR3aXNlQ2FzdCkgewotICAgICAgICAgICAgICAgIFZhbHVlKiBtYXNrOwotICAgICAgICAg
ICAgICAgIGlmIChtX3ZhbHVlLT50eXBlKCkgPT0gRG91YmxlKQotICAgICAgICAgICAgICAgICAg
ICBtYXNrID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0NjRWYWx1ZT4obV9pbmRleCwgbV92
YWx1ZS0+b3JpZ2luKCksIH4oMWxsIDw8IDYzKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICBtYXNrID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1
ZT4obV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIH4oMWwgPDwgMzEpKTsKLQotICAgICAgICAg
ICAgICAgIFZhbHVlKiBiaXRBbmQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5k
ZXgsIEJpdEFuZCwgbV92YWx1ZS0+b3JpZ2luKCksCi0gICAgICAgICAgICAgICAgICAgIG1fdmFs
dWUtPmNoaWxkKDApLT5jaGlsZCgwKSwKLSAgICAgICAgICAgICAgICAgICAgbWFzayk7Ci0gICAg
ICAgICAgICAgICAgVmFsdWUqIGNhc3QgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1f
aW5kZXgsIEJpdHdpc2VDYXN0LCBtX3ZhbHVlLT5vcmlnaW4oKSwgYml0QW5kKTsKLSAgICAgICAg
ICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KGNhc3QpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBDZWls
OgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBDZWlsKGNvbnN0YW50KQotICAgICAgICAgICAg
Ly8gSW50byB0aGlzOiBjZWlsPHZhbHVlLT50eXBlKCk+KGNvbnN0YW50KQotICAgICAgICAgICAg
aWYgKFZhbHVlKiBjb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDApLT5jZWlsQ29uc3RhbnQobV9w
cm9jKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnQpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBU
dXJuIHRoaXM6IENlaWwocm91bmRlZFZhbHVlKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBy
b3VuZGVkVmFsdWUKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aXNSb3VuZGVk
KCkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxk
KDApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIGNhc2UgRmxvb3I6Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6
IEZsb29yKGNvbnN0YW50KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBmbG9vcjx2YWx1ZS0+
dHlwZSgpPihjb25zdGFudCkKLSAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3Zh
bHVlLT5jaGlsZCgwKS0+Zmxvb3JDb25zdGFudChtX3Byb2MpKSB7Ci0gICAgICAgICAgICAgICAg
cmVwbGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRmxvb3Iocm91bmRlZFZh
bHVlKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiByb3VuZGVkVmFsdWUKLSAgICAgICAgICAg
IGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aXNSb3VuZGVkKCkpIHsKLSAgICAgICAgICAgICAgICBy
ZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2Ug
U3FydDoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU3FydChjb25zdGFudCkKLSAgICAgICAg
ICAgIC8vIEludG8gdGhpczogc3FydDx2YWx1ZS0+dHlwZSgpPihjb25zdGFudCkKLSAgICAgICAg
ICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+c3FydENvbnN0YW50
KG1fcHJvYykpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0YW50
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIGNhc2UgQml0d2lzZUNhc3Q6Ci0gICAgICAgICAgICAvLyBUdXJuIHRo
aXM6IEJpdHdpc2VDYXN0KGNvbnN0YW50KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBiaXR3
aXNlX2Nhc3Q8dmFsdWUtPnR5cGUoKT4oY29uc3RhbnQpCi0gICAgICAgICAgICBpZiAoVmFsdWUq
IGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmJpdHdpc2VDYXN0Q29uc3RhbnQobV9wcm9j
KSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnQpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJu
IHRoaXM6IEJpdHdpc2VDYXN0KEJpdHdpc2VDYXN0KHZhbHVlKSkKLSAgICAgICAgICAgIC8vIElu
dG8gdGhpczogdmFsdWUKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2Rl
KCkgPT0gQml0d2lzZUNhc3QpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5
KG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNFeHQ4Ogot
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0OChjb25zdGFudCkKLSAgICAgICAgICAgIC8v
IEludG8gdGhpczogc3RhdGljX2Nhc3Q8aW50OF90Pihjb25zdGFudCkKLSAgICAgICAgICAgIGlm
IChtX3ZhbHVlLT5jaGlsZCgwKS0+aGFzSW50MzIoKSkgewotICAgICAgICAgICAgICAgIGludDMy
X3QgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8aW50OF90PihtX3ZhbHVlLT5jaGlsZCgwKS0+YXNJbnQz
MigpKTsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fcHJvYy5hZGRJbnRD
b25zdGFudChtX3ZhbHVlLCByZXN1bHQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0OChTRXh0OCh2YWx1ZSkp
Ci0gICAgICAgICAgICAvLyAgIG9yIHRoaXM6IFNFeHQ4KFNFeHQxNih2YWx1ZSkpCi0gICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IFNFeHQ4KHZhbHVlKQotICAgICAgICAgICAgaWYgKG1fdmFsdWUt
PmNoaWxkKDApLT5vcGNvZGUoKSA9PSBTRXh0OCB8fCBtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2Rl
KCkgPT0gU0V4dDE2KSB7Ci0gICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3Zh
bHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1
ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5v
cGNvZGUoKSA9PSBCaXRBbmQgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5oYXNJbnQz
MigpKSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIGlucHV0ID0gbV92YWx1ZS0+Y2hpbGQoMCkt
PmNoaWxkKDApOwotICAgICAgICAgICAgICAgIGludDMyX3QgbWFzayA9IG1fdmFsdWUtPmNoaWxk
KDApLT5jaGlsZCgxKS0+YXNJbnQzMigpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIC8vIFR1cm4gdGhpczogU0V4dDgoQml0QW5kKGlucHV0LCBtYXNrKSkgd2hlcmUgKG1hc2sg
JiAweGZmKSA9PSAweGZmCi0gICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0OChpbnB1
dCkKLSAgICAgICAgICAgICAgICBpZiAoKG1hc2sgJiAweGZmKSA9PSAweGZmKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gaW5wdXQ7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBUdXJuIHRo
aXM6IFNFeHQ4KEJpdEFuZChpbnB1dCwgbWFzaykpIHdoZXJlIChtYXNrICYgMHg4MCkgPT0gMAot
ICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0QW5kKGlucHV0LCBjb25zdCAmIDB4N2Yp
Ci0gICAgICAgICAgICAgICAgaWYgKCEobWFzayAmIDB4ODApKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3Byb2Mu
YWRkPFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXRBbmQsIG1fdmFsdWUt
Pm9yaWdpbigpLCBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIG1hc2sgJiAweDdmKSkpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9wcm9jLmhhc1F1aXJrcygpKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0OChBdG9taWNYY2hnX19fKQotICAgICAgICAgICAg
ICAgIC8vIEludG8gdGhpczogQXRvbWljWGNoZ19fXwotICAgICAgICAgICAgICAgIGlmIChpc0F0
b21pY1hjaGcobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpKQotICAgICAgICAgICAgICAgICAg
ICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+YXM8QXRvbWljVmFsdWU+KCktPmFjY2Vzc1dpZHRoKCkg
PT0gV2lkdGg4KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92
YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNl
IFNFeHQxNjoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDE2KGNvbnN0YW50KQotICAg
ICAgICAgICAgLy8gSW50byB0aGlzOiBzdGF0aWNfY2FzdDxpbnQxNl90Pihjb25zdGFudCkKLSAg
ICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aGFzSW50MzIoKSkgewotICAgICAgICAg
ICAgICAgIGludDMyX3QgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8aW50MTZfdD4obV92YWx1ZS0+Y2hp
bGQoMCktPmFzSW50MzIoKSk7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSht
X3Byb2MuYWRkSW50Q29uc3RhbnQobV92YWx1ZSwgcmVzdWx0KSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDE2
KFNFeHQxNih2YWx1ZSkpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNFeHQxNih2YWx1ZSkK
LSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU0V4dDE2KSB7
Ci0gICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0MTYoU0V4dDgodmFsdWUpKQotICAg
ICAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0OCh2YWx1ZSkKLSAgICAgICAgICAgIGlmIChtX3Zh
bHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU0V4dDgpIHsKLSAgICAgICAgICAgICAgICByZXBs
YWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5v
cGNvZGUoKSA9PSBCaXRBbmQgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5oYXNJbnQz
MigpKSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIGlucHV0ID0gbV92YWx1ZS0+Y2hpbGQoMCkt
PmNoaWxkKDApOwotICAgICAgICAgICAgICAgIGludDMyX3QgbWFzayA9IG1fdmFsdWUtPmNoaWxk
KDApLT5jaGlsZCgxKS0+YXNJbnQzMigpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIC8vIFR1cm4gdGhpczogU0V4dDE2KEJpdEFuZChpbnB1dCwgbWFzaykpIHdoZXJlIChtYXNr
ICYgMHhmZmZmKSA9PSAweGZmZmYKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNFeHQx
NihpbnB1dCkKLSAgICAgICAgICAgICAgICBpZiAoKG1hc2sgJiAweGZmZmYpID09IDB4ZmZmZikg
ewotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9IGlucHV0OwotICAgICAg
ICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBTRXh0MTYoQml0QW5kKGlucHV0LCBtYXNrKSkgd2hlcmUgKG1hc2sgJiAw
eDgwMDApID09IDAKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdEFuZChpbnB1dCwg
Y29uc3QgJiAweDdmZmYpCi0gICAgICAgICAgICAgICAgaWYgKCEobWFzayAmIDB4ODAwMCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1fcHJvYy5hZGQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEJpdEFuZCwgbV92YWx1ZS0+b3JpZ2luKCksIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDMyVmFsdWU+KAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbWFzayAmIDB4
N2ZmZikpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIW1fcHJvYy5oYXNRdWlya3MoKSkgewot
ICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDE2KEF0b21pY1hjaGdfX18pCi0gICAg
ICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBdG9taWNYY2hnX19fCi0gICAgICAgICAgICAgICAg
aWYgKGlzQXRvbWljWGNoZyhtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkpCi0gICAgICAgICAg
ICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5hczxBdG9taWNWYWx1ZT4oKS0+YWNjZXNz
V2lkdGgoKSA9PSBXaWR0aDE2KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRl
bnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICBjYXNlIFNFeHQzMjoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDMyKGNvbnN0
YW50KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBzdGF0aWNfY2FzdDxpbnQ2NF90Pihjb25z
dGFudCkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aGFzSW50MzIoKSkgewot
ICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUobV9wcm9jLmFkZEludENvbnN0YW50
KG1fdmFsdWUsIG1fdmFsdWUtPmNoaWxkKDApLT5hc0ludDMyKCkpKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0
MzIoQml0QW5kKGlucHV0LCBtYXNrKSkgd2hlcmUgKG1hc2sgJiAweDgwMDAwMDAwKSA9PSAwCi0g
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFpFeHQzMihCaXRBbmQoaW5wdXQsIG1hc2spKQotICAg
ICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXRBbmQgJiYgbV92
YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5oYXNJbnQzMigpCi0gICAgICAgICAgICAgICAgJiYg
IShtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmFzSW50MzIoKSAmIDB4ODAwMDAwMDApKSB7
Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICAg
ICAgbV9wcm9jLmFkZDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICBaRXh0MzIsIG1f
dmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSkpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBa
RXh0MzI6Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFpFeHQzMihjb25zdGFudCkKLSAgICAg
ICAgICAgIC8vIEludG8gdGhpczogc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PHVp
bnQzMl90Pihjb25zdGFudCkpCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmhh
c0ludDMyKCkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAg
ICAgICAgICAgICAgICBtX3Byb2MuYWRkSW50Q29uc3RhbnQoCi0gICAgICAgICAgICAgICAgICAg
ICAgICBtX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KHN0YXRpY19jYXN0PHVpbnQzMl90PihtX3ZhbHVlLT5jaGlsZCgwKS0+YXNJbnQzMigpKSkp
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIGNhc2UgVHJ1bmM6Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFRy
dW5jKGNvbnN0YW50KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBzdGF0aWNfY2FzdDxpbnQz
Ml90Pihjb25zdGFudCkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aGFzSW50
NjQoKSB8fCBtX3ZhbHVlLT5jaGlsZCgwKS0+aGFzRG91YmxlKCkpIHsKLSAgICAgICAgICAgICAg
ICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgICAgICBtX3Byb2MuYWRkSW50
Q29uc3RhbnQobV92YWx1ZSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obV92YWx1ZS0+Y2hpbGQoMCkt
PmFzSW50NjQoKSkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBUcnVuYyhTRXh0MzIodmFsdWUpKSBvciBUcnVuYyha
RXh0MzIodmFsdWUpKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZQotICAgICAgICAg
ICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBTRXh0MzIgfHwgbV92YWx1ZS0+
Y2hpbGQoMCktPm9wY29kZSgpID09IFpFeHQzMikgewotICAgICAgICAgICAgICAgIHJlcGxhY2VX
aXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBUcnVu
YyhPcCh2YWx1ZSwgY29uc3RhbnQpKQotICAgICAgICAgICAgLy8gICAgIHdoZXJlICEoY29uc3Rh
bnQgJiAweGZmZmZmZmZmKQotICAgICAgICAgICAgLy8gICAgICAgYW5kIE9wIGlzIEFkZCwgU3Vi
LCBCaXRPciwgb3IgQml0WG9yCi0gICAgICAgICAgICAvLyBpbnRvIHRoaXM6IFRydW5jKHZhbHVl
KQotICAgICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkpIHsKLSAg
ICAgICAgICAgIGNhc2UgQWRkOgotICAgICAgICAgICAgY2FzZSBTdWI6Ci0gICAgICAgICAgICBj
YXNlIEJpdE9yOgotICAgICAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgICAgICAgICAgaWYg
KG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aGFzSW50NjQoKQotICAgICAgICAgICAgICAg
ICAgICAmJiAhKG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+YXNJbnQ2NCgpICYgMHhmZmZm
ZmZmZmxsKSkgewotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9IG1fdmFs
dWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNh
c2UgSVRvRDoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogSVRvRChjb25zdGFudCkKLSAgICAg
ICAgICAgIC8vIEludG8gdGhpczogQ29uc3REb3VibGUoY29uc3RhbnQpCi0gICAgICAgICAgICBp
ZiAoVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmlUb0RDb25zdGFudChtX3By
b2MpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIElUb0Y6Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IElUb0YoY29u
c3RhbnQpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IENvbnN0RmxvYXQoY29uc3RhbnQpCi0g
ICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmlUb0ZD
b25zdGFudChtX3Byb2MpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShj
b25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEZsb2F0VG9Eb3VibGU6Ci0gICAgICAgICAgICAv
LyBUdXJuIHRoaXM6IEZsb2F0VG9Eb3VibGUoY29uc3RhbnQpCi0gICAgICAgICAgICAvLyBJbnRv
IHRoaXM6IENvbnN0RG91YmxlKGNvbnN0YW50KQotICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25z
dGFudCA9IG1fdmFsdWUtPmNoaWxkKDApLT5mbG9hdFRvRG91YmxlQ29uc3RhbnQobV9wcm9jKSkg
ewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnQpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgY2FzZSBEb3VibGVUb0Zsb2F0OgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBEb3Vi
bGVUb0Zsb2F0KEZsb2F0VG9Eb3VibGUodmFsdWUpKQotICAgICAgICAgICAgLy8gSW50byB0aGlz
OiB2YWx1ZQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBG
bG9hdFRvRG91YmxlKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3Zh
bHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IERvdWJsZVRvRmxvYXQoY29uc3Rh
bnQpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IENvbnN0RmxvYXQoY29uc3RhbnQpCi0gICAg
ICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmRvdWJsZVRv
RmxvYXRDb25zdGFudChtX3Byb2MpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdW
YWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKK2NsYXNzIFJlZHVjZVN0cmVuZ3RoIHsKK3B1YmxpYzoKKyAgICBS
ZWR1Y2VTdHJlbmd0aChQcm9jZWR1cmUmIHByb2MpCisgICAgICAgIDogbV9wcm9jKHByb2MpCisg
ICAgICAgICwgbV9pbnNlcnRpb25TZXQocHJvYykKKyAgICAgICAgLCBtX2Jsb2NrSW5zZXJ0aW9u
U2V0KHByb2MpCisgICAgeworICAgIH0KIAotICAgICAgICBjYXNlIFNlbGVjdDoKLSAgICAgICAg
ICAgIC8vIFR1cm4gdGhpczogU2VsZWN0KGNvbnN0YW50LCBhLCBiKQotICAgICAgICAgICAgLy8g
SW50byB0aGlzOiBjb25zdGFudCA/IGEgOiBiCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hp
bGQoMCktPmhhc0ludDMyKCkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5
KAotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+YXNJbnQzMigpID8gbV92
YWx1ZS0+Y2hpbGQoMSkgOiBtX3ZhbHVlLT5jaGlsZCgyKSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9CisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgYm9vbCBy
ZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBmaXJzdCA9IHRydWU7CisgICAgICAgIHVuc2ln
bmVkIGluZGV4ID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFs
c2U7CisgICAgICAgICAgICBtX2NoYW5nZWRDRkcgPSBmYWxzZTsKKyAgICAgICAgICAgICsraW5k
ZXg7CiAKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU2VsZWN0KEVxdWFsKHgsIDApLCBhLCBi
KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTZWxlY3QoeCwgYiwgYSkKLSAgICAgICAgICAg
IGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gRXF1YWwgJiYgbV92YWx1ZS0+Y2hp
bGQoMCktPmNoaWxkKDEpLT5pc0ludCgwKSkgewotICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNo
aWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIHN0
ZDo6c3dhcChtX3ZhbHVlLT5jaGlsZCgxKSwgbV92YWx1ZS0+Y2hpbGQoMikpOwotICAgICAgICAg
ICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBpZiAoZmlyc3QpCisgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKEIzUmVkdWNlU3RyZW5ndGhJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAg
ICAgICAgICAgIGRhdGFMb2coIkIzIGFmdGVyIGl0ZXJhdGlvbiAjIiwgaW5kZXggLSAxLCAiIG9m
IHJlZHVjZVN0cmVuZ3RoOlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZyhtX3Byb2MpOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNlbGVjdChCaXRYb3Io
Ym9vbCwgMSksIGEsIGIpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNlbGVjdChib29sLCBi
LCBhKQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXRY
b3IKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50
MzIoMSkKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCktPnJl
dHVybnNCb29sKCkpIHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9IG1fdmFs
dWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICBzdGQ6OnN3YXAobV92YWx1
ZS0+Y2hpbGQoMSksIG1fdmFsdWUtPmNoaWxkKDIpKTsKLSAgICAgICAgICAgICAgICBtX2NoYW5n
ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgc2ltcGxpZnlDRkcoKTsKIAotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTZWxlY3Qo
Qml0QW5kKGJvb2wsIHh5ejEpLCBhLCBiKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTZWxl
Y3QoYm9vbCwgYSwgYikKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2Rl
KCkgPT0gQml0QW5kCi0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxk
KDEpLT5oYXNJbnQoKQotICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGls
ZCgxKS0+YXNJbnQoKSAmIDEKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMCktPnJldHVybnNCb29sKCkpIHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGls
ZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKKyAgICAgICAgICAgIGlmIChtX2No
YW5nZWRDRkcpIHsKKyAgICAgICAgICAgICAgICBtX3Byb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsK
KyAgICAgICAgICAgICAgICBtX3Byb2MuaW52YWxpZGF0ZUNGRygpOwogICAgICAgICAgICAgICAg
IG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU2VsZWN0KHN0dWZmLCB4LCB4KQotICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiB4Ci0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSkg
PT0gbV92YWx1ZS0+Y2hpbGQoMikpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50
aXR5KG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgTG9hZDhaOgotICAgICAg
ICBjYXNlIExvYWQ4UzoKLSAgICAgICAgY2FzZSBMb2FkMTZaOgotICAgICAgICBjYXNlIExvYWQx
NlM6Ci0gICAgICAgIGNhc2UgTG9hZDoKLSAgICAgICAgY2FzZSBTdG9yZTg6Ci0gICAgICAgIGNh
c2UgU3RvcmUxNjoKLSAgICAgICAgY2FzZSBTdG9yZTogewotICAgICAgICAgICAgVmFsdWUqIGFk
ZHJlc3MgPSBtX3ZhbHVlLT5sYXN0Q2hpbGQoKTsKLSAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBt
ZW1vcnkgPSBtX3ZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKLQotICAgICAgICAgICAgLy8gVHVy
biB0aGlzOiBMb2FkKEFkZChhZGRyZXNzLCBvZmZzZXQxKSwgb2Zmc2V0ID0gb2Zmc2V0MikKLSAg
ICAgICAgICAgIC8vIEludG8gdGhpczogTG9hZChhZGRyZXNzLCBvZmZzZXQgPSBvZmZzZXQxICsg
b2Zmc2V0MikKKyAgICAgICAgICAgIC8vIFdlIGRlZmluaXRlbHkgd2FudCB0byBkbyBEQ0UgYmVm
b3JlIHdlIGRvIENTRSBzbyB0aGF0IHdlIGRvbid0IGhvaXN0IHRoaW5ncy4gRm9yCisgICAgICAg
ICAgICAvLyBleGFtcGxlOgogICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEFsc28gdHVy
bnMgdGhpczogU3RvcmUodmFsdWUsIEFkZChhZGRyZXNzLCBvZmZzZXQxKSwgb2Zmc2V0ID0gb2Zm
c2V0MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogU3RvcmUodmFsdWUsIGFkZHJlc3MsIG9m
ZnNldCA9IG9mZnNldDEgKyBvZmZzZXQyKQotICAgICAgICAgICAgaWYgKGFkZHJlc3MtPm9wY29k
ZSgpID09IEFkZCAmJiBhZGRyZXNzLT5jaGlsZCgxKS0+aGFzSW50UHRyKCkpIHsKLSAgICAgICAg
ICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSBhZGRyZXNzLT5jaGlsZCgxKS0+YXNJbnRQdHIoKTsK
LSAgICAgICAgICAgICAgICBpZiAoIXN1bU92ZXJmbG93czxpbnRwdHJfdD4ob2Zmc2V0LCBtZW1v
cnktPm9mZnNldCgpKSkgewotICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gbWVtb3J5LT5v
ZmZzZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgVmFsdWU6Ok9mZnNldFR5cGUgc21hbGxPZmZz
ZXQgPSBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4ob2Zmc2V0KTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHNtYWxsT2Zmc2V0ID09IG9mZnNldCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgYWRkcmVzcyA9IGFkZHJlc3MtPmNoaWxkKDApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbWVtb3J5LT5sYXN0Q2hpbGQoKSA9IGFkZHJlc3M7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBtZW1vcnktPnNldE9mZnNldChzbWFsbE9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IExvYWQoY29u
c3RhbnQxLCBvZmZzZXQgPSBjb25zdGFudDIpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IExv
YWQoY29uc3RhbnQxICsgY29uc3RhbnQyKQorICAgICAgICAgICAgLy8gQGRlYWQgPSBNdWwoQGEs
IEBiKQorICAgICAgICAgICAgLy8gLi4uIGxvdHMgb2YgY29udHJvbCBmbG93IGFuZCBzdHVmZgor
ICAgICAgICAgICAgLy8gQHRoaW5nID0gTXVsKEBhLCBAYikKICAgICAgICAgICAgIC8vCi0gICAg
ICAgICAgICAvLyBUaGlzIGlzIGEgZnVuIGNhbm9uaWNhbGl6YXRpb24uIEl0IHB1cmVseSByZWdy
ZXNzZXMgbmFpdmVseSBnZW5lcmF0ZWQgY29kZS4gV2UgcmVseQotICAgICAgICAgICAgLy8gb24g
Y29uc3RhbnQgbWF0ZXJpYWxpemF0aW9uIHRvIGJlIHNtYXJ0IGVub3VnaCB0byBtYXRlcmlhbGl6
ZSB0aGlzIGNvbnN0YW50IHRoZSBzbWFydAotICAgICAgICAgICAgLy8gd2F5LiBXZSB3YW50IHRo
aXMgY2Fub25pY2FsaXphdGlvbiBiZWNhdXNlIHdlIHdhbnQgdG8ga25vdyBpZiB0d28gbWVtb3J5
IGFjY2Vzc2VzIHNlZQotICAgICAgICAgICAgLy8gdGhlIHNhbWUgYWRkcmVzcy4KLSAgICAgICAg
ICAgIGlmIChtZW1vcnktPm9mZnNldCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFZhbHVlKiBu
ZXdBZGRyZXNzID0gYWRkcmVzcy0+YWRkQ29uc3RhbnQobV9wcm9jLCBtZW1vcnktPm9mZnNldCgp
KSkgewotICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRWYWx1ZShtX2lu
ZGV4LCBuZXdBZGRyZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgYWRkcmVzcyA9IG5ld0FkZHJl
c3M7Ci0gICAgICAgICAgICAgICAgICAgIG1lbW9yeS0+bGFzdENoaWxkKCkgPSBuZXdBZGRyZXNz
OwotICAgICAgICAgICAgICAgICAgICBtZW1vcnktPnNldE9mZnNldCgwKTsKLSAgICAgICAgICAg
ICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAg
ICAgICAvLyBJZiB3ZSBkbyBDU0UgYmVmb3JlIERDRSwgd2Ugd2lsbCByZW1vdmUgQHRoaW5nIGFu
ZCBrZWVwIEBkZWFkLiBFZmZlY3RpdmVseSwgd2Ugd2lsbAorICAgICAgICAgICAgLy8gImhvaXN0
IiBAdGhpbmcuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB3ZSBydW4gRENFIGJlZm9yZSBDU0UsIHdl
IHdpbGwga2lsbCBAZGVhZCBhbmQKKyAgICAgICAgICAgIC8vIGtlZXAgQHRoaW5nLiBUaGF0J3Mg
YmV0dGVyLCBzaW5jZSB3ZSB1c3VhbGx5IHdhbnQgdGhpbmdzIHRvIHN0YXkgd2hlcmV2ZXIgdGhl
IGNsaWVudAorICAgICAgICAgICAgLy8gcHV0IHRoZW0uIFdlJ3JlIG5vdCBhY3R1YWxseSBzbWFy
dCBlbm91Z2ggdG8gbW92ZSB0aGluZ3MgYXJvdW5kIGF0IHJhbmRvbS4KKyAgICAgICAgICAgIG1f
Y2hhbmdlZCB8PSBlbGltaW5hdGVEZWFkQ29kZUltcGwobV9wcm9jKTsKIAotICAgICAgICBjYXNl
IENDYWxsOiB7Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IENhbGwoZm1vZCwgY29uc3RhbnQx
LCBjb25zdGFudDIpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGZjYWxsLWNvbnN0YW50KGNv
bnN0YW50MSwgY29uc3RhbnQyKQotICAgICAgICAgICAgYXV0byogZm1vZERvdWJsZSA9IHRhZ0NG
dW5jdGlvblB0cjxkb3VibGUgKCopKGRvdWJsZSwgZG91YmxlKT4oZm1vZCwgQjNDQ2FsbFB0clRh
Zyk7Ci0gICAgICAgICAgICBpZiAobV92YWx1ZS0+dHlwZSgpID09IERvdWJsZQotICAgICAgICAg
ICAgICAgICYmIG1fdmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMwotICAgICAgICAgICAgICAgICYm
IG1fdmFsdWUtPmNoaWxkKDApLT5pc0ludFB0cihyZWludGVycHJldF9jYXN0PGludHB0cl90Pihm
bW9kRG91YmxlKSkKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+dHlwZSgp
ID09IERvdWJsZQotICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDIpLT50eXBlKCkg
PT0gRG91YmxlKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShtX3ZhbHVl
LT5jaGlsZCgxKS0+bW9kQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgyKSkpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBF
cXVhbDoKLSAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKLQotICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBFcXVhbChib29sLCAwKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBC
aXRYb3IoYm9vbCwgMSkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+cmV0dXJu
c0Jvb2woKSAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQzMigwKSkgewotICAgICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgQml0WG9yLCBt
X3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCksCi0gICAgICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDMyVmFsdWU+KG1faW5kZXgsIG1fdmFsdWUtPm9y
aWdpbigpLCAxKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpcyBFcXVhbChib29sLCAxKQotICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiBib29sCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQo
MCktPnJldHVybnNCb29sKCkgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50MzIoMSkpIHsKLSAg
ICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNpbXBsaWZ5
U1NBKCk7CiAKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRXF1YWwoY29uc3QxLCBjb25zdDIp
Ci0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0MSA9PSBjb25zdDIKLSAgICAgICAgICAg
IHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25z
dGFudCgKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+b3JpZ2luKCksCi0gICAgICAgICAg
ICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLT5lcXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxk
KDEpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBO
b3RFcXVhbDoKLSAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKLQotICAgICAgICAg
ICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5yZXR1cm5zQm9vbCgpKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gVHVybiB0aGlzOiBOb3RFcXVhbChib29sLCAwKQotICAgICAgICAgICAgICAgIC8vIElu
dG8gdGhpczogYm9vbAotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJ
bnQzMigwKSkgewotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFs
dWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTm90
RXF1YWwoYm9vbCwgMSkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEVxdWFsKGJvb2ws
IDApCi0gICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludDMyKDEpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPigKLSAgICAgICAgICAg
ICAgICAgICAgICAgIEVxdWFsLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRJbnRDb25zdGFu
dChtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4oKSwgSW50MzIsIDApKTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fcHJvYy5v
cHRMZXZlbCgpID49IDIpIHsKKyAgICAgICAgICAgICAgICBtX3Byb2MucmVzZXRWYWx1ZU93bmVy
cygpOworICAgICAgICAgICAgICAgIG1fZG9taW5hdG9ycyA9ICZtX3Byb2MuZG9taW5hdG9ycygp
OyAvLyBSZWNvbXB1dGUgaWYgbmVjZXNzYXJ5LgorICAgICAgICAgICAgICAgIG1fcHVyZUNTRS5j
bGVhcigpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE5vdEVx
dWFsKGNvbnN0MSwgY29uc3QyKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdDEgIT0g
Y29uc3QyCi0gICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAg
IG1fcHJvYy5hZGRCb29sQ29uc3RhbnQoCi0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPm9y
aWdpbigpLAotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+bm90RXF1YWxD
b25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgTGVzc1RoYW46Ci0gICAgICAgIGNhc2UgR3JlYXRlclRoYW46Ci0gICAgICAgIGNh
c2UgTGVzc0VxdWFsOgotICAgICAgICBjYXNlIEdyZWF0ZXJFcXVhbDoKLSAgICAgICAgY2FzZSBB
Ym92ZToKLSAgICAgICAgY2FzZSBCZWxvdzoKLSAgICAgICAgY2FzZSBBYm92ZUVxdWFsOgotICAg
ICAgICBjYXNlIEJlbG93RXF1YWw6IHsKLSAgICAgICAgICAgIENhbm9uaWNhbGl6ZWRDb21wYXJp
c29uIGNvbXBhcmlzb24gPSBjYW5vbmljYWxpemVDb21wYXJpc29uKG1fdmFsdWUpOwotICAgICAg
ICAgICAgVHJpU3RhdGUgcmVzdWx0ID0gTWl4ZWRUcmlTdGF0ZTsKLSAgICAgICAgICAgIHN3aXRj
aCAoY29tcGFyaXNvbi5vcGNvZGUpIHsKLSAgICAgICAgICAgIGNhc2UgTGVzc1RoYW46Ci0gICAg
ICAgICAgICAgICAgcmVzdWx0ID0gY29tcGFyaXNvbi5vcGVyYW5kc1sxXS0+Z3JlYXRlclRoYW5D
b25zdGFudChjb21wYXJpc29uLm9wZXJhbmRzWzBdKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgR3JlYXRlclRoYW46Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0g
Y29tcGFyaXNvbi5vcGVyYW5kc1sxXS0+bGVzc1RoYW5Db25zdGFudChjb21wYXJpc29uLm9wZXJh
bmRzWzBdKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTGVzc0Vx
dWFsOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXBhcmlzb24ub3BlcmFuZHNbMV0tPmdy
ZWF0ZXJFcXVhbENvbnN0YW50KGNvbXBhcmlzb24ub3BlcmFuZHNbMF0pOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBHcmVhdGVyRXF1YWw6Ci0gICAgICAgICAgICAg
ICAgcmVzdWx0ID0gY29tcGFyaXNvbi5vcGVyYW5kc1sxXS0+bGVzc0VxdWFsQ29uc3RhbnQoY29t
cGFyaXNvbi5vcGVyYW5kc1swXSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIEFib3ZlOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXBhcmlzb24ub3BlcmFu
ZHNbMV0tPmJlbG93Q29uc3RhbnQoY29tcGFyaXNvbi5vcGVyYW5kc1swXSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEJlbG93OgotICAgICAgICAgICAgICAgIHJl
c3VsdCA9IGNvbXBhcmlzb24ub3BlcmFuZHNbMV0tPmFib3ZlQ29uc3RhbnQoY29tcGFyaXNvbi5v
cGVyYW5kc1swXSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFi
b3ZlRXF1YWw6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcGFyaXNvbi5vcGVyYW5kc1sx
XS0+YmVsb3dFcXVhbENvbnN0YW50KGNvbXBhcmlzb24ub3BlcmFuZHNbMF0pOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBCZWxvd0VxdWFsOgotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IGNvbXBhcmlzb24ub3BlcmFuZHNbMV0tPmFib3ZlRXF1YWxDb25zdGFudChj
b21wYXJpc29uLm9wZXJhbmRzWzBdKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFBl
ZXBob2xlT3B0aW1pemVyIHBlZXBob2xlKG1fcHJvYywgbV9pbnNlcnRpb25TZXQpOworICAgICAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYy5ibG9ja3NJblByZU9yZGVyKCkp
IHsKKyAgICAgICAgICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CiAKLSAgICAgICAgICAgIGlmIChh
dXRvKiBjb25zdGFudCA9IG1fcHJvYy5hZGRCb29sQ29uc3RhbnQobV92YWx1ZS0+b3JpZ2luKCks
IHJlc3VsdCkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0YW50
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChjb21wYXJpc29uLm9wY29kZSAhPSBtX3ZhbHVlLT5vcGNvZGUoKSkgewotICAgICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPihjb21wYXJpc29uLm9wY29kZSwgbV92YWx1ZS0+b3Jp
Z2luKCksIGNvbXBhcmlzb24ub3BlcmFuZHNbMF0sIGNvbXBhcmlzb24ub3BlcmFuZHNbMV0pOwot
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGZvciAobV9pbmRleCA9IDA7
IG1faW5kZXggPCBibG9jay0+c2l6ZSgpOyArK21faW5kZXgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKEIzUmVkdWNlU3RyZW5ndGhJbnRlcm5hbDo6dmVyYm9zZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTG9va2lu
ZyBhdCAiLCAqYmxvY2ssICIgIyIsIG1faW5kZXgsICI6ICIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVlcER1bXAobV9wcm9jLCBibG9jay0+YXQobV9pbmRleCkpLCAiXG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlID0gbV9ibG9j
ay0+YXQobV9pbmRleCk7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPnBlcmZvcm1TdWJz
dGl0dXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgcGVlcGhvbGUuc2V0SW5kZXgobV9pbmRl
eCk7CisgICAgICAgICAgICAgICAgICAgIHJlZHVjZVZhbHVlU3RyZW5ndGgocGVlcGhvbGUpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAobV9wcm9jLm9wdExldmVsKCkgPj0gMikKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlcGxhY2VJZlJlZHVuZGFudCgpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKG1fYmxvY2spOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEVx
dWFsT3JVbm9yZGVyZWQ6Ci0gICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7Ci0KLSAg
ICAgICAgICAgIC8vIFR1cm4gdGhpczogRXF1YWwoY29uc3QxLCBjb25zdDIpCi0gICAgICAgICAg
ICAvLyBJbnRvIHRoaXM6IGlzdW5vcmRlcmVkKGNvbnN0MSwgY29uc3QyKSB8fCBjb25zdDEgPT0g
Y29uc3QyLgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBFcXVhbCh2YWx1ZSwgY29uc3RfTmFO
KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiAxLgotICAgICAgICAgICAgcmVwbGFjZVdpdGhO
ZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICBtX3Byb2MuYWRkQm9vbENvbnN0YW50KAotICAgICAg
ICAgICAgICAgICAgICBtX3ZhbHVlLT5vcmlnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgbV92
YWx1ZS0+Y2hpbGQoMSktPmVxdWFsT3JVbm9yZGVyZWRDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgw
KSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgQ2hlY2tBZGQ6IHsKLSAg
ICAgICAgICAgIGlmIChyZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNoaWxkKDApLT5jaGVj
a0FkZENvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIG1fY2hhbmdlZENGRyB8PSBtX2Jsb2NrSW5zZXJ0aW9uU2V0
LmV4ZWN1dGUoKTsKKyAgICAgICAgICAgIGhhbmRsZUNoYW5nZWRDRkdJZk5lY2Vzc2FyeSgpOwog
Ci0gICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMCkpIHsKLSAgICAgICAgICAgICAg
ICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlc3VsdCB8PSBtX2NoYW5nZWQ7
CisgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCAmJiBtX3Byb2Mub3B0TGV2ZWwoKSA+PSAyKTsK
IAotICAgICAgICAgICAgSW50UmFuZ2UgbGVmdFJhbmdlID0gcmFuZ2VGb3IobV92YWx1ZS0+Y2hp
bGQoMCkpOwotICAgICAgICAgICAgSW50UmFuZ2UgcmlnaHRSYW5nZSA9IHJhbmdlRm9yKG1fdmFs
dWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgIGlmICghbGVmdFJhbmdlLmNvdWxkT3ZlcmZsb3dB
ZGQocmlnaHRSYW5nZSwgbV92YWx1ZS0+dHlwZSgpKSkgewotICAgICAgICAgICAgICAgIHJlcGxh
Y2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgICAgIG1fcHJvYy5hZGQ8VmFsdWU+KEFk
ZCwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgx
KSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGlmIChtX3Byb2Mub3B0TGV2ZWwoKSA8IDIpIHsKKyAgICAgICAgICAg
IG1fY2hhbmdlZENGRyA9IGZhbHNlOworICAgICAgICAgICAgc2ltcGxpZnlDRkcoKTsKKyAgICAg
ICAgICAgIGhhbmRsZUNoYW5nZWRDRkdJZk5lY2Vzc2FyeSgpOwogICAgICAgICB9CiAKLSAgICAg
ICAgY2FzZSBDaGVja1N1YjogewotICAgICAgICAgICAgaWYgKHJlcGxhY2VXaXRoTmV3VmFsdWUo
bV92YWx1ZS0+Y2hpbGQoMCktPmNoZWNrU3ViQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGls
ZCgxKSkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBpZiAobV92YWx1
ZS0+Y2hpbGQoMSktPmlzSW50KDApKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVu
dGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChWYWx1ZSogbmVnYXRlZENvbnN0YW50ID0gbV92YWx1
ZS0+Y2hpbGQoMSktPmNoZWNrTmVnQ29uc3RhbnQobV9wcm9jKSkgewotICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydFZhbHVlKG1faW5kZXgsIG5lZ2F0ZWRDb25zdGFudCk7Ci0g
ICAgICAgICAgICAgICAgbV92YWx1ZS0+YXM8Q2hlY2tWYWx1ZT4oKS0+Y29udmVydFRvQWRkKCk7
Ci0gICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMSkgPSBuZWdhdGVkQ29uc3RhbnQ7Ci0g
ICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAKLSAgICAgICAg
ICAgIEludFJhbmdlIGxlZnRSYW5nZSA9IHJhbmdlRm9yKG1fdmFsdWUtPmNoaWxkKDApKTsKLSAg
ICAgICAgICAgIEludFJhbmdlIHJpZ2h0UmFuZ2UgPSByYW5nZUZvcihtX3ZhbHVlLT5jaGlsZCgx
KSk7Ci0gICAgICAgICAgICBpZiAoIWxlZnRSYW5nZS5jb3VsZE92ZXJmbG93U3ViKHJpZ2h0UmFu
Z2UsIG1fdmFsdWUtPnR5cGUoKSkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1Zh
bHVlKAotICAgICAgICAgICAgICAgICAgICBtX3Byb2MuYWRkPFZhbHVlPihTdWIsIG1fdmFsdWUt
Pm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KK3ByaXZhdGU6CisgICAgdm9pZCByZWR1
Y2VWYWx1ZVN0cmVuZ3RoKFBlZXBob2xlT3B0aW1pemVyJiBwZWVwaG9sZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAobV92YWx1ZS0+b3Bjb2RlKCkpIHsKKyAgICAgICAgY2FzZSBDQ2FsbDoKKyAg
ICAgICAgICAgIG1fY2hhbmdlZCB8PSBwZWVwaG9sZS50cnlTaW1wbGlmeUNDYWxsKG1fdmFsdWUt
PmFzPENDYWxsVmFsdWU+KCkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KIAotICAg
ICAgICBjYXNlIENoZWNrTXVsOiB7Ci0gICAgICAgICAgICBpZiAocmVwbGFjZVdpdGhOZXdWYWx1
ZShtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hlY2tNdWxDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNo
aWxkKDEpKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2hlY2tBZGQ6
CisgICAgICAgICAgICBtX2NoYW5nZWQgfD0gcGVlcGhvbGUudHJ5U2ltcGxpZnlDaGVja0FkZCht
X3ZhbHVlLT5hczxDaGVja1ZhbHVlPigpKTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAg
ICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7Ci0KLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5j
aGlsZCgxKS0+aGFzSW50KCkpIHsKLSAgICAgICAgICAgICAgICBib29sIG1vZGlmaWVkID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPmNoaWxkKDEpLT5hc0ludCgpKSB7
Ci0gICAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0
aE5ld1ZhbHVlKG1fcHJvYy5hZGRJbnRDb25zdGFudChtX3ZhbHVlLCAwKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAg
ICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAg
ICAgICAgbV92YWx1ZS0+YXM8Q2hlY2tWYWx1ZT4oKS0+Y29udmVydFRvQWRkKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gbV92YWx1ZS0+Y2hpbGQoMCk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIG1vZGlm
aWVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBpZiAobW9kaWZpZWQpCi0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQorICAgICAgICBjYXNlIENoZWNrU3ViOgorICAgICAgICAgICAg
bV9jaGFuZ2VkIHw9IHBlZXBob2xlLnRyeVNpbXBsaWZ5Q2hlY2tTdWIobV92YWx1ZS0+YXM8Q2hl
Y2tWYWx1ZT4oKSk7CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgSW50UmFuZ2Ug
bGVmdFJhbmdlID0gcmFuZ2VGb3IobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgSW50
UmFuZ2UgcmlnaHRSYW5nZSA9IHJhbmdlRm9yKG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAg
ICAgIGlmICghbGVmdFJhbmdlLmNvdWxkT3ZlcmZsb3dNdWwocmlnaHRSYW5nZSwgbV92YWx1ZS0+
dHlwZSgpKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAg
ICAgICAgICAgICAgIG1fcHJvYy5hZGQ8VmFsdWU+KE11bCwgbV92YWx1ZS0+b3JpZ2luKCksIG1f
dmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSkpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQorICAgICAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICAgICAg
bV9jaGFuZ2VkIHw9IHBlZXBob2xlLnRyeVNpbXBsaWZ5Q2hlY2tNdWwobV92YWx1ZS0+YXM8Q2hl
Y2tWYWx1ZT4oKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogCiAgICAgICAgIGNh
c2UgQ2hlY2s6IHsKLSAgICAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrVmFsdWUgPSBtX3ZhbHVl
LT5hczxDaGVja1ZhbHVlPigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoY2hlY2tW
YWx1ZS0+Y2hpbGQoMCktPmlzTGlrZVplcm8oKSkgewotICAgICAgICAgICAgICAgIGNoZWNrVmFs
dWUtPnJlcGxhY2VXaXRoTm9wKCk7CisgICAgICAgICAgICBpZiAocGVlcGhvbGUudHJ5U2ltcGxp
ZnlDaGVjayhtX3ZhbHVlLT5hczxDaGVja1ZhbHVlPigpKSkgewogICAgICAgICAgICAgICAgIG1f
Y2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkQ0ZHID0gdHJ1ZTsgLy8g
QSBiaXQgY29uc2VydmF0aXZlLCBidXQgc291bmQuCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjaGVja1ZhbHVlLT5jaGlsZCgwKS0+aXNM
aWtlTm9uWmVybygpKSB7Ci0gICAgICAgICAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBv
aW50ID0KLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFBhdGNocG9p
bnRWYWx1ZT4obV9pbmRleCwgVm9pZCwgY2hlY2tWYWx1ZS0+b3JpZ2luKCkpOwotCi0gICAgICAg
ICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHMoKTsKLSAgICAgICAgICAgICAg
ICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzID0gSGVhcFJhbmdlOjp0b3AoKTsKLSAgICAgICAg
ICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLmV4aXRzU2lkZXdheXMgPSB0cnVlOwotCi0gICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGNoZWNrVmFsdWUtPm51bUNoaWxk
cmVuKCk7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGNoZWNr
VmFsdWUtPmNvbnN0cmFpbmVkQ2hpbGQoaSkpOwotCi0gICAgICAgICAgICAgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKGNoZWNrVmFsdWUtPmdlbmVyYXRvcigpKTsKLQotICAgICAgICAgICAg
ICAgIC8vIFJlcGxhY2UgdGhlIHJlc3Qgb2YgdGhlIGJsb2NrIHdpdGggYW4gT29wcy4KLSAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4ICsgMTsgaSA8IG1fYmxvY2stPnNp
emUoKSAtIDE7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgbV9ibG9jay0+YXQoaSktPnJlcGxh
Y2VXaXRoQm90dG9tKG1faW5zZXJ0aW9uU2V0LCBtX2luZGV4KTsKLSAgICAgICAgICAgICAgICBt
X2Jsb2NrLT5sYXN0KCktPnJlcGxhY2VXaXRoT29wcyhtX2Jsb2NrKTsKLSAgICAgICAgICAgICAg
ICBtX2Jsb2NrLT5sYXN0KCktPnNldE9yaWdpbihjaGVja1ZhbHVlLT5vcmlnaW4oKSk7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBSZXBsYWNlIG91cnNlbHZlcyBsYXN0LgotICAgICAgICAgICAgICAg
IGNoZWNrVmFsdWUtPnJlcGxhY2VXaXRoTm9wKCk7Ci0gICAgICAgICAgICAgICAgbV9jaGFuZ2Vk
Q0ZHID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKGNoZWNrVmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBOb3RFcXVhbAot
ICAgICAgICAgICAgICAgICYmIGNoZWNrVmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQo
MCkpIHsKLSAgICAgICAgICAgICAgICBjaGVja1ZhbHVlLT5jaGlsZCgwKSA9IGNoZWNrVmFsdWUt
PmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwot
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobV9wcm9jLm9wdExl
dmVsKCkgPCAyKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjA1OCw2ICsyNDgsOCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgLy8gYmxvY2tzLiBUaGlzIGlzIHByZXR0eSBtdWNoIGd1YXJh
bnRlZWQgc2luY2Ugb25lIG9mIHRob3NlIGJsb2NrcyB3aWxsIHJlcGxhY2UgYWxsCiAgICAgICAg
ICAgICAvLyB1c2VzIG9mIHRoZSBTZWxlY3Qgd2l0aCBhIGNvbnN0YW50LCBhbmQgdGhhdCBjb25z
dGFudCB3aWxsIGJlIHRyYW5zaXRpdmVseSB1c2VkCiAgICAgICAgICAgICAvLyBmcm9tIHRoZSBj
aGVjay4KKyAgICAgICAgICAgIC8vIEZJWE1FOiB0aGUgY29tbWVudCBhYm92ZSB0YWxrcyBhYm91
dCBhIHNlbGVjdCB3aXRoIG9uZSBjb25zdGFudCBvcGVyYW5kLCBidXQgdGhlIGNvZGUgYmVsb3cK
KyAgICAgICAgICAgIC8vIHNlYXJjaGVzIGZvciBvbmUgd2l0aCBjb25zdGFudHMgb24gYm90aCBz
aWRlcy4KICAgICAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzZWxlY3RTcGVjaWFsaXph
dGlvbkJvdW5kID0gMzsKICAgICAgICAgICAgIFZhbHVlKiBzZWxlY3QgPSBmaW5kUmVjZW50Tm9k
ZU1hdGNoaW5nKAogICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLCBzZWxlY3RTcGVj
aWFsaXphdGlvbkJvdW5kLApAQCAtMjA3NCw2MiArMjY2LDEyIEBAIHByaXZhdGU6CiAgICAgICAg
IH0KIAogICAgICAgICBjYXNlIEJyYW5jaDogewotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBC
cmFuY2goTm90RXF1YWwoeCwgMCkpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJyYW5jaCh4
KQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBOb3RFcXVh
bCAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50KDApKSB7Ci0gICAgICAgICAg
ICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0g
ICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgLy8gVHVybiB0aGlzOiBCcmFuY2goRXF1YWwoeCwgMCksIHRoZW4sIGVsc2UpCi0gICAg
ICAgICAgICAvLyBJbnRvIHRoaXM6IEJyYW5jaCh4LCBlbHNlLCB0aGVuKQotICAgICAgICAgICAg
aWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBFcXVhbCAmJiBtX3ZhbHVlLT5jaGls
ZCgwKS0+Y2hpbGQoMSktPmlzSW50KDApKSB7Ci0gICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hp
bGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgc3Rk
Ojpzd2FwKG1fYmxvY2stPnRha2VuKCksIG1fYmxvY2stPm5vdFRha2VuKCkpOwotICAgICAgICAg
ICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIC8vIFR1cm4gdGhpczogQnJhbmNoKEJpdFhvcihib29sLCAxKSwgdGhlbiwgZWxz
ZSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQnJhbmNoKGJvb2wsIGVsc2UsIHRoZW4pCi0g
ICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdFhvcgotICAg
ICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQzMigxKQot
ICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKS0+cmV0dXJuc0Jv
b2woKSkgewotICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hp
bGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIHN0ZDo6c3dhcChtX2Jsb2NrLT50YWtl
bigpLCBtX2Jsb2NrLT5ub3RUYWtlbigpKTsKLSAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0
cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJyYW5jaChC
aXRBbmQoYm9vbCwgeHliMSksIHRoZW4sIGVsc2UpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6
IEJyYW5jaChib29sLCB0aGVuLCBlbHNlKQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxk
KDApLT5vcGNvZGUoKSA9PSBCaXRBbmQKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGls
ZCgwKS0+Y2hpbGQoMSktPmhhc0ludCgpCi0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hp
bGQoMCktPmNoaWxkKDEpLT5hc0ludCgpICYgMQotICAgICAgICAgICAgICAgICYmIG1fdmFsdWUt
PmNoaWxkKDApLT5jaGlsZCgwKS0+cmV0dXJuc0Jvb2woKSkgewotICAgICAgICAgICAgICAgIG1f
dmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOworICAgICAgICAg
ICAgaWYgKHBlZXBob2xlLnRyeVNpbXBsaWZ5QnJhbmNoKG1fdmFsdWUpKSB7CiAgICAgICAgICAg
ICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWRDRkcgPSB0
cnVlOyAvLyBBIGJpdCBjb25zZXJ2YXRpdmUsIGJ1dCBuZXZlciB1bnNvdW5kLgogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBUcmlTdGF0ZSB0cmlTdGF0ZSA9IG1fdmFsdWUtPmNoaWxkKDAp
LT5hc1RyaVN0YXRlKCk7Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQnJhbmNoKDAsIHRo
ZW4sIGVsc2UpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEp1bXAoZWxzZSkKLSAgICAgICAg
ICAgIGlmICh0cmlTdGF0ZSA9PSBGYWxzZVRyaVN0YXRlKSB7Ci0gICAgICAgICAgICAgICAgbV9i
bG9jay0+dGFrZW4oKS5ibG9jaygpLT5yZW1vdmVQcmVkZWNlc3NvcihtX2Jsb2NrKTsKLSAgICAg
ICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aEp1bXAobV9ibG9jaywgbV9ibG9jay0+bm90
VGFrZW4oKSk7Ci0gICAgICAgICAgICAgICAgbV9jaGFuZ2VkQ0ZHID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlz
OiBCcmFuY2gobm90IDAsIHRoZW4sIGVsc2UpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEp1
bXAodGhlbikKLSAgICAgICAgICAgIGlmICh0cmlTdGF0ZSA9PSBUcnVlVHJpU3RhdGUpIHsKLSAg
ICAgICAgICAgICAgICBtX2Jsb2NrLT5ub3RUYWtlbigpLmJsb2NrKCktPnJlbW92ZVByZWRlY2Vz
c29yKG1fYmxvY2spOwotICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSnVtcCht
X2Jsb2NrLCBtX2Jsb2NrLT50YWtlbigpKTsKLSAgICAgICAgICAgICAgICBtX2NoYW5nZWRDRkcg
PSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAobV9wcm9jLm9wdExldmVsKCkgPj0gMikgeworICAgICAgICAgICAgaWYgKG1fdmFs
dWUtPm9wY29kZSgpID09IEJyYW5jaCAmJiBtX3Byb2Mub3B0TGV2ZWwoKSA+PSAyKSB7CiAgICAg
ICAgICAgICAgICAgLy8gSWYgYSBjaGVjayBmb3IgdGhlIHNhbWUgcHJvcGVydHkgZG9taW5hdGVz
IHVzLCB3ZSBjYW4ga2lsbCB0aGUgYnJhbmNoLiBUaGlzIHNvcnQKICAgICAgICAgICAgICAgICAv
LyBvZiBtYWtlcyBzZW5zZSBoZXJlIGJlY2F1c2UgaXQncyBjaGVhcCwgYnV0IGhhY2tzIGxpa2Ug
dGhpcyBzaG93IHRoYXQgd2UncmUgZ29pbmcKICAgICAgICAgICAgICAgICAvLyB0byBuZWVkIFND
Q1AuCkBAIC0yMTQ3LDYgKzI4OSwxMCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmIChWYWx1ZSogbmV3VmFsdWUgPSBw
ZWVwaG9sZS50cnlSZWR1Y2UobV92YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICByZXBsYWNlV2l0
aElkZW50aXR5KG5ld1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwor
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0y
MjkyLDI0OSArNDM4LDYgQEAgcHJpdmF0ZToKICAgICAgICAgcHJlZGVjZXNzb3ItPnVwZGF0ZVBy
ZWRlY2Vzc29yc0FmdGVyKCk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkU3dhcEJp
bmFyeU9wZXJhbmRzKFZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIC8vIE5vdGUgdGhhdCB3
ZSBoYXZlIGNvbW11dGF0aXZlIG9wZXJhdGlvbnMgdGhhdCB0YWtlIG1vcmUgdGhhbiB0d28gY2hp
bGRyZW4uIFRob3NlIG9wZXJhdGlvbnMgbWF5Ci0gICAgICAgIC8vIGNvbW11dGUgdGhlaXIgZmly
c3QgdHdvIGNoaWxkcmVuIHdoaWxlIGxlYXZpbmcgdGhlIHJlc3QgdW5hZmZlY3RlZC4KLSAgICAg
ICAgQVNTRVJUKHZhbHVlLT5udW1DaGlsZHJlbigpID49IDIpOwotCi0gICAgICAgIC8vIExlYXZl
IGl0IGFsb25lIGlmIHRoZSByaWdodCBjaGlsZCBpcyBhIGNvbnN0YW50LgotICAgICAgICBpZiAo
dmFsdWUtPmNoaWxkKDEpLT5pc0NvbnN0YW50KCkKLSAgICAgICAgICAgIHx8IHZhbHVlLT5jaGls
ZCgwKS0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIGlmICh2YWx1ZS0+Y2hpbGQoMCktPmlzQ29uc3RhbnQoKSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGlmICh2YWx1ZS0+Y2hpbGQoMSktPm9wY29k
ZSgpID09IEF0b21pY1N0cm9uZ0NBUykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
ICAgIC8vIFNvcnQgdGhlIG9wZXJhbmRzLiBUaGlzIGlzIGFuIGltcG9ydGFudCBjYW5vbmljYWxp
emF0aW9uLiBXZSB1c2UgdGhlIGluZGV4IGluc3RlYWQgb2YKLSAgICAgICAgLy8gdGhlIGFkZHJl
c3MgdG8gbWFrZSB0aGlzIGF0IGxlYXN0IHNsaWdodGx5IGRldGVybWluaXN0aWMuCi0gICAgICAg
IGlmICh2YWx1ZS0+Y2hpbGQoMCktPmluZGV4KCkgPiB2YWx1ZS0+Y2hpbGQoMSktPmluZGV4KCkp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgLy8gVHVybiB0aGlzOiBBZGQoY29uc3RhbnQsIHZhbHVlKQotICAgIC8vIEludG8g
dGhpczogQWRkKHZhbHVlLCBjb25zdGFudCkKLSAgICAvLwotICAgIC8vIEFsc286Ci0gICAgLy8g
VHVybiB0aGlzOiBBZGQodmFsdWUxLCB2YWx1ZTIpCi0gICAgLy8gSW50byB0aGlzOiBBZGQodmFs
dWUyLCB2YWx1ZTEpCi0gICAgLy8gSWYgd2UgZGVjaWRlIHRoYXQgdmFsdWUyIGNvbWluZyBmaXJz
dCBpcyB0aGUgY2Fub25pY2FsIG9yZGVyaW5nLgotICAgIHZvaWQgaGFuZGxlQ29tbXV0YXRpdml0
eSgpCi0gICAgewotICAgICAgICBpZiAoc2hvdWxkU3dhcEJpbmFyeU9wZXJhbmRzKG1fdmFsdWUp
KSB7Ci0gICAgICAgICAgICBzdGQ6OnN3YXAobV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNo
aWxkKDEpKTsKLSAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBGb3IgT3A9PUFkZCBvciBTdWIsIHR1cm4gYW55IG9mIHRoZXNlOgotICAgIC8v
ICAgICAgT3AoTXVsKHgxLCB4MiksIE11bCh4MSwgeDMpKQotICAgIC8vICAgICAgT3AoTXVsKHgy
LCB4MSksIE11bCh4MSwgeDMpKQotICAgIC8vICAgICAgT3AoTXVsKHgxLCB4MiksIE11bCh4Mywg
eDEpKQotICAgIC8vICAgICAgT3AoTXVsKHgyLCB4MSksIE11bCh4MywgeDEpKQotICAgIC8vIElu
dG8gdGhpczogTXVsKHgxLCBPcCh4MiwgeDMpKQotICAgIGJvb2wgaGFuZGxlTXVsRGlzdHJpYnV0
aXZpdHkoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdmFsdWUtPm9wY29kZSgpID09IEFkZCB8
fCBtX3ZhbHVlLT5vcGNvZGUoKSA9PSBTdWIpOwotICAgICAgICBWYWx1ZSogeDEgPSBudWxscHRy
OwotICAgICAgICBWYWx1ZSogeDIgPSBudWxscHRyOwotICAgICAgICBWYWx1ZSogeDMgPSBudWxs
cHRyOwotICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IE11bCAmJiBt
X3ZhbHVlLT5jaGlsZCgxKS0+b3Bjb2RlKCkgPT0gTXVsKSB7Ci0gICAgICAgICAgICBWYWx1ZSog
eDEgPSBudWxscHRyOwotICAgICAgICAgICAgVmFsdWUqIHgyID0gbnVsbHB0cjsKLSAgICAgICAg
ICAgIFZhbHVlKiB4MyA9IG51bGxwdHI7Ci0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQo
MCktPmNoaWxkKDApID09IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKSkgewotICAgICAgICAg
ICAgICAgIC8vIE9wKE11bCh4MSwgeDIpLCBNdWwoeDEsIHgzKSkKLSAgICAgICAgICAgICAgICB4
MSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICB4MiA9IG1f
dmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKTsKLSAgICAgICAgICAgICAgICB4MyA9IG1fdmFsdWUt
PmNoaWxkKDEpLT5jaGlsZCgxKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV92YWx1ZS0+Y2hp
bGQoMCktPmNoaWxkKDEpID09IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKSkgewotICAgICAg
ICAgICAgICAgIC8vIE9wKE11bCh4MiwgeDEpLCBNdWwoeDEsIHgzKSkKLSAgICAgICAgICAgICAg
ICB4MSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKTsKLSAgICAgICAgICAgICAgICB4MiA9
IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICB4MyA9IG1fdmFs
dWUtPmNoaWxkKDEpLT5jaGlsZCgxKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV92YWx1ZS0+
Y2hpbGQoMCktPmNoaWxkKDApID09IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgxKSkgewotICAg
ICAgICAgICAgICAgIC8vIE9wKE11bCh4MSwgeDIpLCBNdWwoeDMsIHgxKSkKLSAgICAgICAgICAg
ICAgICB4MSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICB4
MiA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKTsKLSAgICAgICAgICAgICAgICB4MyA9IG1f
dmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV92YWx1
ZS0+Y2hpbGQoMCktPmNoaWxkKDEpID09IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgxKSkgewot
ICAgICAgICAgICAgICAgIC8vIE9wKE11bCh4MiwgeDEpLCBNdWwoeDMsIHgxKSkKLSAgICAgICAg
ICAgICAgICB4MSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKTsKLSAgICAgICAgICAgICAg
ICB4MiA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICB4MyA9
IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBpZiAoeDEgIT0gbnVsbHB0cikgewotICAgICAgICAgICAgQVNTRVJUKHgyICE9IG51
bGxwdHIgJiYgeDMgIT0gbnVsbHB0cik7Ci0gICAgICAgICAgICBWYWx1ZSogbmV3T3AgPSBtX2lu
c2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIG1fdmFsdWUtPm9wY29kZSgpLCBtX3Zh
bHVlLT5vcmlnaW4oKSwgeDIsIHgzKTsKLSAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVl
PihNdWwsIG1fdmFsdWUtPm9yaWdpbigpLCB4MSwgbmV3T3ApOwotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8v
IEZvciBPcD09Qml0T3Igb3IgQml0WG9yLCB0dXJuIGFueSBvZiB0aGVzZToKLSAgICAvLyAgICAg
IE9wKEJpdEFuZCh4MSwgeDIpLCBCaXRBbmQoeDEsIHgzKSkKLSAgICAvLyAgICAgIE9wKEJpdEFu
ZCh4MiwgeDEpLCBCaXRBbmQoeDEsIHgzKSkKLSAgICAvLyAgICAgIE9wKEJpdEFuZCh4MSwgeDIp
LCBCaXRBbmQoeDMsIHgxKSkKLSAgICAvLyAgICAgIE9wKEJpdEFuZCh4MiwgeDEpLCBCaXRBbmQo
eDMsIHgxKSkKLSAgICAvLyBJbnRvIHRoaXM6IEJpdEFuZChPcCh4MiwgeDMpLCB4MSkKLSAgICAv
LyBBbmQgYW55IG9mIHRoZXNlOgotICAgIC8vICAgICAgT3AoQml0QW5kKHgxLCB4MiksIHgxKQot
ICAgIC8vICAgICAgT3AoQml0QW5kKHgyLCB4MSksIHgxKQotICAgIC8vICAgICAgT3AoeDEsIEJp
dEFuZCh4MSwgeDIpKQotICAgIC8vICAgICAgT3AoeDEsIEJpdEFuZCh4MiwgeDEpKQotICAgIC8v
IEludG8gdGhpczogQml0QW5kKE9wKHgyLCB4MSksIHgxKQotICAgIC8vIFRoaXMgc2Vjb25kIHNl
dCBpcyBlcXVpdmFsZW50IHRvIGRvaW5nIHgxID0+IEJpdEFuZCh4MSwgeDEpLCBhbmQgdGhlbiBh
cHBseWluZyB0aGUgZmlyc3Qgc2V0LgotICAgIC8vIEl0IGRvZXMgbm90IHJlZHVjZSB0aGUgbnVt
YmVyIG9mIG9wZXJhdGlvbnMgZXhlY3V0ZWQsIGJ1dCBwcm92aWRlcyBzb21lIHVzZWZ1bCBub3Jt
YWxpemF0aW9uOiB3ZSBwcmVmZXIgdG8gaGF2ZSBCaXRBbmQgYXQgdGhlIG91dGVybW9zdCwgdGhl
biBCaXRYb3IsIGFuZCBmaW5hbGx5IEJpdE9yIGF0IHRoZSBpbm5lcm1vc3QKLSAgICBib29sIGhh
bmRsZUJpdEFuZERpc3RyaWJ1dGl2aXR5KCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3ZhbHVl
LT5vcGNvZGUoKSA9PSBCaXRPciB8fCBtX3ZhbHVlLT5vcGNvZGUoKSA9PSBCaXRYb3IpOwotICAg
ICAgICBWYWx1ZSogeDEgPSBudWxscHRyOwotICAgICAgICBWYWx1ZSogeDIgPSBudWxscHRyOwot
ICAgICAgICBWYWx1ZSogeDMgPSBudWxscHRyOwotICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQo
MCktPm9wY29kZSgpID09IEJpdEFuZCAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+b3Bjb2RlKCkgPT0g
Qml0QW5kKSB7Ci0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApID09
IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKSkgewotICAgICAgICAgICAgICAgIHgxID0gbV92
YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIHgyID0gbV92YWx1ZS0+
Y2hpbGQoMCktPmNoaWxkKDEpOwotICAgICAgICAgICAgICAgIHgzID0gbV92YWx1ZS0+Y2hpbGQo
MSktPmNoaWxkKDEpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMSkgPT0gbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDApKSB7Ci0gICAgICAgICAgICAg
ICAgeDEgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSk7Ci0gICAgICAgICAgICAgICAgeDIg
PSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgeDMgPSBtX3Zh
bHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fdmFsdWUt
PmNoaWxkKDApLT5jaGlsZCgwKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSkpIHsKLSAg
ICAgICAgICAgICAgICB4MSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAg
ICAgICAgICB4MiA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKTsKLSAgICAgICAgICAgICAg
ICB4MyA9IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKTsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpID09IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGls
ZCgxKSkgewotICAgICAgICAgICAgICAgIHgxID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEp
OwotICAgICAgICAgICAgICAgIHgyID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAg
ICAgICAgICAgICAgIHgzID0gbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDApOwotICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBC
aXRBbmQpIHsKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkgPT0g
bV92YWx1ZS0+Y2hpbGQoMSkpIHsKLSAgICAgICAgICAgICAgICB4MSA9IHgzID0gbV92YWx1ZS0+
Y2hpbGQoMSk7Ci0gICAgICAgICAgICAgICAgeDIgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQo
MSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSA9
PSBtX3ZhbHVlLT5jaGlsZCgxKSkgewotICAgICAgICAgICAgICAgIHgxID0geDMgPSBtX3ZhbHVl
LT5jaGlsZCgxKTsKLSAgICAgICAgICAgICAgICB4MiA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGls
ZCgwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChtX3ZhbHVlLT5jaGlsZCgx
KS0+b3Bjb2RlKCkgPT0gQml0QW5kKSB7Ci0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQo
MSktPmNoaWxkKDApID09IG1fdmFsdWUtPmNoaWxkKDApKSB7Ci0gICAgICAgICAgICAgICAgeDEg
PSB4MyA9IG1fdmFsdWUtPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIHgyID0gbV92YWx1ZS0+
Y2hpbGQoMSktPmNoaWxkKDEpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3ZhbHVlLT5jaGls
ZCgxKS0+Y2hpbGQoMSkgPT0gbV92YWx1ZS0+Y2hpbGQoMCkpIHsKLSAgICAgICAgICAgICAgICB4
MSA9IHgzID0gbV92YWx1ZS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgeDIgPSBtX3ZhbHVl
LT5jaGlsZCgxKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKHgxICE9IG51bGxwdHIpIHsKLSAgICAgICAgICAgIEFTU0VSVCh4MiAhPSBudWxscHRyICYm
IHgzICE9IG51bGxwdHIpOwotICAgICAgICAgICAgVmFsdWUqIGJpdE9wID0gbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBtX3ZhbHVlLT5vcGNvZGUoKSwgbV92YWx1ZS0+b3Jp
Z2luKCksIHgyLCB4Myk7Ci0gICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oQml0QW5k
LCBtX3ZhbHVlLT5vcmlnaW4oKSwgeDEsIGJpdE9wKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzdHJ1Y3Qg
Q2Fub25pY2FsaXplZENvbXBhcmlzb24gewotICAgICAgICBPcGNvZGUgb3Bjb2RlOwotICAgICAg
ICBWYWx1ZSogb3BlcmFuZHNbMl07Ci0gICAgfTsKLSAgICBzdGF0aWMgQ2Fub25pY2FsaXplZENv
bXBhcmlzb24gY2Fub25pY2FsaXplQ29tcGFyaXNvbihWYWx1ZSogdmFsdWUpCi0gICAgewotICAg
ICAgICBhdXRvIGZsaXAgPSBbXSAoT3Bjb2RlIG9wY29kZSkgewotICAgICAgICAgICAgc3dpdGNo
IChvcGNvZGUpIHsKLSAgICAgICAgICAgIGNhc2UgTGVzc1RoYW46Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIEdyZWF0ZXJUaGFuOwotICAgICAgICAgICAgY2FzZSBHcmVhdGVyVGhhbjoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gTGVzc1RoYW47Ci0gICAgICAgICAgICBjYXNlIExlc3NFcXVhbDoK
LSAgICAgICAgICAgICAgICByZXR1cm4gR3JlYXRlckVxdWFsOwotICAgICAgICAgICAgY2FzZSBH
cmVhdGVyRXF1YWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIExlc3NFcXVhbDsKLSAgICAgICAg
ICAgIGNhc2UgQWJvdmU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEJlbG93OwotICAgICAgICAg
ICAgY2FzZSBCZWxvdzoKLSAgICAgICAgICAgICAgICByZXR1cm4gQWJvdmU7Ci0gICAgICAgICAg
ICBjYXNlIEFib3ZlRXF1YWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEJlbG93RXF1YWw7Ci0g
ICAgICAgICAgICBjYXNlIEJlbG93RXF1YWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFib3Zl
RXF1YWw7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBvcGNv
ZGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICAgIGlmIChzaG91bGRTd2FwQmlu
YXJ5T3BlcmFuZHModmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIHsgZmxpcCh2YWx1ZS0+b3Bj
b2RlKCkpLCB7IHZhbHVlLT5jaGlsZCgxKSwgdmFsdWUtPmNoaWxkKDApIH0gfTsKLSAgICAgICAg
cmV0dXJuIHsgdmFsdWUtPm9wY29kZSgpLCB7IHZhbHVlLT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxk
KDEpIH0gfTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcmVhbGx5IGJlIGEg
Zm9yd2FyZCBhbmFseXNpcy4gSW5zdGVhZCwgd2UgdXNlcyBhIGJvdW5kZWQtc2VhcmNoIGJhY2t3
YXJkcwotICAgIC8vIGFuYWx5c2lzLgotICAgIEludFJhbmdlIHJhbmdlRm9yKFZhbHVlKiB2YWx1
ZSwgdW5zaWduZWQgdGltZVRvTGl2ZSA9IDUpCi0gICAgewotICAgICAgICBpZiAoIXRpbWVUb0xp
dmUpCi0gICAgICAgICAgICByZXR1cm4gSW50UmFuZ2U6OnRvcCh2YWx1ZS0+dHlwZSgpKTsKLSAg
ICAgICAgCi0gICAgICAgIHN3aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7Ci0gICAgICAgIGNhc2Ug
Q29uc3QzMjoKLSAgICAgICAgY2FzZSBDb25zdDY0OiB7Ci0gICAgICAgICAgICBpbnQ2NF90IGlu
dFZhbHVlID0gdmFsdWUtPmFzSW50KCk7Ci0gICAgICAgICAgICByZXR1cm4gSW50UmFuZ2UoaW50
VmFsdWUsIGludFZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgQml0QW5kOgotICAg
ICAgICAgICAgaWYgKHZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIEludFJhbmdlOjpyYW5nZUZvck1hc2sodmFsdWUtPmNoaWxkKDEpLT5hc0ludCgpLCB2
YWx1ZS0+dHlwZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1NocjoK
LSAgICAgICAgICAgIGlmICh2YWx1ZS0+Y2hpbGQoMSktPmhhc0ludDMyKCkpIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gcmFuZ2VGb3IodmFsdWUtPmNoaWxkKDApLCB0aW1lVG9MaXZlIC0gMSku
c1NocigKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUtPmNoaWxkKDEpLT5hc0ludDMyKCksIHZh
bHVlLT50eXBlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgY2FzZSBaU2hyOgotICAgICAgICAgICAgaWYgKHZhbHVlLT5jaGlsZCgxKS0+aGFzSW50MzIo
KSkgewotICAgICAgICAgICAgICAgIHJldHVybiByYW5nZUZvcih2YWx1ZS0+Y2hpbGQoMCksIHRp
bWVUb0xpdmUgLSAxKS56U2hyKAotICAgICAgICAgICAgICAgICAgICB2YWx1ZS0+Y2hpbGQoMSkt
PmFzSW50MzIoKSwgdmFsdWUtPnR5cGUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICBjYXNlIFNobDoKLSAgICAgICAgICAgIGlmICh2YWx1ZS0+Y2hpbGQo
MSktPmhhc0ludDMyKCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2VGb3IodmFsdWUt
PmNoaWxkKDApLCB0aW1lVG9MaXZlIC0gMSkuc2hsKAotICAgICAgICAgICAgICAgICAgICB2YWx1
ZS0+Y2hpbGQoMSktPmFzSW50MzIoKSwgdmFsdWUtPnR5cGUoKSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEFkZDoKLSAgICAgICAgICAgIHJldHVy
biByYW5nZUZvcih2YWx1ZS0+Y2hpbGQoMCksIHRpbWVUb0xpdmUgLSAxKS5hZGQoCi0gICAgICAg
ICAgICAgICAgcmFuZ2VGb3IodmFsdWUtPmNoaWxkKDEpLCB0aW1lVG9MaXZlIC0gMSksIHZhbHVl
LT50eXBlKCkpOwotCi0gICAgICAgIGNhc2UgU3ViOgotICAgICAgICAgICAgcmV0dXJuIHJhbmdl
Rm9yKHZhbHVlLT5jaGlsZCgwKSwgdGltZVRvTGl2ZSAtIDEpLnN1YigKLSAgICAgICAgICAgICAg
ICByYW5nZUZvcih2YWx1ZS0+Y2hpbGQoMSksIHRpbWVUb0xpdmUgLSAxKSwgdmFsdWUtPnR5cGUo
KSk7Ci0KLSAgICAgICAgY2FzZSBNdWw6Ci0gICAgICAgICAgICByZXR1cm4gcmFuZ2VGb3IodmFs
dWUtPmNoaWxkKDApLCB0aW1lVG9MaXZlIC0gMSkubXVsKAotICAgICAgICAgICAgICAgIHJhbmdl
Rm9yKHZhbHVlLT5jaGlsZCgxKSwgdGltZVRvTGl2ZSAtIDEpLCB2YWx1ZS0+dHlwZSgpKTsKLQot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gSW50UmFuZ2U6OnRvcCh2YWx1ZS0+dHlwZSgpKTsKLSAgICB9Ci0KICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KICAgICB2b2lk
IHJlcGxhY2VXaXRoTmV3KEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCiAgICAgewpAQCAtMjU1Nywy
NyArNDYwLDYgQEAgcHJpdmF0ZToKICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICB9CiAK
LSAgICB2b2lkIGhhbmRsZVNoaWZ0QW1vdW50KCkKLSAgICB7Ci0gICAgICAgIC8vIFNoaWZ0IGFu
eXRoaW5nIGJ5IHplcm8gaXMgaWRlbnRpdHkuCi0gICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgx
KS0+aXNJbnQzMigwKSkgewotICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVl
LT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBUaGUgc2hpZnQgYWxyZWFkeSBtYXNrcyBpdHMgc2hpZnQgYW1vdW50LiBJZiB0aGUgc2hpZnQg
YW1vdW50IGlzIGJlaW5nIG1hc2tlZCBieSBhCi0gICAgICAgIC8vIHJlZHVuZGFudCBhbW91bnQs
IHRoZW4gcmVtb3ZlIHRoZSBtYXNrLiBGb3IgZXhhbXBsZSwKLSAgICAgICAgLy8gVHVybiB0aGlz
OiBTaGwoQHgsIEJpdEFuZChAeSwgNjMpKQotICAgICAgICAvLyBJbnRvIHRoaXM6IFNobChAeCwg
QHkpCi0gICAgICAgIHVuc2lnbmVkIG1hc2sgPSBzaXplb2ZUeXBlKG1fdmFsdWUtPnR5cGUoKSkg
KiA4IC0gMTsKLSAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5vcGNvZGUoKSA9PSBCaXRB
bmQKLSAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgxKS0+aGFzSW50MzIo
KQotICAgICAgICAgICAgJiYgKG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgxKS0+YXNJbnQzMigp
ICYgbWFzaykgPT0gbWFzaykgewotICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMSkgPSBtX3Zh
bHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwot
ICAgICAgICB9Ci0gICAgfQotCiAgICAgdm9pZCByZXBsYWNlSWZSZWR1bmRhbnQoKQogICAgIHsK
ICAgICAgICAgbV9jaGFuZ2VkIHw9IG1fcHVyZUNTRS5wcm9jZXNzKG1fdmFsdWUsICptX2RvbWlu
YXRvcnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCmluZGV4IGY1Y2Q3
ZDJmMGM5Li5jOTI3MzJkYmJmOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsaWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRl
LmNwcApAQCAtMjI2LDcgKzIyNiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNhc2UgU1NocjoK
ICAgICAgICAgICAgIGNhc2UgWlNocjoKICAgICAgICAgICAgIGNhc2UgUm90UjoKLSAgICAgICAg
ICAgICAgICBjYXNlIFJvdEw6CisgICAgICAgICAgICBjYXNlIFJvdEw6CiAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCkuaGFzRXh0cmFCaXRzKCksICgiQXQgIiwgKnZhbHVl
KSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMiwg
KCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgp
ID09IHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5oCmluZGV4
IDZmODZlYTBkZjBiLi43NjczNjg0ZTY3YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaApAQCAtMjcsNiArMjcsOCBAQAogCiAj
aWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAogY2xhc3MgQ29kZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKaW5kZXggYWE4ZTQ5OTcxNDUuLjJiMjgxZDdhMTZi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcApAQCAtMjM2OSw3ICsyMzY5LDcgQEAg
dm9pZCB0ZXN0TmVnTXVsQXJnSW1tKGludDY0X3QgYSwgaW50NjRfdCBiKQogICAgIFZhbHVlKiBy
ZXN1bHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIE5lZywgT3JpZ2luKCksIG11bCk7
CiAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1
bHQpOwogCi0gICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jLCBhKSA9PSAtKGEg
KiBiKSk7CisgICAgQ0hFQ0tfRVEoY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jLCBhKSwgLShh
ICogYikpOwogfQogCiB2b2lkIHRlc3RTdWJNdWxNdWxBcmdzKGludDY0X3QgYSwgaW50NjRfdCBi
LCBpbnQ2NF90IGMpCkBAIC0xNjg2Myw3ICsxNjg2Myw3IEBAIHZvaWQgdGVzdEZsb2F0RXF1YWxP
clVub3JkZXJlZERvbnRGb2xkKCkKICAgICAgICAgZm9yIChhdXRvJiBzZWNvbmQgOiBmbG9hdGlu
Z1BvaW50T3BlcmFuZHM8ZmxvYXQ+KCkpIHsKICAgICAgICAgICAgIGZsb2F0IGIgPSBzZWNvbmQu
dmFsdWU7CiAgICAgICAgICAgICBib29sIGV4cGVjdGVkUmVzdWx0ID0gKGEgPT0gYikgfHwgc3Rk
Ojppc3Vub3JkZXJlZChhLCBiKTsKLSAgICAgICAgICAgIENIRUNLKCEhaW52b2tlPGludDMyX3Q+
KCpjb2RlLCBzdGF0aWNfY2FzdDxkb3VibGU+KGIpKSA9PSBleHBlY3RlZFJlc3VsdCk7CisgICAg
ICAgICAgICBDSEVDS19FUSghIWludm9rZTxpbnQzMl90PigqY29kZSwgc3RhdGljX2Nhc3Q8ZG91
YmxlPihiKSksIGV4cGVjdGVkUmVzdWx0KTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAppbmRleCBjYzRiYjM5NzZhMS4uMDA4YmZlNDZh
MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAKQEAgLTUwLDYgKzUw
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEIzOwogCiBPdXRwdXQ6Ok91dHB1dChTdGF0ZSYgc3RhdGUp
CiAgICAgOiBtX3Byb2MoKnN0YXRlLnByb2MpCisgICAgLCBtX3BlZXBob2xlKG1fcHJvYykKIHsK
IH0KIApAQCAtODgsNiArODksNyBAQCBMQmFzaWNCbG9jayBPdXRwdXQ6OmFwcGVuZFRvKExCYXNp
Y0Jsb2NrIGJsb2NrLCBMQmFzaWNCbG9jayBuZXh0QmxvY2spCiB2b2lkIE91dHB1dDo6YXBwZW5k
VG8oTEJhc2ljQmxvY2sgYmxvY2spCiB7CiAgICAgbV9ibG9jayA9IGJsb2NrOworICAgIG1fcGVl
cGhvbGUuc2V0QmxvY2sobV9ibG9jayk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmZyYW1lUG9pbnRl
cigpCkBAIC0xMjksMTMzICsxMzEsMTEzIEBAIExWYWx1ZSBPdXRwdXQ6OnBoaShMVHlwZSB0eXBl
KQogCiBMVmFsdWUgT3V0cHV0OjpvcGFxdWUoTFZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBt
X2Jsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgT3BhcXVlLCBvcmlnaW4oKSwgdmFsdWUp
OworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZU9wYXF1ZSh2YWx1ZS0+dHlwZSgpLCBvcmln
aW4oKSwgdmFsdWUpOwogfQogCiBMVmFsdWUgT3V0cHV0OjphZGQoTFZhbHVlIGxlZnQsIExWYWx1
ZSByaWdodCkKIHsKLSAgICBpZiAoVmFsdWUqIHJlc3VsdCA9IGxlZnQtPmFkZENvbnN0YW50KG1f
cHJvYywgcmlnaHQpKSB7Ci0gICAgICAgIG1fYmxvY2stPmFwcGVuZChyZXN1bHQpOwotICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIz
OjpWYWx1ZT4obV9wcm9jLCBCMzo6QWRkLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJl
dHVybiBtX3BlZXBob2xlLnJlZHVjZUFkZChsZWZ0LT50eXBlKCksIG9yaWdpbigpLCBsZWZ0LCBy
aWdodCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OnN1YihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0
KQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIz
OjpTdWIsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVk
dWNlU3ViKGxlZnQtPnR5cGUoKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVl
IE91dHB1dDo6bXVsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgcmV0dXJuIG1f
YmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6Ok11bCwgb3JpZ2luKCksIGxl
ZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VNdWwobGVmdC0+dHlwZSgp
LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0cHV0OjpkaXYoTFZhbHVl
IGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIz
OjpWYWx1ZT4obV9wcm9jLCBCMzo6RGl2LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJl
dHVybiBtX3BlZXBob2xlLnJlZHVjZURpdihsZWZ0LT50eXBlKCksIG9yaWdpbigpLCBsZWZ0LCBy
aWdodCwgZmFsc2UpOwogfQogCiBMVmFsdWUgT3V0cHV0OjpjaGlsbERpdihMVmFsdWUgbGVmdCwg
TFZhbHVlIHJpZ2h0KQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVl
PihtX3Byb2MsIGNoaWxsKEIzOjpEaXYpLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJl
dHVybiBtX3BlZXBob2xlLnJlZHVjZURpdihsZWZ0LT50eXBlKCksIG9yaWdpbigpLCBsZWZ0LCBy
aWdodCwgdHJ1ZSk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6Om1vZChMVmFsdWUgbGVmdCwgTFZhbHVl
IHJpZ2h0KQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3By
b2MsIEIzOjpNb2QsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhv
bGUucmVkdWNlTW9kKGxlZnQtPnR5cGUoKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0LCBmYWxzZSk7
CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmNoaWxsTW9kKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQp
CiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgY2hp
bGwoQjM6Ok1vZCksIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhv
bGUucmVkdWNlTW9kKGxlZnQtPnR5cGUoKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0LCB0cnVlKTsK
IH0KIAogTFZhbHVlIE91dHB1dDo6bmVnKExWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gbV9i
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpOZWcsIG9yaWdpbigpLCB2YWx1ZSk7
CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlTmVnKHZhbHVlLT50eXBlKCksIG9yaWdpbigp
LCB2YWx1ZSk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmRvdWJsZUFkZChMVmFsdWUgbGVmdCwgTFZh
bHVlIHJpZ2h0KQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPiht
X3Byb2MsIEIzOjpBZGQsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVl
cGhvbGUucmVkdWNlQWRkKGxlZnQtPnR5cGUoKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKIH0K
IAogTFZhbHVlIE91dHB1dDo6ZG91YmxlU3ViKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7
Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlN1
Yiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VT
dWIobGVmdC0+dHlwZSgpLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0
cHV0Ojpkb3VibGVNdWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICByZXR1cm4g
bV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6TXVsLCBvcmlnaW4oKSwg
bGVmdCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZU11bChsZWZ0LT50eXBl
KCksIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmRvdWJsZURp
dihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBl
bmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpEaXYsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7
CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlRGl2KGxlZnQtPnR5cGUoKSwgb3JpZ2luKCks
IGxlZnQsIHJpZ2h0LCBmYWxzZSk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmRvdWJsZU1vZChMVmFs
dWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8
QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpNb2QsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAg
cmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlTW9kKGxlZnQtPnR5cGUoKSwgb3JpZ2luKCksIGxlZnQs
IHJpZ2h0LCBmYWxzZSk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmJpdEFuZChMVmFsdWUgbGVmdCwg
TFZhbHVlIHJpZ2h0KQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVl
PihtX3Byb2MsIEIzOjpCaXRBbmQsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJu
IG1fcGVlcGhvbGUucmVkdWNlQml0QW5kKGxlZnQtPnR5cGUoKSwgb3JpZ2luKCksIGxlZnQsIHJp
Z2h0KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6Yml0T3IoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdo
dCkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBC
Mzo6Qml0T3IsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUu
cmVkdWNlQml0T3IobGVmdC0+dHlwZSgpLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBM
VmFsdWUgT3V0cHV0OjpiaXRYb3IoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICBy
ZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Qml0WG9yLCBv
cmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZUJpdFhv
cihsZWZ0LT50eXBlKCksIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1ZSBPdXRw
dXQ6OnNobChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIHJpZ2h0ID0gY2FzdFRv
SW50MzIocmlnaHQpOwotICAgIGlmIChWYWx1ZSogcmVzdWx0ID0gbGVmdC0+c2hsQ29uc3RhbnQo
bV9wcm9jLCByaWdodCkpIHsKLSAgICAgICAgbV9ibG9jay0+YXBwZW5kKHJlc3VsdCk7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8
QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpTaGwsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAg
cmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlU2hsKGxlZnQtPnR5cGUoKSwgb3JpZ2luKCksIGxlZnQs
IGNhc3RUb0ludDMyKHJpZ2h0KSk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmFTaHIoTFZhbHVlIGxl
ZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICByaWdodCA9IGNhc3RUb0ludDMyKHJpZ2h0KTsKLSAg
ICBpZiAoVmFsdWUqIHJlc3VsdCA9IGxlZnQtPnNTaHJDb25zdGFudChtX3Byb2MsIHJpZ2h0KSkg
ewotICAgICAgICBtX2Jsb2NrLT5hcHBlbmQocmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJv
YywgQjM6OlNTaHIsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhv
bGUucmVkdWNlU1NocihsZWZ0LT50eXBlKCksIG9yaWdpbigpLCBsZWZ0LCBjYXN0VG9JbnQzMihy
aWdodCkpOwogfQogCiBMVmFsdWUgT3V0cHV0OjpsU2hyKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmln
aHQpCiB7Ci0gICAgcmlnaHQgPSBjYXN0VG9JbnQzMihyaWdodCk7Ci0gICAgaWYgKFZhbHVlKiBy
ZXN1bHQgPSBsZWZ0LT56U2hyQ29uc3RhbnQobV9wcm9jLCByaWdodCkpIHsKLSAgICAgICAgbV9i
bG9jay0+YXBwZW5kKHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAg
IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpaU2hyLCBv
cmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZVpTaHIo
bGVmdC0+dHlwZSgpLCBvcmlnaW4oKSwgbGVmdCwgY2FzdFRvSW50MzIocmlnaHQpKTsKIH0KIAog
TFZhbHVlIE91dHB1dDo6Yml0Tm90KExWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gbV9ibG9j
ay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Qml0WG9yLCBvcmlnaW4oKSwKLSAg
ICAgICAgdmFsdWUsCi0gICAgICAgIG1fYmxvY2stPmFwcGVuZEludENvbnN0YW50KG1fcHJvYywg
b3JpZ2luKCksIHZhbHVlLT50eXBlKCksIC0xKSk7CisgICAgVmFsdWUqIGFsbE9uZXMgPSBtX2Js
b2NrLT5hcHBlbmRJbnRDb25zdGFudChtX3Byb2MsIG9yaWdpbigpLCB2YWx1ZS0+dHlwZSgpLCAt
MSk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlQml0WG9yKHZhbHVlLT50eXBlKCksIG9y
aWdpbigpLCB2YWx1ZSwgYWxsT25lcyk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmxvZ2ljYWxOb3Qo
TFZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVl
PihtX3Byb2MsIEIzOjpFcXVhbCwgb3JpZ2luKCksIHZhbHVlLCBpbnQzMlplcm8pOworICAgIHJl
dHVybiBtX3BlZXBob2xlLnJlZHVjZUVxdWFsKEludDMyLCBvcmlnaW4oKSwgdmFsdWUsIGludDMy
WmVybyk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmN0bHozMihMVmFsdWUgb3BlcmFuZCkKQEAgLTI2
NSwxNyArMjQ3LDE3IEBAIExWYWx1ZSBPdXRwdXQ6OmN0bHozMihMVmFsdWUgb3BlcmFuZCkKIAog
TFZhbHVlIE91dHB1dDo6ZG91YmxlQWJzKExWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gbV9i
bG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6QWJzLCBvcmlnaW4oKSwgdmFs
dWUpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZUFicyh2YWx1ZS0+dHlwZSgpLCBvcmln
aW4oKSwgdmFsdWUpOwogfQogCi1MVmFsdWUgT3V0cHV0Ojpkb3VibGVDZWlsKExWYWx1ZSBvcGVy
YW5kKQorTFZhbHVlIE91dHB1dDo6ZG91YmxlQ2VpbChMVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0
dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkNlaWwsIG9yaWdp
bigpLCBvcGVyYW5kKTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VDZWlsKHZhbHVlLT50
eXBlKCksIG9yaWdpbigpLCB2YWx1ZSk7CiB9CiAKLUxWYWx1ZSBPdXRwdXQ6OmRvdWJsZUZsb29y
KExWYWx1ZSBvcGVyYW5kKQorTFZhbHVlIE91dHB1dDo6ZG91YmxlRmxvb3IoTFZhbHVlIHZhbHVl
KQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIz
OjpGbG9vciwgb3JpZ2luKCksIG9wZXJhbmQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVj
ZUZsb29yKHZhbHVlLT50eXBlKCksIG9yaWdpbigpLCB2YWx1ZSk7CiB9CiAKIExWYWx1ZSBPdXRw
dXQ6OmRvdWJsZVRydW5jKExWYWx1ZSB2YWx1ZSkKQEAgLTMxMiwxMyArMjk0LDEzIEBAIExWYWx1
ZSBPdXRwdXQ6OmRvdWJsZVBvd2koTFZhbHVlIHgsIExWYWx1ZSB5KQogICAgIC8vIHNob3VsZCBi
ZSBpbnZvbHZlZCBpbiBhbnkgb3BlcmF0aW9uIHRoYXQgY3JlYXRlcyBibG9ja3MuCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjIyMwogICAgIGF1dG8g
cmVzdWx0ID0gcG93RG91YmxlSW50MzIobV9wcm9jLCBtX2Jsb2NrLCBvcmlnaW4oKSwgeCwgeSk7
Ci0gICAgbV9ibG9jayA9IHJlc3VsdC5maXJzdDsKKyAgICBhcHBlbmRUbyhyZXN1bHQuZmlyc3Qp
OwogICAgIHJldHVybiByZXN1bHQuc2Vjb25kOwogfQogCiBMVmFsdWUgT3V0cHV0Ojpkb3VibGVT
cXJ0KExWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpW
YWx1ZT4obV9wcm9jLCBCMzo6U3FydCwgb3JpZ2luKCksIHZhbHVlKTsKKyAgICByZXR1cm4gbV9w
ZWVwaG9sZS5yZWR1Y2VTcXJ0KHZhbHVlLT50eXBlKCksIG9yaWdpbigpLCB2YWx1ZSk7CiB9CiAK
IExWYWx1ZSBPdXRwdXQ6OmRvdWJsZVRvSW50KExWYWx1ZSB2YWx1ZSkKQEAgLTM0Nyw3ICszMjks
NyBAQCBMVmFsdWUgT3V0cHV0Ojpkb3VibGVUb1VJbnQoTFZhbHVlIHZhbHVlKQogCiBMVmFsdWUg
T3V0cHV0OjpzaWduRXh0MzJUbzY0KExWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gbV9ibG9j
ay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6U0V4dDMyLCBvcmlnaW4oKSwgdmFs
dWUpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZVNFeHQzMihJbnQ2NCwgb3JpZ2luKCks
IHZhbHVlKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6c2lnbkV4dDMyVG9QdHIoTFZhbHVlIHZhbHVl
KQpAQCAtMzU5LDE0ICszNDEsMTIgQEAgTFZhbHVlIE91dHB1dDo6emVyb0V4dChMVmFsdWUgdmFs
dWUsIExUeXBlIHR5cGUpCiB7CiAgICAgaWYgKHZhbHVlLT50eXBlKCkgPT0gdHlwZSkKICAgICAg
ICAgcmV0dXJuIHZhbHVlOwotICAgIGlmICh2YWx1ZS0+aGFzSW50MzIoKSkKLSAgICAgICAgcmV0
dXJuIG1fYmxvY2stPmFwcGVuZEludENvbnN0YW50KG1fcHJvYywgb3JpZ2luKCksIEludDY0LCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlLT5hc0ludDMy
KCkpKSk7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywg
QjM6OlpFeHQzMiwgb3JpZ2luKCksIHZhbHVlKTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1
Y2VaRXh0MzIoSW50NjQsIG9yaWdpbigpLCB2YWx1ZSk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6Omlu
dFRvRG91YmxlKExWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3
PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6SVRvRCwgb3JpZ2luKCksIHZhbHVlKTsKKyAgICByZXR1
cm4gbV9wZWVwaG9sZS5yZWR1Y2VJVG9EKERvdWJsZSwgb3JpZ2luKCksIHZhbHVlKTsKIH0KIAog
TFZhbHVlIE91dHB1dDo6dW5zaWduZWRUb0RvdWJsZShMVmFsdWUgdmFsdWUpCkBAIC0zNzgsMTkg
KzM1OCwxNyBAQCBMVmFsdWUgT3V0cHV0OjpjYXN0VG9JbnQzMihMVmFsdWUgdmFsdWUpCiB7CiAg
ICAgaWYgKHZhbHVlLT50eXBlKCkgPT0gSW50MzIpCiAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAg
ICBpZiAodmFsdWUtPmhhc0ludDY0KCkpCi0gICAgICAgIHJldHVybiBjb25zdEludDMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KHZhbHVlLT5hc0ludDY0KCkpKTsKLSAgICByZXR1cm4gbV9ibG9jay0+
YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6VHJ1bmMsIG9yaWdpbigpLCB2YWx1ZSk7
CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlVHJ1bmMoSW50MzIsIG9yaWdpbigpLCB2YWx1
ZSk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmRvdWJsZVRvRmxvYXQoTFZhbHVlIHZhbHVlKQogewot
ICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpEb3Vi
bGVUb0Zsb2F0LCBvcmlnaW4oKSwgdmFsdWUpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVj
ZURvdWJsZVRvRmxvYXQoRmxvYXQsIG9yaWdpbigpLCB2YWx1ZSk7CiB9CiAKIExWYWx1ZSBPdXRw
dXQ6OmZsb2F0VG9Eb3VibGUoTFZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBtX2Jsb2NrLT5h
cHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpGbG9hdFRvRG91YmxlLCBvcmlnaW4oKSwg
dmFsdWUpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZUZsb2F0VG9Eb3VibGUoRG91Ymxl
LCBvcmlnaW4oKSwgdmFsdWUpOwogfQogCiBMVmFsdWUgT3V0cHV0Ojpsb2FkKFR5cGVkUG9pbnRl
ciBwb2ludGVyLCBMVHlwZSB0eXBlKQpAQCAtNDg1LDExNyArNDYzLDg3IEBAIExWYWx1ZSBPdXRw
dXQ6OmJhc2VJbmRleChMVmFsdWUgYmFzZSwgTFZhbHVlIGluZGV4LCBTY2FsZSBzY2FsZSwgcHRy
ZGlmZl90IG9mZnNlCiAKIExWYWx1ZSBPdXRwdXQ6OmVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFsdWUg
cmlnaHQpCiB7Ci0gICAgVHJpU3RhdGUgcmVzdWx0ID0gbGVmdC0+ZXF1YWxDb25zdGFudChyaWdo
dCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBNaXhlZFRyaVN0YXRlKQotICAgICAgICByZXR1cm4gY29u
c3RCb29sKHJlc3VsdCA9PSBUcnVlVHJpU3RhdGUpOwotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBl
bmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpFcXVhbCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0
KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VFcXVhbChJbnQzMiwgb3JpZ2luKCksIGxl
ZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6bm90RXF1YWwoTFZhbHVlIGxlZnQsIExW
YWx1ZSByaWdodCkKIHsKLSAgICBUcmlTdGF0ZSByZXN1bHQgPSBsZWZ0LT5ub3RFcXVhbENvbnN0
YW50KHJpZ2h0KTsKLSAgICBpZiAocmVzdWx0ICE9IE1peGVkVHJpU3RhdGUpCi0gICAgICAgIHJl
dHVybiBjb25zdEJvb2wocmVzdWx0ID09IFRydWVUcmlTdGF0ZSk7Ci0gICAgcmV0dXJuIG1fYmxv
Y2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6Ok5vdEVxdWFsLCBvcmlnaW4oKSwg
bGVmdCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZU5vdEVxdWFsKEludDMy
LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0cHV0OjphYm92ZShMVmFs
dWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIFRyaVN0YXRlIHJlc3VsdCA9IGxlZnQtPmFi
b3ZlQ29uc3RhbnQocmlnaHQpOwotICAgIGlmIChyZXN1bHQgIT0gTWl4ZWRUcmlTdGF0ZSkKLSAg
ICAgICAgcmV0dXJuIGNvbnN0Qm9vbChyZXN1bHQgPT0gVHJ1ZVRyaVN0YXRlKTsKLSAgICByZXR1
cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6QWJvdmUsIG9yaWdp
bigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlQWJvdmUoSW50
MzIsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmFib3ZlT3JF
cXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIFRyaVN0YXRlIHJlc3VsdCA9
IGxlZnQtPmFib3ZlRXF1YWxDb25zdGFudChyaWdodCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBNaXhl
ZFRyaVN0YXRlKQotICAgICAgICByZXR1cm4gY29uc3RCb29sKHJlc3VsdCA9PSBUcnVlVHJpU3Rh
dGUpOwotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIz
OjpBYm92ZUVxdWFsLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBo
b2xlLnJlZHVjZUFib3ZlRXF1YWwoSW50MzIsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiB9CiAK
IExWYWx1ZSBPdXRwdXQ6OmJlbG93KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAg
VHJpU3RhdGUgcmVzdWx0ID0gbGVmdC0+YmVsb3dDb25zdGFudChyaWdodCk7Ci0gICAgaWYgKHJl
c3VsdCAhPSBNaXhlZFRyaVN0YXRlKQotICAgICAgICByZXR1cm4gY29uc3RCb29sKHJlc3VsdCA9
PSBUcnVlVHJpU3RhdGUpOwotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVl
PihtX3Byb2MsIEIzOjpCZWxvdywgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4g
bV9wZWVwaG9sZS5yZWR1Y2VCZWxvdyhJbnQzMiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKIH0K
IAogTFZhbHVlIE91dHB1dDo6YmVsb3dPckVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQp
CiB7Ci0gICAgVHJpU3RhdGUgcmVzdWx0ID0gbGVmdC0+YmVsb3dFcXVhbENvbnN0YW50KHJpZ2h0
KTsKLSAgICBpZiAocmVzdWx0ICE9IE1peGVkVHJpU3RhdGUpCi0gICAgICAgIHJldHVybiBjb25z
dEJvb2wocmVzdWx0ID09IFRydWVUcmlTdGF0ZSk7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVu
ZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkJlbG93RXF1YWwsIG9yaWdpbigpLCBsZWZ0LCBy
aWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlQmVsb3dFcXVhbChJbnQzMiwgb3Jp
Z2luKCksIGxlZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6Z3JlYXRlclRoYW4oTFZh
bHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICBUcmlTdGF0ZSByZXN1bHQgPSBsZWZ0LT5n
cmVhdGVyVGhhbkNvbnN0YW50KHJpZ2h0KTsKLSAgICBpZiAocmVzdWx0ICE9IE1peGVkVHJpU3Rh
dGUpCi0gICAgICAgIHJldHVybiBjb25zdEJvb2wocmVzdWx0ID09IFRydWVUcmlTdGF0ZSk7Ci0g
ICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkdyZWF0
ZXJUaGFuLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJl
ZHVjZUdyZWF0ZXJUaGFuKEludDMyLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFs
dWUgT3V0cHV0OjpncmVhdGVyVGhhbk9yRXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkK
IHsKLSAgICBUcmlTdGF0ZSByZXN1bHQgPSBsZWZ0LT5ncmVhdGVyRXF1YWxDb25zdGFudChyaWdo
dCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBNaXhlZFRyaVN0YXRlKQotICAgICAgICByZXR1cm4gY29u
c3RCb29sKHJlc3VsdCA9PSBUcnVlVHJpU3RhdGUpOwotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBl
bmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpHcmVhdGVyRXF1YWwsIG9yaWdpbigpLCBsZWZ0
LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlR3JlYXRlckVxdWFsKEludDMy
LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0cHV0OjpsZXNzVGhhbihM
VmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIFRyaVN0YXRlIHJlc3VsdCA9IGxlZnQt
Pmxlc3NUaGFuQ29uc3RhbnQocmlnaHQpOwotICAgIGlmIChyZXN1bHQgIT0gTWl4ZWRUcmlTdGF0
ZSkKLSAgICAgICAgcmV0dXJuIGNvbnN0Qm9vbChyZXN1bHQgPT0gVHJ1ZVRyaVN0YXRlKTsKLSAg
ICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6TGVzc1Ro
YW4sIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNl
TGVzc1RoYW4oSW50MzIsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1ZSBPdXRw
dXQ6Omxlc3NUaGFuT3JFcXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIFRy
aVN0YXRlIHJlc3VsdCA9IGxlZnQtPmxlc3NFcXVhbENvbnN0YW50KHJpZ2h0KTsKLSAgICBpZiAo
cmVzdWx0ICE9IE1peGVkVHJpU3RhdGUpCi0gICAgICAgIHJldHVybiBjb25zdEJvb2wocmVzdWx0
ID09IFRydWVUcmlTdGF0ZSk7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFs
dWU+KG1fcHJvYywgQjM6Okxlc3NFcXVhbCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICBy
ZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VMZXNzRXF1YWwoSW50MzIsIG9yaWdpbigpLCBsZWZ0LCBy
aWdodCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmRvdWJsZUVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFs
dWUgcmlnaHQpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1f
cHJvYywgQjM6OkVxdWFsLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiBtX3Bl
ZXBob2xlLnJlZHVjZUVxdWFsKEludDMyLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBM
VmFsdWUgT3V0cHV0Ojpkb3VibGVFcXVhbE9yVW5vcmRlcmVkKExWYWx1ZSBsZWZ0LCBMVmFsdWUg
cmlnaHQpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJv
YywgQjM6OkVxdWFsT3JVbm9yZGVyZWQsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0
dXJuIG1fcGVlcGhvbGUucmVkdWNlRXF1YWxPclVub3JkZXJlZChJbnQzMiwgb3JpZ2luKCksIGxl
ZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6ZG91YmxlTm90RXF1YWxPclVub3JkZXJl
ZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBl
bmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpOb3RFcXVhbCwgb3JpZ2luKCksIGxlZnQsIHJp
Z2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VOb3RFcXVhbChJbnQzMiwgb3JpZ2lu
KCksIGxlZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6ZG91YmxlTGVzc1RoYW4oTFZh
bHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3
PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6TGVzc1RoYW4sIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7
CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlTGVzc1RoYW4oSW50MzIsIG9yaWdpbigpLCBs
ZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmRvdWJsZUxlc3NUaGFuT3JFcXVhbChM
VmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmRO
ZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpMZXNzRXF1YWwsIG9yaWdpbigpLCBsZWZ0LCByaWdo
dCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlTGVzc0VxdWFsKEludDMyLCBvcmlnaW4o
KSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0cHV0Ojpkb3VibGVHcmVhdGVyVGhhbihM
VmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmRO
ZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpHcmVhdGVyVGhhbiwgb3JpZ2luKCksIGxlZnQsIHJp
Z2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VHcmVhdGVyVGhhbihJbnQzMiwgb3Jp
Z2luKCksIGxlZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6ZG91YmxlR3JlYXRlclRo
YW5PckVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgcmV0dXJuIG1fYmxv
Y2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkdyZWF0ZXJFcXVhbCwgb3JpZ2lu
KCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VHcmVhdGVyRXF1
YWwoSW50MzIsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmRv
dWJsZU5vdEVxdWFsQW5kT3JkZXJlZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQpAQCAtNjI1
LDMzICs1NzMsMjcgQEAgTFZhbHVlIE91dHB1dDo6ZG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JV
bm9yZGVyZWQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIAogTFZhbHVlIE91dHB1dDo6aXNa
ZXJvMzIoTFZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6
OlZhbHVlPihtX3Byb2MsIEIzOjpFcXVhbCwgb3JpZ2luKCksIHZhbHVlLCBpbnQzMlplcm8pOwor
ICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZUVxdWFsKEludDMyLCBvcmlnaW4oKSwgdmFsdWUs
IGludDMyWmVybyk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6Om5vdFplcm8zMihMVmFsdWUgdmFsdWUp
CiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6
Ok5vdEVxdWFsLCBvcmlnaW4oKSwgdmFsdWUsIGludDMyWmVybyk7CisgICAgcmV0dXJuIG1fcGVl
cGhvbGUucmVkdWNlTm90RXF1YWwoSW50MzIsIG9yaWdpbigpLCB2YWx1ZSwgaW50MzJaZXJvKTsK
IH0KIAogTFZhbHVlIE91dHB1dDo6aXNaZXJvNjQoTFZhbHVlIHZhbHVlKQogewotICAgIHJldHVy
biBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpFcXVhbCwgb3JpZ2lu
KCksIHZhbHVlLCBpbnQ2NFplcm8pOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZUVxdWFs
KEludDMyLCBvcmlnaW4oKSwgdmFsdWUsIGludDY0WmVybyk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6
Om5vdFplcm82NChMVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5l
dzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6Ok5vdEVxdWFsLCBvcmlnaW4oKSwgdmFsdWUsIGludDY0
WmVybyk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlTm90RXF1YWwoSW50MzIsIG9yaWdp
bigpLCB2YWx1ZSwgaW50NjRaZXJvKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6c2VsZWN0KExWYWx1
ZSB2YWx1ZSwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pCiB7Ci0gICAgaWYgKHZhbHVl
LT5oYXNJbnQzMigpKSB7Ci0gICAgICAgIGlmICh2YWx1ZS0+YXNJbnQzMigpKQotICAgICAgICAg
ICAgcmV0dXJuIHRha2VuOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gbm90VGFr
ZW47Ci0gICAgfQotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3By
b2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCB2YWx1ZSwgdGFrZW4sIG5vdFRha2VuKTsKKyAgICBy
ZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VTZWxlY3QodGFrZW4tPnR5cGUoKSwgb3JpZ2luKCksIHZh
bHVlLCB0YWtlbiwgbm90VGFrZW4pOwogfQogCiBMVmFsdWUgT3V0cHV0OjphdG9taWNYY2hnQWRk
KExWYWx1ZSBvcGVyYW5kLCBUeXBlZFBvaW50ZXIgcG9pbnRlciwgV2lkdGggd2lkdGgpCkBAIC03
ODEsOCArNzIzLDggQEAgVmFsdWVGcm9tQmxvY2sgT3V0cHV0OjphbmNob3IoTFZhbHVlIHZhbHVl
KQogCiBMVmFsdWUgT3V0cHV0OjpiaXRDYXN0KExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkKIHsK
LSAgICBBU1NFUlRfVU5VU0VEKHR5cGUsIHR5cGUgPT0gSW50NjQgfHwgdHlwZSA9PSBEb3VibGUp
OwotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpC
aXR3aXNlQ2FzdCwgb3JpZ2luKCksIHZhbHVlKTsKKyAgICBBU1NFUlQodHlwZSA9PSBJbnQ2NCB8
fCB0eXBlID09IERvdWJsZSk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlQml0d2lzZUNh
c3QodHlwZSwgb3JpZ2luKCksIHZhbHVlKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6ZnJvdW5kKExW
YWx1ZSBkb3VibGVWYWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT3V0cHV0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCmluZGV4
IDdhMWZhZWVhNjMwLi44MmNiNTNmZjE2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPdXRwdXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91
dHB1dC5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCiAjaW5j
bHVkZSAiQjNDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgIkIzRnJlcXVlbnRlZEJsb2NrLmgiCisj
aW5jbHVkZSAiQjNQZWVwaG9sZU9wdGltaXplci5oIgogI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgi
CiAjaW5jbHVkZSAiQjNTd2l0Y2hWYWx1ZS5oIgogI2luY2x1ZGUgIkIzV2lkdGguaCIKQEAgLTQ1
Miw3ICs0NTMsNyBAQCBwdWJsaWM6CiAjcHJhZ21hIG1hcmsgLSBTdGF0ZXMKICNlbmRpZgogICAg
IEIzOjpQcm9jZWR1cmUmIG1fcHJvYzsKLQorICAgIEIzOjpQZWVwaG9sZU9wdGltaXplciBtX3Bl
ZXBob2xlOwogICAgIERGRzo6Tm9kZSogbV9vcmlnaW4geyBudWxscHRyIH07CiAgICAgTEJhc2lj
QmxvY2sgbV9ibG9jayB7IG51bGxwdHIgfTsKICAgICBMQmFzaWNCbG9jayBtX25leHRCbG9jayB7
IG51bGxwdHIgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>367692</attachid>
            <date>2019-04-17 16:00:28 -0700</date>
            <delta_ts>2019-04-24 17:24:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch196578</filename>
            <type>text/plain</type>
            <size>229229</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQ0MzgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3OSBA
QAorMjAxOS0wNC0xNyAgUm9iaW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUuY29tPgorCisg
ICAgICAgIEIzIHBlZXBob2xlIG9wdGltaXphdGlvbnMgc2hvdWxkIGxpdmUgaW4gdGhlaXIgb3du
IGZpbGUsIGFuZCBiZSB1c2VkIGJ5IEZUTE91dHB1dC5jcHAKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjU3OAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSB0aGUgcGVlcGhvbGUgb3B0aW1p
emF0aW9ucyBmb3IgQjMgbGl2ZSBpbiBCM1JlZHVjZVN0cmVuZ3RoIGFuZCBhcmUgcmF0aGVyIHRp
ZWQgdG8gaXQsIGFuYWx5emluZyBhbiBleGlzdGluZyB2YWx1ZQorICAgICAgICAsIGFuZCAodHlw
aWNhbGx5KSByZXBsYWNpbmcgaXQgd2l0aCBhbiBpZGVudGl0eSB0byBhIG5ldyAoc2ltcGxlcikg
dmFsdWUgdGhhdCB0aGV5IGNyZWF0ZS4KKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCB0aGV5IGlu
c3RlYWQgbGl2ZSBpbiB0aGVpciBvd24gY2xhc3MgQjNQZWVwaG9sZU9wdGltaXplciwgY3JlYXRp
bmcgYSBuZXcgdmFsdWUgKG9wdGlvbmFsbHkgb25seSBpZiB0aGV5IGNhbiBkbyBzbyBjbGV2ZXJs
eSksCisgICAgICAgIGxlYXZpbmcgdGhlIGNhbGxlciBkbyB0aGUgcmVwbGFjZVdpdGhJZGVudGl0
eSBvbiB0aGUgb2xkIGRlZmluaXRpb24uCisgICAgICAgIFRoaXMgaGFzIHNldmVyYWwgYmVuZWZp
dHM6CisgICAgICAgIC0gVXNlcnMgb2YgQjMgY2FuIG5vdyB1c2UgdGhpcyBpbnRlcmZhY2UgdG8g
Y3JlYXRlIHZhbHVlcywgb3B0aW1pemluZyB0aGVtIG9uIHRoZSBmbHk7IGF2b2lkaW5nIGFsbG9j
YXRpbmcgQjM6OlZhbHVlIHMganVzdCB0byBzaW1wbGlmeSB0aGVtLgorICAgICAgICAgIFRoaXMg
cGF0Y2ggcG9ydHMgRlRMT3V0cHV0LmNwcCB0byB1c2UgdGhpcyBmYWNpbGl0eS4KKyAgICAgICAg
LSBUaGUgb3B0aW1pemF0aW9ucyBhcmUgc2lnbmlmaWNhbnRseSB0ZXJzZXIgYW5kIG1vcmUgcmVh
ZGFibGUsIGFzIHdlIGNhbiBnaXZlIG5hbWVzIHRvIHRoZSBhcmd1bWVudHMgKGUuZy4gbGVmdC9y
aWdodCB2cyBtX3ZhbHVlLT5jaGlsZCgwKS9tX3ZhbHVlLT5jaGlsZCgxKSkKKyAgICAgICAgICBU
aGlzIGhlbHBlZCBtZSBub3RpY2UgdGhhdCBhIGNvdXBsZSBvcHRpbWl6YXRpb25zIHdlcmUgZGVh
ZCB3aGlsZSB3cml0aW5nIHRoZSBwYXRjaCAoZS5nLiBBZGQoTmVnKHgpLCAtMSk9PkJpdFhvcih4
LCAtMSkgbmV2ZXIgdHJpZ2dlcmVkIGFzIEFkZChOZWcoeCksIHkpPT5TdWIoeSwgeCkgcmFuIGJl
Zm9yZSBpdCksIGFuZCBmaXggdGhlbS4KKyAgICAgICAgLSBUaGUgb3B0aW1pemF0aW9ucyBub3cg
bmF0dXJhbGx5IHJ1biB0byBhIGxvY2FsIGZpeHBvaW50LiBUaGlzIGN1cnJlbnRseSBpcyBhIG5l
Z2xpZ2libGUgYmVuZWZpdCBhcyB3ZSBkb24ndCBoYXZlIHRoYXQgbWFueSBvcHRpbWl6YXRpb25z
CisgICAgICAgICAgLCBidXQgaXQgZW5zdXJlcyB3ZSBjYW4gYWRkIG1hbnkgbW9yZSB3aXRob3V0
IHNpZ25pZmljYW50bHkgaW5jcmVhc2luZyB0aGUgdGltZSBzcGVudCBpbiBCM1JlZHVjZVN0cmVu
Z3RoCisgICAgICAgIC0gTG9uZyB0ZXJtIEkgcGxhbiB0byBhZGQgYW4gYWJzdHJhY3QgaW50ZXJw
cmV0ZXIvZm9yd2FyZCB2YWx1ZSBhbmFseXplciB0byBCMywgd2hpY2ggd291bGQgYmUgYSBsb3Qg
bW9yZSBhY2N1cmF0ZSB0aGFuIHRoZSBjdXJyZW50IGJvdW5kZWQgYmFja3dhcmRzIGFuYWx5c2lz
IGluIEIzUmVkdWNlU3RyZW5ndGguCisgICAgICAgICAgVGhpcyByZWZhY3RvciBpcyBuZWVkZWQg
YXMgYSBzdGVwIHRvd2FyZHMgdGhpcy4KKworICAgICAgICBJIGxlYXZlIGluIEIzUmVkdWNlU3Ry
ZW5ndGggdGhlIG5vbi1sb2NhbCBvcHRpbWl6YXRpb25zIGZvciBCcmFuY2ggYW5kIENoZWNrLgor
ICAgICAgICBJIGFsc28gaGFkIHRvIG1vdmUgSW50UmFuZ2UgdG8gaXRzIG93biBCM0ludFJhbmdl
LmggZmlsZSwgc2luY2UgaXQgaXMgbm93IHVzZWQgYnkgQjNQZWVwaG9sZU9wdGltaXplci5jcHAg
YW5kIG5vdCBCM1JlZHVjZVN0cmVuZ3RoLmNwcAorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYXMg
dGhpcyBpcyBhIHJlZmFjdG9yIGFuZCBhbGwgb2YgdGhpcyBjb2RlIGlzIGFscmVhZHkgdGVzdGVk
LgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBiMy9CM0R1cGxpY2F0ZVRhaWxzLmNw
cDoKKyAgICAgICAgKiBiMy9CM0ludFJhbmdlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6
SW50UmFuZ2U6OkludFJhbmdlKToKKyAgICAgICAgKEpTQzo6QjM6OkludFJhbmdlOjp0b3ApOgor
ICAgICAgICAoSlNDOjpCMzo6SW50UmFuZ2U6OnJhbmdlRm9yTWFzayk6CisgICAgICAgIChKU0M6
OkIzOjpJbnRSYW5nZTo6cmFuZ2VGb3JaU2hyKToKKyAgICAgICAgKEpTQzo6QjM6OkludFJhbmdl
OjptaW4gY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6SW50UmFuZ2U6Om1heCBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkIzOjpJbnRSYW5nZTo6ZHVtcCBjb25zdCk6CisgICAgICAgIChKU0M6OkIz
OjpJbnRSYW5nZTo6Y291bGRPdmVyZmxvd0FkZCk6CisgICAgICAgIChKU0M6OkIzOjpJbnRSYW5n
ZTo6Y291bGRPdmVyZmxvd1N1Yik6CisgICAgICAgIChKU0M6OkIzOjpJbnRSYW5nZTo6Y291bGRP
dmVyZmxvd011bCk6CisgICAgICAgIChKU0M6OkIzOjpJbnRSYW5nZTo6c2hsKToKKyAgICAgICAg
KEpTQzo6QjM6OkludFJhbmdlOjpzU2hyKToKKyAgICAgICAgKEpTQzo6QjM6OkludFJhbmdlOjp6
U2hyKToKKyAgICAgICAgKEpTQzo6QjM6OkludFJhbmdlOjphZGQpOgorICAgICAgICAoSlNDOjpC
Mzo6SW50UmFuZ2U6OnN1Yik6CisgICAgICAgIChKU0M6OkIzOjpJbnRSYW5nZTo6bXVsKToKKyAg
ICAgICAgKiBiMy9CM0xvd2VyTWFjcm9zLmNwcDoKKyAgICAgICAgKiBiMy9CM1BlZXBob2xlT3B0
aW1pemVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6
YXBwZW5kVG9DdXJyZW50QmxvY2spOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6
ZXI6OmVtaXQpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZU9w
YXF1ZSk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlQWRkKToK
KyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VTdWIpOgorICAgICAg
ICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZU5lZyk6CisgICAgICAgIChKU0M6
OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlTXVsKToKKyAgICAgICAgKEpTQzo6QjM6OlBl
ZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VEaXYpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVP
cHRpbWl6ZXI6OnJlZHVjZVVEaXYpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6
ZXI6OnJlZHVjZU1vZCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVk
dWNlVU1vZCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlQml0
QW5kKToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VCaXRPcik6
CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlQml0WG9yKToKKyAg
ICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VTaGwpOgorICAgICAgICAo
SlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVNTaHIpOgorICAgICAgICAoSlNDOjpC
Mzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVpTaHIpOgorICAgICAgICAoSlNDOjpCMzo6UGVl
cGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVJvdFIpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVP
cHRpbWl6ZXI6OnJlZHVjZVJvdEwpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6
ZXI6OnJlZHVjZUFicyk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVk
dWNlQ2VpbCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlRmxv
b3IpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVNxcnQpOgor
ICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUJpdHdpc2VDYXN0KToK
KyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VTRXh0OCk6CisgICAg
ICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlU0V4dDE2KToKKyAgICAgICAg
KEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VTRXh0MzIpOgorICAgICAgICAoSlND
OjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVpFeHQzMik6CisgICAgICAgIChKU0M6OkIz
OjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlVHJ1bmMpOgorICAgICAgICAoSlNDOjpCMzo6UGVl
cGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUlUb0QpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVP
cHRpbWl6ZXI6OnJlZHVjZUlUb0YpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6
ZXI6OnJlZHVjZUZsb2F0VG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRp
bWl6ZXI6OnJlZHVjZURvdWJsZVRvRmxvYXQpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVP
cHRpbWl6ZXI6OnJlZHVjZVNlbGVjdCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGlt
aXplcjo6cmVkdWNlTG9hZFN0b3JlKToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1p
emVyOjpyZWR1Y2VFcXVhbCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6
cmVkdWNlTm90RXF1YWwpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJl
ZHVjZUVxdWFsT3JVbm9yZGVyZWQpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6
ZXI6OnJlZHVjZUxlc3NUaGFuKToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVy
OjpyZWR1Y2VHcmVhdGVyVGhhbik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXpl
cjo6cmVkdWNlTGVzc0VxdWFsKToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVy
OjpyZWR1Y2VHcmVhdGVyRXF1YWwpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6
ZXI6OnJlZHVjZUFib3ZlKToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpy
ZWR1Y2VCZWxvdyk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNl
QWJvdmVFcXVhbCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNl
QmVsb3dFcXVhbCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6dHJ5UmVk
dWNlKToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjp0cnlTaW1wbGlmeUJy
YW5jaCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6dHJ5U2ltcGxpZnlD
Q2FsbCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6dHJ5U2ltcGxpZnlD
aGVja0FkZCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6dHJ5U2ltcGxp
ZnlDaGVja1N1Yik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6dHJ5U2lt
cGxpZnlDaGVja011bCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6dHJ5
U2ltcGxpZnlDaGVjayk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6c2hv
dWxkR29CZWZvcmUpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnRyeVJl
ZHVjZU11bERpc3RyaWJ1dGl2aXR5KToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1p
emVyOjp0cnlSZWR1Y2VCaXRBbmREaXN0cmlidXRpdml0eSk6CisgICAgICAgIChKU0M6OkIzOjpQ
ZWVwaG9sZU9wdGltaXplcjo6dHJ5UmVkdWNlU2hpZnRPclJvdGF0ZSk6CisgICAgICAgIChKU0M6
OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmFuZ2VGb3IpOgorICAgICAgICAqIGIzL0IzUGVlcGhv
bGVPcHRpbWl6ZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXpl
cjo6UGVlcGhvbGVPcHRpbWl6ZXIpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6
ZXI6OnNldEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpzZXRC
bG9jayk6CisgICAgICAgICogYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHA6CisgICAgICAgICogYjMv
QjNWYWxpZGF0ZS5jcHA6CisgICAgICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6
QjM6OnRlc3ROZWdNdWxBcmdJbW0pOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEZsb2F0RXF1YWxP
clVub3JkZXJlZERvbnRGb2xkKToKKyAgICAgICAgKiBmdGwvRlRMT3V0cHV0LmNwcDoKKyAgICAg
ICAgKEpTQzo6RlRMOjpPdXRwdXQ6Ok91dHB1dCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0
OjphcHBlbmRUbyk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpvcGFxdWUpOgorICAgICAg
ICAoSlNDOjpGVEw6Ok91dHB1dDo6YWRkKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OnN1
Yik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjptdWwpOgorICAgICAgICAoSlNDOjpGVEw6
Ok91dHB1dDo6ZGl2KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmNoaWxsRGl2KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6Om1vZCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0
OjpjaGlsbE1vZCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpuZWcpOgorICAgICAgICAo
SlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlQWRkKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6
OmRvdWJsZVN1Yik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpkb3VibGVNdWwpOgorICAg
ICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlRGl2KToKKyAgICAgICAgKEpTQzo6RlRMOjpP
dXRwdXQ6OmRvdWJsZU1vZCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpiaXRBbmQpOgor
ICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6Yml0T3IpOgorICAgICAgICAoSlNDOjpGVEw6Ok91
dHB1dDo6Yml0WG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OnNobCk6CisgICAgICAg
IChKU0M6OkZUTDo6T3V0cHV0OjphU2hyKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmxT
aHIpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6Yml0Tm90KToKKyAgICAgICAgKEpTQzo6
RlRMOjpPdXRwdXQ6OmxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZG91
YmxlQWJzKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmRvdWJsZUNlaWwpOgorICAgICAg
ICAoSlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlRmxvb3IpOgorICAgICAgICAoSlNDOjpGVEw6Ok91
dHB1dDo6ZG91YmxlUG93aSk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpkb3VibGVTcXJ0
KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OnNpZ25FeHQzMlRvNjQpOgorICAgICAgICAo
SlNDOjpGVEw6Ok91dHB1dDo6emVyb0V4dCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpp
bnRUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpjYXN0VG9JbnQzMik6Cisg
ICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpkb3VibGVUb0Zsb2F0KToKKyAgICAgICAgKEpTQzo6
RlRMOjpPdXRwdXQ6OmZsb2F0VG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6
ZXF1YWwpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bm90RXF1YWwpOgorICAgICAgICAo
SlNDOjpGVEw6Ok91dHB1dDo6YWJvdmUpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6YWJv
dmVPckVxdWFsKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmJlbG93KToKKyAgICAgICAg
KEpTQzo6RlRMOjpPdXRwdXQ6OmJlbG93T3JFcXVhbCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0
cHV0OjpncmVhdGVyVGhhbik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpncmVhdGVyVGhh
bk9yRXF1YWwpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bGVzc1RoYW4pOgorICAgICAg
ICAoSlNDOjpGVEw6Ok91dHB1dDo6bGVzc1RoYW5PckVxdWFsKToKKyAgICAgICAgKEpTQzo6RlRM
OjpPdXRwdXQ6OmRvdWJsZUVxdWFsKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmRvdWJs
ZUVxdWFsT3JVbm9yZGVyZWQpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlTm90
RXF1YWxPclVub3JkZXJlZCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpkb3VibGVMZXNz
VGhhbik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpkb3VibGVMZXNzVGhhbk9yRXF1YWwp
OgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlR3JlYXRlclRoYW4pOgorICAgICAg
ICAoSlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlR3JlYXRlclRoYW5PckVxdWFsKToKKyAgICAgICAg
KEpTQzo6RlRMOjpPdXRwdXQ6OmlzWmVybzMyKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6
Om5vdFplcm8zMik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojppc1plcm82NCk6CisgICAg
ICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpub3RaZXJvNjQpOgorICAgICAgICAoSlNDOjpGVEw6Ok91
dHB1dDo6c2VsZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmJpdENhc3QpOgorICAg
ICAgICAqIGZ0bC9GVExPdXRwdXQuaDoKKwogMjAxOS0wNC0xNiAgU3RlcGhhbiBTemFibyAgPHN0
ZXBoYW4uc3phYm9Ac29ueS5jb20+CiAKICAgICAgICAgW1BsYXlTdGF0aW9uXSBVcGRhdGUgcG9y
dCBmb3Igc3lzdGVtIGxpYnJhcnkgY2hhbmdlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDI0NDM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04NTgs
NiArODU4LDggQEAKIAkJMzM5NUM3MDcyMjU1NUY2RDAwQkRCRkFEIC8qIEIzRWxpbWluYXRlRGVh
ZENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMz
OTVDNzA1MjI1NTVGNkQwMEJEQkZBRCAvKiBCM0VsaW1pbmF0ZURlYWRDb2RlLmggKi87IH07CiAJ
CTMzQjJBNTQ3MjI2NTM0ODEwMDVBMEY3OSAvKiBCM1ZhbHVlSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkIxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVmFsdWVJbmxpbmVzLmggKi87IH07CiAJCTMzQjJBNTQ4MjI2NTQzQkYwMDVBMEY3
OSAvKiBGVExMb3dlckRGR1RvQjMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQTBBMDQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9C
My5jcHAgKi87IH07CisJCTMzRTk3MTU1MjI2N0U0REEwMEQxQjg1NiAvKiBCM1BlZXBob2xlT3B0
aW1pemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
M0U5NzE1MjIyNjdFNEQ5MDBEMUI4NTYgLyogQjNQZWVwaG9sZU9wdGltaXplci5oICovOyB9Owor
CQkzM0U5NzE1NjIyNjdFNERBMDBEMUI4NTYgLyogQjNJbnRSYW5nZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNFOTcxNTMyMjY3RTREOTAwRDFCODU2
IC8qIEIzSW50UmFuZ2UuaCAqLzsgfTsKIAkJMzcxRDg0MkQxN0M5OEI2RTAwRUNGOTk0IC8qIGxp
YnouZHlsaWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzNzFEODQyQzE3Qzk4QjZFMDBFQ0Y5OTQgLyogbGliei5keWxpYiAqLzsgfTsKIAkJMzdDNzM4
RDIxRURCNTZFNDAwM0YyQjBCIC8qIFBhcnNlSW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0M3MzhEMTFFREI1NjcyMDAzRjJCMEIgLyogUGFyc2VJ
bnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0
MTI5NTI3NzFEMkNGNkJDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dy
YXBwZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDEyOTUyNzMxRDJDRjZBQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2ludGVy
bmFsc193cmFwcGVyX2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMzM1OSw2ICszMzYxLDkgQEAKIAkJMzM5NUM3MDQyMjU1NUY2QzAw
QkRCRkFEIC8qIEIzRWxpbWluYXRlRGVhZENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQjNFbGltaW5hdGVEZWFkQ29kZS5jcHA7IHBhdGggPSBiMy9CM0VsaW1p
bmF0ZURlYWRDb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzM5NUM3MDUy
MjU1NUY2RDAwQkRCRkFEIC8qIEIzRWxpbWluYXRlRGVhZENvZGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQjNFbGltaW5hdGVEZWFkQ29kZS5oOyBwYXRoID0gYjMvQjNFbGlt
aW5hdGVEZWFkQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzM0IyQTU0NTIy
NjUxRDUzMDA1QTBGNzkgLyogTWFya2VkU3BhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFy
a2VkU3BhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0U5NzE1MTIyNjdF
NEQ4MDBEMUI4NTYgLyogQjNQZWVwaG9sZU9wdGltaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBCM1BlZXBob2xlT3B0aW1pemVyLmNwcDsgcGF0aCA9IGIzL0Iz
UGVlcGhvbGVPcHRpbWl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0U5
NzE1MjIyNjdFNEQ5MDBEMUI4NTYgLyogQjNQZWVwaG9sZU9wdGltaXplci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1BlZXBob2xlT3B0aW1pemVyLmg7IHBhdGggPSBiMy9C
M1BlZXBob2xlT3B0aW1pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzRTk3
MTUzMjI2N0U0RDkwMEQxQjg1NiAvKiBCM0ludFJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEIzSW50UmFuZ2UuaDsgcGF0aCA9IGIzL0IzSW50UmFuZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzcxMTlBNzcyMENDQjVEQzAwMkM2REM5IC8qIFdlYktp
dFRhcmdldENvbmRpdGlvbmFscy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBXZWJLaXRUYXJnZXRD
b25kaXRpb25hbHMueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MUQ4
NDJDMTdDOThCNkUwMEVDRjk5NCAvKiBsaWJ6LmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUg
PSBsaWJ6LmR5bGliOyBwYXRoID0gdXNyL2xpYi9saWJ6LmR5bGliOyBzb3VyY2VUcmVlID0gU0RL
Uk9PVDsgfTsKIAkJMzdDNzM4RDExRURCNTY3MjAwM0YyQjBCIC8qIFBhcnNlSW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlSW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC01NDEwLDYgKzU0MTUsNyBAQAogCQkJCURDNjlCOTlCMUQxNUY5MEYwMDJF
M0MwMCAvKiBCM0luZmVyU3dpdGNoZXMuaCAqLywKIAkJCQkwRkVDODVCNDFCRTE0NjJGMDA4MEZG
NzQgLyogQjNJbnNlcnRpb25TZXQuY3BwICovLAogCQkJCTBGRUM4NUI1MUJFMTQ2MkYwMDgwRkY3
NCAvKiBCM0luc2VydGlvblNldC5oICovLAorCQkJCTMzRTk3MTUzMjI2N0U0RDkwMEQxQjg1NiAv
KiBCM0ludFJhbmdlLmggKi8sCiAJCQkJMEZFQzg1QjYxQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5z
ZXJ0aW9uU2V0SW5saW5lcy5oICovLAogCQkJCTBGREY2N0QwMUQ5QzYwODYwMDFCOTgyNSAvKiBC
M0tpbmQuY3BwICovLAogCQkJCTBGREY2N0QxMUQ5QzYwODYwMDFCOTgyNSAvKiBCM0tpbmQuaCAq
LywKQEAgLTU0NDYsNiArNTQ1Miw4IEBACiAJCQkJMEZFQzg0REQxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzUGF0Y2hwb2ludFZhbHVlLmNwcCAqLywKIAkJCQkwRkVDODRERTFCREFDREFDMDA4MEZGNzQg
LyogQjNQYXRjaHBvaW50VmFsdWUuaCAqLywKIAkJCQk3OTlFRjdDMzFDNTZFRDk2MDAyQjA1MzQg
LyogQjNQQ1RvT3JpZ2luTWFwLmggKi8sCisJCQkJMzNFOTcxNTEyMjY3RTREODAwRDFCODU2IC8q
IEIzUGVlcGhvbGVPcHRpbWl6ZXIuY3BwICovLAorCQkJCTMzRTk3MTUyMjI2N0U0RDkwMEQxQjg1
NiAvKiBCM1BlZXBob2xlT3B0aW1pemVyLmggKi8sCiAJCQkJMEZFQzg0REYxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzUGhhc2VTY29wZS5jcHAgKi8sCiAJCQkJMEZFQzg0RTAxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzUGhhc2VTY29wZS5oICovLAogCQkJCTBGMzczMDhBMUMwQkQyOTEwMDA1MkJGQSAvKiBC
M1BoaUNoaWxkcmVuLmNwcCAqLywKQEAgLTg3ODcsNiArODc5NSw3IEBACiAJCQkJMEZDOTdGMzQx
ODIwMjBENzAwMkM5QjI2IC8qIENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZEOEEzMTQxN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NjRDRTgxREEzMDRFRjAwQjAwQTExIC8qIENvZGVCbG9j
a1NldElubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTMzRTk3MTU1MjI2N0U0REEwMEQxQjg1
NiAvKiBCM1BlZXBob2xlT3B0aW1pemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk2RUJCMzE2
Njc2RUY2MDA4QkFERTMgLyogQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3N0YxODIyMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2RTExNkIxMEZFNzVBQzgwMEI1MTJCQyAvKiBDb2RlTG9jYXRpb24uaCBpbiBIZWFk
ZXJzICovLApAQCAtODg5Miw2ICs4OTAxLDcgQEAKIAkJCQlBNzdBNDI0MjE3QTBCQkZEMDBBOERC
ODEgLyogREZHQ2xvYmJlclNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzQzFGMUIxQjg2OEU3
OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjA0Mzk2RTFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMzNFOTcxNTYyMjY3RTREQTAwRDFCODU2IC8qIEIzSW50UmFuZ2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGN0IyOTREMTRDM0NENEMwMDdDM0RCMSAvKiBERkdDb21tb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRUEwQTMyMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25E
YXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM4QjAxODE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZH
Q29tcGlsYXRpb25LZXkuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dAkocmV2aXNpb24gMjQ0MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJj
ZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNiArMTUwLDcgQEAKIGIzL0IzT3JpZ2luRHVt
cC5jcHAKIGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCiBiMy9CM1BhdGNocG9pbnRWYWx1ZS5j
cHAKK2IzL0IzUGVlcGhvbGVPcHRpbWl6ZXIuY3BwCiBiMy9CM1BoYXNlU2NvcGUuY3BwCiBiMy9C
M1BoaUNoaWxkcmVuLmNwcAogYjMvQjNQcm9jZWR1cmUuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNEdXBsaWNhdGVUYWlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRHVwbGljYXRlVGFpbHMuY3BwCShyZXZpc2lvbiAyNDQzODIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNEdXBsaWNhdGVUYWlscy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgICAgYnJlYWtDcml0aWNhbEVkZ2VzKG1fcHJv
Yyk7CiAgICAgICAgIAogICAgICAgICAvLyBGaW5kIGJsb2NrcyB0aGF0IHdvdWxkIGJlIGNhbmRp
ZGF0ZXMgZm9yIHRhaWwgZHVwbGljYXRpb24uIFRoZXkgbXVzdCBiZSBzbWFsbCBlbm91Z2gKLSAg
ICAgICAgLy8gYW5kIHRoZXkgbXVjaCBub3QgaGF2ZSB0b28gbWFueSBzdWNjZXNzb3JzLgorICAg
ICAgICAvLyBhbmQgdGhleSBtdXN0IG5vdCBoYXZlIHRvbyBtYW55IHN1Y2Nlc3NvcnMuCiAKICAg
ICAgICAgbV9wcm9jLnJlc2V0VmFsdWVPd25lcnMoKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzSW50UmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNJbnRSYW5nZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0ludFJhbmdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNDAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1R5cGUuaCIKKyNpbmNsdWRlIDx3dGYv
UHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIEZJ
WE1FOiBUaGlzIEludFJhbmdlIHN0dWZmIHNob3VsZCBiZSByZWZhY3RvcmVkIGludG8gYSBnZW5l
cmFsIGFic3RyYWN0IGRvbWFpbi4KKy8vIEl0IGNvdWxkIGVhc2lseSBiZSBleHRlbmRlZCBpbiBs
b3RzIG9mIGRpcmVjdGlvbnMsIGluY2x1ZGluZyBhIGtub3duQml0cyBhbmFseXNpcywgc3VwcG9y
dGluZyBtYW55IG1vcmUgb3Bjb2RlcywgYmVpbmcgc2lnbmlmaWNhbnRseSBtb3JlIHByZWNpc2Us
IGV0Yy4uCitjbGFzcyBJbnRSYW5nZSB7CitwdWJsaWM6CisgICAgSW50UmFuZ2UoKQorICAgIHsK
KyAgICB9CisKKyAgICBJbnRSYW5nZShpbnQ2NF90IG1pbiwgaW50NjRfdCBtYXgpCisgICAgICAg
IDogbV9taW4obWluKQorICAgICAgICAsIG1fbWF4KG1heCkKKyAgICB7CisgICAgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgSW50UmFuZ2UgdG9wKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBJbnRSYW5nZShzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptaW4oKSwgc3Rk
OjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCkpOworICAgIH0KKworICAgIHN0YXRpYyBJbnRSYW5n
ZSB0b3AoVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAg
IGNhc2UgSW50MzI6CisgICAgICAgICAgICByZXR1cm4gdG9wPGludDMyX3Q+KCk7CisgICAgICAg
IGNhc2UgSW50NjQ6CisgICAgICAgICAgICByZXR1cm4gdG9wPGludDY0X3Q+KCk7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgcmV0dXJuIEludFJhbmdlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBJbnRSYW5nZSByYW5nZUZvck1hc2soVCBtYXNr
KQorICAgIHsKKyAgICAgICAgaWYgKCEobWFzayArIDEpKQorICAgICAgICAgICAgcmV0dXJuIHRv
cDxUPigpOworICAgICAgICByZXR1cm4gSW50UmFuZ2UoMCwgbWFzayk7CisgICAgfQorCisgICAg
c3RhdGljIEludFJhbmdlIHJhbmdlRm9yTWFzayhpbnQ2NF90IG1hc2ssIFR5cGUgdHlwZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAg
ICAgICAgcmV0dXJuIHJhbmdlRm9yTWFzazxpbnQzMl90PihzdGF0aWNfY2FzdDxpbnQzMl90Piht
YXNrKSk7CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICByZXR1cm4gcmFuZ2VGb3JN
YXNrPGludDY0X3Q+KG1hc2spOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMg
SW50UmFuZ2UgcmFuZ2VGb3JaU2hyKGludDMyX3Qgc2hpZnRBbW91bnQpCisgICAgeworICAgICAg
ICB0eXBlbmFtZSBzdGQ6Om1ha2VfdW5zaWduZWQ8VD46OnR5cGUgbWFzayA9IDA7CisgICAgICAg
IG1hc2stLTsKKyAgICAgICAgbWFzayA+Pj0gc2hpZnRBbW91bnQ7CisgICAgICAgIHJldHVybiBy
YW5nZUZvck1hc2s8VD4oc3RhdGljX2Nhc3Q8VD4obWFzaykpOworICAgIH0KKworICAgIHN0YXRp
YyBJbnRSYW5nZSByYW5nZUZvclpTaHIoaW50MzJfdCBzaGlmdEFtb3VudCwgVHlwZSB0eXBlKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAg
ICAgICAgICByZXR1cm4gcmFuZ2VGb3JaU2hyPGludDMyX3Q+KHNoaWZ0QW1vdW50KTsKKyAgICAg
ICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIHJldHVybiByYW5nZUZvclpTaHI8aW50NjRfdD4o
c2hpZnRBbW91bnQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOworICAgICAg
ICB9CisgICAgfQorCisgICAgaW50NjRfdCBtaW4oKSBjb25zdCB7IHJldHVybiBtX21pbjsgfQor
ICAgIGludDY0X3QgbWF4KCkgY29uc3QgeyByZXR1cm4gbV9tYXg7IH0KKworICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0LnByaW50KCJbIiwg
bV9taW4sICIsIiwgbV9tYXgsICJdIik7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICBib29sIGNvdWxkT3ZlcmZsb3dBZGQoY29uc3QgSW50UmFuZ2UmIG90aGVyKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHN1bU92ZXJmbG93czxUPihtX21pbiwgb3RoZXIubV9taW4pCisg
ICAgICAgICAgICB8fCBzdW1PdmVyZmxvd3M8VD4obV9taW4sIG90aGVyLm1fbWF4KQorICAgICAg
ICAgICAgfHwgc3VtT3ZlcmZsb3dzPFQ+KG1fbWF4LCBvdGhlci5tX21pbikKKyAgICAgICAgICAg
IHx8IHN1bU92ZXJmbG93czxUPihtX21heCwgb3RoZXIubV9tYXgpOworICAgIH0KKworICAgIGJv
b2wgY291bGRPdmVyZmxvd0FkZChjb25zdCBJbnRSYW5nZSYgb3RoZXIsIFR5cGUgdHlwZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAg
ICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dBZGQ8aW50MzJfdD4ob3RoZXIpOworICAgICAgICBj
YXNlIEludDY0OgorICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dBZGQ8aW50NjRfdD4o
b3RoZXIpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGJvb2wgY291bGRP
dmVyZmxvd1N1Yihjb25zdCBJbnRSYW5nZSYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4g
ZGlmZmVyZW5jZU92ZXJmbG93czxUPihtX21pbiwgb3RoZXIubV9taW4pCisgICAgICAgICAgICB8
fCBkaWZmZXJlbmNlT3ZlcmZsb3dzPFQ+KG1fbWluLCBvdGhlci5tX21heCkKKyAgICAgICAgICAg
IHx8IGRpZmZlcmVuY2VPdmVyZmxvd3M8VD4obV9tYXgsIG90aGVyLm1fbWluKQorICAgICAgICAg
ICAgfHwgZGlmZmVyZW5jZU92ZXJmbG93czxUPihtX21heCwgb3RoZXIubV9tYXgpOworICAgIH0K
KworICAgIGJvb2wgY291bGRPdmVyZmxvd1N1Yihjb25zdCBJbnRSYW5nZSYgb3RoZXIsIFR5cGUg
dHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEludDMy
OgorICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dTdWI8aW50MzJfdD4ob3RoZXIpOwor
ICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dTdWI8
aW50NjRfdD4ob3RoZXIpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGJv
b2wgY291bGRPdmVyZmxvd011bChjb25zdCBJbnRSYW5nZSYgb3RoZXIpCisgICAgeworICAgICAg
ICByZXR1cm4gcHJvZHVjdE92ZXJmbG93czxUPihtX21pbiwgb3RoZXIubV9taW4pCisgICAgICAg
ICAgICB8fCBwcm9kdWN0T3ZlcmZsb3dzPFQ+KG1fbWluLCBvdGhlci5tX21heCkKKyAgICAgICAg
ICAgIHx8IHByb2R1Y3RPdmVyZmxvd3M8VD4obV9tYXgsIG90aGVyLm1fbWluKQorICAgICAgICAg
ICAgfHwgcHJvZHVjdE92ZXJmbG93czxUPihtX21heCwgb3RoZXIubV9tYXgpOworICAgIH0KKwor
ICAgIGJvb2wgY291bGRPdmVyZmxvd011bChjb25zdCBJbnRSYW5nZSYgb3RoZXIsIFR5cGUgdHlw
ZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEludDMyOgor
ICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dNdWw8aW50MzJfdD4ob3RoZXIpOworICAg
ICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dNdWw8aW50
NjRfdD4ob3RoZXIpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIEludFJh
bmdlIHNobChpbnQzMl90IHNoaWZ0QW1vdW50KQorICAgIHsKKyAgICAgICAgVCBuZXdNaW4gPSBz
dGF0aWNfY2FzdDxUPihtX21pbikgPDwgc3RhdGljX2Nhc3Q8VD4oc2hpZnRBbW91bnQpOworICAg
ICAgICBUIG5ld01heCA9IHN0YXRpY19jYXN0PFQ+KG1fbWF4KSA8PCBzdGF0aWNfY2FzdDxUPihz
aGlmdEFtb3VudCk7CisKKyAgICAgICAgaWYgKChuZXdNaW4gPj4gc2hpZnRBbW91bnQpICE9IHN0
YXRpY19jYXN0PFQ+KG1fbWluKSkKKyAgICAgICAgICAgIG5ld01pbiA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8VD46Om1pbigpOworICAgICAgICBpZiAoKG5ld01heCA+PiBzaGlmdEFtb3VudCkgIT0g
c3RhdGljX2Nhc3Q8VD4obV9tYXgpKQorICAgICAgICAgICAgbmV3TWF4ID0gc3RkOjpudW1lcmlj
X2xpbWl0czxUPjo6bWF4KCk7CisKKyAgICAgICAgcmV0dXJuIEludFJhbmdlKG5ld01pbiwgbmV3
TWF4KTsKKyAgICB9CisKKyAgICBJbnRSYW5nZSBzaGwoaW50MzJfdCBzaGlmdEFtb3VudCwgVHlw
ZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW50
MzI6CisgICAgICAgICAgICByZXR1cm4gc2hsPGludDMyX3Q+KHNoaWZ0QW1vdW50KTsKKyAgICAg
ICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIHJldHVybiBzaGw8aW50NjRfdD4oc2hpZnRBbW91
bnQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOworICAgICAgICB9CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBJbnRSYW5nZSBzU2hyKGludDMyX3Qg
c2hpZnRBbW91bnQpCisgICAgeworICAgICAgICBUIG5ld01pbiA9IHN0YXRpY19jYXN0PFQ+KG1f
bWluKSA+PiBzdGF0aWNfY2FzdDxUPihzaGlmdEFtb3VudCk7CisgICAgICAgIFQgbmV3TWF4ID0g
c3RhdGljX2Nhc3Q8VD4obV9tYXgpID4+IHN0YXRpY19jYXN0PFQ+KHNoaWZ0QW1vdW50KTsKKwor
ICAgICAgICByZXR1cm4gSW50UmFuZ2UobmV3TWluLCBuZXdNYXgpOworICAgIH0KKworICAgIElu
dFJhbmdlIHNTaHIoaW50MzJfdCBzaGlmdEFtb3VudCwgVHlwZSB0eXBlKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICByZXR1
cm4gc1NocjxpbnQzMl90PihzaGlmdEFtb3VudCk7CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAg
ICAgICAgICByZXR1cm4gc1NocjxpbnQ2NF90PihzaGlmdEFtb3VudCk7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgcmV0dXJuIEludFJhbmdlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorICAgIEludFJhbmdlIHpTaHIoaW50MzJfdCBzaGlmdEFtb3VudCkKKyAgICB7
CisgICAgICAgIC8vIFRoaXMgaXMgYW4gYXdrd2FyZCBjb3JuZXIgY2FzZSBmb3IgYWxsIG9mIHRo
ZSBvdGhlciBsb2dpYy4KKyAgICAgICAgaWYgKCFzaGlmdEFtb3VudCkKKyAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKKworICAgICAgICAvLyBJZiB0aGUgaW5wdXQgcmFuZ2UgbWF5IGJlIG5lZ2F0
aXZlLCB0aGVuIGFsbCB3ZSBjYW4gc2F5IGFib3V0IHRoZSBvdXRwdXQgcmFuZ2UgaXMgdGhhdCBp
dAorICAgICAgICAvLyB3aWxsIGJlIG1hc2tlZC4gVGhhdCdzIGJlY2F1c2UgLTEgcmlnaHQgc2hp
ZnRlZCBqdXN0IHByb2R1Y2VzIHRoYXQgbWFzay4KKyAgICAgICAgaWYgKG1fbWluIDwgMCkKKyAg
ICAgICAgICAgIHJldHVybiByYW5nZUZvclpTaHI8VD4oc2hpZnRBbW91bnQpOworCisgICAgICAg
IC8vIElmIHRoZSBpbnB1dCByYW5nZSBpcyBub24tbmVnYXRpdmUsIHRoZW4gdGhpcyBqdXN0IGJy
aW5ncyB0aGUgcmFuZ2UgY2xvc2VyIHRvIHplcm8uCisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
c3RkOjptYWtlX3Vuc2lnbmVkPFQ+Ojp0eXBlIFVuc2lnbmVkVDsKKyAgICAgICAgVW5zaWduZWRU
IG5ld01pbiA9IHN0YXRpY19jYXN0PFVuc2lnbmVkVD4obV9taW4pID4+IHN0YXRpY19jYXN0PFVu
c2lnbmVkVD4oc2hpZnRBbW91bnQpOworICAgICAgICBVbnNpZ25lZFQgbmV3TWF4ID0gc3RhdGlj
X2Nhc3Q8VW5zaWduZWRUPihtX21heCkgPj4gc3RhdGljX2Nhc3Q8VW5zaWduZWRUPihzaGlmdEFt
b3VudCk7CisKKyAgICAgICAgcmV0dXJuIEludFJhbmdlKG5ld01pbiwgbmV3TWF4KTsKKyAgICB9
CisKKyAgICBJbnRSYW5nZSB6U2hyKGludDMyX3Qgc2hpZnRBbW91bnQsIFR5cGUgdHlwZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAg
ICAgICAgcmV0dXJuIHpTaHI8aW50MzJfdD4oc2hpZnRBbW91bnQpOworICAgICAgICBjYXNlIElu
dDY0OgorICAgICAgICAgICAgcmV0dXJuIHpTaHI8aW50NjRfdD4oc2hpZnRBbW91bnQpOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOworICAgICAgICB9CisgICAgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBJbnRSYW5nZSBhZGQoY29uc3QgSW50UmFuZ2UmIG90
aGVyKQorICAgIHsKKyAgICAgICAgaWYgKGNvdWxkT3ZlcmZsb3dBZGQ8VD4ob3RoZXIpKQorICAg
ICAgICAgICAgcmV0dXJuIHRvcDxUPigpOworICAgICAgICByZXR1cm4gSW50UmFuZ2UobV9taW4g
KyBvdGhlci5tX21pbiwgbV9tYXggKyBvdGhlci5tX21heCk7CisgICAgfQorCisgICAgSW50UmFu
Z2UgYWRkKGNvbnN0IEludFJhbmdlJiBvdGhlciwgVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICByZXR1cm4g
YWRkPGludDMyX3Q+KG90aGVyKTsKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIHJl
dHVybiBhZGQ8aW50NjRfdD4ob3RoZXIpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSYW5n
ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBJ
bnRSYW5nZSBzdWIoY29uc3QgSW50UmFuZ2UmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKGNv
dWxkT3ZlcmZsb3dTdWI8VD4ob3RoZXIpKQorICAgICAgICAgICAgcmV0dXJuIHRvcDxUPigpOwor
ICAgICAgICByZXR1cm4gSW50UmFuZ2UobV9taW4gLSBvdGhlci5tX21heCwgbV9tYXggLSBvdGhl
ci5tX21pbik7CisgICAgfQorCisgICAgSW50UmFuZ2Ugc3ViKGNvbnN0IEludFJhbmdlJiBvdGhl
ciwgVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNh
c2UgSW50MzI6CisgICAgICAgICAgICByZXR1cm4gc3ViPGludDMyX3Q+KG90aGVyKTsKKyAgICAg
ICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIHJldHVybiBzdWI8aW50NjRfdD4ob3RoZXIpOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBJbnRSYW5nZSBtdWwoY29uc3QgSW50UmFuZ2Um
IG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKGNvdWxkT3ZlcmZsb3dNdWw8VD4ob3RoZXIpKQor
ICAgICAgICAgICAgcmV0dXJuIHRvcDxUPigpOworICAgICAgICByZXR1cm4gSW50UmFuZ2UoCisg
ICAgICAgICAgICBzdGQ6Om1pbigKKyAgICAgICAgICAgICAgICBzdGQ6Om1pbihtX21pbiAqIG90
aGVyLm1fbWluLCBtX21pbiAqIG90aGVyLm1fbWF4KSwKKyAgICAgICAgICAgICAgICBzdGQ6Om1p
bihtX21heCAqIG90aGVyLm1fbWluLCBtX21heCAqIG90aGVyLm1fbWF4KSksCisgICAgICAgICAg
ICBzdGQ6Om1heCgKKyAgICAgICAgICAgICAgICBzdGQ6Om1heChtX21pbiAqIG90aGVyLm1fbWlu
LCBtX21pbiAqIG90aGVyLm1fbWF4KSwKKyAgICAgICAgICAgICAgICBzdGQ6Om1heChtX21heCAq
IG90aGVyLm1fbWluLCBtX21heCAqIG90aGVyLm1fbWF4KSkpOworICAgIH0KKworICAgIEludFJh
bmdlIG11bChjb25zdCBJbnRSYW5nZSYgb3RoZXIsIFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgcmV0dXJu
IG11bDxpbnQzMl90PihvdGhlcik7CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICBy
ZXR1cm4gbXVsPGludDY0X3Q+KG90aGVyKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmFu
Z2UoKTsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQ2NF90IG1fbWluIHsg
MCB9OworICAgIGludDY0X3QgbV9tYXggeyAwIH07Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzTG93ZXJNYWNyb3MuY3BwCShyZXZpc2lvbiAyNDQzODIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDYgKzM5LDcgQEAKICNpbmNsdWRlICJCM0luc2VydGlvblNldElubGluZXMuaCIKICNpbmNsdWRl
ICJCM01lbW9yeVZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgi
CisjaW5jbHVkZSAiQjNQZWVwaG9sZU9wdGltaXplci5oIgogI2luY2x1ZGUgIkIzUGhhc2VTY29w
ZS5oIgogI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5saW5lcy5oIgogI2luY2x1ZGUgIkIzU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zLmgiCkBAIC04OCw3ICs4OSw5IEBACiBwcml2YXRlOgogICAgIHZv
aWQgcHJvY2Vzc0N1cnJlbnRCbG9jaygpCiAgICAgeworICAgICAgICBQZWVwaG9sZU9wdGltaXpl
ciBwZWVwaG9sZShtX3Byb2MsIG1faW5zZXJ0aW9uU2V0KTsKICAgICAgICAgZm9yIChtX2luZGV4
ID0gMDsgbV9pbmRleCA8IG1fYmxvY2stPnNpemUoKTsgKyttX2luZGV4KSB7CisgICAgICAgICAg
ICBwZWVwaG9sZS5zZXRJbmRleChtX2luZGV4KTsKICAgICAgICAgICAgIG1fdmFsdWUgPSBtX2Js
b2NrLT5hdChtX2luZGV4KTsKICAgICAgICAgICAgIG1fb3JpZ2luID0gbV92YWx1ZS0+b3JpZ2lu
KCk7CiAgICAgICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7CkBAIC05Niw2ICs5
OSw3IEBACiAgICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmlzQ2hpbGwoKSkgewogICAgICAg
ICAgICAgICAgICAgICBpZiAoaXNBUk02NCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBiZWZvcmUgPSBtX2Jsb2NrSW5zZXJ0aW9uU2V0LnNwbGl0Rm9yd2FyZChtX2Js
b2NrLCBtX2luZGV4LCAmbV9pbnNlcnRpb25TZXQpOworICAgICAgICAgICAgICAgICAgICAgICAg
cGVlcGhvbGUuc2V0SW5kZXgobV9pbmRleCk7IC8vIHNwbGl0Rm9yd2FyZCByZXNldHMgbV9pbmRl
eCwgc28gd2UgbXVzdCB1cGRhdGUgdGhlIGNvcHkgaW4gcGVlcGhvbGUKICAgICAgICAgICAgICAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIHplcm9EZW5DYXNlID0gbV9ibG9ja0luc2VydGlvblNldC5p
bnNlcnRCZWZvcmUobV9ibG9jayk7CiAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBub3JtYWxNb2RDYXNlID0gbV9ibG9ja0luc2VydGlvblNldC5pbnNlcnRCZWZvcmUobV9ibG9j
ayk7CiAKQEAgLTEyNCw3ICsxMjgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3Jl
LT51cGRhdGVQcmVkZWNlc3NvcnNBZnRlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgbV9j
aGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICBtYWtlRGl2aXNpb25DaGlsbChNb2QpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbWFrZURpdmlzaW9uQ2hpbGwoTW9kLCBwZWVwaG9sZSk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTEzOSw4ICsx
NDMsOCBAQAogICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5
KHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChtX3ZhbHVlLT50eXBlKCkgPT0gRmxvYXQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgVmFsdWUqIG51bWVyYXRvckFzRG91YmxlID0gbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0PFZhbHVlPihtX2luZGV4LCBGbG9hdFRvRG91YmxlLCBtX29yaWdpbiwgbV92YWx1ZS0+Y2hp
bGQoMCkpOwotICAgICAgICAgICAgICAgICAgICBWYWx1ZSogZGVub21pbmF0b3JBc0RvdWJsZSA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgRmxvYXRUb0RvdWJsZSwgbV9v
cmlnaW4sIG1fdmFsdWUtPmNoaWxkKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG51
bWVyYXRvckFzRG91YmxlID0gcGVlcGhvbGUucmVkdWNlRmxvYXRUb0RvdWJsZShEb3VibGUsIG1f
b3JpZ2luLCBtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBk
ZW5vbWluYXRvckFzRG91YmxlID0gcGVlcGhvbGUucmVkdWNlRmxvYXRUb0RvdWJsZShEb3VibGUs
IG1fb3JpZ2luLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CiAgICAgICAgICAgICAgICAgICAgIFZhbHVl
KiBmdW5jdGlvbkFkZHJlc3MgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3RQdHJWYWx1ZT4o
bV9pbmRleCwgbV9vcmlnaW4sIGZtb2REb3VibGUpOwogICAgICAgICAgICAgICAgICAgICBWYWx1
ZSogZG91YmxlTW9kID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENDYWxsVmFsdWU+KG1faW5kZXgs
IERvdWJsZSwgbV9vcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3RzOjpub25l
KCksCkBAIC0xNDcsMTMgKzE1MSwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rp
b25BZGRyZXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJhdG9yQXNEb3VibGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBkZW5vbWluYXRvckFzRG91YmxlKTsKLSAgICAgICAgICAg
ICAgICAgICAgVmFsdWUqIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9p
bmRleCwgRG91YmxlVG9GbG9hdCwgbV9vcmlnaW4sIGRvdWJsZU1vZCk7CisgICAgICAgICAgICAg
ICAgICAgIFZhbHVlKiByZXN1bHQgPSBwZWVwaG9sZS5yZWR1Y2VEb3VibGVUb0Zsb2F0KEZsb2F0
LCBtX29yaWdpbiwgZG91YmxlTW9kKTsKICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVw
bGFjZVdpdGhJZGVudGl0eShyZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQg
PSB0cnVlOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNBUk02NCgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIFZhbHVlKiBkaXZSZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFs
dWU+KG1faW5kZXgsIGNoaWxsKERpdiksIG1fb3JpZ2luLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92
YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbXVsdGlwbGllZEJh
Y2sgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIE11bCwgbV9vcmlnaW4s
IGRpdlJlc3VsdCwgbV92YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgICAgICBWYWx1
ZSogcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBTdWIsIG1f
b3JpZ2luLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbXVsdGlwbGllZEJhY2spOworICAgICAgICAgICAg
ICAgICAgICBWYWx1ZSogZGl2UmVzdWx0ID0gcGVlcGhvbGUucmVkdWNlRGl2KG1fdmFsdWUtPnR5
cGUoKSwgbV9vcmlnaW4sIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSwgdHJ1
ZSk7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBtdWx0aXBsaWVkQmFjayA9IHBlZXBob2xl
LnJlZHVjZU11bChtX3ZhbHVlLT50eXBlKCksIG1fb3JpZ2luLCBkaXZSZXN1bHQsIG1fdmFsdWUt
PmNoaWxkKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIHJlc3VsdCA9IHBlZXBob2xl
LnJlZHVjZVN1YihtX3ZhbHVlLT50eXBlKCksIG1fb3JpZ2luLCBtX3ZhbHVlLT5jaGlsZCgwKSwg
bXVsdGlwbGllZEJhY2spOwogICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0
aElkZW50aXR5KHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgfQpAQCAtMTYyLDkgKzE2Niw5IEBACiAKICAgICAgICAgICAgIGNh
c2UgVU1vZDogewogICAgICAgICAgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgVmFsdWUqIGRpdlJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4o
bV9pbmRleCwgVURpdiwgbV9vcmlnaW4sIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGls
ZCgxKSk7Ci0gICAgICAgICAgICAgICAgICAgIFZhbHVlKiBtdWx0aXBsaWVkQmFjayA9IG1faW5z
ZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgTXVsLCBtX29yaWdpbiwgZGl2UmVzdWx0
LCBtX3ZhbHVlLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgICAgIFZhbHVlKiByZXN1bHQg
PSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIFN1YiwgbV9vcmlnaW4sIG1f
dmFsdWUtPmNoaWxkKDApLCBtdWx0aXBsaWVkQmFjayk7CisgICAgICAgICAgICAgICAgICAgIFZh
bHVlKiBkaXZSZXN1bHQgPSBwZWVwaG9sZS5yZWR1Y2VVRGl2KG1fdmFsdWUtPnR5cGUoKSwgbV9v
cmlnaW4sIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CisgICAgICAgICAg
ICAgICAgICAgIFZhbHVlKiBtdWx0aXBsaWVkQmFjayA9IHBlZXBob2xlLnJlZHVjZU11bChtX3Zh
bHVlLT50eXBlKCksIG1fb3JpZ2luLCBkaXZSZXN1bHQsIG1fdmFsdWUtPmNoaWxkKDEpKTsKKyAg
ICAgICAgICAgICAgICAgICAgVmFsdWUqIHJlc3VsdCA9IHBlZXBob2xlLnJlZHVjZVN1YihtX3Zh
bHVlLT50eXBlKCksIG1fb3JpZ2luLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbXVsdGlwbGllZEJhY2sp
OwogICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KHJlc3Vs
dCk7CiAgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgfQpAQCAtMTczLDcgKzE3Nyw3IEBACiAKICAgICAgICAgICAgIGNhc2UgRGl2OiB7CiAgICAg
ICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmlzQ2hpbGwoKSkKLSAgICAgICAgICAgICAgICAgICAg
bWFrZURpdmlzaW9uQ2hpbGwoRGl2KTsKKyAgICAgICAgICAgICAgICAgICAgbWFrZURpdmlzaW9u
Q2hpbGwoRGl2LCBwZWVwaG9sZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAKQEAgLTIyNSwxMCArMjI5LDggQEAKICAgICAgICAgICAgICAgICBpZiAoIWlzWDg2KCkp
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gT24gQVJNLCB0aGUgbG9hZCBwYXJ0IG9mIHRoZSBD
QVMgZG9lcyBhIGxvYWQgd2l0aCB6ZXJvIGV4dGVuc2lvbi4gVGhlcmVmb3JlLCB3ZSBuZWVkCiAg
ICAgICAgICAgICAgICAgICAgIC8vIHRvIHplcm8tZXh0ZW5kIHRoZSBpbnB1dC4KLSAgICAgICAg
ICAgICAgICAgICAgVmFsdWUqIG1hc2tlZEV4cGVjdGVkVmFsdWUgPSBtX2luc2VydGlvblNldC5p
bnNlcnQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgQml0QW5kLCBt
X29yaWdpbiwgZXhwZWN0ZWRWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydEludENvbnN0YW50KG1faW5kZXgsIGV4cGVjdGVkVmFsdWUsIG1hc2sod2lk
dGgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBWYWx1ZSog
bWFza1ZhbHVlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0SW50Q29uc3RhbnQobV9pbmRleCwgZXhw
ZWN0ZWRWYWx1ZSwgbWFzayh3aWR0aCkpOworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbWFz
a2VkRXhwZWN0ZWRWYWx1ZSA9IHBlZXBob2xlLnJlZHVjZUJpdEFuZChtX3ZhbHVlLT50eXBlKCks
IG1fb3JpZ2luLCBleHBlY3RlZFZhbHVlLCBtYXNrVmFsdWUpOwogICAgICAgICAgICAgICAgICAg
ICBhdG9taWMtPmNoaWxkKDApID0gbWFza2VkRXhwZWN0ZWRWYWx1ZTsKICAgICAgICAgICAgICAg
ICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CkBAIC0zMjQsNyArMzI2
LDcgQEAKICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShtX2Jsb2NrKTsKICAgICB9CiAK
LSAgICB2b2lkIG1ha2VEaXZpc2lvbkNoaWxsKE9wY29kZSBub25DaGlsbE9wY29kZSkKKyAgICB2
b2lkIG1ha2VEaXZpc2lvbkNoaWxsKE9wY29kZSBub25DaGlsbE9wY29kZSwgUGVlcGhvbGVPcHRp
bWl6ZXImIHBlZXBob2xlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG5vbkNoaWxsT3Bjb2RlID09
IERpdiB8fCBub25DaGlsbE9wY29kZSA9PSBNb2QpOwogCkBAIC0zNDgsMTYgKzM1MCwxNyBAQAog
ICAgICAgICAvLyBkb25lOgogICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogCisgICAgICAgIFR5
cGUgdHlwZSA9IG1fdmFsdWUtPnR5cGUoKTsKKwogICAgICAgICBWYWx1ZSogbnVtID0gbV92YWx1
ZS0+Y2hpbGQoMCk7CiAgICAgICAgIFZhbHVlKiBkZW4gPSBtX3ZhbHVlLT5jaGlsZCgxKTsKIAog
ICAgICAgICBWYWx1ZSogb25lID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0SW50Q29uc3RhbnQobV9p
bmRleCwgbV92YWx1ZSwgMSk7Ci0gICAgICAgIFZhbHVlKiBpc0Rlbk9LID0gbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAgICAgIG1faW5kZXgsIEFib3ZlLCBtX29yaWdpbiwK
LSAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgQWRkLCBt
X29yaWdpbiwgZGVuLCBvbmUpLAotICAgICAgICAgICAgb25lKTsKKyAgICAgICAgVmFsdWUqIGRl
blBsdXNPbmUgPSBwZWVwaG9sZS5yZWR1Y2VBZGQodHlwZSwgbV9vcmlnaW4sIGRlbiwgb25lKTsK
KyAgICAgICAgVmFsdWUqIGlzRGVuT0sgPSBwZWVwaG9sZS5yZWR1Y2VBYm92ZSh0eXBlLCBtX29y
aWdpbiwgZGVuUGx1c09uZSwgb25lKTsKIAogICAgICAgICBCYXNpY0Jsb2NrKiBiZWZvcmUgPSBt
X2Jsb2NrSW5zZXJ0aW9uU2V0LnNwbGl0Rm9yd2FyZChtX2Jsb2NrLCBtX2luZGV4LCAmbV9pbnNl
cnRpb25TZXQpOworICAgICAgICBwZWVwaG9sZS5zZXRJbmRleChtX2luZGV4KTsKIAogICAgICAg
ICBCYXNpY0Jsb2NrKiBub3JtYWxEaXZDYXNlID0gbV9ibG9ja0luc2VydGlvblNldC5pbnNlcnRC
ZWZvcmUobV9ibG9jayk7CiAgICAgICAgIEJhc2ljQmxvY2sqIHNoYWR5RGVuQ2FzZSA9IG1fYmxv
Y2tJbnNlcnRpb25TZXQuaW5zZXJ0QmVmb3JlKG1fYmxvY2spOwpAQCAtMzg4LDcgKzM5MSw3IEBA
CiAgICAgICAgIHplcm9EZW5DYXNlLT5zZXRTdWNjZXNzb3JzKEZyZXF1ZW50ZWRCbG9jayhtX2Js
b2NrKSk7CiAKICAgICAgICAgaW50NjRfdCBiYWROdW1lcmF0b3JDb25zdCA9IDA7Ci0gICAgICAg
IHN3aXRjaCAobV92YWx1ZS0+dHlwZSgpKSB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAg
ICAgICBjYXNlIEludDMyOgogICAgICAgICAgICAgYmFkTnVtZXJhdG9yQ29uc3QgPSBzdGQ6Om51
bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKTsKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGVlcGhvbGVPcHRpbWl6ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BlZXBob2xlT3B0aW1pemVyLmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQZWVwaG9sZU9wdGlt
aXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODUxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkIzUGVlcGhvbGVPcHRpbWl6ZXIuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNDb21wdXRlRGl2aXNp
b25NYWdpYy5oIgorI2luY2x1ZGUgIkIzSW5zZXJ0aW9uU2V0SW5saW5lcy5oIgorI2luY2x1ZGUg
IkIzSW50UmFuZ2UuaCIKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlSW5saW5lcy5oIgorI2luY2x1
ZGUgIkIzUHJvY2VkdXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRl
ICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
VmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjphcHBlbmRUb0N1cnJlbnRCbG9jayhWYWx1ZSogdmFs
dWUpCit7CisgICAgaWYgKG1faW5zZXJ0aW9uU2V0KQorICAgICAgICByZXR1cm4gbV9pbnNlcnRp
b25TZXQtPmluc2VydFZhbHVlKG1faW5kZXgsIHZhbHVlKTsKKyAgICBBU1NFUlQoISFtX2Jsb2Nr
KTsKKyAgICBtX2Jsb2NrLT5hcHBlbmQodmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1
ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OmVtaXQoQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAg
ICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2sobV9wcm9jLmFkZDxWYWx1ZVR5cGU+KGFyZ3Vt
ZW50cy4uLikpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZU9wYXF1ZShU
eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogY2hpbGQsIGJvb2wgY2FuR2l2ZVVwKQoreworICAg
IC8vIFR1cm4gdGhpczogT3BhcXVlKE9wYXF1ZSh2YWx1ZSkpCisgICAgLy8gSW50byB0aGlzOiBP
cGFxdWUodmFsdWUpCisgICAgaWYgKGNoaWxkLT5vcGNvZGUoKSA9PSBPcGFxdWUpCisgICAgICAg
IHJldHVybiBjaGlsZDsKKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxW
YWx1ZT4oT3BhcXVlLCBvcmlnaW4sIGNoaWxkKTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1p
emVyOjpyZWR1Y2VBZGQoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFs
dWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmln
aHQsIGxlZnQpKQorICAgICAgICByZXR1cm4gcmVkdWNlQWRkKHR5cGUsIG9yaWdpbiwgcmlnaHQs
IGxlZnQpOworCisgICAgLy8gVHVybiB0aGlzOiBBZGQoY29uc3RhbnQxLCBjb25zdGFudDIpCisg
ICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgKyBjb25zdGFudDIKKyAgICBpZiAoVmFsdWUqIGNv
bnN0YW50ID0gbGVmdC0+YWRkQ29uc3RhbnQobV9wcm9jLCByaWdodCkpCisgICAgICAgIHJldHVy
biBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IEFk
ZCh2YWx1ZSwgemVybykKKyAgICAvLyBJbnRvIGFuIElkZW50aXR5LgorICAgIC8vCisgICAgLy8g
QWRkaXRpb24gaXMgc3VidGxlIHdpdGggZG91Ymxlcy4gWmVybyBpcyBub3QgdGhlIG5ldXRyYWwg
dmFsdWUsIG5lZ2F0aXZlIHplcm8gaXM6CisgICAgLy8gICAgMCArIDAgPSAwCisgICAgLy8gICAg
MCArIC0wID0gMAorICAgIC8vICAgIC0wICsgMCA9IDAKKyAgICAvLyAgICAtMCArIC0wID0gLTAK
KyAgICBpZiAocmlnaHQtPmlzSW50KDApIHx8IHJpZ2h0LT5pc05lZ2F0aXZlWmVybygpKQorICAg
ICAgICByZXR1cm4gbGVmdDsKKworICAgIGlmIChpc0ludCh0eXBlKSkgeworICAgICAgICBpZiAo
bGVmdC0+b3Bjb2RlKCkgPT0gQWRkKSB7CisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVn
ZXIgQWRkKEFkZCh2YWx1ZSwgY29uc3RhbnQxKSwgY29uc3RhbnQyKQorICAgICAgICAgICAgLy8g
SW50byB0aGlzOiBBZGQodmFsdWUsIGNvbnN0YW50MSArIGNvbnN0YW50MikKKyAgICAgICAgICAg
IFZhbHVlKiBuZXdTdW0gPSByaWdodC0+YWRkQ29uc3RhbnQobV9wcm9jLCBsZWZ0LT5jaGlsZCgx
KSk7CisgICAgICAgICAgICBpZiAobmV3U3VtKSB7CisgICAgICAgICAgICAgICAgbmV3U3VtID0g
YXBwZW5kVG9DdXJyZW50QmxvY2sobmV3U3VtKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVk
dWNlQWRkKHR5cGUsIG9yaWdpbiwgbGVmdC0+Y2hpbGQoMCksIG5ld1N1bSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIgQWRkKHZhbHVl
LCB2YWx1ZSkKKyAgICAgICAgLy8gSW50byB0aGlzOiBTaGwodmFsdWUsIDEpCisgICAgICAgIC8v
IFRoaXMgaXMgYSB1c2VmdWwgY2Fub25pY2FsaXphdGlvbi4gSXQncyBub3QgbWVhbnQgdG8gYmUg
YSBzdHJlbmd0aCByZWR1Y3Rpb24uCisgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KSB7CisgICAg
ICAgICAgICBWYWx1ZSogc2hpZnRBbW91bnQgPSBlbWl0PENvbnN0MzJWYWx1ZT4ob3JpZ2luLCAx
KTsKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VTaGwodHlwZSwgb3JpZ2luLCBsZWZ0LCBzaGlm
dEFtb3VudCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIgQWRk
KHZhbHVlLCBOZWcob3RoZXJWYWx1ZSkpCisgICAgICAgIC8vIEludG8gdGhpczogU3ViKHZhbHVl
LCBvdGhlclZhbHVlKQorICAgICAgICBpZiAocmlnaHQtPm9wY29kZSgpID09IE5lZykKKyAgICAg
ICAgICAgIHJldHVybiByZWR1Y2VTdWIodHlwZSwgb3JpZ2luLCBsZWZ0LCByaWdodC0+Y2hpbGQo
MCkpOworCisgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBBZGQoTmVnKHZhbHVlKSwgb3Ro
ZXJWYWx1ZSkKKyAgICAgICAgLy8gSW50byB0aGlzOiBTdWIob3RoZXJWYWx1ZSwgdmFsdWUpCisg
ICAgICAgIGlmIChsZWZ0LT5vcGNvZGUoKSA9PSBOZWcpCisgICAgICAgICAgICByZXR1cm4gcmVk
dWNlU3ViKHR5cGUsIG9yaWdpbiwgcmlnaHQsIGxlZnQtPmNoaWxkKDApKTsKKworICAgICAgICAv
LyBUdXJuIHRoaXM6IEludGVnZXIgQWRkKEFkZCh2YWx1ZSwgY29uc3RhbnQpLCBvdGhlclZhbHVl
KQorICAgICAgICAvLyBJbnRvIHRoaXM6IEFkZChBZGQodmFsdWUsIG90aGVyVmFsdWUpLCBjb25z
dGFudCkKKyAgICAgICAgLy8gRklYTUU6IHRoaXMgY2FuIGNhdXNlIGNvZGUgZHVwbGljYXRpb24s
IGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBvbmNlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTQwODEgbGFuZHMKKyAgICAgICAgaWYgKGxlZnQtPm9wY29kZSgpID09IEFk
ZCAmJiBsZWZ0LT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKKyAgICAgICAgICAgIFZhbHVlKiB2YWwg
PSByZWR1Y2VBZGQodHlwZSwgb3JpZ2luLCBsZWZ0LT5jaGlsZCgwKSwgcmlnaHQpOworICAgICAg
ICAgICAgcmV0dXJuIHJlZHVjZUFkZCh0eXBlLCBvcmlnaW4sIHZhbCwgbGVmdC0+Y2hpbGQoMSkp
OworICAgICAgICB9CisKKyAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRlZ2VyIEFkZCh2YWx1ZSwg
QWRkKG90aGVyVmFsdWUsIGNvbnN0YW50KSkKKyAgICAgICAgLy8gSW50byB0aGlzOiBBZGQoQWRk
KHZhbHVlLCBvdGhlclZhbHVlKSwgY29uc3RhbnQpCisgICAgICAgIC8vIEZJWE1FOiB0aGlzIGNh
biBjYXVzZSBjb2RlIGR1cGxpY2F0aW9uLCBhbmQgc2hvdWxkIGJlIHJlbW92ZWQgb25jZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0MDgxIGxhbmRzCisgICAgICAg
IGlmIChyaWdodC0+b3Bjb2RlKCkgPT0gQWRkICYmIHJpZ2h0LT5jaGlsZCgxKS0+aGFzSW50KCkp
IHsKKyAgICAgICAgICAgIFZhbHVlKiB2YWwgPSByZWR1Y2VBZGQodHlwZSwgb3JpZ2luLCBsZWZ0
LCByaWdodC0+Y2hpbGQoMCkpOworICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUFkZCh0eXBlLCBv
cmlnaW4sIHZhbCwgcmlnaHQtPmNoaWxkKDEpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChW
YWx1ZSogcmVzdWx0ID0gdHJ5UmVkdWNlTXVsRGlzdHJpYnV0aXZpdHkoQWRkLCB0eXBlLCBvcmln
aW4sIGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisg
ICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihBZGQsIG9yaWdpbiwg
bGVmdCwgcmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVN1YihU
eXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wg
Y2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogU3ViKGNvbnN0YW50MSwgY29uc3RhbnQy
KQorICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxIC0gY29uc3RhbnQyCisgICAgaWYgKFZhbHVl
KiBjb25zdGFudCA9IGxlZnQtPnN1YkNvbnN0YW50KG1fcHJvYywgcmlnaHQpKQorICAgICAgICBy
ZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgaWYgKGlzSW50KHR5
cGUpKSB7CisgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBTdWIodmFsdWUsIGNvbnN0YW50
KQorICAgICAgICAvLyBJbnRvIHRoaXM6IEFkZCh2YWx1ZSwgLWNvbnN0YW50KQorICAgICAgICBp
ZiAoVmFsdWUqIG5lZ2F0ZWRDb25zdGFudCA9IHJpZ2h0LT5uZWdDb25zdGFudChtX3Byb2MpKSB7
CisgICAgICAgICAgICBuZWdhdGVkQ29uc3RhbnQgPSBhcHBlbmRUb0N1cnJlbnRCbG9jayhuZWdh
dGVkQ29uc3RhbnQpOworICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUFkZCh0eXBlLCBvcmlnaW4s
IGxlZnQsIG5lZ2F0ZWRDb25zdGFudCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUdXJuIHRo
aXM6IEludGVnZXIgU3ViKDAsIHZhbHVlKQorICAgICAgICAvLyBJbnRvIHRoaXM6IE5lZyh2YWx1
ZSkKKyAgICAgICAgaWYgKGxlZnQtPmlzSW50KDApKQorICAgICAgICAgICAgcmV0dXJuIHJlZHVj
ZU5lZyh0eXBlLCBvcmlnaW4sIHJpZ2h0KTsKKworICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVn
ZXIgU3ViKHZhbHVlLCB2YWx1ZSkKKyAgICAgICAgLy8gSW50byB0aGlzOiAwCisgICAgICAgIGlm
IChsZWZ0ID09IHJpZ2h0KQorICAgICAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2Nr
KG1fcHJvYy5hZGRJbnRDb25zdGFudChvcmlnaW4sIHR5cGUsIDApKTsKKworICAgICAgICAvLyBU
dXJuIHRoaXM6IEludGVnZXIgU3ViKHZhbHVlLCBOZWcob3RoZXJWYWx1ZSkpCisgICAgICAgIC8v
IEludG8gdGhpczogQWRkKHZhbHVlLCBvdGhlclZhbHVlKQorICAgICAgICBpZiAocmlnaHQtPm9w
Y29kZSgpID09IE5lZykKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VBZGQodHlwZSwgb3JpZ2lu
LCBsZWZ0LCByaWdodC0+Y2hpbGQoMCkpOworCisgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdl
ciBTdWIoLTEsIHZhbHVlKQorICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdFhvcih2YWx1ZSwgLTEp
CisgICAgICAgIGlmIChsZWZ0LT5pc0ludCgtMSkpCisgICAgICAgICAgICByZXR1cm4gcmVkdWNl
Qml0WG9yKHR5cGUsIG9yaWdpbiwgcmlnaHQsIGxlZnQpOworCisgICAgICAgIGlmIChWYWx1ZSog
cmVzdWx0ID0gdHJ5UmVkdWNlTXVsRGlzdHJpYnV0aXZpdHkoU3ViLCB0eXBlLCBvcmlnaW4sIGxl
ZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgcmV0
dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihTdWIsIG9yaWdpbiwgbGVmdCwg
cmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZU5lZyhUeXBlIHR5
cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBjaGlsZCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAg
Ly8gVHVybiB0aGlzOiBOZWcoY29uc3RhbnQpCisgICAgLy8gSW50byB0aGlzOiAtY29uc3RhbnQK
KyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gY2hpbGQtPm5lZ0NvbnN0YW50KG1fcHJvYykpCisg
ICAgICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICAvLyBU
dXJuIHRoaXM6IE5lZyhOZWcodmFsdWUpKQorICAgIC8vIEludG8gdGhpczogdmFsdWUKKyAgICBp
ZiAoY2hpbGQtPm9wY29kZSgpID09IE5lZykKKyAgICAgICAgcmV0dXJuIGNoaWxkLT5jaGlsZCgw
KTsKKworICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBOZWcoU3ViKHZhbHVlLCBvdGhlclZhbHVl
KSkKKyAgICAvLyBJbnRvIHRoaXM6IFN1YihvdGhlclZhbHVlLCB2YWx1ZSkKKyAgICBpZiAoaXNJ
bnQodHlwZSkgJiYgY2hpbGQtPm9wY29kZSgpID09IFN1YikKKyAgICAgICAgcmV0dXJuIHJlZHVj
ZVN1Yih0eXBlLCBvcmlnaW4sIGNoaWxkLT5jaGlsZCgxKSwgY2hpbGQtPmNoaWxkKDApKTsKKwor
ICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBOZWcoTXVsKHZhbHVlLCBjKSkKKyAgICAvLyBJbnRv
IHRoaXM6IE11bCh2YWx1ZSwgLWMpLCBhcyBsb25nIGFzIC1jIGRvZXMgbm90IG92ZXJmbG93Cisg
ICAgaWYgKGNoaWxkLT5vcGNvZGUoKSA9PSBNdWwgJiYgY2hpbGQtPmNoaWxkKDEpLT5oYXNJbnQo
KSkgeworICAgICAgICBpbnQ2NF90IGZhY3RvciA9IGNoaWxkLT5jaGlsZCgxKS0+YXNJbnQoKTsK
KyAgICAgICAgaWYgKHR5cGUgPT0gSW50MzIgJiYgZmFjdG9yICE9IHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50MzJfdD46Om1pbigpKSB7CisgICAgICAgICAgICBWYWx1ZSogbmV3RmFjdG9yID0gZW1p
dDxDb25zdDMyVmFsdWU+KGNoaWxkLT5jaGlsZCgxKS0+b3JpZ2luKCksIC1mYWN0b3IpOworICAg
ICAgICAgICAgcmV0dXJuIHJlZHVjZU11bCh0eXBlLCBvcmlnaW4sIGNoaWxkLT5jaGlsZCgwKSwg
bmV3RmFjdG9yKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZSA9PSBJbnQ2NCAmJiBmYWN0
b3IgIT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkpIHsKKyAgICAgICAgICAg
IFZhbHVlKiBuZXdGYWN0b3IgPSBlbWl0PENvbnN0NjRWYWx1ZT4oY2hpbGQtPmNoaWxkKDEpLT5v
cmlnaW4oKSwgLWZhY3Rvcik7CisgICAgICAgICAgICByZXR1cm4gcmVkdWNlTXVsKHR5cGUsIG9y
aWdpbiwgY2hpbGQtPmNoaWxkKDApLCBuZXdGYWN0b3IpOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihOZWcsIG9yaWdpbiwg
Y2hpbGQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZU11bChUeXBlIHR5
cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2
ZVVwKQoreworICAgIGlmIChzaG91bGRHb0JlZm9yZShyaWdodCwgbGVmdCkpCisgICAgICAgIHJl
dHVybiByZWR1Y2VNdWwodHlwZSwgb3JpZ2luLCByaWdodCwgbGVmdCk7CisKKyAgICAvLyBUdXJu
IHRoaXM6IE11bChjb25zdGFudDEsIGNvbnN0YW50MikKKyAgICAvLyBJbnRvIHRoaXM6IGNvbnN0
YW50MSAqIGNvbnN0YW50MgorICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBsZWZ0LT5tdWxDb25z
dGFudChtX3Byb2MsIHJpZ2h0KSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2Nr
KGNvbnN0YW50KTsKKworICAgIGlmIChyaWdodC0+aGFzSW50KCkpIHsKKyAgICAgICAgaW50NjRf
dCBmYWN0b3IgPSByaWdodC0+YXNJbnQoKTsKKworICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2
YWx1ZSwgMCkKKyAgICAgICAgLy8gSW50byB0aGlzOiAwCisgICAgICAgIC8vIE5vdGUgdGhhdCB3
ZSBkb24ndCBkbyB0aGlzIGZvciBkb3VibGVzIGJlY2F1c2UgdGhhdCdzIHdyb25nLiBGb3IgZXhh
bXBsZSwgLTEgKiAwCisgICAgICAgIC8vIGFuZCAxICogMCB5aWVsZCBkaWZmZXJlbnQgcmVzdWx0
cy4KKyAgICAgICAgaWYgKCFmYWN0b3IpCisgICAgICAgICAgICByZXR1cm4gcmlnaHQ7CisKKyAg
ICAgICAgLy8gVHVybiB0aGlzOiBNdWwodmFsdWUsIDEpCisgICAgICAgIC8vIEludG8gdGhpczog
dmFsdWUKKyAgICAgICAgaWYgKGZhY3RvciA9PSAxKQorICAgICAgICAgICAgcmV0dXJuIGxlZnQ7
CisKKyAgICAgICAgLy8gVHVybiB0aGlzOiBNdWwodmFsdWUsIC0xKQorICAgICAgICAvLyBJbnRv
IHRoaXM6IE5lZyh2YWx1ZSkKKyAgICAgICAgaWYgKGZhY3RvciA9PSAtMSkKKyAgICAgICAgICAg
IHJldHVybiByZWR1Y2VOZWcodHlwZSwgb3JpZ2luLCBsZWZ0KTsKKworICAgICAgICAvLyBUdXJu
IHRoaXM6IE11bCh2YWx1ZSwgY29uc3RhbnQpCisgICAgICAgIC8vIEludG8gdGhpczogU2hsKHZh
bHVlLCBsb2cyKGNvbnN0YW50KSkKKyAgICAgICAgaWYgKGhhc09uZUJpdFNldChmYWN0b3IpKSB7
CisgICAgICAgICAgICB1bnNpZ25lZCBzaGlmdEFtb3VudCA9IFdURjo6ZmFzdExvZzIoc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KGZhY3RvcikpOworICAgICAgICAgICAgVmFsdWUqIHNoaWZ0Q29uc3Rh
bnQgPSBlbWl0PENvbnN0MzJWYWx1ZT4ob3JpZ2luLCBzaGlmdEFtb3VudCk7CisgICAgICAgICAg
ICByZXR1cm4gcmVkdWNlU2hsKHR5cGUsIG9yaWdpbiwgbGVmdCwgc2hpZnRDb25zdGFudCk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHJpZ2h0LT5oYXNEb3VibGUoKSkgeworICAgICAgICBk
b3VibGUgZmFjdG9yID0gcmlnaHQtPmFzRG91YmxlKCk7CisKKyAgICAgICAgLy8gVHVybiB0aGlz
OiBNdWwodmFsdWUsIDEpCisgICAgICAgIC8vIEludG8gdGhpczogdmFsdWUKKyAgICAgICAgaWYg
KGZhY3RvciA9PSAxKQorICAgICAgICAgICAgcmV0dXJuIGxlZnQ7CisgICAgfQorCisgICAgaWYg
KGlzSW50KHR5cGUpKSB7CisgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBNdWwodmFsdWUs
IE5lZyhvdGhlclZhbHVlKSkKKyAgICAgICAgLy8gSW50byB0aGlzOiBOZWcoTXVsKHZhbHVlLCBv
dGhlclZhbHVlKSkKKyAgICAgICAgaWYgKHJpZ2h0LT5vcGNvZGUoKSA9PSBOZWcpIHsKKyAgICAg
ICAgICAgIFZhbHVlKiBuZXdNdWwgPSByZWR1Y2VNdWwodHlwZSwgb3JpZ2luLCBsZWZ0LCByaWdo
dC0+Y2hpbGQoMCkpOworICAgICAgICAgICAgcmV0dXJuIHJlZHVjZU5lZyh0eXBlLCBvcmlnaW4s
IG5ld011bCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRlZ2VyIE11bChO
ZWcodmFsdWUpLCBvdGhlclZhbHVlKQorICAgICAgICAvLyBJbnRvIHRoaXM6IE5lZyhNdWwodmFs
dWUsIG90aGVyVmFsdWUpKQorICAgICAgICBpZiAobGVmdC0+b3Bjb2RlKCkgPT0gTmVnKSB7Cisg
ICAgICAgICAgICBWYWx1ZSogbmV3TXVsID0gcmVkdWNlTXVsKHR5cGUsIG9yaWdpbiwgbGVmdC0+
Y2hpbGQoMCksIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VOZWcodHlwZSwgb3Jp
Z2luLCBuZXdNdWwpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/
IG51bGxwdHIgOiBlbWl0PFZhbHVlPihNdWwsIG9yaWdpbiwgbGVmdCwgcmlnaHQpOworfQorCitW
YWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZURpdihUeXBlIHR5cGUsIE9yaWdpbiBvcmln
aW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgaXNDaGlsbCwgYm9vbCBjYW5HaXZl
VXApCit7CisgICAgLy8gVHVybiB0aGlzOiBEaXYoY29uc3RhbnQxLCBjb25zdGFudDIpCisgICAg
Ly8gSW50byB0aGlzOiBjb25zdGFudDEgLyBjb25zdGFudDIKKyAgICAvLyBOb3RlIHRoYXQgdGhp
cyB1c2VzIERpdjxDaGlsbD4gc2VtYW50aWNzLiBUaGF0J3MgZmluZSwgYmVjYXVzZSB0aGUgcnVs
ZXMgZm9yIERpdgorICAgIC8vIGFyZSBzdHJpY3RseSB3ZWFrZXI6IGl0IGhhcyBjb3JuZXIgY2Fz
ZXMgd2hlcmUgaXQncyBhbGxvd2VkIHRvIGRvIGFueXRoaW5nIGl0CisgICAgLy8gbGlrZXMuCisg
ICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGxlZnQtPmRpdkNvbnN0YW50KG1fcHJvYywgcmlnaHQp
KQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAg
aWYgKHJpZ2h0LT5oYXNJbnQoKSkgeworICAgICAgICBpbnQ2NF90IGRpdmlzb3IgPSByaWdodC0+
YXNJbnQoKTsKKyAgICAgICAgaWYgKGRpdmlzb3IgPT0gLTEpIHsKKyAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogRGl2KHZhbHVlLCAtMSkKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogTmVnKHZh
bHVlKQorICAgICAgICAgICAgcmV0dXJuIHJlZHVjZU5lZyh0eXBlLCBvcmlnaW4sIGxlZnQpOwor
ICAgICAgICB9CisgICAgICAgIGlmICghZGl2aXNvcikgeworICAgICAgICAgICAgLy8gVHVybiB0
aGlzOiBEaXYodmFsdWUsIDApCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IDAKKyAgICAgICAg
ICAgIC8vIFdlIGNhbiBkbyB0aGlzIGJlY2F1c2UgaXQncyBwcmVjaXNlbHkgY29ycmVjdCBmb3Ig
Q2hpbGxEaXYgYW5kIGZvciBEaXYgd2UKKyAgICAgICAgICAgIC8vIGFyZSBhbGxvd2VkIHRvIGRv
IHdoYXRldmVyIHdlIHdhbnQuCisgICAgICAgICAgICByZXR1cm4gcmlnaHQ7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGRpdmlzb3IgPT0gMSkgeworICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBE
aXYodmFsdWUsIDEpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHZhbHVlCisgICAgICAgICAg
ICByZXR1cm4gbGVmdDsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZSA9PSBJbnQzMiAmJiBt
X3Byb2Mub3B0TGV2ZWwoKSA+PSAyKSB7CisgICAgICAgICAgICAvLyBQZXJmb3JtIHN1cGVyIGNv
bXByZWhlbnNpdmUgc3RyZW5ndGggcmVkdWN0aW9uIG9mIGRpdmlzaW9uLiBDdXJyZW50bHkgd2UK
KyAgICAgICAgICAgIC8vIG9ubHkgZG8gdGhpcyBmb3IgMzItYml0IGRpdmlzaW9ucywgc2luY2Ug
d2UgbmVlZCBhIGhpZ2ggbXVsdGlwbHkKKyAgICAgICAgICAgIC8vIG9wZXJhdGlvbi4gV2UgZW11
bGF0ZSBpdCB1c2luZyA2NC1iaXQgbXVsdGlwbHkuIFdlIGNhbid0IGVtdWxhdGUgNjQtYml0Cisg
ICAgICAgICAgICAvLyBoaWdoIG11bHRpcGx5IHdpdGggYSAxMjgtYml0IG11bHRpcGx5IGJlY2F1
c2Ugd2UgZG9uJ3QgaGF2ZSBhIDEyOC1iaXQKKyAgICAgICAgICAgIC8vIG11bHRpcGx5LiBXZSBj
b3VsZCBkbyBpdCB3aXRoIGEgcGF0Y2hwb2ludCBpZiB3ZSBjYXJlZCBiYWRseSBlbm91Z2guCisg
ICAgICAgICAgICBpbnQzMl90IGRpdmlzb3IzMiA9IHJpZ2h0LT5hc0ludDMyKCk7CisgICAgICAg
ICAgICBEaXZpc2lvbk1hZ2ljPGludDMyX3Q+IG1hZ2ljID0gY29tcHV0ZURpdmlzaW9uTWFnaWMo
ZGl2aXNvcjMyKTsKKyAgICAgICAgICAgIC8vIFBlcmZvcm0gdGhlICJoaWdoIiBtdWx0aXBsaWNh
dGlvbi4gV2UgZG8gaXQganVzdCB0byBnZXQgdGhlIGhpZ2ggYml0cy4KKyAgICAgICAgICAgIC8v
IFRoaXMgaXMgc29ydCBvZiBsaWtlIG11bHRpcGx5aW5nIGJ5IHRoZSByZWNpcHJvY2FsLCBqdXN0
IG1vcmUgZ25hcmx5LiBJdCdzCisgICAgICAgICAgICAvLyBmcm9tIEhhY2tlcidzIERlbGlnaHQg
YW5kIEkgZG9uJ3QgY2xhaW0gdG8gdW5kZXJzdGFuZCBpdC4KKyAgICAgICAgICAgIFZhbHVlKiBj
b25zdE1hZ2ljTXVsdGlwbGllciA9IGVtaXQ8Q29uc3Q2NFZhbHVlPihvcmlnaW4sIG1hZ2ljLm1h
Z2ljTXVsdGlwbGllcik7CisgICAgICAgICAgICBWYWx1ZSogc2V4dDMyTGVmdCA9IHJlZHVjZVNF
eHQzMih0eXBlLCBvcmlnaW4sIGxlZnQpOworICAgICAgICAgICAgVmFsdWUqIG11bExlZnQgPSBy
ZWR1Y2VNdWwoSW50NjQsIG9yaWdpbiwgc2V4dDMyTGVmdCwgY29uc3RNYWdpY011bHRpcGxpZXIp
OworICAgICAgICAgICAgVmFsdWUqIGNvbnN0MzIgPSBlbWl0PENvbnN0MzJWYWx1ZT4ob3JpZ2lu
LCAzMik7CisgICAgICAgICAgICBWYWx1ZSogbGFyZ2VNYWdpY1F1b3RpZW50ID0gcmVkdWNlWlNo
cih0eXBlLCBvcmlnaW4sIG11bExlZnQsIGNvbnN0MzIpOworICAgICAgICAgICAgVmFsdWUqIG1h
Z2ljUXVvdGllbnQgPSByZWR1Y2VUcnVuYyh0eXBlLCBvcmlnaW4sIGxhcmdlTWFnaWNRdW90aWVu
dCk7CisgICAgICAgICAgICBpZiAoZGl2aXNvcjMyID4gMCAmJiBtYWdpYy5tYWdpY011bHRpcGxp
ZXIgPCAwKQorICAgICAgICAgICAgICAgIG1hZ2ljUXVvdGllbnQgPSByZWR1Y2VBZGQoSW50MzIs
IG9yaWdpbiwgbWFnaWNRdW90aWVudCwgbGVmdCk7CisgICAgICAgICAgICBpZiAoZGl2aXNvcjMy
IDwgMCAmJiBtYWdpYy5tYWdpY011bHRpcGxpZXIgPiAwKQorICAgICAgICAgICAgICAgIG1hZ2lj
UXVvdGllbnQgPSByZWR1Y2VTdWIoSW50MzIsIG9yaWdpbiwgbWFnaWNRdW90aWVudCwgbGVmdCk7
CisgICAgICAgICAgICBpZiAobWFnaWMuc2hpZnQgPiAwKSB7CisgICAgICAgICAgICAgICAgVmFs
dWUqIGNvbnN0TWFnaWNTaGlmdCA9IGVtaXQ8Q29uc3QzMlZhbHVlPihvcmlnaW4sIG1hZ2ljLnNo
aWZ0KTsKKyAgICAgICAgICAgICAgICBtYWdpY1F1b3RpZW50ID0gcmVkdWNlU1Nocih0eXBlLCBv
cmlnaW4sIG1hZ2ljUXVvdGllbnQsIGNvbnN0TWFnaWNTaGlmdCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBWYWx1ZSogY29uc3QzMSA9IGVtaXQ8Q29uc3QzMlZhbHVlPihvcmlnaW4sIDMx
KTsKKyAgICAgICAgICAgIFZhbHVlKiBzaGlmdGVkTWFnaWNRdW90aWVudCA9IHJlZHVjZVpTaHIo
dHlwZSwgb3JpZ2luLCBtYWdpY1F1b3RpZW50LCBjb25zdDMxKTsKKyAgICAgICAgICAgIHJldHVy
biByZWR1Y2VBZGQoSW50MzIsIG9yaWdpbiwgbWFnaWNRdW90aWVudCwgc2hpZnRlZE1hZ2ljUXVv
dGllbnQpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNhbkdpdmVVcCkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgS2luZCBkaXZLaW5kID0gRGl2OworICAgIGRpdktpbmQuc2V0
SXNDaGlsbChpc0NoaWxsKTsKKyAgICByZXR1cm4gZW1pdDxWYWx1ZT4oZGl2S2luZCwgb3JpZ2lu
LCBsZWZ0LCByaWdodCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlVURp
dihUeXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNh
bkdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6IFVEaXYoY29uc3RhbnQxLCBjb25zdGFudDIp
CisgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgLyBjb25zdGFudDIKKyAgICBpZiAoVmFsdWUq
IGNvbnN0YW50ID0gbGVmdC0+dURpdkNvbnN0YW50KG1fcHJvYywgcmlnaHQpKQorICAgICAgICBy
ZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgaWYgKHJpZ2h0LT5o
YXNJbnQoKSkgeworICAgICAgICBpbnQ2NF90IGRpdmlzb3IgPSByaWdodC0+YXNJbnQoKTsKKyAg
ICAgICAgaWYgKCFkaXZpc29yKSB7CisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFVEaXYodmFs
dWUsIDApCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IDAKKyAgICAgICAgICAgIC8vIFdlIGNh
biBkbyB3aGF0ZXZlciB3ZSB3YW50IGhlcmUgc28gd2UgbWlnaHQgYXMgd2VsbCBkbyB0aGUgY2hp
bGwgdGhpbmcsCisgICAgICAgICAgICAvLyBpbiBjYXNlIHdlIGFkZCBjaGlsbCB2ZXJzaW9ucyBv
ZiBVRGl2IGluIHRoZSBmdXR1cmUuCisgICAgICAgICAgICByZXR1cm4gcmlnaHQ7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGRpdmlzb3IgPT0gMSkgeworICAgICAgICAgICAgLy8gVHVybiB0aGlz
OiBVRGl2KHZhbHVlLCAxKQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZQorICAgICAg
ICAgICAgcmV0dXJuIGxlZnQ7CisgICAgICAgIH0KKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBkbyBjb21wcmVoZW5zaXZlIHN0cmVuZ3RoIHJlZHVjdGlvbiBmb3IgdW5zaWduZWQgbnVtYmVy
cy4gTGlrZWx5LAorICAgICAgICAvLyB3ZSB3aWxsIGp1c3Qgd2FudCBjb3B5IHdoYXQgbGx2bSBk
b2VzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0ODA5CisgICAg
fQorCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihVRGl2LCBv
cmlnaW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1
Y2VNb2QoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0
LCBib29sIGlzQ2hpbGwsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogTW9k
KGNvbnN0YW50MSwgY29uc3RhbnQyKQorICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxICUgY29u
c3RhbnQyCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgdXNlcyBNb2Q8Q2hpbGw+IHNlbWFudGljcy4K
KyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbGVmdC0+bW9kQ29uc3RhbnQobV9wcm9jLCByaWdo
dCkpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAg
ICBpZiAocmlnaHQtPmhhc0ludCgpKSB7CisgICAgICAgIGludDY0X3QgZGl2aXNvciA9IHJpZ2h0
LT5hc0ludCgpOworICAgICAgICBpZiAoIWRpdmlzb3IpIHsKKyAgICAgICAgICAgIC8vIFR1cm4g
dGhpczogTW9kKHZhbHVlLCAwKQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiAwCisgICAgICAg
ICAgICAvLyBUaGlzIGlzIGNvcnJlY3QgYWNjb3JkaW5nIHRvIENoaWxsTW9kIHNlbWFudGljcy4K
KyAgICAgICAgICAgIHJldHVybiByaWdodDsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZSA9
PSBJbnQzMiAmJiBtX3Byb2Mub3B0TGV2ZWwoKSA+PSAyKSB7CisgICAgICAgICAgICAvLyBUdXJu
IHRoaXM6IE1vZChOLCBEKQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTdWIoTiwgTXVsKERp
dihOLCBEKSwgRCkpCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHNw
ZWVkLXVwIGJlY2F1c2Ugd2UgdXNlIG91ciBleGlzdGluZyBEaXYgb3B0aW1pemF0aW9ucy4KKyAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBIZXJlJ3MgYW4gZWFzaWVyIHdheSB0byBsb29r
IGF0IGl0OgorICAgICAgICAgICAgLy8gICAgIE4gJSBEID0gTiAtIE4gLyBEICogRAorICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IHdvcmsgZm9y
IEQgPSAwIGFuZCBDaGlsbE1vZC4gVGhlIGV4cGVjdGVkIHJlc3VsdCBpcyAwLgorICAgICAgICAg
ICAgLy8gVGhhdCdzIHdoeSB3ZSBoYXZlIGEgc3BlY2lhbC1jYXNlIGFib3ZlLgorICAgICAgICAg
ICAgLy8gICAgIFggJSAwID0gWCAtIFggLyAwICogMCA9IFggICAgIChzaG91bGQgYmUgMCkKKyAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGlzIGRvZXMgd29yayBmb3IgdGhlIEQgPSAt
MSBzcGVjaWFsIGNhc2UuCisgICAgICAgICAgICAvLyAgICAgLTJeMzEgJSAtMSA9IC0yXjMxIC0g
LTJeMzEgLyAtMSAqIC0xCisgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICA9IC0yXjMxIC0g
LTJeMzEgKiAtMQorICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgPSAtMl4zMSAtIC0yXjMx
CisgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICA9IDAKKyAgICAgICAgICAgIFZhbHVlKiBk
aXYgPSByZWR1Y2VEaXYodHlwZSwgb3JpZ2luLCBsZWZ0LCByaWdodCwgaXNDaGlsbCk7CisgICAg
ICAgICAgICBWYWx1ZSogbXVsID0gcmVkdWNlTXVsKHR5cGUsIG9yaWdpbiwgZGl2LCByaWdodCk7
CisgICAgICAgICAgICByZXR1cm4gcmVkdWNlU3ViKHR5cGUsIG9yaWdpbiwgbGVmdCwgbXVsKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjYW5HaXZlVXApCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIEtpbmQgbW9kS2luZCA9IE1vZDsKKyAgICBtb2RLaW5kLnNldElzQ2hpbGwo
aXNDaGlsbCk7CisgICAgcmV0dXJuIGVtaXQ8VmFsdWU+KG1vZEtpbmQsIG9yaWdpbiwgbGVmdCwg
cmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVVNb2QoVHlwZSwg
T3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXAp
Cit7CisgICAgLy8gVHVybiB0aGlzOiBVTW9kKGNvbnN0YW50MSwgY29uc3RhbnQyKQorICAgIC8v
IEludG8gdGhpczogY29uc3RhbnQxICUgY29uc3RhbnQyCisgICAgaWYgKFZhbHVlKiBjb25zdGFu
dCA9IGxlZnQtPnVNb2RDb25zdGFudChtX3Byb2MsIHJpZ2h0KSkKKyAgICAgICAgcmV0dXJuIGFw
cGVuZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50KTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
ZG8gd2hhdCB3ZSBkbyBmb3IgTW9kIHNpbmNlIHRoZSBzYW1lIHByaW5jaXBsZSBhcHBsaWVzIGhl
cmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDgw
OQorCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihVTW9kLCBv
cmlnaW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1
Y2VCaXRBbmQoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJp
Z2h0LCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxl
ZnQpKQorICAgICAgICByZXR1cm4gcmVkdWNlQml0QW5kKHR5cGUsIG9yaWdpbiwgcmlnaHQsIGxl
ZnQpOworCisgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoY29uc3RhbnQxLCBjb25zdGFudDIpCisg
ICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgJiBjb25zdGFudDIKKyAgICBpZiAoVmFsdWUqIGNv
bnN0YW50ID0gbGVmdC0+Yml0QW5kQ29uc3RhbnQobV9wcm9jLCByaWdodCkpCisgICAgICAgIHJl
dHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICAvLyBUdXJuIHRoaXM6
IEJpdEFuZCh2YWx1ZVgsIHZhbHVlWCkKKyAgICAvLyBJbnRvIHRoaXM6IHZhbHVlWC4KKyAgICBp
ZiAobGVmdCA9PSByaWdodCkKKyAgICAgICAgcmV0dXJuIGxlZnQ7CisKKyAgICAvLyBUdXJuIHRo
aXM6IEJpdEFuZCh2YWx1ZSwgemVyby1jb25zdGFudCkKKyAgICAvLyBJbnRvIHRoaXM6IHplcm8t
Y29uc3RhbnQuCisgICAgaWYgKHJpZ2h0LT5pc0ludCgwKSkKKyAgICAgICAgcmV0dXJuIHJpZ2h0
OworCisgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQodmFsdWUsIGFsbC1vbmVzKQorICAgIC8vIElu
dG8gdGhpczogdmFsdWUuCisgICAgaWYgKCh0eXBlID09IEludDY0ICYmIHJpZ2h0LT5pc0ludChz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpKQorICAgICAgICB8fCAodHlwZSA9
PSBJbnQzMiAmJiByaWdodC0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1h
eCgpKSkpIHsKKyAgICAgICAgcmV0dXJuIGxlZnQ7CisgICAgfQorCisgICAgLy8gVHVybiB0aGlz
OiBCaXRBbmQoQml0QW5kKHZhbHVlLCBjb25zdGFudDEpLCBjb25zdGFudDIpCisgICAgLy8gSW50
byB0aGlzOiBCaXRBbmQodmFsdWUsIGNvbnN0YW50MSAmIGNvbnN0YW50MikuCisgICAgaWYgKGxl
ZnQtPm9wY29kZSgpID09IEJpdEFuZCkgeworICAgICAgICBWYWx1ZSogbmV3Q29uc3RhbnQgPSBy
aWdodC0+Yml0QW5kQ29uc3RhbnQobV9wcm9jLCBsZWZ0LT5jaGlsZCgxKSk7CisgICAgICAgIGlm
IChuZXdDb25zdGFudCkgeworICAgICAgICAgICAgbmV3Q29uc3RhbnQgPSBhcHBlbmRUb0N1cnJl
bnRCbG9jayhuZXdDb25zdGFudCk7CisgICAgICAgICAgICByZXR1cm4gcmVkdWNlQml0QW5kKHR5
cGUsIG9yaWdpbiwgbGVmdC0+Y2hpbGQoMCksIG5ld0NvbnN0YW50KTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIFR1cm4gdGhpczogQml0QW5kKDY0LWJpdCB2YWx1ZSwgMzIgb25lcykKKyAg
ICAvLyBJbnRvIHRoaXM6IFpFeHQzMihUcnVuYyg2NC1iaXQgdmFsdWUpKQorICAgIGlmIChyaWdo
dC0+aXNJbnQ2NCgweGZmZmZmZmZmbGx1KSkgeworICAgICAgICBWYWx1ZSogdHJ1bmMgPSByZWR1
Y2VUcnVuYyh0eXBlLCBvcmlnaW4sIGxlZnQpOworICAgICAgICByZXR1cm4gcmVkdWNlWkV4dDMy
KHR5cGUsIG9yaWdpbiwgdHJ1bmMpOworICAgIH0KKworICAgIC8vIFR1cm4gdGhpczogQml0QW5k
KFNFeHQ4KHZhbHVlKSwgbWFzaykgd2hlcmUgKG1hc2sgJiAweGZmZmZmZjAwKSA9PSAwCisgICAg
Ly8gSW50byB0aGlzOiBCaXRBbmQodmFsdWUsIG1hc2spCisgICAgaWYgKGxlZnQtPm9wY29kZSgp
ID09IFNFeHQ4ICYmIHJpZ2h0LT5oYXNJbnQzMigpICYmICEocmlnaHQtPmFzSW50MzIoKSAmIDB4
ZmZmZmZmMDApKQorICAgICAgICByZXR1cm4gcmVkdWNlQml0QW5kKHR5cGUsIG9yaWdpbiwgbGVm
dC0+Y2hpbGQoMCksIHJpZ2h0KTsKKworICAgIC8vIFR1cm4gdGhpczogQml0QW5kKFNFeHQxNih2
YWx1ZSksIG1hc2spIHdoZXJlIChtYXNrICYgMHhmZmZmMDAwMCkgPT0gMAorICAgIC8vIEludG8g
dGhpczogQml0QW5kKHZhbHVlLCBtYXNrKQorICAgIGlmIChsZWZ0LT5vcGNvZGUoKSA9PSBTRXh0
MTYgJiYgcmlnaHQtPmhhc0ludDMyKCkgJiYgIShyaWdodC0+YXNJbnQzMigpICYgMHhmZmZmMDAw
MCkpCisgICAgICAgIHJldHVybiByZWR1Y2VCaXRBbmQodHlwZSwgb3JpZ2luLCBsZWZ0LT5jaGls
ZCgwKSwgcmlnaHQpOworCisgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoU0V4dDMyKHZhbHVlKSwg
bWFzaykgd2hlcmUgKG1hc2sgJiAweGZmZmZmZmZmMDAwMDAwMDApID09IDAKKyAgICAvLyBJbnRv
IHRoaXM6IEJpdEFuZChaRXh0MzIodmFsdWUpLCBtYXNrKQorICAgIGlmIChsZWZ0LT5vcGNvZGUo
KSA9PSBTRXh0MzIgJiYgcmlnaHQtPmhhc0ludDY0KCkKKyAgICAgICAgJiYgIShyaWdodC0+YXNJ
bnQ2NCgpICYgMHhmZmZmZmZmZjAwMDAwMDAwbGx1KSkgeworICAgICAgICBWYWx1ZSogemV4dDMy
ID0gcmVkdWNlWkV4dDMyKHR5cGUsIG9yaWdpbiwgbGVmdC0+Y2hpbGQoMCkpOworICAgICAgICBy
ZXR1cm4gcmVkdWNlQml0QW5kKHR5cGUsIG9yaWdpbiwgemV4dDMyLCByaWdodCk7CisgICAgfQor
CisgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoT3AodmFsdWUsIGNvbnN0YW50MSksIGNvbnN0YW50
MikKKyAgICAvLyAgICAgd2hlcmUgIShjb25zdGFudDEgJiBjb25zdGFudDIpCisgICAgLy8gICAg
ICAgYW5kIE9wIGlzIEJpdE9yIG9yIEJpdFhvcgorICAgIC8vIGludG8gdGhpczogQml0QW5kKHZh
bHVlLCBjb25zdGFudDIpCisgICAgLy8gRklYTUU6IHdlIGNvdWxkIGRvIHRoaXMgZm9yIG5vbi1j
b25zdGFudCBjb25zdGFudDIgaGVyZSBvbmNlIHdlIGhhdmUgYSBrbm93bkJpdHMgYW5hbHlzaXMu
CisgICAgaWYgKHJpZ2h0LT5oYXNJbnQoKSkgeworICAgICAgICBpbnQ2NF90IGNvbnN0YW50MiA9
IHJpZ2h0LT5hc0ludCgpOworICAgICAgICBzd2l0Y2ggKGxlZnQtPm9wY29kZSgpKSB7CisgICAg
ICAgIGNhc2UgQml0T3I6CisgICAgICAgIGNhc2UgQml0WG9yOgorICAgICAgICAgICAgaWYgKGxl
ZnQtPmNoaWxkKDEpLT5oYXNJbnQoKSAmJiAhKGxlZnQtPmNoaWxkKDEpLT5hc0ludCgpICYgY29u
c3RhbnQyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVkdWNlQml0QW5kKHR5cGUsIG9yaWdp
biwgbGVmdC0+Y2hpbGQoMCksIHJpZ2h0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBU
dXJuIHRoaXM6IEJpdEFuZChCaXRYb3IoeDEsIGFsbE9uZXMpLCBCaXRYb3IoeDIsIGFsbE9uZXMp
CisgICAgLy8gSW50byB0aGlzOiBCaXRYb3IoQml0T3IoeDEsIHgyKSwgYWxsT25lcykKKyAgICAv
LyBCeSBhcHBseWluZyBEZSBNb3JnYW4gbGF3cworICAgIC8vIEZJWE1FOiB3aXRoIGEga25vd25C
aXRzIGFuYWx5c2lzLCB0aGlzIGNvdWxkIGV4dGVuZCB0byBhbnkgY29uc3RhbnQgdGhhdCBpbmNs
dWRlcyBhbGwgYml0cyBpbiB4MSBhbmQgeDIKKyAgICBpZiAobGVmdC0+b3Bjb2RlKCkgPT0gQml0
WG9yCisgICAgICAgICYmIHJpZ2h0LT5vcGNvZGUoKSA9PSBCaXRYb3IKKyAgICAgICAgJiYgKCh0
eXBlID09IEludDY0CisgICAgICAgICAgICAmJiBsZWZ0LT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpKQorICAgICAgICAgICAgJiYgcmlnaHQtPmNo
aWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpKQorICAg
ICAgICB8fCAodHlwZSA9PSBJbnQzMgorICAgICAgICAgICAgJiYgbGVmdC0+Y2hpbGQoMSktPmlz
SW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkKKyAgICAgICAgICAgICYm
IHJpZ2h0LT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1h
eCgpKSkpKSB7CisgICAgICAgIFZhbHVlKiBiaXRPciA9IHJlZHVjZUJpdE9yKHR5cGUsIG9yaWdp
biwgbGVmdC0+Y2hpbGQoMCksIHJpZ2h0LT5jaGlsZCgwKSk7CisgICAgICAgIHJldHVybiByZWR1
Y2VCaXRYb3IodHlwZSwgb3JpZ2luLCBiaXRPciwgbGVmdC0+Y2hpbGQoMSkpOworICAgIH0KKwor
ICAgIC8vIFR1cm4gdGhpczogQml0QW5kKEJpdFhvcih4LCBhbGxPbmVzKSwgYykKKyAgICAvLyBJ
bnRvIHRoaXM6IEJpdFhvcihCaXRPcih4LCB+YyksIGFsbE9uZXMpCisgICAgLy8gVGhpcyBpcyBh
IHZhcmlhdGlvbiBvbiB0aGUgcHJldmlvdXMgb3B0aW1pemF0aW9uLCB0cmVhdGluZyBjIGFzIGlm
IGl0IHdlcmUgQml0WG9yKH5jLCBhbGxPbmVzKQorICAgIC8vIEl0IGRvZXMgbm90IHJlZHVjZSB0
aGUgbnVtYmVyIG9mIG9wZXJhdGlvbnMsIGJ1dCBwcm92aWRlcyBzb21lIG5vcm1hbGl6YXRpb24g
KHdlIHRyeSB0byBnZXQgQml0WG9yIGJ5IGFsbE9uZXMgYXQgdGhlIG91dGVybW9zdCBwb2ludCks
IGFuZCBzb21lIGNoYW5jZSB0byBmbG9hdCBYb3JzIHRvIGEgcGxhY2Ugd2hlcmUgdGhleSBtaWdo
dCBnZXQgZWxpbWluYXRlZC4KKyAgICBpZiAobGVmdC0+b3Bjb2RlKCkgPT0gQml0WG9yCisgICAg
ICAgICYmIHJpZ2h0LT5oYXNJbnQoKQorICAgICAgICAmJiAoKHR5cGUgPT0gSW50NjQgJiYgbGVm
dC0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSkp
CisgICAgICAgIHx8ICh0eXBlID09IEludDMyICYmIGxlZnQtPmNoaWxkKDEpLT5pc0ludChzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpKSkpIHsKKyAgICAgICAgVmFsdWUqIGJp
dE9yID0gcmVkdWNlQml0T3IodHlwZSwgb3JpZ2luLCBsZWZ0LT5jaGlsZCgwKSwgcmlnaHQtPmJp
dFhvckNvbnN0YW50KG1fcHJvYywgbGVmdC0+Y2hpbGQoMSkpKTsKKyAgICAgICAgcmV0dXJuIHJl
ZHVjZUJpdFhvcih0eXBlLCBvcmlnaW4sIGJpdE9yLCBsZWZ0LT5jaGlsZCgxKSk7CisgICAgfQor
CisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihCaXRBbmQsIG9y
aWdpbiwgbGVmdCwgcmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVj
ZUJpdE9yKFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdo
dCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgaWYgKHNob3VsZEdvQmVmb3JlKHJpZ2h0LCBsZWZ0
KSkKKyAgICAgICAgcmV0dXJuIHJlZHVjZUJpdE9yKHR5cGUsIG9yaWdpbiwgcmlnaHQsIGxlZnQp
OworCisgICAgLy8gVHVybiB0aGlzOiBCaXRPcihjb25zdGFudDEsIGNvbnN0YW50MikKKyAgICAv
LyBJbnRvIHRoaXM6IGNvbnN0YW50MSB8IGNvbnN0YW50MgorICAgIGlmIChWYWx1ZSogY29uc3Rh
bnQgPSBsZWZ0LT5iaXRPckNvbnN0YW50KG1fcHJvYywgcmlnaHQpKQorICAgICAgICByZXR1cm4g
YXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgLy8gVHVybiB0aGlzOiBCaXRP
cihCaXRPcih2YWx1ZSwgY29uc3RhbnQxKSwgY29uc3RhbnQyKQorICAgIC8vIEludG8gdGhpczog
Qml0T3IodmFsdWUsIGNvbnN0YW50MSB8IGNvbnN0YW50MikuCisgICAgaWYgKGxlZnQtPm9wY29k
ZSgpID09IEJpdE9yKSB7CisgICAgICAgIFZhbHVlKiBuZXdDb25zdGFudCA9IHJpZ2h0LT5iaXRP
ckNvbnN0YW50KG1fcHJvYywgbGVmdC0+Y2hpbGQoMSkpOworICAgICAgICBpZiAobmV3Q29uc3Rh
bnQpIHsKKyAgICAgICAgICAgIG5ld0NvbnN0YW50ID0gYXBwZW5kVG9DdXJyZW50QmxvY2sobmV3
Q29uc3RhbnQpOworICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUJpdE9yKHR5cGUsIG9yaWdpbiwg
bGVmdC0+Y2hpbGQoMCksIG5ld0NvbnN0YW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
IFR1cm4gdGhpczogQml0T3IodmFsdWVYLCB2YWx1ZVgpCisgICAgLy8gSW50byB0aGlzOiB2YWx1
ZVguCisgICAgaWYgKGxlZnQgPT0gcmlnaHQpCisgICAgICAgIHJldHVybiBsZWZ0OworCisgICAg
Ly8gVHVybiB0aGlzOiBCaXRPcih2YWx1ZSwgemVyby1jb25zdGFudCkKKyAgICAvLyBJbnRvIHRo
aXM6IHZhbHVlLgorICAgIGlmIChyaWdodC0+aXNJbnQoMCkpCisgICAgICAgIHJldHVybiBsZWZ0
OworCisgICAgLy8gVHVybiB0aGlzOiBCaXRPcih2YWx1ZSwgYWxsLW9uZXMpCisgICAgLy8gSW50
byB0aGlzOiBhbGwtb25lcy4KKyAgICAvLyBGSVhNRTogb25jZSB3ZSBoYXZlIGEga25vd25CaXRz
IGFuYWx5c2lzLCB0aGlzLCB0aGUgYmFzaWMgY29uc3RhbnRzIGNhc2UsIGFuZCBtb3JlIHdpbGwg
YmUgdHJpdmlhbGx5IG1lcmdlZC4KKyAgICBpZiAoKHR5cGUgPT0gSW50NjQgJiYgcmlnaHQtPmlz
SW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSkpCisgICAgICAgIHx8ICh0
eXBlID09IEludDMyICYmIHJpZ2h0LT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90
Pjo6bWF4KCkpKSkgeworICAgICAgICByZXR1cm4gcmlnaHQ7CisgICAgfQorCisgICAgLy8gVHVy
biB0aGlzOiBCaXRPcihCaXRYb3IoeDEsIGFsbE9uZXMpLCBCaXRYb3IoeDIsIGFsbE9uZXMpCisg
ICAgLy8gSW50byB0aGlzOiBCaXRYb3IoQml0QW5kKHgxLCB4MiksIGFsbE9uZXMpCisgICAgLy8g
QnkgYXBwbHlpbmcgRGUgTW9yZ2FuIGxhd3MKKyAgICAvLyBGSVhNRTogbGlrZSBmb3IgdGhlIHNp
bWlsYXIgcnVsZSBmb3IgQml0QW5kLCB3aXRoIGEga25vd25CaXRzIGFuYWx5c2lzIHdlIGNvdWxk
IGRvIHNvbWV0aGluZyBzaW1pbGFyIGZvciBjb25zdGFudHMgb3RoZXIgdGhhbiBhbGxPbmVzCisg
ICAgaWYgKGxlZnQtPm9wY29kZSgpID09IEJpdFhvcgorICAgICAgICAmJiByaWdodC0+b3Bjb2Rl
KCkgPT0gQml0WG9yCisgICAgICAgICYmICgodHlwZSA9PSBJbnQ2NAorICAgICAgICAgICAgJiYg
bGVmdC0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgo
KSkKKyAgICAgICAgICAgICYmIHJpZ2h0LT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xp
bWl0czx1aW50NjRfdD46Om1heCgpKSkKKyAgICAgICAgfHwgKHR5cGUgPT0gSW50MzIKKyAgICAg
ICAgICAgICYmIGxlZnQtPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQz
Ml90Pjo6bWF4KCkpCisgICAgICAgICAgICAmJiByaWdodC0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkpKSkgeworICAgICAgICBWYWx1ZSogYml0
QW5kID0gcmVkdWNlQml0QW5kKHR5cGUsIG9yaWdpbiwgbGVmdC0+Y2hpbGQoMCksIHJpZ2h0LT5j
aGlsZCgwKSk7CisgICAgICAgIHJldHVybiByZWR1Y2VCaXRYb3IodHlwZSwgb3JpZ2luLCBiaXRB
bmQsIHJpZ2h0LT5jaGlsZCgxKSk7CisgICAgfQorCisgICAgLy8gVHVybiB0aGlzOiBCaXRPcihC
aXRYb3IoeCwgYWxsT25lcyksIGMpCisgICAgLy8gSW50byB0aGlzOiBCaXRYb3IoQml0QW5kKHgs
IH5jKSwgYWxsT25lcykKKyAgICAvLyBUaGlzIGlzIGEgdmFyaWF0aW9uIG9uIHRoZSBwcmV2aW91
cyBvcHRpbWl6YXRpb24sIHRyZWF0aW5nIGMgYXMgaWYgaXQgd2VyZSBCaXRYb3IofmMsIGFsbE9u
ZXMpCisgICAgLy8gSXQgZG9lcyBub3QgcmVkdWNlIHRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucywg
YnV0IHByb3ZpZGVzIHNvbWUgbm9ybWFsaXphdGlvbiAod2UgdHJ5IHRvIGdldCBCaXRYb3IgYnkg
YWxsT25lcyBhdCB0aGUgb3V0ZXJtb3N0IHBvaW50KSwKKyAgICAvLyBhbmQgc29tZSBjaGFuY2Ug
dG8gZmxvYXQgWG9ycyB0byBhIHBsYWNlIHdoZXJlIHRoZXkgbWlnaHQgZ2V0IGVsaW1pbmF0ZWQu
CisgICAgaWYgKGxlZnQtPm9wY29kZSgpID09IEJpdFhvcgorICAgICAgICAmJiByaWdodC0+aGFz
SW50KCkKKyAgICAgICAgJiYgKCh0eXBlID09IEludDY0CisgICAgICAgICAgICAmJiBsZWZ0LT5j
aGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpKSkKKyAg
ICAgICAgfHwgKHR5cGUgPT0gSW50MzIKKyAgICAgICAgICAgICYmIGxlZnQtPmNoaWxkKDEpLT5p
c0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpKSkpIHsKKyAgICAgICAg
VmFsdWUqIGJpdEFuZCA9IHJlZHVjZUJpdEFuZCh0eXBlLCBvcmlnaW4sIGxlZnQtPmNoaWxkKDAp
LCByaWdodC0+Yml0WG9yQ29uc3RhbnQobV9wcm9jLCBsZWZ0LT5jaGlsZCgxKSkpOworICAgICAg
ICByZXR1cm4gcmVkdWNlQml0WG9yKHR5cGUsIG9yaWdpbiwgYml0QW5kLCBsZWZ0LT5jaGlsZCgx
KSk7CisgICAgfQorCisgICAgaWYgKFZhbHVlKiByZXN1bHQgPSB0cnlSZWR1Y2VCaXRBbmREaXN0
cmlidXRpdml0eShCaXRPciwgdHlwZSwgb3JpZ2luLCBsZWZ0LCByaWdodCkpCisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFs
dWU+KEJpdE9yLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0
aW1pemVyOjpyZWR1Y2VCaXRYb3IoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVm
dCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZv
cmUocmlnaHQsIGxlZnQpKQorICAgICAgICByZXR1cm4gcmVkdWNlQml0WG9yKHR5cGUsIG9yaWdp
biwgcmlnaHQsIGxlZnQpOworCisgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IoY29uc3RhbnQxLCBj
b25zdGFudDIpCisgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgXiBjb25zdGFudDIKKyAgICBp
ZiAoVmFsdWUqIGNvbnN0YW50ID0gbGVmdC0+Yml0WG9yQ29uc3RhbnQobV9wcm9jLCByaWdodCkp
CisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICAv
LyBUdXJuIHRoaXM6IEJpdFhvcihCaXRYb3IodmFsdWUsIGNvbnN0YW50MSksIGNvbnN0YW50MikK
KyAgICAvLyBJbnRvIHRoaXM6IEJpdFhvcih2YWx1ZSwgY29uc3RhbnQxIF4gY29uc3RhbnQyKS4K
KyAgICBpZiAobGVmdC0+b3Bjb2RlKCkgPT0gQml0WG9yKSB7CisgICAgICAgIFZhbHVlKiBuZXdD
b25zdGFudCA9IHJpZ2h0LT5iaXRYb3JDb25zdGFudChtX3Byb2MsIGxlZnQtPmNoaWxkKDEpKTsK
KyAgICAgICAgaWYgKG5ld0NvbnN0YW50KSB7CisgICAgICAgICAgICBuZXdDb25zdGFudCA9IGFw
cGVuZFRvQ3VycmVudEJsb2NrKG5ld0NvbnN0YW50KTsKKyAgICAgICAgICAgIHJldHVybiByZWR1
Y2VCaXRYb3IodHlwZSwgb3JpZ2luLCBsZWZ0LT5jaGlsZCgwKSwgbmV3Q29uc3RhbnQpOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IoY29tcGFyZSwgMSkKKyAg
ICAvLyBJbnRvIHRoaXM6IGludmVydGVkQ29tcGFyZQorICAgIGlmIChyaWdodC0+aXNJbnQzMigx
KSkgeworICAgICAgICBpZiAoVmFsdWUqIGludmVydGVkQ29tcGFyZSA9IGxlZnQtPmludmVydGVk
Q29tcGFyZShtX3Byb2MpKQorICAgICAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2Nr
KGludmVydGVkQ29tcGFyZSk7CisgICAgfQorCisgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IodmFs
dWVYLCB2YWx1ZVgpCisgICAgLy8gSW50byB0aGlzOiB6ZXJvLWNvbnN0YW50LgorICAgIGlmIChs
ZWZ0ID09IHJpZ2h0KQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2sobV9wcm9j
LmFkZEludENvbnN0YW50KG9yaWdpbiwgdHlwZSwgMCkpOworCisgICAgLy8gVHVybiB0aGlzOiBC
aXRYb3IodmFsdWUsIHplcm8tY29uc3RhbnQpCisgICAgLy8gSW50byB0aGlzOiB2YWx1ZS4KKyAg
ICBpZiAocmlnaHQtPmlzSW50KDApKQorICAgICAgICByZXR1cm4gbGVmdDsKKworICAgIGlmIChW
YWx1ZSogcmVzdWx0ID0gdHJ5UmVkdWNlQml0QW5kRGlzdHJpYnV0aXZpdHkoQml0WG9yLCB0eXBl
LCBvcmlnaW4sIGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIHJl
dHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oQml0WG9yLCBvcmlnaW4sIGxl
ZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VTaGwoVHlw
ZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNh
bkdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6IFNobChjb25zdGFudDEsIGNvbnN0YW50MikK
KyAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50MSA8PCBjb25zdGFudDIKKyAgICBpZiAoVmFsdWUq
IGNvbnN0YW50ID0gbGVmdC0+c2hsQ29uc3RhbnQobV9wcm9jLCByaWdodCkpCisgICAgICAgIHJl
dHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICAvLyBUdXJuIHRoaXM6
IFNobCg8U3xaPlNocihAeCwgQGNvbnN0KSwgQGNvbnN0KQorICAgIC8vIEludG8gdGhpczogQml0
QW5kKEB4LCAtKDE8PEBjb25zdCkpCisgICAgaWYgKChsZWZ0LT5vcGNvZGUoKSA9PSBTU2hyIHx8
IGxlZnQtPm9wY29kZSgpID09IFpTaHIpCisgICAgICAgICYmIGxlZnQtPmNoaWxkKDEpLT5oYXNJ
bnQoKQorICAgICAgICAmJiByaWdodC0+aGFzSW50KCkKKyAgICAgICAgJiYgbGVmdC0+Y2hpbGQo
MSktPmFzSW50KCkgPT0gcmlnaHQtPmFzSW50KCkpIHsKKyAgICAgICAgaW50IHNoaWZ0QW1vdW50
ID0gcmlnaHQtPmFzSW50KCkgJiAodHlwZSA9PSBJbnQzMiA/IDMxIDogNjMpOworICAgICAgICBW
YWx1ZSogbmV3Q29uc3QgPSBhcHBlbmRUb0N1cnJlbnRCbG9jayhtX3Byb2MuYWRkSW50Q29uc3Rh
bnQob3JpZ2luLCB0eXBlLCAtIHN0YXRpY19jYXN0PGludDY0X3Q+KDF1bGwgPDwgc2hpZnRBbW91
bnQpKSk7CisgICAgICAgIHJldHVybiByZWR1Y2VCaXRBbmQodHlwZSwgb3JpZ2luLCBsZWZ0LT5j
aGlsZCgwKSwgbmV3Q29uc3QpOworICAgIH0KKworICAgIGlmIChWYWx1ZSogcmVzdWx0ID0gdHJ5
UmVkdWNlU2hpZnRPclJvdGF0ZShTaGwsIHR5cGUsIG9yaWdpbiwgbGVmdCwgcmlnaHQpKQorICAg
ICAgICByZXR1cm4gcmVzdWx0OworCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBl
bWl0PFZhbHVlPihTaGwsIG9yaWdpbiwgbGVmdCwgcmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhv
bGVPcHRpbWl6ZXI6OnJlZHVjZVNTaHIoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSog
bGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6
IFNTaHIoY29uc3RhbnQxLCBjb25zdGFudDIpCisgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEg
Pj4gY29uc3RhbnQyCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGxlZnQtPnNTaHJDb25zdGFu
dChtX3Byb2MsIHJpZ2h0KSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKGNv
bnN0YW50KTsKKworICAgIGlmIChyaWdodC0+aGFzSW50MzIoKQorICAgICAgICAmJiBsZWZ0LT5v
cGNvZGUoKSA9PSBTaGwKKyAgICAgICAgJiYgbGVmdC0+Y2hpbGQoMSktPmhhc0ludDMyKCkKKyAg
ICAgICAgJiYgcmlnaHQtPmFzSW50MzIoKSA9PSBsZWZ0LT5jaGlsZCgxKS0+YXNJbnQzMigpKSB7
CisgICAgICAgIGlmIChyaWdodC0+YXNJbnQzMigpID09IDE2ICYmIHR5cGUgPT0gSW50MzIpIHsK
KyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU1NocihTaGwodmFsdWUsIDE2KSwgMTYpCisgICAg
ICAgICAgICAvLyBJbnRvIHRoaXM6IFNFeHQxNih2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBy
ZWR1Y2VTRXh0MTYodHlwZSwgb3JpZ2luLCBsZWZ0LT5jaGlsZCgwKSk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHJpZ2h0LT5hc0ludDMyKCkgPT0gMjQgJiYgdHlwZSA9PSBJbnQzMikgeworICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBTU2hyKFNobCh2YWx1ZSwgMjQpLCAyNCkKKyAgICAgICAg
ICAgIC8vIEludG8gdGhpczogU0V4dDgodmFsdWUpCisgICAgICAgICAgICByZXR1cm4gcmVkdWNl
U0V4dDgodHlwZSwgb3JpZ2luLCBsZWZ0LT5jaGlsZCgwKSk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHJpZ2h0LT5hc0ludDMyKCkgPT0gMzIgJiYgdHlwZSA9PSBJbnQ2NCkgeworICAgICAgICAg
ICAgLy8gVHVybiB0aGlzOiBTU2hyKFNobCh2YWx1ZSwgMzIpLCAzMikKKyAgICAgICAgICAgIC8v
IEludG8gdGhpczogU0V4dDMyKFRydW5jKHZhbHVlKSkKKyAgICAgICAgICAgIFZhbHVlKiB0cnVu
YyA9IHJlZHVjZVRydW5jKHR5cGUsIG9yaWdpbiwgbGVmdC0+Y2hpbGQoMCkpOworICAgICAgICAg
ICAgcmV0dXJuIHJlZHVjZVNFeHQzMih0eXBlLCBvcmlnaW4sIHRydW5jKTsKKyAgICAgICAgfQor
ICAgICAgICAvLyBGSVhNRTogQWRkIGNhc2VzIGZvciA0OCBhbmQgNTYsIGJ1dCB0aGF0IHdvdWxk
IHRyYW5zbGF0ZSB0byBTRXh0MzIoU0V4dDgpIG9yCisgICAgICAgIC8vIFNFeHQzMihTRXh0MTYp
LCB3aGljaCB3ZSBkb24ndCBjdXJyZW50bHkgbG93ZXIgZWZmaWNpZW50bHkuCisgICAgfQorCisg
ICAgaWYgKFZhbHVlKiByZXN1bHQgPSB0cnlSZWR1Y2VTaGlmdE9yUm90YXRlKFNTaHIsIHR5cGUs
IG9yaWdpbiwgbGVmdCwgcmlnaHQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgcmV0
dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihTU2hyLCBvcmlnaW4sIGxlZnQs
IHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VaU2hyKFR5cGUg
dHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5H
aXZlVXApCit7CisgICAgLy8gVHVybiB0aGlzOiBaU2hyKGNvbnN0YW50MSwgY29uc3RhbnQyKQor
ICAgIC8vIEludG8gdGhpczogKHVuc2lnbmVkKWNvbnN0YW50MSA+PiBjb25zdGFudDIKKyAgICBp
ZiAoVmFsdWUqIGNvbnN0YW50ID0gbGVmdC0+elNockNvbnN0YW50KG1fcHJvYywgcmlnaHQpKQor
ICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgaWYg
KFZhbHVlKiByZXN1bHQgPSB0cnlSZWR1Y2VTaGlmdE9yUm90YXRlKFpTaHIsIHR5cGUsIG9yaWdp
biwgbGVmdCwgcmlnaHQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgcmV0dXJuIGNh
bkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihaU2hyLCBvcmlnaW4sIGxlZnQsIHJpZ2h0
KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VSb3RSKFR5cGUgdHlwZSwg
T3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXAp
Cit7CisgICAgLy8gVHVybiB0aGlzOiBSb3RSKGNvbnN0YW50MSwgY29uc3RhbnQyKQorICAgIC8v
IEludG8gdGhpczogKGNvbnN0YW50MSA+PiBjb25zdGFudDIpIHwgKGNvbnN0YW50MSA8PCBzaXpl
b2YoY29uc3RhbnQxKSAqIDggLSBjb25zdGFudDIpCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9
IGxlZnQtPnJvdFJDb25zdGFudChtX3Byb2MsIHJpZ2h0KSkKKyAgICAgICAgcmV0dXJuIGFwcGVu
ZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50KTsKKworICAgIGlmIChWYWx1ZSogcmVzdWx0ID0gdHJ5
UmVkdWNlU2hpZnRPclJvdGF0ZShSb3RSLCB0eXBlLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KSkKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDog
ZW1pdDxWYWx1ZT4oUm90Uiwgb3JpZ2luLCBsZWZ0LCByaWdodCk7Cit9CisKK1ZhbHVlKiBQZWVw
aG9sZU9wdGltaXplcjo6cmVkdWNlUm90TChUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVl
KiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhp
czogUm90TChjb25zdGFudDEsIGNvbnN0YW50MikKKyAgICAvLyBJbnRvIHRoaXM6IChjb25zdGFu
dDEgPDwgY29uc3RhbnQyKSB8IChjb25zdGFudDEgPj4gc2l6ZW9mKGNvbnN0YW50MSkgKiA4IC0g
Y29uc3RhbnQyKQorICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBsZWZ0LT5yb3RMQ29uc3RhbnQo
bV9wcm9jLCByaWdodCkpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25z
dGFudCk7CisKKyAgICBpZiAoVmFsdWUqIHJlc3VsdCA9IHRyeVJlZHVjZVNoaWZ0T3JSb3RhdGUo
Um90TCwgdHlwZSwgb3JpZ2luLCBsZWZ0LCByaWdodCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7
CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KFJvdEwsIG9y
aWdpbiwgbGVmdCwgcmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVj
ZUFicyhUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBjaGlsZCwgYm9vbCBjYW5HaXZl
VXApCit7CisgICAgLy8gVHVybiB0aGlzOiBBYnMoY29uc3RhbnQpCisgICAgLy8gSW50byB0aGlz
OiBmYWJzPHR5cGU+KGNvbnN0YW50KQorICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBjaGlsZC0+
YWJzQ29uc3RhbnQobV9wcm9jKSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2Nr
KGNvbnN0YW50KTsKKworICAgIC8vIFR1cm4gdGhpczogQWJzKEFicyh2YWx1ZSkpCisgICAgLy8g
SW50byB0aGlzOiBBYnModmFsdWUpCisgICAgaWYgKGNoaWxkLT5vcGNvZGUoKSA9PSBBYnMpCisg
ICAgICAgIHJldHVybiBjaGlsZDsKKworICAgIC8vIFR1cm4gdGhpczogQWJzKE5lZyh2YWx1ZSkp
CisgICAgLy8gSW50byB0aGlzOiBBYnModmFsdWUpCisgICAgaWYgKGNoaWxkLT5vcGNvZGUoKSA9
PSBOZWcpCisgICAgICAgIHJldHVybiByZWR1Y2VBYnModHlwZSwgb3JpZ2luLCBjaGlsZC0+Y2hp
bGQoMCkpOworCisgICAgLy8gVHVybiB0aGlzOiBBYnMoQml0d2lzZUNhc3QodmFsdWUpKQorICAg
IC8vIEludG8gdGhpczogQml0d2lzZUNhc3QoQW5kKHZhbHVlLCBtYXNrLXRvcC1iaXQpKQorICAg
IGlmIChjaGlsZC0+b3Bjb2RlKCkgPT0gQml0d2lzZUNhc3QpIHsKKyAgICAgICAgVmFsdWUqIG1h
c2s7CisgICAgICAgIGlmICh0eXBlID09IERvdWJsZSkKKyAgICAgICAgICAgIG1hc2sgPSBlbWl0
PENvbnN0NjRWYWx1ZT4ob3JpZ2luLCB+KDFsbCA8PCA2MykpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBtYXNrID0gZW1pdDxDb25zdDMyVmFsdWU+KG9yaWdpbiwgfigxbGwgPDwgMzEpKTsK
KworICAgICAgICBWYWx1ZSogYml0QW5kID0gcmVkdWNlQml0QW5kKHR5cGUgPT0gRG91YmxlID8g
SW50NjQgOiBJbnQzMiwgb3JpZ2luLCBjaGlsZC0+Y2hpbGQoMCksIG1hc2spOworICAgICAgICBy
ZXR1cm4gcmVkdWNlQml0d2lzZUNhc3QodHlwZSwgb3JpZ2luLCBiaXRBbmQpOworICAgIH0KKwor
ICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oQWJzLCBvcmlnaW4s
IGNoaWxkKTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VDZWlsKFR5cGUs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBjaGlsZCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgLy8g
VHVybiB0aGlzOiBDZWlsKGNvbnN0YW50KQorICAgIC8vIEludG8gdGhpczogY2VpbDx0eXBlPihj
b25zdGFudCkKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gY2hpbGQtPmNlaWxDb25zdGFudCht
X3Byb2MpKQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOwor
CisgICAgLy8gVHVybiB0aGlzOiBDZWlsKHJvdW5kZWRWYWx1ZSkKKyAgICAvLyBJbnRvIHRoaXM6
IHJvdW5kZWRWYWx1ZQorICAgIGlmIChjaGlsZC0+aXNSb3VuZGVkKCkpCisgICAgICAgIHJldHVy
biBjaGlsZDsKKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4o
Q2VpbCwgb3JpZ2luLCBjaGlsZCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVk
dWNlRmxvb3IoVHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGNoaWxkLCBib29sIGNhbkdpdmVV
cCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6IEZsb29yKGNvbnN0YW50KQorICAgIC8vIEludG8gdGhp
czogZmxvb3I8dHlwZT4oY29uc3RhbnQpCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGNoaWxk
LT5mbG9vckNvbnN0YW50KG1fcHJvYykpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRC
bG9jayhjb25zdGFudCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IEZsb29yKHJvdW5kZWRWYWx1ZSkK
KyAgICAvLyBJbnRvIHRoaXM6IHJvdW5kZWRWYWx1ZQorICAgIGlmIChjaGlsZC0+aXNSb3VuZGVk
KCkpCisgICAgICAgIHJldHVybiBjaGlsZDsKKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxs
cHRyIDogZW1pdDxWYWx1ZT4oRmxvb3IsIG9yaWdpbiwgY2hpbGQpOworfQorCitWYWx1ZSogUGVl
cGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVNxcnQoVHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGNo
aWxkLCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6IFNxcnQoY29uc3RhbnQp
CisgICAgLy8gSW50byB0aGlzOiBzcXJ0PHR5cGU+KGNvbnN0YW50KQorICAgIGlmIChWYWx1ZSog
Y29uc3RhbnQgPSBjaGlsZC0+c3FydENvbnN0YW50KG1fcHJvYykpCisgICAgICAgIHJldHVybiBh
cHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8g
bnVsbHB0ciA6IGVtaXQ8VmFsdWU+KFNxcnQsIG9yaWdpbiwgY2hpbGQpOworfQorCitWYWx1ZSog
UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUJpdHdpc2VDYXN0KFR5cGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiBjaGlsZCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgLy8gVHVybiB0aGlzOiBCaXR3
aXNlQ2FzdChjb25zdGFudCkKKyAgICAvLyBJbnRvIHRoaXM6IGJpdHdpc2VDYXN0PHR5cGU+KGNv
bnN0YW50KQorICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBjaGlsZC0+Yml0d2lzZUNhc3RDb25z
dGFudChtX3Byb2MpKQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3Rh
bnQpOworCisgICAgLy8gVHVybiB0aGlzOiBCaXR3aXNlQ2FzdChCaXR3aXNlQ2FzdCh2YWx1ZSkp
CisgICAgLy8gSW50byB0aGlzOiB2YWx1ZQorICAgIGlmIChjaGlsZC0+b3Bjb2RlKCkgPT0gQml0
d2lzZUNhc3QpCisgICAgICAgIHJldHVybiBjaGlsZC0+Y2hpbGQoMCk7CisKKyAgICByZXR1cm4g
Y2FuR2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KEJpdHdpc2VDYXN0LCBvcmlnaW4sIGNo
aWxkKTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VTRXh0OChUeXBlIHR5
cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBjaGlsZCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAg
Ly8gVHVybiB0aGlzOiBTRXh0OChjb25zdGFudCkKKyAgICAvLyBJbnRvIHRoaXM6IHN0YXRpY19j
YXN0PGludDhfdD4oY29uc3RhbnQpCisgICAgaWYgKGNoaWxkLT5oYXNJbnQzMigpKSB7CisgICAg
ICAgIGludDMyX3QgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8aW50OF90PihjaGlsZC0+YXNJbnQzMigp
KTsKKyAgICAgICAgcmV0dXJuIGVtaXQ8Q29uc3QzMlZhbHVlPihvcmlnaW4sIHJlc3VsdCk7Cisg
ICAgfQorCisgICAgLy8gVHVybiB0aGlzOiBTRXh0OChTRXh0OCh2YWx1ZSkpCisgICAgLy8gICBv
ciB0aGlzOiBTRXh0OChTRXh0MTYodmFsdWUpKQorICAgIC8vIEludG8gdGhpczogU0V4dDgodmFs
dWUpCisgICAgaWYgKGNoaWxkLT5vcGNvZGUoKSA9PSBTRXh0OCB8fCBjaGlsZC0+b3Bjb2RlKCkg
PT0gU0V4dDE2KQorICAgICAgICByZXR1cm4gcmVkdWNlU0V4dDgodHlwZSwgb3JpZ2luLCBjaGls
ZC0+Y2hpbGQoMCkpOworCisgICAgaWYgKGNoaWxkLT5vcGNvZGUoKSA9PSBCaXRBbmQgJiYgY2hp
bGQtPmNoaWxkKDEpLT5oYXNJbnQzMigpKSB7CisgICAgICAgIFZhbHVlKiBpbnB1dCA9IGNoaWxk
LT5jaGlsZCgwKTsKKyAgICAgICAgaW50MzJfdCBtYXNrID0gY2hpbGQtPmNoaWxkKDEpLT5hc0lu
dDMyKCk7CisKKyAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0OChCaXRBbmQoaW5wdXQsIG1hc2sp
KSB3aGVyZSAobWFzayAmIDB4ZmYpID09IDB4ZmYKKyAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0
OChpbnB1dCkKKyAgICAgICAgaWYgKChtYXNrICYgMHhmZikgPT0gMHhmZikKKyAgICAgICAgICAg
IHJldHVybiByZWR1Y2VTRXh0OCh0eXBlLCBvcmlnaW4sIGlucHV0KTsKKworICAgICAgICAvLyBU
dXJuIHRoaXM6IFNFeHQ4KEJpdEFuZChpbnB1dCwgbWFzaykpIHdoZXJlIChtYXNrICYgMHg4MCkg
PT0gMAorICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdEFuZChpbnB1dCwgY29uc3QgJiAweDdmKQor
ICAgICAgICBpZiAoIShtYXNrICYgMHg4MCkpIHsKKyAgICAgICAgICAgIFZhbHVlKiBuZXdDb25z
dCA9IGVtaXQ8Q29uc3QzMlZhbHVlPihvcmlnaW4sIG1hc2sgJiAweDdmKTsKKyAgICAgICAgICAg
IHJldHVybiByZWR1Y2VCaXRBbmQodHlwZSwgb3JpZ2luLCBpbnB1dCwgbmV3Q29uc3QpOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCFtX3Byb2MuaGFzUXVpcmtzKCkpIHsKKyAgICAgICAg
Ly8gVHVybiB0aGlzOiBTRXh0OChBdG9taWNYY2hnX19fKQorICAgICAgICAvLyBJbnRvIHRoaXM6
IEF0b21pY1hjaGdfX18KKyAgICAgICAgaWYgKGlzQXRvbWljWGNoZyhjaGlsZC0+b3Bjb2RlKCkp
ICYmIGNoaWxkLT5hczxBdG9taWNWYWx1ZT4oKS0+YWNjZXNzV2lkdGgoKSA9PSBXaWR0aDgpCisg
ICAgICAgICAgICByZXR1cm4gY2hpbGQ7CisgICAgfQorCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/
IG51bGxwdHIgOiBlbWl0PFZhbHVlPihTRXh0OCwgb3JpZ2luLCBjaGlsZCk7Cit9CisKK1ZhbHVl
KiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlU0V4dDE2KFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdp
biwgVmFsdWUqIGNoaWxkLCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6IFNF
eHQxNihjb25zdGFudCkKKyAgICAvLyBJbnRvIHRoaXM6IHN0YXRpY19jYXN0PGludDE2X3Q+KGNv
bnN0YW50KQorICAgIGlmIChjaGlsZC0+aGFzSW50MzIoKSkgeworICAgICAgICBpbnQzMl90IHJl
c3VsdCA9IHN0YXRpY19jYXN0PGludDE2X3Q+KGNoaWxkLT5hc0ludDMyKCkpOworICAgICAgICBy
ZXR1cm4gZW1pdDxDb25zdDMyVmFsdWU+KG9yaWdpbiwgcmVzdWx0KTsKKyAgICB9CisKKyAgICAv
LyBUdXJuIHRoaXM6IFNFeHQxNihTRXh0MTYodmFsdWUpKQorICAgIC8vIEludG8gdGhpczogU0V4
dDE2KHZhbHVlKQorICAgIC8vIGFuZCB0dXJuIHRoaXM6IFNFeHQxNihTRXh0OCh2YWx1ZSkpCisg
ICAgLy8gSW50byB0aGlzOiBTRXh0OCh2YWx1ZSkKKyAgICBpZiAoY2hpbGQtPm9wY29kZSgpID09
IFNFeHQxNiB8fCBjaGlsZC0+b3Bjb2RlKCkgPT0gU0V4dDgpCisgICAgICAgIHJldHVybiBjaGls
ZDsKKworICAgIGlmIChjaGlsZC0+b3Bjb2RlKCkgPT0gQml0QW5kICYmIGNoaWxkLT5jaGlsZCgx
KS0+aGFzSW50MzIoKSkgeworICAgICAgICBWYWx1ZSogaW5wdXQgPSBjaGlsZC0+Y2hpbGQoMCk7
CisgICAgICAgIGludDMyX3QgbWFzayA9IGNoaWxkLT5jaGlsZCgxKS0+YXNJbnQzMigpOworCisg
ICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDE2KEJpdEFuZChpbnB1dCwgbWFzaykpIHdoZXJlICht
YXNrICYgMHhmZmZmKSA9PSAweGZmZmYKKyAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0MTYoaW5w
dXQpCisgICAgICAgIGlmICgobWFzayAmIDB4ZmZmZikgPT0gMHhmZmZmKQorICAgICAgICAgICAg
cmV0dXJuIHJlZHVjZVNFeHQxNih0eXBlLCBvcmlnaW4sIGlucHV0KTsKKworICAgICAgICAvLyBU
dXJuIHRoaXM6IFNFeHQxNihCaXRBbmQoaW5wdXQsIG1hc2spKSB3aGVyZSAobWFzayAmIDB4ODAw
MCkgPT0gMAorICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdEFuZChpbnB1dCwgY29uc3QgJiAweDdm
ZmYpCisgICAgICAgIGlmICghKG1hc2sgJiAweDgwMDApKSB7CisgICAgICAgICAgICBWYWx1ZSog
bmV3Q29uc3QgPSBlbWl0PENvbnN0MzJWYWx1ZT4ob3JpZ2luLCBtYXNrICYgMHg3ZmZmKTsKKyAg
ICAgICAgICAgIHJldHVybiByZWR1Y2VCaXRBbmQodHlwZSwgb3JpZ2luLCBpbnB1dCwgbmV3Q29u
c3QpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFtX3Byb2MuaGFzUXVpcmtzKCkpIHsK
KyAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0MTYoQXRvbWljWGNoZ19fXykKKyAgICAgICAgLy8g
SW50byB0aGlzOiBBdG9taWNYY2hnX19fCisgICAgICAgIGlmIChpc0F0b21pY1hjaGcoY2hpbGQt
Pm9wY29kZSgpKSAmJiBjaGlsZC0+YXM8QXRvbWljVmFsdWU+KCktPmFjY2Vzc1dpZHRoKCkgPT0g
V2lkdGgxNikKKyAgICAgICAgICAgIHJldHVybiBjaGlsZDsKKyAgICB9CisKKyAgICByZXR1cm4g
Y2FuR2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KFNFeHQxNiwgb3JpZ2luLCBjaGlsZCk7
Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlU0V4dDMyKFR5cGUgdHlwZSwg
T3JpZ2luIG9yaWdpbiwgVmFsdWUqIGNoaWxkLCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICAvLyBU
dXJuIHRoaXM6IFNFeHQzMihjb25zdGFudCkKKyAgICAvLyBJbnRvIHRoaXM6IHN0YXRpY19jYXN0
PGludDY0X3Q+KGNvbnN0YW50KQorICAgIGlmIChjaGlsZC0+aGFzSW50MzIoKSkKKyAgICAgICAg
cmV0dXJuIGVtaXQ8Q29uc3Q2NFZhbHVlPihvcmlnaW4sIGNoaWxkLT5hc0ludDMyKCkpOworCisg
ICAgLy8gVHVybiB0aGlzOiBTRXh0MzIoQml0QW5kKGlucHV0LCBtYXNrKSkgd2hlcmUgKG1hc2sg
JiAweDgwMDAwMDAwKSA9PSAwCisgICAgLy8gSW50byB0aGlzOiBaRXh0MzIoQml0QW5kKGlucHV0
LCBtYXNrKSkKKyAgICBpZiAoY2hpbGQtPm9wY29kZSgpID09IEJpdEFuZCAmJiBjaGlsZC0+Y2hp
bGQoMSktPmhhc0ludDMyKCkKKyAgICAgICAgJiYgIShjaGlsZC0+Y2hpbGQoMSktPmFzSW50MzIo
KSAmIDB4ODAwMDAwMDApKSB7CisgICAgICAgIHJldHVybiByZWR1Y2VaRXh0MzIodHlwZSwgb3Jp
Z2luLCBjaGlsZCk7CisgICAgfQorCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBl
bWl0PFZhbHVlPihTRXh0MzIsIG9yaWdpbiwgY2hpbGQpOworfQorCitWYWx1ZSogUGVlcGhvbGVP
cHRpbWl6ZXI6OnJlZHVjZVpFeHQzMihUeXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogY2hpbGQs
IGJvb2wgY2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogWkV4dDMyKGNvbnN0YW50KQor
ICAgIC8vIEludG8gdGhpczogc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PHVpbnQz
Ml90Pihjb25zdGFudCkpCisgICAgaWYgKGNoaWxkLT5oYXNJbnQzMigpKSB7CisgICAgICAgIHVp
bnQ2NF90IHJlc3VsdCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDx1aW50MzJf
dD4oY2hpbGQtPmFzSW50MzIoKSkpOworICAgICAgICByZXR1cm4gZW1pdDxDb25zdDY0VmFsdWU+
KG9yaWdpbiwgcmVzdWx0KTsKKyAgICB9CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0
ciA6IGVtaXQ8VmFsdWU+KFpFeHQzMiwgb3JpZ2luLCBjaGlsZCk7Cit9CisKK1ZhbHVlKiBQZWVw
aG9sZU9wdGltaXplcjo6cmVkdWNlVHJ1bmMoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1
ZSogY2hpbGQsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogVHJ1bmMoY29u
c3RhbnQpCisgICAgLy8gSW50byB0aGlzOiBzdGF0aWNfY2FzdDxpbnQzMl90Pihjb25zdGFudCkK
KyAgICBpZiAoY2hpbGQtPmhhc0ludDY0KCkgfHwgY2hpbGQtPmhhc0RvdWJsZSgpKQorICAgICAg
ICByZXR1cm4gZW1pdDxDb25zdDMyVmFsdWU+KG9yaWdpbiwgc3RhdGljX2Nhc3Q8aW50MzJfdD4o
Y2hpbGQtPmFzSW50NjQoKSkpOworCisgICAgLy8gVHVybiB0aGlzOiBUcnVuYyhTRXh0MzIodmFs
dWUpKSBvciBUcnVuYyhaRXh0MzIodmFsdWUpKQorICAgIC8vIEludG8gdGhpczogdmFsdWUKKyAg
ICBpZiAoY2hpbGQtPm9wY29kZSgpID09IFNFeHQzMiB8fCBjaGlsZC0+b3Bjb2RlKCkgPT0gWkV4
dDMyKQorICAgICAgICByZXR1cm4gY2hpbGQtPmNoaWxkKDApOworCisgICAgLy8gVHVybiB0aGlz
OiBUcnVuYyhPcCh2YWx1ZSwgY29uc3RhbnQpKQorICAgIC8vICAgICB3aGVyZSAhKGNvbnN0YW50
ICYgMHhmZmZmZmZmZikKKyAgICAvLyAgICAgICBhbmQgT3AgaXMgQWRkLCBTdWIsIEJpdE9yLCBv
ciBCaXRYb3IKKyAgICAvLyBpbnRvIHRoaXM6IFRydW5jKHZhbHVlKQorICAgIC8vIEZJWE1FOiB0
aGlzIGlzIGp1c3QgYSBzcGVjaWFsIGNhc2Ugb2YgYSBtb3JlIGdlbmVyYWwgdXNlZEJpdHMgYW5h
bHlzaXMuCisgICAgc3dpdGNoIChjaGlsZC0+b3Bjb2RlKCkpIHsKKyAgICBjYXNlIEFkZDoKKyAg
ICBjYXNlIFN1YjoKKyAgICBjYXNlIEJpdE9yOgorICAgIGNhc2UgQml0WG9yOgorICAgICAgICBp
ZiAoY2hpbGQtPmNoaWxkKDEpLT5oYXNJbnQ2NCgpICYmICEoY2hpbGQtPmNoaWxkKDEpLT5hc0lu
dDY0KCkgJiAweGZmZmZmZmZmbGwpKQorICAgICAgICAgICAgcmV0dXJuIHJlZHVjZVRydW5jKHR5
cGUsIG9yaWdpbiwgY2hpbGQtPmNoaWxkKDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxw
dHIgOiBlbWl0PFZhbHVlPihUcnVuYywgb3JpZ2luLCBjaGlsZCk7Cit9CisKK1ZhbHVlKiBQZWVw
aG9sZU9wdGltaXplcjo6cmVkdWNlSVRvRChUeXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogY2hp
bGQsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogSVRvRChjb25zdGFudCkK
KyAgICAvLyBJbnRvIHRoaXM6IENvbnN0RG91YmxlKGNvbnN0YW50KQorICAgIGlmIChWYWx1ZSog
Y29uc3RhbnQgPSBjaGlsZC0+aVRvRENvbnN0YW50KG1fcHJvYykpCisgICAgICAgIHJldHVybiBh
cHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8g
bnVsbHB0ciA6IGVtaXQ8VmFsdWU+KElUb0QsIG9yaWdpbiwgY2hpbGQpOworfQorCitWYWx1ZSog
UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUlUb0YoVHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUq
IGNoaWxkLCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6IElUb0YoY29uc3Rh
bnQpCisgICAgLy8gSW50byB0aGlzOiBDb25zdEZsb2F0KGNvbnN0YW50KQorICAgIGlmIChWYWx1
ZSogY29uc3RhbnQgPSBjaGlsZC0+aVRvRkNvbnN0YW50KG1fcHJvYykpCisgICAgICAgIHJldHVy
biBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICByZXR1cm4gY2FuR2l2ZVVw
ID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KElUb0YsIG9yaWdpbiwgY2hpbGQpOworfQorCitWYWx1
ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUZsb2F0VG9Eb3VibGUoVHlwZSwgT3JpZ2luIG9y
aWdpbiwgVmFsdWUqIGNoaWxkLCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6
IEZsb2F0VG9Eb3VibGUoY29uc3RhbnQpCisgICAgLy8gSW50byB0aGlzOiBDb25zdERvdWJsZShj
b25zdGFudCkKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gY2hpbGQtPmZsb2F0VG9Eb3VibGVD
b25zdGFudChtX3Byb2MpKQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29u
c3RhbnQpOworCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihG
bG9hdFRvRG91YmxlLCBvcmlnaW4sIGNoaWxkKTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1p
emVyOjpyZWR1Y2VEb3VibGVUb0Zsb2F0KFR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBjaGls
ZCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgLy8gVHVybiB0aGlzOiBEb3VibGVUb0Zsb2F0KGNv
bnN0YW50KQorICAgIC8vIEludG8gdGhpczogQ29uc3RGbG9hdChjb25zdGFudCkKKyAgICBpZiAo
VmFsdWUqIGNvbnN0YW50ID0gY2hpbGQtPmRvdWJsZVRvRmxvYXRDb25zdGFudChtX3Byb2MpKQor
ICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgLy8g
VHVybiB0aGlzOiBEb3VibGVUb0Zsb2F0KEZsb2F0VG9Eb3VibGUodmFsdWUpKQorICAgIC8vIElu
dG8gdGhpczogdmFsdWUKKyAgICBpZiAoY2hpbGQtPm9wY29kZSgpID09IEZsb2F0VG9Eb3VibGUp
CisgICAgICAgIHJldHVybiBjaGlsZC0+Y2hpbGQoMCk7CisKKyAgICByZXR1cm4gY2FuR2l2ZVVw
ID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KERvdWJsZVRvRmxvYXQsIG9yaWdpbiwgY2hpbGQpOwor
fQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVNlbGVjdChUeXBlIHR5cGUsIE9y
aWdpbiBvcmlnaW4sIFZhbHVlKiBjb25kLCBWYWx1ZSogaWZUcnVlLCBWYWx1ZSogaWZGYWxzZSwg
Ym9vbCBjYW5HaXZlVXApCit7CisgICAgLy8gVHVybiB0aGlzOiBTZWxlY3QoY29uc3RhbnQsIGEs
IGIpCisgICAgLy8gSW50byB0aGlzOiBjb25zdGFudCA/IGEgOiBiCisgICAgaWYgKGNvbmQtPmhh
c0ludDMyKCkpCisgICAgICAgIHJldHVybiBjb25kLT5hc0ludDMyKCkgPyBpZlRydWUgOiBpZkZh
bHNlOworCisgICAgLy8gVHVybiB0aGlzOiBTZWxlY3QoRXF1YWwoeCwgMCksIGEsIGIpCisgICAg
Ly8gSW50byB0aGlzOiBTZWxlY3QoeCwgYiwgYSkKKyAgICBpZiAoY29uZC0+b3Bjb2RlKCkgPT0g
RXF1YWwgJiYgY29uZC0+Y2hpbGQoMSktPmlzSW50KDApKQorICAgICAgICByZXR1cm4gcmVkdWNl
U2VsZWN0KHR5cGUsIG9yaWdpbiwgY29uZC0+Y2hpbGQoMCksIGlmRmFsc2UsIGlmVHJ1ZSk7CisK
KyAgICAvLyBUdXJuIHRoaXM6IFNlbGVjdChCaXRYb3IoYm9vbCwgMSksIGEsIGIpCisgICAgLy8g
SW50byB0aGlzOiBTZWxlY3QoYm9vbCwgYiwgYSkKKyAgICBpZiAoY29uZC0+b3Bjb2RlKCkgPT0g
Qml0WG9yICYmIGNvbmQtPmNoaWxkKDEpLT5pc0ludDMyKDEpICYmIGNvbmQtPmNoaWxkKDApLT5y
ZXR1cm5zQm9vbCgpKQorICAgICAgICByZXR1cm4gcmVkdWNlU2VsZWN0KHR5cGUsIG9yaWdpbiwg
Y29uZC0+Y2hpbGQoMCksIGlmRmFsc2UsIGlmVHJ1ZSk7CisKKyAgICAvLyBUdXJuIHRoaXM6IFNl
bGVjdChCaXRBbmQoYm9vbCwgeHl6MSksIGEsIGIpCisgICAgLy8gSW50byB0aGlzOiBTZWxlY3Qo
Ym9vbCwgYSwgYikKKyAgICBpZiAoY29uZC0+b3Bjb2RlKCkgPT0gQml0QW5kCisgICAgICAgICYm
IGNvbmQtPmNoaWxkKDEpLT5oYXNJbnQoKQorICAgICAgICAmJiBjb25kLT5jaGlsZCgxKS0+YXNJ
bnQoKSAmIDEKKyAgICAgICAgJiYgY29uZC0+Y2hpbGQoMCktPnJldHVybnNCb29sKCkpIHsKKyAg
ICAgICAgcmV0dXJuIHJlZHVjZVNlbGVjdCh0eXBlLCBvcmlnaW4sIGNvbmQtPmNoaWxkKDApLCBp
ZlRydWUsIGlmRmFsc2UpOworICAgIH0KKworICAgIC8vIFR1cm4gdGhpczogU2VsZWN0KHN0dWZm
LCB4LCB4KQorICAgIC8vIEludG8gdGhpczogeAorICAgIGlmIChpZlRydWUgPT0gaWZGYWxzZSkK
KyAgICAgICAgcmV0dXJuIGlmVHJ1ZTsKKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRy
IDogZW1pdDxWYWx1ZT4oU2VsZWN0LCBvcmlnaW4sIGNvbmQsIGlmVHJ1ZSwgaWZGYWxzZSk7Cit9
CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlTG9hZFN0b3JlKE9wY29kZSBvcCwg
VHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogYWRkcmVzcywgVmFsdWU6Ok9mZnNldFR5
cGUgb2Zmc2V0LCBWYWx1ZSogdmFsdWVTdG9yZWQsIEhlYXBSYW5nZSByYW5nZSwgSGVhcFJhbmdl
IGZlbmNlUmFuZ2UsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogTG9hZChB
ZGQoYWRkcmVzcywgb2Zmc2V0MSksIG9mZnNldCA9IG9mZnNldDIpCisgICAgLy8gSW50byB0aGlz
OiBMb2FkKGFkZHJlc3MsIG9mZnNldCA9IG9mZnNldDEgKyBvZmZzZXQyKQorICAgIC8vCisgICAg
Ly8gQWxzbyB0dXJucyB0aGlzOiBTdG9yZSh2YWx1ZSwgQWRkKGFkZHJlc3MsIG9mZnNldDEpLCBv
ZmZzZXQgPSBvZmZzZXQyKQorICAgIC8vIEludG8gdGhpczogU3RvcmUodmFsdWUsIGFkZHJlc3Ms
IG9mZnNldCA9IG9mZnNldDEgKyBvZmZzZXQyKQorICAgIGlmIChhZGRyZXNzLT5vcGNvZGUoKSA9
PSBBZGQgJiYgYWRkcmVzcy0+Y2hpbGQoMSktPmhhc0ludFB0cigpKSB7CisgICAgICAgIGludHB0
cl90IG9mZnNldDEgPSBhZGRyZXNzLT5jaGlsZCgxKS0+YXNJbnRQdHIoKTsKKyAgICAgICAgaWYg
KCFzdW1PdmVyZmxvd3M8aW50cHRyX3Q+KG9mZnNldCwgb2Zmc2V0MSkpIHsKKyAgICAgICAgICAg
IG9mZnNldDEgKz0gb2Zmc2V0OworICAgICAgICAgICAgVmFsdWU6Ok9mZnNldFR5cGUgc21hbGxP
ZmZzZXQgPSBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlwZT4ob2Zmc2V0MSk7CisgICAgICAg
ICAgICBpZiAoc21hbGxPZmZzZXQgPT0gb2Zmc2V0MSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
cmVkdWNlTG9hZFN0b3JlKG9wLCB0eXBlLCBvcmlnaW4sIGFkZHJlc3MtPmNoaWxkKDApLCBzbWFs
bE9mZnNldCwgdmFsdWVTdG9yZWQsIHJhbmdlLCBmZW5jZVJhbmdlKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIFR1cm4gdGhpczogTG9hZChjb25zdGFudDEsIG9mZnNldCA9IGNvbnN0YW50
MikKKyAgICAvLyBJbnRvIHRoaXM6IExvYWQoY29uc3RhbnQxICsgY29uc3RhbnQyKQorICAgIC8v
CisgICAgLy8gVGhpcyBpcyBhIGZ1biBjYW5vbmljYWxpemF0aW9uLiBJdCBwdXJlbHkgcmVncmVz
c2VzIG5haXZlbHkgZ2VuZXJhdGVkIGNvZGUuIFdlIHJlbHkKKyAgICAvLyBvbiBjb25zdGFudCBt
YXRlcmlhbGl6YXRpb24gdG8gYmUgc21hcnQgZW5vdWdoIHRvIG1hdGVyaWFsaXplIHRoaXMgY29u
c3RhbnQgdGhlIHNtYXJ0CisgICAgLy8gd2F5LiBXZSB3YW50IHRoaXMgY2Fub25pY2FsaXphdGlv
biBiZWNhdXNlIHdlIHdhbnQgdG8ga25vdyBpZiB0d28gbWVtb3J5IGFjY2Vzc2VzIHNlZQorICAg
IC8vIHRoZSBzYW1lIGFkZHJlc3MuCisgICAgaWYgKG9mZnNldCkgeworICAgICAgICBpZiAoVmFs
dWUqIG5ld0FkZHJlc3MgPSBhZGRyZXNzLT5hZGRDb25zdGFudChtX3Byb2MsIG9mZnNldCkpCisg
ICAgICAgICAgICByZXR1cm4gcmVkdWNlTG9hZFN0b3JlKG9wLCB0eXBlLCBvcmlnaW4sIGFwcGVu
ZFRvQ3VycmVudEJsb2NrKG5ld0FkZHJlc3MpLCAwLCB2YWx1ZVN0b3JlZCwgcmFuZ2UsIGZlbmNl
UmFuZ2UpOworICAgIH0KKworICAgIGlmIChjYW5HaXZlVXApCisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIExvYWQ4WjoKKyAgICBjYXNlIExvYWQ4
UzoKKyAgICBjYXNlIExvYWQxNlo6CisgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICBBU1NFUlQo
IXZhbHVlU3RvcmVkKTsKKyAgICAgICAgcmV0dXJuIGVtaXQ8TWVtb3J5VmFsdWU+KG9wLCBvcmln
aW4sIGFkZHJlc3MsIG9mZnNldCwgcmFuZ2UsIGZlbmNlUmFuZ2UpOworICAgIGNhc2UgTG9hZDoK
KyAgICAgICAgQVNTRVJUKCF2YWx1ZVN0b3JlZCk7CisgICAgICAgIHJldHVybiBlbWl0PE1lbW9y
eVZhbHVlPihvcCwgdHlwZSwgb3JpZ2luLCBhZGRyZXNzLCBvZmZzZXQsIHJhbmdlLCBmZW5jZVJh
bmdlKTsKKyAgICBjYXNlIFN0b3JlODoKKyAgICBjYXNlIFN0b3JlMTY6CisgICAgY2FzZSBTdG9y
ZToKKyAgICAgICAgQVNTRVJUKCEhdmFsdWVTdG9yZWQpOworICAgICAgICByZXR1cm4gZW1pdDxN
ZW1vcnlWYWx1ZT4ob3AsIG9yaWdpbiwgdmFsdWVTdG9yZWQsIGFkZHJlc3MsIG9mZnNldCwgcmFu
Z2UsIGZlbmNlUmFuZ2UpOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK30KKworVmFsdWUq
IFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VFcXVhbChUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwKQoreworICAgIGlmIChz
aG91bGRHb0JlZm9yZShyaWdodCwgbGVmdCkpCisgICAgICAgIHJldHVybiByZWR1Y2VFcXVhbCh0
eXBlLCBvcmlnaW4sIHJpZ2h0LCBsZWZ0KTsKKworICAgIC8vIFR1cm4gdGhpczogRXF1YWwoYm9v
bCwgMCkKKyAgICAvLyBJbnRvIHRoaXM6IEJpdFhvcihib29sLCAxKQorICAgIGlmIChsZWZ0LT5y
ZXR1cm5zQm9vbCgpICYmIHJpZ2h0LT5pc0ludDMyKDApKSB7CisgICAgICAgIFZhbHVlKiBjb25z
dDEgPSBlbWl0PENvbnN0MzJWYWx1ZT4ob3JpZ2luLCAxKTsKKyAgICAgICAgcmV0dXJuIHJlZHVj
ZUJpdFhvcih0eXBlLCBvcmlnaW4sIGxlZnQsIGNvbnN0MSk7CisgICAgfQorCisgICAgLy8gVHVy
biB0aGlzIEVxdWFsKGJvb2wsIDEpCisgICAgLy8gSW50byB0aGlzOiBib29sCisgICAgaWYgKGxl
ZnQtPnJldHVybnNCb29sKCkgJiYgcmlnaHQtPmlzSW50MzIoMSkpCisgICAgICAgIHJldHVybiBs
ZWZ0OworCisgICAgLy8gVHVybiB0aGlzOiBFcXVhbChjb25zdDEsIGNvbnN0MikKKyAgICAvLyBJ
bnRvIHRoaXM6IGNvbnN0MSA9PSBjb25zdDIKKyAgICBpZiAoVmFsdWUqIHJlc3VsdCA9IG1fcHJv
Yy5hZGRCb29sQ29uc3RhbnQob3JpZ2luLCBsZWZ0LT5lcXVhbENvbnN0YW50KHJpZ2h0KSkpCisg
ICAgICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhyZXN1bHQpOworCisgICAgLy8gRklY
TUU6IGF0IGxlYXN0IGZvciBpbnRlZ2VycyB3ZSByZWFsbHkgc2hvdWxkIGhhdmUgRXF1YWwoeCwg
eCkgPT4gdHJ1ZSwgZXZlbiBmb3Igbm9uLWNvbnN0YW50cy4KKworICAgIHJldHVybiBjYW5HaXZl
VXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oRXF1YWwsIG9yaWdpbiwgbGVmdCwgcmlnaHQpOwor
fQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZU5vdEVxdWFsKFR5cGUgdHlwZSwg
T3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXAp
Cit7CisgICAgaWYgKHNob3VsZEdvQmVmb3JlKHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAgcmV0dXJu
IHJlZHVjZU5vdEVxdWFsKHR5cGUsIG9yaWdpbiwgcmlnaHQsIGxlZnQpOworCisgICAgLy8gVHVy
biB0aGlzOiBOb3RFcXVhbChib29sLCAwKQorICAgIC8vIEludG8gdGhpczogYm9vbAorICAgIGlm
IChsZWZ0LT5yZXR1cm5zQm9vbCgpICYmIHJpZ2h0LT5pc0ludDMyKDApKQorICAgICAgICByZXR1
cm4gbGVmdDsKKworICAgIC8vIFR1cm4gdGhpczogTm90RXF1YWwoYm9vbCwgMSkKKyAgICAvLyBJ
bnRvIHRoaXM6IEJpdFhvcihib29sLCAxKQorICAgIGlmIChsZWZ0LT5yZXR1cm5zQm9vbCgpICYm
IHJpZ2h0LT5pc0ludDMyKDEpKQorICAgICAgICByZXR1cm4gcmVkdWNlQml0WG9yKHR5cGUsIG9y
aWdpbiwgbGVmdCwgcmlnaHQpOworCisgICAgLy8gVHVybiB0aGlzOiBOb3RFcXVhbChjb25zdDEs
IGNvbnN0MikKKyAgICAvLyBJbnRvIHRoaXM6IGNvbnN0MSAhPSBjb25zdDIKKyAgICBpZiAoVmFs
dWUqIHJlc3VsdCA9IG1fcHJvYy5hZGRCb29sQ29uc3RhbnQob3JpZ2luLCBsZWZ0LT5ub3RFcXVh
bENvbnN0YW50KHJpZ2h0KSkpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhy
ZXN1bHQpOworCisgICAgLy8gRklYTUU6IGF0IGxlYXN0IGZvciBpbnRlZ2VycyB3ZSByZWFsbHkg
c2hvdWxkIGhhdmUgTm90RXF1YWwoeCwgeCkgPT4gZmFsc2UsIGV2ZW4gZm9yIG5vbi1jb25zdGFu
dHMuCisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KE5vdEVx
dWFsLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVy
OjpyZWR1Y2VFcXVhbE9yVW5vcmRlcmVkKFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUq
IGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgaWYgKHNob3VsZEdv
QmVmb3JlKHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAgcmV0dXJuIHJlZHVjZUVxdWFsT3JVbm9yZGVy
ZWQodHlwZSwgb3JpZ2luLCByaWdodCwgbGVmdCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IEVxdWFs
T3JVbm9yZGVyZWQoY29uc3QxLCBjb25zdDIpCisgICAgLy8gSW50byB0aGlzOiBpc05hbihjb25z
dDEpIHx8IGlzTmFuKGNvbnN0MikgfHwgY29uc3QxID09IGNvbnN0MgorICAgIGlmIChWYWx1ZSog
cmVzdWx0ID0gbV9wcm9jLmFkZEJvb2xDb25zdGFudChvcmlnaW4sIGxlZnQtPmVxdWFsT3JVbm9y
ZGVyZWRDb25zdGFudChyaWdodCkpKQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50Qmxv
Y2socmVzdWx0KTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWxzbyBoYXZlIEVxdWFsT3JV
bm9yZGVyZWQoeCwgeCkgPT4gdHJ1ZS4KKyAgICAvLyBBbHNvIHdlIHNob3VsZCBoYXZlIEVxdWFs
T3JVbm9yZGVyZWQoY29uc3ROYW4sIHgpID0+IHRydWUgYW5kIEVxdWFsT3JVbm9yZGVyZWQoeCwg
Y29uc3ROYW4pID0+IHRydWUKKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1p
dDxWYWx1ZT4oRXF1YWxPclVub3JkZXJlZCwgb3JpZ2luLCBsZWZ0LCByaWdodCk7Cit9CisKK1Zh
bHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlTGVzc1RoYW4oVHlwZSB0eXBlLCBPcmlnaW4g
b3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCkKK3sKKyAg
ICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxlZnQpKQorICAgICAgICByZXR1cm4gcmVkdWNl
R3JlYXRlclRoYW4odHlwZSwgb3JpZ2luLCByaWdodCwgbGVmdCk7CisKKyAgICBpZiAoVmFsdWUq
IGNvbnN0YW50ID0gbV9wcm9jLmFkZEJvb2xDb25zdGFudChvcmlnaW4sIHJpZ2h0LT5ncmVhdGVy
VGhhbkNvbnN0YW50KGxlZnQpKSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2Nr
KGNvbnN0YW50KTsKKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1
ZT4oTGVzc1RoYW4sIG9yaWdpbiwgbGVmdCwgcmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVP
cHRpbWl6ZXI6OnJlZHVjZUdyZWF0ZXJUaGFuKFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFs
dWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgaWYgKHNob3Vs
ZEdvQmVmb3JlKHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAgcmV0dXJuIHJlZHVjZUxlc3NUaGFuKHR5
cGUsIG9yaWdpbiwgcmlnaHQsIGxlZnQpOworCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1f
cHJvYy5hZGRCb29sQ29uc3RhbnQob3JpZ2luLCByaWdodC0+bGVzc1RoYW5Db25zdGFudChsZWZ0
KSkpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAg
ICByZXR1cm4gY2FuR2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KEdyZWF0ZXJUaGFuLCBv
cmlnaW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1
Y2VMZXNzRXF1YWwoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUq
IHJpZ2h0LCBib29sIGNhbkdpdmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQs
IGxlZnQpKQorICAgICAgICByZXR1cm4gcmVkdWNlR3JlYXRlckVxdWFsKHR5cGUsIG9yaWdpbiwg
cmlnaHQsIGxlZnQpOworCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fcHJvYy5hZGRCb29s
Q29uc3RhbnQob3JpZ2luLCByaWdodC0+Z3JlYXRlckVxdWFsQ29uc3RhbnQobGVmdCkpKQorICAg
ICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgcmV0dXJu
IGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihMZXNzRXF1YWwsIG9yaWdpbiwgbGVm
dCwgcmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUdyZWF0ZXJF
cXVhbChUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQs
IGJvb2wgY2FuR2l2ZVVwKQoreworICAgIGlmIChzaG91bGRHb0JlZm9yZShyaWdodCwgbGVmdCkp
CisgICAgICAgIHJldHVybiByZWR1Y2VMZXNzRXF1YWwodHlwZSwgb3JpZ2luLCByaWdodCwgbGVm
dCk7CisKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbV9wcm9jLmFkZEJvb2xDb25zdGFudChv
cmlnaW4sIHJpZ2h0LT5sZXNzRXF1YWxDb25zdGFudChsZWZ0KSkpCisgICAgICAgIHJldHVybiBh
cHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8g
bnVsbHB0ciA6IGVtaXQ8VmFsdWU+KEdyZWF0ZXJFcXVhbCwgb3JpZ2luLCBsZWZ0LCByaWdodCk7
Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlQWJvdmUoVHlwZSB0eXBlLCBP
cmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCkK
K3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxlZnQpKQorICAgICAgICByZXR1cm4g
cmVkdWNlQmVsb3codHlwZSwgb3JpZ2luLCByaWdodCwgbGVmdCk7CisKKyAgICBpZiAoVmFsdWUq
IGNvbnN0YW50ID0gbV9wcm9jLmFkZEJvb2xDb25zdGFudChvcmlnaW4sIHJpZ2h0LT5iZWxvd0Nv
bnN0YW50KGxlZnQpKSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKGNvbnN0
YW50KTsKKworICAgIHJldHVybiBjYW5HaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oQWJv
dmUsIG9yaWdpbiwgbGVmdCwgcmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6
OnJlZHVjZUJlbG93KFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVl
KiByaWdodCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgaWYgKHNob3VsZEdvQmVmb3JlKHJpZ2h0
LCBsZWZ0KSkKKyAgICAgICAgcmV0dXJuIHJlZHVjZUFib3ZlKHR5cGUsIG9yaWdpbiwgcmlnaHQs
IGxlZnQpOworCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fcHJvYy5hZGRCb29sQ29uc3Rh
bnQob3JpZ2luLCByaWdodC0+YWJvdmVDb25zdGFudChsZWZ0KSkpCisgICAgICAgIHJldHVybiBh
cHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICByZXR1cm4gY2FuR2l2ZVVwID8g
bnVsbHB0ciA6IGVtaXQ8VmFsdWU+KEJlbG93LCBvcmlnaW4sIGxlZnQsIHJpZ2h0KTsKK30KKwor
VmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VBYm92ZUVxdWFsKFR5cGUgdHlwZSwgT3Jp
Z2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXApCit7
CisgICAgaWYgKHNob3VsZEdvQmVmb3JlKHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAgcmV0dXJuIHJl
ZHVjZUJlbG93RXF1YWwodHlwZSwgb3JpZ2luLCByaWdodCwgbGVmdCk7CisKKyAgICBpZiAoVmFs
dWUqIGNvbnN0YW50ID0gbV9wcm9jLmFkZEJvb2xDb25zdGFudChvcmlnaW4sIHJpZ2h0LT5iZWxv
d0VxdWFsQ29uc3RhbnQobGVmdCkpKQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50Qmxv
Y2soY29uc3RhbnQpOworCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZh
bHVlPihBYm92ZUVxdWFsLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBo
b2xlT3B0aW1pemVyOjpyZWR1Y2VCZWxvd0VxdWFsKFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwg
VmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXApCit7CisgICAgaWYgKHNo
b3VsZEdvQmVmb3JlKHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAgcmV0dXJuIHJlZHVjZUFib3ZlRXF1
YWwodHlwZSwgb3JpZ2luLCByaWdodCwgbGVmdCk7CisKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50
ID0gbV9wcm9jLmFkZEJvb2xDb25zdGFudChvcmlnaW4sIHJpZ2h0LT5hYm92ZUVxdWFsQ29uc3Rh
bnQobGVmdCkpKQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQp
OworCisgICAgcmV0dXJuIGNhbkdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihCZWxvd0Vx
dWFsLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVy
Ojp0cnlSZWR1Y2UoVmFsdWUqIHZhbHVlKQoreworICAgIHN3aXRjaCAodmFsdWUtPm9wY29kZSgp
KSB7CisgICAgY2FzZSBPcGFxdWU6CisgICAgICAgIHJldHVybiByZWR1Y2VPcGFxdWUodmFsdWUt
PnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHRydWUpOworICAgIGNh
c2UgQWRkOgorICAgICAgICByZXR1cm4gcmVkdWNlQWRkKHZhbHVlLT50eXBlKCksIHZhbHVlLT5v
cmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIHRydWUpOworICAgIGNh
c2UgU3ViOgorICAgICAgICByZXR1cm4gcmVkdWNlU3ViKHZhbHVlLT50eXBlKCksIHZhbHVlLT5v
cmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIHRydWUpOworICAgIGNh
c2UgTmVnOgorICAgICAgICByZXR1cm4gcmVkdWNlTmVnKHZhbHVlLT50eXBlKCksIHZhbHVlLT5v
cmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB0cnVlKTsKKyAgICBjYXNlIE11bDoKKyAgICAgICAg
cmV0dXJuIHJlZHVjZU11bCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5j
aGlsZCgwKSwgdmFsdWUtPmNoaWxkKDEpLCB0cnVlKTsKKyAgICBjYXNlIERpdjoKKyAgICAgICAg
cmV0dXJuIHJlZHVjZURpdih2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5j
aGlsZCgwKSwgdmFsdWUtPmNoaWxkKDEpLCB2YWx1ZS0+aXNDaGlsbCgpLCB0cnVlKTsKKyAgICBj
YXNlIFVEaXY6CisgICAgICAgIHJldHVybiByZWR1Y2VVRGl2KHZhbHVlLT50eXBlKCksIHZhbHVl
LT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIHRydWUpOworICAg
IGNhc2UgTW9kOgorICAgICAgICByZXR1cm4gcmVkdWNlTW9kKHZhbHVlLT50eXBlKCksIHZhbHVl
LT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIHZhbHVlLT5pc0No
aWxsKCksIHRydWUpOworICAgIGNhc2UgVU1vZDoKKyAgICAgICAgcmV0dXJuIHJlZHVjZVVNb2Qo
dmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5j
aGlsZCgxKSwgdHJ1ZSk7CisgICAgY2FzZSBCaXRBbmQ6CisgICAgICAgIHJldHVybiByZWR1Y2VC
aXRBbmQodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZh
bHVlLT5jaGlsZCgxKSwgdHJ1ZSk7CisgICAgY2FzZSBCaXRPcjoKKyAgICAgICAgcmV0dXJuIHJl
ZHVjZUJpdE9yKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDAp
LCB2YWx1ZS0+Y2hpbGQoMSksIHRydWUpOworICAgIGNhc2UgQml0WG9yOgorICAgICAgICByZXR1
cm4gcmVkdWNlQml0WG9yKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNo
aWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIHRydWUpOworICAgIGNhc2UgU2hsOgorICAgICAgICBy
ZXR1cm4gcmVkdWNlU2hsKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNo
aWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIHRydWUpOworICAgIGNhc2UgU1NocjoKKyAgICAgICAg
cmV0dXJuIHJlZHVjZVNTaHIodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+
Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgxKSwgdHJ1ZSk7CisgICAgY2FzZSBaU2hyOgorICAgICAg
ICByZXR1cm4gcmVkdWNlWlNocih2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVl
LT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxkKDEpLCB0cnVlKTsKKyAgICBjYXNlIFJvdFI6CisgICAg
ICAgIHJldHVybiByZWR1Y2VSb3RSKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFs
dWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIHRydWUpOworICAgIGNhc2UgUm90TDoKKyAg
ICAgICAgcmV0dXJuIHJlZHVjZVJvdEwodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2
YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgxKSwgdHJ1ZSk7CisgICAgY2FzZSBBYnM6Cisg
ICAgICAgIHJldHVybiByZWR1Y2VBYnModmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2
YWx1ZS0+Y2hpbGQoMCksIHRydWUpOworICAgIGNhc2UgQ2VpbDoKKyAgICAgICAgcmV0dXJuIHJl
ZHVjZUNlaWwodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCks
IHRydWUpOworICAgIGNhc2UgRmxvb3I6CisgICAgICAgIHJldHVybiByZWR1Y2VGbG9vcih2YWx1
ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdHJ1ZSk7CisgICAg
Y2FzZSBTcXJ0OgorICAgICAgICByZXR1cm4gcmVkdWNlU3FydCh2YWx1ZS0+dHlwZSgpLCB2YWx1
ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdHJ1ZSk7CisgICAgY2FzZSBCaXR3aXNlQ2Fz
dDoKKyAgICAgICAgcmV0dXJuIHJlZHVjZUJpdHdpc2VDYXN0KHZhbHVlLT50eXBlKCksIHZhbHVl
LT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB0cnVlKTsKKyAgICBjYXNlIFNFeHQ4OgorICAg
ICAgICByZXR1cm4gcmVkdWNlU0V4dDgodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2
YWx1ZS0+Y2hpbGQoMCksIHRydWUpOworICAgIGNhc2UgU0V4dDE2OgorICAgICAgICByZXR1cm4g
cmVkdWNlU0V4dDE2KHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxk
KDApLCB0cnVlKTsKKyAgICBjYXNlIFNFeHQzMjoKKyAgICAgICAgcmV0dXJuIHJlZHVjZVNFeHQz
Mih2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdHJ1ZSk7
CisgICAgY2FzZSBaRXh0MzI6CisgICAgICAgIHJldHVybiByZWR1Y2VaRXh0MzIodmFsdWUtPnR5
cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHRydWUpOworICAgIGNhc2Ug
VHJ1bmM6CisgICAgICAgIHJldHVybiByZWR1Y2VUcnVuYyh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+
b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdHJ1ZSk7CisgICAgY2FzZSBJVG9GOgorICAgICAg
ICByZXR1cm4gcmVkdWNlSVRvRih2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVl
LT5jaGlsZCgwKSwgdHJ1ZSk7CisgICAgY2FzZSBJVG9EOgorICAgICAgICByZXR1cm4gcmVkdWNl
SVRvRCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdHJ1
ZSk7CisgICAgY2FzZSBGbG9hdFRvRG91YmxlOgorICAgICAgICByZXR1cm4gcmVkdWNlRmxvYXRU
b0RvdWJsZSh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwg
dHJ1ZSk7CisgICAgY2FzZSBEb3VibGVUb0Zsb2F0OgorICAgICAgICByZXR1cm4gcmVkdWNlRG91
YmxlVG9GbG9hdCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgw
KSwgdHJ1ZSk7CisgICAgY2FzZSBTZWxlY3Q6CisgICAgICAgIHJldHVybiByZWR1Y2VTZWxlY3Qo
dmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5j
aGlsZCgxKSwgdmFsdWUtPmNoaWxkKDIpLCB0cnVlKTsKKyAgICBjYXNlIExvYWQ4WjoKKyAgICBj
YXNlIExvYWQ4UzoKKyAgICBjYXNlIExvYWQxNlo6CisgICAgY2FzZSBMb2FkMTZTOgorICAgIGNh
c2UgTG9hZDogeworICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gdmFsdWUtPmFzPE1lbW9y
eVZhbHVlPigpOworICAgICAgICByZXR1cm4gcmVkdWNlTG9hZFN0b3JlKG1lbW9yeS0+b3Bjb2Rl
KCksIG1lbW9yeS0+dHlwZSgpLCBtZW1vcnktPm9yaWdpbigpLCBtZW1vcnktPmNoaWxkKDApLCBt
ZW1vcnktPm9mZnNldCgpLCBudWxscHRyLCBtZW1vcnktPnJhbmdlKCksIG1lbW9yeS0+ZmVuY2VS
YW5nZSgpLCB0cnVlKTsKKyAgICB9CisgICAgY2FzZSBTdG9yZTg6CisgICAgY2FzZSBTdG9yZTE2
OgorICAgIGNhc2UgU3RvcmU6IHsKKyAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IHZhbHVl
LT5hczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgcmV0dXJuIHJlZHVjZUxvYWRTdG9yZShtZW1v
cnktPm9wY29kZSgpLCBtZW1vcnktPnR5cGUoKSwgbWVtb3J5LT5vcmlnaW4oKSwgbWVtb3J5LT5j
aGlsZCgxKSwgbWVtb3J5LT5vZmZzZXQoKSwgbWVtb3J5LT5jaGlsZCgwKSwgbWVtb3J5LT5yYW5n
ZSgpLCBtZW1vcnktPmZlbmNlUmFuZ2UoKSwgdHJ1ZSk7CisgICAgfQorICAgIGNhc2UgRXF1YWw6
CisgICAgICAgIHJldHVybiByZWR1Y2VFcXVhbCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2lu
KCksIHZhbHVlLT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxkKDEpLCB0cnVlKTsKKyAgICBjYXNlIE5v
dEVxdWFsOgorICAgICAgICByZXR1cm4gcmVkdWNlTm90RXF1YWwodmFsdWUtPnR5cGUoKSwgdmFs
dWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgxKSwgdHJ1ZSk7Cisg
ICAgY2FzZSBFcXVhbE9yVW5vcmRlcmVkOgorICAgICAgICByZXR1cm4gcmVkdWNlRXF1YWxPclVu
b3JkZXJlZCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwg
dmFsdWUtPmNoaWxkKDEpLCB0cnVlKTsKKyAgICBjYXNlIExlc3NUaGFuOgorICAgICAgICByZXR1
cm4gcmVkdWNlTGVzc1RoYW4odmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+
Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgxKSwgdHJ1ZSk7CisgICAgY2FzZSBHcmVhdGVyVGhhbjoK
KyAgICAgICAgcmV0dXJuIHJlZHVjZUdyZWF0ZXJUaGFuKHZhbHVlLT50eXBlKCksIHZhbHVlLT5v
cmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIHRydWUpOworICAgIGNh
c2UgTGVzc0VxdWFsOgorICAgICAgICByZXR1cm4gcmVkdWNlTGVzc0VxdWFsKHZhbHVlLT50eXBl
KCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIHRy
dWUpOworICAgIGNhc2UgR3JlYXRlckVxdWFsOgorICAgICAgICByZXR1cm4gcmVkdWNlR3JlYXRl
ckVxdWFsKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2
YWx1ZS0+Y2hpbGQoMSksIHRydWUpOworICAgIGNhc2UgQWJvdmU6CisgICAgICAgIHJldHVybiBy
ZWR1Y2VBYm92ZSh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgw
KSwgdmFsdWUtPmNoaWxkKDEpLCB0cnVlKTsKKyAgICBjYXNlIEJlbG93OgorICAgICAgICByZXR1
cm4gcmVkdWNlQmVsb3codmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hp
bGQoMCksIHZhbHVlLT5jaGlsZCgxKSwgdHJ1ZSk7CisgICAgY2FzZSBBYm92ZUVxdWFsOgorICAg
ICAgICByZXR1cm4gcmVkdWNlQWJvdmVFcXVhbCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2lu
KCksIHZhbHVlLT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxkKDEpLCB0cnVlKTsKKyAgICBjYXNlIEJl
bG93RXF1YWw6CisgICAgICAgIHJldHVybiByZWR1Y2VCZWxvd0VxdWFsKHZhbHVlLT50eXBlKCks
IHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIHRydWUp
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitib29s
IFBlZXBob2xlT3B0aW1pemVyOjp0cnlTaW1wbGlmeUJyYW5jaChWYWx1ZSogdmFsdWUpCit7Cisg
ICAgQVNTRVJUKHZhbHVlLT5vcGNvZGUoKSA9PSBCcmFuY2gpOworICAgIEFTU0VSVCghIW1faW5z
ZXJ0aW9uU2V0KTsKKyAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHZhbHVlLT5vd25lcjsKKyAgICBi
b29sIGNoYW5nZWQgPSBmYWxzZTsKKworICAgIC8vIFNpbXBsZSBmaXhwb2ludCBhcyBzb21lIG9m
IHRoZXNlIG9wdGltaXphdGlvbnMga2VlcCBhIGJyYW5jaCBhbmQgc28gY2FuIGJlIGNoYWluZWQK
KyAgICBmb3IgKDs7KSB7CisgICAgICAgIC8vIFR1cm4gdGhpczogQnJhbmNoKE5vdEVxdWFsKHgs
IDApKQorICAgICAgICAvLyBJbnRvIHRoaXM6IEJyYW5jaCh4KQorICAgICAgICBpZiAodmFsdWUt
PmNoaWxkKDApLT5vcGNvZGUoKSA9PSBOb3RFcXVhbCAmJiB2YWx1ZS0+Y2hpbGQoMCktPmNoaWxk
KDEpLT5pc0ludCgwKSkgeworICAgICAgICAgICAgdmFsdWUtPmNoaWxkKDApID0gdmFsdWUtPmNo
aWxkKDApLT5jaGlsZCgwKTsKKyAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBUdXJuIHRoaXM6IEJyYW5jaChF
cXVhbCh4LCAwKSwgdGhlbiwgZWxzZSkKKyAgICAgICAgLy8gSW50byB0aGlzOiBCcmFuY2goeCwg
ZWxzZSwgdGhlbikKKyAgICAgICAgaWYgKHZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gRXF1
YWwgJiYgdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQoMCkpIHsKKyAgICAgICAgICAg
IHZhbHVlLT5jaGlsZCgwKSA9IHZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7CisgICAgICAgICAg
ICBzdGQ6OnN3YXAoYmxvY2stPnRha2VuKCksIGJsb2NrLT5ub3RUYWtlbigpKTsKKyAgICAgICAg
ICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBUdXJuIHRoaXM6IEJyYW5jaChCaXRYb3IoYm9vbCwgMSksIHRoZW4sIGVsc2Up
CisgICAgICAgIC8vIEludG8gdGhpczogQnJhbmNoKGJvb2wsIGVsc2UsIHRoZW4pCisgICAgICAg
IGlmICh2YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdFhvcgorICAgICAgICAgICAgJiYg
dmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQzMigxKQorICAgICAgICAgICAgJiYgdmFs
dWUtPmNoaWxkKDApLT5jaGlsZCgwKS0+cmV0dXJuc0Jvb2woKSkgeworICAgICAgICAgICAgdmFs
dWUtPmNoaWxkKDApID0gdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKKyAgICAgICAgICAgIHN0
ZDo6c3dhcChibG9jay0+dGFrZW4oKSwgYmxvY2stPm5vdFRha2VuKCkpOworICAgICAgICAgICAg
Y2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIFR1cm4gdGhpczogQnJhbmNoKEJpdEFuZChib29sLCB4eWIxKSwgdGhlbiwgZWxzZSkK
KyAgICAgICAgLy8gSW50byB0aGlzOiBCcmFuY2goYm9vbCwgdGhlbiwgZWxzZSkKKyAgICAgICAg
aWYgKHZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0QW5kCisgICAgICAgICAgICAmJiB2
YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5oYXNJbnQoKQorICAgICAgICAgICAgJiYgdmFsdWUt
PmNoaWxkKDApLT5jaGlsZCgxKS0+YXNJbnQoKSAmIDEKKyAgICAgICAgICAgICYmIHZhbHVlLT5j
aGlsZCgwKS0+Y2hpbGQoMCktPnJldHVybnNCb29sKCkpIHsKKyAgICAgICAgICAgIHZhbHVlLT5j
aGlsZCgwKSA9IHZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICBjaGFuZ2Vk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgVHJp
U3RhdGUgdHJpU3RhdGUgPSB2YWx1ZS0+Y2hpbGQoMCktPmFzVHJpU3RhdGUoKTsKKworICAgICAg
ICAvLyBUdXJuIHRoaXM6IEJyYW5jaCgwLCB0aGVuLCBlbHNlKQorICAgICAgICAvLyBJbnRvIHRo
aXM6IEp1bXAoZWxzZSkKKyAgICAgICAgaWYgKHRyaVN0YXRlID09IEZhbHNlVHJpU3RhdGUpIHsK
KyAgICAgICAgICAgIGJsb2NrLT50YWtlbigpLmJsb2NrKCktPnJlbW92ZVByZWRlY2Vzc29yKGJs
b2NrKTsKKyAgICAgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0aEp1bXAoYmxvY2ssIGJsb2NrLT5u
b3RUYWtlbigpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gVHVybiB0aGlzOiBCcmFuY2gobm90IDAsIHRoZW4sIGVsc2UpCisgICAgICAgIC8vIElu
dG8gdGhpczogSnVtcCh0aGVuKQorICAgICAgICBpZiAodHJpU3RhdGUgPT0gVHJ1ZVRyaVN0YXRl
KSB7CisgICAgICAgICAgICBibG9jay0+bm90VGFrZW4oKS5ibG9jaygpLT5yZW1vdmVQcmVkZWNl
c3NvcihibG9jayk7CisgICAgICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhKdW1wKGJsb2NrLCBi
bG9jay0+dGFrZW4oKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gY2hhbmdlZDsKK30KKworYm9vbCBQZWVw
aG9sZU9wdGltaXplcjo6dHJ5U2ltcGxpZnlDQ2FsbChDQ2FsbFZhbHVlKiB2YWx1ZSkKK3sKKyAg
ICBBU1NFUlQodmFsdWUtPm9wY29kZSgpID09IENDYWxsKTsKKyAgICBBU1NFUlQoISFtX2luc2Vy
dGlvblNldCk7CisgICAgLy8gVHVybiB0aGlzOiBDYWxsKGZtb2QsIGNvbnN0YW50MSwgY29uc3Rh
bnQyKQorICAgIC8vIEludG8gdGhpczogZmNhbGwtY29uc3RhbnQoY29uc3RhbnQxLCBjb25zdGFu
dDIpCisgICAgYXV0byogZm1vZERvdWJsZSA9IHRhZ0NGdW5jdGlvblB0cjxkb3VibGUgKCopKGRv
dWJsZSwgZG91YmxlKT4oZm1vZCwgQjNDQ2FsbFB0clRhZyk7CisgICAgaWYgKHZhbHVlLT50eXBl
KCkgPT0gRG91YmxlCisgICAgICAgICYmIHZhbHVlLT5udW1DaGlsZHJlbigpID09IDMKKyAgICAg
ICAgJiYgdmFsdWUtPmNoaWxkKDApLT5pc0ludFB0cihyZWludGVycHJldF9jYXN0PGludHB0cl90
PihmbW9kRG91YmxlKSkKKyAgICAgICAgJiYgdmFsdWUtPmNoaWxkKDEpLT50eXBlKCkgPT0gRG91
YmxlCisgICAgICAgICYmIHZhbHVlLT5jaGlsZCgyKS0+dHlwZSgpID09IERvdWJsZSkgeworICAg
ICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gdmFsdWUtPmNoaWxkKDEpLT5tb2RDb25zdGFudCht
X3Byb2MsIHZhbHVlLT5jaGlsZCgyKSkpIHsKKyAgICAgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0
aElkZW50aXR5KGFwcGVuZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50KSk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgUGVlcGhvbGVPcHRpbWl6ZXI6OnRyeVNpbXBsaWZ5Q2hlY2tBZGQoQ2hlY2tWYWx1ZSogdmFs
dWUpCit7CisgICAgQVNTRVJUKHZhbHVlLT5vcGNvZGUoKSA9PSBDaGVja0FkZCk7CisgICAgQVNT
RVJUKCEhbV9pbnNlcnRpb25TZXQpOworICAgIFZhbHVlKiBsZWZ0ID0gdmFsdWUtPmNoaWxkKDAp
OworICAgIFZhbHVlKiByaWdodCA9IHZhbHVlLT5jaGlsZCgxKTsKKworICAgIGlmIChWYWx1ZSog
Y29uc3RhbnQgPSBsZWZ0LT5jaGVja0FkZENvbnN0YW50KG1fcHJvYywgcmlnaHQpKSB7CisgICAg
ICAgIHZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KGFwcGVuZFRvQ3VycmVudEJsb2NrKGNvbnN0
YW50KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChzaG91bGRHb0Jl
Zm9yZShyaWdodCwgbGVmdCkpIHsKKyAgICAgICAgc3RkOjpzd2FwKHZhbHVlLT5jaGlsZCgwKSwg
dmFsdWUtPmNoaWxkKDEpKTsKKyAgICAgICAgdHJ5U2ltcGxpZnlDaGVja0FkZCh2YWx1ZSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChyaWdodC0+aXNJbnQoMCkpIHsK
KyAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkobGVmdCk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIGlmICghcmFuZ2VGb3IobGVmdCkuY291bGRPdmVyZmxvd0Fk
ZChyYW5nZUZvcihyaWdodCksIHZhbHVlLT50eXBlKCkpKSB7CisgICAgICAgIFZhbHVlKiBhZGQg
PSByZWR1Y2VBZGQodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCBsZWZ0LCByaWdodCk7
CisgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KGFkZCk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQZWVwaG9sZU9w
dGltaXplcjo6dHJ5U2ltcGxpZnlDaGVja1N1YihDaGVja1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBB
U1NFUlQodmFsdWUtPm9wY29kZSgpID09IENoZWNrU3ViKTsKKyAgICBBU1NFUlQoISFtX2luc2Vy
dGlvblNldCk7CisgICAgVmFsdWUqIGxlZnQgPSB2YWx1ZS0+Y2hpbGQoMCk7CisgICAgVmFsdWUq
IHJpZ2h0ID0gdmFsdWUtPmNoaWxkKDEpOworCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGxl
ZnQtPmNoZWNrU3ViQ29uc3RhbnQobV9wcm9jLCByaWdodCkpIHsKKyAgICAgICAgdmFsdWUtPnJl
cGxhY2VXaXRoSWRlbnRpdHkoYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHJpZ2h0LT5pc0ludCgwKSkgeworICAg
ICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShsZWZ0KTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgaWYgKFZhbHVlKiBuZWdhdGVkQ29uc3RhbnQgPSByaWdodC0+Y2hl
Y2tOZWdDb25zdGFudChtX3Byb2MpKSB7CisgICAgICAgIG5lZ2F0ZWRDb25zdGFudCA9IGFwcGVu
ZFRvQ3VycmVudEJsb2NrKG5lZ2F0ZWRDb25zdGFudCk7CisgICAgICAgIHZhbHVlLT5jb252ZXJ0
VG9BZGQoKTsKKyAgICAgICAgdmFsdWUtPmNoaWxkKDEpID0gbmVnYXRlZENvbnN0YW50OworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIXJhbmdlRm9yKGxlZnQpLmNvdWxk
T3ZlcmZsb3dTdWIocmFuZ2VGb3IocmlnaHQpLCB2YWx1ZS0+dHlwZSgpKSkgeworICAgICAgICBW
YWx1ZSogc3ViID0gcmVkdWNlU3ViKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgbGVm
dCwgcmlnaHQpOworICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShzdWIpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
UGVlcGhvbGVPcHRpbWl6ZXI6OnRyeVNpbXBsaWZ5Q2hlY2tNdWwoQ2hlY2tWYWx1ZSogdmFsdWUp
Cit7CisgICAgQVNTRVJUKHZhbHVlLT5vcGNvZGUoKSA9PSBDaGVja011bCk7CisgICAgQVNTRVJU
KCEhbV9pbnNlcnRpb25TZXQpOworICAgIFZhbHVlKiBsZWZ0ID0gdmFsdWUtPmNoaWxkKDApOwor
ICAgIFZhbHVlKiByaWdodCA9IHZhbHVlLT5jaGlsZCgxKTsKKworICAgIGlmIChWYWx1ZSogY29u
c3RhbnQgPSBsZWZ0LT5jaGVja011bENvbnN0YW50KG1fcHJvYywgcmlnaHQpKSB7CisgICAgICAg
IHZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KGFwcGVuZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50
KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChzaG91bGRHb0JlZm9y
ZShyaWdodCwgbGVmdCkpIHsKKyAgICAgICAgc3RkOjpzd2FwKHZhbHVlLT5jaGlsZCgwKSwgdmFs
dWUtPmNoaWxkKDEpKTsKKyAgICAgICAgdHJ5U2ltcGxpZnlDaGVja011bCh2YWx1ZSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChyaWdodC0+aGFzSW50KCkpIHsKKyAg
ICAgICAgaWYgKCFyaWdodC0+YXNJbnQoKSkgeworICAgICAgICAgICAgVmFsdWUqIGNvbnN0MCA9
IGFwcGVuZFRvQ3VycmVudEJsb2NrKG1fcHJvYy5hZGRJbnRDb25zdGFudCh2YWx1ZSwgMCkpOwor
ICAgICAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkoY29uc3QwKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChyaWdodC0+YXNJbnQoKSA9
PSAxKSB7CisgICAgICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShsZWZ0KTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChyaWdodC0+YXNJ
bnQoKSA9PSAyKSB7CisgICAgICAgICAgICB2YWx1ZS0+Y29udmVydFRvQWRkKCk7CisgICAgICAg
ICAgICB2YWx1ZS0+Y2hpbGQoMSkgPSB2YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICB0cnlT
aW1wbGlmeUNoZWNrQWRkKHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisKKworICAgIH0KKyAgICBpZiAocmlnaHQtPmlzSW50KDApKSB7CisgICAgICAgIHZhbHVl
LT5yZXBsYWNlV2l0aElkZW50aXR5KGxlZnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBpZiAoIXJhbmdlRm9yKGxlZnQpLmNvdWxkT3ZlcmZsb3dNdWwocmFuZ2VGb3Iocmln
aHQpLCB2YWx1ZS0+dHlwZSgpKSkgeworICAgICAgICBWYWx1ZSogbXVsID0gcmVkdWNlTXVsKHZh
bHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgICAgICB2YWx1
ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShtdWwpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUGVlcGhvbGVPcHRpbWl6ZXI6OnRyeVNp
bXBsaWZ5Q2hlY2soQ2hlY2tWYWx1ZSogdmFsdWUpCit7CisgICAgQVNTRVJUKHZhbHVlLT5vcGNv
ZGUoKSA9PSBDaGVjayk7CisgICAgQVNTRVJUKCEhbV9pbnNlcnRpb25TZXQpOworCisgICAgaWYg
KHZhbHVlLT5jaGlsZCgwKS0+aXNMaWtlWmVybygpKSB7CisgICAgICAgIHZhbHVlLT5yZXBsYWNl
V2l0aE5vcCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAodmFsdWUt
PmNoaWxkKDApLT5pc0xpa2VOb25aZXJvKCkpIHsKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBw
YXRjaHBvaW50ID0gZW1pdDxQYXRjaHBvaW50VmFsdWU+KFZvaWQsIHZhbHVlLT5vcmlnaW4oKSkt
PmFzPFBhdGNocG9pbnRWYWx1ZT4oKTsKKworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0g
RWZmZWN0cygpOworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzID0gSGVhcFJhbmdl
Ojp0b3AoKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5leGl0c1NpZGV3YXlzID0gdHJ1
ZTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgdmFsdWUtPm51bUNoaWxkcmVu
KCk7ICsraSkKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZCh2YWx1ZS0+Y29uc3RyYWlu
ZWRDaGlsZChpKSk7CisKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKHZhbHVlLT5n
ZW5lcmF0b3IoKSk7CisKKyAgICAgICAgLy8gUmVwbGFjZSB0aGUgcmVzdCBvZiB0aGUgYmxvY2sg
d2l0aCBhbiBPb3BzLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4ICsgMTsgaSA8
IHZhbHVlLT5vd25lci0+c2l6ZSgpIC0gMTsgKytpKQorICAgICAgICAgICAgdmFsdWUtPm93bmVy
LT5hdChpKS0+cmVwbGFjZVdpdGhCb3R0b20oKm1faW5zZXJ0aW9uU2V0LCBtX2luZGV4KTsKKyAg
ICAgICAgdmFsdWUtPm93bmVyLT5sYXN0KCktPnJlcGxhY2VXaXRoT29wcyh2YWx1ZS0+b3duZXIp
OworICAgICAgICB2YWx1ZS0+b3duZXItPmxhc3QoKS0+c2V0T3JpZ2luKHZhbHVlLT5vcmlnaW4o
KSk7CisKKyAgICAgICAgLy8gUmVwbGFjZSBvdXJzZWx2ZXMgbGFzdC4KKyAgICAgICAgdmFsdWUt
PnJlcGxhY2VXaXRoTm9wKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlm
ICh2YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IE5vdEVxdWFsCisgICAgICAgICYmIHZhbHVl
LT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50KDApKSB7CisgICAgICAgIHZhbHVlLT5jaGlsZCgw
KSA9IHZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gUmV0dXJucyB0cnVlIGlmIHggPCB5IGZv
ciBzb21lIG9yZGVyIHN1Y2ggdGhhdDoKKy8vIEF0b21pY1N0cm9uZ0NBUyBhcmUgYWx3YXlzIGF0
IHRoZSBiZWdpbm5pbmcgKHVzZWQgYnkgc29tZSBwYXR0ZXJucyBpbiBCM0xvd2VyVG9BaXIpCisv
LyBDb25zdGFudHMgYXJlIGFsd2F5cyBhdCB0aGUgZW5kICh1c2VkIGJ5IHNvbWUgb3RoZXIgcGF0
dGVybnMgZm9yIHN0cmVuZ3RoIHJlZHVjdGlvbikKKy8vIEV2ZXJ5dGhpbmcgZWxzZSBpcyBzb3J0
ZWQgYnkgaW5kZXggKGFzIGEgY2Fub25pY2FsaXphdGlvbiB0aGF0IGhlbHBzIHBhc3NlcyBsaWtl
IENTRSkKK2Jvb2wgUGVlcGhvbGVPcHRpbWl6ZXI6OnNob3VsZEdvQmVmb3JlKFZhbHVlKiB4LCBW
YWx1ZSogeSkKK3sKKyAgICBpZiAoKHgtPmlzQ29uc3RhbnQoKSAmJiAheS0+aXNDb25zdGFudCgp
KQorICAgICAgICB8fCAoeS0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTICYmICEoeC0+b3Bj
b2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTKSkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gKCh5LT5pc0NvbnN0YW50KCkgJiYgIXgtPmlzQ29uc3RhbnQoKSkKKyAg
ICAgICAgfHwgKHgtPm9wY29kZSgpID09IEF0b21pY1N0cm9uZ0NBUyAmJiAhKHktPm9wY29kZSgp
ID09IEF0b21pY1N0cm9uZ0NBUykpCisgICAgICAgIHx8ICh4LT5pbmRleCgpIDwgeS0+aW5kZXgo
KSkpOworfQorCisvLyBGb3IgT3A9PUFkZCBvciBTdWIsIHR1cm4gYW55IG9mIHRoZXNlOgorLy8g
ICAgICBPcChNdWwoeDEsIHgyKSwgTXVsKHgxLCB4MykpCisvLyAgICAgIE9wKE11bCh4MiwgeDEp
LCBNdWwoeDEsIHgzKSkKKy8vICAgICAgT3AoTXVsKHgxLCB4MiksIE11bCh4MywgeDEpKQorLy8g
ICAgICBPcChNdWwoeDIsIHgxKSwgTXVsKHgzLCB4MSkpCisvLyBJbnRvIHRoaXM6IE11bCh4MSwg
T3AoeDIsIHgzKSkKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6dHJ5UmVkdWNlTXVsRGlzdHJp
YnV0aXZpdHkoT3Bjb2RlIG9wLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0
LCBWYWx1ZSogcmlnaHQpCit7CisgICAgQVNTRVJUKG9wID09IEFkZCB8fCBvcCA9PSBTdWIpOwor
ICAgIFZhbHVlKiB4MSA9IG51bGxwdHI7CisgICAgVmFsdWUqIHgyID0gbnVsbHB0cjsKKyAgICBW
YWx1ZSogeDMgPSBudWxscHRyOworICAgIGlmIChsZWZ0LT5vcGNvZGUoKSA9PSBNdWwgJiYgcmln
aHQtPm9wY29kZSgpID09IE11bCkgeworICAgICAgICBpZiAobGVmdC0+Y2hpbGQoMCkgPT0gcmln
aHQtPmNoaWxkKDApKSB7CisgICAgICAgICAgICAvLyBPcChNdWwoeDEsIHgyKSwgTXVsKHgxLCB4
MykpCisgICAgICAgICAgICB4MSA9IGxlZnQtPmNoaWxkKDApOworICAgICAgICAgICAgeDIgPSBs
ZWZ0LT5jaGlsZCgxKTsKKyAgICAgICAgICAgIHgzID0gcmlnaHQtPmNoaWxkKDEpOworICAgICAg
ICB9IGVsc2UgaWYgKGxlZnQtPmNoaWxkKDEpID09IHJpZ2h0LT5jaGlsZCgwKSkgeworICAgICAg
ICAgICAgLy8gT3AoTXVsKHgyLCB4MSksIE11bCh4MSwgeDMpKQorICAgICAgICAgICAgeDEgPSBs
ZWZ0LT5jaGlsZCgxKTsKKyAgICAgICAgICAgIHgyID0gbGVmdC0+Y2hpbGQoMCk7CisgICAgICAg
ICAgICB4MyA9IHJpZ2h0LT5jaGlsZCgxKTsKKyAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5jaGls
ZCgwKSA9PSByaWdodC0+Y2hpbGQoMSkpIHsKKyAgICAgICAgICAgIC8vIE9wKE11bCh4MSwgeDIp
LCBNdWwoeDMsIHgxKSkKKyAgICAgICAgICAgIHgxID0gbGVmdC0+Y2hpbGQoMCk7CisgICAgICAg
ICAgICB4MiA9IGxlZnQtPmNoaWxkKDEpOworICAgICAgICAgICAgeDMgPSByaWdodC0+Y2hpbGQo
MCk7CisgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+Y2hpbGQoMSkgPT0gcmlnaHQtPmNoaWxkKDEp
KSB7CisgICAgICAgICAgICAvLyBPcChNdWwoeDIsIHgxKSwgTXVsKHgzLCB4MSkpCisgICAgICAg
ICAgICB4MSA9IGxlZnQtPmNoaWxkKDEpOworICAgICAgICAgICAgeDIgPSBsZWZ0LT5jaGlsZCgw
KTsKKyAgICAgICAgICAgIHgzID0gcmlnaHQtPmNoaWxkKDApOworICAgICAgICB9CisgICAgfQor
ICAgIGlmICh4MSAhPSBudWxscHRyKSB7CisgICAgICAgIEFTU0VSVCh4MiAhPSBudWxscHRyICYm
IHgzICE9IG51bGxwdHIpOworICAgICAgICBWYWx1ZSogbmV3T3AgPSBvcCA9PSBBZGQgPyByZWR1
Y2VBZGQodHlwZSwgb3JpZ2luLCB4MiwgeDMpIDogcmVkdWNlU3ViKHR5cGUsIG9yaWdpbiwgeDIs
IHgzKTsKKyAgICAgICAgcmV0dXJuIHJlZHVjZU11bCh0eXBlLCBvcmlnaW4sIHgxLCBuZXdPcCk7
CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCisvLyBGb3IgT3A9PUJpdE9yIG9yIEJp
dFhvciwgdHVybiBhbnkgb2YgdGhlc2U6CisvLyAgICAgIE9wKEJpdEFuZCh4MSwgeDIpLCBCaXRB
bmQoeDEsIHgzKSkKKy8vICAgICAgT3AoQml0QW5kKHgyLCB4MSksIEJpdEFuZCh4MSwgeDMpKQor
Ly8gICAgICBPcChCaXRBbmQoeDEsIHgyKSwgQml0QW5kKHgzLCB4MSkpCisvLyAgICAgIE9wKEJp
dEFuZCh4MiwgeDEpLCBCaXRBbmQoeDMsIHgxKSkKKy8vIEludG8gdGhpczogQml0QW5kKE9wKHgy
LCB4MyksIHgxKQorLy8gQW5kIGFueSBvZiB0aGVzZToKKy8vICAgICAgT3AoQml0QW5kKHgxLCB4
MiksIHgxKQorLy8gICAgICBPcChCaXRBbmQoeDIsIHgxKSwgeDEpCisvLyAgICAgIE9wKHgxLCBC
aXRBbmQoeDEsIHgyKSkKKy8vICAgICAgT3AoeDEsIEJpdEFuZCh4MiwgeDEpKQorLy8gSW50byB0
aGlzOiBCaXRBbmQoT3AoeDIsIHgxKSwgeDEpCisvLyBUaGlzIHNlY29uZCBzZXQgaXMgZXF1aXZh
bGVudCB0byBkb2luZyB4MSA9PiBCaXRBbmQoeDEsIHgxKSwgYW5kIHRoZW4gYXBwbHlpbmcgdGhl
IGZpcnN0IHNldC4KKy8vIEl0IGRvZXMgbm90IHJlZHVjZSB0aGUgbnVtYmVyIG9mIG9wZXJhdGlv
bnMgZXhlY3V0ZWQsIGJ1dCBwcm92aWRlcyBzb21lIHVzZWZ1bCBub3JtYWxpemF0aW9uOiB3ZSBw
cmVmZXIgdG8gaGF2ZSBCaXRBbmQgYXQgdGhlIG91dGVybW9zdCwgdGhlbiBCaXRYb3IsIGFuZCBm
aW5hbGx5IEJpdE9yIGF0IHRoZSBpbm5lcm1vc3QKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6
dHJ5UmVkdWNlQml0QW5kRGlzdHJpYnV0aXZpdHkoT3Bjb2RlIG9wLCBUeXBlIHR5cGUsIE9yaWdp
biBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCit7CisgICAgQVNTRVJUKG9wID09
IEJpdE9yIHx8IG9wID09IEJpdFhvcik7CisgICAgVmFsdWUqIHgxID0gbnVsbHB0cjsKKyAgICBW
YWx1ZSogeDIgPSBudWxscHRyOworICAgIFZhbHVlKiB4MyA9IG51bGxwdHI7CisgICAgaWYgKGxl
ZnQtPm9wY29kZSgpID09IEJpdEFuZCAmJiByaWdodC0+b3Bjb2RlKCkgPT0gQml0QW5kKSB7Cisg
ICAgICAgIGlmIChsZWZ0LT5jaGlsZCgwKSA9PSByaWdodC0+Y2hpbGQoMCkpIHsKKyAgICAgICAg
ICAgIHgxID0gbGVmdC0+Y2hpbGQoMCk7CisgICAgICAgICAgICB4MiA9IGxlZnQtPmNoaWxkKDEp
OworICAgICAgICAgICAgeDMgPSByaWdodC0+Y2hpbGQoMSk7CisgICAgICAgIH0gZWxzZSBpZiAo
bGVmdC0+Y2hpbGQoMSkgPT0gcmlnaHQtPmNoaWxkKDApKSB7CisgICAgICAgICAgICB4MSA9IGxl
ZnQtPmNoaWxkKDEpOworICAgICAgICAgICAgeDIgPSBsZWZ0LT5jaGlsZCgwKTsKKyAgICAgICAg
ICAgIHgzID0gcmlnaHQtPmNoaWxkKDEpOworICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmNoaWxk
KDApID09IHJpZ2h0LT5jaGlsZCgxKSkgeworICAgICAgICAgICAgeDEgPSBsZWZ0LT5jaGlsZCgw
KTsKKyAgICAgICAgICAgIHgyID0gbGVmdC0+Y2hpbGQoMSk7CisgICAgICAgICAgICB4MyA9IHJp
Z2h0LT5jaGlsZCgwKTsKKyAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5jaGlsZCgxKSA9PSByaWdo
dC0+Y2hpbGQoMSkpIHsKKyAgICAgICAgICAgIHgxID0gbGVmdC0+Y2hpbGQoMSk7CisgICAgICAg
ICAgICB4MiA9IGxlZnQtPmNoaWxkKDApOworICAgICAgICAgICAgeDMgPSByaWdodC0+Y2hpbGQo
MCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGxlZnQtPm9wY29kZSgpID09IEJpdEFuZCkg
eworICAgICAgICBpZiAobGVmdC0+Y2hpbGQoMCkgPT0gcmlnaHQpIHsKKyAgICAgICAgICAgIHgx
ID0geDMgPSByaWdodDsKKyAgICAgICAgICAgIHgyID0gbGVmdC0+Y2hpbGQoMSk7CisgICAgICAg
IH0gZWxzZSBpZiAobGVmdC0+Y2hpbGQoMSkgPT0gcmlnaHQpIHsKKyAgICAgICAgICAgIHgxID0g
eDMgPSByaWdodDsKKyAgICAgICAgICAgIHgyID0gbGVmdC0+Y2hpbGQoMCk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgaWYgKHJpZ2h0LT5vcGNvZGUoKSA9PSBCaXRBbmQpIHsKKyAgICAgICAgaWYg
KHJpZ2h0LT5jaGlsZCgwKSA9PSBsZWZ0KSB7CisgICAgICAgICAgICB4MSA9IHgzID0gbGVmdDsK
KyAgICAgICAgICAgIHgyID0gcmlnaHQtPmNoaWxkKDEpOworICAgICAgICB9IGVsc2UgaWYgKHJp
Z2h0LT5jaGlsZCgxKSA9PSBsZWZ0KSB7CisgICAgICAgICAgICB4MSA9IHgzID0gbGVmdDsKKyAg
ICAgICAgICAgIHgyID0gcmlnaHQtPmNoaWxkKDApOworICAgICAgICB9CisgICAgfQorICAgIGlm
ICh4MSAhPSBudWxscHRyKSB7CisgICAgICAgIEFTU0VSVCh4MiAhPSBudWxscHRyICYmIHgzICE9
IG51bGxwdHIpOworICAgICAgICBWYWx1ZSogbmV3T3AgPSBvcCA9PSBCaXRPciA/IHJlZHVjZUJp
dE9yKHR5cGUsIG9yaWdpbiwgeDIsIHgzKSA6IHJlZHVjZUJpdFhvcih0eXBlLCBvcmlnaW4sIHgy
LCB4Myk7CisgICAgICAgIHJldHVybiByZWR1Y2VCaXRBbmQodHlwZSwgb3JpZ2luLCB4MSwgbmV3
T3ApOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0
aW1pemVyOjp0cnlSZWR1Y2VTaGlmdE9yUm90YXRlKE9wY29kZSBvcCwgVHlwZSB0eXBlLCBPcmln
aW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQoreworICAgIC8vIFNoaWZ0IGFu
eXRoaW5nIGJ5IHplcm8gaXMgaWRlbnRpdHkuCisgICAgaWYgKHJpZ2h0LT5pc0ludDMyKDApKQor
ICAgICAgICByZXR1cm4gbGVmdDsKKworICAgIC8vIFRoZSBzaGlmdCBhbHJlYWR5IG1hc2tzIGl0
cyBzaGlmdCBhbW91bnQuIElmIHRoZSBzaGlmdCBhbW91bnQgaXMgYmVpbmcgbWFza2VkIGJ5IGEK
KyAgICAvLyByZWR1bmRhbnQgYW1vdW50LCB0aGVuIHJlbW92ZSB0aGUgbWFzay4gRm9yIGV4YW1w
bGUsCisgICAgLy8gVHVybiB0aGlzOiBTaGwoQHgsIEJpdEFuZChAeSwgNjMpKQorICAgIC8vIElu
dG8gdGhpczogU2hsKEB4LCBAeSkKKyAgICB1bnNpZ25lZCBtYXNrID0gc2l6ZW9mVHlwZSh0eXBl
KSAqIDggLSAxOworICAgIGlmIChyaWdodC0+b3Bjb2RlKCkgPT0gQml0QW5kCisgICAgICAgICYm
IHJpZ2h0LT5jaGlsZCgxKS0+aGFzSW50MzIoKQorICAgICAgICAmJiAocmlnaHQtPmNoaWxkKDEp
LT5hc0ludDMyKCkgJiBtYXNrKSA9PSBtYXNrKSB7CisgICAgICAgIHN3aXRjaCAob3ApIHsKKyAg
ICAgICAgY2FzZSBTaGw6CisgICAgICAgICAgICByZXR1cm4gcmVkdWNlU2hsKHR5cGUsIG9yaWdp
biwgbGVmdCwgcmlnaHQtPmNoaWxkKDApKTsKKyAgICAgICAgY2FzZSBTU2hyOgorICAgICAgICAg
ICAgcmV0dXJuIHJlZHVjZVNTaHIodHlwZSwgb3JpZ2luLCBsZWZ0LCByaWdodC0+Y2hpbGQoMCkp
OworICAgICAgICBjYXNlIFpTaHI6CisgICAgICAgICAgICByZXR1cm4gcmVkdWNlWlNocih0eXBl
LCBvcmlnaW4sIGxlZnQsIHJpZ2h0LT5jaGlsZCgwKSk7CisgICAgICAgIGNhc2UgUm90TDoKKyAg
ICAgICAgICAgIHJldHVybiByZWR1Y2VSb3RMKHR5cGUsIG9yaWdpbiwgbGVmdCwgcmlnaHQtPmNo
aWxkKDApKTsKKyAgICAgICAgY2FzZSBSb3RSOgorICAgICAgICAgICAgcmV0dXJuIHJlZHVjZVJv
dFIodHlwZSwgb3JpZ2luLCBsZWZ0LCByaWdodC0+Y2hpbGQoMCkpOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCisvLyBGSVhNRTogVGhpcyBpcyBhIGJh
c2ljIGJvdW5kZWQgYmFja3dhcmRzIGFuYWx5c2lzLgorLy8gV2Ugc2hvdWxkIG1ha2UgUGVlcGhv
bGVPcHRpbWl6ZXIgcGFyYW1ldHJpYyBpbiB0aGlzIGFuYWx5c2lzLCB0byBzdXBwb3J0IGEgZm9y
d2FyZCBhbmFseXNpcy4KK0ludFJhbmdlIFBlZXBob2xlT3B0aW1pemVyOjpyYW5nZUZvcihWYWx1
ZSogdmFsdWUsIHVuc2lnbmVkIHRpbWVUb0xpdmUpCit7CisgICAgaWYgKCF0aW1lVG9MaXZlKQor
ICAgICAgICByZXR1cm4gSW50UmFuZ2U6OnRvcCh2YWx1ZS0+dHlwZSgpKTsKKworICAgIHN3aXRj
aCAodmFsdWUtPm9wY29kZSgpKSB7CisgICAgY2FzZSBDb25zdDMyOgorICAgIGNhc2UgQ29uc3Q2
NDogeworICAgICAgICBpbnQ2NF90IGludFZhbHVlID0gdmFsdWUtPmFzSW50KCk7CisgICAgICAg
IHJldHVybiBJbnRSYW5nZShpbnRWYWx1ZSwgaW50VmFsdWUpOworICAgIH0KKworICAgIGNhc2Ug
Qml0QW5kOgorICAgICAgICBpZiAodmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBJbnRSYW5nZTo6cmFuZ2VGb3JNYXNrKHZhbHVlLT5jaGlsZCgxKS0+YXNJbnQo
KSwgdmFsdWUtPnR5cGUoKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTU2hyOgorICAg
ICAgICBpZiAodmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJu
IHJhbmdlRm9yKHZhbHVlLT5jaGlsZCgwKSwgdGltZVRvTGl2ZSAtIDEpLnNTaHIodmFsdWUtPmNo
aWxkKDEpLT5hc0ludDMyKCksIHZhbHVlLT50eXBlKCkpOworICAgICAgICBicmVhazsKKworICAg
IGNhc2UgWlNocjoKKyAgICAgICAgaWYgKHZhbHVlLT5jaGlsZCgxKS0+aGFzSW50MzIoKSkKKyAg
ICAgICAgICAgIHJldHVybiByYW5nZUZvcih2YWx1ZS0+Y2hpbGQoMCksIHRpbWVUb0xpdmUgLSAx
KS56U2hyKHZhbHVlLT5jaGlsZCgxKS0+YXNJbnQzMigpLCB2YWx1ZS0+dHlwZSgpKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIFNobDoKKyAgICAgICAgaWYgKHZhbHVlLT5jaGlsZCgxKS0+
aGFzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiByYW5nZUZvcih2YWx1ZS0+Y2hpbGQoMCks
IHRpbWVUb0xpdmUgLSAxKS5zaGwodmFsdWUtPmNoaWxkKDEpLT5hc0ludDMyKCksIHZhbHVlLT50
eXBlKCkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQWRkOgorICAgICAgICByZXR1cm4g
cmFuZ2VGb3IodmFsdWUtPmNoaWxkKDApLCB0aW1lVG9MaXZlIC0gMSkuYWRkKHJhbmdlRm9yKHZh
bHVlLT5jaGlsZCgxKSwgdGltZVRvTGl2ZSAtIDEpLCB2YWx1ZS0+dHlwZSgpKTsKKworICAgIGNh
c2UgU3ViOgorICAgICAgICByZXR1cm4gcmFuZ2VGb3IodmFsdWUtPmNoaWxkKDApLCB0aW1lVG9M
aXZlIC0gMSkuc3ViKHJhbmdlRm9yKHZhbHVlLT5jaGlsZCgxKSwgdGltZVRvTGl2ZSAtIDEpLCB2
YWx1ZS0+dHlwZSgpKTsKKworICAgIGNhc2UgTXVsOgorICAgICAgICByZXR1cm4gcmFuZ2VGb3Io
dmFsdWUtPmNoaWxkKDApLCB0aW1lVG9MaXZlIC0gMSkubXVsKHJhbmdlRm9yKHZhbHVlLT5jaGls
ZCgxKSwgdGltZVRvTGl2ZSAtIDEpLCB2YWx1ZS0+dHlwZSgpKTsKKworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBJbnRSYW5nZTo6dG9wKHZhbHVlLT50
eXBlKCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BlZXBob2xlT3B0
aW1pemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGVlcGhv
bGVPcHRpbWl6ZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQZWVwaG9sZU9wdGltaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCisjaW5j
bHVkZSAiQjNDaGVja1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNJbnNlcnRpb25TZXQuaCIKKyNpbmNs
dWRlICJCM1Byb2NlZHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Y2xhc3MgSW50UmFuZ2U7CitjbGFzcyBQcm9jZWR1cmU7CisKKy8vIFRoaXMgY2xhc3MgY2FuIGJl
IHVzZWQgaW4gdHdvIG1vZGVzLCB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIHR3byB3YXlzIG9mIGNv
bnN0cnVjdGluZyBpdC4KKy8vIEluIHRoZSBmaXJzdCBtb2RlLCBpdCBpcyBwYXNzZWQgYW4gaW5z
ZXJ0aW9uU2V0LCBhbmQgdXNlcyBpdCB0byBjb25zdHJ1Y3QgbmV3IHZhbHVlcy4KKy8vIEl0IGlz
IHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBrZWVwIHRoZSBpbmRleCB1cC10by1kYXRl
IHdpdGggc2V0SW5kZXgsCisvLyBhbmQgdG8gZXhlY3V0ZSB0aGUgaW5zZXJ0aW9uU2V0IG9uY2Ug
aXQgaXMgZG9uZSB3aXRoIHRoZSBjdXJyZW50IGJhc2ljIGJsb2NrLgorLy8gVGhpcyBtb2RlIGlz
IHByaW1hcmlseSB1c2VkIGJ5IEIzUmVkdWNlU3RyZW5ndGguCisvLyBJbiB0aGUgc2Vjb25kIG1v
ZGUsIGl0IGlzIHBhc3NlZCBhIHBvaW50ZXIgdG8gYSBiYXNpYyBibG9jaywgYW5kIGNvbnN0cnVj
dCBuZXcgdmFsdWVzIGJ5IGFwcGVuZGluZyB0aGVtIGF0IHRoZSBlbmQuCisvLyBJbiB0aGlzIG1v
ZGUsIHRoZSBjYWxsZXIncyBvbmx5IHJlc3BvbnNpYmlsaXR5IGlzIHRvIHVwZGF0ZSB0aGUgYmxv
Y2sgcG9pbnRlciB3aXRoIHNldEJsb2NrIHdoZW5ldmVyIG5lZWRlZC4KKy8vIFRoaXMgbW9kZSBp
cyBwcmltYXJpbHkgdXNlZCBieSBGVExPdXRwdXQuCitjbGFzcyBQZWVwaG9sZU9wdGltaXplciB7
CitwdWJsaWM6CisgICAgUGVlcGhvbGVPcHRpbWl6ZXIoUHJvY2VkdXJlJiBwcm9jLCBJbnNlcnRp
b25TZXQmIGluc2VydGlvblNldCkKKyAgICAgICAgOiBtX3Byb2MocHJvYykKKyAgICAgICAgLCBt
X2luc2VydGlvblNldCgmaW5zZXJ0aW9uU2V0KQorICAgICAgICAsIG1faW5kZXgoMCkKKyAgICB7
CisgICAgfQorCisgICAgUGVlcGhvbGVPcHRpbWl6ZXIoUHJvY2VkdXJlJiBwcm9jLCBCYXNpY0Js
b2NrKiBibG9jayA9IG51bGxwdHIpCisgICAgICAgIDogbV9wcm9jKHByb2MpCisgICAgICAgICwg
bV9ibG9jayhibG9jaykKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBzZXRJbmRleCh1bnNpZ25l
ZCBpbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghIW1faW5zZXJ0aW9uU2V0KTsKKyAgICAg
ICAgbV9pbmRleCA9IGluZGV4OworICAgIH0KKworICAgIHZvaWQgc2V0QmxvY2soQmFzaWNCbG9j
ayogYmxvY2spCisgICAgeworICAgICAgICBBU1NFUlQoIW1faW5zZXJ0aW9uU2V0KTsKKyAgICAg
ICAgbV9ibG9jayA9IGJsb2NrOworICAgIH0KKworICAgIFZhbHVlKiByZWR1Y2VPcGFxdWUoVHlw
ZSwgT3JpZ2luLCBWYWx1ZSogY2hpbGQsIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZh
bHVlKiByZWR1Y2VBZGQoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBi
b29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlU3ViKFR5cGUsIE9yaWdp
biwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7Cisg
ICAgVmFsdWUqIHJlZHVjZU5lZyhUeXBlLCBPcmlnaW4sIFZhbHVlKiwgYm9vbCBjYW5HaXZlVXAg
PSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZU11bChUeXBlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0
LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZhbHVlKiByZWR1
Y2VEaXYoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGlzQ2hp
bGwsIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZhbHVlKiByZWR1Y2VVRGl2KFR5cGUs
IE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXAgPSBmYWxz
ZSk7CisgICAgVmFsdWUqIHJlZHVjZU1vZChUeXBlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1
ZSogcmlnaHQsIGJvb2wgaXNDaGlsbCwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFs
dWUqIHJlZHVjZVVNb2QoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBi
b29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlQml0QW5kKFR5cGUsIE9y
aWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7
CisgICAgVmFsdWUqIHJlZHVjZUJpdE9yKFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVl
KiByaWdodCwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZUJpdFhv
cihUeXBlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVw
ID0gZmFsc2UpOworICAgIFZhbHVlKiByZWR1Y2VTaGwoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVm
dCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVk
dWNlU1NocihUeXBlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2Fu
R2l2ZVVwID0gZmFsc2UpOworICAgIFZhbHVlKiByZWR1Y2VaU2hyKFR5cGUsIE9yaWdpbiwgVmFs
dWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFs
dWUqIHJlZHVjZVJvdEwoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBi
b29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlUm90UihUeXBlLCBPcmln
aW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOwor
ICAgIFZhbHVlKiByZWR1Y2VBYnMoVHlwZSwgT3JpZ2luLCBWYWx1ZSosIGJvb2wgY2FuR2l2ZVVw
ID0gZmFsc2UpOworICAgIFZhbHVlKiByZWR1Y2VDZWlsKFR5cGUsIE9yaWdpbiwgVmFsdWUqLCBi
b29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlRmxvb3IoVHlwZSwgT3Jp
Z2luLCBWYWx1ZSosIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZhbHVlKiByZWR1Y2VC
aXR3aXNlQ2FzdChUeXBlLCBPcmlnaW4sIFZhbHVlKiwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7
CisgICAgVmFsdWUqIHJlZHVjZVNxcnQoVHlwZSwgT3JpZ2luLCBWYWx1ZSosIGJvb2wgY2FuR2l2
ZVVwID0gZmFsc2UpOworICAgIFZhbHVlKiByZWR1Y2VTRXh0OChUeXBlLCBPcmlnaW4sIFZhbHVl
KiwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZVNFeHQxNihUeXBl
LCBPcmlnaW4sIFZhbHVlKiwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJl
ZHVjZVNFeHQzMihUeXBlLCBPcmlnaW4sIFZhbHVlKiwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7
CisgICAgVmFsdWUqIHJlZHVjZVpFeHQzMihUeXBlLCBPcmlnaW4sIFZhbHVlKiwgYm9vbCBjYW5H
aXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZVRydW5jKFR5cGUsIE9yaWdpbiwgVmFs
dWUqLCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlSVRvRChUeXBl
LCBPcmlnaW4sIFZhbHVlKiwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJl
ZHVjZUlUb0YoVHlwZSwgT3JpZ2luLCBWYWx1ZSosIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOwor
ICAgIFZhbHVlKiByZWR1Y2VGbG9hdFRvRG91YmxlKFR5cGUsIE9yaWdpbiwgVmFsdWUqLCBib29s
IGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlRG91YmxlVG9GbG9hdChUeXBl
LCBPcmlnaW4sIFZhbHVlKiwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJl
ZHVjZVNlbGVjdChUeXBlLCBPcmlnaW4sIFZhbHVlKiBjb25kLCBWYWx1ZSogaWZUcnVlLCBWYWx1
ZSogaWZGYWxzZSwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZUxv
YWRTdG9yZShPcGNvZGUsIFR5cGUsIE9yaWdpbiwgVmFsdWUqIGFkZHJlc3MsIFZhbHVlOjpPZmZz
ZXRUeXBlLCBWYWx1ZSogdmFsdWVTdG9yZWQgPSBudWxscHRyLCBIZWFwUmFuZ2UgPSBIZWFwUmFu
Z2U6OnRvcCgpLCBIZWFwUmFuZ2UgZmVuY2VSYW5nZSA9IEhlYXBSYW5nZSgpLCBib29sIGNhbkdp
dmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlRXF1YWwoVHlwZSwgT3JpZ2luLCBWYWx1
ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1
ZSogcmVkdWNlTm90RXF1YWwoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0
LCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlRXF1YWxPclVub3Jk
ZXJlZChUeXBlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2
ZVVwID0gZmFsc2UpOworICAgIFZhbHVlKiByZWR1Y2VMZXNzVGhhbihUeXBlLCBPcmlnaW4sIFZh
bHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZh
bHVlKiByZWR1Y2VHcmVhdGVyVGhhbihUeXBlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSog
cmlnaHQsIGJvb2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIFZhbHVlKiByZWR1Y2VMZXNzRXF1
YWwoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVV
cCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVkdWNlR3JlYXRlckVxdWFsKFR5cGUsIE9yaWdpbiwg
VmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAg
VmFsdWUqIHJlZHVjZUFib3ZlKFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdo
dCwgYm9vbCBjYW5HaXZlVXAgPSBmYWxzZSk7CisgICAgVmFsdWUqIHJlZHVjZUJlbG93KFR5cGUs
IE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgYm9vbCBjYW5HaXZlVXAgPSBmYWxz
ZSk7CisgICAgVmFsdWUqIHJlZHVjZUFib3ZlRXF1YWwoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVm
dCwgVmFsdWUqIHJpZ2h0LCBib29sIGNhbkdpdmVVcCA9IGZhbHNlKTsKKyAgICBWYWx1ZSogcmVk
dWNlQmVsb3dFcXVhbChUeXBlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIGJv
b2wgY2FuR2l2ZVVwID0gZmFsc2UpOworICAgIC8vIERpc3BhdGNoIG9uIHRoZSBvcGNvZGUgdG8g
YW55IG9mIHRoZSBmdW5jdGlvbnMgYWJvdmUsIHdpdGggY2FuR2l2ZVVwID0gdHJ1ZS4KKyAgICBW
YWx1ZSogdHJ5UmVkdWNlKFZhbHVlKik7CisKKyAgICAvLyBUaGlzIG1ldGhvZCBoYXMgYSBjb21w
bGV0ZWx5IGRpZmZlcmVudCBpbnRlcmZhY2UsIGJlY2F1c2UgaXQgY2Fubm90IGJlIHVzZWQgb24g
dGhlIGZseSB3aGlsZSBjcmVhdGluZyBCMywKKyAgICAvLyBhcyBpdCBtb2RpZmllcyB0aGUgYmxv
Y2sncyBzdWNjZXNzb3JzLgorICAgIC8vIEl0IHNpbXBseSByZXR1cm5zIHRydWUgaWYgaXQgd2Fz
IGFibGUgdG8gb3B0aW1pemUgb3IgY2Fub25pY2FsaXplIHRoZSBicmFuY2ggYW5kIGZhbHNlIG90
aGVyd2lzZS4KKyAgICBib29sIHRyeVNpbXBsaWZ5QnJhbmNoKFZhbHVlKik7CisgICAgLy8gU2lt
aWxhcmlseSB0aGVzZSBtZXRob2RzIHNob3VsZCBub3QgYmUgY2FsbGVkIHdoZW4gY29uc3RydWN0
aW5nIGEgdmFyYXJncyBvcGVyYXRpb24gcGllY2V3aXNlIGFzIGlzIGNvbW1vbmx5IGRvbmUKKyAg
ICAvLyBieSBGVExMb3dlckRGR1RvQjM6IHdlIGRvbid0IHdhbnQgY2xpZW50cyB0cnlpbmcgdG8g
bXV0YXRlIGEgQ2hlY2tBZGQgYWZ0ZXIgd2UndmUgdHJhbnNmb3JtZWQgaXQgaW50byBhbiBJZGVu
dGl0eS4KKyAgICAvLyBUaGV5IHJldHVybiB0cnVlIGlmIHRoZXkgd2VyZSBhYmxlIHRvIGRvIGFu
eSBvcHRpbWl6YXRpb24gb3IgY2Fub25pY2FsaXphdGlvbiwgYW5kIGZhbHNlIG90aGVyd2lzZS4K
KyAgICBib29sIHRyeVNpbXBsaWZ5Q0NhbGwoQ0NhbGxWYWx1ZSopOworICAgIGJvb2wgdHJ5U2lt
cGxpZnlDaGVja0FkZChDaGVja1ZhbHVlKik7CisgICAgYm9vbCB0cnlTaW1wbGlmeUNoZWNrU3Vi
KENoZWNrVmFsdWUqKTsKKyAgICBib29sIHRyeVNpbXBsaWZ5Q2hlY2tNdWwoQ2hlY2tWYWx1ZSop
OworICAgIGJvb2wgdHJ5U2ltcGxpZnlDaGVjayhDaGVja1ZhbHVlKik7CisKK3ByaXZhdGU6Cisg
ICAgVmFsdWUqIGFwcGVuZFRvQ3VycmVudEJsb2NrKFZhbHVlKik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgVmFsdWUqIGVtaXQo
QXJndW1lbnRzLi4uKTsKKworICAgIHN0YXRpYyBib29sIHNob3VsZEdvQmVmb3JlKFZhbHVlKiwg
VmFsdWUqKTsKKworICAgIFZhbHVlKiB0cnlSZWR1Y2VNdWxEaXN0cmlidXRpdml0eShPcGNvZGUs
IFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCk7CisgICAgVmFsdWUqIHRy
eVJlZHVjZUJpdEFuZERpc3RyaWJ1dGl2aXR5KE9wY29kZSwgVHlwZSwgT3JpZ2luLCBWYWx1ZSog
bGVmdCwgVmFsdWUqIHJpZ2h0KTsKKyAgICBWYWx1ZSogdHJ5UmVkdWNlU2hpZnRPclJvdGF0ZShP
cGNvZGUsIFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCk7CisKKyAgICBz
dGF0aWMgSW50UmFuZ2UgcmFuZ2VGb3IoVmFsdWUqLCB1bnNpZ25lZCB0aW1lVG9MaXZlID0gNSk7
CisKKyAgICBQcm9jZWR1cmUmIG1fcHJvYzsKKyAgICBJbnNlcnRpb25TZXQqIG1faW5zZXJ0aW9u
U2V0IHsgbnVsbHB0ciB9OworICAgIEJhc2ljQmxvY2sqIG1fYmxvY2sgeyBudWxscHRyIH07Cisg
ICAgdW5zaWduZWQgbV9pbmRleCB7IDAgfTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJldmlzaW9uIDI0NDM4MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkIzRWxpbWluYXRlRGVhZENvZGUuaCIK
ICNpbmNsdWRlICJCM0luc2VydGlvblNldElubGluZXMuaCIKICNpbmNsdWRlICJCM01lbW9yeVZh
bHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzUGVlcGhvbGVPcHRpbWl6ZXIuaCIKICNpbmNsdWRl
ICJCM1BoYXNlU2NvcGUuaCIKICNpbmNsdWRlICJCM1BoaUNoaWxkcmVuLmgiCiAjaW5jbHVkZSAi
QjNQcm9jZWR1cmVJbmxpbmVzLmgiCkBAIC05MywzMDkgKzk0LDYgQEAKIHN0YXRpYyBjb25zdCBi
b29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAotLy8gRklYTUU6IFRoaXMgSW50UmFuZ2Ugc3R1ZmYg
c2hvdWxkIGJlIHJlZmFjdG9yZWQgaW50byBhIGdlbmVyYWwgY29uc3RhbnQgcHJvcGFnYXRvci4g
SXQncyB3ZWlyZAotLy8gdGhhdCBpdCdzIGp1c3Qgc2l0dGluZyBoZXJlIGluIHRoaXMgZmlsZS4K
LWNsYXNzIEludFJhbmdlIHsKLXB1YmxpYzoKLSAgICBJbnRSYW5nZSgpCi0gICAgewotICAgIH0K
LQotICAgIEludFJhbmdlKGludDY0X3QgbWluLCBpbnQ2NF90IG1heCkKLSAgICAgICAgOiBtX21p
bihtaW4pCi0gICAgICAgICwgbV9tYXgobWF4KQotICAgIHsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBJbnRSYW5nZSB0b3AoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEludFJhbmdlKHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1pbigpLCBzdGQ6Om51bWVy
aWNfbGltaXRzPFQ+OjptYXgoKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIEludFJhbmdlIHRvcChU
eXBlIHR5cGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBJ
bnQzMjoKLSAgICAgICAgICAgIHJldHVybiB0b3A8aW50MzJfdD4oKTsKLSAgICAgICAgY2FzZSBJ
bnQ2NDoKLSAgICAgICAgICAgIHJldHVybiB0b3A8aW50NjRfdD4oKTsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gSW50UmFuZ2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci0gICAgc3RhdGljIEludFJhbmdlIHJhbmdlRm9yTWFzayhUIG1hc2spCi0gICAg
ewotICAgICAgICBpZiAoIShtYXNrICsgMSkpCi0gICAgICAgICAgICByZXR1cm4gdG9wPFQ+KCk7
Ci0gICAgICAgIHJldHVybiBJbnRSYW5nZSgwLCBtYXNrKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
SW50UmFuZ2UgcmFuZ2VGb3JNYXNrKGludDY0X3QgbWFzaywgVHlwZSB0eXBlKQotICAgIHsKLSAg
ICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAgICBy
ZXR1cm4gcmFuZ2VGb3JNYXNrPGludDMyX3Q+KHN0YXRpY19jYXN0PGludDMyX3Q+KG1hc2spKTsK
LSAgICAgICAgY2FzZSBJbnQ2NDoKLSAgICAgICAgICAgIHJldHVybiByYW5nZUZvck1hc2s8aW50
NjRfdD4obWFzayk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIEludFJhbmdlKCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBJbnRSYW5n
ZSByYW5nZUZvclpTaHIoaW50MzJfdCBzaGlmdEFtb3VudCkKLSAgICB7Ci0gICAgICAgIHR5cGVu
YW1lIHN0ZDo6bWFrZV91bnNpZ25lZDxUPjo6dHlwZSBtYXNrID0gMDsKLSAgICAgICAgbWFzay0t
OwotICAgICAgICBtYXNrID4+PSBzaGlmdEFtb3VudDsKLSAgICAgICAgcmV0dXJuIHJhbmdlRm9y
TWFzazxUPihzdGF0aWNfY2FzdDxUPihtYXNrKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIEludFJh
bmdlIHJhbmdlRm9yWlNocihpbnQzMl90IHNoaWZ0QW1vdW50LCBUeXBlIHR5cGUpCi0gICAgewot
ICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAgICAgICAg
IHJldHVybiByYW5nZUZvclpTaHI8aW50MzJfdD4oc2hpZnRBbW91bnQpOwotICAgICAgICBjYXNl
IEludDY0OgotICAgICAgICAgICAgcmV0dXJuIHJhbmdlRm9yWlNocjxpbnQ2NF90PihzaGlmdEFt
b3VudCk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIEludFJhbmdlKCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpbnQ2NF90IG1pbigpIGNvbnN0IHsgcmV0dXJuIG1fbWluOyB9Ci0gICAgaW50
NjRfdCBtYXgoKSBjb25zdCB7IHJldHVybiBtX21heDsgfQotCi0gICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Ci0gICAgewotICAgICAgICBvdXQucHJpbnQoIlsiLCBtX21pbiwg
IiwiLCBtX21heCwgIl0iKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAg
IGJvb2wgY291bGRPdmVyZmxvd0FkZChjb25zdCBJbnRSYW5nZSYgb3RoZXIpCi0gICAgewotICAg
ICAgICByZXR1cm4gc3VtT3ZlcmZsb3dzPFQ+KG1fbWluLCBvdGhlci5tX21pbikKLSAgICAgICAg
ICAgIHx8IHN1bU92ZXJmbG93czxUPihtX21pbiwgb3RoZXIubV9tYXgpCi0gICAgICAgICAgICB8
fCBzdW1PdmVyZmxvd3M8VD4obV9tYXgsIG90aGVyLm1fbWluKQotICAgICAgICAgICAgfHwgc3Vt
T3ZlcmZsb3dzPFQ+KG1fbWF4LCBvdGhlci5tX21heCk7Ci0gICAgfQotCi0gICAgYm9vbCBjb3Vs
ZE92ZXJmbG93QWRkKGNvbnN0IEludFJhbmdlJiBvdGhlciwgVHlwZSB0eXBlKQotICAgIHsKLSAg
ICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAgICBy
ZXR1cm4gY291bGRPdmVyZmxvd0FkZDxpbnQzMl90PihvdGhlcik7Ci0gICAgICAgIGNhc2UgSW50
NjQ6Ci0gICAgICAgICAgICByZXR1cm4gY291bGRPdmVyZmxvd0FkZDxpbnQ2NF90PihvdGhlcik7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgYm9vbCBjb3VsZE92ZXJmbG93
U3ViKGNvbnN0IEludFJhbmdlJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBkaWZmZXJl
bmNlT3ZlcmZsb3dzPFQ+KG1fbWluLCBvdGhlci5tX21pbikKLSAgICAgICAgICAgIHx8IGRpZmZl
cmVuY2VPdmVyZmxvd3M8VD4obV9taW4sIG90aGVyLm1fbWF4KQotICAgICAgICAgICAgfHwgZGlm
ZmVyZW5jZU92ZXJmbG93czxUPihtX21heCwgb3RoZXIubV9taW4pCi0gICAgICAgICAgICB8fCBk
aWZmZXJlbmNlT3ZlcmZsb3dzPFQ+KG1fbWF4LCBvdGhlci5tX21heCk7Ci0gICAgfQotCi0gICAg
Ym9vbCBjb3VsZE92ZXJmbG93U3ViKGNvbnN0IEludFJhbmdlJiBvdGhlciwgVHlwZSB0eXBlKQot
ICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0gICAg
ICAgICAgICByZXR1cm4gY291bGRPdmVyZmxvd1N1YjxpbnQzMl90PihvdGhlcik7Ci0gICAgICAg
IGNhc2UgSW50NjQ6Ci0gICAgICAgICAgICByZXR1cm4gY291bGRPdmVyZmxvd1N1YjxpbnQ2NF90
PihvdGhlcik7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgYm9vbCBjb3Vs
ZE92ZXJmbG93TXVsKGNvbnN0IEludFJhbmdlJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBwcm9kdWN0T3ZlcmZsb3dzPFQ+KG1fbWluLCBvdGhlci5tX21pbikKLSAgICAgICAgICAgIHx8
IHByb2R1Y3RPdmVyZmxvd3M8VD4obV9taW4sIG90aGVyLm1fbWF4KQotICAgICAgICAgICAgfHwg
cHJvZHVjdE92ZXJmbG93czxUPihtX21heCwgb3RoZXIubV9taW4pCi0gICAgICAgICAgICB8fCBw
cm9kdWN0T3ZlcmZsb3dzPFQ+KG1fbWF4LCBvdGhlci5tX21heCk7Ci0gICAgfQotCi0gICAgYm9v
bCBjb3VsZE92ZXJmbG93TXVsKGNvbnN0IEludFJhbmdlJiBvdGhlciwgVHlwZSB0eXBlKQotICAg
IHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAg
ICAgICByZXR1cm4gY291bGRPdmVyZmxvd011bDxpbnQzMl90PihvdGhlcik7Ci0gICAgICAgIGNh
c2UgSW50NjQ6Ci0gICAgICAgICAgICByZXR1cm4gY291bGRPdmVyZmxvd011bDxpbnQ2NF90Pihv
dGhlcik7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgSW50UmFuZ2Ugc2hs
KGludDMyX3Qgc2hpZnRBbW91bnQpCi0gICAgewotICAgICAgICBUIG5ld01pbiA9IHN0YXRpY19j
YXN0PFQ+KG1fbWluKSA8PCBzdGF0aWNfY2FzdDxUPihzaGlmdEFtb3VudCk7Ci0gICAgICAgIFQg
bmV3TWF4ID0gc3RhdGljX2Nhc3Q8VD4obV9tYXgpIDw8IHN0YXRpY19jYXN0PFQ+KHNoaWZ0QW1v
dW50KTsKLQotICAgICAgICBpZiAoKG5ld01pbiA+PiBzaGlmdEFtb3VudCkgIT0gc3RhdGljX2Nh
c3Q8VD4obV9taW4pKQotICAgICAgICAgICAgbmV3TWluID0gc3RkOjpudW1lcmljX2xpbWl0czxU
Pjo6bWluKCk7Ci0gICAgICAgIGlmICgobmV3TWF4ID4+IHNoaWZ0QW1vdW50KSAhPSBzdGF0aWNf
Y2FzdDxUPihtX21heCkpCi0gICAgICAgICAgICBuZXdNYXggPSBzdGQ6Om51bWVyaWNfbGltaXRz
PFQ+OjptYXgoKTsKLQotICAgICAgICByZXR1cm4gSW50UmFuZ2UobmV3TWluLCBuZXdNYXgpOwot
ICAgIH0KLQotICAgIEludFJhbmdlIHNobChpbnQzMl90IHNoaWZ0QW1vdW50LCBUeXBlIHR5cGUp
Ci0gICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBJbnQzMjoKLSAg
ICAgICAgICAgIHJldHVybiBzaGw8aW50MzJfdD4oc2hpZnRBbW91bnQpOwotICAgICAgICBjYXNl
IEludDY0OgotICAgICAgICAgICAgcmV0dXJuIHNobDxpbnQ2NF90PihzaGlmdEFtb3VudCk7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICAgICAgcmV0dXJuIEludFJhbmdlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIEludFJhbmdlIHNTaHIoaW50MzJfdCBzaGlmdEFt
b3VudCkKLSAgICB7Ci0gICAgICAgIFQgbmV3TWluID0gc3RhdGljX2Nhc3Q8VD4obV9taW4pID4+
IHN0YXRpY19jYXN0PFQ+KHNoaWZ0QW1vdW50KTsKLSAgICAgICAgVCBuZXdNYXggPSBzdGF0aWNf
Y2FzdDxUPihtX21heCkgPj4gc3RhdGljX2Nhc3Q8VD4oc2hpZnRBbW91bnQpOwotCi0gICAgICAg
IHJldHVybiBJbnRSYW5nZShuZXdNaW4sIG5ld01heCk7Ci0gICAgfQotCi0gICAgSW50UmFuZ2Ug
c1NocihpbnQzMl90IHNoaWZ0QW1vdW50LCBUeXBlIHR5cGUpCi0gICAgewotICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAgICAgICAgIHJldHVybiBzU2hy
PGludDMyX3Q+KHNoaWZ0QW1vdW50KTsKLSAgICAgICAgY2FzZSBJbnQ2NDoKLSAgICAgICAgICAg
IHJldHVybiBzU2hyPGludDY0X3Q+KHNoaWZ0QW1vdW50KTsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1
cm4gSW50UmFuZ2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci0gICAgSW50UmFuZ2UgelNocihpbnQzMl90IHNoaWZ0QW1vdW50KQotICAgIHsKLSAgICAg
ICAgLy8gVGhpcyBpcyBhbiBhd2t3YXJkIGNvcm5lciBjYXNlIGZvciBhbGwgb2YgdGhlIG90aGVy
IGxvZ2ljLgotICAgICAgICBpZiAoIXNoaWZ0QW1vdW50KQotICAgICAgICAgICAgcmV0dXJuICp0
aGlzOwotCi0gICAgICAgIC8vIElmIHRoZSBpbnB1dCByYW5nZSBtYXkgYmUgbmVnYXRpdmUsIHRo
ZW4gYWxsIHdlIGNhbiBzYXkgYWJvdXQgdGhlIG91dHB1dCByYW5nZSBpcyB0aGF0IGl0Ci0gICAg
ICAgIC8vIHdpbGwgYmUgbWFza2VkLiBUaGF0J3MgYmVjYXVzZSAtMSByaWdodCBzaGlmdGVkIGp1
c3QgcHJvZHVjZXMgdGhhdCBtYXNrLgotICAgICAgICBpZiAobV9taW4gPCAwKQotICAgICAgICAg
ICAgcmV0dXJuIHJhbmdlRm9yWlNocjxUPihzaGlmdEFtb3VudCk7Ci0KLSAgICAgICAgLy8gSWYg
dGhlIGlucHV0IHJhbmdlIGlzIG5vbi1uZWdhdGl2ZSwgdGhlbiB0aGlzIGp1c3QgYnJpbmdzIHRo
ZSByYW5nZSBjbG9zZXIgdG8gemVyby4KLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6Om1h
a2VfdW5zaWduZWQ8VD46OnR5cGUgVW5zaWduZWRUOwotICAgICAgICBVbnNpZ25lZFQgbmV3TWlu
ID0gc3RhdGljX2Nhc3Q8VW5zaWduZWRUPihtX21pbikgPj4gc3RhdGljX2Nhc3Q8VW5zaWduZWRU
PihzaGlmdEFtb3VudCk7Ci0gICAgICAgIFVuc2lnbmVkVCBuZXdNYXggPSBzdGF0aWNfY2FzdDxV
bnNpZ25lZFQ+KG1fbWF4KSA+PiBzdGF0aWNfY2FzdDxVbnNpZ25lZFQ+KHNoaWZ0QW1vdW50KTsK
LSAgICAgICAgCi0gICAgICAgIHJldHVybiBJbnRSYW5nZShuZXdNaW4sIG5ld01heCk7Ci0gICAg
fQotCi0gICAgSW50UmFuZ2UgelNocihpbnQzMl90IHNoaWZ0QW1vdW50LCBUeXBlIHR5cGUpCi0g
ICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAg
ICAgICAgIHJldHVybiB6U2hyPGludDMyX3Q+KHNoaWZ0QW1vdW50KTsKLSAgICAgICAgY2FzZSBJ
bnQ2NDoKLSAgICAgICAgICAgIHJldHVybiB6U2hyPGludDY0X3Q+KHNoaWZ0QW1vdW50KTsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICByZXR1cm4gSW50UmFuZ2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgSW50UmFuZ2UgYWRkKGNvbnN0IEludFJhbmdlJiBv
dGhlcikKLSAgICB7Ci0gICAgICAgIGlmIChjb3VsZE92ZXJmbG93QWRkPFQ+KG90aGVyKSkKLSAg
ICAgICAgICAgIHJldHVybiB0b3A8VD4oKTsKLSAgICAgICAgcmV0dXJuIEludFJhbmdlKG1fbWlu
ICsgb3RoZXIubV9taW4sIG1fbWF4ICsgb3RoZXIubV9tYXgpOwotICAgIH0KLQotICAgIEludFJh
bmdlIGFkZChjb25zdCBJbnRSYW5nZSYgb3RoZXIsIFR5cGUgdHlwZSkKLSAgICB7Ci0gICAgICAg
IHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEludDMyOgotICAgICAgICAgICAgcmV0dXJu
IGFkZDxpbnQzMl90PihvdGhlcik7Ci0gICAgICAgIGNhc2UgSW50NjQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gYWRkPGludDY0X3Q+KG90aGVyKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gSW50UmFu
Z2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAg
SW50UmFuZ2Ugc3ViKGNvbnN0IEludFJhbmdlJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmIChj
b3VsZE92ZXJmbG93U3ViPFQ+KG90aGVyKSkKLSAgICAgICAgICAgIHJldHVybiB0b3A8VD4oKTsK
LSAgICAgICAgcmV0dXJuIEludFJhbmdlKG1fbWluIC0gb3RoZXIubV9tYXgsIG1fbWF4IC0gb3Ro
ZXIubV9taW4pOwotICAgIH0KLQotICAgIEludFJhbmdlIHN1Yihjb25zdCBJbnRSYW5nZSYgb3Ro
ZXIsIFR5cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBj
YXNlIEludDMyOgotICAgICAgICAgICAgcmV0dXJuIHN1YjxpbnQzMl90PihvdGhlcik7Ci0gICAg
ICAgIGNhc2UgSW50NjQ6Ci0gICAgICAgICAgICByZXR1cm4gc3ViPGludDY0X3Q+KG90aGVyKTsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgICAgICByZXR1cm4gSW50UmFuZ2UoKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgSW50UmFuZ2UgbXVsKGNvbnN0IEludFJhbmdl
JiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmIChjb3VsZE92ZXJmbG93TXVsPFQ+KG90aGVyKSkK
LSAgICAgICAgICAgIHJldHVybiB0b3A8VD4oKTsKLSAgICAgICAgcmV0dXJuIEludFJhbmdlKAot
ICAgICAgICAgICAgc3RkOjptaW4oCi0gICAgICAgICAgICAgICAgc3RkOjptaW4obV9taW4gKiBv
dGhlci5tX21pbiwgbV9taW4gKiBvdGhlci5tX21heCksCi0gICAgICAgICAgICAgICAgc3RkOjpt
aW4obV9tYXggKiBvdGhlci5tX21pbiwgbV9tYXggKiBvdGhlci5tX21heCkpLAotICAgICAgICAg
ICAgc3RkOjptYXgoCi0gICAgICAgICAgICAgICAgc3RkOjptYXgobV9taW4gKiBvdGhlci5tX21p
biwgbV9taW4gKiBvdGhlci5tX21heCksCi0gICAgICAgICAgICAgICAgc3RkOjptYXgobV9tYXgg
KiBvdGhlci5tX21pbiwgbV9tYXggKiBvdGhlci5tX21heCkpKTsKLSAgICB9Ci0KLSAgICBJbnRS
YW5nZSBtdWwoY29uc3QgSW50UmFuZ2UmIG90aGVyLCBUeXBlIHR5cGUpCi0gICAgewotICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAgICAgICAgIHJldHVy
biBtdWw8aW50MzJfdD4ob3RoZXIpOwotICAgICAgICBjYXNlIEludDY0OgotICAgICAgICAgICAg
cmV0dXJuIG11bDxpbnQ2NF90PihvdGhlcik7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIEludFJh
bmdlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW50NjRfdCBtX21pbiB7
IDAgfTsKLSAgICBpbnQ2NF90IG1fbWF4IHsgMCB9OwotfTsKLQogY2xhc3MgUmVkdWNlU3RyZW5n
dGggewogcHVibGljOgogICAgIFJlZHVjZVN0cmVuZ3RoKFByb2NlZHVyZSYgcHJvYykKQEAgLTQy
MSw3ICsxMTksNyBAQAogICAgICAgICAgICAgICAgIGRhdGFMb2coIkIzIGFmdGVyIGl0ZXJhdGlv
biAjIiwgaW5kZXggLSAxLCAiIG9mIHJlZHVjZVN0cmVuZ3RoOlxuIik7CiAgICAgICAgICAgICAg
ICAgZGF0YUxvZyhtX3Byb2MpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAg
ICAgICAgIHNpbXBsaWZ5Q0ZHKCk7CiAKICAgICAgICAgICAgIGlmIChtX2NoYW5nZWRDRkcpIHsK
QEAgLTQ0Miw5ICsxNDAsOSBAQAogICAgICAgICAgICAgLy8ga2VlcCBAdGhpbmcuIFRoYXQncyBi
ZXR0ZXIsIHNpbmNlIHdlIHVzdWFsbHkgd2FudCB0aGluZ3MgdG8gc3RheSB3aGVyZXZlciB0aGUg
Y2xpZW50CiAgICAgICAgICAgICAvLyBwdXQgdGhlbS4gV2UncmUgbm90IGFjdHVhbGx5IHNtYXJ0
IGVub3VnaCB0byBtb3ZlIHRoaW5ncyBhcm91bmQgYXQgcmFuZG9tLgogICAgICAgICAgICAgbV9j
aGFuZ2VkIHw9IGVsaW1pbmF0ZURlYWRDb2RlSW1wbChtX3Byb2MpOwotICAgICAgICAgICAgCisK
ICAgICAgICAgICAgIHNpbXBsaWZ5U1NBKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAg
aWYgKG1fcHJvYy5vcHRMZXZlbCgpID49IDIpIHsKICAgICAgICAgICAgICAgICBtX3Byb2MucmVz
ZXRWYWx1ZU93bmVycygpOwogICAgICAgICAgICAgICAgIG1fZG9taW5hdG9ycyA9ICZtX3Byb2Mu
ZG9taW5hdG9ycygpOyAvLyBSZWNvbXB1dGUgaWYgbmVjZXNzYXJ5LgpAQCAtNDUxLDkgKzE0OSwx
MCBAQAogICAgICAgICAgICAgICAgIG1fcHVyZUNTRS5jbGVhcigpOwogICAgICAgICAgICAgfQog
CisgICAgICAgICAgICBQZWVwaG9sZU9wdGltaXplciBwZWVwaG9sZShtX3Byb2MsIG1faW5zZXJ0
aW9uU2V0KTsKICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MuYmxv
Y2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgICAgICAgICAgbV9ibG9jayA9IGJsb2NrOwotICAg
ICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZm9yIChtX2luZGV4ID0gMDsgbV9pbmRl
eCA8IGJsb2NrLT5zaXplKCk7ICsrbV9pbmRleCkgewogICAgICAgICAgICAgICAgICAgICBpZiAo
QjNSZWR1Y2VTdHJlbmd0aEludGVybmFsOjp2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKApAQCAtNDYyLDcgKzE2MSw4IEBACiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZSA9IG1fYmxvY2stPmF0KG1faW5kZXgpOwogICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5wZXJmb3JtU3Vic3RpdHV0aW9uKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIHJlZHVjZVZhbHVlU3RyZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAgICAg
cGVlcGhvbGUuc2V0SW5kZXgobV9pbmRleCk7CisgICAgICAgICAgICAgICAgICAgIHJlZHVjZVZh
bHVlU3RyZW5ndGgocGVlcGhvbGUpOwogICAgICAgICAgICAgICAgICAgICBpZiAobV9wcm9jLm9w
dExldmVsKCkgPj0gMikKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VJZlJlZHVuZGFu
dCgpOwogICAgICAgICAgICAgICAgIH0KQEAgLTQ3MSwxNTU1ICsxNzEsNDUgQEAKIAogICAgICAg
ICAgICAgbV9jaGFuZ2VkQ0ZHIHw9IG1fYmxvY2tJbnNlcnRpb25TZXQuZXhlY3V0ZSgpOwogICAg
ICAgICAgICAgaGFuZGxlQ2hhbmdlZENGR0lmTmVjZXNzYXJ5KCk7Ci0gICAgICAgICAgICAKKwog
ICAgICAgICAgICAgcmVzdWx0IHw9IG1fY2hhbmdlZDsKICAgICAgICAgfSB3aGlsZSAobV9jaGFu
Z2VkICYmIG1fcHJvYy5vcHRMZXZlbCgpID49IDIpOwotICAgICAgICAKKwogICAgICAgICBpZiAo
bV9wcm9jLm9wdExldmVsKCkgPCAyKSB7CiAgICAgICAgICAgICBtX2NoYW5nZWRDRkcgPSBmYWxz
ZTsKICAgICAgICAgICAgIHNpbXBsaWZ5Q0ZHKCk7CiAgICAgICAgICAgICBoYW5kbGVDaGFuZ2Vk
Q0ZHSWZOZWNlc3NhcnkoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KLSAgICAKKwogcHJpdmF0ZToKLSAgICB2b2lkIHJlZHVjZVZhbHVlU3Ry
ZW5ndGgoKQorICAgIHZvaWQgcmVkdWNlVmFsdWVTdHJlbmd0aChQZWVwaG9sZU9wdGltaXplciYg
cGVlcGhvbGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7Ci0g
ICAgICAgIGNhc2UgT3BhcXVlOgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBPcGFxdWUoT3Bh
cXVlKHZhbHVlKSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogT3BhcXVlKHZhbHVlKQotICAg
ICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBPcGFxdWUpIHsKLSAg
ICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBDQ2FsbDoK
KyAgICAgICAgICAgIG1fY2hhbmdlZCB8PSBwZWVwaG9sZS50cnlTaW1wbGlmeUNDYWxsKG1fdmFs
dWUtPmFzPENDYWxsVmFsdWU+KCkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBBZGQ6Ci0gICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkg
PT0gQWRkICYmIG1fdmFsdWUtPmlzSW50ZWdlcigpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHVy
biB0aGlzOiBBZGQoQWRkKHZhbHVlLCBjb25zdGFudDEpLCBjb25zdGFudDIpCi0gICAgICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiBBZGQodmFsdWUsIGNvbnN0YW50MSArIGNvbnN0YW50MikKLSAg
ICAgICAgICAgICAgICBWYWx1ZSogbmV3U3VtID0gbV92YWx1ZS0+Y2hpbGQoMSktPmFkZENvbnN0
YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAg
ICBpZiAobmV3U3VtKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dFZhbHVlKG1faW5kZXgsIG5ld1N1bSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNo
aWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgICAg
ICBtX3ZhbHVlLT5jaGlsZCgxKSA9IG5ld1N1bTsKLSAgICAgICAgICAgICAgICAgICAgbV9jaGFu
Z2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQWRkKEFk
ZCh2YWx1ZSwgY29uc3RhbnQpLCBvdGhlclZhbHVlKQotICAgICAgICAgICAgICAgIC8vIEludG8g
dGhpczogQWRkKEFkZCh2YWx1ZSwgb3RoZXJWYWx1ZSksIGNvbnN0YW50KQotICAgICAgICAgICAg
ICAgIGlmICghbV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpICYmIG1fdmFsdWUtPmNoaWxkKDAp
LT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgVmFsdWUqIHZhbHVl
ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgICAgICBWYWx1
ZSogY29uc3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSk7Ci0gICAgICAgICAgICAg
ICAgICAgIFZhbHVlKiBvdGhlclZhbHVlID0gbV92YWx1ZS0+Y2hpbGQoMSk7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIFRoaXMgY291bGQgY3JlYXRlIGR1cGxpY2F0ZSBjb2RlIGlmIEFkZCh2YWx1
ZSwgY29uc3RhbnQpIGlzIHVzZWQgZWxzZXdoZXJlLgotICAgICAgICAgICAgICAgICAgICAvLyBI
b3dldmVyLCB3ZSBhbHJlYWR5IG1vZGVsIGFkZGluZyBhIGNvbnN0YW50IGFzIGlmIGl0IHdhcyBm
cmVlIGluIG90aGVyIHBsYWNlcwotICAgICAgICAgICAgICAgICAgICAvLyBzbyBsZXQncyBqdXN0
IHJvbGwgd2l0aCBpdC4gVGhlIGFsdGVybmF0aXZlIHdvdWxkIG1lYW4gaGF2aW5nIHRvIGRvIGdv
b2QgdXNlCi0gICAgICAgICAgICAgICAgICAgIC8vIGNvdW50cywgd2hpY2ggcmVkdWNlU3RyZW5n
dGgoKSBjdXJyZW50bHkgZG9lc24ndCBoYXZlLgotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVl
LT5jaGlsZCgwKSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIEFkZCwgbV92
YWx1ZS0+b3JpZ2luKCksIHZhbHVlLCBvdGhlclZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAg
bV92YWx1ZS0+Y2hpbGQoMSkgPSBjb25zdGFudDsKLSAgICAgICAgICAgICAgICAgICAgbV9jaGFu
Z2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6
IEFkZChvdGhlclZhbHVlLCBBZGQodmFsdWUsIGNvbnN0YW50KSkKLSAgICAgICAgICAgIC8vIElu
dG8gdGhpczogQWRkKEFkZCh2YWx1ZSwgb3RoZXJWYWx1ZSksIGNvbnN0YW50KQotICAgICAgICAg
ICAgaWYgKG1fdmFsdWUtPmlzSW50ZWdlcigpCi0gICAgICAgICAgICAgICAgJiYgIW1fdmFsdWUt
PmNoaWxkKDApLT5oYXNJbnQoKQotICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEp
LT5vcGNvZGUoKSA9PSBBZGQKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+
Y2hpbGQoMSktPmhhc0ludCgpKSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0gbV92
YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIFZhbHVlKiBjb25zdGFu
dCA9IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgxKTsKLSAgICAgICAgICAgICAgICBWYWx1ZSog
b3RoZXJWYWx1ZSA9IG1fdmFsdWUtPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIC8vIFRoaXMg
Y3JlYXRlcyBhIGR1cGxpY2F0ZSBhZGQuIFRoYXQncyBkYW5nZXJvdXMgYnV0IHByb2JhYmx5IGZp
bmUsIHNlZSBhYm92ZS4KLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9Ci0gICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2luZGV4LCBBZGQsIG1fdmFsdWUtPm9yaWdpbigpLCB2YWx1ZSwgb3Ro
ZXJWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMSkgPSBjb25zdGFudDsK
LSAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6
IEFkZChjb25zdGFudDEsIGNvbnN0YW50MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogY29u
c3RhbnQxICsgY29uc3RhbnQyCi0gICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50QWRkID0g
bV92YWx1ZS0+Y2hpbGQoMCktPmFkZENvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkp
KSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudEFkZCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogSW50ZWdlciBBZGQodmFsdWUsIHZhbHVlKQotICAgICAgICAgICAgLy8gSW50byB0
aGlzOiBTaGwodmFsdWUsIDEpCi0gICAgICAgICAgICAvLyBUaGlzIGlzIGEgdXNlZnVsIGNhbm9u
aWNhbGl6YXRpb24uIEl0J3Mgbm90IG1lYW50IHRvIGJlIGEgc3RyZW5ndGggcmVkdWN0aW9uLgot
ICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmlzSW50ZWdlcigpICYmIG1fdmFsdWUtPmNoaWxkKDAp
ID09IG1fdmFsdWUtPmNoaWxkKDEpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdW
YWx1ZSgKLSAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmFkZDxWYWx1ZT4oCi0gICAgICAgICAg
ICAgICAgICAgICAgICBTaGwsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDMyVmFs
dWU+KG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCAxKSkpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFkZCh2YWx1
ZSwgemVybykKLSAgICAgICAgICAgIC8vIEludG8gYW4gSWRlbnRpdHkuCi0gICAgICAgICAgICAv
LwotICAgICAgICAgICAgLy8gQWRkaXRpb24gaXMgc3VidGxlIHdpdGggZG91Ymxlcy4gWmVybyBp
cyBub3QgdGhlIG5ldXRyYWwgdmFsdWUsIG5lZ2F0aXZlIHplcm8gaXM6Ci0gICAgICAgICAgICAv
LyAgICAwICsgMCA9IDAKLSAgICAgICAgICAgIC8vICAgIDAgKyAtMCA9IDAKLSAgICAgICAgICAg
IC8vICAgIC0wICsgMCA9IDAKLSAgICAgICAgICAgIC8vICAgIC0wICsgLTAgPSAtMAotICAgICAg
ICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludCgwKSB8fCBtX3ZhbHVlLT5jaGlsZCgx
KS0+aXNOZWdhdGl2ZVplcm8oKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRp
dHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+aXNJbnRlZ2VyKCkpIHsKLSAgICAgICAg
ICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIgQWRkKHZhbHVlLCBOZWcob3RoZXJWYWx1ZSkp
Ci0gICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTdWIodmFsdWUsIG90aGVyVmFsdWUpCi0g
ICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5vcGNvZGUoKSA9PSBOZWcpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KFN1YiwgbV92YWx1ZS0+
b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCkp
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIgQWRkKE5lZyh2YWx1ZSksIG90aGVyVmFs
dWUpCi0gICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTdWIob3RoZXJWYWx1ZSwgdmFsdWUp
Ci0gICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBOZWcp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KFN1YiwgbV92YWx1
ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDEpLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQo
MCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIgQWRkKFN1YigwLCB2YWx1ZSksIC0x
KQotICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0WG9yKHZhbHVlLCAtMSkKLSAgICAg
ICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFN1YgotICAgICAg
ICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoLTEpCi0gICAgICAgICAg
ICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKS0+aXNJbnQoMCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KEJpdFhvciwgbV92YWx1ZS0+
b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSwgbV92YWx1ZS0+Y2hpbGQoMSkp
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoaGFuZGxlTXVsRGlzdHJpYnV0aXZpdHkoKSkKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KKyAgICAgICAgY2FzZSBDaGVja0FkZDoKKyAg
ICAgICAgICAgIG1fY2hhbmdlZCB8PSBwZWVwaG9sZS50cnlTaW1wbGlmeUNoZWNrQWRkKG1fdmFs
dWUtPmFzPENoZWNrVmFsdWU+KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2Fz
ZSBTdWI6Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFN1Yihjb25zdGFudDEsIGNvbnN0YW50
MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxIC0gY29uc3RhbnQyCi0gICAg
ICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50U3ViID0gbV92YWx1ZS0+Y2hpbGQoMCktPnN1YkNv
bnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSB7Ci0gICAgICAgICAgICAgICAgcmVw
bGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudFN1Yik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5pc0ludGVnZXIoKSkgewot
ICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU3ViKHZhbHVlLCBjb25zdGFudCkKLSAgICAg
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEFkZCh2YWx1ZSwgLWNvbnN0YW50KQotICAgICAgICAg
ICAgICAgIGlmIChWYWx1ZSogbmVnYXRlZENvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMSktPm5l
Z0NvbnN0YW50KG1fcHJvYykpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0VmFsdWUobV9pbmRleCwgbmVnYXRlZENvbnN0YW50KTsKLSAgICAgICAgICAgICAgICAg
ICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgQWRkLCBt
X3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCksIG5lZ2F0ZWRDb25zdGFudCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFN1YigwLCB2YWx1ZSkKLSAgICAg
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IE5lZyh2YWx1ZSkKLSAgICAgICAgICAgICAgICBpZiAo
bV92YWx1ZS0+Y2hpbGQoMCktPmlzSW50KDApKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxh
Y2VXaXRoTmV3PFZhbHVlPihOZWcsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgx
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU3ViKHZhbHVlLCB2YWx1ZSkKLSAgICAgICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IDAKLSAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQo
MCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdp
dGhOZXdWYWx1ZShtX3Byb2MuYWRkSW50Q29uc3RhbnQobV92YWx1ZSwgMCkpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAv
LyBUdXJuIHRoaXM6IFN1Yih2YWx1ZSwgTmVnKG90aGVyVmFsdWUpKQotICAgICAgICAgICAgICAg
IC8vIEludG8gdGhpczogQWRkKHZhbHVlLCBvdGhlclZhbHVlKQotICAgICAgICAgICAgICAgIGlm
IChtX3ZhbHVlLT5jaGlsZCgxKS0+b3Bjb2RlKCkgPT0gTmVnKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPihBZGQsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVl
LT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGhh
bmRsZU11bERpc3RyaWJ1dGl2aXR5KCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotCisgICAgICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgICAgICAgICBtX2NoYW5n
ZWQgfD0gcGVlcGhvbGUudHJ5U2ltcGxpZnlDaGVja1N1YihtX3ZhbHVlLT5hczxDaGVja1ZhbHVl
PigpKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTmVn
OgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBOZWcoY29uc3RhbnQpCi0gICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IC1jb25zdGFudAotICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9
IG1fdmFsdWUtPmNoaWxkKDApLT5uZWdDb25zdGFudChtX3Byb2MpKSB7Ci0gICAgICAgICAgICAg
ICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczog
TmVnKE5lZyh2YWx1ZSkpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHZhbHVlCi0gICAgICAg
ICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IE5lZykgewotICAgICAgICAg
ICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg
KG1fdmFsdWUtPmlzSW50ZWdlcigpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBJ
bnRlZ2VyIE5lZyhTdWIodmFsdWUsIG90aGVyVmFsdWUpKQotICAgICAgICAgICAgICAgIC8vIElu
dG8gdGhpczogU3ViKG90aGVyVmFsdWUsIHZhbHVlKQotICAgICAgICAgICAgICAgIGlmIChtX3Zh
bHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU3ViKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
cGxhY2VXaXRoTmV3PFZhbHVlPihTdWIsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGls
ZCgwKS0+Y2hpbGQoMSksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8v
IFR1cm4gdGhpczogSW50ZWdlciBOZWcoTXVsKHZhbHVlLCBjKSkKLSAgICAgICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IE11bCh2YWx1ZSwgLWMpLCBhcyBsb25nIGFzIC1jIGRvZXMgbm90IG92ZXJm
bG93Ci0gICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBN
dWwgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5oYXNJbnQoKSkgewotICAgICAgICAg
ICAgICAgICAgICBpbnQ2NF90IGZhY3RvciA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+
YXNJbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQz
MiAmJiBmYWN0b3IgIT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdGYWN0b3IgPSBtX2luc2VydGlvblNldC5p
bnNlcnQ8Q29uc3QzMlZhbHVlPihtX2luZGV4LCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkt
Pm9yaWdpbigpLCAtZmFjdG9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRo
TmV3PFZhbHVlPihNdWwsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hp
bGQoMCksIG5ld0ZhY3Rvcik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV92YWx1
ZS0+dHlwZSgpID09IEludDY0ICYmIGZhY3RvciAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0
X3Q+OjptaW4oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG5ld0ZhY3RvciA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDY0VmFsdWU+KG1faW5kZXgsIG1fdmFsdWUtPmNo
aWxkKDApLT5jaGlsZCgxKS0+b3JpZ2luKCksIC1mYWN0b3IpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KE11bCwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFs
dWUtPmNoaWxkKDApLT5jaGlsZCgwKSwgbmV3RmFjdG9yKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotCisgICAgICAgIGNhc2UgQ2hl
Y2tNdWw6CisgICAgICAgICAgICBtX2NoYW5nZWQgfD0gcGVlcGhvbGUudHJ5U2ltcGxpZnlDaGVj
a011bChtX3ZhbHVlLT5hczxDaGVja1ZhbHVlPigpKTsKICAgICAgICAgICAgIGJyZWFrOwogCi0g
ICAgICAgIGNhc2UgTXVsOgotICAgICAgICAgICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOwotCi0g
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE11bChjb25zdGFudDEsIGNvbnN0YW50MikKLSAgICAg
ICAgICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxICogY29uc3RhbnQyCi0gICAgICAgICAgICBp
ZiAoVmFsdWUqIHZhbHVlID0gbV92YWx1ZS0+Y2hpbGQoMCktPm11bENvbnN0YW50KG1fcHJvYywg
bV92YWx1ZS0+Y2hpbGQoMSkpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1
ZSh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKLSAgICAgICAgICAgICAg
ICBpbnQ2NF90IGZhY3RvciA9IG1fdmFsdWUtPmNoaWxkKDEpLT5hc0ludCgpOwotCi0gICAgICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBNdWwodmFsdWUsIDApCi0gICAgICAgICAgICAgICAgLy8g
SW50byB0aGlzOiAwCi0gICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IGRvIHRo
aXMgZm9yIGRvdWJsZXMgYmVjYXVzZSB0aGF0J3Mgd3JvbmcuIEZvciBleGFtcGxlLCAtMSAqIDAK
LSAgICAgICAgICAgICAgICAvLyBhbmQgMSAqIDAgeWllbGQgZGlmZmVyZW50IHJlc3VsdHMuCi0g
ICAgICAgICAgICAgICAgaWYgKCFmYWN0b3IpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFj
ZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczog
TXVsKHZhbHVlLCAxKQotICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogdmFsdWUKLSAgICAg
ICAgICAgICAgICBpZiAoZmFjdG9yID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFj
ZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczog
TXVsKHZhbHVlLCAtMSkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IE5lZyh2YWx1ZSkK
LSAgICAgICAgICAgICAgICBpZiAoZmFjdG9yID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJlcGxhY2VXaXRoTmV3PFZhbHVlPihOZWcsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5j
aGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2YWx1
ZSwgY29uc3RhbnQpCi0gICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTaGwodmFsdWUsIGxv
ZzIoY29uc3RhbnQpKQotICAgICAgICAgICAgICAgIGlmIChoYXNPbmVCaXRTZXQoZmFjdG9yKSkg
ewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaGlmdEFtb3VudCA9IFdURjo6ZmFzdExv
ZzIoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGZhY3RvcikpOwotICAgICAgICAgICAgICAgICAgICBy
ZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmFkZDxW
YWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hsLCBtX3ZhbHVlLT5vcmlnaW4o
KSwgbV92YWx1ZS0+Y2hpbGQoMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCBzaGlmdEFtb3VudCkpKTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBl
bHNlIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzRG91YmxlKCkpIHsKLSAgICAgICAgICAgICAg
ICBkb3VibGUgZmFjdG9yID0gbV92YWx1ZS0+Y2hpbGQoMSktPmFzRG91YmxlKCk7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2YWx1ZSwgMSkKLSAgICAgICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IHZhbHVlCi0gICAgICAgICAgICAgICAgaWYgKGZhY3RvciA9PSAxKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkp
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5pc0ludGVnZXIoKSkgewotICAgICAg
ICAgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBNdWwodmFsdWUsIE5lZyhvdGhlclZhbHVl
KSkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IE5lZyhNdWwodmFsdWUsIG90aGVyVmFs
dWUpKQotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+b3Bjb2RlKCkgPT0g
TmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdNdWwgPSBtX2luc2VydGlvblNl
dC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIE11bCwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUt
PmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAg
ICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oTmVnLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbmV3TXVs
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBNdWwoTmVnKHZhbHVlKSwgb3RoZXJWYWx1
ZSkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IE5lZyhNdWwodmFsdWUsIHZhbHVlMikp
Ci0gICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBOZWcp
IHsKLSAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG5ld011bCA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydDxWYWx1ZT4obV9pbmRleCwgTXVsLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hp
bGQoMCktPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgICAg
IHJlcGxhY2VXaXRoTmV3PFZhbHVlPihOZWcsIG1fdmFsdWUtPm9yaWdpbigpLCBuZXdNdWwpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRGl2OgotICAgICAgICAg
ICAgLy8gVHVybiB0aGlzOiBEaXYoY29uc3RhbnQxLCBjb25zdGFudDIpCi0gICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IGNvbnN0YW50MSAvIGNvbnN0YW50MgotICAgICAgICAgICAgLy8gTm90ZSB0
aGF0IHRoaXMgdXNlcyBEaXY8Q2hpbGw+IHNlbWFudGljcy4gVGhhdCdzIGZpbmUsIGJlY2F1c2Ug
dGhlIHJ1bGVzIGZvciBEaXYKLSAgICAgICAgICAgIC8vIGFyZSBzdHJpY3RseSB3ZWFrZXI6IGl0
IGhhcyBjb3JuZXIgY2FzZXMgd2hlcmUgaXQncyBhbGxvd2VkIHRvIGRvIGFueXRoaW5nIGl0Ci0g
ICAgICAgICAgICAvLyBsaWtlcy4KLSAgICAgICAgICAgIGlmIChyZXBsYWNlV2l0aE5ld1ZhbHVl
KG1fdmFsdWUtPmNoaWxkKDApLT5kaXZDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEp
KSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5j
aGlsZCgxKS0+aGFzSW50KCkpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPmNo
aWxkKDEpLT5hc0ludCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAtMToKLSAgICAgICAgICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBEaXYodmFsdWUsIC0xKQotICAgICAgICAgICAgICAgICAg
ICAvLyBJbnRvIHRoaXM6IE5lZyh2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdp
dGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcHJvYy5hZGQ8VmFsdWU+KE5l
ZywgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAg
ICAgICAvLyBUdXJuIHRoaXM6IERpdih2YWx1ZSwgMCkKLSAgICAgICAgICAgICAgICAgICAgLy8g
SW50byB0aGlzOiAwCi0gICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBkbyB0aGlzIGJlY2F1
c2UgaXQncyBwcmVjaXNlbHkgY29ycmVjdCBmb3IgQ2hpbGxEaXYgYW5kIGZvciBEaXYgd2UKLSAg
ICAgICAgICAgICAgICAgICAgLy8gYXJlIGFsbG93ZWQgdG8gZG8gd2hhdGV2ZXIgd2Ugd2FudC4K
LSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgx
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSAx
OgotICAgICAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IERpdih2YWx1ZSwgMSkKLSAgICAg
ICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZQotICAgICAgICAgICAgICAgICAgICBy
ZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAg
ICAvLyBQZXJmb3JtIHN1cGVyIGNvbXByZWhlbnNpdmUgc3RyZW5ndGggcmVkdWN0aW9uIG9mIGRp
dmlzaW9uLiBDdXJyZW50bHkgd2UKLSAgICAgICAgICAgICAgICAgICAgLy8gb25seSBkbyB0aGlz
IGZvciAzMi1iaXQgZGl2aXNpb25zLCBzaW5jZSB3ZSBuZWVkIGEgaGlnaCBtdWx0aXBseQotICAg
ICAgICAgICAgICAgICAgICAvLyBvcGVyYXRpb24uIFdlIGVtdWxhdGUgaXQgdXNpbmcgNjQtYml0
IG11bHRpcGx5LiBXZSBjYW4ndCBlbXVsYXRlIDY0LWJpdAotICAgICAgICAgICAgICAgICAgICAv
LyBoaWdoIG11bHRpcGx5IHdpdGggYSAxMjgtYml0IG11bHRpcGx5IGJlY2F1c2Ugd2UgZG9uJ3Qg
aGF2ZSBhIDEyOC1iaXQKLSAgICAgICAgICAgICAgICAgICAgLy8gbXVsdGlwbHkuIFdlIGNvdWxk
IGRvIGl0IHdpdGggYSBwYXRjaHBvaW50IGlmIHdlIGNhcmVkIGJhZGx5IGVub3VnaC4KLQotICAg
ICAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+dHlwZSgpICE9IEludDMyKQotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBpZiAobV9wcm9jLm9wdExldmVsKCkgPCAyKQotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBkaXZpc29yID0gbV92YWx1
ZS0+Y2hpbGQoMSktPmFzSW50MzIoKTsKLSAgICAgICAgICAgICAgICAgICAgRGl2aXNpb25NYWdp
YzxpbnQzMl90PiBtYWdpYyA9IGNvbXB1dGVEaXZpc2lvbk1hZ2ljKGRpdmlzb3IpOwotCi0gICAg
ICAgICAgICAgICAgICAgIC8vIFBlcmZvcm0gdGhlICJoaWdoIiBtdWx0aXBsaWNhdGlvbi4gV2Ug
ZG8gaXQganVzdCB0byBnZXQgdGhlIGhpZ2ggYml0cy4KLSAgICAgICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyBzb3J0IG9mIGxpa2UgbXVsdGlwbHlpbmcgYnkgdGhlIHJlY2lwcm9jYWwsIGp1c3Qg
bW9yZSBnbmFybHkuIEl0J3MKLSAgICAgICAgICAgICAgICAgICAgLy8gZnJvbSBIYWNrZXIncyBE
ZWxpZ2h0IGFuZCBJIGRvbid0IGNsYWltIHRvIHVuZGVyc3RhbmQgaXQuCi0gICAgICAgICAgICAg
ICAgICAgIFZhbHVlKiBtYWdpY1F1b3RpZW50ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVl
PigKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIFRydW5jLCBtX3ZhbHVlLT5vcmln
aW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1
ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgWlNociwgbV92YWx1ZS0+
b3JpZ2luKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0PFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgTXVs
LCBtX3ZhbHVlLT5vcmlnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1faW5kZXgsIFNFeHQzMiwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxk
KDApKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0PENvbnN0NjRWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbWFnaWMubWFnaWNNdWx0aXBsaWVyKSksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1
ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIG1fdmFsdWUtPm9y
aWdpbigpLCAzMikpKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoZGl2aXNvciA+IDAgJiYg
bWFnaWMubWFnaWNNdWx0aXBsaWVyIDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWFn
aWNRdW90aWVudCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pbmRleCwgQWRkLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbWFnaWNRdW90
aWVudCwgbV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChkaXZpc29yIDwgMCAmJiBtYWdpYy5tYWdpY011bHRpcGxpZXIgPiAw
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYWdpY1F1b3RpZW50ID0gbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBT
dWIsIG1fdmFsdWUtPm9yaWdpbigpLCBtYWdpY1F1b3RpZW50LCBtX3ZhbHVlLT5jaGlsZCgwKSk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1hZ2ljLnNo
aWZ0ID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWFnaWNRdW90aWVudCA9IG1faW5z
ZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bmRleCwgU1NociwgbV92YWx1ZS0+b3JpZ2luKCksIG1hZ2ljUXVvdGllbnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4oCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigp
LCBtYWdpYy5zaGlmdCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5k
ZXgsIEFkZCwgbV92YWx1ZS0+b3JpZ2luKCksIG1hZ2ljUXVvdGllbnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgWlNociwgbV92YWx1ZS0+b3JpZ2luKCksIG1h
Z2ljUXVvdGllbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydDxDb25zdDMyVmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIDMxKSkpKTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBVRGl2Ogot
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBVRGl2KGNvbnN0YW50MSwgY29uc3RhbnQyKQotICAg
ICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgLyBjb25zdGFudDIKLSAgICAgICAgICAg
IGlmIChyZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNoaWxkKDApLT51RGl2Q29uc3RhbnQo
bV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpKSB7Ci0gICAgICAgICAg
ICAgICAgc3dpdGNoIChtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQoKSkgewotICAgICAgICAgICAg
ICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBVRGl2KHZhbHVl
LCAwKQotICAgICAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IDAKLSAgICAgICAgICAgICAg
ICAgICAgLy8gV2UgY2FuIGRvIHdoYXRldmVyIHdlIHdhbnQgaGVyZSBzbyB3ZSBtaWdodCBhcyB3
ZWxsIGRvIHRoZSBjaGlsbCB0aGluZywKLSAgICAgICAgICAgICAgICAgICAgLy8gaW4gY2FzZSB3
ZSBhZGQgY2hpbGwgdmVyc2lvbnMgb2YgVURpdiBpbiB0aGUgZnV0dXJlLgotICAgICAgICAgICAg
ICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIFR1cm4gdGhpczogVURpdih2YWx1ZSwgMSkKLSAgICAgICAgICAgICAgICAg
ICAgLy8gSW50byB0aGlzOiB2YWx1ZQotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElk
ZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBkbyBjb21wcmVoZW5zaXZlIHN0cmVuZ3RoIHJlZHVjdGlvbiBmb3IgdW5zaWduZWQg
bnVtYmVycy4gTGlrZWx5LAotICAgICAgICAgICAgICAgICAgICAvLyB3ZSB3aWxsIGp1c3Qgd2Fu
dCBjb3B5IHdoYXQgbGx2bSBkb2VzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY0ODA5Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgTW9k
OgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBNb2QoY29uc3RhbnQxLCBjb25zdGFudDIpCi0g
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50MSAvIGNvbnN0YW50MgotICAgICAgICAg
ICAgLy8gTm90ZSB0aGF0IHRoaXMgdXNlcyBNb2Q8Q2hpbGw+IHNlbWFudGljcy4KLSAgICAgICAg
ICAgIGlmIChyZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNoaWxkKDApLT5tb2RDb25zdGFu
dChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgICAgIC8vIE1vZHVsbyBieSBjb25zdGFudCBpcyBtb3JlIGVmZmljaWVudCBpZiB3
ZSB0dXJuIGl0IGludG8gRGl2LCBhbmQgdGhlbiBsZXQgRGl2IGdldAotICAgICAgICAgICAgLy8g
b3B0aW1pemVkLgotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKSkg
ewotICAgICAgICAgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50KCkpIHsK
LSAgICAgICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhp
czogTW9kKHZhbHVlLCAwKQotICAgICAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IDAKLSAg
ICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBjb3JyZWN0IGFjY29yZGluZyB0byBDaGlsbE1v
ZCBzZW1hbnRpY3MuCi0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92
YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3Byb2Mub3B0TGV2ZWwo
KSA8IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTW9kKE4sIEQpCi0gICAgICAg
ICAgICAgICAgICAgIC8vIEludG8gdGhpczogU3ViKE4sIE11bChEaXYoTiwgRCksIEQpKQotICAg
ICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgc3Bl
ZWQtdXAgYmVjYXVzZSB3ZSB1c2Ugb3VyIGV4aXN0aW5nIERpdiBvcHRpbWl6YXRpb25zLgotICAg
ICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICAvLyBIZXJlJ3MgYW4gZWFz
aWVyIHdheSB0byBsb29rIGF0IGl0OgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgTiAlIEQg
PSBOIC0gTiAvIEQgKiBECi0gICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAg
ICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IHdvcmsgZm9yIEQgPSAwIGFuZCBDaGlsbE1v
ZC4gVGhlIGV4cGVjdGVkIHJlc3VsdCBpcyAwLgotICAgICAgICAgICAgICAgICAgICAvLyBUaGF0
J3Mgd2h5IHdlIGhhdmUgYSBzcGVjaWFsLWNhc2UgYWJvdmUuCi0gICAgICAgICAgICAgICAgICAg
IC8vICAgICBYICUgMCA9IFggLSBYIC8gMCAqIDAgPSBYICAgICAoc2hvdWxkIGJlIDApCi0gICAg
ICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgZG9lcyB3b3Jr
IGZvciB0aGUgRCA9IC0xIHNwZWNpYWwgY2FzZS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAg
IC0yXjMxICUgLTEgPSAtMl4zMSAtIC0yXjMxIC8gLTEgKiAtMQotICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgICA9IC0yXjMxIC0gLTJeMzEgKiAtMQotICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgICA9IC0yXjMxIC0gLTJeMzEKLSAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgICAgPSAwCi0KLSAgICAgICAgICAgICAgICAgICAgS2luZCBkaXZL
aW5kID0gRGl2OwotICAgICAgICAgICAgICAgICAgICBkaXZLaW5kLnNldElzQ2hpbGwobV92YWx1
ZS0+aXNDaGlsbCgpKTsKLQotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5
KAotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBTdWIsIG1fdmFsdWUtPm9yaWdp
bigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIE11bCwgbV92YWx1ZS0+b3Jp
Z2luKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4
LCBkaXZLaW5kLCBtX3ZhbHVlLT5vcmlnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpKSkpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgVU1vZDoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogVU1vZChjb25zdGFu
dDEsIGNvbnN0YW50MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxIC8gY29u
c3RhbnQyCi0gICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNoaWxkKDAp
LT51TW9kQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpOwotICAgICAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBkbyB3aGF0IHdlIGRvIGZvciBNb2Qgc2luY2UgdGhlIHNhbWUg
cHJpbmNpcGxlIGFwcGxpZXMgaGVyZS4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ4MDkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgQml0QW5kOgotICAgICAgICAgICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOwotCi0g
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZChjb25zdGFudDEsIGNvbnN0YW50MikKLSAg
ICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxICYgY29uc3RhbnQyCi0gICAgICAgICAg
ICBpZiAoVmFsdWUqIGNvbnN0YW50Qml0QW5kID0gbV92YWx1ZS0+Y2hpbGQoMCktPmJpdEFuZENv
bnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSB7Ci0gICAgICAgICAgICAgICAgcmVw
bGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudEJpdEFuZCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKEJpdEFu
ZCh2YWx1ZSwgY29uc3RhbnQxKSwgY29uc3RhbnQyKQotICAgICAgICAgICAgLy8gSW50byB0aGlz
OiBCaXRBbmQodmFsdWUsIGNvbnN0YW50MSAmIGNvbnN0YW50MikuCi0gICAgICAgICAgICBpZiAo
bV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdEFuZCkgewotICAgICAgICAgICAgICAg
IFZhbHVlKiBuZXdDb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDEpLT5iaXRBbmRDb25zdGFudCht
X3Byb2MsIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgaWYg
KG5ld0NvbnN0YW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dFZhbHVlKG1faW5kZXgsIG5ld0NvbnN0YW50KTsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1
ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gbmV3Q29uc3RhbnQ7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZCh2YWx1ZVgsIHZhbHVlWCkKLSAgICAg
ICAgICAgIC8vIEludG8gdGhpczogdmFsdWVYLgotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNo
aWxkKDApID09IG1fdmFsdWUtPmNoaWxkKDEpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdp
dGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKHZhbHVlLCB6
ZXJvLWNvbnN0YW50KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiB6ZXJvLWNvbnN0YW50Lgot
ICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludCgwKSkgewotICAgICAgICAg
ICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6
IEJpdEFuZCh2YWx1ZSwgYWxsLW9uZXMpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHZhbHVl
LgotICAgICAgICAgICAgaWYgKChtX3ZhbHVlLT50eXBlKCkgPT0gSW50NjQgJiYgbV92YWx1ZS0+
Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSkpCi0g
ICAgICAgICAgICAgICAgfHwgKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQzMiAmJiBtX3ZhbHVlLT5j
aGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkpIHsK
LSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBCaXRBbmQoNjQtYml0IHZhbHVlLCAzMiBvbmVzKQotICAgICAgICAgICAgLy8g
SW50byB0aGlzOiBaRXh0MzIoVHJ1bmMoNjQtYml0IHZhbHVlKSkKLSAgICAgICAgICAgIGlmICht
X3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQ2NCgweGZmZmZmZmZmbGx1KSkgewotICAgICAgICAgICAg
ICAgIFZhbHVlKiBuZXdWYWx1ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAg
ICAgICAgICAgICAgICAgIG1faW5kZXgsIFpFeHQzMiwgbV92YWx1ZS0+b3JpZ2luKCksCi0gICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgVHJ1
bmMsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSkpOwotICAgICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobmV3VmFsdWUpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZChTRXh0
OCh2YWx1ZSksIG1hc2spIHdoZXJlIChtYXNrICYgMHhmZmZmZmYwMCkgPT0gMAotICAgICAgICAg
ICAgLy8gSW50byB0aGlzOiBCaXRBbmQodmFsdWUsIG1hc2spCi0gICAgICAgICAgICBpZiAobV92
YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFNFeHQ4ICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5o
YXNJbnQzMigpCi0gICAgICAgICAgICAgICAgJiYgIShtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQz
MigpICYgMHhmZmZmZmYwMCkpIHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9
IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICBtX2NoYW5nZWQg
PSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZChTRXh0MTYodmFsdWUpLCBtYXNrKSB3aGVyZSAobWFz
ayAmIDB4ZmZmZjAwMDApID09IDAKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0QW5kKHZh
bHVlLCBtYXNrKQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9
PSBTRXh0MTYgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludDMyKCkKLSAgICAgICAgICAgICAg
ICAmJiAhKG1fdmFsdWUtPmNoaWxkKDEpLT5hc0ludDMyKCkgJiAweGZmZmYwMDAwKSkgewotICAg
ICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxk
KDApOwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5k
KFNFeHQzMih2YWx1ZSksIG1hc2spIHdoZXJlIChtYXNrICYgMHhmZmZmZmZmZjAwMDAwMDAwKSA9
PSAwCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdEFuZChaRXh0MzIodmFsdWUpLCBtYXNr
KQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBTRXh0MzIg
JiYgbV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludDMyKCkKLSAgICAgICAgICAgICAgICAmJiAhKG1f
dmFsdWUtPmNoaWxkKDEpLT5hc0ludDMyKCkgJiAweGZmZmZmZmZmMDAwMDAwMDBsbHUpKSB7Ci0g
ICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8
VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBaRXh0MzIsIG1fdmFsdWUtPm9y
aWdpbigpLAotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCks
IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgbV9jaGFuZ2Vk
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoT3AodmFsdWUsIGNvbnN0YW50MSksIGNvbnN0YW50
MikKLSAgICAgICAgICAgIC8vICAgICB3aGVyZSAhKGNvbnN0YW50MSAmIGNvbnN0YW50MikKLSAg
ICAgICAgICAgIC8vICAgICAgIGFuZCBPcCBpcyBCaXRPciBvciBCaXRYb3IKLSAgICAgICAgICAg
IC8vIGludG8gdGhpczogQml0QW5kKHZhbHVlLCBjb25zdGFudDIpCi0gICAgICAgICAgICBpZiAo
bV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpKSB7Ci0gICAgICAgICAgICAgICAgaW50NjRfdCBj
b25zdGFudDIgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQoKTsKLSAgICAgICAgICAgICAgICBz
d2l0Y2ggKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSkgewotICAgICAgICAgICAgICAgIGNh
c2UgQml0T3I6Ci0gICAgICAgICAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhhc0ludCgpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAmJiAhKG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+YXNJbnQoKSAm
IGNvbnN0YW50MikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDAp
ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgICAgICAgICAg
bV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBCaXRBbmQoQml0WG9yKHgxLCBhbGxPbmVzKSwgQml0WG9yKHgyLCBhbGxP
bmVzKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCaXRYb3IoQml0T3IoeDEsIHgyKSwgYWxs
T25lcykKLSAgICAgICAgICAgIC8vIEJ5IGFwcGx5aW5nIERlIE1vcmdhbiBsYXdzCi0gICAgICAg
ICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdFhvcgotICAgICAgICAg
ICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5vcGNvZGUoKSA9PSBCaXRYb3IKLSAgICAgICAg
ICAgICAgICAmJiAoKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQ2NAotICAgICAgICAgICAgICAgICAg
ICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBtX3Zh
bHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0
X3Q+OjptYXgoKSkpCi0gICAgICAgICAgICAgICAgICAgIHx8IChtX3ZhbHVlLT50eXBlKCkgPT0g
SW50MzIKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGls
ZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpLT5pc0ludChz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpKSkpIHsKLSAgICAgICAgICAgICAg
ICBWYWx1ZSogYml0T3IgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIEJp
dE9yLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLCBtX3Zh
bHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3
PFZhbHVlPihCaXRYb3IsIG1fdmFsdWUtPm9yaWdpbigpLCBiaXRPciwgbV92YWx1ZS0+Y2hpbGQo
MSktPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoQml0WG9yKHgsIGFsbE9uZXMpLCBjKQot
ICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCaXRYb3IoQml0T3IoeCwgfmMpLCBhbGxPbmVzKQot
ICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHZhcmlhdGlvbiBvbiB0aGUgcHJldmlvdXMgb3B0aW1p
emF0aW9uLCB0cmVhdGluZyBjIGFzIGlmIGl0IHdlcmUgQml0WG9yKH5jLCBhbGxPbmVzKQotICAg
ICAgICAgICAgLy8gSXQgZG9lcyBub3QgcmVkdWNlIHRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucywg
YnV0IHByb3ZpZGVzIHNvbWUgbm9ybWFsaXphdGlvbiAod2UgdHJ5IHRvIGdldCBCaXRYb3IgYnkg
YWxsT25lcyBhdCB0aGUgb3V0ZXJtb3N0IHBvaW50KSwgYW5kIHNvbWUgY2hhbmNlIHRvIGZsb2F0
IFhvcnMgdG8gYSBwbGFjZSB3aGVyZSB0aGV5IG1pZ2h0IGdldCBlbGltaW5hdGVkLgotICAgICAg
ICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXRYb3IKLSAgICAgICAg
ICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkKLSAgICAgICAgICAgICAgICAm
JiAoKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQ2NAotICAgICAgICAgICAgICAgICAgICAgICAgJiYg
bV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQ2NF90Pjo6bWF4KCkpKQotICAgICAgICAgICAgICAgICAgICB8fCAobV92YWx1ZS0+dHlwZSgp
ID09IEludDMyCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkpKSkg
ewotICAgICAgICAgICAgICAgIFZhbHVlKiBiaXRPciA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxW
YWx1ZT4obV9pbmRleCwgQml0T3IsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgw
KS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpLT5iaXRYb3JDb25zdGFudChtX3Byb2MsIG1f
dmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSkpOwotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRo
TmV3PFZhbHVlPihCaXRYb3IsIG1fdmFsdWUtPm9yaWdpbigpLCBiaXRPciwgbV92YWx1ZS0+Y2hp
bGQoMCktPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBCaXRPcjoKLSAgICAgICAgICAg
IGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRP
cihjb25zdGFudDEsIGNvbnN0YW50MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3Rh
bnQxIHwgY29uc3RhbnQyCi0gICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50Qml0T3IgPSBt
X3ZhbHVlLT5jaGlsZCgwKS0+Yml0T3JDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEp
KSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnRCaXRPcik7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8v
IFR1cm4gdGhpczogQml0T3IoQml0T3IodmFsdWUsIGNvbnN0YW50MSksIGNvbnN0YW50MikKLSAg
ICAgICAgICAgIC8vIEludG8gdGhpczogQml0T3IodmFsdWUsIGNvbnN0YW50MSAmIGNvbnN0YW50
MikuCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdE9y
KSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIG5ld0NvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQo
MSktPmJpdE9yQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkpOwot
ICAgICAgICAgICAgICAgIGlmIChuZXdDb25zdGFudCkgewotICAgICAgICAgICAgICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnRWYWx1ZShtX2luZGV4LCBuZXdDb25zdGFudCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxk
KDApOwotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgxKSA9IG5ld0NvbnN0YW50
OwotICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRPcih2YWx1
ZVgsIHZhbHVlWCkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogdmFsdWVYLgotICAgICAgICAg
ICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApID09IG1fdmFsdWUtPmNoaWxkKDEpKSB7Ci0gICAgICAg
ICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhp
czogQml0T3IodmFsdWUsIHplcm8tY29uc3RhbnQpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6
IHZhbHVlLgotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludCgwKSkgewot
ICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBU
dXJuIHRoaXM6IEJpdE9yKHZhbHVlLCBhbGwtb25lcykKLSAgICAgICAgICAgIC8vIEludG8gdGhp
czogYWxsLW9uZXMuCi0gICAgICAgICAgICBpZiAoKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQ2NCAm
JiBtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46
Om1heCgpKSkKLSAgICAgICAgICAgICAgICB8fCAobV92YWx1ZS0+dHlwZSgpID09IEludDMyICYm
IG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6
bWF4KCkpKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+
Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdE9yKEJpdFhvcih4MSwgYWxsT25lcyksIEJpdFhvcih4
MiwgYWxsT25lcykKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0WG9yKEJpdEFuZCh4MSwg
eDIpLCBhbGxPbmVzKQotICAgICAgICAgICAgLy8gQnkgYXBwbHlpbmcgRGUgTW9yZ2FuIGxhd3MK
LSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0WG9yCi0g
ICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPm9wY29kZSgpID09IEJpdFhvcgot
ICAgICAgICAgICAgICAgICYmICgobV92YWx1ZS0+dHlwZSgpID09IEludDY0Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0
czx1aW50NjRfdD46Om1heCgpKSkKLSAgICAgICAgICAgICAgICAgICAgfHwgKG1fdmFsdWUtPnR5
cGUoKSA9PSBJbnQzMgotICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQo
MCktPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSkt
PmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkpKSkgewotICAgICAg
ICAgICAgICAgIFZhbHVlKiBiaXRBbmQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1f
aW5kZXgsIEJpdEFuZCwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGls
ZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICByZXBs
YWNlV2l0aE5ldzxWYWx1ZT4oQml0WG9yLCBtX3ZhbHVlLT5vcmlnaW4oKSwgYml0QW5kLCBtX3Zh
bHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdE9yKEJpdFhvcih4LCBhbGxP
bmVzKSwgYykKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0WG9yKEJpdEFuZCh4LCB+Yyks
IGFsbE9uZXMpCi0gICAgICAgICAgICAvLyBUaGlzIGlzIGEgdmFyaWF0aW9uIG9uIHRoZSBwcmV2
aW91cyBvcHRpbWl6YXRpb24sIHRyZWF0aW5nIGMgYXMgaWYgaXQgd2VyZSBCaXRYb3IofmMsIGFs
bE9uZXMpCi0gICAgICAgICAgICAvLyBJdCBkb2VzIG5vdCByZWR1Y2UgdGhlIG51bWJlciBvZiBv
cGVyYXRpb25zLCBidXQgcHJvdmlkZXMgc29tZSBub3JtYWxpemF0aW9uICh3ZSB0cnkgdG8gZ2V0
IEJpdFhvciBieSBhbGxPbmVzIGF0IHRoZSBvdXRlcm1vc3QgcG9pbnQpLCBhbmQgc29tZSBjaGFu
Y2UgdG8gZmxvYXQgWG9ycyB0byBhIHBsYWNlIHdoZXJlIHRoZXkgbWlnaHQgZ2V0IGVsaW1pbmF0
ZWQuCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdFhv
cgotICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKQotICAgICAg
ICAgICAgICAgICYmICgobV92YWx1ZS0+dHlwZSgpID09IEludDY0Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDY0X3Q+OjptYXgoKSkpCi0gICAgICAgICAgICAgICAgICAgIHx8IChtX3Zh
bHVlLT50eXBlKCkgPT0gSW50MzIKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUt
PmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46
Om1heCgpKSkpKSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIGJpdEFuZCA9IG1faW5zZXJ0aW9u
U2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgQml0QW5kLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92
YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKS0+Yml0WG9yQ29uc3Rh
bnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkpKTsKLSAgICAgICAgICAgICAg
ICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oQml0WG9yLCBtX3ZhbHVlLT5vcmlnaW4oKSwgYml0QW5k
LCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaGFuZGxlQml0QW5kRGlzdHJpYnV0aXZp
dHkoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7Ci0K
LSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0WG9yKGNvbnN0YW50MSwgY29uc3RhbnQyKQot
ICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgXiBjb25zdGFudDIKLSAgICAgICAg
ICAgIGlmIChWYWx1ZSogY29uc3RhbnRCaXRYb3IgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Yml0WG9y
Q29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpIHsKLSAgICAgICAgICAgICAgICBy
ZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0YW50Qml0WG9yKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IoQml0
WG9yKHZhbHVlLCBjb25zdGFudDEpLCBjb25zdGFudDIpCi0gICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IEJpdFhvcih2YWx1ZSwgY29uc3RhbnQxIF4gY29uc3RhbnQyKS4KLSAgICAgICAgICAgIGlm
IChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0WG9yKSB7Ci0gICAgICAgICAgICAg
ICAgVmFsdWUqIG5ld0NvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMSktPmJpdFhvckNvbnN0YW50
KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICBp
ZiAobmV3Q29uc3RhbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0VmFsdWUobV9pbmRleCwgbmV3Q29uc3RhbnQpOwotICAgICAgICAgICAgICAgICAgICBtX3Zh
bHVlLT5jaGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAg
ICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMSkgPSBuZXdDb25zdGFudDsKLSAgICAgICAgICAgICAg
ICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0WG9yKGNvbXBhcmUsIDEpCi0gICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IGludmVydGVkQ29tcGFyZQotICAgICAgICAgICAgaWYgKG1fdmFs
dWUtPmNoaWxkKDEpLT5pc0ludDMyKDEpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFZhbHVlKiBp
bnZlcnRlZENvbXBhcmUgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+aW52ZXJ0ZWRDb21wYXJlKG1fcHJv
YykpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShpbnZlcnRlZENv
bXBhcmUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0WG9yKHZhbHVlWCwg
dmFsdWVYKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiB6ZXJvLWNvbnN0YW50LgotICAgICAg
ICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApID09IG1fdmFsdWUtPmNoaWxkKDEpKSB7Ci0gICAg
ICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShtX3Byb2MuYWRkSW50Q29uc3RhbnQobV92
YWx1ZSwgMCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdFhvcih2YWx1ZSwgemVyby1jb25zdGFudCkKLSAgICAg
ICAgICAgIC8vIEludG8gdGhpczogdmFsdWUuCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hp
bGQoMSktPmlzSW50KDApKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eSht
X3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaGFuZGxlQml0QW5kRGlzdHJpYnV0
aXZpdHkoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgY2FzZSBTaGw6Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNobChjb25zdGFu
dDEsIGNvbnN0YW50MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxIDw8IGNv
bnN0YW50MgotICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fdmFsdWUtPmNoaWxk
KDApLT5zaGxDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkgewotICAgICAgICAg
ICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNobCg8U3xa
PlNocihAeCwgQGNvbnN0KSwgQGNvbnN0KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCaXRB
bmQoQHgsIC0oMTw8QGNvbnN0KSkKLSAgICAgICAgICAgIGlmICgobV92YWx1ZS0+Y2hpbGQoMCkt
Pm9wY29kZSgpID09IFNTaHIgfHwgbV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFpTaHIp
Ci0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5oYXNJbnQo
KQotICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKQotICAgICAg
ICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+YXNJbnQoKSA9PSBtX3Zh
bHVlLT5jaGlsZCgxKS0+YXNJbnQoKSkgewotICAgICAgICAgICAgICAgIGludCBzaGlmdEFtb3Vu
dCA9IG1fdmFsdWUtPmNoaWxkKDEpLT5hc0ludCgpICYgKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQz
MiA/IDMxIDogNjMpOwotICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdDb25zdCA9IG1fcHJvYy5h
ZGRJbnRDb25zdGFudChtX3ZhbHVlLCAtIHN0YXRpY19jYXN0PGludDY0X3Q+KDF1bGwgPDwgc2hp
ZnRBbW91bnQpKTsKLSAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRWYWx1ZSht
X2luZGV4LCBuZXdDb25zdCk7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+
KEJpdEFuZCwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSwg
bmV3Q29uc3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBoYW5kbGVTaGlmdEFtb3VudCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgY2FzZSBTU2hyOgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTU2hyKGNvbnN0YW50MSwg
Y29uc3RhbnQyKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgPj4gY29uc3Rh
bnQyCi0gICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCkt
PnNTaHJDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkgewotICAgICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmhh
c0ludDMyKCkKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkg
PT0gU2hsCi0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5o
YXNJbnQzMigpCi0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50MzIo
KSA9PSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmFzSW50MzIoKSkgewotICAgICAgICAg
ICAgICAgIHN3aXRjaCAobV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50MzIoKSkgewotICAgICAgICAg
ICAgICAgIGNhc2UgMTY6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT50eXBlKCkg
PT0gSW50MzIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU1NocihT
aGwodmFsdWUsIDE2KSwgMTYpCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6
IFNFeHQxNih2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFs
dWUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmFkZDxWYWx1ZT4oCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFeHQxNiwgbV92YWx1ZS0+b3JpZ2luKCksIG1f
dmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSAyNDoKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQzMikgewotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTU2hyKFNobCh2YWx1ZSwgMjQpLCAyNCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogU0V4dDgodmFsdWUpCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fcHJvYy5hZGQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTRXh0OCwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgw
KSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgICAgICAgICAgY2FzZSAzMjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fdmFs
dWUtPnR5cGUoKSA9PSBJbnQ2NCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHVybiB0
aGlzOiBTU2hyKFNobCh2YWx1ZSwgMzIpLCAzMikKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEludG8gdGhpczogU0V4dDMyKFRydW5jKHZhbHVlKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wcm9j
LmFkZDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFeHQzMiwgbV92
YWx1ZS0+b3JpZ2luKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2luZGV4LCBUcnVuYywgbV92YWx1ZS0+b3JpZ2luKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkpKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogQWRkIGNhc2VzIGZvciA0OCBhbmQgNTYsIGJ1dCB0aGF0IHdvdWxkIHRy
YW5zbGF0ZSB0byBTRXh0MzIoU0V4dDgpIG9yCi0gICAgICAgICAgICAgICAgLy8gU0V4dDMyKFNF
eHQxNiksIHdoaWNoIHdlIGRvbid0IGN1cnJlbnRseSBsb3dlciBlZmZpY2llbnRseS4KLQotICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5vcGNvZGUoKSAhPSBT
U2hyKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaGFuZGxlU2hpZnRBbW91bnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IGNhc2UgWlNocjoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogWlNocihjb25zdGFudDEsIGNv
bnN0YW50MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogKHVuc2lnbmVkKWNvbnN0YW50MSA+
PiBjb25zdGFudDIKLSAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3ZhbHVlLT5j
aGlsZCgwKS0+elNockNvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSB7Ci0gICAg
ICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGhhbmRsZVNoaWZ0QW1vdW50
KCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFJvdFI6Ci0gICAgICAgICAg
ICAvLyBUdXJuIHRoaXM6IFJvdFIoY29uc3RhbnQxLCBjb25zdGFudDIpCi0gICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IChjb25zdGFudDEgPj4gY29uc3RhbnQyKSB8IChjb25zdGFudDEgPDwgc2l6
ZW9mKGNvbnN0YW50MSkgKiA4IC0gY29uc3RhbnQyKQotICAgICAgICAgICAgaWYgKFZhbHVlKiBj
b25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDApLT5yb3RSQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVl
LT5jaGlsZCgxKSkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0
YW50KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaGFuZGxlU2hpZnRBbW91bnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNh
c2UgUm90TDoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogUm90TChjb25zdGFudDEsIGNvbnN0
YW50MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogKGNvbnN0YW50MSA8PCBjb25zdGFudDIp
IHwgKGNvbnN0YW50MSA+PiBzaXplb2YoY29uc3RhbnQxKSAqIDggLSBjb25zdGFudDIpCi0gICAg
ICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPnJvdExDb25z
dGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkgewotICAgICAgICAgICAgICAgIHJlcGxh
Y2VXaXRoTmV3VmFsdWUoY29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBoYW5kbGVTaGlmdEFtb3VudCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBBYnM6Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFi
cyhjb25zdGFudCkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogZmFiczx2YWx1ZS0+dHlwZSgp
Pihjb25zdGFudCkKLSAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3ZhbHVlLT5j
aGlsZCgwKS0+YWJzQ29uc3RhbnQobV9wcm9jKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VX
aXRoTmV3VmFsdWUoY29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFicyhBYnModmFsdWUpKQotICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiBBYnModmFsdWUpCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+
Y2hpbGQoMCktPm9wY29kZSgpID09IEFicykgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRo
SWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBB
YnMoTmVnKHZhbHVlKSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQWJzKHZhbHVlKQotICAg
ICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBOZWcpIHsKLSAgICAg
ICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgw
KTsKLSAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFicyhCaXR3
aXNlQ2FzdCh2YWx1ZSkpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdHdpc2VDYXN0KEFu
ZCh2YWx1ZSwgbWFzay10b3AtYml0KSkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgw
KS0+b3Bjb2RlKCkgPT0gQml0d2lzZUNhc3QpIHsKLSAgICAgICAgICAgICAgICBWYWx1ZSogbWFz
azsKLSAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+dHlwZSgpID09IERvdWJsZSkKLSAgICAg
ICAgICAgICAgICAgICAgbWFzayA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDY0VmFsdWU+
KG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCB+KDFsbCA8PCA2MykpOwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbWFzayA9IG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dDxDb25zdDMyVmFsdWU+KG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCB+KDFsIDw8IDMxKSk7
Ci0KLSAgICAgICAgICAgICAgICBWYWx1ZSogYml0QW5kID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0
PFZhbHVlPihtX2luZGV4LCBCaXRBbmQsIG1fdmFsdWUtPm9yaWdpbigpLAotICAgICAgICAgICAg
ICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCksCi0gICAgICAgICAgICAgICAgICAg
IG1hc2spOwotICAgICAgICAgICAgICAgIFZhbHVlKiBjYXN0ID0gbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0PFZhbHVlPihtX2luZGV4LCBCaXR3aXNlQ2FzdCwgbV92YWx1ZS0+b3JpZ2luKCksIGJpdEFu
ZCk7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShjYXN0KTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgQ2VpbDoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQ2VpbChjb25zdGFudCkK
LSAgICAgICAgICAgIC8vIEludG8gdGhpczogY2VpbDx2YWx1ZS0+dHlwZSgpPihjb25zdGFudCkK
LSAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2Vp
bENvbnN0YW50KG1fcHJvYykpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVl
KGNvbnN0YW50KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBDZWlsKHJvdW5kZWRWYWx1ZSkKLSAgICAgICAgICAgIC8v
IEludG8gdGhpczogcm91bmRlZFZhbHVlCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQo
MCktPmlzUm91bmRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eSht
X3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEZsb29yOgotICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBGbG9vcihjb25zdGFudCkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczog
Zmxvb3I8dmFsdWUtPnR5cGUoKT4oY29uc3RhbnQpCi0gICAgICAgICAgICBpZiAoVmFsdWUqIGNv
bnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmZsb29yQ29uc3RhbnQobV9wcm9jKSkgewotICAg
ICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnQpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEZs
b29yKHJvdW5kZWRWYWx1ZSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogcm91bmRlZFZhbHVl
Ci0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmlzUm91bmRlZCgpKSB7Ci0gICAg
ICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICBjYXNlIFNxcnQ6Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNxcnQoY29uc3Rh
bnQpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHNxcnQ8dmFsdWUtPnR5cGUoKT4oY29uc3Rh
bnQpCi0gICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCkt
PnNxcnRDb25zdGFudChtX3Byb2MpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdW
YWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEJpdHdpc2VDYXN0OgotICAgICAgICAg
ICAgLy8gVHVybiB0aGlzOiBCaXR3aXNlQ2FzdChjb25zdGFudCkKLSAgICAgICAgICAgIC8vIElu
dG8gdGhpczogYml0d2lzZV9jYXN0PHZhbHVlLT50eXBlKCk+KGNvbnN0YW50KQotICAgICAgICAg
ICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDApLT5iaXR3aXNlQ2FzdENv
bnN0YW50KG1fcHJvYykpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNv
bnN0YW50KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgLy8gVHVybiB0aGlzOiBCaXR3aXNlQ2FzdChCaXR3aXNlQ2FzdCh2YWx1ZSkpCi0gICAg
ICAgICAgICAvLyBJbnRvIHRoaXM6IHZhbHVlCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hp
bGQoMCktPm9wY29kZSgpID09IEJpdHdpc2VDYXN0KSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFj
ZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Y2FzZSBTRXh0ODoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDgoY29uc3RhbnQpCi0g
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHN0YXRpY19jYXN0PGludDhfdD4oY29uc3RhbnQpCi0g
ICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmhhc0ludDMyKCkpIHsKLSAgICAgICAg
ICAgICAgICBpbnQzMl90IHJlc3VsdCA9IHN0YXRpY19jYXN0PGludDhfdD4obV92YWx1ZS0+Y2hp
bGQoMCktPmFzSW50MzIoKSk7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSht
X3Byb2MuYWRkSW50Q29uc3RhbnQobV92YWx1ZSwgcmVzdWx0KSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDgo
U0V4dDgodmFsdWUpKQotICAgICAgICAgICAgLy8gICBvciB0aGlzOiBTRXh0OChTRXh0MTYodmFs
dWUpKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0OCh2YWx1ZSkKLSAgICAgICAgICAg
IGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU0V4dDggfHwgbV92YWx1ZS0+Y2hp
bGQoMCktPm9wY29kZSgpID09IFNFeHQxNikgewotICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNo
aWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIG1f
Y2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtX3ZhbHVl
LT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0QW5kICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGls
ZCgxKS0+aGFzSW50MzIoKSkgewotICAgICAgICAgICAgICAgIFZhbHVlKiBpbnB1dCA9IG1fdmFs
dWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICBpbnQzMl90IG1hc2sgPSBt
X3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmFzSW50MzIoKTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNFeHQ4KEJpdEFuZChpbnB1dCwgbWFzaykp
IHdoZXJlIChtYXNrICYgMHhmZikgPT0gMHhmZgotICAgICAgICAgICAgICAgIC8vIEludG8gdGhp
czogU0V4dDgoaW5wdXQpCi0gICAgICAgICAgICAgICAgaWYgKChtYXNrICYgMHhmZikgPT0gMHhm
ZikgewotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9IGlucHV0OwotICAg
ICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgLy8gVHVybiB0aGlzOiBTRXh0OChCaXRBbmQoaW5wdXQsIG1hc2spKSB3aGVyZSAobWFzayAm
IDB4ODApID09IDAKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdEFuZChpbnB1dCwg
Y29uc3QgJiAweDdmKQotICAgICAgICAgICAgICAgIGlmICghKG1hc2sgJiAweDgwKSkgewotICAg
ICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9wcm9jLmFkZDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0
QW5kLCBtX3ZhbHVlLT5vcmlnaW4oKSwgaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4oCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCBtYXNrICYgMHg3Zikp
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fcHJvYy5oYXNRdWlya3Mo
KSkgewotICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDgoQXRvbWljWGNoZ19fXykK
LSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEF0b21pY1hjaGdfX18KLSAgICAgICAgICAg
ICAgICBpZiAoaXNBdG9taWNYY2hnKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSkKLSAgICAg
ICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmFzPEF0b21pY1ZhbHVlPigpLT5h
Y2Nlc3NXaWR0aCgpID09IFdpZHRoOCkgewotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0
aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgY2FzZSBTRXh0MTY6Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNFeHQxNihj
b25zdGFudCkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogc3RhdGljX2Nhc3Q8aW50MTZfdD4o
Y29uc3RhbnQpCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmhhc0ludDMyKCkp
IHsKLSAgICAgICAgICAgICAgICBpbnQzMl90IHJlc3VsdCA9IHN0YXRpY19jYXN0PGludDE2X3Q+
KG1fdmFsdWUtPmNoaWxkKDApLT5hc0ludDMyKCkpOwotICAgICAgICAgICAgICAgIHJlcGxhY2VX
aXRoTmV3VmFsdWUobV9wcm9jLmFkZEludENvbnN0YW50KG1fdmFsdWUsIHJlc3VsdCkpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJu
IHRoaXM6IFNFeHQxNihTRXh0MTYodmFsdWUpKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBT
RXh0MTYodmFsdWUpCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgp
ID09IFNFeHQxNikgewotICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1
ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDE2KFNFeHQ4
KHZhbHVlKSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogU0V4dDgodmFsdWUpCi0gICAgICAg
ICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFNFeHQ4KSB7Ci0gICAgICAg
ICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtX3ZhbHVl
LT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0QW5kICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGls
ZCgxKS0+aGFzSW50MzIoKSkgewotICAgICAgICAgICAgICAgIFZhbHVlKiBpbnB1dCA9IG1fdmFs
dWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICBpbnQzMl90IG1hc2sgPSBt
X3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmFzSW50MzIoKTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNFeHQxNihCaXRBbmQoaW5wdXQsIG1hc2sp
KSB3aGVyZSAobWFzayAmIDB4ZmZmZikgPT0gMHhmZmZmCi0gICAgICAgICAgICAgICAgLy8gSW50
byB0aGlzOiBTRXh0MTYoaW5wdXQpCi0gICAgICAgICAgICAgICAgaWYgKChtYXNrICYgMHhmZmZm
KSA9PSAweGZmZmYpIHsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBp
bnB1dDsKLSAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDE2KEJpdEFuZChpbnB1dCwgbWFzaykpIHdo
ZXJlIChtYXNrICYgMHg4MDAwKSA9PSAwCi0gICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBC
aXRBbmQoaW5wdXQsIGNvbnN0ICYgMHg3ZmZmKQotICAgICAgICAgICAgICAgIGlmICghKG1hc2sg
JiAweDgwMDApKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0g
ICAgICAgICAgICAgICAgICAgICAgICBtX3Byb2MuYWRkPFZhbHVlPigKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBCaXRBbmQsIG1fdmFsdWUtPm9yaWdpbigpLCBpbnB1dCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPigK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgbV92YWx1ZS0+b3JpZ2lu
KCksIG1hc2sgJiAweDdmZmYpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFtX3Byb2MuaGFz
UXVpcmtzKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNFeHQxNihBdG9taWNY
Y2hnX19fKQotICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogQXRvbWljWGNoZ19fXwotICAg
ICAgICAgICAgICAgIGlmIChpc0F0b21pY1hjaGcobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgp
KQotICAgICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+YXM8QXRvbWljVmFs
dWU+KCktPmFjY2Vzc1dpZHRoKCkgPT0gV2lkdGgxNikgewotICAgICAgICAgICAgICAgICAgICBy
ZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTRXh0MzI6Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6
IFNFeHQzMihjb25zdGFudCkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogc3RhdGljX2Nhc3Q8
aW50NjRfdD4oY29uc3RhbnQpCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmhh
c0ludDMyKCkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fcHJvYy5h
ZGRJbnRDb25zdGFudChtX3ZhbHVlLCBtX3ZhbHVlLT5jaGlsZCgwKS0+YXNJbnQzMigpKSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogU0V4dDMyKEJpdEFuZChpbnB1dCwgbWFzaykpIHdoZXJlIChtYXNrICYgMHg4MDAw
MDAwMCkgPT0gMAotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBaRXh0MzIoQml0QW5kKGlucHV0
LCBtYXNrKSkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0g
Qml0QW5kICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aGFzSW50MzIoKQotICAgICAg
ICAgICAgICAgICYmICEobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5hc0ludDMyKCkgJiAw
eDgwMDAwMDAwKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAg
ICAgICAgICAgICAgICAgIG1fcHJvYy5hZGQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAg
ICAgWkV4dDMyLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCkpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgWkV4dDMyOgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBaRXh0MzIoY29u
c3RhbnQpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHN0YXRpY19jYXN0PHVpbnQ2NF90Pihz
dGF0aWNfY2FzdDx1aW50MzJfdD4oY29uc3RhbnQpKQotICAgICAgICAgICAgaWYgKG1fdmFsdWUt
PmNoaWxkKDApLT5oYXNJbnQzMigpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdW
YWx1ZSgKLSAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmFkZEludENvbnN0YW50KAotICAgICAg
ICAgICAgICAgICAgICAgICAgbV92YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDx1aW50MzJfdD4obV92YWx1ZS0+Y2hpbGQoMCkt
PmFzSW50MzIoKSkpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFRydW5jOgotICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBUcnVuYyhjb25zdGFudCkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oY29uc3RhbnQpCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hp
bGQoMCktPmhhc0ludDY0KCkgfHwgbV92YWx1ZS0+Y2hpbGQoMCktPmhhc0RvdWJsZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICAgICAg
bV9wcm9jLmFkZEludENvbnN0YW50KG1fdmFsdWUsIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fdmFs
dWUtPmNoaWxkKDApLT5hc0ludDY0KCkpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogVHJ1bmMoU0V4dDMyKHZhbHVl
KSkgb3IgVHJ1bmMoWkV4dDMyKHZhbHVlKSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogdmFs
dWUKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU0V4dDMy
IHx8IG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBaRXh0MzIpIHsKLSAgICAgICAgICAg
ICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogVHJ1bmMoT3AodmFsdWUsIGNvbnN0YW50KSkKLSAgICAgICAgICAgIC8vICAgICB3
aGVyZSAhKGNvbnN0YW50ICYgMHhmZmZmZmZmZikKLSAgICAgICAgICAgIC8vICAgICAgIGFuZCBP
cCBpcyBBZGQsIFN1YiwgQml0T3IsIG9yIEJpdFhvcgotICAgICAgICAgICAgLy8gaW50byB0aGlz
OiBUcnVuYyh2YWx1ZSkKLSAgICAgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+Y2hpbGQoMCktPm9w
Y29kZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFkZDoKLSAgICAgICAgICAgIGNhc2UgU3ViOgot
ICAgICAgICAgICAgY2FzZSBCaXRPcjoKLSAgICAgICAgICAgIGNhc2UgQml0WG9yOgotICAgICAg
ICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhhc0ludDY0KCkKLSAg
ICAgICAgICAgICAgICAgICAgJiYgIShtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmFzSW50
NjQoKSAmIDB4ZmZmZmZmZmZsbCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hp
bGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgICAg
IG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIElUb0Q6Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IElUb0QoY29u
c3RhbnQpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IENvbnN0RG91YmxlKGNvbnN0YW50KQot
ICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDApLT5pVG9E
Q29uc3RhbnQobV9wcm9jKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUo
Y29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJVG9GOgotICAgICAgICAgICAgLy8gVHVybiB0
aGlzOiBJVG9GKGNvbnN0YW50KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBDb25zdEZsb2F0
KGNvbnN0YW50KQotICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fdmFsdWUtPmNo
aWxkKDApLT5pVG9GQ29uc3RhbnQobV9wcm9jKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VX
aXRoTmV3VmFsdWUoY29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBGbG9hdFRvRG91YmxlOgot
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBGbG9hdFRvRG91YmxlKGNvbnN0YW50KQotICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiBDb25zdERvdWJsZShjb25zdGFudCkKLSAgICAgICAgICAgIGlm
IChWYWx1ZSogY29uc3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+ZmxvYXRUb0RvdWJsZUNvbnN0
YW50KG1fcHJvYykpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0
YW50KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIGNhc2UgRG91YmxlVG9GbG9hdDoKLSAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogRG91YmxlVG9GbG9hdChGbG9hdFRvRG91YmxlKHZhbHVlKSkKLSAgICAgICAgICAg
IC8vIEludG8gdGhpczogdmFsdWUKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+
b3Bjb2RlKCkgPT0gRmxvYXRUb0RvdWJsZSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRo
SWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBEb3VibGVU
b0Zsb2F0KGNvbnN0YW50KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBDb25zdEZsb2F0KGNv
bnN0YW50KQotICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fdmFsdWUtPmNoaWxk
KDApLT5kb3VibGVUb0Zsb2F0Q29uc3RhbnQobV9wcm9jKSkgewotICAgICAgICAgICAgICAgIHJl
cGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTZWxlY3Q6Ci0g
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNlbGVjdChjb25zdGFudCwgYSwgYikKLSAgICAgICAg
ICAgIC8vIEludG8gdGhpczogY29uc3RhbnQgPyBhIDogYgotICAgICAgICAgICAgaWYgKG1fdmFs
dWUtPmNoaWxkKDApLT5oYXNJbnQzMigpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJ
ZGVudGl0eSgKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCktPmFzSW50MzIo
KSA/IG1fdmFsdWUtPmNoaWxkKDEpIDogbV92YWx1ZS0+Y2hpbGQoMikpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNl
bGVjdChFcXVhbCh4LCAwKSwgYSwgYikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogU2VsZWN0
KHgsIGIsIGEpCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09
IEVxdWFsICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQoMCkpIHsKLSAgICAg
ICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgw
KTsKLSAgICAgICAgICAgICAgICBzdGQ6OnN3YXAobV92YWx1ZS0+Y2hpbGQoMSksIG1fdmFsdWUt
PmNoaWxkKDIpKTsKLSAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6
IFNlbGVjdChCaXRYb3IoYm9vbCwgMSksIGEsIGIpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6
IFNlbGVjdChib29sLCBiLCBhKQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5v
cGNvZGUoKSA9PSBCaXRYb3IKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMSktPmlzSW50MzIoMSkKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgw
KS0+Y2hpbGQoMCktPnJldHVybnNCb29sKCkpIHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5j
aGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICBz
dGQ6OnN3YXAobV92YWx1ZS0+Y2hpbGQoMSksIG1fdmFsdWUtPmNoaWxkKDIpKTsKLSAgICAgICAg
ICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNlbGVjdChCaXRBbmQoYm9vbCwg
eHl6MSksIGEsIGIpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNlbGVjdChib29sLCBhLCBi
KQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXRBbmQK
LSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhhc0ludCgp
Ci0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5hc0ludCgp
ICYgMQotICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKS0+cmV0
dXJuc0Jvb2woKSkgewotICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1
ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8v
IFR1cm4gdGhpczogU2VsZWN0KHN0dWZmLCB4LCB4KQotICAgICAgICAgICAgLy8gSW50byB0aGlz
OiB4Ci0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSkgPT0gbV92YWx1ZS0+Y2hpbGQo
MikpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxk
KDEpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIGNhc2UgTG9hZDhaOgotICAgICAgICBjYXNlIExvYWQ4UzoKLSAg
ICAgICAgY2FzZSBMb2FkMTZaOgotICAgICAgICBjYXNlIExvYWQxNlM6Ci0gICAgICAgIGNhc2Ug
TG9hZDoKLSAgICAgICAgY2FzZSBTdG9yZTg6Ci0gICAgICAgIGNhc2UgU3RvcmUxNjoKLSAgICAg
ICAgY2FzZSBTdG9yZTogewotICAgICAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBtX3ZhbHVlLT5s
YXN0Q2hpbGQoKTsKLSAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBtX3ZhbHVlLT5h
czxNZW1vcnlWYWx1ZT4oKTsKLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBMb2FkKEFkZChh
ZGRyZXNzLCBvZmZzZXQxKSwgb2Zmc2V0ID0gb2Zmc2V0MikKLSAgICAgICAgICAgIC8vIEludG8g
dGhpczogTG9hZChhZGRyZXNzLCBvZmZzZXQgPSBvZmZzZXQxICsgb2Zmc2V0MikKLSAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICAvLyBBbHNvIHR1cm5zIHRoaXM6IFN0b3JlKHZhbHVlLCBBZGQo
YWRkcmVzcywgb2Zmc2V0MSksIG9mZnNldCA9IG9mZnNldDIpCi0gICAgICAgICAgICAvLyBJbnRv
IHRoaXM6IFN0b3JlKHZhbHVlLCBhZGRyZXNzLCBvZmZzZXQgPSBvZmZzZXQxICsgb2Zmc2V0MikK
LSAgICAgICAgICAgIGlmIChhZGRyZXNzLT5vcGNvZGUoKSA9PSBBZGQgJiYgYWRkcmVzcy0+Y2hp
bGQoMSktPmhhc0ludFB0cigpKSB7Ci0gICAgICAgICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0g
YWRkcmVzcy0+Y2hpbGQoMSktPmFzSW50UHRyKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdW1P
dmVyZmxvd3M8aW50cHRyX3Q+KG9mZnNldCwgbWVtb3J5LT5vZmZzZXQoKSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgb2Zmc2V0ICs9IG1lbW9yeS0+b2Zmc2V0KCk7Ci0gICAgICAgICAgICAgICAg
ICAgIFZhbHVlOjpPZmZzZXRUeXBlIHNtYWxsT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8VmFsdWU6Ok9m
ZnNldFR5cGU+KG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzbWFsbE9mZnNldCA9
PSBvZmZzZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgPSBhZGRyZXNzLT5j
aGlsZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeS0+bGFzdENoaWxkKCkgPSBh
ZGRyZXNzOwotICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5LT5zZXRPZmZzZXQoc21hbGxP
ZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBMb2FkKGNvbnN0YW50MSwgb2Zmc2V0ID0gY29uc3RhbnQy
KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBMb2FkKGNvbnN0YW50MSArIGNvbnN0YW50MikK
LSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBUaGlzIGlzIGEgZnVuIGNhbm9uaWNhbGl6
YXRpb24uIEl0IHB1cmVseSByZWdyZXNzZXMgbmFpdmVseSBnZW5lcmF0ZWQgY29kZS4gV2UgcmVs
eQotICAgICAgICAgICAgLy8gb24gY29uc3RhbnQgbWF0ZXJpYWxpemF0aW9uIHRvIGJlIHNtYXJ0
IGVub3VnaCB0byBtYXRlcmlhbGl6ZSB0aGlzIGNvbnN0YW50IHRoZSBzbWFydAotICAgICAgICAg
ICAgLy8gd2F5LiBXZSB3YW50IHRoaXMgY2Fub25pY2FsaXphdGlvbiBiZWNhdXNlIHdlIHdhbnQg
dG8ga25vdyBpZiB0d28gbWVtb3J5IGFjY2Vzc2VzIHNlZQotICAgICAgICAgICAgLy8gdGhlIHNh
bWUgYWRkcmVzcy4KLSAgICAgICAgICAgIGlmIChtZW1vcnktPm9mZnNldCgpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKFZhbHVlKiBuZXdBZGRyZXNzID0gYWRkcmVzcy0+YWRkQ29uc3RhbnQobV9w
cm9jLCBtZW1vcnktPm9mZnNldCgpKSkgewotICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnRWYWx1ZShtX2luZGV4LCBuZXdBZGRyZXNzKTsKLSAgICAgICAgICAgICAgICAg
ICAgYWRkcmVzcyA9IG5ld0FkZHJlc3M7Ci0gICAgICAgICAgICAgICAgICAgIG1lbW9yeS0+bGFz
dENoaWxkKCkgPSBuZXdBZGRyZXNzOwotICAgICAgICAgICAgICAgICAgICBtZW1vcnktPnNldE9m
ZnNldCgwKTsKLSAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBDQ2FsbDogewotICAgICAgICAgICAgLy8gVHVy
biB0aGlzOiBDYWxsKGZtb2QsIGNvbnN0YW50MSwgY29uc3RhbnQyKQotICAgICAgICAgICAgLy8g
SW50byB0aGlzOiBmY2FsbC1jb25zdGFudChjb25zdGFudDEsIGNvbnN0YW50MikKLSAgICAgICAg
ICAgIGF1dG8qIGZtb2REb3VibGUgPSB0YWdDRnVuY3Rpb25QdHI8ZG91YmxlICgqKShkb3VibGUs
IGRvdWJsZSk+KGZtb2QsIEIzQ0NhbGxQdHJUYWcpOwotICAgICAgICAgICAgaWYgKG1fdmFsdWUt
PnR5cGUoKSA9PSBEb3VibGUKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5udW1DaGlsZHJl
bigpID09IDMKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+aXNJbnRQdHIo
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZm1vZERvdWJsZSkpCi0gICAgICAgICAgICAgICAg
JiYgbV92YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSA9PSBEb3VibGUKLSAgICAgICAgICAgICAgICAm
JiBtX3ZhbHVlLT5jaGlsZCgyKS0+dHlwZSgpID09IERvdWJsZSkgewotICAgICAgICAgICAgICAg
IHJlcGxhY2VXaXRoTmV3VmFsdWUobV92YWx1ZS0+Y2hpbGQoMSktPm1vZENvbnN0YW50KG1fcHJv
YywgbV92YWx1ZS0+Y2hpbGQoMikpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRXF1YWw6Ci0gICAgICAgICAgICBoYW5kbGVDb21t
dXRhdGl2aXR5KCk7Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRXF1YWwoYm9vbCwgMCkK
LSAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0WG9yKGJvb2wsIDEpCi0gICAgICAgICAgICBp
ZiAobV92YWx1ZS0+Y2hpbGQoMCktPnJldHVybnNCb29sKCkgJiYgbV92YWx1ZS0+Y2hpbGQoMSkt
PmlzSW50MzIoMCkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oCi0g
ICAgICAgICAgICAgICAgICAgIEJpdFhvciwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNo
aWxkKDApLAotICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3Qz
MlZhbHVlPihtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4oKSwgMSkpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBUdXJu
IHRoaXMgRXF1YWwoYm9vbCwgMSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogYm9vbAotICAg
ICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5yZXR1cm5zQm9vbCgpICYmIG1fdmFsdWUt
PmNoaWxkKDEpLT5pc0ludDMyKDEpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVu
dGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRXF1YWwoY29uc3QxLCBjb25zdDIp
Ci0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0MSA9PSBjb25zdDIKLSAgICAgICAgICAg
IHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xDb25z
dGFudCgKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+b3JpZ2luKCksCi0gICAgICAgICAg
ICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLT5lcXVhbENvbnN0YW50KG1fdmFsdWUtPmNoaWxk
KDEpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBO
b3RFcXVhbDoKLSAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKLQotICAgICAgICAg
ICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5yZXR1cm5zQm9vbCgpKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gVHVybiB0aGlzOiBOb3RFcXVhbChib29sLCAwKQotICAgICAgICAgICAgICAgIC8vIElu
dG8gdGhpczogYm9vbAotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJ
bnQzMigwKSkgewotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFs
dWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTm90
RXF1YWwoYm9vbCwgMSkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEVxdWFsKGJvb2ws
IDApCi0gICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludDMyKDEpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPigKLSAgICAgICAgICAg
ICAgICAgICAgICAgIEVxdWFsLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRJbnRDb25zdGFu
dChtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4oKSwgSW50MzIsIDApKTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAvLyBUdXJuIHRoaXM6IE5vdEVxdWFsKGNvbnN0MSwgY29uc3QyKQotICAgICAgICAgICAg
Ly8gSW50byB0aGlzOiBjb25zdDEgIT0gY29uc3QyCi0gICAgICAgICAgICByZXBsYWNlV2l0aE5l
d1ZhbHVlKAotICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQoCi0gICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWUtPm9yaWdpbigpLAotICAgICAgICAgICAgICAgICAgICBtX3Zh
bHVlLT5jaGlsZCgwKS0+bm90RXF1YWxDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgTGVzc1RoYW46Ci0gICAgICAgIGNhc2Ug
R3JlYXRlclRoYW46Ci0gICAgICAgIGNhc2UgTGVzc0VxdWFsOgotICAgICAgICBjYXNlIEdyZWF0
ZXJFcXVhbDoKLSAgICAgICAgY2FzZSBBYm92ZToKLSAgICAgICAgY2FzZSBCZWxvdzoKLSAgICAg
ICAgY2FzZSBBYm92ZUVxdWFsOgotICAgICAgICBjYXNlIEJlbG93RXF1YWw6IHsKLSAgICAgICAg
ICAgIENhbm9uaWNhbGl6ZWRDb21wYXJpc29uIGNvbXBhcmlzb24gPSBjYW5vbmljYWxpemVDb21w
YXJpc29uKG1fdmFsdWUpOwotICAgICAgICAgICAgVHJpU3RhdGUgcmVzdWx0ID0gTWl4ZWRUcmlT
dGF0ZTsKLSAgICAgICAgICAgIHN3aXRjaCAoY29tcGFyaXNvbi5vcGNvZGUpIHsKLSAgICAgICAg
ICAgIGNhc2UgTGVzc1RoYW46Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcGFyaXNvbi5v
cGVyYW5kc1sxXS0+Z3JlYXRlclRoYW5Db25zdGFudChjb21wYXJpc29uLm9wZXJhbmRzWzBdKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgR3JlYXRlclRoYW46Ci0g
ICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcGFyaXNvbi5vcGVyYW5kc1sxXS0+bGVzc1RoYW5D
b25zdGFudChjb21wYXJpc29uLm9wZXJhbmRzWzBdKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgTGVzc0VxdWFsOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNv
bXBhcmlzb24ub3BlcmFuZHNbMV0tPmdyZWF0ZXJFcXVhbENvbnN0YW50KGNvbXBhcmlzb24ub3Bl
cmFuZHNbMF0pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBHcmVh
dGVyRXF1YWw6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcGFyaXNvbi5vcGVyYW5kc1sx
XS0+bGVzc0VxdWFsQ29uc3RhbnQoY29tcGFyaXNvbi5vcGVyYW5kc1swXSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFib3ZlOgotICAgICAgICAgICAgICAgIHJl
c3VsdCA9IGNvbXBhcmlzb24ub3BlcmFuZHNbMV0tPmJlbG93Q29uc3RhbnQoY29tcGFyaXNvbi5v
cGVyYW5kc1swXSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEJl
bG93OgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXBhcmlzb24ub3BlcmFuZHNbMV0tPmFi
b3ZlQ29uc3RhbnQoY29tcGFyaXNvbi5vcGVyYW5kc1swXSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIEFib3ZlRXF1YWw6Ci0gICAgICAgICAgICAgICAgcmVzdWx0
ID0gY29tcGFyaXNvbi5vcGVyYW5kc1sxXS0+YmVsb3dFcXVhbENvbnN0YW50KGNvbXBhcmlzb24u
b3BlcmFuZHNbMF0pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBC
ZWxvd0VxdWFsOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXBhcmlzb24ub3BlcmFuZHNb
MV0tPmFib3ZlRXF1YWxDb25zdGFudChjb21wYXJpc29uLm9wZXJhbmRzWzBdKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGF1dG8qIGNvbnN0YW50ID0gbV9wcm9jLmFkZEJv
b2xDb25zdGFudChtX3ZhbHVlLT5vcmlnaW4oKSwgcmVzdWx0KSkgewotICAgICAgICAgICAgICAg
IHJlcGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNvbXBhcmlzb24ub3Bjb2RlICE9IG1fdmFs
dWUtPm9wY29kZSgpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KGNv
bXBhcmlzb24ub3Bjb2RlLCBtX3ZhbHVlLT5vcmlnaW4oKSwgY29tcGFyaXNvbi5vcGVyYW5kc1sw
XSwgY29tcGFyaXNvbi5vcGVyYW5kc1sxXSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2Ug
RXF1YWxPclVub3JkZXJlZDoKLSAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKLQot
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBFcXVhbChjb25zdDEsIGNvbnN0MikKLSAgICAgICAg
ICAgIC8vIEludG8gdGhpczogaXN1bm9yZGVyZWQoY29uc3QxLCBjb25zdDIpIHx8IGNvbnN0MSA9
PSBjb25zdDIuCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEVxdWFsKHZhbHVlLCBjb25zdF9O
YU4pCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IDEuCi0gICAgICAgICAgICByZXBsYWNlV2l0
aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQoCi0gICAg
ICAgICAgICAgICAgICAgIG1fdmFsdWUtPm9yaWdpbigpLAotICAgICAgICAgICAgICAgICAgICBt
X3ZhbHVlLT5jaGlsZCgxKS0+ZXF1YWxPclVub3JkZXJlZENvbnN0YW50KG1fdmFsdWUtPmNoaWxk
KDApKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBDaGVja0FkZDogewot
ICAgICAgICAgICAgaWYgKHJlcGxhY2VXaXRoTmV3VmFsdWUobV92YWx1ZS0+Y2hpbGQoMCktPmNo
ZWNrQWRkQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpKQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMCkpIHsKLSAg
ICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSW50UmFu
Z2UgbGVmdFJhbmdlID0gcmFuZ2VGb3IobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAg
SW50UmFuZ2UgcmlnaHRSYW5nZSA9IHJhbmdlRm9yKG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAg
ICAgICAgIGlmICghbGVmdFJhbmdlLmNvdWxkT3ZlcmZsb3dBZGQocmlnaHRSYW5nZSwgbV92YWx1
ZS0+dHlwZSgpKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAg
ICAgICAgICAgICAgICAgIG1fcHJvYy5hZGQ8VmFsdWU+KEFkZCwgbV92YWx1ZS0+b3JpZ2luKCks
IG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSkpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQot
ICAgICAgICBjYXNlIENoZWNrU3ViOiB7Ci0gICAgICAgICAgICBpZiAocmVwbGFjZVdpdGhOZXdW
YWx1ZShtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hlY2tTdWJDb25zdGFudChtX3Byb2MsIG1fdmFsdWUt
PmNoaWxkKDEpKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmICht
X3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMCkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0
aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKFZhbHVlKiBuZWdhdGVkQ29uc3RhbnQgPSBt
X3ZhbHVlLT5jaGlsZCgxKS0+Y2hlY2tOZWdDb25zdGFudChtX3Byb2MpKSB7Ci0gICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUobV9pbmRleCwgbmVnYXRlZENvbnN0YW50
KTsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5hczxDaGVja1ZhbHVlPigpLT5jb252ZXJ0VG9B
ZGQoKTsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgxKSA9IG5lZ2F0ZWRDb25zdGFu
dDsKLSAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBJbnRSYW5nZSBsZWZ0UmFuZ2UgPSBy
YW5nZUZvcihtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICBJbnRSYW5nZSByaWdodFJh
bmdlID0gcmFuZ2VGb3IobV92YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgaWYgKCFsZWZ0
UmFuZ2UuY291bGRPdmVyZmxvd1N1YihyaWdodFJhbmdlLCBtX3ZhbHVlLT50eXBlKCkpKSB7Ci0g
ICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICAgICAg
bV9wcm9jLmFkZDxWYWx1ZT4oU3ViLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQo
MCksIG1fdmFsdWUtPmNoaWxkKDEpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgQ2hl
Y2tNdWw6IHsKLSAgICAgICAgICAgIGlmIChyZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNo
aWxkKDApLT5jaGVja011bENvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSkKLSAg
ICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgaGFuZGxlQ29tbXV0YXRpdml0eSgp
OwotCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpKSB7Ci0gICAg
ICAgICAgICAgICAgYm9vbCBtb2RpZmllZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgc3dpdGNo
IChtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgMDoK
LSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShtX3Byb2MuYWRkSW50Q29u
c3RhbnQobV92YWx1ZSwgMCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHko
bV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmFzPENoZWNrVmFs
dWU+KCktPmNvbnZlcnRUb0FkZCgpOwotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGls
ZCgxKSA9IG1fdmFsdWUtPmNoaWxkKDApOwotICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQg
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgICAgICBtb2RpZmllZCA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG1v
ZGlmaWVkKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgSW50UmFuZ2UgbGVmdFJhbmdlID0gcmFuZ2VGb3IobV92YWx1ZS0+Y2hpbGQoMCkp
OwotICAgICAgICAgICAgSW50UmFuZ2UgcmlnaHRSYW5nZSA9IHJhbmdlRm9yKG1fdmFsdWUtPmNo
aWxkKDEpKTsKLSAgICAgICAgICAgIGlmICghbGVmdFJhbmdlLmNvdWxkT3ZlcmZsb3dNdWwocmln
aHRSYW5nZSwgbV92YWx1ZS0+dHlwZSgpKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRo
TmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgICAgIG1fcHJvYy5hZGQ8VmFsdWU+KE11bCwgbV92
YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSkpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQogICAgICAgICBjYXNlIENoZWNrOiB7Ci0gICAgICAgICAgICBDaGVja1Zh
bHVlKiBjaGVja1ZhbHVlID0gbV92YWx1ZS0+YXM8Q2hlY2tWYWx1ZT4oKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKGNoZWNrVmFsdWUtPmNoaWxkKDApLT5pc0xpa2VaZXJvKCkpIHsK
LSAgICAgICAgICAgICAgICBjaGVja1ZhbHVlLT5yZXBsYWNlV2l0aE5vcCgpOworICAgICAgICAg
ICAgaWYgKHBlZXBob2xlLnRyeVNpbXBsaWZ5Q2hlY2sobV92YWx1ZS0+YXM8Q2hlY2tWYWx1ZT4o
KSkpIHsKICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAg
IG1fY2hhbmdlZENGRyA9IHRydWU7IC8vIEEgYml0IGNvbnNlcnZhdGl2ZSwgYnV0IHNvdW5kLgog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAo
Y2hlY2tWYWx1ZS0+Y2hpbGQoMCktPmlzTGlrZU5vblplcm8oKSkgewotICAgICAgICAgICAgICAg
IFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9Ci0gICAgICAgICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydDxQYXRjaHBvaW50VmFsdWU+KG1faW5kZXgsIFZvaWQsIGNoZWNrVmFs
dWUtPm9yaWdpbigpKTsKLQotICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBF
ZmZlY3RzKCk7Ci0gICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkcyA9IEhl
YXBSYW5nZTo6dG9wKCk7Ci0gICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5leGl0
c1NpZGV3YXlzID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7
IGkgPCBjaGVja1ZhbHVlLT5udW1DaGlsZHJlbigpOyArK2kpCi0gICAgICAgICAgICAgICAgICAg
IHBhdGNocG9pbnQtPmFwcGVuZChjaGVja1ZhbHVlLT5jb25zdHJhaW5lZENoaWxkKGkpKTsKLQot
ICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihjaGVja1ZhbHVlLT5nZW5l
cmF0b3IoKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSByZXN0IG9mIHRoZSBi
bG9jayB3aXRoIGFuIE9vcHMuCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9p
bmRleCArIDE7IGkgPCBtX2Jsb2NrLT5zaXplKCkgLSAxOyArK2kpCi0gICAgICAgICAgICAgICAg
ICAgIG1fYmxvY2stPmF0KGkpLT5yZXBsYWNlV2l0aEJvdHRvbShtX2luc2VydGlvblNldCwgbV9p
bmRleCk7Ci0gICAgICAgICAgICAgICAgbV9ibG9jay0+bGFzdCgpLT5yZXBsYWNlV2l0aE9vcHMo
bV9ibG9jayk7Ci0gICAgICAgICAgICAgICAgbV9ibG9jay0+bGFzdCgpLT5zZXRPcmlnaW4oY2hl
Y2tWYWx1ZS0+b3JpZ2luKCkpOwotCi0gICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBvdXJzZWx2
ZXMgbGFzdC4KLSAgICAgICAgICAgICAgICBjaGVja1ZhbHVlLT5yZXBsYWNlV2l0aE5vcCgpOwot
ICAgICAgICAgICAgICAgIG1fY2hhbmdlZENGRyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjaGVja1ZhbHVlLT5jaGlsZCgw
KS0+b3Bjb2RlKCkgPT0gTm90RXF1YWwKLSAgICAgICAgICAgICAgICAmJiBjaGVja1ZhbHVlLT5j
aGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50KDApKSB7Ci0gICAgICAgICAgICAgICAgY2hlY2tWYWx1
ZS0+Y2hpbGQoMCkgPSBjaGVja1ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAg
ICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICAgICAgaWYgKG1fcHJvYy5vcHRMZXZlbCgpIDwgMikKICAgICAgICAgICAgICAgICBicmVh
azsKQEAgLTIwNTgsNiArMjQ4LDggQEAKICAgICAgICAgICAgIC8vIGJsb2Nrcy4gVGhpcyBpcyBw
cmV0dHkgbXVjaCBndWFyYW50ZWVkIHNpbmNlIG9uZSBvZiB0aG9zZSBibG9ja3Mgd2lsbCByZXBs
YWNlIGFsbAogICAgICAgICAgICAgLy8gdXNlcyBvZiB0aGUgU2VsZWN0IHdpdGggYSBjb25zdGFu
dCwgYW5kIHRoYXQgY29uc3RhbnQgd2lsbCBiZSB0cmFuc2l0aXZlbHkgdXNlZAogICAgICAgICAg
ICAgLy8gZnJvbSB0aGUgY2hlY2suCisgICAgICAgICAgICAvLyBGSVhNRTogdGhlIGNvbW1lbnQg
YWJvdmUgdGFsa3MgYWJvdXQgYSBzZWxlY3Qgd2l0aCBvbmUgY29uc3RhbnQgb3BlcmFuZCwgYnV0
IHRoZSBjb2RlIGJlbG93CisgICAgICAgICAgICAvLyBzZWFyY2hlcyBmb3Igb25lIHdpdGggY29u
c3RhbnRzIG9uIGJvdGggc2lkZXMuCiAgICAgICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
c2VsZWN0U3BlY2lhbGl6YXRpb25Cb3VuZCA9IDM7CiAgICAgICAgICAgICBWYWx1ZSogc2VsZWN0
ID0gZmluZFJlY2VudE5vZGVNYXRjaGluZygKICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGls
ZCgwKSwgc2VsZWN0U3BlY2lhbGl6YXRpb25Cb3VuZCwKQEAgLTIwNzQsNjIgKzI2NiwxMiBAQAog
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBCcmFuY2g6IHsKLSAgICAgICAgICAgIC8vIFR1cm4g
dGhpczogQnJhbmNoKE5vdEVxdWFsKHgsIDApKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBC
cmFuY2goeCkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0g
Tm90RXF1YWwgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0ludCgwKSkgewotICAg
ICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxk
KDApOworICAgICAgICAgICAgaWYgKHBlZXBob2xlLnRyeVNpbXBsaWZ5QnJhbmNoKG1fdmFsdWUp
KSB7CiAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBt
X2NoYW5nZWRDRkcgPSB0cnVlOyAvLyBBIGJpdCBjb25zZXJ2YXRpdmUsIGJ1dCBuZXZlciB1bnNv
dW5kLgogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJyYW5jaChF
cXVhbCh4LCAwKSwgdGhlbiwgZWxzZSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQnJhbmNo
KHgsIGVsc2UsIHRoZW4pCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29k
ZSgpID09IEVxdWFsICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQoMCkpIHsK
LSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5j
aGlsZCgwKTsKLSAgICAgICAgICAgICAgICBzdGQ6OnN3YXAobV9ibG9jay0+dGFrZW4oKSwgbV9i
bG9jay0+bm90VGFrZW4oKSk7Ci0gICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCcmFu
Y2goQml0WG9yKGJvb2wsIDEpLCB0aGVuLCBlbHNlKQotICAgICAgICAgICAgLy8gSW50byB0aGlz
OiBCcmFuY2goYm9vbCwgZWxzZSwgdGhlbikKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGls
ZCgwKS0+b3Bjb2RlKCkgPT0gQml0WG9yCi0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hp
bGQoMCktPmNoaWxkKDEpLT5pc0ludDMyKDEpCi0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+
Y2hpbGQoMCktPmNoaWxkKDApLT5yZXR1cm5zQm9vbCgpKSB7Ci0gICAgICAgICAgICAgICAgbV92
YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAg
ICAgICAgc3RkOjpzd2FwKG1fYmxvY2stPnRha2VuKCksIG1fYmxvY2stPm5vdFRha2VuKCkpOwot
ICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIC8vIFR1cm4gdGhpczogQnJhbmNoKEJpdEFuZChib29sLCB4eWIxKSwgdGhlbiwgZWxz
ZSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQnJhbmNoKGJvb2wsIHRoZW4sIGVsc2UpCi0g
ICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdEFuZAotICAg
ICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aGFzSW50KCkKLSAg
ICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmFzSW50KCkgJiAx
Ci0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLT5yZXR1cm5z
Qm9vbCgpKSB7Ci0gICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5j
aGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgVHJpU3RhdGUgdHJpU3RhdGUgPSBtX3ZhbHVlLT5j
aGlsZCgwKS0+YXNUcmlTdGF0ZSgpOwotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJyYW5j
aCgwLCB0aGVuLCBlbHNlKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBKdW1wKGVsc2UpCi0g
ICAgICAgICAgICBpZiAodHJpU3RhdGUgPT0gRmFsc2VUcmlTdGF0ZSkgewotICAgICAgICAgICAg
ICAgIG1fYmxvY2stPnRha2VuKCkuYmxvY2soKS0+cmVtb3ZlUHJlZGVjZXNzb3IobV9ibG9jayk7
Ci0gICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhKdW1wKG1fYmxvY2ssIG1fYmxv
Y2stPm5vdFRha2VuKCkpOwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZENGRyA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogQnJhbmNoKG5vdCAwLCB0aGVuLCBlbHNlKQotICAgICAgICAgICAgLy8gSW50byB0
aGlzOiBKdW1wKHRoZW4pCi0gICAgICAgICAgICBpZiAodHJpU3RhdGUgPT0gVHJ1ZVRyaVN0YXRl
KSB7Ci0gICAgICAgICAgICAgICAgbV9ibG9jay0+bm90VGFrZW4oKS5ibG9jaygpLT5yZW1vdmVQ
cmVkZWNlc3NvcihtX2Jsb2NrKTsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0
aEp1bXAobV9ibG9jaywgbV9ibG9jay0+dGFrZW4oKSk7Ci0gICAgICAgICAgICAgICAgbV9jaGFu
Z2VkQ0ZHID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKG1fcHJvYy5vcHRMZXZlbCgpID49IDIpIHsKKyAgICAgICAgICAgIGlm
IChtX3ZhbHVlLT5vcGNvZGUoKSA9PSBCcmFuY2ggJiYgbV9wcm9jLm9wdExldmVsKCkgPj0gMikg
ewogICAgICAgICAgICAgICAgIC8vIElmIGEgY2hlY2sgZm9yIHRoZSBzYW1lIHByb3BlcnR5IGRv
bWluYXRlcyB1cywgd2UgY2FuIGtpbGwgdGhlIGJyYW5jaC4gVGhpcyBzb3J0CiAgICAgICAgICAg
ICAgICAgLy8gb2YgbWFrZXMgc2Vuc2UgaGVyZSBiZWNhdXNlIGl0J3MgY2hlYXAsIGJ1dCBoYWNr
cyBsaWtlIHRoaXMgc2hvdyB0aGF0IHdlJ3JlIGdvaW5nCiAgICAgICAgICAgICAgICAgLy8gdG8g
bmVlZCBTQ0NQLgpAQCAtMjE0Nyw2ICsyODksMTAgQEAKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoVmFsdWUqIG5ld1ZhbHVlID0gcGVl
cGhvbGUudHJ5UmVkdWNlKG1fdmFsdWUpKSB7CisgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJ
ZGVudGl0eShuZXdWYWx1ZSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMjI5
MiwyNDYgKzQzOCw2IEBACiAgICAgICAgIHByZWRlY2Vzc29yLT51cGRhdGVQcmVkZWNlc3NvcnNB
ZnRlcigpOwogICAgIH0KIAotICAgIHN0YXRpYyBib29sIHNob3VsZFN3YXBCaW5hcnlPcGVyYW5k
cyhWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICAvLyBOb3RlIHRoYXQgd2UgaGF2ZSBjb21t
dXRhdGl2ZSBvcGVyYXRpb25zIHRoYXQgdGFrZSBtb3JlIHRoYW4gdHdvIGNoaWxkcmVuLiBUaG9z
ZSBvcGVyYXRpb25zIG1heQotICAgICAgICAvLyBjb21tdXRlIHRoZWlyIGZpcnN0IHR3byBjaGls
ZHJlbiB3aGlsZSBsZWF2aW5nIHRoZSByZXN0IHVuYWZmZWN0ZWQuCi0gICAgICAgIEFTU0VSVCh2
YWx1ZS0+bnVtQ2hpbGRyZW4oKSA+PSAyKTsKLQotICAgICAgICAvLyBMZWF2ZSBpdCBhbG9uZSBp
ZiB0aGUgcmlnaHQgY2hpbGQgaXMgYSBjb25zdGFudC4KLSAgICAgICAgaWYgKHZhbHVlLT5jaGls
ZCgxKS0+aXNDb25zdGFudCgpCi0gICAgICAgICAgICB8fCB2YWx1ZS0+Y2hpbGQoMCktPm9wY29k
ZSgpID09IEF0b21pY1N0cm9uZ0NBUykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICBpZiAodmFsdWUtPmNoaWxkKDApLT5pc0NvbnN0YW50KCkpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgICAgICBpZiAodmFsdWUtPmNoaWxkKDEpLT5vcGNvZGUoKSA9PSBBdG9t
aWNTdHJvbmdDQVMpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAvLyBTb3J0
IHRoZSBvcGVyYW5kcy4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgY2Fub25pY2FsaXphdGlvbi4gV2Ug
dXNlIHRoZSBpbmRleCBpbnN0ZWFkIG9mCi0gICAgICAgIC8vIHRoZSBhZGRyZXNzIHRvIG1ha2Ug
dGhpcyBhdCBsZWFzdCBzbGlnaHRseSBkZXRlcm1pbmlzdGljLgotICAgICAgICBpZiAodmFsdWUt
PmNoaWxkKDApLT5pbmRleCgpID4gdmFsdWUtPmNoaWxkKDEpLT5pbmRleCgpKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8v
IFR1cm4gdGhpczogQWRkKGNvbnN0YW50LCB2YWx1ZSkKLSAgICAvLyBJbnRvIHRoaXM6IEFkZCh2
YWx1ZSwgY29uc3RhbnQpCi0gICAgLy8KLSAgICAvLyBBbHNvOgotICAgIC8vIFR1cm4gdGhpczog
QWRkKHZhbHVlMSwgdmFsdWUyKQotICAgIC8vIEludG8gdGhpczogQWRkKHZhbHVlMiwgdmFsdWUx
KQotICAgIC8vIElmIHdlIGRlY2lkZSB0aGF0IHZhbHVlMiBjb21pbmcgZmlyc3QgaXMgdGhlIGNh
bm9uaWNhbCBvcmRlcmluZy4KLSAgICB2b2lkIGhhbmRsZUNvbW11dGF0aXZpdHkoKQotICAgIHsK
LSAgICAgICAgaWYgKHNob3VsZFN3YXBCaW5hcnlPcGVyYW5kcyhtX3ZhbHVlKSkgewotICAgICAg
ICAgICAgc3RkOjpzd2FwKG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7Ci0g
ICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8g
Rm9yIE9wPT1BZGQgb3IgU3ViLCB0dXJuIGFueSBvZiB0aGVzZToKLSAgICAvLyAgICAgIE9wKE11
bCh4MSwgeDIpLCBNdWwoeDEsIHgzKSkKLSAgICAvLyAgICAgIE9wKE11bCh4MiwgeDEpLCBNdWwo
eDEsIHgzKSkKLSAgICAvLyAgICAgIE9wKE11bCh4MSwgeDIpLCBNdWwoeDMsIHgxKSkKLSAgICAv
LyAgICAgIE9wKE11bCh4MiwgeDEpLCBNdWwoeDMsIHgxKSkKLSAgICAvLyBJbnRvIHRoaXM6IE11
bCh4MSwgT3AoeDIsIHgzKSkKLSAgICBib29sIGhhbmRsZU11bERpc3RyaWJ1dGl2aXR5KCkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChtX3ZhbHVlLT5vcGNvZGUoKSA9PSBBZGQgfHwgbV92YWx1ZS0+
b3Bjb2RlKCkgPT0gU3ViKTsKLSAgICAgICAgVmFsdWUqIHgxID0gbnVsbHB0cjsKLSAgICAgICAg
VmFsdWUqIHgyID0gbnVsbHB0cjsKLSAgICAgICAgVmFsdWUqIHgzID0gbnVsbHB0cjsKLSAgICAg
ICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBNdWwgJiYgbV92YWx1ZS0+Y2hp
bGQoMSktPm9wY29kZSgpID09IE11bCkgewotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxk
KDApLT5jaGlsZCgwKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCkpIHsKLSAgICAgICAg
ICAgICAgICAvLyBPcChNdWwoeDEsIHgyKSwgTXVsKHgxLCB4MykpCi0gICAgICAgICAgICAgICAg
eDEgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgeDIgPSBt
X3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSk7Ci0gICAgICAgICAgICAgICAgeDMgPSBtX3ZhbHVl
LT5jaGlsZCgxKS0+Y2hpbGQoMSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fdmFsdWUtPmNo
aWxkKDApLT5jaGlsZCgxKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBPcChNdWwoeDIsIHgxKSwgTXVsKHgxLCB4MykpCi0gICAgICAgICAgICAg
ICAgeDEgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSk7Ci0gICAgICAgICAgICAgICAgeDIg
PSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgeDMgPSBtX3Zh
bHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fdmFsdWUt
PmNoaWxkKDApLT5jaGlsZCgwKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSkpIHsKLSAg
ICAgICAgICAgICAgICAvLyBPcChNdWwoeDEsIHgyKSwgTXVsKHgzLCB4MSkpCi0gICAgICAgICAg
ICAgICAgeDEgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAg
eDIgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSk7Ci0gICAgICAgICAgICAgICAgeDMgPSBt
X3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fdmFs
dWUtPmNoaWxkKDApLT5jaGlsZCgxKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSkpIHsK
LSAgICAgICAgICAgICAgICAvLyBPcChNdWwoeDIsIHgxKSwgTXVsKHgzLCB4MSkpCi0gICAgICAg
ICAgICAgICAgeDEgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSk7Ci0gICAgICAgICAgICAg
ICAgeDIgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgeDMg
PSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKHgxICE9IG51bGxwdHIpIHsKLSAgICAgICAgICAgIEFTU0VSVCh4MiAhPSBu
dWxscHRyICYmIHgzICE9IG51bGxwdHIpOwotICAgICAgICAgICAgVmFsdWUqIG5ld09wID0gbV9p
bnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBtX3ZhbHVlLT5vcGNvZGUoKSwgbV92
YWx1ZS0+b3JpZ2luKCksIHgyLCB4Myk7Ci0gICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1
ZT4oTXVsLCBtX3ZhbHVlLT5vcmlnaW4oKSwgeDEsIG5ld09wKTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAv
LyBGb3IgT3A9PUJpdE9yIG9yIEJpdFhvciwgdHVybiBhbnkgb2YgdGhlc2U6Ci0gICAgLy8gICAg
ICBPcChCaXRBbmQoeDEsIHgyKSwgQml0QW5kKHgxLCB4MykpCi0gICAgLy8gICAgICBPcChCaXRB
bmQoeDIsIHgxKSwgQml0QW5kKHgxLCB4MykpCi0gICAgLy8gICAgICBPcChCaXRBbmQoeDEsIHgy
KSwgQml0QW5kKHgzLCB4MSkpCi0gICAgLy8gICAgICBPcChCaXRBbmQoeDIsIHgxKSwgQml0QW5k
KHgzLCB4MSkpCi0gICAgLy8gSW50byB0aGlzOiBCaXRBbmQoT3AoeDIsIHgzKSwgeDEpCi0gICAg
Ly8gQW5kIGFueSBvZiB0aGVzZToKLSAgICAvLyAgICAgIE9wKEJpdEFuZCh4MSwgeDIpLCB4MSkK
LSAgICAvLyAgICAgIE9wKEJpdEFuZCh4MiwgeDEpLCB4MSkKLSAgICAvLyAgICAgIE9wKHgxLCBC
aXRBbmQoeDEsIHgyKSkKLSAgICAvLyAgICAgIE9wKHgxLCBCaXRBbmQoeDIsIHgxKSkKLSAgICAv
LyBJbnRvIHRoaXM6IEJpdEFuZChPcCh4MiwgeDEpLCB4MSkKLSAgICAvLyBUaGlzIHNlY29uZCBz
ZXQgaXMgZXF1aXZhbGVudCB0byBkb2luZyB4MSA9PiBCaXRBbmQoeDEsIHgxKSwgYW5kIHRoZW4g
YXBwbHlpbmcgdGhlIGZpcnN0IHNldC4KLSAgICAvLyBJdCBkb2VzIG5vdCByZWR1Y2UgdGhlIG51
bWJlciBvZiBvcGVyYXRpb25zIGV4ZWN1dGVkLCBidXQgcHJvdmlkZXMgc29tZSB1c2VmdWwgbm9y
bWFsaXphdGlvbjogd2UgcHJlZmVyIHRvIGhhdmUgQml0QW5kIGF0IHRoZSBvdXRlcm1vc3QsIHRo
ZW4gQml0WG9yLCBhbmQgZmluYWxseSBCaXRPciBhdCB0aGUgaW5uZXJtb3N0Ci0gICAgYm9vbCBo
YW5kbGVCaXRBbmREaXN0cmlidXRpdml0eSgpCi0gICAgewotICAgICAgICBBU1NFUlQobV92YWx1
ZS0+b3Bjb2RlKCkgPT0gQml0T3IgfHwgbV92YWx1ZS0+b3Bjb2RlKCkgPT0gQml0WG9yKTsKLSAg
ICAgICAgVmFsdWUqIHgxID0gbnVsbHB0cjsKLSAgICAgICAgVmFsdWUqIHgyID0gbnVsbHB0cjsK
LSAgICAgICAgVmFsdWUqIHgzID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxk
KDApLT5vcGNvZGUoKSA9PSBCaXRBbmQgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPm9wY29kZSgpID09
IEJpdEFuZCkgewotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSA9
PSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCkpIHsKLSAgICAgICAgICAgICAgICB4MSA9IG1f
dmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICB4MiA9IG1fdmFsdWUt
PmNoaWxkKDApLT5jaGlsZCgxKTsKLSAgICAgICAgICAgICAgICB4MyA9IG1fdmFsdWUtPmNoaWxk
KDEpLT5jaGlsZCgxKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV92YWx1ZS0+Y2hpbGQoMCkt
PmNoaWxkKDEpID09IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKSkgewotICAgICAgICAgICAg
ICAgIHgxID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpOwotICAgICAgICAgICAgICAgIHgy
ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIHgzID0gbV92
YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3ZhbHVl
LT5jaGlsZCgwKS0+Y2hpbGQoMCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpKSB7Ci0g
ICAgICAgICAgICAgICAgeDEgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAg
ICAgICAgICAgeDIgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSk7Ci0gICAgICAgICAgICAg
ICAgeDMgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICB9IGVsc2Ug
aWYgKG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hp
bGQoMSkpIHsKLSAgICAgICAgICAgICAgICB4MSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgx
KTsKLSAgICAgICAgICAgICAgICB4MiA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAg
ICAgICAgICAgICAgICB4MyA9IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0g
Qml0QW5kKSB7Ci0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApID09
IG1fdmFsdWUtPmNoaWxkKDEpKSB7Ci0gICAgICAgICAgICAgICAgeDEgPSB4MyA9IG1fdmFsdWUt
PmNoaWxkKDEpOwotICAgICAgICAgICAgICAgIHgyID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxk
KDEpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkg
PT0gbV92YWx1ZS0+Y2hpbGQoMSkpIHsKLSAgICAgICAgICAgICAgICB4MSA9IHgzID0gbV92YWx1
ZS0+Y2hpbGQoMSk7Ci0gICAgICAgICAgICAgICAgeDIgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hp
bGQoMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAobV92YWx1ZS0+Y2hpbGQo
MSktPm9wY29kZSgpID09IEJpdEFuZCkgewotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxk
KDEpLT5jaGlsZCgwKSA9PSBtX3ZhbHVlLT5jaGlsZCgwKSkgewotICAgICAgICAgICAgICAgIHgx
ID0geDMgPSBtX3ZhbHVlLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICB4MiA9IG1fdmFsdWUt
PmNoaWxkKDEpLT5jaGlsZCgxKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV92YWx1ZS0+Y2hp
bGQoMSktPmNoaWxkKDEpID09IG1fdmFsdWUtPmNoaWxkKDApKSB7Ci0gICAgICAgICAgICAgICAg
eDEgPSB4MyA9IG1fdmFsdWUtPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIHgyID0gbV92YWx1
ZS0+Y2hpbGQoMSktPmNoaWxkKDApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IGlmICh4MSAhPSBudWxscHRyKSB7Ci0gICAgICAgICAgICBBU1NFUlQoeDIgIT0gbnVsbHB0ciAm
JiB4MyAhPSBudWxscHRyKTsKLSAgICAgICAgICAgIFZhbHVlKiBiaXRPcCA9IG1faW5zZXJ0aW9u
U2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgbV92YWx1ZS0+b3Bjb2RlKCksIG1fdmFsdWUtPm9y
aWdpbigpLCB4MiwgeDMpOwotICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KEJpdEFu
ZCwgbV92YWx1ZS0+b3JpZ2luKCksIHgxLCBiaXRPcCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgc3RydWN0
IENhbm9uaWNhbGl6ZWRDb21wYXJpc29uIHsKLSAgICAgICAgT3Bjb2RlIG9wY29kZTsKLSAgICAg
ICAgVmFsdWUqIG9wZXJhbmRzWzJdOwotICAgIH07Ci0gICAgc3RhdGljIENhbm9uaWNhbGl6ZWRD
b21wYXJpc29uIGNhbm9uaWNhbGl6ZUNvbXBhcmlzb24oVmFsdWUqIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgYXV0byBmbGlwID0gW10gKE9wY29kZSBvcGNvZGUpIHsKLSAgICAgICAgICAgIHN3aXRj
aCAob3Bjb2RlKSB7Ci0gICAgICAgICAgICBjYXNlIExlc3NUaGFuOgotICAgICAgICAgICAgICAg
IHJldHVybiBHcmVhdGVyVGhhbjsKLSAgICAgICAgICAgIGNhc2UgR3JlYXRlclRoYW46Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIExlc3NUaGFuOwotICAgICAgICAgICAgY2FzZSBMZXNzRXF1YWw6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdyZWF0ZXJFcXVhbDsKLSAgICAgICAgICAgIGNhc2Ug
R3JlYXRlckVxdWFsOgotICAgICAgICAgICAgICAgIHJldHVybiBMZXNzRXF1YWw7Ci0gICAgICAg
ICAgICBjYXNlIEFib3ZlOgotICAgICAgICAgICAgICAgIHJldHVybiBCZWxvdzsKLSAgICAgICAg
ICAgIGNhc2UgQmVsb3c6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFib3ZlOwotICAgICAgICAg
ICAgY2FzZSBBYm92ZUVxdWFsOgotICAgICAgICAgICAgICAgIHJldHVybiBCZWxvd0VxdWFsOwot
ICAgICAgICAgICAgY2FzZSBCZWxvd0VxdWFsOgotICAgICAgICAgICAgICAgIHJldHVybiBBYm92
ZUVxdWFsOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gb3Bj
b2RlOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgICAgICBpZiAoc2hvdWxkU3dhcEJp
bmFyeU9wZXJhbmRzKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiB7IGZsaXAodmFsdWUtPm9w
Y29kZSgpKSwgeyB2YWx1ZS0+Y2hpbGQoMSksIHZhbHVlLT5jaGlsZCgwKSB9IH07Ci0gICAgICAg
IHJldHVybiB7IHZhbHVlLT5vcGNvZGUoKSwgeyB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGls
ZCgxKSB9IH07Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJlYWxseSBiZSBh
IGZvcndhcmQgYW5hbHlzaXMuIEluc3RlYWQsIHdlIHVzZXMgYSBib3VuZGVkLXNlYXJjaCBiYWNr
d2FyZHMKLSAgICAvLyBhbmFseXNpcy4KLSAgICBJbnRSYW5nZSByYW5nZUZvcihWYWx1ZSogdmFs
dWUsIHVuc2lnbmVkIHRpbWVUb0xpdmUgPSA1KQotICAgIHsKLSAgICAgICAgaWYgKCF0aW1lVG9M
aXZlKQotICAgICAgICAgICAgcmV0dXJuIEludFJhbmdlOjp0b3AodmFsdWUtPnR5cGUoKSk7Ci0g
ICAgICAgIAotICAgICAgICBzd2l0Y2ggKHZhbHVlLT5vcGNvZGUoKSkgewotICAgICAgICBjYXNl
IENvbnN0MzI6Ci0gICAgICAgIGNhc2UgQ29uc3Q2NDogewotICAgICAgICAgICAgaW50NjRfdCBp
bnRWYWx1ZSA9IHZhbHVlLT5hc0ludCgpOwotICAgICAgICAgICAgcmV0dXJuIEludFJhbmdlKGlu
dFZhbHVlLCBpbnRWYWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEJpdEFuZDoKLSAg
ICAgICAgICAgIGlmICh2YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBJbnRSYW5nZTo6cmFuZ2VGb3JNYXNrKHZhbHVlLT5jaGlsZCgxKS0+YXNJbnQoKSwg
dmFsdWUtPnR5cGUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNTaHI6
Ci0gICAgICAgICAgICBpZiAodmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQzMigpKSB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHJhbmdlRm9yKHZhbHVlLT5jaGlsZCgwKSwgdGltZVRvTGl2ZSAtIDEp
LnNTaHIoCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlLT5jaGlsZCgxKS0+YXNJbnQzMigpLCB2
YWx1ZS0+dHlwZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgWlNocjoKLSAgICAgICAgICAgIGlmICh2YWx1ZS0+Y2hpbGQoMSktPmhhc0ludDMy
KCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2VGb3IodmFsdWUtPmNoaWxkKDApLCB0
aW1lVG9MaXZlIC0gMSkuelNocigKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUtPmNoaWxkKDEp
LT5hc0ludDMyKCksIHZhbHVlLT50eXBlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTaGw6Ci0gICAgICAgICAgICBpZiAodmFsdWUtPmNoaWxk
KDEpLT5oYXNJbnQzMigpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlRm9yKHZhbHVl
LT5jaGlsZCgwKSwgdGltZVRvTGl2ZSAtIDEpLnNobCgKLSAgICAgICAgICAgICAgICAgICAgdmFs
dWUtPmNoaWxkKDEpLT5hc0ludDMyKCksIHZhbHVlLT50eXBlKCkpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBBZGQ6Ci0gICAgICAgICAgICByZXR1
cm4gcmFuZ2VGb3IodmFsdWUtPmNoaWxkKDApLCB0aW1lVG9MaXZlIC0gMSkuYWRkKAotICAgICAg
ICAgICAgICAgIHJhbmdlRm9yKHZhbHVlLT5jaGlsZCgxKSwgdGltZVRvTGl2ZSAtIDEpLCB2YWx1
ZS0+dHlwZSgpKTsKLQotICAgICAgICBjYXNlIFN1YjoKLSAgICAgICAgICAgIHJldHVybiByYW5n
ZUZvcih2YWx1ZS0+Y2hpbGQoMCksIHRpbWVUb0xpdmUgLSAxKS5zdWIoCi0gICAgICAgICAgICAg
ICAgcmFuZ2VGb3IodmFsdWUtPmNoaWxkKDEpLCB0aW1lVG9MaXZlIC0gMSksIHZhbHVlLT50eXBl
KCkpOwotCi0gICAgICAgIGNhc2UgTXVsOgotICAgICAgICAgICAgcmV0dXJuIHJhbmdlRm9yKHZh
bHVlLT5jaGlsZCgwKSwgdGltZVRvTGl2ZSAtIDEpLm11bCgKLSAgICAgICAgICAgICAgICByYW5n
ZUZvcih2YWx1ZS0+Y2hpbGQoMSksIHRpbWVUb0xpdmUgLSAxKSwgdmFsdWUtPnR5cGUoKSk7Ci0K
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIEludFJhbmdlOjp0b3AodmFsdWUtPnR5cGUoKSk7Ci0gICAgfQotCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CiAgICAgdm9p
ZCByZXBsYWNlV2l0aE5ldyhBcmd1bWVudHMuLi4gYXJndW1lbnRzKQogICAgIHsKQEAgLTI1NTQs
MjcgKzQ2MCw2IEBACiAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgfQogCi0gICAgdm9p
ZCBoYW5kbGVTaGlmdEFtb3VudCgpCi0gICAgewotICAgICAgICAvLyBTaGlmdCBhbnl0aGluZyBi
eSB6ZXJvIGlzIGlkZW50aXR5LgotICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50
MzIoMCkpIHsKLSAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQo
MCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGhlIHNo
aWZ0IGFscmVhZHkgbWFza3MgaXRzIHNoaWZ0IGFtb3VudC4gSWYgdGhlIHNoaWZ0IGFtb3VudCBp
cyBiZWluZyBtYXNrZWQgYnkgYQotICAgICAgICAvLyByZWR1bmRhbnQgYW1vdW50LCB0aGVuIHJl
bW92ZSB0aGUgbWFzay4gRm9yIGV4YW1wbGUsCi0gICAgICAgIC8vIFR1cm4gdGhpczogU2hsKEB4
LCBCaXRBbmQoQHksIDYzKSkKLSAgICAgICAgLy8gSW50byB0aGlzOiBTaGwoQHgsIEB5KQotICAg
ICAgICB1bnNpZ25lZCBtYXNrID0gc2l6ZW9mVHlwZShtX3ZhbHVlLT50eXBlKCkpICogOCAtIDE7
Ci0gICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+b3Bjb2RlKCkgPT0gQml0QW5kCi0gICAg
ICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSktPmhhc0ludDMyKCkKLSAgICAg
ICAgICAgICYmIChtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSktPmFzSW50MzIoKSAmIG1hc2sp
ID09IG1hc2spIHsKLSAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gbV92YWx1ZS0+Y2hp
bGQoMSktPmNoaWxkKDApOwotICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAg
fQotICAgIH0KLQogICAgIHZvaWQgcmVwbGFjZUlmUmVkdW5kYW50KCkKICAgICB7CiAgICAgICAg
IG1fY2hhbmdlZCB8PSBtX3B1cmVDU0UucHJvY2VzcyhtX3ZhbHVlLCAqbV9kb21pbmF0b3JzKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDI0
NDM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjI2LDcgKzIyNiw3IEBACiAgICAgICAgICAgICBjYXNlIFNTaHI6CiAgICAg
ICAgICAgICBjYXNlIFpTaHI6CiAgICAgICAgICAgICBjYXNlIFJvdFI6Ci0gICAgICAgICAgICAg
ICAgY2FzZSBSb3RMOgorICAgICAgICAgICAgY2FzZSBSb3RMOgogICAgICAgICAgICAgICAgIFZB
TElEQVRFKCF2YWx1ZS0+a2luZCgpLmhhc0V4dHJhQml0cygpLCAoIkF0ICIsICp2YWx1ZSkpOwog
ICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDIsICgiQXQg
IiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSB2
YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAyNDQzODIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2OSw3ICsyMzY5LDcg
QEAKICAgICBWYWx1ZSogcmVzdWx0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBOZWcs
IE9yaWdpbigpLCBtdWwpOwogICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwgcmVzdWx0KTsKIAotICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50NjRfdD4o
cHJvYywgYSkgPT0gLShhICogYikpOworICAgIENIRUNLX0VRKGNvbXBpbGVBbmRSdW48aW50NjRf
dD4ocHJvYywgYSksIC0oYSAqIGIpKTsKIH0KIAogdm9pZCB0ZXN0U3ViTXVsTXVsQXJncyhpbnQ2
NF90IGEsIGludDY0X3QgYiwgaW50NjRfdCBjKQpAQCAtMTY4NjMsNyArMTY4NjMsNyBAQAogICAg
ICAgICBmb3IgKGF1dG8mIHNlY29uZCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4oKSkg
ewogICAgICAgICAgICAgZmxvYXQgYiA9IHNlY29uZC52YWx1ZTsKICAgICAgICAgICAgIGJvb2wg
ZXhwZWN0ZWRSZXN1bHQgPSAoYSA9PSBiKSB8fCBzdGQ6OmlzdW5vcmRlcmVkKGEsIGIpOwotICAg
ICAgICAgICAgQ0hFQ0soISFpbnZva2U8aW50MzJfdD4oKmNvZGUsIHN0YXRpY19jYXN0PGRvdWJs
ZT4oYikpID09IGV4cGVjdGVkUmVzdWx0KTsKKyAgICAgICAgICAgIENIRUNLX0VRKCEhaW52b2tl
PGludDMyX3Q+KCpjb2RlLCBzdGF0aWNfY2FzdDxkb3VibGU+KGIpKSwgZXhwZWN0ZWRSZXN1bHQp
OwogICAgICAgICB9CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPdXRwdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T3V0cHV0LmNwcAkocmV2aXNpb24gMjQ0MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPdXRwdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBACiAKIE91dHB1
dDo6T3V0cHV0KFN0YXRlJiBzdGF0ZSkKICAgICA6IG1fcHJvYygqc3RhdGUucHJvYykKKyAgICAs
IG1fcGVlcGhvbGUobV9wcm9jKQogewogfQogCkBAIC04OCw2ICs4OSw3IEBACiB2b2lkIE91dHB1
dDo6YXBwZW5kVG8oTEJhc2ljQmxvY2sgYmxvY2spCiB7CiAgICAgbV9ibG9jayA9IGJsb2NrOwor
ICAgIG1fcGVlcGhvbGUuc2V0QmxvY2sobV9ibG9jayk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmZy
YW1lUG9pbnRlcigpCkBAIC0xMjksMTMzICsxMzEsMTEzIEBACiAKIExWYWx1ZSBPdXRwdXQ6Om9w
YXF1ZShMVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBPcGFxdWUsIG9yaWdpbigpLCB2YWx1ZSk7CisgICAgcmV0dXJuIG1fcGVlcGhv
bGUucmVkdWNlT3BhcXVlKHZhbHVlLT50eXBlKCksIG9yaWdpbigpLCB2YWx1ZSk7CiB9CiAKIExW
YWx1ZSBPdXRwdXQ6OmFkZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIGlmIChW
YWx1ZSogcmVzdWx0ID0gbGVmdC0+YWRkQ29uc3RhbnQobV9wcm9jLCByaWdodCkpIHsKLSAgICAg
ICAgbV9ibG9jay0+YXBwZW5kKHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpB
ZGQsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNl
QWRkKGxlZnQtPnR5cGUoKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVlIE91
dHB1dDo6c3ViKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgcmV0dXJuIG1fYmxv
Y2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlN1Yiwgb3JpZ2luKCksIGxlZnQs
IHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VTdWIobGVmdC0+dHlwZSgpLCBv
cmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0cHV0OjptdWwoTFZhbHVlIGxl
ZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpW
YWx1ZT4obV9wcm9jLCBCMzo6TXVsLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVy
biBtX3BlZXBob2xlLnJlZHVjZU11bChsZWZ0LT50eXBlKCksIG9yaWdpbigpLCBsZWZ0LCByaWdo
dCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmRpdihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQog
ewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpE
aXYsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNl
RGl2KGxlZnQtPnR5cGUoKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0LCBmYWxzZSk7CiB9CiAKIExW
YWx1ZSBPdXRwdXQ6OmNoaWxsRGl2KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAg
cmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgY2hpbGwoQjM6OkRp
diksIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNl
RGl2KGxlZnQtPnR5cGUoKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0LCB0cnVlKTsKIH0KIAogTFZh
bHVlIE91dHB1dDo6bW9kKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgcmV0dXJu
IG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6Ok1vZCwgb3JpZ2luKCks
IGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VNb2QobGVmdC0+dHlw
ZSgpLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQsIGZhbHNlKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6
Y2hpbGxNb2QoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICByZXR1cm4gbV9ibG9j
ay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBjaGlsbChCMzo6TW9kKSwgb3JpZ2luKCks
IGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VNb2QobGVmdC0+dHlw
ZSgpLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQsIHRydWUpOwogfQogCiBMVmFsdWUgT3V0cHV0Ojpu
ZWcoTFZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgQjM6Ok5lZywgb3JpZ2luKCksIHZhbHVlKTsKKyAgICByZXR1cm4gbV9wZWVwaG9s
ZS5yZWR1Y2VOZWcodmFsdWUtPnR5cGUoKSwgb3JpZ2luKCksIHZhbHVlKTsKIH0KIAogTFZhbHVl
IE91dHB1dDo6ZG91YmxlQWRkKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgcmV0
dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkFkZCwgb3JpZ2lu
KCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VBZGQobGVmdC0+
dHlwZSgpLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0cHV0Ojpkb3Vi
bGVTdWIoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+
YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6U3ViLCBvcmlnaW4oKSwgbGVmdCwgcmln
aHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZVN1YihsZWZ0LT50eXBlKCksIG9yaWdp
bigpLCBsZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmRvdWJsZU11bChMVmFsdWUg
bGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6
OlZhbHVlPihtX3Byb2MsIEIzOjpNdWwsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0
dXJuIG1fcGVlcGhvbGUucmVkdWNlTXVsKGxlZnQtPnR5cGUoKSwgb3JpZ2luKCksIGxlZnQsIHJp
Z2h0KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6ZG91YmxlRGl2KExWYWx1ZSBsZWZ0LCBMVmFsdWUg
cmlnaHQpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJv
YywgQjM6OkRpdiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9s
ZS5yZWR1Y2VEaXYobGVmdC0+dHlwZSgpLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQsIGZhbHNlKTsK
IH0KIAogTFZhbHVlIE91dHB1dDo6ZG91YmxlTW9kKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQp
CiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6
Ok1vZCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1
Y2VNb2QobGVmdC0+dHlwZSgpLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQsIGZhbHNlKTsKIH0KIAog
TFZhbHVlIE91dHB1dDo6Yml0QW5kKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAg
cmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkJpdEFuZCwg
b3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VCaXRB
bmQobGVmdC0+dHlwZSgpLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0
cHV0OjpiaXRPcihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIHJldHVybiBtX2Js
b2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpCaXRPciwgb3JpZ2luKCksIGxl
ZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VCaXRPcihsZWZ0LT50eXBl
KCksIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmJpdFhvcihM
VmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmRO
ZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpCaXRYb3IsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7
CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlQml0WG9yKGxlZnQtPnR5cGUoKSwgb3JpZ2lu
KCksIGxlZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6c2hsKExWYWx1ZSBsZWZ0LCBM
VmFsdWUgcmlnaHQpCiB7Ci0gICAgcmlnaHQgPSBjYXN0VG9JbnQzMihyaWdodCk7Ci0gICAgaWYg
KFZhbHVlKiByZXN1bHQgPSBsZWZ0LT5zaGxDb25zdGFudChtX3Byb2MsIHJpZ2h0KSkgewotICAg
ICAgICBtX2Jsb2NrLT5hcHBlbmQocmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6
OlNobCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1
Y2VTaGwobGVmdC0+dHlwZSgpLCBvcmlnaW4oKSwgbGVmdCwgY2FzdFRvSW50MzIocmlnaHQpKTsK
IH0KIAogTFZhbHVlIE91dHB1dDo6YVNocihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewot
ICAgIHJpZ2h0ID0gY2FzdFRvSW50MzIocmlnaHQpOwotICAgIGlmIChWYWx1ZSogcmVzdWx0ID0g
bGVmdC0+c1NockNvbnN0YW50KG1fcHJvYywgcmlnaHQpKSB7Ci0gICAgICAgIG1fYmxvY2stPmFw
cGVuZChyZXN1bHQpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICByZXR1cm4g
bV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6U1Nociwgb3JpZ2luKCks
IGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VTU2hyKGxlZnQtPnR5
cGUoKSwgb3JpZ2luKCksIGxlZnQsIGNhc3RUb0ludDMyKHJpZ2h0KSk7CiB9CiAKIExWYWx1ZSBP
dXRwdXQ6OmxTaHIoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICByaWdodCA9IGNh
c3RUb0ludDMyKHJpZ2h0KTsKLSAgICBpZiAoVmFsdWUqIHJlc3VsdCA9IGxlZnQtPnpTaHJDb25z
dGFudChtX3Byb2MsIHJpZ2h0KSkgewotICAgICAgICBtX2Jsb2NrLT5hcHBlbmQocmVzdWx0KTsK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVu
ZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlpTaHIsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7
CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlWlNocihsZWZ0LT50eXBlKCksIG9yaWdpbigp
LCBsZWZ0LCBjYXN0VG9JbnQzMihyaWdodCkpOwogfQogCiBMVmFsdWUgT3V0cHV0OjpiaXROb3Qo
TFZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVl
PihtX3Byb2MsIEIzOjpCaXRYb3IsIG9yaWdpbigpLAotICAgICAgICB2YWx1ZSwKLSAgICAgICAg
bV9ibG9jay0+YXBwZW5kSW50Q29uc3RhbnQobV9wcm9jLCBvcmlnaW4oKSwgdmFsdWUtPnR5cGUo
KSwgLTEpKTsKKyAgICBWYWx1ZSogYWxsT25lcyA9IG1fYmxvY2stPmFwcGVuZEludENvbnN0YW50
KG1fcHJvYywgb3JpZ2luKCksIHZhbHVlLT50eXBlKCksIC0xKTsKKyAgICByZXR1cm4gbV9wZWVw
aG9sZS5yZWR1Y2VCaXRYb3IodmFsdWUtPnR5cGUoKSwgb3JpZ2luKCksIHZhbHVlLCBhbGxPbmVz
KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6bG9naWNhbE5vdChMVmFsdWUgdmFsdWUpCiB7Ci0gICAg
cmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkVxdWFsLCBv
cmlnaW4oKSwgdmFsdWUsIGludDMyWmVybyk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNl
RXF1YWwoSW50MzIsIG9yaWdpbigpLCB2YWx1ZSwgaW50MzJaZXJvKTsKIH0KIAogTFZhbHVlIE91
dHB1dDo6Y3RsejMyKExWYWx1ZSBvcGVyYW5kKQpAQCAtMjY1LDE3ICsyNDcsMTcgQEAKIAogTFZh
bHVlIE91dHB1dDo6ZG91YmxlQWJzKExWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gbV9ibG9j
ay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6QWJzLCBvcmlnaW4oKSwgdmFsdWUp
OworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZUFicyh2YWx1ZS0+dHlwZSgpLCBvcmlnaW4o
KSwgdmFsdWUpOwogfQogCi1MVmFsdWUgT3V0cHV0Ojpkb3VibGVDZWlsKExWYWx1ZSBvcGVyYW5k
KQorTFZhbHVlIE91dHB1dDo6ZG91YmxlQ2VpbChMVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJu
IG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkNlaWwsIG9yaWdpbigp
LCBvcGVyYW5kKTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VDZWlsKHZhbHVlLT50eXBl
KCksIG9yaWdpbigpLCB2YWx1ZSk7CiB9CiAKLUxWYWx1ZSBPdXRwdXQ6OmRvdWJsZUZsb29yKExW
YWx1ZSBvcGVyYW5kKQorTFZhbHVlIE91dHB1dDo6ZG91YmxlRmxvb3IoTFZhbHVlIHZhbHVlKQog
ewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpG
bG9vciwgb3JpZ2luKCksIG9wZXJhbmQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZUZs
b29yKHZhbHVlLT50eXBlKCksIG9yaWdpbigpLCB2YWx1ZSk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6
OmRvdWJsZVRydW5jKExWYWx1ZSB2YWx1ZSkKQEAgLTMxMiwxMyArMjk0LDEzIEBACiAgICAgLy8g
c2hvdWxkIGJlIGludm9sdmVkIGluIGFueSBvcGVyYXRpb24gdGhhdCBjcmVhdGVzIGJsb2Nrcy4K
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyMjIzCiAg
ICAgYXV0byByZXN1bHQgPSBwb3dEb3VibGVJbnQzMihtX3Byb2MsIG1fYmxvY2ssIG9yaWdpbigp
LCB4LCB5KTsKLSAgICBtX2Jsb2NrID0gcmVzdWx0LmZpcnN0OworICAgIGFwcGVuZFRvKHJlc3Vs
dC5maXJzdCk7CiAgICAgcmV0dXJuIHJlc3VsdC5zZWNvbmQ7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6
OmRvdWJsZVNxcnQoTFZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmRO
ZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpTcXJ0LCBvcmlnaW4oKSwgdmFsdWUpOworICAgIHJl
dHVybiBtX3BlZXBob2xlLnJlZHVjZVNxcnQodmFsdWUtPnR5cGUoKSwgb3JpZ2luKCksIHZhbHVl
KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6ZG91YmxlVG9JbnQoTFZhbHVlIHZhbHVlKQpAQCAtMzQ3
LDcgKzMyOSw3IEBACiAKIExWYWx1ZSBPdXRwdXQ6OnNpZ25FeHQzMlRvNjQoTFZhbHVlIHZhbHVl
KQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIz
OjpTRXh0MzIsIG9yaWdpbigpLCB2YWx1ZSk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNl
U0V4dDMyKEludDY0LCBvcmlnaW4oKSwgdmFsdWUpOwogfQogCiBMVmFsdWUgT3V0cHV0OjpzaWdu
RXh0MzJUb1B0cihMVmFsdWUgdmFsdWUpCkBAIC0zNTksMTQgKzM0MSwxMiBAQAogewogICAgIGlm
ICh2YWx1ZS0+dHlwZSgpID09IHR5cGUpCiAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICBpZiAo
dmFsdWUtPmhhc0ludDMyKCkpCi0gICAgICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmRJbnRDb25z
dGFudChtX3Byb2MsIG9yaWdpbigpLCBJbnQ2NCwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0YXRp
Y19jYXN0PHVpbnQzMl90Pih2YWx1ZS0+YXNJbnQzMigpKSkpOwotICAgIHJldHVybiBtX2Jsb2Nr
LT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpaRXh0MzIsIG9yaWdpbigpLCB2YWx1
ZSk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlWkV4dDMyKEludDY0LCBvcmlnaW4oKSwg
dmFsdWUpOwogfQogCiBMVmFsdWUgT3V0cHV0OjppbnRUb0RvdWJsZShMVmFsdWUgdmFsdWUpCiB7
Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OklU
b0QsIG9yaWdpbigpLCB2YWx1ZSk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlSVRvRChE
b3VibGUsIG9yaWdpbigpLCB2YWx1ZSk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OnVuc2lnbmVkVG9E
b3VibGUoTFZhbHVlIHZhbHVlKQpAQCAtMzc4LDE5ICszNTgsMTcgQEAKIHsKICAgICBpZiAodmFs
dWUtPnR5cGUoKSA9PSBJbnQzMikKICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIGlmICh2YWx1
ZS0+aGFzSW50NjQoKSkKLSAgICAgICAgcmV0dXJuIGNvbnN0SW50MzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4odmFsdWUtPmFzSW50NjQoKSkpOwotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8
QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpUcnVuYywgb3JpZ2luKCksIHZhbHVlKTsKKyAgICByZXR1
cm4gbV9wZWVwaG9sZS5yZWR1Y2VUcnVuYyhJbnQzMiwgb3JpZ2luKCksIHZhbHVlKTsKIH0KIAog
TFZhbHVlIE91dHB1dDo6ZG91YmxlVG9GbG9hdChMVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJu
IG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkRvdWJsZVRvRmxvYXQs
IG9yaWdpbigpLCB2YWx1ZSk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlRG91YmxlVG9G
bG9hdChGbG9hdCwgb3JpZ2luKCksIHZhbHVlKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6ZmxvYXRU
b0RvdWJsZShMVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxC
Mzo6VmFsdWU+KG1fcHJvYywgQjM6OkZsb2F0VG9Eb3VibGUsIG9yaWdpbigpLCB2YWx1ZSk7Cisg
ICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlRmxvYXRUb0RvdWJsZShEb3VibGUsIG9yaWdpbigp
LCB2YWx1ZSk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmxvYWQoVHlwZWRQb2ludGVyIHBvaW50ZXIs
IExUeXBlIHR5cGUpCkBAIC00ODUsMTE3ICs0NjMsODcgQEAKIAogTFZhbHVlIE91dHB1dDo6ZXF1
YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICBUcmlTdGF0ZSByZXN1bHQgPSBs
ZWZ0LT5lcXVhbENvbnN0YW50KHJpZ2h0KTsKLSAgICBpZiAocmVzdWx0ICE9IE1peGVkVHJpU3Rh
dGUpCi0gICAgICAgIHJldHVybiBjb25zdEJvb2wocmVzdWx0ID09IFRydWVUcmlTdGF0ZSk7Ci0g
ICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkVxdWFs
LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZUVx
dWFsKEludDMyLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0cHV0Ojpu
b3RFcXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIFRyaVN0YXRlIHJlc3Vs
dCA9IGxlZnQtPm5vdEVxdWFsQ29uc3RhbnQocmlnaHQpOwotICAgIGlmIChyZXN1bHQgIT0gTWl4
ZWRUcmlTdGF0ZSkKLSAgICAgICAgcmV0dXJuIGNvbnN0Qm9vbChyZXN1bHQgPT0gVHJ1ZVRyaVN0
YXRlKTsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBC
Mzo6Tm90RXF1YWwsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhv
bGUucmVkdWNlTm90RXF1YWwoSW50MzIsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiB9CiAKIExW
YWx1ZSBPdXRwdXQ6OmFib3ZlKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgVHJp
U3RhdGUgcmVzdWx0ID0gbGVmdC0+YWJvdmVDb25zdGFudChyaWdodCk7Ci0gICAgaWYgKHJlc3Vs
dCAhPSBNaXhlZFRyaVN0YXRlKQotICAgICAgICByZXR1cm4gY29uc3RCb29sKHJlc3VsdCA9PSBU
cnVlVHJpU3RhdGUpOwotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPiht
X3Byb2MsIEIzOjpBYm92ZSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9w
ZWVwaG9sZS5yZWR1Y2VBYm92ZShJbnQzMiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKIH0KIAog
TFZhbHVlIE91dHB1dDo6YWJvdmVPckVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7
Ci0gICAgVHJpU3RhdGUgcmVzdWx0ID0gbGVmdC0+YWJvdmVFcXVhbENvbnN0YW50KHJpZ2h0KTsK
LSAgICBpZiAocmVzdWx0ICE9IE1peGVkVHJpU3RhdGUpCi0gICAgICAgIHJldHVybiBjb25zdEJv
b2wocmVzdWx0ID09IFRydWVUcmlTdGF0ZSk7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5l
dzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkFib3ZlRXF1YWwsIG9yaWdpbigpLCBsZWZ0LCByaWdo
dCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlQWJvdmVFcXVhbChJbnQzMiwgb3JpZ2lu
KCksIGxlZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6YmVsb3coTFZhbHVlIGxlZnQs
IExWYWx1ZSByaWdodCkKIHsKLSAgICBUcmlTdGF0ZSByZXN1bHQgPSBsZWZ0LT5iZWxvd0NvbnN0
YW50KHJpZ2h0KTsKLSAgICBpZiAocmVzdWx0ICE9IE1peGVkVHJpU3RhdGUpCi0gICAgICAgIHJl
dHVybiBjb25zdEJvb2wocmVzdWx0ID09IFRydWVUcmlTdGF0ZSk7Ci0gICAgcmV0dXJuIG1fYmxv
Y2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkJlbG93LCBvcmlnaW4oKSwgbGVm
dCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZUJlbG93KEludDMyLCBvcmln
aW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0cHV0OjpiZWxvd09yRXF1YWwoTFZh
bHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICBUcmlTdGF0ZSByZXN1bHQgPSBsZWZ0LT5i
ZWxvd0VxdWFsQ29uc3RhbnQocmlnaHQpOwotICAgIGlmIChyZXN1bHQgIT0gTWl4ZWRUcmlTdGF0
ZSkKLSAgICAgICAgcmV0dXJuIGNvbnN0Qm9vbChyZXN1bHQgPT0gVHJ1ZVRyaVN0YXRlKTsKLSAg
ICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6QmVsb3dF
cXVhbCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1
Y2VCZWxvd0VxdWFsKEludDMyLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUg
T3V0cHV0OjpncmVhdGVyVGhhbihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIFRy
aVN0YXRlIHJlc3VsdCA9IGxlZnQtPmdyZWF0ZXJUaGFuQ29uc3RhbnQocmlnaHQpOwotICAgIGlm
IChyZXN1bHQgIT0gTWl4ZWRUcmlTdGF0ZSkKLSAgICAgICAgcmV0dXJuIGNvbnN0Qm9vbChyZXN1
bHQgPT0gVHJ1ZVRyaVN0YXRlKTsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpW
YWx1ZT4obV9wcm9jLCBCMzo6R3JlYXRlclRoYW4sIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7Cisg
ICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlR3JlYXRlclRoYW4oSW50MzIsIG9yaWdpbigpLCBs
ZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmdyZWF0ZXJUaGFuT3JFcXVhbChMVmFs
dWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIFRyaVN0YXRlIHJlc3VsdCA9IGxlZnQtPmdy
ZWF0ZXJFcXVhbENvbnN0YW50KHJpZ2h0KTsKLSAgICBpZiAocmVzdWx0ICE9IE1peGVkVHJpU3Rh
dGUpCi0gICAgICAgIHJldHVybiBjb25zdEJvb2wocmVzdWx0ID09IFRydWVUcmlTdGF0ZSk7Ci0g
ICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkdyZWF0
ZXJFcXVhbCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5y
ZWR1Y2VHcmVhdGVyRXF1YWwoSW50MzIsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiB9CiAKIExW
YWx1ZSBPdXRwdXQ6Omxlc3NUaGFuKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAg
VHJpU3RhdGUgcmVzdWx0ID0gbGVmdC0+bGVzc1RoYW5Db25zdGFudChyaWdodCk7Ci0gICAgaWYg
KHJlc3VsdCAhPSBNaXhlZFRyaVN0YXRlKQotICAgICAgICByZXR1cm4gY29uc3RCb29sKHJlc3Vs
dCA9PSBUcnVlVHJpU3RhdGUpOwotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZh
bHVlPihtX3Byb2MsIEIzOjpMZXNzVGhhbiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICBy
ZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VMZXNzVGhhbihJbnQzMiwgb3JpZ2luKCksIGxlZnQsIHJp
Z2h0KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6bGVzc1RoYW5PckVxdWFsKExWYWx1ZSBsZWZ0LCBM
VmFsdWUgcmlnaHQpCiB7Ci0gICAgVHJpU3RhdGUgcmVzdWx0ID0gbGVmdC0+bGVzc0VxdWFsQ29u
c3RhbnQocmlnaHQpOwotICAgIGlmIChyZXN1bHQgIT0gTWl4ZWRUcmlTdGF0ZSkKLSAgICAgICAg
cmV0dXJuIGNvbnN0Qm9vbChyZXN1bHQgPT0gVHJ1ZVRyaVN0YXRlKTsKLSAgICByZXR1cm4gbV9i
bG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6TGVzc0VxdWFsLCBvcmlnaW4o
KSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZUxlc3NFcXVhbChJ
bnQzMiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6ZG91Ymxl
RXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+
YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RXF1YWwsIG9yaWdpbigpLCBsZWZ0LCBy
aWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlRXF1YWwoSW50MzIsIG9yaWdpbigp
LCBsZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmRvdWJsZUVxdWFsT3JVbm9yZGVy
ZWQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBw
ZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RXF1YWxPclVub3JkZXJlZCwgb3JpZ2luKCks
IGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VFcXVhbE9yVW5vcmRl
cmVkKEludDMyLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0cHV0Ojpk
b3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0g
ICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6Ok5vdEVx
dWFsLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVj
ZU5vdEVxdWFsKEludDMyLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0
cHV0Ojpkb3VibGVMZXNzVGhhbihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIHJl
dHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpMZXNzVGhhbiwg
b3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VMZXNz
VGhhbihJbnQzMiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6
ZG91YmxlTGVzc1RoYW5PckVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAg
cmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6Okxlc3NFcXVh
bCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VM
ZXNzRXF1YWwoSW50MzIsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1ZSBPdXRw
dXQ6OmRvdWJsZUdyZWF0ZXJUaGFuKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAg
cmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkdyZWF0ZXJU
aGFuLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVj
ZUdyZWF0ZXJUaGFuKEludDMyLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUg
T3V0cHV0Ojpkb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdo
dCkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBC
Mzo6R3JlYXRlckVxdWFsLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiBtX3Bl
ZXBob2xlLnJlZHVjZUdyZWF0ZXJFcXVhbChJbnQzMiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsK
IH0KIAogTFZhbHVlIE91dHB1dDo6ZG91YmxlTm90RXF1YWxBbmRPcmRlcmVkKExWYWx1ZSBsZWZ0
LCBMVmFsdWUgcmlnaHQpCkBAIC02MjUsMzMgKzU3MywyNyBAQAogCiBMVmFsdWUgT3V0cHV0Ojpp
c1plcm8zMihMVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxC
Mzo6VmFsdWU+KG1fcHJvYywgQjM6OkVxdWFsLCBvcmlnaW4oKSwgdmFsdWUsIGludDMyWmVybyk7
CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlRXF1YWwoSW50MzIsIG9yaWdpbigpLCB2YWx1
ZSwgaW50MzJaZXJvKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6bm90WmVybzMyKExWYWx1ZSB2YWx1
ZSkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBC
Mzo6Tm90RXF1YWwsIG9yaWdpbigpLCB2YWx1ZSwgaW50MzJaZXJvKTsKKyAgICByZXR1cm4gbV9w
ZWVwaG9sZS5yZWR1Y2VOb3RFcXVhbChJbnQzMiwgb3JpZ2luKCksIHZhbHVlLCBpbnQzMlplcm8p
OwogfQogCiBMVmFsdWUgT3V0cHV0Ojppc1plcm82NChMVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0
dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkVxdWFsLCBvcmln
aW4oKSwgdmFsdWUsIGludDY0WmVybyk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlRXF1
YWwoSW50MzIsIG9yaWdpbigpLCB2YWx1ZSwgaW50NjRaZXJvKTsKIH0KIAogTFZhbHVlIE91dHB1
dDo6bm90WmVybzY0KExWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5k
TmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Tm90RXF1YWwsIG9yaWdpbigpLCB2YWx1ZSwgaW50
NjRaZXJvKTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VOb3RFcXVhbChJbnQzMiwgb3Jp
Z2luKCksIHZhbHVlLCBpbnQ2NFplcm8pOwogfQogCiBMVmFsdWUgT3V0cHV0OjpzZWxlY3QoTFZh
bHVlIHZhbHVlLCBMVmFsdWUgdGFrZW4sIExWYWx1ZSBub3RUYWtlbikKIHsKLSAgICBpZiAodmFs
dWUtPmhhc0ludDMyKCkpIHsKLSAgICAgICAgaWYgKHZhbHVlLT5hc0ludDMyKCkpCi0gICAgICAg
ICAgICByZXR1cm4gdGFrZW47Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBub3RU
YWtlbjsKLSAgICB9Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1f
cHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksIHZhbHVlLCB0YWtlbiwgbm90VGFrZW4pOworICAg
IHJldHVybiBtX3BlZXBob2xlLnJlZHVjZVNlbGVjdCh0YWtlbi0+dHlwZSgpLCBvcmlnaW4oKSwg
dmFsdWUsIHRha2VuLCBub3RUYWtlbik7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmF0b21pY1hjaGdB
ZGQoTFZhbHVlIG9wZXJhbmQsIFR5cGVkUG9pbnRlciBwb2ludGVyLCBXaWR0aCB3aWR0aCkKQEAg
LTc4MSw4ICs3MjMsOCBAQAogCiBMVmFsdWUgT3V0cHV0OjpiaXRDYXN0KExWYWx1ZSB2YWx1ZSwg
TFR5cGUgdHlwZSkKIHsKLSAgICBBU1NFUlRfVU5VU0VEKHR5cGUsIHR5cGUgPT0gSW50NjQgfHwg
dHlwZSA9PSBEb3VibGUpOwotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVl
PihtX3Byb2MsIEIzOjpCaXR3aXNlQ2FzdCwgb3JpZ2luKCksIHZhbHVlKTsKKyAgICBBU1NFUlQo
dHlwZSA9PSBJbnQ2NCB8fCB0eXBlID09IERvdWJsZSk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUu
cmVkdWNlQml0d2lzZUNhc3QodHlwZSwgb3JpZ2luKCksIHZhbHVlKTsKIH0KIAogTFZhbHVlIE91
dHB1dDo6ZnJvdW5kKExWYWx1ZSBkb3VibGVWYWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPdXRwdXQuaAkocmV2aXNpb24gMjQ0MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPdXRwdXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKICNpbmNs
dWRlICJCM0ZyZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1ZGUgIkIzUGVlcGhvbGVPcHRpbWl6ZXIu
aCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgogI2luY2x1ZGUgIkIzU3dpdGNoVmFsdWUuaCIK
ICNpbmNsdWRlICJCM1dpZHRoLmgiCkBAIC00NTIsNyArNDUzLDcgQEAKICNwcmFnbWEgbWFyayAt
IFN0YXRlcwogI2VuZGlmCiAgICAgQjM6OlByb2NlZHVyZSYgbV9wcm9jOwotCisgICAgQjM6OlBl
ZXBob2xlT3B0aW1pemVyIG1fcGVlcGhvbGU7CiAgICAgREZHOjpOb2RlKiBtX29yaWdpbiB7IG51
bGxwdHIgfTsKICAgICBMQmFzaWNCbG9jayBtX2Jsb2NrIHsgbnVsbHB0ciB9OwogICAgIExCYXNp
Y0Jsb2NrIG1fbmV4dEJsb2NrIHsgbnVsbHB0ciB9Owo=
</data>
<flag name="review"
          id="384034"
          type_id="1"
          status="-"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>368204</attachid>
            <date>2019-04-24 17:24:25 -0700</date>
            <delta_ts>2019-04-24 17:24:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch196578</filename>
            <type>text/plain</type>
            <size>231106</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQ0NTY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3OSBA
QAorMjAxOS0wNC0yNCAgUm9iaW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUuY29tPgorCisg
ICAgICAgIEIzIHBlZXBob2xlIG9wdGltaXphdGlvbnMgc2hvdWxkIGxpdmUgaW4gdGhlaXIgb3du
IGZpbGUsIGFuZCBiZSB1c2VkIGJ5IEZUTE91dHB1dC5jcHAKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjU3OAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSB0aGUgcGVlcGhvbGUgb3B0aW1p
emF0aW9ucyBmb3IgQjMgbGl2ZSBpbiBCM1JlZHVjZVN0cmVuZ3RoIGFuZCBhcmUgcmF0aGVyIHRp
ZWQgdG8gaXQsIGFuYWx5emluZyBhbiBleGlzdGluZyB2YWx1ZQorICAgICAgICAsIGFuZCAodHlw
aWNhbGx5KSByZXBsYWNpbmcgaXQgd2l0aCBhbiBpZGVudGl0eSB0byBhIG5ldyAoc2ltcGxlcikg
dmFsdWUgdGhhdCB0aGV5IGNyZWF0ZS4KKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCB0aGV5IGlu
c3RlYWQgbGl2ZSBpbiB0aGVpciBvd24gY2xhc3MgQjNQZWVwaG9sZU9wdGltaXplciwgY3JlYXRp
bmcgYSBuZXcgdmFsdWUgKG9wdGlvbmFsbHkgb25seSBpZiB0aGV5IGNhbiBkbyBzbyBjbGV2ZXJs
eSksCisgICAgICAgIGxlYXZpbmcgdGhlIGNhbGxlciBkbyB0aGUgcmVwbGFjZVdpdGhJZGVudGl0
eSBvbiB0aGUgb2xkIGRlZmluaXRpb24uCisgICAgICAgIFRoaXMgaGFzIHNldmVyYWwgYmVuZWZp
dHM6CisgICAgICAgIC0gVXNlcnMgb2YgQjMgY2FuIG5vdyB1c2UgdGhpcyBpbnRlcmZhY2UgdG8g
Y3JlYXRlIHZhbHVlcywgb3B0aW1pemluZyB0aGVtIG9uIHRoZSBmbHk7IGF2b2lkaW5nIGFsbG9j
YXRpbmcgQjM6OlZhbHVlIHMganVzdCB0byBzaW1wbGlmeSB0aGVtLgorICAgICAgICAgIFRoaXMg
cGF0Y2ggcG9ydHMgRlRMT3V0cHV0LmNwcCB0byB1c2UgdGhpcyBmYWNpbGl0eS4KKyAgICAgICAg
LSBUaGUgb3B0aW1pemF0aW9ucyBhcmUgc2lnbmlmaWNhbnRseSB0ZXJzZXIgYW5kIG1vcmUgcmVh
ZGFibGUsIGFzIHdlIGNhbiBnaXZlIG5hbWVzIHRvIHRoZSBhcmd1bWVudHMgKGUuZy4gbGVmdC9y
aWdodCB2cyBtX3ZhbHVlLT5jaGlsZCgwKS9tX3ZhbHVlLT5jaGlsZCgxKSkKKyAgICAgICAgICBU
aGlzIGhlbHBlZCBtZSBub3RpY2UgdGhhdCBhIGNvdXBsZSBvcHRpbWl6YXRpb25zIHdlcmUgZGVh
ZCB3aGlsZSB3cml0aW5nIHRoZSBwYXRjaCAoZS5nLiBBZGQoTmVnKHgpLCAtMSk9PkJpdFhvcih4
LCAtMSkgbmV2ZXIgdHJpZ2dlcmVkIGFzIEFkZChOZWcoeCksIHkpPT5TdWIoeSwgeCkgcmFuIGJl
Zm9yZSBpdCksIGFuZCBmaXggdGhlbS4KKyAgICAgICAgLSBUaGUgb3B0aW1pemF0aW9ucyBub3cg
bmF0dXJhbGx5IHJ1biB0byBhIGxvY2FsIGZpeHBvaW50LiBUaGlzIGN1cnJlbnRseSBpcyBhIG5l
Z2xpZ2libGUgYmVuZWZpdCBhcyB3ZSBkb24ndCBoYXZlIHRoYXQgbWFueSBvcHRpbWl6YXRpb25z
CisgICAgICAgICAgLCBidXQgaXQgZW5zdXJlcyB3ZSBjYW4gYWRkIG1hbnkgbW9yZSB3aXRob3V0
IHNpZ25pZmljYW50bHkgaW5jcmVhc2luZyB0aGUgdGltZSBzcGVudCBpbiBCM1JlZHVjZVN0cmVu
Z3RoCisgICAgICAgIC0gTG9uZyB0ZXJtIEkgcGxhbiB0byBhZGQgYW4gYWJzdHJhY3QgaW50ZXJw
cmV0ZXIvZm9yd2FyZCB2YWx1ZSBhbmFseXplciB0byBCMywgd2hpY2ggd291bGQgYmUgYSBsb3Qg
bW9yZSBhY2N1cmF0ZSB0aGFuIHRoZSBjdXJyZW50IGJvdW5kZWQgYmFja3dhcmRzIGFuYWx5c2lz
IGluIEIzUmVkdWNlU3RyZW5ndGguCisgICAgICAgICAgVGhpcyByZWZhY3RvciBpcyBuZWVkZWQg
YXMgYSBzdGVwIHRvd2FyZHMgdGhpcy4KKworICAgICAgICBJIGxlYXZlIGluIEIzUmVkdWNlU3Ry
ZW5ndGggdGhlIG5vbi1sb2NhbCBvcHRpbWl6YXRpb25zIGZvciBCcmFuY2ggYW5kIENoZWNrLgor
ICAgICAgICBJIGFsc28gaGFkIHRvIG1vdmUgSW50UmFuZ2UgdG8gaXRzIG93biBCM0ludFJhbmdl
LmggZmlsZSwgc2luY2UgaXQgaXMgbm93IHVzZWQgYnkgQjNQZWVwaG9sZU9wdGltaXplci5jcHAg
YW5kIG5vdCBCM1JlZHVjZVN0cmVuZ3RoLmNwcAorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYXMg
dGhpcyBpcyBhIHJlZmFjdG9yIGFuZCBhbGwgb2YgdGhpcyBjb2RlIGlzIGFscmVhZHkgdGVzdGVk
LgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBiMy9CM0R1cGxpY2F0ZVRhaWxzLmNw
cDoKKyAgICAgICAgKiBiMy9CM0ludFJhbmdlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6
SW50UmFuZ2U6OkludFJhbmdlKToKKyAgICAgICAgKEpTQzo6QjM6OkludFJhbmdlOjp0b3ApOgor
ICAgICAgICAoSlNDOjpCMzo6SW50UmFuZ2U6OnJhbmdlRm9yTWFzayk6CisgICAgICAgIChKU0M6
OkIzOjpJbnRSYW5nZTo6cmFuZ2VGb3JaU2hyKToKKyAgICAgICAgKEpTQzo6QjM6OkludFJhbmdl
OjptaW4gY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6SW50UmFuZ2U6Om1heCBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkIzOjpJbnRSYW5nZTo6ZHVtcCBjb25zdCk6CisgICAgICAgIChKU0M6OkIz
OjpJbnRSYW5nZTo6Y291bGRPdmVyZmxvd0FkZCk6CisgICAgICAgIChKU0M6OkIzOjpJbnRSYW5n
ZTo6Y291bGRPdmVyZmxvd1N1Yik6CisgICAgICAgIChKU0M6OkIzOjpJbnRSYW5nZTo6Y291bGRP
dmVyZmxvd011bCk6CisgICAgICAgIChKU0M6OkIzOjpJbnRSYW5nZTo6c2hsKToKKyAgICAgICAg
KEpTQzo6QjM6OkludFJhbmdlOjpzU2hyKToKKyAgICAgICAgKEpTQzo6QjM6OkludFJhbmdlOjp6
U2hyKToKKyAgICAgICAgKEpTQzo6QjM6OkludFJhbmdlOjphZGQpOgorICAgICAgICAoSlNDOjpC
Mzo6SW50UmFuZ2U6OnN1Yik6CisgICAgICAgIChKU0M6OkIzOjpJbnRSYW5nZTo6bXVsKToKKyAg
ICAgICAgKiBiMy9CM0xvd2VyTWFjcm9zLmNwcDoKKyAgICAgICAgKiBiMy9CM1BlZXBob2xlT3B0
aW1pemVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6
YXBwZW5kVG9DdXJyZW50QmxvY2spOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6
ZXI6OmVtaXQpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZU9w
YXF1ZSk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlQWRkKToK
KyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VTdWIpOgorICAgICAg
ICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZU5lZyk6CisgICAgICAgIChKU0M6
OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlTXVsKToKKyAgICAgICAgKEpTQzo6QjM6OlBl
ZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VEaXYpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVP
cHRpbWl6ZXI6OnJlZHVjZVVEaXYpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6
ZXI6OnJlZHVjZU1vZCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVk
dWNlVU1vZCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlQml0
QW5kKToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VCaXRPcik6
CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlQml0WG9yKToKKyAg
ICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VTaGwpOgorICAgICAgICAo
SlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVNTaHIpOgorICAgICAgICAoSlNDOjpC
Mzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVpTaHIpOgorICAgICAgICAoSlNDOjpCMzo6UGVl
cGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVJvdFIpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVP
cHRpbWl6ZXI6OnJlZHVjZVJvdEwpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6
ZXI6OnJlZHVjZUFicyk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVk
dWNlQ2VpbCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlRmxv
b3IpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVNxcnQpOgor
ICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUJpdHdpc2VDYXN0KToK
KyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VTRXh0OCk6CisgICAg
ICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlU0V4dDE2KToKKyAgICAgICAg
KEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VTRXh0MzIpOgorICAgICAgICAoSlND
OjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVpFeHQzMik6CisgICAgICAgIChKU0M6OkIz
OjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlVHJ1bmMpOgorICAgICAgICAoSlNDOjpCMzo6UGVl
cGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUlUb0QpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVP
cHRpbWl6ZXI6OnJlZHVjZUlUb0YpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6
ZXI6OnJlZHVjZUZsb2F0VG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRp
bWl6ZXI6OnJlZHVjZURvdWJsZVRvRmxvYXQpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVP
cHRpbWl6ZXI6OnJlZHVjZVNlbGVjdCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGlt
aXplcjo6cmVkdWNlTG9hZFN0b3JlKToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1p
emVyOjpyZWR1Y2VFcXVhbCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6
cmVkdWNlTm90RXF1YWwpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnJl
ZHVjZUVxdWFsT3JVbm9yZGVyZWQpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6
ZXI6OnJlZHVjZUxlc3NUaGFuKToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVy
OjpyZWR1Y2VHcmVhdGVyVGhhbik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXpl
cjo6cmVkdWNlTGVzc0VxdWFsKToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVy
OjpyZWR1Y2VHcmVhdGVyRXF1YWwpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6
ZXI6OnJlZHVjZUFib3ZlKToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpy
ZWR1Y2VCZWxvdyk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNl
QWJvdmVFcXVhbCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNl
QmVsb3dFcXVhbCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6dHJ5UmVk
dWNlKToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjp0cnlTaW1wbGlmeUJy
YW5jaCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6dHJ5U2ltcGxpZnlD
Q2FsbCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6dHJ5U2ltcGxpZnlD
aGVja0FkZCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6dHJ5U2ltcGxp
ZnlDaGVja1N1Yik6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6dHJ5U2lt
cGxpZnlDaGVja011bCk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6dHJ5
U2ltcGxpZnlDaGVjayk6CisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6c2hv
dWxkR29CZWZvcmUpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OnRyeVJl
ZHVjZU11bERpc3RyaWJ1dGl2aXR5KToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1p
emVyOjp0cnlSZWR1Y2VCaXRBbmREaXN0cmlidXRpdml0eSk6CisgICAgICAgIChKU0M6OkIzOjpQ
ZWVwaG9sZU9wdGltaXplcjo6dHJ5UmVkdWNlU2hpZnRPclJvdGF0ZSk6CisgICAgICAgIChKU0M6
OkIzOjpQZWVwaG9sZU9wdGltaXplcjo6cmFuZ2VGb3IpOgorICAgICAgICAqIGIzL0IzUGVlcGhv
bGVPcHRpbWl6ZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQZWVwaG9sZU9wdGltaXpl
cjo6UGVlcGhvbGVPcHRpbWl6ZXIpOgorICAgICAgICAoSlNDOjpCMzo6UGVlcGhvbGVPcHRpbWl6
ZXI6OnNldEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OlBlZXBob2xlT3B0aW1pemVyOjpzZXRC
bG9jayk6CisgICAgICAgICogYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHA6CisgICAgICAgICogYjMv
QjNWYWxpZGF0ZS5jcHA6CisgICAgICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6
QjM6OnRlc3ROZWdNdWxBcmdJbW0pOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEZsb2F0RXF1YWxP
clVub3JkZXJlZERvbnRGb2xkKToKKyAgICAgICAgKiBmdGwvRlRMT3V0cHV0LmNwcDoKKyAgICAg
ICAgKEpTQzo6RlRMOjpPdXRwdXQ6Ok91dHB1dCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0
OjphcHBlbmRUbyk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpvcGFxdWUpOgorICAgICAg
ICAoSlNDOjpGVEw6Ok91dHB1dDo6YWRkKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OnN1
Yik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjptdWwpOgorICAgICAgICAoSlNDOjpGVEw6
Ok91dHB1dDo6ZGl2KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmNoaWxsRGl2KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6Om1vZCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0
OjpjaGlsbE1vZCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpuZWcpOgorICAgICAgICAo
SlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlQWRkKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6
OmRvdWJsZVN1Yik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpkb3VibGVNdWwpOgorICAg
ICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlRGl2KToKKyAgICAgICAgKEpTQzo6RlRMOjpP
dXRwdXQ6OmRvdWJsZU1vZCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpiaXRBbmQpOgor
ICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6Yml0T3IpOgorICAgICAgICAoSlNDOjpGVEw6Ok91
dHB1dDo6Yml0WG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OnNobCk6CisgICAgICAg
IChKU0M6OkZUTDo6T3V0cHV0OjphU2hyKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmxT
aHIpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6Yml0Tm90KToKKyAgICAgICAgKEpTQzo6
RlRMOjpPdXRwdXQ6OmxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZG91
YmxlQWJzKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmRvdWJsZUNlaWwpOgorICAgICAg
ICAoSlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlRmxvb3IpOgorICAgICAgICAoSlNDOjpGVEw6Ok91
dHB1dDo6ZG91YmxlUG93aSk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpkb3VibGVTcXJ0
KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OnNpZ25FeHQzMlRvNjQpOgorICAgICAgICAo
SlNDOjpGVEw6Ok91dHB1dDo6emVyb0V4dCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpp
bnRUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpjYXN0VG9JbnQzMik6Cisg
ICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpkb3VibGVUb0Zsb2F0KToKKyAgICAgICAgKEpTQzo6
RlRMOjpPdXRwdXQ6OmZsb2F0VG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6
ZXF1YWwpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bm90RXF1YWwpOgorICAgICAgICAo
SlNDOjpGVEw6Ok91dHB1dDo6YWJvdmUpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6YWJv
dmVPckVxdWFsKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmJlbG93KToKKyAgICAgICAg
KEpTQzo6RlRMOjpPdXRwdXQ6OmJlbG93T3JFcXVhbCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0
cHV0OjpncmVhdGVyVGhhbik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpncmVhdGVyVGhh
bk9yRXF1YWwpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bGVzc1RoYW4pOgorICAgICAg
ICAoSlNDOjpGVEw6Ok91dHB1dDo6bGVzc1RoYW5PckVxdWFsKToKKyAgICAgICAgKEpTQzo6RlRM
OjpPdXRwdXQ6OmRvdWJsZUVxdWFsKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmRvdWJs
ZUVxdWFsT3JVbm9yZGVyZWQpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlTm90
RXF1YWxPclVub3JkZXJlZCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpkb3VibGVMZXNz
VGhhbik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpkb3VibGVMZXNzVGhhbk9yRXF1YWwp
OgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlR3JlYXRlclRoYW4pOgorICAgICAg
ICAoSlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlR3JlYXRlclRoYW5PckVxdWFsKToKKyAgICAgICAg
KEpTQzo6RlRMOjpPdXRwdXQ6OmlzWmVybzMyKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6
Om5vdFplcm8zMik6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojppc1plcm82NCk6CisgICAg
ICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpub3RaZXJvNjQpOgorICAgICAgICAoSlNDOjpGVEw6Ok91
dHB1dDo6c2VsZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmJpdENhc3QpOgorICAg
ICAgICAqIGZ0bC9GVExPdXRwdXQuaDoKKwogMjAxOS0wNC0yMyAgRGV2aW4gUm91c3NvICA8ZHJv
dXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogVW5jYXVnaHQgRXhjZXB0
aW9uOiBudWxsIGlzIG5vdCBhbiBvYmplY3QgKGV2YWx1YXRpbmcgJ3RoaXMub3duZXJEb2N1bWVu
dC5mcmFtZUlkZW50aWZpZXInKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDI0NDU2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04NTgsNiArODU4LDgg
QEAKIAkJMzM5NUM3MDcyMjU1NUY2RDAwQkRCRkFEIC8qIEIzRWxpbWluYXRlRGVhZENvZGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzOTVDNzA1MjI1
NTVGNkQwMEJEQkZBRCAvKiBCM0VsaW1pbmF0ZURlYWRDb2RlLmggKi87IH07CiAJCTMzQjJBNTQ3
MjI2NTM0ODEwMDVBMEY3OSAvKiBCM1ZhbHVlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkIxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
VmFsdWVJbmxpbmVzLmggKi87IH07CiAJCTMzQjJBNTQ4MjI2NTQzQkYwMDVBMEY3OSAvKiBGVExM
b3dlckRGR1RvQjMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQTBBMDQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9CMy5jcHAgKi87
IH07CisJCTMzRTk3MTU1MjI2N0U0REEwMEQxQjg1NiAvKiBCM1BlZXBob2xlT3B0aW1pemVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0U5NzE1MjIy
NjdFNEQ5MDBEMUI4NTYgLyogQjNQZWVwaG9sZU9wdGltaXplci5oICovOyB9OworCQkzM0U5NzE1
NjIyNjdFNERBMDBEMUI4NTYgLyogQjNJbnRSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNFOTcxNTMyMjY3RTREOTAwRDFCODU2IC8qIEIzSW50
UmFuZ2UuaCAqLzsgfTsKIAkJMzcxRDg0MkQxN0M5OEI2RTAwRUNGOTk0IC8qIGxpYnouZHlsaWIg
aW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFEODQy
QzE3Qzk4QjZFMDBFQ0Y5OTQgLyogbGliei5keWxpYiAqLzsgfTsKIAkJMzdDNzM4RDIxRURCNTZF
NDAwM0YyQjBCIC8qIFBhcnNlSW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzN0M3MzhEMTFFREI1NjcyMDAzRjJCMEIgLyogUGFyc2VJbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0MTI5NTI3NzFE
MkNGNkJDMDBFNzhCODkgLyogYnVpbHRpbnNfZ2VuZXJhdGVfaW50ZXJuYWxzX3dyYXBwZXJfaGVh
ZGVyLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEy
OTUyNzMxRDJDRjZBQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFw
cGVyX2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMzM3Miw2ICszMzc0LDkgQEAKIAkJMzM5NUM3MDQyMjU1NUY2QzAwQkRCRkFEIC8q
IEIzRWxpbWluYXRlRGVhZENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQjNFbGltaW5hdGVEZWFkQ29kZS5jcHA7IHBhdGggPSBiMy9CM0VsaW1pbmF0ZURlYWRD
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzM5NUM3MDUyMjU1NUY2RDAw
QkRCRkFEIC8qIEIzRWxpbWluYXRlRGVhZENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNFbGltaW5hdGVEZWFkQ29kZS5oOyBwYXRoID0gYjMvQjNFbGltaW5hdGVEZWFk
Q29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzM0IyQTU0NTIyNjUxRDUzMDA1
QTBGNzkgLyogTWFya2VkU3BhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2VkU3BhY2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0U5NzE1MTIyNjdFNEQ4MDBEMUI4
NTYgLyogQjNQZWVwaG9sZU9wdGltaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBCM1BlZXBob2xlT3B0aW1pemVyLmNwcDsgcGF0aCA9IGIzL0IzUGVlcGhvbGVP
cHRpbWl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0U5NzE1MjIyNjdF
NEQ5MDBEMUI4NTYgLyogQjNQZWVwaG9sZU9wdGltaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCM1BlZXBob2xlT3B0aW1pemVyLmg7IHBhdGggPSBiMy9CM1BlZXBob2xl
T3B0aW1pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzRTk3MTUzMjI2N0U0
RDkwMEQxQjg1NiAvKiBCM0ludFJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEIzSW50UmFuZ2UuaDsgcGF0aCA9IGIzL0IzSW50UmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzcxMTlBNzcyMENDQjVEQzAwMkM2REM5IC8qIFdlYktpdFRhcmdldENv
bmRpdGlvbmFscy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBXZWJLaXRUYXJnZXRDb25kaXRpb25h
bHMueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MUQ4NDJDMTdDOThC
NkUwMEVDRjk5NCAvKiBsaWJ6LmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJ6LmR5
bGliOyBwYXRoID0gdXNyL2xpYi9saWJ6LmR5bGliOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsgfTsK
IAkJMzdDNzM4RDExRURCNTY3MjAwM0YyQjBCIC8qIFBhcnNlSW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlSW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NDI0LDYgKzU0MjksNyBAQAogCQkJCURDNjlCOTlCMUQxNUY5MEYwMDJFM0MwMCAvKiBC
M0luZmVyU3dpdGNoZXMuaCAqLywKIAkJCQkwRkVDODVCNDFCRTE0NjJGMDA4MEZGNzQgLyogQjNJ
bnNlcnRpb25TZXQuY3BwICovLAogCQkJCTBGRUM4NUI1MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0lu
c2VydGlvblNldC5oICovLAorCQkJCTMzRTk3MTUzMjI2N0U0RDkwMEQxQjg1NiAvKiBCM0ludFJh
bmdlLmggKi8sCiAJCQkJMEZFQzg1QjYxQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5zZXJ0aW9uU2V0
SW5saW5lcy5oICovLAogCQkJCTBGREY2N0QwMUQ5QzYwODYwMDFCOTgyNSAvKiBCM0tpbmQuY3Bw
ICovLAogCQkJCTBGREY2N0QxMUQ5QzYwODYwMDFCOTgyNSAvKiBCM0tpbmQuaCAqLywKQEAgLTU0
NjAsNiArNTQ2Niw4IEBACiAJCQkJMEZFQzg0REQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hw
b2ludFZhbHVlLmNwcCAqLywKIAkJCQkwRkVDODRERTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRj
aHBvaW50VmFsdWUuaCAqLywKIAkJCQk3OTlFRjdDMzFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1Rv
T3JpZ2luTWFwLmggKi8sCisJCQkJMzNFOTcxNTEyMjY3RTREODAwRDFCODU2IC8qIEIzUGVlcGhv
bGVPcHRpbWl6ZXIuY3BwICovLAorCQkJCTMzRTk3MTUyMjI2N0U0RDkwMEQxQjg1NiAvKiBCM1Bl
ZXBob2xlT3B0aW1pemVyLmggKi8sCiAJCQkJMEZFQzg0REYxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
UGhhc2VTY29wZS5jcHAgKi8sCiAJCQkJMEZFQzg0RTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhh
c2VTY29wZS5oICovLAogCQkJCTBGMzczMDhBMUMwQkQyOTEwMDA1MkJGQSAvKiBCM1BoaUNoaWxk
cmVuLmNwcCAqLywKQEAgLTg4MDIsNiArODgxMCw3IEBACiAJCQkJMEZDOTdGMzQxODIwMjBENzAw
MkM5QjI2IC8qIENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZEOEEzMTQxN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY2NjRDRTgxREEzMDRFRjAwQjAwQTExIC8qIENvZGVCbG9ja1NldElubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTMzRTk3MTU1MjI2N0U0REEwMEQxQjg1NiAvKiBCM1Bl
ZXBob2xlT3B0aW1pemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk2RUJCMzE2Njc2RUY2MDA4
QkFERTMgLyogQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0Yx
ODIyMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
RTExNkIxMEZFNzVBQzgwMEI1MTJCQyAvKiBDb2RlTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLApA
QCAtODkwNyw2ICs4OTE2LDcgQEAKIAkJCQlBNzdBNDI0MjE3QTBCQkZEMDBBOERCODEgLyogREZH
Q2xvYmJlclNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzQzFGMUIxQjg2OEU3OTAwQUJCMDhC
IC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA0Mzk2RTFC
MDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMzNFOTcxNTYyMjY3RTREQTAwRDFCODU2IC8qIEIzSW50UmFuZ2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGN0IyOTREMTRDM0NENEMwMDdDM0RCMSAvKiBERkdDb21tb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRUEwQTMyMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjM4QjAxODE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRp
b25LZXkuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJj
ZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAko
cmV2aXNpb24gMjQ0NTY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xNTAsNiArMTUwLDcgQEAKIGIzL0IzT3JpZ2luRHVtcC5jcHAKIGIz
L0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCiBiMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAKK2IzL0Iz
UGVlcGhvbGVPcHRpbWl6ZXIuY3BwCiBiMy9CM1BoYXNlU2NvcGUuY3BwCiBiMy9CM1BoaUNoaWxk
cmVuLmNwcAogYjMvQjNQcm9jZWR1cmUuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNEdXBsaWNhdGVUYWlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRHVwbGljYXRlVGFpbHMuY3BwCShyZXZpc2lvbiAyNDQ1NjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNEdXBsaWNhdGVUYWlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY2LDcgKzY2LDcgQEAKICAgICAgICAgYnJlYWtDcml0aWNhbEVkZ2VzKG1fcHJvYyk7CiAgICAg
ICAgIAogICAgICAgICAvLyBGaW5kIGJsb2NrcyB0aGF0IHdvdWxkIGJlIGNhbmRpZGF0ZXMgZm9y
IHRhaWwgZHVwbGljYXRpb24uIFRoZXkgbXVzdCBiZSBzbWFsbCBlbm91Z2gKLSAgICAgICAgLy8g
YW5kIHRoZXkgbXVjaCBub3QgaGF2ZSB0b28gbWFueSBzdWNjZXNzb3JzLgorICAgICAgICAvLyBh
bmQgdGhleSBtdXN0IG5vdCBoYXZlIHRvbyBtYW55IHN1Y2Nlc3NvcnMuCiAKICAgICAgICAgbV9w
cm9jLnJlc2V0VmFsdWVPd25lcnMoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzSW50UmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJ
bnRSYW5nZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0lu
dFJhbmdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNDAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJCM1R5cGUuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJl
YW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIEZJWE1FOiBUaGlz
IEludFJhbmdlIHN0dWZmIHNob3VsZCBiZSByZWZhY3RvcmVkIGludG8gYSBnZW5lcmFsIGFic3Ry
YWN0IGRvbWFpbi4KKy8vIEl0IGNvdWxkIGVhc2lseSBiZSBleHRlbmRlZCBpbiBsb3RzIG9mIGRp
cmVjdGlvbnMsIGluY2x1ZGluZyBhIGtub3duQml0cyBhbmFseXNpcywgc3VwcG9ydGluZyBtYW55
IG1vcmUgb3Bjb2RlcywgYmVpbmcgc2lnbmlmaWNhbnRseSBtb3JlIHByZWNpc2UsIGV0Yy4uCitj
bGFzcyBJbnRSYW5nZSB7CitwdWJsaWM6CisgICAgSW50UmFuZ2UoKQorICAgIHsKKyAgICB9CisK
KyAgICBJbnRSYW5nZShpbnQ2NF90IG1pbiwgaW50NjRfdCBtYXgpCisgICAgICAgIDogbV9taW4o
bWluKQorICAgICAgICAsIG1fbWF4KG1heCkKKyAgICB7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgSW50UmFuZ2UgdG9wKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBJbnRSYW5nZShzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptaW4oKSwgc3RkOjpudW1lcmlj
X2xpbWl0czxUPjo6bWF4KCkpOworICAgIH0KKworICAgIHN0YXRpYyBJbnRSYW5nZSB0b3AoVHlw
ZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW50
MzI6CisgICAgICAgICAgICByZXR1cm4gdG9wPGludDMyX3Q+KCk7CisgICAgICAgIGNhc2UgSW50
NjQ6CisgICAgICAgICAgICByZXR1cm4gdG9wPGludDY0X3Q+KCk7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
cmV0dXJuIEludFJhbmdlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIHN0YXRpYyBJbnRSYW5nZSByYW5nZUZvck1hc2soVCBtYXNrKQorICAgIHsK
KyAgICAgICAgaWYgKCEobWFzayArIDEpKQorICAgICAgICAgICAgcmV0dXJuIHRvcDxUPigpOwor
ICAgICAgICByZXR1cm4gSW50UmFuZ2UoMCwgbWFzayk7CisgICAgfQorCisgICAgc3RhdGljIElu
dFJhbmdlIHJhbmdlRm9yTWFzayhpbnQ2NF90IG1hc2ssIFR5cGUgdHlwZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgcmV0
dXJuIHJhbmdlRm9yTWFzazxpbnQzMl90PihzdGF0aWNfY2FzdDxpbnQzMl90PihtYXNrKSk7Cisg
ICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICByZXR1cm4gcmFuZ2VGb3JNYXNrPGludDY0
X3Q+KG1hc2spOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOworICAgICAgICB9
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgSW50UmFuZ2Ug
cmFuZ2VGb3JaU2hyKGludDMyX3Qgc2hpZnRBbW91bnQpCisgICAgeworICAgICAgICB0eXBlbmFt
ZSBzdGQ6Om1ha2VfdW5zaWduZWQ8VD46OnR5cGUgbWFzayA9IDA7CisgICAgICAgIG1hc2stLTsK
KyAgICAgICAgbWFzayA+Pj0gc2hpZnRBbW91bnQ7CisgICAgICAgIHJldHVybiByYW5nZUZvck1h
c2s8VD4oc3RhdGljX2Nhc3Q8VD4obWFzaykpOworICAgIH0KKworICAgIHN0YXRpYyBJbnRSYW5n
ZSByYW5nZUZvclpTaHIoaW50MzJfdCBzaGlmdEFtb3VudCwgVHlwZSB0eXBlKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICBy
ZXR1cm4gcmFuZ2VGb3JaU2hyPGludDMyX3Q+KHNoaWZ0QW1vdW50KTsKKyAgICAgICAgY2FzZSBJ
bnQ2NDoKKyAgICAgICAgICAgIHJldHVybiByYW5nZUZvclpTaHI8aW50NjRfdD4oc2hpZnRBbW91
bnQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOworICAgICAgICB9CisgICAg
fQorCisgICAgaW50NjRfdCBtaW4oKSBjb25zdCB7IHJldHVybiBtX21pbjsgfQorICAgIGludDY0
X3QgbWF4KCkgY29uc3QgeyByZXR1cm4gbV9tYXg7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0LnByaW50KCJbIiwgbV9taW4sICIs
IiwgbV9tYXgsICJdIik7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBi
b29sIGNvdWxkT3ZlcmZsb3dBZGQoY29uc3QgSW50UmFuZ2UmIG90aGVyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHN1bU92ZXJmbG93czxUPihtX21pbiwgb3RoZXIubV9taW4pCisgICAgICAgICAg
ICB8fCBzdW1PdmVyZmxvd3M8VD4obV9taW4sIG90aGVyLm1fbWF4KQorICAgICAgICAgICAgfHwg
c3VtT3ZlcmZsb3dzPFQ+KG1fbWF4LCBvdGhlci5tX21pbikKKyAgICAgICAgICAgIHx8IHN1bU92
ZXJmbG93czxUPihtX21heCwgb3RoZXIubV9tYXgpOworICAgIH0KKworICAgIGJvb2wgY291bGRP
dmVyZmxvd0FkZChjb25zdCBJbnRSYW5nZSYgb3RoZXIsIFR5cGUgdHlwZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgcmV0
dXJuIGNvdWxkT3ZlcmZsb3dBZGQ8aW50MzJfdD4ob3RoZXIpOworICAgICAgICBjYXNlIEludDY0
OgorICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dBZGQ8aW50NjRfdD4ob3RoZXIpOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGJvb2wgY291bGRPdmVyZmxvd1N1
Yihjb25zdCBJbnRSYW5nZSYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gZGlmZmVyZW5j
ZU92ZXJmbG93czxUPihtX21pbiwgb3RoZXIubV9taW4pCisgICAgICAgICAgICB8fCBkaWZmZXJl
bmNlT3ZlcmZsb3dzPFQ+KG1fbWluLCBvdGhlci5tX21heCkKKyAgICAgICAgICAgIHx8IGRpZmZl
cmVuY2VPdmVyZmxvd3M8VD4obV9tYXgsIG90aGVyLm1fbWluKQorICAgICAgICAgICAgfHwgZGlm
ZmVyZW5jZU92ZXJmbG93czxUPihtX21heCwgb3RoZXIubV9tYXgpOworICAgIH0KKworICAgIGJv
b2wgY291bGRPdmVyZmxvd1N1Yihjb25zdCBJbnRSYW5nZSYgb3RoZXIsIFR5cGUgdHlwZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAg
ICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dTdWI8aW50MzJfdD4ob3RoZXIpOworICAgICAgICBj
YXNlIEludDY0OgorICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dTdWI8aW50NjRfdD4o
b3RoZXIpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGJvb2wgY291bGRP
dmVyZmxvd011bChjb25zdCBJbnRSYW5nZSYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4g
cHJvZHVjdE92ZXJmbG93czxUPihtX21pbiwgb3RoZXIubV9taW4pCisgICAgICAgICAgICB8fCBw
cm9kdWN0T3ZlcmZsb3dzPFQ+KG1fbWluLCBvdGhlci5tX21heCkKKyAgICAgICAgICAgIHx8IHBy
b2R1Y3RPdmVyZmxvd3M8VD4obV9tYXgsIG90aGVyLm1fbWluKQorICAgICAgICAgICAgfHwgcHJv
ZHVjdE92ZXJmbG93czxUPihtX21heCwgb3RoZXIubV9tYXgpOworICAgIH0KKworICAgIGJvb2wg
Y291bGRPdmVyZmxvd011bChjb25zdCBJbnRSYW5nZSYgb3RoZXIsIFR5cGUgdHlwZSkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAg
ICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dNdWw8aW50MzJfdD4ob3RoZXIpOworICAgICAgICBjYXNl
IEludDY0OgorICAgICAgICAgICAgcmV0dXJuIGNvdWxkT3ZlcmZsb3dNdWw8aW50NjRfdD4ob3Ro
ZXIpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIEludFJhbmdlIHNobChp
bnQzMl90IHNoaWZ0QW1vdW50KQorICAgIHsKKyAgICAgICAgVCBuZXdNaW4gPSBzdGF0aWNfY2Fz
dDxUPihtX21pbikgPDwgc3RhdGljX2Nhc3Q8VD4oc2hpZnRBbW91bnQpOworICAgICAgICBUIG5l
d01heCA9IHN0YXRpY19jYXN0PFQ+KG1fbWF4KSA8PCBzdGF0aWNfY2FzdDxUPihzaGlmdEFtb3Vu
dCk7CisKKyAgICAgICAgaWYgKChuZXdNaW4gPj4gc2hpZnRBbW91bnQpICE9IHN0YXRpY19jYXN0
PFQ+KG1fbWluKSkKKyAgICAgICAgICAgIG5ld01pbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46
Om1pbigpOworICAgICAgICBpZiAoKG5ld01heCA+PiBzaGlmdEFtb3VudCkgIT0gc3RhdGljX2Nh
c3Q8VD4obV9tYXgpKQorICAgICAgICAgICAgbmV3TWF4ID0gc3RkOjpudW1lcmljX2xpbWl0czxU
Pjo6bWF4KCk7CisKKyAgICAgICAgcmV0dXJuIEludFJhbmdlKG5ld01pbiwgbmV3TWF4KTsKKyAg
ICB9CisKKyAgICBJbnRSYW5nZSBzaGwoaW50MzJfdCBzaGlmdEFtb3VudCwgVHlwZSB0eXBlKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAg
ICAgICAgICByZXR1cm4gc2hsPGludDMyX3Q+KHNoaWZ0QW1vdW50KTsKKyAgICAgICAgY2FzZSBJ
bnQ2NDoKKyAgICAgICAgICAgIHJldHVybiBzaGw8aW50NjRfdD4oc2hpZnRBbW91bnQpOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOworICAgICAgICB9CisgICAgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBJbnRSYW5nZSBzU2hyKGludDMyX3Qgc2hpZnRBbW91
bnQpCisgICAgeworICAgICAgICBUIG5ld01pbiA9IHN0YXRpY19jYXN0PFQ+KG1fbWluKSA+PiBz
dGF0aWNfY2FzdDxUPihzaGlmdEFtb3VudCk7CisgICAgICAgIFQgbmV3TWF4ID0gc3RhdGljX2Nh
c3Q8VD4obV9tYXgpID4+IHN0YXRpY19jYXN0PFQ+KHNoaWZ0QW1vdW50KTsKKworICAgICAgICBy
ZXR1cm4gSW50UmFuZ2UobmV3TWluLCBuZXdNYXgpOworICAgIH0KKworICAgIEludFJhbmdlIHNT
aHIoaW50MzJfdCBzaGlmdEFtb3VudCwgVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICByZXR1cm4gc1Nocjxp
bnQzMl90PihzaGlmdEFtb3VudCk7CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICBy
ZXR1cm4gc1NocjxpbnQ2NF90PihzaGlmdEFtb3VudCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJu
IEludFJhbmdlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIEludFJhbmdlIHpTaHIoaW50MzJfdCBzaGlmdEFtb3VudCkKKyAgICB7CisgICAgICAg
IC8vIFRoaXMgaXMgYW4gYXdrd2FyZCBjb3JuZXIgY2FzZSBmb3IgYWxsIG9mIHRoZSBvdGhlciBs
b2dpYy4KKyAgICAgICAgaWYgKCFzaGlmdEFtb3VudCkKKyAgICAgICAgICAgIHJldHVybiAqdGhp
czsKKworICAgICAgICAvLyBJZiB0aGUgaW5wdXQgcmFuZ2UgbWF5IGJlIG5lZ2F0aXZlLCB0aGVu
IGFsbCB3ZSBjYW4gc2F5IGFib3V0IHRoZSBvdXRwdXQgcmFuZ2UgaXMgdGhhdCBpdAorICAgICAg
ICAvLyB3aWxsIGJlIG1hc2tlZC4gVGhhdCdzIGJlY2F1c2UgLTEgcmlnaHQgc2hpZnRlZCBqdXN0
IHByb2R1Y2VzIHRoYXQgbWFzay4KKyAgICAgICAgaWYgKG1fbWluIDwgMCkKKyAgICAgICAgICAg
IHJldHVybiByYW5nZUZvclpTaHI8VD4oc2hpZnRBbW91bnQpOworCisgICAgICAgIC8vIElmIHRo
ZSBpbnB1dCByYW5nZSBpcyBub24tbmVnYXRpdmUsIHRoZW4gdGhpcyBqdXN0IGJyaW5ncyB0aGUg
cmFuZ2UgY2xvc2VyIHRvIHplcm8uCisgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjptYWtl
X3Vuc2lnbmVkPFQ+Ojp0eXBlIFVuc2lnbmVkVDsKKyAgICAgICAgVW5zaWduZWRUIG5ld01pbiA9
IHN0YXRpY19jYXN0PFVuc2lnbmVkVD4obV9taW4pID4+IHN0YXRpY19jYXN0PFVuc2lnbmVkVD4o
c2hpZnRBbW91bnQpOworICAgICAgICBVbnNpZ25lZFQgbmV3TWF4ID0gc3RhdGljX2Nhc3Q8VW5z
aWduZWRUPihtX21heCkgPj4gc3RhdGljX2Nhc3Q8VW5zaWduZWRUPihzaGlmdEFtb3VudCk7CisK
KyAgICAgICAgcmV0dXJuIEludFJhbmdlKG5ld01pbiwgbmV3TWF4KTsKKyAgICB9CisKKyAgICBJ
bnRSYW5nZSB6U2hyKGludDMyX3Qgc2hpZnRBbW91bnQsIFR5cGUgdHlwZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgcmV0
dXJuIHpTaHI8aW50MzJfdD4oc2hpZnRBbW91bnQpOworICAgICAgICBjYXNlIEludDY0OgorICAg
ICAgICAgICAgcmV0dXJuIHpTaHI8aW50NjRfdD4oc2hpZnRBbW91bnQpOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIHJldHVybiBJbnRSYW5nZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICBJbnRSYW5nZSBhZGQoY29uc3QgSW50UmFuZ2UmIG90aGVyKQorICAg
IHsKKyAgICAgICAgaWYgKGNvdWxkT3ZlcmZsb3dBZGQ8VD4ob3RoZXIpKQorICAgICAgICAgICAg
cmV0dXJuIHRvcDxUPigpOworICAgICAgICByZXR1cm4gSW50UmFuZ2UobV9taW4gKyBvdGhlci5t
X21pbiwgbV9tYXggKyBvdGhlci5tX21heCk7CisgICAgfQorCisgICAgSW50UmFuZ2UgYWRkKGNv
bnN0IEludFJhbmdlJiBvdGhlciwgVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICByZXR1cm4gYWRkPGludDMy
X3Q+KG90aGVyKTsKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIHJldHVybiBhZGQ8
aW50NjRfdD4ob3RoZXIpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSYW5nZSgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBJbnRSYW5nZSBz
dWIoY29uc3QgSW50UmFuZ2UmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKGNvdWxkT3ZlcmZs
b3dTdWI8VD4ob3RoZXIpKQorICAgICAgICAgICAgcmV0dXJuIHRvcDxUPigpOworICAgICAgICBy
ZXR1cm4gSW50UmFuZ2UobV9taW4gLSBvdGhlci5tX21heCwgbV9tYXggLSBvdGhlci5tX21pbik7
CisgICAgfQorCisgICAgSW50UmFuZ2Ugc3ViKGNvbnN0IEludFJhbmdlJiBvdGhlciwgVHlwZSB0
eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW50MzI6
CisgICAgICAgICAgICByZXR1cm4gc3ViPGludDMyX3Q+KG90aGVyKTsKKyAgICAgICAgY2FzZSBJ
bnQ2NDoKKyAgICAgICAgICAgIHJldHVybiBzdWI8aW50NjRfdD4ob3RoZXIpOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIHJldHVybiBJbnRSYW5nZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KKyAgICBJbnRSYW5nZSBtdWwoY29uc3QgSW50UmFuZ2UmIG90aGVyKQor
ICAgIHsKKyAgICAgICAgaWYgKGNvdWxkT3ZlcmZsb3dNdWw8VD4ob3RoZXIpKQorICAgICAgICAg
ICAgcmV0dXJuIHRvcDxUPigpOworICAgICAgICByZXR1cm4gSW50UmFuZ2UoCisgICAgICAgICAg
ICBzdGQ6Om1pbigKKyAgICAgICAgICAgICAgICBzdGQ6Om1pbihtX21pbiAqIG90aGVyLm1fbWlu
LCBtX21pbiAqIG90aGVyLm1fbWF4KSwKKyAgICAgICAgICAgICAgICBzdGQ6Om1pbihtX21heCAq
IG90aGVyLm1fbWluLCBtX21heCAqIG90aGVyLm1fbWF4KSksCisgICAgICAgICAgICBzdGQ6Om1h
eCgKKyAgICAgICAgICAgICAgICBzdGQ6Om1heChtX21pbiAqIG90aGVyLm1fbWluLCBtX21pbiAq
IG90aGVyLm1fbWF4KSwKKyAgICAgICAgICAgICAgICBzdGQ6Om1heChtX21heCAqIG90aGVyLm1f
bWluLCBtX21heCAqIG90aGVyLm1fbWF4KSkpOworICAgIH0KKworICAgIEludFJhbmdlIG11bChj
b25zdCBJbnRSYW5nZSYgb3RoZXIsIFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
dHlwZSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgcmV0dXJuIG11bDxpbnQz
Ml90PihvdGhlcik7CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICByZXR1cm4gbXVs
PGludDY0X3Q+KG90aGVyKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmFuZ2UoKTsKKyAg
ICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQ2NF90IG1fbWluIHsgMCB9OworICAg
IGludDY0X3QgbV9tYXggeyAwIH07Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNMb3dlck1hY3Jvcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJNYWNyb3MuY3BwCShyZXZpc2lvbiAyNDQ1NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNMb3dlck1hY3Jvcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcg
QEAKICNpbmNsdWRlICJCM0luc2VydGlvblNldElubGluZXMuaCIKICNpbmNsdWRlICJCM01lbW9y
eVZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCisjaW5jbHVk
ZSAiQjNQZWVwaG9sZU9wdGltaXplci5oIgogI2luY2x1ZGUgIkIzUGhhc2VTY29wZS5oIgogI2lu
Y2x1ZGUgIkIzUHJvY2VkdXJlSW5saW5lcy5oIgogI2luY2x1ZGUgIkIzU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zLmgiCkBAIC04OCw3ICs4OSw5IEBACiBwcml2YXRlOgogICAgIHZvaWQgcHJvY2Vz
c0N1cnJlbnRCbG9jaygpCiAgICAgeworICAgICAgICBQZWVwaG9sZU9wdGltaXplciBwZWVwaG9s
ZShtX3Byb2MsIG1faW5zZXJ0aW9uU2V0KTsKICAgICAgICAgZm9yIChtX2luZGV4ID0gMDsgbV9p
bmRleCA8IG1fYmxvY2stPnNpemUoKTsgKyttX2luZGV4KSB7CisgICAgICAgICAgICBwZWVwaG9s
ZS5zZXRJbmRleChtX2luZGV4KTsKICAgICAgICAgICAgIG1fdmFsdWUgPSBtX2Jsb2NrLT5hdCht
X2luZGV4KTsKICAgICAgICAgICAgIG1fb3JpZ2luID0gbV92YWx1ZS0+b3JpZ2luKCk7CiAgICAg
ICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7CkBAIC05Niw2ICs5OSw3IEBACiAg
ICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmlzQ2hpbGwoKSkgewogICAgICAgICAgICAgICAg
ICAgICBpZiAoaXNBUk02NCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBiZWZvcmUgPSBtX2Jsb2NrSW5zZXJ0aW9uU2V0LnNwbGl0Rm9yd2FyZChtX2Jsb2NrLCBtX2lu
ZGV4LCAmbV9pbnNlcnRpb25TZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgcGVlcGhvbGUu
c2V0SW5kZXgobV9pbmRleCk7IC8vIHNwbGl0Rm9yd2FyZCByZXNldHMgbV9pbmRleCwgc28gd2Ug
bXVzdCB1cGRhdGUgdGhlIGNvcHkgaW4gcGVlcGhvbGUKICAgICAgICAgICAgICAgICAgICAgICAg
IEJhc2ljQmxvY2sqIHplcm9EZW5DYXNlID0gbV9ibG9ja0luc2VydGlvblNldC5pbnNlcnRCZWZv
cmUobV9ibG9jayk7CiAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBub3JtYWxN
b2RDYXNlID0gbV9ibG9ja0luc2VydGlvblNldC5pbnNlcnRCZWZvcmUobV9ibG9jayk7CiAKQEAg
LTEyNCw3ICsxMjgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlLT51cGRhdGVQ
cmVkZWNlc3NvcnNBZnRlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICBtYWtlRGl2aXNpb25DaGlsbChNb2QpOworICAgICAgICAgICAgICAgICAgICAgICAgbWFrZURp
dmlzaW9uQ2hpbGwoTW9kLCBwZWVwaG9sZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTEzOSw4ICsxNDMsOCBAQAog
ICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KHJlc3VsdCk7
CiAgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChtX3ZhbHVlLT50eXBlKCkgPT0gRmxvYXQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgVmFsdWUqIG51bWVyYXRvckFzRG91YmxlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVl
PihtX2luZGV4LCBGbG9hdFRvRG91YmxlLCBtX29yaWdpbiwgbV92YWx1ZS0+Y2hpbGQoMCkpOwot
ICAgICAgICAgICAgICAgICAgICBWYWx1ZSogZGVub21pbmF0b3JBc0RvdWJsZSA9IG1faW5zZXJ0
aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgRmxvYXRUb0RvdWJsZSwgbV9vcmlnaW4sIG1f
dmFsdWUtPmNoaWxkKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG51bWVyYXRvckFz
RG91YmxlID0gcGVlcGhvbGUucmVkdWNlRmxvYXRUb0RvdWJsZShEb3VibGUsIG1fb3JpZ2luLCBt
X3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBkZW5vbWluYXRv
ckFzRG91YmxlID0gcGVlcGhvbGUucmVkdWNlRmxvYXRUb0RvdWJsZShEb3VibGUsIG1fb3JpZ2lu
LCBtX3ZhbHVlLT5jaGlsZCgxKSk7CiAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBmdW5jdGlv
bkFkZHJlc3MgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3RQdHJWYWx1ZT4obV9pbmRleCwg
bV9vcmlnaW4sIGZtb2REb3VibGUpOwogICAgICAgICAgICAgICAgICAgICBWYWx1ZSogZG91Ymxl
TW9kID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENDYWxsVmFsdWU+KG1faW5kZXgsIERvdWJsZSwg
bV9vcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3RzOjpub25lKCksCkBAIC0x
NDcsMTMgKzE1MSwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25BZGRyZXNz
LAogICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJhdG9yQXNEb3VibGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBkZW5vbWluYXRvckFzRG91YmxlKTsKLSAgICAgICAgICAgICAgICAgICAg
VmFsdWUqIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgRG91
YmxlVG9GbG9hdCwgbV9vcmlnaW4sIGRvdWJsZU1vZCk7CisgICAgICAgICAgICAgICAgICAgIFZh
bHVlKiByZXN1bHQgPSBwZWVwaG9sZS5yZWR1Y2VEb3VibGVUb0Zsb2F0KEZsb2F0LCBtX29yaWdp
biwgZG91YmxlTW9kKTsKICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJ
ZGVudGl0eShyZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNBUk02NCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIFZhbHVlKiBkaXZSZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5k
ZXgsIGNoaWxsKERpdiksIG1fb3JpZ2luLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hp
bGQoMSkpOwotICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbXVsdGlwbGllZEJhY2sgPSBtX2lu
c2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIE11bCwgbV9vcmlnaW4sIGRpdlJlc3Vs
dCwgbV92YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgICAgICBWYWx1ZSogcmVzdWx0
ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBTdWIsIG1fb3JpZ2luLCBt
X3ZhbHVlLT5jaGlsZCgwKSwgbXVsdGlwbGllZEJhY2spOworICAgICAgICAgICAgICAgICAgICBW
YWx1ZSogZGl2UmVzdWx0ID0gcGVlcGhvbGUucmVkdWNlRGl2KG1fdmFsdWUtPnR5cGUoKSwgbV9v
cmlnaW4sIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSwgUGVlcGhvbGVPcHRp
bWl6ZXI6OklzQ2hpbGwpOworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbXVsdGlwbGllZEJh
Y2sgPSBwZWVwaG9sZS5yZWR1Y2VNdWwobV92YWx1ZS0+dHlwZSgpLCBtX29yaWdpbiwgZGl2UmVz
dWx0LCBtX3ZhbHVlLT5jaGlsZCgxKSk7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiByZXN1
bHQgPSBwZWVwaG9sZS5yZWR1Y2VTdWIobV92YWx1ZS0+dHlwZSgpLCBtX29yaWdpbiwgbV92YWx1
ZS0+Y2hpbGQoMCksIG11bHRpcGxpZWRCYWNrKTsKICAgICAgICAgICAgICAgICAgICAgbV92YWx1
ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShyZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KQEAgLTE2Miw5ICsxNjYsOSBAQAogCiAg
ICAgICAgICAgICBjYXNlIFVNb2Q6IHsKICAgICAgICAgICAgICAgICBpZiAoaXNBUk02NCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIFZhbHVlKiBkaXZSZXN1bHQgPSBtX2luc2VydGlvblNldC5p
bnNlcnQ8VmFsdWU+KG1faW5kZXgsIFVEaXYsIG1fb3JpZ2luLCBtX3ZhbHVlLT5jaGlsZCgwKSwg
bV92YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbXVsdGlwbGll
ZEJhY2sgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIE11bCwgbV9vcmln
aW4sIGRpdlJlc3VsdCwgbV92YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgICAgICBW
YWx1ZSogcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBTdWIs
IG1fb3JpZ2luLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbXVsdGlwbGllZEJhY2spOworICAgICAgICAg
ICAgICAgICAgICBWYWx1ZSogZGl2UmVzdWx0ID0gcGVlcGhvbGUucmVkdWNlVURpdihtX3ZhbHVl
LT50eXBlKCksIG1fb3JpZ2luLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkp
OworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbXVsdGlwbGllZEJhY2sgPSBwZWVwaG9sZS5y
ZWR1Y2VNdWwobV92YWx1ZS0+dHlwZSgpLCBtX29yaWdpbiwgZGl2UmVzdWx0LCBtX3ZhbHVlLT5j
aGlsZCgxKSk7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiByZXN1bHQgPSBwZWVwaG9sZS5y
ZWR1Y2VTdWIobV92YWx1ZS0+dHlwZSgpLCBtX29yaWdpbiwgbV92YWx1ZS0+Y2hpbGQoMCksIG11
bHRpcGxpZWRCYWNrKTsKICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJ
ZGVudGl0eShyZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTE3Myw3ICsxNzcsNyBAQAogCiAgICAgICAgICAgICBjYXNl
IERpdjogewogICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5pc0NoaWxsKCkpCi0gICAgICAg
ICAgICAgICAgICAgIG1ha2VEaXZpc2lvbkNoaWxsKERpdik7CisgICAgICAgICAgICAgICAgICAg
IG1ha2VEaXZpc2lvbkNoaWxsKERpdiwgcGVlcGhvbGUpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogCkBAIC0yMjUsMTAgKzIyOSw4IEBACiAgICAgICAgICAgICAgICAg
aWYgKCFpc1g4NigpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIE9uIEFSTSwgdGhlIGxvYWQg
cGFydCBvZiB0aGUgQ0FTIGRvZXMgYSBsb2FkIHdpdGggemVybyBleHRlbnNpb24uIFRoZXJlZm9y
ZSwgd2UgbmVlZAogICAgICAgICAgICAgICAgICAgICAvLyB0byB6ZXJvLWV4dGVuZCB0aGUgaW5w
dXQuCi0gICAgICAgICAgICAgICAgICAgIFZhbHVlKiBtYXNrZWRFeHBlY3RlZFZhbHVlID0gbV9p
bnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5k
ZXgsIEJpdEFuZCwgbV9vcmlnaW4sIGV4cGVjdGVkVmFsdWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnRJbnRDb25zdGFudChtX2luZGV4LCBleHBlY3RlZFZh
bHVlLCBtYXNrKHdpZHRoKSkpOwotICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgVmFsdWUqIG1hc2tWYWx1ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydEludENvbnN0YW50
KG1faW5kZXgsIGV4cGVjdGVkVmFsdWUsIG1hc2sod2lkdGgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgVmFsdWUqIG1hc2tlZEV4cGVjdGVkVmFsdWUgPSBwZWVwaG9sZS5yZWR1Y2VCaXRBbmQobV92
YWx1ZS0+dHlwZSgpLCBtX29yaWdpbiwgZXhwZWN0ZWRWYWx1ZSwgbWFza1ZhbHVlKTsKICAgICAg
ICAgICAgICAgICAgICAgYXRvbWljLT5jaGlsZCgwKSA9IG1hc2tlZEV4cGVjdGVkVmFsdWU7CiAg
ICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQpA
QCAtMzI0LDcgKzMyNiw3IEBACiAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUobV9ibG9j
ayk7CiAgICAgfQogCi0gICAgdm9pZCBtYWtlRGl2aXNpb25DaGlsbChPcGNvZGUgbm9uQ2hpbGxP
cGNvZGUpCisgICAgdm9pZCBtYWtlRGl2aXNpb25DaGlsbChPcGNvZGUgbm9uQ2hpbGxPcGNvZGUs
IFBlZXBob2xlT3B0aW1pemVyJiBwZWVwaG9sZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChub25D
aGlsbE9wY29kZSA9PSBEaXYgfHwgbm9uQ2hpbGxPcGNvZGUgPT0gTW9kKTsKIApAQCAtMzQ4LDE2
ICszNTAsMTcgQEAKICAgICAgICAgLy8gZG9uZToKICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsK
IAorICAgICAgICBUeXBlIHR5cGUgPSBtX3ZhbHVlLT50eXBlKCk7CisKICAgICAgICAgVmFsdWUq
IG51bSA9IG1fdmFsdWUtPmNoaWxkKDApOwogICAgICAgICBWYWx1ZSogZGVuID0gbV92YWx1ZS0+
Y2hpbGQoMSk7CiAKICAgICAgICAgVmFsdWUqIG9uZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydElu
dENvbnN0YW50KG1faW5kZXgsIG1fdmFsdWUsIDEpOwotICAgICAgICBWYWx1ZSogaXNEZW5PSyA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAgICBtX2luZGV4LCBBYm92
ZSwgbV9vcmlnaW4sCi0gICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1f
aW5kZXgsIEFkZCwgbV9vcmlnaW4sIGRlbiwgb25lKSwKLSAgICAgICAgICAgIG9uZSk7CisgICAg
ICAgIFZhbHVlKiBkZW5QbHVzT25lID0gcGVlcGhvbGUucmVkdWNlQWRkKHR5cGUsIG1fb3JpZ2lu
LCBkZW4sIG9uZSk7CisgICAgICAgIFZhbHVlKiBpc0Rlbk9LID0gcGVlcGhvbGUucmVkdWNlQWJv
dmUodHlwZSwgbV9vcmlnaW4sIGRlblBsdXNPbmUsIG9uZSk7CiAKICAgICAgICAgQmFzaWNCbG9j
ayogYmVmb3JlID0gbV9ibG9ja0luc2VydGlvblNldC5zcGxpdEZvcndhcmQobV9ibG9jaywgbV9p
bmRleCwgJm1faW5zZXJ0aW9uU2V0KTsKKyAgICAgICAgcGVlcGhvbGUuc2V0SW5kZXgobV9pbmRl
eCk7CiAKICAgICAgICAgQmFzaWNCbG9jayogbm9ybWFsRGl2Q2FzZSA9IG1fYmxvY2tJbnNlcnRp
b25TZXQuaW5zZXJ0QmVmb3JlKG1fYmxvY2spOwogICAgICAgICBCYXNpY0Jsb2NrKiBzaGFkeURl
bkNhc2UgPSBtX2Jsb2NrSW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZShtX2Jsb2NrKTsKQEAgLTM4
OCw3ICszOTEsNyBAQAogICAgICAgICB6ZXJvRGVuQ2FzZS0+c2V0U3VjY2Vzc29ycyhGcmVxdWVu
dGVkQmxvY2sobV9ibG9jaykpOwogCiAgICAgICAgIGludDY0X3QgYmFkTnVtZXJhdG9yQ29uc3Qg
PSAwOwotICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPnR5cGUoKSkgeworICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKICAgICAgICAgY2FzZSBJbnQzMjoKICAgICAgICAgICAgIGJhZE51bWVyYXRvckNv
bnN0ID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCk7CiAgICAgICAgICAgICBi
cmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BlZXBob2xlT3B0aW1pemVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQZWVwaG9sZU9w
dGltaXplci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UGVlcGhvbGVPcHRpbWl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg1MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCM1BlZXBob2xlT3B0aW1pemVyLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkIz
Q29tcHV0ZURpdmlzaW9uTWFnaWMuaCIKKyNpbmNsdWRlICJCM0luc2VydGlvblNldElubGluZXMu
aCIKKyNpbmNsdWRlICJCM0ludFJhbmdlLmgiCisjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZUlubGlu
ZXMuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1ZhbHVl
LmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6YXBwZW5kVG9DdXJyZW50Qmxv
Y2soVmFsdWUqIHZhbHVlKQoreworICAgIGlmIChtX2luc2VydGlvblNldCkKKyAgICAgICAgcmV0
dXJuIG1faW5zZXJ0aW9uU2V0LT5pbnNlcnRWYWx1ZShtX2luZGV4LCB2YWx1ZSk7CisgICAgQVNT
RVJUKCEhbV9ibG9jayk7CisgICAgbV9ibG9jay0+YXBwZW5kKHZhbHVlKTsKKyAgICByZXR1cm4g
dmFsdWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgorVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjplbWl0KEFyZ3VtZW50cy4uLiBhcmd1
bWVudHMpCit7CisgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKG1fcHJvYy5hZGQ8VmFs
dWVUeXBlPihhcmd1bWVudHMuLi4pKTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpy
ZWR1Y2VPcGFxdWUoVHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGNoaWxkLCBNYXlHaXZlVXBN
b2RlIG1heUdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6IE9wYXF1ZShPcGFxdWUodmFsdWUp
KQorICAgIC8vIEludG8gdGhpczogT3BhcXVlKHZhbHVlKQorICAgIGlmIChjaGlsZC0+b3Bjb2Rl
KCkgPT0gT3BhcXVlKQorICAgICAgICByZXR1cm4gY2hpbGQ7CisKKyAgICByZXR1cm4gbWF5R2l2
ZVVwID09IE1heUdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihPcGFxdWUsIG9yaWdpbiwg
Y2hpbGQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUFkZChUeXBlIHR5
cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIE1heUdpdmVVcE1v
ZGUgbWF5R2l2ZVVwKQoreworICAgIGlmIChzaG91bGRHb0JlZm9yZShyaWdodCwgbGVmdCkpCisg
ICAgICAgIHJldHVybiByZWR1Y2VBZGQodHlwZSwgb3JpZ2luLCByaWdodCwgbGVmdCk7CisKKyAg
ICAvLyBUdXJuIHRoaXM6IEFkZChjb25zdGFudDEsIGNvbnN0YW50MikKKyAgICAvLyBJbnRvIHRo
aXM6IGNvbnN0YW50MSArIGNvbnN0YW50MgorICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBsZWZ0
LT5hZGRDb25zdGFudChtX3Byb2MsIHJpZ2h0KSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3Vy
cmVudEJsb2NrKGNvbnN0YW50KTsKKworICAgIC8vIFR1cm4gdGhpczogQWRkKHZhbHVlLCB6ZXJv
KQorICAgIC8vIEludG8gYW4gSWRlbnRpdHkuCisgICAgLy8KKyAgICAvLyBBZGRpdGlvbiBpcyBz
dWJ0bGUgd2l0aCBkb3VibGVzLiBaZXJvIGlzIG5vdCB0aGUgbmV1dHJhbCB2YWx1ZSwgbmVnYXRp
dmUgemVybyBpczoKKyAgICAvLyAgICAwICsgMCA9IDAKKyAgICAvLyAgICAwICsgLTAgPSAwCisg
ICAgLy8gICAgLTAgKyAwID0gMAorICAgIC8vICAgIC0wICsgLTAgPSAtMAorICAgIGlmIChyaWdo
dC0+aXNJbnQoMCkgfHwgcmlnaHQtPmlzTmVnYXRpdmVaZXJvKCkpCisgICAgICAgIHJldHVybiBs
ZWZ0OworCisgICAgaWYgKGlzSW50KHR5cGUpKSB7CisgICAgICAgIGlmIChsZWZ0LT5vcGNvZGUo
KSA9PSBBZGQpIHsKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBBZGQoQWRkKHZh
bHVlLCBjb25zdGFudDEpLCBjb25zdGFudDIpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEFk
ZCh2YWx1ZSwgY29uc3RhbnQxICsgY29uc3RhbnQyKQorICAgICAgICAgICAgVmFsdWUqIG5ld1N1
bSA9IHJpZ2h0LT5hZGRDb25zdGFudChtX3Byb2MsIGxlZnQtPmNoaWxkKDEpKTsKKyAgICAgICAg
ICAgIGlmIChuZXdTdW0pIHsKKyAgICAgICAgICAgICAgICBuZXdTdW0gPSBhcHBlbmRUb0N1cnJl
bnRCbG9jayhuZXdTdW0pOworICAgICAgICAgICAgICAgIHJldHVybiByZWR1Y2VBZGQodHlwZSwg
b3JpZ2luLCBsZWZ0LT5jaGlsZCgwKSwgbmV3U3VtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBBZGQodmFsdWUsIHZhbHVlKQorICAg
ICAgICAvLyBJbnRvIHRoaXM6IFNobCh2YWx1ZSwgMSkKKyAgICAgICAgLy8gVGhpcyBpcyBhIHVz
ZWZ1bCBjYW5vbmljYWxpemF0aW9uLiBJdCdzIG5vdCBtZWFudCB0byBiZSBhIHN0cmVuZ3RoIHJl
ZHVjdGlvbi4KKyAgICAgICAgaWYgKGxlZnQgPT0gcmlnaHQpIHsKKyAgICAgICAgICAgIFZhbHVl
KiBzaGlmdEFtb3VudCA9IGVtaXQ8Q29uc3QzMlZhbHVlPihvcmlnaW4sIDEpOworICAgICAgICAg
ICAgcmV0dXJuIHJlZHVjZVNobCh0eXBlLCBvcmlnaW4sIGxlZnQsIHNoaWZ0QW1vdW50KTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBBZGQodmFsdWUsIE5lZyhv
dGhlclZhbHVlKSkKKyAgICAgICAgLy8gSW50byB0aGlzOiBTdWIodmFsdWUsIG90aGVyVmFsdWUp
CisgICAgICAgIGlmIChyaWdodC0+b3Bjb2RlKCkgPT0gTmVnKQorICAgICAgICAgICAgcmV0dXJu
IHJlZHVjZVN1Yih0eXBlLCBvcmlnaW4sIGxlZnQsIHJpZ2h0LT5jaGlsZCgwKSk7CisKKyAgICAg
ICAgLy8gVHVybiB0aGlzOiBJbnRlZ2VyIEFkZChOZWcodmFsdWUpLCBvdGhlclZhbHVlKQorICAg
ICAgICAvLyBJbnRvIHRoaXM6IFN1YihvdGhlclZhbHVlLCB2YWx1ZSkKKyAgICAgICAgaWYgKGxl
ZnQtPm9wY29kZSgpID09IE5lZykKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VTdWIodHlwZSwg
b3JpZ2luLCByaWdodCwgbGVmdC0+Y2hpbGQoMCkpOworCisgICAgICAgIC8vIFR1cm4gdGhpczog
SW50ZWdlciBBZGQoQWRkKHZhbHVlLCBjb25zdGFudCksIG90aGVyVmFsdWUpCisgICAgICAgIC8v
IEludG8gdGhpczogQWRkKEFkZCh2YWx1ZSwgb3RoZXJWYWx1ZSksIGNvbnN0YW50KQorICAgICAg
ICAvLyBGSVhNRTogdGhpcyBjYW4gY2F1c2UgY29kZSBkdXBsaWNhdGlvbiwgYW5kIHNob3VsZCBi
ZSByZW1vdmVkIG9uY2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
NDA4MSBsYW5kcworICAgICAgICBpZiAobGVmdC0+b3Bjb2RlKCkgPT0gQWRkICYmIGxlZnQtPmNo
aWxkKDEpLT5oYXNJbnQoKSkgeworICAgICAgICAgICAgVmFsdWUqIHZhbCA9IHJlZHVjZUFkZCh0
eXBlLCBvcmlnaW4sIGxlZnQtPmNoaWxkKDApLCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4g
cmVkdWNlQWRkKHR5cGUsIG9yaWdpbiwgdmFsLCBsZWZ0LT5jaGlsZCgxKSk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIgQWRkKHZhbHVlLCBBZGQob3RoZXJWYWx1
ZSwgY29uc3RhbnQpKQorICAgICAgICAvLyBJbnRvIHRoaXM6IEFkZChBZGQodmFsdWUsIG90aGVy
VmFsdWUpLCBjb25zdGFudCkKKyAgICAgICAgLy8gRklYTUU6IHRoaXMgY2FuIGNhdXNlIGNvZGUg
ZHVwbGljYXRpb24sIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBvbmNlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQwODEgbGFuZHMKKyAgICAgICAgaWYgKHJpZ2h0LT5v
cGNvZGUoKSA9PSBBZGQgJiYgcmlnaHQtPmNoaWxkKDEpLT5oYXNJbnQoKSkgeworICAgICAgICAg
ICAgVmFsdWUqIHZhbCA9IHJlZHVjZUFkZCh0eXBlLCBvcmlnaW4sIGxlZnQsIHJpZ2h0LT5jaGls
ZCgwKSk7CisgICAgICAgICAgICByZXR1cm4gcmVkdWNlQWRkKHR5cGUsIG9yaWdpbiwgdmFsLCBy
aWdodC0+Y2hpbGQoMSkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFZhbHVlKiByZXN1bHQg
PSB0cnlSZWR1Y2VNdWxEaXN0cmlidXRpdml0eShBZGQsIHR5cGUsIG9yaWdpbiwgbGVmdCwgcmln
aHQpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICByZXR1cm4gbWF5
R2l2ZVVwID09IE1heUdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihBZGQsIG9yaWdpbiwg
bGVmdCwgcmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVN1YihU
eXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIE1heUdp
dmVVcE1vZGUgbWF5R2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogU3ViKGNvbnN0YW50MSwg
Y29uc3RhbnQyKQorICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxIC0gY29uc3RhbnQyCisgICAg
aWYgKFZhbHVlKiBjb25zdGFudCA9IGxlZnQtPnN1YkNvbnN0YW50KG1fcHJvYywgcmlnaHQpKQor
ICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgaWYg
KGlzSW50KHR5cGUpKSB7CisgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBTdWIodmFsdWUs
IGNvbnN0YW50KQorICAgICAgICAvLyBJbnRvIHRoaXM6IEFkZCh2YWx1ZSwgLWNvbnN0YW50KQor
ICAgICAgICBpZiAoVmFsdWUqIG5lZ2F0ZWRDb25zdGFudCA9IHJpZ2h0LT5uZWdDb25zdGFudCht
X3Byb2MpKSB7CisgICAgICAgICAgICBuZWdhdGVkQ29uc3RhbnQgPSBhcHBlbmRUb0N1cnJlbnRC
bG9jayhuZWdhdGVkQ29uc3RhbnQpOworICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUFkZCh0eXBl
LCBvcmlnaW4sIGxlZnQsIG5lZ2F0ZWRDb25zdGFudCk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBUdXJuIHRoaXM6IEludGVnZXIgU3ViKDAsIHZhbHVlKQorICAgICAgICAvLyBJbnRvIHRoaXM6
IE5lZyh2YWx1ZSkKKyAgICAgICAgaWYgKGxlZnQtPmlzSW50KDApKQorICAgICAgICAgICAgcmV0
dXJuIHJlZHVjZU5lZyh0eXBlLCBvcmlnaW4sIHJpZ2h0KTsKKworICAgICAgICAvLyBUdXJuIHRo
aXM6IEludGVnZXIgU3ViKHZhbHVlLCB2YWx1ZSkKKyAgICAgICAgLy8gSW50byB0aGlzOiAwCisg
ICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQorICAgICAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3Vy
cmVudEJsb2NrKG1fcHJvYy5hZGRJbnRDb25zdGFudChvcmlnaW4sIHR5cGUsIDApKTsKKworICAg
ICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIgU3ViKHZhbHVlLCBOZWcob3RoZXJWYWx1ZSkpCisg
ICAgICAgIC8vIEludG8gdGhpczogQWRkKHZhbHVlLCBvdGhlclZhbHVlKQorICAgICAgICBpZiAo
cmlnaHQtPm9wY29kZSgpID09IE5lZykKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VBZGQodHlw
ZSwgb3JpZ2luLCBsZWZ0LCByaWdodC0+Y2hpbGQoMCkpOworCisgICAgICAgIC8vIFR1cm4gdGhp
czogSW50ZWdlciBTdWIoLTEsIHZhbHVlKQorICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdFhvcih2
YWx1ZSwgLTEpCisgICAgICAgIGlmIChsZWZ0LT5pc0ludCgtMSkpCisgICAgICAgICAgICByZXR1
cm4gcmVkdWNlQml0WG9yKHR5cGUsIG9yaWdpbiwgcmlnaHQsIGxlZnQpOworCisgICAgICAgIGlm
IChWYWx1ZSogcmVzdWx0ID0gdHJ5UmVkdWNlTXVsRGlzdHJpYnV0aXZpdHkoU3ViLCB0eXBlLCBv
cmlnaW4sIGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgcmV0dXJuIG1heUdpdmVVcCA9PSBNYXlHaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1
ZT4oU3ViLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1p
emVyOjpyZWR1Y2VOZWcoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogY2hpbGQsIE1h
eUdpdmVVcE1vZGUgbWF5R2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogTmVnKGNvbnN0YW50
KQorICAgIC8vIEludG8gdGhpczogLWNvbnN0YW50CisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9
IGNoaWxkLT5uZWdDb25zdGFudChtX3Byb2MpKQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJy
ZW50QmxvY2soY29uc3RhbnQpOworCisgICAgLy8gVHVybiB0aGlzOiBOZWcoTmVnKHZhbHVlKSkK
KyAgICAvLyBJbnRvIHRoaXM6IHZhbHVlCisgICAgaWYgKGNoaWxkLT5vcGNvZGUoKSA9PSBOZWcp
CisgICAgICAgIHJldHVybiBjaGlsZC0+Y2hpbGQoMCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IElu
dGVnZXIgTmVnKFN1Yih2YWx1ZSwgb3RoZXJWYWx1ZSkpCisgICAgLy8gSW50byB0aGlzOiBTdWIo
b3RoZXJWYWx1ZSwgdmFsdWUpCisgICAgaWYgKGlzSW50KHR5cGUpICYmIGNoaWxkLT5vcGNvZGUo
KSA9PSBTdWIpCisgICAgICAgIHJldHVybiByZWR1Y2VTdWIodHlwZSwgb3JpZ2luLCBjaGlsZC0+
Y2hpbGQoMSksIGNoaWxkLT5jaGlsZCgwKSk7CisKKyAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIg
TmVnKE11bCh2YWx1ZSwgYykpCisgICAgLy8gSW50byB0aGlzOiBNdWwodmFsdWUsIC1jKSwgYXMg
bG9uZyBhcyAtYyBkb2VzIG5vdCBvdmVyZmxvdworICAgIGlmIChjaGlsZC0+b3Bjb2RlKCkgPT0g
TXVsICYmIGNoaWxkLT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKKyAgICAgICAgaW50NjRfdCBmYWN0
b3IgPSBjaGlsZC0+Y2hpbGQoMSktPmFzSW50KCk7CisgICAgICAgIGlmICh0eXBlID09IEludDMy
ICYmIGZhY3RvciAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSkgeworICAg
ICAgICAgICAgVmFsdWUqIG5ld0ZhY3RvciA9IGVtaXQ8Q29uc3QzMlZhbHVlPihjaGlsZC0+Y2hp
bGQoMSktPm9yaWdpbigpLCAtZmFjdG9yKTsKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VNdWwo
dHlwZSwgb3JpZ2luLCBjaGlsZC0+Y2hpbGQoMCksIG5ld0ZhY3Rvcik7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHR5cGUgPT0gSW50NjQgJiYgZmFjdG9yICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50NjRfdD46Om1pbigpKSB7CisgICAgICAgICAgICBWYWx1ZSogbmV3RmFjdG9yID0gZW1pdDxD
b25zdDY0VmFsdWU+KGNoaWxkLT5jaGlsZCgxKS0+b3JpZ2luKCksIC1mYWN0b3IpOworICAgICAg
ICAgICAgcmV0dXJuIHJlZHVjZU11bCh0eXBlLCBvcmlnaW4sIGNoaWxkLT5jaGlsZCgwKSwgbmV3
RmFjdG9yKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBtYXlHaXZlVXAgPT0gTWF5
R2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KE5lZywgb3JpZ2luLCBjaGlsZCk7Cit9CisK
K1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlTXVsKFR5cGUgdHlwZSwgT3JpZ2luIG9y
aWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgTWF5R2l2ZVVwTW9kZSBtYXlHaXZlVXAp
Cit7CisgICAgaWYgKHNob3VsZEdvQmVmb3JlKHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAgcmV0dXJu
IHJlZHVjZU11bCh0eXBlLCBvcmlnaW4sIHJpZ2h0LCBsZWZ0KTsKKworICAgIC8vIFR1cm4gdGhp
czogTXVsKGNvbnN0YW50MSwgY29uc3RhbnQyKQorICAgIC8vIEludG8gdGhpczogY29uc3RhbnQx
ICogY29uc3RhbnQyCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGxlZnQtPm11bENvbnN0YW50
KG1fcHJvYywgcmlnaHQpKQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29u
c3RhbnQpOworCisgICAgaWYgKHJpZ2h0LT5oYXNJbnQoKSkgeworICAgICAgICBpbnQ2NF90IGZh
Y3RvciA9IHJpZ2h0LT5hc0ludCgpOworCisgICAgICAgIC8vIFR1cm4gdGhpczogTXVsKHZhbHVl
LCAwKQorICAgICAgICAvLyBJbnRvIHRoaXM6IDAKKyAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRv
bid0IGRvIHRoaXMgZm9yIGRvdWJsZXMgYmVjYXVzZSB0aGF0J3Mgd3JvbmcuIEZvciBleGFtcGxl
LCAtMSAqIDAKKyAgICAgICAgLy8gYW5kIDEgKiAwIHlpZWxkIGRpZmZlcmVudCByZXN1bHRzLgor
ICAgICAgICBpZiAoIWZhY3RvcikKKyAgICAgICAgICAgIHJldHVybiByaWdodDsKKworICAgICAg
ICAvLyBUdXJuIHRoaXM6IE11bCh2YWx1ZSwgMSkKKyAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1
ZQorICAgICAgICBpZiAoZmFjdG9yID09IDEpCisgICAgICAgICAgICByZXR1cm4gbGVmdDsKKwor
ICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2YWx1ZSwgLTEpCisgICAgICAgIC8vIEludG8gdGhp
czogTmVnKHZhbHVlKQorICAgICAgICBpZiAoZmFjdG9yID09IC0xKQorICAgICAgICAgICAgcmV0
dXJuIHJlZHVjZU5lZyh0eXBlLCBvcmlnaW4sIGxlZnQpOworCisgICAgICAgIC8vIFR1cm4gdGhp
czogTXVsKHZhbHVlLCBjb25zdGFudCkKKyAgICAgICAgLy8gSW50byB0aGlzOiBTaGwodmFsdWUs
IGxvZzIoY29uc3RhbnQpKQorICAgICAgICBpZiAoaGFzT25lQml0U2V0KGZhY3RvcikpIHsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIHNoaWZ0QW1vdW50ID0gV1RGOjpmYXN0TG9nMihzdGF0aWNfY2Fz
dDx1aW50NjRfdD4oZmFjdG9yKSk7CisgICAgICAgICAgICBWYWx1ZSogc2hpZnRDb25zdGFudCA9
IGVtaXQ8Q29uc3QzMlZhbHVlPihvcmlnaW4sIHNoaWZ0QW1vdW50KTsKKyAgICAgICAgICAgIHJl
dHVybiByZWR1Y2VTaGwodHlwZSwgb3JpZ2luLCBsZWZ0LCBzaGlmdENvbnN0YW50KTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSBpZiAocmlnaHQtPmhhc0RvdWJsZSgpKSB7CisgICAgICAgIGRvdWJs
ZSBmYWN0b3IgPSByaWdodC0+YXNEb3VibGUoKTsKKworICAgICAgICAvLyBUdXJuIHRoaXM6IE11
bCh2YWx1ZSwgMSkKKyAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZQorICAgICAgICBpZiAoZmFj
dG9yID09IDEpCisgICAgICAgICAgICByZXR1cm4gbGVmdDsKKyAgICB9CisKKyAgICBpZiAoaXNJ
bnQodHlwZSkpIHsKKyAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRlZ2VyIE11bCh2YWx1ZSwgTmVn
KG90aGVyVmFsdWUpKQorICAgICAgICAvLyBJbnRvIHRoaXM6IE5lZyhNdWwodmFsdWUsIG90aGVy
VmFsdWUpKQorICAgICAgICBpZiAocmlnaHQtPm9wY29kZSgpID09IE5lZykgeworICAgICAgICAg
ICAgVmFsdWUqIG5ld011bCA9IHJlZHVjZU11bCh0eXBlLCBvcmlnaW4sIGxlZnQsIHJpZ2h0LT5j
aGlsZCgwKSk7CisgICAgICAgICAgICByZXR1cm4gcmVkdWNlTmVnKHR5cGUsIG9yaWdpbiwgbmV3
TXVsKTsKKyAgICAgICAgfQorICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIgTXVsKE5lZyh2
YWx1ZSksIG90aGVyVmFsdWUpCisgICAgICAgIC8vIEludG8gdGhpczogTmVnKE11bCh2YWx1ZSwg
b3RoZXJWYWx1ZSkpCisgICAgICAgIGlmIChsZWZ0LT5vcGNvZGUoKSA9PSBOZWcpIHsKKyAgICAg
ICAgICAgIFZhbHVlKiBuZXdNdWwgPSByZWR1Y2VNdWwodHlwZSwgb3JpZ2luLCBsZWZ0LT5jaGls
ZCgwKSwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIHJlZHVjZU5lZyh0eXBlLCBvcmlnaW4s
IG5ld011bCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbWF5R2l2ZVVwID09IE1h
eUdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihNdWwsIG9yaWdpbiwgbGVmdCwgcmlnaHQp
OworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZURpdihUeXBlIHR5cGUsIE9y
aWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIElzQ2hpbGxNb2RlIGlzQ2hp
bGwsIE1heUdpdmVVcE1vZGUgbWF5R2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogRGl2KGNv
bnN0YW50MSwgY29uc3RhbnQyKQorICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxIC8gY29uc3Rh
bnQyCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgdXNlcyBEaXY8Q2hpbGw+IHNlbWFudGljcy4gVGhh
dCdzIGZpbmUsIGJlY2F1c2UgdGhlIHJ1bGVzIGZvciBEaXYKKyAgICAvLyBhcmUgc3RyaWN0bHkg
d2Vha2VyOiBpdCBoYXMgY29ybmVyIGNhc2VzIHdoZXJlIGl0J3MgYWxsb3dlZCB0byBkbyBhbnl0
aGluZyBpdAorICAgIC8vIGxpa2VzLgorICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBsZWZ0LT5k
aXZDb25zdGFudChtX3Byb2MsIHJpZ2h0KSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVu
dEJsb2NrKGNvbnN0YW50KTsKKworICAgIGlmIChyaWdodC0+aGFzSW50KCkpIHsKKyAgICAgICAg
aW50NjRfdCBkaXZpc29yID0gcmlnaHQtPmFzSW50KCk7CisgICAgICAgIGlmIChkaXZpc29yID09
IC0xKSB7CisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IERpdih2YWx1ZSwgLTEpCisgICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IE5lZyh2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VO
ZWcodHlwZSwgb3JpZ2luLCBsZWZ0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWRpdmlzb3Ip
IHsKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRGl2KHZhbHVlLCAwKQorICAgICAgICAgICAg
Ly8gSW50byB0aGlzOiAwCisgICAgICAgICAgICAvLyBXZSBjYW4gZG8gdGhpcyBiZWNhdXNlIGl0
J3MgcHJlY2lzZWx5IGNvcnJlY3QgZm9yIENoaWxsRGl2IGFuZCBmb3IgRGl2IHdlCisgICAgICAg
ICAgICAvLyBhcmUgYWxsb3dlZCB0byBkbyB3aGF0ZXZlciB3ZSB3YW50LgorICAgICAgICAgICAg
cmV0dXJuIHJpZ2h0OworICAgICAgICB9CisgICAgICAgIGlmIChkaXZpc29yID09IDEpIHsKKyAg
ICAgICAgICAgIC8vIFR1cm4gdGhpczogRGl2KHZhbHVlLCAxKQorICAgICAgICAgICAgLy8gSW50
byB0aGlzOiB2YWx1ZQorICAgICAgICAgICAgcmV0dXJuIGxlZnQ7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHR5cGUgPT0gSW50MzIgJiYgbV9wcm9jLm9wdExldmVsKCkgPj0gMikgeworICAgICAg
ICAgICAgLy8gUGVyZm9ybSBzdXBlciBjb21wcmVoZW5zaXZlIHN0cmVuZ3RoIHJlZHVjdGlvbiBv
ZiBkaXZpc2lvbi4gQ3VycmVudGx5IHdlCisgICAgICAgICAgICAvLyBvbmx5IGRvIHRoaXMgZm9y
IDMyLWJpdCBkaXZpc2lvbnMsIHNpbmNlIHdlIG5lZWQgYSBoaWdoIG11bHRpcGx5CisgICAgICAg
ICAgICAvLyBvcGVyYXRpb24uIFdlIGVtdWxhdGUgaXQgdXNpbmcgNjQtYml0IG11bHRpcGx5LiBX
ZSBjYW4ndCBlbXVsYXRlIDY0LWJpdAorICAgICAgICAgICAgLy8gaGlnaCBtdWx0aXBseSB3aXRo
IGEgMTI4LWJpdCBtdWx0aXBseSBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYSAxMjgtYml0CisgICAg
ICAgICAgICAvLyBtdWx0aXBseS4gV2UgY291bGQgZG8gaXQgd2l0aCBhIHBhdGNocG9pbnQgaWYg
d2UgY2FyZWQgYmFkbHkgZW5vdWdoLgorICAgICAgICAgICAgaW50MzJfdCBkaXZpc29yMzIgPSBy
aWdodC0+YXNJbnQzMigpOworICAgICAgICAgICAgRGl2aXNpb25NYWdpYzxpbnQzMl90PiBtYWdp
YyA9IGNvbXB1dGVEaXZpc2lvbk1hZ2ljKGRpdmlzb3IzMik7CisgICAgICAgICAgICAvLyBQZXJm
b3JtIHRoZSAiaGlnaCIgbXVsdGlwbGljYXRpb24uIFdlIGRvIGl0IGp1c3QgdG8gZ2V0IHRoZSBo
aWdoIGJpdHMuCisgICAgICAgICAgICAvLyBUaGlzIGlzIHNvcnQgb2YgbGlrZSBtdWx0aXBseWlu
ZyBieSB0aGUgcmVjaXByb2NhbCwganVzdCBtb3JlIGduYXJseS4gSXQncworICAgICAgICAgICAg
Ly8gZnJvbSBIYWNrZXIncyBEZWxpZ2h0IGFuZCBJIGRvbid0IGNsYWltIHRvIHVuZGVyc3RhbmQg
aXQuCisgICAgICAgICAgICBWYWx1ZSogY29uc3RNYWdpY011bHRpcGxpZXIgPSBlbWl0PENvbnN0
NjRWYWx1ZT4ob3JpZ2luLCBtYWdpYy5tYWdpY011bHRpcGxpZXIpOworICAgICAgICAgICAgVmFs
dWUqIHNleHQzMkxlZnQgPSByZWR1Y2VTRXh0MzIodHlwZSwgb3JpZ2luLCBsZWZ0KTsKKyAgICAg
ICAgICAgIFZhbHVlKiBtdWxMZWZ0ID0gcmVkdWNlTXVsKEludDY0LCBvcmlnaW4sIHNleHQzMkxl
ZnQsIGNvbnN0TWFnaWNNdWx0aXBsaWVyKTsKKyAgICAgICAgICAgIFZhbHVlKiBjb25zdDMyID0g
ZW1pdDxDb25zdDMyVmFsdWU+KG9yaWdpbiwgMzIpOworICAgICAgICAgICAgVmFsdWUqIGxhcmdl
TWFnaWNRdW90aWVudCA9IHJlZHVjZVpTaHIodHlwZSwgb3JpZ2luLCBtdWxMZWZ0LCBjb25zdDMy
KTsKKyAgICAgICAgICAgIFZhbHVlKiBtYWdpY1F1b3RpZW50ID0gcmVkdWNlVHJ1bmModHlwZSwg
b3JpZ2luLCBsYXJnZU1hZ2ljUXVvdGllbnQpOworICAgICAgICAgICAgaWYgKGRpdmlzb3IzMiA+
IDAgJiYgbWFnaWMubWFnaWNNdWx0aXBsaWVyIDwgMCkKKyAgICAgICAgICAgICAgICBtYWdpY1F1
b3RpZW50ID0gcmVkdWNlQWRkKEludDMyLCBvcmlnaW4sIG1hZ2ljUXVvdGllbnQsIGxlZnQpOwor
ICAgICAgICAgICAgaWYgKGRpdmlzb3IzMiA8IDAgJiYgbWFnaWMubWFnaWNNdWx0aXBsaWVyID4g
MCkKKyAgICAgICAgICAgICAgICBtYWdpY1F1b3RpZW50ID0gcmVkdWNlU3ViKEludDMyLCBvcmln
aW4sIG1hZ2ljUXVvdGllbnQsIGxlZnQpOworICAgICAgICAgICAgaWYgKG1hZ2ljLnNoaWZ0ID4g
MCkgeworICAgICAgICAgICAgICAgIFZhbHVlKiBjb25zdE1hZ2ljU2hpZnQgPSBlbWl0PENvbnN0
MzJWYWx1ZT4ob3JpZ2luLCBtYWdpYy5zaGlmdCk7CisgICAgICAgICAgICAgICAgbWFnaWNRdW90
aWVudCA9IHJlZHVjZVNTaHIodHlwZSwgb3JpZ2luLCBtYWdpY1F1b3RpZW50LCBjb25zdE1hZ2lj
U2hpZnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVmFsdWUqIGNvbnN0MzEgPSBlbWl0
PENvbnN0MzJWYWx1ZT4ob3JpZ2luLCAzMSk7CisgICAgICAgICAgICBWYWx1ZSogc2hpZnRlZE1h
Z2ljUXVvdGllbnQgPSByZWR1Y2VaU2hyKHR5cGUsIG9yaWdpbiwgbWFnaWNRdW90aWVudCwgY29u
c3QzMSk7CisgICAgICAgICAgICByZXR1cm4gcmVkdWNlQWRkKEludDMyLCBvcmlnaW4sIG1hZ2lj
UXVvdGllbnQsIHNoaWZ0ZWRNYWdpY1F1b3RpZW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmIChtYXlHaXZlVXAgPT0gTWF5R2l2ZVVwKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBLaW5kIGRpdktpbmQgPSBEaXY7CisgICAgZGl2S2luZC5zZXRJc0NoaWxsKGlzQ2hpbGwgPT0g
SXNDaGlsbCk7CisgICAgcmV0dXJuIGVtaXQ8VmFsdWU+KGRpdktpbmQsIG9yaWdpbiwgbGVmdCwg
cmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVVEaXYoVHlwZSwg
T3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgTWF5R2l2ZVVwTW9kZSBt
YXlHaXZlVXApCit7CisgICAgLy8gVHVybiB0aGlzOiBVRGl2KGNvbnN0YW50MSwgY29uc3RhbnQy
KQorICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxIC8gY29uc3RhbnQyCisgICAgaWYgKFZhbHVl
KiBjb25zdGFudCA9IGxlZnQtPnVEaXZDb25zdGFudChtX3Byb2MsIHJpZ2h0KSkKKyAgICAgICAg
cmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50KTsKKworICAgIGlmIChyaWdodC0+
aGFzSW50KCkpIHsKKyAgICAgICAgaW50NjRfdCBkaXZpc29yID0gcmlnaHQtPmFzSW50KCk7Cisg
ICAgICAgIGlmICghZGl2aXNvcikgeworICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBVRGl2KHZh
bHVlLCAwKQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiAwCisgICAgICAgICAgICAvLyBXZSBj
YW4gZG8gd2hhdGV2ZXIgd2Ugd2FudCBoZXJlIHNvIHdlIG1pZ2h0IGFzIHdlbGwgZG8gdGhlIGNo
aWxsIHRoaW5nLAorICAgICAgICAgICAgLy8gaW4gY2FzZSB3ZSBhZGQgY2hpbGwgdmVyc2lvbnMg
b2YgVURpdiBpbiB0aGUgZnV0dXJlLgorICAgICAgICAgICAgcmV0dXJuIHJpZ2h0OworICAgICAg
ICB9CisgICAgICAgIGlmIChkaXZpc29yID09IDEpIHsKKyAgICAgICAgICAgIC8vIFR1cm4gdGhp
czogVURpdih2YWx1ZSwgMSkKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogdmFsdWUKKyAgICAg
ICAgICAgIHJldHVybiBsZWZ0OworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgZG8gY29tcHJlaGVuc2l2ZSBzdHJlbmd0aCByZWR1Y3Rpb24gZm9yIHVuc2lnbmVkIG51bWJl
cnMuIExpa2VseSwKKyAgICAgICAgLy8gd2Ugd2lsbCBqdXN0IHdhbnQgY29weSB3aGF0IGxsdm0g
ZG9lcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDgwOQorICAg
IH0KKworICAgIHJldHVybiBtYXlHaXZlVXAgPT0gTWF5R2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8
VmFsdWU+KFVEaXYsIG9yaWdpbiwgbGVmdCwgcmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVP
cHRpbWl6ZXI6OnJlZHVjZU1vZChUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0
LCBWYWx1ZSogcmlnaHQsIElzQ2hpbGxNb2RlIGlzQ2hpbGwsIE1heUdpdmVVcE1vZGUgbWF5R2l2
ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogTW9kKGNvbnN0YW50MSwgY29uc3RhbnQyKQorICAg
IC8vIEludG8gdGhpczogY29uc3RhbnQxICUgY29uc3RhbnQyCisgICAgLy8gTm90ZSB0aGF0IHRo
aXMgdXNlcyBNb2Q8Q2hpbGw+IHNlbWFudGljcy4KKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0g
bGVmdC0+bW9kQ29uc3RhbnQobV9wcm9jLCByaWdodCkpCisgICAgICAgIHJldHVybiBhcHBlbmRU
b0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICBpZiAocmlnaHQtPmhhc0ludCgpKSB7Cisg
ICAgICAgIGludDY0X3QgZGl2aXNvciA9IHJpZ2h0LT5hc0ludCgpOworICAgICAgICBpZiAoIWRp
dmlzb3IpIHsKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTW9kKHZhbHVlLCAwKQorICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiAwCisgICAgICAgICAgICAvLyBUaGlzIGlzIGNvcnJlY3QgYWNj
b3JkaW5nIHRvIENoaWxsTW9kIHNlbWFudGljcy4KKyAgICAgICAgICAgIHJldHVybiByaWdodDsK
KyAgICAgICAgfQorICAgICAgICBpZiAodHlwZSA9PSBJbnQzMiAmJiBtX3Byb2Mub3B0TGV2ZWwo
KSA+PSAyKSB7CisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE1vZChOLCBEKQorICAgICAgICAg
ICAgLy8gSW50byB0aGlzOiBTdWIoTiwgTXVsKERpdihOLCBEKSwgRCkpCisgICAgICAgICAgICAv
LworICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWVkLXVwIGJlY2F1c2Ugd2UgdXNlIG91ciBl
eGlzdGluZyBEaXYgb3B0aW1pemF0aW9ucy4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAv
LyBIZXJlJ3MgYW4gZWFzaWVyIHdheSB0byBsb29rIGF0IGl0OgorICAgICAgICAgICAgLy8gICAg
IE4gJSBEID0gTiAtIE4gLyBEICogRAorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIE5v
dGUgdGhhdCB0aGlzIGRvZXMgbm90IHdvcmsgZm9yIEQgPSAwIGFuZCBDaGlsbE1vZC4gVGhlIGV4
cGVjdGVkIHJlc3VsdCBpcyAwLgorICAgICAgICAgICAgLy8gVGhhdCdzIHdoeSB3ZSBoYXZlIGEg
c3BlY2lhbC1jYXNlIGFib3ZlLgorICAgICAgICAgICAgLy8gICAgIFggJSAwID0gWCAtIFggLyAw
ICogMCA9IFggICAgIChzaG91bGQgYmUgMCkKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAv
LyBUaGlzIGRvZXMgd29yayBmb3IgdGhlIEQgPSAtMSBzcGVjaWFsIGNhc2UuCisgICAgICAgICAg
ICAvLyAgICAgLTJeMzEgJSAtMSA9IC0yXjMxIC0gLTJeMzEgLyAtMSAqIC0xCisgICAgICAgICAg
ICAvLyAgICAgICAgICAgICAgICA9IC0yXjMxIC0gLTJeMzEgKiAtMQorICAgICAgICAgICAgLy8g
ICAgICAgICAgICAgICAgPSAtMl4zMSAtIC0yXjMxCisgICAgICAgICAgICAvLyAgICAgICAgICAg
ICAgICA9IDAKKyAgICAgICAgICAgIFZhbHVlKiBkaXYgPSByZWR1Y2VEaXYodHlwZSwgb3JpZ2lu
LCBsZWZ0LCByaWdodCwgaXNDaGlsbCk7CisgICAgICAgICAgICBWYWx1ZSogbXVsID0gcmVkdWNl
TXVsKHR5cGUsIG9yaWdpbiwgZGl2LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gcmVkdWNl
U3ViKHR5cGUsIG9yaWdpbiwgbGVmdCwgbXVsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChtYXlHaXZlVXAgPT0gTWF5R2l2ZVVwKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBL
aW5kIG1vZEtpbmQgPSBNb2Q7CisgICAgbW9kS2luZC5zZXRJc0NoaWxsKGlzQ2hpbGwgPT0gSXND
aGlsbCk7CisgICAgcmV0dXJuIGVtaXQ8VmFsdWU+KG1vZEtpbmQsIG9yaWdpbiwgbGVmdCwgcmln
aHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVVNb2QoVHlwZSwgT3Jp
Z2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgTWF5R2l2ZVVwTW9kZSBtYXlH
aXZlVXApCit7CisgICAgLy8gVHVybiB0aGlzOiBVTW9kKGNvbnN0YW50MSwgY29uc3RhbnQyKQor
ICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxICUgY29uc3RhbnQyCisgICAgaWYgKFZhbHVlKiBj
b25zdGFudCA9IGxlZnQtPnVNb2RDb25zdGFudChtX3Byb2MsIHJpZ2h0KSkKKyAgICAgICAgcmV0
dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50KTsKKworICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgZG8gd2hhdCB3ZSBkbyBmb3IgTW9kIHNpbmNlIHRoZSBzYW1lIHByaW5jaXBsZSBhcHBs
aWVzIGhlcmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NDgwOQorCisgICAgcmV0dXJuIG1heUdpdmVVcCA9PSBNYXlHaXZlVXAgPyBudWxscHRyIDog
ZW1pdDxWYWx1ZT4oVU1vZCwgb3JpZ2luLCBsZWZ0LCByaWdodCk7Cit9CisKK1ZhbHVlKiBQZWVw
aG9sZU9wdGltaXplcjo6cmVkdWNlQml0QW5kKFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFs
dWUqIGxlZnQsIFZhbHVlKiByaWdodCwgTWF5R2l2ZVVwTW9kZSBtYXlHaXZlVXApCit7CisgICAg
aWYgKHNob3VsZEdvQmVmb3JlKHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAgcmV0dXJuIHJlZHVjZUJp
dEFuZCh0eXBlLCBvcmlnaW4sIHJpZ2h0LCBsZWZ0KTsKKworICAgIC8vIFR1cm4gdGhpczogQml0
QW5kKGNvbnN0YW50MSwgY29uc3RhbnQyKQorICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxICYg
Y29uc3RhbnQyCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGxlZnQtPmJpdEFuZENvbnN0YW50
KG1fcHJvYywgcmlnaHQpKQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29u
c3RhbnQpOworCisgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQodmFsdWVYLCB2YWx1ZVgpCisgICAg
Ly8gSW50byB0aGlzOiB2YWx1ZVguCisgICAgaWYgKGxlZnQgPT0gcmlnaHQpCisgICAgICAgIHJl
dHVybiBsZWZ0OworCisgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQodmFsdWUsIHplcm8tY29uc3Rh
bnQpCisgICAgLy8gSW50byB0aGlzOiB6ZXJvLWNvbnN0YW50LgorICAgIGlmIChyaWdodC0+aXNJ
bnQoMCkpCisgICAgICAgIHJldHVybiByaWdodDsKKworICAgIC8vIFR1cm4gdGhpczogQml0QW5k
KHZhbHVlLCBhbGwtb25lcykKKyAgICAvLyBJbnRvIHRoaXM6IHZhbHVlLgorICAgIGlmICgodHlw
ZSA9PSBJbnQ2NCAmJiByaWdodC0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46
Om1heCgpKSkKKyAgICAgICAgfHwgKHR5cGUgPT0gSW50MzIgJiYgcmlnaHQtPmlzSW50KHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkpKSB7CisgICAgICAgIHJldHVybiBsZWZ0
OworICAgIH0KKworICAgIC8vIFR1cm4gdGhpczogQml0QW5kKEJpdEFuZCh2YWx1ZSwgY29uc3Rh
bnQxKSwgY29uc3RhbnQyKQorICAgIC8vIEludG8gdGhpczogQml0QW5kKHZhbHVlLCBjb25zdGFu
dDEgJiBjb25zdGFudDIpLgorICAgIGlmIChsZWZ0LT5vcGNvZGUoKSA9PSBCaXRBbmQpIHsKKyAg
ICAgICAgVmFsdWUqIG5ld0NvbnN0YW50ID0gcmlnaHQtPmJpdEFuZENvbnN0YW50KG1fcHJvYywg
bGVmdC0+Y2hpbGQoMSkpOworICAgICAgICBpZiAobmV3Q29uc3RhbnQpIHsKKyAgICAgICAgICAg
IG5ld0NvbnN0YW50ID0gYXBwZW5kVG9DdXJyZW50QmxvY2sobmV3Q29uc3RhbnQpOworICAgICAg
ICAgICAgcmV0dXJuIHJlZHVjZUJpdEFuZCh0eXBlLCBvcmlnaW4sIGxlZnQtPmNoaWxkKDApLCBu
ZXdDb25zdGFudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUdXJuIHRoaXM6IEJpdEFu
ZCg2NC1iaXQgdmFsdWUsIDMyIG9uZXMpCisgICAgLy8gSW50byB0aGlzOiBaRXh0MzIoVHJ1bmMo
NjQtYml0IHZhbHVlKSkKKyAgICBpZiAocmlnaHQtPmlzSW50NjQoMHhmZmZmZmZmZmxsdSkpIHsK
KyAgICAgICAgVmFsdWUqIHRydW5jID0gcmVkdWNlVHJ1bmModHlwZSwgb3JpZ2luLCBsZWZ0KTsK
KyAgICAgICAgcmV0dXJuIHJlZHVjZVpFeHQzMih0eXBlLCBvcmlnaW4sIHRydW5jKTsKKyAgICB9
CisKKyAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZChTRXh0OCh2YWx1ZSksIG1hc2spIHdoZXJlICht
YXNrICYgMHhmZmZmZmYwMCkgPT0gMAorICAgIC8vIEludG8gdGhpczogQml0QW5kKHZhbHVlLCBt
YXNrKQorICAgIGlmIChsZWZ0LT5vcGNvZGUoKSA9PSBTRXh0OCAmJiByaWdodC0+aGFzSW50MzIo
KSAmJiAhKHJpZ2h0LT5hc0ludDMyKCkgJiAweGZmZmZmZjAwKSkKKyAgICAgICAgcmV0dXJuIHJl
ZHVjZUJpdEFuZCh0eXBlLCBvcmlnaW4sIGxlZnQtPmNoaWxkKDApLCByaWdodCk7CisKKyAgICAv
LyBUdXJuIHRoaXM6IEJpdEFuZChTRXh0MTYodmFsdWUpLCBtYXNrKSB3aGVyZSAobWFzayAmIDB4
ZmZmZjAwMDApID09IDAKKyAgICAvLyBJbnRvIHRoaXM6IEJpdEFuZCh2YWx1ZSwgbWFzaykKKyAg
ICBpZiAobGVmdC0+b3Bjb2RlKCkgPT0gU0V4dDE2ICYmIHJpZ2h0LT5oYXNJbnQzMigpICYmICEo
cmlnaHQtPmFzSW50MzIoKSAmIDB4ZmZmZjAwMDApKQorICAgICAgICByZXR1cm4gcmVkdWNlQml0
QW5kKHR5cGUsIG9yaWdpbiwgbGVmdC0+Y2hpbGQoMCksIHJpZ2h0KTsKKworICAgIC8vIFR1cm4g
dGhpczogQml0QW5kKFNFeHQzMih2YWx1ZSksIG1hc2spIHdoZXJlIChtYXNrICYgMHhmZmZmZmZm
ZjAwMDAwMDAwKSA9PSAwCisgICAgLy8gSW50byB0aGlzOiBCaXRBbmQoWkV4dDMyKHZhbHVlKSwg
bWFzaykKKyAgICBpZiAobGVmdC0+b3Bjb2RlKCkgPT0gU0V4dDMyICYmIHJpZ2h0LT5oYXNJbnQ2
NCgpCisgICAgICAgICYmICEocmlnaHQtPmFzSW50NjQoKSAmIDB4ZmZmZmZmZmYwMDAwMDAwMGxs
dSkpIHsKKyAgICAgICAgVmFsdWUqIHpleHQzMiA9IHJlZHVjZVpFeHQzMih0eXBlLCBvcmlnaW4s
IGxlZnQtPmNoaWxkKDApKTsKKyAgICAgICAgcmV0dXJuIHJlZHVjZUJpdEFuZCh0eXBlLCBvcmln
aW4sIHpleHQzMiwgcmlnaHQpOworICAgIH0KKworICAgIC8vIFR1cm4gdGhpczogQml0QW5kKE9w
KHZhbHVlLCBjb25zdGFudDEpLCBjb25zdGFudDIpCisgICAgLy8gICAgIHdoZXJlICEoY29uc3Rh
bnQxICYgY29uc3RhbnQyKQorICAgIC8vICAgICAgIGFuZCBPcCBpcyBCaXRPciBvciBCaXRYb3IK
KyAgICAvLyBpbnRvIHRoaXM6IEJpdEFuZCh2YWx1ZSwgY29uc3RhbnQyKQorICAgIC8vIEZJWE1F
OiB3ZSBjb3VsZCBkbyB0aGlzIGZvciBub24tY29uc3RhbnQgY29uc3RhbnQyIGhlcmUgb25jZSB3
ZSBoYXZlIGEga25vd25CaXRzIGFuYWx5c2lzLgorICAgIGlmIChyaWdodC0+aGFzSW50KCkpIHsK
KyAgICAgICAgaW50NjRfdCBjb25zdGFudDIgPSByaWdodC0+YXNJbnQoKTsKKyAgICAgICAgc3dp
dGNoIChsZWZ0LT5vcGNvZGUoKSkgeworICAgICAgICBjYXNlIEJpdE9yOgorICAgICAgICBjYXNl
IEJpdFhvcjoKKyAgICAgICAgICAgIGlmIChsZWZ0LT5jaGlsZCgxKS0+aGFzSW50KCkgJiYgIShs
ZWZ0LT5jaGlsZCgxKS0+YXNJbnQoKSAmIGNvbnN0YW50MikpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlZHVjZUJpdEFuZCh0eXBlLCBvcmlnaW4sIGxlZnQtPmNoaWxkKDApLCByaWdodCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoQml0WG9yKHgxLCBh
bGxPbmVzKSwgQml0WG9yKHgyLCBhbGxPbmVzKQorICAgIC8vIEludG8gdGhpczogQml0WG9yKEJp
dE9yKHgxLCB4MiksIGFsbE9uZXMpCisgICAgLy8gQnkgYXBwbHlpbmcgRGUgTW9yZ2FuIGxhd3MK
KyAgICAvLyBGSVhNRTogd2l0aCBhIGtub3duQml0cyBhbmFseXNpcywgdGhpcyBjb3VsZCBleHRl
bmQgdG8gYW55IGNvbnN0YW50IHRoYXQgaW5jbHVkZXMgYWxsIGJpdHMgaW4geDEgYW5kIHgyCisg
ICAgaWYgKGxlZnQtPm9wY29kZSgpID09IEJpdFhvcgorICAgICAgICAmJiByaWdodC0+b3Bjb2Rl
KCkgPT0gQml0WG9yCisgICAgICAgICYmICgodHlwZSA9PSBJbnQ2NAorICAgICAgICAgICAgJiYg
bGVmdC0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgo
KSkKKyAgICAgICAgICAgICYmIHJpZ2h0LT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xp
bWl0czx1aW50NjRfdD46Om1heCgpKSkKKyAgICAgICAgfHwgKHR5cGUgPT0gSW50MzIKKyAgICAg
ICAgICAgICYmIGxlZnQtPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQz
Ml90Pjo6bWF4KCkpCisgICAgICAgICAgICAmJiByaWdodC0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkpKSkgeworICAgICAgICBWYWx1ZSogYml0
T3IgPSByZWR1Y2VCaXRPcih0eXBlLCBvcmlnaW4sIGxlZnQtPmNoaWxkKDApLCByaWdodC0+Y2hp
bGQoMCkpOworICAgICAgICByZXR1cm4gcmVkdWNlQml0WG9yKHR5cGUsIG9yaWdpbiwgYml0T3Is
IGxlZnQtPmNoaWxkKDEpKTsKKyAgICB9CisKKyAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZChCaXRY
b3IoeCwgYWxsT25lcyksIGMpCisgICAgLy8gSW50byB0aGlzOiBCaXRYb3IoQml0T3IoeCwgfmMp
LCBhbGxPbmVzKQorICAgIC8vIFRoaXMgaXMgYSB2YXJpYXRpb24gb24gdGhlIHByZXZpb3VzIG9w
dGltaXphdGlvbiwgdHJlYXRpbmcgYyBhcyBpZiBpdCB3ZXJlIEJpdFhvcih+YywgYWxsT25lcykK
KyAgICAvLyBJdCBkb2VzIG5vdCByZWR1Y2UgdGhlIG51bWJlciBvZiBvcGVyYXRpb25zLCBidXQg
cHJvdmlkZXMgc29tZSBub3JtYWxpemF0aW9uICh3ZSB0cnkgdG8gZ2V0IEJpdFhvciBieSBhbGxP
bmVzIGF0IHRoZSBvdXRlcm1vc3QgcG9pbnQpLCBhbmQgc29tZSBjaGFuY2UgdG8gZmxvYXQgWG9y
cyB0byBhIHBsYWNlIHdoZXJlIHRoZXkgbWlnaHQgZ2V0IGVsaW1pbmF0ZWQuCisgICAgaWYgKGxl
ZnQtPm9wY29kZSgpID09IEJpdFhvcgorICAgICAgICAmJiByaWdodC0+aGFzSW50KCkKKyAgICAg
ICAgJiYgKCh0eXBlID09IEludDY0ICYmIGxlZnQtPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVy
aWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpKQorICAgICAgICB8fCAodHlwZSA9PSBJbnQzMiAm
JiBsZWZ0LT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1h
eCgpKSkpKSB7CisgICAgICAgIFZhbHVlKiBiaXRPciA9IHJlZHVjZUJpdE9yKHR5cGUsIG9yaWdp
biwgbGVmdC0+Y2hpbGQoMCksIHJpZ2h0LT5iaXRYb3JDb25zdGFudChtX3Byb2MsIGxlZnQtPmNo
aWxkKDEpKSk7CisgICAgICAgIHJldHVybiByZWR1Y2VCaXRYb3IodHlwZSwgb3JpZ2luLCBiaXRP
ciwgbGVmdC0+Y2hpbGQoMSkpOworICAgIH0KKworICAgIHJldHVybiBtYXlHaXZlVXAgPT0gTWF5
R2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KEJpdEFuZCwgb3JpZ2luLCBsZWZ0LCByaWdo
dCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlQml0T3IoVHlwZSB0eXBl
LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBNYXlHaXZlVXBNb2Rl
IG1heUdpdmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxlZnQpKQorICAg
ICAgICByZXR1cm4gcmVkdWNlQml0T3IodHlwZSwgb3JpZ2luLCByaWdodCwgbGVmdCk7CisKKyAg
ICAvLyBUdXJuIHRoaXM6IEJpdE9yKGNvbnN0YW50MSwgY29uc3RhbnQyKQorICAgIC8vIEludG8g
dGhpczogY29uc3RhbnQxIHwgY29uc3RhbnQyCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGxl
ZnQtPmJpdE9yQ29uc3RhbnQobV9wcm9jLCByaWdodCkpCisgICAgICAgIHJldHVybiBhcHBlbmRU
b0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IEJpdE9yKEJpdE9y
KHZhbHVlLCBjb25zdGFudDEpLCBjb25zdGFudDIpCisgICAgLy8gSW50byB0aGlzOiBCaXRPcih2
YWx1ZSwgY29uc3RhbnQxIHwgY29uc3RhbnQyKS4KKyAgICBpZiAobGVmdC0+b3Bjb2RlKCkgPT0g
Qml0T3IpIHsKKyAgICAgICAgVmFsdWUqIG5ld0NvbnN0YW50ID0gcmlnaHQtPmJpdE9yQ29uc3Rh
bnQobV9wcm9jLCBsZWZ0LT5jaGlsZCgxKSk7CisgICAgICAgIGlmIChuZXdDb25zdGFudCkgewor
ICAgICAgICAgICAgbmV3Q29uc3RhbnQgPSBhcHBlbmRUb0N1cnJlbnRCbG9jayhuZXdDb25zdGFu
dCk7CisgICAgICAgICAgICByZXR1cm4gcmVkdWNlQml0T3IodHlwZSwgb3JpZ2luLCBsZWZ0LT5j
aGlsZCgwKSwgbmV3Q29uc3RhbnQpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVHVybiB0
aGlzOiBCaXRPcih2YWx1ZVgsIHZhbHVlWCkKKyAgICAvLyBJbnRvIHRoaXM6IHZhbHVlWC4KKyAg
ICBpZiAobGVmdCA9PSByaWdodCkKKyAgICAgICAgcmV0dXJuIGxlZnQ7CisKKyAgICAvLyBUdXJu
IHRoaXM6IEJpdE9yKHZhbHVlLCB6ZXJvLWNvbnN0YW50KQorICAgIC8vIEludG8gdGhpczogdmFs
dWUuCisgICAgaWYgKHJpZ2h0LT5pc0ludCgwKSkKKyAgICAgICAgcmV0dXJuIGxlZnQ7CisKKyAg
ICAvLyBUdXJuIHRoaXM6IEJpdE9yKHZhbHVlLCBhbGwtb25lcykKKyAgICAvLyBJbnRvIHRoaXM6
IGFsbC1vbmVzLgorICAgIC8vIEZJWE1FOiBvbmNlIHdlIGhhdmUgYSBrbm93bkJpdHMgYW5hbHlz
aXMsIHRoaXMsIHRoZSBiYXNpYyBjb25zdGFudHMgY2FzZSwgYW5kIG1vcmUgd2lsbCBiZSB0cml2
aWFsbHkgbWVyZ2VkLgorICAgIGlmICgodHlwZSA9PSBJbnQ2NCAmJiByaWdodC0+aXNJbnQoc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpKSkKKyAgICAgICAgfHwgKHR5cGUgPT0g
SW50MzIgJiYgcmlnaHQtPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgo
KSkpKSB7CisgICAgICAgIHJldHVybiByaWdodDsKKyAgICB9CisKKyAgICAvLyBUdXJuIHRoaXM6
IEJpdE9yKEJpdFhvcih4MSwgYWxsT25lcyksIEJpdFhvcih4MiwgYWxsT25lcykKKyAgICAvLyBJ
bnRvIHRoaXM6IEJpdFhvcihCaXRBbmQoeDEsIHgyKSwgYWxsT25lcykKKyAgICAvLyBCeSBhcHBs
eWluZyBEZSBNb3JnYW4gbGF3cworICAgIC8vIEZJWE1FOiBsaWtlIGZvciB0aGUgc2ltaWxhciBy
dWxlIGZvciBCaXRBbmQsIHdpdGggYSBrbm93bkJpdHMgYW5hbHlzaXMgd2UgY291bGQgZG8gc29t
ZXRoaW5nIHNpbWlsYXIgZm9yIGNvbnN0YW50cyBvdGhlciB0aGFuIGFsbE9uZXMKKyAgICBpZiAo
bGVmdC0+b3Bjb2RlKCkgPT0gQml0WG9yCisgICAgICAgICYmIHJpZ2h0LT5vcGNvZGUoKSA9PSBC
aXRYb3IKKyAgICAgICAgJiYgKCh0eXBlID09IEludDY0CisgICAgICAgICAgICAmJiBsZWZ0LT5j
aGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpKQorICAg
ICAgICAgICAgJiYgcmlnaHQtPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQ2NF90Pjo6bWF4KCkpKQorICAgICAgICB8fCAodHlwZSA9PSBJbnQzMgorICAgICAgICAgICAg
JiYgbGVmdC0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+Ojpt
YXgoKSkKKyAgICAgICAgICAgICYmIHJpZ2h0LT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkpKSB7CisgICAgICAgIFZhbHVlKiBiaXRBbmQgPSBy
ZWR1Y2VCaXRBbmQodHlwZSwgb3JpZ2luLCBsZWZ0LT5jaGlsZCgwKSwgcmlnaHQtPmNoaWxkKDAp
KTsKKyAgICAgICAgcmV0dXJuIHJlZHVjZUJpdFhvcih0eXBlLCBvcmlnaW4sIGJpdEFuZCwgcmln
aHQtPmNoaWxkKDEpKTsKKyAgICB9CisKKyAgICAvLyBUdXJuIHRoaXM6IEJpdE9yKEJpdFhvcih4
LCBhbGxPbmVzKSwgYykKKyAgICAvLyBJbnRvIHRoaXM6IEJpdFhvcihCaXRBbmQoeCwgfmMpLCBh
bGxPbmVzKQorICAgIC8vIFRoaXMgaXMgYSB2YXJpYXRpb24gb24gdGhlIHByZXZpb3VzIG9wdGlt
aXphdGlvbiwgdHJlYXRpbmcgYyBhcyBpZiBpdCB3ZXJlIEJpdFhvcih+YywgYWxsT25lcykKKyAg
ICAvLyBJdCBkb2VzIG5vdCByZWR1Y2UgdGhlIG51bWJlciBvZiBvcGVyYXRpb25zLCBidXQgcHJv
dmlkZXMgc29tZSBub3JtYWxpemF0aW9uICh3ZSB0cnkgdG8gZ2V0IEJpdFhvciBieSBhbGxPbmVz
IGF0IHRoZSBvdXRlcm1vc3QgcG9pbnQpLAorICAgIC8vIGFuZCBzb21lIGNoYW5jZSB0byBmbG9h
dCBYb3JzIHRvIGEgcGxhY2Ugd2hlcmUgdGhleSBtaWdodCBnZXQgZWxpbWluYXRlZC4KKyAgICBp
ZiAobGVmdC0+b3Bjb2RlKCkgPT0gQml0WG9yCisgICAgICAgICYmIHJpZ2h0LT5oYXNJbnQoKQor
ICAgICAgICAmJiAoKHR5cGUgPT0gSW50NjQKKyAgICAgICAgICAgICYmIGxlZnQtPmNoaWxkKDEp
LT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpKQorICAgICAgICB8
fCAodHlwZSA9PSBJbnQzMgorICAgICAgICAgICAgJiYgbGVmdC0+Y2hpbGQoMSktPmlzSW50KHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkpKSkgeworICAgICAgICBWYWx1ZSog
Yml0QW5kID0gcmVkdWNlQml0QW5kKHR5cGUsIG9yaWdpbiwgbGVmdC0+Y2hpbGQoMCksIHJpZ2h0
LT5iaXRYb3JDb25zdGFudChtX3Byb2MsIGxlZnQtPmNoaWxkKDEpKSk7CisgICAgICAgIHJldHVy
biByZWR1Y2VCaXRYb3IodHlwZSwgb3JpZ2luLCBiaXRBbmQsIGxlZnQtPmNoaWxkKDEpKTsKKyAg
ICB9CisKKyAgICBpZiAoVmFsdWUqIHJlc3VsdCA9IHRyeVJlZHVjZUJpdEFuZERpc3RyaWJ1dGl2
aXR5KEJpdE9yLCB0eXBlLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKworICAgIHJldHVybiBtYXlHaXZlVXAgPT0gTWF5R2l2ZVVwID8gbnVsbHB0ciA6IGVt
aXQ8VmFsdWU+KEJpdE9yLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBo
b2xlT3B0aW1pemVyOjpyZWR1Y2VCaXRYb3IoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1
ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBNYXlHaXZlVXBNb2RlIG1heUdpdmVVcCkKK3sKKyAgICBp
ZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxlZnQpKQorICAgICAgICByZXR1cm4gcmVkdWNlQml0
WG9yKHR5cGUsIG9yaWdpbiwgcmlnaHQsIGxlZnQpOworCisgICAgLy8gVHVybiB0aGlzOiBCaXRY
b3IoY29uc3RhbnQxLCBjb25zdGFudDIpCisgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgXiBj
b25zdGFudDIKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbGVmdC0+Yml0WG9yQ29uc3RhbnQo
bV9wcm9jLCByaWdodCkpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25z
dGFudCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IEJpdFhvcihCaXRYb3IodmFsdWUsIGNvbnN0YW50
MSksIGNvbnN0YW50MikKKyAgICAvLyBJbnRvIHRoaXM6IEJpdFhvcih2YWx1ZSwgY29uc3RhbnQx
IF4gY29uc3RhbnQyKS4KKyAgICBpZiAobGVmdC0+b3Bjb2RlKCkgPT0gQml0WG9yKSB7CisgICAg
ICAgIFZhbHVlKiBuZXdDb25zdGFudCA9IHJpZ2h0LT5iaXRYb3JDb25zdGFudChtX3Byb2MsIGxl
ZnQtPmNoaWxkKDEpKTsKKyAgICAgICAgaWYgKG5ld0NvbnN0YW50KSB7CisgICAgICAgICAgICBu
ZXdDb25zdGFudCA9IGFwcGVuZFRvQ3VycmVudEJsb2NrKG5ld0NvbnN0YW50KTsKKyAgICAgICAg
ICAgIHJldHVybiByZWR1Y2VCaXRYb3IodHlwZSwgb3JpZ2luLCBsZWZ0LT5jaGlsZCgwKSwgbmV3
Q29uc3RhbnQpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVHVybiB0aGlzOiBCaXRYb3Io
Y29tcGFyZSwgMSkKKyAgICAvLyBJbnRvIHRoaXM6IGludmVydGVkQ29tcGFyZQorICAgIGlmIChy
aWdodC0+aXNJbnQzMigxKSkgeworICAgICAgICBpZiAoVmFsdWUqIGludmVydGVkQ29tcGFyZSA9
IGxlZnQtPmludmVydGVkQ29tcGFyZShtX3Byb2MpKQorICAgICAgICAgICAgcmV0dXJuIGFwcGVu
ZFRvQ3VycmVudEJsb2NrKGludmVydGVkQ29tcGFyZSk7CisgICAgfQorCisgICAgLy8gVHVybiB0
aGlzOiBCaXRYb3IodmFsdWVYLCB2YWx1ZVgpCisgICAgLy8gSW50byB0aGlzOiB6ZXJvLWNvbnN0
YW50LgorICAgIGlmIChsZWZ0ID09IHJpZ2h0KQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJy
ZW50QmxvY2sobV9wcm9jLmFkZEludENvbnN0YW50KG9yaWdpbiwgdHlwZSwgMCkpOworCisgICAg
Ly8gVHVybiB0aGlzOiBCaXRYb3IodmFsdWUsIHplcm8tY29uc3RhbnQpCisgICAgLy8gSW50byB0
aGlzOiB2YWx1ZS4KKyAgICBpZiAocmlnaHQtPmlzSW50KDApKQorICAgICAgICByZXR1cm4gbGVm
dDsKKworICAgIGlmIChWYWx1ZSogcmVzdWx0ID0gdHJ5UmVkdWNlQml0QW5kRGlzdHJpYnV0aXZp
dHkoQml0WG9yLCB0eXBlLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKworICAgIHJldHVybiBtYXlHaXZlVXAgPT0gTWF5R2l2ZVVwID8gbnVsbHB0ciA6IGVt
aXQ8VmFsdWU+KEJpdFhvciwgb3JpZ2luLCBsZWZ0LCByaWdodCk7Cit9CisKK1ZhbHVlKiBQZWVw
aG9sZU9wdGltaXplcjo6cmVkdWNlU2hsKFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUq
IGxlZnQsIFZhbHVlKiByaWdodCwgTWF5R2l2ZVVwTW9kZSBtYXlHaXZlVXApCit7CisgICAgLy8g
VHVybiB0aGlzOiBTaGwoY29uc3RhbnQxLCBjb25zdGFudDIpCisgICAgLy8gSW50byB0aGlzOiBj
b25zdGFudDEgPDwgY29uc3RhbnQyCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGxlZnQtPnNo
bENvbnN0YW50KG1fcHJvYywgcmlnaHQpKQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50
QmxvY2soY29uc3RhbnQpOworCisgICAgLy8gVHVybiB0aGlzOiBTaGwoPFN8Wj5TaHIoQHgsIEBj
b25zdCksIEBjb25zdCkKKyAgICAvLyBJbnRvIHRoaXM6IEJpdEFuZChAeCwgLSgxPDxAY29uc3Qp
KQorICAgIGlmICgobGVmdC0+b3Bjb2RlKCkgPT0gU1NociB8fCBsZWZ0LT5vcGNvZGUoKSA9PSBa
U2hyKQorICAgICAgICAmJiBsZWZ0LT5jaGlsZCgxKS0+aGFzSW50KCkKKyAgICAgICAgJiYgcmln
aHQtPmhhc0ludCgpCisgICAgICAgICYmIGxlZnQtPmNoaWxkKDEpLT5hc0ludCgpID09IHJpZ2h0
LT5hc0ludCgpKSB7CisgICAgICAgIGludCBzaGlmdEFtb3VudCA9IHJpZ2h0LT5hc0ludCgpICYg
KHR5cGUgPT0gSW50MzIgPyAzMSA6IDYzKTsKKyAgICAgICAgVmFsdWUqIG5ld0NvbnN0ID0gYXBw
ZW5kVG9DdXJyZW50QmxvY2sobV9wcm9jLmFkZEludENvbnN0YW50KG9yaWdpbiwgdHlwZSwgLSBz
dGF0aWNfY2FzdDxpbnQ2NF90PigxdWxsIDw8IHNoaWZ0QW1vdW50KSkpOworICAgICAgICByZXR1
cm4gcmVkdWNlQml0QW5kKHR5cGUsIG9yaWdpbiwgbGVmdC0+Y2hpbGQoMCksIG5ld0NvbnN0KTsK
KyAgICB9CisKKyAgICBpZiAoVmFsdWUqIHJlc3VsdCA9IHRyeVJlZHVjZVNoaWZ0T3JSb3RhdGUo
U2hsLCB0eXBlLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KworICAgIHJldHVybiBtYXlHaXZlVXAgPT0gTWF5R2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFs
dWU+KFNobCwgb3JpZ2luLCBsZWZ0LCByaWdodCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGlt
aXplcjo6cmVkdWNlU1NocihUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBW
YWx1ZSogcmlnaHQsIE1heUdpdmVVcE1vZGUgbWF5R2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhp
czogU1Nocihjb25zdGFudDEsIGNvbnN0YW50MikKKyAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50
MSA+PiBjb25zdGFudDIKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbGVmdC0+c1NockNvbnN0
YW50KG1fcHJvYywgcmlnaHQpKQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2so
Y29uc3RhbnQpOworCisgICAgaWYgKHJpZ2h0LT5oYXNJbnQzMigpCisgICAgICAgICYmIGxlZnQt
Pm9wY29kZSgpID09IFNobAorICAgICAgICAmJiBsZWZ0LT5jaGlsZCgxKS0+aGFzSW50MzIoKQor
ICAgICAgICAmJiByaWdodC0+YXNJbnQzMigpID09IGxlZnQtPmNoaWxkKDEpLT5hc0ludDMyKCkp
IHsKKyAgICAgICAgaWYgKHJpZ2h0LT5hc0ludDMyKCkgPT0gMTYgJiYgdHlwZSA9PSBJbnQzMikg
eworICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTU2hyKFNobCh2YWx1ZSwgMTYpLCAxNikKKyAg
ICAgICAgICAgIC8vIEludG8gdGhpczogU0V4dDE2KHZhbHVlKQorICAgICAgICAgICAgcmV0dXJu
IHJlZHVjZVNFeHQxNih0eXBlLCBvcmlnaW4sIGxlZnQtPmNoaWxkKDApKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAocmlnaHQtPmFzSW50MzIoKSA9PSAyNCAmJiB0eXBlID09IEludDMyKSB7Cisg
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNTaHIoU2hsKHZhbHVlLCAyNCksIDI0KQorICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiBTRXh0OCh2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiByZWR1
Y2VTRXh0OCh0eXBlLCBvcmlnaW4sIGxlZnQtPmNoaWxkKDApKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAocmlnaHQtPmFzSW50MzIoKSA9PSAzMiAmJiB0eXBlID09IEludDY0KSB7CisgICAgICAg
ICAgICAvLyBUdXJuIHRoaXM6IFNTaHIoU2hsKHZhbHVlLCAzMiksIDMyKQorICAgICAgICAgICAg
Ly8gSW50byB0aGlzOiBTRXh0MzIoVHJ1bmModmFsdWUpKQorICAgICAgICAgICAgVmFsdWUqIHRy
dW5jID0gcmVkdWNlVHJ1bmModHlwZSwgb3JpZ2luLCBsZWZ0LT5jaGlsZCgwKSk7CisgICAgICAg
ICAgICByZXR1cm4gcmVkdWNlU0V4dDMyKHR5cGUsIG9yaWdpbiwgdHJ1bmMpOworICAgICAgICB9
CisgICAgICAgIC8vIEZJWE1FOiBBZGQgY2FzZXMgZm9yIDQ4IGFuZCA1NiwgYnV0IHRoYXQgd291
bGQgdHJhbnNsYXRlIHRvIFNFeHQzMihTRXh0OCkgb3IKKyAgICAgICAgLy8gU0V4dDMyKFNFeHQx
NiksIHdoaWNoIHdlIGRvbid0IGN1cnJlbnRseSBsb3dlciBlZmZpY2llbnRseS4KKyAgICB9CisK
KyAgICBpZiAoVmFsdWUqIHJlc3VsdCA9IHRyeVJlZHVjZVNoaWZ0T3JSb3RhdGUoU1NociwgdHlw
ZSwgb3JpZ2luLCBsZWZ0LCByaWdodCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBy
ZXR1cm4gbWF5R2l2ZVVwID09IE1heUdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihTU2hy
LCBvcmlnaW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpy
ZWR1Y2VaU2hyKFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiBy
aWdodCwgTWF5R2l2ZVVwTW9kZSBtYXlHaXZlVXApCit7CisgICAgLy8gVHVybiB0aGlzOiBaU2hy
KGNvbnN0YW50MSwgY29uc3RhbnQyKQorICAgIC8vIEludG8gdGhpczogKHVuc2lnbmVkKWNvbnN0
YW50MSA+PiBjb25zdGFudDIKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbGVmdC0+elNockNv
bnN0YW50KG1fcHJvYywgcmlnaHQpKQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50Qmxv
Y2soY29uc3RhbnQpOworCisgICAgaWYgKFZhbHVlKiByZXN1bHQgPSB0cnlSZWR1Y2VTaGlmdE9y
Um90YXRlKFpTaHIsIHR5cGUsIG9yaWdpbiwgbGVmdCwgcmlnaHQpKQorICAgICAgICByZXR1cm4g
cmVzdWx0OworCisgICAgcmV0dXJuIG1heUdpdmVVcCA9PSBNYXlHaXZlVXAgPyBudWxscHRyIDog
ZW1pdDxWYWx1ZT4oWlNociwgb3JpZ2luLCBsZWZ0LCByaWdodCk7Cit9CisKK1ZhbHVlKiBQZWVw
aG9sZU9wdGltaXplcjo6cmVkdWNlUm90UihUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVl
KiBsZWZ0LCBWYWx1ZSogcmlnaHQsIE1heUdpdmVVcE1vZGUgbWF5R2l2ZVVwKQoreworICAgIC8v
IFR1cm4gdGhpczogUm90Uihjb25zdGFudDEsIGNvbnN0YW50MikKKyAgICAvLyBJbnRvIHRoaXM6
IChjb25zdGFudDEgPj4gY29uc3RhbnQyKSB8IChjb25zdGFudDEgPDwgc2l6ZW9mKGNvbnN0YW50
MSkgKiA4IC0gY29uc3RhbnQyKQorICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBsZWZ0LT5yb3RS
Q29uc3RhbnQobV9wcm9jLCByaWdodCkpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRC
bG9jayhjb25zdGFudCk7CisKKyAgICBpZiAoVmFsdWUqIHJlc3VsdCA9IHRyeVJlZHVjZVNoaWZ0
T3JSb3RhdGUoUm90UiwgdHlwZSwgb3JpZ2luLCBsZWZ0LCByaWdodCkpCisgICAgICAgIHJldHVy
biByZXN1bHQ7CisKKyAgICByZXR1cm4gbWF5R2l2ZVVwID09IE1heUdpdmVVcCA/IG51bGxwdHIg
OiBlbWl0PFZhbHVlPihSb3RSLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBl
ZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VSb3RMKFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFs
dWUqIGxlZnQsIFZhbHVlKiByaWdodCwgTWF5R2l2ZVVwTW9kZSBtYXlHaXZlVXApCit7CisgICAg
Ly8gVHVybiB0aGlzOiBSb3RMKGNvbnN0YW50MSwgY29uc3RhbnQyKQorICAgIC8vIEludG8gdGhp
czogKGNvbnN0YW50MSA8PCBjb25zdGFudDIpIHwgKGNvbnN0YW50MSA+PiBzaXplb2YoY29uc3Rh
bnQxKSAqIDggLSBjb25zdGFudDIpCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGxlZnQtPnJv
dExDb25zdGFudChtX3Byb2MsIHJpZ2h0KSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVu
dEJsb2NrKGNvbnN0YW50KTsKKworICAgIGlmIChWYWx1ZSogcmVzdWx0ID0gdHJ5UmVkdWNlU2hp
ZnRPclJvdGF0ZShSb3RMLCB0eXBlLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKworICAgIHJldHVybiBtYXlHaXZlVXAgPT0gTWF5R2l2ZVVwID8gbnVsbHB0
ciA6IGVtaXQ8VmFsdWU+KFJvdEwsIG9yaWdpbiwgbGVmdCwgcmlnaHQpOworfQorCitWYWx1ZSog
UGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUFicyhUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZh
bHVlKiBjaGlsZCwgTWF5R2l2ZVVwTW9kZSBtYXlHaXZlVXApCit7CisgICAgLy8gVHVybiB0aGlz
OiBBYnMoY29uc3RhbnQpCisgICAgLy8gSW50byB0aGlzOiBmYWJzPHR5cGU+KGNvbnN0YW50KQor
ICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBjaGlsZC0+YWJzQ29uc3RhbnQobV9wcm9jKSkKKyAg
ICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50KTsKKworICAgIC8vIFR1
cm4gdGhpczogQWJzKEFicyh2YWx1ZSkpCisgICAgLy8gSW50byB0aGlzOiBBYnModmFsdWUpCisg
ICAgaWYgKGNoaWxkLT5vcGNvZGUoKSA9PSBBYnMpCisgICAgICAgIHJldHVybiBjaGlsZDsKKwor
ICAgIC8vIFR1cm4gdGhpczogQWJzKE5lZyh2YWx1ZSkpCisgICAgLy8gSW50byB0aGlzOiBBYnMo
dmFsdWUpCisgICAgaWYgKGNoaWxkLT5vcGNvZGUoKSA9PSBOZWcpCisgICAgICAgIHJldHVybiBy
ZWR1Y2VBYnModHlwZSwgb3JpZ2luLCBjaGlsZC0+Y2hpbGQoMCkpOworCisgICAgLy8gVHVybiB0
aGlzOiBBYnMoQml0d2lzZUNhc3QodmFsdWUpKQorICAgIC8vIEludG8gdGhpczogQml0d2lzZUNh
c3QoQW5kKHZhbHVlLCBtYXNrLXRvcC1iaXQpKQorICAgIGlmIChjaGlsZC0+b3Bjb2RlKCkgPT0g
Qml0d2lzZUNhc3QpIHsKKyAgICAgICAgVmFsdWUqIG1hc2s7CisgICAgICAgIGlmICh0eXBlID09
IERvdWJsZSkKKyAgICAgICAgICAgIG1hc2sgPSBlbWl0PENvbnN0NjRWYWx1ZT4ob3JpZ2luLCB+
KDFsbCA8PCA2MykpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtYXNrID0gZW1pdDxDb25z
dDMyVmFsdWU+KG9yaWdpbiwgfigxbGwgPDwgMzEpKTsKKworICAgICAgICBWYWx1ZSogYml0QW5k
ID0gcmVkdWNlQml0QW5kKHR5cGUgPT0gRG91YmxlID8gSW50NjQgOiBJbnQzMiwgb3JpZ2luLCBj
aGlsZC0+Y2hpbGQoMCksIG1hc2spOworICAgICAgICByZXR1cm4gcmVkdWNlQml0d2lzZUNhc3Qo
dHlwZSwgb3JpZ2luLCBiaXRBbmQpOworICAgIH0KKworICAgIHJldHVybiBtYXlHaXZlVXAgPT0g
TWF5R2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KEFicywgb3JpZ2luLCBjaGlsZCk7Cit9
CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlQ2VpbChUeXBlLCBPcmlnaW4gb3Jp
Z2luLCBWYWx1ZSogY2hpbGQsIE1heUdpdmVVcE1vZGUgbWF5R2l2ZVVwKQoreworICAgIC8vIFR1
cm4gdGhpczogQ2VpbChjb25zdGFudCkKKyAgICAvLyBJbnRvIHRoaXM6IGNlaWw8dHlwZT4oY29u
c3RhbnQpCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGNoaWxkLT5jZWlsQ29uc3RhbnQobV9w
cm9jKSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50KTsKKwor
ICAgIC8vIFR1cm4gdGhpczogQ2VpbChyb3VuZGVkVmFsdWUpCisgICAgLy8gSW50byB0aGlzOiBy
b3VuZGVkVmFsdWUKKyAgICBpZiAoY2hpbGQtPmlzUm91bmRlZCgpKQorICAgICAgICByZXR1cm4g
Y2hpbGQ7CisKKyAgICByZXR1cm4gbWF5R2l2ZVVwID09IE1heUdpdmVVcCA/IG51bGxwdHIgOiBl
bWl0PFZhbHVlPihDZWlsLCBvcmlnaW4sIGNoaWxkKTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0
aW1pemVyOjpyZWR1Y2VGbG9vcihUeXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogY2hpbGQsIE1h
eUdpdmVVcE1vZGUgbWF5R2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogRmxvb3IoY29uc3Rh
bnQpCisgICAgLy8gSW50byB0aGlzOiBmbG9vcjx0eXBlPihjb25zdGFudCkKKyAgICBpZiAoVmFs
dWUqIGNvbnN0YW50ID0gY2hpbGQtPmZsb29yQ29uc3RhbnQobV9wcm9jKSkKKyAgICAgICAgcmV0
dXJuIGFwcGVuZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50KTsKKworICAgIC8vIFR1cm4gdGhpczog
Rmxvb3Iocm91bmRlZFZhbHVlKQorICAgIC8vIEludG8gdGhpczogcm91bmRlZFZhbHVlCisgICAg
aWYgKGNoaWxkLT5pc1JvdW5kZWQoKSkKKyAgICAgICAgcmV0dXJuIGNoaWxkOworCisgICAgcmV0
dXJuIG1heUdpdmVVcCA9PSBNYXlHaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oRmxvb3Is
IG9yaWdpbiwgY2hpbGQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVNx
cnQoVHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGNoaWxkLCBNYXlHaXZlVXBNb2RlIG1heUdp
dmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6IFNxcnQoY29uc3RhbnQpCisgICAgLy8gSW50byB0
aGlzOiBzcXJ0PHR5cGU+KGNvbnN0YW50KQorICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBjaGls
ZC0+c3FydENvbnN0YW50KG1fcHJvYykpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRC
bG9jayhjb25zdGFudCk7CisKKyAgICByZXR1cm4gbWF5R2l2ZVVwID09IE1heUdpdmVVcCA/IG51
bGxwdHIgOiBlbWl0PFZhbHVlPihTcXJ0LCBvcmlnaW4sIGNoaWxkKTsKK30KKworVmFsdWUqIFBl
ZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VCaXR3aXNlQ2FzdChUeXBlLCBPcmlnaW4gb3JpZ2luLCBW
YWx1ZSogY2hpbGQsIE1heUdpdmVVcE1vZGUgbWF5R2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhp
czogQml0d2lzZUNhc3QoY29uc3RhbnQpCisgICAgLy8gSW50byB0aGlzOiBiaXR3aXNlQ2FzdDx0
eXBlPihjb25zdGFudCkKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gY2hpbGQtPmJpdHdpc2VD
YXN0Q29uc3RhbnQobV9wcm9jKSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2Nr
KGNvbnN0YW50KTsKKworICAgIC8vIFR1cm4gdGhpczogQml0d2lzZUNhc3QoQml0d2lzZUNhc3Qo
dmFsdWUpKQorICAgIC8vIEludG8gdGhpczogdmFsdWUKKyAgICBpZiAoY2hpbGQtPm9wY29kZSgp
ID09IEJpdHdpc2VDYXN0KQorICAgICAgICByZXR1cm4gY2hpbGQtPmNoaWxkKDApOworCisgICAg
cmV0dXJuIG1heUdpdmVVcCA9PSBNYXlHaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oQml0
d2lzZUNhc3QsIG9yaWdpbiwgY2hpbGQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6
OnJlZHVjZVNFeHQ4KFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGNoaWxkLCBNYXlH
aXZlVXBNb2RlIG1heUdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6IFNFeHQ4KGNvbnN0YW50
KQorICAgIC8vIEludG8gdGhpczogc3RhdGljX2Nhc3Q8aW50OF90Pihjb25zdGFudCkKKyAgICBp
ZiAoY2hpbGQtPmhhc0ludDMyKCkpIHsKKyAgICAgICAgaW50MzJfdCByZXN1bHQgPSBzdGF0aWNf
Y2FzdDxpbnQ4X3Q+KGNoaWxkLT5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gZW1pdDxDb25z
dDMyVmFsdWU+KG9yaWdpbiwgcmVzdWx0KTsKKyAgICB9CisKKyAgICAvLyBUdXJuIHRoaXM6IFNF
eHQ4KFNFeHQ4KHZhbHVlKSkKKyAgICAvLyAgIG9yIHRoaXM6IFNFeHQ4KFNFeHQxNih2YWx1ZSkp
CisgICAgLy8gSW50byB0aGlzOiBTRXh0OCh2YWx1ZSkKKyAgICBpZiAoY2hpbGQtPm9wY29kZSgp
ID09IFNFeHQ4IHx8IGNoaWxkLT5vcGNvZGUoKSA9PSBTRXh0MTYpCisgICAgICAgIHJldHVybiBy
ZWR1Y2VTRXh0OCh0eXBlLCBvcmlnaW4sIGNoaWxkLT5jaGlsZCgwKSk7CisKKyAgICBpZiAoY2hp
bGQtPm9wY29kZSgpID09IEJpdEFuZCAmJiBjaGlsZC0+Y2hpbGQoMSktPmhhc0ludDMyKCkpIHsK
KyAgICAgICAgVmFsdWUqIGlucHV0ID0gY2hpbGQtPmNoaWxkKDApOworICAgICAgICBpbnQzMl90
IG1hc2sgPSBjaGlsZC0+Y2hpbGQoMSktPmFzSW50MzIoKTsKKworICAgICAgICAvLyBUdXJuIHRo
aXM6IFNFeHQ4KEJpdEFuZChpbnB1dCwgbWFzaykpIHdoZXJlIChtYXNrICYgMHhmZikgPT0gMHhm
ZgorICAgICAgICAvLyBJbnRvIHRoaXM6IFNFeHQ4KGlucHV0KQorICAgICAgICBpZiAoKG1hc2sg
JiAweGZmKSA9PSAweGZmKQorICAgICAgICAgICAgcmV0dXJuIHJlZHVjZVNFeHQ4KHR5cGUsIG9y
aWdpbiwgaW5wdXQpOworCisgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDgoQml0QW5kKGlucHV0
LCBtYXNrKSkgd2hlcmUgKG1hc2sgJiAweDgwKSA9PSAwCisgICAgICAgIC8vIEludG8gdGhpczog
Qml0QW5kKGlucHV0LCBjb25zdCAmIDB4N2YpCisgICAgICAgIGlmICghKG1hc2sgJiAweDgwKSkg
eworICAgICAgICAgICAgVmFsdWUqIG5ld0NvbnN0ID0gZW1pdDxDb25zdDMyVmFsdWU+KG9yaWdp
biwgbWFzayAmIDB4N2YpOworICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUJpdEFuZCh0eXBlLCBv
cmlnaW4sIGlucHV0LCBuZXdDb25zdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW1f
cHJvYy5oYXNRdWlya3MoKSkgeworICAgICAgICAvLyBUdXJuIHRoaXM6IFNFeHQ4KEF0b21pY1hj
aGdfX18pCisgICAgICAgIC8vIEludG8gdGhpczogQXRvbWljWGNoZ19fXworICAgICAgICBpZiAo
aXNBdG9taWNYY2hnKGNoaWxkLT5vcGNvZGUoKSkgJiYgY2hpbGQtPmFzPEF0b21pY1ZhbHVlPigp
LT5hY2Nlc3NXaWR0aCgpID09IFdpZHRoOCkKKyAgICAgICAgICAgIHJldHVybiBjaGlsZDsKKyAg
ICB9CisKKyAgICByZXR1cm4gbWF5R2l2ZVVwID09IE1heUdpdmVVcCA/IG51bGxwdHIgOiBlbWl0
PFZhbHVlPihTRXh0OCwgb3JpZ2luLCBjaGlsZCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGlt
aXplcjo6cmVkdWNlU0V4dDE2KFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGNoaWxk
LCBNYXlHaXZlVXBNb2RlIG1heUdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6IFNFeHQxNihj
b25zdGFudCkKKyAgICAvLyBJbnRvIHRoaXM6IHN0YXRpY19jYXN0PGludDE2X3Q+KGNvbnN0YW50
KQorICAgIGlmIChjaGlsZC0+aGFzSW50MzIoKSkgeworICAgICAgICBpbnQzMl90IHJlc3VsdCA9
IHN0YXRpY19jYXN0PGludDE2X3Q+KGNoaWxkLT5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4g
ZW1pdDxDb25zdDMyVmFsdWU+KG9yaWdpbiwgcmVzdWx0KTsKKyAgICB9CisKKyAgICAvLyBUdXJu
IHRoaXM6IFNFeHQxNihTRXh0MTYodmFsdWUpKQorICAgIC8vIEludG8gdGhpczogU0V4dDE2KHZh
bHVlKQorICAgIC8vIGFuZCB0dXJuIHRoaXM6IFNFeHQxNihTRXh0OCh2YWx1ZSkpCisgICAgLy8g
SW50byB0aGlzOiBTRXh0OCh2YWx1ZSkKKyAgICBpZiAoY2hpbGQtPm9wY29kZSgpID09IFNFeHQx
NiB8fCBjaGlsZC0+b3Bjb2RlKCkgPT0gU0V4dDgpCisgICAgICAgIHJldHVybiBjaGlsZDsKKwor
ICAgIGlmIChjaGlsZC0+b3Bjb2RlKCkgPT0gQml0QW5kICYmIGNoaWxkLT5jaGlsZCgxKS0+aGFz
SW50MzIoKSkgeworICAgICAgICBWYWx1ZSogaW5wdXQgPSBjaGlsZC0+Y2hpbGQoMCk7CisgICAg
ICAgIGludDMyX3QgbWFzayA9IGNoaWxkLT5jaGlsZCgxKS0+YXNJbnQzMigpOworCisgICAgICAg
IC8vIFR1cm4gdGhpczogU0V4dDE2KEJpdEFuZChpbnB1dCwgbWFzaykpIHdoZXJlIChtYXNrICYg
MHhmZmZmKSA9PSAweGZmZmYKKyAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0MTYoaW5wdXQpCisg
ICAgICAgIGlmICgobWFzayAmIDB4ZmZmZikgPT0gMHhmZmZmKQorICAgICAgICAgICAgcmV0dXJu
IHJlZHVjZVNFeHQxNih0eXBlLCBvcmlnaW4sIGlucHV0KTsKKworICAgICAgICAvLyBUdXJuIHRo
aXM6IFNFeHQxNihCaXRBbmQoaW5wdXQsIG1hc2spKSB3aGVyZSAobWFzayAmIDB4ODAwMCkgPT0g
MAorICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdEFuZChpbnB1dCwgY29uc3QgJiAweDdmZmYpCisg
ICAgICAgIGlmICghKG1hc2sgJiAweDgwMDApKSB7CisgICAgICAgICAgICBWYWx1ZSogbmV3Q29u
c3QgPSBlbWl0PENvbnN0MzJWYWx1ZT4ob3JpZ2luLCBtYXNrICYgMHg3ZmZmKTsKKyAgICAgICAg
ICAgIHJldHVybiByZWR1Y2VCaXRBbmQodHlwZSwgb3JpZ2luLCBpbnB1dCwgbmV3Q29uc3QpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFtX3Byb2MuaGFzUXVpcmtzKCkpIHsKKyAgICAg
ICAgLy8gVHVybiB0aGlzOiBTRXh0MTYoQXRvbWljWGNoZ19fXykKKyAgICAgICAgLy8gSW50byB0
aGlzOiBBdG9taWNYY2hnX19fCisgICAgICAgIGlmIChpc0F0b21pY1hjaGcoY2hpbGQtPm9wY29k
ZSgpKSAmJiBjaGlsZC0+YXM8QXRvbWljVmFsdWU+KCktPmFjY2Vzc1dpZHRoKCkgPT0gV2lkdGgx
NikKKyAgICAgICAgICAgIHJldHVybiBjaGlsZDsKKyAgICB9CisKKyAgICByZXR1cm4gbWF5R2l2
ZVVwID09IE1heUdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihTRXh0MTYsIG9yaWdpbiwg
Y2hpbGQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZVNFeHQzMihUeXBl
IHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBjaGlsZCwgTWF5R2l2ZVVwTW9kZSBtYXlHaXZl
VXApCit7CisgICAgLy8gVHVybiB0aGlzOiBTRXh0MzIoY29uc3RhbnQpCisgICAgLy8gSW50byB0
aGlzOiBzdGF0aWNfY2FzdDxpbnQ2NF90Pihjb25zdGFudCkKKyAgICBpZiAoY2hpbGQtPmhhc0lu
dDMyKCkpCisgICAgICAgIHJldHVybiBlbWl0PENvbnN0NjRWYWx1ZT4ob3JpZ2luLCBjaGlsZC0+
YXNJbnQzMigpKTsKKworICAgIC8vIFR1cm4gdGhpczogU0V4dDMyKEJpdEFuZChpbnB1dCwgbWFz
aykpIHdoZXJlIChtYXNrICYgMHg4MDAwMDAwMCkgPT0gMAorICAgIC8vIEludG8gdGhpczogWkV4
dDMyKEJpdEFuZChpbnB1dCwgbWFzaykpCisgICAgaWYgKGNoaWxkLT5vcGNvZGUoKSA9PSBCaXRB
bmQgJiYgY2hpbGQtPmNoaWxkKDEpLT5oYXNJbnQzMigpCisgICAgICAgICYmICEoY2hpbGQtPmNo
aWxkKDEpLT5hc0ludDMyKCkgJiAweDgwMDAwMDAwKSkgeworICAgICAgICByZXR1cm4gcmVkdWNl
WkV4dDMyKHR5cGUsIG9yaWdpbiwgY2hpbGQpOworICAgIH0KKworICAgIHJldHVybiBtYXlHaXZl
VXAgPT0gTWF5R2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KFNFeHQzMiwgb3JpZ2luLCBj
aGlsZCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlWkV4dDMyKFR5cGUs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBjaGlsZCwgTWF5R2l2ZVVwTW9kZSBtYXlHaXZlVXApCit7
CisgICAgLy8gVHVybiB0aGlzOiBaRXh0MzIoY29uc3RhbnQpCisgICAgLy8gSW50byB0aGlzOiBz
dGF0aWNfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNvbnN0YW50KSkKKyAg
ICBpZiAoY2hpbGQtPmhhc0ludDMyKCkpIHsKKyAgICAgICAgdWludDY0X3QgcmVzdWx0ID0gc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PHVpbnQzMl90PihjaGlsZC0+YXNJbnQzMigp
KSk7CisgICAgICAgIHJldHVybiBlbWl0PENvbnN0NjRWYWx1ZT4ob3JpZ2luLCByZXN1bHQpOwor
ICAgIH0KKworICAgIHJldHVybiBtYXlHaXZlVXAgPT0gTWF5R2l2ZVVwID8gbnVsbHB0ciA6IGVt
aXQ8VmFsdWU+KFpFeHQzMiwgb3JpZ2luLCBjaGlsZCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9w
dGltaXplcjo6cmVkdWNlVHJ1bmMoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogY2hp
bGQsIE1heUdpdmVVcE1vZGUgbWF5R2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogVHJ1bmMo
Y29uc3RhbnQpCisgICAgLy8gSW50byB0aGlzOiBzdGF0aWNfY2FzdDxpbnQzMl90Pihjb25zdGFu
dCkKKyAgICBpZiAoY2hpbGQtPmhhc0ludDY0KCkgfHwgY2hpbGQtPmhhc0RvdWJsZSgpKQorICAg
ICAgICByZXR1cm4gZW1pdDxDb25zdDMyVmFsdWU+KG9yaWdpbiwgc3RhdGljX2Nhc3Q8aW50MzJf
dD4oY2hpbGQtPmFzSW50NjQoKSkpOworCisgICAgLy8gVHVybiB0aGlzOiBUcnVuYyhTRXh0MzIo
dmFsdWUpKSBvciBUcnVuYyhaRXh0MzIodmFsdWUpKQorICAgIC8vIEludG8gdGhpczogdmFsdWUK
KyAgICBpZiAoY2hpbGQtPm9wY29kZSgpID09IFNFeHQzMiB8fCBjaGlsZC0+b3Bjb2RlKCkgPT0g
WkV4dDMyKQorICAgICAgICByZXR1cm4gY2hpbGQtPmNoaWxkKDApOworCisgICAgLy8gVHVybiB0
aGlzOiBUcnVuYyhPcCh2YWx1ZSwgY29uc3RhbnQpKQorICAgIC8vICAgICB3aGVyZSAhKGNvbnN0
YW50ICYgMHhmZmZmZmZmZikKKyAgICAvLyAgICAgICBhbmQgT3AgaXMgQWRkLCBTdWIsIEJpdE9y
LCBvciBCaXRYb3IKKyAgICAvLyBpbnRvIHRoaXM6IFRydW5jKHZhbHVlKQorICAgIC8vIEZJWE1F
OiB0aGlzIGlzIGp1c3QgYSBzcGVjaWFsIGNhc2Ugb2YgYSBtb3JlIGdlbmVyYWwgdXNlZEJpdHMg
YW5hbHlzaXMuCisgICAgc3dpdGNoIChjaGlsZC0+b3Bjb2RlKCkpIHsKKyAgICBjYXNlIEFkZDoK
KyAgICBjYXNlIFN1YjoKKyAgICBjYXNlIEJpdE9yOgorICAgIGNhc2UgQml0WG9yOgorICAgICAg
ICBpZiAoY2hpbGQtPmNoaWxkKDEpLT5oYXNJbnQ2NCgpICYmICEoY2hpbGQtPmNoaWxkKDEpLT5h
c0ludDY0KCkgJiAweGZmZmZmZmZmbGwpKQorICAgICAgICAgICAgcmV0dXJuIHJlZHVjZVRydW5j
KHR5cGUsIG9yaWdpbiwgY2hpbGQtPmNoaWxkKDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIG1heUdpdmVVcCA9PSBN
YXlHaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oVHJ1bmMsIG9yaWdpbiwgY2hpbGQpOwor
fQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUlUb0QoVHlwZSwgT3JpZ2luIG9y
aWdpbiwgVmFsdWUqIGNoaWxkLCBNYXlHaXZlVXBNb2RlIG1heUdpdmVVcCkKK3sKKyAgICAvLyBU
dXJuIHRoaXM6IElUb0QoY29uc3RhbnQpCisgICAgLy8gSW50byB0aGlzOiBDb25zdERvdWJsZShj
b25zdGFudCkKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gY2hpbGQtPmlUb0RDb25zdGFudCht
X3Byb2MpKQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOwor
CisgICAgcmV0dXJuIG1heUdpdmVVcCA9PSBNYXlHaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1
ZT4oSVRvRCwgb3JpZ2luLCBjaGlsZCk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6
cmVkdWNlSVRvRihUeXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogY2hpbGQsIE1heUdpdmVVcE1v
ZGUgbWF5R2l2ZVVwKQoreworICAgIC8vIFR1cm4gdGhpczogSVRvRihjb25zdGFudCkKKyAgICAv
LyBJbnRvIHRoaXM6IENvbnN0RmxvYXQoY29uc3RhbnQpCisgICAgaWYgKFZhbHVlKiBjb25zdGFu
dCA9IGNoaWxkLT5pVG9GQ29uc3RhbnQobV9wcm9jKSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRv
Q3VycmVudEJsb2NrKGNvbnN0YW50KTsKKworICAgIHJldHVybiBtYXlHaXZlVXAgPT0gTWF5R2l2
ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KElUb0YsIG9yaWdpbiwgY2hpbGQpOworfQorCitW
YWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUZsb2F0VG9Eb3VibGUoVHlwZSwgT3JpZ2lu
IG9yaWdpbiwgVmFsdWUqIGNoaWxkLCBNYXlHaXZlVXBNb2RlIG1heUdpdmVVcCkKK3sKKyAgICAv
LyBUdXJuIHRoaXM6IEZsb2F0VG9Eb3VibGUoY29uc3RhbnQpCisgICAgLy8gSW50byB0aGlzOiBD
b25zdERvdWJsZShjb25zdGFudCkKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gY2hpbGQtPmZs
b2F0VG9Eb3VibGVDb25zdGFudChtX3Byb2MpKQorICAgICAgICByZXR1cm4gYXBwZW5kVG9DdXJy
ZW50QmxvY2soY29uc3RhbnQpOworCisgICAgcmV0dXJuIG1heUdpdmVVcCA9PSBNYXlHaXZlVXAg
PyBudWxscHRyIDogZW1pdDxWYWx1ZT4oRmxvYXRUb0RvdWJsZSwgb3JpZ2luLCBjaGlsZCk7Cit9
CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlRG91YmxlVG9GbG9hdChUeXBlLCBP
cmlnaW4gb3JpZ2luLCBWYWx1ZSogY2hpbGQsIE1heUdpdmVVcE1vZGUgbWF5R2l2ZVVwKQorewor
ICAgIC8vIFR1cm4gdGhpczogRG91YmxlVG9GbG9hdChjb25zdGFudCkKKyAgICAvLyBJbnRvIHRo
aXM6IENvbnN0RmxvYXQoY29uc3RhbnQpCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGNoaWxk
LT5kb3VibGVUb0Zsb2F0Q29uc3RhbnQobV9wcm9jKSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRv
Q3VycmVudEJsb2NrKGNvbnN0YW50KTsKKworICAgIC8vIFR1cm4gdGhpczogRG91YmxlVG9GbG9h
dChGbG9hdFRvRG91YmxlKHZhbHVlKSkKKyAgICAvLyBJbnRvIHRoaXM6IHZhbHVlCisgICAgaWYg
KGNoaWxkLT5vcGNvZGUoKSA9PSBGbG9hdFRvRG91YmxlKQorICAgICAgICByZXR1cm4gY2hpbGQt
PmNoaWxkKDApOworCisgICAgcmV0dXJuIG1heUdpdmVVcCA9PSBNYXlHaXZlVXAgPyBudWxscHRy
IDogZW1pdDxWYWx1ZT4oRG91YmxlVG9GbG9hdCwgb3JpZ2luLCBjaGlsZCk7Cit9CisKK1ZhbHVl
KiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlU2VsZWN0KFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdp
biwgVmFsdWUqIGNvbmQsIFZhbHVlKiBpZlRydWUsIFZhbHVlKiBpZkZhbHNlLCBNYXlHaXZlVXBN
b2RlIG1heUdpdmVVcCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6IFNlbGVjdChjb25zdGFudCwgYSwg
YikKKyAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50ID8gYSA6IGIKKyAgICBpZiAoY29uZC0+aGFz
SW50MzIoKSkKKyAgICAgICAgcmV0dXJuIGNvbmQtPmFzSW50MzIoKSA/IGlmVHJ1ZSA6IGlmRmFs
c2U7CisKKyAgICAvLyBUdXJuIHRoaXM6IFNlbGVjdChFcXVhbCh4LCAwKSwgYSwgYikKKyAgICAv
LyBJbnRvIHRoaXM6IFNlbGVjdCh4LCBiLCBhKQorICAgIGlmIChjb25kLT5vcGNvZGUoKSA9PSBF
cXVhbCAmJiBjb25kLT5jaGlsZCgxKS0+aXNJbnQoMCkpCisgICAgICAgIHJldHVybiByZWR1Y2VT
ZWxlY3QodHlwZSwgb3JpZ2luLCBjb25kLT5jaGlsZCgwKSwgaWZGYWxzZSwgaWZUcnVlKTsKKwor
ICAgIC8vIFR1cm4gdGhpczogU2VsZWN0KEJpdFhvcihib29sLCAxKSwgYSwgYikKKyAgICAvLyBJ
bnRvIHRoaXM6IFNlbGVjdChib29sLCBiLCBhKQorICAgIGlmIChjb25kLT5vcGNvZGUoKSA9PSBC
aXRYb3IgJiYgY29uZC0+Y2hpbGQoMSktPmlzSW50MzIoMSkgJiYgY29uZC0+Y2hpbGQoMCktPnJl
dHVybnNCb29sKCkpCisgICAgICAgIHJldHVybiByZWR1Y2VTZWxlY3QodHlwZSwgb3JpZ2luLCBj
b25kLT5jaGlsZCgwKSwgaWZGYWxzZSwgaWZUcnVlKTsKKworICAgIC8vIFR1cm4gdGhpczogU2Vs
ZWN0KEJpdEFuZChib29sLCB4eXoxKSwgYSwgYikKKyAgICAvLyBJbnRvIHRoaXM6IFNlbGVjdChi
b29sLCBhLCBiKQorICAgIGlmIChjb25kLT5vcGNvZGUoKSA9PSBCaXRBbmQKKyAgICAgICAgJiYg
Y29uZC0+Y2hpbGQoMSktPmhhc0ludCgpCisgICAgICAgICYmIGNvbmQtPmNoaWxkKDEpLT5hc0lu
dCgpICYgMQorICAgICAgICAmJiBjb25kLT5jaGlsZCgwKS0+cmV0dXJuc0Jvb2woKSkgeworICAg
ICAgICByZXR1cm4gcmVkdWNlU2VsZWN0KHR5cGUsIG9yaWdpbiwgY29uZC0+Y2hpbGQoMCksIGlm
VHJ1ZSwgaWZGYWxzZSk7CisgICAgfQorCisgICAgLy8gVHVybiB0aGlzOiBTZWxlY3Qoc3R1ZmYs
IHgsIHgpCisgICAgLy8gSW50byB0aGlzOiB4CisgICAgaWYgKGlmVHJ1ZSA9PSBpZkZhbHNlKQor
ICAgICAgICByZXR1cm4gaWZUcnVlOworCisgICAgcmV0dXJuIG1heUdpdmVVcCA9PSBNYXlHaXZl
VXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oU2VsZWN0LCBvcmlnaW4sIGNvbmQsIGlmVHJ1ZSwg
aWZGYWxzZSk7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlTG9hZFN0b3Jl
KE9wY29kZSBvcCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogYWRkcmVzcywgVmFs
dWU6Ok9mZnNldFR5cGUgb2Zmc2V0LCBWYWx1ZSogdmFsdWVTdG9yZWQsIEhlYXBSYW5nZSByYW5n
ZSwgSGVhcFJhbmdlIGZlbmNlUmFuZ2UsIE1heUdpdmVVcE1vZGUgbWF5R2l2ZVVwKQoreworICAg
IC8vIFR1cm4gdGhpczogTG9hZChBZGQoYWRkcmVzcywgb2Zmc2V0MSksIG9mZnNldCA9IG9mZnNl
dDIpCisgICAgLy8gSW50byB0aGlzOiBMb2FkKGFkZHJlc3MsIG9mZnNldCA9IG9mZnNldDEgKyBv
ZmZzZXQyKQorICAgIC8vCisgICAgLy8gQWxzbyB0dXJucyB0aGlzOiBTdG9yZSh2YWx1ZSwgQWRk
KGFkZHJlc3MsIG9mZnNldDEpLCBvZmZzZXQgPSBvZmZzZXQyKQorICAgIC8vIEludG8gdGhpczog
U3RvcmUodmFsdWUsIGFkZHJlc3MsIG9mZnNldCA9IG9mZnNldDEgKyBvZmZzZXQyKQorICAgIGlm
IChhZGRyZXNzLT5vcGNvZGUoKSA9PSBBZGQgJiYgYWRkcmVzcy0+Y2hpbGQoMSktPmhhc0ludFB0
cigpKSB7CisgICAgICAgIGludHB0cl90IG9mZnNldDEgPSBhZGRyZXNzLT5jaGlsZCgxKS0+YXNJ
bnRQdHIoKTsKKyAgICAgICAgaWYgKCFzdW1PdmVyZmxvd3M8aW50cHRyX3Q+KG9mZnNldCwgb2Zm
c2V0MSkpIHsKKyAgICAgICAgICAgIG9mZnNldDEgKz0gb2Zmc2V0OworICAgICAgICAgICAgVmFs
dWU6Ok9mZnNldFR5cGUgc21hbGxPZmZzZXQgPSBzdGF0aWNfY2FzdDxWYWx1ZTo6T2Zmc2V0VHlw
ZT4ob2Zmc2V0MSk7CisgICAgICAgICAgICBpZiAoc21hbGxPZmZzZXQgPT0gb2Zmc2V0MSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcmVkdWNlTG9hZFN0b3JlKG9wLCB0eXBlLCBvcmlnaW4sIGFk
ZHJlc3MtPmNoaWxkKDApLCBzbWFsbE9mZnNldCwgdmFsdWVTdG9yZWQsIHJhbmdlLCBmZW5jZVJh
bmdlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFR1cm4gdGhpczogTG9hZChjb25zdGFu
dDEsIG9mZnNldCA9IGNvbnN0YW50MikKKyAgICAvLyBJbnRvIHRoaXM6IExvYWQoY29uc3RhbnQx
ICsgY29uc3RhbnQyKQorICAgIC8vCisgICAgLy8gVGhpcyBpcyBhIGZ1biBjYW5vbmljYWxpemF0
aW9uLiBJdCBwdXJlbHkgcmVncmVzc2VzIG5haXZlbHkgZ2VuZXJhdGVkIGNvZGUuIFdlIHJlbHkK
KyAgICAvLyBvbiBjb25zdGFudCBtYXRlcmlhbGl6YXRpb24gdG8gYmUgc21hcnQgZW5vdWdoIHRv
IG1hdGVyaWFsaXplIHRoaXMgY29uc3RhbnQgdGhlIHNtYXJ0CisgICAgLy8gd2F5LiBXZSB3YW50
IHRoaXMgY2Fub25pY2FsaXphdGlvbiBiZWNhdXNlIHdlIHdhbnQgdG8ga25vdyBpZiB0d28gbWVt
b3J5IGFjY2Vzc2VzIHNlZQorICAgIC8vIHRoZSBzYW1lIGFkZHJlc3MuCisgICAgaWYgKG9mZnNl
dCkgeworICAgICAgICBpZiAoVmFsdWUqIG5ld0FkZHJlc3MgPSBhZGRyZXNzLT5hZGRDb25zdGFu
dChtX3Byb2MsIG9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4gcmVkdWNlTG9hZFN0b3JlKG9w
LCB0eXBlLCBvcmlnaW4sIGFwcGVuZFRvQ3VycmVudEJsb2NrKG5ld0FkZHJlc3MpLCAwLCB2YWx1
ZVN0b3JlZCwgcmFuZ2UsIGZlbmNlUmFuZ2UpOworICAgIH0KKworICAgIGlmIChtYXlHaXZlVXAg
PT0gTWF5R2l2ZVVwKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBzd2l0Y2ggKG9wKSB7
CisgICAgY2FzZSBMb2FkOFo6CisgICAgY2FzZSBMb2FkOFM6CisgICAgY2FzZSBMb2FkMTZaOgor
ICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgQVNTRVJUKCF2YWx1ZVN0b3JlZCk7CisgICAgICAg
IHJldHVybiBlbWl0PE1lbW9yeVZhbHVlPihvcCwgb3JpZ2luLCBhZGRyZXNzLCBvZmZzZXQsIHJh
bmdlLCBmZW5jZVJhbmdlKTsKKyAgICBjYXNlIExvYWQ6CisgICAgICAgIEFTU0VSVCghdmFsdWVT
dG9yZWQpOworICAgICAgICByZXR1cm4gZW1pdDxNZW1vcnlWYWx1ZT4ob3AsIHR5cGUsIG9yaWdp
biwgYWRkcmVzcywgb2Zmc2V0LCByYW5nZSwgZmVuY2VSYW5nZSk7CisgICAgY2FzZSBTdG9yZTg6
CisgICAgY2FzZSBTdG9yZTE2OgorICAgIGNhc2UgU3RvcmU6CisgICAgICAgIEFTU0VSVCghIXZh
bHVlU3RvcmVkKTsKKyAgICAgICAgcmV0dXJuIGVtaXQ8TWVtb3J5VmFsdWU+KG9wLCBvcmlnaW4s
IHZhbHVlU3RvcmVkLCBhZGRyZXNzLCBvZmZzZXQsIHJhbmdlLCBmZW5jZVJhbmdlKTsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVk
dWNlRXF1YWwoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJp
Z2h0LCBNYXlHaXZlVXBNb2RlIG1heUdpdmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUo
cmlnaHQsIGxlZnQpKQorICAgICAgICByZXR1cm4gcmVkdWNlRXF1YWwodHlwZSwgb3JpZ2luLCBy
aWdodCwgbGVmdCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IEVxdWFsKGJvb2wsIDApCisgICAgLy8g
SW50byB0aGlzOiBCaXRYb3IoYm9vbCwgMSkKKyAgICBpZiAobGVmdC0+cmV0dXJuc0Jvb2woKSAm
JiByaWdodC0+aXNJbnQzMigwKSkgeworICAgICAgICBWYWx1ZSogY29uc3QxID0gZW1pdDxDb25z
dDMyVmFsdWU+KG9yaWdpbiwgMSk7CisgICAgICAgIHJldHVybiByZWR1Y2VCaXRYb3IodHlwZSwg
b3JpZ2luLCBsZWZ0LCBjb25zdDEpOworICAgIH0KKworICAgIC8vIFR1cm4gdGhpcyBFcXVhbChi
b29sLCAxKQorICAgIC8vIEludG8gdGhpczogYm9vbAorICAgIGlmIChsZWZ0LT5yZXR1cm5zQm9v
bCgpICYmIHJpZ2h0LT5pc0ludDMyKDEpKQorICAgICAgICByZXR1cm4gbGVmdDsKKworICAgIC8v
IFR1cm4gdGhpczogRXF1YWwoY29uc3QxLCBjb25zdDIpCisgICAgLy8gSW50byB0aGlzOiBjb25z
dDEgPT0gY29uc3QyCisgICAgaWYgKFZhbHVlKiByZXN1bHQgPSBtX3Byb2MuYWRkQm9vbENvbnN0
YW50KG9yaWdpbiwgbGVmdC0+ZXF1YWxDb25zdGFudChyaWdodCkpKQorICAgICAgICByZXR1cm4g
YXBwZW5kVG9DdXJyZW50QmxvY2socmVzdWx0KTsKKworICAgIC8vIEZJWE1FOiBhdCBsZWFzdCBm
b3IgaW50ZWdlcnMgd2UgcmVhbGx5IHNob3VsZCBoYXZlIEVxdWFsKHgsIHgpID0+IHRydWUsIGV2
ZW4gZm9yIG5vbi1jb25zdGFudHMuCisKKyAgICByZXR1cm4gbWF5R2l2ZVVwID09IE1heUdpdmVV
cCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihFcXVhbCwgb3JpZ2luLCBsZWZ0LCByaWdodCk7Cit9
CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlTm90RXF1YWwoVHlwZSB0eXBlLCBP
cmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBNYXlHaXZlVXBNb2RlIG1h
eUdpdmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxlZnQpKQorICAgICAg
ICByZXR1cm4gcmVkdWNlTm90RXF1YWwodHlwZSwgb3JpZ2luLCByaWdodCwgbGVmdCk7CisKKyAg
ICAvLyBUdXJuIHRoaXM6IE5vdEVxdWFsKGJvb2wsIDApCisgICAgLy8gSW50byB0aGlzOiBib29s
CisgICAgaWYgKGxlZnQtPnJldHVybnNCb29sKCkgJiYgcmlnaHQtPmlzSW50MzIoMCkpCisgICAg
ICAgIHJldHVybiBsZWZ0OworCisgICAgLy8gVHVybiB0aGlzOiBOb3RFcXVhbChib29sLCAxKQor
ICAgIC8vIEludG8gdGhpczogQml0WG9yKGJvb2wsIDEpCisgICAgaWYgKGxlZnQtPnJldHVybnNC
b29sKCkgJiYgcmlnaHQtPmlzSW50MzIoMSkpCisgICAgICAgIHJldHVybiByZWR1Y2VCaXRYb3Io
dHlwZSwgb3JpZ2luLCBsZWZ0LCByaWdodCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IE5vdEVxdWFs
KGNvbnN0MSwgY29uc3QyKQorICAgIC8vIEludG8gdGhpczogY29uc3QxICE9IGNvbnN0MgorICAg
IGlmIChWYWx1ZSogcmVzdWx0ID0gbV9wcm9jLmFkZEJvb2xDb25zdGFudChvcmlnaW4sIGxlZnQt
Pm5vdEVxdWFsQ29uc3RhbnQocmlnaHQpKSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVu
dEJsb2NrKHJlc3VsdCk7CisKKyAgICAvLyBGSVhNRTogYXQgbGVhc3QgZm9yIGludGVnZXJzIHdl
IHJlYWxseSBzaG91bGQgaGF2ZSBOb3RFcXVhbCh4LCB4KSA9PiBmYWxzZSwgZXZlbiBmb3Igbm9u
LWNvbnN0YW50cy4KKworICAgIHJldHVybiBtYXlHaXZlVXAgPT0gTWF5R2l2ZVVwID8gbnVsbHB0
ciA6IGVtaXQ8VmFsdWU+KE5vdEVxdWFsLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFs
dWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VFcXVhbE9yVW5vcmRlcmVkKFR5cGUgdHlwZSwg
T3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgTWF5R2l2ZVVwTW9kZSBt
YXlHaXZlVXApCit7CisgICAgaWYgKHNob3VsZEdvQmVmb3JlKHJpZ2h0LCBsZWZ0KSkKKyAgICAg
ICAgcmV0dXJuIHJlZHVjZUVxdWFsT3JVbm9yZGVyZWQodHlwZSwgb3JpZ2luLCByaWdodCwgbGVm
dCk7CisKKyAgICAvLyBUdXJuIHRoaXM6IEVxdWFsT3JVbm9yZGVyZWQoY29uc3QxLCBjb25zdDIp
CisgICAgLy8gSW50byB0aGlzOiBpc05hbihjb25zdDEpIHx8IGlzTmFuKGNvbnN0MikgfHwgY29u
c3QxID09IGNvbnN0MgorICAgIGlmIChWYWx1ZSogcmVzdWx0ID0gbV9wcm9jLmFkZEJvb2xDb25z
dGFudChvcmlnaW4sIGxlZnQtPmVxdWFsT3JVbm9yZGVyZWRDb25zdGFudChyaWdodCkpKQorICAg
ICAgICByZXR1cm4gYXBwZW5kVG9DdXJyZW50QmxvY2socmVzdWx0KTsKKworICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgYWxzbyBoYXZlIEVxdWFsT3JVbm9yZGVyZWQoeCwgeCkgPT4gdHJ1ZS4KKyAg
ICAvLyBBbHNvIHdlIHNob3VsZCBoYXZlIEVxdWFsT3JVbm9yZGVyZWQoY29uc3ROYW4sIHgpID0+
IHRydWUgYW5kIEVxdWFsT3JVbm9yZGVyZWQoeCwgY29uc3ROYW4pID0+IHRydWUKKworICAgIHJl
dHVybiBtYXlHaXZlVXAgPT0gTWF5R2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KEVxdWFs
T3JVbm9yZGVyZWQsIG9yaWdpbiwgbGVmdCwgcmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVP
cHRpbWl6ZXI6OnJlZHVjZUxlc3NUaGFuKFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUq
IGxlZnQsIFZhbHVlKiByaWdodCwgTWF5R2l2ZVVwTW9kZSBtYXlHaXZlVXApCit7CisgICAgaWYg
KHNob3VsZEdvQmVmb3JlKHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAgcmV0dXJuIHJlZHVjZUdyZWF0
ZXJUaGFuKHR5cGUsIG9yaWdpbiwgcmlnaHQsIGxlZnQpOworCisgICAgaWYgKFZhbHVlKiBjb25z
dGFudCA9IG1fcHJvYy5hZGRCb29sQ29uc3RhbnQob3JpZ2luLCByaWdodC0+Z3JlYXRlclRoYW5D
b25zdGFudChsZWZ0KSkpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25z
dGFudCk7CisKKyAgICByZXR1cm4gbWF5R2l2ZVVwID09IE1heUdpdmVVcCA/IG51bGxwdHIgOiBl
bWl0PFZhbHVlPihMZXNzVGhhbiwgb3JpZ2luLCBsZWZ0LCByaWdodCk7Cit9CisKK1ZhbHVlKiBQ
ZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlR3JlYXRlclRoYW4oVHlwZSB0eXBlLCBPcmlnaW4gb3Jp
Z2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBNYXlHaXZlVXBNb2RlIG1heUdpdmVVcCkK
K3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxlZnQpKQorICAgICAgICByZXR1cm4g
cmVkdWNlTGVzc1RoYW4odHlwZSwgb3JpZ2luLCByaWdodCwgbGVmdCk7CisKKyAgICBpZiAoVmFs
dWUqIGNvbnN0YW50ID0gbV9wcm9jLmFkZEJvb2xDb25zdGFudChvcmlnaW4sIHJpZ2h0LT5sZXNz
VGhhbkNvbnN0YW50KGxlZnQpKSkKKyAgICAgICAgcmV0dXJuIGFwcGVuZFRvQ3VycmVudEJsb2Nr
KGNvbnN0YW50KTsKKworICAgIHJldHVybiBtYXlHaXZlVXAgPT0gTWF5R2l2ZVVwID8gbnVsbHB0
ciA6IGVtaXQ8VmFsdWU+KEdyZWF0ZXJUaGFuLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KTsKK30KKwor
VmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VMZXNzRXF1YWwoVHlwZSB0eXBlLCBPcmln
aW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBNYXlHaXZlVXBNb2RlIG1heUdp
dmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxlZnQpKQorICAgICAgICBy
ZXR1cm4gcmVkdWNlR3JlYXRlckVxdWFsKHR5cGUsIG9yaWdpbiwgcmlnaHQsIGxlZnQpOworCisg
ICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fcHJvYy5hZGRCb29sQ29uc3RhbnQob3JpZ2luLCBy
aWdodC0+Z3JlYXRlckVxdWFsQ29uc3RhbnQobGVmdCkpKQorICAgICAgICByZXR1cm4gYXBwZW5k
VG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgcmV0dXJuIG1heUdpdmVVcCA9PSBNYXlH
aXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oTGVzc0VxdWFsLCBvcmlnaW4sIGxlZnQsIHJp
Z2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VHcmVhdGVyRXF1YWwo
VHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBNYXlH
aXZlVXBNb2RlIG1heUdpdmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxl
ZnQpKQorICAgICAgICByZXR1cm4gcmVkdWNlTGVzc0VxdWFsKHR5cGUsIG9yaWdpbiwgcmlnaHQs
IGxlZnQpOworCisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fcHJvYy5hZGRCb29sQ29uc3Rh
bnQob3JpZ2luLCByaWdodC0+bGVzc0VxdWFsQ29uc3RhbnQobGVmdCkpKQorICAgICAgICByZXR1
cm4gYXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgcmV0dXJuIG1heUdpdmVV
cCA9PSBNYXlHaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oR3JlYXRlckVxdWFsLCBvcmln
aW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjpyZWR1Y2VB
Ym92ZShUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQs
IE1heUdpdmVVcE1vZGUgbWF5R2l2ZVVwKQoreworICAgIGlmIChzaG91bGRHb0JlZm9yZShyaWdo
dCwgbGVmdCkpCisgICAgICAgIHJldHVybiByZWR1Y2VCZWxvdyh0eXBlLCBvcmlnaW4sIHJpZ2h0
LCBsZWZ0KTsKKworICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3Byb2MuYWRkQm9vbENvbnN0
YW50KG9yaWdpbiwgcmlnaHQtPmJlbG93Q29uc3RhbnQobGVmdCkpKQorICAgICAgICByZXR1cm4g
YXBwZW5kVG9DdXJyZW50QmxvY2soY29uc3RhbnQpOworCisgICAgcmV0dXJuIG1heUdpdmVVcCA9
PSBNYXlHaXZlVXAgPyBudWxscHRyIDogZW1pdDxWYWx1ZT4oQWJvdmUsIG9yaWdpbiwgbGVmdCwg
cmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUJlbG93KFR5cGUg
dHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgTWF5R2l2ZVVw
TW9kZSBtYXlHaXZlVXApCit7CisgICAgaWYgKHNob3VsZEdvQmVmb3JlKHJpZ2h0LCBsZWZ0KSkK
KyAgICAgICAgcmV0dXJuIHJlZHVjZUFib3ZlKHR5cGUsIG9yaWdpbiwgcmlnaHQsIGxlZnQpOwor
CisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fcHJvYy5hZGRCb29sQ29uc3RhbnQob3JpZ2lu
LCByaWdodC0+YWJvdmVDb25zdGFudChsZWZ0KSkpCisgICAgICAgIHJldHVybiBhcHBlbmRUb0N1
cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICByZXR1cm4gbWF5R2l2ZVVwID09IE1heUdpdmVV
cCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihCZWxvdywgb3JpZ2luLCBsZWZ0LCByaWdodCk7Cit9
CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6cmVkdWNlQWJvdmVFcXVhbChUeXBlIHR5cGUs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIE1heUdpdmVVcE1vZGUg
bWF5R2l2ZVVwKQoreworICAgIGlmIChzaG91bGRHb0JlZm9yZShyaWdodCwgbGVmdCkpCisgICAg
ICAgIHJldHVybiByZWR1Y2VCZWxvd0VxdWFsKHR5cGUsIG9yaWdpbiwgcmlnaHQsIGxlZnQpOwor
CisgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fcHJvYy5hZGRCb29sQ29uc3RhbnQob3JpZ2lu
LCByaWdodC0+YmVsb3dFcXVhbENvbnN0YW50KGxlZnQpKSkKKyAgICAgICAgcmV0dXJuIGFwcGVu
ZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50KTsKKworICAgIHJldHVybiBtYXlHaXZlVXAgPT0gTWF5
R2l2ZVVwID8gbnVsbHB0ciA6IGVtaXQ8VmFsdWU+KEFib3ZlRXF1YWwsIG9yaWdpbiwgbGVmdCwg
cmlnaHQpOworfQorCitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnJlZHVjZUJlbG93RXF1YWwo
VHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBNYXlH
aXZlVXBNb2RlIG1heUdpdmVVcCkKK3sKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxl
ZnQpKQorICAgICAgICByZXR1cm4gcmVkdWNlQWJvdmVFcXVhbCh0eXBlLCBvcmlnaW4sIHJpZ2h0
LCBsZWZ0KTsKKworICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3Byb2MuYWRkQm9vbENvbnN0
YW50KG9yaWdpbiwgcmlnaHQtPmFib3ZlRXF1YWxDb25zdGFudChsZWZ0KSkpCisgICAgICAgIHJl
dHVybiBhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCk7CisKKyAgICByZXR1cm4gbWF5R2l2
ZVVwID09IE1heUdpdmVVcCA/IG51bGxwdHIgOiBlbWl0PFZhbHVlPihCZWxvd0VxdWFsLCBvcmln
aW4sIGxlZnQsIHJpZ2h0KTsKK30KKworVmFsdWUqIFBlZXBob2xlT3B0aW1pemVyOjp0cnlSZWR1
Y2UoVmFsdWUqIHZhbHVlKQoreworICAgIHN3aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7CisgICAg
Y2FzZSBPcGFxdWU6CisgICAgICAgIHJldHVybiByZWR1Y2VPcGFxdWUodmFsdWUtPnR5cGUoKSwg
dmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIE1heUdpdmVVcCk7CisgICAgY2FzZSBB
ZGQ6CisgICAgICAgIHJldHVybiByZWR1Y2VBZGQodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdp
bigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgxKSwgTWF5R2l2ZVVwKTsKKyAgICBj
YXNlIFN1YjoKKyAgICAgICAgcmV0dXJuIHJlZHVjZVN1Yih2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+
b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxkKDEpLCBNYXlHaXZlVXApOwor
ICAgIGNhc2UgTmVnOgorICAgICAgICByZXR1cm4gcmVkdWNlTmVnKHZhbHVlLT50eXBlKCksIHZh
bHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCBNYXlHaXZlVXApOworICAgIGNhc2UgTXVs
OgorICAgICAgICByZXR1cm4gcmVkdWNlTXVsKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4o
KSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIE1heUdpdmVVcCk7CisgICAgY2Fz
ZSBEaXY6CisgICAgICAgIHJldHVybiByZWR1Y2VEaXYodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9y
aWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgxKSwgdmFsdWUtPmlzQ2hpbGwo
KSA/IElzQ2hpbGwgOiBJc05vdENoaWxsLCBNYXlHaXZlVXApOworICAgIGNhc2UgVURpdjoKKyAg
ICAgICAgcmV0dXJuIHJlZHVjZVVEaXYodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2
YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgxKSwgTWF5R2l2ZVVwKTsKKyAgICBjYXNlIE1v
ZDoKKyAgICAgICAgcmV0dXJuIHJlZHVjZU1vZCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2lu
KCksIHZhbHVlLT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxkKDEpLCB2YWx1ZS0+aXNDaGlsbCgpID8g
SXNDaGlsbCA6IElzTm90Q2hpbGwsIE1heUdpdmVVcCk7CisgICAgY2FzZSBVTW9kOgorICAgICAg
ICByZXR1cm4gcmVkdWNlVU1vZCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVl
LT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxkKDEpLCBNYXlHaXZlVXApOworICAgIGNhc2UgQml0QW5k
OgorICAgICAgICByZXR1cm4gcmVkdWNlQml0QW5kKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmln
aW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIE1heUdpdmVVcCk7CisgICAg
Y2FzZSBCaXRPcjoKKyAgICAgICAgcmV0dXJuIHJlZHVjZUJpdE9yKHZhbHVlLT50eXBlKCksIHZh
bHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIE1heUdpdmVV
cCk7CisgICAgY2FzZSBCaXRYb3I6CisgICAgICAgIHJldHVybiByZWR1Y2VCaXRYb3IodmFsdWUt
PnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgx
KSwgTWF5R2l2ZVVwKTsKKyAgICBjYXNlIFNobDoKKyAgICAgICAgcmV0dXJuIHJlZHVjZVNobCh2
YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdmFsdWUtPmNo
aWxkKDEpLCBNYXlHaXZlVXApOworICAgIGNhc2UgU1NocjoKKyAgICAgICAgcmV0dXJuIHJlZHVj
ZVNTaHIodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZh
bHVlLT5jaGlsZCgxKSwgTWF5R2l2ZVVwKTsKKyAgICBjYXNlIFpTaHI6CisgICAgICAgIHJldHVy
biByZWR1Y2VaU2hyKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxk
KDApLCB2YWx1ZS0+Y2hpbGQoMSksIE1heUdpdmVVcCk7CisgICAgY2FzZSBSb3RSOgorICAgICAg
ICByZXR1cm4gcmVkdWNlUm90Uih2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVl
LT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxkKDEpLCBNYXlHaXZlVXApOworICAgIGNhc2UgUm90TDoK
KyAgICAgICAgcmV0dXJuIHJlZHVjZVJvdEwodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigp
LCB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgxKSwgTWF5R2l2ZVVwKTsKKyAgICBjYXNl
IEFiczoKKyAgICAgICAgcmV0dXJuIHJlZHVjZUFicyh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3Jp
Z2luKCksIHZhbHVlLT5jaGlsZCgwKSwgTWF5R2l2ZVVwKTsKKyAgICBjYXNlIENlaWw6CisgICAg
ICAgIHJldHVybiByZWR1Y2VDZWlsKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFs
dWUtPmNoaWxkKDApLCBNYXlHaXZlVXApOworICAgIGNhc2UgRmxvb3I6CisgICAgICAgIHJldHVy
biByZWR1Y2VGbG9vcih2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGls
ZCgwKSwgTWF5R2l2ZVVwKTsKKyAgICBjYXNlIFNxcnQ6CisgICAgICAgIHJldHVybiByZWR1Y2VT
cXJ0KHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCBNYXlH
aXZlVXApOworICAgIGNhc2UgQml0d2lzZUNhc3Q6CisgICAgICAgIHJldHVybiByZWR1Y2VCaXR3
aXNlQ2FzdCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwg
TWF5R2l2ZVVwKTsKKyAgICBjYXNlIFNFeHQ4OgorICAgICAgICByZXR1cm4gcmVkdWNlU0V4dDgo
dmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIE1heUdpdmVV
cCk7CisgICAgY2FzZSBTRXh0MTY6CisgICAgICAgIHJldHVybiByZWR1Y2VTRXh0MTYodmFsdWUt
PnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIE1heUdpdmVVcCk7Cisg
ICAgY2FzZSBTRXh0MzI6CisgICAgICAgIHJldHVybiByZWR1Y2VTRXh0MzIodmFsdWUtPnR5cGUo
KSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIE1heUdpdmVVcCk7CisgICAgY2Fz
ZSBaRXh0MzI6CisgICAgICAgIHJldHVybiByZWR1Y2VaRXh0MzIodmFsdWUtPnR5cGUoKSwgdmFs
dWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIE1heUdpdmVVcCk7CisgICAgY2FzZSBUcnVu
YzoKKyAgICAgICAgcmV0dXJuIHJlZHVjZVRydW5jKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmln
aW4oKSwgdmFsdWUtPmNoaWxkKDApLCBNYXlHaXZlVXApOworICAgIGNhc2UgSVRvRjoKKyAgICAg
ICAgcmV0dXJuIHJlZHVjZUlUb0YodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1
ZS0+Y2hpbGQoMCksIE1heUdpdmVVcCk7CisgICAgY2FzZSBJVG9EOgorICAgICAgICByZXR1cm4g
cmVkdWNlSVRvRCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgw
KSwgTWF5R2l2ZVVwKTsKKyAgICBjYXNlIEZsb2F0VG9Eb3VibGU6CisgICAgICAgIHJldHVybiBy
ZWR1Y2VGbG9hdFRvRG91YmxlKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUt
PmNoaWxkKDApLCBNYXlHaXZlVXApOworICAgIGNhc2UgRG91YmxlVG9GbG9hdDoKKyAgICAgICAg
cmV0dXJuIHJlZHVjZURvdWJsZVRvRmxvYXQodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigp
LCB2YWx1ZS0+Y2hpbGQoMCksIE1heUdpdmVVcCk7CisgICAgY2FzZSBTZWxlY3Q6CisgICAgICAg
IHJldHVybiByZWR1Y2VTZWxlY3QodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1
ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgxKSwgdmFsdWUtPmNoaWxkKDIpLCBNYXlHaXZlVXAp
OworICAgIGNhc2UgTG9hZDhaOgorICAgIGNhc2UgTG9hZDhTOgorICAgIGNhc2UgTG9hZDE2WjoK
KyAgICBjYXNlIExvYWQxNlM6CisgICAgY2FzZSBMb2FkOiB7CisgICAgICAgIE1lbW9yeVZhbHVl
KiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIHJldHVybiByZWR1
Y2VMb2FkU3RvcmUobWVtb3J5LT5vcGNvZGUoKSwgbWVtb3J5LT50eXBlKCksIG1lbW9yeS0+b3Jp
Z2luKCksIG1lbW9yeS0+Y2hpbGQoMCksIG1lbW9yeS0+b2Zmc2V0KCksIG51bGxwdHIsIG1lbW9y
eS0+cmFuZ2UoKSwgbWVtb3J5LT5mZW5jZVJhbmdlKCksIE1heUdpdmVVcCk7CisgICAgfQorICAg
IGNhc2UgU3RvcmU4OgorICAgIGNhc2UgU3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlOiB7CisgICAg
ICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSB2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAg
ICAgIHJldHVybiByZWR1Y2VMb2FkU3RvcmUobWVtb3J5LT5vcGNvZGUoKSwgbWVtb3J5LT50eXBl
KCksIG1lbW9yeS0+b3JpZ2luKCksIG1lbW9yeS0+Y2hpbGQoMSksIG1lbW9yeS0+b2Zmc2V0KCks
IG1lbW9yeS0+Y2hpbGQoMCksIG1lbW9yeS0+cmFuZ2UoKSwgbWVtb3J5LT5mZW5jZVJhbmdlKCks
IE1heUdpdmVVcCk7CisgICAgfQorICAgIGNhc2UgRXF1YWw6CisgICAgICAgIHJldHVybiByZWR1
Y2VFcXVhbCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwg
dmFsdWUtPmNoaWxkKDEpLCBNYXlHaXZlVXApOworICAgIGNhc2UgTm90RXF1YWw6CisgICAgICAg
IHJldHVybiByZWR1Y2VOb3RFcXVhbCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZh
bHVlLT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxkKDEpLCBNYXlHaXZlVXApOworICAgIGNhc2UgRXF1
YWxPclVub3JkZXJlZDoKKyAgICAgICAgcmV0dXJuIHJlZHVjZUVxdWFsT3JVbm9yZGVyZWQodmFs
dWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGls
ZCgxKSwgTWF5R2l2ZVVwKTsKKyAgICBjYXNlIExlc3NUaGFuOgorICAgICAgICByZXR1cm4gcmVk
dWNlTGVzc1RoYW4odmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hpbGQo
MCksIHZhbHVlLT5jaGlsZCgxKSwgTWF5R2l2ZVVwKTsKKyAgICBjYXNlIEdyZWF0ZXJUaGFuOgor
ICAgICAgICByZXR1cm4gcmVkdWNlR3JlYXRlclRoYW4odmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9y
aWdpbigpLCB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgxKSwgTWF5R2l2ZVVwKTsKKyAg
ICBjYXNlIExlc3NFcXVhbDoKKyAgICAgICAgcmV0dXJuIHJlZHVjZUxlc3NFcXVhbCh2YWx1ZS0+
dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxkKDEp
LCBNYXlHaXZlVXApOworICAgIGNhc2UgR3JlYXRlckVxdWFsOgorICAgICAgICByZXR1cm4gcmVk
dWNlR3JlYXRlckVxdWFsKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNo
aWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIE1heUdpdmVVcCk7CisgICAgY2FzZSBBYm92ZToKKyAg
ICAgICAgcmV0dXJuIHJlZHVjZUFib3ZlKHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwg
dmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIE1heUdpdmVVcCk7CisgICAgY2FzZSBC
ZWxvdzoKKyAgICAgICAgcmV0dXJuIHJlZHVjZUJlbG93KHZhbHVlLT50eXBlKCksIHZhbHVlLT5v
cmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSksIE1heUdpdmVVcCk7Cisg
ICAgY2FzZSBBYm92ZUVxdWFsOgorICAgICAgICByZXR1cm4gcmVkdWNlQWJvdmVFcXVhbCh2YWx1
ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxk
KDEpLCBNYXlHaXZlVXApOworICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICAgICAgcmV0dXJuIHJl
ZHVjZUJlbG93RXF1YWwodmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZS0+Y2hp
bGQoMCksIHZhbHVlLT5jaGlsZCgxKSwgTWF5R2l2ZVVwKTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworYm9vbCBQZWVwaG9sZU9wdGltaXplcjo6dHJ5
U2ltcGxpZnlCcmFuY2goVmFsdWUqIHZhbHVlKQoreworICAgIEFTU0VSVCh2YWx1ZS0+b3Bjb2Rl
KCkgPT0gQnJhbmNoKTsKKyAgICBBU1NFUlQoISFtX2luc2VydGlvblNldCk7CisgICAgQmFzaWNC
bG9jayogYmxvY2sgPSB2YWx1ZS0+b3duZXI7CisgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisK
KyAgICAvLyBTaW1wbGUgZml4cG9pbnQgYXMgc29tZSBvZiB0aGVzZSBvcHRpbWl6YXRpb25zIGtl
ZXAgYSBicmFuY2ggYW5kIHNvIGNhbiBiZSBjaGFpbmVkCisgICAgZm9yICg7OykgeworICAgICAg
ICAvLyBUdXJuIHRoaXM6IEJyYW5jaChOb3RFcXVhbCh4LCAwKSkKKyAgICAgICAgLy8gSW50byB0
aGlzOiBCcmFuY2goeCkKKyAgICAgICAgaWYgKHZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0g
Tm90RXF1YWwgJiYgdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQoMCkpIHsKKyAgICAg
ICAgICAgIHZhbHVlLT5jaGlsZCgwKSA9IHZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7CisgICAg
ICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisKKyAgICAgICAgLy8gVHVybiB0aGlzOiBCcmFuY2goRXF1YWwoeCwgMCksIHRoZW4sIGVsc2Up
CisgICAgICAgIC8vIEludG8gdGhpczogQnJhbmNoKHgsIGVsc2UsIHRoZW4pCisgICAgICAgIGlm
ICh2YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEVxdWFsICYmIHZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMSktPmlzSW50KDApKSB7CisgICAgICAgICAgICB2YWx1ZS0+Y2hpbGQoMCkgPSB2YWx1
ZS0+Y2hpbGQoMCktPmNoaWxkKDApOworICAgICAgICAgICAgc3RkOjpzd2FwKGJsb2NrLT50YWtl
bigpLCBibG9jay0+bm90VGFrZW4oKSk7CisgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gVHVybiB0aGlzOiBC
cmFuY2goQml0WG9yKGJvb2wsIDEpLCB0aGVuLCBlbHNlKQorICAgICAgICAvLyBJbnRvIHRoaXM6
IEJyYW5jaChib29sLCBlbHNlLCB0aGVuKQorICAgICAgICBpZiAodmFsdWUtPmNoaWxkKDApLT5v
cGNvZGUoKSA9PSBCaXRYb3IKKyAgICAgICAgICAgICYmIHZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQo
MSktPmlzSW50MzIoMSkKKyAgICAgICAgICAgICYmIHZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkt
PnJldHVybnNCb29sKCkpIHsKKyAgICAgICAgICAgIHZhbHVlLT5jaGlsZCgwKSA9IHZhbHVlLT5j
aGlsZCgwKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICBzdGQ6OnN3YXAoYmxvY2stPnRha2VuKCks
IGJsb2NrLT5ub3RUYWtlbigpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBUdXJuIHRoaXM6IEJyYW5j
aChCaXRBbmQoYm9vbCwgeHliMSksIHRoZW4sIGVsc2UpCisgICAgICAgIC8vIEludG8gdGhpczog
QnJhbmNoKGJvb2wsIHRoZW4sIGVsc2UpCisgICAgICAgIGlmICh2YWx1ZS0+Y2hpbGQoMCktPm9w
Y29kZSgpID09IEJpdEFuZAorICAgICAgICAgICAgJiYgdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgx
KS0+aGFzSW50KCkKKyAgICAgICAgICAgICYmIHZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmFz
SW50KCkgJiAxCisgICAgICAgICAgICAmJiB2YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLT5yZXR1
cm5zQm9vbCgpKSB7CisgICAgICAgICAgICB2YWx1ZS0+Y2hpbGQoMCkgPSB2YWx1ZS0+Y2hpbGQo
MCktPmNoaWxkKDApOworICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIFRyaVN0YXRlIHRyaVN0YXRlID0gdmFsdWUt
PmNoaWxkKDApLT5hc1RyaVN0YXRlKCk7CisKKyAgICAgICAgLy8gVHVybiB0aGlzOiBCcmFuY2go
MCwgdGhlbiwgZWxzZSkKKyAgICAgICAgLy8gSW50byB0aGlzOiBKdW1wKGVsc2UpCisgICAgICAg
IGlmICh0cmlTdGF0ZSA9PSBGYWxzZVRyaVN0YXRlKSB7CisgICAgICAgICAgICBibG9jay0+dGFr
ZW4oKS5ibG9jaygpLT5yZW1vdmVQcmVkZWNlc3NvcihibG9jayk7CisgICAgICAgICAgICB2YWx1
ZS0+cmVwbGFjZVdpdGhKdW1wKGJsb2NrLCBibG9jay0+bm90VGFrZW4oKSk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFR1cm4gdGhpczogQnJhbmNo
KG5vdCAwLCB0aGVuLCBlbHNlKQorICAgICAgICAvLyBJbnRvIHRoaXM6IEp1bXAodGhlbikKKyAg
ICAgICAgaWYgKHRyaVN0YXRlID09IFRydWVUcmlTdGF0ZSkgeworICAgICAgICAgICAgYmxvY2st
Pm5vdFRha2VuKCkuYmxvY2soKS0+cmVtb3ZlUHJlZGVjZXNzb3IoYmxvY2spOworICAgICAgICAg
ICAgdmFsdWUtPnJlcGxhY2VXaXRoSnVtcChibG9jaywgYmxvY2stPnRha2VuKCkpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgcmV0dXJuIGNoYW5nZWQ7Cit9CisKK2Jvb2wgUGVlcGhvbGVPcHRpbWl6ZXI6OnRyeVNpbXBs
aWZ5Q0NhbGwoQ0NhbGxWYWx1ZSogdmFsdWUpCit7CisgICAgQVNTRVJUKHZhbHVlLT5vcGNvZGUo
KSA9PSBDQ2FsbCk7CisgICAgQVNTRVJUKCEhbV9pbnNlcnRpb25TZXQpOworICAgIC8vIFR1cm4g
dGhpczogQ2FsbChmbW9kLCBjb25zdGFudDEsIGNvbnN0YW50MikKKyAgICAvLyBJbnRvIHRoaXM6
IGZjYWxsLWNvbnN0YW50KGNvbnN0YW50MSwgY29uc3RhbnQyKQorICAgIGF1dG8qIGZtb2REb3Vi
bGUgPSB0YWdDRnVuY3Rpb25QdHI8ZG91YmxlICgqKShkb3VibGUsIGRvdWJsZSk+KGZtb2QsIEIz
Q0NhbGxQdHJUYWcpOworICAgIGlmICh2YWx1ZS0+dHlwZSgpID09IERvdWJsZQorICAgICAgICAm
JiB2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAzCisgICAgICAgICYmIHZhbHVlLT5jaGlsZCgwKS0+
aXNJbnRQdHIocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZm1vZERvdWJsZSkpCisgICAgICAg
ICYmIHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpID09IERvdWJsZQorICAgICAgICAmJiB2YWx1ZS0+
Y2hpbGQoMiktPnR5cGUoKSA9PSBEb3VibGUpIHsKKyAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFu
dCA9IHZhbHVlLT5jaGlsZCgxKS0+bW9kQ29uc3RhbnQobV9wcm9jLCB2YWx1ZS0+Y2hpbGQoMikp
KSB7CisgICAgICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShhcHBlbmRUb0N1cnJl
bnRCbG9jayhjb25zdGFudCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFBlZXBob2xlT3B0aW1pemVyOjp0
cnlTaW1wbGlmeUNoZWNrQWRkKENoZWNrVmFsdWUqIHZhbHVlKQoreworICAgIEFTU0VSVCh2YWx1
ZS0+b3Bjb2RlKCkgPT0gQ2hlY2tBZGQpOworICAgIEFTU0VSVCghIW1faW5zZXJ0aW9uU2V0KTsK
KyAgICBWYWx1ZSogbGVmdCA9IHZhbHVlLT5jaGlsZCgwKTsKKyAgICBWYWx1ZSogcmlnaHQgPSB2
YWx1ZS0+Y2hpbGQoMSk7CisKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbGVmdC0+Y2hlY2tB
ZGRDb25zdGFudChtX3Byb2MsIHJpZ2h0KSkgeworICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhJ
ZGVudGl0eShhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxlZnQpKSB7Cisg
ICAgICAgIHN0ZDo6c3dhcCh2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgxKSk7CisgICAg
ICAgIHRyeVNpbXBsaWZ5Q2hlY2tBZGQodmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBpZiAocmlnaHQtPmlzSW50KDApKSB7CisgICAgICAgIHZhbHVlLT5yZXBsYWNl
V2l0aElkZW50aXR5KGxlZnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBp
ZiAoIXJhbmdlRm9yKGxlZnQpLmNvdWxkT3ZlcmZsb3dBZGQocmFuZ2VGb3IocmlnaHQpLCB2YWx1
ZS0+dHlwZSgpKSkgeworICAgICAgICBWYWx1ZSogYWRkID0gcmVkdWNlQWRkKHZhbHVlLT50eXBl
KCksIHZhbHVlLT5vcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgICAgICB2YWx1ZS0+cmVwbGFj
ZVdpdGhJZGVudGl0eShhZGQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUGVlcGhvbGVPcHRpbWl6ZXI6OnRyeVNpbXBsaWZ5Q2hl
Y2tTdWIoQ2hlY2tWYWx1ZSogdmFsdWUpCit7CisgICAgQVNTRVJUKHZhbHVlLT5vcGNvZGUoKSA9
PSBDaGVja1N1Yik7CisgICAgQVNTRVJUKCEhbV9pbnNlcnRpb25TZXQpOworICAgIFZhbHVlKiBs
ZWZ0ID0gdmFsdWUtPmNoaWxkKDApOworICAgIFZhbHVlKiByaWdodCA9IHZhbHVlLT5jaGlsZCgx
KTsKKworICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBsZWZ0LT5jaGVja1N1YkNvbnN0YW50KG1f
cHJvYywgcmlnaHQpKSB7CisgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KGFwcGVu
ZFRvQ3VycmVudEJsb2NrKGNvbnN0YW50KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGlmIChyaWdodC0+aXNJbnQoMCkpIHsKKyAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRo
SWRlbnRpdHkobGVmdCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChW
YWx1ZSogbmVnYXRlZENvbnN0YW50ID0gcmlnaHQtPmNoZWNrTmVnQ29uc3RhbnQobV9wcm9jKSkg
eworICAgICAgICBuZWdhdGVkQ29uc3RhbnQgPSBhcHBlbmRUb0N1cnJlbnRCbG9jayhuZWdhdGVk
Q29uc3RhbnQpOworICAgICAgICB2YWx1ZS0+Y29udmVydFRvQWRkKCk7CisgICAgICAgIHZhbHVl
LT5jaGlsZCgxKSA9IG5lZ2F0ZWRDb25zdGFudDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgaWYgKCFyYW5nZUZvcihsZWZ0KS5jb3VsZE92ZXJmbG93U3ViKHJhbmdlRm9yKHJp
Z2h0KSwgdmFsdWUtPnR5cGUoKSkpIHsKKyAgICAgICAgVmFsdWUqIHN1YiA9IHJlZHVjZVN1Yih2
YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgdmFs
dWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkoc3ViKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFBlZXBob2xlT3B0aW1pemVyOjp0cnlT
aW1wbGlmeUNoZWNrTXVsKENoZWNrVmFsdWUqIHZhbHVlKQoreworICAgIEFTU0VSVCh2YWx1ZS0+
b3Bjb2RlKCkgPT0gQ2hlY2tNdWwpOworICAgIEFTU0VSVCghIW1faW5zZXJ0aW9uU2V0KTsKKyAg
ICBWYWx1ZSogbGVmdCA9IHZhbHVlLT5jaGlsZCgwKTsKKyAgICBWYWx1ZSogcmlnaHQgPSB2YWx1
ZS0+Y2hpbGQoMSk7CisKKyAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbGVmdC0+Y2hlY2tNdWxD
b25zdGFudChtX3Byb2MsIHJpZ2h0KSkgeworICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhJZGVu
dGl0eShhcHBlbmRUb0N1cnJlbnRCbG9jayhjb25zdGFudCkpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkR29CZWZvcmUocmlnaHQsIGxlZnQpKSB7CisgICAg
ICAgIHN0ZDo6c3dhcCh2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgxKSk7CisgICAgICAg
IHRyeVNpbXBsaWZ5Q2hlY2tNdWwodmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBpZiAocmlnaHQtPmhhc0ludCgpKSB7CisgICAgICAgIGlmICghcmlnaHQtPmFzSW50
KCkpIHsKKyAgICAgICAgICAgIFZhbHVlKiBjb25zdDAgPSBhcHBlbmRUb0N1cnJlbnRCbG9jayht
X3Byb2MuYWRkSW50Q29uc3RhbnQodmFsdWUsIDApKTsKKyAgICAgICAgICAgIHZhbHVlLT5yZXBs
YWNlV2l0aElkZW50aXR5KGNvbnN0MCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAocmlnaHQtPmFzSW50KCkgPT0gMSkgeworICAgICAgICAgICAgdmFs
dWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkobGVmdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAocmlnaHQtPmFzSW50KCkgPT0gMikgeworICAgICAgICAg
ICAgdmFsdWUtPmNvbnZlcnRUb0FkZCgpOworICAgICAgICAgICAgdmFsdWUtPmNoaWxkKDEpID0g
dmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAgdHJ5U2ltcGxpZnlDaGVja0FkZCh2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisKKyAgICB9CisgICAgaWYg
KHJpZ2h0LT5pc0ludCgwKSkgeworICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShs
ZWZ0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKCFyYW5nZUZvcihs
ZWZ0KS5jb3VsZE92ZXJmbG93TXVsKHJhbmdlRm9yKHJpZ2h0KSwgdmFsdWUtPnR5cGUoKSkpIHsK
KyAgICAgICAgVmFsdWUqIG11bCA9IHJlZHVjZU11bCh2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3Jp
Z2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHko
bXVsKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIFBlZXBob2xlT3B0aW1pemVyOjp0cnlTaW1wbGlmeUNoZWNrKENoZWNrVmFsdWUq
IHZhbHVlKQoreworICAgIEFTU0VSVCh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2spOworICAgIEFT
U0VSVCghIW1faW5zZXJ0aW9uU2V0KTsKKworICAgIGlmICh2YWx1ZS0+Y2hpbGQoMCktPmlzTGlr
ZVplcm8oKSkgeworICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhOb3AoKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHZhbHVlLT5jaGlsZCgwKS0+aXNMaWtlTm9uWmVy
bygpKSB7CisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGVtaXQ8UGF0Y2hw
b2ludFZhbHVlPihWb2lkLCB2YWx1ZS0+b3JpZ2luKCkpLT5hczxQYXRjaHBvaW50VmFsdWU+KCk7
CisKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHMoKTsKKyAgICAgICAgcGF0
Y2hwb2ludC0+ZWZmZWN0cy5yZWFkcyA9IEhlYXBSYW5nZTo6dG9wKCk7CisgICAgICAgIHBhdGNo
cG9pbnQtPmVmZmVjdHMuZXhpdHNTaWRld2F5cyA9IHRydWU7CisKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IHZhbHVlLT5udW1DaGlsZHJlbigpOyArK2kpCisgICAgICAgICAgICBw
YXRjaHBvaW50LT5hcHBlbmQodmFsdWUtPmNvbnN0cmFpbmVkQ2hpbGQoaSkpOworCisgICAgICAg
IHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcih2YWx1ZS0+Z2VuZXJhdG9yKCkpOworCisgICAgICAg
IC8vIFJlcGxhY2UgdGhlIHJlc3Qgb2YgdGhlIGJsb2NrIHdpdGggYW4gT29wcy4KKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9pbmRleCArIDE7IGkgPCB2YWx1ZS0+b3duZXItPnNpemUoKSAt
IDE7ICsraSkKKyAgICAgICAgICAgIHZhbHVlLT5vd25lci0+YXQoaSktPnJlcGxhY2VXaXRoQm90
dG9tKCptX2luc2VydGlvblNldCwgbV9pbmRleCk7CisgICAgICAgIHZhbHVlLT5vd25lci0+bGFz
dCgpLT5yZXBsYWNlV2l0aE9vcHModmFsdWUtPm93bmVyKTsKKyAgICAgICAgdmFsdWUtPm93bmVy
LT5sYXN0KCktPnNldE9yaWdpbih2YWx1ZS0+b3JpZ2luKCkpOworCisgICAgICAgIC8vIFJlcGxh
Y2Ugb3Vyc2VsdmVzIGxhc3QuCisgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0aE5vcCgpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAodmFsdWUtPmNoaWxkKDApLT5vcGNv
ZGUoKSA9PSBOb3RFcXVhbAorICAgICAgICAmJiB2YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5p
c0ludCgwKSkgeworICAgICAgICB2YWx1ZS0+Y2hpbGQoMCkgPSB2YWx1ZS0+Y2hpbGQoMCktPmNo
aWxkKDApOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKKy8vIFJldHVybnMgdHJ1ZSBpZiB4IDwgeSBmb3Igc29tZSBvcmRlciBzdWNoIHRoYXQ6
CisvLyBBdG9taWNTdHJvbmdDQVMgYXJlIGFsd2F5cyBhdCB0aGUgYmVnaW5uaW5nICh1c2VkIGJ5
IHNvbWUgcGF0dGVybnMgaW4gQjNMb3dlclRvQWlyKQorLy8gQ29uc3RhbnRzIGFyZSBhbHdheXMg
YXQgdGhlIGVuZCAodXNlZCBieSBzb21lIG90aGVyIHBhdHRlcm5zIGZvciBzdHJlbmd0aCByZWR1
Y3Rpb24pCisvLyBFdmVyeXRoaW5nIGVsc2UgaXMgc29ydGVkIGJ5IGluZGV4IChhcyBhIGNhbm9u
aWNhbGl6YXRpb24gdGhhdCBoZWxwcyBwYXNzZXMgbGlrZSBDU0UpCitib29sIFBlZXBob2xlT3B0
aW1pemVyOjpzaG91bGRHb0JlZm9yZShWYWx1ZSogeCwgVmFsdWUqIHkpCit7CisgICAgaWYgKCh4
LT5pc0NvbnN0YW50KCkgJiYgIXktPmlzQ29uc3RhbnQoKSkKKyAgICAgICAgfHwgKHktPm9wY29k
ZSgpID09IEF0b21pY1N0cm9uZ0NBUyAmJiAhKHgtPm9wY29kZSgpID09IEF0b21pY1N0cm9uZ0NB
UykpKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuICgoeS0+aXND
b25zdGFudCgpICYmICF4LT5pc0NvbnN0YW50KCkpCisgICAgICAgIHx8ICh4LT5vcGNvZGUoKSA9
PSBBdG9taWNTdHJvbmdDQVMgJiYgISh5LT5vcGNvZGUoKSA9PSBBdG9taWNTdHJvbmdDQVMpKQor
ICAgICAgICB8fCAoeC0+aW5kZXgoKSA8IHktPmluZGV4KCkpKTsKK30KKworLy8gRm9yIE9wPT1B
ZGQgb3IgU3ViLCB0dXJuIGFueSBvZiB0aGVzZToKKy8vICAgICAgT3AoTXVsKHgxLCB4MiksIE11
bCh4MSwgeDMpKQorLy8gICAgICBPcChNdWwoeDIsIHgxKSwgTXVsKHgxLCB4MykpCisvLyAgICAg
IE9wKE11bCh4MSwgeDIpLCBNdWwoeDMsIHgxKSkKKy8vICAgICAgT3AoTXVsKHgyLCB4MSksIE11
bCh4MywgeDEpKQorLy8gSW50byB0aGlzOiBNdWwoeDEsIE9wKHgyLCB4MykpCitWYWx1ZSogUGVl
cGhvbGVPcHRpbWl6ZXI6OnRyeVJlZHVjZU11bERpc3RyaWJ1dGl2aXR5KE9wY29kZSBvcCwgVHlw
ZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQoreworICAg
IEFTU0VSVChvcCA9PSBBZGQgfHwgb3AgPT0gU3ViKTsKKyAgICBWYWx1ZSogeDEgPSBudWxscHRy
OworICAgIFZhbHVlKiB4MiA9IG51bGxwdHI7CisgICAgVmFsdWUqIHgzID0gbnVsbHB0cjsKKyAg
ICBpZiAobGVmdC0+b3Bjb2RlKCkgPT0gTXVsICYmIHJpZ2h0LT5vcGNvZGUoKSA9PSBNdWwpIHsK
KyAgICAgICAgaWYgKGxlZnQtPmNoaWxkKDApID09IHJpZ2h0LT5jaGlsZCgwKSkgeworICAgICAg
ICAgICAgLy8gT3AoTXVsKHgxLCB4MiksIE11bCh4MSwgeDMpKQorICAgICAgICAgICAgeDEgPSBs
ZWZ0LT5jaGlsZCgwKTsKKyAgICAgICAgICAgIHgyID0gbGVmdC0+Y2hpbGQoMSk7CisgICAgICAg
ICAgICB4MyA9IHJpZ2h0LT5jaGlsZCgxKTsKKyAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5jaGls
ZCgxKSA9PSByaWdodC0+Y2hpbGQoMCkpIHsKKyAgICAgICAgICAgIC8vIE9wKE11bCh4MiwgeDEp
LCBNdWwoeDEsIHgzKSkKKyAgICAgICAgICAgIHgxID0gbGVmdC0+Y2hpbGQoMSk7CisgICAgICAg
ICAgICB4MiA9IGxlZnQtPmNoaWxkKDApOworICAgICAgICAgICAgeDMgPSByaWdodC0+Y2hpbGQo
MSk7CisgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+Y2hpbGQoMCkgPT0gcmlnaHQtPmNoaWxkKDEp
KSB7CisgICAgICAgICAgICAvLyBPcChNdWwoeDEsIHgyKSwgTXVsKHgzLCB4MSkpCisgICAgICAg
ICAgICB4MSA9IGxlZnQtPmNoaWxkKDApOworICAgICAgICAgICAgeDIgPSBsZWZ0LT5jaGlsZCgx
KTsKKyAgICAgICAgICAgIHgzID0gcmlnaHQtPmNoaWxkKDApOworICAgICAgICB9IGVsc2UgaWYg
KGxlZnQtPmNoaWxkKDEpID09IHJpZ2h0LT5jaGlsZCgxKSkgeworICAgICAgICAgICAgLy8gT3Ao
TXVsKHgyLCB4MSksIE11bCh4MywgeDEpKQorICAgICAgICAgICAgeDEgPSBsZWZ0LT5jaGlsZCgx
KTsKKyAgICAgICAgICAgIHgyID0gbGVmdC0+Y2hpbGQoMCk7CisgICAgICAgICAgICB4MyA9IHJp
Z2h0LT5jaGlsZCgwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoeDEgIT0gbnVsbHB0cikg
eworICAgICAgICBBU1NFUlQoeDIgIT0gbnVsbHB0ciAmJiB4MyAhPSBudWxscHRyKTsKKyAgICAg
ICAgVmFsdWUqIG5ld09wID0gb3AgPT0gQWRkID8gcmVkdWNlQWRkKHR5cGUsIG9yaWdpbiwgeDIs
IHgzKSA6IHJlZHVjZVN1Yih0eXBlLCBvcmlnaW4sIHgyLCB4Myk7CisgICAgICAgIHJldHVybiBy
ZWR1Y2VNdWwodHlwZSwgb3JpZ2luLCB4MSwgbmV3T3ApOworICAgIH0KKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKworLy8gRm9yIE9wPT1CaXRPciBvciBCaXRYb3IsIHR1cm4gYW55IG9mIHRoZXNl
OgorLy8gICAgICBPcChCaXRBbmQoeDEsIHgyKSwgQml0QW5kKHgxLCB4MykpCisvLyAgICAgIE9w
KEJpdEFuZCh4MiwgeDEpLCBCaXRBbmQoeDEsIHgzKSkKKy8vICAgICAgT3AoQml0QW5kKHgxLCB4
MiksIEJpdEFuZCh4MywgeDEpKQorLy8gICAgICBPcChCaXRBbmQoeDIsIHgxKSwgQml0QW5kKHgz
LCB4MSkpCisvLyBJbnRvIHRoaXM6IEJpdEFuZChPcCh4MiwgeDMpLCB4MSkKKy8vIEFuZCBhbnkg
b2YgdGhlc2U6CisvLyAgICAgIE9wKEJpdEFuZCh4MSwgeDIpLCB4MSkKKy8vICAgICAgT3AoQml0
QW5kKHgyLCB4MSksIHgxKQorLy8gICAgICBPcCh4MSwgQml0QW5kKHgxLCB4MikpCisvLyAgICAg
IE9wKHgxLCBCaXRBbmQoeDIsIHgxKSkKKy8vIEludG8gdGhpczogQml0QW5kKE9wKHgyLCB4MSks
IHgxKQorLy8gVGhpcyBzZWNvbmQgc2V0IGlzIGVxdWl2YWxlbnQgdG8gZG9pbmcgeDEgPT4gQml0
QW5kKHgxLCB4MSksIGFuZCB0aGVuIGFwcGx5aW5nIHRoZSBmaXJzdCBzZXQuCisvLyBJdCBkb2Vz
IG5vdCByZWR1Y2UgdGhlIG51bWJlciBvZiBvcGVyYXRpb25zIGV4ZWN1dGVkLCBidXQgcHJvdmlk
ZXMgc29tZSB1c2VmdWwgbm9ybWFsaXphdGlvbjogd2UgcHJlZmVyIHRvIGhhdmUgQml0QW5kIGF0
IHRoZSBvdXRlcm1vc3QsIHRoZW4gQml0WG9yLCBhbmQgZmluYWxseSBCaXRPciBhdCB0aGUgaW5u
ZXJtb3N0CitWYWx1ZSogUGVlcGhvbGVPcHRpbWl6ZXI6OnRyeVJlZHVjZUJpdEFuZERpc3RyaWJ1
dGl2aXR5KE9wY29kZSBvcCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwg
VmFsdWUqIHJpZ2h0KQoreworICAgIEFTU0VSVChvcCA9PSBCaXRPciB8fCBvcCA9PSBCaXRYb3Ip
OworICAgIFZhbHVlKiB4MSA9IG51bGxwdHI7CisgICAgVmFsdWUqIHgyID0gbnVsbHB0cjsKKyAg
ICBWYWx1ZSogeDMgPSBudWxscHRyOworICAgIGlmIChsZWZ0LT5vcGNvZGUoKSA9PSBCaXRBbmQg
JiYgcmlnaHQtPm9wY29kZSgpID09IEJpdEFuZCkgeworICAgICAgICBpZiAobGVmdC0+Y2hpbGQo
MCkgPT0gcmlnaHQtPmNoaWxkKDApKSB7CisgICAgICAgICAgICB4MSA9IGxlZnQtPmNoaWxkKDAp
OworICAgICAgICAgICAgeDIgPSBsZWZ0LT5jaGlsZCgxKTsKKyAgICAgICAgICAgIHgzID0gcmln
aHQtPmNoaWxkKDEpOworICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmNoaWxkKDEpID09IHJpZ2h0
LT5jaGlsZCgwKSkgeworICAgICAgICAgICAgeDEgPSBsZWZ0LT5jaGlsZCgxKTsKKyAgICAgICAg
ICAgIHgyID0gbGVmdC0+Y2hpbGQoMCk7CisgICAgICAgICAgICB4MyA9IHJpZ2h0LT5jaGlsZCgx
KTsKKyAgICAgICAgfSBlbHNlIGlmIChsZWZ0LT5jaGlsZCgwKSA9PSByaWdodC0+Y2hpbGQoMSkp
IHsKKyAgICAgICAgICAgIHgxID0gbGVmdC0+Y2hpbGQoMCk7CisgICAgICAgICAgICB4MiA9IGxl
ZnQtPmNoaWxkKDEpOworICAgICAgICAgICAgeDMgPSByaWdodC0+Y2hpbGQoMCk7CisgICAgICAg
IH0gZWxzZSBpZiAobGVmdC0+Y2hpbGQoMSkgPT0gcmlnaHQtPmNoaWxkKDEpKSB7CisgICAgICAg
ICAgICB4MSA9IGxlZnQtPmNoaWxkKDEpOworICAgICAgICAgICAgeDIgPSBsZWZ0LT5jaGlsZCgw
KTsKKyAgICAgICAgICAgIHgzID0gcmlnaHQtPmNoaWxkKDApOworICAgICAgICB9CisgICAgfSBl
bHNlIGlmIChsZWZ0LT5vcGNvZGUoKSA9PSBCaXRBbmQpIHsKKyAgICAgICAgaWYgKGxlZnQtPmNo
aWxkKDApID09IHJpZ2h0KSB7CisgICAgICAgICAgICB4MSA9IHgzID0gcmlnaHQ7CisgICAgICAg
ICAgICB4MiA9IGxlZnQtPmNoaWxkKDEpOworICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmNoaWxk
KDEpID09IHJpZ2h0KSB7CisgICAgICAgICAgICB4MSA9IHgzID0gcmlnaHQ7CisgICAgICAgICAg
ICB4MiA9IGxlZnQtPmNoaWxkKDApOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChyaWdodC0+
b3Bjb2RlKCkgPT0gQml0QW5kKSB7CisgICAgICAgIGlmIChyaWdodC0+Y2hpbGQoMCkgPT0gbGVm
dCkgeworICAgICAgICAgICAgeDEgPSB4MyA9IGxlZnQ7CisgICAgICAgICAgICB4MiA9IHJpZ2h0
LT5jaGlsZCgxKTsKKyAgICAgICAgfSBlbHNlIGlmIChyaWdodC0+Y2hpbGQoMSkgPT0gbGVmdCkg
eworICAgICAgICAgICAgeDEgPSB4MyA9IGxlZnQ7CisgICAgICAgICAgICB4MiA9IHJpZ2h0LT5j
aGlsZCgwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoeDEgIT0gbnVsbHB0cikgeworICAg
ICAgICBBU1NFUlQoeDIgIT0gbnVsbHB0ciAmJiB4MyAhPSBudWxscHRyKTsKKyAgICAgICAgVmFs
dWUqIG5ld09wID0gb3AgPT0gQml0T3IgPyByZWR1Y2VCaXRPcih0eXBlLCBvcmlnaW4sIHgyLCB4
MykgOiByZWR1Y2VCaXRYb3IodHlwZSwgb3JpZ2luLCB4MiwgeDMpOworICAgICAgICByZXR1cm4g
cmVkdWNlQml0QW5kKHR5cGUsIG9yaWdpbiwgeDEsIG5ld09wKTsKKyAgICB9CisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK1ZhbHVlKiBQZWVwaG9sZU9wdGltaXplcjo6dHJ5UmVkdWNlU2hpZnRP
clJvdGF0ZShPcGNvZGUgb3AsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQs
IFZhbHVlKiByaWdodCkKK3sKKyAgICAvLyBTaGlmdCBhbnl0aGluZyBieSB6ZXJvIGlzIGlkZW50
aXR5LgorICAgIGlmIChyaWdodC0+aXNJbnQzMigwKSkKKyAgICAgICAgcmV0dXJuIGxlZnQ7CisK
KyAgICAvLyBUaGUgc2hpZnQgYWxyZWFkeSBtYXNrcyBpdHMgc2hpZnQgYW1vdW50LiBJZiB0aGUg
c2hpZnQgYW1vdW50IGlzIGJlaW5nIG1hc2tlZCBieSBhCisgICAgLy8gcmVkdW5kYW50IGFtb3Vu
dCwgdGhlbiByZW1vdmUgdGhlIG1hc2suIEZvciBleGFtcGxlLAorICAgIC8vIFR1cm4gdGhpczog
U2hsKEB4LCBCaXRBbmQoQHksIDYzKSkKKyAgICAvLyBJbnRvIHRoaXM6IFNobChAeCwgQHkpCisg
ICAgdW5zaWduZWQgbWFzayA9IHNpemVvZlR5cGUodHlwZSkgKiA4IC0gMTsKKyAgICBpZiAocmln
aHQtPm9wY29kZSgpID09IEJpdEFuZAorICAgICAgICAmJiByaWdodC0+Y2hpbGQoMSktPmhhc0lu
dDMyKCkKKyAgICAgICAgJiYgKHJpZ2h0LT5jaGlsZCgxKS0+YXNJbnQzMigpICYgbWFzaykgPT0g
bWFzaykgeworICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgU2hsOgorICAgICAg
ICAgICAgcmV0dXJuIHJlZHVjZVNobCh0eXBlLCBvcmlnaW4sIGxlZnQsIHJpZ2h0LT5jaGlsZCgw
KSk7CisgICAgICAgIGNhc2UgU1NocjoKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VTU2hyKHR5
cGUsIG9yaWdpbiwgbGVmdCwgcmlnaHQtPmNoaWxkKDApKTsKKyAgICAgICAgY2FzZSBaU2hyOgor
ICAgICAgICAgICAgcmV0dXJuIHJlZHVjZVpTaHIodHlwZSwgb3JpZ2luLCBsZWZ0LCByaWdodC0+
Y2hpbGQoMCkpOworICAgICAgICBjYXNlIFJvdEw6CisgICAgICAgICAgICByZXR1cm4gcmVkdWNl
Um90TCh0eXBlLCBvcmlnaW4sIGxlZnQsIHJpZ2h0LT5jaGlsZCgwKSk7CisgICAgICAgIGNhc2Ug
Um90UjoKKyAgICAgICAgICAgIHJldHVybiByZWR1Y2VSb3RSKHR5cGUsIG9yaWdpbiwgbGVmdCwg
cmlnaHQtPmNoaWxkKDApKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKworLy8gRklYTUU6IFRoaXMgaXMgYSBiYXNpYyBib3VuZGVkIGJhY2t3YXJkcyBh
bmFseXNpcy4KKy8vIFdlIHNob3VsZCBtYWtlIFBlZXBob2xlT3B0aW1pemVyIHBhcmFtZXRyaWMg
aW4gdGhpcyBhbmFseXNpcywgdG8gc3VwcG9ydCBhIGZvcndhcmQgYW5hbHlzaXMuCitJbnRSYW5n
ZSBQZWVwaG9sZU9wdGltaXplcjo6cmFuZ2VGb3IoVmFsdWUqIHZhbHVlLCB1bnNpZ25lZCB0aW1l
VG9MaXZlKQoreworICAgIGlmICghdGltZVRvTGl2ZSkKKyAgICAgICAgcmV0dXJuIEludFJhbmdl
Ojp0b3AodmFsdWUtPnR5cGUoKSk7CisKKyAgICBzd2l0Y2ggKHZhbHVlLT5vcGNvZGUoKSkgewor
ICAgIGNhc2UgQ29uc3QzMjoKKyAgICBjYXNlIENvbnN0NjQ6IHsKKyAgICAgICAgaW50NjRfdCBp
bnRWYWx1ZSA9IHZhbHVlLT5hc0ludCgpOworICAgICAgICByZXR1cm4gSW50UmFuZ2UoaW50VmFs
dWUsIGludFZhbHVlKTsKKyAgICB9CisKKyAgICBjYXNlIEJpdEFuZDoKKyAgICAgICAgaWYgKHZh
bHVlLT5jaGlsZCgxKS0+aGFzSW50KCkpCisgICAgICAgICAgICByZXR1cm4gSW50UmFuZ2U6OnJh
bmdlRm9yTWFzayh2YWx1ZS0+Y2hpbGQoMSktPmFzSW50KCksIHZhbHVlLT50eXBlKCkpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2UgU1NocjoKKyAgICAgICAgaWYgKHZhbHVlLT5jaGlsZCgx
KS0+aGFzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiByYW5nZUZvcih2YWx1ZS0+Y2hpbGQo
MCksIHRpbWVUb0xpdmUgLSAxKS5zU2hyKHZhbHVlLT5jaGlsZCgxKS0+YXNJbnQzMigpLCB2YWx1
ZS0+dHlwZSgpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFpTaHI6CisgICAgICAgIGlm
ICh2YWx1ZS0+Y2hpbGQoMSktPmhhc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gcmFuZ2VG
b3IodmFsdWUtPmNoaWxkKDApLCB0aW1lVG9MaXZlIC0gMSkuelNocih2YWx1ZS0+Y2hpbGQoMSkt
PmFzSW50MzIoKSwgdmFsdWUtPnR5cGUoKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBT
aGw6CisgICAgICAgIGlmICh2YWx1ZS0+Y2hpbGQoMSktPmhhc0ludDMyKCkpCisgICAgICAgICAg
ICByZXR1cm4gcmFuZ2VGb3IodmFsdWUtPmNoaWxkKDApLCB0aW1lVG9MaXZlIC0gMSkuc2hsKHZh
bHVlLT5jaGlsZCgxKS0+YXNJbnQzMigpLCB2YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIEFkZDoKKyAgICAgICAgcmV0dXJuIHJhbmdlRm9yKHZhbHVlLT5jaGlsZCgw
KSwgdGltZVRvTGl2ZSAtIDEpLmFkZChyYW5nZUZvcih2YWx1ZS0+Y2hpbGQoMSksIHRpbWVUb0xp
dmUgLSAxKSwgdmFsdWUtPnR5cGUoKSk7CisKKyAgICBjYXNlIFN1YjoKKyAgICAgICAgcmV0dXJu
IHJhbmdlRm9yKHZhbHVlLT5jaGlsZCgwKSwgdGltZVRvTGl2ZSAtIDEpLnN1YihyYW5nZUZvcih2
YWx1ZS0+Y2hpbGQoMSksIHRpbWVUb0xpdmUgLSAxKSwgdmFsdWUtPnR5cGUoKSk7CisKKyAgICBj
YXNlIE11bDoKKyAgICAgICAgcmV0dXJuIHJhbmdlRm9yKHZhbHVlLT5jaGlsZCgwKSwgdGltZVRv
TGl2ZSAtIDEpLm11bChyYW5nZUZvcih2YWx1ZS0+Y2hpbGQoMSksIHRpbWVUb0xpdmUgLSAxKSwg
dmFsdWUtPnR5cGUoKSk7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICByZXR1cm4gSW50UmFuZ2U6OnRvcCh2YWx1ZS0+dHlwZSgpKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQZWVwaG9sZU9wdGltaXplci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BlZXBob2xlT3B0aW1pemVyLmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGVlcGhvbGVPcHRpbWl6ZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ2hlY2tWYWx1ZS5oIgor
I2luY2x1ZGUgIkIzSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEludFJhbmdlOworY2xhc3Mg
UHJvY2VkdXJlOworCisvLyBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIGluIHR3byBtb2RlcywgdGhh
dCBjb3JyZXNwb25kIHRvIHRoZSB0d28gd2F5cyBvZiBjb25zdHJ1Y3RpbmcgaXQuCisvLyBJbiB0
aGUgZmlyc3QgbW9kZSwgaXQgaXMgcGFzc2VkIGFuIGluc2VydGlvblNldCwgYW5kIHVzZXMgaXQg
dG8gY29uc3RydWN0IG5ldyB2YWx1ZXMuCisvLyBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2li
aWxpdHkgdG8ga2VlcCB0aGUgaW5kZXggdXAtdG8tZGF0ZSB3aXRoIHNldEluZGV4LAorLy8gYW5k
IHRvIGV4ZWN1dGUgdGhlIGluc2VydGlvblNldCBvbmNlIGl0IGlzIGRvbmUgd2l0aCB0aGUgY3Vy
cmVudCBiYXNpYyBibG9jay4KKy8vIFRoaXMgbW9kZSBpcyBwcmltYXJpbHkgdXNlZCBieSBCM1Jl
ZHVjZVN0cmVuZ3RoLgorLy8gSW4gdGhlIHNlY29uZCBtb2RlLCBpdCBpcyBwYXNzZWQgYSBwb2lu
dGVyIHRvIGEgYmFzaWMgYmxvY2ssIGFuZCBjb25zdHJ1Y3QgbmV3IHZhbHVlcyBieSBhcHBlbmRp
bmcgdGhlbSBhdCB0aGUgZW5kLgorLy8gSW4gdGhpcyBtb2RlLCB0aGUgY2FsbGVyJ3Mgb25seSBy
ZXNwb25zaWJpbGl0eSBpcyB0byB1cGRhdGUgdGhlIGJsb2NrIHBvaW50ZXIgd2l0aCBzZXRCbG9j
ayB3aGVuZXZlciBuZWVkZWQuCisvLyBUaGlzIG1vZGUgaXMgcHJpbWFyaWx5IHVzZWQgYnkgRlRM
T3V0cHV0LgorY2xhc3MgUGVlcGhvbGVPcHRpbWl6ZXIgeworcHVibGljOgorICAgIFBlZXBob2xl
T3B0aW1pemVyKFByb2NlZHVyZSYgcHJvYywgSW5zZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQpCisg
ICAgICAgIDogbV9wcm9jKHByb2MpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoJmluc2VydGlv
blNldCkKKyAgICAgICAgLCBtX2luZGV4KDApCisgICAgeworICAgIH0KKworICAgIFBlZXBob2xl
T3B0aW1pemVyKFByb2NlZHVyZSYgcHJvYywgQmFzaWNCbG9jayogYmxvY2sgPSBudWxscHRyKQor
ICAgICAgICA6IG1fcHJvYyhwcm9jKQorICAgICAgICAsIG1fYmxvY2soYmxvY2spCisgICAgewor
ICAgIH0KKworICAgIHZvaWQgc2V0SW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAg
ICBBU1NFUlQoISFtX2luc2VydGlvblNldCk7CisgICAgICAgIG1faW5kZXggPSBpbmRleDsKKyAg
ICB9CisKKyAgICB2b2lkIHNldEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFtX2luc2VydGlvblNldCk7CisgICAgICAgIG1fYmxvY2sgPSBibG9jazsKKyAg
ICB9CisgICAgCisgICAgZW51bSBNYXlHaXZlVXBNb2RlIHsgTWF5Tm90R2l2ZVVwLCBNYXlHaXZl
VXAgfTsKKyAgICBlbnVtIElzQ2hpbGxNb2RlIHsgSXNOb3RDaGlsbCwgSXNDaGlsbCB9OworCisg
ICAgVmFsdWUqIHJlZHVjZU9wYXF1ZShUeXBlLCBPcmlnaW4sIFZhbHVlKiBjaGlsZCwgTWF5R2l2
ZVVwTW9kZSA9IE1heU5vdEdpdmVVcCk7CisgICAgVmFsdWUqIHJlZHVjZUFkZChUeXBlLCBPcmln
aW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIE1heUdpdmVVcE1vZGUgPSBNYXlOb3RHaXZl
VXApOworICAgIFZhbHVlKiByZWR1Y2VTdWIoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFs
dWUqIHJpZ2h0LCBNYXlHaXZlVXBNb2RlID0gTWF5Tm90R2l2ZVVwKTsKKyAgICBWYWx1ZSogcmVk
dWNlTmVnKFR5cGUsIE9yaWdpbiwgVmFsdWUqLCBNYXlHaXZlVXBNb2RlID0gTWF5Tm90R2l2ZVVw
KTsKKyAgICBWYWx1ZSogcmVkdWNlTXVsKFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVl
KiByaWdodCwgTWF5R2l2ZVVwTW9kZSA9IE1heU5vdEdpdmVVcCk7CisgICAgVmFsdWUqIHJlZHVj
ZURpdihUeXBlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIElzQ2hpbGxNb2Rl
LCBNYXlHaXZlVXBNb2RlID0gTWF5Tm90R2l2ZVVwKTsKKyAgICBWYWx1ZSogcmVkdWNlVURpdihU
eXBlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIE1heUdpdmVVcE1vZGUgPSBN
YXlOb3RHaXZlVXApOworICAgIFZhbHVlKiByZWR1Y2VNb2QoVHlwZSwgT3JpZ2luLCBWYWx1ZSog
bGVmdCwgVmFsdWUqIHJpZ2h0LCBJc0NoaWxsTW9kZSwgTWF5R2l2ZVVwTW9kZSA9IE1heU5vdEdp
dmVVcCk7CisgICAgVmFsdWUqIHJlZHVjZVVNb2QoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwg
VmFsdWUqIHJpZ2h0LCBNYXlHaXZlVXBNb2RlID0gTWF5Tm90R2l2ZVVwKTsKKyAgICBWYWx1ZSog
cmVkdWNlQml0QW5kKFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgTWF5
R2l2ZVVwTW9kZSA9IE1heU5vdEdpdmVVcCk7CisgICAgVmFsdWUqIHJlZHVjZUJpdE9yKFR5cGUs
IE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgTWF5R2l2ZVVwTW9kZSA9IE1heU5v
dEdpdmVVcCk7CisgICAgVmFsdWUqIHJlZHVjZUJpdFhvcihUeXBlLCBPcmlnaW4sIFZhbHVlKiBs
ZWZ0LCBWYWx1ZSogcmlnaHQsIE1heUdpdmVVcE1vZGUgPSBNYXlOb3RHaXZlVXApOworICAgIFZh
bHVlKiByZWR1Y2VTaGwoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBN
YXlHaXZlVXBNb2RlID0gTWF5Tm90R2l2ZVVwKTsKKyAgICBWYWx1ZSogcmVkdWNlU1NocihUeXBl
LCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIE1heUdpdmVVcE1vZGUgPSBNYXlO
b3RHaXZlVXApOworICAgIFZhbHVlKiByZWR1Y2VaU2hyKFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxl
ZnQsIFZhbHVlKiByaWdodCwgTWF5R2l2ZVVwTW9kZSA9IE1heU5vdEdpdmVVcCk7CisgICAgVmFs
dWUqIHJlZHVjZVJvdEwoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBN
YXlHaXZlVXBNb2RlID0gTWF5Tm90R2l2ZVVwKTsKKyAgICBWYWx1ZSogcmVkdWNlUm90UihUeXBl
LCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIE1heUdpdmVVcE1vZGUgPSBNYXlO
b3RHaXZlVXApOworICAgIFZhbHVlKiByZWR1Y2VBYnMoVHlwZSwgT3JpZ2luLCBWYWx1ZSosIE1h
eUdpdmVVcE1vZGUgPSBNYXlOb3RHaXZlVXApOworICAgIFZhbHVlKiByZWR1Y2VDZWlsKFR5cGUs
IE9yaWdpbiwgVmFsdWUqLCBNYXlHaXZlVXBNb2RlID0gTWF5Tm90R2l2ZVVwKTsKKyAgICBWYWx1
ZSogcmVkdWNlRmxvb3IoVHlwZSwgT3JpZ2luLCBWYWx1ZSosIE1heUdpdmVVcE1vZGUgPSBNYXlO
b3RHaXZlVXApOworICAgIFZhbHVlKiByZWR1Y2VCaXR3aXNlQ2FzdChUeXBlLCBPcmlnaW4sIFZh
bHVlKiwgTWF5R2l2ZVVwTW9kZSA9IE1heU5vdEdpdmVVcCk7CisgICAgVmFsdWUqIHJlZHVjZVNx
cnQoVHlwZSwgT3JpZ2luLCBWYWx1ZSosIE1heUdpdmVVcE1vZGUgPSBNYXlOb3RHaXZlVXApOwor
ICAgIFZhbHVlKiByZWR1Y2VTRXh0OChUeXBlLCBPcmlnaW4sIFZhbHVlKiwgTWF5R2l2ZVVwTW9k
ZSA9IE1heU5vdEdpdmVVcCk7CisgICAgVmFsdWUqIHJlZHVjZVNFeHQxNihUeXBlLCBPcmlnaW4s
IFZhbHVlKiwgTWF5R2l2ZVVwTW9kZSA9IE1heU5vdEdpdmVVcCk7CisgICAgVmFsdWUqIHJlZHVj
ZVNFeHQzMihUeXBlLCBPcmlnaW4sIFZhbHVlKiwgTWF5R2l2ZVVwTW9kZSA9IE1heU5vdEdpdmVV
cCk7CisgICAgVmFsdWUqIHJlZHVjZVpFeHQzMihUeXBlLCBPcmlnaW4sIFZhbHVlKiwgTWF5R2l2
ZVVwTW9kZSA9IE1heU5vdEdpdmVVcCk7CisgICAgVmFsdWUqIHJlZHVjZVRydW5jKFR5cGUsIE9y
aWdpbiwgVmFsdWUqLCBNYXlHaXZlVXBNb2RlID0gTWF5Tm90R2l2ZVVwKTsKKyAgICBWYWx1ZSog
cmVkdWNlSVRvRChUeXBlLCBPcmlnaW4sIFZhbHVlKiwgTWF5R2l2ZVVwTW9kZSA9IE1heU5vdEdp
dmVVcCk7CisgICAgVmFsdWUqIHJlZHVjZUlUb0YoVHlwZSwgT3JpZ2luLCBWYWx1ZSosIE1heUdp
dmVVcE1vZGUgPSBNYXlOb3RHaXZlVXApOworICAgIFZhbHVlKiByZWR1Y2VGbG9hdFRvRG91Ymxl
KFR5cGUsIE9yaWdpbiwgVmFsdWUqLCBNYXlHaXZlVXBNb2RlID0gTWF5Tm90R2l2ZVVwKTsKKyAg
ICBWYWx1ZSogcmVkdWNlRG91YmxlVG9GbG9hdChUeXBlLCBPcmlnaW4sIFZhbHVlKiwgTWF5R2l2
ZVVwTW9kZSA9IE1heU5vdEdpdmVVcCk7CisgICAgVmFsdWUqIHJlZHVjZVNlbGVjdChUeXBlLCBP
cmlnaW4sIFZhbHVlKiBjb25kLCBWYWx1ZSogaWZUcnVlLCBWYWx1ZSogaWZGYWxzZSwgTWF5R2l2
ZVVwTW9kZSA9IE1heU5vdEdpdmVVcCk7CisgICAgVmFsdWUqIHJlZHVjZUxvYWRTdG9yZShPcGNv
ZGUsIFR5cGUsIE9yaWdpbiwgVmFsdWUqIGFkZHJlc3MsIFZhbHVlOjpPZmZzZXRUeXBlLCBWYWx1
ZSogdmFsdWVTdG9yZWQgPSBudWxscHRyLCBIZWFwUmFuZ2UgPSBIZWFwUmFuZ2U6OnRvcCgpLCBI
ZWFwUmFuZ2UgZmVuY2VSYW5nZSA9IEhlYXBSYW5nZSgpLCBNYXlHaXZlVXBNb2RlID0gTWF5Tm90
R2l2ZVVwKTsKKyAgICBWYWx1ZSogcmVkdWNlRXF1YWwoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVm
dCwgVmFsdWUqIHJpZ2h0LCBNYXlHaXZlVXBNb2RlID0gTWF5Tm90R2l2ZVVwKTsKKyAgICBWYWx1
ZSogcmVkdWNlTm90RXF1YWwoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0
LCBNYXlHaXZlVXBNb2RlID0gTWF5Tm90R2l2ZVVwKTsKKyAgICBWYWx1ZSogcmVkdWNlRXF1YWxP
clVub3JkZXJlZChUeXBlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIE1heUdp
dmVVcE1vZGUgPSBNYXlOb3RHaXZlVXApOworICAgIFZhbHVlKiByZWR1Y2VMZXNzVGhhbihUeXBl
LCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIE1heUdpdmVVcE1vZGUgPSBNYXlO
b3RHaXZlVXApOworICAgIFZhbHVlKiByZWR1Y2VHcmVhdGVyVGhhbihUeXBlLCBPcmlnaW4sIFZh
bHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIE1heUdpdmVVcE1vZGUgPSBNYXlOb3RHaXZlVXApOwor
ICAgIFZhbHVlKiByZWR1Y2VMZXNzRXF1YWwoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFs
dWUqIHJpZ2h0LCBNYXlHaXZlVXBNb2RlID0gTWF5Tm90R2l2ZVVwKTsKKyAgICBWYWx1ZSogcmVk
dWNlR3JlYXRlckVxdWFsKFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwg
TWF5R2l2ZVVwTW9kZSA9IE1heU5vdEdpdmVVcCk7CisgICAgVmFsdWUqIHJlZHVjZUFib3ZlKFR5
cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgTWF5R2l2ZVVwTW9kZSA9IE1h
eU5vdEdpdmVVcCk7CisgICAgVmFsdWUqIHJlZHVjZUJlbG93KFR5cGUsIE9yaWdpbiwgVmFsdWUq
IGxlZnQsIFZhbHVlKiByaWdodCwgTWF5R2l2ZVVwTW9kZSA9IE1heU5vdEdpdmVVcCk7CisgICAg
VmFsdWUqIHJlZHVjZUFib3ZlRXF1YWwoVHlwZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUq
IHJpZ2h0LCBNYXlHaXZlVXBNb2RlID0gTWF5Tm90R2l2ZVVwKTsKKyAgICBWYWx1ZSogcmVkdWNl
QmVsb3dFcXVhbChUeXBlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIE1heUdp
dmVVcE1vZGUgPSBNYXlOb3RHaXZlVXApOworICAgIC8vIERpc3BhdGNoIG9uIHRoZSBvcGNvZGUg
dG8gYW55IG9mIHRoZSBmdW5jdGlvbnMgYWJvdmUsIHdpdGggY2FuR2l2ZVVwID0gdHJ1ZS4KKyAg
ICBWYWx1ZSogdHJ5UmVkdWNlKFZhbHVlKik7CisKKyAgICAvLyBUaGlzIG1ldGhvZCBoYXMgYSBj
b21wbGV0ZWx5IGRpZmZlcmVudCBpbnRlcmZhY2UsIGJlY2F1c2UgaXQgY2Fubm90IGJlIHVzZWQg
b24gdGhlIGZseSB3aGlsZSBjcmVhdGluZyBCMywKKyAgICAvLyBhcyBpdCBtb2RpZmllcyB0aGUg
YmxvY2sncyBzdWNjZXNzb3JzLgorICAgIC8vIEl0IHNpbXBseSByZXR1cm5zIHRydWUgaWYgaXQg
d2FzIGFibGUgdG8gb3B0aW1pemUgb3IgY2Fub25pY2FsaXplIHRoZSBicmFuY2ggYW5kIGZhbHNl
IG90aGVyd2lzZS4KKyAgICBib29sIHRyeVNpbXBsaWZ5QnJhbmNoKFZhbHVlKik7CisgICAgLy8g
U2ltaWxhcmlseSB0aGVzZSBtZXRob2RzIHNob3VsZCBub3QgYmUgY2FsbGVkIHdoZW4gY29uc3Ry
dWN0aW5nIGEgdmFyYXJncyBvcGVyYXRpb24gcGllY2V3aXNlIGFzIGlzIGNvbW1vbmx5IGRvbmUK
KyAgICAvLyBieSBGVExMb3dlckRGR1RvQjM6IHdlIGRvbid0IHdhbnQgY2xpZW50cyB0cnlpbmcg
dG8gbXV0YXRlIGEgQ2hlY2tBZGQgYWZ0ZXIgd2UndmUgdHJhbnNmb3JtZWQgaXQgaW50byBhbiBJ
ZGVudGl0eS4KKyAgICAvLyBUaGV5IHJldHVybiB0cnVlIGlmIHRoZXkgd2VyZSBhYmxlIHRvIGRv
IGFueSBvcHRpbWl6YXRpb24gb3IgY2Fub25pY2FsaXphdGlvbiwgYW5kIGZhbHNlIG90aGVyd2lz
ZS4KKyAgICBib29sIHRyeVNpbXBsaWZ5Q0NhbGwoQ0NhbGxWYWx1ZSopOworICAgIGJvb2wgdHJ5
U2ltcGxpZnlDaGVja0FkZChDaGVja1ZhbHVlKik7CisgICAgYm9vbCB0cnlTaW1wbGlmeUNoZWNr
U3ViKENoZWNrVmFsdWUqKTsKKyAgICBib29sIHRyeVNpbXBsaWZ5Q2hlY2tNdWwoQ2hlY2tWYWx1
ZSopOworICAgIGJvb2wgdHJ5U2ltcGxpZnlDaGVjayhDaGVja1ZhbHVlKik7CisKK3ByaXZhdGU6
CisgICAgVmFsdWUqIGFwcGVuZFRvQ3VycmVudEJsb2NrKFZhbHVlKik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgVmFsdWUqIGVt
aXQoQXJndW1lbnRzLi4uKTsKKworICAgIHN0YXRpYyBib29sIHNob3VsZEdvQmVmb3JlKFZhbHVl
KiwgVmFsdWUqKTsKKworICAgIFZhbHVlKiB0cnlSZWR1Y2VNdWxEaXN0cmlidXRpdml0eShPcGNv
ZGUsIFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCk7CisgICAgVmFsdWUq
IHRyeVJlZHVjZUJpdEFuZERpc3RyaWJ1dGl2aXR5KE9wY29kZSwgVHlwZSwgT3JpZ2luLCBWYWx1
ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KTsKKyAgICBWYWx1ZSogdHJ5UmVkdWNlU2hpZnRPclJvdGF0
ZShPcGNvZGUsIFR5cGUsIE9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCk7CisKKyAg
ICBzdGF0aWMgSW50UmFuZ2UgcmFuZ2VGb3IoVmFsdWUqLCB1bnNpZ25lZCB0aW1lVG9MaXZlID0g
NSk7CisKKyAgICBQcm9jZWR1cmUmIG1fcHJvYzsKKyAgICBJbnNlcnRpb25TZXQqIG1faW5zZXJ0
aW9uU2V0IHsgbnVsbHB0ciB9OworICAgIEJhc2ljQmxvY2sqIG1fYmxvY2sgeyBudWxscHRyIH07
CisgICAgdW5zaWduZWQgbV9pbmRleCB7IDAgfTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJldmlzaW9uIDI0NDU2OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNv
bmZpZy5oIgpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkIzRWxpbWluYXRlRGVhZENvZGUu
aCIKICNpbmNsdWRlICJCM0luc2VydGlvblNldElubGluZXMuaCIKICNpbmNsdWRlICJCM01lbW9y
eVZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzUGVlcGhvbGVPcHRpbWl6ZXIuaCIKICNpbmNs
dWRlICJCM1BoYXNlU2NvcGUuaCIKICNpbmNsdWRlICJCM1BoaUNoaWxkcmVuLmgiCiAjaW5jbHVk
ZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCkBAIC05MywzMDkgKzk0LDYgQEAKIHN0YXRpYyBjb25z
dCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAotLy8gRklYTUU6IFRoaXMgSW50UmFuZ2Ugc3R1
ZmYgc2hvdWxkIGJlIHJlZmFjdG9yZWQgaW50byBhIGdlbmVyYWwgY29uc3RhbnQgcHJvcGFnYXRv
ci4gSXQncyB3ZWlyZAotLy8gdGhhdCBpdCdzIGp1c3Qgc2l0dGluZyBoZXJlIGluIHRoaXMgZmls
ZS4KLWNsYXNzIEludFJhbmdlIHsKLXB1YmxpYzoKLSAgICBJbnRSYW5nZSgpCi0gICAgewotICAg
IH0KLQotICAgIEludFJhbmdlKGludDY0X3QgbWluLCBpbnQ2NF90IG1heCkKLSAgICAgICAgOiBt
X21pbihtaW4pCi0gICAgICAgICwgbV9tYXgobWF4KQotICAgIHsKLSAgICB9Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBJbnRSYW5nZSB0b3AoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEludFJhbmdlKHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1pbigpLCBzdGQ6Om51
bWVyaWNfbGltaXRzPFQ+OjptYXgoKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIEludFJhbmdlIHRv
cChUeXBlIHR5cGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2Fz
ZSBJbnQzMjoKLSAgICAgICAgICAgIHJldHVybiB0b3A8aW50MzJfdD4oKTsKLSAgICAgICAgY2Fz
ZSBJbnQ2NDoKLSAgICAgICAgICAgIHJldHVybiB0b3A8aW50NjRfdD4oKTsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gSW50UmFuZ2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIEludFJhbmdlIHJhbmdlRm9yTWFzayhUIG1hc2spCi0g
ICAgewotICAgICAgICBpZiAoIShtYXNrICsgMSkpCi0gICAgICAgICAgICByZXR1cm4gdG9wPFQ+
KCk7Ci0gICAgICAgIHJldHVybiBJbnRSYW5nZSgwLCBtYXNrKTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgSW50UmFuZ2UgcmFuZ2VGb3JNYXNrKGludDY0X3QgbWFzaywgVHlwZSB0eXBlKQotICAgIHsK
LSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAg
ICByZXR1cm4gcmFuZ2VGb3JNYXNrPGludDMyX3Q+KHN0YXRpY19jYXN0PGludDMyX3Q+KG1hc2sp
KTsKLSAgICAgICAgY2FzZSBJbnQ2NDoKLSAgICAgICAgICAgIHJldHVybiByYW5nZUZvck1hc2s8
aW50NjRfdD4obWFzayk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIEludFJhbmdlKCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBJbnRS
YW5nZSByYW5nZUZvclpTaHIoaW50MzJfdCBzaGlmdEFtb3VudCkKLSAgICB7Ci0gICAgICAgIHR5
cGVuYW1lIHN0ZDo6bWFrZV91bnNpZ25lZDxUPjo6dHlwZSBtYXNrID0gMDsKLSAgICAgICAgbWFz
ay0tOwotICAgICAgICBtYXNrID4+PSBzaGlmdEFtb3VudDsKLSAgICAgICAgcmV0dXJuIHJhbmdl
Rm9yTWFzazxUPihzdGF0aWNfY2FzdDxUPihtYXNrKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIElu
dFJhbmdlIHJhbmdlRm9yWlNocihpbnQzMl90IHNoaWZ0QW1vdW50LCBUeXBlIHR5cGUpCi0gICAg
ewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAgICAg
ICAgIHJldHVybiByYW5nZUZvclpTaHI8aW50MzJfdD4oc2hpZnRBbW91bnQpOwotICAgICAgICBj
YXNlIEludDY0OgotICAgICAgICAgICAgcmV0dXJuIHJhbmdlRm9yWlNocjxpbnQ2NF90PihzaGlm
dEFtb3VudCk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIEludFJhbmdlKCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpbnQ2NF90IG1pbigpIGNvbnN0IHsgcmV0dXJuIG1fbWluOyB9Ci0gICAg
aW50NjRfdCBtYXgoKSBjb25zdCB7IHJldHVybiBtX21heDsgfQotCi0gICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Ci0gICAgewotICAgICAgICBvdXQucHJpbnQoIlsiLCBtX21p
biwgIiwiLCBtX21heCwgIl0iKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
ICAgIGJvb2wgY291bGRPdmVyZmxvd0FkZChjb25zdCBJbnRSYW5nZSYgb3RoZXIpCi0gICAgewot
ICAgICAgICByZXR1cm4gc3VtT3ZlcmZsb3dzPFQ+KG1fbWluLCBvdGhlci5tX21pbikKLSAgICAg
ICAgICAgIHx8IHN1bU92ZXJmbG93czxUPihtX21pbiwgb3RoZXIubV9tYXgpCi0gICAgICAgICAg
ICB8fCBzdW1PdmVyZmxvd3M8VD4obV9tYXgsIG90aGVyLm1fbWluKQotICAgICAgICAgICAgfHwg
c3VtT3ZlcmZsb3dzPFQ+KG1fbWF4LCBvdGhlci5tX21heCk7Ci0gICAgfQotCi0gICAgYm9vbCBj
b3VsZE92ZXJmbG93QWRkKGNvbnN0IEludFJhbmdlJiBvdGhlciwgVHlwZSB0eXBlKQotICAgIHsK
LSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0gICAgICAgICAg
ICByZXR1cm4gY291bGRPdmVyZmxvd0FkZDxpbnQzMl90PihvdGhlcik7Ci0gICAgICAgIGNhc2Ug
SW50NjQ6Ci0gICAgICAgICAgICByZXR1cm4gY291bGRPdmVyZmxvd0FkZDxpbnQ2NF90PihvdGhl
cik7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgYm9vbCBjb3VsZE92ZXJm
bG93U3ViKGNvbnN0IEludFJhbmdlJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBkaWZm
ZXJlbmNlT3ZlcmZsb3dzPFQ+KG1fbWluLCBvdGhlci5tX21pbikKLSAgICAgICAgICAgIHx8IGRp
ZmZlcmVuY2VPdmVyZmxvd3M8VD4obV9taW4sIG90aGVyLm1fbWF4KQotICAgICAgICAgICAgfHwg
ZGlmZmVyZW5jZU92ZXJmbG93czxUPihtX21heCwgb3RoZXIubV9taW4pCi0gICAgICAgICAgICB8
fCBkaWZmZXJlbmNlT3ZlcmZsb3dzPFQ+KG1fbWF4LCBvdGhlci5tX21heCk7Ci0gICAgfQotCi0g
ICAgYm9vbCBjb3VsZE92ZXJmbG93U3ViKGNvbnN0IEludFJhbmdlJiBvdGhlciwgVHlwZSB0eXBl
KQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0g
ICAgICAgICAgICByZXR1cm4gY291bGRPdmVyZmxvd1N1YjxpbnQzMl90PihvdGhlcik7Ci0gICAg
ICAgIGNhc2UgSW50NjQ6Ci0gICAgICAgICAgICByZXR1cm4gY291bGRPdmVyZmxvd1N1YjxpbnQ2
NF90PihvdGhlcik7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgYm9vbCBj
b3VsZE92ZXJmbG93TXVsKGNvbnN0IEludFJhbmdlJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBwcm9kdWN0T3ZlcmZsb3dzPFQ+KG1fbWluLCBvdGhlci5tX21pbikKLSAgICAgICAgICAg
IHx8IHByb2R1Y3RPdmVyZmxvd3M8VD4obV9taW4sIG90aGVyLm1fbWF4KQotICAgICAgICAgICAg
fHwgcHJvZHVjdE92ZXJmbG93czxUPihtX21heCwgb3RoZXIubV9taW4pCi0gICAgICAgICAgICB8
fCBwcm9kdWN0T3ZlcmZsb3dzPFQ+KG1fbWF4LCBvdGhlci5tX21heCk7Ci0gICAgfQotCi0gICAg
Ym9vbCBjb3VsZE92ZXJmbG93TXVsKGNvbnN0IEludFJhbmdlJiBvdGhlciwgVHlwZSB0eXBlKQot
ICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgSW50MzI6Ci0gICAg
ICAgICAgICByZXR1cm4gY291bGRPdmVyZmxvd011bDxpbnQzMl90PihvdGhlcik7Ci0gICAgICAg
IGNhc2UgSW50NjQ6Ci0gICAgICAgICAgICByZXR1cm4gY291bGRPdmVyZmxvd011bDxpbnQ2NF90
PihvdGhlcik7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgSW50UmFuZ2Ug
c2hsKGludDMyX3Qgc2hpZnRBbW91bnQpCi0gICAgewotICAgICAgICBUIG5ld01pbiA9IHN0YXRp
Y19jYXN0PFQ+KG1fbWluKSA8PCBzdGF0aWNfY2FzdDxUPihzaGlmdEFtb3VudCk7Ci0gICAgICAg
IFQgbmV3TWF4ID0gc3RhdGljX2Nhc3Q8VD4obV9tYXgpIDw8IHN0YXRpY19jYXN0PFQ+KHNoaWZ0
QW1vdW50KTsKLQotICAgICAgICBpZiAoKG5ld01pbiA+PiBzaGlmdEFtb3VudCkgIT0gc3RhdGlj
X2Nhc3Q8VD4obV9taW4pKQotICAgICAgICAgICAgbmV3TWluID0gc3RkOjpudW1lcmljX2xpbWl0
czxUPjo6bWluKCk7Ci0gICAgICAgIGlmICgobmV3TWF4ID4+IHNoaWZ0QW1vdW50KSAhPSBzdGF0
aWNfY2FzdDxUPihtX21heCkpCi0gICAgICAgICAgICBuZXdNYXggPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPFQ+OjptYXgoKTsKLQotICAgICAgICByZXR1cm4gSW50UmFuZ2UobmV3TWluLCBuZXdNYXgp
OwotICAgIH0KLQotICAgIEludFJhbmdlIHNobChpbnQzMl90IHNoaWZ0QW1vdW50LCBUeXBlIHR5
cGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBJbnQzMjoK
LSAgICAgICAgICAgIHJldHVybiBzaGw8aW50MzJfdD4oc2hpZnRBbW91bnQpOwotICAgICAgICBj
YXNlIEludDY0OgotICAgICAgICAgICAgcmV0dXJuIHNobDxpbnQ2NF90PihzaGlmdEFtb3VudCk7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICAgICAgcmV0dXJuIEludFJhbmdlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIEludFJhbmdlIHNTaHIoaW50MzJfdCBzaGlm
dEFtb3VudCkKLSAgICB7Ci0gICAgICAgIFQgbmV3TWluID0gc3RhdGljX2Nhc3Q8VD4obV9taW4p
ID4+IHN0YXRpY19jYXN0PFQ+KHNoaWZ0QW1vdW50KTsKLSAgICAgICAgVCBuZXdNYXggPSBzdGF0
aWNfY2FzdDxUPihtX21heCkgPj4gc3RhdGljX2Nhc3Q8VD4oc2hpZnRBbW91bnQpOwotCi0gICAg
ICAgIHJldHVybiBJbnRSYW5nZShuZXdNaW4sIG5ld01heCk7Ci0gICAgfQotCi0gICAgSW50UmFu
Z2Ugc1NocihpbnQzMl90IHNoaWZ0QW1vdW50LCBUeXBlIHR5cGUpCi0gICAgewotICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAgICAgICAgIHJldHVybiBz
U2hyPGludDMyX3Q+KHNoaWZ0QW1vdW50KTsKLSAgICAgICAgY2FzZSBJbnQ2NDoKLSAgICAgICAg
ICAgIHJldHVybiBzU2hyPGludDY0X3Q+KHNoaWZ0QW1vdW50KTsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gSW50UmFuZ2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci0gICAgSW50UmFuZ2UgelNocihpbnQzMl90IHNoaWZ0QW1vdW50KQotICAgIHsKLSAg
ICAgICAgLy8gVGhpcyBpcyBhbiBhd2t3YXJkIGNvcm5lciBjYXNlIGZvciBhbGwgb2YgdGhlIG90
aGVyIGxvZ2ljLgotICAgICAgICBpZiAoIXNoaWZ0QW1vdW50KQotICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOwotCi0gICAgICAgIC8vIElmIHRoZSBpbnB1dCByYW5nZSBtYXkgYmUgbmVnYXRpdmUs
IHRoZW4gYWxsIHdlIGNhbiBzYXkgYWJvdXQgdGhlIG91dHB1dCByYW5nZSBpcyB0aGF0IGl0Ci0g
ICAgICAgIC8vIHdpbGwgYmUgbWFza2VkLiBUaGF0J3MgYmVjYXVzZSAtMSByaWdodCBzaGlmdGVk
IGp1c3QgcHJvZHVjZXMgdGhhdCBtYXNrLgotICAgICAgICBpZiAobV9taW4gPCAwKQotICAgICAg
ICAgICAgcmV0dXJuIHJhbmdlRm9yWlNocjxUPihzaGlmdEFtb3VudCk7Ci0KLSAgICAgICAgLy8g
SWYgdGhlIGlucHV0IHJhbmdlIGlzIG5vbi1uZWdhdGl2ZSwgdGhlbiB0aGlzIGp1c3QgYnJpbmdz
IHRoZSByYW5nZSBjbG9zZXIgdG8gemVyby4KLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6
Om1ha2VfdW5zaWduZWQ8VD46OnR5cGUgVW5zaWduZWRUOwotICAgICAgICBVbnNpZ25lZFQgbmV3
TWluID0gc3RhdGljX2Nhc3Q8VW5zaWduZWRUPihtX21pbikgPj4gc3RhdGljX2Nhc3Q8VW5zaWdu
ZWRUPihzaGlmdEFtb3VudCk7Ci0gICAgICAgIFVuc2lnbmVkVCBuZXdNYXggPSBzdGF0aWNfY2Fz
dDxVbnNpZ25lZFQ+KG1fbWF4KSA+PiBzdGF0aWNfY2FzdDxVbnNpZ25lZFQ+KHNoaWZ0QW1vdW50
KTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBJbnRSYW5nZShuZXdNaW4sIG5ld01heCk7Ci0g
ICAgfQotCi0gICAgSW50UmFuZ2UgelNocihpbnQzMl90IHNoaWZ0QW1vdW50LCBUeXBlIHR5cGUp
Ci0gICAgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBJbnQzMjoKLSAg
ICAgICAgICAgIHJldHVybiB6U2hyPGludDMyX3Q+KHNoaWZ0QW1vdW50KTsKLSAgICAgICAgY2Fz
ZSBJbnQ2NDoKLSAgICAgICAgICAgIHJldHVybiB6U2hyPGludDY0X3Q+KHNoaWZ0QW1vdW50KTsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgICAgICByZXR1cm4gSW50UmFuZ2UoKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgSW50UmFuZ2UgYWRkKGNvbnN0IEludFJhbmdl
JiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmIChjb3VsZE92ZXJmbG93QWRkPFQ+KG90aGVyKSkK
LSAgICAgICAgICAgIHJldHVybiB0b3A8VD4oKTsKLSAgICAgICAgcmV0dXJuIEludFJhbmdlKG1f
bWluICsgb3RoZXIubV9taW4sIG1fbWF4ICsgb3RoZXIubV9tYXgpOwotICAgIH0KLQotICAgIElu
dFJhbmdlIGFkZChjb25zdCBJbnRSYW5nZSYgb3RoZXIsIFR5cGUgdHlwZSkKLSAgICB7Ci0gICAg
ICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEludDMyOgotICAgICAgICAgICAgcmV0
dXJuIGFkZDxpbnQzMl90PihvdGhlcik7Ci0gICAgICAgIGNhc2UgSW50NjQ6Ci0gICAgICAgICAg
ICByZXR1cm4gYWRkPGludDY0X3Q+KG90aGVyKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gSW50
UmFuZ2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0g
ICAgSW50UmFuZ2Ugc3ViKGNvbnN0IEludFJhbmdlJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlm
IChjb3VsZE92ZXJmbG93U3ViPFQ+KG90aGVyKSkKLSAgICAgICAgICAgIHJldHVybiB0b3A8VD4o
KTsKLSAgICAgICAgcmV0dXJuIEludFJhbmdlKG1fbWluIC0gb3RoZXIubV9tYXgsIG1fbWF4IC0g
b3RoZXIubV9taW4pOwotICAgIH0KLQotICAgIEludFJhbmdlIHN1Yihjb25zdCBJbnRSYW5nZSYg
b3RoZXIsIFR5cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAg
ICBjYXNlIEludDMyOgotICAgICAgICAgICAgcmV0dXJuIHN1YjxpbnQzMl90PihvdGhlcik7Ci0g
ICAgICAgIGNhc2UgSW50NjQ6Ci0gICAgICAgICAgICByZXR1cm4gc3ViPGludDY0X3Q+KG90aGVy
KTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gSW50UmFuZ2UoKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgSW50UmFuZ2UgbXVsKGNvbnN0IEludFJh
bmdlJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmIChjb3VsZE92ZXJmbG93TXVsPFQ+KG90aGVy
KSkKLSAgICAgICAgICAgIHJldHVybiB0b3A8VD4oKTsKLSAgICAgICAgcmV0dXJuIEludFJhbmdl
KAotICAgICAgICAgICAgc3RkOjptaW4oCi0gICAgICAgICAgICAgICAgc3RkOjptaW4obV9taW4g
KiBvdGhlci5tX21pbiwgbV9taW4gKiBvdGhlci5tX21heCksCi0gICAgICAgICAgICAgICAgc3Rk
OjptaW4obV9tYXggKiBvdGhlci5tX21pbiwgbV9tYXggKiBvdGhlci5tX21heCkpLAotICAgICAg
ICAgICAgc3RkOjptYXgoCi0gICAgICAgICAgICAgICAgc3RkOjptYXgobV9taW4gKiBvdGhlci5t
X21pbiwgbV9taW4gKiBvdGhlci5tX21heCksCi0gICAgICAgICAgICAgICAgc3RkOjptYXgobV9t
YXggKiBvdGhlci5tX21pbiwgbV9tYXggKiBvdGhlci5tX21heCkpKTsKLSAgICB9Ci0KLSAgICBJ
bnRSYW5nZSBtdWwoY29uc3QgSW50UmFuZ2UmIG90aGVyLCBUeXBlIHR5cGUpCi0gICAgewotICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBJbnQzMjoKLSAgICAgICAgICAgIHJl
dHVybiBtdWw8aW50MzJfdD4ob3RoZXIpOwotICAgICAgICBjYXNlIEludDY0OgotICAgICAgICAg
ICAgcmV0dXJuIG11bDxpbnQ2NF90PihvdGhlcik7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIElu
dFJhbmdlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW50NjRfdCBtX21p
biB7IDAgfTsKLSAgICBpbnQ2NF90IG1fbWF4IHsgMCB9OwotfTsKLQogY2xhc3MgUmVkdWNlU3Ry
ZW5ndGggewogcHVibGljOgogICAgIFJlZHVjZVN0cmVuZ3RoKFByb2NlZHVyZSYgcHJvYykKQEAg
LTQyMSw3ICsxMTksNyBAQAogICAgICAgICAgICAgICAgIGRhdGFMb2coIkIzIGFmdGVyIGl0ZXJh
dGlvbiAjIiwgaW5kZXggLSAxLCAiIG9mIHJlZHVjZVN0cmVuZ3RoOlxuIik7CiAgICAgICAgICAg
ICAgICAgZGF0YUxvZyhtX3Byb2MpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAg
ICAgICAgICAgIHNpbXBsaWZ5Q0ZHKCk7CiAKICAgICAgICAgICAgIGlmIChtX2NoYW5nZWRDRkcp
IHsKQEAgLTQ0Miw5ICsxNDAsOSBAQAogICAgICAgICAgICAgLy8ga2VlcCBAdGhpbmcuIFRoYXQn
cyBiZXR0ZXIsIHNpbmNlIHdlIHVzdWFsbHkgd2FudCB0aGluZ3MgdG8gc3RheSB3aGVyZXZlciB0
aGUgY2xpZW50CiAgICAgICAgICAgICAvLyBwdXQgdGhlbS4gV2UncmUgbm90IGFjdHVhbGx5IHNt
YXJ0IGVub3VnaCB0byBtb3ZlIHRoaW5ncyBhcm91bmQgYXQgcmFuZG9tLgogICAgICAgICAgICAg
bV9jaGFuZ2VkIHw9IGVsaW1pbmF0ZURlYWRDb2RlSW1wbChtX3Byb2MpOwotICAgICAgICAgICAg
CisKICAgICAgICAgICAgIHNpbXBsaWZ5U1NBKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAg
ICAgaWYgKG1fcHJvYy5vcHRMZXZlbCgpID49IDIpIHsKICAgICAgICAgICAgICAgICBtX3Byb2Mu
cmVzZXRWYWx1ZU93bmVycygpOwogICAgICAgICAgICAgICAgIG1fZG9taW5hdG9ycyA9ICZtX3By
b2MuZG9taW5hdG9ycygpOyAvLyBSZWNvbXB1dGUgaWYgbmVjZXNzYXJ5LgpAQCAtNDUxLDkgKzE0
OSwxMCBAQAogICAgICAgICAgICAgICAgIG1fcHVyZUNTRS5jbGVhcigpOwogICAgICAgICAgICAg
fQogCisgICAgICAgICAgICBQZWVwaG9sZU9wdGltaXplciBwZWVwaG9sZShtX3Byb2MsIG1faW5z
ZXJ0aW9uU2V0KTsKICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2Mu
YmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgICAgICAgICAgbV9ibG9jayA9IGJsb2NrOwot
ICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgZm9yIChtX2luZGV4ID0gMDsgbV9p
bmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbV9pbmRleCkgewogICAgICAgICAgICAgICAgICAgICBp
ZiAoQjNSZWR1Y2VTdHJlbmd0aEludGVybmFsOjp2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKApAQCAtNDYyLDcgKzE2MSw4IEBACiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZSA9IG1fYmxvY2stPmF0KG1faW5kZXgpOwog
ICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5wZXJmb3JtU3Vic3RpdHV0aW9uKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHJlZHVjZVZhbHVlU3RyZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAg
ICAgcGVlcGhvbGUuc2V0SW5kZXgobV9pbmRleCk7CisgICAgICAgICAgICAgICAgICAgIHJlZHVj
ZVZhbHVlU3RyZW5ndGgocGVlcGhvbGUpOwogICAgICAgICAgICAgICAgICAgICBpZiAobV9wcm9j
Lm9wdExldmVsKCkgPj0gMikKICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VJZlJlZHVu
ZGFudCgpOwogICAgICAgICAgICAgICAgIH0KQEAgLTQ3MSwxNTU1ICsxNzEsNDUgQEAKIAogICAg
ICAgICAgICAgbV9jaGFuZ2VkQ0ZHIHw9IG1fYmxvY2tJbnNlcnRpb25TZXQuZXhlY3V0ZSgpOwog
ICAgICAgICAgICAgaGFuZGxlQ2hhbmdlZENGR0lmTmVjZXNzYXJ5KCk7Ci0gICAgICAgICAgICAK
KwogICAgICAgICAgICAgcmVzdWx0IHw9IG1fY2hhbmdlZDsKICAgICAgICAgfSB3aGlsZSAobV9j
aGFuZ2VkICYmIG1fcHJvYy5vcHRMZXZlbCgpID49IDIpOwotICAgICAgICAKKwogICAgICAgICBp
ZiAobV9wcm9jLm9wdExldmVsKCkgPCAyKSB7CiAgICAgICAgICAgICBtX2NoYW5nZWRDRkcgPSBm
YWxzZTsKICAgICAgICAgICAgIHNpbXBsaWZ5Q0ZHKCk7CiAgICAgICAgICAgICBoYW5kbGVDaGFu
Z2VkQ0ZHSWZOZWNlc3NhcnkoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KLSAgICAKKwogcHJpdmF0ZToKLSAgICB2b2lkIHJlZHVjZVZhbHVl
U3RyZW5ndGgoKQorICAgIHZvaWQgcmVkdWNlVmFsdWVTdHJlbmd0aChQZWVwaG9sZU9wdGltaXpl
ciYgcGVlcGhvbGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7
Ci0gICAgICAgIGNhc2UgT3BhcXVlOgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBPcGFxdWUo
T3BhcXVlKHZhbHVlKSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogT3BhcXVlKHZhbHVlKQot
ICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBPcGFxdWUpIHsK
LSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBDQ2Fs
bDoKKyAgICAgICAgICAgIG1fY2hhbmdlZCB8PSBwZWVwaG9sZS50cnlTaW1wbGlmeUNDYWxsKG1f
dmFsdWUtPmFzPENDYWxsVmFsdWU+KCkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBBZGQ6Ci0gICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2Rl
KCkgPT0gQWRkICYmIG1fdmFsdWUtPmlzSW50ZWdlcigpKSB7Ci0gICAgICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBBZGQoQWRkKHZhbHVlLCBjb25zdGFudDEpLCBjb25zdGFudDIpCi0gICAgICAg
ICAgICAgICAgLy8gSW50byB0aGlzOiBBZGQodmFsdWUsIGNvbnN0YW50MSArIGNvbnN0YW50MikK
LSAgICAgICAgICAgICAgICBWYWx1ZSogbmV3U3VtID0gbV92YWx1ZS0+Y2hpbGQoMSktPmFkZENv
bnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpKTsKLSAgICAgICAgICAg
ICAgICBpZiAobmV3U3VtKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydFZhbHVlKG1faW5kZXgsIG5ld1N1bSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWUt
PmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAg
ICAgICBtX3ZhbHVlLT5jaGlsZCgxKSA9IG5ld1N1bTsKLSAgICAgICAgICAgICAgICAgICAgbV9j
aGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQWRk
KEFkZCh2YWx1ZSwgY29uc3RhbnQpLCBvdGhlclZhbHVlKQotICAgICAgICAgICAgICAgIC8vIElu
dG8gdGhpczogQWRkKEFkZCh2YWx1ZSwgb3RoZXJWYWx1ZSksIGNvbnN0YW50KQotICAgICAgICAg
ICAgICAgIGlmICghbV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpICYmIG1fdmFsdWUtPmNoaWxk
KDApLT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgVmFsdWUqIHZh
bHVlID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgICAgICBW
YWx1ZSogY29uc3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSk7Ci0gICAgICAgICAg
ICAgICAgICAgIFZhbHVlKiBvdGhlclZhbHVlID0gbV92YWx1ZS0+Y2hpbGQoMSk7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIFRoaXMgY291bGQgY3JlYXRlIGR1cGxpY2F0ZSBjb2RlIGlmIEFkZCh2
YWx1ZSwgY29uc3RhbnQpIGlzIHVzZWQgZWxzZXdoZXJlLgotICAgICAgICAgICAgICAgICAgICAv
LyBIb3dldmVyLCB3ZSBhbHJlYWR5IG1vZGVsIGFkZGluZyBhIGNvbnN0YW50IGFzIGlmIGl0IHdh
cyBmcmVlIGluIG90aGVyIHBsYWNlcwotICAgICAgICAgICAgICAgICAgICAvLyBzbyBsZXQncyBq
dXN0IHJvbGwgd2l0aCBpdC4gVGhlIGFsdGVybmF0aXZlIHdvdWxkIG1lYW4gaGF2aW5nIHRvIGRv
IGdvb2QgdXNlCi0gICAgICAgICAgICAgICAgICAgIC8vIGNvdW50cywgd2hpY2ggcmVkdWNlU3Ry
ZW5ndGgoKSBjdXJyZW50bHkgZG9lc24ndCBoYXZlLgotICAgICAgICAgICAgICAgICAgICBtX3Zh
bHVlLT5jaGlsZCgwKSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIEFkZCwg
bV92YWx1ZS0+b3JpZ2luKCksIHZhbHVlLCBvdGhlclZhbHVlKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV92YWx1ZS0+Y2hpbGQoMSkgPSBjb25zdGFudDsKLSAgICAgICAgICAgICAgICAgICAgbV9j
aGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBUdXJuIHRo
aXM6IEFkZChvdGhlclZhbHVlLCBBZGQodmFsdWUsIGNvbnN0YW50KSkKLSAgICAgICAgICAgIC8v
IEludG8gdGhpczogQWRkKEFkZCh2YWx1ZSwgb3RoZXJWYWx1ZSksIGNvbnN0YW50KQotICAgICAg
ICAgICAgaWYgKG1fdmFsdWUtPmlzSW50ZWdlcigpCi0gICAgICAgICAgICAgICAgJiYgIW1fdmFs
dWUtPmNoaWxkKDApLT5oYXNJbnQoKQotICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxk
KDEpLT5vcGNvZGUoKSA9PSBBZGQKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgx
KS0+Y2hpbGQoMSktPmhhc0ludCgpKSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0g
bV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIFZhbHVlKiBjb25z
dGFudCA9IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgxKTsKLSAgICAgICAgICAgICAgICBWYWx1
ZSogb3RoZXJWYWx1ZSA9IG1fdmFsdWUtPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIC8vIFRo
aXMgY3JlYXRlcyBhIGR1cGxpY2F0ZSBhZGQuIFRoYXQncyBkYW5nZXJvdXMgYnV0IHByb2JhYmx5
IGZpbmUsIHNlZSBhYm92ZS4KLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9Ci0g
ICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtX2luZGV4LCBBZGQsIG1fdmFsdWUtPm9yaWdpbigpLCB2YWx1ZSwg
b3RoZXJWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMSkgPSBjb25zdGFu
dDsKLSAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBUdXJuIHRo
aXM6IEFkZChjb25zdGFudDEsIGNvbnN0YW50MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczog
Y29uc3RhbnQxICsgY29uc3RhbnQyCi0gICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50QWRk
ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmFkZENvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQo
MSkpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudEFkZCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8v
IFR1cm4gdGhpczogSW50ZWdlciBBZGQodmFsdWUsIHZhbHVlKQotICAgICAgICAgICAgLy8gSW50
byB0aGlzOiBTaGwodmFsdWUsIDEpCi0gICAgICAgICAgICAvLyBUaGlzIGlzIGEgdXNlZnVsIGNh
bm9uaWNhbGl6YXRpb24uIEl0J3Mgbm90IG1lYW50IHRvIGJlIGEgc3RyZW5ndGggcmVkdWN0aW9u
LgotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmlzSW50ZWdlcigpICYmIG1fdmFsdWUtPmNoaWxk
KDApID09IG1fdmFsdWUtPmNoaWxkKDEpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhO
ZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmFkZDxWYWx1ZT4oCi0gICAgICAg
ICAgICAgICAgICAgICAgICBTaGwsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgw
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDMy
VmFsdWU+KG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCAxKSkpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFkZCh2
YWx1ZSwgemVybykKLSAgICAgICAgICAgIC8vIEludG8gYW4gSWRlbnRpdHkuCi0gICAgICAgICAg
ICAvLwotICAgICAgICAgICAgLy8gQWRkaXRpb24gaXMgc3VidGxlIHdpdGggZG91Ymxlcy4gWmVy
byBpcyBub3QgdGhlIG5ldXRyYWwgdmFsdWUsIG5lZ2F0aXZlIHplcm8gaXM6Ci0gICAgICAgICAg
ICAvLyAgICAwICsgMCA9IDAKLSAgICAgICAgICAgIC8vICAgIDAgKyAtMCA9IDAKLSAgICAgICAg
ICAgIC8vICAgIC0wICsgMCA9IDAKLSAgICAgICAgICAgIC8vICAgIC0wICsgLTAgPSAtMAotICAg
ICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludCgwKSB8fCBtX3ZhbHVlLT5jaGls
ZCgxKS0+aXNOZWdhdGl2ZVplcm8oKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRl
bnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+aXNJbnRlZ2VyKCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIgQWRkKHZhbHVlLCBOZWcob3RoZXJWYWx1
ZSkpCi0gICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTdWIodmFsdWUsIG90aGVyVmFsdWUp
Ci0gICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5vcGNvZGUoKSA9PSBOZWcp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KFN1YiwgbV92YWx1
ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQo
MCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIgQWRkKE5lZyh2YWx1ZSksIG90aGVy
VmFsdWUpCi0gICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTdWIob3RoZXJWYWx1ZSwgdmFs
dWUpCi0gICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBO
ZWcpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KFN1YiwgbV92
YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDEpLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hp
bGQoMCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIgQWRkKFN1YigwLCB2YWx1ZSks
IC0xKQotICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0WG9yKHZhbHVlLCAtMSkKLSAg
ICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFN1YgotICAg
ICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoLTEpCi0gICAgICAg
ICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKS0+aXNJbnQoMCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KEJpdFhvciwgbV92YWx1
ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSwgbV92YWx1ZS0+Y2hpbGQo
MSkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoaGFuZGxlTXVsRGlzdHJpYnV0aXZpdHkoKSkKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KKyAgICAgICAgY2FzZSBDaGVja0FkZDoK
KyAgICAgICAgICAgIG1fY2hhbmdlZCB8PSBwZWVwaG9sZS50cnlTaW1wbGlmeUNoZWNrQWRkKG1f
dmFsdWUtPmFzPENoZWNrVmFsdWU+KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAg
Y2FzZSBTdWI6Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFN1Yihjb25zdGFudDEsIGNvbnN0
YW50MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxIC0gY29uc3RhbnQyCi0g
ICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50U3ViID0gbV92YWx1ZS0+Y2hpbGQoMCktPnN1
YkNvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSB7Ci0gICAgICAgICAgICAgICAg
cmVwbGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudFN1Yik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5pc0ludGVnZXIoKSkg
ewotICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU3ViKHZhbHVlLCBjb25zdGFudCkKLSAg
ICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEFkZCh2YWx1ZSwgLWNvbnN0YW50KQotICAgICAg
ICAgICAgICAgIGlmIChWYWx1ZSogbmVnYXRlZENvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMSkt
Pm5lZ0NvbnN0YW50KG1fcHJvYykpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0VmFsdWUobV9pbmRleCwgbmVnYXRlZENvbnN0YW50KTsKLSAgICAgICAgICAgICAg
ICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgQWRk
LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCksIG5lZ2F0ZWRDb25zdGFudCk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFN1YigwLCB2YWx1ZSkKLSAg
ICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IE5lZyh2YWx1ZSkKLSAgICAgICAgICAgICAgICBp
ZiAobV92YWx1ZS0+Y2hpbGQoMCktPmlzSW50KDApKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
cGxhY2VXaXRoTmV3PFZhbHVlPihOZWcsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGls
ZCgxKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU3ViKHZhbHVlLCB2YWx1ZSkKLSAgICAgICAg
ICAgICAgICAvLyBJbnRvIHRoaXM6IDAKLSAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hp
bGQoMCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFj
ZVdpdGhOZXdWYWx1ZShtX3Byb2MuYWRkSW50Q29uc3RhbnQobV92YWx1ZSwgMCkpOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAvLyBUdXJuIHRoaXM6IFN1Yih2YWx1ZSwgTmVnKG90aGVyVmFsdWUpKQotICAgICAgICAgICAg
ICAgIC8vIEludG8gdGhpczogQWRkKHZhbHVlLCBvdGhlclZhbHVlKQotICAgICAgICAgICAgICAg
IGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+b3Bjb2RlKCkgPT0gTmVnKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPihBZGQsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3Zh
bHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDApKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYg
KGhhbmRsZU11bERpc3RyaWJ1dGl2aXR5KCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotCisgICAgICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgICAgICAgICBtX2No
YW5nZWQgfD0gcGVlcGhvbGUudHJ5U2ltcGxpZnlDaGVja1N1YihtX3ZhbHVlLT5hczxDaGVja1Zh
bHVlPigpKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
TmVnOgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBOZWcoY29uc3RhbnQpCi0gICAgICAgICAg
ICAvLyBJbnRvIHRoaXM6IC1jb25zdGFudAotICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFu
dCA9IG1fdmFsdWUtPmNoaWxkKDApLT5uZWdDb25zdGFudChtX3Byb2MpKSB7Ci0gICAgICAgICAg
ICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFR1cm4gdGhp
czogTmVnKE5lZyh2YWx1ZSkpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHZhbHVlCi0gICAg
ICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IE5lZykgewotICAgICAg
ICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDAp
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
aWYgKG1fdmFsdWUtPmlzSW50ZWdlcigpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHVybiB0aGlz
OiBJbnRlZ2VyIE5lZyhTdWIodmFsdWUsIG90aGVyVmFsdWUpKQotICAgICAgICAgICAgICAgIC8v
IEludG8gdGhpczogU3ViKG90aGVyVmFsdWUsIHZhbHVlKQotICAgICAgICAgICAgICAgIGlmICht
X3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU3ViKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJlcGxhY2VXaXRoTmV3PFZhbHVlPihTdWIsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5j
aGlsZCgwKS0+Y2hpbGQoMSksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IC8vIFR1cm4gdGhpczogSW50ZWdlciBOZWcoTXVsKHZhbHVlLCBjKSkKLSAgICAgICAgICAgICAg
ICAvLyBJbnRvIHRoaXM6IE11bCh2YWx1ZSwgLWMpLCBhcyBsb25nIGFzIC1jIGRvZXMgbm90IG92
ZXJmbG93Ci0gICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9
PSBNdWwgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5oYXNJbnQoKSkgewotICAgICAg
ICAgICAgICAgICAgICBpbnQ2NF90IGZhY3RvciA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgx
KS0+YXNJbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPnR5cGUoKSA9PSBJ
bnQzMiAmJiBmYWN0b3IgIT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdGYWN0b3IgPSBtX2luc2VydGlvblNl
dC5pbnNlcnQ8Q29uc3QzMlZhbHVlPihtX2luZGV4LCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQo
MSktPm9yaWdpbigpLCAtZmFjdG9yKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VX
aXRoTmV3PFZhbHVlPihNdWwsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMCksIG5ld0ZhY3Rvcik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV92
YWx1ZS0+dHlwZSgpID09IEludDY0ICYmIGZhY3RvciAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDY0X3Q+OjptaW4oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG5ld0ZhY3Rv
ciA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDY0VmFsdWU+KG1faW5kZXgsIG1fdmFsdWUt
PmNoaWxkKDApLT5jaGlsZCgxKS0+b3JpZ2luKCksIC1mYWN0b3IpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KE11bCwgbV92YWx1ZS0+b3JpZ2luKCksIG1f
dmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSwgbmV3RmFjdG9yKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotCisgICAgICAgIGNhc2Ug
Q2hlY2tNdWw6CisgICAgICAgICAgICBtX2NoYW5nZWQgfD0gcGVlcGhvbGUudHJ5U2ltcGxpZnlD
aGVja011bChtX3ZhbHVlLT5hczxDaGVja1ZhbHVlPigpKTsKICAgICAgICAgICAgIGJyZWFrOwog
Ci0gICAgICAgIGNhc2UgTXVsOgotICAgICAgICAgICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOwot
Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE11bChjb25zdGFudDEsIGNvbnN0YW50MikKLSAg
ICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxICogY29uc3RhbnQyCi0gICAgICAgICAg
ICBpZiAoVmFsdWUqIHZhbHVlID0gbV92YWx1ZS0+Y2hpbGQoMCktPm11bENvbnN0YW50KG1fcHJv
YywgbV92YWx1ZS0+Y2hpbGQoMSkpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdW
YWx1ZSh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKLSAgICAgICAgICAg
ICAgICBpbnQ2NF90IGZhY3RvciA9IG1fdmFsdWUtPmNoaWxkKDEpLT5hc0ludCgpOwotCi0gICAg
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBNdWwodmFsdWUsIDApCi0gICAgICAgICAgICAgICAg
Ly8gSW50byB0aGlzOiAwCi0gICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IGRv
IHRoaXMgZm9yIGRvdWJsZXMgYmVjYXVzZSB0aGF0J3Mgd3JvbmcuIEZvciBleGFtcGxlLCAtMSAq
IDAKLSAgICAgICAgICAgICAgICAvLyBhbmQgMSAqIDAgeWllbGQgZGlmZmVyZW50IHJlc3VsdHMu
Ci0gICAgICAgICAgICAgICAgaWYgKCFmYWN0b3IpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVw
bGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhp
czogTXVsKHZhbHVlLCAxKQotICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogdmFsdWUKLSAg
ICAgICAgICAgICAgICBpZiAoZmFjdG9yID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVw
bGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhp
czogTXVsKHZhbHVlLCAtMSkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IE5lZyh2YWx1
ZSkKLSAgICAgICAgICAgICAgICBpZiAoZmFjdG9yID09IC0xKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPihOZWcsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVl
LT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2
YWx1ZSwgY29uc3RhbnQpCi0gICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTaGwodmFsdWUs
IGxvZzIoY29uc3RhbnQpKQotICAgICAgICAgICAgICAgIGlmIChoYXNPbmVCaXRTZXQoZmFjdG9y
KSkgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaGlmdEFtb3VudCA9IFdURjo6ZmFz
dExvZzIoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGZhY3RvcikpOwotICAgICAgICAgICAgICAgICAg
ICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmFk
ZDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hsLCBtX3ZhbHVlLT5vcmln
aW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCBzaGlmdEFtb3VudCkpKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fSBlbHNlIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzRG91YmxlKCkpIHsKLSAgICAgICAgICAg
ICAgICBkb3VibGUgZmFjdG9yID0gbV92YWx1ZS0+Y2hpbGQoMSktPmFzRG91YmxlKCk7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2YWx1ZSwgMSkKLSAgICAgICAgICAgICAg
ICAvLyBJbnRvIHRoaXM6IHZhbHVlCi0gICAgICAgICAgICAgICAgaWYgKGZhY3RvciA9PSAxKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQo
MCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5pc0ludGVnZXIoKSkgewotICAg
ICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBNdWwodmFsdWUsIE5lZyhvdGhlclZh
bHVlKSkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IE5lZyhNdWwodmFsdWUsIG90aGVy
VmFsdWUpKQotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+b3Bjb2RlKCkg
PT0gTmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdNdWwgPSBtX2luc2VydGlv
blNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIE11bCwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFs
dWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAg
ICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oTmVnLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbmV3
TXVsKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBNdWwoTmVnKHZhbHVlKSwgb3RoZXJW
YWx1ZSkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IE5lZyhNdWwodmFsdWUsIHZhbHVl
MikpCi0gICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBO
ZWcpIHsKLSAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG5ld011bCA9IG1faW5zZXJ0aW9uU2V0
Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgTXVsLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+
Y2hpbGQoMCktPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPihOZWcsIG1fdmFsdWUtPm9yaWdpbigpLCBuZXdNdWwp
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRGl2OgotICAgICAg
ICAgICAgLy8gVHVybiB0aGlzOiBEaXYoY29uc3RhbnQxLCBjb25zdGFudDIpCi0gICAgICAgICAg
ICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50MSAvIGNvbnN0YW50MgotICAgICAgICAgICAgLy8gTm90
ZSB0aGF0IHRoaXMgdXNlcyBEaXY8Q2hpbGw+IHNlbWFudGljcy4gVGhhdCdzIGZpbmUsIGJlY2F1
c2UgdGhlIHJ1bGVzIGZvciBEaXYKLSAgICAgICAgICAgIC8vIGFyZSBzdHJpY3RseSB3ZWFrZXI6
IGl0IGhhcyBjb3JuZXIgY2FzZXMgd2hlcmUgaXQncyBhbGxvd2VkIHRvIGRvIGFueXRoaW5nIGl0
Ci0gICAgICAgICAgICAvLyBsaWtlcy4KLSAgICAgICAgICAgIGlmIChyZXBsYWNlV2l0aE5ld1Zh
bHVlKG1fdmFsdWUtPmNoaWxkKDApLT5kaXZDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxk
KDEpKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmIChtX3ZhbHVl
LT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fdmFsdWUt
PmNoaWxkKDEpLT5hc0ludCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAtMToKLSAgICAgICAg
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBEaXYodmFsdWUsIC0xKQotICAgICAgICAgICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IE5lZyh2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFj
ZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcHJvYy5hZGQ8VmFsdWU+
KE5lZywgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAg
ICAgICAgICAvLyBUdXJuIHRoaXM6IERpdih2YWx1ZSwgMCkKLSAgICAgICAgICAgICAgICAgICAg
Ly8gSW50byB0aGlzOiAwCi0gICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBkbyB0aGlzIGJl
Y2F1c2UgaXQncyBwcmVjaXNlbHkgY29ycmVjdCBmb3IgQ2hpbGxEaXYgYW5kIGZvciBEaXYgd2UK
LSAgICAgICAgICAgICAgICAgICAgLy8gYXJlIGFsbG93ZWQgdG8gZG8gd2hhdGV2ZXIgd2Ugd2Fu
dC4KLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGls
ZCgxKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2Fz
ZSAxOgotICAgICAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IERpdih2YWx1ZSwgMSkKLSAg
ICAgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZQotICAgICAgICAgICAgICAgICAg
ICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
ICAgICAvLyBQZXJmb3JtIHN1cGVyIGNvbXByZWhlbnNpdmUgc3RyZW5ndGggcmVkdWN0aW9uIG9m
IGRpdmlzaW9uLiBDdXJyZW50bHkgd2UKLSAgICAgICAgICAgICAgICAgICAgLy8gb25seSBkbyB0
aGlzIGZvciAzMi1iaXQgZGl2aXNpb25zLCBzaW5jZSB3ZSBuZWVkIGEgaGlnaCBtdWx0aXBseQot
ICAgICAgICAgICAgICAgICAgICAvLyBvcGVyYXRpb24uIFdlIGVtdWxhdGUgaXQgdXNpbmcgNjQt
Yml0IG11bHRpcGx5LiBXZSBjYW4ndCBlbXVsYXRlIDY0LWJpdAotICAgICAgICAgICAgICAgICAg
ICAvLyBoaWdoIG11bHRpcGx5IHdpdGggYSAxMjgtYml0IG11bHRpcGx5IGJlY2F1c2Ugd2UgZG9u
J3QgaGF2ZSBhIDEyOC1iaXQKLSAgICAgICAgICAgICAgICAgICAgLy8gbXVsdGlwbHkuIFdlIGNv
dWxkIGRvIGl0IHdpdGggYSBwYXRjaHBvaW50IGlmIHdlIGNhcmVkIGJhZGx5IGVub3VnaC4KLQot
ICAgICAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+dHlwZSgpICE9IEludDMyKQotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBpZiAobV9wcm9jLm9wdExldmVsKCkgPCAyKQotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBkaXZpc29yID0gbV92
YWx1ZS0+Y2hpbGQoMSktPmFzSW50MzIoKTsKLSAgICAgICAgICAgICAgICAgICAgRGl2aXNpb25N
YWdpYzxpbnQzMl90PiBtYWdpYyA9IGNvbXB1dGVEaXZpc2lvbk1hZ2ljKGRpdmlzb3IpOwotCi0g
ICAgICAgICAgICAgICAgICAgIC8vIFBlcmZvcm0gdGhlICJoaWdoIiBtdWx0aXBsaWNhdGlvbi4g
V2UgZG8gaXQganVzdCB0byBnZXQgdGhlIGhpZ2ggYml0cy4KLSAgICAgICAgICAgICAgICAgICAg
Ly8gVGhpcyBpcyBzb3J0IG9mIGxpa2UgbXVsdGlwbHlpbmcgYnkgdGhlIHJlY2lwcm9jYWwsIGp1
c3QgbW9yZSBnbmFybHkuIEl0J3MKLSAgICAgICAgICAgICAgICAgICAgLy8gZnJvbSBIYWNrZXIn
cyBEZWxpZ2h0IGFuZCBJIGRvbid0IGNsYWltIHRvIHVuZGVyc3RhbmQgaXQuCi0gICAgICAgICAg
ICAgICAgICAgIFZhbHVlKiBtYWdpY1F1b3RpZW50ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZh
bHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIFRydW5jLCBtX3ZhbHVlLT5v
cmlnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxW
YWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgWlNociwgbV92YWx1
ZS0+b3JpZ2luKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0PFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwg
TXVsLCBtX3ZhbHVlLT5vcmlnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW5kZXgsIFNFeHQzMiwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNo
aWxkKDApKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0PENvbnN0NjRWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbWFnaWMubWFnaWNNdWx0aXBsaWVyKSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJW
YWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIG1fdmFsdWUt
Pm9yaWdpbigpLCAzMikpKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoZGl2aXNvciA+IDAg
JiYgbWFnaWMubWFnaWNNdWx0aXBsaWVyIDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
bWFnaWNRdW90aWVudCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbmRleCwgQWRkLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbWFnaWNR
dW90aWVudCwgbV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChkaXZpc29yIDwgMCAmJiBtYWdpYy5tYWdpY011bHRpcGxpZXIg
PiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYWdpY1F1b3RpZW50ID0gbV9pbnNlcnRp
b25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4
LCBTdWIsIG1fdmFsdWUtPm9yaWdpbigpLCBtYWdpY1F1b3RpZW50LCBtX3ZhbHVlLT5jaGlsZCgw
KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1hZ2lj
LnNoaWZ0ID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWFnaWNRdW90aWVudCA9IG1f
aW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9pbmRleCwgU1NociwgbV92YWx1ZS0+b3JpZ2luKCksIG1hZ2ljUXVvdGllbnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4o
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIG1fdmFsdWUtPm9yaWdp
bigpLCBtYWdpYy5zaGlmdCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
aW5kZXgsIEFkZCwgbV92YWx1ZS0+b3JpZ2luKCksIG1hZ2ljUXVvdGllbnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgWlNociwgbV92YWx1ZS0+b3JpZ2luKCks
IG1hZ2ljUXVvdGllbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydDxDb25zdDMyVmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIDMxKSkpKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBVRGl2
OgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBVRGl2KGNvbnN0YW50MSwgY29uc3RhbnQyKQot
ICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgLyBjb25zdGFudDIKLSAgICAgICAg
ICAgIGlmIChyZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNoaWxkKDApLT51RGl2Q29uc3Rh
bnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpKSB7Ci0gICAgICAg
ICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQoKSkgewotICAgICAgICAg
ICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBVRGl2KHZh
bHVlLCAwKQotICAgICAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IDAKLSAgICAgICAgICAg
ICAgICAgICAgLy8gV2UgY2FuIGRvIHdoYXRldmVyIHdlIHdhbnQgaGVyZSBzbyB3ZSBtaWdodCBh
cyB3ZWxsIGRvIHRoZSBjaGlsbCB0aGluZywKLSAgICAgICAgICAgICAgICAgICAgLy8gaW4gY2Fz
ZSB3ZSBhZGQgY2hpbGwgdmVyc2lvbnMgb2YgVURpdiBpbiB0aGUgZnV0dXJlLgotICAgICAgICAg
ICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogVURpdih2YWx1ZSwgMSkKLSAgICAgICAgICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZQotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0
aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBkbyBjb21wcmVoZW5zaXZlIHN0cmVuZ3RoIHJlZHVjdGlvbiBmb3IgdW5zaWdu
ZWQgbnVtYmVycy4gTGlrZWx5LAotICAgICAgICAgICAgICAgICAgICAvLyB3ZSB3aWxsIGp1c3Qg
d2FudCBjb3B5IHdoYXQgbGx2bSBkb2VzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY0ODA5Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2Ug
TW9kOgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBNb2QoY29uc3RhbnQxLCBjb25zdGFudDIp
Ci0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50MSAvIGNvbnN0YW50MgotICAgICAg
ICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgdXNlcyBNb2Q8Q2hpbGw+IHNlbWFudGljcy4KLSAgICAg
ICAgICAgIGlmIChyZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNoaWxkKDApLT5tb2RDb25z
dGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgICAgIC8vIE1vZHVsbyBieSBjb25zdGFudCBpcyBtb3JlIGVmZmljaWVudCBp
ZiB3ZSB0dXJuIGl0IGludG8gRGl2LCBhbmQgdGhlbiBsZXQgRGl2IGdldAotICAgICAgICAgICAg
Ly8gb3B0aW1pemVkLgotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQo
KSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50KCkp
IHsKLSAgICAgICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAgICAgIC8vIFR1cm4g
dGhpczogTW9kKHZhbHVlLCAwKQotICAgICAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IDAK
LSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBjb3JyZWN0IGFjY29yZGluZyB0byBDaGls
bE1vZCBzZW1hbnRpY3MuCi0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHko
bV92YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3Byb2Mub3B0TGV2
ZWwoKSA8IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTW9kKE4sIEQpCi0gICAg
ICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogU3ViKE4sIE11bChEaXYoTiwgRCksIEQpKQot
ICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEg
c3BlZWQtdXAgYmVjYXVzZSB3ZSB1c2Ugb3VyIGV4aXN0aW5nIERpdiBvcHRpbWl6YXRpb25zLgot
ICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICAvLyBIZXJlJ3MgYW4g
ZWFzaWVyIHdheSB0byBsb29rIGF0IGl0OgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgTiAl
IEQgPSBOIC0gTiAvIEQgKiBECi0gICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAg
ICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IHdvcmsgZm9yIEQgPSAwIGFuZCBDaGls
bE1vZC4gVGhlIGV4cGVjdGVkIHJlc3VsdCBpcyAwLgotICAgICAgICAgICAgICAgICAgICAvLyBU
aGF0J3Mgd2h5IHdlIGhhdmUgYSBzcGVjaWFsLWNhc2UgYWJvdmUuCi0gICAgICAgICAgICAgICAg
ICAgIC8vICAgICBYICUgMCA9IFggLSBYIC8gMCAqIDAgPSBYICAgICAoc2hvdWxkIGJlIDApCi0g
ICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgZG9lcyB3
b3JrIGZvciB0aGUgRCA9IC0xIHNwZWNpYWwgY2FzZS4KLSAgICAgICAgICAgICAgICAgICAgLy8g
ICAgIC0yXjMxICUgLTEgPSAtMl4zMSAtIC0yXjMxIC8gLTEgKiAtMQotICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgICAgICA9IC0yXjMxIC0gLTJeMzEgKiAtMQotICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgICA9IC0yXjMxIC0gLTJeMzEKLSAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICAgICAgPSAwCi0KLSAgICAgICAgICAgICAgICAgICAgS2luZCBk
aXZLaW5kID0gRGl2OwotICAgICAgICAgICAgICAgICAgICBkaXZLaW5kLnNldElzQ2hpbGwobV92
YWx1ZS0+aXNDaGlsbCgpKTsKLQotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50
aXR5KAotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVl
PigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBTdWIsIG1fdmFsdWUtPm9y
aWdpbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4o
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIE11bCwgbV92YWx1ZS0+
b3JpZ2luKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2lu
ZGV4LCBkaXZLaW5kLCBtX3ZhbHVlLT5vcmlnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpKSkpOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgIGNhc2UgVU1vZDoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogVU1vZChjb25z
dGFudDEsIGNvbnN0YW50MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxIC8g
Y29uc3RhbnQyCi0gICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNoaWxk
KDApLT51TW9kQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpOwotICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyB3aGF0IHdlIGRvIGZvciBNb2Qgc2luY2UgdGhlIHNh
bWUgcHJpbmNpcGxlIGFwcGxpZXMgaGVyZS4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ4MDkKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgQml0QW5kOgotICAgICAgICAgICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOwot
Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZChjb25zdGFudDEsIGNvbnN0YW50MikK
LSAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxICYgY29uc3RhbnQyCi0gICAgICAg
ICAgICBpZiAoVmFsdWUqIGNvbnN0YW50Qml0QW5kID0gbV92YWx1ZS0+Y2hpbGQoMCktPmJpdEFu
ZENvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSB7Ci0gICAgICAgICAgICAgICAg
cmVwbGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudEJpdEFuZCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKEJp
dEFuZCh2YWx1ZSwgY29uc3RhbnQxKSwgY29uc3RhbnQyKQotICAgICAgICAgICAgLy8gSW50byB0
aGlzOiBCaXRBbmQodmFsdWUsIGNvbnN0YW50MSAmIGNvbnN0YW50MikuCi0gICAgICAgICAgICBp
ZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdEFuZCkgewotICAgICAgICAgICAg
ICAgIFZhbHVlKiBuZXdDb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDEpLT5iaXRBbmRDb25zdGFu
dChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAg
aWYgKG5ld0NvbnN0YW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydFZhbHVlKG1faW5kZXgsIG5ld0NvbnN0YW50KTsKLSAgICAgICAgICAgICAgICAgICAgbV92
YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gbmV3Q29uc3RhbnQ7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZCh2YWx1ZVgsIHZhbHVlWCkKLSAg
ICAgICAgICAgIC8vIEludG8gdGhpczogdmFsdWVYLgotICAgICAgICAgICAgaWYgKG1fdmFsdWUt
PmNoaWxkKDApID09IG1fdmFsdWUtPmNoaWxkKDEpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFj
ZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKHZhbHVl
LCB6ZXJvLWNvbnN0YW50KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiB6ZXJvLWNvbnN0YW50
LgotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludCgwKSkgewotICAgICAg
ICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRo
aXM6IEJpdEFuZCh2YWx1ZSwgYWxsLW9uZXMpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHZh
bHVlLgotICAgICAgICAgICAgaWYgKChtX3ZhbHVlLT50eXBlKCkgPT0gSW50NjQgJiYgbV92YWx1
ZS0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSkp
Ci0gICAgICAgICAgICAgICAgfHwgKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQzMiAmJiBtX3ZhbHVl
LT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkp
IHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDAp
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBCaXRBbmQoNjQtYml0IHZhbHVlLCAzMiBvbmVzKQotICAgICAgICAgICAg
Ly8gSW50byB0aGlzOiBaRXh0MzIoVHJ1bmMoNjQtYml0IHZhbHVlKSkKLSAgICAgICAgICAgIGlm
IChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQ2NCgweGZmZmZmZmZmbGx1KSkgewotICAgICAgICAg
ICAgICAgIFZhbHVlKiBuZXdWYWx1ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0g
ICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIFpFeHQzMiwgbV92YWx1ZS0+b3JpZ2luKCksCi0g
ICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwg
VHJ1bmMsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSkpOwotICAgICAgICAg
ICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobmV3VmFsdWUpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZChT
RXh0OCh2YWx1ZSksIG1hc2spIHdoZXJlIChtYXNrICYgMHhmZmZmZmYwMCkgPT0gMAotICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiBCaXRBbmQodmFsdWUsIG1hc2spCi0gICAgICAgICAgICBpZiAo
bV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFNFeHQ4ICYmIG1fdmFsdWUtPmNoaWxkKDEp
LT5oYXNJbnQzMigpCi0gICAgICAgICAgICAgICAgJiYgIShtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJ
bnQzMigpICYgMHhmZmZmZmYwMCkpIHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgw
KSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICBtX2NoYW5n
ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZChTRXh0MTYodmFsdWUpLCBtYXNrKSB3aGVyZSAo
bWFzayAmIDB4ZmZmZjAwMDApID09IDAKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0QW5k
KHZhbHVlLCBtYXNrKQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUo
KSA9PSBTRXh0MTYgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludDMyKCkKLSAgICAgICAgICAg
ICAgICAmJiAhKG1fdmFsdWUtPmNoaWxkKDEpLT5hc0ludDMyKCkgJiAweGZmZmYwMDAwKSkgewot
ICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNo
aWxkKDApOwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0
QW5kKFNFeHQzMih2YWx1ZSksIG1hc2spIHdoZXJlIChtYXNrICYgMHhmZmZmZmZmZjAwMDAwMDAw
KSA9PSAwCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdEFuZChaRXh0MzIodmFsdWUpLCBt
YXNrKQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBTRXh0
MzIgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludDMyKCkKLSAgICAgICAgICAgICAgICAmJiAh
KG1fdmFsdWUtPmNoaWxkKDEpLT5hc0ludDMyKCkgJiAweGZmZmZmZmZmMDAwMDAwMDBsbHUpKSB7
Ci0gICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX2luc2VydGlvblNldC5pbnNl
cnQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBaRXh0MzIsIG1fdmFsdWUt
Pm9yaWdpbigpLAotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQo
MCksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgbV9jaGFu
Z2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoT3AodmFsdWUsIGNvbnN0YW50MSksIGNvbnN0
YW50MikKLSAgICAgICAgICAgIC8vICAgICB3aGVyZSAhKGNvbnN0YW50MSAmIGNvbnN0YW50MikK
LSAgICAgICAgICAgIC8vICAgICAgIGFuZCBPcCBpcyBCaXRPciBvciBCaXRYb3IKLSAgICAgICAg
ICAgIC8vIGludG8gdGhpczogQml0QW5kKHZhbHVlLCBjb25zdGFudDIpCi0gICAgICAgICAgICBp
ZiAobV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpKSB7Ci0gICAgICAgICAgICAgICAgaW50NjRf
dCBjb25zdGFudDIgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQoKTsKLSAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSkgewotICAgICAgICAgICAgICAg
IGNhc2UgQml0T3I6Ci0gICAgICAgICAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhhc0ludCgpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAmJiAhKG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+YXNJbnQo
KSAmIGNvbnN0YW50MikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxk
KDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoQml0WG9yKHgxLCBhbGxPbmVzKSwgQml0WG9yKHgyLCBh
bGxPbmVzKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCaXRYb3IoQml0T3IoeDEsIHgyKSwg
YWxsT25lcykKLSAgICAgICAgICAgIC8vIEJ5IGFwcGx5aW5nIERlIE1vcmdhbiBsYXdzCi0gICAg
ICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdFhvcgotICAgICAg
ICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5vcGNvZGUoKSA9PSBCaXRYb3IKLSAgICAg
ICAgICAgICAgICAmJiAoKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQ2NAotICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVy
aWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBt
X3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDY0X3Q+OjptYXgoKSkpCi0gICAgICAgICAgICAgICAgICAgIHx8IChtX3ZhbHVlLT50eXBlKCkg
PT0gSW50MzIKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5j
aGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpLT5pc0lu
dChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpKSkpIHsKLSAgICAgICAgICAg
ICAgICBWYWx1ZSogYml0T3IgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgs
IEJpdE9yLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLCBt
X3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRo
TmV3PFZhbHVlPihCaXRYb3IsIG1fdmFsdWUtPm9yaWdpbigpLCBiaXRPciwgbV92YWx1ZS0+Y2hp
bGQoMSktPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoQml0WG9yKHgsIGFsbE9uZXMpLCBj
KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCaXRYb3IoQml0T3IoeCwgfmMpLCBhbGxPbmVz
KQotICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHZhcmlhdGlvbiBvbiB0aGUgcHJldmlvdXMgb3B0
aW1pemF0aW9uLCB0cmVhdGluZyBjIGFzIGlmIGl0IHdlcmUgQml0WG9yKH5jLCBhbGxPbmVzKQot
ICAgICAgICAgICAgLy8gSXQgZG9lcyBub3QgcmVkdWNlIHRoZSBudW1iZXIgb2Ygb3BlcmF0aW9u
cywgYnV0IHByb3ZpZGVzIHNvbWUgbm9ybWFsaXphdGlvbiAod2UgdHJ5IHRvIGdldCBCaXRYb3Ig
YnkgYWxsT25lcyBhdCB0aGUgb3V0ZXJtb3N0IHBvaW50KSwgYW5kIHNvbWUgY2hhbmNlIHRvIGZs
b2F0IFhvcnMgdG8gYSBwbGFjZSB3aGVyZSB0aGV5IG1pZ2h0IGdldCBlbGltaW5hdGVkLgotICAg
ICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXRYb3IKLSAgICAg
ICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkKLSAgICAgICAgICAgICAg
ICAmJiAoKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQ2NAotICAgICAgICAgICAgICAgICAgICAgICAg
JiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQ2NF90Pjo6bWF4KCkpKQotICAgICAgICAgICAgICAgICAgICB8fCAobV92YWx1ZS0+dHlw
ZSgpID09IEludDMyCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgw
KS0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkp
KSkgewotICAgICAgICAgICAgICAgIFZhbHVlKiBiaXRPciA9IG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dDxWYWx1ZT4obV9pbmRleCwgQml0T3IsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGls
ZCgwKS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpLT5iaXRYb3JDb25zdGFudChtX3Byb2Ms
IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSkpOwotICAgICAgICAgICAgICAgIHJlcGxhY2VX
aXRoTmV3PFZhbHVlPihCaXRYb3IsIG1fdmFsdWUtPm9yaWdpbigpLCBiaXRPciwgbV92YWx1ZS0+
Y2hpbGQoMCktPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBCaXRPcjoKLSAgICAgICAg
ICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBC
aXRPcihjb25zdGFudDEsIGNvbnN0YW50MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogY29u
c3RhbnQxIHwgY29uc3RhbnQyCi0gICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50Qml0T3Ig
PSBtX3ZhbHVlLT5jaGlsZCgwKS0+Yml0T3JDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxk
KDEpKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnRCaXRP
cik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IC8vIFR1cm4gdGhpczogQml0T3IoQml0T3IodmFsdWUsIGNvbnN0YW50MSksIGNvbnN0YW50MikK
LSAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0T3IodmFsdWUsIGNvbnN0YW50MSAmIGNvbnN0
YW50MikuCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJp
dE9yKSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIG5ld0NvbnN0YW50ID0gbV92YWx1ZS0+Y2hp
bGQoMSktPmJpdE9yQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkp
OwotICAgICAgICAgICAgICAgIGlmIChuZXdDb25zdGFudCkgewotICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnRWYWx1ZShtX2luZGV4LCBuZXdDb25zdGFudCk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNo
aWxkKDApOwotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgxKSA9IG5ld0NvbnN0
YW50OwotICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRPcih2
YWx1ZVgsIHZhbHVlWCkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogdmFsdWVYLgotICAgICAg
ICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApID09IG1fdmFsdWUtPmNoaWxkKDEpKSB7Ci0gICAg
ICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4g
dGhpczogQml0T3IodmFsdWUsIHplcm8tY29uc3RhbnQpCi0gICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IHZhbHVlLgotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludCgwKSkg
ewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAv
LyBUdXJuIHRoaXM6IEJpdE9yKHZhbHVlLCBhbGwtb25lcykKLSAgICAgICAgICAgIC8vIEludG8g
dGhpczogYWxsLW9uZXMuCi0gICAgICAgICAgICBpZiAoKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQ2
NCAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRf
dD46Om1heCgpKSkKLSAgICAgICAgICAgICAgICB8fCAobV92YWx1ZS0+dHlwZSgpID09IEludDMy
ICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90
Pjo6bWF4KCkpKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1
ZS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdE9yKEJpdFhvcih4MSwgYWxsT25lcyksIEJpdFhv
cih4MiwgYWxsT25lcykKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0WG9yKEJpdEFuZCh4
MSwgeDIpLCBhbGxPbmVzKQotICAgICAgICAgICAgLy8gQnkgYXBwbHlpbmcgRGUgTW9yZ2FuIGxh
d3MKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0WG9y
Ci0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPm9wY29kZSgpID09IEJpdFhv
cgotICAgICAgICAgICAgICAgICYmICgobV92YWx1ZS0+dHlwZSgpID09IEludDY0Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50KHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xp
bWl0czx1aW50NjRfdD46Om1heCgpKSkKLSAgICAgICAgICAgICAgICAgICAgfHwgKG1fdmFsdWUt
PnR5cGUoKSA9PSBJbnQzMgotICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hp
bGQoMCktPmNoaWxkKDEpLT5pc0ludChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQo
MSktPmlzSW50KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkpKSkgewotICAg
ICAgICAgICAgICAgIFZhbHVlKiBiaXRBbmQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+
KG1faW5kZXgsIEJpdEFuZCwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLT5j
aGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICBy
ZXBsYWNlV2l0aE5ldzxWYWx1ZT4oQml0WG9yLCBtX3ZhbHVlLT5vcmlnaW4oKSwgYml0QW5kLCBt
X3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdE9yKEJpdFhvcih4LCBh
bGxPbmVzKSwgYykKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0WG9yKEJpdEFuZCh4LCB+
YyksIGFsbE9uZXMpCi0gICAgICAgICAgICAvLyBUaGlzIGlzIGEgdmFyaWF0aW9uIG9uIHRoZSBw
cmV2aW91cyBvcHRpbWl6YXRpb24sIHRyZWF0aW5nIGMgYXMgaWYgaXQgd2VyZSBCaXRYb3IofmMs
IGFsbE9uZXMpCi0gICAgICAgICAgICAvLyBJdCBkb2VzIG5vdCByZWR1Y2UgdGhlIG51bWJlciBv
ZiBvcGVyYXRpb25zLCBidXQgcHJvdmlkZXMgc29tZSBub3JtYWxpemF0aW9uICh3ZSB0cnkgdG8g
Z2V0IEJpdFhvciBieSBhbGxPbmVzIGF0IHRoZSBvdXRlcm1vc3QgcG9pbnQpLCBhbmQgc29tZSBj
aGFuY2UgdG8gZmxvYXQgWG9ycyB0byBhIHBsYWNlIHdoZXJlIHRoZXkgbWlnaHQgZ2V0IGVsaW1p
bmF0ZWQuCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJp
dFhvcgotICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKQotICAg
ICAgICAgICAgICAgICYmICgobV92YWx1ZS0+dHlwZSgpID09IEludDY0Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50KHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKSkpCi0gICAgICAgICAgICAgICAgICAgIHx8ICht
X3ZhbHVlLT50eXBlKCkgPT0gSW50MzIKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIG1fdmFs
dWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJf
dD46Om1heCgpKSkpKSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIGJpdEFuZCA9IG1faW5zZXJ0
aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgQml0QW5kLCBtX3ZhbHVlLT5vcmlnaW4oKSwg
bV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKS0+Yml0WG9yQ29u
c3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkpKTsKLSAgICAgICAgICAg
ICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oQml0WG9yLCBtX3ZhbHVlLT5vcmlnaW4oKSwgYml0
QW5kLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaGFuZGxlQml0QW5kRGlzdHJpYnV0
aXZpdHkoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7
Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0WG9yKGNvbnN0YW50MSwgY29uc3RhbnQy
KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgXiBjb25zdGFudDIKLSAgICAg
ICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnRCaXRYb3IgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Yml0
WG9yQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpIHsKLSAgICAgICAgICAgICAg
ICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0YW50Qml0WG9yKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRYb3Io
Qml0WG9yKHZhbHVlLCBjb25zdGFudDEpLCBjb25zdGFudDIpCi0gICAgICAgICAgICAvLyBJbnRv
IHRoaXM6IEJpdFhvcih2YWx1ZSwgY29uc3RhbnQxIF4gY29uc3RhbnQyKS4KLSAgICAgICAgICAg
IGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0WG9yKSB7Ci0gICAgICAgICAg
ICAgICAgVmFsdWUqIG5ld0NvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMSktPmJpdFhvckNvbnN0
YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAg
ICBpZiAobmV3Q29uc3RhbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0VmFsdWUobV9pbmRleCwgbmV3Q29uc3RhbnQpOwotICAgICAgICAgICAgICAgICAgICBt
X3ZhbHVlLT5jaGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAg
ICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMSkgPSBuZXdDb25zdGFudDsKLSAgICAgICAgICAg
ICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0WG9yKGNvbXBhcmUsIDEpCi0gICAg
ICAgICAgICAvLyBJbnRvIHRoaXM6IGludmVydGVkQ29tcGFyZQotICAgICAgICAgICAgaWYgKG1f
dmFsdWUtPmNoaWxkKDEpLT5pc0ludDMyKDEpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFZhbHVl
KiBpbnZlcnRlZENvbXBhcmUgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+aW52ZXJ0ZWRDb21wYXJlKG1f
cHJvYykpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShpbnZlcnRl
ZENvbXBhcmUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0WG9yKHZhbHVl
WCwgdmFsdWVYKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiB6ZXJvLWNvbnN0YW50LgotICAg
ICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApID09IG1fdmFsdWUtPmNoaWxkKDEpKSB7Ci0g
ICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShtX3Byb2MuYWRkSW50Q29uc3RhbnQo
bV92YWx1ZSwgMCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdFhvcih2YWx1ZSwgemVyby1jb25zdGFudCkKLSAg
ICAgICAgICAgIC8vIEludG8gdGhpczogdmFsdWUuCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+
Y2hpbGQoMSktPmlzSW50KDApKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0
eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaGFuZGxlQml0QW5kRGlzdHJp
YnV0aXZpdHkoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgY2FzZSBTaGw6Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNobChjb25z
dGFudDEsIGNvbnN0YW50MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxIDw8
IGNvbnN0YW50MgotICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fdmFsdWUtPmNo
aWxkKDApLT5zaGxDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkgewotICAgICAg
ICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnQpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNobCg8
U3xaPlNocihAeCwgQGNvbnN0KSwgQGNvbnN0KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBC
aXRBbmQoQHgsIC0oMTw8QGNvbnN0KSkKLSAgICAgICAgICAgIGlmICgobV92YWx1ZS0+Y2hpbGQo
MCktPm9wY29kZSgpID09IFNTaHIgfHwgbV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFpT
aHIpCi0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5oYXNJ
bnQoKQotICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKQotICAg
ICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+YXNJbnQoKSA9PSBt
X3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQoKSkgewotICAgICAgICAgICAgICAgIGludCBzaGlmdEFt
b3VudCA9IG1fdmFsdWUtPmNoaWxkKDEpLT5hc0ludCgpICYgKG1fdmFsdWUtPnR5cGUoKSA9PSBJ
bnQzMiA/IDMxIDogNjMpOwotICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdDb25zdCA9IG1fcHJv
Yy5hZGRJbnRDb25zdGFudChtX3ZhbHVlLCAtIHN0YXRpY19jYXN0PGludDY0X3Q+KDF1bGwgPDwg
c2hpZnRBbW91bnQpKTsKLSAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRWYWx1
ZShtX2luZGV4LCBuZXdDb25zdCk7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFs
dWU+KEJpdEFuZCwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgw
KSwgbmV3Q29uc3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBoYW5kbGVTaGlmdEFtb3VudCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgY2FzZSBTU2hyOgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTU2hyKGNvbnN0YW50
MSwgY29uc3RhbnQyKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgPj4gY29u
c3RhbnQyCi0gICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQo
MCktPnNTaHJDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkgewotICAgICAgICAg
ICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSkt
Pmhhc0ludDMyKCkKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2Rl
KCkgPT0gU2hsCi0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEp
LT5oYXNJbnQzMigpCi0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50
MzIoKSA9PSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmFzSW50MzIoKSkgewotICAgICAg
ICAgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50MzIoKSkgewotICAgICAg
ICAgICAgICAgIGNhc2UgMTY6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT50eXBl
KCkgPT0gSW50MzIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU1No
cihTaGwodmFsdWUsIDE2KSwgMTYpCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IFNFeHQxNih2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3
VmFsdWUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmFkZDxWYWx1ZT4oCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFeHQxNiwgbV92YWx1ZS0+b3JpZ2luKCks
IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSAyNDoKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQzMikgewotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTU2hyKFNobCh2YWx1ZSwgMjQpLCAyNCkK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogU0V4dDgodmFsdWUpCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fcHJvYy5hZGQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTRXh0OCwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGls
ZCgwKSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgICAgICAgICAgY2FzZSAzMjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1f
dmFsdWUtPnR5cGUoKSA9PSBJbnQ2NCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHVy
biB0aGlzOiBTU2hyKFNobCh2YWx1ZSwgMzIpLCAzMikKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEludG8gdGhpczogU0V4dDMyKFRydW5jKHZhbHVlKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9w
cm9jLmFkZDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFeHQzMiwg
bV92YWx1ZS0+b3JpZ2luKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2luZGV4LCBUcnVuYywgbV92YWx1ZS0+b3JpZ2luKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkpKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogQWRkIGNhc2VzIGZvciA0OCBhbmQgNTYsIGJ1dCB0aGF0IHdvdWxk
IHRyYW5zbGF0ZSB0byBTRXh0MzIoU0V4dDgpIG9yCi0gICAgICAgICAgICAgICAgLy8gU0V4dDMy
KFNFeHQxNiksIHdoaWNoIHdlIGRvbid0IGN1cnJlbnRseSBsb3dlciBlZmZpY2llbnRseS4KLQot
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5vcGNvZGUoKSAh
PSBTU2hyKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaGFuZGxlU2hpZnRBbW91bnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgWlNocjoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogWlNocihjb25zdGFudDEs
IGNvbnN0YW50MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogKHVuc2lnbmVkKWNvbnN0YW50
MSA+PiBjb25zdGFudDIKLSAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3ZhbHVl
LT5jaGlsZCgwKS0+elNockNvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSB7Ci0g
ICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGhhbmRsZVNoaWZ0QW1v
dW50KCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFJvdFI6Ci0gICAgICAg
ICAgICAvLyBUdXJuIHRoaXM6IFJvdFIoY29uc3RhbnQxLCBjb25zdGFudDIpCi0gICAgICAgICAg
ICAvLyBJbnRvIHRoaXM6IChjb25zdGFudDEgPj4gY29uc3RhbnQyKSB8IChjb25zdGFudDEgPDwg
c2l6ZW9mKGNvbnN0YW50MSkgKiA4IC0gY29uc3RhbnQyKQotICAgICAgICAgICAgaWYgKFZhbHVl
KiBjb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDApLT5yb3RSQ29uc3RhbnQobV9wcm9jLCBtX3Zh
bHVlLT5jaGlsZCgxKSkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNv
bnN0YW50KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaGFuZGxlU2hpZnRBbW91bnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IGNhc2UgUm90TDoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogUm90TChjb25zdGFudDEsIGNv
bnN0YW50MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogKGNvbnN0YW50MSA8PCBjb25zdGFu
dDIpIHwgKGNvbnN0YW50MSA+PiBzaXplb2YoY29uc3RhbnQxKSAqIDggLSBjb25zdGFudDIpCi0g
ICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPnJvdExD
b25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkgewotICAgICAgICAgICAgICAgIHJl
cGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBoYW5kbGVTaGlmdEFtb3VudCgpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBBYnM6Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6
IEFicyhjb25zdGFudCkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogZmFiczx2YWx1ZS0+dHlw
ZSgpPihjb25zdGFudCkKLSAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3ZhbHVl
LT5jaGlsZCgwKS0+YWJzQ29uc3RhbnQobV9wcm9jKSkgewotICAgICAgICAgICAgICAgIHJlcGxh
Y2VXaXRoTmV3VmFsdWUoY29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFicyhBYnModmFsdWUpKQotICAg
ICAgICAgICAgLy8gSW50byB0aGlzOiBBYnModmFsdWUpCi0gICAgICAgICAgICBpZiAobV92YWx1
ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEFicykgewotICAgICAgICAgICAgICAgIHJlcGxhY2VX
aXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gVHVybiB0aGlz
OiBBYnMoTmVnKHZhbHVlKSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQWJzKHZhbHVlKQot
ICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBOZWcpIHsKLSAg
ICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGls
ZCgwKTsKLSAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFicyhC
aXR3aXNlQ2FzdCh2YWx1ZSkpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdHdpc2VDYXN0
KEFuZCh2YWx1ZSwgbWFzay10b3AtYml0KSkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGls
ZCgwKS0+b3Bjb2RlKCkgPT0gQml0d2lzZUNhc3QpIHsKLSAgICAgICAgICAgICAgICBWYWx1ZSog
bWFzazsKLSAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+dHlwZSgpID09IERvdWJsZSkKLSAg
ICAgICAgICAgICAgICAgICAgbWFzayA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDY0VmFs
dWU+KG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCB+KDFsbCA8PCA2MykpOwotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbWFzayA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydDxDb25zdDMyVmFsdWU+KG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCB+KDFsIDw8IDMx
KSk7Ci0KLSAgICAgICAgICAgICAgICBWYWx1ZSogYml0QW5kID0gbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0PFZhbHVlPihtX2luZGV4LCBCaXRBbmQsIG1fdmFsdWUtPm9yaWdpbigpLAotICAgICAgICAg
ICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCksCi0gICAgICAgICAgICAgICAg
ICAgIG1hc2spOwotICAgICAgICAgICAgICAgIFZhbHVlKiBjYXN0ID0gbV9pbnNlcnRpb25TZXQu
aW5zZXJ0PFZhbHVlPihtX2luZGV4LCBCaXR3aXNlQ2FzdCwgbV92YWx1ZS0+b3JpZ2luKCksIGJp
dEFuZCk7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShjYXN0KTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgQ2VpbDoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQ2VpbChjb25zdGFu
dCkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogY2VpbDx2YWx1ZS0+dHlwZSgpPihjb25zdGFu
dCkKLSAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2VpbENvbnN0YW50KG1fcHJvYykpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1Zh
bHVlKGNvbnN0YW50KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBDZWlsKHJvdW5kZWRWYWx1ZSkKLSAgICAgICAgICAg
IC8vIEludG8gdGhpczogcm91bmRlZFZhbHVlCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hp
bGQoMCktPmlzUm91bmRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0
eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEZsb29yOgotICAgICAgICAg
ICAgLy8gVHVybiB0aGlzOiBGbG9vcihjb25zdGFudCkKLSAgICAgICAgICAgIC8vIEludG8gdGhp
czogZmxvb3I8dmFsdWUtPnR5cGUoKT4oY29uc3RhbnQpCi0gICAgICAgICAgICBpZiAoVmFsdWUq
IGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmZsb29yQ29uc3RhbnQobV9wcm9jKSkgewot
ICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnQpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6
IEZsb29yKHJvdW5kZWRWYWx1ZSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogcm91bmRlZFZh
bHVlCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmlzUm91bmRlZCgpKSB7Ci0g
ICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBjYXNlIFNxcnQ6Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNxcnQoY29u
c3RhbnQpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHNxcnQ8dmFsdWUtPnR5cGUoKT4oY29u
c3RhbnQpCi0gICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQo
MCktPnNxcnRDb25zdGFudChtX3Byb2MpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhO
ZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEJpdHdpc2VDYXN0OgotICAgICAg
ICAgICAgLy8gVHVybiB0aGlzOiBCaXR3aXNlQ2FzdChjb25zdGFudCkKLSAgICAgICAgICAgIC8v
IEludG8gdGhpczogYml0d2lzZV9jYXN0PHZhbHVlLT50eXBlKCk+KGNvbnN0YW50KQotICAgICAg
ICAgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDApLT5iaXR3aXNlQ2Fz
dENvbnN0YW50KG1fcHJvYykpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVl
KGNvbnN0YW50KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXR3aXNlQ2FzdChCaXR3aXNlQ2FzdCh2YWx1ZSkpCi0g
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHZhbHVlCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+
Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdHdpc2VDYXN0KSB7Ci0gICAgICAgICAgICAgICAgcmVw
bGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgY2FzZSBTRXh0ODoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDgoY29uc3RhbnQp
Ci0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHN0YXRpY19jYXN0PGludDhfdD4oY29uc3RhbnQp
Ci0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmhhc0ludDMyKCkpIHsKLSAgICAg
ICAgICAgICAgICBpbnQzMl90IHJlc3VsdCA9IHN0YXRpY19jYXN0PGludDhfdD4obV92YWx1ZS0+
Y2hpbGQoMCktPmFzSW50MzIoKSk7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1
ZShtX3Byb2MuYWRkSW50Q29uc3RhbnQobV92YWx1ZSwgcmVzdWx0KSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4
dDgoU0V4dDgodmFsdWUpKQotICAgICAgICAgICAgLy8gICBvciB0aGlzOiBTRXh0OChTRXh0MTYo
dmFsdWUpKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0OCh2YWx1ZSkKLSAgICAgICAg
ICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU0V4dDggfHwgbV92YWx1ZS0+
Y2hpbGQoMCktPm9wY29kZSgpID09IFNFeHQxNikgewotICAgICAgICAgICAgICAgIG1fdmFsdWUt
PmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAg
IG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtX3Zh
bHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0QW5kICYmIG1fdmFsdWUtPmNoaWxkKDApLT5j
aGlsZCgxKS0+aGFzSW50MzIoKSkgewotICAgICAgICAgICAgICAgIFZhbHVlKiBpbnB1dCA9IG1f
dmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICBpbnQzMl90IG1hc2sg
PSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmFzSW50MzIoKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNFeHQ4KEJpdEFuZChpbnB1dCwgbWFz
aykpIHdoZXJlIChtYXNrICYgMHhmZikgPT0gMHhmZgotICAgICAgICAgICAgICAgIC8vIEludG8g
dGhpczogU0V4dDgoaW5wdXQpCi0gICAgICAgICAgICAgICAgaWYgKChtYXNrICYgMHhmZikgPT0g
MHhmZikgewotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9IGlucHV0Owot
ICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgLy8gVHVybiB0aGlzOiBTRXh0OChCaXRBbmQoaW5wdXQsIG1hc2spKSB3aGVyZSAobWFz
ayAmIDB4ODApID09IDAKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdEFuZChpbnB1
dCwgY29uc3QgJiAweDdmKQotICAgICAgICAgICAgICAgIGlmICghKG1hc2sgJiAweDgwKSkgewot
ICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAg
ICAgICAgICAgbV9wcm9jLmFkZDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Qml0QW5kLCBtX3ZhbHVlLT5vcmlnaW4oKSwgaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4oCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCBtYXNrICYgMHg3
ZikpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fcHJvYy5oYXNRdWly
a3MoKSkgewotICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDgoQXRvbWljWGNoZ19f
XykKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEF0b21pY1hjaGdfX18KLSAgICAgICAg
ICAgICAgICBpZiAoaXNBdG9taWNYY2hnKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSkKLSAg
ICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmFzPEF0b21pY1ZhbHVlPigp
LT5hY2Nlc3NXaWR0aCgpID09IFdpZHRoOCkgewotICAgICAgICAgICAgICAgICAgICByZXBsYWNl
V2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgY2FzZSBTRXh0MTY6Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNFeHQx
Nihjb25zdGFudCkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogc3RhdGljX2Nhc3Q8aW50MTZf
dD4oY29uc3RhbnQpCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmhhc0ludDMy
KCkpIHsKLSAgICAgICAgICAgICAgICBpbnQzMl90IHJlc3VsdCA9IHN0YXRpY19jYXN0PGludDE2
X3Q+KG1fdmFsdWUtPmNoaWxkKDApLT5hc0ludDMyKCkpOwotICAgICAgICAgICAgICAgIHJlcGxh
Y2VXaXRoTmV3VmFsdWUobV9wcm9jLmFkZEludENvbnN0YW50KG1fdmFsdWUsIHJlc3VsdCkpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBU
dXJuIHRoaXM6IFNFeHQxNihTRXh0MTYodmFsdWUpKQotICAgICAgICAgICAgLy8gSW50byB0aGlz
OiBTRXh0MTYodmFsdWUpCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29k
ZSgpID09IFNFeHQxNikgewotICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gbV92
YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRy
dWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDE2KFNF
eHQ4KHZhbHVlKSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogU0V4dDgodmFsdWUpCi0gICAg
ICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFNFeHQ4KSB7Ci0gICAg
ICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtX3Zh
bHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0QW5kICYmIG1fdmFsdWUtPmNoaWxkKDApLT5j
aGlsZCgxKS0+aGFzSW50MzIoKSkgewotICAgICAgICAgICAgICAgIFZhbHVlKiBpbnB1dCA9IG1f
dmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICBpbnQzMl90IG1hc2sg
PSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmFzSW50MzIoKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNFeHQxNihCaXRBbmQoaW5wdXQsIG1h
c2spKSB3aGVyZSAobWFzayAmIDB4ZmZmZikgPT0gMHhmZmZmCi0gICAgICAgICAgICAgICAgLy8g
SW50byB0aGlzOiBTRXh0MTYoaW5wdXQpCi0gICAgICAgICAgICAgICAgaWYgKChtYXNrICYgMHhm
ZmZmKSA9PSAweGZmZmYpIHsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkg
PSBpbnB1dDsKLSAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDE2KEJpdEFuZChpbnB1dCwgbWFzaykp
IHdoZXJlIChtYXNrICYgMHg4MDAwKSA9PSAwCi0gICAgICAgICAgICAgICAgLy8gSW50byB0aGlz
OiBCaXRBbmQoaW5wdXQsIGNvbnN0ICYgMHg3ZmZmKQotICAgICAgICAgICAgICAgIGlmICghKG1h
c2sgJiAweDgwMDApKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUo
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3Byb2MuYWRkPFZhbHVlPigKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBCaXRBbmQsIG1fdmFsdWUtPm9yaWdpbigpLCBpbnB1dCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVl
PigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgbV92YWx1ZS0+b3Jp
Z2luKCksIG1hc2sgJiAweDdmZmYpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFtX3Byb2Mu
aGFzUXVpcmtzKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNFeHQxNihBdG9t
aWNYY2hnX19fKQotICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogQXRvbWljWGNoZ19fXwot
ICAgICAgICAgICAgICAgIGlmIChpc0F0b21pY1hjaGcobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29k
ZSgpKQotICAgICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+YXM8QXRvbWlj
VmFsdWU+KCktPmFjY2Vzc1dpZHRoKCkgPT0gV2lkdGgxNikgewotICAgICAgICAgICAgICAgICAg
ICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTRXh0MzI6Ci0gICAgICAgICAgICAvLyBUdXJuIHRo
aXM6IFNFeHQzMihjb25zdGFudCkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogc3RhdGljX2Nh
c3Q8aW50NjRfdD4oY29uc3RhbnQpCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCkt
Pmhhc0ludDMyKCkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fcHJv
Yy5hZGRJbnRDb25zdGFudChtX3ZhbHVlLCBtX3ZhbHVlLT5jaGlsZCgwKS0+YXNJbnQzMigpKSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8v
IFR1cm4gdGhpczogU0V4dDMyKEJpdEFuZChpbnB1dCwgbWFzaykpIHdoZXJlIChtYXNrICYgMHg4
MDAwMDAwMCkgPT0gMAotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBaRXh0MzIoQml0QW5kKGlu
cHV0LCBtYXNrKSkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkg
PT0gQml0QW5kICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aGFzSW50MzIoKQotICAg
ICAgICAgICAgICAgICYmICEobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5hc0ludDMyKCkg
JiAweDgwMDAwMDAwKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0g
ICAgICAgICAgICAgICAgICAgIG1fcHJvYy5hZGQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAg
ICAgICAgWkV4dDMyLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCkpKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgIGNhc2UgWkV4dDMyOgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBaRXh0MzIo
Y29uc3RhbnQpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHN0YXRpY19jYXN0PHVpbnQ2NF90
PihzdGF0aWNfY2FzdDx1aW50MzJfdD4oY29uc3RhbnQpKQotICAgICAgICAgICAgaWYgKG1fdmFs
dWUtPmNoaWxkKDApLT5oYXNJbnQzMigpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhO
ZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmFkZEludENvbnN0YW50KAotICAg
ICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDx1aW50MzJfdD4obV92YWx1ZS0+Y2hpbGQo
MCktPmFzSW50MzIoKSkpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFRydW5jOgotICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBUcnVuYyhjb25zdGFudCkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczog
c3RhdGljX2Nhc3Q8aW50MzJfdD4oY29uc3RhbnQpCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+
Y2hpbGQoMCktPmhhc0ludDY0KCkgfHwgbV92YWx1ZS0+Y2hpbGQoMCktPmhhc0RvdWJsZSgpKSB7
Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICAg
ICAgbV9wcm9jLmFkZEludENvbnN0YW50KG1fdmFsdWUsIHN0YXRpY19jYXN0PGludDMyX3Q+KG1f
dmFsdWUtPmNoaWxkKDApLT5hc0ludDY0KCkpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogVHJ1bmMoU0V4dDMyKHZh
bHVlKSkgb3IgVHJ1bmMoWkV4dDMyKHZhbHVlKSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczog
dmFsdWUKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU0V4
dDMyIHx8IG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBaRXh0MzIpIHsKLSAgICAgICAg
ICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8v
IFR1cm4gdGhpczogVHJ1bmMoT3AodmFsdWUsIGNvbnN0YW50KSkKLSAgICAgICAgICAgIC8vICAg
ICB3aGVyZSAhKGNvbnN0YW50ICYgMHhmZmZmZmZmZikKLSAgICAgICAgICAgIC8vICAgICAgIGFu
ZCBPcCBpcyBBZGQsIFN1YiwgQml0T3IsIG9yIEJpdFhvcgotICAgICAgICAgICAgLy8gaW50byB0
aGlzOiBUcnVuYyh2YWx1ZSkKLSAgICAgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+Y2hpbGQoMCkt
Pm9wY29kZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFkZDoKLSAgICAgICAgICAgIGNhc2UgU3Vi
OgotICAgICAgICAgICAgY2FzZSBCaXRPcjoKLSAgICAgICAgICAgIGNhc2UgQml0WG9yOgotICAg
ICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhhc0ludDY0KCkK
LSAgICAgICAgICAgICAgICAgICAgJiYgIShtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmFz
SW50NjQoKSAmIDB4ZmZmZmZmZmZsbCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+
Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBjYXNlIElUb0Q6Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IElUb0Qo
Y29uc3RhbnQpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IENvbnN0RG91YmxlKGNvbnN0YW50
KQotICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDApLT5p
VG9EQ29uc3RhbnQobV9wcm9jKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFs
dWUoY29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJVG9GOgotICAgICAgICAgICAgLy8gVHVy
biB0aGlzOiBJVG9GKGNvbnN0YW50KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBDb25zdEZs
b2F0KGNvbnN0YW50KQotICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fdmFsdWUt
PmNoaWxkKDApLT5pVG9GQ29uc3RhbnQobV9wcm9jKSkgewotICAgICAgICAgICAgICAgIHJlcGxh
Y2VXaXRoTmV3VmFsdWUoY29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBGbG9hdFRvRG91Ymxl
OgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBGbG9hdFRvRG91YmxlKGNvbnN0YW50KQotICAg
ICAgICAgICAgLy8gSW50byB0aGlzOiBDb25zdERvdWJsZShjb25zdGFudCkKLSAgICAgICAgICAg
IGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+ZmxvYXRUb0RvdWJsZUNv
bnN0YW50KG1fcHJvYykpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNv
bnN0YW50KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRG91YmxlVG9GbG9hdDoKLSAgICAgICAgICAgIC8v
IFR1cm4gdGhpczogRG91YmxlVG9GbG9hdChGbG9hdFRvRG91YmxlKHZhbHVlKSkKLSAgICAgICAg
ICAgIC8vIEludG8gdGhpczogdmFsdWUKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgw
KS0+b3Bjb2RlKCkgPT0gRmxvYXRUb0RvdWJsZSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VX
aXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBEb3Vi
bGVUb0Zsb2F0KGNvbnN0YW50KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBDb25zdEZsb2F0
KGNvbnN0YW50KQotICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fdmFsdWUtPmNo
aWxkKDApLT5kb3VibGVUb0Zsb2F0Q29uc3RhbnQobV9wcm9jKSkgewotICAgICAgICAgICAgICAg
IHJlcGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTZWxlY3Q6
Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNlbGVjdChjb25zdGFudCwgYSwgYikKLSAgICAg
ICAgICAgIC8vIEludG8gdGhpczogY29uc3RhbnQgPyBhIDogYgotICAgICAgICAgICAgaWYgKG1f
dmFsdWUtPmNoaWxkKDApLT5oYXNJbnQzMigpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdp
dGhJZGVudGl0eSgKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCktPmFzSW50
MzIoKSA/IG1fdmFsdWUtPmNoaWxkKDEpIDogbV92YWx1ZS0+Y2hpbGQoMikpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6
IFNlbGVjdChFcXVhbCh4LCAwKSwgYSwgYikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogU2Vs
ZWN0KHgsIGIsIGEpCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgp
ID09IEVxdWFsICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQoMCkpIHsKLSAg
ICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGls
ZCgwKTsKLSAgICAgICAgICAgICAgICBzdGQ6OnN3YXAobV92YWx1ZS0+Y2hpbGQoMSksIG1fdmFs
dWUtPmNoaWxkKDIpKTsKLSAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRo
aXM6IFNlbGVjdChCaXRYb3IoYm9vbCwgMSksIGEsIGIpCi0gICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IFNlbGVjdChib29sLCBiLCBhKQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDAp
LT5vcGNvZGUoKSA9PSBCaXRYb3IKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgw
KS0+Y2hpbGQoMSktPmlzSW50MzIoMSkKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGls
ZCgwKS0+Y2hpbGQoMCktPnJldHVybnNCb29sKCkpIHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVl
LT5jaGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAg
ICBzdGQ6OnN3YXAobV92YWx1ZS0+Y2hpbGQoMSksIG1fdmFsdWUtPmNoaWxkKDIpKTsKLSAgICAg
ICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNlbGVjdChCaXRBbmQoYm9v
bCwgeHl6MSksIGEsIGIpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNlbGVjdChib29sLCBh
LCBiKQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXRB
bmQKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhhc0lu
dCgpCi0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5hc0lu
dCgpICYgMQotICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKS0+
cmV0dXJuc0Jvb2woKSkgewotICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gbV92
YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IC8vIFR1cm4gdGhpczogU2VsZWN0KHN0dWZmLCB4LCB4KQotICAgICAgICAgICAgLy8gSW50byB0
aGlzOiB4Ci0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSkgPT0gbV92YWx1ZS0+Y2hp
bGQoMikpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNo
aWxkKDEpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgTG9hZDhaOgotICAgICAgICBjYXNlIExvYWQ4UzoK
LSAgICAgICAgY2FzZSBMb2FkMTZaOgotICAgICAgICBjYXNlIExvYWQxNlM6Ci0gICAgICAgIGNh
c2UgTG9hZDoKLSAgICAgICAgY2FzZSBTdG9yZTg6Ci0gICAgICAgIGNhc2UgU3RvcmUxNjoKLSAg
ICAgICAgY2FzZSBTdG9yZTogewotICAgICAgICAgICAgVmFsdWUqIGFkZHJlc3MgPSBtX3ZhbHVl
LT5sYXN0Q2hpbGQoKTsKLSAgICAgICAgICAgIE1lbW9yeVZhbHVlKiBtZW1vcnkgPSBtX3ZhbHVl
LT5hczxNZW1vcnlWYWx1ZT4oKTsKLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBMb2FkKEFk
ZChhZGRyZXNzLCBvZmZzZXQxKSwgb2Zmc2V0ID0gb2Zmc2V0MikKLSAgICAgICAgICAgIC8vIElu
dG8gdGhpczogTG9hZChhZGRyZXNzLCBvZmZzZXQgPSBvZmZzZXQxICsgb2Zmc2V0MikKLSAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICAvLyBBbHNvIHR1cm5zIHRoaXM6IFN0b3JlKHZhbHVlLCBB
ZGQoYWRkcmVzcywgb2Zmc2V0MSksIG9mZnNldCA9IG9mZnNldDIpCi0gICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IFN0b3JlKHZhbHVlLCBhZGRyZXNzLCBvZmZzZXQgPSBvZmZzZXQxICsgb2Zmc2V0
MikKLSAgICAgICAgICAgIGlmIChhZGRyZXNzLT5vcGNvZGUoKSA9PSBBZGQgJiYgYWRkcmVzcy0+
Y2hpbGQoMSktPmhhc0ludFB0cigpKSB7Ci0gICAgICAgICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0
ID0gYWRkcmVzcy0+Y2hpbGQoMSktPmFzSW50UHRyKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFz
dW1PdmVyZmxvd3M8aW50cHRyX3Q+KG9mZnNldCwgbWVtb3J5LT5vZmZzZXQoKSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgb2Zmc2V0ICs9IG1lbW9yeS0+b2Zmc2V0KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIFZhbHVlOjpPZmZzZXRUeXBlIHNtYWxsT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8VmFsdWU6
Ok9mZnNldFR5cGU+KG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzbWFsbE9mZnNl
dCA9PSBvZmZzZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgPSBhZGRyZXNz
LT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeS0+bGFzdENoaWxkKCkg
PSBhZGRyZXNzOwotICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5LT5zZXRPZmZzZXQoc21h
bGxPZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBMb2FkKGNvbnN0YW50MSwgb2Zmc2V0ID0gY29uc3Rh
bnQyKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBMb2FkKGNvbnN0YW50MSArIGNvbnN0YW50
MikKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBUaGlzIGlzIGEgZnVuIGNhbm9uaWNh
bGl6YXRpb24uIEl0IHB1cmVseSByZWdyZXNzZXMgbmFpdmVseSBnZW5lcmF0ZWQgY29kZS4gV2Ug
cmVseQotICAgICAgICAgICAgLy8gb24gY29uc3RhbnQgbWF0ZXJpYWxpemF0aW9uIHRvIGJlIHNt
YXJ0IGVub3VnaCB0byBtYXRlcmlhbGl6ZSB0aGlzIGNvbnN0YW50IHRoZSBzbWFydAotICAgICAg
ICAgICAgLy8gd2F5LiBXZSB3YW50IHRoaXMgY2Fub25pY2FsaXphdGlvbiBiZWNhdXNlIHdlIHdh
bnQgdG8ga25vdyBpZiB0d28gbWVtb3J5IGFjY2Vzc2VzIHNlZQotICAgICAgICAgICAgLy8gdGhl
IHNhbWUgYWRkcmVzcy4KLSAgICAgICAgICAgIGlmIChtZW1vcnktPm9mZnNldCgpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKFZhbHVlKiBuZXdBZGRyZXNzID0gYWRkcmVzcy0+YWRkQ29uc3RhbnQo
bV9wcm9jLCBtZW1vcnktPm9mZnNldCgpKSkgewotICAgICAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnRWYWx1ZShtX2luZGV4LCBuZXdBZGRyZXNzKTsKLSAgICAgICAgICAgICAg
ICAgICAgYWRkcmVzcyA9IG5ld0FkZHJlc3M7Ci0gICAgICAgICAgICAgICAgICAgIG1lbW9yeS0+
bGFzdENoaWxkKCkgPSBuZXdBZGRyZXNzOwotICAgICAgICAgICAgICAgICAgICBtZW1vcnktPnNl
dE9mZnNldCgwKTsKLSAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBDQ2FsbDogewotICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBDYWxsKGZtb2QsIGNvbnN0YW50MSwgY29uc3RhbnQyKQotICAgICAgICAgICAg
Ly8gSW50byB0aGlzOiBmY2FsbC1jb25zdGFudChjb25zdGFudDEsIGNvbnN0YW50MikKLSAgICAg
ICAgICAgIGF1dG8qIGZtb2REb3VibGUgPSB0YWdDRnVuY3Rpb25QdHI8ZG91YmxlICgqKShkb3Vi
bGUsIGRvdWJsZSk+KGZtb2QsIEIzQ0NhbGxQdHJUYWcpOwotICAgICAgICAgICAgaWYgKG1fdmFs
dWUtPnR5cGUoKSA9PSBEb3VibGUKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5udW1DaGls
ZHJlbigpID09IDMKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+aXNJbnRQ
dHIocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZm1vZERvdWJsZSkpCi0gICAgICAgICAgICAg
ICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSA9PSBEb3VibGUKLSAgICAgICAgICAgICAg
ICAmJiBtX3ZhbHVlLT5jaGlsZCgyKS0+dHlwZSgpID09IERvdWJsZSkgewotICAgICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUobV92YWx1ZS0+Y2hpbGQoMSktPm1vZENvbnN0YW50KG1f
cHJvYywgbV92YWx1ZS0+Y2hpbGQoMikpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRXF1YWw6Ci0gICAgICAgICAgICBoYW5kbGVD
b21tdXRhdGl2aXR5KCk7Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRXF1YWwoYm9vbCwg
MCkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0WG9yKGJvb2wsIDEpCi0gICAgICAgICAg
ICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPnJldHVybnNCb29sKCkgJiYgbV92YWx1ZS0+Y2hpbGQo
MSktPmlzSW50MzIoMCkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4o
Ci0gICAgICAgICAgICAgICAgICAgIEJpdFhvciwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUt
PmNoaWxkKDApLAotICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29u
c3QzMlZhbHVlPihtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4oKSwgMSkpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBU
dXJuIHRoaXMgRXF1YWwoYm9vbCwgMSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogYm9vbAot
ICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5yZXR1cm5zQm9vbCgpICYmIG1fdmFs
dWUtPmNoaWxkKDEpLT5pc0ludDMyKDEpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJ
ZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRXF1YWwoY29uc3QxLCBjb25z
dDIpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0MSA9PSBjb25zdDIKLSAgICAgICAg
ICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgbV9wcm9jLmFkZEJvb2xD
b25zdGFudCgKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+b3JpZ2luKCksCi0gICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLT5lcXVhbENvbnN0YW50KG1fdmFsdWUtPmNo
aWxkKDEpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2Fz
ZSBOb3RFcXVhbDoKLSAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKLQotICAgICAg
ICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5yZXR1cm5zQm9vbCgpKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gVHVybiB0aGlzOiBOb3RFcXVhbChib29sLCAwKQotICAgICAgICAgICAgICAgIC8v
IEludG8gdGhpczogYm9vbAotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+
aXNJbnQzMigwKSkgewotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1f
dmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczog
Tm90RXF1YWwoYm9vbCwgMSkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEVxdWFsKGJv
b2wsIDApCi0gICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludDMyKDEp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPigKLSAgICAgICAg
ICAgICAgICAgICAgICAgIEVxdWFsLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQo
MCksCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRJbnRDb25z
dGFudChtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4oKSwgSW50MzIsIDApKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAvLyBUdXJuIHRoaXM6IE5vdEVxdWFsKGNvbnN0MSwgY29uc3QyKQotICAgICAgICAg
ICAgLy8gSW50byB0aGlzOiBjb25zdDEgIT0gY29uc3QyCi0gICAgICAgICAgICByZXBsYWNlV2l0
aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQoCi0gICAg
ICAgICAgICAgICAgICAgIG1fdmFsdWUtPm9yaWdpbigpLAotICAgICAgICAgICAgICAgICAgICBt
X3ZhbHVlLT5jaGlsZCgwKS0+bm90RXF1YWxDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgTGVzc1RoYW46Ci0gICAgICAgIGNh
c2UgR3JlYXRlclRoYW46Ci0gICAgICAgIGNhc2UgTGVzc0VxdWFsOgotICAgICAgICBjYXNlIEdy
ZWF0ZXJFcXVhbDoKLSAgICAgICAgY2FzZSBBYm92ZToKLSAgICAgICAgY2FzZSBCZWxvdzoKLSAg
ICAgICAgY2FzZSBBYm92ZUVxdWFsOgotICAgICAgICBjYXNlIEJlbG93RXF1YWw6IHsKLSAgICAg
ICAgICAgIENhbm9uaWNhbGl6ZWRDb21wYXJpc29uIGNvbXBhcmlzb24gPSBjYW5vbmljYWxpemVD
b21wYXJpc29uKG1fdmFsdWUpOwotICAgICAgICAgICAgVHJpU3RhdGUgcmVzdWx0ID0gTWl4ZWRU
cmlTdGF0ZTsKLSAgICAgICAgICAgIHN3aXRjaCAoY29tcGFyaXNvbi5vcGNvZGUpIHsKLSAgICAg
ICAgICAgIGNhc2UgTGVzc1RoYW46Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcGFyaXNv
bi5vcGVyYW5kc1sxXS0+Z3JlYXRlclRoYW5Db25zdGFudChjb21wYXJpc29uLm9wZXJhbmRzWzBd
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgR3JlYXRlclRoYW46
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcGFyaXNvbi5vcGVyYW5kc1sxXS0+bGVzc1Ro
YW5Db25zdGFudChjb21wYXJpc29uLm9wZXJhbmRzWzBdKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgTGVzc0VxdWFsOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9
IGNvbXBhcmlzb24ub3BlcmFuZHNbMV0tPmdyZWF0ZXJFcXVhbENvbnN0YW50KGNvbXBhcmlzb24u
b3BlcmFuZHNbMF0pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBH
cmVhdGVyRXF1YWw6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcGFyaXNvbi5vcGVyYW5k
c1sxXS0+bGVzc0VxdWFsQ29uc3RhbnQoY29tcGFyaXNvbi5vcGVyYW5kc1swXSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFib3ZlOgotICAgICAgICAgICAgICAg
IHJlc3VsdCA9IGNvbXBhcmlzb24ub3BlcmFuZHNbMV0tPmJlbG93Q29uc3RhbnQoY29tcGFyaXNv
bi5vcGVyYW5kc1swXSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IEJlbG93OgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXBhcmlzb24ub3BlcmFuZHNbMV0t
PmFib3ZlQ29uc3RhbnQoY29tcGFyaXNvbi5vcGVyYW5kc1swXSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEFib3ZlRXF1YWw6Ci0gICAgICAgICAgICAgICAgcmVz
dWx0ID0gY29tcGFyaXNvbi5vcGVyYW5kc1sxXS0+YmVsb3dFcXVhbENvbnN0YW50KGNvbXBhcmlz
b24ub3BlcmFuZHNbMF0pOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBCZWxvd0VxdWFsOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbXBhcmlzb24ub3BlcmFu
ZHNbMV0tPmFib3ZlRXF1YWxDb25zdGFudChjb21wYXJpc29uLm9wZXJhbmRzWzBdKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGF1dG8qIGNvbnN0YW50ID0gbV9wcm9jLmFk
ZEJvb2xDb25zdGFudChtX3ZhbHVlLT5vcmlnaW4oKSwgcmVzdWx0KSkgewotICAgICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNvbXBhcmlzb24ub3Bjb2RlICE9IG1f
dmFsdWUtPm9wY29kZSgpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+
KGNvbXBhcmlzb24ub3Bjb2RlLCBtX3ZhbHVlLT5vcmlnaW4oKSwgY29tcGFyaXNvbi5vcGVyYW5k
c1swXSwgY29tcGFyaXNvbi5vcGVyYW5kc1sxXSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNh
c2UgRXF1YWxPclVub3JkZXJlZDoKLSAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsK
LQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBFcXVhbChjb25zdDEsIGNvbnN0MikKLSAgICAg
ICAgICAgIC8vIEludG8gdGhpczogaXN1bm9yZGVyZWQoY29uc3QxLCBjb25zdDIpIHx8IGNvbnN0
MSA9PSBjb25zdDIuCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEVxdWFsKHZhbHVlLCBjb25z
dF9OYU4pCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IDEuCi0gICAgICAgICAgICByZXBsYWNl
V2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRCb29sQ29uc3RhbnQoCi0g
ICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPm9yaWdpbigpLAotICAgICAgICAgICAgICAgICAg
ICBtX3ZhbHVlLT5jaGlsZCgxKS0+ZXF1YWxPclVub3JkZXJlZENvbnN0YW50KG1fdmFsdWUtPmNo
aWxkKDApKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBDaGVja0FkZDog
ewotICAgICAgICAgICAgaWYgKHJlcGxhY2VXaXRoTmV3VmFsdWUobV92YWx1ZS0+Y2hpbGQoMCkt
PmNoZWNrQWRkQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpKQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMCkpIHsK
LSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSW50
UmFuZ2UgbGVmdFJhbmdlID0gcmFuZ2VGb3IobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAg
ICAgSW50UmFuZ2UgcmlnaHRSYW5nZSA9IHJhbmdlRm9yKG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAg
ICAgICAgICAgIGlmICghbGVmdFJhbmdlLmNvdWxkT3ZlcmZsb3dBZGQocmlnaHRSYW5nZSwgbV92
YWx1ZS0+dHlwZSgpKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0g
ICAgICAgICAgICAgICAgICAgIG1fcHJvYy5hZGQ8VmFsdWU+KEFkZCwgbV92YWx1ZS0+b3JpZ2lu
KCksIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSkpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LQotICAgICAgICBjYXNlIENoZWNrU3ViOiB7Ci0gICAgICAgICAgICBpZiAocmVwbGFjZVdpdGhO
ZXdWYWx1ZShtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hlY2tTdWJDb25zdGFudChtX3Byb2MsIG1fdmFs
dWUtPmNoaWxkKDEpKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlm
IChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMCkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNl
V2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKFZhbHVlKiBuZWdhdGVkQ29uc3RhbnQg
PSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hlY2tOZWdDb25zdGFudChtX3Byb2MpKSB7Ci0gICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUobV9pbmRleCwgbmVnYXRlZENvbnN0
YW50KTsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5hczxDaGVja1ZhbHVlPigpLT5jb252ZXJ0
VG9BZGQoKTsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgxKSA9IG5lZ2F0ZWRDb25z
dGFudDsKLSAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBJbnRSYW5nZSBsZWZ0UmFuZ2Ug
PSByYW5nZUZvcihtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICBJbnRSYW5nZSByaWdo
dFJhbmdlID0gcmFuZ2VGb3IobV92YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgaWYgKCFs
ZWZ0UmFuZ2UuY291bGRPdmVyZmxvd1N1YihyaWdodFJhbmdlLCBtX3ZhbHVlLT50eXBlKCkpKSB7
Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICAg
ICAgbV9wcm9jLmFkZDxWYWx1ZT4oU3ViLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hp
bGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2Ug
Q2hlY2tNdWw6IHsKLSAgICAgICAgICAgIGlmIChyZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUt
PmNoaWxkKDApLT5jaGVja011bENvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSkK
LSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgaGFuZGxlQ29tbXV0YXRpdml0
eSgpOwotCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpKSB7Ci0g
ICAgICAgICAgICAgICAgYm9vbCBtb2RpZmllZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgc3dp
dGNoIChtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQoKSkgewotICAgICAgICAgICAgICAgIGNhc2Ug
MDoKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShtX3Byb2MuYWRkSW50
Q29uc3RhbnQobV92YWx1ZSwgMCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRp
dHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmFzPENoZWNr
VmFsdWU+KCktPmNvbnZlcnRUb0FkZCgpOwotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5j
aGlsZCgxKSA9IG1fdmFsdWUtPmNoaWxkKDApOwotICAgICAgICAgICAgICAgICAgICBtX2NoYW5n
ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBtb2RpZmllZCA9IGZhbHNlOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYg
KG1vZGlmaWVkKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgSW50UmFuZ2UgbGVmdFJhbmdlID0gcmFuZ2VGb3IobV92YWx1ZS0+Y2hpbGQo
MCkpOwotICAgICAgICAgICAgSW50UmFuZ2UgcmlnaHRSYW5nZSA9IHJhbmdlRm9yKG1fdmFsdWUt
PmNoaWxkKDEpKTsKLSAgICAgICAgICAgIGlmICghbGVmdFJhbmdlLmNvdWxkT3ZlcmZsb3dNdWwo
cmlnaHRSYW5nZSwgbV92YWx1ZS0+dHlwZSgpKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VX
aXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgICAgIG1fcHJvYy5hZGQ8VmFsdWU+KE11bCwg
bV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQogICAgICAgICBjYXNlIENoZWNrOiB7Ci0gICAgICAgICAgICBDaGVj
a1ZhbHVlKiBjaGVja1ZhbHVlID0gbV92YWx1ZS0+YXM8Q2hlY2tWYWx1ZT4oKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKGNoZWNrVmFsdWUtPmNoaWxkKDApLT5pc0xpa2VaZXJvKCkp
IHsKLSAgICAgICAgICAgICAgICBjaGVja1ZhbHVlLT5yZXBsYWNlV2l0aE5vcCgpOworICAgICAg
ICAgICAgaWYgKHBlZXBob2xlLnRyeVNpbXBsaWZ5Q2hlY2sobV92YWx1ZS0+YXM8Q2hlY2tWYWx1
ZT4oKSkpIHsKICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIG1fY2hhbmdlZENGRyA9IHRydWU7IC8vIEEgYml0IGNvbnNlcnZhdGl2ZSwgYnV0IHNvdW5k
LgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAoY2hlY2tWYWx1ZS0+Y2hpbGQoMCktPmlzTGlrZU5vblplcm8oKSkgewotICAgICAgICAgICAg
ICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9Ci0gICAgICAgICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydDxQYXRjaHBvaW50VmFsdWU+KG1faW5kZXgsIFZvaWQsIGNoZWNr
VmFsdWUtPm9yaWdpbigpKTsKLQotICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMg
PSBFZmZlY3RzKCk7Ci0gICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkcyA9
IEhlYXBSYW5nZTo6dG9wKCk7Ci0gICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5l
eGl0c1NpZGV3YXlzID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDE7IGkgPCBjaGVja1ZhbHVlLT5udW1DaGlsZHJlbigpOyArK2kpCi0gICAgICAgICAgICAgICAg
ICAgIHBhdGNocG9pbnQtPmFwcGVuZChjaGVja1ZhbHVlLT5jb25zdHJhaW5lZENoaWxkKGkpKTsK
LQotICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihjaGVja1ZhbHVlLT5n
ZW5lcmF0b3IoKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSByZXN0IG9mIHRo
ZSBibG9jayB3aXRoIGFuIE9vcHMuCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9pbmRleCArIDE7IGkgPCBtX2Jsb2NrLT5zaXplKCkgLSAxOyArK2kpCi0gICAgICAgICAgICAg
ICAgICAgIG1fYmxvY2stPmF0KGkpLT5yZXBsYWNlV2l0aEJvdHRvbShtX2luc2VydGlvblNldCwg
bV9pbmRleCk7Ci0gICAgICAgICAgICAgICAgbV9ibG9jay0+bGFzdCgpLT5yZXBsYWNlV2l0aE9v
cHMobV9ibG9jayk7Ci0gICAgICAgICAgICAgICAgbV9ibG9jay0+bGFzdCgpLT5zZXRPcmlnaW4o
Y2hlY2tWYWx1ZS0+b3JpZ2luKCkpOwotCi0gICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBvdXJz
ZWx2ZXMgbGFzdC4KLSAgICAgICAgICAgICAgICBjaGVja1ZhbHVlLT5yZXBsYWNlV2l0aE5vcCgp
OwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZENGRyA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjaGVja1ZhbHVlLT5jaGls
ZCgwKS0+b3Bjb2RlKCkgPT0gTm90RXF1YWwKLSAgICAgICAgICAgICAgICAmJiBjaGVja1ZhbHVl
LT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50KDApKSB7Ci0gICAgICAgICAgICAgICAgY2hlY2tW
YWx1ZS0+Y2hpbGQoMCkgPSBjaGVja1ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAg
ICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICAgICAgaWYgKG1fcHJvYy5vcHRMZXZlbCgpIDwgMikKICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTIwNTgsNiArMjQ4LDggQEAKICAgICAgICAgICAgIC8vIGJsb2Nrcy4gVGhpcyBp
cyBwcmV0dHkgbXVjaCBndWFyYW50ZWVkIHNpbmNlIG9uZSBvZiB0aG9zZSBibG9ja3Mgd2lsbCBy
ZXBsYWNlIGFsbAogICAgICAgICAgICAgLy8gdXNlcyBvZiB0aGUgU2VsZWN0IHdpdGggYSBjb25z
dGFudCwgYW5kIHRoYXQgY29uc3RhbnQgd2lsbCBiZSB0cmFuc2l0aXZlbHkgdXNlZAogICAgICAg
ICAgICAgLy8gZnJvbSB0aGUgY2hlY2suCisgICAgICAgICAgICAvLyBGSVhNRTogdGhlIGNvbW1l
bnQgYWJvdmUgdGFsa3MgYWJvdXQgYSBzZWxlY3Qgd2l0aCBvbmUgY29uc3RhbnQgb3BlcmFuZCwg
YnV0IHRoZSBjb2RlIGJlbG93CisgICAgICAgICAgICAvLyBzZWFyY2hlcyBmb3Igb25lIHdpdGgg
Y29uc3RhbnRzIG9uIGJvdGggc2lkZXMuCiAgICAgICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgc2VsZWN0U3BlY2lhbGl6YXRpb25Cb3VuZCA9IDM7CiAgICAgICAgICAgICBWYWx1ZSogc2Vs
ZWN0ID0gZmluZFJlY2VudE5vZGVNYXRjaGluZygKICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5j
aGlsZCgwKSwgc2VsZWN0U3BlY2lhbGl6YXRpb25Cb3VuZCwKQEAgLTIwNzQsNjIgKzI2NiwxMiBA
QAogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBCcmFuY2g6IHsKLSAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogQnJhbmNoKE5vdEVxdWFsKHgsIDApKQotICAgICAgICAgICAgLy8gSW50byB0aGlz
OiBCcmFuY2goeCkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkg
PT0gTm90RXF1YWwgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0ludCgwKSkgewot
ICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNo
aWxkKDApOworICAgICAgICAgICAgaWYgKHBlZXBob2xlLnRyeVNpbXBsaWZ5QnJhbmNoKG1fdmFs
dWUpKSB7CiAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBtX2NoYW5nZWRDRkcgPSB0cnVlOyAvLyBBIGJpdCBjb25zZXJ2YXRpdmUsIGJ1dCBuZXZlciB1
bnNvdW5kLgogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJyYW5j
aChFcXVhbCh4LCAwKSwgdGhlbiwgZWxzZSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQnJh
bmNoKHgsIGVsc2UsIHRoZW4pCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9w
Y29kZSgpID09IEVxdWFsICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnQoMCkp
IHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDAp
LT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICBzdGQ6OnN3YXAobV9ibG9jay0+dGFrZW4oKSwg
bV9ibG9jay0+bm90VGFrZW4oKSk7Ci0gICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBC
cmFuY2goQml0WG9yKGJvb2wsIDEpLCB0aGVuLCBlbHNlKQotICAgICAgICAgICAgLy8gSW50byB0
aGlzOiBCcmFuY2goYm9vbCwgZWxzZSwgdGhlbikKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5j
aGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0WG9yCi0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+
Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0ludDMyKDEpCi0gICAgICAgICAgICAgICAgJiYgbV92YWx1
ZS0+Y2hpbGQoMCktPmNoaWxkKDApLT5yZXR1cm5zQm9vbCgpKSB7Ci0gICAgICAgICAgICAgICAg
bV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAg
ICAgICAgICAgc3RkOjpzd2FwKG1fYmxvY2stPnRha2VuKCksIG1fYmxvY2stPm5vdFRha2VuKCkp
OwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIC8vIFR1cm4gdGhpczogQnJhbmNoKEJpdEFuZChib29sLCB4eWIxKSwgdGhlbiwg
ZWxzZSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQnJhbmNoKGJvb2wsIHRoZW4sIGVsc2Up
Ci0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdEFuZAot
ICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aGFzSW50KCkK
LSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmFzSW50KCkg
JiAxCi0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLT5yZXR1
cm5zQm9vbCgpKSB7Ci0gICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVl
LT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgVHJpU3RhdGUgdHJpU3RhdGUgPSBtX3ZhbHVl
LT5jaGlsZCgwKS0+YXNUcmlTdGF0ZSgpOwotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJy
YW5jaCgwLCB0aGVuLCBlbHNlKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBKdW1wKGVsc2Up
Ci0gICAgICAgICAgICBpZiAodHJpU3RhdGUgPT0gRmFsc2VUcmlTdGF0ZSkgewotICAgICAgICAg
ICAgICAgIG1fYmxvY2stPnRha2VuKCkuYmxvY2soKS0+cmVtb3ZlUHJlZGVjZXNzb3IobV9ibG9j
ayk7Ci0gICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhKdW1wKG1fYmxvY2ssIG1f
YmxvY2stPm5vdFRha2VuKCkpOwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZENGRyA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8v
IFR1cm4gdGhpczogQnJhbmNoKG5vdCAwLCB0aGVuLCBlbHNlKQotICAgICAgICAgICAgLy8gSW50
byB0aGlzOiBKdW1wKHRoZW4pCi0gICAgICAgICAgICBpZiAodHJpU3RhdGUgPT0gVHJ1ZVRyaVN0
YXRlKSB7Ci0gICAgICAgICAgICAgICAgbV9ibG9jay0+bm90VGFrZW4oKS5ibG9jaygpLT5yZW1v
dmVQcmVkZWNlc3NvcihtX2Jsb2NrKTsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNl
V2l0aEp1bXAobV9ibG9jaywgbV9ibG9jay0+dGFrZW4oKSk7Ci0gICAgICAgICAgICAgICAgbV9j
aGFuZ2VkQ0ZHID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKG1fcHJvYy5vcHRMZXZlbCgpID49IDIpIHsKKyAgICAgICAgICAg
IGlmIChtX3ZhbHVlLT5vcGNvZGUoKSA9PSBCcmFuY2ggJiYgbV9wcm9jLm9wdExldmVsKCkgPj0g
MikgewogICAgICAgICAgICAgICAgIC8vIElmIGEgY2hlY2sgZm9yIHRoZSBzYW1lIHByb3BlcnR5
IGRvbWluYXRlcyB1cywgd2UgY2FuIGtpbGwgdGhlIGJyYW5jaC4gVGhpcyBzb3J0CiAgICAgICAg
ICAgICAgICAgLy8gb2YgbWFrZXMgc2Vuc2UgaGVyZSBiZWNhdXNlIGl0J3MgY2hlYXAsIGJ1dCBo
YWNrcyBsaWtlIHRoaXMgc2hvdyB0aGF0IHdlJ3JlIGdvaW5nCiAgICAgICAgICAgICAgICAgLy8g
dG8gbmVlZCBTQ0NQLgpAQCAtMjE0Nyw2ICsyODksMTAgQEAKICAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoVmFsdWUqIG5ld1ZhbHVlID0g
cGVlcGhvbGUudHJ5UmVkdWNlKG1fdmFsdWUpKSB7CisgICAgICAgICAgICAgICAgcmVwbGFjZVdp
dGhJZGVudGl0eShuZXdWYWx1ZSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAt
MjI5MiwyNDYgKzQzOCw2IEBACiAgICAgICAgIHByZWRlY2Vzc29yLT51cGRhdGVQcmVkZWNlc3Nv
cnNBZnRlcigpOwogICAgIH0KIAotICAgIHN0YXRpYyBib29sIHNob3VsZFN3YXBCaW5hcnlPcGVy
YW5kcyhWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICAvLyBOb3RlIHRoYXQgd2UgaGF2ZSBj
b21tdXRhdGl2ZSBvcGVyYXRpb25zIHRoYXQgdGFrZSBtb3JlIHRoYW4gdHdvIGNoaWxkcmVuLiBU
aG9zZSBvcGVyYXRpb25zIG1heQotICAgICAgICAvLyBjb21tdXRlIHRoZWlyIGZpcnN0IHR3byBj
aGlsZHJlbiB3aGlsZSBsZWF2aW5nIHRoZSByZXN0IHVuYWZmZWN0ZWQuCi0gICAgICAgIEFTU0VS
VCh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA+PSAyKTsKLQotICAgICAgICAvLyBMZWF2ZSBpdCBhbG9u
ZSBpZiB0aGUgcmlnaHQgY2hpbGQgaXMgYSBjb25zdGFudC4KLSAgICAgICAgaWYgKHZhbHVlLT5j
aGlsZCgxKS0+aXNDb25zdGFudCgpCi0gICAgICAgICAgICB8fCB2YWx1ZS0+Y2hpbGQoMCktPm9w
Y29kZSgpID09IEF0b21pY1N0cm9uZ0NBUykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICBpZiAodmFsdWUtPmNoaWxkKDApLT5pc0NvbnN0YW50KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpZiAodmFsdWUtPmNoaWxkKDEpLT5vcGNvZGUoKSA9PSBB
dG9taWNTdHJvbmdDQVMpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAvLyBT
b3J0IHRoZSBvcGVyYW5kcy4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgY2Fub25pY2FsaXphdGlvbi4g
V2UgdXNlIHRoZSBpbmRleCBpbnN0ZWFkIG9mCi0gICAgICAgIC8vIHRoZSBhZGRyZXNzIHRvIG1h
a2UgdGhpcyBhdCBsZWFzdCBzbGlnaHRseSBkZXRlcm1pbmlzdGljLgotICAgICAgICBpZiAodmFs
dWUtPmNoaWxkKDApLT5pbmRleCgpID4gdmFsdWUtPmNoaWxkKDEpLT5pbmRleCgpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IC8vIFR1cm4gdGhpczogQWRkKGNvbnN0YW50LCB2YWx1ZSkKLSAgICAvLyBJbnRvIHRoaXM6IEFk
ZCh2YWx1ZSwgY29uc3RhbnQpCi0gICAgLy8KLSAgICAvLyBBbHNvOgotICAgIC8vIFR1cm4gdGhp
czogQWRkKHZhbHVlMSwgdmFsdWUyKQotICAgIC8vIEludG8gdGhpczogQWRkKHZhbHVlMiwgdmFs
dWUxKQotICAgIC8vIElmIHdlIGRlY2lkZSB0aGF0IHZhbHVlMiBjb21pbmcgZmlyc3QgaXMgdGhl
IGNhbm9uaWNhbCBvcmRlcmluZy4KLSAgICB2b2lkIGhhbmRsZUNvbW11dGF0aXZpdHkoKQotICAg
IHsKLSAgICAgICAgaWYgKHNob3VsZFN3YXBCaW5hcnlPcGVyYW5kcyhtX3ZhbHVlKSkgewotICAg
ICAgICAgICAgc3RkOjpzd2FwKG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7
Ci0gICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Ly8gRm9yIE9wPT1BZGQgb3IgU3ViLCB0dXJuIGFueSBvZiB0aGVzZToKLSAgICAvLyAgICAgIE9w
KE11bCh4MSwgeDIpLCBNdWwoeDEsIHgzKSkKLSAgICAvLyAgICAgIE9wKE11bCh4MiwgeDEpLCBN
dWwoeDEsIHgzKSkKLSAgICAvLyAgICAgIE9wKE11bCh4MSwgeDIpLCBNdWwoeDMsIHgxKSkKLSAg
ICAvLyAgICAgIE9wKE11bCh4MiwgeDEpLCBNdWwoeDMsIHgxKSkKLSAgICAvLyBJbnRvIHRoaXM6
IE11bCh4MSwgT3AoeDIsIHgzKSkKLSAgICBib29sIGhhbmRsZU11bERpc3RyaWJ1dGl2aXR5KCkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3ZhbHVlLT5vcGNvZGUoKSA9PSBBZGQgfHwgbV92YWx1
ZS0+b3Bjb2RlKCkgPT0gU3ViKTsKLSAgICAgICAgVmFsdWUqIHgxID0gbnVsbHB0cjsKLSAgICAg
ICAgVmFsdWUqIHgyID0gbnVsbHB0cjsKLSAgICAgICAgVmFsdWUqIHgzID0gbnVsbHB0cjsKLSAg
ICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBNdWwgJiYgbV92YWx1ZS0+
Y2hpbGQoMSktPm9wY29kZSgpID09IE11bCkgewotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNo
aWxkKDApLT5jaGlsZCgwKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBPcChNdWwoeDEsIHgyKSwgTXVsKHgxLCB4MykpCi0gICAgICAgICAgICAg
ICAgeDEgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgeDIg
PSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSk7Ci0gICAgICAgICAgICAgICAgeDMgPSBtX3Zh
bHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fdmFsdWUt
PmNoaWxkKDApLT5jaGlsZCgxKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCkpIHsKLSAg
ICAgICAgICAgICAgICAvLyBPcChNdWwoeDIsIHgxKSwgTXVsKHgxLCB4MykpCi0gICAgICAgICAg
ICAgICAgeDEgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSk7Ci0gICAgICAgICAgICAgICAg
eDIgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgeDMgPSBt
X3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fdmFs
dWUtPmNoaWxkKDApLT5jaGlsZCgwKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSkpIHsK
LSAgICAgICAgICAgICAgICAvLyBPcChNdWwoeDEsIHgyKSwgTXVsKHgzLCB4MSkpCi0gICAgICAg
ICAgICAgICAgeDEgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAg
ICAgeDIgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSk7Ci0gICAgICAgICAgICAgICAgeDMg
PSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1f
dmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSkp
IHsKLSAgICAgICAgICAgICAgICAvLyBPcChNdWwoeDIsIHgxKSwgTXVsKHgzLCB4MSkpCi0gICAg
ICAgICAgICAgICAgeDEgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSk7Ci0gICAgICAgICAg
ICAgICAgeDIgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAg
eDMgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKHgxICE9IG51bGxwdHIpIHsKLSAgICAgICAgICAgIEFTU0VSVCh4MiAh
PSBudWxscHRyICYmIHgzICE9IG51bGxwdHIpOwotICAgICAgICAgICAgVmFsdWUqIG5ld09wID0g
bV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBtX3ZhbHVlLT5vcGNvZGUoKSwg
bV92YWx1ZS0+b3JpZ2luKCksIHgyLCB4Myk7Ci0gICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxW
YWx1ZT4oTXVsLCBtX3ZhbHVlLT5vcmlnaW4oKSwgeDEsIG5ld09wKTsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICAvLyBGb3IgT3A9PUJpdE9yIG9yIEJpdFhvciwgdHVybiBhbnkgb2YgdGhlc2U6Ci0gICAgLy8g
ICAgICBPcChCaXRBbmQoeDEsIHgyKSwgQml0QW5kKHgxLCB4MykpCi0gICAgLy8gICAgICBPcChC
aXRBbmQoeDIsIHgxKSwgQml0QW5kKHgxLCB4MykpCi0gICAgLy8gICAgICBPcChCaXRBbmQoeDEs
IHgyKSwgQml0QW5kKHgzLCB4MSkpCi0gICAgLy8gICAgICBPcChCaXRBbmQoeDIsIHgxKSwgQml0
QW5kKHgzLCB4MSkpCi0gICAgLy8gSW50byB0aGlzOiBCaXRBbmQoT3AoeDIsIHgzKSwgeDEpCi0g
ICAgLy8gQW5kIGFueSBvZiB0aGVzZToKLSAgICAvLyAgICAgIE9wKEJpdEFuZCh4MSwgeDIpLCB4
MSkKLSAgICAvLyAgICAgIE9wKEJpdEFuZCh4MiwgeDEpLCB4MSkKLSAgICAvLyAgICAgIE9wKHgx
LCBCaXRBbmQoeDEsIHgyKSkKLSAgICAvLyAgICAgIE9wKHgxLCBCaXRBbmQoeDIsIHgxKSkKLSAg
ICAvLyBJbnRvIHRoaXM6IEJpdEFuZChPcCh4MiwgeDEpLCB4MSkKLSAgICAvLyBUaGlzIHNlY29u
ZCBzZXQgaXMgZXF1aXZhbGVudCB0byBkb2luZyB4MSA9PiBCaXRBbmQoeDEsIHgxKSwgYW5kIHRo
ZW4gYXBwbHlpbmcgdGhlIGZpcnN0IHNldC4KLSAgICAvLyBJdCBkb2VzIG5vdCByZWR1Y2UgdGhl
IG51bWJlciBvZiBvcGVyYXRpb25zIGV4ZWN1dGVkLCBidXQgcHJvdmlkZXMgc29tZSB1c2VmdWwg
bm9ybWFsaXphdGlvbjogd2UgcHJlZmVyIHRvIGhhdmUgQml0QW5kIGF0IHRoZSBvdXRlcm1vc3Qs
IHRoZW4gQml0WG9yLCBhbmQgZmluYWxseSBCaXRPciBhdCB0aGUgaW5uZXJtb3N0Ci0gICAgYm9v
bCBoYW5kbGVCaXRBbmREaXN0cmlidXRpdml0eSgpCi0gICAgewotICAgICAgICBBU1NFUlQobV92
YWx1ZS0+b3Bjb2RlKCkgPT0gQml0T3IgfHwgbV92YWx1ZS0+b3Bjb2RlKCkgPT0gQml0WG9yKTsK
LSAgICAgICAgVmFsdWUqIHgxID0gbnVsbHB0cjsKLSAgICAgICAgVmFsdWUqIHgyID0gbnVsbHB0
cjsKLSAgICAgICAgVmFsdWUqIHgzID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKG1fdmFsdWUtPmNo
aWxkKDApLT5vcGNvZGUoKSA9PSBCaXRBbmQgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPm9wY29kZSgp
ID09IEJpdEFuZCkgewotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgw
KSA9PSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCkpIHsKLSAgICAgICAgICAgICAgICB4MSA9
IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICB4MiA9IG1fdmFs
dWUtPmNoaWxkKDApLT5jaGlsZCgxKTsKLSAgICAgICAgICAgICAgICB4MyA9IG1fdmFsdWUtPmNo
aWxkKDEpLT5jaGlsZCgxKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV92YWx1ZS0+Y2hpbGQo
MCktPmNoaWxkKDEpID09IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKSkgewotICAgICAgICAg
ICAgICAgIHgxID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpOwotICAgICAgICAgICAgICAg
IHgyID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIHgzID0g
bV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3Zh
bHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpKSB7
Ci0gICAgICAgICAgICAgICAgeDEgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAg
ICAgICAgICAgICAgeDIgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSk7Ci0gICAgICAgICAg
ICAgICAgeDMgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKS0+
Y2hpbGQoMSkpIHsKLSAgICAgICAgICAgICAgICB4MSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGls
ZCgxKTsKLSAgICAgICAgICAgICAgICB4MiA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsK
LSAgICAgICAgICAgICAgICB4MyA9IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkg
PT0gQml0QW5kKSB7Ci0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDAp
ID09IG1fdmFsdWUtPmNoaWxkKDEpKSB7Ci0gICAgICAgICAgICAgICAgeDEgPSB4MyA9IG1fdmFs
dWUtPmNoaWxkKDEpOwotICAgICAgICAgICAgICAgIHgyID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNo
aWxkKDEpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQo
MSkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkpIHsKLSAgICAgICAgICAgICAgICB4MSA9IHgzID0gbV92
YWx1ZS0+Y2hpbGQoMSk7Ci0gICAgICAgICAgICAgICAgeDIgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAobV92YWx1ZS0+Y2hp
bGQoMSktPm9wY29kZSgpID09IEJpdEFuZCkgewotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNo
aWxkKDEpLT5jaGlsZCgwKSA9PSBtX3ZhbHVlLT5jaGlsZCgwKSkgewotICAgICAgICAgICAgICAg
IHgxID0geDMgPSBtX3ZhbHVlLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICB4MiA9IG1fdmFs
dWUtPmNoaWxkKDEpLT5jaGlsZCgxKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV92YWx1ZS0+
Y2hpbGQoMSktPmNoaWxkKDEpID09IG1fdmFsdWUtPmNoaWxkKDApKSB7Ci0gICAgICAgICAgICAg
ICAgeDEgPSB4MyA9IG1fdmFsdWUtPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIHgyID0gbV92
YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIGlmICh4MSAhPSBudWxscHRyKSB7Ci0gICAgICAgICAgICBBU1NFUlQoeDIgIT0gbnVsbHB0
ciAmJiB4MyAhPSBudWxscHRyKTsKLSAgICAgICAgICAgIFZhbHVlKiBiaXRPcCA9IG1faW5zZXJ0
aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgbV92YWx1ZS0+b3Bjb2RlKCksIG1fdmFsdWUt
Pm9yaWdpbigpLCB4MiwgeDMpOwotICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KEJp
dEFuZCwgbV92YWx1ZS0+b3JpZ2luKCksIHgxLCBiaXRPcCk7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgc3Ry
dWN0IENhbm9uaWNhbGl6ZWRDb21wYXJpc29uIHsKLSAgICAgICAgT3Bjb2RlIG9wY29kZTsKLSAg
ICAgICAgVmFsdWUqIG9wZXJhbmRzWzJdOwotICAgIH07Ci0gICAgc3RhdGljIENhbm9uaWNhbGl6
ZWRDb21wYXJpc29uIGNhbm9uaWNhbGl6ZUNvbXBhcmlzb24oVmFsdWUqIHZhbHVlKQotICAgIHsK
LSAgICAgICAgYXV0byBmbGlwID0gW10gKE9wY29kZSBvcGNvZGUpIHsKLSAgICAgICAgICAgIHN3
aXRjaCAob3Bjb2RlKSB7Ci0gICAgICAgICAgICBjYXNlIExlc3NUaGFuOgotICAgICAgICAgICAg
ICAgIHJldHVybiBHcmVhdGVyVGhhbjsKLSAgICAgICAgICAgIGNhc2UgR3JlYXRlclRoYW46Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIExlc3NUaGFuOwotICAgICAgICAgICAgY2FzZSBMZXNzRXF1
YWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdyZWF0ZXJFcXVhbDsKLSAgICAgICAgICAgIGNh
c2UgR3JlYXRlckVxdWFsOgotICAgICAgICAgICAgICAgIHJldHVybiBMZXNzRXF1YWw7Ci0gICAg
ICAgICAgICBjYXNlIEFib3ZlOgotICAgICAgICAgICAgICAgIHJldHVybiBCZWxvdzsKLSAgICAg
ICAgICAgIGNhc2UgQmVsb3c6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFib3ZlOwotICAgICAg
ICAgICAgY2FzZSBBYm92ZUVxdWFsOgotICAgICAgICAgICAgICAgIHJldHVybiBCZWxvd0VxdWFs
OwotICAgICAgICAgICAgY2FzZSBCZWxvd0VxdWFsOgotICAgICAgICAgICAgICAgIHJldHVybiBB
Ym92ZUVxdWFsOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
b3Bjb2RlOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgICAgICBpZiAoc2hvdWxkU3dh
cEJpbmFyeU9wZXJhbmRzKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiB7IGZsaXAodmFsdWUt
Pm9wY29kZSgpKSwgeyB2YWx1ZS0+Y2hpbGQoMSksIHZhbHVlLT5jaGlsZCgwKSB9IH07Ci0gICAg
ICAgIHJldHVybiB7IHZhbHVlLT5vcGNvZGUoKSwgeyB2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5j
aGlsZCgxKSB9IH07Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJlYWxseSBi
ZSBhIGZvcndhcmQgYW5hbHlzaXMuIEluc3RlYWQsIHdlIHVzZXMgYSBib3VuZGVkLXNlYXJjaCBi
YWNrd2FyZHMKLSAgICAvLyBhbmFseXNpcy4KLSAgICBJbnRSYW5nZSByYW5nZUZvcihWYWx1ZSog
dmFsdWUsIHVuc2lnbmVkIHRpbWVUb0xpdmUgPSA1KQotICAgIHsKLSAgICAgICAgaWYgKCF0aW1l
VG9MaXZlKQotICAgICAgICAgICAgcmV0dXJuIEludFJhbmdlOjp0b3AodmFsdWUtPnR5cGUoKSk7
Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKHZhbHVlLT5vcGNvZGUoKSkgewotICAgICAgICBj
YXNlIENvbnN0MzI6Ci0gICAgICAgIGNhc2UgQ29uc3Q2NDogewotICAgICAgICAgICAgaW50NjRf
dCBpbnRWYWx1ZSA9IHZhbHVlLT5hc0ludCgpOwotICAgICAgICAgICAgcmV0dXJuIEludFJhbmdl
KGludFZhbHVlLCBpbnRWYWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEJpdEFuZDoK
LSAgICAgICAgICAgIGlmICh2YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBJbnRSYW5nZTo6cmFuZ2VGb3JNYXNrKHZhbHVlLT5jaGlsZCgxKS0+YXNJbnQo
KSwgdmFsdWUtPnR5cGUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNT
aHI6Ci0gICAgICAgICAgICBpZiAodmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQzMigpKSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHJhbmdlRm9yKHZhbHVlLT5jaGlsZCgwKSwgdGltZVRvTGl2ZSAt
IDEpLnNTaHIoCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlLT5jaGlsZCgxKS0+YXNJbnQzMigp
LCB2YWx1ZS0+dHlwZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgWlNocjoKLSAgICAgICAgICAgIGlmICh2YWx1ZS0+Y2hpbGQoMSktPmhhc0lu
dDMyKCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2VGb3IodmFsdWUtPmNoaWxkKDAp
LCB0aW1lVG9MaXZlIC0gMSkuelNocigKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUtPmNoaWxk
KDEpLT5hc0ludDMyKCksIHZhbHVlLT50eXBlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTaGw6Ci0gICAgICAgICAgICBpZiAodmFsdWUtPmNo
aWxkKDEpLT5oYXNJbnQzMigpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlRm9yKHZh
bHVlLT5jaGlsZCgwKSwgdGltZVRvTGl2ZSAtIDEpLnNobCgKLSAgICAgICAgICAgICAgICAgICAg
dmFsdWUtPmNoaWxkKDEpLT5hc0ludDMyKCksIHZhbHVlLT50eXBlKCkpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBBZGQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gcmFuZ2VGb3IodmFsdWUtPmNoaWxkKDApLCB0aW1lVG9MaXZlIC0gMSkuYWRkKAotICAg
ICAgICAgICAgICAgIHJhbmdlRm9yKHZhbHVlLT5jaGlsZCgxKSwgdGltZVRvTGl2ZSAtIDEpLCB2
YWx1ZS0+dHlwZSgpKTsKLQotICAgICAgICBjYXNlIFN1YjoKLSAgICAgICAgICAgIHJldHVybiBy
YW5nZUZvcih2YWx1ZS0+Y2hpbGQoMCksIHRpbWVUb0xpdmUgLSAxKS5zdWIoCi0gICAgICAgICAg
ICAgICAgcmFuZ2VGb3IodmFsdWUtPmNoaWxkKDEpLCB0aW1lVG9MaXZlIC0gMSksIHZhbHVlLT50
eXBlKCkpOwotCi0gICAgICAgIGNhc2UgTXVsOgotICAgICAgICAgICAgcmV0dXJuIHJhbmdlRm9y
KHZhbHVlLT5jaGlsZCgwKSwgdGltZVRvTGl2ZSAtIDEpLm11bCgKLSAgICAgICAgICAgICAgICBy
YW5nZUZvcih2YWx1ZS0+Y2hpbGQoMSksIHRpbWVUb0xpdmUgLSAxKSwgdmFsdWUtPnR5cGUoKSk7
Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIEludFJhbmdlOjp0b3AodmFsdWUtPnR5cGUoKSk7Ci0gICAgfQotCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CiAgICAg
dm9pZCByZXBsYWNlV2l0aE5ldyhBcmd1bWVudHMuLi4gYXJndW1lbnRzKQogICAgIHsKQEAgLTI1
NTQsMjcgKzQ2MCw2IEBACiAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgfQogCi0gICAg
dm9pZCBoYW5kbGVTaGlmdEFtb3VudCgpCi0gICAgewotICAgICAgICAvLyBTaGlmdCBhbnl0aGlu
ZyBieSB6ZXJvIGlzIGlkZW50aXR5LgotICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlz
SW50MzIoMCkpIHsKLSAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hp
bGQoMCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGhl
IHNoaWZ0IGFscmVhZHkgbWFza3MgaXRzIHNoaWZ0IGFtb3VudC4gSWYgdGhlIHNoaWZ0IGFtb3Vu
dCBpcyBiZWluZyBtYXNrZWQgYnkgYQotICAgICAgICAvLyByZWR1bmRhbnQgYW1vdW50LCB0aGVu
IHJlbW92ZSB0aGUgbWFzay4gRm9yIGV4YW1wbGUsCi0gICAgICAgIC8vIFR1cm4gdGhpczogU2hs
KEB4LCBCaXRBbmQoQHksIDYzKSkKLSAgICAgICAgLy8gSW50byB0aGlzOiBTaGwoQHgsIEB5KQot
ICAgICAgICB1bnNpZ25lZCBtYXNrID0gc2l6ZW9mVHlwZShtX3ZhbHVlLT50eXBlKCkpICogOCAt
IDE7Ci0gICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+b3Bjb2RlKCkgPT0gQml0QW5kCi0g
ICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSktPmhhc0ludDMyKCkKLSAg
ICAgICAgICAgICYmIChtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSktPmFzSW50MzIoKSAmIG1h
c2spID09IG1hc2spIHsKLSAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gbV92YWx1ZS0+
Y2hpbGQoMSktPmNoaWxkKDApOwotICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAg
ICAgfQotICAgIH0KLQogICAgIHZvaWQgcmVwbGFjZUlmUmVkdW5kYW50KCkKICAgICB7CiAgICAg
ICAgIG1fY2hhbmdlZCB8PSBtX3B1cmVDU0UucHJvY2VzcyhtX3ZhbHVlLCAqbV9kb21pbmF0b3Jz
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHJldmlzaW9u
IDI0NDU2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjI2LDcgKzIyNiw3IEBACiAgICAgICAgICAgICBjYXNlIFNTaHI6CiAg
ICAgICAgICAgICBjYXNlIFpTaHI6CiAgICAgICAgICAgICBjYXNlIFJvdFI6Ci0gICAgICAgICAg
ICAgICAgY2FzZSBSb3RMOgorICAgICAgICAgICAgY2FzZSBSb3RMOgogICAgICAgICAgICAgICAg
IFZBTElEQVRFKCF2YWx1ZS0+a2luZCgpLmhhc0V4dHJhQml0cygpLCAoIkF0ICIsICp2YWx1ZSkp
OwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDIsICgi
QXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9
PSB2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAyNDQ1NjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2OSw3ICsyMzY5
LDcgQEAKICAgICBWYWx1ZSogcmVzdWx0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBO
ZWcsIE9yaWdpbigpLCBtdWwpOwogICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKIAotICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50NjRf
dD4ocHJvYywgYSkgPT0gLShhICogYikpOworICAgIENIRUNLX0VRKGNvbXBpbGVBbmRSdW48aW50
NjRfdD4ocHJvYywgYSksIC0oYSAqIGIpKTsKIH0KIAogdm9pZCB0ZXN0U3ViTXVsTXVsQXJncyhp
bnQ2NF90IGEsIGludDY0X3QgYiwgaW50NjRfdCBjKQpAQCAtMTY4NjMsNyArMTY4NjMsNyBAQAog
ICAgICAgICBmb3IgKGF1dG8mIHNlY29uZCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4o
KSkgewogICAgICAgICAgICAgZmxvYXQgYiA9IHNlY29uZC52YWx1ZTsKICAgICAgICAgICAgIGJv
b2wgZXhwZWN0ZWRSZXN1bHQgPSAoYSA9PSBiKSB8fCBzdGQ6OmlzdW5vcmRlcmVkKGEsIGIpOwot
ICAgICAgICAgICAgQ0hFQ0soISFpbnZva2U8aW50MzJfdD4oKmNvZGUsIHN0YXRpY19jYXN0PGRv
dWJsZT4oYikpID09IGV4cGVjdGVkUmVzdWx0KTsKKyAgICAgICAgICAgIENIRUNLX0VRKCEhaW52
b2tlPGludDMyX3Q+KCpjb2RlLCBzdGF0aWNfY2FzdDxkb3VibGU+KGIpKSwgZXhwZWN0ZWRSZXN1
bHQpOwogICAgICAgICB9CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPdXRwdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT3V0cHV0LmNwcAkocmV2aXNpb24gMjQ0NTY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPdXRwdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBACiAKIE91
dHB1dDo6T3V0cHV0KFN0YXRlJiBzdGF0ZSkKICAgICA6IG1fcHJvYygqc3RhdGUucHJvYykKKyAg
ICAsIG1fcGVlcGhvbGUobV9wcm9jKQogewogfQogCkBAIC04OCw2ICs4OSw3IEBACiB2b2lkIE91
dHB1dDo6YXBwZW5kVG8oTEJhc2ljQmxvY2sgYmxvY2spCiB7CiAgICAgbV9ibG9jayA9IGJsb2Nr
OworICAgIG1fcGVlcGhvbGUuc2V0QmxvY2sobV9ibG9jayk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6
OmZyYW1lUG9pbnRlcigpCkBAIC0xMjksMTMzICsxMzEsMTEzIEBACiAKIExWYWx1ZSBPdXRwdXQ6
Om9wYXF1ZShMVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBPcGFxdWUsIG9yaWdpbigpLCB2YWx1ZSk7CisgICAgcmV0dXJuIG1fcGVl
cGhvbGUucmVkdWNlT3BhcXVlKHZhbHVlLT50eXBlKCksIG9yaWdpbigpLCB2YWx1ZSk7CiB9CiAK
IExWYWx1ZSBPdXRwdXQ6OmFkZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIGlm
IChWYWx1ZSogcmVzdWx0ID0gbGVmdC0+YWRkQ29uc3RhbnQobV9wcm9jLCByaWdodCkpIHsKLSAg
ICAgICAgbV9ibG9jay0+YXBwZW5kKHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfQotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIz
OjpBZGQsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVk
dWNlQWRkKGxlZnQtPnR5cGUoKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVl
IE91dHB1dDo6c3ViKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgcmV0dXJuIG1f
YmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlN1Yiwgb3JpZ2luKCksIGxl
ZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VTdWIobGVmdC0+dHlwZSgp
LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0cHV0OjptdWwoTFZhbHVl
IGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIz
OjpWYWx1ZT4obV9wcm9jLCBCMzo6TXVsLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJl
dHVybiBtX3BlZXBob2xlLnJlZHVjZU11bChsZWZ0LT50eXBlKCksIG9yaWdpbigpLCBsZWZ0LCBy
aWdodCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmRpdihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0
KQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIz
OjpEaXYsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVk
dWNlRGl2KGxlZnQtPnR5cGUoKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0LCBCMzo6UGVlcGhvbGVP
cHRpbWl6ZXI6OklzTm90Q2hpbGwpOwogfQogCiBMVmFsdWUgT3V0cHV0OjpjaGlsbERpdihMVmFs
dWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8
QjM6OlZhbHVlPihtX3Byb2MsIGNoaWxsKEIzOjpEaXYpLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQp
OworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZURpdihsZWZ0LT50eXBlKCksIG9yaWdpbigp
LCBsZWZ0LCByaWdodCwgQjM6OlBlZXBob2xlT3B0aW1pemVyOjpJc0NoaWxsKTsKIH0KIAogTFZh
bHVlIE91dHB1dDo6bW9kKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgcmV0dXJu
IG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6Ok1vZCwgb3JpZ2luKCks
IGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VNb2QobGVmdC0+dHlw
ZSgpLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQsIEIzOjpQZWVwaG9sZU9wdGltaXplcjo6SXNOb3RD
aGlsbCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmNoaWxsTW9kKExWYWx1ZSBsZWZ0LCBMVmFsdWUg
cmlnaHQpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJv
YywgY2hpbGwoQjM6Ok1vZCksIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1f
cGVlcGhvbGUucmVkdWNlTW9kKGxlZnQtPnR5cGUoKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0LCBC
Mzo6UGVlcGhvbGVPcHRpbWl6ZXI6OklzQ2hpbGwpOwogfQogCiBMVmFsdWUgT3V0cHV0OjpuZWco
TFZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgQjM6Ok5lZywgb3JpZ2luKCksIHZhbHVlKTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5y
ZWR1Y2VOZWcodmFsdWUtPnR5cGUoKSwgb3JpZ2luKCksIHZhbHVlKTsKIH0KIAogTFZhbHVlIE91
dHB1dDo6ZG91YmxlQWRkKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgcmV0dXJu
IG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkFkZCwgb3JpZ2luKCks
IGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VBZGQobGVmdC0+dHlw
ZSgpLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0cHV0Ojpkb3VibGVT
dWIoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBw
ZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6U3ViLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQp
OworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZVN1YihsZWZ0LT50eXBlKCksIG9yaWdpbigp
LCBsZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmRvdWJsZU11bChMVmFsdWUgbGVm
dCwgTFZhbHVlIHJpZ2h0KQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZh
bHVlPihtX3Byb2MsIEIzOjpNdWwsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJu
IG1fcGVlcGhvbGUucmVkdWNlTXVsKGxlZnQtPnR5cGUoKSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0
KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6ZG91YmxlRGl2KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmln
aHQpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywg
QjM6OkRpdiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5y
ZWR1Y2VEaXYobGVmdC0+dHlwZSgpLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQsIEIzOjpQZWVwaG9s
ZU9wdGltaXplcjo6SXNOb3RDaGlsbCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmRvdWJsZU1vZChM
VmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmRO
ZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpNb2QsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7Cisg
ICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlTW9kKGxlZnQtPnR5cGUoKSwgb3JpZ2luKCksIGxl
ZnQsIHJpZ2h0LCBCMzo6UGVlcGhvbGVPcHRpbWl6ZXI6OklzTm90Q2hpbGwpOwogfQogCiBMVmFs
dWUgT3V0cHV0OjpiaXRBbmQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICByZXR1
cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Qml0QW5kLCBvcmln
aW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZUJpdEFuZChs
ZWZ0LT50eXBlKCksIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6
OmJpdE9yKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2st
PmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkJpdE9yLCBvcmlnaW4oKSwgbGVmdCwg
cmlnaHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZUJpdE9yKGxlZnQtPnR5cGUoKSwg
b3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6Yml0WG9yKExWYWx1
ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxC
Mzo6VmFsdWU+KG1fcHJvYywgQjM6OkJpdFhvciwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAg
ICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VCaXRYb3IobGVmdC0+dHlwZSgpLCBvcmlnaW4oKSwg
bGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0cHV0OjpzaGwoTFZhbHVlIGxlZnQsIExWYWx1
ZSByaWdodCkKIHsKLSAgICByaWdodCA9IGNhc3RUb0ludDMyKHJpZ2h0KTsKLSAgICBpZiAoVmFs
dWUqIHJlc3VsdCA9IGxlZnQtPnNobENvbnN0YW50KG1fcHJvYywgcmlnaHQpKSB7Ci0gICAgICAg
IG1fYmxvY2stPmFwcGVuZChyZXN1bHQpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0K
LSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6U2hs
LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZVNo
bChsZWZ0LT50eXBlKCksIG9yaWdpbigpLCBsZWZ0LCBjYXN0VG9JbnQzMihyaWdodCkpOwogfQog
CiBMVmFsdWUgT3V0cHV0OjphU2hyKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAg
cmlnaHQgPSBjYXN0VG9JbnQzMihyaWdodCk7Ci0gICAgaWYgKFZhbHVlKiByZXN1bHQgPSBsZWZ0
LT5zU2hyQ29uc3RhbnQobV9wcm9jLCByaWdodCkpIHsKLSAgICAgICAgbV9ibG9jay0+YXBwZW5k
KHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIHJldHVybiBtX2Js
b2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpTU2hyLCBvcmlnaW4oKSwgbGVm
dCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZVNTaHIobGVmdC0+dHlwZSgp
LCBvcmlnaW4oKSwgbGVmdCwgY2FzdFRvSW50MzIocmlnaHQpKTsKIH0KIAogTFZhbHVlIE91dHB1
dDo6bFNocihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIHJpZ2h0ID0gY2FzdFRv
SW50MzIocmlnaHQpOwotICAgIGlmIChWYWx1ZSogcmVzdWx0ID0gbGVmdC0+elNockNvbnN0YW50
KG1fcHJvYywgcmlnaHQpKSB7Ci0gICAgICAgIG1fYmxvY2stPmFwcGVuZChyZXN1bHQpOwotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3
PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6WlNociwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAg
ICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VaU2hyKGxlZnQtPnR5cGUoKSwgb3JpZ2luKCksIGxl
ZnQsIGNhc3RUb0ludDMyKHJpZ2h0KSk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmJpdE5vdChMVmFs
dWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1f
cHJvYywgQjM6OkJpdFhvciwgb3JpZ2luKCksCi0gICAgICAgIHZhbHVlLAotICAgICAgICBtX2Js
b2NrLT5hcHBlbmRJbnRDb25zdGFudChtX3Byb2MsIG9yaWdpbigpLCB2YWx1ZS0+dHlwZSgpLCAt
MSkpOworICAgIFZhbHVlKiBhbGxPbmVzID0gbV9ibG9jay0+YXBwZW5kSW50Q29uc3RhbnQobV9w
cm9jLCBvcmlnaW4oKSwgdmFsdWUtPnR5cGUoKSwgLTEpOworICAgIHJldHVybiBtX3BlZXBob2xl
LnJlZHVjZUJpdFhvcih2YWx1ZS0+dHlwZSgpLCBvcmlnaW4oKSwgdmFsdWUsIGFsbE9uZXMpOwog
fQogCiBMVmFsdWUgT3V0cHV0Ojpsb2dpY2FsTm90KExWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1
cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RXF1YWwsIG9yaWdp
bigpLCB2YWx1ZSwgaW50MzJaZXJvKTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VFcXVh
bChJbnQzMiwgb3JpZ2luKCksIHZhbHVlLCBpbnQzMlplcm8pOwogfQogCiBMVmFsdWUgT3V0cHV0
OjpjdGx6MzIoTFZhbHVlIG9wZXJhbmQpCkBAIC0yNjUsMTcgKzI0NywxNyBAQAogCiBMVmFsdWUg
T3V0cHV0Ojpkb3VibGVBYnMoTFZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBtX2Jsb2NrLT5h
cHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpBYnMsIG9yaWdpbigpLCB2YWx1ZSk7Cisg
ICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlQWJzKHZhbHVlLT50eXBlKCksIG9yaWdpbigpLCB2
YWx1ZSk7CiB9CiAKLUxWYWx1ZSBPdXRwdXQ6OmRvdWJsZUNlaWwoTFZhbHVlIG9wZXJhbmQpCitM
VmFsdWUgT3V0cHV0Ojpkb3VibGVDZWlsKExWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gbV9i
bG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Q2VpbCwgb3JpZ2luKCksIG9w
ZXJhbmQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZUNlaWwodmFsdWUtPnR5cGUoKSwg
b3JpZ2luKCksIHZhbHVlKTsKIH0KIAotTFZhbHVlIE91dHB1dDo6ZG91YmxlRmxvb3IoTFZhbHVl
IG9wZXJhbmQpCitMVmFsdWUgT3V0cHV0Ojpkb3VibGVGbG9vcihMVmFsdWUgdmFsdWUpCiB7Ci0g
ICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkZsb29y
LCBvcmlnaW4oKSwgb3BlcmFuZCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlRmxvb3Io
dmFsdWUtPnR5cGUoKSwgb3JpZ2luKCksIHZhbHVlKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6ZG91
YmxlVHJ1bmMoTFZhbHVlIHZhbHVlKQpAQCAtMzEyLDEzICsyOTQsMTMgQEAKICAgICAvLyBzaG91
bGQgYmUgaW52b2x2ZWQgaW4gYW55IG9wZXJhdGlvbiB0aGF0IGNyZWF0ZXMgYmxvY2tzLgogICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIyMjMKICAgICBh
dXRvIHJlc3VsdCA9IHBvd0RvdWJsZUludDMyKG1fcHJvYywgbV9ibG9jaywgb3JpZ2luKCksIHgs
IHkpOwotICAgIG1fYmxvY2sgPSByZXN1bHQuZmlyc3Q7CisgICAgYXBwZW5kVG8ocmVzdWx0LmZp
cnN0KTsKICAgICByZXR1cm4gcmVzdWx0LnNlY29uZDsKIH0KIAogTFZhbHVlIE91dHB1dDo6ZG91
YmxlU3FydChMVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxC
Mzo6VmFsdWU+KG1fcHJvYywgQjM6OlNxcnQsIG9yaWdpbigpLCB2YWx1ZSk7CisgICAgcmV0dXJu
IG1fcGVlcGhvbGUucmVkdWNlU3FydCh2YWx1ZS0+dHlwZSgpLCBvcmlnaW4oKSwgdmFsdWUpOwog
fQogCiBMVmFsdWUgT3V0cHV0Ojpkb3VibGVUb0ludChMVmFsdWUgdmFsdWUpCkBAIC0zNDcsNyAr
MzI5LDcgQEAKIAogTFZhbHVlIE91dHB1dDo6c2lnbkV4dDMyVG82NChMVmFsdWUgdmFsdWUpCiB7
Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlNF
eHQzMiwgb3JpZ2luKCksIHZhbHVlKTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VTRXh0
MzIoSW50NjQsIG9yaWdpbigpLCB2YWx1ZSk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OnNpZ25FeHQz
MlRvUHRyKExWYWx1ZSB2YWx1ZSkKQEAgLTM1OSwxNCArMzQxLDEyIEBACiB7CiAgICAgaWYgKHZh
bHVlLT50eXBlKCkgPT0gdHlwZSkKICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIGlmICh2YWx1
ZS0+aGFzSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZEludENvbnN0YW50
KG1fcHJvYywgb3JpZ2luKCksIEludDY0LCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KHZhbHVlLT5hc0ludDMyKCkpKSk7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFw
cGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlpFeHQzMiwgb3JpZ2luKCksIHZhbHVlKTsK
KyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VaRXh0MzIoSW50NjQsIG9yaWdpbigpLCB2YWx1
ZSk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmludFRvRG91YmxlKExWYWx1ZSB2YWx1ZSkKIHsKLSAg
ICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6SVRvRCwg
b3JpZ2luKCksIHZhbHVlKTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VJVG9EKERvdWJs
ZSwgb3JpZ2luKCksIHZhbHVlKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6dW5zaWduZWRUb0RvdWJs
ZShMVmFsdWUgdmFsdWUpCkBAIC0zNzgsMTkgKzM1OCwxNyBAQAogewogICAgIGlmICh2YWx1ZS0+
dHlwZSgpID09IEludDMyKQogICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgaWYgKHZhbHVlLT5o
YXNJbnQ2NCgpKQotICAgICAgICByZXR1cm4gY29uc3RJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90
Pih2YWx1ZS0+YXNJbnQ2NCgpKSk7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6
VmFsdWU+KG1fcHJvYywgQjM6OlRydW5jLCBvcmlnaW4oKSwgdmFsdWUpOworICAgIHJldHVybiBt
X3BlZXBob2xlLnJlZHVjZVRydW5jKEludDMyLCBvcmlnaW4oKSwgdmFsdWUpOwogfQogCiBMVmFs
dWUgT3V0cHV0Ojpkb3VibGVUb0Zsb2F0KExWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gbV9i
bG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RG91YmxlVG9GbG9hdCwgb3Jp
Z2luKCksIHZhbHVlKTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VEb3VibGVUb0Zsb2F0
KEZsb2F0LCBvcmlnaW4oKSwgdmFsdWUpOwogfQogCiBMVmFsdWUgT3V0cHV0OjpmbG9hdFRvRG91
YmxlKExWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpW
YWx1ZT4obV9wcm9jLCBCMzo6RmxvYXRUb0RvdWJsZSwgb3JpZ2luKCksIHZhbHVlKTsKKyAgICBy
ZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VGbG9hdFRvRG91YmxlKERvdWJsZSwgb3JpZ2luKCksIHZh
bHVlKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6bG9hZChUeXBlZFBvaW50ZXIgcG9pbnRlciwgTFR5
cGUgdHlwZSkKQEAgLTQ4NSwxMTcgKzQ2Myw4NyBAQAogCiBMVmFsdWUgT3V0cHV0OjplcXVhbChM
VmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIFRyaVN0YXRlIHJlc3VsdCA9IGxlZnQt
PmVxdWFsQ29uc3RhbnQocmlnaHQpOwotICAgIGlmIChyZXN1bHQgIT0gTWl4ZWRUcmlTdGF0ZSkK
LSAgICAgICAgcmV0dXJuIGNvbnN0Qm9vbChyZXN1bHQgPT0gVHJ1ZVRyaVN0YXRlKTsKLSAgICBy
ZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RXF1YWwsIG9y
aWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlRXF1YWwo
SW50MzIsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6Om5vdEVx
dWFsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgVHJpU3RhdGUgcmVzdWx0ID0g
bGVmdC0+bm90RXF1YWxDb25zdGFudChyaWdodCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBNaXhlZFRy
aVN0YXRlKQotICAgICAgICByZXR1cm4gY29uc3RCb29sKHJlc3VsdCA9PSBUcnVlVHJpU3RhdGUp
OwotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpO
b3RFcXVhbCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5y
ZWR1Y2VOb3RFcXVhbChJbnQzMiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVl
IE91dHB1dDo6YWJvdmUoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICBUcmlTdGF0
ZSByZXN1bHQgPSBsZWZ0LT5hYm92ZUNvbnN0YW50KHJpZ2h0KTsKLSAgICBpZiAocmVzdWx0ICE9
IE1peGVkVHJpU3RhdGUpCi0gICAgICAgIHJldHVybiBjb25zdEJvb2wocmVzdWx0ID09IFRydWVU
cmlTdGF0ZSk7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJv
YywgQjM6OkFib3ZlLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBo
b2xlLnJlZHVjZUFib3ZlKEludDMyLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFs
dWUgT3V0cHV0OjphYm92ZU9yRXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAg
ICBUcmlTdGF0ZSByZXN1bHQgPSBsZWZ0LT5hYm92ZUVxdWFsQ29uc3RhbnQocmlnaHQpOwotICAg
IGlmIChyZXN1bHQgIT0gTWl4ZWRUcmlTdGF0ZSkKLSAgICAgICAgcmV0dXJuIGNvbnN0Qm9vbChy
ZXN1bHQgPT0gVHJ1ZVRyaVN0YXRlKTsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIz
OjpWYWx1ZT4obV9wcm9jLCBCMzo6QWJvdmVFcXVhbCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsK
KyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VBYm92ZUVxdWFsKEludDMyLCBvcmlnaW4oKSwg
bGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0cHV0OjpiZWxvdyhMVmFsdWUgbGVmdCwgTFZh
bHVlIHJpZ2h0KQogewotICAgIFRyaVN0YXRlIHJlc3VsdCA9IGxlZnQtPmJlbG93Q29uc3RhbnQo
cmlnaHQpOwotICAgIGlmIChyZXN1bHQgIT0gTWl4ZWRUcmlTdGF0ZSkKLSAgICAgICAgcmV0dXJu
IGNvbnN0Qm9vbChyZXN1bHQgPT0gVHJ1ZVRyaVN0YXRlKTsKLSAgICByZXR1cm4gbV9ibG9jay0+
YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6QmVsb3csIG9yaWdpbigpLCBsZWZ0LCBy
aWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlQmVsb3coSW50MzIsIG9yaWdpbigp
LCBsZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmJlbG93T3JFcXVhbChMVmFsdWUg
bGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIFRyaVN0YXRlIHJlc3VsdCA9IGxlZnQtPmJlbG93
RXF1YWxDb25zdGFudChyaWdodCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBNaXhlZFRyaVN0YXRlKQot
ICAgICAgICByZXR1cm4gY29uc3RCb29sKHJlc3VsdCA9PSBUcnVlVHJpU3RhdGUpOwotICAgIHJl
dHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpCZWxvd0VxdWFs
LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZUJl
bG93RXF1YWwoSW50MzIsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1ZSBPdXRw
dXQ6OmdyZWF0ZXJUaGFuKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgVHJpU3Rh
dGUgcmVzdWx0ID0gbGVmdC0+Z3JlYXRlclRoYW5Db25zdGFudChyaWdodCk7Ci0gICAgaWYgKHJl
c3VsdCAhPSBNaXhlZFRyaVN0YXRlKQotICAgICAgICByZXR1cm4gY29uc3RCb29sKHJlc3VsdCA9
PSBUcnVlVHJpU3RhdGUpOwotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVl
PihtX3Byb2MsIEIzOjpHcmVhdGVyVGhhbiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKKyAgICBy
ZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VHcmVhdGVyVGhhbihJbnQzMiwgb3JpZ2luKCksIGxlZnQs
IHJpZ2h0KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6Z3JlYXRlclRoYW5PckVxdWFsKExWYWx1ZSBs
ZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgVHJpU3RhdGUgcmVzdWx0ID0gbGVmdC0+Z3JlYXRl
ckVxdWFsQ29uc3RhbnQocmlnaHQpOwotICAgIGlmIChyZXN1bHQgIT0gTWl4ZWRUcmlTdGF0ZSkK
LSAgICAgICAgcmV0dXJuIGNvbnN0Qm9vbChyZXN1bHQgPT0gVHJ1ZVRyaVN0YXRlKTsKLSAgICBy
ZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6R3JlYXRlckVx
dWFsLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVj
ZUdyZWF0ZXJFcXVhbChJbnQzMiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVl
IE91dHB1dDo6bGVzc1RoYW4oTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICBUcmlT
dGF0ZSByZXN1bHQgPSBsZWZ0LT5sZXNzVGhhbkNvbnN0YW50KHJpZ2h0KTsKLSAgICBpZiAocmVz
dWx0ICE9IE1peGVkVHJpU3RhdGUpCi0gICAgICAgIHJldHVybiBjb25zdEJvb2wocmVzdWx0ID09
IFRydWVUcmlTdGF0ZSk7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+
KG1fcHJvYywgQjM6Okxlc3NUaGFuLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVy
biBtX3BlZXBob2xlLnJlZHVjZUxlc3NUaGFuKEludDMyLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQp
OwogfQogCiBMVmFsdWUgT3V0cHV0OjpsZXNzVGhhbk9yRXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1
ZSByaWdodCkKIHsKLSAgICBUcmlTdGF0ZSByZXN1bHQgPSBsZWZ0LT5sZXNzRXF1YWxDb25zdGFu
dChyaWdodCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBNaXhlZFRyaVN0YXRlKQotICAgICAgICByZXR1
cm4gY29uc3RCb29sKHJlc3VsdCA9PSBUcnVlVHJpU3RhdGUpOwotICAgIHJldHVybiBtX2Jsb2Nr
LT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpMZXNzRXF1YWwsIG9yaWdpbigpLCBs
ZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlTGVzc0VxdWFsKEludDMy
LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0cHV0Ojpkb3VibGVFcXVh
bChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBl
bmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpFcXVhbCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0
KTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VFcXVhbChJbnQzMiwgb3JpZ2luKCksIGxl
ZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6ZG91YmxlRXF1YWxPclVub3JkZXJlZChM
VmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmRO
ZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpFcXVhbE9yVW5vcmRlcmVkLCBvcmlnaW4oKSwgbGVm
dCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZUVxdWFsT3JVbm9yZGVyZWQo
SW50MzIsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OmRvdWJs
ZU5vdEVxdWFsT3JVbm9yZGVyZWQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICBy
ZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Tm90RXF1YWws
IG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlTm90
RXF1YWwoSW50MzIsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6
OmRvdWJsZUxlc3NUaGFuKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCiB7Ci0gICAgcmV0dXJu
IG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6Okxlc3NUaGFuLCBvcmln
aW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZUxlc3NUaGFu
KEludDMyLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQogCiBMVmFsdWUgT3V0cHV0Ojpkb3Vi
bGVMZXNzVGhhbk9yRXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICByZXR1
cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6TGVzc0VxdWFsLCBv
cmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZUxlc3NF
cXVhbChJbnQzMiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKIH0KIAogTFZhbHVlIE91dHB1dDo6
ZG91YmxlR3JlYXRlclRoYW4oTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKIHsKLSAgICByZXR1
cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6R3JlYXRlclRoYW4s
IG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhvbGUucmVkdWNlR3Jl
YXRlclRoYW4oSW50MzIsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CiB9CiAKIExWYWx1ZSBPdXRw
dXQ6OmRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQog
ewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpH
cmVhdGVyRXF1YWwsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcmV0dXJuIG1fcGVlcGhv
bGUucmVkdWNlR3JlYXRlckVxdWFsKEludDMyLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOwogfQog
CiBMVmFsdWUgT3V0cHV0Ojpkb3VibGVOb3RFcXVhbEFuZE9yZGVyZWQoTFZhbHVlIGxlZnQsIExW
YWx1ZSByaWdodCkKQEAgLTYyNSwzMyArNTczLDI3IEBACiAKIExWYWx1ZSBPdXRwdXQ6OmlzWmVy
bzMyKExWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpW
YWx1ZT4obV9wcm9jLCBCMzo6RXF1YWwsIG9yaWdpbigpLCB2YWx1ZSwgaW50MzJaZXJvKTsKKyAg
ICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VFcXVhbChJbnQzMiwgb3JpZ2luKCksIHZhbHVlLCBp
bnQzMlplcm8pOwogfQogCiBMVmFsdWUgT3V0cHV0Ojpub3RaZXJvMzIoTFZhbHVlIHZhbHVlKQog
ewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpO
b3RFcXVhbCwgb3JpZ2luKCksIHZhbHVlLCBpbnQzMlplcm8pOworICAgIHJldHVybiBtX3BlZXBo
b2xlLnJlZHVjZU5vdEVxdWFsKEludDMyLCBvcmlnaW4oKSwgdmFsdWUsIGludDMyWmVybyk7CiB9
CiAKIExWYWx1ZSBPdXRwdXQ6OmlzWmVybzY0KExWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4g
bV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RXF1YWwsIG9yaWdpbigp
LCB2YWx1ZSwgaW50NjRaZXJvKTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1Y2VFcXVhbChJ
bnQzMiwgb3JpZ2luKCksIHZhbHVlLCBpbnQ2NFplcm8pOwogfQogCiBMVmFsdWUgT3V0cHV0Ojpu
b3RaZXJvNjQoTFZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8
QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpOb3RFcXVhbCwgb3JpZ2luKCksIHZhbHVlLCBpbnQ2NFpl
cm8pOworICAgIHJldHVybiBtX3BlZXBob2xlLnJlZHVjZU5vdEVxdWFsKEludDMyLCBvcmlnaW4o
KSwgdmFsdWUsIGludDY0WmVybyk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6OnNlbGVjdChMVmFsdWUg
dmFsdWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuKQogewotICAgIGlmICh2YWx1ZS0+
aGFzSW50MzIoKSkgewotICAgICAgICBpZiAodmFsdWUtPmFzSW50MzIoKSkKLSAgICAgICAgICAg
IHJldHVybiB0YWtlbjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIG5vdFRha2Vu
OwotICAgIH0KLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9j
LCBCMzo6U2VsZWN0LCBvcmlnaW4oKSwgdmFsdWUsIHRha2VuLCBub3RUYWtlbik7CisgICAgcmV0
dXJuIG1fcGVlcGhvbGUucmVkdWNlU2VsZWN0KHRha2VuLT50eXBlKCksIG9yaWdpbigpLCB2YWx1
ZSwgdGFrZW4sIG5vdFRha2VuKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6YXRvbWljWGNoZ0FkZChM
VmFsdWUgb3BlcmFuZCwgVHlwZWRQb2ludGVyIHBvaW50ZXIsIFdpZHRoIHdpZHRoKQpAQCAtNzgx
LDggKzcyMyw4IEBACiAKIExWYWx1ZSBPdXRwdXQ6OmJpdENhc3QoTFZhbHVlIHZhbHVlLCBMVHlw
ZSB0eXBlKQogewotICAgIEFTU0VSVF9VTlVTRUQodHlwZSwgdHlwZSA9PSBJbnQ2NCB8fCB0eXBl
ID09IERvdWJsZSk7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1f
cHJvYywgQjM6OkJpdHdpc2VDYXN0LCBvcmlnaW4oKSwgdmFsdWUpOworICAgIEFTU0VSVCh0eXBl
ID09IEludDY0IHx8IHR5cGUgPT0gRG91YmxlKTsKKyAgICByZXR1cm4gbV9wZWVwaG9sZS5yZWR1
Y2VCaXR3aXNlQ2FzdCh0eXBlLCBvcmlnaW4oKSwgdmFsdWUpOwogfQogCiBMVmFsdWUgT3V0cHV0
Ojpmcm91bmQoTFZhbHVlIGRvdWJsZVZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPdXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE91dHB1dC5oCShyZXZpc2lvbiAyNDQ1NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE91dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVk
ZSAiQjNDQ2FsbFZhbHVlLmgiCiAjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgogI2luY2x1ZGUg
IkIzRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSAiQjNQZWVwaG9sZU9wdGltaXplci5oIgog
I2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCiAjaW5jbHVkZSAiQjNTd2l0Y2hWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkIzV2lkdGguaCIKQEAgLTQ1Miw3ICs0NTMsNyBAQAogI3ByYWdtYSBtYXJrIC0gU3Rh
dGVzCiAjZW5kaWYKICAgICBCMzo6UHJvY2VkdXJlJiBtX3Byb2M7Ci0KKyAgICBCMzo6UGVlcGhv
bGVPcHRpbWl6ZXIgbV9wZWVwaG9sZTsKICAgICBERkc6Ok5vZGUqIG1fb3JpZ2luIHsgbnVsbHB0
ciB9OwogICAgIExCYXNpY0Jsb2NrIG1fYmxvY2sgeyBudWxscHRyIH07CiAgICAgTEJhc2ljQmxv
Y2sgbV9uZXh0QmxvY2sgeyBudWxscHRyIH07Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>