<?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>198414</bug_id>
          
          <creation_ts>2019-05-31 02:28:59 -0700</creation_ts>
          <short_desc>[WHLSL] Implement arrays and MakeArrayReference</short_desc>
          <delta_ts>2019-06-27 10:48:21 -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>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=198163</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>195681</blocked>
    
    <blocked>199197</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jonlee</cc>
    
    <cc>justin_fan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>rmorisset</cc>
    
    <cc>tsavell</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1540679</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-05-31 02:28:59 -0700</bug_when>
    <thetext>```int[1000] x;``` fails to compile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546782</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-20 18:31:22 -0700</bug_when>
    <thetext>Doing this now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547049</commentid>
    <comment_count>2</comment_count>
      <attachid>372664</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-21 18:56:52 -0700</bug_when>
    <thetext>Created attachment 372664
WIP

I think it might almost be done. Encountering some checker bugs when I have a function with the same array type in two different variables, which I need to fix.

I think I also need to make this a compile error:
```
int[42] x;
&amp;x
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547784</commentid>
    <comment_count>3</comment_count>
      <attachid>372859</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-25 13:48:13 -0700</bug_when>
    <thetext>Created attachment 372859
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548249</commentid>
    <comment_count>4</comment_count>
      <attachid>372859</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-06-26 17:21:15 -0700</bug_when>
    <thetext>Comment on attachment 372859
patch

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

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:635
&gt; +        m_stringBuilder.append(makeString(mangledTypeName, &apos; &apos;, variableName, &quot; = { &quot;, takeLastValue(), &quot;, 1 };\n&quot;));

I know you didn’t change this, but shouldn’t this be 0 if the original pointer is null?

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:-178
&gt; -            stringBuilder.append(makeString(&quot;    return &quot;, arrayParameterType.numElements(), &quot;u;\n&quot;));

The “u” suffix was to make it an unsigned, in case it’s &gt; 2B

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:343
&gt; +    return &amp;*iterator;

Isn’t returning a pointer pointing into the array a use after free if something else gets added to the array before you dereference the pointer? I think that’s why I made it an index instead of a pointer.

&gt; LayoutTests/webgpu/whlsl-huge-array.html:97
&gt; +    shouldBe(&quot;resultsInt32Array[0]&quot;, &quot;1&quot;);

Can we update these tests to use the pattern that caides tests to pass if the machine doesn’t support Meta? I’ve migrated all the existing tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548250</commentid>
    <comment_count>5</comment_count>
      <attachid>372859</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-26 17:24:24 -0700</bug_when>
    <thetext>Comment on attachment 372859
patch

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

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:635
&gt;&gt; +        m_stringBuilder.append(makeString(mangledTypeName, &apos; &apos;, variableName, &quot; = { &quot;, takeLastValue(), &quot;, 1 };\n&quot;));
&gt; 
&gt; I know you didn’t change this, but shouldn’t this be 0 if the original pointer is null?

Nice catch. I&apos;ll add a test.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:-178
&gt;&gt; -            stringBuilder.append(makeString(&quot;    return &quot;, arrayParameterType.numElements(), &quot;u;\n&quot;));
&gt; 
&gt; The “u” suffix was to make it an unsigned, in case it’s &gt; 2B

That shouldn&apos;t matter.

e.g, uint(-1) == UINT_MAX.

Casting from int to uint is a nop

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:343
&gt;&gt; +    return &amp;*iterator;
&gt; 
&gt; Isn’t returning a pointer pointing into the array a use after free if something else gets added to the array before you dereference the pointer? I think that’s why I made it an index instead of a pointer.

We&apos;re not returning a pointer into the vector. We&apos;re calling &quot;operator&amp;&quot; on a UniqueRef

&gt;&gt; LayoutTests/webgpu/whlsl-huge-array.html:97
&gt;&gt; +    shouldBe(&quot;resultsInt32Array[0]&quot;, &quot;1&quot;);
&gt; 
&gt; Can we update these tests to use the pattern that caides tests to pass if the machine doesn’t support Meta? I’ve migrated all the existing tests.

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548383</commentid>
    <comment_count>6</comment_count>
      <attachid>373006</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-27 00:35:12 -0700</bug_when>
    <thetext>Created attachment 373006
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548392</commentid>
    <comment_count>7</comment_count>
      <attachid>373006</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-06-27 01:20:01 -0700</bug_when>
    <thetext>Comment on attachment 373006
patch for landing

Clearing flags on attachment: 373006

Committed r246875: &lt;https://trac.webkit.org/changeset/246875&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548393</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-06-27 01:20:03 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548394</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-06-27 01:23:43 -0700</bug_when>
    <thetext>&lt;rdar://problem/52242516&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548492</commentid>
    <comment_count>10</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2019-06-27 09:12:03 -0700</bug_when>
    <thetext>It looks like the changes in https://trac.webkit.org/changeset/246875/webkit
Broke two tests:
webgpu/whlsl-huge-array.html
webgpu/whlsl-make-array-reference.html

History:
http://webkit-test-results.webkit.org/dashboards/flakiness_dashboard.html#showAllRuns=true&amp;tests=webgpu%2Fwhlsl-huge-array.html%20webgpu%2Fwhlsl-make-array-reference.html

Diff:
--- /Volumes/Data/slave/highsierra-debug-tests-wk2/build/layout-test-results/webgpu/whlsl-huge-array-expected.txt
+++ /Volumes/Data/slave/highsierra-debug-tests-wk2/build/layout-test-results/webgpu/whlsl-huge-array-actual.txt
@@ -1,4 +1,4 @@
-PASS 
+FAIL 
 PASS successfullyParsed is true
 
 TEST COMPLETE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548505</commentid>
    <comment_count>11</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-27 10:03:42 -0700</bug_when>
    <thetext>(In reply to Truitt Savell from comment #10)
&gt; It looks like the changes in https://trac.webkit.org/changeset/246875/webkit
&gt; Broke two tests:
&gt; webgpu/whlsl-huge-array.html
&gt; webgpu/whlsl-make-array-reference.html
&gt; 
&gt; History:
&gt; http://webkit-test-results.webkit.org/dashboards/flakiness_dashboard.
&gt; html#showAllRuns=true&amp;tests=webgpu%2Fwhlsl-huge-array.html%20webgpu%2Fwhlsl-
&gt; make-array-reference.html
&gt; 
&gt; Diff:
&gt; ---
&gt; /Volumes/Data/slave/highsierra-debug-tests-wk2/build/layout-test-results/
&gt; webgpu/whlsl-huge-array-expected.txt
&gt; +++
&gt; /Volumes/Data/slave/highsierra-debug-tests-wk2/build/layout-test-results/
&gt; webgpu/whlsl-huge-array-actual.txt
&gt; @@ -1,4 +1,4 @@
&gt; -PASS 
&gt; +FAIL 
&gt;  PASS successfullyParsed is true
&gt;  
&gt;  TEST COMPLETE

We&apos;re crashing LLVM in selection DAG:

Process:               MTLCompilerService [65343]
Path:                  /System/Library/Frameworks/Metal.framework/Versions/A/XPCServices/MTLCompilerService.xpc/Contents/MacOS/MTLCompilerService
Identifier:            MTLCompilerService
Version:               125.30 (125.30)
Code Type:             X86-64 (Native)
Parent Process:        ??? [1]
Responsible:           com.apple.WebKit.WebContent.Development [65337]
User ID:               501

Date/Time:             2019-06-27 09:33:20.165 -0700
OS Version:            Mac OS X 10.13.6 (17G7024)
Report Version:        12
Anonymous UUID:        618B3AF5-9517-D230-2179-6355C81F3E3C


Time Awake Since Boot: 3600000 seconds

System Integrity Protection: enabled

Crashed Thread:        4

Exception Type:        EXC_BAD_ACCESS (SIGSEGV)
Exception Codes:       KERN_INVALID_ADDRESS at 0x0000000000000028
Exception Note:        EXC_CORPSE_NOTIFY

Termination Signal:    Segmentation fault: 11
Termination Reason:    Namespace SIGNAL, Code 0xb
Terminating Process:   exc handler [0]

VM Regions Near 0x28:
--&gt; 
    __TEXT                 00000001028de000-00000001028e0000 [    8K] r-x/rwx SM=COW  /System/Library/Frameworks/Metal.framework/Versions/A/XPCServices/MTLCompilerService.xpc/Contents/MacOS/MTLCompilerService

Thread 0:
0   libsystem_kernel.dylib        	0x00007fff7496cd9a __semwait_signal_nocancel + 10
1   libsystem_c.dylib             	0x00007fff74871e77 nanosleep$NOCANCEL + 188
2   libsystem_c.dylib             	0x00007fff74898830 sleep$NOCANCEL + 41
3   libdispatch.dylib             	0x00007fff747eec58 _dispatch_queue_cleanup2 + 107
4   libsystem_pthread.dylib       	0x00007fff74b361aa _pthread_tsd_cleanup + 534
5   libsystem_pthread.dylib       	0x00007fff74b35ee9 _pthread_exit + 79
6   libsystem_pthread.dylib       	0x00007fff74b36945 pthread_exit + 30
7   libdispatch.dylib             	0x00007fff747eebc5 dispatch_main + 110
8   libxpc.dylib                  	0x00007fff74b76d1a _xpc_objc_main + 487
9   libxpc.dylib                  	0x00007fff74b759ca xpc_main + 433
10  com.apple.MTLCompilerService  	0x00000001028df135 main + 130
11  libdyld.dylib                 	0x00007fff7481c015 start + 1

Thread 1:: Dispatch queue: com.apple.root.default-qos.overcommit
0   libsystem_kernel.dylib        	0x00007fff7496d022 __sigsuspend_nocancel + 10
1   libdispatch.dylib             	0x00007fff747eecd5 _dispatch_sigsuspend + 21
2   libdispatch.dylib             	0x00007fff747eecc0 _dispatch_sig_thread + 53

Thread 2:
0   libsystem_kernel.dylib        	0x00007fff7496d28a __workq_kernreturn + 10
1   libsystem_pthread.dylib       	0x00007fff74b3420e _pthread_wqthread + 1552
2   libsystem_pthread.dylib       	0x00007fff74b33be9 start_wqthread + 13

Thread 3:
0   libsystem_kernel.dylib        	0x00007fff7496d28a __workq_kernreturn + 10
1   libsystem_pthread.dylib       	0x00007fff74b34009 _pthread_wqthread + 1035
2   libsystem_pthread.dylib       	0x00007fff74b33be9 start_wqthread + 13

Thread 4 Crashed:
0   libLLVM.dylib                 	0x00007fff635e72fe llvm::SelectionDAG::getAtomic(unsigned int, llvm::SDLoc const&amp;, llvm::EVT, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::MachineMemOperand*, llvm::AtomicOrdering, llvm::SynchronizationScope) + 90
1   libLLVM.dylib                 	0x00007fff6355bb83 0x7fff62f70000 + 6208387
2   libLLVM.dylib                 	0x00007fff63556292 0x7fff62f70000 + 6185618
3   libLLVM.dylib                 	0x00007fff6356dda9 0x7fff62f70000 + 6282665
4   libLLVM.dylib                 	0x00007fff63570fdd llvm::SelectionDAG::LegalizeTypes() + 57
5   libLLVM.dylib                 	0x00007fff635f9517 llvm::SelectionDAGISel::CodeGenAndEmitDAG() + 343
6   libLLVM.dylib                 	0x00007fff635f8a40 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&amp;) + 2848
7   libLLVM.dylib                 	0x00007fff635f7792 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&amp;) + 1186
8   libLLVM.dylib                 	0x00007fff6314496b llvm::MachineFunctionPass::runOnFunction(llvm::Function&amp;) + 99
9   libLLVM.dylib                 	0x00007fff632969d1 llvm::FPPassManager::runOnFunction(llvm::Function&amp;) + 279
10  libLLVM.dylib                 	0x00007fff63296b7b llvm::FPPassManager::runOnModule(llvm::Module&amp;) + 49
11  libLLVM.dylib                 	0x00007fff63296ea5 llvm::legacy::PassManagerImpl::run(llvm::Module&amp;) + 577
12  libMTLIntelCompilerPlugin.dylib	0x0000000102a92668 MTLIntelCompiler::generateIGIL(llvm::Module*, MTLIntelFunctionType, std::__1::basic_string&lt;char, std::__1::char_traits&lt;char&gt;, std::__1::allocator&lt;char&gt; &gt;&amp;, std::__1::basic_string&lt;char, std::__1::char_traits&lt;char&gt;, std::__1::allocator&lt;char&gt; &gt;&amp;, bool, std::__1::basic_string&lt;char, std::__1::char_traits&lt;char&gt;, std::__1::allocator&lt;char&gt; &gt;&amp;) + 710
13  libMTLIntelCompilerPlugin.dylib	0x0000000102a863eb MTLCompilerBuildRequest + 288
14  com.apple.MTLCompiler         	0x00007fff67617387 MTLCompilerObject::buildRequest(unsigned int, unsigned int, void const*, unsigned long, void (unsigned int, void const*, unsigned long, char const*) block_pointer) + 10535
15  com.apple.MTLCompilerService  	0x00000001028df0aa compileRequestMain + 52
16  com.apple.MTLCompilerService  	0x00000001028df473 invocation function for block in MTLCompilerServiceHandleEvent(NSObject&lt;OS_xpc_object&gt;*) + 746
17  libxpc.dylib                  	0x00007fff74b71773 _xpc_connection_call_event_handler + 35
18  libxpc.dylib                  	0x00007fff74b6ff31 _xpc_connection_mach_event + 1092
19  libdispatch.dylib             	0x00007fff747e7da9 _dispatch_client_callout4 + 9
20  libdispatch.dylib             	0x00007fff747e8062 _dispatch_mach_msg_invoke + 488
21  libdispatch.dylib             	0x00007fff747f707a _dispatch_queue_serial_drain + 222
22  libdispatch.dylib             	0x00007fff747e6972 _dispatch_mach_invoke + 534
23  libdispatch.dylib             	0x00007fff747f707a _dispatch_queue_serial_drain + 222
24  libdispatch.dylib             	0x00007fff747ea166 _dispatch_queue_invoke + 373
25  libdispatch.dylib             	0x00007fff747f7f0d _dispatch_root_queue_drain_deferred_wlh + 332
26  libdispatch.dylib             	0x00007fff747fbd21 _dispatch_workloop_worker_thread + 880
27  libsystem_pthread.dylib       	0x00007fff74b33fd2 _pthread_wqthread + 980
28  libsystem_pthread.dylib       	0x00007fff74b33be9 start_wqthread + 13

Thread 5:
0   libsystem_kernel.dylib        	0x00007fff7496d28a __workq_kernreturn + 10
1   libsystem_pthread.dylib       	0x00007fff74b34009 _pthread_wqthread + 1035
2   libsystem_pthread.dylib       	0x00007fff74b33be9 start_wqthread + 13

Thread 4 crashed with X86 Thread State (64-bit):
  rax: 0x0000000000000000  rbx: 0x0000000000000029  rcx: 0x0000000000000000  rdx: 0x00007000092d73f0
  rdi: 0x00007fd74a608310  rsi: 0x0000000000000029  rbp: 0x00007000092d73a0  rsp: 0x00007000092d72d0
   r8: 0x0000000000000000   r9: 0x0000000000000000  r10: 0x0000000000000001  r11: 0x0000000000000007
  r12: 0x00007000092d73b0  r13: 0x0000000000000000  r14: 0x00007fd74a608310  r15: 0x00007000092d73c0
  rip: 0x00007fff635e72fe  rfl: 0x0000000000010287  cr2: 0x0000000000000028
  
Logical CPU:     4
Error Code:      0x00000004
Trap Number:     14


Binary Images:
       0x1028de000 -        0x1028dfff7  com.apple.MTLCompilerService (125.30 - 125.30) &lt;3C03D3C7-92FD-3ED7-A734-57AD085B67D4&gt; /System/Library/Frameworks/Metal.framework/Versions/A/XPCServices/MTLCompilerService.xpc/Contents/MacOS/MTLCompilerService
       0x102a85000 -        0x102aa4fff  libMTLIntelCompilerPlugin.dylib (10.36.25.1) &lt;C8C90E58-E021-3BB9-A70F-18E61154A15A&gt; /System/Library/Extensions/AppleIntelHD4000GraphicsMTLDriver.bundle/Contents/MacOS/libMTLIntelCompilerPlugin.dylib
       0x102ae5000 -        0x102f83ff7  iCBE.dylib (10.36.25.1) &lt;033C01D3-CC67-3854-891A-0BE3EC7F18D8&gt; /System/Library/Extensions/AppleIntelHD4000GraphicsGLDriver.bundle/Contents/MacOS/iCBE.dylib
       0x104e4d000 -        0x104e97acf  dyld (551.5) &lt;30B355CB-35BA-3112-AA76-4E46CD45F699&gt; /usr/lib/dyld
    0x7fff46285000 -     0x7fff463e3ff7  libIGIL-Metal.dylib (10.36.25.1) &lt;01ADDA7F-18F1-3185-9E9C-AACC641884C9&gt; /System/Library/Extensions/AppleIntelGraphicsShared.bundle/Contents/MacOS/libIGIL-Metal.dylib
    0x7fff48ace000 -     0x7fff48acefff  com.apple.Accelerate (1.11 - Accelerate 1.11) &lt;2EF00EFE-06E8-3082-85C3-2988B422A19D&gt; /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate
    0x7fff48ae7000 -     0x7fff49235ffb  com.apple.vImage (8.1 - ???) &lt;56C275C1-459F-37CD-BF29-2E6D81C29E53&gt; /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/vImage
    0x7fff49236000 -     0x7fff493d6ff3  libBLAS.dylib (1211.50.2) &lt;93259222-2D94-333D-A1EB-09C6FC4A64B4&gt; /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
    0x7fff493d7000 -     0x7fff49411fef  libBNNS.dylib (38.1) &lt;0AAE0109-71D5-3B26-8401-3E62DDF97624&gt; /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBNNS.dylib
    0x7fff49412000 -     0x7fff497ebff7  libLAPACK.dylib (1211.50.2) &lt;70781D0B-AEAD-33EB-9900-10DC30F37D61&gt; /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib
    0x7fff497ec000 -     0x7fff49802ff7  libLinearAlgebra.dylib (1211.50.2) &lt;FB5A35EA-D636-3D69-AB53-B67E1EB8134C&gt; /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLinearAlgebra.dylib
    0x7fff49803000 -     0x7fff49808ff3  libQuadrature.dylib (3) &lt;3D6BF66A-55B2-3692-BAC7-DEB0C676ED29&gt; /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libQuadrature.dylib
    0x7fff49809000 -     0x7fff49889fff  libSparse.dylib (79.50.2) &lt;0DC25CDD-F8C1-3D6E-B472-8B060708424F&gt; /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparse.dylib
    0x7fff4988a000 -     0x7fff4989cff7  libSparseBLAS.dylib (1211.50.2) &lt;994A7D7E-FA3B-3943-A59C-8150B9AF86BE&gt; /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparseBLAS.dylib
    0x7fff4989d000 -     0x7fff49a10fe7  libvDSP.dylib (622.50.5) &lt;4BF310F4-31A3-3DA5-80E4-7F8014AD380B&gt; /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib
    0x7fff49a11000 -     0x7fff49ac7fef  libvMisc.dylib (622.50.5) &lt;88143A88-4FDE-35A1-85FE-54FF0C2A9E43&gt; /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib
    0x7fff49ac8000 -     0x7fff49ac8fff  com.apple.Accelerate.vecLib (3.11 - vecLib 3.11) &lt;880DEF40-389A-3F56-ACA1-B62A5BC57E59&gt; /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/vecLib
    0x7fff4ac6c000 -     0x7fff4ac6cfff  com.apple.ApplicationServices (48 - 50) &lt;63B0C61F-CFE8-3884-853F-E6FB6CD84A44&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices
    0x7fff4ac6d000 -     0x7fff4acd3fff  com.apple.ApplicationServices.ATS (377 - 445.5) &lt;703CE7E4-426A-35C0-A229-F140F30F5340&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS
    0x7fff4ad6c000 -     0x7fff4ae8efff  libFontParser.dylib (222.1.7) &lt;9C4CEFB4-0F08-3B60-BD50-0120A37F6EA2&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontParser.dylib
    0x7fff4ae8f000 -     0x7fff4aed9ff7  libFontRegistry.dylib (221.5) &lt;8F68EA59-C8EE-3FA3-BD19-0F1A58441440&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontRegistry.dylib
    0x7fff4b01b000 -     0x7fff4b01fff3  com.apple.ColorSyncLegacy (4.13.0 - 1) &lt;A5FB2694-1559-34A8-A3D3-2029F68A63CA&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSyncLegacy.framework/Versions/A/ColorSyncLegacy
    0x7fff4b0bf000 -     0x7fff4b111ffb  com.apple.HIServices (1.22 - 625) &lt;78A1FB4F-A39C-3159-B285-600C997335FB&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices
    0x7fff4b112000 -     0x7fff4b120fff  com.apple.LangAnalysis (1.7.0 - 1.7.0) &lt;B65FF7E6-E9B5-34D8-8CA7-63D415A8A9A6&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis
    0x7fff4b121000 -     0x7fff4b16dfff  com.apple.print.framework.PrintCore (13.4 - 503.2) &lt;B90C67C1-0292-3CEC-885D-F1882CD104BE&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore
    0x7fff4b16e000 -     0x7fff4b1a8fff  com.apple.QD (3.12 - 404.2) &lt;38B20AFF-9D54-3B52-A6DC-C0D71380AA5F&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD
    0x7fff4b1a9000 -     0x7fff4b1b5fff  com.apple.speech.synthesis.framework (7.8.1 - 7.8.1) &lt;A08DE016-C8F2-3B0E-BD34-15959D13DBF0&gt; /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis
    0x7fff4b1b6000 -     0x7fff4b444ff7  com.apple.audio.toolbox.AudioToolbox (1.14 - 1.14) &lt;287960E1-605E-3789-9237-FDC3F3EC4000&gt; /System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox
    0x7fff4b769000 -     0x7fff4bb04ff7  com.apple.CFNetwork (902.3.1 - 902.3.1) &lt;4C012538-BB8A-32F3-AACA-011092BEFAB1&gt; /System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork
    0x7fff4c039000 -     0x7fff4c0f2fff  com.apple.ColorSync (4.13.0 - 3325) &lt;D283C285-447D-3258-A7E4-59532123B8FF&gt; /System/Library/Frameworks/ColorSync.framework/Versions/A/ColorSync
    0x7fff4c27f000 -     0x7fff4c312ff7  com.apple.audio.CoreAudio (4.3.0 - 4.3.0) &lt;A862985C-536F-3E01-83CA-E510B2204DA6&gt; /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio
    0x7fff4c3a3000 -     0x7fff4c707ff3  com.apple.CoreData (120 - 851) &lt;8D605466-8676-3D45-9A4B-8980971551C3&gt; /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData
    0x7fff4c708000 -     0x7fff4c7ebfff  com.apple.CoreDisplay (99.14 - 99.14) &lt;A1B91ADD-828D-33A0-8A92-CC3F83DF89D0&gt; /System/Library/Frameworks/CoreDisplay.framework/Versions/A/CoreDisplay
    0x7fff4c7ec000 -     0x7fff4cc86fff  com.apple.CoreFoundation (6.9 - 1454.96) &lt;B4B4E782-6FF9-39DF-9B6A-FCB4B04FA47F&gt; /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
    0x7fff4cc88000 -     0x7fff4d2b6ff7  com.apple.CoreGraphics (2.0 - 1161.21.2) &lt;9027DB33-59F0-3CD2-8DBF-67B249894A2F&gt; /System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics
    0x7fff4d2b8000 -     0x7fff4d5a7fff  com.apple.CoreImage (13.0.0 - 579.5) &lt;E40914F8-1937-3D52-903D-2916003CA6E8&gt; /System/Library/Frameworks/CoreImage.framework/Versions/A/CoreImage
    0x7fff4d97c000 -     0x7fff4d97cfff  com.apple.CoreServices (822.37 - 822.37) &lt;58ADA4D7-2FC0-32AC-BB75-DD8834454ACC&gt; /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices
    0x7fff4d97d000 -     0x7fff4d9f1ffb  com.apple.AE (735.2 - 735.2) &lt;690A6F47-1306-371F-B257-783D8F83EA9E&gt; /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE
    0x7fff4d9f2000 -     0x7fff4dcc9fff  com.apple.CoreServices.CarbonCore (1178.4.1 - 1178.4.1) &lt;009E1ABC-A66B-3355-9E6C-0D4E9B7BEA4C&gt; /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore
    0x7fff4dcca000 -     0x7fff4dcfefff  com.apple.DictionaryServices (1.2 - 284.2) &lt;6505B075-41C3-3C62-A4C3-85CE3F6825CD&gt; /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices
    0x7fff4dcff000 -     0x7fff4dd07ffb  com.apple.CoreServices.FSEvents (1239.50.1 - 1239.50.1) &lt;3637CEC7-DF0E-320E-9634-44A442925C65&gt; /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/FSEvents
    0x7fff4dd08000 -     0x7fff4dec6ff7  com.apple.LaunchServices (822.37 - 822.37) &lt;5FD5F15D-0D10-302E-AF17-AD2A3B9B5926&gt; /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices
    0x7fff4dec7000 -     0x7fff4df77fff  com.apple.Metadata (10.7.0 - 1191.7) &lt;3DD530A7-E104-3469-98BB-20449834B2FE&gt; /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata
    0x7fff4df78000 -     0x7fff4dfd8fff  com.apple.CoreServices.OSServices (822.37 - 822.37) &lt;789FD38A-B612-3A66-8EE8-27A344FAD7A7&gt; /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices
    0x7fff4dfd9000 -     0x7fff4e047fff  com.apple.SearchKit (1.4.0 - 1.4.0) &lt;3662545A-B1CF-3079-BDCD-C83855CEFEEE&gt; /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit
    0x7fff4e048000 -     0x7fff4e06cffb  com.apple.coreservices.SharedFileList (71.21 - 71.21) &lt;1B5228EF-D869-3A50-A373-7F4B0289FADD&gt; /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SharedFileList.framework/Versions/A/SharedFileList
    0x7fff4e30d000 -     0x7fff4e45dfff  com.apple.CoreText (352.0 - 578.22) &lt;6129F39D-284D-3BBF-8999-7854AB61C01C&gt; /System/Library/Frameworks/CoreText.framework/Versions/A/CoreText
    0x7fff4e45e000 -     0x7fff4e498fff  com.apple.CoreVideo (1.8 - 0.0) &lt;86CCC036-51BB-3DD1-9601-D93798BCCD0F&gt; /System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo
    0x7fff4e79f000 -     0x7fff4e7a4fff  com.apple.DiskArbitration (2.7 - 2.7) &lt;2F628584-8177-3894-92CE-9CA6089B61C6&gt; /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration
    0x7fff4e965000 -     0x7fff4ed2bff3  com.apple.Foundation (6.9 - 1454.96) &lt;0DD43942-B183-3A39-BCDE-E3CCA0E4DE59&gt; /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
    0x7fff4ed9c000 -     0x7fff4edccff3  com.apple.GSS (4.0 - 2.0) &lt;62F1A2A7-EBDB-3CAB-8306-4DA9EFA70E81&gt; /System/Library/Frameworks/GSS.framework/Versions/A/GSS
    0x7fff4f042000 -     0x7fff4f0ddfff  com.apple.framework.IOKit (2.0.2 - 1445.71.6) &lt;9337E730-48FF-306C-B8A2-5DFCDBECD9F6&gt; /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
    0x7fff4f0df000 -     0x7fff4f0e6fff  com.apple.IOSurface (211.16 - 211.16) &lt;3A727DBA-324D-3ED5-9665-573D091A9B67&gt; /System/Library/Frameworks/IOSurface.framework/Versions/A/IOSurface
    0x7fff4f13d000 -     0x7fff4f2bafff  com.apple.ImageIO.framework (3.3.0 - 1739.3.1) &lt;3564ADD2-803F-35CC-AB7F-6F41241010FF&gt; /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
    0x7fff4f2bb000 -     0x7fff4f2bfffb  libGIF.dylib (1739.3.1) &lt;3CB9E6D5-FF76-37E5-921D-57F2C36D8CFC&gt; /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libGIF.dylib
    0x7fff4f2c0000 -     0x7fff4f3a7ff7  libJP2.dylib (1739.3.1) &lt;2B233EA0-59CC-3D7D-81AF-F471448F5271&gt; /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJP2.dylib
    0x7fff4f3a8000 -     0x7fff4f3cbfff  libJPEG.dylib (1739.3.1) &lt;4B3C1085-9177-3872-BCAF-965CBCD6A906&gt; /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib
    0x7fff4f6a8000 -     0x7fff4f6ceff3  libPng.dylib (1739.3.1) &lt;734D972E-0BD6-3DAC-A465-43A8AF9E0BC8&gt; /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib
    0x7fff4f6cf000 -     0x7fff4f6d1ff3  libRadiance.dylib (1739.3.1) &lt;99967613-358F-377D-BEC2-C52CC2B18811&gt; /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libRadiance.dylib
    0x7fff4f6d2000 -     0x7fff4f71fff3  libTIFF.dylib (1739.3.1) &lt;BEAC3497-7D7F-3A09-B232-07E9792ACF88&gt; /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib
    0x7fff505d9000 -     0x7fff505f2ff7  com.apple.Kerberos (3.0 - 1) &lt;F86DCCDF-93C1-38B3-82C2-477C12E8EE6D&gt; /System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos
    0x7fff50fd4000 -     0x7fff51055fff  com.apple.Metal (125.30 - 125.30) &lt;659DF560-9B89-3E8A-88AC-4C0BCB4578B4&gt; /System/Library/Frameworks/Metal.framework/Versions/A/Metal
    0x7fff51072000 -     0x7fff5108dfff  com.apple.MetalPerformanceShaders.MPSCore (1.0 - 1) &lt;AD754E8F-CA00-3878-9AF3-208C224A230B&gt; /System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSCore.framework/Versions/A/MPSCore
    0x7fff5108e000 -     0x7fff510fdfef  com.apple.MetalPerformanceShaders.MPSImage (1.0 - 1) &lt;338B7779-E608-3D68-8A07-2ACC11299744&gt; /System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSImage.framework/Versions/A/MPSImage
    0x7fff510fe000 -     0x7fff51122fff  com.apple.MetalPerformanceShaders.MPSMatrix (1.0 - 1) &lt;9CE072D7-853B-3939-9645-7EB951376B87&gt; /System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSMatrix.framework/Versions/A/MPSMatrix
    0x7fff51123000 -     0x7fff5120aff7  com.apple.MetalPerformanceShaders.MPSNeuralNetwork (1.0 - 1) &lt;0DE891AD-27E5-38FF-AEC8-4A95356C4357&gt; /System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSNeuralNetwork.framework/Versions/A/MPSNeuralNetwork
    0x7fff5120b000 -     0x7fff5120bff7  com.apple.MetalPerformanceShaders.MetalPerformanceShaders (1.0 - 1) &lt;2D2D261C-50B0-32F9-BF9A-5C01382BB528&gt; /System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/MetalPerformanceShaders
    0x7fff5220a000 -     0x7fff52216ffb  com.apple.NetFS (6.0 - 4.0) &lt;471DD96F-FA2E-3FE9-9746-2519A6780D1A&gt; /System/Library/Frameworks/NetFS.framework/Versions/A/NetFS
    0x7fff55008000 -     0x7fff55062ff7  com.apple.opencl (2.8.24 - 2.8.24) &lt;1104D870-CE68-3240-81D7-C58D8A24EF0A&gt; /System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL
    0x7fff55063000 -     0x7fff5507fffb  com.apple.CFOpenDirectory (10.13 - 207.50.1) &lt;29F55F7B-379F-3053-8FF3-5C6675A3DD4D&gt; /System/Library/Frameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory
    0x7fff55080000 -     0x7fff5508bfff  com.apple.OpenDirectory (10.13 - 207.50.1) &lt;F895547D-4915-353F-9C1E-E95172BA803B&gt; /System/Library/Frameworks/OpenDirectory.framework/Versions/A/OpenDirectory
    0x7fff5620a000 -     0x7fff5620cfff  libCVMSPluginSupport.dylib (16.7.4) &lt;6846D939-478C-3AE3-9DCD-CD4F4CD05409&gt; /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCVMSPluginSupport.dylib
    0x7fff5620d000 -     0x7fff56212ffb  libCoreFSCache.dylib (162.9) &lt;1BBC6180-FCC0-31EB-8C0A-A1287A9A87C3&gt; /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreFSCache.dylib
    0x7fff56213000 -     0x7fff56217fff  libCoreVMClient.dylib (162.9) &lt;8F26B9F9-75DB-3292-9DE8-D9E023B2690C&gt; /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreVMClient.dylib
    0x7fff56218000 -     0x7fff56221ff3  libGFXShared.dylib (16.7.4) &lt;6187AD8B-1CD2-3775-84CD-76A0EA8BCDD4&gt; /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGFXShared.dylib
    0x7fff56222000 -     0x7fff5622dfff  libGL.dylib (16.7.4) &lt;2BB333D3-5C61-33DF-8545-06DF2D08B83D&gt; /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib
    0x7fff5622e000 -     0x7fff56269fe7  libGLImage.dylib (16.7.4) &lt;4DA003CE-0B74-3FE4-808C-B2FBCE517EB4&gt; /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib
    0x7fff563d8000 -     0x7fff56416ffb  libGLU.dylib (16.7.4) &lt;BCB09CD8-EB0E-38FA-8B5A-9E29532EE364&gt; /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib
    0x7fff56d8e000 -     0x7fff56d9dff3  com.apple.opengl (16.7.4 - 16.7.4) &lt;7B71A596-B6D8-335A-B7CA-8684D83B9C0E&gt; /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL
    0x7fff57bec000 -     0x7fff57e38ff7  com.apple.QuartzCore (1.11 - 584.64.2) &lt;DDA39332-DE09-3737-A332-0002AE05DD39&gt; /System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore
    0x7fff5866d000 -     0x7fff58998fff  com.apple.security (7.0 - 58286.70.14) &lt;FE163834-A993-3D19-8D7E-9546B4F999B6&gt; /System/Library/Frameworks/Security.framework/Versions/A/Security
    0x7fff58999000 -     0x7fff58a25ff7  com.apple.securityfoundation (6.0 - 55185.50.5) &lt;B5F933AE-BF0B-36CB-B2D4-3C07DD952BCE&gt; /System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation
    0x7fff58a57000 -     0x7fff58a5bffb  com.apple.xpc.ServiceManagement (1.0 - 1) &lt;E3146BBE-7F32-3605-AD2B-54C0E70759DC&gt; /System/Library/Frameworks/ServiceManagement.framework/Versions/A/ServiceManagement
    0x7fff58e00000 -     0x7fff58e70ff3  com.apple.SystemConfiguration (1.17 - 1.17) &lt;CD4A4C66-7886-3323-A3B9-0C8952500856&gt; /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration
    0x7fff5bd6d000 -     0x7fff5be00fff  com.apple.APFS (1.0 - 1) &lt;7CC77BF1-881B-357A-9E05-A73C661F830E&gt; /System/Library/PrivateFrameworks/APFS.framework/Versions/A/APFS
    0x7fff5cba9000 -     0x7fff5cbf1ff3  com.apple.AppleJPEG (1.0 - 1) &lt;8DD410CB-76A1-3F22-9A9F-0491FA0CEB4A&gt; /System/Library/PrivateFrameworks/AppleJPEG.framework/Versions/A/AppleJPEG
    0x7fff5cc2c000 -     0x7fff5cc54fff  com.apple.applesauce (1.0 - ???) &lt;CCA8B094-1BCE-3AE3-A0A7-D544C818DE36&gt; /System/Library/PrivateFrameworks/AppleSauce.framework/Versions/A/AppleSauce
    0x7fff5d477000 -     0x7fff5d47eff7  com.apple.coreservices.BackgroundTaskManagement (1.0 - 57.1) &lt;51A41CA3-DB1D-3380-993E-99C54AEE518E&gt; /System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/BackgroundTaskManagement
    0x7fff5eec0000 -     0x7fff5eec9ff3  com.apple.CommonAuth (4.0 - 2.0) &lt;FBBD852E-FFFE-396B-A343-2C5DB7A3D819&gt; /System/Library/PrivateFrameworks/CommonAuth.framework/Versions/A/CommonAuth
    0x7fff5f9dd000 -     0x7fff5f9edff7  com.apple.CoreEmoji (1.0 - 69.3) &lt;A4357F5C-0C38-3A61-B456-D7321EB2CEE5&gt; /System/Library/PrivateFrameworks/CoreEmoji.framework/Versions/A/CoreEmoji
    0x7fff60b95000 -     0x7fff60b99ffb  com.apple.DSExternalDisplay (3.1 - 380) &lt;901B7F6D-376A-3848-99D0-170C4D00F776&gt; /System/Library/PrivateFrameworks/DSExternalDisplay.framework/Versions/A/DSExternalDisplay
    0x7fff61c64000 -     0x7fff62092fff  com.apple.vision.FaceCore (3.3.2 - 3.3.2) &lt;B574FE33-4A41-3611-9738-388EBAF03E37&gt; /System/Library/PrivateFrameworks/FaceCore.framework/Versions/A/FaceCore
    0x7fff625c2000 -     0x7fff625c4fff  libGPUCompiler.dylib (802.4.8) &lt;F0E20243-21D0-3C69-AFAD-469E68605E37&gt; /System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/3802/Libraries/libGPUCompiler.dylib
    0x7fff625c5000 -     0x7fff62614ff7  libGPUCompilerImpl.dylib (802.4.8) &lt;791D837A-ABF1-3D10-BA82-28C8A4FF05C5&gt; /System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/3802/Libraries/libGPUCompilerImpl.dylib
    0x7fff62615000 -     0x7fff62f6fffb  libGPUCompilerImplLazy.dylib (802.4.8) &lt;DBC983B8-C301-33C7-8087-74AC307DC8C3&gt; /System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/3802/Libraries/libGPUCompilerImplLazy.dylib
    0x7fff62f70000 -     0x7fff63cedfff  libLLVM.dylib (802.4.8) &lt;366FEF47-8B80-36C2-841F-A57D027A47B2&gt; /System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/3802/Libraries/libLLVM.dylib
    0x7fff6535a000 -     0x7fff6535ffff  com.apple.GPUWrangler (3.20.0 - 3.20.0) &lt;F73FEE8E-9D02-3AC6-BE94-841175614A3D&gt; /System/Library/PrivateFrameworks/GPUWrangler.framework/Versions/A/GPUWrangler
    0x7fff660d5000 -     0x7fff660e4fff  com.apple.GraphVisualizer (1.0 - 5) &lt;B993B8A2-5700-3DFC-9EB7-4CCEE8F959F1&gt; /System/Library/PrivateFrameworks/GraphVisualizer.framework/Versions/A/GraphVisualizer
    0x7fff66167000 -     0x7fff661dbfff  com.apple.Heimdal (4.0 - 2.0) &lt;9F4D7008-944E-3A7C-8E58-A9F7D8497C32&gt; /System/Library/PrivateFrameworks/Heimdal.framework/Versions/A/Heimdal
    0x7fff66aeb000 -     0x7fff66af2ff7  com.apple.IOAccelerator (378.28 - 378.28) &lt;BE5CBEAA-314E-348B-BE85-7E4B2E4C42FF&gt; /System/Library/PrivateFrameworks/IOAccelerator.framework/Versions/A/IOAccelerator
    0x7fff66af6000 -     0x7fff66b0dfff  com.apple.IOPresentment (1.0 - 35.1) &lt;53B47F2A-9A9A-33F5-ADCB-FF766292B93A&gt; /System/Library/PrivateFrameworks/IOPresentment.framework/Versions/A/IOPresentment
    0x7fff67197000 -     0x7fff6728cff7  com.apple.LanguageModeling (1.0 - 159.5.3) &lt;7F0AC200-E3DD-39FB-8A95-00DD70B66A9F&gt; /System/Library/PrivateFrameworks/LanguageModeling.framework/Versions/A/LanguageModeling
    0x7fff6728d000 -     0x7fff672cffff  com.apple.Lexicon-framework (1.0 - 33.5) &lt;DC94CF9E-1EB4-3C0E-B298-CA1190885276&gt; /System/Library/PrivateFrameworks/Lexicon.framework/Versions/A/Lexicon
    0x7fff672d3000 -     0x7fff672daff7  com.apple.LinguisticData (1.0 - 238.3) &lt;49A54649-1021-3DBD-99B8-1B2EDFFA5378&gt; /System/Library/PrivateFrameworks/LinguisticData.framework/Versions/A/LinguisticData
    0x7fff675f8000 -     0x7fff675f9fff  libMTLCompilerHelper.dylib (125.30) &lt;AD6EF70A-90E9-3B3E-997F-C390CA66728E&gt; /System/Library/PrivateFrameworks/MTLCompiler.framework/Versions/3802/Libraries/libMTLCompilerHelper.dylib
    0x7fff675fa000 -     0x7fff67630ff7  com.apple.MTLCompiler (125.30 - 125.30) &lt;BA03E903-1D78-3E75-B778-83AAB832D615&gt; /System/Library/PrivateFrameworks/MTLCompiler.framework/Versions/3802/MTLCompiler
    0x7fff67fec000 -     0x7fff68055ff7  com.apple.gpusw.MetalTools (1.0 - 1) &lt;2C0FE0FB-FAC2-3906-A46D-CF68392EC549&gt; /System/Library/PrivateFrameworks/MetalTools.framework/Versions/A/MetalTools
    0x7fff68276000 -     0x7fff682a0ffb  com.apple.MultitouchSupport.framework (1614.1 - 1614.1) &lt;A0709B43-FA9E-3617-8E7A-D68CDFAB2167&gt; /System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/A/MultitouchSupport
    0x7fff68507000 -     0x7fff68512fff  com.apple.NetAuth (6.2 - 6.2) &lt;2CFA1228-61A1-3708-988D-30499A1D6A9F&gt; /System/Library/PrivateFrameworks/NetAuth.framework/Versions/A/NetAuth
    0x7fff6e553000 -     0x7fff6e7effff  com.apple.SkyLight (1.600.0 - 312.103.11) &lt;3E03D943-2BA4-3658-B014-1675DD191696&gt; /System/Library/PrivateFrameworks/SkyLight.framework/Versions/A/SkyLight
    0x7fff70164000 -     0x7fff7016cff7  com.apple.TCC (1.0 - 1) &lt;E1EB7272-FE6F-39AB-83CA-B2B5F2A88D9B&gt; /System/Library/PrivateFrameworks/TCC.framework/Versions/A/TCC
    0x7fff71e13000 -     0x7fff71e15ffb  com.apple.loginsupport (1.0 - 1) &lt;D1232C1B-80EA-3DF8-9466-013695D0846E&gt; /System/Library/PrivateFrameworks/login.framework/Versions/A/Frameworks/loginsupport.framework/Versions/A/loginsupport
    0x7fff71f7c000 -     0x7fff71fafff7  libclosured.dylib (551.5) &lt;112BC241-6626-3848-8DD8-B34B5B6F7ABC&gt; /usr/lib/closure/libclosured.dylib
    0x7fff72069000 -     0x7fff720a2ff7  libCRFSuite.dylib (41) &lt;FE5EDB68-2593-3C2E-BBAF-1C52D206F296&gt; /usr/lib/libCRFSuite.dylib
    0x7fff720a3000 -     0x7fff720aefff  libChineseTokenizer.dylib (28) &lt;53633C9B-A3A8-36F7-A53C-432D802F4BB8&gt; /usr/lib/libChineseTokenizer.dylib
    0x7fff72140000 -     0x7fff72141ff3  libDiagnosticMessagesClient.dylib (104) &lt;9712E980-76EE-3A89-AEA6-DF4BAF5C0574&gt; /usr/lib/libDiagnosticMessagesClient.dylib
    0x7fff72178000 -     0x7fff72342ff3  libFosl_dynamic.dylib (17.8) &lt;413FDC7A-28B1-3966-9E25-9536E0164B4F&gt; /usr/lib/libFosl_dynamic.dylib
    0x7fff72362000 -     0x7fff72369fff  libMatch.1.dylib (31) &lt;74AB4815-11D1-3930-A559-BD6550CE5865&gt; /usr/lib/libMatch.1.dylib
    0x7fff7237a000 -     0x7fff7237afff  libOpenScriptingUtil.dylib (174) &lt;610F0242-7CE5-3C86-951B-B646562694AF&gt; /usr/lib/libOpenScriptingUtil.dylib
    0x7fff724b6000 -     0x7fff724b7ffb  libSystem.B.dylib (1252.50.4) &lt;237634FA-3FEA-3C76-8236-DE684D9894A2&gt; /usr/lib/libSystem.B.dylib
    0x7fff7254a000 -     0x7fff7254afff  libapple_crypto.dylib (109.50.14) &lt;48BA2E76-BF2F-3522-A54E-D7FB7EAF7A57&gt; /usr/lib/libapple_crypto.dylib
    0x7fff7254b000 -     0x7fff72561ff7  libapple_nghttp2.dylib (1.24) &lt;01402BC4-4822-3676-9C80-50D83F816424&gt; /usr/lib/libapple_nghttp2.dylib
    0x7fff72562000 -     0x7fff7258cff3  libarchive.2.dylib (54) &lt;8FC28DD8-E315-3C3E-95FE-D1D2CBE49888&gt; /usr/lib/libarchive.2.dylib
    0x7fff72694000 -     0x7fff72694ff3  libauto.dylib (187) &lt;A05C7900-F8C7-3E75-8D3F-909B40C19717&gt; /usr/lib/libauto.dylib
    0x7fff72695000 -     0x7fff7274dff3  libboringssl.dylib (109.50.14) &lt;E6813F87-B5E4-3F7F-A725-E6A7F2BD02EC&gt; /usr/lib/libboringssl.dylib
    0x7fff7274e000 -     0x7fff7275eff3  libbsm.0.dylib (39) &lt;6BC96A72-AFBE-34FD-91B1-748A530D8AE6&gt; /usr/lib/libbsm.0.dylib
    0x7fff7275f000 -     0x7fff7276cffb  libbz2.1.0.dylib (38) &lt;0A5086BB-4724-3C14-979D-5AD4F26B5B45&gt; /usr/lib/libbz2.1.0.dylib
    0x7fff7276d000 -     0x7fff727c3fff  libc++.1.dylib (400.9) &lt;7D3DACCC-3804-393C-ABC1-1A580FD00CB6&gt; /usr/lib/libc++.1.dylib
    0x7fff727c4000 -     0x7fff727e8ff7  libc++abi.dylib (400.8.2) &lt;EF5E37D7-11D9-3530-BE45-B986612D13E2&gt; /usr/lib/libc++abi.dylib
    0x7fff727ea000 -     0x7fff727fafff  libcmph.dylib (6) &lt;890DEC4C-4334-393C-8B56-7C8560BBED9D&gt; /usr/lib/libcmph.dylib
    0x7fff727fb000 -     0x7fff72812fd3  libcompression.dylib (47.60.2) &lt;CC7ACB0A-49CD-3564-978F-49F843186F27&gt; /usr/lib/libcompression.dylib
    0x7fff72abd000 -     0x7fff72ad5ff7  libcoretls.dylib (155.50.1) &lt;D350052E-DC4D-3185-ADBA-BA48EDCEE955&gt; /usr/lib/libcoretls.dylib
    0x7fff72ad6000 -     0x7fff72ad7ff3  libcoretls_cfhelpers.dylib (155.50.1) &lt;B297F5D8-F2FE-3566-A752-E9D998B9C039&gt; /usr/lib/libcoretls_cfhelpers.dylib
    0x7fff72fa8000 -     0x7fff72ffeff3  libcups.2.dylib (462.2.5) &lt;EA944DD1-0B60-32E9-8FB4-BE642D2E7352&gt; /usr/lib/libcups.2.dylib
    0x7fff7313e000 -     0x7fff7313efff  libenergytrace.dylib (16) &lt;A92AB8B8-B986-3CE6-980D-D55090FEF387&gt; /usr/lib/libenergytrace.dylib
    0x7fff73175000 -     0x7fff7317aff3  libheimdal-asn1.dylib (520.50.8) &lt;6C10CD33-2920-340F-A98B-E1A465A40D03&gt; /usr/lib/libheimdal-asn1.dylib
    0x7fff731a6000 -     0x7fff73297ff7  libiconv.2.dylib (51.50.1) &lt;2FEC9707-3FAF-3828-A50D-8605086D060F&gt; /usr/lib/libiconv.2.dylib
    0x7fff73298000 -     0x7fff734bfffb  libicucore.A.dylib (59181.0.1) &lt;2CE6205F-D375-3BF5-AA0A-3254BC4773D0&gt; /usr/lib/libicucore.A.dylib
    0x7fff7350c000 -     0x7fff7350dfff  liblangid.dylib (128) &lt;39C39393-0D05-301D-93B2-F224FC4949AA&gt; /usr/lib/liblangid.dylib
    0x7fff7350e000 -     0x7fff73527ffb  liblzma.5.dylib (10) &lt;3D419A50-961F-37D2-8A01-3DC7AB7B8D18&gt; /usr/lib/liblzma.5.dylib
    0x7fff73528000 -     0x7fff7353eff7  libmarisa.dylib (9) &lt;D6D2D55D-1D2E-3442-B152-B18803C0ABB4&gt; /usr/lib/libmarisa.dylib
    0x7fff735ef000 -     0x7fff73817ff7  libmecabra.dylib (779.7.6) &lt;F462F170-E872-3D09-B219-973D5E99C09F&gt; /usr/lib/libmecabra.dylib
    0x7fff7381c000 -     0x7fff7384cffb  libncurses.5.4.dylib (53) &lt;030DF747-F71B-367A-83EE-2F30B7947929&gt; /usr/lib/libncurses.5.4.dylib
    0x7fff739ef000 -     0x7fff73b6afff  libnetwork.dylib (1229.70.2) &lt;E185D902-AC7F-3044-87C0-AE2887C59CE7&gt; /usr/lib/libnetwork.dylib
    0x7fff73bf1000 -     0x7fff73fe23b7  libobjc.A.dylib (723) &lt;BEEA51E2-1C4D-3672-87F6-F267B4AC6221&gt; /usr/lib/libobjc.A.dylib
    0x7fff73ff5000 -     0x7fff73ff9fff  libpam.2.dylib (22) &lt;7B4D2CE2-1438-387A-9802-5CEEFBF26F86&gt; /usr/lib/libpam.2.dylib
    0x7fff73ffc000 -     0x7fff74030fff  libpcap.A.dylib (79.20.1) &lt;FA13918B-A247-3181-B256-9B852C7BA316&gt; /usr/lib/libpcap.A.dylib
    0x7fff740af000 -     0x7fff740cbffb  libresolv.9.dylib (65) &lt;E8F3415B-4472-3202-8901-41FD87981DB2&gt; /usr/lib/libresolv.9.dylib
    0x7fff740cd000 -     0x7fff74106ff3  libsandbox.1.dylib (765.70.1) &lt;D6521DD5-48E0-3465-863D-6B3E24A645B8&gt; /usr/lib/libsandbox.1.dylib
    0x7fff7411c000 -     0x7fff742a9ff7  libsqlite3.dylib (274.8.1) &lt;B70A2908-E0F7-364E-952A-1D2D19787B89&gt; /usr/lib/libsqlite3.dylib
    0x7fff7447d000 -     0x7fff744ddff3  libusrtcp.dylib (1229.70.2) &lt;1E065228-D0E3-3808-9405-894056C6BEC0&gt; /usr/lib/libusrtcp.dylib
    0x7fff744de000 -     0x7fff744e1ffb  libutil.dylib (51.20.1) &lt;216D18E5-0BAF-3EAF-A38E-F6AC37CBABD9&gt; /usr/lib/libutil.dylib
    0x7fff744e2000 -     0x7fff744efff3  libxar.1.dylib (417.1) &lt;351781D5-3CCF-320F-BB5A-4DFCC1CCD31D&gt; /usr/lib/libxar.1.dylib
    0x7fff744f3000 -     0x7fff745dafff  libxml2.2.dylib (31.13) &lt;8C12B82A-66FD-330C-9BEA-AAC090C7076A&gt; /usr/lib/libxml2.2.dylib
    0x7fff745db000 -     0x7fff74603fff  libxslt.1.dylib (15.12) &lt;4A5E011D-8B29-3135-A52B-9A9070ABD752&gt; /usr/lib/libxslt.1.dylib
    0x7fff74604000 -     0x7fff74616ffb  libz.1.dylib (70) &lt;48C67CFC-940D-3857-8DAD-857774605352&gt; /usr/lib/libz.1.dylib
    0x7fff746b2000 -     0x7fff746b6ff7  libcache.dylib (80) &lt;092479CB-1008-3A83-BECF-E115F24D13C1&gt; /usr/lib/system/libcache.dylib
    0x7fff746b7000 -     0x7fff746c1ff3  libcommonCrypto.dylib (60118.50.1) &lt;029F5985-9B6E-3DCB-9B96-FD007678C6A7&gt; /usr/lib/system/libcommonCrypto.dylib
    0x7fff746c2000 -     0x7fff746c9fff  libcompiler_rt.dylib (62) &lt;968B8E3F-3681-3230-9D78-BB8732024F6E&gt; /usr/lib/system/libcompiler_rt.dylib
    0x7fff746ca000 -     0x7fff746d3ffb  libcopyfile.dylib (146.50.5) &lt;3885083D-50D8-3EEC-B481-B2E605180D7F&gt; /usr/lib/system/libcopyfile.dylib
    0x7fff746d4000 -     0x7fff74759ffb  libcorecrypto.dylib (562.70.3) &lt;37AF8EC6-BF34-3D15-BC3A-A9B98F2427D4&gt; /usr/lib/system/libcorecrypto.dylib
    0x7fff747e1000 -     0x7fff7481aff7  libdispatch.dylib (913.60.3) &lt;BF368549-2DFB-3530-B4CB-31D5EDAC4F2F&gt; /usr/lib/system/libdispatch.dylib
    0x7fff7481b000 -     0x7fff74838ff7  libdyld.dylib (551.5) &lt;49BF9E96-8297-30CF-8AA6-128CC14054B2&gt; /usr/lib/system/libdyld.dylib
    0x7fff74839000 -     0x7fff74839ffb  libkeymgr.dylib (28) &lt;E34E283E-90FA-3C59-B48E-1277CDB9CDCE&gt; /usr/lib/system/libkeymgr.dylib
    0x7fff7483a000 -     0x7fff74846ff3  libkxld.dylib (4570.71.45) &lt;03FEE7FE-74F1-3EAE-99AE-DEB3EC414AEF&gt; /usr/lib/system/libkxld.dylib
    0x7fff74847000 -     0x7fff74847ff7  liblaunch.dylib (1205.70.12) &lt;4950A0B3-5EE1-3F9A-8B1A-94FB85FCCA2C&gt; /usr/lib/system/liblaunch.dylib
    0x7fff74848000 -     0x7fff7484cffb  libmacho.dylib (906) &lt;1902A611-081A-3452-B11E-EBD1B166E831&gt; /usr/lib/system/libmacho.dylib
    0x7fff7484d000 -     0x7fff7484fff3  libquarantine.dylib (86) &lt;26C0BA22-8F93-3A07-9A4E-C8D53D2CE42E&gt; /usr/lib/system/libquarantine.dylib
    0x7fff74850000 -     0x7fff74851ff3  libremovefile.dylib (45) &lt;711E18B2-5BBE-3211-A916-56740C27D17A&gt; /usr/lib/system/libremovefile.dylib
    0x7fff74852000 -     0x7fff74869fff  libsystem_asl.dylib (356.70.1) &lt;39E46A6F-B228-3E78-B83E-1779F9707A39&gt; /usr/lib/system/libsystem_asl.dylib
    0x7fff7486a000 -     0x7fff7486afff  libsystem_blocks.dylib (67) &lt;17303FDF-0D2D-3963-B05E-B4DF63052D47&gt; /usr/lib/system/libsystem_blocks.dylib
    0x7fff7486b000 -     0x7fff748f4ff7  libsystem_c.dylib (1244.50.9) &lt;1187BFE8-4576-3247-8177-481554E1F9E7&gt; /usr/lib/system/libsystem_c.dylib
    0x7fff748f5000 -     0x7fff748f8ffb  libsystem_configuration.dylib (963.50.9) &lt;A5DC1AFC-2C3E-3113-BE20-48F96064DB0F&gt; /usr/lib/system/libsystem_configuration.dylib
    0x7fff748f9000 -     0x7fff748fcffb  libsystem_coreservices.dylib (51) &lt;486000D3-D8CB-3BE7-8EE5-8BF380DE6DF7&gt; /usr/lib/system/libsystem_coreservices.dylib
    0x7fff748fd000 -     0x7fff748fefff  libsystem_darwin.dylib (1244.50.9) &lt;09C21A4A-9EE0-388B-A9D9-DFF8F6758791&gt; /usr/lib/system/libsystem_darwin.dylib
    0x7fff748ff000 -     0x7fff74905ff7  libsystem_dnssd.dylib (878.70.3) &lt;E117689D-8CF3-3010-9EED-B71C033BF8D7&gt; /usr/lib/system/libsystem_dnssd.dylib
    0x7fff74906000 -     0x7fff7494fff7  libsystem_info.dylib (517.30.1) &lt;AB634A98-B8AA-3804-8436-38261FC8EC4D&gt; /usr/lib/system/libsystem_info.dylib
    0x7fff74950000 -     0x7fff74976ff7  libsystem_kernel.dylib (4570.71.45) &lt;939FEA3D-15A3-33E5-9476-789AF120C330&gt; /usr/lib/system/libsystem_kernel.dylib
    0x7fff74977000 -     0x7fff749c2fcb  libsystem_m.dylib (3147.50.1) &lt;17570F46-566C-39FC-BEF6-635A355DD549&gt; /usr/lib/system/libsystem_m.dylib
    0x7fff749c3000 -     0x7fff749e2ff7  libsystem_malloc.dylib (140.50.7) &lt;A45A484C-3BDE-3BC4-A219-726E3CB332D9&gt; /usr/lib/system/libsystem_malloc.dylib
    0x7fff749e3000 -     0x7fff74b13ff7  libsystem_network.dylib (1229.70.2) &lt;5E86B2DE-9E15-3354-8714-4094ED5F698D&gt; /usr/lib/system/libsystem_network.dylib
    0x7fff74b14000 -     0x7fff74b1effb  libsystem_networkextension.dylib (767.70.2) &lt;9DC03712-552D-3AEE-9519-B5ED70980B70&gt; /usr/lib/system/libsystem_networkextension.dylib
    0x7fff74b1f000 -     0x7fff74b28ff3  libsystem_notify.dylib (172) &lt;08012EC0-2CD2-34BE-BF93-E7F56491299A&gt; /usr/lib/system/libsystem_notify.dylib
    0x7fff74b29000 -     0x7fff74b30ff7  libsystem_platform.dylib (161.50.1) &lt;6355EE2D-5456-3CA8-A227-B96E8F1E2AF8&gt; /usr/lib/system/libsystem_platform.dylib
    0x7fff74b31000 -     0x7fff74b3cfff  libsystem_pthread.dylib (301.50.1) &lt;0E51CCBA-91F2-34E1-BF2A-FEEFD3D321E4&gt; /usr/lib/system/libsystem_pthread.dylib
    0x7fff74b3d000 -     0x7fff74b40fff  libsystem_sandbox.dylib (765.70.1) &lt;553DFCC6-9D31-3B9C-AB7C-30F6F265786D&gt; /usr/lib/system/libsystem_sandbox.dylib
    0x7fff74b41000 -     0x7fff74b42ff3  libsystem_secinit.dylib (30) &lt;DE8D14E8-A276-3FF8-AE13-77F7040F33C1&gt; /usr/lib/system/libsystem_secinit.dylib
    0x7fff74b43000 -     0x7fff74b4aff7  libsystem_symptoms.dylib (820.60.3) &lt;70753784-099A-3E44-9E80-7364C9901CDA&gt; /usr/lib/system/libsystem_symptoms.dylib
    0x7fff74b4b000 -     0x7fff74b5efff  libsystem_trace.dylib (829.70.1) &lt;3A6CB706-8CA6-3616-8AFC-14AAD7FAF187&gt; /usr/lib/system/libsystem_trace.dylib
    0x7fff74b60000 -     0x7fff74b65ff7  libunwind.dylib (35.3) &lt;BEF3FB49-5604-3B5F-82B5-332B80023AC3&gt; /usr/lib/system/libunwind.dylib
    0x7fff74b66000 -     0x7fff74b93ff7  libxpc.dylib (1205.70.12) &lt;7B82608D-ED82-35C1-B13F-99855E25D6DC&gt; /usr/lib/system/libxpc.dylib

External Modification Summary:
  Calls made by other processes targeting this process:
    task_for_pid: 0
    thread_create: 0
    thread_set_state: 0
  Calls made by this process:
    task_for_pid: 0
    thread_create: 0
    thread_set_state: 0
  Calls made by all processes on this machine:
    task_for_pid: 3354307
    thread_create: 0
    thread_set_state: 1488

VM Region Summary:
ReadOnly portion of Libraries: Total=329.9M resident=0K(0%) swapped_out_or_unallocated=329.9M(100%)
Writable regions: Total=72.4M written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=72.4M(100%)
 
                                VIRTUAL   REGION 
REGION TYPE                        SIZE    COUNT (non-coalesced) 
===========                     =======  ======= 
Activity Tracing                   256K        2 
Kernel Alloc Once                    8K        2 
MALLOC                            61.3M       16 
MALLOC guard page                   16K        5 
STACK GUARD                       56.0M        7 
Stack                             10.5M        7 
__DATA                            16.8M      193 
__FONT_DATA                          4K        2 
__LINKEDIT                       195.6M        6 
__TEXT                           134.4M      192 
__UNICODE                          560K        2 
mapped file                       6412K        2 
shared memory                       44K        5 
===========                     =======  ======= 
TOTAL                            481.7M      428</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548522</commentid>
    <comment_count>12</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-27 10:48:21 -0700</bug_when>
    <thetext>(In reply to Truitt Savell from comment #10)
&gt; It looks like the changes in https://trac.webkit.org/changeset/246875/webkit
&gt; Broke two tests:
&gt; webgpu/whlsl-huge-array.html
&gt; webgpu/whlsl-make-array-reference.html
&gt; 
&gt; History:
&gt; http://webkit-test-results.webkit.org/dashboards/flakiness_dashboard.
&gt; html#showAllRuns=true&amp;tests=webgpu%2Fwhlsl-huge-array.html%20webgpu%2Fwhlsl-
&gt; make-array-reference.html
&gt; 
&gt; Diff:
&gt; ---
&gt; /Volumes/Data/slave/highsierra-debug-tests-wk2/build/layout-test-results/
&gt; webgpu/whlsl-huge-array-expected.txt
&gt; +++
&gt; /Volumes/Data/slave/highsierra-debug-tests-wk2/build/layout-test-results/
&gt; webgpu/whlsl-huge-array-actual.txt
&gt; @@ -1,4 +1,4 @@
&gt; -PASS 
&gt; +FAIL 
&gt;  PASS successfullyParsed is true
&gt;  
&gt;  TEST COMPLETE

We&apos;re disabling WEBGPU for now on High Sierra:
https://trac.webkit.org/changeset/246888/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372664</attachid>
            <date>2019-06-21 18:56:52 -0700</date>
            <delta_ts>2019-06-25 13:48:13 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>15376</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQcmVwYXJlLmNwcAkocmV2aXNpb24gMjQ2NzA0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyAr
NjAsNyBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcEFT
VEJlZm9yZUVhY2hQYXNzID0gZmFsc2U7CiBzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcEFTVEFm
dGVyUGFyc2luZyA9IGZhbHNlOwotc3RhdGljIGNvbnN0ZXhwciBib29sIGR1bXBBU1RBdEVuZCA9
IGZhbHNlOworc3RhdGljIGNvbnN0ZXhwciBib29sIGR1bXBBU1RBdEVuZCA9IHRydWU7CiBzdGF0
aWMgY29uc3RleHByIGJvb2wgYWx3YXlzRHVtcFBhc3NGYWlsdXJlcyA9IGZhbHNlOwogc3RhdGlj
IGNvbnN0ZXhwciBib29sIGR1bXBQYXNzRmFpbHVyZSA9IGR1bXBBU1RCZWZvcmVFYWNoUGFzcyB8
fCBkdW1wQVNUQWZ0ZXJQYXJzaW5nIHx8IGR1bXBBU1RBdEVuZCB8fCBhbHdheXNEdW1wUGFzc0Zh
aWx1cmVzOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFByb3BlcnR5UmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5jcHAJKHJldmlzaW9uIDI0Njcw
NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlS
ZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDEzICs5NSwxMiBAQCBzdHJ1Y3QgQW5k
ZXJDYWxsQXJndW1lbnRSZXN1bHQgewogfTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIEV4cHJlc3Np
b25Db25zdHJ1Y3RvciwgdHlwZW5hbWUgVHlwZUNvbnN0cnVjdG9yPgotc3RhdGljIE9wdGlvbmFs
PEFuZGVyQ2FsbEFyZ3VtZW50UmVzdWx0PiB3cmFwQW5kZXJDYWxsQXJndW1lbnQoVW5pcXVlUmVm
PEFTVDo6RXhwcmVzc2lvbj4mIGV4cHJlc3Npb24sIGJvb2wgYW5kZXJGdW5jdGlvbiwgYm9vbCB0
aHJlYWRBbmRlckZ1bmN0aW9uKQorc3RhdGljIE9wdGlvbmFsPEFuZGVyQ2FsbEFyZ3VtZW50UmVz
dWx0PiB3cmFwQW5kZXJDYWxsQXJndW1lbnQoVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mIGV4
cHJlc3Npb24sIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiBiYXNlVHlwZSwgYm9vbCBhbmRl
ckZ1bmN0aW9uLCBib29sIHRocmVhZEFuZGVyRnVuY3Rpb24pCiB7CiAgICAgaWYgKGF1dG8gYWRk
cmVzc1NwYWNlID0gZXhwcmVzc2lvbi0+dHlwZUFubm90YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNl
KCkpIHsKICAgICAgICAgaWYgKCFhbmRlckZ1bmN0aW9uKQogICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKICAgICAgICAgYXV0byBvcmlnaW4gPSBleHByZXNzaW9uLT5vcmlnaW4oKTsK
LSAgICAgICAgYXV0byBiYXNlVHlwZSA9IGV4cHJlc3Npb24tPnJlc29sdmVkVHlwZSgpLmNsb25l
KCk7CiAgICAgICAgIGF1dG8gbWFrZUFycmF5UmVmZXJlbmNlID0gbWFrZVVuaXF1ZVJlZjxFeHBy
ZXNzaW9uQ29uc3RydWN0b3I+KExleGVyOjpUb2tlbihvcmlnaW4pLCBXVEZNb3ZlKGV4cHJlc3Np
b24pKTsKICAgICAgICAgbWFrZUFycmF5UmVmZXJlbmNlLT5zZXRUeXBlKG1ha2VVbmlxdWVSZWY8
VHlwZUNvbnN0cnVjdG9yPihXVEZNb3ZlKG9yaWdpbiksICphZGRyZXNzU3BhY2UsIFdURk1vdmUo
YmFzZVR5cGUpKSk7CiAgICAgICAgIG1ha2VBcnJheVJlZmVyZW5jZS0+c2V0VHlwZUFubm90YXRp
b24oQVNUOjpSaWdodFZhbHVlKCkpOwpAQCAtMTA5LDcgKzEwOCw2IEBAIHN0YXRpYyBPcHRpb25h
bDxBbmRlckNhbGxBcmd1bWVudFJlc3VsdD4KICAgICB9CiAgICAgaWYgKHRocmVhZEFuZGVyRnVu
Y3Rpb24pIHsKICAgICAgICAgYXV0byBvcmlnaW4gPSBleHByZXNzaW9uLT5vcmlnaW4oKTsKLSAg
ICAgICAgYXV0byBiYXNlVHlwZSA9IGV4cHJlc3Npb24tPnJlc29sdmVkVHlwZSgpLmNsb25lKCk7
CiAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1ha2VVbmlxdWVSZWY8QVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4ob3JpZ2luKSwgQVNUOjpRdWFsaWZpZXJz
KCksIGJhc2VUeXBlLT5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxv
cHQpOwogCiAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2UxID0gbWFrZVVuaXF1ZVJlZjxB
U1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKHZhcmlh
YmxlRGVjbGFyYXRpb24pKTsKQEAgLTE1MSw5ICsxNDksOSBAQCBzdGF0aWMgT3B0aW9uYWw8QW5k
ZXJDYWxsQXJndW1lbnRSZXN1bHQ+CiAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNl
VHlwZT4odW5uYW1lZFR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIHt7IFdURk1vdmUoZXhwcmVz
c2lvbiksIFdURjo6bnVsbG9wdCwgV2hpY2hBbmRlcjo6QW5kZXIgfX07CiAgICAgICAgIGlmIChp
czxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIHdyYXBB
bmRlckNhbGxBcmd1bWVudDxBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIEFTVDo6
QXJyYXlSZWZlcmVuY2VUeXBlPihleHByZXNzaW9uLCBhbmRlckZ1bmN0aW9uLCB0aHJlYWRBbmRl
ckZ1bmN0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiB3cmFwQW5kZXJDYWxsQXJndW1lbnQ8QVNU
OjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4o
ZXhwcmVzc2lvbiwgZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKS50eXBlKCku
Y2xvbmUoKSwgYW5kZXJGdW5jdGlvbiwgdGhyZWFkQW5kZXJGdW5jdGlvbik7CiAgICAgfQotICAg
IHJldHVybiB3cmFwQW5kZXJDYWxsQXJndW1lbnQ8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24s
IEFTVDo6UG9pbnRlclR5cGU+KGV4cHJlc3Npb24sIGFuZGVyRnVuY3Rpb24sIHRocmVhZEFuZGVy
RnVuY3Rpb24pOworICAgIHJldHVybiB3cmFwQW5kZXJDYWxsQXJndW1lbnQ8QVNUOjpNYWtlUG9p
bnRlckV4cHJlc3Npb24sIEFTVDo6UG9pbnRlclR5cGU+KGV4cHJlc3Npb24sIGV4cHJlc3Npb24t
PnJlc29sdmVkVHlwZSgpLmNsb25lKCksIGFuZGVyRnVuY3Rpb24sIHRocmVhZEFuZGVyRnVuY3Rp
b24pOwogfQogCiBzdGF0aWMgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IHNl
dHRlckNhbGwoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbiwgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZWxldmFudEFuZGVyLCBVbmlxdWVS
ZWY8QVNUOjpFeHByZXNzaW9uPiYmIG5ld1ZhbHVlLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPFVuaXF1
ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KCk+JiBsZWZ0VmFsdWVGYWN0b3J5LCBBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24qIGluZGV4VmFyaWFibGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeS50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0
CShyZXZpc2lvbiAyNDY3MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFN0YW5kYXJkTGlicmFyeS50eHQJKHdvcmtpbmcgY29weSkKQEAgLTc5Miw2ICs3OTIs
MTIgQEAgaW50IG9wZXJhdG9yKysoaW50IHZhbHVlKSB7CiBpbnQgb3BlcmF0b3ItLShpbnQgdmFs
dWUpIHsKICAgICByZXR1cm4gdmFsdWUgLSAxOwogfQordWludCBvcGVyYXRvcisrKHVpbnQgdmFs
dWUpIHsKKyAgICByZXR1cm4gdmFsdWUgKyAxOworfQordWludCBvcGVyYXRvci0tKHVpbnQgdmFs
dWUpIHsKKyAgICByZXR1cm4gdmFsdWUgLSAxOworfQogCiBuYXRpdmUgdXNob3J0IFNhbXBsZShU
ZXh0dXJlMUQ8dXNob3J0Piwgc2FtcGxlciwgZmxvYXQgbG9jYXRpb24pOwogbmF0aXZlIHVzaG9y
dCBTYW1wbGUoVGV4dHVyZTFEQXJyYXk8dXNob3J0Piwgc2FtcGxlciwgZmxvYXQyIGxvY2F0aW9u
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
RnVuY3Rpb25Xcml0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCShyZXZpc2lvbiAyNDY3
MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1
bmN0aW9uV3JpdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsOCBAQAogI2luY2x1
ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KIAorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
bmFtZXNwYWNlIFdITFNMIHsKQEAgLTYyOCwxNiArNjMwLDIyIEBAIHZvaWQgRnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZUFycmF5
UmVmZXJlbmNlRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSk7CiAgICAgLy8gRklYTUU6IFRoaXMgbmVl
ZHMgdG8gYmUgbWFkZSB0byB3b3JrLiBJdCBwcm9iYWJseSBzaG91bGQgYmUgdXNpbmcgdGhlIGxh
c3QgbGVmdFZhbHVlIHRvby4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTk4ODM4Ci0gICAgYXV0byBsVmFsdWUgPSB0YWtlTGFzdFZhbHVlKCk7CiAgICAg
YXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKworICAgIGRh
dGFMb2dMbigiVmlzaXRpbmcgYXJyYXkgcmVmZXJlbmNlOiAiLCBSYXdQb2ludGVyKCZtYWtlQXJy
YXlSZWZlcmVuY2VFeHByZXNzaW9uKSk7CisgICAgZGF0YUxvZ0xuKCJSZXNvbHZpbmcgdHlwZTog
IiwgUmF3UG9pbnRlcigmbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUo
KSkpOworCiAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7Ci0g
ICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24u
cmVzb2x2ZWRUeXBlKCkpKQorICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPihtYWtlQXJyYXlS
ZWZlcmVuY2VFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnJlc29sdmVkVHlwZSgpKSkKKyAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2
YXJpYWJsZU5hbWUsICIgPSB7ICIsIHRha2VMYXN0VmFsdWUoKSwgIiwgMSB9O1xuIikpOworICAg
IGVsc2UgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPihtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9u
LmxlZnRWYWx1ZSgpLnJlc29sdmVkVHlwZSgpKSkgeworICAgICAgICBhdXRvIGxWYWx1ZSA9IHRh
a2VMYXN0TGVmdFZhbHVlKCk7CisgICAgICAgIGF1dG8mIGFycmF5VHlwZSA9IGRvd25jYXN0PEFT
VDo6QXJyYXlUeXBlPihtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnJl
c29sdmVkVHlwZSgpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5n
KG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSB7ICIsIGxWYWx1ZSwgIi0+
ZGF0YSgpLCAiLCBhcnJheVR5cGUubnVtRWxlbWVudHMoKSwgIiB9O1xuIikpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGF1dG8gbFZhbHVlID0gdGFrZUxhc3RMZWZ0VmFsdWUoKTsKICAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2
YXJpYWJsZU5hbWUsICIgPSB7ICIsIGxWYWx1ZSwgIiwgMSB9O1xuIikpOwotICAgIGVsc2UgaWYg
KGlzPEFTVDo6QXJyYXlUeXBlPihtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVk
VHlwZSgpKSkgewotICAgICAgICBhdXRvJiBhcnJheVR5cGUgPSBkb3duY2FzdDxBU1Q6OkFycmF5
VHlwZT4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSk7Ci0gICAg
ICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcg
JywgdmFyaWFibGVOYW1lLCAiID0geyAmKCIsIGxWYWx1ZSwgIlswXSksICIsIGFycmF5VHlwZS5u
dW1FbGVtZW50cygpLCAiIH07XG4iKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fc3RyaW5nQnVp
bGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1l
LCAiID0geyAmIiwgbFZhbHVlLCAiLCAxIH07XG4iKSk7CisgICAgfQogICAgIGFwcGVuZFJpZ2h0
VmFsdWUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgdmFyaWFibGVOYW1lKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRp
dmVGdW5jdGlvbldyaXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAJKHJldmlz
aW9uIDI0NjcwNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFs
L1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiAr
MTI1LDEwIEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAgICBp
ZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5pc0Nhc3QoKSkgewogICAgICAgICBhdXRvIG1l
dGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBpZiAoIW5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpLnNpemUoKSkgeworICAgICAgICAgICAgaWYgKGlzPEFTVDo6QXJy
YXlUeXBlPihuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSkpIHsKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nTG4oImRlZmF1bHQgQ3RvciBmb3IgYXJyYXkgdHlwZSEiKTsKKyAgICAgICAg
ICAgIH0KKwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRh
bFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAiKCkge1xuIikpOwogICAgICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgICIsIG1ldGFsUmV0dXJu
TmFtZSwgIiB4O1xuIikpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZygiICAgICIsIG1lbXNldFplcm9GdW5jdGlvbk5hbWUsICIoeCk7XG4iKSk7CkBAIC0xNzQs
OCArMTc4LDggQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdQogICAg
ICAgICBhdXRvJiB1bm5hbWVkUGFyYW1ldGVyVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5
cGU+KHBhcmFtZXRlclR5cGUpOwogICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVR5cGU+KHVubmFt
ZWRQYXJhbWV0ZXJUeXBlKSkgewogICAgICAgICAgICAgYXV0byYgYXJyYXlQYXJhbWV0ZXJUeXBl
ID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRQYXJhbWV0ZXJUeXBlKTsKLSAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInVpbnQgIiwgb3V0cHV0RnVu
Y3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB2KSB7XG4iKSk7Ci0gICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0dXJuICIsIGFycmF5
UGFyYW1ldGVyVHlwZS5udW1FbGVtZW50cygpLCAidTtcbiIpKTsKKyAgICAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInVpbnQgIiwgb3V0cHV0RnVuY3Rpb25OYW1lLCAn
KCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIikge1xuIikpOworICAgICAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiAiLCBhcnJheVBhcmFtZXRlclR5cGUu
bnVtRWxlbWVudHMoKSwgIjtcbiIpKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCJ9XG4iKTsKICAgICAgICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiAg
ICAgICAgIH0KQEAgLTI1MywxMyArMjU3LDIyIEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9u
KEFTVDo6TmF0aXZlRnUKIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUo
KSA9PSAib3BlcmF0b3ImW10iKSB7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7CisKICAgICAgICAgYXV0byBtZXRhbFBh
cmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0
YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwogICAgICAgICBhdXRv
IG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywg
bWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiB2LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIG4pIHtc
biIpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICBpZiAobiA8IHYubGVuZ3Ro
KSByZXR1cm4gJih2LnBvaW50ZXJbbl0pO1xuIik7CisKKyAgICAgICAgaWYgKGlzPEFTVDo6QXJy
YXlUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUo
KSkpIHsKKyAgICAgICAgICAgIEFTVDo6QXJyYXlUeXBlJiBhcnJheVR5cGUgPSBkb3duY2FzdDxB
U1Q6OkFycmF5VHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBd
LT50eXBlKCkpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygi
ICAgIGlmIChuIDwgIiwgYXJyYXlUeXBlLm51bUVsZW1lbnRzKCksICIpIHJldHVybiAmdltuXTtc
biIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OkFycmF5
UmVmZXJlbmNlVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBd
LT50eXBlKCkpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgaWYgKG4g
PCB2Lmxlbmd0aCkgcmV0dXJuICYodi5wb2ludGVyW25dKTtcbiIpOworICAgICAgICB9CiAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgcmV0dXJuIG51bGxwdHI7XG4iKTsKICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOworCiAgICAgICAgIHJldHVybiBzdHJpbmdC
dWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3Bw
CShyZXZpc2lvbiAyNDY3MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5OCw3ICszOTgs
NyBAQCB2b2lkIFR5cGVOYW1lcjo6ZW1pdFVubmFtZWRUeXBlRGVmaW5pdGlvCiAgICAgfSBlbHNl
IHsKICAgICAgICAgYXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8QXJyYXlUeXBlTmFtZU5vZGU+
KGJhc2VUeXBlTmFtZU5vZGUpOwogICAgICAgICBBU1NFUlQoYmFzZVR5cGVOYW1lTm9kZS5wYXJl
bnQoKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInR5cGVkZWYg
QXJyYXk8IiwgYXJyYXlUeXBlLnBhcmVudCgpLT5tYW5nbGVkTmFtZSgpLCAiLCAiLCBhcnJheVR5
cGUubnVtRWxlbWVudHMoKSwgIj4gIiwgYXJyYXlUeXBlLm1hbmdsZWROYW1lKCksICI7XG4iKSk7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoInR5cGVkZWYgYXJyYXk8
IiwgYXJyYXlUeXBlLnBhcmVudCgpLT5tYW5nbGVkTmFtZSgpLCAiLCAiLCBhcnJheVR5cGUubnVt
RWxlbWVudHMoKSwgIj4gIiwgYXJyYXlUeXBlLm1hbmdsZWROYW1lKCksICI7XG4iKSk7CiAgICAg
fQogICAgIGVtaXR0ZWRVbm5hbWVkVHlwZXMuYWRkKCZiYXNlVHlwZU5hbWVOb2RlKTsKIH0KSW5k
ZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtYXJyYXlzLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBsZS1hcnJheXMuaHRtbAkobm9uZXhp
c3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtc2ltcGxlLWFycmF5cy5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIxIEBACisKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAor
dm9pZCBmaWxsKHRocmVhZCBpbnRbXSBhcnJheSwgaW50IHZhbHVlKSB7CisgICAgZm9yICh1aW50
IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgYXJyYXlbaV0gPSB2YWx1
ZTsKKyAgICB9Cit9CisKK1tudW10aHJlYWRzKDEsIDEsIDEpXQorY29tcHV0ZSB2b2lkIGNvbXB1
dGVTaGFkZXIoZGV2aWNlIGludFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVh
ZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgeworICAgIGludFs0Ml0gYXJyYXk7CisgICAgaWYg
KGFycmF5Lmxlbmd0aCAhPSA0MikKKyAgICAgICAgcmV0dXJuOworICAgIGZvciAodWludCBpID0g
MDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmIChhcnJheVtpXSAhPSAwKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFycmF5WzBdID0gNTE3OworICAgIGlm
IChhcnJheVswXSAhPSA1MTcpCisgICAgICAgIHJldHVybjsKKworICAgIHRocmVhZCBpbnRbXSBh
cnJheVB0ciA9IEBhcnJheTsKKyAgICBpZiAoYXJyYXlQdHIubGVuZ3RoICE9IDQyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpbnRbNDJdIGFycmF5MjsgLy8gT09QUzogY2F1c2VzIGNoZWNrZXIg
dG8gZmFpbCEKKworICAgIC8vYXJyYXkyID0gYXJyYXk7CisgICAgLy9pZiAoYXJyYXkyLmxlbmd0
aCAhPSA0MikKKyAgICAvLyAgICByZXR1cm47CisgICAgLy9pZiAoYXJyYXkyWzBdICE9IDUxNykK
KyAgICAvLyAgICByZXR1cm47CisKKyAgICBmaWxsKGFycmF5UHRyLCAxMzM3KTsKKyAgICBmb3Ig
KHVpbnQgaSA9IDA7IGkgPCBhcnJheVB0ci5sZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoYXJy
YXlQdHJbaV0gIT0gMTMzNykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGFycmF5
W2ldICE9IDEzMzcpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy9pZiAoYXJy
YXkyWzBdICE9IDUxNykKKyAgICAvLyAgICByZXR1cm47CisgICAgLy9pZiAoYXJyYXkyLmxlbmd0
aCAhPSA0MikKKyAgICAvLyAgICByZXR1cm47CisgICAgLy9mb3IgKHVpbnQgaSA9IDE7IGkgPCBh
cnJheTIubGVuZ3RoOyArK2kpIHsKKyAgICAvLyAgICBpZiAoYXJyYXkyW2ldICE9IDApCisgICAg
Ly8gICAgICAgIHJldHVybjsKKyAgICAvL30KKworICAgIGJ1ZmZlclswXSA9IDE7Cit9CitgOwor
bGV0IHJlc3VsdHNGbG9hdDMyQXJyYXk7Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBj
b25zdCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAg
IGNvbnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAgY29u
c3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVy
U291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVs
ZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OworCisgICAgY29u
c3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2
aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OworICAgIGNvbnN0IGJpbmRH
cm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0
RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRH
cm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91
dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3Ip
OworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2Us
IGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRl
dmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCBzaXplID0gSW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDE7CisKKyAg
ICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5N
QVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkN9OworICAgIGNvbnN0IGJ1ZmZl
ciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgYnVm
ZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0
IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBJbnQzMkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsK
KyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAwOworICAgIGJ1ZmZlci51bm1hcCgpOworCisg
ICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZl
clVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJV
c2FnZS5NQVBfUkVBRH07CisgICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVC
dWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOworCisgICAgY29uc3QgYnVmZmVyQmluZGlu
ZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9OworICAgIGNvbnN0IGJpbmRHcm91cEJp
bmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0
IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdz
OiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVh
dGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21tYW5kRW5j
b2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbW1hbmRF
bmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIHNp
emUpOworICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2lu
Q29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0
ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRH
cm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEsIDEsIDEpOworICAgIGNv
bXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNv
bW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29t
bWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVz
dWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAgICByZXN1bHRzRmxvYXQzMkFycmF5ID0gbmV3
IEludDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zs
b2F0MzJBcnJheVswXSIsICIxIik7CisgICAgcmVzdWx0c0J1ZmZlci51bm1hcCgpOworfQord2lu
ZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQi
LCBmdW5jdGlvbigpIHsKKyAgICBzdGFydCgpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGZp
bmlzaEpTVGVzdCgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBmaW5pc2hKU1Rlc3Qo
KTsKKyAgICB9KTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372859</attachid>
            <date>2019-06-25 13:48:13 -0700</date>
            <delta_ts>2019-06-27 00:35:12 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>38456</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NjgwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDE5LTA2LTI1ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gSW1wbGVtZW50IGFy
cmF5cyBhbmQgTWFrZUFycmF5UmVmZXJlbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg0MTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgV0hMU0wgYXJyYXlzLiBU
aGUgbWFpbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgaXMgdGhhdAorICAgICAgICBhcnJheXMgZ2V0
IGNvbXBpbGVkIHRvIHVzZSBNZXRhbCdzIGFycmF5IHR5cGUuIFRvIG1ha2UgZXZlcnl0aGluZyB3
b3JrLCB0aGlzCisgICAgICAgIHBhdGNoIGFsc28gZml4ZXMgYSBmZXcgYnVnczoKKyAgICAgICAg
LSBUaGUgY2hlY2tlciBub3cgYWxsb3dzICJvcGVyYXRvci5sZW5ndGgiIHRvIGJlIGNhbGxlZCBv
biBhcnJheXMuIFByaW9yIHRvCisgICAgICAgIHRoaXMgcGF0Y2gsIGl0IHdhcyBqdXN0IGFsbG93
ZWQgb24gYXJyYXkgcmVmZXJlbmNlcy4KKyAgICAgICAgCisgICAgICAgIC0gVGhlIHByZXNlcnZl
IHZhcmlhYmxlIGxpZmV0aW1lcyBwYXNzIG5vdyBsb29rcyBhdCBNYWtlQXJyYXlSZWZlcmVuY2Ug
bm9kZXMuCisgICAgICAgIFByaW9yIHRvIHRoaXMgcGF0Y2gsIGl0IGp1c3QgbG9va2VkIGF0IE1h
a2VQb2ludGVyRXhwcmVzc2lvbi4KKyAgICAgICAgCisgICAgICAgIC0gV2Ugd2VyZSBwcm9kdWNp
bmcgdGhlIHdyb25nIHR5cGUgZm9yIGFuZGVyIGFyZ3VtZW50cyBmb3IgaW5kZXhlZCBhY2Nlc3Nl
cworICAgICAgICBvbiBhcnJheSB0eXBlcy4gV2Ugd2VyZSBzYXlpbmcgdGhlIGFyZ3VtZW50IHRo
YXQgd2FzIHByb2R1Y2VkIHdhcyBhIHJlZmVyZW5jZQorICAgICAgICB0byBhbiBhcnJheSBpbnN0
ZWFkIG9mIGFuIGFycmF5IHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCB0eXBlLgorICAgICAgICAK
KyAgICAgICAgLSBUaGUgdHJpZSB3ZSBjb21wb3NlIGZvciB0aGUgcmV2ZXJzZSB0eXBlIGhpZXJh
cmNoeSB3YXMgaW5zZXJ0aW5nIGVsZW1lbnRzCisgICAgICAgIGludG8gdGhlIHdyb25nICJjaGls
ZHJlbiIgdmVjdG9yLiBXZSB3ZXJlIGFsd2F5cyBpbnNlcnRpbmcgdGhpbmdzIGludG8gdGhlCisg
ICAgICAgIHRvcCBsZXZlbCB2ZWN0b3IuIFRoaXMgaXMgd3Jvbmcgd2hlbiB3ZSBoYXZlIGEgbmVz
dGluZyBvZiB0eXBlcyA+IDEuCisgICAgICAgIAorICAgICAgICBJIGFsc28gZm91bmQgYSBidWcg
d2l0aCBoYXZpbmcgYXJyYXlzIG9mIHBvaW50ZXJzIHdoZW4gd3JpdGluZyB0aGlzIHBhdGNoLgor
ICAgICAgICBXb3JrIG9uIHRoaXMgd2lsbCB0YWtlIHBsYWNlIGluIGEgZm9sbG93IHVwOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk5MTk3CisKKyAgICAgICAgVGVz
dHM6IHdlYmdwdS93aGxzbC1odWdlLWFycmF5Lmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdwdS93
aGxzbC1tYWtlLWFycmF5LXJlZmVyZW5jZS5odG1sCisgICAgICAgICAgICAgICB3ZWJncHUvd2hs
c2wtc2ltcGxlLWFycmF5cy5odG1sCisgICAgICAgICAgICAgICB3ZWJncHUvd2hsc2wtdHdvLWRp
bWVuc2lvbmFsLWFycmF5Lmh0bWwKKworICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01l
dGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1l
dGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6d3JpdGVOYXRpdmVGdW5jdGlvbik6CisgICAgICAg
ICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6Omluc2VydCk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6ZW1pdFVubmFtZWRUeXBlRGVmaW5pdGlv
bik6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIu
aDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OnJlc29sdmVCeUluc3RhbnRpYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OnZpc2l0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFByZXNlcnZlVmFyaWFibGVMaWZldGltZXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OkVzY2FwZWRWYXJpYWJsZUNvbGxlY3Rvcjo6ZXNjYXBlVmFyaWFibGVVc2Up
OgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6d3JhcEFuZGVyQ2FsbEFyZ3VtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjphbmRlckNhbGxBcmd1bWVudCk6CisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0OgorCiAyMDE5LTA2LTI1
ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogSW1wbGVtZW50IGNvbnNvbGUudGltZUxvZwpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCShyZXZpc2lv
biAyNDY3MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENo
ZWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNyArMTgzLDcgQEAgc3RhdGljIE9wdGlv
bmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYQogICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVX
aXRoT3BlcmF0b3JBbmRlckluZGV4ZXIob3JpZ2luLCAqZmlyc3RBcmd1bWVudEFycmF5UmVmLCBp
bnRyaW5zaWNzKTsKICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gIm9wZXJhdG9yLmxlbmd0aCIgJiYg
dHlwZXMuc2l6ZSgpID09IDEpIHsKICAgICAgICAgYXV0byogZmlyc3RBcmd1bWVudFJlZmVyZW5j
ZSA9IHR5cGVzWzBdLmdldCgpLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oVW5pcXVlUmVmPEFT
VDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gQVNUOjpVbm5hbWVkVHlwZSogewotICAg
ICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihzdGF0aWNfY2FzdDxBU1Q6
OlVubmFtZWRUeXBlJj4odW5uYW1lZFR5cGUpKSkKKyAgICAgICAgICAgIGlmIChpczxBU1Q6OkFy
cmF5UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHVubmFtZWRU
eXBlKSkgfHwgaXM8QVNUOjpBcnJheVR5cGU+KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUm
Pih1bm5hbWVkVHlwZSkpKQogICAgICAgICAgICAgICAgIHJldHVybiAmdW5uYW1lZFR5cGU7CiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfSwgW10oUmVmUHRyPFJlc29sdmFi
bGVUeXBlUmVmZXJlbmNlPiYpIC0+IEFTVDo6VW5uYW1lZFR5cGUqIHsKQEAgLTExMzIsOSArMTEz
Miw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW4KICAgICBBU1NF
UlQodmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKSk7CiAgICAgQVNTRVJUKHZhcmlhYmxlUmVm
ZXJlbmNlLnZhcmlhYmxlKCktPnR5cGUoKSk7CiAgICAgCi0gICAgQVNUOjpUeXBlQW5ub3RhdGlv
biB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6UmlnaHRWYWx1ZSgpOwotICAgIHR5cGVBbm5vdGF0aW9u
ID0gQVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH07Ci0gICAgYXNz
aWduVHlwZSh2YXJpYWJsZVJlZmVyZW5jZSwgdmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKS0+
dHlwZSgpLT5jbG9uZSgpLCBXVEZNb3ZlKHR5cGVBbm5vdGF0aW9uKSk7CisgICAgYXNzaWduVHlw
ZSh2YXJpYWJsZVJlZmVyZW5jZSwgdmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKS0+dHlwZSgp
LT5jbG9uZSgpLCBBU1Q6OkxlZnRWYWx1ZSB7IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQgfSk7
CiB9CiAKIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpSZXR1cm4mIHJldHVyblN0YXRlbWVudCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlc2VydmVW
YXJpYWJsZUxpZmV0aW1lcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xQcmVzZXJ2ZVZhcmlhYmxlTGlmZXRpbWVzLmNwcAkocmV2aXNp
b24gMjQ2NzA0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
cmVzZXJ2ZVZhcmlhYmxlTGlmZXRpbWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTcgKzU1
LDE3IEBAIG5hbWVzcGFjZSBXSExTTCB7CiBjbGFzcyBFc2NhcGVkVmFyaWFibGVDb2xsZWN0b3Ig
OiBwdWJsaWMgVmlzaXRvciB7CiAgICAgdXNpbmcgQmFzZSA9IFZpc2l0b3I7CiBwdWJsaWM6Ci0g
ICAgdm9pZCB2aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJFeHBy
ZXNzaW9uKSBvdmVycmlkZQorCisgICAgdm9pZCBlc2NhcGVWYXJpYWJsZVVzZShBU1Q6OkV4cHJl
c3Npb24mIGV4cHJlc3Npb24pCiAgICAgewotICAgICAgICBpZiAoIWlzPEFTVDo6VmFyaWFibGVS
ZWZlcmVuY2U+KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sZWZ0VmFsdWUoKSkpIHsKKyAgICAgICAg
aWYgKCFpczxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihleHByZXNzaW9uKSkgewogICAgICAgICAg
ICAgLy8gRklYTUU6IEFyZSB3ZSBtaXNzaW5nIGFueSBpbnRlcmVzdGluZyBwcm9kdWN0aW9ucyBo
ZXJlPwogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE5ODMxMQotICAgICAgICAgICAgQmFzZTo6dmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9u
LmxlZnRWYWx1ZSgpKTsKKyAgICAgICAgICAgIEJhc2U6OnZpc2l0KGV4cHJlc3Npb24pOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byYgdmFyaWFibGVSZWZl
cmVuY2UgPSBkb3duY2FzdDxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihtYWtlUG9pbnRlckV4cHJl
c3Npb24ubGVmdFZhbHVlKCkpOwotICAgICAgICBhdXRvKiB2YXJpYWJsZSA9IHZhcmlhYmxlUmVm
ZXJlbmNlLnZhcmlhYmxlKCk7CisgICAgICAgIGF1dG8qIHZhcmlhYmxlID0gZG93bmNhc3Q8QVNU
OjpWYXJpYWJsZVJlZmVyZW5jZT4oZXhwcmVzc2lvbikudmFyaWFibGUoKTsKICAgICAgICAgQVNT
RVJUKHZhcmlhYmxlKTsKICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHNraXAgdGhpcyBpZiB3
ZSBtYXJrIGFsbCBpbnRlcm5hbCB2YXJpYWJsZXMgd2l0aCBhIGJpdCwgc2luY2Ugd2UKICAgICAg
ICAgLy8gbmV2ZXIgbWFrZSBhbnkgaW50ZXJuYWwgdmFyaWFibGUgZXNjYXBlIHRoZSBjdXJyZW50
IHNjb3BlIGl0IGlzIGRlZmluZWQgaW46CkBAIC03Myw2ICs3MywxNiBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fZXNjYXBlZFZhcmlhYmxlcy5hZGQodmFyaWFibGUsIG1ha2VTdHJpbmcoIl8iLCB2YXJp
YWJsZS0+bmFtZSgpLCAiXyIsIG1fY291bnQrKykpOwogICAgIH0KIAorICAgIHZvaWQgdmlzaXQo
QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGVzY2FwZVZhcmlhYmxlVXNlKG1ha2VQb2ludGVyRXhwcmVzc2lv
bi5sZWZ0VmFsdWUoKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6Ok1ha2VBcnJheVJl
ZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pIG92ZXJyaWRl
CisgICAgeworICAgICAgICBlc2NhcGVWYXJpYWJsZVVzZShtYWtlQXJyYXlSZWZlcmVuY2VFeHBy
ZXNzaW9uLmxlZnRWYWx1ZSgpKTsKKyAgICB9CisKICAgICBIYXNoTWFwPEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbiosIFN0cmluZz4gdGFrZUVzY2FwZWRWYXJpYWJsZXMoKSB7IHJldHVybiBXVEZN
b3ZlKG1fZXNjYXBlZFZhcmlhYmxlcyk7IH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0
eVJlc29sdmVyLmNwcAkocmV2aXNpb24gMjQ2NzA0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTUsMTMgKzk1LDEyIEBAIHN0cnVjdCBBbmRlckNhbGxBcmd1bWVudFJlc3VsdCB7CiB9Owog
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRXhwcmVzc2lvbkNvbnN0cnVjdG9yLCB0eXBlbmFtZSBUeXBl
Q29uc3RydWN0b3I+Ci1zdGF0aWMgT3B0aW9uYWw8QW5kZXJDYWxsQXJndW1lbnRSZXN1bHQ+IHdy
YXBBbmRlckNhbGxBcmd1bWVudChVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYgZXhwcmVzc2lv
biwgYm9vbCBhbmRlckZ1bmN0aW9uLCBib29sIHRocmVhZEFuZGVyRnVuY3Rpb24pCitzdGF0aWMg
T3B0aW9uYWw8QW5kZXJDYWxsQXJndW1lbnRSZXN1bHQ+IHdyYXBBbmRlckNhbGxBcmd1bWVudChV
bmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYgZXhwcmVzc2lvbiwgVW5pcXVlUmVmPEFTVDo6VW5u
YW1lZFR5cGU+IGJhc2VUeXBlLCBib29sIGFuZGVyRnVuY3Rpb24sIGJvb2wgdGhyZWFkQW5kZXJG
dW5jdGlvbikKIHsKICAgICBpZiAoYXV0byBhZGRyZXNzU3BhY2UgPSBleHByZXNzaW9uLT50eXBl
QW5ub3RhdGlvbigpLmxlZnRBZGRyZXNzU3BhY2UoKSkgewogICAgICAgICBpZiAoIWFuZGVyRnVu
Y3Rpb24pCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBhdXRvIG9y
aWdpbiA9IGV4cHJlc3Npb24tPm9yaWdpbigpOwotICAgICAgICBhdXRvIGJhc2VUeXBlID0gZXhw
cmVzc2lvbi0+cmVzb2x2ZWRUeXBlKCkuY2xvbmUoKTsKICAgICAgICAgYXV0byBtYWtlQXJyYXlS
ZWZlcmVuY2UgPSBtYWtlVW5pcXVlUmVmPEV4cHJlc3Npb25Db25zdHJ1Y3Rvcj4oTGV4ZXI6OlRv
a2VuKG9yaWdpbiksIFdURk1vdmUoZXhwcmVzc2lvbikpOwogICAgICAgICBtYWtlQXJyYXlSZWZl
cmVuY2UtPnNldFR5cGUobWFrZVVuaXF1ZVJlZjxUeXBlQ29uc3RydWN0b3I+KFdURk1vdmUob3Jp
Z2luKSwgKmFkZHJlc3NTcGFjZSwgV1RGTW92ZShiYXNlVHlwZSkpKTsKICAgICAgICAgbWFrZUFy
cmF5UmVmZXJlbmNlLT5zZXRUeXBlQW5ub3RhdGlvbihBU1Q6OlJpZ2h0VmFsdWUoKSk7CkBAIC0x
MDksNyArMTA4LDYgQEAgc3RhdGljIE9wdGlvbmFsPEFuZGVyQ2FsbEFyZ3VtZW50UmVzdWx0Pgog
ICAgIH0KICAgICBpZiAodGhyZWFkQW5kZXJGdW5jdGlvbikgewogICAgICAgICBhdXRvIG9yaWdp
biA9IGV4cHJlc3Npb24tPm9yaWdpbigpOwotICAgICAgICBhdXRvIGJhc2VUeXBlID0gZXhwcmVz
c2lvbi0+cmVzb2x2ZWRUeXBlKCkuY2xvbmUoKTsKICAgICAgICAgYXV0byB2YXJpYWJsZURlY2xh
cmF0aW9uID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+KExleGVyOjpU
b2tlbihvcmlnaW4pLCBBU1Q6OlF1YWxpZmllcnMoKSwgYmFzZVR5cGUtPmNsb25lKCksIFN0cmlu
ZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CiAKICAgICAgICAgYXV0byB2YXJpYWJs
ZVJlZmVyZW5jZTEgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KEFTVDo6
VmFyaWFibGVSZWZlcmVuY2U6OndyYXAodmFyaWFibGVEZWNsYXJhdGlvbikpOwpAQCAtMTUxLDkg
KzE0OSw5IEBAIHN0YXRpYyBPcHRpb25hbDxBbmRlckNhbGxBcmd1bWVudFJlc3VsdD4KICAgICAg
ICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpCiAgICAgICAg
ICAgICByZXR1cm4ge3sgV1RGTW92ZShleHByZXNzaW9uKSwgV1RGOjpudWxsb3B0LCBXaGljaEFu
ZGVyOjpBbmRlciB9fTsKICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlw
ZSkpCi0gICAgICAgICAgICByZXR1cm4gd3JhcEFuZGVyQ2FsbEFyZ3VtZW50PEFTVDo6TWFrZUFy
cmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgQVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KGV4cHJlc3Np
b24sIGFuZGVyRnVuY3Rpb24sIHRocmVhZEFuZGVyRnVuY3Rpb24pOworICAgICAgICAgICAgcmV0
dXJuIHdyYXBBbmRlckNhbGxBcmd1bWVudDxBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Np
b24sIEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihleHByZXNzaW9uLCBkb3duY2FzdDxBU1Q6OkFy
cmF5VHlwZT4odW5uYW1lZFR5cGUpLnR5cGUoKS5jbG9uZSgpLCBhbmRlckZ1bmN0aW9uLCB0aHJl
YWRBbmRlckZ1bmN0aW9uKTsKICAgICB9Ci0gICAgcmV0dXJuIHdyYXBBbmRlckNhbGxBcmd1bWVu
dDxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiwgQVNUOjpQb2ludGVyVHlwZT4oZXhwcmVzc2lv
biwgYW5kZXJGdW5jdGlvbiwgdGhyZWFkQW5kZXJGdW5jdGlvbik7CisgICAgcmV0dXJuIHdyYXBB
bmRlckNhbGxBcmd1bWVudDxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiwgQVNUOjpQb2ludGVy
VHlwZT4oZXhwcmVzc2lvbiwgZXhwcmVzc2lvbi0+cmVzb2x2ZWRUeXBlKCkuY2xvbmUoKSwgYW5k
ZXJGdW5jdGlvbiwgdGhyZWFkQW5kZXJGdW5jdGlvbik7CiB9CiAKIHN0YXRpYyBPcHRpb25hbDxV
bmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gc2V0dGVyQ2FsbChBU1Q6OlByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24qIHJlbGV2YW50QW5kZXIsIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiYgbmV3VmFs
dWUsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4oKT4mIGxl
ZnRWYWx1ZUZhY3RvcnksIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiogaW5kZXhWYXJpYWJsZSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhbmRhcmRM
aWJyYXJ5LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFN0YW5kYXJkTGlicmFyeS50eHQJKHJldmlzaW9uIDI0NjcwNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhbmRhcmRMaWJyYXJ5LnR4dAko
d29ya2luZyBjb3B5KQpAQCAtNzkyLDYgKzc5MiwxMiBAQCBpbnQgb3BlcmF0b3IrKyhpbnQgdmFs
dWUpIHsKIGludCBvcGVyYXRvci0tKGludCB2YWx1ZSkgewogICAgIHJldHVybiB2YWx1ZSAtIDE7
CiB9Cit1aW50IG9wZXJhdG9yKysodWludCB2YWx1ZSkgeworICAgIHJldHVybiB2YWx1ZSArIDE7
Cit9Cit1aW50IG9wZXJhdG9yLS0odWludCB2YWx1ZSkgeworICAgIHJldHVybiB2YWx1ZSAtIDE7
Cit9CiAKIG5hdGl2ZSB1c2hvcnQgU2FtcGxlKFRleHR1cmUxRDx1c2hvcnQ+LCBzYW1wbGVyLCBm
bG9hdCBsb2NhdGlvbik7CiBuYXRpdmUgdXNob3J0IFNhbXBsZShUZXh0dXJlMURBcnJheTx1c2hv
cnQ+LCBzYW1wbGVyLCBmbG9hdDIgbG9jYXRpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5j
dGlvbldyaXRlci5jcHAJKHJldmlzaW9uIDI0NjcwNCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MjgsMTYgKzYyOCwxOSBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6
dmlzaXQoQVNUCiAgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24ubGVmdFZhbHVlKCkpOwogICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIG1hZGUg
dG8gd29yay4gSXQgcHJvYmFibHkgc2hvdWxkIGJlIHVzaW5nIHRoZSBsYXN0IGxlZnRWYWx1ZSB0
b28uCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODgz
OAotICAgIGF1dG8gbFZhbHVlID0gdGFrZUxhc3RWYWx1ZSgpOwogICAgIGF1dG8gdmFyaWFibGVO
YW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CisKICAgICBhdXRvIG1hbmdsZWRUeXBl
TmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShtYWtlQXJyYXlSZWZlcmVuY2VF
eHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKLSAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4o
bWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSkpCisgICAgaWYgKGlz
PEFTVDo6UG9pbnRlclR5cGU+KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubGVmdFZhbHVl
KCkucmVzb2x2ZWRUeXBlKCkpKQorICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHsgIiwgdGFrZUxh
c3RWYWx1ZSgpLCAiLCAxIH07XG4iKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpBcnJheVR5cGU+
KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkucmVzb2x2ZWRUeXBlKCkp
KSB7CisgICAgICAgIGF1dG8gbFZhbHVlID0gdGFrZUxhc3RMZWZ0VmFsdWUoKTsKKyAgICAgICAg
YXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KG1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlh
YmxlTmFtZSwgIiA9IHsgIiwgbFZhbHVlLCAiLT5kYXRhKCksICIsIGFycmF5VHlwZS5udW1FbGVt
ZW50cygpLCAiIH07XG4iKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byBsVmFsdWUgPSB0
YWtlTGFzdExlZnRWYWx1ZSgpOwogICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHsgIiwgbFZhbHVl
LCAiLCAxIH07XG4iKSk7Ci0gICAgZWxzZSBpZiAoaXM8QVNUOjpBcnJheVR5cGU+KG1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpKSB7Ci0gICAgICAgIGF1dG8mIGFy
cmF5VHlwZSA9IGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPihtYWtlQXJyYXlSZWZlcmVuY2VFeHBy
ZXNzaW9uLnJlc29sdmVkVHlwZSgpKTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSB7ICYoIiwg
bFZhbHVlLCAiWzBdKSwgIiwgYXJyYXlUeXBlLm51bUVsZW1lbnRzKCksICIgfTtcbiIpKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmds
ZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSB7ICYiLCBsVmFsdWUsICIsIDEgfTtc
biIpKTsKKyAgICB9CiAgICAgYXBwZW5kUmlnaHRWYWx1ZShtYWtlQXJyYXlSZWZlcmVuY2VFeHBy
ZXNzaW9uLCB2YXJpYWJsZU5hbWUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5h
dGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAkocmV2aXNpb24gMjQ2NzA0KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NCw4ICsxNzQsOCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVG
dW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIGF1dG8mIHVubmFtZWRQYXJhbWV0ZXJUeXBl
ID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4ocGFyYW1ldGVyVHlwZSk7CiAgICAgICAgIGlm
IChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFBhcmFtZXRlclR5cGUpKSB7CiAgICAgICAgICAg
ICBhdXRvJiBhcnJheVBhcmFtZXRlclR5cGUgPSBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5u
YW1lZFBhcmFtZXRlclR5cGUpOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFr
ZVN0cmluZygidWludCAiLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJO
YW1lLCAiIHYpIHtcbiIpKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VT
dHJpbmcoIiAgICByZXR1cm4gIiwgYXJyYXlQYXJhbWV0ZXJUeXBlLm51bUVsZW1lbnRzKCksICJ1
O1xuIikpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygidWlu
dCAiLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAiKSB7XG4i
KSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgcmV0
dXJuICIsIGFycmF5UGFyYW1ldGVyVHlwZS5udW1FbGVtZW50cygpLCAiO1xuIikpOwogICAgICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOwogICAgICAgICAgICAgcmV0dXJuIHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKICAgICAgICAgfQpAQCAtMjU3LDYgKzI1Nyw3IEBAIFN0
cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAgICAgICAgYXV0byBtZXRh
bFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8g
bWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1h
a2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBt
ZXRhbFBhcmFtZXRlcjFOYW1lLCAiIHYsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgbikge1xu
IikpOworICAgICAgICBBU1NFUlQoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KCpuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKSk7CiAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgaWYgKG4gPCB2Lmxlbmd0aCkgcmV0dXJuICYodi5wb2lu
dGVyW25dKTtcbiIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICAgIHJldHVybiBu
dWxscHRyO1xuIik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9N
ZXRhbC9XSExTTFR5cGVOYW1lci5jcHAJKHJldmlzaW9uIDI0NjcwNCkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzA5LDcgKzMwOSw3IEBAIFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPiBU
eXBlTmFtZXI6OmMKICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxBcnJheVR5cGVOYW1lTm9kZT4o
cGFyZW50LCBnZW5lcmF0ZU5leHRUeXBlTmFtZSgpLCBhcnJheVR5cGUubnVtRWxlbWVudHMoKSk7
CiB9CiAKLXNpemVfdCBUeXBlTmFtZXI6Omluc2VydChBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVk
VHlwZSwgVmVjdG9yPFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPj4mIHR5cGVzKQorQmFzZVR5
cGVOYW1lTm9kZSogVHlwZU5hbWVyOjppbnNlcnQoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5
cGUsIFZlY3RvcjxVbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4+JiB0eXBlcykKIHsKICAgICBW
ZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+PiogdmVjdG9yVG9JbnNlcnRJbnRvIHsg
bnVsbHB0ciB9OwogICAgIEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVudCB7IG51bGxwdHIgfTsKQEAg
LTMxNywxNyArMzE3LDE0IEBAIHNpemVfdCBUeXBlTmFtZXI6Omluc2VydChBU1Q6OlVubmFtZWRU
eXAKICAgICAgICAgdmVjdG9yVG9JbnNlcnRJbnRvID0gJnR5cGVzOwogICAgICAgICBwYXJlbnQg
PSBudWxscHRyOwogICAgIH0gZWxzZSBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5
cGUpKSB7Ci0gICAgICAgIGF1dG8mIGl0ZW0gPSB0eXBlc1tpbnNlcnQoZG93bmNhc3Q8QVNUOjpQ
b2ludGVyVHlwZT4odW5uYW1lZFR5cGUpLmVsZW1lbnRUeXBlKCksIHR5cGVzKV07Ci0gICAgICAg
IHZlY3RvclRvSW5zZXJ0SW50byA9ICZpdGVtLT5jaGlsZHJlbigpOwotICAgICAgICBwYXJlbnQg
PSAmaXRlbTsKKyAgICAgICAgcGFyZW50ID0gaW5zZXJ0KGRvd25jYXN0PEFTVDo6UG9pbnRlclR5
cGU+KHVubmFtZWRUeXBlKS5lbGVtZW50VHlwZSgpLCB0eXBlcyk7CisgICAgICAgIHZlY3RvclRv
SW5zZXJ0SW50byA9ICZwYXJlbnQtPmNoaWxkcmVuKCk7CiAgICAgfSBlbHNlIGlmIChpczxBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKSB7Ci0gICAgICAgIGF1dG8mIGl0ZW0g
PSB0eXBlc1tpbnNlcnQoZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRU
eXBlKS5lbGVtZW50VHlwZSgpLCB0eXBlcyldOwotICAgICAgICB2ZWN0b3JUb0luc2VydEludG8g
PSAmaXRlbS0+Y2hpbGRyZW4oKTsKLSAgICAgICAgcGFyZW50ID0gJml0ZW07CisgICAgICAgIHBh
cmVudCA9IGluc2VydChkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5
cGUpLmVsZW1lbnRUeXBlKCksIHR5cGVzKTsKKyAgICAgICAgdmVjdG9yVG9JbnNlcnRJbnRvID0g
JnBhcmVudC0+Y2hpbGRyZW4oKTsKICAgICB9IGVsc2UgewotICAgICAgICBhdXRvJiBpdGVtID0g
dHlwZXNbaW5zZXJ0KGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkudHlwZSgp
LCB0eXBlcyldOwotICAgICAgICB2ZWN0b3JUb0luc2VydEludG8gPSAmaXRlbS0+Y2hpbGRyZW4o
KTsKLSAgICAgICAgcGFyZW50ID0gJml0ZW07CisgICAgICAgIHBhcmVudCA9IGluc2VydChkb3du
Y2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpLnR5cGUoKSwgdHlwZXMpOworICAgICAg
ICB2ZWN0b3JUb0luc2VydEludG8gPSAmcGFyZW50LT5jaGlsZHJlbigpOwogICAgIH0KICAgICBB
U1NFUlQodmVjdG9yVG9JbnNlcnRJbnRvKTsKIApAQCAtMzM5LDExICszMzYsMTEgQEAgc2l6ZV90
IFR5cGVOYW1lcjo6aW5zZXJ0KEFTVDo6VW5uYW1lZFR5cAogICAgICAgICAgICAgQVNTRVJUX1VO
VVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKICAgICAgICAgfQogICAgICAg
ICB2ZWN0b3JUb0luc2VydEludG8tPmFwcGVuZChXVEZNb3ZlKHJlc3VsdCkpOwotICAgICAgICBy
ZXR1cm4gdmVjdG9yVG9JbnNlcnRJbnRvLT5zaXplKCkgLSAxOworICAgICAgICByZXR1cm4gJnZl
Y3RvclRvSW5zZXJ0SW50by0+bGFzdCgpLmdldCgpOwogICAgIH0KICAgICBhdXRvIGFkZFJlc3Vs
dCA9IG1fdW5uYW1lZFR5cGVNYXBwaW5nLmFkZCgmdW5uYW1lZFR5cGUsICYqaXRlcmF0b3IpOwog
ICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAg
cmV0dXJuIGl0ZXJhdG9yIC0gdmVjdG9yVG9JbnNlcnRJbnRvLT5iZWdpbigpOworICAgIHJldHVy
biAmKml0ZXJhdG9yOwogfQogCiBjbGFzcyBNZXRhbFR5cGVEZWNsYXJhdGlvbldyaXRlciA6IHB1
YmxpYyBWaXNpdG9yIHsKQEAgLTM5OCw3ICszOTUsNyBAQCB2b2lkIFR5cGVOYW1lcjo6ZW1pdFVu
bmFtZWRUeXBlRGVmaW5pdGlvCiAgICAgfSBlbHNlIHsKICAgICAgICAgYXV0byYgYXJyYXlUeXBl
ID0gZG93bmNhc3Q8QXJyYXlUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpOwogICAgICAg
ICBBU1NFUlQoYmFzZVR5cGVOYW1lTm9kZS5wYXJlbnQoKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcoInR5cGVkZWYgQXJyYXk8IiwgYXJyYXlUeXBlLnBhcmVudCgp
LT5tYW5nbGVkTmFtZSgpLCAiLCAiLCBhcnJheVR5cGUubnVtRWxlbWVudHMoKSwgIj4gIiwgYXJy
YXlUeXBlLm1hbmdsZWROYW1lKCksICI7XG4iKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKG1ha2VTdHJpbmcoInR5cGVkZWYgYXJyYXk8IiwgYXJyYXlUeXBlLnBhcmVudCgpLT5tYW5n
bGVkTmFtZSgpLCAiLCAiLCBhcnJheVR5cGUubnVtRWxlbWVudHMoKSwgIj4gIiwgYXJyYXlUeXBl
Lm1hbmdsZWROYW1lKCksICI7XG4iKSk7CiAgICAgfQogICAgIGVtaXR0ZWRVbm5hbWVkVHlwZXMu
YWRkKCZiYXNlVHlwZU5hbWVOb2RlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuaAkocmV2
aXNpb24gMjQ2NzA0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0
YWwvV0hMU0xUeXBlTmFtZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIHBy
aXZhdGU6CiAgICAgU3RyaW5nIG1ldGFsVHlwZURlZmluaXRpb25zKCk7CiAKICAgICBVbmlxdWVS
ZWY8QmFzZVR5cGVOYW1lTm9kZT4gY3JlYXRlTmFtZU5vZGUoQVNUOjpVbm5hbWVkVHlwZSYsIEJh
c2VUeXBlTmFtZU5vZGUqIHBhcmVudCk7Ci0gICAgc2l6ZV90IGluc2VydChBU1Q6OlVubmFtZWRU
eXBlJiwgVmVjdG9yPFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPj4mKTsKKyAgICBCYXNlVHlw
ZU5hbWVOb2RlKiBpbnNlcnQoQVNUOjpVbm5hbWVkVHlwZSYsIFZlY3RvcjxVbmlxdWVSZWY8QmFz
ZVR5cGVOYW1lTm9kZT4+Jik7CiAKICAgICBQcm9ncmFtJiBtX3Byb2dyYW07CiAgICAgVmVjdG9y
PFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPj4gbV90cmllOwpJbmRleDogTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24g
MjQ2NzA0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTkgQEAKKzIwMTktMDYtMjUgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisK
KyAgICAgICAgW1dITFNMXSBJbXBsZW1lbnQgYXJyYXlzIGFuZCBNYWtlQXJyYXlSZWZlcmVuY2UK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODQxNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2ViZ3B1
L3dobHNsLWh1Z2UtYXJyYXktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUv
d2hsc2wtaHVnZS1hcnJheS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wtbWFr
ZS1hcnJheS1yZWZlcmVuY2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUv
d2hsc2wtbWFrZS1hcnJheS1yZWZlcmVuY2UuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1
L3dobHNsLXNpbXBsZS1hcnJheXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJn
cHUvd2hsc2wtc2ltcGxlLWFycmF5cy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hs
c2wtdHdvLWRpbWVuc2lvbmFsLWFycmF5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
d2ViZ3B1L3dobHNsLXR3by1kaW1lbnNpb25hbC1hcnJheS5odG1sOiBBZGRlZC4KKwogMjAxOS0w
Ni0yMSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBbV0hMU0xd
IENvZGUgdGhhdCBhY2Nlc3NlcyBhbiB1bmRlZmluZWQgdmFyaWFibGUgY3Jhc2hlcwpJbmRleDog
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWh1Z2UtYXJyYXktZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1odWdlLWFycmF5LWV4cGVjdGVkLnR4dAko
bm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaHVnZS1hcnJheS1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1IEBACitQQVNTIHJlc3VsdHNJbnQz
MkFycmF5WzBdIGlzIDEKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaHVnZS1hcnJheS5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1odWdlLWFycmF5Lmh0bWwJ
KG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWh1Z2UtYXJyYXkuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBg
Cit2b2lkIGZpbGwodGhyZWFkIGZsb2F0W10gYXJyYXksIGZsb2F0IHZhbHVlKSB7CisgICAgZm9y
ICh1aW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgYXJyYXlbaV0g
PSB2YWx1ZTsKKyAgICB9Cit9CisKK1tudW10aHJlYWRzKDEsIDEsIDEpXQorY29tcHV0ZSB2b2lk
IGNvbXB1dGVTaGFkZXIoZGV2aWNlIGludFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQz
IHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgeworICAgIGZsb2F0WzEwMDBdIGFycmF5
OworICAgIGlmIChhcnJheS5sZW5ndGggIT0gMTAwMCkKKyAgICAgICAgcmV0dXJuOworICAgIGZv
ciAodWludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmIChhcnJh
eVtpXSAhPSAwKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFycmF5WzBdID0g
MC4xMzM3OworICAgIGlmIChhcnJheVswXSAhPSAwLjEzMzcpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHRocmVhZCBmbG9hdFtdIGFycmF5UHRyID0gQGFycmF5OworICAgIGlmIChhcnJheVB0ci5s
ZW5ndGggIT0gMTAwMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmlsbChhcnJheVB0ciwgMC4x
MDEwKTsKKyAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBhcnJheVB0ci5sZW5ndGg7ICsraSkgewor
ICAgICAgICBpZiAoYXJyYXlQdHJbaV0gIT0gMC4xMDEwKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBpZiAoYXJyYXlbaV0gIT0gMC4xMDEwKQorICAgICAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGZpbGwoQGFycmF5LCAwLjAxMDEpOworICAgIGZvciAodWludCBpID0gMDsgaSA8
IGFycmF5Lmxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmIChhcnJheVB0cltpXSAhPSAwLjAxMDEp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChhcnJheVtpXSAhPSAwLjAxMDEpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYnVmZmVyWzBdID0gMTsKK30KK2A7Cits
ZXQgcmVzdWx0c0ludDMyQXJyYXk7Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBjb25z
dCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAgIGNv
bnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAgY29uc3Qg
c2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291
cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTog
c2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OworCisgICAgY29uc3Qg
YmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNp
YmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OworICAgIGNvbnN0IGJpbmRHcm91
cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVz
Y3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91
cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9
IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOwor
CisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxh
eW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmlj
ZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAg
ICBjb25zdCBzaXplID0gSW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDE7CisKKyAgICBj
b25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBf
V1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkN9OworICAgIGNvbnN0IGJ1ZmZlciA9
IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgYnVmZmVy
QXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IGJ1
ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBJbnQzMkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsKKyAg
ICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAwOworICAgIGJ1ZmZlci51bm1hcCgpOworCisgICAg
Y29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVz
YWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2Fn
ZS5NQVBfUkVBRH07CisgICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZm
ZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9
IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRp
bmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJp
bmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBb
YmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVC
aW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2Rl
ciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbW1hbmRFbmNv
ZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIHNpemUp
OworICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29t
cHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBp
cGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91
cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEsIDEsIDEpOworICAgIGNvbXB1
dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1h
bmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFu
ZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0
c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAgICByZXN1bHRzSW50MzJBcnJheSA9IG5ldyBJbnQz
MkFycmF5KHJlc3VsdHNBcnJheUJ1ZmZlcik7CisgICAgc2hvdWxkQmUoInJlc3VsdHNJbnQzMkFy
cmF5WzBdIiwgIjEiKTsKKyAgICByZXN1bHRzQnVmZmVyLnVubWFwKCk7Cit9Cit3aW5kb3cuanNU
ZXN0SXNBc3luYyA9IHRydWU7Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGZ1bmN0
aW9uKCkgeworICAgIHN0YXJ0KCkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgZmluaXNoSlNU
ZXN0KCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAg
IH0pOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dl
YmdwdS93aGxzbC1tYWtlLWFycmF5LXJlZmVyZW5jZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1ha2UtYXJyYXktcmVmZXJlbmNlLWV4cGVjdGVk
LnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWFrZS1hcnJh
eS1yZWZlcmVuY2UtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNSBAQAor
UEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzBdIGlzIDEKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtbWFrZS1hcnJheS1yZWZlcmVuY2UuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtbWFrZS1hcnJheS1yZWZlcmVuY2UuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBM
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWFrZS1hcnJheS1yZWZlcmVuY2UuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE2MSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitib29sIHRl
c3QxKCkgeworICAgIGludCB2YWx1ZSA9IDQyOworICAgIHRocmVhZCBpbnRbXSBhcnJheSA9IEB2
YWx1ZTsKKyAgICBpZiAoYXJyYXkubGVuZ3RoICE9IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoYXJyYXlbMF0gIT0gNDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
YXJyYXlbMTIwMjEzXSAhPSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhcnJheVsw
XSA9IDEzMzc7CisgICAgaWYgKHZhbHVlICE9IDEzMzcpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHRlc3QyKCkgeworICAgIGludCB2YWx1ZSA9
IDQyOworICAgIHRocmVhZCBpbnQqIHB0ciA9ICZ2YWx1ZTsKKyAgICBpZiAoKnB0ciAhPSA0MikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdGhyZWFkIGludFtdIGFycmF5ID0gQHB0cjsK
KyAgICBpZiAoYXJyYXkubGVuZ3RoICE9IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoYXJyYXlbMF0gIT0gNDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYXJyYXlb
MTIzNzQyMTddICE9IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAqcHRyID0g
NjY2OworICAgIGlmICgqcHRyICE9IDY2NikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
ICh2YWx1ZSAhPSA2NjYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYXJyYXkubGVu
Z3RoICE9IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYXJyYXlbMF0gIT0gNjY2
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhcnJheVswXSA9IDQyNDI7CisgICAgaWYg
KCpwdHIgIT0gNDI0MikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICh2YWx1ZSAhPSA0
MjQyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGFycmF5WzBdICE9IDQyNDIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYXJyYXkubGVuZ3RoICE9IDEpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHRlc3QzKCkgewor
ICAgIGludFs0Ml0geDsKKyAgICB0aHJlYWQgaW50WzQyXSogYXJyYXlQdHIgPSAmeDsKKyAgICBp
ZiAoYXJyYXlQdHItPmxlbmd0aCAhPSA0MikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
eFs0MV0gPSA2NjY7CisgICAgaWYgKCgqYXJyYXlQdHIpWzQxXSAhPSA2NjYpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoKCphcnJheVB0cilbMF0gIT0gMCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgdGhyZWFkIGludFtdIGFycmF5ID0gQHg7CisgICAgaWYgKGFycmF5Lmxl
bmd0aCAhPSA0MikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXJyYXlbMF0gPSAxMzM3
OworICAgIGlmICh4WzBdICE9IDEzMzcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
KCphcnJheVB0cilbMF0gIT0gMTMzNykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK1tudW10aHJlYWRzKDEsIDEsIDEpXQorY29tcHV0ZSB2b2lkIGNvbXB1
dGVTaGFkZXIoZGV2aWNlIGludFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVh
ZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgeworICAgIGlmICghdGVzdDEoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCF0ZXN0MigpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IXRlc3QzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGJ1ZmZlclswXSA9IDE7Cit9CitgOwor
bGV0IHJlc3VsdHNGbG9hdDMyQXJyYXk7Cithc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKKyAgICBj
b25zdCBhZGFwdGVyID0gYXdhaXQgbmF2aWdhdG9yLmdwdS5yZXF1ZXN0QWRhcHRlcigpOworICAg
IGNvbnN0IGRldmljZSA9IGF3YWl0IGFkYXB0ZXIucmVxdWVzdERldmljZSgpOworCisgICAgY29u
c3Qgc2hhZGVyTW9kdWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVy
U291cmNlLCBpc1dITFNMOiB0cnVlfSk7CisgICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVs
ZTogc2hhZGVyTW9kdWxlLCBlbnRyeVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OworCisgICAgY29u
c3QgYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2
aXNpYmlsaXR5OiA3LCB0eXBlOiAic3RvcmFnZS1idWZmZXIifV19OworICAgIGNvbnN0IGJpbmRH
cm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0
RGVzY3JpcHRvcik7CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRH
cm91cExheW91dHM6IFtiaW5kR3JvdXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91
dCA9IGRldmljZS5jcmVhdGVQaXBlbGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3Ip
OworCisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2Us
IGxheW91dDogcGlwZWxpbmVMYXlvdXR9OworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRl
dmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCBzaXplID0gSW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDE7CisKKyAg
ICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5N
QVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkN9OworICAgIGNvbnN0IGJ1ZmZl
ciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgYnVm
ZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0
IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBJbnQzMkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsK
KyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMF0gPSAwOworICAgIGJ1ZmZlci51bm1hcCgpOworCisg
ICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZl
clVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJV
c2FnZS5NQVBfUkVBRH07CisgICAgY29uc3QgcmVzdWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVC
dWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOworCisgICAgY29uc3QgYnVmZmVyQmluZGlu
ZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9OworICAgIGNvbnN0IGJpbmRHcm91cEJp
bmRpbmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0
IGJpbmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdz
OiBbYmluZEdyb3VwQmluZGluZ119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVh
dGVCaW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21tYW5kRW5j
b2RlciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbW1hbmRF
bmNvZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIHNp
emUpOworICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2lu
Q29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0
ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRH
cm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDEsIDEsIDEpOworICAgIGNv
bXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNv
bW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29t
bWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVz
dWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAgICByZXN1bHRzRmxvYXQzMkFycmF5ID0gbmV3
IEludDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zs
b2F0MzJBcnJheVswXSIsICIxIik7CisgICAgcmVzdWx0c0J1ZmZlci51bm1hcCgpOworfQord2lu
ZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQi
LCBmdW5jdGlvbigpIHsKKyAgICBzdGFydCgpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGZp
bmlzaEpTVGVzdCgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBmaW5pc2hKU1Rlc3Qo
KTsKKyAgICB9KTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtc2ltcGxlLWFycmF5cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBsZS1hcnJheXMtZXhwZWN0ZWQudHh0CShu
b25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtYXJyYXlzLWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUgQEAKK1BBU1MgcmVzdWx0c0lu
dDMyQXJyYXlbMF0gaXMgMQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtYXJyYXlz
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBsZS1hcnJh
eXMuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtc2ltcGxl
LWFycmF5cy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE5IEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHNoYWRl
clNvdXJjZSA9IGAKK3ZvaWQgZmlsbCh0aHJlYWQgaW50W10gYXJyYXksIGludCB2YWx1ZSkgewor
ICAgIGZvciAodWludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGFy
cmF5W2ldID0gdmFsdWU7CisgICAgfQorfQorCitbbnVtdGhyZWFkcygxLCAxLCAxKV0KK2NvbXB1
dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBpbnRbXSBidWZmZXIgOiByZWdpc3Rlcih1MCks
IGZsb2F0MyB0aHJlYWRJRCA6IFNWX0Rpc3BhdGNoVGhyZWFkSUQpIHsKKyAgICBpbnRbNDJdIGFy
cmF5OworICAgIGlmIChhcnJheS5sZW5ndGggIT0gNDIpCisgICAgICAgIHJldHVybjsKKyAgICBm
b3IgKHVpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoYXJy
YXlbaV0gIT0gMCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhcnJheVswXSA9
IDUxNzsKKyAgICBpZiAoYXJyYXlbMF0gIT0gNTE3KQorICAgICAgICByZXR1cm47CisKKyAgICB0
aHJlYWQgaW50W10gYXJyYXlQdHIgPSBAYXJyYXk7CisgICAgaWYgKGFycmF5UHRyLmxlbmd0aCAh
PSA0MikKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50WzQyXSBhcnJheTI7CisgICAgYXJyYXky
ID0gYXJyYXk7CisgICAgaWYgKGFycmF5Mi5sZW5ndGggIT0gNDIpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoYXJyYXkyWzBdICE9IDUxNykKKyAgICAgICAgcmV0dXJuOworCisgICAgZmlsbChh
cnJheVB0ciwgMTMzNyk7CisgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgYXJyYXlQdHIubGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgaWYgKGFycmF5UHRyW2ldICE9IDEzMzcpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGlmIChhcnJheVtpXSAhPSAxMzM3KQorICAgICAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChhcnJheTJbMF0gIT0gNTE3KQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKGFycmF5Mi5sZW5ndGggIT0gNDIpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHVp
bnQgaSA9IDE7IGkgPCBhcnJheTIubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKGFycmF5Mltp
XSAhPSAwKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJ1ZmZlclswXSA9IDE7
Cit9CitgOworbGV0IHJlc3VsdHNJbnQzMkFycmF5OworYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7
CisgICAgY29uc3QgYWRhcHRlciA9IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIo
KTsKKyAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBhZGFwdGVyLnJlcXVlc3REZXZpY2UoKTsKKwor
ICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6
IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1ZX0pOworICAgIGNvbnN0IGNvbXB1dGVTdGFnZSA9
IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50cnlQb2ludDogImNvbXB1dGVTaGFkZXIifTsKKwor
ICAgIGNvbnN0IGJpbmRHcm91cExheW91dERlc2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGlu
ZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTogInN0b3JhZ2UtYnVmZmVyIn1dfTsKKyAgICBjb25z
dCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91
cExheW91dERlc2NyaXB0b3IpOworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9
IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdyb3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxp
bmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNj
cmlwdG9yKTsKKworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IgPSB7Y29tcHV0
ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKKyAgICBjb25zdCBjb21wdXRlUGlwZWxp
bmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZURlc2NyaXB0
b3IpOworCisgICAgY29uc3Qgc2l6ZSA9IEludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAx
OworCisgICAgY29uc3QgYnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVy
VXNhZ2UuTUFQX1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JDfTsKKyAgICBjb25z
dCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKGJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNv
bnN0IGJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgYnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAg
ICBjb25zdCBidWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcgSW50MzJBcnJheShidWZmZXJBcnJheUJ1
ZmZlcik7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMDsKKyAgICBidWZmZXIudW5tYXAo
KTsKKworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBH
UFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BV
QnVmZmVyVXNhZ2UuTUFQX1JFQUR9OworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2Uu
Y3JlYXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGJ1ZmZl
ckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplfTsKKyAgICBjb25zdCBiaW5k
R3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAg
ICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBi
aW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZp
Y2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29t
bWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBj
b21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVmZmVy
LCAwLCBzaXplKTsKKyAgICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rl
ci5iZWdpbkNvbXB1dGVQYXNzKCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5l
KGNvbXB1dGVQaXBlbGluZSk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgw
LCBiaW5kR3JvdXApOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5kaXNwYXRjaCgxLCAxLCAxKTsK
KyAgICBjb21wdXRlUGFzc0VuY29kZXIuZW5kUGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZm
ZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2goKTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJt
aXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAgIGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3
YWl0IHJlc3VsdHNCdWZmZXIubWFwUmVhZEFzeW5jKCk7CisgICAgcmVzdWx0c0ludDMyQXJyYXkg
PSBuZXcgSW50MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOworICAgIHNob3VsZEJlKCJyZXN1
bHRzSW50MzJBcnJheVswXSIsICIxIik7CisgICAgcmVzdWx0c0J1ZmZlci51bm1hcCgpOworfQor
d2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxv
YWQiLCBmdW5jdGlvbigpIHsKKyAgICBzdGFydCgpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAg
IGZpbmlzaEpTVGVzdCgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICBmaW5pc2hKU1Rl
c3QoKTsKKyAgICB9KTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtdHdvLWRpbWVuc2lvbmFsLWFycmF5LWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdHdvLWRpbWVuc2lvbmFsLWFy
cmF5LWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtdHdvLWRpbWVuc2lvbmFsLWFycmF5LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDUgQEAKK1BBU1MgcmVzdWx0c0ludDMyQXJyYXlbMF0gaXMgMQorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC10d28tZGltZW5zaW9uYWwtYXJyYXkuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdHdvLWRpbWVuc2lvbmFsLWFycmF5Lmh0bWwJKG5vbmV4
aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXR3by1kaW1lbnNpb25hbC1hcnJh
eS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIxIEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJj
ZSA9IGAKK3ZvaWQgZmlsbCh0aHJlYWQgZmxvYXRbMTBdW10gYXJyYXksIGZsb2F0WzEwXSB2YWx1
ZSkgeworICAgIGZvciAodWludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgIGFycmF5W2ldID0gdmFsdWU7CisgICAgfQorfQorCit2b2lkIGZpbGwodGhyZWFkIGZsb2F0
W10gYXJyYXksIGZsb2F0IHZhbHVlKSB7CisgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgYXJyYXku
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgYXJyYXlbaV0gPSB2YWx1ZTsKKyAgICB9Cit9CisKK2Jv
b2wgY29udGFpbnModGhyZWFkIGZsb2F0WzEwXVtdIGFycmF5LCBmbG9hdCB2YWx1ZSkgeworICAg
IGZvciAodWludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGZvciAo
dWludCBqID0gMDsgaiA8IGFycmF5W2pdLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICBpZiAo
YXJyYXlbaV1bal0gIT0gdmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIGNvbnRhaW5zKHRocmVh
ZCBmbG9hdFtdIGFycmF5LCBmbG9hdCB2YWx1ZSkgeworICAgIGZvciAodWludCBpID0gMDsgaSA8
IGFycmF5Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChhcnJheVtpXSAhPSB2YWx1ZSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1tu
dW10aHJlYWRzKDEsIDEsIDEpXQorY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2aWNlIGlu
dFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hU
aHJlYWRJRCkgeworICAgIGZsb2F0WzEwXVs1XSBhcnJheTsKKyAgICBpZiAoYXJyYXkubGVuZ3Ro
ICE9IDUpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWNvbnRhaW5zKEBhcnJheSwgMCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGZvciAodWludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsg
KytpKSB7CisgICAgICAgIGZsb2F0WzEwXSB2YWx1ZTsKKyAgICAgICAgZmlsbChAdmFsdWUsIGZs
b2F0KGkpKTsKKyAgICAgICAgYXJyYXlbaV0gPSB2YWx1ZTsKKyAgICB9CisKKyAgICBmb3IgKHVp
bnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkgeworICAgICAgICBmbG9hdFsxMF0gdmFs
dWUgPSBhcnJheVtpXTsKKyAgICAgICAgaWYgKCFjb250YWlucyhAdmFsdWUsIGZsb2F0KGkpKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBidWZmZXJbMF0gPSAxOworfQorYDsK
K2xldCByZXN1bHRzSW50MzJBcnJheTsKK2FzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNv
bnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7CisgICAg
Y29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0RGV2aWNlKCk7CisKKyAgICBjb25z
dCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJT
b3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxl
OiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hhZGVyIn07CisKKyAgICBjb25z
dCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZp
c2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdy
b3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXRE
ZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdy
b3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0
ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7
CisKKyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwg
bGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2
aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKKwor
ICAgIGNvbnN0IHNpemUgPSBJbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogMTsKKworICAg
IGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1B
UF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQ307CisgICAgY29uc3QgYnVmZmVy
ID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCBidWZm
ZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3Qg
YnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEludDMyQXJyYXkoYnVmZmVyQXJyYXlCdWZmZXIpOwor
ICAgIGJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDA7CisgICAgYnVmZmVyLnVubWFwKCk7CisKKyAg
ICBjb25zdCByZXN1bHRzQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVy
VXNhZ2UuU1RPUkFHRSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX0RTVCB8IEdQVUJ1ZmZlclVz
YWdlLk1BUF9SRUFEfTsKKyAgICBjb25zdCByZXN1bHRzQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1
ZmZlcihyZXN1bHRzQnVmZmVyRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBidWZmZXJCaW5kaW5n
ID0ge2J1ZmZlcjogcmVzdWx0c0J1ZmZlciwgc2l6ZX07CisgICAgY29uc3QgYmluZEdyb3VwQmlu
ZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307CisgICAgY29uc3Qg
YmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6
IFtiaW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0
ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNv
ZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29tbWFuZEVu
Y29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKGJ1ZmZlciwgMCwgcmVzdWx0c0J1ZmZlciwgMCwgc2l6
ZSk7CisgICAgY29uc3QgY29tcHV0ZVBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5D
b21wdXRlUGFzcygpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShjb21wdXRl
UGlwZWxpbmUpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdy
b3VwKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuZGlzcGF0Y2goMSwgMSwgMSk7CisgICAgY29t
cHV0ZVBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29t
bWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21t
YW5kQnVmZmVyXSk7CisKKyAgICBjb25zdCByZXN1bHRzQXJyYXlCdWZmZXIgPSBhd2FpdCByZXN1
bHRzQnVmZmVyLm1hcFJlYWRBc3luYygpOworICAgIHJlc3VsdHNJbnQzMkFycmF5ID0gbmV3IElu
dDMyQXJyYXkocmVzdWx0c0FycmF5QnVmZmVyKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0ludDMy
QXJyYXlbMF0iLCAiMSIpOworICAgIHJlc3VsdHNCdWZmZXIudW5tYXAoKTsKK30KK3dpbmRvdy5q
c1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgZnVu
Y3Rpb24oKSB7CisgICAgc3RhcnQoKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBmaW5pc2hK
U1Rlc3QoKTsKKyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cisg
ICAgfSk7Cit9KTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="388648"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373006</attachid>
            <date>2019-06-27 00:35:12 -0700</date>
            <delta_ts>2019-06-27 01:20:01 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>39149</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0Njg3MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDE5LTA2LTI3ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gSW1wbGVtZW50IGFy
cmF5cyBhbmQgTWFrZUFycmF5UmVmZXJlbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg0MTQKKworICAgICAgICBSZXZpZXdlZCBieSBNeWxlcyBD
LiBNYXhmaWVsZC4KKworICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgV0hMU0wgYXJyYXlz
LiBUaGUgbWFpbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgaXMgdGhhdAorICAgICAgICBhcnJheXMg
Z2V0IGNvbXBpbGVkIHRvIHVzZSBNZXRhbCdzIGFycmF5IHR5cGUuIFRvIG1ha2UgZXZlcnl0aGlu
ZyB3b3JrLCB0aGlzCisgICAgICAgIHBhdGNoIGFsc28gZml4ZXMgYSBmZXcgYnVnczoKKyAgICAg
ICAgLSBUaGUgY2hlY2tlciBub3cgYWxsb3dzICJvcGVyYXRvci5sZW5ndGgiIHRvIGJlIGNhbGxl
ZCBvbiBhcnJheXMuIFByaW9yIHRvCisgICAgICAgIHRoaXMgcGF0Y2gsIGl0IHdhcyBqdXN0IGFs
bG93ZWQgb24gYXJyYXkgcmVmZXJlbmNlcy4KKyAgICAgICAgCisgICAgICAgIC0gVGhlIHByZXNl
cnZlIHZhcmlhYmxlIGxpZmV0aW1lcyBwYXNzIG5vdyBsb29rcyBhdCBNYWtlQXJyYXlSZWZlcmVu
Y2Ugbm9kZXMuCisgICAgICAgIFByaW9yIHRvIHRoaXMgcGF0Y2gsIGl0IGp1c3QgbG9va2VkIGF0
IE1ha2VQb2ludGVyRXhwcmVzc2lvbi4KKyAgICAgICAgCisgICAgICAgIC0gV2Ugd2VyZSBwcm9k
dWNpbmcgdGhlIHdyb25nIHR5cGUgZm9yIGFuZGVyIGFyZ3VtZW50cyBmb3IgaW5kZXhlZCBhY2Nl
c3NlcworICAgICAgICBvbiBhcnJheSB0eXBlcy4gV2Ugd2VyZSBzYXlpbmcgdGhlIGFyZ3VtZW50
IHRoYXQgd2FzIHByb2R1Y2VkIHdhcyBhIHJlZmVyZW5jZQorICAgICAgICB0byBhbiBhcnJheSBp
bnN0ZWFkIG9mIGFuIGFycmF5IHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCB0eXBlLgorICAgICAg
ICAKKyAgICAgICAgLSBUaGUgdHJpZSB3ZSBjb21wb3NlIGZvciB0aGUgcmV2ZXJzZSB0eXBlIGhp
ZXJhcmNoeSB3YXMgaW5zZXJ0aW5nIGVsZW1lbnRzCisgICAgICAgIGludG8gdGhlIHdyb25nICJj
aGlsZHJlbiIgdmVjdG9yLiBXZSB3ZXJlIGFsd2F5cyBpbnNlcnRpbmcgdGhpbmdzIGludG8gdGhl
CisgICAgICAgIHRvcCBsZXZlbCB2ZWN0b3IuIFRoaXMgaXMgd3Jvbmcgd2hlbiB3ZSBoYXZlIGEg
bmVzdGluZyBvZiB0eXBlcyA+IDEuCisgICAgICAgIAorICAgICAgICBJIGFsc28gZm91bmQgYSBi
dWcgd2l0aCBoYXZpbmcgYXJyYXlzIG9mIHBvaW50ZXJzIHdoZW4gd3JpdGluZyB0aGlzIHBhdGNo
LgorICAgICAgICBXb3JrIG9uIHRoaXMgd2lsbCB0YWtlIHBsYWNlIGluIGEgZm9sbG93IHVwOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk5MTk3CisKKyAgICAgICAg
VGVzdHM6IHdlYmdwdS93aGxzbC1odWdlLWFycmF5Lmh0bWwKKyAgICAgICAgICAgICAgIHdlYmdw
dS93aGxzbC1tYWtlLWFycmF5LXJlZmVyZW5jZS5odG1sCisgICAgICAgICAgICAgICB3ZWJncHUv
d2hsc2wtc2ltcGxlLWFycmF5cy5odG1sCisgICAgICAgICAgICAgICB3ZWJncHUvd2hsc2wtdHdv
LWRpbWVuc2lvbmFsLWFycmF5Lmh0bWwKKworICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNM
L01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
Ok1ldGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6d3JpdGVOYXRpdmVGdW5jdGlvbik6CisgICAg
ICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6Omluc2VydCk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6ZW1pdFVubmFtZWRUeXBlRGVmaW5p
dGlvbik6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFt
ZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnJlc29sdmVCeUluc3RhbnRpYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OnZpc2l0KToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFByZXNlcnZlVmFyaWFibGVMaWZldGltZXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkVzY2FwZWRWYXJpYWJsZUNvbGxlY3Rvcjo6ZXNjYXBlVmFyaWFibGVV
c2UpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6d3JhcEFuZGVyQ2FsbEFyZ3VtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjphbmRlckNhbGxBcmd1bWVudCk6CisgICAgICAgICog
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0OgorCiAyMDE5LTA2
LTI2ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFtB
c3luYyBvdmVyZmxvdyBzY3JvbGxpbmddIEZpeCBtaXNzaW5nIG9yIG1pc3BsYWNlZCBjb250ZW50
IGluc2lkZSBvdmVyZmxvdzpzY3JvbGwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAkocmV2aXNpb24gMjQ2ODUwKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTgzLDcgKzE4Myw3IEBAIHN0YXRpYyBPcHRpb25hbDxBU1Q6Ok5h
dGl2ZUZ1bmN0aW9uRGVjbGEKICAgICAgICAgICAgIHJldHVybiByZXNvbHZlV2l0aE9wZXJhdG9y
QW5kZXJJbmRleGVyKG9yaWdpbiwgKmZpcnN0QXJndW1lbnRBcnJheVJlZiwgaW50cmluc2ljcyk7
CiAgICAgfSBlbHNlIGlmIChuYW1lID09ICJvcGVyYXRvci5sZW5ndGgiICYmIHR5cGVzLnNpemUo
KSA9PSAxKSB7CiAgICAgICAgIGF1dG8qIGZpcnN0QXJndW1lbnRSZWZlcmVuY2UgPSB0eXBlc1sw
XS5nZXQoKS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRU
eXBlPiYgdW5uYW1lZFR5cGUpIC0+IEFTVDo6VW5uYW1lZFR5cGUqIHsKLSAgICAgICAgICAgIGlm
IChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlw
ZSY+KHVubmFtZWRUeXBlKSkpCisgICAgICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU+KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1bm5hbWVkVHlwZSkpIHx8IGlz
PEFTVDo6QXJyYXlUeXBlPihzdGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4odW5uYW1lZFR5
cGUpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gJnVubmFtZWRUeXBlOwogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0sIFtdKFJlZlB0cjxSZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZT4mKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7CkBAIC0xMTMyLDkgKzExMzIsNyBAQCB2b2lk
IENoZWNrZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuCiAgICAgQVNTRVJUKHZhcmlhYmxl
UmVmZXJlbmNlLnZhcmlhYmxlKCkpOwogICAgIEFTU0VSVCh2YXJpYWJsZVJlZmVyZW5jZS52YXJp
YWJsZSgpLT50eXBlKCkpOwogICAgIAotICAgIEFTVDo6VHlwZUFubm90YXRpb24gdHlwZUFubm90
YXRpb24gPSBBU1Q6OlJpZ2h0VmFsdWUoKTsKLSAgICB0eXBlQW5ub3RhdGlvbiA9IEFTVDo6TGVm
dFZhbHVlIHsgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCB9OwotICAgIGFzc2lnblR5cGUodmFy
aWFibGVSZWZlcmVuY2UsIHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCktPnR5cGUoKS0+Y2xv
bmUoKSwgV1RGTW92ZSh0eXBlQW5ub3RhdGlvbikpOworICAgIGFzc2lnblR5cGUodmFyaWFibGVS
ZWZlcmVuY2UsIHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCktPnR5cGUoKS0+Y2xvbmUoKSwg
QVNUOjpMZWZ0VmFsdWUgeyBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkIH0pOwogfQogCiB2b2lk
IENoZWNrZXI6OnZpc2l0KEFTVDo6UmV0dXJuJiByZXR1cm5TdGF0ZW1lbnQpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXNlcnZlVmFyaWFibGVMaWZl
dGltZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUHJlc2VydmVWYXJpYWJsZUxpZmV0aW1lcy5jcHAJKHJldmlzaW9uIDI0Njg1MCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlc2VydmVWYXJp
YWJsZUxpZmV0aW1lcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDE3ICs1NSwxNyBAQCBuYW1l
c3BhY2UgV0hMU0wgewogY2xhc3MgRXNjYXBlZFZhcmlhYmxlQ29sbGVjdG9yIDogcHVibGljIFZp
c2l0b3IgewogICAgIHVzaW5nIEJhc2UgPSBWaXNpdG9yOwogcHVibGljOgotICAgIHZvaWQgdmlz
aXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikgb3Zl
cnJpZGUKKworICAgIHZvaWQgZXNjYXBlVmFyaWFibGVVc2UoQVNUOjpFeHByZXNzaW9uJiBleHBy
ZXNzaW9uKQogICAgIHsKLSAgICAgICAgaWYgKCFpczxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPiht
YWtlUG9pbnRlckV4cHJlc3Npb24ubGVmdFZhbHVlKCkpKSB7CisgICAgICAgIGlmICghaXM8QVNU
OjpWYXJpYWJsZVJlZmVyZW5jZT4oZXhwcmVzc2lvbikpIHsKICAgICAgICAgICAgIC8vIEZJWE1F
OiBBcmUgd2UgbWlzc2luZyBhbnkgaW50ZXJlc3RpbmcgcHJvZHVjdGlvbnMgaGVyZT8KICAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgzMTEK
LSAgICAgICAgICAgIEJhc2U6OnZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sZWZ0VmFsdWUo
KSk7CisgICAgICAgICAgICBCYXNlOjp2aXNpdChleHByZXNzaW9uKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8mIHZhcmlhYmxlUmVmZXJlbmNlID0gZG93
bmNhc3Q8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4obWFrZVBvaW50ZXJFeHByZXNzaW9uLmxlZnRW
YWx1ZSgpKTsKLSAgICAgICAgYXV0byogdmFyaWFibGUgPSB2YXJpYWJsZVJlZmVyZW5jZS52YXJp
YWJsZSgpOworICAgICAgICBhdXRvKiB2YXJpYWJsZSA9IGRvd25jYXN0PEFTVDo6VmFyaWFibGVS
ZWZlcmVuY2U+KGV4cHJlc3Npb24pLnZhcmlhYmxlKCk7CiAgICAgICAgIEFTU0VSVCh2YXJpYWJs
ZSk7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBza2lwIHRoaXMgaWYgd2UgbWFyayBhbGwg
aW50ZXJuYWwgdmFyaWFibGVzIHdpdGggYSBiaXQsIHNpbmNlIHdlCiAgICAgICAgIC8vIG5ldmVy
IG1ha2UgYW55IGludGVybmFsIHZhcmlhYmxlIGVzY2FwZSB0aGUgY3VycmVudCBzY29wZSBpdCBp
cyBkZWZpbmVkIGluOgpAQCAtNzMsNiArNzMsMTYgQEAgcHVibGljOgogICAgICAgICBtX2VzY2Fw
ZWRWYXJpYWJsZXMuYWRkKHZhcmlhYmxlLCBtYWtlU3RyaW5nKCJfIiwgdmFyaWFibGUtPm5hbWUo
KSwgIl8iLCBtX2NvdW50KyspKTsKICAgICB9CiAKKyAgICB2b2lkIHZpc2l0KEFTVDo6TWFrZVBv
aW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBlc2NhcGVWYXJpYWJsZVVzZShtYWtlUG9pbnRlckV4cHJlc3Npb24ubGVmdFZhbHVl
KCkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHBy
ZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgZXNjYXBlVmFyaWFibGVVc2UobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sZWZ0
VmFsdWUoKSk7CisgICAgfQorCiAgICAgSGFzaE1hcDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24q
LCBTdHJpbmc+IHRha2VFc2NhcGVkVmFyaWFibGVzKCkgeyByZXR1cm4gV1RGTW92ZShtX2VzY2Fw
ZWRWYXJpYWJsZXMpOyB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5j
cHAJKHJldmlzaW9uIDI0Njg1MCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDEzICs5
NSwxMiBAQCBzdHJ1Y3QgQW5kZXJDYWxsQXJndW1lbnRSZXN1bHQgewogfTsKIAogdGVtcGxhdGUg
PHR5cGVuYW1lIEV4cHJlc3Npb25Db25zdHJ1Y3RvciwgdHlwZW5hbWUgVHlwZUNvbnN0cnVjdG9y
Pgotc3RhdGljIE9wdGlvbmFsPEFuZGVyQ2FsbEFyZ3VtZW50UmVzdWx0PiB3cmFwQW5kZXJDYWxs
QXJndW1lbnQoVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mIGV4cHJlc3Npb24sIGJvb2wgYW5k
ZXJGdW5jdGlvbiwgYm9vbCB0aHJlYWRBbmRlckZ1bmN0aW9uKQorc3RhdGljIE9wdGlvbmFsPEFu
ZGVyQ2FsbEFyZ3VtZW50UmVzdWx0PiB3cmFwQW5kZXJDYWxsQXJndW1lbnQoVW5pcXVlUmVmPEFT
VDo6RXhwcmVzc2lvbj4mIGV4cHJlc3Npb24sIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiBi
YXNlVHlwZSwgYm9vbCBhbmRlckZ1bmN0aW9uLCBib29sIHRocmVhZEFuZGVyRnVuY3Rpb24pCiB7
CiAgICAgaWYgKGF1dG8gYWRkcmVzc1NwYWNlID0gZXhwcmVzc2lvbi0+dHlwZUFubm90YXRpb24o
KS5sZWZ0QWRkcmVzc1NwYWNlKCkpIHsKICAgICAgICAgaWYgKCFhbmRlckZ1bmN0aW9uKQogICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgYXV0byBvcmlnaW4gPSBleHBy
ZXNzaW9uLT5vcmlnaW4oKTsKLSAgICAgICAgYXV0byBiYXNlVHlwZSA9IGV4cHJlc3Npb24tPnJl
c29sdmVkVHlwZSgpLmNsb25lKCk7CiAgICAgICAgIGF1dG8gbWFrZUFycmF5UmVmZXJlbmNlID0g
bWFrZVVuaXF1ZVJlZjxFeHByZXNzaW9uQ29uc3RydWN0b3I+KExleGVyOjpUb2tlbihvcmlnaW4p
LCBXVEZNb3ZlKGV4cHJlc3Npb24pKTsKICAgICAgICAgbWFrZUFycmF5UmVmZXJlbmNlLT5zZXRU
eXBlKG1ha2VVbmlxdWVSZWY8VHlwZUNvbnN0cnVjdG9yPihXVEZNb3ZlKG9yaWdpbiksICphZGRy
ZXNzU3BhY2UsIFdURk1vdmUoYmFzZVR5cGUpKSk7CiAgICAgICAgIG1ha2VBcnJheVJlZmVyZW5j
ZS0+c2V0VHlwZUFubm90YXRpb24oQVNUOjpSaWdodFZhbHVlKCkpOwpAQCAtMTA5LDcgKzEwOCw2
IEBAIHN0YXRpYyBPcHRpb25hbDxBbmRlckNhbGxBcmd1bWVudFJlc3VsdD4KICAgICB9CiAgICAg
aWYgKHRocmVhZEFuZGVyRnVuY3Rpb24pIHsKICAgICAgICAgYXV0byBvcmlnaW4gPSBleHByZXNz
aW9uLT5vcmlnaW4oKTsKLSAgICAgICAgYXV0byBiYXNlVHlwZSA9IGV4cHJlc3Npb24tPnJlc29s
dmVkVHlwZSgpLmNsb25lKCk7CiAgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IG1h
a2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uPihMZXhlcjo6VG9rZW4ob3JpZ2lu
KSwgQVNUOjpRdWFsaWZpZXJzKCksIGJhc2VUeXBlLT5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpu
dWxsb3B0LCBXVEY6Om51bGxvcHQpOwogCiAgICAgICAgIGF1dG8gdmFyaWFibGVSZWZlcmVuY2Ux
ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihBU1Q6OlZhcmlhYmxlUmVm
ZXJlbmNlOjp3cmFwKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKQEAgLTE1MSw5ICsxNDksOSBAQCBz
dGF0aWMgT3B0aW9uYWw8QW5kZXJDYWxsQXJndW1lbnRSZXN1bHQ+CiAgICAgICAgIGlmIChpczxB
U1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKQogICAgICAgICAgICAgcmV0dXJu
IHt7IFdURk1vdmUoZXhwcmVzc2lvbiksIFdURjo6bnVsbG9wdCwgV2hpY2hBbmRlcjo6QW5kZXIg
fX07CiAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQotICAgICAg
ICAgICAgcmV0dXJuIHdyYXBBbmRlckNhbGxBcmd1bWVudDxBU1Q6Ok1ha2VBcnJheVJlZmVyZW5j
ZUV4cHJlc3Npb24sIEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihleHByZXNzaW9uLCBhbmRlckZ1
bmN0aW9uLCB0aHJlYWRBbmRlckZ1bmN0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiB3cmFwQW5k
ZXJDYWxsQXJndW1lbnQ8QVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBBU1Q6OkFy
cmF5UmVmZXJlbmNlVHlwZT4oZXhwcmVzc2lvbiwgZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVu
bmFtZWRUeXBlKS50eXBlKCkuY2xvbmUoKSwgYW5kZXJGdW5jdGlvbiwgdGhyZWFkQW5kZXJGdW5j
dGlvbik7CiAgICAgfQotICAgIHJldHVybiB3cmFwQW5kZXJDYWxsQXJndW1lbnQ8QVNUOjpNYWtl
UG9pbnRlckV4cHJlc3Npb24sIEFTVDo6UG9pbnRlclR5cGU+KGV4cHJlc3Npb24sIGFuZGVyRnVu
Y3Rpb24sIHRocmVhZEFuZGVyRnVuY3Rpb24pOworICAgIHJldHVybiB3cmFwQW5kZXJDYWxsQXJn
dW1lbnQ8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24sIEFTVDo6UG9pbnRlclR5cGU+KGV4cHJl
c3Npb24sIGV4cHJlc3Npb24tPnJlc29sdmVkVHlwZSgpLmNsb25lKCksIGFuZGVyRnVuY3Rpb24s
IHRocmVhZEFuZGVyRnVuY3Rpb24pOwogfQogCiBzdGF0aWMgT3B0aW9uYWw8VW5pcXVlUmVmPEFT
VDo6RXhwcmVzc2lvbj4+IHNldHRlckNhbGwoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24m
IHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiwgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZWxl
dmFudEFuZGVyLCBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYmIG5ld1ZhbHVlLCBjb25zdCBz
dGQ6OmZ1bmN0aW9uPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+KCk+JiBsZWZ0VmFsdWVGYWN0
b3J5LCBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qIGluZGV4VmFyaWFibGUpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeS50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xT
dGFuZGFyZExpYnJhcnkudHh0CShyZXZpc2lvbiAyNDY4NTApCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeS50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTc5Miw2ICs3OTIsMTIgQEAgaW50IG9wZXJhdG9yKysoaW50IHZhbHVlKSB7CiBpbnQg
b3BlcmF0b3ItLShpbnQgdmFsdWUpIHsKICAgICByZXR1cm4gdmFsdWUgLSAxOwogfQordWludCBv
cGVyYXRvcisrKHVpbnQgdmFsdWUpIHsKKyAgICByZXR1cm4gdmFsdWUgKyAxOworfQordWludCBv
cGVyYXRvci0tKHVpbnQgdmFsdWUpIHsKKyAgICByZXR1cm4gdmFsdWUgLSAxOworfQogCiBuYXRp
dmUgdXNob3J0IFNhbXBsZShUZXh0dXJlMUQ8dXNob3J0Piwgc2FtcGxlciwgZmxvYXQgbG9jYXRp
b24pOwogbmF0aXZlIHVzaG9ydCBTYW1wbGUoVGV4dHVyZTFEQXJyYXk8dXNob3J0Piwgc2FtcGxl
ciwgZmxvYXQyIGxvY2F0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIu
Y3BwCShyZXZpc2lvbiAyNDY4NTApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjI4
LDE2ICs2MjgsMjIgQEAgdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAog
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxlZnRW
YWx1ZSgpKTsKICAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBiZSBtYWRlIHRvIHdvcmsuIEl0
IHByb2JhYmx5IHNob3VsZCBiZSB1c2luZyB0aGUgbGFzdCBsZWZ0VmFsdWUgdG9vLgogICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg4MzgKLSAgICBhdXRv
IGxWYWx1ZSA9IHRha2VMYXN0VmFsdWUoKTsKICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVy
YXRlTmV4dFZhcmlhYmxlTmFtZSgpOworCiAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5y
ZXNvbHZlZFR5cGUoKSk7Ci0gICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KG1ha2VBcnJheVJl
ZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpKQorICAgIGlmIChpczxBU1Q6OlBvaW50
ZXJUeXBlPihtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnJlc29sdmVk
VHlwZSgpKSkgeworICAgICAgICBhdXRvIHB0clZhbHVlID0gdGFrZUxhc3RWYWx1ZSgpOworICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAn
ICcsIHZhcmlhYmxlTmFtZSwgIjtcbiIpKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKCJpZiAoIiwgcHRyVmFsdWUsICIpICIsIHZhcmlhYmxlTmFtZSwgIiA9IHsg
IiwgcHRyVmFsdWUsICIsIDF9O1xuIikpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KG1ha2VTdHJpbmcoImVsc2UgIiwgdmFyaWFibGVOYW1lLCAiID0geyBudWxscHRyLCAwIH07XG4i
KSk7CisgICAgfSBlbHNlIGlmIChpczxBU1Q6OkFycmF5VHlwZT4obWFrZUFycmF5UmVmZXJlbmNl
RXhwcmVzc2lvbi5sZWZ0VmFsdWUoKS5yZXNvbHZlZFR5cGUoKSkpIHsKKyAgICAgICAgYXV0byBs
VmFsdWUgPSB0YWtlTGFzdExlZnRWYWx1ZSgpOworICAgICAgICBhdXRvJiBhcnJheVR5cGUgPSBk
b3duY2FzdDxBU1Q6OkFycmF5VHlwZT4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sZWZ0
VmFsdWUoKS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
bWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0geyAiLCBs
VmFsdWUsICItPmRhdGEoKSwgIiwgYXJyYXlUeXBlLm51bUVsZW1lbnRzKCksICIgfTtcbiIpKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBhdXRvIGxWYWx1ZSA9IHRha2VMYXN0TGVmdFZhbHVlKCk7
CiAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5h
bWUsICcgJywgdmFyaWFibGVOYW1lLCAiID0geyAiLCBsVmFsdWUsICIsIDEgfTtcbiIpKTsKLSAg
ICBlbHNlIGlmIChpczxBU1Q6OkFycmF5VHlwZT4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lv
bi5yZXNvbHZlZFR5cGUoKSkpIHsKLSAgICAgICAgYXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8
QVNUOjpBcnJheVR5cGU+KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ucmVzb2x2ZWRUeXBl
KCkpOwotICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5
cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHsgJigiLCBsVmFsdWUsICJbMF0pLCAiLCBh
cnJheVR5cGUubnVtRWxlbWVudHMoKSwgIiB9O1xuIikpOwotICAgIH0gZWxzZQotICAgICAgICBt
X3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZh
cmlhYmxlTmFtZSwgIiA9IHsgJiIsIGxWYWx1ZSwgIiwgMSB9O1xuIikpOworICAgIH0KICAgICBh
cHBlbmRSaWdodFZhbHVlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIHZhcmlhYmxlTmFt
ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFs
L1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIu
Y3BwCShyZXZpc2lvbiAyNDY4NTApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTc0LDggKzE3NCw4IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZl
RnUKICAgICAgICAgYXV0byYgdW5uYW1lZFBhcmFtZXRlclR5cGUgPSBkb3duY2FzdDxBU1Q6OlVu
bmFtZWRUeXBlPihwYXJhbWV0ZXJUeXBlKTsKICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBl
Pih1bm5hbWVkUGFyYW1ldGVyVHlwZSkpIHsKICAgICAgICAgICAgIGF1dG8mIGFycmF5UGFyYW1l
dGVyVHlwZSA9IGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkUGFyYW1ldGVyVHlwZSk7
Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ1aW50ICIsIG91
dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgdikge1xuIikpOwot
ICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgIHJldHVybiAi
LCBhcnJheVBhcmFtZXRlclR5cGUubnVtRWxlbWVudHMoKSwgInU7XG4iKSk7CisgICAgICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJ1aW50ICIsIG91dHB1dEZ1bmN0aW9u
TmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIpIHtcbiIpKTsKKyAgICAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gIiwgYXJyYXlQYXJhbWV0
ZXJUeXBlLm51bUVsZW1lbnRzKCksICI7XG4iKSk7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgifVxuIik7CiAgICAgICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpOwogICAgICAgICB9CkBAIC0yNTcsNiArMjU3LDcgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVu
Y3Rpb24oQVNUOjpOYXRpdmVGdQogICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlw
ZSgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtZXRhbFJldHVy
bk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUs
ICIgdiwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBuKSB7XG4iKSk7CisgICAgICAgIEFTU0VS
VChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
cGFyYW1ldGVycygpWzBdLT50eXBlKCkpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
IiAgICBpZiAobiA8IHYubGVuZ3RoKSByZXR1cm4gJih2LnBvaW50ZXJbbl0pO1xuIik7CiAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgcmV0dXJuIG51bGxwdHI7XG4iKTsKICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn1cbiIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVy
LmNwcAkocmV2aXNpb24gMjQ2ODUwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDksNyAr
MzA5LDcgQEAgVW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+IFR5cGVOYW1lcjo6YwogICAgIHJl
dHVybiBtYWtlVW5pcXVlUmVmPEFycmF5VHlwZU5hbWVOb2RlPihwYXJlbnQsIGdlbmVyYXRlTmV4
dFR5cGVOYW1lKCksIGFycmF5VHlwZS5udW1FbGVtZW50cygpKTsKIH0KIAotc2l6ZV90IFR5cGVO
YW1lcjo6aW5zZXJ0KEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBWZWN0b3I8VW5pcXVl
UmVmPEJhc2VUeXBlTmFtZU5vZGU+PiYgdHlwZXMpCitCYXNlVHlwZU5hbWVOb2RlKiBUeXBlTmFt
ZXI6Omluc2VydChBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgVmVjdG9yPFVuaXF1ZVJl
ZjxCYXNlVHlwZU5hbWVOb2RlPj4mIHR5cGVzKQogewogICAgIFZlY3RvcjxVbmlxdWVSZWY8QmFz
ZVR5cGVOYW1lTm9kZT4+KiB2ZWN0b3JUb0luc2VydEludG8geyBudWxscHRyIH07CiAgICAgQmFz
ZVR5cGVOYW1lTm9kZSogcGFyZW50IHsgbnVsbHB0ciB9OwpAQCAtMzE3LDE3ICszMTcsMTQgQEAg
c2l6ZV90IFR5cGVOYW1lcjo6aW5zZXJ0KEFTVDo6VW5uYW1lZFR5cAogICAgICAgICB2ZWN0b3JU
b0luc2VydEludG8gPSAmdHlwZXM7CiAgICAgICAgIHBhcmVudCA9IG51bGxwdHI7CiAgICAgfSBl
bHNlIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpIHsKLSAgICAgICAgYXV0
byYgaXRlbSA9IHR5cGVzW2luc2VydChkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVk
VHlwZSkuZWxlbWVudFR5cGUoKSwgdHlwZXMpXTsKLSAgICAgICAgdmVjdG9yVG9JbnNlcnRJbnRv
ID0gJml0ZW0tPmNoaWxkcmVuKCk7Ci0gICAgICAgIHBhcmVudCA9ICZpdGVtOworICAgICAgICBw
YXJlbnQgPSBpbnNlcnQoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpLmVs
ZW1lbnRUeXBlKCksIHR5cGVzKTsKKyAgICAgICAgdmVjdG9yVG9JbnNlcnRJbnRvID0gJnBhcmVu
dC0+Y2hpbGRyZW4oKTsKICAgICB9IGVsc2UgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBl
Pih1bm5hbWVkVHlwZSkpIHsKLSAgICAgICAgYXV0byYgaXRlbSA9IHR5cGVzW2luc2VydChkb3du
Y2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpLmVsZW1lbnRUeXBlKCks
IHR5cGVzKV07Ci0gICAgICAgIHZlY3RvclRvSW5zZXJ0SW50byA9ICZpdGVtLT5jaGlsZHJlbigp
OwotICAgICAgICBwYXJlbnQgPSAmaXRlbTsKKyAgICAgICAgcGFyZW50ID0gaW5zZXJ0KGRvd25j
YXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKSwg
dHlwZXMpOworICAgICAgICB2ZWN0b3JUb0luc2VydEludG8gPSAmcGFyZW50LT5jaGlsZHJlbigp
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1dG8mIGl0ZW0gPSB0eXBlc1tpbnNlcnQoZG93bmNh
c3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKS50eXBlKCksIHR5cGVzKV07Ci0gICAgICAg
IHZlY3RvclRvSW5zZXJ0SW50byA9ICZpdGVtLT5jaGlsZHJlbigpOwotICAgICAgICBwYXJlbnQg
PSAmaXRlbTsKKyAgICAgICAgcGFyZW50ID0gaW5zZXJ0KGRvd25jYXN0PEFTVDo6QXJyYXlUeXBl
Pih1bm5hbWVkVHlwZSkudHlwZSgpLCB0eXBlcyk7CisgICAgICAgIHZlY3RvclRvSW5zZXJ0SW50
byA9ICZwYXJlbnQtPmNoaWxkcmVuKCk7CiAgICAgfQogICAgIEFTU0VSVCh2ZWN0b3JUb0luc2Vy
dEludG8pOwogCkBAIC0zMzksMTEgKzMzNiwxMSBAQCBzaXplX3QgVHlwZU5hbWVyOjppbnNlcnQo
QVNUOjpVbm5hbWVkVHlwCiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRk
UmVzdWx0LmlzTmV3RW50cnkpOwogICAgICAgICB9CiAgICAgICAgIHZlY3RvclRvSW5zZXJ0SW50
by0+YXBwZW5kKFdURk1vdmUocmVzdWx0KSk7Ci0gICAgICAgIHJldHVybiB2ZWN0b3JUb0luc2Vy
dEludG8tPnNpemUoKSAtIDE7CisgICAgICAgIHJldHVybiAmdmVjdG9yVG9JbnNlcnRJbnRvLT5s
YXN0KCkuZ2V0KCk7CiAgICAgfQogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV91bm5hbWVkVHlwZU1h
cHBpbmcuYWRkKCZ1bm5hbWVkVHlwZSwgJippdGVyYXRvcik7CiAgICAgQVNTRVJUX1VOVVNFRChh
ZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICByZXR1cm4gaXRlcmF0b3IgLSB2
ZWN0b3JUb0luc2VydEludG8tPmJlZ2luKCk7CisgICAgcmV0dXJuICYqaXRlcmF0b3I7CiB9CiAK
IGNsYXNzIE1ldGFsVHlwZURlY2xhcmF0aW9uV3JpdGVyIDogcHVibGljIFZpc2l0b3IgewpAQCAt
Mzk4LDcgKzM5NSw3IEBAIHZvaWQgVHlwZU5hbWVyOjplbWl0VW5uYW1lZFR5cGVEZWZpbml0aW8K
ICAgICB9IGVsc2UgewogICAgICAgICBhdXRvJiBhcnJheVR5cGUgPSBkb3duY2FzdDxBcnJheVR5
cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9kZSk7CiAgICAgICAgIEFTU0VSVChiYXNlVHlwZU5h
bWVOb2RlLnBhcmVudCgpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmlu
ZygidHlwZWRlZiBBcnJheTwiLCBhcnJheVR5cGUucGFyZW50KCktPm1hbmdsZWROYW1lKCksICIs
ICIsIGFycmF5VHlwZS5udW1FbGVtZW50cygpLCAiPiAiLCBhcnJheVR5cGUubWFuZ2xlZE5hbWUo
KSwgIjtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygidHlw
ZWRlZiBhcnJheTwiLCBhcnJheVR5cGUucGFyZW50KCktPm1hbmdsZWROYW1lKCksICIsICIsIGFy
cmF5VHlwZS5udW1FbGVtZW50cygpLCAiPiAiLCBhcnJheVR5cGUubWFuZ2xlZE5hbWUoKSwgIjtc
biIpKTsKICAgICB9CiAgICAgZW1pdHRlZFVubmFtZWRUeXBlcy5hZGQoJmJhc2VUeXBlTmFtZU5v
ZGUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwv
V0hMU0xUeXBlTmFtZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5oCShyZXZpc2lvbiAyNDY4NTApCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcg
bWV0YWxUeXBlRGVmaW5pdGlvbnMoKTsKIAogICAgIFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2Rl
PiBjcmVhdGVOYW1lTm9kZShBU1Q6OlVubmFtZWRUeXBlJiwgQmFzZVR5cGVOYW1lTm9kZSogcGFy
ZW50KTsKLSAgICBzaXplX3QgaW5zZXJ0KEFTVDo6VW5uYW1lZFR5cGUmLCBWZWN0b3I8VW5pcXVl
UmVmPEJhc2VUeXBlTmFtZU5vZGU+PiYpOworICAgIEJhc2VUeXBlTmFtZU5vZGUqIGluc2VydChB
U1Q6OlVubmFtZWRUeXBlJiwgVmVjdG9yPFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPj4mKTsK
IAogICAgIFByb2dyYW0mIG1fcHJvZ3JhbTsKICAgICBWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBl
TmFtZU5vZGU+PiBtX3RyaWU7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDY4NTApCisrKyBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxOS0wNi0y
NyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBbV0hMU0xdIElt
cGxlbWVudCBhcnJheXMgYW5kIE1ha2VBcnJheVJlZmVyZW5jZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NDE0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTXlsZXMgQy4gTWF4ZmllbGQuCisKKyAgICAgICAgKiB3ZWJncHUvd2hsc2wtaHVnZS1hcnJh
eS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC1odWdlLWFycmF5
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC1tYWtlLWFycmF5LXJlZmVyZW5j
ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC1tYWtlLWFycmF5
LXJlZmVyZW5jZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wtc2ltcGxlLWFy
cmF5cy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC1zaW1wbGUt
YXJyYXlzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC10d28tZGltZW5zaW9u
YWwtYXJyYXktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wtdHdv
LWRpbWVuc2lvbmFsLWFycmF5Lmh0bWw6IEFkZGVkLgorCiAyMDE5LTA2LTI2ICBKb3NlcGggUGVj
b3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogSW1w
bGVtZW50IGNvbnNvbGUuY291bnRSZXNldApJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNs
LWh1Z2UtYXJyYXktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdw
dS93aGxzbC1odWdlLWFycmF5LWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtaHVnZS1hcnJheS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1IEBACitQQVNTIAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1odWdlLWFy
cmF5Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWh1Z2UtYXJy
YXkuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtaHVnZS1h
cnJheS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE1IEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25zLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2NvbnN0IHNoYWRlclNvdXJjZSA9IGAK
K3ZvaWQgZmlsbCh0aHJlYWQgZmxvYXRbXSBhcnJheSwgZmxvYXQgdmFsdWUpIHsKKyAgICBmb3Ig
KHVpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgeworICAgICAgICBhcnJheVtpXSA9
IHZhbHVlOworICAgIH0KK30KKworW251bXRocmVhZHMoMSwgMSwgMSldCitjb21wdXRlIHZvaWQg
Y29tcHV0ZVNoYWRlcihkZXZpY2UgaW50W10gYnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMg
dGhyZWFkSUQgOiBTVl9EaXNwYXRjaFRocmVhZElEKSB7CisgICAgZmxvYXRbMTAwMF0gYXJyYXk7
CisgICAgaWYgKGFycmF5Lmxlbmd0aCAhPSAxMDAwKQorICAgICAgICByZXR1cm47CisgICAgZm9y
ICh1aW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKGFycmF5
W2ldICE9IDApCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXJyYXlbMF0gPSAw
LjEzMzc7CisgICAgaWYgKGFycmF5WzBdICE9IDAuMTMzNykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgdGhyZWFkIGZsb2F0W10gYXJyYXlQdHIgPSBAYXJyYXk7CisgICAgaWYgKGFycmF5UHRyLmxl
bmd0aCAhPSAxMDAwKQorICAgICAgICByZXR1cm47CisKKyAgICBmaWxsKGFycmF5UHRyLCAwLjEw
MTApOworICAgIGZvciAodWludCBpID0gMDsgaSA8IGFycmF5UHRyLmxlbmd0aDsgKytpKSB7Cisg
ICAgICAgIGlmIChhcnJheVB0cltpXSAhPSAwLjEwMTApCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGlmIChhcnJheVtpXSAhPSAwLjEwMTApCisgICAgICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgZmlsbChAYXJyYXksIDAuMDEwMSk7CisgICAgZm9yICh1aW50IGkgPSAwOyBpIDwg
YXJyYXkubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKGFycmF5UHRyW2ldICE9IDAuMDEwMSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGFycmF5W2ldICE9IDAuMDEwMSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBidWZmZXJbMF0gPSAxOworfQorYDsKK2Fz
eW5jIGZ1bmN0aW9uIHN0YXJ0KGRldmljZSkgeworICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9IGRl
dmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoe2NvZGU6IHNoYWRlclNvdXJjZSwgaXNXSExTTDogdHJ1
ZX0pOworICAgIGNvbnN0IGNvbXB1dGVTdGFnZSA9IHttb2R1bGU6IHNoYWRlck1vZHVsZSwgZW50
cnlQb2ludDogImNvbXB1dGVTaGFkZXIifTsKKworICAgIGNvbnN0IGJpbmRHcm91cExheW91dERl
c2NyaXB0b3IgPSB7YmluZGluZ3M6IFt7YmluZGluZzogMCwgdmlzaWJpbGl0eTogNywgdHlwZTog
InN0b3JhZ2UtYnVmZmVyIn1dfTsKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2Uu
Y3JlYXRlQmluZEdyb3VwTGF5b3V0KGJpbmRHcm91cExheW91dERlc2NyaXB0b3IpOworICAgIGNv
bnN0IHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvciA9IHtiaW5kR3JvdXBMYXlvdXRzOiBbYmluZEdy
b3VwTGF5b3V0XX07CisgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlw
ZWxpbmVMYXlvdXQocGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNvbXB1
dGVQaXBlbGluZURlc2NyaXB0b3IgPSB7Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5lTGF5
b3V0fTsKKyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBp
cGVsaW5lKGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IpOworCisgICAgY29uc3Qgc2l6ZSA9IElu
dDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAxOworCisgICAgY29uc3QgYnVmZmVyRGVzY3Jp
cHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFIHwgR1BVQnVmZmVy
VXNhZ2UuVFJBTlNGRVJfU1JDfTsKKyAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVm
ZmVyKGJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IGJ1ZmZlckFycmF5QnVmZmVyID0gYXdh
aXQgYnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCBidWZmZXJGbG9hdDMyQXJyYXkg
PSBuZXcgSW50MzJBcnJheShidWZmZXJBcnJheUJ1ZmZlcik7CisgICAgYnVmZmVyRmxvYXQzMkFy
cmF5WzBdID0gMDsKKyAgICBidWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc3VsdHNCdWZm
ZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BV
QnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9OworICAg
IGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJE
ZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRz
QnVmZmVyLCBzaXplfTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAs
IHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9y
ID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmdd
fTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91
cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRl
Q29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9C
dWZmZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVmZmVyLCAwLCBzaXplKTsKKyAgICBjb25zdCBjb21w
dXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNzKCk7CisgICAg
Y29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZSk7CisgICAgY29t
cHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIGNvbXB1dGVQ
YXNzRW5jb2Rlci5kaXNwYXRjaCgxLCAxLCAxKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuZW5k
UGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2go
KTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAg
IGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc3VsdHNCdWZmZXIubWFwUmVhZEFz
eW5jKCk7CisgICAgbGV0IHJlc3VsdHNJbnQzMkFycmF5ID0gbmV3IEludDMyQXJyYXkocmVzdWx0
c0FycmF5QnVmZmVyKTsKKyAgICBpZiAocmVzdWx0c0ludDMyQXJyYXlbMF0gPT09IDEpCisgICAg
ICAgIHRlc3RQYXNzZWQoIiIpOworICAgIGVsc2UKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7Cisg
ICAgcmVzdWx0c0J1ZmZlci51bm1hcCgpOworfQord2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVl
OworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkgeworICAgIHN0YXJ0KGRl
dmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwg
ZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgICAgICBmaW5pc2hKU1Rl
c3QoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIHRlc3RQYXNzZWQoIiIpOworICAg
IGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYWtlLWFycmF5LXJlZmVyZW5jZS1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1ha2UtYXJyYXktcmVmZXJl
bmNlLWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtbWFrZS1hcnJheS1yZWZlcmVuY2UtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNSBAQAorUEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWFrZS1hcnJheS1y
ZWZlcmVuY2UuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWFr
ZS1hcnJheS1yZWZlcmVuY2UuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJn
cHUvd2hsc2wtbWFrZS1hcnJheS1yZWZlcmVuY2UuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE4NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMv
d2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+
Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitib29sIHRlc3QxKCkgeworICAgIGludCB2YWx1ZSA9
IDQyOworICAgIHRocmVhZCBpbnRbXSBhcnJheSA9IEB2YWx1ZTsKKyAgICBpZiAoYXJyYXkubGVu
Z3RoICE9IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYXJyYXlbMF0gIT0gNDIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYXJyYXlbMTIwMjEzXSAhPSAwKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhcnJheVswXSA9IDEzMzc7CisgICAgaWYgKHZhbHVl
ICE9IDEzMzcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIHRlc3QyKCkgeworICAgIGludCB2YWx1ZSA9IDQyOworICAgIHRocmVhZCBpbnQqIHB0
ciA9ICZ2YWx1ZTsKKyAgICBpZiAoKnB0ciAhPSA0MikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgdGhyZWFkIGludFtdIGFycmF5ID0gQHB0cjsKKyAgICBpZiAoYXJyYXkubGVuZ3RoICE9
IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYXJyYXlbMF0gIT0gNDIpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYXJyYXlbMTIzNzQyMTddICE9IDApCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAqcHRyID0gNjY2OworICAgIGlmICgqcHRyICE9IDY2
NikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICh2YWx1ZSAhPSA2NjYpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoYXJyYXkubGVuZ3RoICE9IDEpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoYXJyYXlbMF0gIT0gNjY2KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBhcnJheVswXSA9IDQyNDI7CisgICAgaWYgKCpwdHIgIT0gNDI0MikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICh2YWx1ZSAhPSA0MjQyKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKGFycmF5WzBdICE9IDQyNDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoYXJyYXkubGVuZ3RoICE9IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIHRlc3QzKCkgeworICAgIGludFs0Ml0geDsKKyAgICB0aHJl
YWQgaW50WzQyXSogYXJyYXlQdHIgPSAmeDsKKyAgICBpZiAoYXJyYXlQdHItPmxlbmd0aCAhPSA0
MikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgeFs0MV0gPSA2NjY7CisgICAgaWYgKCgq
YXJyYXlQdHIpWzQxXSAhPSA2NjYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoKCph
cnJheVB0cilbMF0gIT0gMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdGhyZWFkIGlu
dFtdIGFycmF5ID0gQHg7CisgICAgaWYgKGFycmF5Lmxlbmd0aCAhPSA0MikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgYXJyYXlbMF0gPSAxMzM3OworICAgIGlmICh4WzBdICE9IDEzMzcp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoKCphcnJheVB0cilbMF0gIT0gMTMzNykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgdGVz
dDQoKSB7CisgICAgdGhyZWFkIGludCogcHRyID0gbnVsbDsKKworICAgIHRocmVhZCBpbnRbXSBh
cnJheSA9IEBwdHI7CisgICAgaWYgKGFycmF5Lmxlbmd0aCAhPSAwKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoYXJyYXlbMF0gIT0gMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKGFycmF5WzEwMDAwMF0gIT0gMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK1tudW10aHJlYWRzKDEsIDEsIDEpXQorY29tcHV0ZSB2b2lk
IGNvbXB1dGVTaGFkZXIoZGV2aWNlIGludFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQz
IHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgeworICAgIGlmICghdGVzdDEoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCF0ZXN0MigpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoIXRlc3QzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghdGVzdDQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYnVmZmVyWzBdID0gMTsKK30KK2A7Cithc3luYyBmdW5jdGlv
biBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRl
U2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBj
b25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJj
b21wdXRlU2hhZGVyIn07CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0g
e2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1
ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRH
cm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGlu
ZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19
OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0
KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVE
ZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAg
Y29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21w
dXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHNpemUgPSBJbnQzMkFycmF5LkJZ
VEVTX1BFUl9FTEVNRU5UICogMTsKKworICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6
ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5T
RkVSX1NSQ307CisgICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJE
ZXNjcmlwdG9yKTsKKyAgICBjb25zdCBidWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5t
YXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3QgYnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEludDMy
QXJyYXkoYnVmZmVyQXJyYXlCdWZmZXIpOworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDA7
CisgICAgYnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCByZXN1bHRzQnVmZmVyRGVzY3JpcHRv
ciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8IEdQVUJ1ZmZlclVzYWdl
LlRSQU5TRkVSX0RTVCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9SRUFEfTsKKyAgICBjb25zdCByZXN1
bHRzQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXN1bHRzQnVmZmVyRGVzY3JpcHRvcik7
CisKKyAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzdWx0c0J1ZmZlciwgc2l6
ZX07CisgICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTog
YnVmZmVyQmluZGluZ307CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6
IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29u
c3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9y
KTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNv
ZGVyKCk7IC8vIHt9CisgICAgY29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKGJ1ZmZl
ciwgMCwgcmVzdWx0c0J1ZmZlciwgMCwgc2l6ZSk7CisgICAgY29uc3QgY29tcHV0ZVBhc3NFbmNv
ZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5Db21wdXRlUGFzcygpOworICAgIGNvbXB1dGVQYXNz
RW5jb2Rlci5zZXRQaXBlbGluZShjb21wdXRlUGlwZWxpbmUpOworICAgIGNvbXB1dGVQYXNzRW5j
b2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIu
ZGlzcGF0Y2goMSwgMSwgMSk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAg
ICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2
aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisKKyAgICBjb25zdCByZXN1
bHRzQXJyYXlCdWZmZXIgPSBhd2FpdCByZXN1bHRzQnVmZmVyLm1hcFJlYWRBc3luYygpOworICAg
IGxldCByZXN1bHRzSW50MzJBcnJheSA9IG5ldyBJbnQzMkFycmF5KHJlc3VsdHNBcnJheUJ1ZmZl
cik7CisgICAgaWYgKHJlc3VsdHNJbnQzMkFycmF5WzBdID09PSAxKQorICAgICAgICB0ZXN0UGFz
c2VkKCIiKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgIHJlc3VsdHNC
dWZmZXIudW5tYXAoKTsKK30KK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJhc2lj
RGV2aWNlKCkudGhlbihmdW5jdGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4o
ZnVuY3Rpb24oKSB7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0sIGZ1bmN0aW9uKCkg
eworICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAg
fSk7Cit9LCBmdW5jdGlvbigpIHsKKyAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBmaW5pc2hKU1Rl
c3QoKTsKK30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtc2ltcGxlLWFycmF5cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvd2ViZ3B1L3dobHNsLXNpbXBsZS1hcnJheXMtZXhwZWN0ZWQudHh0CShub25leGlz
dGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtYXJyYXlzLWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUgQEAKK1BBU1MgCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLXNpbXBsZS1hcnJheXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy93ZWJncHUvd2hsc2wtc2ltcGxlLWFycmF5cy5odG1sCShub25leGlzdGVudCkKKysrIExheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1zaW1wbGUtYXJyYXlzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMjMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2Ny
aXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0gYAordm9pZCBmaWxsKHRocmVhZCBpbnRbXSBhcnJh
eSwgaW50IHZhbHVlKSB7CisgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgYXJyYXlbaV0gPSB2YWx1ZTsKKyAgICB9Cit9CisKK1tudW10aHJlYWRz
KDEsIDEsIDEpXQorY29tcHV0ZSB2b2lkIGNvbXB1dGVTaGFkZXIoZGV2aWNlIGludFtdIGJ1ZmZl
ciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkg
eworICAgIGludFs0Ml0gYXJyYXk7CisgICAgaWYgKGFycmF5Lmxlbmd0aCAhPSA0MikKKyAgICAg
ICAgcmV0dXJuOworICAgIGZvciAodWludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7
CisgICAgICAgIGlmIChhcnJheVtpXSAhPSAwKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGFycmF5WzBdID0gNTE3OworICAgIGlmIChhcnJheVswXSAhPSA1MTcpCisgICAgICAg
IHJldHVybjsKKworICAgIHRocmVhZCBpbnRbXSBhcnJheVB0ciA9IEBhcnJheTsKKyAgICBpZiAo
YXJyYXlQdHIubGVuZ3RoICE9IDQyKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnRbNDJdIGFy
cmF5MjsKKyAgICBhcnJheTIgPSBhcnJheTsKKyAgICBpZiAoYXJyYXkyLmxlbmd0aCAhPSA0MikK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChhcnJheTJbMF0gIT0gNTE3KQorICAgICAgICByZXR1
cm47CisKKyAgICBmaWxsKGFycmF5UHRyLCAxMzM3KTsKKyAgICBmb3IgKHVpbnQgaSA9IDA7IGkg
PCBhcnJheVB0ci5sZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoYXJyYXlQdHJbaV0gIT0gMTMz
NykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGFycmF5W2ldICE9IDEzMzcpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGFycmF5MlswXSAhPSA1MTcpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoYXJyYXkyLmxlbmd0aCAhPSA0MikKKyAgICAgICAgcmV0
dXJuOworICAgIGZvciAodWludCBpID0gMTsgaSA8IGFycmF5Mi5sZW5ndGg7ICsraSkgeworICAg
ICAgICBpZiAoYXJyYXkyW2ldICE9IDApCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgYnVmZmVyWzBdID0gMTsKK30KK2A7Cithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsK
KyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2Rl
OiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBjb21wdXRlU3RhZ2Ug
PSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hhZGVyIn07CisK
KyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRp
bmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZlciJ9XX07CisgICAgY29u
c3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3Jv
dXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3Ig
PSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVs
aW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVz
Y3JpcHRvcik7CisKKyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yID0ge2NvbXB1
dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgY29tcHV0ZVBpcGVs
aW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21wdXRlUGlwZWxpbmVEZXNjcmlw
dG9yKTsKKworICAgIGNvbnN0IHNpemUgPSBJbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICog
MTsKKworICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZl
clVzYWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQ307CisgICAgY29u
c3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNjcmlwdG9yKTsKKyAgICBj
b25zdCBidWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7Cisg
ICAgY29uc3QgYnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEludDMyQXJyYXkoYnVmZmVyQXJyYXlC
dWZmZXIpOworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVswXSA9IDA7CisgICAgYnVmZmVyLnVubWFw
KCk7CisKKyAgICBjb25zdCByZXN1bHRzQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTog
R1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX0RTVCB8IEdQ
VUJ1ZmZlclVzYWdlLk1BUF9SRUFEfTsKKyAgICBjb25zdCByZXN1bHRzQnVmZmVyID0gZGV2aWNl
LmNyZWF0ZUJ1ZmZlcihyZXN1bHRzQnVmZmVyRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBidWZm
ZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzdWx0c0J1ZmZlciwgc2l6ZX07CisgICAgY29uc3QgYmlu
ZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVyQmluZGluZ307Cisg
ICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRHcm91cExheW91dCwg
YmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07CisgICAgY29uc3QgYmluZEdyb3VwID0gZGV2
aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGNv
bW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7IC8vIHt9CisgICAg
Y29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKGJ1ZmZlciwgMCwgcmVzdWx0c0J1ZmZl
ciwgMCwgc2l6ZSk7CisgICAgY29uc3QgY29tcHV0ZVBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29k
ZXIuYmVnaW5Db21wdXRlUGFzcygpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRQaXBlbGlu
ZShjb21wdXRlUGlwZWxpbmUpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAo
MCwgYmluZEdyb3VwKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuZGlzcGF0Y2goMSwgMSwgMSk7
CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmVuZFBhc3MoKTsKKyAgICBjb25zdCBjb21tYW5kQnVm
ZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7CisgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3Vi
bWl0KFtjb21tYW5kQnVmZmVyXSk7CisKKyAgICBjb25zdCByZXN1bHRzQXJyYXlCdWZmZXIgPSBh
d2FpdCByZXN1bHRzQnVmZmVyLm1hcFJlYWRBc3luYygpOworICAgIGxldCByZXN1bHRzSW50MzJB
cnJheSA9IG5ldyBJbnQzMkFycmF5KHJlc3VsdHNBcnJheUJ1ZmZlcik7CisgICAgaWYgKHJlc3Vs
dHNJbnQzMkFycmF5WzBdID09PSAxKQorICAgICAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBlbHNl
CisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAgIHJlc3VsdHNCdWZmZXIudW5tYXAoKTsKK30K
K3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2dldEJhc2ljRGV2aWNlKCkudGhlbihmdW5j
dGlvbihkZXZpY2UpIHsKKyAgICBzdGFydChkZXZpY2UpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAg
ICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0RmFp
bGVkKCIiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSk7Cit9LCBmdW5jdGlvbigp
IHsKKyAgICB0ZXN0UGFzc2VkKCIiKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworPC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdHdvLWRp
bWVuc2lvbmFsLWFycmF5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtdHdvLWRpbWVuc2lvbmFsLWFycmF5LWV4cGVjdGVkLnR4dAkobm9uZXhpc3Rl
bnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdHdvLWRpbWVuc2lvbmFsLWFycmF5LWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUgQEAKK1BBU1MgCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0
VGVzdHMvd2ViZ3B1L3dobHNsLXR3by1kaW1lbnNpb25hbC1hcnJheS5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC10d28tZGltZW5zaW9uYWwtYXJyYXkuaHRtbAko
bm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdHdvLWRpbWVuc2lvbmFs
LWFycmF5Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjUgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorY29uc3Qgc2hhZGVyU291cmNlID0g
YAordm9pZCBmaWxsKHRocmVhZCBmbG9hdFsxMF1bXSBhcnJheSwgZmxvYXRbMTBdIHZhbHVlKSB7
CisgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
YXJyYXlbaV0gPSB2YWx1ZTsKKyAgICB9Cit9CisKK3ZvaWQgZmlsbCh0aHJlYWQgZmxvYXRbXSBh
cnJheSwgZmxvYXQgdmFsdWUpIHsKKyAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5n
dGg7IGkrKykgeworICAgICAgICBhcnJheVtpXSA9IHZhbHVlOworICAgIH0KK30KKworYm9vbCBj
b250YWlucyh0aHJlYWQgZmxvYXRbMTBdW10gYXJyYXksIGZsb2F0IHZhbHVlKSB7CisgICAgZm9y
ICh1aW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgZm9yICh1aW50
IGogPSAwOyBqIDwgYXJyYXlbal0ubGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgIGlmIChhcnJh
eVtpXVtqXSAhPSB2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgY29udGFpbnModGhyZWFkIGZs
b2F0W10gYXJyYXksIGZsb2F0IHZhbHVlKSB7CisgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgYXJy
YXkubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGFycmF5W2ldICE9IHZhbHVlKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworW251bXRo
cmVhZHMoMSwgMSwgMSldCitjb21wdXRlIHZvaWQgY29tcHV0ZVNoYWRlcihkZXZpY2UgaW50W10g
YnVmZmVyIDogcmVnaXN0ZXIodTApLCBmbG9hdDMgdGhyZWFkSUQgOiBTVl9EaXNwYXRjaFRocmVh
ZElEKSB7CisgICAgZmxvYXRbMTBdWzVdIGFycmF5OworICAgIGlmIChhcnJheS5sZW5ndGggIT0g
NSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghY29udGFpbnMoQGFycmF5LCAwKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgZmxvYXRbMTBdIHZhbHVlOworICAgICAgICBmaWxsKEB2YWx1ZSwgZmxvYXQo
aSkpOworICAgICAgICBhcnJheVtpXSA9IHZhbHVlOworICAgIH0KKworICAgIGZvciAodWludCBp
ID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7CisgICAgICAgIGZsb2F0WzEwXSB2YWx1ZSA9
IGFycmF5W2ldOworICAgICAgICBpZiAoIWNvbnRhaW5zKEB2YWx1ZSwgZmxvYXQoaSkpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJ1ZmZlclswXSA9IDE7Cit9CitgOworYXN5
bmMgZnVuY3Rpb24gc3RhcnQoZGV2aWNlKSB7CisgICAgY29uc3Qgc2hhZGVyTW9kdWxlID0gZGV2
aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7Y29kZTogc2hhZGVyU291cmNlLCBpc1dITFNMOiB0cnVl
fSk7CisgICAgY29uc3QgY29tcHV0ZVN0YWdlID0ge21vZHVsZTogc2hhZGVyTW9kdWxlLCBlbnRy
eVBvaW50OiAiY29tcHV0ZVNoYWRlciJ9OworCisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0RGVz
Y3JpcHRvciA9IHtiaW5kaW5nczogW3tiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiA3LCB0eXBlOiAi
c3RvcmFnZS1idWZmZXIifV19OworICAgIGNvbnN0IGJpbmRHcm91cExheW91dCA9IGRldmljZS5j
cmVhdGVCaW5kR3JvdXBMYXlvdXQoYmluZEdyb3VwTGF5b3V0RGVzY3JpcHRvcik7CisgICAgY29u
c3QgcGlwZWxpbmVMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRHcm91cExheW91dHM6IFtiaW5kR3Jv
dXBMYXlvdXRdfTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dCA9IGRldmljZS5jcmVhdGVQaXBl
bGluZUxheW91dChwaXBlbGluZUxheW91dERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tcHV0
ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRlU3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlv
dXR9OworICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlw
ZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBzaXplID0gSW50
MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDE7CisKKyAgICBjb25zdCBidWZmZXJEZXNjcmlw
dG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJV
c2FnZS5UUkFOU0ZFUl9TUkN9OworICAgIGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZm
ZXIoYnVmZmVyRGVzY3JpcHRvcik7CisgICAgY29uc3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2Fp
dCBidWZmZXIubWFwV3JpdGVBc3luYygpOworICAgIGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9
IG5ldyBJbnQzMkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICBidWZmZXJGbG9hdDMyQXJy
YXlbMF0gPSAwOworICAgIGJ1ZmZlci51bm1hcCgpOworCisgICAgY29uc3QgcmVzdWx0c0J1ZmZl
ckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVC
dWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07CisgICAg
Y29uc3QgcmVzdWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRl
c2NyaXB0b3IpOworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNC
dWZmZXIsIHNpemV9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzogMCwg
cmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0b3Ig
PSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGluZ119
OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdyb3Vw
RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVhdGVD
b21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb0J1
ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIHNpemUpOworICAgIGNvbnN0IGNvbXB1
dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBj
b21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21w
dXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBh
c3NFbmNvZGVyLmRpc3BhdGNoKDEsIDEsIDEpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQ
YXNzKCk7CisgICAgY29uc3QgY29tbWFuZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgp
OworICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAg
Y29uc3QgcmVzdWx0c0FycmF5QnVmZmVyID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5
bmMoKTsKKyAgICBsZXQgcmVzdWx0c0ludDMyQXJyYXkgPSBuZXcgSW50MzJBcnJheShyZXN1bHRz
QXJyYXlCdWZmZXIpOworICAgIGlmIChyZXN1bHRzSW50MzJBcnJheVswXSA9PT0gMSkKKyAgICAg
ICAgdGVzdFBhc3NlZCgiIik7CisgICAgZWxzZQorICAgICAgICB0ZXN0RmFpbGVkKCIiKTsKKyAg
ICByZXN1bHRzQnVmZmVyLnVubWFwKCk7Cit9Cit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7
CitnZXRCYXNpY0RldmljZSgpLnRoZW4oZnVuY3Rpb24oZGV2aWNlKSB7CisgICAgc3RhcnQoZGV2
aWNlKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCBm
dW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiIik7CisgICAgICAgIGZpbmlzaEpTVGVz
dCgpOworICAgIH0pOworfSwgZnVuY3Rpb24oKSB7CisgICAgdGVzdFBhc3NlZCgiIik7CisgICAg
ZmluaXNoSlNUZXN0KCk7Cit9KTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>