<?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>146064</bug_id>
          
          <creation_ts>2015-06-17 09:07:29 -0700</creation_ts>
          <short_desc>JSC should natively support WebAssembly</short_desc>
          <delta_ts>2017-02-23 07:18:48 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>159775</dependson>
    
    <dependson>162706</dependson>
    
    <dependson>165164</dependson>
    
    <dependson>147212</dependson>
    
    <dependson>147222</dependson>
    
    <dependson>147293</dependson>
    
    <dependson>147393</dependson>
    
    <dependson>147738</dependson>
    
    <dependson>148333</dependson>
    
    <dependson>148373</dependson>
    
    <dependson>148734</dependson>
    
    <dependson>148737</dependson>
    
    <dependson>148772</dependson>
    
    <dependson>148791</dependson>
    
    <dependson>148793</dependson>
    
    <dependson>148838</dependson>
    
    <dependson>148882</dependson>
    
    <dependson>148913</dependson>
    
    <dependson>148934</dependson>
    
    <dependson>148945</dependson>
    
    <dependson>148998</dependson>
    
    <dependson>148999</dependson>
    
    <dependson>149031</dependson>
    
    <dependson>149033</dependson>
    
    <dependson>149051</dependson>
    
    <dependson>149062</dependson>
    
    <dependson>149065</dependson>
    
    <dependson>149080</dependson>
    
    <dependson>149093</dependson>
    
    <dependson>149100</dependson>
    
    <dependson>149102</dependson>
    
    <dependson>149200</dependson>
    
    <dependson>149203</dependson>
    
    <dependson>149206</dependson>
    
    <dependson>149240</dependson>
    
    <dependson>149247</dependson>
    
    <dependson>149254</dependson>
    
    <dependson>149326</dependson>
    
    <dependson>149340</dependson>
    
    <dependson>149383</dependson>
    
    <dependson>149395</dependson>
    
    <dependson>149411</dependson>
    
    <dependson>149425</dependson>
    
    <dependson>149451</dependson>
    
    <dependson>149454</dependson>
    
    <dependson>149486</dependson>
    
    <dependson>149919</dependson>
    
    <dependson>161569</dependson>
    
    <dependson>162884</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>annulen</cc>
    
    <cc>barraclough</cc>
    
    <cc>basile_clement</cc>
    
    <cc>benjamin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>changseok</cc>
    
    <cc>chi187</cc>
    
    <cc>chris</cc>
    
    <cc>clopez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>cshankland</cc>
    
    <cc>dbates</cc>
    
    <cc>ehsan</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>igor.oliveira</cc>
    
    <cc>jfbastien</cc>
    
    <cc>luke</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mike</cc>
    
    <cc>mitz</cc>
    
    <cc>mjs</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>sukolsak</cc>
    
    <cc>teppeis</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1102556</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-17 09:07:29 -0700</bug_when>
    <thetext>WebAssembly (https://github.com/WebAssembly/design) is a new format for native programs on the web. It aims to support everything that asm.js supports, but allows the VM to sidestep the JS parsing and profiling pipeline entirely. This is a good thing for the VM - less work to support native code.

Although WebAssembly will have polyfill to asm.js, we should support it natively by:

- Having a WebAssembly baseline JIT that&apos;s used for fast start-up and some basic execution count profiling.
- An LLVM backend that uses the FTL&apos;s LLVM glue and compiler plan scheduling for hot code.

This standard has broad support, and we should continue to participate in discussions about how to make it great.

https://blog.mozilla.org/luke/2015/06/17/webassembly/
https://brendaneich.com/2015/06/from-asm-js-to-webassembly/
http://blogs.msdn.com/b/mikeholman/archive/2015/06/17/working-on-the-future-of-compile-to-web-applications.aspx
https://twitter.com/jfbastien/status/611201861245399041</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1102737</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-06-17 18:06:52 -0700</bug_when>
    <thetext>I&apos;m up for helping this this. This sounds great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1102792</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-17 20:52:16 -0700</bug_when>
    <thetext>Here&apos;s a proposed implementation sketch:

We should start out by decoupling our work from ES6 modules. From our standpoint, a wasm blob produces a JSGlobalObject that has things hanging off of it. Those things are:

- The ArrayBuffer that is the wasm heap. Eventually this will be a special kind of ArrayBuffer, but initially it can just be an ArrayBuffer.
- Some JSFunction&apos;s that point to FunctionExecutables for all of the wasm functions.
- The CodeBlocks for those FunctionExecutables should contain something other than JSC bytecode. It should be either wasm directly, or our own 3AC (https://en.wikipedia.org/wiki/Three_address_code) bytecode that &quot;unpacks&quot; the wasm AST. I strongly recommend the former - wasm *should* be able to serve the same purposes as our bytecode would ordinarily serve for the purposes of establishing things like CodeOrigin and enabling OSR.
- Preparing a wasm CodeBlock for execution should mean executing a baseline JIT compile of the wasm. I recommend putting a wasm baseline JIT in a directory like JavaScriptCore/wasm. This baseline JIT should be the first thing we implement. It should be possible to implement it using a single unified codebase for all of the target architectures we will ever care about, by just carefully using the existing ABI logic in CCallHelpers and AssemblyHelpers.
- Wasm code should end up having a JITCode instance like any other CodeBlock that has been JITed. That JITCode instance should respond to all of the methods that JITCode should respond to, and this should be sufficient to allow calls from JS to wasm with zero overhead.
- To bootstrap and allow testing, jsc.cpp should allow for feeding in a wasm blob using a global function like loadWASM(data) or loadWASM(filename) or something. The result of the call should be the wasm JSGlobalObject. We should add a new test mode to run-jsc-stress-tests where a directory of .wasm files is turned into tests such that each .wasm file is automagically wrapped by a script that compiles it to binary form and then wraps it in a .js file that loads it and runs it.

This will get us to a point where we can execute wasm, have zero-cost wasm&lt;-&gt;JS calls, and have a testing story.

Once we know that this works and we have a decent test suite, we should proceed to the LLVM optimizing JIT implementation. This would involve:

- Add ExecutionCounter profiling to the wasm baseline JIT code.
- Implement a second JIT that converts wasm to LLVM IR by reusing as much of the DFG::Plan, FTL::Output, FTL::compile, and FTL::link infrastructure as possible.
- Add OSR entry support, probably using the same style as we use for normal FTL OSR entry.

Note that initially we should probably implement the wasm top tier as a direct translation from wasm to LLVM IR. But, eventually, we&apos;ll need our own IR as an intermediate step, to aid support of things like heap bounds check removal and hoisting. LLVM will not be able to do these things, so we should do them ourselves. When we do these things, we should add OSR exit support as well. But I recommend first implementing a direct wasm-&gt;LLVM translation, even if we eventually have to toss this out the window. This translation layer *should* be very small anyway.

In the very near term, we should track the wasm spec and decide when it&apos;s a good time to start implementing a wasm parser. I strongly recommend implementing a SAX-style event-driven parser. Everything we&apos;ll want to do over wasm should involve a full pass over the wasm that is driven by the SAX-style parser. This should be functorized/templatized like crazy to enable super fast analyses in the baseline JIT. The baseline JIT will basically want to run one analysis to establish stack heights and then another analysis to dump code. The optimizing JIT will do a pass to generate IR. I&apos;m not sure if the wasm binary spec is ready for the implementation of such a thing, but as soon as it is, we could start doing this. We should check what the V8 people are doing - I know that they have some public wasm code already; it would be totally cool to reuse their parser if it&apos;s BSD licensed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103128</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-06-18 19:03:10 -0700</bug_when>
    <thetext>&lt;rdar://problem/21454421&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1106544</commentid>
    <comment_count>4</comment_count>
      <attachid>256051</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-07-02 16:57:10 -0700</bug_when>
    <thetext>Created attachment 256051
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1106546</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-02 16:59:02 -0700</bug_when>
    <thetext>Attachment 256051 did not pass style-queue:

ERROR: Source/JavaScriptCore/wasm/WasmOpcodes.h:286:  Missing spaces around |  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/wasm/WasmOpcodes.h:305:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/wasm/WasmOpcodes.h:305:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/wasm/WasmOpcodes.h:305:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/WasmOpcodes.h:312:  is_bad is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmOpcodes.h:347:  The parameter name &quot;ImmBits&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/wasm/WasmOpcodes.h:366:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/wasm/WasmOpcodes.h:366:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/WasmOpcodes.h:371:  is_bad is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmOpcodes.h:400:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/wasm/WasmOpcodes.h:401:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/wasm/WasmOpcodes.h:401:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/WasmOpcodes.h:402:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/wasm/WasmOpcodes.h:402:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/WasmOpcodes.h:403:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/wasm/WasmOpcodes.h:403:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/WasmOpcodes.h:409:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/wasm/WasmOpcodes.h:422:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/WasmOpcodes.h:436:  The parameter name &quot;u32&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/wasm/WasmOpcodes.h:515:  sign_extend is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.h:44:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.h:74:  get_local is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.h:75:  set_local is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.h:76:  set_local is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.h:77:  return_stmt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.h:78:  block_stmt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.h:79:  stmt_list is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.h:80:  if_stmt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.h:81:  if_else_stmt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.h:82:  while_stmt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.h:83:  do_stmt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.h:84:  label_stmt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.h:85:  break_label_stmt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.h:86:  continue_label_stmt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.h:87:  switch_stmt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.h:89:  The parameter name &quot;rType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.h:90:  signed_expr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.h:91:  add_sub is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.h:92:  mul_i32 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.h:93:  rel_i32 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.h:97:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.h:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:41:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:42:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:47:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:48:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:49:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:144:  func_imp_i is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:161:  num_i32_zero is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:162:  num_f32_zero is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:163:  num_f64_zero is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:164:  num_i32_import is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:165:  num_f32_import is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:166:  num_f64_import is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:174:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:177:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:180:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:235:  num_elements is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:254:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:258:  num_exports is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:259:  export_index is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:289:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:317:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:321:  num_vars is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:368:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:414:  JITCompiler::get_local is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:422:  JITCompiler::set_local is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:429:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:441:  JITCompiler::set_local is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:446:  JITCompiler::return_stmt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:450:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:467:  JITCompiler::stmt_list is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:469:  num_stmts is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:474:  JITCompiler::block_stmt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:479:  JITCompiler::if_stmt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:488:  JITCompiler::if_else_stmt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:500:  JITCompiler::while_stmt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:521:  JITCompiler::do_stmt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:543:  JITCompiler::label_stmt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:555:  JITCompiler::break_label_stmt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:561:  JITCompiler::continue_label_stmt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:567:  JITCompiler::switch_stmt is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:585:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:627:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:638:  i32_with_imm is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:643:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:647:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:770:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:786:  JITCompiler::signed_expr is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:792:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:794:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:797:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:798:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:801:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:802:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:807:  JITCompiler::add_sub is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:824:  JITCompiler::mul_i32 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:834:  JITCompiler::rel_i32 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:841:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:843:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:845:  Tests for true/false, null/non-null, a
nd zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:847:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:849:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:851:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:853:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/wasm/WasmJITCompiler.cpp:855:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 106 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1106552</commentid>
    <comment_count>6</comment_count>
      <attachid>256055</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-07-02 17:41:05 -0700</bug_when>
    <thetext>Created attachment 256055
work in progress, based on https://github.com/WebAssembly/polyfill-prototype-1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1106619</commentid>
    <comment_count>7</comment_count>
      <attachid>256074</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-07-02 22:47:20 -0700</bug_when>
    <thetext>Created attachment 256074
work in progress, based on https://github.com/WebAssembly/polyfill-prototype-1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1106876</commentid>
    <comment_count>8</comment_count>
      <attachid>256153</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-07-04 10:31:50 -0700</bug_when>
    <thetext>Created attachment 256153
Work in progress. Add support for some 64-bit floating-point operations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108147</commentid>
    <comment_count>9</comment_count>
      <attachid>256466</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-07-09 00:22:50 -0700</bug_when>
    <thetext>Created attachment 256466
Work in progress. Add initial support for calling internal functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108866</commentid>
    <comment_count>10</comment_count>
      <attachid>256641</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-07-10 20:17:22 -0700</bug_when>
    <thetext>Created attachment 256641
Work in progress. Add support for calling JavaScript functions from WebAssembly functions and vice versa. Add initial support for importing and exporting functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108883</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-10 21:52:45 -0700</bug_when>
    <thetext>I wonder if the reason why visitChildren on Wasm::Module isn&apos;t called is that the macro magic to build the method table doesn&apos;t like things that aren&apos;t directly in the JSC namespace.  Perhaps try to remove the Module from the Wasm namespace and see what happens?

Before you do that, you could just take a look at what the Wasm::Module::s_info looks like in the debugger.  Check if the visitChilren points at your visitChildren.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108941</commentid>
    <comment_count>12</comment_count>
      <attachid>256659</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-07-11 11:23:46 -0700</bug_when>
    <thetext>Created attachment 256659
Work in progress. Fix GC-related bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109079</commentid>
    <comment_count>13</comment_count>
      <attachid>256693</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-07-13 03:24:27 -0700</bug_when>
    <thetext>Created attachment 256693
Work in progress. Implement linear memory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109347</commentid>
    <comment_count>14</comment_count>
      <attachid>256765</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-07-14 04:16:09 -0700</bug_when>
    <thetext>Created attachment 256765
Work in progress. Implement all the linear memory operations and many mathematical operations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109671</commentid>
    <comment_count>15</comment_count>
      <attachid>256851</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-07-15 12:43:17 -0700</bug_when>
    <thetext>Created attachment 256851
Work in progress. First attempt at templatizing the parser. Add a stack height calculator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109851</commentid>
    <comment_count>16</comment_count>
      <attachid>256898</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-07-16 03:28:47 -0700</bug_when>
    <thetext>Created attachment 256898
Work in progress. Make a structural change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110602</commentid>
    <comment_count>17</comment_count>
      <attachid>257089</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-07-20 05:35:53 -0700</bug_when>
    <thetext>Created attachment 257089
Work in progress. Refactor the function parser. Remove WebAssemblyExecutable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111458</commentid>
    <comment_count>18</comment_count>
      <attachid>257303</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-07-22 15:50:13 -0700</bug_when>
    <thetext>Created attachment 257303
Work in progress. Change a lot of things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111626</commentid>
    <comment_count>19</comment_count>
      <attachid>257347</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-07-23 04:22:19 -0700</bug_when>
    <thetext>Created attachment 257347
Work in progress. Clean up the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115006</commentid>
    <comment_count>20</comment_count>
      <attachid>258273</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-08-05 04:45:10 -0700</bug_when>
    <thetext>Created attachment 258273
Work in progress. Implement almost every instruction. Should be able to run any WASM files generated by Emscripten and pack-asmjs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124655</commentid>
    <comment_count>21</comment_count>
      <attachid>258273</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2015-09-09 12:27:12 -0700</bug_when>
    <thetext>Comment on attachment 258273
Work in progress. Implement almost every instruction. Should be able to run any WASM files generated by Emscripten and pack-asmjs.

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

You need to turn the assertions into parse errors.

&gt; Source/JavaScriptCore/runtime/Executable.cpp:267
&gt; +        codeBlock-&gt;capabilityLevel();

Why this line?

&gt; Source/JavaScriptCore/wasm/WASMCodeGenerator.h:278
&gt; +            ASSERT_NOT_REACHED();

You can&apos;t trust input here, this should be an error return, not an assertion (neither debug, nor release)

&gt; Source/JavaScriptCore/wasm/WASMCodeGenerator.h:328
&gt; +            ASSERT_NOT_REACHED();

Ditto, you have to handle this error case

&gt; Source/JavaScriptCore/wasm/WASMCodeGenerator.h:411
&gt; +            ASSERT_NOT_REACHED();

ditto

&gt; Source/JavaScriptCore/wasm/WASMCodeGenerator.h:442
&gt; +            ASSERT_NOT_REACHED();

ditto

&gt; Source/JavaScriptCore/wasm/WASMCodeGenerator.h:486
&gt; +            ASSERT_NOT_REACHED();

ditto

&gt; Source/JavaScriptCore/wasm/WASMCodeGenerator.h:519
&gt; +            ASSERT_NOT_REACHED();

ditto

&gt; Source/JavaScriptCore/wasm/WASMCodeGenerator.h:611
&gt; +            ASSERT_NOT_REACHED();

ditto

&gt; Source/JavaScriptCore/wasm/WASMCodeGenerator.h:678
&gt; +            ASSERT_NOT_REACHED();

ditto

&gt; Source/JavaScriptCore/wasm/WASMCodeGenerator.h:710
&gt; +                ASSERT_NOT_REACHED();

ditto

&gt; Source/JavaScriptCore/wasm/WASMCodeGenerator.h:768
&gt; +            ASSERT_NOT_REACHED();

ditto

&gt; Source/JavaScriptCore/wasm/WASMCodeGenerator.h:892
&gt; +                ASSERT_NOT_REACHED();

ditto

&gt; Source/JavaScriptCore/wasm/WASMCodeGenerator.h:955
&gt; +            ASSERT_NOT_REACHED();

ditto

&gt; Source/JavaScriptCore/wasm/WASMCodeGenerator.h:972
&gt; +                ASSERT_NOT_REACHED();

ditto

&gt; Source/JavaScriptCore/wasm/WASMCodeGenerator.h:1001
&gt; +            ASSERT_NOT_REACHED();

ditto

&gt; Source/JavaScriptCore/wasm/WASMFunctionParser.cpp:207
&gt; +            RELEASE_ASSERT_NOT_REACHED();

This is a parse error, not a crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1127804</commentid>
    <comment_count>22</comment_count>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-09-21 16:07:45 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; Comment on attachment 258273 [details]
&gt; Work in progress. Implement almost every instruction. Should be able to run
&gt; any WASM files generated by Emscripten and pack-asmjs.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=258273&amp;action=review
&gt; 
&gt; You need to turn the assertions into parse errors.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/Executable.cpp:267
&gt; &gt; +        codeBlock-&gt;capabilityLevel();
&gt; 
&gt; Why this line?
&gt; 
&gt; &gt; Source/JavaScriptCore/wasm/WASMCodeGenerator.h:278
&gt; &gt; +            ASSERT_NOT_REACHED();
&gt; 
&gt; You can&apos;t trust input here, this should be an error return, not an assertion
&gt; (neither debug, nor release)

Thanks for the comments. This patch is obsolete. I rewrote it almost from beginning. In the current implementation, which has been checked in, the WASMReader class makes sure that the values that it reads are valid. We always use the READ_..._OR_FAIL(value, ...) pattern when we read a value from the user input.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128132</commentid>
    <comment_count>23</comment_count>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-09-22 15:58:48 -0700</bug_when>
    <thetext>The baseline JIT for WebAssembly (polyfill-prototype-1 format[1]) is now complete. We should be able to run any WebAssembly file generated by pack-asmjs.[2]

Below are some very rough, unscientific benchmark results. All these JavaScript files are from PerformanceTests/JetStream/simple/. For each file, I extract the asm.js part, convert it into WebAssembly (polyfill-prototype-1 format) using pack-asmjs, and use loadWebAssembly() to load it. I disable the DFG JIT and the FTL JIT. (If I enable them, the results could be as much as 20x slower.) The reason that float-mm.c-wasm.js is slower than float-mm.c.js is likely that we use very inefficient float calculation in WASM. (We convert the operands to double and convert the result back to float.[3])

[1]: https://github.com/WebAssembly/polyfill-prototype-1
[2]: https://github.com/WebAssembly/polyfill-prototype-1/blob/master/src/pack-asmjs.cpp
[3]: https://bugs.webkit.org/show_bug.cgi?id=149102

--------------------

$ time ./jsc -f ~/benchmark/bigfib.cpp.js 

real	0m4.576s
user	0m4.497s
sys	0m0.067s

$ time ./jsc -f ~/benchmark/bigfib.cpp-wasm.js 

real	0m2.411s
user	0m2.349s
sys	0m0.056s

--------------------

$ time ./jsc -f ~/benchmark/container.cpp.js 

real	0m18.102s
user	0m18.003s
sys	0m0.064s

$ time ./jsc -f ~/benchmark/container.cpp-wasm.js 

real	0m12.808s
user	0m12.737s
sys	0m0.045s

--------------------

$ time ./jsc -f ~/benchmark/float-mm.c.js 

real	0m9.199s
user	0m9.149s
sys	0m0.032s

$ time ./jsc -f ~/benchmark/float-mm.c-wasm.js 

real	0m10.279s
user	0m10.225s
sys	0m0.031s

--------------------

$ time ./jsc -f ~/benchmark/n-body.c.js 
-0.169075164
-0.169083134

real	0m13.374s
user	0m13.312s
sys	0m0.038s

$ time ./jsc -f ~/benchmark/n-body.c-wasm.js 
-0.169075164
-0.169083134

real	0m6.556s
user	0m6.516s
sys	0m0.025s

--------------------

$ time ./jsc -f ~/benchmark/quicksort.c.js 

real	0m2.415s
user	0m2.391s
sys	0m0.016s

$ time ./jsc -f ~/benchmark/quicksort.c-wasm.js 

real	0m2.285s
user	0m2.259s
sys	0m0.019s

--------------------

$ time ./jsc -f ~/benchmark/towers.c.js 

real	0m2.484s
user	0m2.459s
sys	0m0.017s

$ time ./jsc -f ~/benchmark/towers.c-wasm.js 

real	0m1.443s
user	0m1.421s
sys	0m0.016s</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256051</attachid>
            <date>2015-07-02 16:57:10 -0700</date>
            <delta_ts>2015-07-02 17:41:01 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>bug-146064-20150702165616.patch</filename>
            <type>text/plain</type>
            <size>59472</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1ODMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
ZGMwZDVjOTQ5M2QxMTVlODMxMzdlYmU3Zjk1NGI3ZjgyZDUwZDI1Li5iMWRhZDViZWQ4MTY1OGVh
NWIxZmVjMWY5YTQxY2M4OTI0M2RmZTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTEgQEAKKzIwMTUtMDctMDIgIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0Bn
bWFpbC5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBuYXRpdmVseSBzdXBwb3J0IFdlYkFzc2Vt
Ymx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYw
NjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICoganNjLmNw
cDoKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoZnVu
Y3Rpb25Mb2FkV2ViQXNzZW1ibHkpOgorICAgICAgICAqIHdhc20vV2FzbUpJVENvbXBpbGVyLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206Okp1bXBTY29wZTo6SnVtcFNjb3BlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6SnVtcFNjb3BlOjpqdW1wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
SnVtcFNjb3BlOjpsaW5rKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OmNvbXBp
bGVBbmRSdW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6Y29tcGlsZSk6Cisg
ICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjp1bnBhY2spOgorICAgICAgICAoSlNDOjpX
YXNtOjpKSVRDb21waWxlcjo6cmVhZFNpZ25hdHVyZVNlY3Rpb24pOgorICAgICAgICAoSlNDOjpX
YXNtOjpKSVRDb21waWxlcjo6cmVhZEZ1bmN0aW9uSW1wb3J0U2VjdGlvbik6CisgICAgICAgIChK
U0M6Oldhc206OkpJVENvbXBpbGVyOjpyZWFkR2xvYmFsU2VjdGlvbik6CisgICAgICAgIChKU0M6
Oldhc206OkpJVENvbXBpbGVyOjpyZWFkQ29uc3RhbnRQb29sU2VjdGlvbik6CisgICAgICAgIChK
U0M6Oldhc206OkpJVENvbXBpbGVyOjpyZWFkRnVuY3Rpb25EZWNsYXJhdGlvblNlY3Rpb24pOgor
ICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cmVhZEZ1bmN0aW9uUG9pbnRlclRhYmxl
cyk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpyZWFkRnVuY3Rpb25EZWZpbml0
aW9uU2VjdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpyZWFkRXhwb3J0
U2VjdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpyZWFkRnVuY3Rpb25E
ZWZpbml0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnJlYWRBcmdzKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnJlYWRWYXJzKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6SklUQ29tcGlsZXI6OnN0bXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21w
aWxlcjo6Z2V0X2xvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnNldF9s
b2NhbCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpyZXR1cm5fc3RtdCk6Cisg
ICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpzdG10X2xpc3QpOgorICAgICAgICAoSlND
OjpXYXNtOjpKSVRDb21waWxlcjo6YmxvY2tfc3RtdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJ
VENvbXBpbGVyOjppZl9zdG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6Omlm
X2Vsc2Vfc3RtdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjp3aGlsZV9zdG10
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OmRvX3N0bXQpOgorICAgICAgICAo
SlNDOjpXYXNtOjpKSVRDb21waWxlcjo6bGFiZWxfc3RtdCk6CisgICAgICAgIChKU0M6Oldhc206
OkpJVENvbXBpbGVyOjpicmVha19sYWJlbF9zdG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklU
Q29tcGlsZXI6OmNvbnRpbnVlX2xhYmVsX3N0bXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRD
b21waWxlcjo6c3dpdGNoX3N0bXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6
ZXhwcik6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpzaWduZWRfZXhwcik6Cisg
ICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjphZGRfc3ViKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6SklUQ29tcGlsZXI6Om11bF9pMzIpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21w
aWxlcjo6cmVsX2kzMik6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpjb21tYSk6
CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpjb25kKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6Y29tcGlsZUFuZFJ1bik6CisgICAgICAgICogd2FzbS9XYXNtSklUQ29tcGlsZXIuaDog
QWRkZWQuCisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpKSVRDb21waWxlcik6Cisg
ICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpzdGFja0FkZHJlc3MpOgorICAgICAgICAo
SlNDOjpXYXNtOjpKSVRDb21waWxlcjo6dGVtcG9yYXJ5QWRkcmVzcyk6CisgICAgICAgIChKU0M6
Oldhc206OkpJVENvbXBpbGVyOjpwdXNoQ29udGludWVMYWJlbExhYmVsKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6SklUQ29tcGlsZXI6OnBvcENvbnRpbnVlTGFiZWxMYWJlbCk6CisgICAgICAgIChK
U0M6Oldhc206OkpJVENvbXBpbGVyOjpjb250aW51ZUxhYmVsTGFiZWwpOgorICAgICAgICAoSlND
OjpXYXNtOjpKSVRDb21waWxlcjo6cHVzaEJyZWFrTGFiZWxKdW1wTGlzdCk6CisgICAgICAgIChK
U0M6Oldhc206OkpJVENvbXBpbGVyOjpwb3BCcmVha0xhYmVsSnVtcExpc3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpKSVRDb21waWxlcjo6YnJlYWtMYWJlbEp1bXBMaXN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6SklUQ29tcGlsZXI6OnB1c2hDb250aW51ZUp1bXBTY29wZSk6CisgICAgICAgIChK
U0M6Oldhc206OkpJVENvbXBpbGVyOjpwb3BDb250aW51ZUp1bXBTY29wZSk6CisgICAgICAgIChK
U0M6Oldhc206OkpJVENvbXBpbGVyOjp0b3BDb250aW51ZUp1bXBTY29wZSk6CisgICAgICAgIChK
U0M6Oldhc206OkpJVENvbXBpbGVyOjpwdXNoQnJlYWtKdW1wTGlzdCk6CisgICAgICAgIChKU0M6
Oldhc206OkpJVENvbXBpbGVyOjpwb3BCcmVha0p1bXBMaXN0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6SklUQ29tcGlsZXI6OnRvcEJyZWFrSnVtcExpc3QpOgorICAgICAgICAqIHdhc20vV2FzbU9w
Y29kZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206Om9wZXJhdG9yfCk6CisgICAgICAg
IChKU0M6Oldhc206Om9wZXJhdG9yJik6CisgICAgICAgIChKU0M6Oldhc206OkV4cHI6OkV4cHIp
OgorICAgICAgICAoSlNDOjpXYXNtOjpFeHByOjpCYWQpOgorICAgICAgICAoSlNDOjpXYXNtOjpF
eHByOjppc19iYWQpOgorICAgICAgICAoSlNDOjpXYXNtOjpFeHByOjp0eXBlKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6RXhwcjo6aTMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcjo6ZjMyKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcjo6ZjY0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RXhw
cjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6Oldhc206OkV4cHI6Om9wZXJhdG9yIT0pOgor
ICAgICAgICAoSlNDOjpXYXNtOjpQYWNrT3BXaXRoSW1tKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
VW5wYWNrT3BXaXRoSW1tKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcldpdGhJbW06OkV4cHJX
aXRoSW1tKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcldpdGhJbW06OmlzX2JhZCk6CisgICAg
ICAgIChKU0M6Oldhc206OkV4cHJXaXRoSW1tOjp0eXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
RXhwcldpdGhJbW06OmkzMik6CisgICAgICAgIChKU0M6Oldhc206OkV4cHJXaXRoSW1tOjpmMzIp
OgorICAgICAgICAoSlNDOjpXYXNtOjpFeHByV2l0aEltbTo6ZjY0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6U2lnbmF0dXJlOjpTaWduYXR1cmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpTaWduYXR1
cmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpXYXNtOjpTaWduYXR1cmU6Om9wZXJhdG9y
IT0pOgorICAgICAgICAoSlNDOjpXYXNtOjpTaWduYXR1cmU6Okhhc2g6Om9wZXJhdG9yKCkpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpJbjo6SW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpJbjo6c3Rt
dCk6CisgICAgICAgIChKU0M6Oldhc206OkluOjpzd2l0Y2hDYXNlKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6SW46OnZvaWRFeHByKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW46OmV4cG9ydEZvcm1h
dCk6CisgICAgICAgIChKU0M6Oldhc206OkluOjp0eXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
SW46OnJ0eXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW46OnNpbmdsZUNoYXIpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpJbjo6dTgpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbjo6Zml4ZWRXaWR0
aDx1aW50MzJfdD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpJbjo6Zml4ZWRXaWR0aDxmbG9hdD4p
OgorICAgICAgICAoSlNDOjpXYXNtOjpJbjo6Zml4ZWRXaWR0aDxkb3VibGU+KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6SW46OmNvZGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbjo6aW1tVTMyKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6SW46OmltbVMzMik6CisgICAgICAgIChKU0M6Oldhc206Oklu
OjppZkkzMkxpdCk6CisKIDIwMTUtMDYtMjAgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBn
bWFpbC5jb20+CiAKICAgICAgICAgW0VTNl0gRGVzdHJ1Y3R1cmluZyBhc3NpZ25tZW50IG5lZWQg
dG8gYWNjZXB0IGl0ZXJhYmxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwZmNi
MDkyZTc3MWRlYWE1OTVmNTRiYzM2YzNkYTgzYjBmODAwNzk2Li5hYmE5OTNjYTM4NjM5NWUyNDli
Nzg4OTMwMDdhOWQ3NGYwMzg3MzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MTAxNiw2ICsxMDE2LDkgQEAKIAkJNzBFQ0E2MDcxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRl
UmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzBFQ0E2MDIxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuY3BwICovOyB9
OwogCQk3MEVDQTYwODFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MDMxQUZEQkVB
MjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MEVDQTYwOTFBRkRCRUEyMDA0NDk3MzkgLyogVGVt
cGxhdGVSZWdpc3RyeUtleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXku
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3QjU0
NUU1MDFCNDYwNUM3MDAyOTM5MEUgLyogV2FzbUpJVENvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCNTQ1RTREMUI0NjA1QzMwMDI5Mzkw
RSAvKiBXYXNtSklUQ29tcGlsZXIuY3BwICovOyB9OworCQk3QjU0NUU1MTFCNDYwNUQzMDAyOTM5
MEUgLyogV2FzbUpJVENvbXBpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3QjU0NUU0RTFCNDYwNUMzMDAyOTM5MEUgLyogV2FzbUpJVENvbXBpbGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0I1
NDVFNTIxQjQ2MDVEODAwMjkzOTBFIC8qIFdhc21PcGNvZGVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjU0NUU0RjFCNDYwNUMzMDAyOTM5MEUgLyog
V2FzbU9wY29kZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3QzAwOENEMjE4NkY4QTkzMDA5NTVDMjQgLyogSlNQcm9taXNlRnVuY3Rpb25zLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDA4Q0Qw
MTg2RjhBOTMwMDk1NUMyNCAvKiBKU1Byb21pc2VGdW5jdGlvbnMuY3BwICovOyB9OwogCQk3QzAw
OENEMzE4NkY4QTkzMDA5NTVDMjQgLyogSlNQcm9taXNlRnVuY3Rpb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzAwOENEMTE4NkY4QTkzMDA5NTVD
MjQgLyogSlNQcm9taXNlRnVuY3Rpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MwMDhDREExODcxMjRCQjAwOTU1QzI0IC8qIEpTUHJvbWlz
ZURlZmVycmVkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDMDA4Q0Q4MTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5jcHAgKi87
IH07CkBAIC0yNzU4LDYgKzI3NjEsOSBAQAogCQk3MEVDQTYwMjFBRkRCRUEyMDA0NDk3MzkgLyog
VGVtcGxhdGVSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBUZW1wbGF0ZVJlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzBF
Q0E2MDMxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MEVDQTYwNDFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3Ry
eUtleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZW1wbGF0ZVJlZ2lzdHJ5
S2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCNTQ1RTREMUI0NjA1QzMwMDI5
MzkwRSAvKiBXYXNtSklUQ29tcGlsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2FzbUpJVENvbXBpbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJN0I1NDVFNEUxQjQ2MDVDMzAwMjkzOTBFIC8qIFdhc21KSVRDb21waWxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtSklUQ29tcGlsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJN0I1NDVFNEYxQjQ2MDVDMzAwMjkzOTBFIC8qIFdhc21PcGNvZGVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21PcGNvZGVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMDA4Q0QwMTg2RjhBOTMwMDk1NUMyNCAvKiBKU1By
b21pc2VGdW5jdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBsaW5lRW5k
aW5nID0gMDsgcGF0aCA9IEpTUHJvbWlzZUZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0aW9uSWRlbnRpZmllciA9IHhjb2RlLmxhbmcuY3Bw
OyB9OwogCQk3QzAwOENEMTE4NkY4QTkzMDA5NTVDMjQgLyogSlNQcm9taXNlRnVuY3Rpb25zLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUHJvbWlzZUZ1bmN0aW9ucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzAwOENEODE4NzEyNEJCMDA5NTVDMjQgLyog
SlNQcm9taXNlRGVmZXJyZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNQcm9taXNlRGVmZXJyZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MzYxNyw2ICszNjIzLDcgQEAKIAkJCQk3RUY2RTBCQjBFQjdBMUVDMDA3OUFGQUYgLyogcnVudGlt
ZSAqLywKIAkJCQkxNDEyMTEwMDBBNDg3NzI2MDA0ODAyNTUgLyogdGVzdHMgKi8sCiAJCQkJODYw
M0NFRjAxNEM3NTNFRjAwQUU1OUUzIC8qIHRvb2xzICovLAorCQkJCTdCNTQ1RTRDMUI0NjA1QTMw
MDI5MzkwRSAvKiB3YXNtICovLAogCQkJCTg2RUFDNDhDMEY5M0U4QjkwMDhFQzk0OCAvKiB5YXJy
ICovLAogCQkJKTsKIAkJCW5hbWUgPSBKYXZhU2NyaXB0Q29yZTsKQEAgLTQyODAsNiArNDI4Nywx
NiBAQAogCQkJcGF0aCA9IGRpc2Fzc2VtYmxlci9BUk12NzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CiAJCX07CisJCTdCNTQ1RTRDMUI0NjA1QTMwMDI5MzkwRSAvKiB3YXNtICovID0gewor
CQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3QjU0NUU0RDFCNDYwNUMz
MDAyOTM5MEUgLyogV2FzbUpJVENvbXBpbGVyLmNwcCAqLywKKwkJCQk3QjU0NUU0RTFCNDYwNUMz
MDAyOTM5MEUgLyogV2FzbUpJVENvbXBpbGVyLmggKi8sCisJCQkJN0I1NDVFNEYxQjQ2MDVDMzAw
MjkzOTBFIC8qIFdhc21PcGNvZGVzLmggKi8sCisJCQkpOworCQkJcGF0aCA9IHdhc207CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk3RTM5RDgxRDBFQzM4RUZBMDAzQUYxMUEg
LyogYnl0ZWNvbXBpbGVyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKQEAgLTYwNDMsNiArNjA2MCw3IEBACiAJCQkJQkMxOEM0MEYwRTE2RjVDRDAwQjM0NDYwIC8q
IElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RkQwMDc2MTg5QjAzOEMwMDYzMzIz
MSAvKiBJZGVudGlmaWVyc0ZhY3RvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NjIzMUU5MThE
MTgwNDIwMEMwM0ZEQSAvKiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMgaW4gSGVhZGVycyAq
LywKKwkJCQk3QjU0NUU1MjFCNDYwNUQ4MDAyOTM5MEUgLyogV2FzbU9wY29kZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUMyNUY4QkNFMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVw
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk5MTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRl
eGluZ0hlYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUExNUVEOEU0NjAwRjE2N0Iy
IC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTQ1LDYgKzYx
NjMsNyBAQAogCQkJCTg2RTNDNjEzMTY3QkFCRDcwMDZENzYwQSAvKiBKU0NvbnRleHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2RTNDNjE3MTY3QkFCRUUwMDZENzYwQSAvKiBKU0NvbnRleHRJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MUUwRTE2RjVDRDAwQjM0NDYwIC8qIEpT
Q29udGV4dFJlZi5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0I1NDVFNTExQjQ2MDVEMzAwMjkzOTBF
IC8qIFdhc21KSVRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4Q0QxRDgxMDhDRjkw
MjAwODE2M0M2IC8qIEpTQ29udGV4dFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
MjAyOEI4MTc5NzYwMUUwMDk4MDI4QyAvKiBKU0NUZXN0UnVubmVyVXRpbHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNzU3NkQzMThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHVi
Um91dGluZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03MTY3LDYgKzcxODYsNyBAQAogCQkJCTBGRjBG
MTlDMTZCNzJBMDMwMDVERjk1QiAvKiBERkdOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
QTU4MUJBMTUwRTk1MkMwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODZFQzlEQ0YxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJN0I1NDVFNTAxQjQ2MDVDNzAwMjkzOTBFIC8qIFdhc21KSVRDb21waWxl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGRDE3QTBCOENDMDA3NzNBRDggLyogREZH
T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4
MkU1NjE0MURBRjA4MDAxNzlDOTQgLyogREZHT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZEOEEzMjUxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBo
YXNlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCA5MTI3MjUxYjlm
NDlmMGQ3ZDJjNDYwNzYxMWE1NjMwMWQ0MmNkOWZiLi5kMWM0Yjc1NGU0NmM5OTQxNjQ2YmRiODlk
YjVlOGQyZjI5ZDNmOGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtNDksNiArNDksNyBAQAog
I2luY2x1ZGUgIlN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIgogI2luY2x1ZGUgIlRlc3RSdW5u
ZXJVdGlscy5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgorI2luY2x1ZGUgIldhc21K
SVRDb21waWxlci5oIgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2lu
Y2x1ZGUgPHN0ZGxpYi5oPgpAQCAtNDkwLDYgKzQ5MSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmV0dXJuVHlwZUZvcihFeGVjU3RhdGUqKTsKIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRHVtcEJhc2ljQmxvY2tFeGVj
dXRpb25SYW5nZXMoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkhhc0Jhc2ljQmxvY2tFeGVjdXRlZChFeGVjU3RhdGUqKTsKIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRW5hYmxlRXhjZXB0aW9uRnV6eihF
eGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
TG9hZFdlYkFzc2VtYmx5KEV4ZWNTdGF0ZSopOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdT
KQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRTYW1wbGlu
Z0ZsYWdzKEV4ZWNTdGF0ZSopOwpAQCAtNjUxLDYgKzY1Myw4IEBAIHByb3RlY3RlZDoKICAgICAg
ICAgYWRkRnVuY3Rpb24odm0sICJoYXNCYXNpY0Jsb2NrRXhlY3V0ZWQiLCBmdW5jdGlvbkhhc0Jh
c2ljQmxvY2tFeGVjdXRlZCwgMik7CiAKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJlbmFibGVF
eGNlcHRpb25GdXp6IiwgZnVuY3Rpb25FbmFibGVFeGNlcHRpb25GdXp6LCAwKTsKKworICAgICAg
ICBhZGRGdW5jdGlvbih2bSwgImxvYWRXZWJBc3NlbWJseSIsIGZ1bmN0aW9uTG9hZFdlYkFzc2Vt
Ymx5LCAxKTsKICAgICAgICAgCiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1w
dHlBcnJheShnbG9iYWxFeGVjKCksIDApOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGFyZ3VtZW50cy5zaXplKCk7ICsraSkKQEAgLTExNjUsNiArMTE2OSwxNiBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRW5hYmxlRXhjZXB0aW9uRnV6eihFeGVjU3RhdGUq
KQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2FkV2ViQXNzZW1ibHkoRXhlY1N0YXRl
KiBleGVjKQoreworICAgIFN0cmluZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOworICAgIGlm
ICghZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShmaWxlTmFtZSwgYnVmZmVyKSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMs
IGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQ291bGQgbm90IG9wZW4gZmlsZS4iKSkp
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IFdhc206OmNvbXBpbGVBbmRSdW4oZXhlYywgYnVmZmVy
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKIC8vIFVzZSBTRUgg
Zm9yIFJlbGVhc2UgYnVpbGRzIG9ubHkgdG8gZ2V0IHJpZCBvZiB0aGUgY3Jhc2ggcmVwb3J0IGRp
YWxvZwogLy8gKGx1Y2tpbHkgdGhlIHNhbWUgdGVzdHMgZmFpbCBpbiBSZWxlYXNlIGFuZCBEZWJ1
ZyBidWlsZHMgc28gZmFyKS4gTmVlZCB0bwogLy8gYmUgaW4gYSBzZXBhcmF0ZSBtYWluIGZ1bmN0
aW9uIGJlY2F1c2UgdGhlIGpzY21haW4gZnVuY3Rpb24gcmVxdWlyZXMgb2JqZWN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSklUQ29tcGlsZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUpJVENvbXBpbGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
NTllMjY2OTNkODQyN2U4OGJiZjU1ZDNmYzIwODBlMGQxNjU0NjIxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUpJVENvbXBpbGVyLmNwcApAQCAtMCww
ICsxLDg4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtSklUQ29tcGlsZXIuaCIKKworI2lu
Y2x1ZGUgIkpJVENvZGUuaCIKKyNpbmNsdWRlICJKU0NhbGxlZS5oIgorI2luY2x1ZGUgIkxpbmtC
dWZmZXIuaCIKKyNpbmNsdWRlICJQcm90b0NhbGxGcmFtZS5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBKdW1wU2NvcGUgeworcHVibGljOgorICAgIEp1
bXBTY29wZShNYWNyb0Fzc2VtYmxlciogbWFjcm9Bc3NlbWJsZXIpCisgICAgOiBtX21hY3JvQXNz
ZW1ibGVyKG1hY3JvQXNzZW1ibGVyKQorICAgICwgbV9saW5rZWQoZmFsc2UpCisgICAgeworICAg
IH0KKworICAgIEp1bXBTY29wZShNYWNyb0Fzc2VtYmxlciogbWFjcm9Bc3NlbWJsZXIsIGNvbnN0
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCYgbGFiZWwpCisgICAgOiBtX21hY3JvQXNzZW1ibGVyKG1h
Y3JvQXNzZW1ibGVyKQorICAgICwgbV9saW5rZWQodHJ1ZSkKKyAgICAsIG1fbGFiZWwobGFiZWwp
CisgICAgeworICAgIH0KKworICAgIHZvaWQganVtcCgpCisgICAgeworICAgICAgICBpZiAobV9s
aW5rZWQpCisgICAgICAgICAgICBtX21hY3JvQXNzZW1ibGVyLT5qdW1wKG1fbGFiZWwpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX2p1bXBMaXN0LmFwcGVuZChtX21hY3JvQXNzZW1ibGVy
LT5qdW1wKCkpOworICAgIH0KKworICAgIHZvaWQgbGluaygpCisgICAgeworICAgICAgICBBU1NF
UlQoIW1fbGlua2VkKTsKKyAgICAgICAgbV9qdW1wTGlzdC5saW5rKG1fbWFjcm9Bc3NlbWJsZXIp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBNYWNyb0Fzc2VtYmxlciogbV9tYWNyb0Fzc2VtYmxl
cjsKKyAgICBib29sIG1fbGlua2VkOworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2xhYmVs
OworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2p1bXBMaXN0OworfTsKKworSlNWYWx1
ZSBKSVRDb21waWxlcjo6Y29tcGlsZUFuZFJ1bihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFZlY3Rv
cjxjaGFyPiYgYnVmZmVyKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgUmVmUHRy
PEpJVENvZGU+IGppdENvZGUgPSBjb21waWxlKHZtLCBidWZmZXIpOworCisgICAgUHJvdG9DYWxs
RnJhbWUgcHJvdG9DYWxsRnJhbWU7CisgICAgcHJvdG9DYWxsRnJhbWUuaW5pdCgwLCBKU0NhbGxl
ZTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSksIGpzVW5kZWZpbmVkKCksIDEpOworCisgICAgcmV0dXJuIGppdENvZGUt
PmV4ZWN1dGUoJnZtLCAmcHJvdG9DYWxsRnJhbWUpOworfQorCitSZWZQdHI8SklUQ29kZT4gSklU
Q29tcGlsZXI6OmNvbXBpbGUoVk0mIHZtLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sK
KyAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOworCisgICAgbV9yZWFkID0gSW4ocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVyLmRhdGEoKSkpOworICAgIGlmIChtX3JlYWQu
Zml4ZWRXaWR0aDx1aW50MzJfdD4oKSAhPSBNYWdpY051bWJlcikKKyAgICAgICAgYWJvcnQoKTsK
KyAgICBtX3JlYWQuZml4ZWRXaWR0aDx1aW50MzJfdD4oKTsgLy8gb3V0X3NpemUKKyAgICB1bnBh
Y2soKTsKKworICAgIGJveEludDUyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDAsIEZQUkluZm86OmZwUmVnVDApOworICAgIGVt
aXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgcmV0KCk7CisKKyAgICBKSVRDb21waWxhdGlvbkVm
Zm9ydCBlZmZvcnQgPSBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkOworICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIodm0sICp0aGlzLCAwLCBlZmZvcnQpOworCisgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIHdpdGhBcml0eUNoZWNrOworICAgIENvZGVSZWYgcmVzdWx0ID0gRklOQUxJWkVfQ09E
RShwYXRjaEJ1ZmZlciwgKCJCYXNlbGluZSBKSVQgY29kZSBmb3IgV2ViQXNzZW1ibHkiKSk7CisK
KyAgICAvLyBUT0RPOiBzaG91bGQgY3JlYXRlIGEgbmV3IGppdFR5cGUKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUQ29kZTo6
QmFzZWxpbmVKSVQpKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6dW5wYWNrKCkKK3sKKyAgICBy
ZWFkQ29uc3RhbnRQb29sU2VjdGlvbigpOworICAgIHJlYWRTaWduYXR1cmVTZWN0aW9uKCk7Cisg
ICAgcmVhZEZ1bmN0aW9uSW1wb3J0U2VjdGlvbigpOworICAgIHJlYWRHbG9iYWxTZWN0aW9uKCk7
CisgICAgcmVhZEZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKCk7CisgICAgcmVhZEZ1bmN0aW9u
UG9pbnRlclRhYmxlcygpOworICAgIHJlYWRGdW5jdGlvbkRlZmluaXRpb25TZWN0aW9uKCk7Cisg
ICAgcmVhZEV4cG9ydFNlY3Rpb24oKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6cmVhZFNpZ25h
dHVyZVNlY3Rpb24oKQoreworICAgIHVpbnQzMl90IG51bVNpZ25hdHVyZXMgPSBtX3JlYWQuaW1t
VTMyKCk7CisgICAgVmVjdG9yPFNpZ25hdHVyZT4gc2lnbmF0dXJlcyhudW1TaWduYXR1cmVzKTsK
KyAgICBmb3IgKHVpbnQzMl90IHNpZ25hdHVyZUluZGV4ID0gMDsgc2lnbmF0dXJlSW5kZXggPCBu
dW1TaWduYXR1cmVzOyBzaWduYXR1cmVJbmRleCsrKSB7CisgICAgICAgIFJUeXBlIHJldCA9IG1f
cmVhZC5ydHlwZSgpOworICAgICAgICB1aW50MzJfdCBudW1BcmdzID0gbV9yZWFkLmltbVUzMigp
OworICAgICAgICBTaWduYXR1cmUgc2lnbmF0dXJlKHJldCwgbnVtQXJncyk7CisgICAgICAgIGZv
ciAodWludDMyX3QgYXJndW1lbnRJbmRleCA9IDA7IGFyZ3VtZW50SW5kZXggPCBudW1BcmdzOyBh
cmd1bWVudEluZGV4KyspCisgICAgICAgICAgICBzaWduYXR1cmUuYXJnc1thcmd1bWVudEluZGV4
XSA9IG1fcmVhZC50eXBlKCk7CisgICAgICAgIHNpZ25hdHVyZXNbc2lnbmF0dXJlSW5kZXhdID0g
V1RGOjptb3ZlKHNpZ25hdHVyZSk7CisgICAgfQorCisgICAgbV9zaWduYXR1cmVzID0gV1RGOjpt
b3ZlKHNpZ25hdHVyZXMpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpyZWFkRnVuY3Rpb25JbXBv
cnRTZWN0aW9uKCkKK3sKKyAgICB1aW50MzJfdCBudW1GdW5jSW1wcyA9IG1fcmVhZC5pbW1VMzIo
KTsKKyAgICB1aW50MzJfdCBudW1GdW5jSW1wb3J0U2lnbmF0dXJlcyA9IG1fcmVhZC5pbW1VMzIo
KTsKKworICAgIFZlY3RvcjxGdW5jSW1wb3J0U2lnbmF0dXJlPiBmdW5jSW1wb3J0U2lnbmF0dXJl
cyhudW1GdW5jSW1wb3J0U2lnbmF0dXJlcyk7CisgICAgRnVuY0ltcG9ydFNpZ25hdHVyZSogZnVu
Y0ltcG9ydFNpZ25hdHVyZSA9IGZ1bmNJbXBvcnRTaWduYXR1cmVzLmRhdGEoKTsKKyAgICBmb3Ig
KHVpbnQzMl90IGZ1bmNfaW1wX2kgPSAwOyBmdW5jX2ltcF9pIDwgbnVtRnVuY0ltcHM7IGZ1bmNf
aW1wX2krKykgeworICAgICAgICB3aGlsZSAobV9yZWFkLnNpbmdsZUNoYXIoKSkgeyB9CisKKyAg
ICAgICAgdWludDMyX3QgbnVtU2lncyA9IG1fcmVhZC5pbW1VMzIoKTsKKyAgICAgICAgZm9yICh1
aW50MzJfdCBpID0gMDsgaSA8IG51bVNpZ3M7IGkrKykgeworICAgICAgICAgICAgZnVuY0ltcG9y
dFNpZ25hdHVyZS0+c2lnbmF0dXJlSW5kZXggPSBtX3JlYWQuaW1tVTMyKCk7CisgICAgICAgICAg
ICBmdW5jSW1wb3J0U2lnbmF0dXJlLT5mdW5jSW1wb3J0SW5kZXggPSBmdW5jX2ltcF9pOworICAg
ICAgICAgICAgZnVuY0ltcG9ydFNpZ25hdHVyZSsrOworICAgICAgICB9CisgICAgfQorICAgIGFz
c2VydChmdW5jSW1wb3J0U2lnbmF0dXJlID09IGZ1bmNJbXBvcnRTaWduYXR1cmVzLmRhdGEoKSAr
IG51bUZ1bmNJbXBvcnRTaWduYXR1cmVzKTsKKworICAgIG1fZnVuY0ltcG9ydFNpZ25hdHVyZXMg
PSBXVEY6Om1vdmUoZnVuY0ltcG9ydFNpZ25hdHVyZXMpOworfQorCit2b2lkIEpJVENvbXBpbGVy
OjpyZWFkR2xvYmFsU2VjdGlvbigpCit7CisgICAgdWludDMyX3QgbnVtX2kzMl96ZXJvID0gbV9y
ZWFkLmltbVUzMigpOworICAgIHVpbnQzMl90IG51bV9mMzJfemVybyA9IG1fcmVhZC5pbW1VMzIo
KTsKKyAgICB1aW50MzJfdCBudW1fZjY0X3plcm8gPSBtX3JlYWQuaW1tVTMyKCk7CisgICAgdWlu
dDMyX3QgbnVtX2kzMl9pbXBvcnQgPSBtX3JlYWQuaW1tVTMyKCk7CisgICAgdWludDMyX3QgbnVt
X2YzMl9pbXBvcnQgPSBtX3JlYWQuaW1tVTMyKCk7CisgICAgdWludDMyX3QgbnVtX2Y2NF9pbXBv
cnQgPSBtX3JlYWQuaW1tVTMyKCk7CisKKyAgICB1aW50MzJfdCBudW1HbG9iYWxWYXJzID0gbnVt
X2kzMl96ZXJvICsgbnVtX2YzMl96ZXJvICsgbnVtX2Y2NF96ZXJvICsgbnVtX2kzMl9pbXBvcnQg
KyBudW1fZjMyX2ltcG9ydCArIG51bV9mNjRfaW1wb3J0OworCisgICAgVmVjdG9yPFR5cGU+IGds
b2JhbFR5cGVzKG51bUdsb2JhbFZhcnMpOworICAgIHNpemVfdCBnbG9iYWxUeXBlSW5kZXggPSAw
OworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1faTMyX3plcm87IGkrKykgeworICAg
ICAgICBnbG9iYWxUeXBlc1tnbG9iYWxUeXBlSW5kZXgrK10gPSBUeXBlOjpJMzI7CisgICAgfQor
ICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1fZjMyX3plcm87IGkrKykgeworICAgICAg
ICBnbG9iYWxUeXBlc1tnbG9iYWxUeXBlSW5kZXgrK10gPSBUeXBlOjpGMzI7CisgICAgfQorICAg
IGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1fZjY0X3plcm87IGkrKykgeworICAgICAgICBn
bG9iYWxUeXBlc1tnbG9iYWxUeXBlSW5kZXgrK10gPSBUeXBlOjpGNjQ7CisgICAgfQorICAgIGZv
ciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1faTMyX2ltcG9ydDsgaSsrKSB7CisgICAgICAgIHdo
aWxlIChtX3JlYWQuc2luZ2xlQ2hhcigpKSB7IH0KKyAgICAgICAgZ2xvYmFsVHlwZXNbZ2xvYmFs
VHlwZUluZGV4KytdID0gVHlwZTo6STMyOworICAgIH0KKyAgICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDwgbnVtX2YzMl9pbXBvcnQ7IGkrKykgeworICAgICAgICB3aGlsZSAobV9yZWFkLnNpbmds
ZUNoYXIoKSkgeyB9CisgICAgICAgIGdsb2JhbFR5cGVzW2dsb2JhbFR5cGVJbmRleCsrXSA9IFR5
cGU6OkYzMjsKKyAgICB9CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bV9mNjRfaW1w
b3J0OyBpKyspIHsKKyAgICAgICAgd2hpbGUgKG1fcmVhZC5zaW5nbGVDaGFyKCkpIHsgfQorICAg
ICAgICBnbG9iYWxUeXBlc1tnbG9iYWxUeXBlSW5kZXgrK10gPSBUeXBlOjpGNjQ7CisgICAgfQor
ICAgIG1fZ2xvYmFsVHlwZXMgPSBXVEY6Om1vdmUoZ2xvYmFsVHlwZXMpOworfQorCit2b2lkIEpJ
VENvbXBpbGVyOjpyZWFkQ29uc3RhbnRQb29sU2VjdGlvbigpCit7CisgICAgdWludDMyX3QgbnVt
STMycyA9IG1fcmVhZC5pbW1VMzIoKTsKKyAgICB1aW50MzJfdCBudW1GMzJzID0gbV9yZWFkLmlt
bVUzMigpOworICAgIHVpbnQzMl90IG51bUY2NHMgPSBtX3JlYWQuaW1tVTMyKCk7CisKKyAgICBW
ZWN0b3I8dWludDMyX3Q+IGkzMnMobnVtSTMycyk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsg
aSA8IG51bUkzMnM7IGkrKykKKyAgICAgICAgaTMyc1tpXSA9IG1fcmVhZC5pbW1VMzIoKTsKKwor
ICAgIFZlY3RvcjxmbG9hdD4gZjMycyhudW1GMzJzKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDwgbnVtRjMyczsgaSsrKQorICAgICAgICBmMzJzW2ldID0gbV9yZWFkLmZpeGVkV2lkdGg8
ZmxvYXQ+KCk7CisKKyAgICBWZWN0b3I8ZG91YmxlPiBmNjRzKG51bUY2NHMpOworICAgIGZvciAo
dWludDMyX3QgaSA9IDA7IGkgPCBudW1GNjRzOyBpKyspCisgICAgICAgIGY2NHNbaV0gPSBtX3Jl
YWQuZml4ZWRXaWR0aDxkb3VibGU+KCk7CisKKyAgICBtX2kzMnMgPSBXVEY6Om1vdmUoaTMycyk7
CisgICAgbV9mMzJzID0gV1RGOjptb3ZlKGYzMnMpOworICAgIG1fZjY0cyA9IFdURjo6bW92ZShm
NjRzKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6cmVhZEZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0
aW9uKCkKK3sKKyAgICB1aW50MzJfdCBudW1GdW5jcyA9IG1fcmVhZC5pbW1VMzIoKTsKKyAgICBW
ZWN0b3I8dWludDMyX3Q+IGZ1bmNTaWdzKG51bUZ1bmNzKTsKKyAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpICE9IG51bUZ1bmNzOyBpKyspCisgICAgICAgIGZ1bmNTaWdzW2ldID0gbV9yZWFkLmlt
bVUzMigpOworCisgICAgbV9mdW5jU2lncyA9IFdURjo6bW92ZShmdW5jU2lncyk7Cit9CisKK3Zv
aWQgSklUQ29tcGlsZXI6OnJlYWRGdW5jdGlvblBvaW50ZXJUYWJsZXMoKQoreworICAgIHVpbnQz
Ml90IG51bUZ1bmNQdHJUYWJsZXMgPSBtX3JlYWQuaW1tVTMyKCk7CisgICAgVmVjdG9yPEZ1bmNQ
dHJUYWJsZT4gZnVuY1B0clRhYmxlcyhudW1GdW5jUHRyVGFibGVzKTsKKyAgICBmb3IgKHVpbnQz
Ml90IGkgPSAwOyBpICE9IG51bUZ1bmNQdHJUYWJsZXM7IGkrKykgeworICAgICAgICBmdW5jUHRy
VGFibGVzW2ldLnNpZ25hdHVyZUluZGV4ID0gbV9yZWFkLmltbVUzMigpOworICAgICAgICB1aW50
MzJfdCBudW1fZWxlbWVudHMgPSBtX3JlYWQuaW1tVTMyKCk7CisgICAgICAgIFZlY3Rvcjx1aW50
MzJfdD4gZWxlbWVudHMobnVtX2VsZW1lbnRzKTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBqID0g
MDsgaiAhPSBudW1fZWxlbWVudHM7IGorKykKKyAgICAgICAgICAgIGVsZW1lbnRzW2pdID0gbV9y
ZWFkLmltbVUzMigpOworICAgICAgICBmdW5jUHRyVGFibGVzW2ldLmVsZW1lbnRzID0gV1RGOjpt
b3ZlKGVsZW1lbnRzKTsKKyAgICB9CisKKyAgICBtX2Z1bmNQdHJUYWJsZXMgPSBXVEY6Om1vdmUo
ZnVuY1B0clRhYmxlcyk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnJlYWRGdW5jdGlvbkRlZmlu
aXRpb25TZWN0aW9uKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVuY1NpZ3Mu
c2l6ZSgpOyBpKyspCisgICAgICAgIHJlYWRGdW5jdGlvbkRlZmluaXRpb24oaSk7Cit9CisKK3Zv
aWQgSklUQ29tcGlsZXI6OnJlYWRFeHBvcnRTZWN0aW9uKCkKK3sKKyAgICBzd2l0Y2ggKG1fcmVh
ZC5leHBvcnRGb3JtYXQoKSkgeworICAgICAgICBjYXNlIEV4cG9ydEZvcm1hdDo6RGVmYXVsdDoK
KyAgICAgICAgICAgIG1fcmVhZC5pbW1VMzIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEV4cG9ydEZvcm1hdDo6UmVjb3JkOgorICAgICAgICAgICAgaWYgKHVpbnQzMl90IG51
bV9leHBvcnRzID0gbV9yZWFkLmltbVUzMigpKSB7CisgICAgICAgICAgICAgICAgZm9yICh1aW50
MzJfdCBleHBvcnRfaW5kZXggPSAwOzspIHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG1f
cmVhZC5zaW5nbGVDaGFyKCkpIHsgfQorICAgICAgICAgICAgICAgICAgICBtX3JlYWQuaW1tVTMy
KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgrK2V4cG9ydF9pbmRleCA9PSBudW1fZXhwb3J0
cykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklU
Q29tcGlsZXI6OnJlYWRGdW5jdGlvbkRlZmluaXRpb24oc2l6ZV90IGZ1bmNJbmRleCkKK3sKKyAg
ICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IG1fc2lnbmF0dXJlc1ttX2Z1bmNTaWdzW2Z1
bmNJbmRleF1dOworICAgIG1fY3VycmVudFJldHVyblR5cGUgPSBzaWduYXR1cmUucmV0OworICAg
IG1fY3VycmVudExvY2FsVHlwZXMuY2xlYXIoKTsKKyAgICByZWFkQXJncyhzaWduYXR1cmUpOwor
ICAgIHJlYWRWYXJzKCk7CisgICAgc3RtdF9saXN0KDApOworfQorCit2b2lkIEpJVENvbXBpbGVy
OjpyZWFkQXJncyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkKK3sKKyAgICBzaXplX3QgbnVt
QXJncyA9IHNpZ25hdHVyZS5hcmdzLnNpemUoKTsKKyAgICBmb3IgKHVpbnQzMl90IGFyZ0luZGV4
ID0gMDsgYXJnSW5kZXggPCBudW1BcmdzOyBhcmdJbmRleCsrKSB7CisgICAgICAgIFR5cGUgdHlw
ZSA9IHNpZ25hdHVyZS5hcmdzW2FyZ0luZGV4XTsKKyAgICAgICAgbV9jdXJyZW50TG9jYWxUeXBl
cy5hcHBlbmQodHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICAgY2Fz
ZSBUeXBlOjpJMzI6CisgICAgICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgICAgIGNh
c2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICB9CisgICAgfQorfQorCit2b2lkIEpJVENvbXBpbGVyOjpyZWFkVmFycygpCit7CisgICAgdWlu
dDMyX3QgbnVtSTMyVmFycyA9IDA7CisgICAgdWludDMyX3QgbnVtRjMyVmFycyA9IDA7CisgICAg
dWludDMyX3QgbnVtRjY0VmFycyA9IDA7CisKKyAgICBWYXJUeXBlcyB2YXJUeXBlczsKKyAgICBW
YXJUeXBlc1dpdGhJbW0gdmFyVHlwZXNXaXRoSW1tOworICAgIHVpbnQ4X3QgaW1tOworICAgIGlm
IChtX3JlYWQuY29kZSgmdmFyVHlwZXMsICZ2YXJUeXBlc1dpdGhJbW0sICZpbW0pKSB7CisgICAg
ICAgIGlmICh2YXJUeXBlcyAmIFZhclR5cGVzOjpJMzIpCisgICAgICAgICAgICBudW1JMzJWYXJz
ID0gbV9yZWFkLmltbVUzMigpOworICAgICAgICBpZiAodmFyVHlwZXMgJiBWYXJUeXBlczo6RjMy
KQorICAgICAgICAgICAgbnVtRjMyVmFycyA9IG1fcmVhZC5pbW1VMzIoKTsKKyAgICAgICAgaWYg
KHZhclR5cGVzICYgVmFyVHlwZXM6OkY2NCkKKyAgICAgICAgICAgIG51bUY2NFZhcnMgPSBtX3Jl
YWQuaW1tVTMyKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbnVtSTMyVmFycyA9IGltbTsKKyAg
ICB9CisKKyAgICAvLyBGSVhNRTogd2UgbmVlZCB0byBpbml0aWFsaXplIHRoZXNlIHRvIHplcm9l
cworCisgICAgdWludDMyX3QgbnVtX3ZhcnMgPSBudW1JMzJWYXJzICsgbnVtRjMyVmFycyArIG51
bUY2NFZhcnM7CisgICAgaWYgKG51bV92YXJzID4gMCkgeworICAgICAgICB1aW50MzJfdCBsb2Nh
bEluZGV4ID0gbV9jdXJyZW50TG9jYWxUeXBlcy5zaXplKCk7CisgICAgICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBudW1JMzJWYXJzOyBpKyspIHsKKyAgICAgICAgICAgIG1fY3VycmVudExv
Y2FsVHlwZXMuYXBwZW5kKFR5cGU6OkkzMik7CisgICAgICAgICAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMigwKSwgc3RhY2tBZGRyZXNzKGxvY2FsSW5kZXgrKykpOworICAgICAgICB9CisgICAgICAg
IGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1GMzJWYXJzOyBpKyspIHsKKyAgICAgICAgICAg
IG1fY3VycmVudExvY2FsVHlwZXMuYXBwZW5kKFR5cGU6OkYzMik7CisgICAgICAgICAgICBzdG9y
ZTMyKFRydXN0ZWRJbW0zMigwKSwgc3RhY2tBZGRyZXNzKGxvY2FsSW5kZXgrKykpOyAvLyBGSVhN
RTogZmxvYXQ/CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51
bUY2NFZhcnM7IGkrKykgeworICAgICAgICAgICAgbV9jdXJyZW50TG9jYWxUeXBlcy5hcHBlbmQo
VHlwZTo6RjY0KTsKKyAgICAgICAgICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KDApLCBzdGFja0Fk
ZHJlc3MobG9jYWxJbmRleCsrKSk7IC8vIEZJWE1FOiBmbG9hdD8KKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBKSVRDb21waWxlcjo6c3RtdChpbnQgZHN0KQoreworICAgIFN0bXQgc3RtdDsK
KyAgICBTdG10V2l0aEltbSBzdG10V2l0aEltbTsKKyAgICB1aW50OF90IGltbTsKKyAgICBpZiAo
bV9yZWFkLmNvZGUoJnN0bXQsICZzdG10V2l0aEltbSwgJmltbSkpIHsKKyAgICAgICAgc3dpdGNo
IChzdG10KSB7CisgICAgICAgIGNhc2UgU3RtdDo6U2V0TG9jOgorICAgICAgICAgICAgc2V0X2xv
Y2FsKGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdG10OjpTZXRHbG86
CisgICAgICAgIGNhc2UgU3RtdDo6STMyU3RvcmU4OgorICAgICAgICBjYXNlIFN0bXQ6OkkzMlN0
b3JlT2ZmODoKKyAgICAgICAgY2FzZSBTdG10OjpJMzJTdG9yZTE2OgorICAgICAgICBjYXNlIFN0
bXQ6OkkzMlN0b3JlT2ZmMTY6CisgICAgICAgIGNhc2UgU3RtdDo6STMyU3RvcmUzMjoKKyAgICAg
ICAgY2FzZSBTdG10OjpJMzJTdG9yZU9mZjMyOgorICAgICAgICBjYXNlIFN0bXQ6OkYzMlN0b3Jl
OgorICAgICAgICBjYXNlIFN0bXQ6OkYzMlN0b3JlT2ZmOgorICAgICAgICBjYXNlIFN0bXQ6OkY2
NFN0b3JlOgorICAgICAgICBjYXNlIFN0bXQ6OkY2NFN0b3JlT2ZmOgorICAgICAgICBjYXNlIFN0
bXQ6OkNhbGxJbnQ6CisgICAgICAgIGNhc2UgU3RtdDo6Q2FsbEluZDoKKyAgICAgICAgY2FzZSBT
dG10OjpDYWxsSW1wOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgY2FzZSBTdG10OjpSZXQ6CisgICAgICAgICAgICByZXR1cm5fc3RtdCgpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6OkJsb2NrOgorICAgICAgICAgICAg
YmxvY2tfc3RtdChkc3QpOyByZXR1cm47CisgICAgICAgIGNhc2UgU3RtdDo6SWZUaGVuOgorICAg
ICAgICAgICAgaWZfc3RtdChkc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNl
IFN0bXQ6OklmRWxzZToKKyAgICAgICAgICAgIGlmX2Vsc2Vfc3RtdChkc3QpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6OldoaWxlOgorICAgICAgICAgICAgd2hpbGVf
c3RtdChkc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6OkRvOgor
ICAgICAgICAgICAgZG9fc3RtdChkc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBj
YXNlIFN0bXQ6OkxhYmVsOgorICAgICAgICAgICAgbGFiZWxfc3RtdChkc3QpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6OkJyZWFrOgorICAgICAgICAgICAgdG9wQnJl
YWtKdW1wTGlzdCgpLT5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgY2FzZSBTdG10OjpCcmVha0xhYmVsOgorICAgICAgICAgICAgYnJlYWtfbGFiZWxfc3RtdCgp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6OkNvbnRpbnVlOgorICAg
ICAgICAgICAgdG9wQ29udGludWVKdW1wU2NvcGUoKS0+anVtcCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgU3RtdDo6Q29udGludWVMYWJlbDoKKyAgICAgICAgICAgIGNvbnRp
bnVlX2xhYmVsX3N0bXQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdG10
OjpTd2l0Y2g6CisgICAgICAgICAgICBzd2l0Y2hfc3RtdChkc3QpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3dpdGNoIChzdG10V2l0
aEltbSkgeworICAgICAgICBjYXNlIFN0bXRXaXRoSW1tOjpTZXRMb2M6CisgICAgICAgICAgICBz
ZXRfbG9jYWwoaW1tLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3Rt
dFdpdGhJbW06OlNldEdsbzoKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSklUQ29t
cGlsZXI6OmdldF9sb2NhbChpbnQgZHN0KQoreworICAgIC8vIEZJWE1FOiB0eXBlCisgICAgdWlu
dDMyX3QgaW1tID0gbV9yZWFkLmltbVUzMigpOworICAgIGxvYWQzMihzdGFja0FkZHJlc3MoaW1t
KSwgR1BSSW5mbzo6cmVnVDApOworICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFy
eUFkZHJlc3MoZHN0KSk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnNldF9sb2NhbCh1aW50MzJf
dCBpbW0sIGludCBkc3QpCit7CisgICAgVHlwZSB0eXBlID0gbV9jdXJyZW50TG9jYWxUeXBlc1tp
bW1dOyAvLyBGSVhNRTogU2hvdWxkIHdlIHJlY2VpdmUgdGhlIFR5cGUgZnJvbSB0aGUgcGFyZW50
PworCisgICAgZXhwcihSVHlwZSh0eXBlKSwgZHN0KTsKKworICAgIHN3aXRjaCAodHlwZSkgewor
ICAgICAgICBjYXNlIFR5cGU6OkkzMjogeworICAgICAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFk
ZHJlc3MoZHN0KSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZv
OjpyZWdUMCwgc3RhY2tBZGRyZXNzKGltbSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnNldF9sb2NhbChpbnQgZHN0KQoreworICAg
IHNldF9sb2NhbChtX3JlYWQuaW1tVTMyKCksIGRzdCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6
OnJldHVybl9zdG10KCkKK3sKKyAgICAvLyBGSVhNRTogaGFja3kKKyAgICBzd2l0Y2ggKG1fY3Vy
cmVudFJldHVyblR5cGUpIHsKKyAgICAgICAgY2FzZSBSVHlwZTo6STMyOgorICAgICAgICAgICAg
c2lnbmVkX2V4cHIoU2lnbmVkbmVzczo6U2lnbmVkLCAwKTsKKyAgICAgICAgICAgIGxvYWQzMih0
ZW1wb3JhcnlBZGRyZXNzKDApLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBSVHlwZTo6RjMyOgorICAgICAgICAgICAgZXhwcihSVHlw
ZTo6RjMyLCAwKTsKKyAgICAgICAgICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKDApLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBS
VHlwZTo6RjY0OgorICAgICAgICAgICAgZXhwcihSVHlwZTo6RjY0LCAwKTsKKyAgICAgICAgICAg
IGxvYWQ2NCh0ZW1wb3JhcnlBZGRyZXNzKDApLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSVHlwZTo6Vm9pZDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgIH0KK30KKwordm9pZCBKSVRDb21waWxlcjo6c3RtdF9saXN0KGludCBkc3Qp
Cit7CisgICAgdWludDMyX3QgbnVtX3N0bXRzID0gbV9yZWFkLmltbVUzMigpOworICAgIGZvciAo
dWludDMyX3QgaSA9IDA7IGkgPCBudW1fc3RtdHM7IGkrKykKKyAgICAgICAgc3RtdChkc3QpOwor
fQorCit2b2lkIEpJVENvbXBpbGVyOjpibG9ja19zdG10KGludCBkc3QpCit7CisgICAgc3RtdF9s
aXN0KGRzdCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OmlmX3N0bXQoaW50IGRzdCkKK3sKKyAg
ICBleHByKFJUeXBlOjpJMzIsIGRzdCk7CisgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoZHN0
KSwgR1BSSW5mbzo6cmVnVDApOworICAgIEp1bXAgZW5kID0gYnJhbmNoVGVzdDMyKFplcm8sIEdQ
UkluZm86OnJlZ1QwKTsKKyAgICBzdG10KGRzdCk7CisgICAgZW5kLmxpbmsodGhpcyk7Cit9CisK
K3ZvaWQgSklUQ29tcGlsZXI6OmlmX2Vsc2Vfc3RtdChpbnQgZHN0KQoreworICAgIGV4cHIoUlR5
cGU6OkkzMiwgZHN0KTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgSnVtcCBlbHMgPSBicmFuY2hUZXN0MzIoWmVybywgR1BSSW5mbzo6cmVn
VDApOworICAgIHN0bXQoZHN0KTsKKyAgICBKdW1wIGVuZCA9IGp1bXAoKTsKKyAgICBlbHMubGlu
ayh0aGlzKTsKKyAgICBzdG10KGRzdCk7CisgICAgZW5kLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQg
SklUQ29tcGlsZXI6OndoaWxlX3N0bXQoaW50IGRzdCkKK3sKKyAgICBKdW1wU2NvcGUgY29udGlu
dWVKdW1wU2NvcGUodGhpcywgbGFiZWwoKSk7CisgICAgcHVzaENvbnRpbnVlSnVtcFNjb3BlKCZj
b250aW51ZUp1bXBTY29wZSk7CisKKyAgICBKdW1wTGlzdCBicmVha0p1bXBMaXN0OworICAgIHB1
c2hCcmVha0p1bXBMaXN0KCZicmVha0p1bXBMaXN0KTsKKworICAgIGV4cHIoUlR5cGU6OkkzMiwg
ZHN0KTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpyZWdUMCk7
CisgICAgSnVtcCBlbmQgPSBicmFuY2hUZXN0MzIoWmVybywgR1BSSW5mbzo6cmVnVDApOworICAg
IHN0bXQoZHN0KTsKKyAgICBjb250aW51ZUp1bXBTY29wZS5qdW1wKCk7CisgICAgZW5kLmxpbmso
dGhpcyk7CisgICAgYnJlYWtKdW1wTGlzdC5saW5rKHRoaXMpOworCisgICAgcG9wQnJlYWtKdW1w
TGlzdCgpOworCisgICAgcG9wQ29udGludWVKdW1wU2NvcGUoKTsKK30KKwordm9pZCBKSVRDb21w
aWxlcjo6ZG9fc3RtdChpbnQgZHN0KQoreworICAgIEp1bXBTY29wZSBjb250aW51ZUp1bXBTY29w
ZSh0aGlzKTsKKyAgICBwdXNoQ29udGludWVKdW1wU2NvcGUoJmNvbnRpbnVlSnVtcFNjb3BlKTsK
KworICAgIEp1bXBMaXN0IGJyZWFrSnVtcExpc3Q7CisgICAgcHVzaEJyZWFrSnVtcExpc3QoJmJy
ZWFrSnVtcExpc3QpOworCisgICAgTGFiZWwgc3RhcnQgPSBsYWJlbCgpOworICAgIHN0bXQoZHN0
KTsKKyAgICBjb250aW51ZUp1bXBTY29wZS5saW5rKCk7CisgICAgZXhwcihSVHlwZTo6STMyLCBk
c3QpOworICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKGRzdCksIEdQUkluZm86OnJlZ1QwKTsK
KyAgICBKdW1wIGp1bXBUb1N0YXJ0ID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIEdQUkluZm86OnJl
Z1QwKTsKKyAgICBqdW1wVG9TdGFydC5saW5rVG8oc3RhcnQsIHRoaXMpOworICAgIGJyZWFrSnVt
cExpc3QubGluayh0aGlzKTsKKworICAgIHBvcEJyZWFrSnVtcExpc3QoKTsKKworICAgIHBvcENv
bnRpbnVlSnVtcFNjb3BlKCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OmxhYmVsX3N0bXQoaW50
IGRzdCkKK3sKKyAgICBMYWJlbCBjb250aW51ZUxhYmVsID0gbGFiZWwoKTsKKyAgICBKdW1wTGlz
dCBicmVha0p1bXBMaXN0OworICAgIHB1c2hDb250aW51ZUxhYmVsTGFiZWwoJmNvbnRpbnVlTGFi
ZWwpOworICAgIHB1c2hCcmVha0xhYmVsSnVtcExpc3QoJmJyZWFrSnVtcExpc3QpOworICAgIHN0
bXQoZHN0KTsKKyAgICBicmVha0p1bXBMaXN0LmxpbmsodGhpcyk7CisgICAgcG9wQnJlYWtMYWJl
bEp1bXBMaXN0KCk7CisgICAgcG9wQ29udGludWVMYWJlbExhYmVsKCk7Cit9CisKK3ZvaWQgSklU
Q29tcGlsZXI6OmJyZWFrX2xhYmVsX3N0bXQoKQoreworICAgIHVpbnQzMl90IGluZGV4ID0gbV9y
ZWFkLmltbVUzMigpOworICAgIGJyZWFrTGFiZWxKdW1wTGlzdChpbmRleCktPmFwcGVuZChqdW1w
KCkpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpjb250aW51ZV9sYWJlbF9zdG10KCkKK3sKKyAg
ICB1aW50MzJfdCBpbmRleCA9IG1fcmVhZC5pbW1VMzIoKTsKKyAgICBqdW1wKCpjb250aW51ZUxh
YmVsTGFiZWwoaW5kZXgpKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6c3dpdGNoX3N0bXQoaW50
IGRzdCkKK3sKKyAgICBKdW1wTGlzdCBicmVha0p1bXBMaXN0OworICAgIHB1c2hCcmVha0p1bXBM
aXN0KCZicmVha0p1bXBMaXN0KTsKKworICAgIHVpbnQzMl90IG51bUNhc2VzID0gbV9yZWFkLmlt
bVUzMigpOworICAgIHNpZ25lZF9leHByKFNpZ25lZG5lc3M6OlNpZ25lZCwgZHN0KTsKKyAgICBs
b2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICBKdW1w
IHRhYmxlID0ganVtcCgpOworCisgICAgVmVjdG9yPExhYmVsPiBsYWJlbHM7CisgICAgVmVjdG9y
PGludDMyX3Q+IGltbXM7CisgICAgTGFiZWwgZGVmYXVsdExhYmVsOworICAgIGJvb2wgaGFzRGVm
YXVsdCA9IGZhbHNlOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bUNhc2VzOyBp
KyspIHsKKyAgICAgICAgc3dpdGNoIChtX3JlYWQuc3dpdGNoQ2FzZSgpKSB7CisgICAgICAgICAg
ICBjYXNlIFN3aXRjaENhc2U6OkNhc2UwOgorICAgICAgICAgICAgICAgIGltbXMuYXBwZW5kKG1f
cmVhZC5pbW1TMzIoKSk7CisgICAgICAgICAgICAgICAgbGFiZWxzLmFwcGVuZChsYWJlbCgpKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU3dpdGNoQ2FzZTo6Q2Fz
ZTE6CisgICAgICAgICAgICAgICAgaW1tcy5hcHBlbmQobV9yZWFkLmltbVMzMigpKTsKKyAgICAg
ICAgICAgICAgICBsYWJlbHMuYXBwZW5kKGxhYmVsKCkpOworICAgICAgICAgICAgICAgIHN0bXQo
ZHN0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU3dpdGNoQ2Fz
ZTo6Q2FzZU46CisgICAgICAgICAgICAgICAgaW1tcy5hcHBlbmQobV9yZWFkLmltbVMzMigpKTsK
KyAgICAgICAgICAgICAgICBsYWJlbHMuYXBwZW5kKGxhYmVsKCkpOworICAgICAgICAgICAgICAg
IHN0bXRfbGlzdChkc3QpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBTd2l0Y2hDYXNlOjpEZWZhdWx0MDoKKyAgICAgICAgICAgICAgICBkZWZhdWx0TGFiZWwgPSBs
YWJlbCgpOworICAgICAgICAgICAgICAgIGhhc0RlZmF1bHQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTd2l0Y2hDYXNlOjpEZWZhdWx0MToKKyAgICAg
ICAgICAgICAgICBkZWZhdWx0TGFiZWwgPSBsYWJlbCgpOworICAgICAgICAgICAgICAgIGhhc0Rl
ZmF1bHQgPSB0cnVlOworICAgICAgICAgICAgICAgIHN0bXQoZHN0KTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU3dpdGNoQ2FzZTo6RGVmYXVsdE46CisgICAgICAg
ICAgICAgICAgZGVmYXVsdExhYmVsID0gbGFiZWwoKTsKKyAgICAgICAgICAgICAgICBoYXNEZWZh
dWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBzdG10X2xpc3QoZHN0KTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYWJvcnQo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEp1bXAgZW5kID0ganVtcCgpOworICAgIHRhYmxl
LmxpbmsodGhpcyk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxhYmVscy5zaXplKCk7
ICsraSkgeworICAgICAgICBKdW1wIGogPSBicmFuY2gzMihFcXVhbCwgR1BSSW5mbzo6cmVnVDAs
IFRydXN0ZWRJbW0zMihpbW1zW2ldKSk7CisgICAgICAgIGoubGlua1RvKGxhYmVsc1tpXSwgdGhp
cyk7CisgICAgfQorICAgIGlmIChoYXNEZWZhdWx0KSB7CisgICAgICAgIGp1bXAoZGVmYXVsdExh
YmVsKTsKKyAgICB9CisKKyAgICBlbmQubGluayh0aGlzKTsKKworICAgIGJyZWFrSnVtcExpc3Qu
bGluayh0aGlzKTsKKyAgICBwb3BCcmVha0p1bXBMaXN0KCk7Cit9CisKK3ZvaWQgSklUQ29tcGls
ZXI6OmV4cHIoUlR5cGUgclR5cGUsIGludCBkc3QpCit7CisgICAgSTMyIGkzMjsKKyAgICBJMzJX
aXRoSW1tIGkzMl93aXRoX2ltbTsKKyAgICB1aW50OF90IGltbTsKKworICAgIGlmIChyVHlwZSAh
PSBSVHlwZTo6STMyKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorCisgICAgaWYgKG1fcmVhZC5jb2RlKCZpMzIsICZpMzJfd2l0aF9pbW0sICZpbW0pKSB7
CisgICAgICAgIHN3aXRjaCAoaTMyKSB7CisgICAgICAgICAgICBjYXNlIEkzMjo6TGl0SW1tOgor
ICAgICAgICAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKG1fcmVhZC5pbW1VMzIoKSksIHRl
bXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEkzMjo6TGl0UG9vbDoKKyAgICAgICAgICAgIGNhc2UgSTMyOjpHZXRMb2M6CisgICAg
ICAgICAgICAgICAgZ2V0X2xvY2FsKGRzdCk7IC8vIFRPRE86IHNob3VsZCBwYXNzIEkzMiBhcyBS
VHlwZQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJMzI6OkdldEds
bzoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgY2FzZSBJMzI6OlNldExvYzoKKyAgICAgICAgICAgICAgICBzZXRfbG9jYWwoZHN0KTsg
Ly8gVE9ETzogc2hvdWxkIHBhc3MgSTMyIGFzIFJUeXBlCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIEkzMjo6U2V0R2xvOgorICAgICAgICAgICAgY2FzZSBJMzI6OlNM
b2FkODoKKyAgICAgICAgICAgIGNhc2UgSTMyOjpTTG9hZE9mZjg6CisgICAgICAgICAgICBjYXNl
IEkzMjo6VUxvYWQ4OgorICAgICAgICAgICAgY2FzZSBJMzI6OlVMb2FkT2ZmODoKKyAgICAgICAg
ICAgIGNhc2UgSTMyOjpTTG9hZDE2OgorICAgICAgICAgICAgY2FzZSBJMzI6OlNMb2FkT2ZmMTY6
CisgICAgICAgICAgICBjYXNlIEkzMjo6VUxvYWQxNjoKKyAgICAgICAgICAgIGNhc2UgSTMyOjpV
TG9hZE9mZjE2OgorICAgICAgICAgICAgY2FzZSBJMzI6OkxvYWQzMjoKKyAgICAgICAgICAgIGNh
c2UgSTMyOjpMb2FkT2ZmMzI6CisgICAgICAgICAgICBjYXNlIEkzMjo6U3RvcmU4OgorICAgICAg
ICAgICAgY2FzZSBJMzI6OlN0b3JlT2ZmODoKKyAgICAgICAgICAgIGNhc2UgSTMyOjpTdG9yZTE2
OgorICAgICAgICAgICAgY2FzZSBJMzI6OlN0b3JlT2ZmMTY6CisgICAgICAgICAgICBjYXNlIEkz
Mjo6U3RvcmUzMjoKKyAgICAgICAgICAgIGNhc2UgSTMyOjpTdG9yZU9mZjMyOgorICAgICAgICAg
ICAgY2FzZSBJMzI6OkNhbGxJbnQ6CisgICAgICAgICAgICBjYXNlIEkzMjo6Q2FsbEluZDoKKyAg
ICAgICAgICAgIGNhc2UgSTMyOjpDYWxsSW1wOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBjYXNlIEkzMjo6Q29uZDoKKyAgICAgICAg
ICAgICAgICBjb25kKFJUeXBlOjpJMzIsIGRzdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEkzMjo6Q29tbWE6CisgICAgICAgICAgICAgICAgY29tbWEoUlR5cGU6
OkkzMiwgZHN0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSTMy
OjpGcm9tRjMyOgorICAgICAgICAgICAgY2FzZSBJMzI6OkZyb21GNjQ6CisgICAgICAgICAgICBj
YXNlIEkzMjo6TmVnOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICBjYXNlIEkzMjo6QWRkOgorICAgICAgICAgICAgICAgIGFkZF9zdWIo
JysnLCBSVHlwZTo6STMyLCBkc3QpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBJMzI6OlN1YjoKKyAgICAgICAgICAgICAgICBhZGRfc3ViKCctJywgUlR5cGU6Okkz
MiwgZHN0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSTMyOjpN
dWw6CisgICAgICAgICAgICAgICAgbXVsX2kzMihkc3QpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBJMzI6OlNEaXY6CisgICAgICAgICAgICBjYXNlIEkzMjo6VURp
djoKKyAgICAgICAgICAgIGNhc2UgSTMyOjpTTW9kOgorICAgICAgICAgICAgY2FzZSBJMzI6OlVN
b2Q6CisgICAgICAgICAgICBjYXNlIEkzMjo6Qml0Tm90OgorICAgICAgICAgICAgY2FzZSBJMzI6
OkJpdE9yOgorICAgICAgICAgICAgY2FzZSBJMzI6OkJpdEFuZDoKKyAgICAgICAgICAgIGNhc2Ug
STMyOjpCaXRYb3I6CisgICAgICAgICAgICBjYXNlIEkzMjo6THNoOgorICAgICAgICAgICAgY2Fz
ZSBJMzI6OkFyaXRoUnNoOgorICAgICAgICAgICAgY2FzZSBJMzI6OkxvZ2ljUnNoOgorICAgICAg
ICAgICAgY2FzZSBJMzI6OkNsejoKKyAgICAgICAgICAgIGNhc2UgSTMyOjpMb2dpY05vdDoKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
Y2FzZSBJMzI6OkVxSTMyOgorICAgICAgICAgICAgICAgIHJlbF9pMzIoU2lnbmVkbmVzczo6U2ln
bmVkLCAiPT0iLCBkc3QpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBJMzI6OkVxRjMyOgorICAgICAgICAgICAgY2FzZSBJMzI6OkVxRjY0OgorICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBjYXNlIEkzMjo6
TkVxSTMyOgorICAgICAgICAgICAgICAgIHJlbF9pMzIoU2lnbmVkbmVzczo6U2lnbmVkLCAiIT0i
LCBkc3QpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJMzI6Ok5F
cUYzMjoKKyAgICAgICAgICAgIGNhc2UgSTMyOjpORXFGNjQ6CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGNhc2UgSTMyOjpTTGVUaEkz
MjoKKyAgICAgICAgICAgICAgICByZWxfaTMyKFNpZ25lZG5lc3M6OlNpZ25lZCwgIjwiLCBkc3Qp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJMzI6OlVMZVRoSTMy
OgorICAgICAgICAgICAgICAgIHJlbF9pMzIoU2lnbmVkbmVzczo6VW5zaWduZWQsICI8IiwgZHN0
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSTMyOjpMZVRoRjMy
OgorICAgICAgICAgICAgY2FzZSBJMzI6OkxlVGhGNjQ6CisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGNhc2UgSTMyOjpTTGVFcUkzMjoK
KyAgICAgICAgICAgICAgICByZWxfaTMyKFNpZ25lZG5lc3M6OlNpZ25lZCwgIjw9IiwgZHN0KTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSTMyOjpVTGVFcUkzMjoK
KyAgICAgICAgICAgICAgICByZWxfaTMyKFNpZ25lZG5lc3M6OlVuc2lnbmVkLCAiPD0iLCBkc3Qp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJMzI6OkxlRXFGMzI6
CisgICAgICAgICAgICBjYXNlIEkzMjo6TGVFcUY2NDoKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgY2FzZSBJMzI6OlNHclRoSTMyOgor
ICAgICAgICAgICAgICAgIHJlbF9pMzIoU2lnbmVkbmVzczo6U2lnbmVkLCAiPiIsIGRzdCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEkzMjo6VUdyVGhJMzI6Cisg
ICAgICAgICAgICAgICAgcmVsX2kzMihTaWduZWRuZXNzOjpVbnNpZ25lZCwgIj4iLCBkc3QpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJMzI6OkdyVGhGMzI6Cisg
ICAgICAgICAgICBjYXNlIEkzMjo6R3JUaEY2NDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgY2FzZSBJMzI6OlNHckVxSTMyOgorICAg
ICAgICAgICAgICAgIHJlbF9pMzIoU2lnbmVkbmVzczo6U2lnbmVkLCAiPj0iLCBkc3QpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJMzI6OlVHckVxSTMyOgorICAg
ICAgICAgICAgICAgIHJlbF9pMzIoU2lnbmVkbmVzczo6VW5zaWduZWQsICI+PSIsIGRzdCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEkzMjo6R3JFcUYzMjoKKyAg
ICAgICAgICAgIGNhc2UgSTMyOjpHckVxRjY0OgorICAgICAgICAgICAgY2FzZSBJMzI6OlNNaW46
CisgICAgICAgICAgICBjYXNlIEkzMjo6VU1pbjoKKyAgICAgICAgICAgIGNhc2UgSTMyOjpTTWF4
OgorICAgICAgICAgICAgY2FzZSBJMzI6OlVNYXg6CisgICAgICAgICAgICBjYXNlIEkzMjo6QWJz
OgorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3dpdGNoIChp
MzJfd2l0aF9pbW0pIHsKKyAgICAgICAgICAgIGNhc2UgSTMyV2l0aEltbTo6TGl0SW1tOgorICAg
ICAgICAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGltbSksIHRlbXBvcmFyeUFkZHJlc3Mo
ZHN0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEkzMldpdGhJ
bW06OkxpdFBvb2w6CisgICAgICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobV9pMzJz
W2ltbV0pLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBJMzJXaXRoSW1tOjpHZXRMb2M6CisgICAgICAgICAgICAgICAgbG9h
ZDMyKHN0YWNrQWRkcmVzcyhpbW0pLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAg
c3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBK
SVRDb21waWxlcjo6c2lnbmVkX2V4cHIoU2lnbmVkbmVzcyBzaWduZWRuZXNzLCBpbnQgZHN0KQor
eworICAgIHVpbnQzMl90IHUzMjsKKyAgICBpZiAobV9yZWFkLmlmSTMyTGl0KG1faTMycywgJnUz
MikpIHsKKyAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkbmVzczo6U2lnbmVkKSB7Cisg
ICAgICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMih1MzIpLCB0ZW1wb3JhcnlBZGRyZXNzKGRz
dCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIo
dTMyKSwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsgLy8gRklYTUU6IHVuc2lnbmVkCisgICAgICAg
ICAgICAvL1JFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkbmVzczo6U2lnbmVkKSB7CisgICAgICAgIC8vZXhw
cjxSVHlwZTo6STMyPihDdHg6OlRvSTMyKTsKKyAgICAgICAgLy9zLndyaXRlKCkuYXNjaWkoInww
Iik7CisgICAgICAgIGV4cHIoUlR5cGU6OkkzMiwgZHN0KTsKKyAgICB9IGVsc2UgeworICAgICAg
ICAvL2V4cHI8UlR5cGU6OkkzMj4oQ3R4OjpUb0kzMik7CisgICAgICAgIC8vcy53cml0ZSgpLmFz
Y2lpKCI+Pj4wIik7CisgICAgICAgIGV4cHIoUlR5cGU6OkkzMiwgZHN0KTsgLy8gRklYTUU6IHVu
c2lnbmVkCisgICAgfQorfQorCit2b2lkIEpJVENvbXBpbGVyOjphZGRfc3ViKGNoYXIgb3AsIFJU
eXBlIHJUeXBlLCBpbnQgZHN0KQoreworICAgIGV4cHIoclR5cGUsIGRzdCk7CisgICAgZXhwcihy
VHlwZSwgZHN0ICsgMSk7CisgICAgaWYgKG9wID09ICcrJykgeworICAgICAgICBsb2FkMzIodGVt
cG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGxvYWQzMih0ZW1w
b3JhcnlBZGRyZXNzKGRzdCArIDEpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGFkZDMyKEdQ
UkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6
cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9h
ZDMyKHRlbXBvcmFyeUFkZHJlc3MoZHN0KSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBsb2Fk
MzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QgKyAxKSwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBz
dWIzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBzdG9yZTMyKEdQ
UkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgIH0KK30KKwordm9pZCBK
SVRDb21waWxlcjo6bXVsX2kzMihpbnQgZHN0KQoreworICAgIGV4cHIoUlR5cGU6OkkzMiwgZHN0
KTsKKyAgICBleHByKFJUeXBlOjpJMzIsIGRzdCArIDEpOworICAgIGxvYWQzMih0ZW1wb3JhcnlB
ZGRyZXNzKGRzdCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVz
cyhkc3QgKyAxKSwgR1BSSW5mbzo6cmVnVDEpOworICAgIG11bDMyKEdQUkluZm86OnJlZ1QxLCBH
UFJJbmZvOjpyZWdUMCk7CisgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRk
cmVzcyhkc3QpKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6cmVsX2kzMihTaWduZWRuZXNzIHNp
Z25lZG5lc3MsIGNvbnN0IGNoYXIqIG9wLCBpbnQgZHN0KQoreworICAgIHNpZ25lZF9leHByKHNp
Z25lZG5lc3MsIGRzdCk7CisgICAgc2lnbmVkX2V4cHIoc2lnbmVkbmVzcywgZHN0ICsgMSk7Cisg
ICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoZHN0KSwgR1BSSW5mbzo6cmVnVDApOworICAgIGxv
YWQzMih0ZW1wb3JhcnlBZGRyZXNzKGRzdCArIDEpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgUmVs
YXRpb25hbENvbmRpdGlvbiBjb25kaXRpb247CisgICAgaWYgKG9wWzBdID09ICc9JyAmJiBvcFsx
XSA9PSAnPScgJiYgb3BbMl0gPT0gMCkgeworICAgICAgICBjb25kaXRpb24gPSBFcXVhbDsKKyAg
ICB9IGVsc2UgaWYgKG9wWzBdID09ICchJyAmJiBvcFsxXSA9PSAnPScgJiYgb3BbMl0gPT0gMCkg
eworICAgICAgICBjb25kaXRpb24gPSBOb3RFcXVhbDsKKyAgICB9IGVsc2UgaWYgKG9wWzBdID09
ICc+JyAmJiBvcFsxXSA9PSAwKSB7CisgICAgICAgIGNvbmRpdGlvbiA9IEdyZWF0ZXJUaGFuOwor
ICAgIH0gZWxzZSBpZiAob3BbMF0gPT0gJzwnICYmIG9wWzFdID09IDApIHsKKyAgICAgICAgY29u
ZGl0aW9uID0gTGVzc1RoYW47CisgICAgfSBlbHNlIGlmIChvcFswXSA9PSAnPicgJiYgb3BbMV0g
PT0gJz0nICYmIG9wWzJdID09IDApIHsKKyAgICAgICAgY29uZGl0aW9uID0gR3JlYXRlclRoYW5P
ckVxdWFsOworICAgIH0gZWxzZSBpZiAob3BbMF0gPT0gJzwnICYmIG9wWzFdID09ICc9JyAmJiBv
cFsyXSA9PSAwKSB7CisgICAgICAgIGNvbmRpdGlvbiA9IExlc3NUaGFuT3JFcXVhbDsKKyAgICB9
IGVsc2UgeworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAg
ICBjb21wYXJlMzIoY29uZGl0aW9uLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIEdQ
UkluZm86OnJlZ1QwKTsKKyAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRy
ZXNzKGRzdCkpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpjb21tYShSVHlwZSByVHlwZSwgaW50
IGRzdCkKK3sKKyAgICBleHByKG1fcmVhZC5ydHlwZSgpLCBkc3QpOworICAgIGV4cHIoclR5cGUs
IGRzdCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OmNvbmQoUlR5cGUgclR5cGUsIGludCBkc3Qp
Cit7CisgICAgZXhwcihSVHlwZTo6STMyLCBkc3QpOworICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRy
ZXNzKGRzdCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBKdW1wIGVscyA9IGJyYW5jaFRlc3QzMiha
ZXJvLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgZXhwcihyVHlwZSwgZHN0KTsKKyAgICBKdW1wIGVu
ZCA9IGp1bXAoKTsKKyAgICBlbHMubGluayh0aGlzKTsKKyAgICBleHByKHJUeXBlLCBkc3QpOwor
ICAgIGVuZC5saW5rKHRoaXMpOworfQorCitKU1ZhbHVlIGNvbXBpbGVBbmRSdW4oRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICBKSVRDb21waWxlciBj
b21waWxlcigmZXhlYy0+dm0oKSk7CisgICAgcmV0dXJuIGNvbXBpbGVyLmNvbXBpbGVBbmRSdW4o
ZXhlYywgYnVmZmVyKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21KSVRDb21waWxlci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUpJVENvbXBpbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjBmMDcy
MTdkZWZiYjZlOTdkYTk1MmQxMGUzZmIzYzE3MzBiYzBiOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21KSVRDb21waWxlci5oCkBAIC0wLDAgKzEsMTQ1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBXYXNtSklUQ29tcGlsZXJfaAorI2RlZmluZSBXYXNtSklUQ29tcGlsZXJfaAorCisjaW5jbHVk
ZSAiQXNzZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiV2FzbU9wY29kZXMuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEpJVENvZGU7CitjbGFzcyBWTTsK
KworbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBKdW1wU2NvcGU7CisKK2NsYXNzIEpJVENvbXBp
bGVyIDogcHJpdmF0ZSBBc3NlbWJseUhlbHBlcnMgeworcHVibGljOgorICAgIEpJVENvbXBpbGVy
KFZNKiB2bSkgOiBBc3NlbWJseUhlbHBlcnModm0sIDApIHsgfQorICAgIEpTVmFsdWUgY29tcGls
ZUFuZFJ1bihFeGVjU3RhdGUqLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcik7CisKK3ByaXZh
dGU6CisgICAgc3RydWN0IEZ1bmNJbXBvcnRTaWduYXR1cmUgeworICAgICAgICB1aW50MzJfdCBz
aWduYXR1cmVJbmRleDsKKyAgICAgICAgdWludDMyX3QgZnVuY0ltcG9ydEluZGV4OworICAgIH07
CisKKyAgICBzdHJ1Y3QgRnVuY1B0clRhYmxlIHsKKyAgICAgICAgdWludDMyX3Qgc2lnbmF0dXJl
SW5kZXg7CisgICAgICAgIFZlY3Rvcjx1aW50MzJfdD4gZWxlbWVudHM7CisgICAgfTsKKworICAg
IFJlZlB0cjxKSVRDb2RlPiBjb21waWxlKFZNJiwgY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIp
OworICAgIHZvaWQgdW5wYWNrKCk7CisgICAgdm9pZCByZWFkQ29uc3RhbnRQb29sU2VjdGlvbigp
OworICAgIHZvaWQgcmVhZFNpZ25hdHVyZVNlY3Rpb24oKTsKKyAgICB2b2lkIHJlYWRGdW5jdGlv
bkltcG9ydFNlY3Rpb24oKTsKKyAgICB2b2lkIHJlYWRHbG9iYWxTZWN0aW9uKCk7CisgICAgdm9p
ZCByZWFkRnVuY3Rpb25EZWNsYXJhdGlvblNlY3Rpb24oKTsKKyAgICB2b2lkIHJlYWRGdW5jdGlv
blBvaW50ZXJUYWJsZXMoKTsKKyAgICB2b2lkIHJlYWRGdW5jdGlvbkRlZmluaXRpb25TZWN0aW9u
KCk7CisgICAgdm9pZCByZWFkRXhwb3J0U2VjdGlvbigpOworCisgICAgdm9pZCByZWFkRnVuY3Rp
b25EZWZpbml0aW9uKHNpemVfdCBmdW5jSW5kZXgpOworICAgIHZvaWQgcmVhZEFyZ3MoY29uc3Qg
U2lnbmF0dXJlJik7CisgICAgdm9pZCByZWFkVmFycygpOworCisgICAgdm9pZCBzdG10KGludCBk
c3QpOworICAgIHZvaWQgZ2V0X2xvY2FsKGludCBkc3QpOworICAgIHZvaWQgc2V0X2xvY2FsKHVp
bnQzMl90IGltbSwgaW50IGRzdCk7CisgICAgdm9pZCBzZXRfbG9jYWwoaW50IGRzdCk7CisgICAg
dm9pZCByZXR1cm5fc3RtdCgpOworICAgIHZvaWQgYmxvY2tfc3RtdChpbnQgZHN0KTsKKyAgICB2
b2lkIHN0bXRfbGlzdChpbnQgZHN0KTsKKyAgICB2b2lkIGlmX3N0bXQoaW50IGRzdCk7CisgICAg
dm9pZCBpZl9lbHNlX3N0bXQoaW50IGRzdCk7CisgICAgdm9pZCB3aGlsZV9zdG10KGludCBkc3Qp
OworICAgIHZvaWQgZG9fc3RtdChpbnQgZHN0KTsKKyAgICB2b2lkIGxhYmVsX3N0bXQoaW50IGRz
dCk7CisgICAgdm9pZCBicmVha19sYWJlbF9zdG10KCk7CisgICAgdm9pZCBjb250aW51ZV9sYWJl
bF9zdG10KCk7CisgICAgdm9pZCBzd2l0Y2hfc3RtdChpbnQgZHN0KTsKKworICAgIHZvaWQgZXhw
cihSVHlwZSByVHlwZSwgaW50IGRzdCk7CisgICAgdm9pZCBzaWduZWRfZXhwcihTaWduZWRuZXNz
LCBpbnQgZHN0KTsKKyAgICB2b2lkIGFkZF9zdWIoY2hhciBvcCwgUlR5cGUsIGludCBkc3QpOwor
ICAgIHZvaWQgbXVsX2kzMihpbnQgZHN0KTsKKyAgICB2b2lkIHJlbF9pMzIoU2lnbmVkbmVzcywg
Y29uc3QgY2hhciogb3AsIGludCBkc3QpOworICAgIHZvaWQgY29tbWEoUlR5cGUsIGludCBkc3Qp
OworICAgIHZvaWQgY29uZChSVHlwZSwgaW50IGRzdCk7CisKKyAgICBBZGRyZXNzIHN0YWNrQWRk
cmVzcyhpbnQgaSkgeyAvLyBGSVhNRToKKyAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIC1pICogOCAtIDgpOworICAgIH0KKworICAgIEFkZHJlc3MgdGVt
cG9yYXJ5QWRkcmVzcyhpbnQgaSkgeyAvLyBGSVhNRToKKyAgICAgICAgcmV0dXJuIEFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIC0oaSArIG1fY3VycmVudExvY2FsVHlwZXMuc2l6
ZSgpKSAqIDggLSA4KTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2hDb250aW51ZUxhYmVsTGFiZWwo
TGFiZWwqIGxhYmVsKSB7IG1fY29udGludWVMYWJlbExhYmVscy5hcHBlbmQobGFiZWwpOyB9Cisg
ICAgdm9pZCBwb3BDb250aW51ZUxhYmVsTGFiZWwoKSB7IG1fY29udGludWVMYWJlbExhYmVscy5y
ZW1vdmVMYXN0KCk7IH0KKyAgICBMYWJlbCogY29udGludWVMYWJlbExhYmVsKHNpemVfdCBpKSBj
b25zdCB7IHJldHVybiBtX2NvbnRpbnVlTGFiZWxMYWJlbHNbaV07IH0KKyAgICB2b2lkIHB1c2hC
cmVha0xhYmVsSnVtcExpc3QoSnVtcExpc3QqIGp1bXBMaXN0KSB7IG1fYnJlYWtMYWJlbEp1bXBM
aXN0cy5hcHBlbmQoanVtcExpc3QpOyB9CisgICAgdm9pZCBwb3BCcmVha0xhYmVsSnVtcExpc3Qo
KSB7IG1fYnJlYWtMYWJlbEp1bXBMaXN0cy5yZW1vdmVMYXN0KCk7IH0KKyAgICBKdW1wTGlzdCog
YnJlYWtMYWJlbEp1bXBMaXN0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX2JyZWFrTGFiZWxK
dW1wTGlzdHNbaV07IH0KKworICAgIHZvaWQgcHVzaENvbnRpbnVlSnVtcFNjb3BlKEp1bXBTY29w
ZSoganVtcFNjb3BlKSB7IG1fY29udGludWVKdW1wU2NvcGVzLmFwcGVuZChqdW1wU2NvcGUpOyB9
CisgICAgdm9pZCBwb3BDb250aW51ZUp1bXBTY29wZSgpIHsgbV9jb250aW51ZUp1bXBTY29wZXMu
cmVtb3ZlTGFzdCgpOyB9CisgICAgSnVtcFNjb3BlKiB0b3BDb250aW51ZUp1bXBTY29wZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGludWVKdW1wU2NvcGVzLmxhc3QoKTsgfQorCisgICAgdm9pZCBw
dXNoQnJlYWtKdW1wTGlzdChKdW1wTGlzdCoganVtcExpc3QpIHsgbV9icmVha0p1bXBMaXN0cy5h
cHBlbmQoanVtcExpc3QpOyB9CisgICAgdm9pZCBwb3BCcmVha0p1bXBMaXN0KCkgeyBtX2JyZWFr
SnVtcExpc3RzLnJlbW92ZUxhc3QoKTsgfQorICAgIEp1bXBMaXN0KiB0b3BCcmVha0p1bXBMaXN0
KCkgY29uc3QgeyByZXR1cm4gbV9icmVha0p1bXBMaXN0cy5sYXN0KCk7IH0KKworICAgIEluIG1f
cmVhZDsKKworICAgIFZlY3RvcjxTaWduYXR1cmU+IG1fc2lnbmF0dXJlczsKKyAgICBWZWN0b3I8
dWludDMyX3Q+IG1faTMyczsKKyAgICBWZWN0b3I8ZmxvYXQ+IG1fZjMyczsKKyAgICBWZWN0b3I8
ZG91YmxlPiBtX2Y2NHM7CisgICAgVmVjdG9yPEZ1bmNJbXBvcnRTaWduYXR1cmU+IG1fZnVuY0lt
cG9ydFNpZ25hdHVyZXM7CisgICAgVmVjdG9yPFR5cGU+IG1fZ2xvYmFsVHlwZXM7CisgICAgVmVj
dG9yPHVpbnQzMl90PiBtX2Z1bmNTaWdzOworICAgIFZlY3RvcjxGdW5jUHRyVGFibGU+IG1fZnVu
Y1B0clRhYmxlczsKKworICAgIFJUeXBlIG1fY3VycmVudFJldHVyblR5cGU7CisgICAgVmVjdG9y
PFR5cGU+IG1fY3VycmVudExvY2FsVHlwZXM7CisKKyAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6
OkxhYmVsKj4gbV9jb250aW51ZUxhYmVsTGFiZWxzOworICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QqPiBtX2JyZWFrTGFiZWxKdW1wTGlzdHM7CisKKyAgICBWZWN0b3I8SnVtcFNj
b3BlKj4gbV9jb250aW51ZUp1bXBTY29wZXM7CisgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCo+IG1fYnJlYWtKdW1wTGlzdHM7Cit9OworCitKU19FWFBPUlRfUFJJVkFURSBKU1Zh
bHVlIGNvbXBpbGVBbmRSdW4oRXhlY1N0YXRlKiwgY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIp
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gV2FzbUpJVENvbXBp
bGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGNvZGVz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3Bjb2Rlcy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmQyNzRhYTljZDUwZGZkZGQzYTg5MzQ4Y2FiOWE4YWQ0YTJmODE0NjAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3Bjb2Rlcy5oCkBAIC0wLDAgKzEs
NTY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBXYXNtT3Bjb2Rlc19oCisjZGVmaW5lIFdhc21PcGNvZGVzX2gKKworbmFtZXNwYWNlIEpT
QyB7CisKK25hbWVzcGFjZSBXYXNtIHsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IE1hZ2ljTnVt
YmVyID0gMHg2ZDczNjE3NzsKKworZW51bSBjbGFzcyBTdG10IDogdWludDhfdCB7CisgICAgU2V0
TG9jLAorICAgIFNldEdsbywKKyAgICBJMzJTdG9yZTgsCisgICAgSTMyU3RvcmVPZmY4LAorICAg
IEkzMlN0b3JlMTYsCisgICAgSTMyU3RvcmVPZmYxNiwKKyAgICBJMzJTdG9yZTMyLAorICAgIEkz
MlN0b3JlT2ZmMzIsCisgICAgRjMyU3RvcmUsCisgICAgRjMyU3RvcmVPZmYsCisgICAgRjY0U3Rv
cmUsCisgICAgRjY0U3RvcmVPZmYsCisgICAgQ2FsbEludCwKKyAgICBDYWxsSW5kLAorICAgIENh
bGxJbXAsCisgICAgUmV0LAorICAgIEJsb2NrLAorICAgIElmVGhlbiwKKyAgICBJZkVsc2UsCisg
ICAgV2hpbGUsCisgICAgRG8sCisgICAgTGFiZWwsCisgICAgQnJlYWssCisgICAgQnJlYWtMYWJl
bCwKKyAgICBDb250aW51ZSwKKyAgICBDb250aW51ZUxhYmVsLAorICAgIFN3aXRjaCwKKworICAg
IEJhZAorfTsKKworZW51bSBjbGFzcyBTdG10V2l0aEltbSA6IHVpbnQ4X3QgeworICAgIFNldExv
YywKKyAgICBTZXRHbG8sCisgICAgUmVzZXZlZDEsCisgICAgUmVzZXZlZDIsCisKKyAgICBCYWQK
K307CisKK2VudW0gY2xhc3MgU3dpdGNoQ2FzZSA6IHVpbnQ4X3QgeworICAgIENhc2UwLAorICAg
IENhc2UxLAorICAgIENhc2VOLAorICAgIERlZmF1bHQwLAorICAgIERlZmF1bHQxLAorICAgIERl
ZmF1bHROCit9OworCitlbnVtIGNsYXNzIEkzMiA6IHVpbnQ4X3QgeworICAgIExpdFBvb2wsCisg
ICAgTGl0SW1tLAorICAgIEdldExvYywKKyAgICBHZXRHbG8sCisgICAgU2V0TG9jLAorICAgIFNl
dEdsbywKKyAgICBTTG9hZDgsCisgICAgU0xvYWRPZmY4LAorICAgIFVMb2FkOCwKKyAgICBVTG9h
ZE9mZjgsCisgICAgU0xvYWQxNiwKKyAgICBTTG9hZE9mZjE2LAorICAgIFVMb2FkMTYsCisgICAg
VUxvYWRPZmYxNiwKKyAgICBMb2FkMzIsCisgICAgTG9hZE9mZjMyLAorICAgIFN0b3JlOCwKKyAg
ICBTdG9yZU9mZjgsCisgICAgU3RvcmUxNiwKKyAgICBTdG9yZU9mZjE2LAorICAgIFN0b3JlMzIs
CisgICAgU3RvcmVPZmYzMiwKKyAgICBDYWxsSW50LAorICAgIENhbGxJbmQsCisgICAgQ2FsbElt
cCwKKyAgICBDb25kLAorICAgIENvbW1hLAorICAgIEZyb21GMzIsCisgICAgRnJvbUY2NCwKKyAg
ICBOZWcsCisgICAgQWRkLAorICAgIFN1YiwKKyAgICBNdWwsCisgICAgU0RpdiwKKyAgICBVRGl2
LAorICAgIFNNb2QsCisgICAgVU1vZCwKKyAgICBCaXROb3QsCisgICAgQml0T3IsCisgICAgQml0
QW5kLAorICAgIEJpdFhvciwKKyAgICBMc2gsCisgICAgQXJpdGhSc2gsCisgICAgTG9naWNSc2gs
CisgICAgQ2x6LAorICAgIExvZ2ljTm90LAorICAgIEVxSTMyLAorICAgIEVxRjMyLAorICAgIEVx
RjY0LAorICAgIE5FcUkzMiwKKyAgICBORXFGMzIsCisgICAgTkVxRjY0LAorICAgIFNMZVRoSTMy
LAorICAgIFVMZVRoSTMyLAorICAgIExlVGhGMzIsCisgICAgTGVUaEY2NCwKKyAgICBTTGVFcUkz
MiwKKyAgICBVTGVFcUkzMiwKKyAgICBMZUVxRjMyLAorICAgIExlRXFGNjQsCisgICAgU0dyVGhJ
MzIsCisgICAgVUdyVGhJMzIsCisgICAgR3JUaEYzMiwKKyAgICBHclRoRjY0LAorICAgIFNHckVx
STMyLAorICAgIFVHckVxSTMyLAorICAgIEdyRXFGMzIsCisgICAgR3JFcUY2NCwKKyAgICBTTWlu
LAorICAgIFVNaW4sCisgICAgU01heCwKKyAgICBVTWF4LAorICAgIEFicywKKworICAgIEJhZAor
fTsKKworZW51bSBjbGFzcyBJMzJXaXRoSW1tIDogdWludDhfdCB7CisgICAgTGl0UG9vbCwKKyAg
ICBMaXRJbW0sCisgICAgR2V0TG9jLAorICAgIFJlc2VydmVkLAorCisgICAgQmFkCit9OworCitl
bnVtIGNsYXNzIEYzMiA6IHVpbnQ4X3QgeworICAgIExpdFBvb2wsCisgICAgTGl0SW1tLAorICAg
IEdldExvYywKKyAgICBHZXRHbG8sCisgICAgU2V0TG9jLAorICAgIFNldEdsbywKKyAgICBMb2Fk
LAorICAgIExvYWRPZmYsCisgICAgU3RvcmUsCisgICAgU3RvcmVPZmYsCisgICAgQ2FsbEludCwK
KyAgICBDYWxsSW5kLAorICAgIENvbmQsCisgICAgQ29tbWEsCisgICAgRnJvbVMzMiwKKyAgICBG
cm9tVTMyLAorICAgIEZyb21GNjQsCisgICAgTmVnLAorICAgIEFkZCwKKyAgICBTdWIsCisgICAg
TXVsLAorICAgIERpdiwKKyAgICBBYnMsCisgICAgQ2VpbCwKKyAgICBGbG9vciwKKyAgICBTcXJ0
LAorCisgICAgQmFkCit9OworCitlbnVtIGNsYXNzIEYzMldpdGhJbW0gOiB1aW50OF90IHsKKyAg
ICBMaXRQb29sLAorICAgIEdldExvYywKKyAgICBSZXNlcnZlZDAsCisgICAgUmVzZXJ2ZWQxLAor
CisgICAgQmFkCit9OworCitlbnVtIGNsYXNzIEY2NCA6IHVpbnQ4X3QgeworICAgIExpdFBvb2ws
CisgICAgTGl0SW1tLAorICAgIEdldExvYywKKyAgICBHZXRHbG8sCisgICAgU2V0TG9jLAorICAg
IFNldEdsbywKKyAgICBMb2FkLAorICAgIExvYWRPZmYsCisgICAgU3RvcmUsCisgICAgU3RvcmVP
ZmYsCisgICAgQ2FsbEludCwKKyAgICBDYWxsSW5kLAorICAgIENhbGxJbXAsCisgICAgQ29uZCwK
KyAgICBDb21tYSwKKyAgICBGcm9tUzMyLAorICAgIEZyb21VMzIsCisgICAgRnJvbUYzMiwKKyAg
ICBOZWcsCisgICAgQWRkLAorICAgIFN1YiwKKyAgICBNdWwsCisgICAgRGl2LAorICAgIE1vZCwK
KyAgICBNaW4sCisgICAgTWF4LAorICAgIEFicywKKyAgICBDZWlsLAorICAgIEZsb29yLAorICAg
IFNxcnQsCisgICAgQ29zLAorICAgIFNpbiwKKyAgICBUYW4sCisgICAgQUNvcywKKyAgICBBU2lu
LAorICAgIEFUYW4sCisgICAgQVRhbjIsCisgICAgRXhwLAorICAgIExuLAorICAgIFBvdywKKwor
ICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBGNjRXaXRoSW1tIDogdWludDhfdCB7CisgICAgTGl0
UG9vbCwKKyAgICBHZXRMb2MsCisgICAgUmVzZXJ2ZWQwLAorICAgIFJlc2VydmVkMSwKKworICAg
IEJhZAorfTsKKworZW51bSBjbGFzcyBWb2lkIDogdWludDhfdCB7CisgICAgQ2FsbEludCwKKyAg
ICBDYWxsSW5kLAorICAgIENhbGxJbXAsCisKKyAgICBCYWQKK307CisKK2VudW0gY2xhc3MgVHlw
ZSA6IHVpbnQ4X3QgeworICAgIEkzMiwKKyAgICBGMzIsCisgICAgRjY0Cit9OworCitlbnVtIGNs
YXNzIFZhclR5cGVzIDogdWludDhfdCB7CisgICAgSTMyID0gMHgxLAorICAgIEYzMiA9IDB4MiwK
KyAgICBGNjQgPSAweDQsCit9OworCitpbmxpbmUgVmFyVHlwZXMgb3BlcmF0b3J8KFZhclR5cGVz
IGxocywgVmFyVHlwZXMgcmhzKSB7IHJldHVybiBWYXJUeXBlcyh1aW50OF90KGxocykgfCB1aW50
OF90KHJocykpOyB9CitpbmxpbmUgYm9vbCBvcGVyYXRvciYoVmFyVHlwZXMgbGhzLCBWYXJUeXBl
cyByaHMpIHsgcmV0dXJuIGJvb2wodWludDhfdChsaHMpICYgdWludDhfdChyaHMpKTsgfQorCitl
bnVtIGNsYXNzIFZhclR5cGVzV2l0aEltbSA6IHVpbnQ4X3QgeworICAgIE9ubHlJMzIsCisgICAg
UmVzZXJ2ZWQwLAorICAgIFJlc2VydmVkMSwKKyAgICBSZXNlcnZlZDIKK307CisKK2VudW0gY2xh
c3MgUlR5cGUgOiB1aW50OF90IHsKKyAgICBJMzIgPSB1aW50OF90KFR5cGU6OkkzMiksCisgICAg
RjMyID0gdWludDhfdChUeXBlOjpGMzIpLAorICAgIEY2NCA9IHVpbnQ4X3QoVHlwZTo6RjY0KSwK
KyAgICBWb2lkCit9OworCitjbGFzcyBFeHByIHsKK3B1YmxpYzoKKyAgICBFeHByKCkgOiBtX3R5
cGUoUlR5cGUoLTEpKSwgdXt9IHt9CisgICAgc3RhdGljIEV4cHIgQmFkKCkgeyByZXR1cm4gRXhw
cigpOyB9CisgICAgRXhwcihJMzIgaTMyKSA6IG1fdHlwZShSVHlwZTo6STMyKSB7IGFzc2VydChp
MzIgPCBJMzI6OkJhZCk7IHUuaTMyID0gaTMyOyB9CisgICAgRXhwcihGMzIgZjMyKSA6IG1fdHlw
ZShSVHlwZTo6RjMyKSB7IGFzc2VydChmMzIgPCBGMzI6OkJhZCk7IHUuZjMyID0gZjMyOyB9Cisg
ICAgRXhwcihGNjQgZjY0KSA6IG1fdHlwZShSVHlwZTo6RjY0KSB7IGFzc2VydChmNjQgPCBGNjQ6
OkJhZCk7IHUuZjY0ID0gZjY0OyB9CisgICAgRXhwcihWb2lkIHYpIDogbV90eXBlKFJUeXBlOjpW
b2lkKSB7IGFzc2VydCh2IDwgVm9pZDo6QmFkKTsgdS52ID0gdjsgfQorCisgICAgYm9vbCBpc19i
YWQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gUlR5cGUoLTEpOyB9CisgICAgUlR5cGUgdHlw
ZSgpIGNvbnN0IHsgYXNzZXJ0KCFpc19iYWQoKSk7IHJldHVybiBtX3R5cGU7IH0KKyAgICBJMzIg
aTMyKCkgY29uc3QgeyBhc3NlcnQobV90eXBlID09IFJUeXBlOjpJMzIpOyByZXR1cm4gdS5pMzI7
IH0KKyAgICBGMzIgZjMyKCkgY29uc3QgeyBhc3NlcnQobV90eXBlID09IFJUeXBlOjpGMzIpOyBy
ZXR1cm4gdS5mMzI7IH0KKyAgICBGNjQgZjY0KCkgY29uc3QgeyBhc3NlcnQobV90eXBlID09IFJU
eXBlOjpGNjQpOyByZXR1cm4gdS5mNjQ7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShFeHByIHJo
cykgY29uc3QgeyByZXR1cm4gbV90eXBlID09IHJocy5tX3R5cGUgJiYgdS5yYXcgPT0gcmhzLnUu
cmF3OyB9CisgICAgYm9vbCBvcGVyYXRvciE9KEV4cHIgcmhzKSBjb25zdCB7IHJldHVybiAhKCp0
aGlzID09IHJocyk7IH0KKworcHJpdmF0ZToKKyAgICBSVHlwZSBtX3R5cGU7CisgICAgdW5pb24g
VSB7CisgICAgICAgIEkzMiBpMzI7CisgICAgICAgIEYzMiBmMzI7CisgICAgICAgIEY2NCBmNjQ7
CisgICAgICAgIFZvaWQgdjsKKyAgICAgICAgdWludDhfdCByYXc7CisgICAgfSB1OworCisgICAg
c3RhdGljX2Fzc2VydChzaXplb2YoVSkgPT0gc2l6ZW9mKHVpbnQ4X3QpLCAiRXhhY3Qgb3Zlcmxh
eSBvZiByYXdfIik7Cit9OworCitzdGF0aWMgY29uc3QgdWludDhfdCBIYXNJbW1GbGFnID0gMHg4
MDsKK3N0YXRpY19hc3NlcnQodWludDhfdChJMzI6OkJhZCkgPD0gSGFzSW1tRmxhZywgIk1TQiBy
ZXNlcnZlZCB0byBkaXN0aW5ndWlzaCBJMzIgZnJvbSBJMzJXaXRoSW1tIik7CitzdGF0aWNfYXNz
ZXJ0KHVpbnQ4X3QoRjMyOjpCYWQpIDw9IEhhc0ltbUZsYWcsICJNU0IgcmVzZXJ2ZWQgdG8gZGlz
dGluZ3Vpc2ggRjMyIGZyb20gRjMyV2l0aEltbSIpOworc3RhdGljX2Fzc2VydCh1aW50OF90KEY2
NDo6QmFkKSA8PSBIYXNJbW1GbGFnLCAiTVNCIHJlc2VydmVkIHRvIGRpc3Rpbmd1aXNoIEY2NCBm
cm9tIEY2NFdpdGhJbW0iKTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIE9wV2l0aEltbUJpdHMg
PSAyOworc3RhdGljIGNvbnN0IHVpbnQzMl90IE9wV2l0aEltbUxpbWl0ID0gMSA8PCBPcFdpdGhJ
bW1CaXRzOworc3RhdGljX2Fzc2VydCh1aW50OF90KEkzMldpdGhJbW06OkJhZCkgPD0gT3BXaXRo
SW1tTGltaXQsICJJMzJXaXRoSW1tIG9wIGZpdHMiKTsKK3N0YXRpY19hc3NlcnQodWludDhfdChG
MzJXaXRoSW1tOjpCYWQpIDw9IE9wV2l0aEltbUxpbWl0LCAiRjMyV2l0aEltbSBvcCBmaXRzIik7
CitzdGF0aWNfYXNzZXJ0KHVpbnQ4X3QoRjY0V2l0aEltbTo6QmFkKSA8PSBPcFdpdGhJbW1MaW1p
dCwgIkY2NFdpdGhJbW0gb3AgZml0cyIpOworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgSW1tQml0
cyA9IDU7CitzdGF0aWMgY29uc3QgdWludDMyX3QgSW1tTGltaXQgPSAxIDw8IEltbUJpdHM7Citz
dGF0aWNfYXNzZXJ0KDEgKyBPcFdpdGhJbW1CaXRzICsgSW1tQml0cyA9PSA4LCAiQml0cyBvZiBp
bW1lZGlhdGUgb3Agc2hvdWxkIGFkZCB1cCB0byBhIGJ5dGUiKTsKKworc3RhdGljIGlubGluZSB1
aW50OF90IFBhY2tPcFdpdGhJbW0odWludDhfdCBvcCwgdWludDhfdCBpbW0pCit7CisgICAgYXNz
ZXJ0KG9wIDwgT3BXaXRoSW1tTGltaXQpOworICAgIGFzc2VydChpbW0gPCBJbW1MaW1pdCk7Cisg
ICAgcmV0dXJuIEhhc0ltbUZsYWcgfCAodWludDhfdChvcCkgPDwgSW1tQml0cykgfCBpbW07Cit9
CisKK3RlbXBsYXRlIDxjbGFzcyBUV2l0aEltbT4KK3N0YXRpYyBpbmxpbmUgdm9pZCBVbnBhY2tP
cFdpdGhJbW0odWludDhfdCBieXRlLCBUV2l0aEltbSogb3AsIHVpbnQ4X3QgKmltbSkKK3sKKyAg
ICBhc3NlcnQoYnl0ZSAmIEhhc0ltbUZsYWcpOworICAgICpvcCA9IFRXaXRoSW1tKChieXRlID4+
IEltbUJpdHMpICYgKE9wV2l0aEltbUxpbWl0IC0gMSkpOworICAgICppbW0gPSBieXRlICYgKElt
bUxpbWl0IC0gMSk7Cit9CisKK2NsYXNzIEV4cHJXaXRoSW1tIHsKK3B1YmxpYzoKKyAgICBFeHBy
V2l0aEltbSgpIDogbV90eXBlKFR5cGUoLTEpKSB7fQorICAgIEV4cHJXaXRoSW1tKEkzMldpdGhJ
bW0gaTMyKSA6IG1fdHlwZShUeXBlOjpJMzIpIHsgYXNzZXJ0KGkzMiA8IEkzMldpdGhJbW06OkJh
ZCk7IHUuaTMyID0gaTMyOyB9CisgICAgRXhwcldpdGhJbW0oRjMyV2l0aEltbSBmMzIpIDogbV90
eXBlKFR5cGU6OkYzMikgeyBhc3NlcnQoZjMyIDwgRjMyV2l0aEltbTo6QmFkKTsgdS5mMzIgPSBm
MzI7IH0KKyAgICBFeHByV2l0aEltbShGNjRXaXRoSW1tIGY2NCkgOiBtX3R5cGUoVHlwZTo6RjY0
KSB7IGFzc2VydChmNjQgPCBGNjRXaXRoSW1tOjpCYWQpOyB1LmY2NCA9IGY2NDsgfQorCisgICAg
Ym9vbCBpc19iYWQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZSgtMSk7IH0KKyAgICBU
eXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBJMzJXaXRoSW1tIGkzMigp
IGNvbnN0IHsgYXNzZXJ0KG1fdHlwZSA9PSBUeXBlOjpJMzIpOyByZXR1cm4gdS5pMzI7IH0KKyAg
ICBGMzJXaXRoSW1tIGYzMigpIGNvbnN0IHsgYXNzZXJ0KG1fdHlwZSA9PSBUeXBlOjpGMzIpOyBy
ZXR1cm4gdS5mMzI7IH0KKyAgICBGNjRXaXRoSW1tIGY2NCgpIGNvbnN0IHsgYXNzZXJ0KG1fdHlw
ZSA9PSBUeXBlOjpGNjQpOyByZXR1cm4gdS5mNjQ7IH0KKworcHJpdmF0ZToKKyAgICBUeXBlIG1f
dHlwZTsKKyAgICB1bmlvbiBVIHsKKyAgICAgICAgSTMyV2l0aEltbSBpMzI7CisgICAgICAgIEYz
MldpdGhJbW0gZjMyOworICAgICAgICBGNjRXaXRoSW1tIGY2NDsKKyAgICAgICAgdWludDhfdCBy
YXc7CisgICAgfSB1OworCisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVSkgPT0gc2l6ZW9mKHVp
bnQ4X3QpLCAiRXhhY3Qgb3ZlcmxheSBvZiByYXdfIik7Cit9OworCitlbnVtIGNsYXNzIEV4cG9y
dEZvcm1hdCA6IHVpbnQ4X3QgeworICAgIERlZmF1bHQsCisgICAgUmVjb3JkCit9OworCitlbnVt
IGNsYXNzIFNpZ25lZG5lc3MgeyBTaWduZWQsIFVuc2lnbmVkIH07CisKK3N0cnVjdCBTaWduYXR1
cmUgeworICAgIFJUeXBlIHJldDsKKyAgICBWZWN0b3I8VHlwZT4gYXJnczsKKworICAgIFNpZ25h
dHVyZSgpIHt9CisgICAgU2lnbmF0dXJlKFJUeXBlIHJldCkgOiByZXQocmV0KSB7fQorICAgIFNp
Z25hdHVyZShSVHlwZSByZXQsIHVpbnQzMl90IG51bUFyZ3MpIDogcmV0KHJldCksIGFyZ3MobnVt
QXJncykge30KKyAgICBTaWduYXR1cmUoUlR5cGUgcmV0LCBWZWN0b3I8VHlwZT4mJiBhcmdzKSA6
IHJldChyZXQpLCBhcmdzKFdURjo6bW92ZShhcmdzKSkge30KKworICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBTaWduYXR1cmUmIHJocykgY29uc3QgeyByZXR1cm4gcmV0ID09IHJocy5yZXQgJiYg
YXJncyA9PSByaHMuYXJnczsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTaWduYXR1cmUm
IHJocykgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSByaHMpOyB9CisKKyAgICBzdHJ1Y3QgSGFz
aCB7CisgICAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBTaWduYXR1cmUgJnNpZykgY29uc3Qg
eworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVHlwZSkgPT0gMSAmJiBzaXplb2Yo
UlR5cGUpID09IDEsICJTaGlmdCBtb3JlIik7CisgICAgICAgICAgICB1aW50MzJfdCBoID0gdWlu
dDhfdChzaWcucmV0KTsKKyAgICAgICAgICAgIGZvciAoVHlwZSB0IDogc2lnLmFyZ3MpCisgICAg
ICAgICAgICAgICAgaCA9ICgoaCA8PCAyKSB8IHVpbnQ4X3QodCkpIF4gKGggPj4gMzApOworICAg
ICAgICAgICAgcmV0dXJuIGg7CisgICAgICAgIH0KKyAgICB9OworfTsKKworY2xhc3MgSW4gewor
cHVibGljOgorICAgIEluKCkgeyB9CisgICAgSW4oY29uc3QgdWludDhfdCogYmVnaW4pIDogbV9j
dXJzb3IoYmVnaW4pIHsgfQorCisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IFQgZml4ZWRXaWR0aCgp
OworICAgIFN0bXQgc3RtdCgpIHsgcmV0dXJuIHU4PFN0bXQ+KCk7IH0KKyAgICBTd2l0Y2hDYXNl
IHN3aXRjaENhc2UoKSB7IHJldHVybiB1ODxTd2l0Y2hDYXNlPigpOyB9CisgICAgdGVtcGxhdGU8
Y2xhc3MgVCwgY2xhc3MgVFdpdGhJbW0+IGlubGluZSBib29sIGNvZGUoVCosIFRXaXRoSW1tKiwg
dWludDhfdCopOworICAgIFZvaWQgdm9pZEV4cHIoKSB7IHJldHVybiB1ODxWb2lkPigpOyB9Cisg
ICAgRXhwb3J0Rm9ybWF0IGV4cG9ydEZvcm1hdCgpIHsgcmV0dXJuIHU4PEV4cG9ydEZvcm1hdD4o
KTsgfQorICAgIFR5cGUgdHlwZSgpIHsgcmV0dXJuIHU4PFR5cGU+KCk7IH0KKyAgICBSVHlwZSBy
dHlwZSgpIHsgcmV0dXJuIHU4PFJUeXBlPigpOyB9CisgICAgaW5saW5lIHVpbnQzMl90IGltbVUz
MigpOworICAgIGlubGluZSBpbnQzMl90IGltbVMzMigpOworICAgIGNoYXIgc2luZ2xlQ2hhcigp
IHsgcmV0dXJuICptX2N1cnNvcisrOyB9CisKKyAgICBpbmxpbmUgYm9vbCBpZkkzMkxpdChjb25z
dCBWZWN0b3I8dWludDMyX3Q+JiBpMzJzLCB1aW50MzJfdCogdTMyKTsKKworcHJpdmF0ZToKKyAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gVCB1OCgpIHsgcmV0dXJuIFQoKm1fY3Vyc29yKyspOyB9CisK
KyAgICBjb25zdCB1aW50OF90KiBtX2N1cnNvcjsKK307CisKK3RlbXBsYXRlIDw+CitpbmxpbmUg
dWludDMyX3QgSW46OmZpeGVkV2lkdGg8dWludDMyX3Q+KCkKK3sKKyAgICB1aW50MzJfdCB1MzIg
PSBtX2N1cnNvclswXSB8IG1fY3Vyc29yWzFdIDw8IDggfCBtX2N1cnNvclsyXSA8PCAxNiB8IG1f
Y3Vyc29yWzNdIDw8IDI0OworICAgIG1fY3Vyc29yICs9IDQ7CisgICAgcmV0dXJuIHUzMjsKK30K
KwordGVtcGxhdGUgPD4KK2lubGluZSBmbG9hdCBJbjo6Zml4ZWRXaWR0aDxmbG9hdD4oKQorewor
ICAgIHVuaW9uIHsKKyAgICAgICAgdWludDhfdCBhcnJbNF07CisgICAgICAgIGZsb2F0IGY7Cisg
ICAgfSB1ID0geyB7IG1fY3Vyc29yWzBdLCBtX2N1cnNvclsxXSwgbV9jdXJzb3JbMl0sIG1fY3Vy
c29yWzNdIH0gfTsKKyAgICBtX2N1cnNvciArPSA0OworICAgIHJldHVybiB1LmY7Cit9CisKK3Rl
bXBsYXRlIDw+CitpbmxpbmUgZG91YmxlIEluOjpmaXhlZFdpZHRoPGRvdWJsZT4oKQoreworICAg
IHVuaW9uIHsKKyAgICAgICAgdWludDhfdCBhcnJbOF07CisgICAgICAgIGRvdWJsZSBkOworICAg
IH0gdSA9IHsgeyBtX2N1cnNvclswXSwgbV9jdXJzb3JbMV0sIG1fY3Vyc29yWzJdLCBtX2N1cnNv
clszXSwgbV9jdXJzb3JbNF0sIG1fY3Vyc29yWzVdLCBtX2N1cnNvcls2XSwgbV9jdXJzb3JbN10g
fSB9OworICAgIG1fY3Vyc29yICs9IDg7CisgICAgcmV0dXJuIHUuZDsKK30KKwordGVtcGxhdGUg
PGNsYXNzIFQsIGNsYXNzIFRXaXRoSW1tPgorYm9vbCBJbjo6Y29kZShUKiB0LCBUV2l0aEltbSog
dFdpdGhJbW0sIHVpbnQ4X3QqIGltbSkKK3sKKyAgICB1aW50OF90IGJ5dGUgPSAqbV9jdXJzb3Ir
KzsKKyAgICBpZiAoIShieXRlICYgSGFzSW1tRmxhZykpIHsKKyAgICAgICAgKnQgPSBUKGJ5dGUp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBVbnBhY2tPcFdpdGhJbW0oYnl0
ZSwgdFdpdGhJbW0sIGltbSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxpbmUgdWludDMy
X3QgSW46OmltbVUzMigpCit7CisgICAgdWludDMyX3QgdTMyID0gKm1fY3Vyc29yKys7CisgICAg
aWYgKHUzMiA8IDB4ODApCisgICAgICAgIHJldHVybiB1MzI7CisKKyAgICB1MzIgJj0gMHg3ZjsK
KworICAgIGZvciAodW5zaWduZWQgc2hpZnQgPSA3OyB0cnVlOyBzaGlmdCArPSA3KSB7CisgICAg
ICAgIHVpbnQzMl90IGIgPSAqbV9jdXJzb3IrKzsKKyAgICAgICAgaWYgKGIgPCAweDgwKQorICAg
ICAgICAgICAgcmV0dXJuIHUzMiB8IChiIDw8IHNoaWZ0KTsKKyAgICAgICAgdTMyIHw9IChiICYg
MHg3ZikgPDwgc2hpZnQ7CisgICAgfQorfQorCitpbmxpbmUgaW50MzJfdCBJbjo6aW1tUzMyKCkK
K3sKKyAgICB1aW50MzJfdCB1MzIgPSAqbV9jdXJzb3IrKzsKKyAgICBpZiAodTMyIDwgMHg4MCkK
KyAgICAgICAgcmV0dXJuIGludDMyX3QodTMyKSA8PCAoMzItNykgPj4gKDMyLTcpOworCisgICAg
dTMyICY9IDB4N2Y7CisKKyAgICBmb3IgKHVuc2lnbmVkIHNoaWZ0ID0gNzsgdHJ1ZTsgc2hpZnQg
Kz0gNykgeworICAgICAgICB1aW50MzJfdCBiID0gKm1fY3Vyc29yKys7CisgICAgICAgIGlmIChi
IDwgMHg4MCkgeworICAgICAgICAgICAgdTMyIHw9IGIgPDwgc2hpZnQ7CisgICAgICAgICAgICBp
bnQgc2lnbl9leHRlbmQgPSAoMzItNykgLSBzaGlmdDsKKyAgICAgICAgICAgIGlmIChzaWduX2V4
dGVuZCA+IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGludDMyX3QodTMyKSA8PCBzaWduX2V4
dGVuZCA+PiBzaWduX2V4dGVuZDsKKyAgICAgICAgICAgIHJldHVybiBpbnQzMl90KHUzMik7Cisg
ICAgICAgIH0KKyAgICAgICAgdTMyIHw9IChiICYgMHg3ZikgPDwgc2hpZnQ7CisgICAgfQorfQor
CitpbmxpbmUgYm9vbCBJbjo6aWZJMzJMaXQoY29uc3QgVmVjdG9yPHVpbnQzMl90PiYgaTMycywg
dWludDMyX3QqIHUzMikKK3sKKyAgICB1aW50OF90IGJ5dGUgPSAqbV9jdXJzb3I7CisKKyAgICBp
ZiAoYnl0ZSAmIEhhc0ltbUZsYWcpIHsKKyAgICAgICAgSTMyV2l0aEltbSBpMzJXaXRoSW1tOwor
ICAgICAgICB1aW50OF90IGltbTsKKyAgICAgICAgVW5wYWNrT3BXaXRoSW1tKGJ5dGUsICZpMzJX
aXRoSW1tLCAmaW1tKTsKKworICAgICAgICBpZiAoaTMyV2l0aEltbSA9PSBJMzJXaXRoSW1tOjpM
aXRJbW0pIHsKKyAgICAgICAgICAgIG1fY3Vyc29yKys7CisgICAgICAgICAgICAqdTMyID0gaW1t
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaTMy
V2l0aEltbSA9PSBJMzJXaXRoSW1tOjpMaXRQb29sKSB7CisgICAgICAgICAgICBtX2N1cnNvcisr
OworICAgICAgICAgICAgKnUzMiA9IGkzMnNbaW1tXTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChJ
MzIoYnl0ZSkgPT0gSTMyOjpMaXRJbW0pIHsKKyAgICAgICAgbV9jdXJzb3IrKzsKKyAgICAgICAg
KnUzMiA9IGltbVUzMigpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAo
STMyKGJ5dGUpID09IEkzMjo6TGl0UG9vbCkgeworICAgICAgICBtX2N1cnNvcisrOworICAgICAg
ICAqdTMyID0gaTMyc1tpbW1VMzIoKV07CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2Vu
ZGlmIC8vIFdhc21PcGNvZGVzX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256055</attachid>
            <date>2015-07-02 17:41:05 -0700</date>
            <delta_ts>2015-07-02 22:47:15 -0700</delta_ts>
            <desc>work in progress, based on https://github.com/WebAssembly/polyfill-prototype-1</desc>
            <filename>bug-146064-20150702174011.patch</filename>
            <type>text/plain</type>
            <size>59390</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1ODMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
ZGMwZDVjOTQ5M2QxMTVlODMxMzdlYmU3Zjk1NGI3ZjgyZDUwZDI1Li5iMWRhZDViZWQ4MTY1OGVh
NWIxZmVjMWY5YTQxY2M4OTI0M2RmZTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTEgQEAKKzIwMTUtMDctMDIgIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0Bn
bWFpbC5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBuYXRpdmVseSBzdXBwb3J0IFdlYkFzc2Vt
Ymx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYw
NjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICoganNjLmNw
cDoKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoZnVu
Y3Rpb25Mb2FkV2ViQXNzZW1ibHkpOgorICAgICAgICAqIHdhc20vV2FzbUpJVENvbXBpbGVyLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206Okp1bXBTY29wZTo6SnVtcFNjb3BlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6SnVtcFNjb3BlOjpqdW1wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
SnVtcFNjb3BlOjpsaW5rKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OmNvbXBp
bGVBbmRSdW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6Y29tcGlsZSk6Cisg
ICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjp1bnBhY2spOgorICAgICAgICAoSlNDOjpX
YXNtOjpKSVRDb21waWxlcjo6cmVhZFNpZ25hdHVyZVNlY3Rpb24pOgorICAgICAgICAoSlNDOjpX
YXNtOjpKSVRDb21waWxlcjo6cmVhZEZ1bmN0aW9uSW1wb3J0U2VjdGlvbik6CisgICAgICAgIChK
U0M6Oldhc206OkpJVENvbXBpbGVyOjpyZWFkR2xvYmFsU2VjdGlvbik6CisgICAgICAgIChKU0M6
Oldhc206OkpJVENvbXBpbGVyOjpyZWFkQ29uc3RhbnRQb29sU2VjdGlvbik6CisgICAgICAgIChK
U0M6Oldhc206OkpJVENvbXBpbGVyOjpyZWFkRnVuY3Rpb25EZWNsYXJhdGlvblNlY3Rpb24pOgor
ICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cmVhZEZ1bmN0aW9uUG9pbnRlclRhYmxl
cyk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpyZWFkRnVuY3Rpb25EZWZpbml0
aW9uU2VjdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpyZWFkRXhwb3J0
U2VjdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpyZWFkRnVuY3Rpb25E
ZWZpbml0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnJlYWRBcmdzKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnJlYWRWYXJzKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6SklUQ29tcGlsZXI6OnN0bXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21w
aWxlcjo6Z2V0X2xvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnNldF9s
b2NhbCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpyZXR1cm5fc3RtdCk6Cisg
ICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpzdG10X2xpc3QpOgorICAgICAgICAoSlND
OjpXYXNtOjpKSVRDb21waWxlcjo6YmxvY2tfc3RtdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJ
VENvbXBpbGVyOjppZl9zdG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6Omlm
X2Vsc2Vfc3RtdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjp3aGlsZV9zdG10
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OmRvX3N0bXQpOgorICAgICAgICAo
SlNDOjpXYXNtOjpKSVRDb21waWxlcjo6bGFiZWxfc3RtdCk6CisgICAgICAgIChKU0M6Oldhc206
OkpJVENvbXBpbGVyOjpicmVha19sYWJlbF9zdG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklU
Q29tcGlsZXI6OmNvbnRpbnVlX2xhYmVsX3N0bXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRD
b21waWxlcjo6c3dpdGNoX3N0bXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6
ZXhwcik6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpzaWduZWRfZXhwcik6Cisg
ICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjphZGRfc3ViKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6SklUQ29tcGlsZXI6Om11bF9pMzIpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21w
aWxlcjo6cmVsX2kzMik6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpjb21tYSk6
CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpjb25kKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6Y29tcGlsZUFuZFJ1bik6CisgICAgICAgICogd2FzbS9XYXNtSklUQ29tcGlsZXIuaDog
QWRkZWQuCisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpKSVRDb21waWxlcik6Cisg
ICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpzdGFja0FkZHJlc3MpOgorICAgICAgICAo
SlNDOjpXYXNtOjpKSVRDb21waWxlcjo6dGVtcG9yYXJ5QWRkcmVzcyk6CisgICAgICAgIChKU0M6
Oldhc206OkpJVENvbXBpbGVyOjpwdXNoQ29udGludWVMYWJlbExhYmVsKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6SklUQ29tcGlsZXI6OnBvcENvbnRpbnVlTGFiZWxMYWJlbCk6CisgICAgICAgIChK
U0M6Oldhc206OkpJVENvbXBpbGVyOjpjb250aW51ZUxhYmVsTGFiZWwpOgorICAgICAgICAoSlND
OjpXYXNtOjpKSVRDb21waWxlcjo6cHVzaEJyZWFrTGFiZWxKdW1wTGlzdCk6CisgICAgICAgIChK
U0M6Oldhc206OkpJVENvbXBpbGVyOjpwb3BCcmVha0xhYmVsSnVtcExpc3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpKSVRDb21waWxlcjo6YnJlYWtMYWJlbEp1bXBMaXN0KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6SklUQ29tcGlsZXI6OnB1c2hDb250aW51ZUp1bXBTY29wZSk6CisgICAgICAgIChK
U0M6Oldhc206OkpJVENvbXBpbGVyOjpwb3BDb250aW51ZUp1bXBTY29wZSk6CisgICAgICAgIChK
U0M6Oldhc206OkpJVENvbXBpbGVyOjp0b3BDb250aW51ZUp1bXBTY29wZSk6CisgICAgICAgIChK
U0M6Oldhc206OkpJVENvbXBpbGVyOjpwdXNoQnJlYWtKdW1wTGlzdCk6CisgICAgICAgIChKU0M6
Oldhc206OkpJVENvbXBpbGVyOjpwb3BCcmVha0p1bXBMaXN0KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6SklUQ29tcGlsZXI6OnRvcEJyZWFrSnVtcExpc3QpOgorICAgICAgICAqIHdhc20vV2FzbU9w
Y29kZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206Om9wZXJhdG9yfCk6CisgICAgICAg
IChKU0M6Oldhc206Om9wZXJhdG9yJik6CisgICAgICAgIChKU0M6Oldhc206OkV4cHI6OkV4cHIp
OgorICAgICAgICAoSlNDOjpXYXNtOjpFeHByOjpCYWQpOgorICAgICAgICAoSlNDOjpXYXNtOjpF
eHByOjppc19iYWQpOgorICAgICAgICAoSlNDOjpXYXNtOjpFeHByOjp0eXBlKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6RXhwcjo6aTMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcjo6ZjMyKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcjo6ZjY0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RXhw
cjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6Oldhc206OkV4cHI6Om9wZXJhdG9yIT0pOgor
ICAgICAgICAoSlNDOjpXYXNtOjpQYWNrT3BXaXRoSW1tKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
VW5wYWNrT3BXaXRoSW1tKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcldpdGhJbW06OkV4cHJX
aXRoSW1tKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcldpdGhJbW06OmlzX2JhZCk6CisgICAg
ICAgIChKU0M6Oldhc206OkV4cHJXaXRoSW1tOjp0eXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
RXhwcldpdGhJbW06OmkzMik6CisgICAgICAgIChKU0M6Oldhc206OkV4cHJXaXRoSW1tOjpmMzIp
OgorICAgICAgICAoSlNDOjpXYXNtOjpFeHByV2l0aEltbTo6ZjY0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6U2lnbmF0dXJlOjpTaWduYXR1cmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpTaWduYXR1
cmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpXYXNtOjpTaWduYXR1cmU6Om9wZXJhdG9y
IT0pOgorICAgICAgICAoSlNDOjpXYXNtOjpTaWduYXR1cmU6Okhhc2g6Om9wZXJhdG9yKCkpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpJbjo6SW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpJbjo6c3Rt
dCk6CisgICAgICAgIChKU0M6Oldhc206OkluOjpzd2l0Y2hDYXNlKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6SW46OnZvaWRFeHByKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW46OmV4cG9ydEZvcm1h
dCk6CisgICAgICAgIChKU0M6Oldhc206OkluOjp0eXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
SW46OnJ0eXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW46OnNpbmdsZUNoYXIpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpJbjo6dTgpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbjo6Zml4ZWRXaWR0
aDx1aW50MzJfdD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpJbjo6Zml4ZWRXaWR0aDxmbG9hdD4p
OgorICAgICAgICAoSlNDOjpXYXNtOjpJbjo6Zml4ZWRXaWR0aDxkb3VibGU+KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6SW46OmNvZGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbjo6aW1tVTMyKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6SW46OmltbVMzMik6CisgICAgICAgIChKU0M6Oldhc206Oklu
OjppZkkzMkxpdCk6CisKIDIwMTUtMDYtMjAgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBn
bWFpbC5jb20+CiAKICAgICAgICAgW0VTNl0gRGVzdHJ1Y3R1cmluZyBhc3NpZ25tZW50IG5lZWQg
dG8gYWNjZXB0IGl0ZXJhYmxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwZmNi
MDkyZTc3MWRlYWE1OTVmNTRiYzM2YzNkYTgzYjBmODAwNzk2Li5hYmE5OTNjYTM4NjM5NWUyNDli
Nzg4OTMwMDdhOWQ3NGYwMzg3MzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MTAxNiw2ICsxMDE2LDkgQEAKIAkJNzBFQ0E2MDcxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRl
UmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzBFQ0E2MDIxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuY3BwICovOyB9
OwogCQk3MEVDQTYwODFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MDMxQUZEQkVB
MjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MEVDQTYwOTFBRkRCRUEyMDA0NDk3MzkgLyogVGVt
cGxhdGVSZWdpc3RyeUtleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXku
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3QjU0
NUU1MDFCNDYwNUM3MDAyOTM5MEUgLyogV2FzbUpJVENvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCNTQ1RTREMUI0NjA1QzMwMDI5Mzkw
RSAvKiBXYXNtSklUQ29tcGlsZXIuY3BwICovOyB9OworCQk3QjU0NUU1MTFCNDYwNUQzMDAyOTM5
MEUgLyogV2FzbUpJVENvbXBpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3QjU0NUU0RTFCNDYwNUMzMDAyOTM5MEUgLyogV2FzbUpJVENvbXBpbGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0I1
NDVFNTIxQjQ2MDVEODAwMjkzOTBFIC8qIFdhc21PcGNvZGVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjU0NUU0RjFCNDYwNUMzMDAyOTM5MEUgLyog
V2FzbU9wY29kZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3QzAwOENEMjE4NkY4QTkzMDA5NTVDMjQgLyogSlNQcm9taXNlRnVuY3Rpb25zLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDA4Q0Qw
MTg2RjhBOTMwMDk1NUMyNCAvKiBKU1Byb21pc2VGdW5jdGlvbnMuY3BwICovOyB9OwogCQk3QzAw
OENEMzE4NkY4QTkzMDA5NTVDMjQgLyogSlNQcm9taXNlRnVuY3Rpb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzAwOENEMTE4NkY4QTkzMDA5NTVD
MjQgLyogSlNQcm9taXNlRnVuY3Rpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MwMDhDREExODcxMjRCQjAwOTU1QzI0IC8qIEpTUHJvbWlz
ZURlZmVycmVkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDMDA4Q0Q4MTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5jcHAgKi87
IH07CkBAIC0yNzU4LDYgKzI3NjEsOSBAQAogCQk3MEVDQTYwMjFBRkRCRUEyMDA0NDk3MzkgLyog
VGVtcGxhdGVSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBUZW1wbGF0ZVJlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzBF
Q0E2MDMxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MEVDQTYwNDFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3Ry
eUtleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZW1wbGF0ZVJlZ2lzdHJ5
S2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCNTQ1RTREMUI0NjA1QzMwMDI5
MzkwRSAvKiBXYXNtSklUQ29tcGlsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2FzbUpJVENvbXBpbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJN0I1NDVFNEUxQjQ2MDVDMzAwMjkzOTBFIC8qIFdhc21KSVRDb21waWxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtSklUQ29tcGlsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJN0I1NDVFNEYxQjQ2MDVDMzAwMjkzOTBFIC8qIFdhc21PcGNvZGVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21PcGNvZGVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMDA4Q0QwMTg2RjhBOTMwMDk1NUMyNCAvKiBKU1By
b21pc2VGdW5jdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBsaW5lRW5k
aW5nID0gMDsgcGF0aCA9IEpTUHJvbWlzZUZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0aW9uSWRlbnRpZmllciA9IHhjb2RlLmxhbmcuY3Bw
OyB9OwogCQk3QzAwOENEMTE4NkY4QTkzMDA5NTVDMjQgLyogSlNQcm9taXNlRnVuY3Rpb25zLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUHJvbWlzZUZ1bmN0aW9ucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzAwOENEODE4NzEyNEJCMDA5NTVDMjQgLyog
SlNQcm9taXNlRGVmZXJyZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNQcm9taXNlRGVmZXJyZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MzYxNyw2ICszNjIzLDcgQEAKIAkJCQk3RUY2RTBCQjBFQjdBMUVDMDA3OUFGQUYgLyogcnVudGlt
ZSAqLywKIAkJCQkxNDEyMTEwMDBBNDg3NzI2MDA0ODAyNTUgLyogdGVzdHMgKi8sCiAJCQkJODYw
M0NFRjAxNEM3NTNFRjAwQUU1OUUzIC8qIHRvb2xzICovLAorCQkJCTdCNTQ1RTRDMUI0NjA1QTMw
MDI5MzkwRSAvKiB3YXNtICovLAogCQkJCTg2RUFDNDhDMEY5M0U4QjkwMDhFQzk0OCAvKiB5YXJy
ICovLAogCQkJKTsKIAkJCW5hbWUgPSBKYXZhU2NyaXB0Q29yZTsKQEAgLTQyODAsNiArNDI4Nywx
NiBAQAogCQkJcGF0aCA9IGRpc2Fzc2VtYmxlci9BUk12NzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CiAJCX07CisJCTdCNTQ1RTRDMUI0NjA1QTMwMDI5MzkwRSAvKiB3YXNtICovID0gewor
CQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3QjU0NUU0RDFCNDYwNUMz
MDAyOTM5MEUgLyogV2FzbUpJVENvbXBpbGVyLmNwcCAqLywKKwkJCQk3QjU0NUU0RTFCNDYwNUMz
MDAyOTM5MEUgLyogV2FzbUpJVENvbXBpbGVyLmggKi8sCisJCQkJN0I1NDVFNEYxQjQ2MDVDMzAw
MjkzOTBFIC8qIFdhc21PcGNvZGVzLmggKi8sCisJCQkpOworCQkJcGF0aCA9IHdhc207CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk3RTM5RDgxRDBFQzM4RUZBMDAzQUYxMUEg
LyogYnl0ZWNvbXBpbGVyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKQEAgLTYwNDMsNiArNjA2MCw3IEBACiAJCQkJQkMxOEM0MEYwRTE2RjVDRDAwQjM0NDYwIC8q
IElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RkQwMDc2MTg5QjAzOEMwMDYzMzIz
MSAvKiBJZGVudGlmaWVyc0ZhY3RvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NjIzMUU5MThE
MTgwNDIwMEMwM0ZEQSAvKiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMgaW4gSGVhZGVycyAq
LywKKwkJCQk3QjU0NUU1MjFCNDYwNUQ4MDAyOTM5MEUgLyogV2FzbU9wY29kZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUMyNUY4QkNFMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVw
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk5MTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRl
eGluZ0hlYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUExNUVEOEU0NjAwRjE2N0Iy
IC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTQ1LDYgKzYx
NjMsNyBAQAogCQkJCTg2RTNDNjEzMTY3QkFCRDcwMDZENzYwQSAvKiBKU0NvbnRleHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2RTNDNjE3MTY3QkFCRUUwMDZENzYwQSAvKiBKU0NvbnRleHRJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MUUwRTE2RjVDRDAwQjM0NDYwIC8qIEpT
Q29udGV4dFJlZi5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0I1NDVFNTExQjQ2MDVEMzAwMjkzOTBF
IC8qIFdhc21KSVRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4Q0QxRDgxMDhDRjkw
MjAwODE2M0M2IC8qIEpTQ29udGV4dFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
MjAyOEI4MTc5NzYwMUUwMDk4MDI4QyAvKiBKU0NUZXN0UnVubmVyVXRpbHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNzU3NkQzMThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHVi
Um91dGluZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03MTY3LDYgKzcxODYsNyBAQAogCQkJCTBGRjBG
MTlDMTZCNzJBMDMwMDVERjk1QiAvKiBERkdOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
QTU4MUJBMTUwRTk1MkMwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODZFQzlEQ0YxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJN0I1NDVFNTAxQjQ2MDVDNzAwMjkzOTBFIC8qIFdhc21KSVRDb21waWxl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGRDE3QTBCOENDMDA3NzNBRDggLyogREZH
T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4
MkU1NjE0MURBRjA4MDAxNzlDOTQgLyogREZHT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZEOEEzMjUxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBo
YXNlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCA5MTI3MjUxYjlm
NDlmMGQ3ZDJjNDYwNzYxMWE1NjMwMWQ0MmNkOWZiLi5kMWM0Yjc1NGU0NmM5OTQxNjQ2YmRiODlk
YjVlOGQyZjI5ZDNmOGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtNDksNiArNDksNyBAQAog
I2luY2x1ZGUgIlN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIgogI2luY2x1ZGUgIlRlc3RSdW5u
ZXJVdGlscy5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgorI2luY2x1ZGUgIldhc21K
SVRDb21waWxlci5oIgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2lu
Y2x1ZGUgPHN0ZGxpYi5oPgpAQCAtNDkwLDYgKzQ5MSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmV0dXJuVHlwZUZvcihFeGVjU3RhdGUqKTsKIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRHVtcEJhc2ljQmxvY2tFeGVj
dXRpb25SYW5nZXMoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkhhc0Jhc2ljQmxvY2tFeGVjdXRlZChFeGVjU3RhdGUqKTsKIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRW5hYmxlRXhjZXB0aW9uRnV6eihF
eGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
TG9hZFdlYkFzc2VtYmx5KEV4ZWNTdGF0ZSopOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdT
KQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRTYW1wbGlu
Z0ZsYWdzKEV4ZWNTdGF0ZSopOwpAQCAtNjUxLDYgKzY1Myw4IEBAIHByb3RlY3RlZDoKICAgICAg
ICAgYWRkRnVuY3Rpb24odm0sICJoYXNCYXNpY0Jsb2NrRXhlY3V0ZWQiLCBmdW5jdGlvbkhhc0Jh
c2ljQmxvY2tFeGVjdXRlZCwgMik7CiAKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJlbmFibGVF
eGNlcHRpb25GdXp6IiwgZnVuY3Rpb25FbmFibGVFeGNlcHRpb25GdXp6LCAwKTsKKworICAgICAg
ICBhZGRGdW5jdGlvbih2bSwgImxvYWRXZWJBc3NlbWJseSIsIGZ1bmN0aW9uTG9hZFdlYkFzc2Vt
Ymx5LCAxKTsKICAgICAgICAgCiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1w
dHlBcnJheShnbG9iYWxFeGVjKCksIDApOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGFyZ3VtZW50cy5zaXplKCk7ICsraSkKQEAgLTExNjUsNiArMTE2OSwxNiBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRW5hYmxlRXhjZXB0aW9uRnV6eihFeGVjU3RhdGUq
KQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2FkV2ViQXNzZW1ibHkoRXhlY1N0YXRl
KiBleGVjKQoreworICAgIFN0cmluZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOworICAgIGlm
ICghZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShmaWxlTmFtZSwgYnVmZmVyKSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMs
IGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQ291bGQgbm90IG9wZW4gZmlsZS4iKSkp
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IFdhc206OmNvbXBpbGVBbmRSdW4oZXhlYywgYnVmZmVy
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKIC8vIFVzZSBTRUgg
Zm9yIFJlbGVhc2UgYnVpbGRzIG9ubHkgdG8gZ2V0IHJpZCBvZiB0aGUgY3Jhc2ggcmVwb3J0IGRp
YWxvZwogLy8gKGx1Y2tpbHkgdGhlIHNhbWUgdGVzdHMgZmFpbCBpbiBSZWxlYXNlIGFuZCBEZWJ1
ZyBidWlsZHMgc28gZmFyKS4gTmVlZCB0bwogLy8gYmUgaW4gYSBzZXBhcmF0ZSBtYWluIGZ1bmN0
aW9uIGJlY2F1c2UgdGhlIGpzY21haW4gZnVuY3Rpb24gcmVxdWlyZXMgb2JqZWN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSklUQ29tcGlsZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUpJVENvbXBpbGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
MGZmZDRmNzQ4YjUwYjk3Njc0OWJjZDBkMTNhYTc2OGIwYTk0NTllCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUpJVENvbXBpbGVyLmNwcApAQCAtMCww
ICsxLDg3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8qCisgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhl
ICJMaWNlbnNlIik7CisgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGlj
ZW5zZSBhdAorIAorIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAor
IAorIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3Jp
dGluZywgc29mdHdhcmUKKyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmli
dXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJ
T05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIFNlZSB0aGUgTGlj
ZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQK
KyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXYXNtSklUQ29tcGlsZXIuaCIKKworI2luY2x1ZGUgIkpJVENvZGUuaCIK
KyNpbmNsdWRlICJKU0NhbGxlZS5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRl
ICJQcm90b0NhbGxGcmFtZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdhc20g
eworCitjbGFzcyBKdW1wU2NvcGUgeworcHVibGljOgorICAgIEp1bXBTY29wZShNYWNyb0Fzc2Vt
YmxlciogbWFjcm9Bc3NlbWJsZXIpCisgICAgICAgIDogbV9tYWNyb0Fzc2VtYmxlcihtYWNyb0Fz
c2VtYmxlcikKKyAgICAgICAgLCBtX2xpbmtlZChmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAg
SnVtcFNjb3BlKE1hY3JvQXNzZW1ibGVyKiBtYWNyb0Fzc2VtYmxlciwgY29uc3QgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsJiBsYWJlbCkKKyAgICAgICAgOiBtX21hY3JvQXNzZW1ibGVyKG1hY3JvQXNz
ZW1ibGVyKQorICAgICAgICAsIG1fbGlua2VkKHRydWUpCisgICAgICAgICwgbV9sYWJlbChsYWJl
bCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBqdW1wKCkKKyAgICB7CisgICAgICAgIGlmICht
X2xpbmtlZCkKKyAgICAgICAgICAgIG1fbWFjcm9Bc3NlbWJsZXItPmp1bXAobV9sYWJlbCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fanVtcExpc3QuYXBwZW5kKG1fbWFjcm9Bc3NlbWJs
ZXItPmp1bXAoKSk7CisgICAgfQorCisgICAgdm9pZCBsaW5rKCkKKyAgICB7CisgICAgICAgIEFT
U0VSVCghbV9saW5rZWQpOworICAgICAgICBtX2p1bXBMaXN0LmxpbmsobV9tYWNyb0Fzc2VtYmxl
cik7CisgICAgfQorCitwcml2YXRlOgorICAgIE1hY3JvQXNzZW1ibGVyKiBtX21hY3JvQXNzZW1i
bGVyOworICAgIGJvb2wgbV9saW5rZWQ7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fbGFi
ZWw7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1fanVtcExpc3Q7Cit9OworCitKU1Zh
bHVlIEpJVENvbXBpbGVyOjpjb21waWxlQW5kUnVuKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVmVj
dG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBSZWZQ
dHI8SklUQ29kZT4gaml0Q29kZSA9IGNvbXBpbGUodm0sIGJ1ZmZlcik7CisKKyAgICBQcm90b0Nh
bGxGcmFtZSBwcm90b0NhbGxGcmFtZTsKKyAgICBwcm90b0NhbGxGcmFtZS5pbml0KDAsIEpTQ2Fs
bGVlOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKSwganNVbmRlZmluZWQoKSwgMSk7CisKKyAgICByZXR1cm4gaml0Q29k
ZS0+ZXhlY3V0ZSgmdm0sICZwcm90b0NhbGxGcmFtZSk7Cit9CisKK1JlZlB0cjxKSVRDb2RlPiBK
SVRDb21waWxlcjo6Y29tcGlsZShWTSYgdm0sIGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyKQor
eworICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CisKKyAgICBtX3JlYWQgPSBJbihyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXIuZGF0YSgpKSk7CisgICAgdW5wYWNrKCk7
CisKKyAgICBib3hJbnQ1MihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIEdQUkluZm86OnJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICBlbWl0RnVu
Y3Rpb25FcGlsb2d1ZSgpOworICAgIHJldCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cih2bSwgKnRoaXMsIDAsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOworICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciB3aXRoQXJpdHlDaGVjazsKKyAgICBDb2RlUmVmIHJlc3VsdCA9IEZJTkFM
SVpFX0NPREUocGF0Y2hCdWZmZXIsICgiQmFzZWxpbmUgSklUIGNvZGUgZm9yIFdlYkFzc2VtYmx5
IikpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhB
cml0eUNoZWNrLCBKSVRDb2RlOjpCYXNlbGluZUpJVCkpOworfQorCit2b2lkIEpJVENvbXBpbGVy
Ojp1bnBhY2soKQoreworICAgIGlmIChtX3JlYWQuZml4ZWRXaWR0aDx1aW50MzJfdD4oKSAhPSBN
YWdpY051bWJlcikKKyAgICAgICAgYWJvcnQoKTsKKyAgICBtX3JlYWQuZml4ZWRXaWR0aDx1aW50
MzJfdD4oKTsgLy8gb3V0cHV0IHNpemUgaW4gYXNtLmpzIGZvcm1hdAorCisgICAgcmVhZENvbnN0
YW50UG9vbFNlY3Rpb24oKTsKKyAgICByZWFkU2lnbmF0dXJlU2VjdGlvbigpOworICAgIHJlYWRG
dW5jdGlvbkltcG9ydFNlY3Rpb24oKTsKKyAgICByZWFkR2xvYmFsU2VjdGlvbigpOworICAgIHJl
YWRGdW5jdGlvbkRlY2xhcmF0aW9uU2VjdGlvbigpOworICAgIHJlYWRGdW5jdGlvblBvaW50ZXJU
YWJsZXMoKTsKKyAgICByZWFkRnVuY3Rpb25EZWZpbml0aW9uU2VjdGlvbigpOworICAgIHJlYWRF
eHBvcnRTZWN0aW9uKCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnJlYWRDb25zdGFudFBvb2xT
ZWN0aW9uKCkKK3sKKyAgICB1aW50MzJfdCBudW1JMzJzID0gbV9yZWFkLmltbVUzMigpOworICAg
IHVpbnQzMl90IG51bUYzMnMgPSBtX3JlYWQuaW1tVTMyKCk7CisgICAgdWludDMyX3QgbnVtRjY0
cyA9IG1fcmVhZC5pbW1VMzIoKTsKKworICAgIFZlY3Rvcjx1aW50MzJfdD4gaTMycyhudW1JMzJz
KTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtSTMyczsgaSsrKQorICAgICAgICBp
MzJzW2ldID0gbV9yZWFkLmltbVUzMigpOworCisgICAgVmVjdG9yPGZsb2F0PiBmMzJzKG51bUYz
MnMpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1GMzJzOyBpKyspCisgICAgICAg
IGYzMnNbaV0gPSBtX3JlYWQuZml4ZWRXaWR0aDxmbG9hdD4oKTsKKworICAgIFZlY3Rvcjxkb3Vi
bGU+IGY2NHMobnVtRjY0cyk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bUY2NHM7
IGkrKykKKyAgICAgICAgZjY0c1tpXSA9IG1fcmVhZC5maXhlZFdpZHRoPGRvdWJsZT4oKTsKKwor
ICAgIG1faTMycyA9IFdURjo6bW92ZShpMzJzKTsKKyAgICBtX2YzMnMgPSBXVEY6Om1vdmUoZjMy
cyk7CisgICAgbV9mNjRzID0gV1RGOjptb3ZlKGY2NHMpOworfQorCit2b2lkIEpJVENvbXBpbGVy
OjpyZWFkU2lnbmF0dXJlU2VjdGlvbigpCit7CisgICAgdWludDMyX3QgbnVtU2lnbmF0dXJlcyA9
IG1fcmVhZC5pbW1VMzIoKTsKKyAgICBWZWN0b3I8U2lnbmF0dXJlPiBzaWduYXR1cmVzKG51bVNp
Z25hdHVyZXMpOworICAgIGZvciAodWludDMyX3Qgc2lnbmF0dXJlSW5kZXggPSAwOyBzaWduYXR1
cmVJbmRleCA8IG51bVNpZ25hdHVyZXM7IHNpZ25hdHVyZUluZGV4KyspIHsKKyAgICAgICAgUlR5
cGUgcmV0ID0gbV9yZWFkLnJ0eXBlKCk7CisgICAgICAgIHVpbnQzMl90IG51bUFyZ3MgPSBtX3Jl
YWQuaW1tVTMyKCk7CisgICAgICAgIFNpZ25hdHVyZSBzaWduYXR1cmUocmV0LCBudW1BcmdzKTsK
KyAgICAgICAgZm9yICh1aW50MzJfdCBhcmd1bWVudEluZGV4ID0gMDsgYXJndW1lbnRJbmRleCA8
IG51bUFyZ3M7IGFyZ3VtZW50SW5kZXgrKykKKyAgICAgICAgICAgIHNpZ25hdHVyZS5hcmdzW2Fy
Z3VtZW50SW5kZXhdID0gbV9yZWFkLnR5cGUoKTsKKyAgICAgICAgc2lnbmF0dXJlc1tzaWduYXR1
cmVJbmRleF0gPSBXVEY6Om1vdmUoc2lnbmF0dXJlKTsKKyAgICB9CisKKyAgICBtX3NpZ25hdHVy
ZXMgPSBXVEY6Om1vdmUoc2lnbmF0dXJlcyk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnJlYWRG
dW5jdGlvbkltcG9ydFNlY3Rpb24oKQoreworICAgIHVpbnQzMl90IG51bUZ1bmNJbXBzID0gbV9y
ZWFkLmltbVUzMigpOworICAgIHVpbnQzMl90IG51bUZ1bmNJbXBvcnRTaWduYXR1cmVzID0gbV9y
ZWFkLmltbVUzMigpOworCisgICAgVmVjdG9yPEZ1bmNJbXBvcnRTaWduYXR1cmU+IGZ1bmNJbXBv
cnRTaWduYXR1cmVzKG51bUZ1bmNJbXBvcnRTaWduYXR1cmVzKTsKKyAgICBGdW5jSW1wb3J0U2ln
bmF0dXJlKiBmdW5jSW1wb3J0U2lnbmF0dXJlID0gZnVuY0ltcG9ydFNpZ25hdHVyZXMuZGF0YSgp
OworICAgIGZvciAodWludDMyX3QgZnVuY19pbXBfaSA9IDA7IGZ1bmNfaW1wX2kgPCBudW1GdW5j
SW1wczsgZnVuY19pbXBfaSsrKSB7CisgICAgICAgIHdoaWxlIChtX3JlYWQuc2luZ2xlQ2hhcigp
KSB7IH0KKworICAgICAgICB1aW50MzJfdCBudW1TaWdzID0gbV9yZWFkLmltbVUzMigpOworICAg
ICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtU2lnczsgaSsrKSB7CisgICAgICAgICAg
ICBmdW5jSW1wb3J0U2lnbmF0dXJlLT5zaWduYXR1cmVJbmRleCA9IG1fcmVhZC5pbW1VMzIoKTsK
KyAgICAgICAgICAgIGZ1bmNJbXBvcnRTaWduYXR1cmUtPmZ1bmNJbXBvcnRJbmRleCA9IGZ1bmNf
aW1wX2k7CisgICAgICAgICAgICBmdW5jSW1wb3J0U2lnbmF0dXJlKys7CisgICAgICAgIH0KKyAg
ICB9CisgICAgYXNzZXJ0KGZ1bmNJbXBvcnRTaWduYXR1cmUgPT0gZnVuY0ltcG9ydFNpZ25hdHVy
ZXMuZGF0YSgpICsgbnVtRnVuY0ltcG9ydFNpZ25hdHVyZXMpOworCisgICAgbV9mdW5jSW1wb3J0
U2lnbmF0dXJlcyA9IFdURjo6bW92ZShmdW5jSW1wb3J0U2lnbmF0dXJlcyk7Cit9CisKK3ZvaWQg
SklUQ29tcGlsZXI6OnJlYWRHbG9iYWxTZWN0aW9uKCkKK3sKKyAgICB1aW50MzJfdCBudW1JMzJa
ZXJvID0gbV9yZWFkLmltbVUzMigpOworICAgIHVpbnQzMl90IG51bUYzMlplcm8gPSBtX3JlYWQu
aW1tVTMyKCk7CisgICAgdWludDMyX3QgbnVtRjY0WmVybyA9IG1fcmVhZC5pbW1VMzIoKTsKKyAg
ICB1aW50MzJfdCBudW1JMzJJbXBvcnQgPSBtX3JlYWQuaW1tVTMyKCk7CisgICAgdWludDMyX3Qg
bnVtRjMySW1wb3J0ID0gbV9yZWFkLmltbVUzMigpOworICAgIHVpbnQzMl90IG51bUY2NEltcG9y
dCA9IG1fcmVhZC5pbW1VMzIoKTsKKworICAgIHVpbnQzMl90IG51bUdsb2JhbFZhcnMgPSBudW1J
MzJaZXJvICsgbnVtRjMyWmVybyArIG51bUY2NFplcm8gKyBudW1JMzJJbXBvcnQgKyBudW1GMzJJ
bXBvcnQgKyBudW1GNjRJbXBvcnQ7CisKKyAgICBWZWN0b3I8VHlwZT4gZ2xvYmFsVHlwZXMobnVt
R2xvYmFsVmFycyk7CisgICAgc2l6ZV90IGdsb2JhbFR5cGVJbmRleCA9IDA7CisgICAgZm9yICh1
aW50MzJfdCBpID0gMDsgaSA8IG51bUkzMlplcm87IGkrKykKKyAgICAgICAgZ2xvYmFsVHlwZXNb
Z2xvYmFsVHlwZUluZGV4KytdID0gVHlwZTo6STMyOworICAgIGZvciAodWludDMyX3QgaSA9IDA7
IGkgPCBudW1GMzJaZXJvOyBpKyspCisgICAgICAgIGdsb2JhbFR5cGVzW2dsb2JhbFR5cGVJbmRl
eCsrXSA9IFR5cGU6OkYzMjsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtRjY0WmVy
bzsgaSsrKQorICAgICAgICBnbG9iYWxUeXBlc1tnbG9iYWxUeXBlSW5kZXgrK10gPSBUeXBlOjpG
NjQ7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bUkzMkltcG9ydDsgaSsrKSB7Cisg
ICAgICAgIHdoaWxlIChtX3JlYWQuc2luZ2xlQ2hhcigpKSB7IH0KKyAgICAgICAgZ2xvYmFsVHlw
ZXNbZ2xvYmFsVHlwZUluZGV4KytdID0gVHlwZTo6STMyOworICAgIH0KKyAgICBmb3IgKHVpbnQz
Ml90IGkgPSAwOyBpIDwgbnVtRjMySW1wb3J0OyBpKyspIHsKKyAgICAgICAgd2hpbGUgKG1fcmVh
ZC5zaW5nbGVDaGFyKCkpIHsgfQorICAgICAgICBnbG9iYWxUeXBlc1tnbG9iYWxUeXBlSW5kZXgr
K10gPSBUeXBlOjpGMzI7CisgICAgfQorICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1G
NjRJbXBvcnQ7IGkrKykgeworICAgICAgICB3aGlsZSAobV9yZWFkLnNpbmdsZUNoYXIoKSkgeyB9
CisgICAgICAgIGdsb2JhbFR5cGVzW2dsb2JhbFR5cGVJbmRleCsrXSA9IFR5cGU6OkY2NDsKKyAg
ICB9CisgICAgbV9nbG9iYWxUeXBlcyA9IFdURjo6bW92ZShnbG9iYWxUeXBlcyk7Cit9CisKK3Zv
aWQgSklUQ29tcGlsZXI6OnJlYWRGdW5jdGlvbkRlY2xhcmF0aW9uU2VjdGlvbigpCit7CisgICAg
dWludDMyX3QgbnVtRnVuY3MgPSBtX3JlYWQuaW1tVTMyKCk7CisgICAgVmVjdG9yPHVpbnQzMl90
PiBmdW5jU2lncyhudW1GdW5jcyk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSAhPSBudW1G
dW5jczsgaSsrKQorICAgICAgICBmdW5jU2lnc1tpXSA9IG1fcmVhZC5pbW1VMzIoKTsKKworICAg
IG1fZnVuY1NpZ3MgPSBXVEY6Om1vdmUoZnVuY1NpZ3MpOworfQorCit2b2lkIEpJVENvbXBpbGVy
OjpyZWFkRnVuY3Rpb25Qb2ludGVyVGFibGVzKCkKK3sKKyAgICB1aW50MzJfdCBudW1GdW5jUHRy
VGFibGVzID0gbV9yZWFkLmltbVUzMigpOworICAgIFZlY3RvcjxGdW5jUHRyVGFibGU+IGZ1bmNQ
dHJUYWJsZXMobnVtRnVuY1B0clRhYmxlcyk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSAh
PSBudW1GdW5jUHRyVGFibGVzOyBpKyspIHsKKyAgICAgICAgZnVuY1B0clRhYmxlc1tpXS5zaWdu
YXR1cmVJbmRleCA9IG1fcmVhZC5pbW1VMzIoKTsKKyAgICAgICAgdWludDMyX3QgbnVtRWxlbWVu
dHMgPSBtX3JlYWQuaW1tVTMyKCk7CisgICAgICAgIFZlY3Rvcjx1aW50MzJfdD4gZWxlbWVudHMo
bnVtRWxlbWVudHMpOworICAgICAgICBmb3IgKHVpbnQzMl90IGogPSAwOyBqICE9IG51bUVsZW1l
bnRzOyBqKyspCisgICAgICAgICAgICBlbGVtZW50c1tqXSA9IG1fcmVhZC5pbW1VMzIoKTsKKyAg
ICAgICAgZnVuY1B0clRhYmxlc1tpXS5lbGVtZW50cyA9IFdURjo6bW92ZShlbGVtZW50cyk7Cisg
ICAgfQorCisgICAgbV9mdW5jUHRyVGFibGVzID0gV1RGOjptb3ZlKGZ1bmNQdHJUYWJsZXMpOwor
fQorCit2b2lkIEpJVENvbXBpbGVyOjpyZWFkRnVuY3Rpb25EZWZpbml0aW9uU2VjdGlvbigpCit7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Z1bmNTaWdzLnNpemUoKTsgaSsrKQorICAg
ICAgICByZWFkRnVuY3Rpb25EZWZpbml0aW9uKGkpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpy
ZWFkRXhwb3J0U2VjdGlvbigpCit7CisgICAgc3dpdGNoIChtX3JlYWQuZXhwb3J0Rm9ybWF0KCkp
IHsKKyAgICBjYXNlIEV4cG9ydEZvcm1hdDo6RGVmYXVsdDoKKyAgICAgICAgbV9yZWFkLmltbVUz
MigpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4cG9ydEZvcm1hdDo6UmVjb3JkOgorICAg
ICAgICBpZiAodWludDMyX3QgbnVtRXhwb3J0cyA9IG1fcmVhZC5pbW1VMzIoKSkgeworICAgICAg
ICAgICAgZm9yICh1aW50MzJfdCBleHBvcnRJbmRleCA9IDA7IGV4cG9ydEluZGV4IDwgbnVtRXhw
b3J0czsgZXhwb3J0SW5kZXgrKykgeworICAgICAgICAgICAgICAgIHdoaWxlIChtX3JlYWQuc2lu
Z2xlQ2hhcigpKSB7IH0KKyAgICAgICAgICAgICAgICBtX3JlYWQuaW1tVTMyKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUQ29tcGls
ZXI6OnJlYWRGdW5jdGlvbkRlZmluaXRpb24oc2l6ZV90IGZ1bmNJbmRleCkKK3sKKyAgICBjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IG1fc2lnbmF0dXJlc1ttX2Z1bmNTaWdzW2Z1bmNJbmRl
eF1dOworICAgIG1fY3VycmVudFJldHVyblR5cGUgPSBzaWduYXR1cmUucmV0OworICAgIG1fY3Vy
cmVudExvY2FsVHlwZXMuY2xlYXIoKTsKKyAgICByZWFkQXJncyhzaWduYXR1cmUpOworICAgIHJl
YWRWYXJzKCk7CisgICAgc3RtdF9saXN0KDApOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpyZWFk
QXJncyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkKK3sKKyAgICBzaXplX3QgbnVtQXJncyA9
IHNpZ25hdHVyZS5hcmdzLnNpemUoKTsKKyAgICBmb3IgKHVpbnQzMl90IGFyZ0luZGV4ID0gMDsg
YXJnSW5kZXggPCBudW1BcmdzOyBhcmdJbmRleCsrKSB7CisgICAgICAgIFR5cGUgdHlwZSA9IHNp
Z25hdHVyZS5hcmdzW2FyZ0luZGV4XTsKKyAgICAgICAgbV9jdXJyZW50TG9jYWxUeXBlcy5hcHBl
bmQodHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFR5cGU6Okkz
MjoKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEpJVENvbXBp
bGVyOjpyZWFkVmFycygpCit7CisgICAgdWludDMyX3QgbnVtSTMyVmFycyA9IDA7CisgICAgdWlu
dDMyX3QgbnVtRjMyVmFycyA9IDA7CisgICAgdWludDMyX3QgbnVtRjY0VmFycyA9IDA7CisKKyAg
ICBWYXJUeXBlcyB2YXJUeXBlczsKKyAgICBWYXJUeXBlc1dpdGhJbW0gdmFyVHlwZXNXaXRoSW1t
OworICAgIHVpbnQ4X3QgaW1tOworICAgIGlmIChtX3JlYWQuY29kZSgmdmFyVHlwZXMsICZ2YXJU
eXBlc1dpdGhJbW0sICZpbW0pKSB7CisgICAgICAgIGlmICh2YXJUeXBlcyAmIFZhclR5cGVzOjpJ
MzIpCisgICAgICAgICAgICBudW1JMzJWYXJzID0gbV9yZWFkLmltbVUzMigpOworICAgICAgICBp
ZiAodmFyVHlwZXMgJiBWYXJUeXBlczo6RjMyKQorICAgICAgICAgICAgbnVtRjMyVmFycyA9IG1f
cmVhZC5pbW1VMzIoKTsKKyAgICAgICAgaWYgKHZhclR5cGVzICYgVmFyVHlwZXM6OkY2NCkKKyAg
ICAgICAgICAgIG51bUY2NFZhcnMgPSBtX3JlYWQuaW1tVTMyKCk7CisgICAgfSBlbHNlCisgICAg
ICAgIG51bUkzMlZhcnMgPSBpbW07CisKKyAgICB1aW50MzJfdCBudW1WYXJzID0gbnVtSTMyVmFy
cyArIG51bUYzMlZhcnMgKyBudW1GNjRWYXJzOworICAgIGlmIChudW1WYXJzID4gMCkgeworICAg
ICAgICB1aW50MzJfdCBsb2NhbEluZGV4ID0gbV9jdXJyZW50TG9jYWxUeXBlcy5zaXplKCk7Cisg
ICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1JMzJWYXJzOyBpKyspIHsKKyAgICAg
ICAgICAgIG1fY3VycmVudExvY2FsVHlwZXMuYXBwZW5kKFR5cGU6OkkzMik7CisgICAgICAgICAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgc3RhY2tBZGRyZXNzKGxvY2FsSW5kZXgrKykpOwor
ICAgICAgICB9CisgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1GMzJWYXJzOyBp
KyspIHsKKyAgICAgICAgICAgIG1fY3VycmVudExvY2FsVHlwZXMuYXBwZW5kKFR5cGU6OkYzMik7
CisgICAgICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgc3RhY2tBZGRyZXNzKGxvY2Fs
SW5kZXgrKykpOyAvLyBGSVhNRTogZmxvYXQ/CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1aW50
MzJfdCBpID0gMDsgaSA8IG51bUY2NFZhcnM7IGkrKykgeworICAgICAgICAgICAgbV9jdXJyZW50
TG9jYWxUeXBlcy5hcHBlbmQoVHlwZTo6RjY0KTsKKyAgICAgICAgICAgIHN0b3JlNjQoVHJ1c3Rl
ZEltbTY0KDApLCBzdGFja0FkZHJlc3MobG9jYWxJbmRleCsrKSk7IC8vIEZJWE1FOiBmbG9hdD8K
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBKSVRDb21waWxlcjo6c3RtdChpbnQgZHN0KQor
eworICAgIFN0bXQgc3RtdDsKKyAgICBTdG10V2l0aEltbSBzdG10V2l0aEltbTsKKyAgICB1aW50
OF90IGltbTsKKyAgICBpZiAobV9yZWFkLmNvZGUoJnN0bXQsICZzdG10V2l0aEltbSwgJmltbSkp
IHsKKyAgICAgICAgc3dpdGNoIChzdG10KSB7CisgICAgICAgIGNhc2UgU3RtdDo6U2V0TG9jOgor
ICAgICAgICAgICAgc2V0X2xvY2FsKGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBTdG10OjpTZXRHbG86CisgICAgICAgIGNhc2UgU3RtdDo6STMyU3RvcmU4OgorICAgICAg
ICBjYXNlIFN0bXQ6OkkzMlN0b3JlT2ZmODoKKyAgICAgICAgY2FzZSBTdG10OjpJMzJTdG9yZTE2
OgorICAgICAgICBjYXNlIFN0bXQ6OkkzMlN0b3JlT2ZmMTY6CisgICAgICAgIGNhc2UgU3RtdDo6
STMyU3RvcmUzMjoKKyAgICAgICAgY2FzZSBTdG10OjpJMzJTdG9yZU9mZjMyOgorICAgICAgICBj
YXNlIFN0bXQ6OkYzMlN0b3JlOgorICAgICAgICBjYXNlIFN0bXQ6OkYzMlN0b3JlT2ZmOgorICAg
ICAgICBjYXNlIFN0bXQ6OkY2NFN0b3JlOgorICAgICAgICBjYXNlIFN0bXQ6OkY2NFN0b3JlT2Zm
OgorICAgICAgICBjYXNlIFN0bXQ6OkNhbGxJbnQ6CisgICAgICAgIGNhc2UgU3RtdDo6Q2FsbElu
ZDoKKyAgICAgICAgY2FzZSBTdG10OjpDYWxsSW1wOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBTdG10OjpSZXQ6CisgICAgICAgICAgICBy
ZXR1cm5fc3RtdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6OkJs
b2NrOgorICAgICAgICAgICAgYmxvY2tfc3RtdChkc3QpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBjYXNlIFN0bXQ6OklmVGhlbjoKKyAgICAgICAgICAgIGlmX3N0bXQoZHN0KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdG10OjpJZkVsc2U6CisgICAgICAgICAg
ICBpZl9lbHNlX3N0bXQoZHN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBT
dG10OjpXaGlsZToKKyAgICAgICAgICAgIHdoaWxlX3N0bXQoZHN0KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgY2FzZSBTdG10OjpEbzoKKyAgICAgICAgICAgIGRvX3N0bXQoZHN0KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdG10OjpMYWJlbDoKKyAgICAgICAg
ICAgIGxhYmVsX3N0bXQoZHN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBT
dG10OjpCcmVhazoKKyAgICAgICAgICAgIHRvcEJyZWFrSnVtcExpc3QoKS0+YXBwZW5kKGp1bXAo
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU3RtdDo6QnJlYWtMYWJlbDoK
KyAgICAgICAgICAgIGJyZWFrX2xhYmVsX3N0bXQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgY2FzZSBTdG10OjpDb250aW51ZToKKyAgICAgICAgICAgIHRvcENvbnRpbnVlSnVtcFNj
b3BlKCktPmp1bXAoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0bXQ6OkNv
bnRpbnVlTGFiZWw6CisgICAgICAgICAgICBjb250aW51ZV9sYWJlbF9zdG10KCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU3RtdDo6U3dpdGNoOgorICAgICAgICAgICAgc3dp
dGNoX3N0bXQoZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIHN3aXRjaCAoc3RtdFdpdGhJbW0pIHsKKyAgICAgICAgY2FzZSBTdG10
V2l0aEltbTo6U2V0TG9jOgorICAgICAgICAgICAgc2V0X2xvY2FsKGltbSwgZHN0KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0bXRXaXRoSW1tOjpTZXRHbG86CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICB9CisgICAgfQorfQorCit2b2lkIEpJVENvbXBpbGVyOjpnZXRfbG9jYWwoaW50IGRzdCkK
K3sKKyAgICAvLyBGSVhNRTogdHlwZQorICAgIHVpbnQzMl90IGltbSA9IG1fcmVhZC5pbW1VMzIo
KTsKKyAgICBsb2FkMzIoc3RhY2tBZGRyZXNzKGltbSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBz
dG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworfQorCit2b2lk
IEpJVENvbXBpbGVyOjpzZXRfbG9jYWwodWludDMyX3QgaW1tLCBpbnQgZHN0KQoreworICAgIFR5
cGUgdHlwZSA9IG1fY3VycmVudExvY2FsVHlwZXNbaW1tXTsgLy8gRklYTUU6IFNob3VsZCB3ZSBy
ZWNlaXZlIHRoZSBUeXBlIGZyb20gdGhlIHBhcmVudD8KKworICAgIGV4cHIoUlR5cGUodHlwZSks
IGRzdCk7CisKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFR5cGU6OkkzMjogeworICAg
ICAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAg
ICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHN0YWNrQWRkcmVzcyhpbW0pKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGNhc2UgVHlwZTo6RjMyOgorICAgIGNhc2UgVHlwZTo6RjY0Ogor
ICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorfQorCit2b2lkIEpJVENvbXBpbGVyOjpzZXRfbG9jYWwoaW50IGRzdCkKK3sKKyAgICBzZXRf
bG9jYWwobV9yZWFkLmltbVUzMigpLCBkc3QpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpyZXR1
cm5fc3RtdCgpCit7CisgICAgLy8gRklYTUU6IGhhY2t5CisgICAgc3dpdGNoIChtX2N1cnJlbnRS
ZXR1cm5UeXBlKSB7CisgICAgY2FzZSBSVHlwZTo6STMyOgorICAgICAgICBzaWduZWRfZXhwcihT
aWduZWRuZXNzOjpTaWduZWQsIDApOworICAgICAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcygw
KSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJU
eXBlOjpGMzI6CisgICAgICAgIGV4cHIoUlR5cGU6OkYzMiwgMCk7CisgICAgICAgIGxvYWQzMih0
ZW1wb3JhcnlBZGRyZXNzKDApLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUlR5cGU6OkY2NDoKKyAgICAgICAgZXhwcihSVHlwZTo6RjY0LCAwKTsK
KyAgICAgICAgbG9hZDY0KHRlbXBvcmFyeUFkZHJlc3MoMCksIEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSVHlwZTo6Vm9pZDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCit2b2lkIEpJVENvbXBpbGVyOjpzdG10X2xpc3QoaW50IGRzdCkKK3sK
KyAgICB1aW50MzJfdCBudW1TdG10cyA9IG1fcmVhZC5pbW1VMzIoKTsKKyAgICBmb3IgKHVpbnQz
Ml90IGkgPSAwOyBpIDwgbnVtU3RtdHM7IGkrKykKKyAgICAgICAgc3RtdChkc3QpOworfQorCit2
b2lkIEpJVENvbXBpbGVyOjpibG9ja19zdG10KGludCBkc3QpCit7CisgICAgc3RtdF9saXN0KGRz
dCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OmlmX3N0bXQoaW50IGRzdCkKK3sKKyAgICBleHBy
KFJUeXBlOjpJMzIsIGRzdCk7CisgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoZHN0KSwgR1BS
SW5mbzo6cmVnVDApOworICAgIEp1bXAgZW5kID0gYnJhbmNoVGVzdDMyKFplcm8sIEdQUkluZm86
OnJlZ1QwKTsKKyAgICBzdG10KGRzdCk7CisgICAgZW5kLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQg
SklUQ29tcGlsZXI6OmlmX2Vsc2Vfc3RtdChpbnQgZHN0KQoreworICAgIGV4cHIoUlR5cGU6Okkz
MiwgZHN0KTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgSnVtcCBlbHMgPSBicmFuY2hUZXN0MzIoWmVybywgR1BSSW5mbzo6cmVnVDApOwor
ICAgIHN0bXQoZHN0KTsKKyAgICBKdW1wIGVuZCA9IGp1bXAoKTsKKyAgICBlbHMubGluayh0aGlz
KTsKKyAgICBzdG10KGRzdCk7CisgICAgZW5kLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUQ29t
cGlsZXI6OndoaWxlX3N0bXQoaW50IGRzdCkKK3sKKyAgICBKdW1wU2NvcGUgY29udGludWVKdW1w
U2NvcGUodGhpcywgbGFiZWwoKSk7CisgICAgcHVzaENvbnRpbnVlSnVtcFNjb3BlKCZjb250aW51
ZUp1bXBTY29wZSk7CisKKyAgICBKdW1wTGlzdCBicmVha0p1bXBMaXN0OworICAgIHB1c2hCcmVh
a0p1bXBMaXN0KCZicmVha0p1bXBMaXN0KTsKKworICAgIGV4cHIoUlR5cGU6OkkzMiwgZHN0KTsK
KyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAg
SnVtcCBlbmQgPSBicmFuY2hUZXN0MzIoWmVybywgR1BSSW5mbzo6cmVnVDApOworICAgIHN0bXQo
ZHN0KTsKKyAgICBjb250aW51ZUp1bXBTY29wZS5qdW1wKCk7CisgICAgZW5kLmxpbmsodGhpcyk7
CisgICAgYnJlYWtKdW1wTGlzdC5saW5rKHRoaXMpOworCisgICAgcG9wQnJlYWtKdW1wTGlzdCgp
OworCisgICAgcG9wQ29udGludWVKdW1wU2NvcGUoKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6
ZG9fc3RtdChpbnQgZHN0KQoreworICAgIEp1bXBTY29wZSBjb250aW51ZUp1bXBTY29wZSh0aGlz
KTsKKyAgICBwdXNoQ29udGludWVKdW1wU2NvcGUoJmNvbnRpbnVlSnVtcFNjb3BlKTsKKworICAg
IEp1bXBMaXN0IGJyZWFrSnVtcExpc3Q7CisgICAgcHVzaEJyZWFrSnVtcExpc3QoJmJyZWFrSnVt
cExpc3QpOworCisgICAgTGFiZWwgc3RhcnQgPSBsYWJlbCgpOworICAgIHN0bXQoZHN0KTsKKyAg
ICBjb250aW51ZUp1bXBTY29wZS5saW5rKCk7CisgICAgZXhwcihSVHlwZTo6STMyLCBkc3QpOwor
ICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKGRzdCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBK
dW1wIGp1bXBUb1N0YXJ0ID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIEdQUkluZm86OnJlZ1QwKTsK
KyAgICBqdW1wVG9TdGFydC5saW5rVG8oc3RhcnQsIHRoaXMpOworICAgIGJyZWFrSnVtcExpc3Qu
bGluayh0aGlzKTsKKworICAgIHBvcEJyZWFrSnVtcExpc3QoKTsKKworICAgIHBvcENvbnRpbnVl
SnVtcFNjb3BlKCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OmxhYmVsX3N0bXQoaW50IGRzdCkK
K3sKKyAgICBMYWJlbCBjb250aW51ZUxhYmVsID0gbGFiZWwoKTsKKyAgICBKdW1wTGlzdCBicmVh
a0p1bXBMaXN0OworICAgIHB1c2hDb250aW51ZUxhYmVsTGFiZWwoJmNvbnRpbnVlTGFiZWwpOwor
ICAgIHB1c2hCcmVha0xhYmVsSnVtcExpc3QoJmJyZWFrSnVtcExpc3QpOworICAgIHN0bXQoZHN0
KTsKKyAgICBicmVha0p1bXBMaXN0LmxpbmsodGhpcyk7CisgICAgcG9wQnJlYWtMYWJlbEp1bXBM
aXN0KCk7CisgICAgcG9wQ29udGludWVMYWJlbExhYmVsKCk7Cit9CisKK3ZvaWQgSklUQ29tcGls
ZXI6OmJyZWFrX2xhYmVsX3N0bXQoKQoreworICAgIHVpbnQzMl90IGluZGV4ID0gbV9yZWFkLmlt
bVUzMigpOworICAgIGJyZWFrTGFiZWxKdW1wTGlzdChpbmRleCktPmFwcGVuZChqdW1wKCkpOwor
fQorCit2b2lkIEpJVENvbXBpbGVyOjpjb250aW51ZV9sYWJlbF9zdG10KCkKK3sKKyAgICB1aW50
MzJfdCBpbmRleCA9IG1fcmVhZC5pbW1VMzIoKTsKKyAgICBqdW1wKCpjb250aW51ZUxhYmVsTGFi
ZWwoaW5kZXgpKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6c3dpdGNoX3N0bXQoaW50IGRzdCkK
K3sKKyAgICBKdW1wTGlzdCBicmVha0p1bXBMaXN0OworICAgIHB1c2hCcmVha0p1bXBMaXN0KCZi
cmVha0p1bXBMaXN0KTsKKworICAgIHVpbnQzMl90IG51bUNhc2VzID0gbV9yZWFkLmltbVUzMigp
OworICAgIHNpZ25lZF9leHByKFNpZ25lZG5lc3M6OlNpZ25lZCwgZHN0KTsKKyAgICBsb2FkMzIo
dGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICBKdW1wIHRhYmxl
ID0ganVtcCgpOworCisgICAgVmVjdG9yPExhYmVsPiBsYWJlbHM7CisgICAgVmVjdG9yPGludDMy
X3Q+IGltbXM7CisgICAgTGFiZWwgZGVmYXVsdExhYmVsOworICAgIGJvb2wgaGFzRGVmYXVsdCA9
IGZhbHNlOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bUNhc2VzOyBpKyspIHsK
KyAgICAgICAgc3dpdGNoIChtX3JlYWQuc3dpdGNoQ2FzZSgpKSB7CisgICAgICAgIGNhc2UgU3dp
dGNoQ2FzZTo6Q2FzZTA6CisgICAgICAgICAgICBpbW1zLmFwcGVuZChtX3JlYWQuaW1tUzMyKCkp
OworICAgICAgICAgICAgbGFiZWxzLmFwcGVuZChsYWJlbCgpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFN3aXRjaENhc2U6OkNhc2UxOgorICAgICAgICAgICAgaW1tcy5hcHBl
bmQobV9yZWFkLmltbVMzMigpKTsKKyAgICAgICAgICAgIGxhYmVscy5hcHBlbmQobGFiZWwoKSk7
CisgICAgICAgICAgICBzdG10KGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBTd2l0Y2hDYXNlOjpDYXNlTjoKKyAgICAgICAgICAgIGltbXMuYXBwZW5kKG1fcmVhZC5pbW1T
MzIoKSk7CisgICAgICAgICAgICBsYWJlbHMuYXBwZW5kKGxhYmVsKCkpOworICAgICAgICAgICAg
c3RtdF9saXN0KGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTd2l0Y2hD
YXNlOjpEZWZhdWx0MDoKKyAgICAgICAgICAgIGRlZmF1bHRMYWJlbCA9IGxhYmVsKCk7CisgICAg
ICAgICAgICBoYXNEZWZhdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFN3aXRjaENhc2U6OkRlZmF1bHQxOgorICAgICAgICAgICAgZGVmYXVsdExhYmVsID0gbGFi
ZWwoKTsKKyAgICAgICAgICAgIGhhc0RlZmF1bHQgPSB0cnVlOworICAgICAgICAgICAgc3RtdChk
c3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3dpdGNoQ2FzZTo6RGVmYXVs
dE46CisgICAgICAgICAgICBkZWZhdWx0TGFiZWwgPSBsYWJlbCgpOworICAgICAgICAgICAgaGFz
RGVmYXVsdCA9IHRydWU7CisgICAgICAgICAgICBzdG10X2xpc3QoZHN0KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEp1bXAgZW5kID0ganVtcCgpOwor
ICAgIHRhYmxlLmxpbmsodGhpcyk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxhYmVs
cy5zaXplKCk7ICsraSkgeworICAgICAgICBKdW1wIGogPSBicmFuY2gzMihFcXVhbCwgR1BSSW5m
bzo6cmVnVDAsIFRydXN0ZWRJbW0zMihpbW1zW2ldKSk7CisgICAgICAgIGoubGlua1RvKGxhYmVs
c1tpXSwgdGhpcyk7CisgICAgfQorICAgIGlmIChoYXNEZWZhdWx0KQorICAgICAgICBqdW1wKGRl
ZmF1bHRMYWJlbCk7CisKKyAgICBlbmQubGluayh0aGlzKTsKKworICAgIGJyZWFrSnVtcExpc3Qu
bGluayh0aGlzKTsKKyAgICBwb3BCcmVha0p1bXBMaXN0KCk7Cit9CisKK3ZvaWQgSklUQ29tcGls
ZXI6OmV4cHIoUlR5cGUgclR5cGUsIGludCBkc3QpCit7CisgICAgSTMyIGkzMjsKKyAgICBJMzJX
aXRoSW1tIGkzMl93aXRoX2ltbTsKKyAgICB1aW50OF90IGltbTsKKworICAgIGlmIChyVHlwZSAh
PSBSVHlwZTo6STMyKQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisg
ICAgaWYgKG1fcmVhZC5jb2RlKCZpMzIsICZpMzJfd2l0aF9pbW0sICZpbW0pKSB7CisgICAgICAg
IHN3aXRjaCAoaTMyKSB7CisgICAgICAgIGNhc2UgSTMyOjpMaXRJbW06CisgICAgICAgICAgICBz
dG9yZTMyKFRydXN0ZWRJbW0zMihtX3JlYWQuaW1tVTMyKCkpLCB0ZW1wb3JhcnlBZGRyZXNzKGRz
dCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpMaXRQb29sOgorICAg
ICAgICBjYXNlIEkzMjo6R2V0TG9jOgorICAgICAgICAgICAgZ2V0X2xvY2FsKGRzdCk7IC8vIFRP
RE86IHNob3VsZCBwYXNzIEkzMiBhcyBSVHlwZQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgSTMyOjpHZXRHbG86CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICBjYXNlIEkzMjo6U2V0TG9jOgorICAgICAgICAgICAgc2V0X2xvY2FsKGRz
dCk7IC8vIFRPRE86IHNob3VsZCBwYXNzIEkzMiBhcyBSVHlwZQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSTMyOjpTZXRHbG86CisgICAgICAgIGNhc2UgSTMyOjpTTG9hZDg6Cisg
ICAgICAgIGNhc2UgSTMyOjpTTG9hZE9mZjg6CisgICAgICAgIGNhc2UgSTMyOjpVTG9hZDg6Cisg
ICAgICAgIGNhc2UgSTMyOjpVTG9hZE9mZjg6CisgICAgICAgIGNhc2UgSTMyOjpTTG9hZDE2Ogor
ICAgICAgICBjYXNlIEkzMjo6U0xvYWRPZmYxNjoKKyAgICAgICAgY2FzZSBJMzI6OlVMb2FkMTY6
CisgICAgICAgIGNhc2UgSTMyOjpVTG9hZE9mZjE2OgorICAgICAgICBjYXNlIEkzMjo6TG9hZDMy
OgorICAgICAgICBjYXNlIEkzMjo6TG9hZE9mZjMyOgorICAgICAgICBjYXNlIEkzMjo6U3RvcmU4
OgorICAgICAgICBjYXNlIEkzMjo6U3RvcmVPZmY4OgorICAgICAgICBjYXNlIEkzMjo6U3RvcmUx
NjoKKyAgICAgICAgY2FzZSBJMzI6OlN0b3JlT2ZmMTY6CisgICAgICAgIGNhc2UgSTMyOjpTdG9y
ZTMyOgorICAgICAgICBjYXNlIEkzMjo6U3RvcmVPZmYzMjoKKyAgICAgICAgY2FzZSBJMzI6OkNh
bGxJbnQ6CisgICAgICAgIGNhc2UgSTMyOjpDYWxsSW5kOgorICAgICAgICBjYXNlIEkzMjo6Q2Fs
bEltcDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IGNhc2UgSTMyOjpDb25kOgorICAgICAgICAgICAgY29uZChSVHlwZTo6STMyLCBkc3QpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpDb21tYToKKyAgICAgICAgICAgIGNv
bW1hKFJUeXBlOjpJMzIsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
MzI6OkZyb21GMzI6CisgICAgICAgIGNhc2UgSTMyOjpGcm9tRjY0OgorICAgICAgICBjYXNlIEkz
Mjo6TmVnOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgY2FzZSBJMzI6OkFkZDoKKyAgICAgICAgICAgIGFkZF9zdWIoJysnLCBSVHlwZTo6STMyLCBk
c3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpTdWI6CisgICAgICAg
ICAgICBhZGRfc3ViKCctJywgUlR5cGU6OkkzMiwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEkzMjo6TXVsOgorICAgICAgICAgICAgbXVsX2kzMihkc3QpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpTRGl2OgorICAgICAgICBjYXNlIEkzMjo6
VURpdjoKKyAgICAgICAgY2FzZSBJMzI6OlNNb2Q6CisgICAgICAgIGNhc2UgSTMyOjpVTW9kOgor
ICAgICAgICBjYXNlIEkzMjo6Qml0Tm90OgorICAgICAgICBjYXNlIEkzMjo6Qml0T3I6CisgICAg
ICAgIGNhc2UgSTMyOjpCaXRBbmQ6CisgICAgICAgIGNhc2UgSTMyOjpCaXRYb3I6CisgICAgICAg
IGNhc2UgSTMyOjpMc2g6CisgICAgICAgIGNhc2UgSTMyOjpBcml0aFJzaDoKKyAgICAgICAgY2Fz
ZSBJMzI6OkxvZ2ljUnNoOgorICAgICAgICBjYXNlIEkzMjo6Q2x6OgorICAgICAgICBjYXNlIEkz
Mjo6TG9naWNOb3Q6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBjYXNlIEkzMjo6RXFJMzI6CisgICAgICAgICAgICByZWxfaTMyKFNpZ25lZG5lc3M6
OlNpZ25lZCwgIj09IiwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkz
Mjo6RXFGMzI6CisgICAgICAgIGNhc2UgSTMyOjpFcUY2NDoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgSTMyOjpORXFJMzI6CisgICAgICAg
ICAgICByZWxfaTMyKFNpZ25lZG5lc3M6OlNpZ25lZCwgIiE9IiwgZHN0KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6TkVxRjMyOgorICAgICAgICBjYXNlIEkzMjo6TkVx
RjY0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
Y2FzZSBJMzI6OlNMZVRoSTMyOgorICAgICAgICAgICAgcmVsX2kzMihTaWduZWRuZXNzOjpTaWdu
ZWQsICI8IiwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6VUxl
VGhJMzI6CisgICAgICAgICAgICByZWxfaTMyKFNpZ25lZG5lc3M6OlVuc2lnbmVkLCAiPCIsIGRz
dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkxlVGhGMzI6CisgICAg
ICAgIGNhc2UgSTMyOjpMZVRoRjY0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgY2FzZSBJMzI6OlNMZUVxSTMyOgorICAgICAgICAgICAgcmVsX2kz
MihTaWduZWRuZXNzOjpTaWduZWQsICI8PSIsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJMzI6OlVMZUVxSTMyOgorICAgICAgICAgICAgcmVsX2kzMihTaWduZWRuZXNz
OjpVbnNpZ25lZCwgIjw9IiwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEkzMjo6TGVFcUYzMjoKKyAgICAgICAgY2FzZSBJMzI6OkxlRXFGNjQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNlIEkzMjo6U0dyVGhJMzI6
CisgICAgICAgICAgICByZWxfaTMyKFNpZ25lZG5lc3M6OlNpZ25lZCwgIj4iLCBkc3QpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpVR3JUaEkzMjoKKyAgICAgICAgICAg
IHJlbF9pMzIoU2lnbmVkbmVzczo6VW5zaWduZWQsICI+IiwgZHN0KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEkzMjo6R3JUaEYzMjoKKyAgICAgICAgY2FzZSBJMzI6OkdyVGhG
NjQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBj
YXNlIEkzMjo6U0dyRXFJMzI6CisgICAgICAgICAgICByZWxfaTMyKFNpZ25lZG5lc3M6OlNpZ25l
ZCwgIj49IiwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6VUdy
RXFJMzI6CisgICAgICAgICAgICByZWxfaTMyKFNpZ25lZG5lc3M6OlVuc2lnbmVkLCAiPj0iLCBk
c3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpHckVxRjMyOgorICAg
ICAgICBjYXNlIEkzMjo6R3JFcUY2NDoKKyAgICAgICAgY2FzZSBJMzI6OlNNaW46CisgICAgICAg
IGNhc2UgSTMyOjpVTWluOgorICAgICAgICBjYXNlIEkzMjo6U01heDoKKyAgICAgICAgY2FzZSBJ
MzI6OlVNYXg6CisgICAgICAgIGNhc2UgSTMyOjpBYnM6CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgc3dpdGNoIChpMzJfd2l0aF9pbW0pIHsKKyAgICAgICAgY2FzZSBJMzJX
aXRoSW1tOjpMaXRJbW06CisgICAgICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihpbW0pLCB0
ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
STMyV2l0aEltbTo6TGl0UG9vbDoKKyAgICAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKG1f
aTMyc1tpbW1dKSwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEkzMldpdGhJbW06OkdldExvYzoKKyAgICAgICAgICAgIGxvYWQzMihzdGFj
a0FkZHJlc3MoaW1tKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgc3RvcmUzMihHUFJJ
bmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBKSVRDb21waWxlcjo6c2lnbmVkX2V4cHIo
U2lnbmVkbmVzcyBzaWduZWRuZXNzLCBpbnQgZHN0KQoreworICAgIHVpbnQzMl90IHUzMjsKKyAg
ICBpZiAobV9yZWFkLmlmSTMyTGl0KG1faTMycywgJnUzMikpIHsKKyAgICAgICAgaWYgKHNpZ25l
ZG5lc3MgPT0gU2lnbmVkbmVzczo6U2lnbmVkKQorICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVk
SW1tMzIodTMyKSwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIodTMyKSwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsg
Ly8gRklYTUU6IHVuc2lnbmVkCisgICAgfSBlbHNlIGlmIChzaWduZWRuZXNzID09IFNpZ25lZG5l
c3M6OlNpZ25lZCkKKyAgICAgICAgZXhwcihSVHlwZTo6STMyLCBkc3QpOworICAgIGVsc2UKKyAg
ICAgICAgZXhwcihSVHlwZTo6STMyLCBkc3QpOyAvLyBGSVhNRTogdW5zaWduZWQKK30KKwordm9p
ZCBKSVRDb21waWxlcjo6YWRkX3N1YihjaGFyIG9wLCBSVHlwZSByVHlwZSwgaW50IGRzdCkKK3sK
KyAgICBleHByKHJUeXBlLCBkc3QpOworICAgIGV4cHIoclR5cGUsIGRzdCArIDEpOworICAgIGlm
IChvcCA9PSAnKycpIHsKKyAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoZHN0KSwgR1BS
SW5mbzo6cmVnVDApOworICAgICAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QgKyAxKSwg
R1BSSW5mbzo6cmVnVDEpOworICAgICAgICBhZGQzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6
cmVnVDApOworICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNz
KGRzdCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKGRz
dCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoZHN0
ICsgMSksIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgc3ViMzIoR1BSSW5mbzo6cmVnVDEsIEdQ
UkluZm86OnJlZ1QwKTsKKyAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5
QWRkcmVzcyhkc3QpKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6Om11bF9pMzIoaW50
IGRzdCkKK3sKKyAgICBleHByKFJUeXBlOjpJMzIsIGRzdCk7CisgICAgZXhwcihSVHlwZTo6STMy
LCBkc3QgKyAxKTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpy
ZWdUMCk7CisgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoZHN0ICsgMSksIEdQUkluZm86OnJl
Z1QxKTsKKyAgICBtdWwzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAgIHN0
b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7Cit9CisKK3ZvaWQg
SklUQ29tcGlsZXI6OnJlbF9pMzIoU2lnbmVkbmVzcyBzaWduZWRuZXNzLCBjb25zdCBjaGFyKiBv
cCwgaW50IGRzdCkKK3sKKyAgICBzaWduZWRfZXhwcihzaWduZWRuZXNzLCBkc3QpOworICAgIHNp
Z25lZF9leHByKHNpZ25lZG5lc3MsIGRzdCArIDEpOworICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRy
ZXNzKGRzdCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhk
c3QgKyAxKSwgR1BSSW5mbzo6cmVnVDEpOworICAgIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0
aW9uOworICAgIGlmIChvcFswXSA9PSAnPScgJiYgb3BbMV0gPT0gJz0nICYmICFvcFsyXSkKKyAg
ICAgICAgY29uZGl0aW9uID0gRXF1YWw7CisgICAgZWxzZSBpZiAob3BbMF0gPT0gJyEnICYmIG9w
WzFdID09ICc9JyAmJiAhb3BbMl0pCisgICAgICAgIGNvbmRpdGlvbiA9IE5vdEVxdWFsOworICAg
IGVsc2UgaWYgKG9wWzBdID09ICc+JyAmJiAhb3BbMV0pCisgICAgICAgIGNvbmRpdGlvbiA9IEdy
ZWF0ZXJUaGFuOworICAgIGVsc2UgaWYgKG9wWzBdID09ICc8JyAmJiAhb3BbMV0pCisgICAgICAg
IGNvbmRpdGlvbiA9IExlc3NUaGFuOworICAgIGVsc2UgaWYgKG9wWzBdID09ICc+JyAmJiBvcFsx
XSA9PSAnPScgJiYgIW9wWzJdKQorICAgICAgICBjb25kaXRpb24gPSBHcmVhdGVyVGhhbk9yRXF1
YWw7CisgICAgZWxzZSBpZiAob3BbMF0gPT0gJzwnICYmIG9wWzFdID09ICc9JyAmJiAhb3BbMl0p
CisgICAgICAgIGNvbmRpdGlvbiA9IExlc3NUaGFuT3JFcXVhbDsKKyAgICBlbHNlCisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwg
R1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgc3Rv
cmUzMihHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKK30KKwordm9pZCBK
SVRDb21waWxlcjo6Y29tbWEoUlR5cGUgclR5cGUsIGludCBkc3QpCit7CisgICAgZXhwcihtX3Jl
YWQucnR5cGUoKSwgZHN0KTsKKyAgICBleHByKHJUeXBlLCBkc3QpOworfQorCit2b2lkIEpJVENv
bXBpbGVyOjpjb25kKFJUeXBlIHJUeXBlLCBpbnQgZHN0KQoreworICAgIGV4cHIoUlR5cGU6Okkz
MiwgZHN0KTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgSnVtcCBlbHMgPSBicmFuY2hUZXN0MzIoWmVybywgR1BSSW5mbzo6cmVnVDApOwor
ICAgIGV4cHIoclR5cGUsIGRzdCk7CisgICAgSnVtcCBlbmQgPSBqdW1wKCk7CisgICAgZWxzLmxp
bmsodGhpcyk7CisgICAgZXhwcihyVHlwZSwgZHN0KTsKKyAgICBlbmQubGluayh0aGlzKTsKK30K
KworSlNWYWx1ZSBjb21waWxlQW5kUnVuKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVmVjdG9yPGNo
YXI+JiBidWZmZXIpCit7CisgICAgSklUQ29tcGlsZXIgY29tcGlsZXIoJmV4ZWMtPnZtKCkpOwor
ICAgIHJldHVybiBjb21waWxlci5jb21waWxlQW5kUnVuKGV4ZWMsIGJ1ZmZlcik7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtSklUQ29tcGlsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21KSVRDb21waWxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyN2JmYmE4MGQ1ODQwMjc2ZDhlNmUzNjllMGMx
NTRmMjZkOThhOGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtSklUQ29tcGlsZXIuaApAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNo
ZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgeW91IG1heSBub3QgdXNl
IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIFlvdSBt
YXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgaHR0cDovL3d3dy5hcGFjaGUu
b3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJs
ZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgZGlzdHJpYnV0ZWQgdW5k
ZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyBXSVRI
T1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mg
b3IgaW1wbGllZC4KKyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBn
b3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2Uu
CisqLworCisjaWZuZGVmIFdhc21KSVRDb21waWxlcl9oCisjZGVmaW5lIFdhc21KSVRDb21waWxl
cl9oCisKKyNpbmNsdWRlICJBc3NlbWJseUhlbHBlcnMuaCIKKyNpbmNsdWRlICJXYXNtT3Bjb2Rl
cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgRXhlY1N0YXRlOworY2xhc3MgSklUQ29k
ZTsKK2NsYXNzIFZNOworCituYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIEp1bXBTY29wZTsKKwor
Y2xhc3MgSklUQ29tcGlsZXIgOiBwcml2YXRlIEFzc2VtYmx5SGVscGVycyB7CitwdWJsaWM6Cisg
ICAgSklUQ29tcGlsZXIoVk0qIHZtKQorICAgIDogQXNzZW1ibHlIZWxwZXJzKHZtLCAwKSB7IH0K
KyAgICBKU1ZhbHVlIGNvbXBpbGVBbmRSdW4oRXhlY1N0YXRlKiwgY29uc3QgVmVjdG9yPGNoYXI+
JiBidWZmZXIpOworCitwcml2YXRlOgorICAgIHN0cnVjdCBGdW5jSW1wb3J0U2lnbmF0dXJlIHsK
KyAgICAgICAgdWludDMyX3Qgc2lnbmF0dXJlSW5kZXg7CisgICAgICAgIHVpbnQzMl90IGZ1bmNJ
bXBvcnRJbmRleDsKKyAgICB9OworCisgICAgc3RydWN0IEZ1bmNQdHJUYWJsZSB7CisgICAgICAg
IHVpbnQzMl90IHNpZ25hdHVyZUluZGV4OworICAgICAgICBWZWN0b3I8dWludDMyX3Q+IGVsZW1l
bnRzOworICAgIH07CisKKyAgICBSZWZQdHI8SklUQ29kZT4gY29tcGlsZShWTSYsIGNvbnN0IFZl
Y3RvcjxjaGFyPiYgYnVmZmVyKTsKKyAgICB2b2lkIHVucGFjaygpOworICAgIHZvaWQgcmVhZENv
bnN0YW50UG9vbFNlY3Rpb24oKTsKKyAgICB2b2lkIHJlYWRTaWduYXR1cmVTZWN0aW9uKCk7Cisg
ICAgdm9pZCByZWFkRnVuY3Rpb25JbXBvcnRTZWN0aW9uKCk7CisgICAgdm9pZCByZWFkR2xvYmFs
U2VjdGlvbigpOworICAgIHZvaWQgcmVhZEZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKCk7Cisg
ICAgdm9pZCByZWFkRnVuY3Rpb25Qb2ludGVyVGFibGVzKCk7CisgICAgdm9pZCByZWFkRnVuY3Rp
b25EZWZpbml0aW9uU2VjdGlvbigpOworICAgIHZvaWQgcmVhZEV4cG9ydFNlY3Rpb24oKTsKKwor
ICAgIHZvaWQgcmVhZEZ1bmN0aW9uRGVmaW5pdGlvbihzaXplX3QgZnVuY0luZGV4KTsKKyAgICB2
b2lkIHJlYWRBcmdzKGNvbnN0IFNpZ25hdHVyZSYpOworICAgIHZvaWQgcmVhZFZhcnMoKTsKKwor
ICAgIHZvaWQgc3RtdChpbnQgZHN0KTsKKyAgICB2b2lkIGdldF9sb2NhbChpbnQgZHN0KTsKKyAg
ICB2b2lkIHNldF9sb2NhbCh1aW50MzJfdCBpbW0sIGludCBkc3QpOworICAgIHZvaWQgc2V0X2xv
Y2FsKGludCBkc3QpOworICAgIHZvaWQgcmV0dXJuX3N0bXQoKTsKKyAgICB2b2lkIGJsb2NrX3N0
bXQoaW50IGRzdCk7CisgICAgdm9pZCBzdG10X2xpc3QoaW50IGRzdCk7CisgICAgdm9pZCBpZl9z
dG10KGludCBkc3QpOworICAgIHZvaWQgaWZfZWxzZV9zdG10KGludCBkc3QpOworICAgIHZvaWQg
d2hpbGVfc3RtdChpbnQgZHN0KTsKKyAgICB2b2lkIGRvX3N0bXQoaW50IGRzdCk7CisgICAgdm9p
ZCBsYWJlbF9zdG10KGludCBkc3QpOworICAgIHZvaWQgYnJlYWtfbGFiZWxfc3RtdCgpOworICAg
IHZvaWQgY29udGludWVfbGFiZWxfc3RtdCgpOworICAgIHZvaWQgc3dpdGNoX3N0bXQoaW50IGRz
dCk7CisKKyAgICB2b2lkIGV4cHIoUlR5cGUsIGludCBkc3QpOworICAgIHZvaWQgc2lnbmVkX2V4
cHIoU2lnbmVkbmVzcywgaW50IGRzdCk7CisgICAgdm9pZCBhZGRfc3ViKGNoYXIgb3AsIFJUeXBl
LCBpbnQgZHN0KTsKKyAgICB2b2lkIG11bF9pMzIoaW50IGRzdCk7CisgICAgdm9pZCByZWxfaTMy
KFNpZ25lZG5lc3MsIGNvbnN0IGNoYXIqIG9wLCBpbnQgZHN0KTsKKyAgICB2b2lkIGNvbW1hKFJU
eXBlLCBpbnQgZHN0KTsKKyAgICB2b2lkIGNvbmQoUlR5cGUsIGludCBkc3QpOworCisgICAgQWRk
cmVzcyBzdGFja0FkZHJlc3MoaW50IGkpIC8vIEZJWE1FOgorICAgIHsKKyAgICAgICAgcmV0dXJu
IEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIC1pICogOCAtIDgpOworICAgIH0K
KworICAgIEFkZHJlc3MgdGVtcG9yYXJ5QWRkcmVzcyhpbnQgaSkgLy8gRklYTUU6CisgICAgewor
ICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgLShpICsg
bV9jdXJyZW50TG9jYWxUeXBlcy5zaXplKCkpICogOCAtIDgpOworICAgIH0KKworICAgIHZvaWQg
cHVzaENvbnRpbnVlTGFiZWxMYWJlbChMYWJlbCogbGFiZWwpIHsgbV9jb250aW51ZUxhYmVsTGFi
ZWxzLmFwcGVuZChsYWJlbCk7IH0KKyAgICB2b2lkIHBvcENvbnRpbnVlTGFiZWxMYWJlbCgpIHsg
bV9jb250aW51ZUxhYmVsTGFiZWxzLnJlbW92ZUxhc3QoKTsgfQorICAgIExhYmVsKiBjb250aW51
ZUxhYmVsTGFiZWwoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fY29udGludWVMYWJlbExhYmVs
c1tpXTsgfQorICAgIHZvaWQgcHVzaEJyZWFrTGFiZWxKdW1wTGlzdChKdW1wTGlzdCoganVtcExp
c3QpIHsgbV9icmVha0xhYmVsSnVtcExpc3RzLmFwcGVuZChqdW1wTGlzdCk7IH0KKyAgICB2b2lk
IHBvcEJyZWFrTGFiZWxKdW1wTGlzdCgpIHsgbV9icmVha0xhYmVsSnVtcExpc3RzLnJlbW92ZUxh
c3QoKTsgfQorICAgIEp1bXBMaXN0KiBicmVha0xhYmVsSnVtcExpc3Qoc2l6ZV90IGkpIGNvbnN0
IHsgcmV0dXJuIG1fYnJlYWtMYWJlbEp1bXBMaXN0c1tpXTsgfQorCisgICAgdm9pZCBwdXNoQ29u
dGludWVKdW1wU2NvcGUoSnVtcFNjb3BlKiBqdW1wU2NvcGUpIHsgbV9jb250aW51ZUp1bXBTY29w
ZXMuYXBwZW5kKGp1bXBTY29wZSk7IH0KKyAgICB2b2lkIHBvcENvbnRpbnVlSnVtcFNjb3BlKCkg
eyBtX2NvbnRpbnVlSnVtcFNjb3Blcy5yZW1vdmVMYXN0KCk7IH0KKyAgICBKdW1wU2NvcGUqIHRv
cENvbnRpbnVlSnVtcFNjb3BlKCkgY29uc3QgeyByZXR1cm4gbV9jb250aW51ZUp1bXBTY29wZXMu
bGFzdCgpOyB9CisKKyAgICB2b2lkIHB1c2hCcmVha0p1bXBMaXN0KEp1bXBMaXN0KiBqdW1wTGlz
dCkgeyBtX2JyZWFrSnVtcExpc3RzLmFwcGVuZChqdW1wTGlzdCk7IH0KKyAgICB2b2lkIHBvcEJy
ZWFrSnVtcExpc3QoKSB7IG1fYnJlYWtKdW1wTGlzdHMucmVtb3ZlTGFzdCgpOyB9CisgICAgSnVt
cExpc3QqIHRvcEJyZWFrSnVtcExpc3QoKSBjb25zdCB7IHJldHVybiBtX2JyZWFrSnVtcExpc3Rz
Lmxhc3QoKTsgfQorCisgICAgSW4gbV9yZWFkOworCisgICAgVmVjdG9yPFNpZ25hdHVyZT4gbV9z
aWduYXR1cmVzOworICAgIFZlY3Rvcjx1aW50MzJfdD4gbV9pMzJzOworICAgIFZlY3RvcjxmbG9h
dD4gbV9mMzJzOworICAgIFZlY3Rvcjxkb3VibGU+IG1fZjY0czsKKyAgICBWZWN0b3I8RnVuY0lt
cG9ydFNpZ25hdHVyZT4gbV9mdW5jSW1wb3J0U2lnbmF0dXJlczsKKyAgICBWZWN0b3I8VHlwZT4g
bV9nbG9iYWxUeXBlczsKKyAgICBWZWN0b3I8dWludDMyX3Q+IG1fZnVuY1NpZ3M7CisgICAgVmVj
dG9yPEZ1bmNQdHJUYWJsZT4gbV9mdW5jUHRyVGFibGVzOworCisgICAgUlR5cGUgbV9jdXJyZW50
UmV0dXJuVHlwZTsKKyAgICBWZWN0b3I8VHlwZT4gbV9jdXJyZW50TG9jYWxUeXBlczsKKworICAg
IFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6TGFiZWwqPiBtX2NvbnRpbnVlTGFiZWxMYWJlbHM7Cisg
ICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCo+IG1fYnJlYWtMYWJlbEp1bXBMaXN0
czsKKworICAgIFZlY3RvcjxKdW1wU2NvcGUqPiBtX2NvbnRpbnVlSnVtcFNjb3BlczsKKyAgICBW
ZWN0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0Kj4gbV9icmVha0p1bXBMaXN0czsKK307CisK
K0pTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgY29tcGlsZUFuZFJ1bihFeGVjU3RhdGUqLCBjb25z
dCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisK
KyNlbmRpZiAvLyBXYXNtSklUQ29tcGlsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU9wY29kZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21PcGNvZGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGRmYTZjOTA4NjdlNmNjMmMxYzE2MDY2YzliNmI1MDI3
ZWQ3YzZiYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21PcGNvZGVzLmgKQEAgLTAsMCArMSw1OTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvKgorIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5z
ZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZp
bGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyBZb3UgbWF5IG9idGFp
biBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNl
bnNlcy9MSUNFTlNFLTIuMAorCisgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9y
IGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBM
aWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgV0lUSE9VVCBXQVJS
QU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxp
ZWQuCisgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n
IHBlcm1pc3Npb25zIGFuZAorIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKwor
I2lmbmRlZiBXYXNtT3Bjb2Rlc19oCisjZGVmaW5lIFdhc21PcGNvZGVzX2gKKworbmFtZXNwYWNl
IEpTQyB7CisKK25hbWVzcGFjZSBXYXNtIHsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IE1hZ2lj
TnVtYmVyID0gMHg2ZDczNjE3NzsKKworZW51bSBjbGFzcyBTdG10IDogdWludDhfdCB7CisgICAg
U2V0TG9jLAorICAgIFNldEdsbywKKyAgICBJMzJTdG9yZTgsCisgICAgSTMyU3RvcmVPZmY4LAor
ICAgIEkzMlN0b3JlMTYsCisgICAgSTMyU3RvcmVPZmYxNiwKKyAgICBJMzJTdG9yZTMyLAorICAg
IEkzMlN0b3JlT2ZmMzIsCisgICAgRjMyU3RvcmUsCisgICAgRjMyU3RvcmVPZmYsCisgICAgRjY0
U3RvcmUsCisgICAgRjY0U3RvcmVPZmYsCisgICAgQ2FsbEludCwKKyAgICBDYWxsSW5kLAorICAg
IENhbGxJbXAsCisgICAgUmV0LAorICAgIEJsb2NrLAorICAgIElmVGhlbiwKKyAgICBJZkVsc2Us
CisgICAgV2hpbGUsCisgICAgRG8sCisgICAgTGFiZWwsCisgICAgQnJlYWssCisgICAgQnJlYWtM
YWJlbCwKKyAgICBDb250aW51ZSwKKyAgICBDb250aW51ZUxhYmVsLAorICAgIFN3aXRjaCwKKwor
ICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBTdG10V2l0aEltbSA6IHVpbnQ4X3QgeworICAgIFNl
dExvYywKKyAgICBTZXRHbG8sCisgICAgUmVzZXZlZDEsCisgICAgUmVzZXZlZDIsCisKKyAgICBC
YWQKK307CisKK2VudW0gY2xhc3MgU3dpdGNoQ2FzZSA6IHVpbnQ4X3QgeworICAgIENhc2UwLAor
ICAgIENhc2UxLAorICAgIENhc2VOLAorICAgIERlZmF1bHQwLAorICAgIERlZmF1bHQxLAorICAg
IERlZmF1bHROCit9OworCitlbnVtIGNsYXNzIEkzMiA6IHVpbnQ4X3QgeworICAgIExpdFBvb2ws
CisgICAgTGl0SW1tLAorICAgIEdldExvYywKKyAgICBHZXRHbG8sCisgICAgU2V0TG9jLAorICAg
IFNldEdsbywKKyAgICBTTG9hZDgsCisgICAgU0xvYWRPZmY4LAorICAgIFVMb2FkOCwKKyAgICBV
TG9hZE9mZjgsCisgICAgU0xvYWQxNiwKKyAgICBTTG9hZE9mZjE2LAorICAgIFVMb2FkMTYsCisg
ICAgVUxvYWRPZmYxNiwKKyAgICBMb2FkMzIsCisgICAgTG9hZE9mZjMyLAorICAgIFN0b3JlOCwK
KyAgICBTdG9yZU9mZjgsCisgICAgU3RvcmUxNiwKKyAgICBTdG9yZU9mZjE2LAorICAgIFN0b3Jl
MzIsCisgICAgU3RvcmVPZmYzMiwKKyAgICBDYWxsSW50LAorICAgIENhbGxJbmQsCisgICAgQ2Fs
bEltcCwKKyAgICBDb25kLAorICAgIENvbW1hLAorICAgIEZyb21GMzIsCisgICAgRnJvbUY2NCwK
KyAgICBOZWcsCisgICAgQWRkLAorICAgIFN1YiwKKyAgICBNdWwsCisgICAgU0RpdiwKKyAgICBV
RGl2LAorICAgIFNNb2QsCisgICAgVU1vZCwKKyAgICBCaXROb3QsCisgICAgQml0T3IsCisgICAg
Qml0QW5kLAorICAgIEJpdFhvciwKKyAgICBMc2gsCisgICAgQXJpdGhSc2gsCisgICAgTG9naWNS
c2gsCisgICAgQ2x6LAorICAgIExvZ2ljTm90LAorICAgIEVxSTMyLAorICAgIEVxRjMyLAorICAg
IEVxRjY0LAorICAgIE5FcUkzMiwKKyAgICBORXFGMzIsCisgICAgTkVxRjY0LAorICAgIFNMZVRo
STMyLAorICAgIFVMZVRoSTMyLAorICAgIExlVGhGMzIsCisgICAgTGVUaEY2NCwKKyAgICBTTGVF
cUkzMiwKKyAgICBVTGVFcUkzMiwKKyAgICBMZUVxRjMyLAorICAgIExlRXFGNjQsCisgICAgU0dy
VGhJMzIsCisgICAgVUdyVGhJMzIsCisgICAgR3JUaEYzMiwKKyAgICBHclRoRjY0LAorICAgIFNH
ckVxSTMyLAorICAgIFVHckVxSTMyLAorICAgIEdyRXFGMzIsCisgICAgR3JFcUY2NCwKKyAgICBT
TWluLAorICAgIFVNaW4sCisgICAgU01heCwKKyAgICBVTWF4LAorICAgIEFicywKKworICAgIEJh
ZAorfTsKKworZW51bSBjbGFzcyBJMzJXaXRoSW1tIDogdWludDhfdCB7CisgICAgTGl0UG9vbCwK
KyAgICBMaXRJbW0sCisgICAgR2V0TG9jLAorICAgIFJlc2VydmVkLAorCisgICAgQmFkCit9Owor
CitlbnVtIGNsYXNzIEYzMiA6IHVpbnQ4X3QgeworICAgIExpdFBvb2wsCisgICAgTGl0SW1tLAor
ICAgIEdldExvYywKKyAgICBHZXRHbG8sCisgICAgU2V0TG9jLAorICAgIFNldEdsbywKKyAgICBM
b2FkLAorICAgIExvYWRPZmYsCisgICAgU3RvcmUsCisgICAgU3RvcmVPZmYsCisgICAgQ2FsbElu
dCwKKyAgICBDYWxsSW5kLAorICAgIENvbmQsCisgICAgQ29tbWEsCisgICAgRnJvbVMzMiwKKyAg
ICBGcm9tVTMyLAorICAgIEZyb21GNjQsCisgICAgTmVnLAorICAgIEFkZCwKKyAgICBTdWIsCisg
ICAgTXVsLAorICAgIERpdiwKKyAgICBBYnMsCisgICAgQ2VpbCwKKyAgICBGbG9vciwKKyAgICBT
cXJ0LAorCisgICAgQmFkCit9OworCitlbnVtIGNsYXNzIEYzMldpdGhJbW0gOiB1aW50OF90IHsK
KyAgICBMaXRQb29sLAorICAgIEdldExvYywKKyAgICBSZXNlcnZlZDAsCisgICAgUmVzZXJ2ZWQx
LAorCisgICAgQmFkCit9OworCitlbnVtIGNsYXNzIEY2NCA6IHVpbnQ4X3QgeworICAgIExpdFBv
b2wsCisgICAgTGl0SW1tLAorICAgIEdldExvYywKKyAgICBHZXRHbG8sCisgICAgU2V0TG9jLAor
ICAgIFNldEdsbywKKyAgICBMb2FkLAorICAgIExvYWRPZmYsCisgICAgU3RvcmUsCisgICAgU3Rv
cmVPZmYsCisgICAgQ2FsbEludCwKKyAgICBDYWxsSW5kLAorICAgIENhbGxJbXAsCisgICAgQ29u
ZCwKKyAgICBDb21tYSwKKyAgICBGcm9tUzMyLAorICAgIEZyb21VMzIsCisgICAgRnJvbUYzMiwK
KyAgICBOZWcsCisgICAgQWRkLAorICAgIFN1YiwKKyAgICBNdWwsCisgICAgRGl2LAorICAgIE1v
ZCwKKyAgICBNaW4sCisgICAgTWF4LAorICAgIEFicywKKyAgICBDZWlsLAorICAgIEZsb29yLAor
ICAgIFNxcnQsCisgICAgQ29zLAorICAgIFNpbiwKKyAgICBUYW4sCisgICAgQUNvcywKKyAgICBB
U2luLAorICAgIEFUYW4sCisgICAgQVRhbjIsCisgICAgRXhwLAorICAgIExuLAorICAgIFBvdywK
KworICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBGNjRXaXRoSW1tIDogdWludDhfdCB7CisgICAg
TGl0UG9vbCwKKyAgICBHZXRMb2MsCisgICAgUmVzZXJ2ZWQwLAorICAgIFJlc2VydmVkMSwKKwor
ICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBWb2lkIDogdWludDhfdCB7CisgICAgQ2FsbEludCwK
KyAgICBDYWxsSW5kLAorICAgIENhbGxJbXAsCisKKyAgICBCYWQKK307CisKK2VudW0gY2xhc3Mg
VHlwZSA6IHVpbnQ4X3QgeworICAgIEkzMiwKKyAgICBGMzIsCisgICAgRjY0Cit9OworCitlbnVt
IGNsYXNzIFZhclR5cGVzIDogdWludDhfdCB7CisgICAgSTMyID0gMHgxLAorICAgIEYzMiA9IDB4
MiwKKyAgICBGNjQgPSAweDQsCit9OworCitpbmxpbmUgVmFyVHlwZXMgb3BlcmF0b3J8IChWYXJU
eXBlcyBsaHMsIFZhclR5cGVzIHJocykgeyByZXR1cm4gVmFyVHlwZXModWludDhfdChsaHMpIHwg
dWludDhfdChyaHMpKTsgfQoraW5saW5lIGJvb2wgb3BlcmF0b3ImKFZhclR5cGVzIGxocywgVmFy
VHlwZXMgcmhzKSB7IHJldHVybiBib29sKHVpbnQ4X3QobGhzKSAmIHVpbnQ4X3QocmhzKSk7IH0K
KworZW51bSBjbGFzcyBWYXJUeXBlc1dpdGhJbW0gOiB1aW50OF90IHsKKyAgICBPbmx5STMyLAor
ICAgIFJlc2VydmVkMCwKKyAgICBSZXNlcnZlZDEsCisgICAgUmVzZXJ2ZWQyCit9OworCitlbnVt
IGNsYXNzIFJUeXBlIDogdWludDhfdCB7CisgICAgSTMyID0gdWludDhfdChUeXBlOjpJMzIpLAor
ICAgIEYzMiA9IHVpbnQ4X3QoVHlwZTo6RjMyKSwKKyAgICBGNjQgPSB1aW50OF90KFR5cGU6OkY2
NCksCisgICAgVm9pZAorfTsKKworY2xhc3MgRXhwciB7CitwdWJsaWM6CisgICAgRXhwcigpCisg
ICAgOiBtX3R5cGUoUlR5cGUoLTEpKSwgdSB7IH0KKyAgICB7CisgICAgfQorICAgIEV4cHIoSTMy
IGkzMikgOiBtX3R5cGUoUlR5cGU6OkkzMikgeyB1LmkzMiA9IGkzMjsgfQorICAgIEV4cHIoRjMy
IGYzMikgOiBtX3R5cGUoUlR5cGU6OkYzMikgeyB1LmYzMiA9IGYzMjsgfQorICAgIEV4cHIoRjY0
IGY2NCkgOiBtX3R5cGUoUlR5cGU6OkY2NCkgeyB1LmY2NCA9IGY2NDsgfQorICAgIEV4cHIoVm9p
ZCB2KSA6IG1fdHlwZShSVHlwZTo6Vm9pZCkgeyB1LnYgPSB2OyB9CisKKyAgICBSVHlwZSB0eXBl
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgSTMyIGkzMigpIGNvbnN0IHsgcmV0dXJu
IHUuaTMyOyB9CisgICAgRjMyIGYzMigpIGNvbnN0IHsgcmV0dXJuIHUuZjMyOyB9CisgICAgRjY0
IGY2NCgpIGNvbnN0IHsgcmV0dXJuIHUuZjY0OyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oRXhw
ciByaHMpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSByaHMubV90eXBlICYmIHUucmF3ID09IHJo
cy51LnJhdzsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShFeHByIHJocykgY29uc3QgeyByZXR1cm4g
ISgqdGhpcyA9PSByaHMpOyB9CisKK3ByaXZhdGU6CisgICAgUlR5cGUgbV90eXBlOworICAgIHVu
aW9uIFUgeworICAgICAgICBJMzIgaTMyOworICAgICAgICBGMzIgZjMyOworICAgICAgICBGNjQg
ZjY0OworICAgICAgICBWb2lkIHY7CisgICAgICAgIHVpbnQ4X3QgcmF3OworICAgIH0gdTsKKwor
ICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFUpID09IHNpemVvZih1aW50OF90KSwgIkV4YWN0IG92
ZXJsYXkgb2YgcmF3XyIpOworfTsKKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgSGFzSW1tRmxhZyA9
IDB4ODA7CitzdGF0aWNfYXNzZXJ0KHVpbnQ4X3QoSTMyOjpCYWQpIDw9IEhhc0ltbUZsYWcsICJN
U0IgcmVzZXJ2ZWQgdG8gZGlzdGluZ3Vpc2ggSTMyIGZyb20gSTMyV2l0aEltbSIpOworc3RhdGlj
X2Fzc2VydCh1aW50OF90KEYzMjo6QmFkKSA8PSBIYXNJbW1GbGFnLCAiTVNCIHJlc2VydmVkIHRv
IGRpc3Rpbmd1aXNoIEYzMiBmcm9tIEYzMldpdGhJbW0iKTsKK3N0YXRpY19hc3NlcnQodWludDhf
dChGNjQ6OkJhZCkgPD0gSGFzSW1tRmxhZywgIk1TQiByZXNlcnZlZCB0byBkaXN0aW5ndWlzaCBG
NjQgZnJvbSBGNjRXaXRoSW1tIik7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBPcFdpdGhJbW1C
aXRzID0gMjsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBPcFdpdGhJbW1MaW1pdCA9IDEgPDwgT3BX
aXRoSW1tQml0czsKK3N0YXRpY19hc3NlcnQodWludDhfdChJMzJXaXRoSW1tOjpCYWQpIDw9IE9w
V2l0aEltbUxpbWl0LCAiSTMyV2l0aEltbSBvcCBmaXRzIik7CitzdGF0aWNfYXNzZXJ0KHVpbnQ4
X3QoRjMyV2l0aEltbTo6QmFkKSA8PSBPcFdpdGhJbW1MaW1pdCwgIkYzMldpdGhJbW0gb3AgZml0
cyIpOworc3RhdGljX2Fzc2VydCh1aW50OF90KEY2NFdpdGhJbW06OkJhZCkgPD0gT3BXaXRoSW1t
TGltaXQsICJGNjRXaXRoSW1tIG9wIGZpdHMiKTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIElt
bUJpdHMgPSA1Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IEltbUxpbWl0ID0gMSA8PCBJbW1CaXRz
Oworc3RhdGljX2Fzc2VydCgoMSArIE9wV2l0aEltbUJpdHMgKyBJbW1CaXRzKSA9PSA4LCAiQml0
cyBvZiBpbW1lZGlhdGUgb3Agc2hvdWxkIGFkZCB1cCB0byBhIGJ5dGUiKTsKKworc3RhdGljIGlu
bGluZSB1aW50OF90IFBhY2tPcFdpdGhJbW0odWludDhfdCBvcCwgdWludDhfdCBpbW0pCit7Cisg
ICAgYXNzZXJ0KG9wIDwgT3BXaXRoSW1tTGltaXQpOworICAgIGFzc2VydChpbW0gPCBJbW1MaW1p
dCk7CisgICAgcmV0dXJuIEhhc0ltbUZsYWcgfCAodWludDhfdChvcCkgPDwgSW1tQml0cykgfCBp
bW07Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUV2l0aEltbT4KK3N0YXRpYyBpbmxpbmUgdm9pZCBV
bnBhY2tPcFdpdGhJbW0odWludDhfdCBieXRlLCBUV2l0aEltbSogb3AsIHVpbnQ4X3QgKmltbSkK
K3sKKyAgICBhc3NlcnQoYnl0ZSAmIEhhc0ltbUZsYWcpOworICAgICpvcCA9IFRXaXRoSW1tKChi
eXRlID4+IEltbUJpdHMpICYgKE9wV2l0aEltbUxpbWl0IC0gMSkpOworICAgICppbW0gPSBieXRl
ICYgKEltbUxpbWl0IC0gMSk7Cit9CisKK2NsYXNzIEV4cHJXaXRoSW1tIHsKK3B1YmxpYzoKKyAg
ICBFeHByV2l0aEltbSgpCisgICAgICAgIDogbV90eXBlKFR5cGUoLTEpKQorICAgIHsKKyAgICB9
CisgICAgRXhwcldpdGhJbW0oSTMyV2l0aEltbSBpMzIpIDogbV90eXBlKFR5cGU6OkkzMikgeyB1
LmkzMiA9IGkzMjsgfQorICAgIEV4cHJXaXRoSW1tKEYzMldpdGhJbW0gZjMyKSA6IG1fdHlwZShU
eXBlOjpGMzIpIHsgdS5mMzIgPSBmMzI7IH0KKyAgICBFeHByV2l0aEltbShGNjRXaXRoSW1tIGY2
NCkgOiBtX3R5cGUoVHlwZTo6RjY0KSB7IHUuZjY0ID0gZjY0OyB9CisKKyAgICBUeXBlIHR5cGUo
KSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBJMzJXaXRoSW1tIGkzMigpIGNvbnN0IHsg
cmV0dXJuIHUuaTMyOyB9CisgICAgRjMyV2l0aEltbSBmMzIoKSBjb25zdCB7IHJldHVybiB1LmYz
MjsgfQorICAgIEY2NFdpdGhJbW0gZjY0KCkgY29uc3QgeyByZXR1cm4gdS5mNjQ7IH0KKworcHJp
dmF0ZToKKyAgICBUeXBlIG1fdHlwZTsKKyAgICB1bmlvbiBVIHsKKyAgICAgICAgSTMyV2l0aElt
bSBpMzI7CisgICAgICAgIEYzMldpdGhJbW0gZjMyOworICAgICAgICBGNjRXaXRoSW1tIGY2NDsK
KyAgICAgICAgdWludDhfdCByYXc7CisgICAgfSB1OworCisgICAgc3RhdGljX2Fzc2VydChzaXpl
b2YoVSkgPT0gc2l6ZW9mKHVpbnQ4X3QpLCAiRXhhY3Qgb3ZlcmxheSBvZiByYXdfIik7Cit9Owor
CitlbnVtIGNsYXNzIEV4cG9ydEZvcm1hdCA6IHVpbnQ4X3QgeworICAgIERlZmF1bHQsCisgICAg
UmVjb3JkCit9OworCitlbnVtIGNsYXNzIFNpZ25lZG5lc3MgeyBTaWduZWQsIFVuc2lnbmVkIH07
CisKK3N0cnVjdCBTaWduYXR1cmUgeworICAgIFJUeXBlIHJldDsKKyAgICBWZWN0b3I8VHlwZT4g
YXJnczsKKworICAgIFNpZ25hdHVyZSgpIHsgfQorICAgIFNpZ25hdHVyZShSVHlwZSByZXQpCisg
ICAgICAgIDogcmV0KHJldCkgeyB9CisgICAgU2lnbmF0dXJlKFJUeXBlIHJldCwgdWludDMyX3Qg
bnVtQXJncykKKyAgICAgICAgOiByZXQocmV0KQorICAgICAgICAsIGFyZ3MobnVtQXJncykgeyB9
CisgICAgU2lnbmF0dXJlKFJUeXBlIHJldCwgVmVjdG9yPFR5cGU+JiYgYXJncykKKyAgICAgICAg
OiByZXQocmV0KQorICAgICAgICAsIGFyZ3MoV1RGOjptb3ZlKGFyZ3MpKSB7IH0KKworICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBTaWduYXR1cmUmIHJocykgY29uc3QgeyByZXR1cm4gcmV0ID09
IHJocy5yZXQgJiYgYXJncyA9PSByaHMuYXJnczsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBTaWduYXR1cmUmIHJocykgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSByaHMpOyB9CisKKyAg
ICBzdHJ1Y3QgSGFzaCB7CisgICAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBTaWduYXR1cmUg
JnNpZykgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2Yo
VHlwZSkgPT0gMSAmJiBzaXplb2YoUlR5cGUpID09IDEsICJTaGlmdCBtb3JlIik7CisgICAgICAg
ICAgICB1aW50MzJfdCBoID0gdWludDhfdChzaWcucmV0KTsKKyAgICAgICAgICAgIGZvciAoVHlw
ZSB0IDogc2lnLmFyZ3MpCisgICAgICAgICAgICAgICAgaCA9ICgoaCA8PCAyKSB8IHVpbnQ4X3Qo
dCkpIF4gKGggPj4gMzApOworICAgICAgICAgICAgcmV0dXJuIGg7CisgICAgICAgIH0KKyAgICB9
OworfTsKKworY2xhc3MgSW4geworcHVibGljOgorICAgIEluKCkgeyB9CisgICAgSW4oY29uc3Qg
dWludDhfdCogYmVnaW4pCisgICAgICAgIDogbV9jdXJzb3IoYmVnaW4pCisgICAgeworICAgIH0K
KworICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBUIGZpeGVkV2lkdGgoKTsKKyAgICBTdG10IHN0bXQo
KSB7IHJldHVybiB1ODxTdG10PigpOyB9CisgICAgU3dpdGNoQ2FzZSBzd2l0Y2hDYXNlKCkgeyBy
ZXR1cm4gdTg8U3dpdGNoQ2FzZT4oKTsgfQorICAgIHRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFRX
aXRoSW1tPiBpbmxpbmUgYm9vbCBjb2RlKFQqLCBUV2l0aEltbSosIHVpbnQ4X3QqKTsKKyAgICBW
b2lkIHZvaWRFeHByKCkgeyByZXR1cm4gdTg8Vm9pZD4oKTsgfQorICAgIEV4cG9ydEZvcm1hdCBl
eHBvcnRGb3JtYXQoKSB7IHJldHVybiB1ODxFeHBvcnRGb3JtYXQ+KCk7IH0KKyAgICBUeXBlIHR5
cGUoKSB7IHJldHVybiB1ODxUeXBlPigpOyB9CisgICAgUlR5cGUgcnR5cGUoKSB7IHJldHVybiB1
ODxSVHlwZT4oKTsgfQorICAgIGlubGluZSB1aW50MzJfdCBpbW1VMzIoKTsKKyAgICBpbmxpbmUg
aW50MzJfdCBpbW1TMzIoKTsKKyAgICBjaGFyIHNpbmdsZUNoYXIoKSB7IHJldHVybiAqbV9jdXJz
b3IrKzsgfQorCisgICAgaW5saW5lIGJvb2wgaWZJMzJMaXQoY29uc3QgVmVjdG9yPHVpbnQzMl90
PiYgaTMycywgdWludDMyX3QqKTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4g
VCB1OCgpIHsgcmV0dXJuIFQoKm1fY3Vyc29yKyspOyB9CisKKyAgICBjb25zdCB1aW50OF90KiBt
X2N1cnNvcjsKK307CisKK3RlbXBsYXRlIDw+CitpbmxpbmUgdWludDMyX3QgSW46OmZpeGVkV2lk
dGg8dWludDMyX3Q+KCkKK3sKKyAgICB1aW50MzJfdCB1MzIgPSBtX2N1cnNvclswXSB8IG1fY3Vy
c29yWzFdIDw8IDggfCBtX2N1cnNvclsyXSA8PCAxNiB8IG1fY3Vyc29yWzNdIDw8IDI0OworICAg
IG1fY3Vyc29yICs9IDQ7CisgICAgcmV0dXJuIHUzMjsKK30KKwordGVtcGxhdGUgPD4KK2lubGlu
ZSBmbG9hdCBJbjo6Zml4ZWRXaWR0aDxmbG9hdD4oKQoreworICAgIHVuaW9uIHsKKyAgICAgICAg
dWludDhfdCBhcnJbNF07CisgICAgICAgIGZsb2F0IGY7CisgICAgfSB1ID0geyB7IG1fY3Vyc29y
WzBdLCBtX2N1cnNvclsxXSwgbV9jdXJzb3JbMl0sIG1fY3Vyc29yWzNdIH0gfTsKKyAgICBtX2N1
cnNvciArPSA0OworICAgIHJldHVybiB1LmY7Cit9CisKK3RlbXBsYXRlIDw+CitpbmxpbmUgZG91
YmxlIEluOjpmaXhlZFdpZHRoPGRvdWJsZT4oKQoreworICAgIHVuaW9uIHsKKyAgICAgICAgdWlu
dDhfdCBhcnJbOF07CisgICAgICAgIGRvdWJsZSBkOworICAgIH0gdSA9IHsgeyBtX2N1cnNvclsw
XSwgbV9jdXJzb3JbMV0sIG1fY3Vyc29yWzJdLCBtX2N1cnNvclszXSwgbV9jdXJzb3JbNF0sIG1f
Y3Vyc29yWzVdLCBtX2N1cnNvcls2XSwgbV9jdXJzb3JbN10gfSB9OworICAgIG1fY3Vyc29yICs9
IDg7CisgICAgcmV0dXJuIHUuZDsKK30KKwordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRXaXRo
SW1tPgorYm9vbCBJbjo6Y29kZShUKiB0LCBUV2l0aEltbSogdFdpdGhJbW0sIHVpbnQ4X3QqIGlt
bSkKK3sKKyAgICB1aW50OF90IGJ5dGUgPSAqbV9jdXJzb3IrKzsKKyAgICBpZiAoIShieXRlICYg
SGFzSW1tRmxhZykpIHsKKyAgICAgICAgKnQgPSBUKGJ5dGUpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBVbnBhY2tPcFdpdGhJbW0oYnl0ZSwgdFdpdGhJbW0sIGltbSk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxpbmUgdWludDMyX3QgSW46OmltbVUzMigpCit7Cisg
ICAgdWludDMyX3QgdTMyID0gKm1fY3Vyc29yKys7CisgICAgaWYgKHUzMiA8IDB4ODApCisgICAg
ICAgIHJldHVybiB1MzI7CisKKyAgICB1MzIgJj0gMHg3ZjsKKworICAgIGZvciAodW5zaWduZWQg
c2hpZnQgPSA3OyB0cnVlOyBzaGlmdCArPSA3KSB7CisgICAgICAgIHVpbnQzMl90IGIgPSAqbV9j
dXJzb3IrKzsKKyAgICAgICAgaWYgKGIgPCAweDgwKQorICAgICAgICAgICAgcmV0dXJuIHUzMiB8
IChiIDw8IHNoaWZ0KTsKKyAgICAgICAgdTMyIHw9IChiICYgMHg3ZikgPDwgc2hpZnQ7CisgICAg
fQorfQorCitpbmxpbmUgaW50MzJfdCBJbjo6aW1tUzMyKCkKK3sKKyAgICB1aW50MzJfdCB1MzIg
PSAqbV9jdXJzb3IrKzsKKyAgICBpZiAodTMyIDwgMHg4MCkKKyAgICAgICAgcmV0dXJuIGludDMy
X3QodTMyKSA8PCAoMzItNykgPj4gKDMyLTcpOworCisgICAgdTMyICY9IDB4N2Y7CisKKyAgICBm
b3IgKHVuc2lnbmVkIHNoaWZ0ID0gNzsgdHJ1ZTsgc2hpZnQgKz0gNykgeworICAgICAgICB1aW50
MzJfdCBiID0gKm1fY3Vyc29yKys7CisgICAgICAgIGlmIChiIDwgMHg4MCkgeworICAgICAgICAg
ICAgdTMyIHw9IGIgPDwgc2hpZnQ7CisgICAgICAgICAgICBpbnQgc2lnbkV4dGVuZCA9ICgzMi03
KSAtIHNoaWZ0OworICAgICAgICAgICAgaWYgKHNpZ25FeHRlbmQgPiAwKQorICAgICAgICAgICAg
ICAgIHJldHVybiBpbnQzMl90KHUzMikgPDwgc2lnbkV4dGVuZCA+PiBzaWduRXh0ZW5kOworICAg
ICAgICAgICAgcmV0dXJuIGludDMyX3QodTMyKTsKKyAgICAgICAgfQorICAgICAgICB1MzIgfD0g
KGIgJiAweDdmKSA8PCBzaGlmdDsKKyAgICB9Cit9CisKK2lubGluZSBib29sIEluOjppZkkzMkxp
dChjb25zdCBWZWN0b3I8dWludDMyX3Q+JiBpMzJzLCB1aW50MzJfdCogdTMyKQoreworICAgIHVp
bnQ4X3QgYnl0ZSA9ICptX2N1cnNvcjsKKworICAgIGlmIChieXRlICYgSGFzSW1tRmxhZykgewor
ICAgICAgICBJMzJXaXRoSW1tIGkzMldpdGhJbW07CisgICAgICAgIHVpbnQ4X3QgaW1tOworICAg
ICAgICBVbnBhY2tPcFdpdGhJbW0oYnl0ZSwgJmkzMldpdGhJbW0sICZpbW0pOworCisgICAgICAg
IGlmIChpMzJXaXRoSW1tID09IEkzMldpdGhJbW06OkxpdEltbSkgeworICAgICAgICAgICAgbV9j
dXJzb3IrKzsKKyAgICAgICAgICAgICp1MzIgPSBpbW07CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpMzJXaXRoSW1tID09IEkzMldpdGhJbW06Okxp
dFBvb2wpIHsKKyAgICAgICAgICAgIG1fY3Vyc29yKys7CisgICAgICAgICAgICAqdTMyID0gaTMy
c1tpbW1dOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKEkzMihieXRlKSA9PSBJMzI6OkxpdEltbSkg
eworICAgICAgICBtX2N1cnNvcisrOworICAgICAgICAqdTMyID0gaW1tVTMyKCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChJMzIoYnl0ZSkgPT0gSTMyOjpMaXRQb29s
KSB7CisgICAgICAgIG1fY3Vyc29yKys7CisgICAgICAgICp1MzIgPSBpMzJzW2ltbVUzMigpXTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gV2FzbU9wY29kZXNfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256074</attachid>
            <date>2015-07-02 22:47:20 -0700</date>
            <delta_ts>2015-07-04 10:31:43 -0700</delta_ts>
            <desc>work in progress, based on https://github.com/WebAssembly/polyfill-prototype-1</desc>
            <filename>bug-146064-20150702224626.patch</filename>
            <type>text/plain</type>
            <size>59775</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1Nzk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
ZGMwZDVjOTQ5M2QxMTVlODMxMzdlYmU3Zjk1NGI3ZjgyZDUwZDI1Li44ZGU1NTFjYzhjMzliNDhm
ZWIyYTQ3MGZmNzljNGU1NmNjZmYxMGM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDggQEAKKzIwMTUtMDctMDIgIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0Bn
bWFpbC5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBuYXRpdmVseSBzdXBwb3J0IFdlYkFzc2Vt
Ymx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYw
NjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICoganNjLmNw
cDoKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoZnVu
Y3Rpb25Mb2FkV2ViQXNzZW1ibHkpOgorICAgICAgICAqIHdhc20vV2FzbUpJVENvbXBpbGVyLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206Okp1bXBTY29wZTo6SnVtcFNjb3BlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6SnVtcFNjb3BlOjpqdW1wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
SnVtcFNjb3BlOjpsaW5rKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OmNvbXBp
bGVBbmRSdW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6Y29tcGlsZSk6Cisg
ICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZSk6CisgICAgICAgIChKU0M6Oldh
c206OkpJVENvbXBpbGVyOjpwYXJzZUNvbnN0YW50UG9vbFNlY3Rpb24pOgorICAgICAgICAoSlND
OjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VTaWduYXR1cmVTZWN0aW9uKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlRnVuY3Rpb25JbXBvcnRTZWN0aW9uKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlR2xvYmFsU2VjdGlvbik6CisgICAgICAg
IChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9u
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlRnVuY3Rpb25Qb2ludGVy
VGFibGVzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlRnVuY3Rpb25E
ZWZpbml0aW9uU2VjdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJz
ZUV4cG9ydFNlY3Rpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VG
dW5jdGlvbkRlZmluaXRpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFy
c2VBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VWYXJz
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlU3RtdCk6CisgICAgICAg
IChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlU2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpK
SVRDb21waWxlcjo6cGFyc2VSZXR1cm5TdG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29t
cGlsZXI6OnBhcnNlU3RtdExpc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6
cGFyc2VCbG9ja1N0bXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VJ
ZlN0bXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VJZkVsc2VTdG10
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlV2hpbGVTdG10KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlRG9TdG10KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlTGFiZWxTdG10KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6SklUQ29tcGlsZXI6OnBhcnNlQnJlYWtMYWJlbFN0bXQpOgorICAgICAgICAoSlNDOjpXYXNt
OjpKSVRDb21waWxlcjo6cGFyc2VDb250aW51ZUxhYmVsU3RtdCk6CisgICAgICAgIChKU0M6Oldh
c206OkpJVENvbXBpbGVyOjpwYXJzZVN3aXRjaFN0bXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpK
SVRDb21waWxlcjo6cGFyc2VFeHByKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6
OnBhcnNlU2lnbmVkRXhwcik6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJz
ZUFkZFN1Yik6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZU11bEkzMik6
CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZVJlbEkzMik6CisgICAgICAg
IChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZUNvbW1hKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6SklUQ29tcGlsZXI6OnBhcnNlQ29uZCk6CisgICAgICAgIChKU0M6Oldhc206OmNvbXBpbGVB
bmRSdW4pOgorICAgICAgICAqIHdhc20vV2FzbUpJVENvbXBpbGVyLmg6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6SklUQ29tcGlsZXIpOgorICAgICAgICAoSlNDOjpX
YXNtOjpKSVRDb21waWxlcjo6c3RhY2tBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklU
Q29tcGlsZXI6OnRlbXBvcmFyeUFkZHJlc3MpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21w
aWxlcjo6cHVzaENvbnRpbnVlTGFiZWxMYWJlbCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENv
bXBpbGVyOjpwb3BDb250aW51ZUxhYmVsTGFiZWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRD
b21waWxlcjo6Y29udGludWVMYWJlbExhYmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29t
cGlsZXI6OnB1c2hCcmVha0xhYmVsSnVtcExpc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRD
b21waWxlcjo6cG9wQnJlYWtMYWJlbEp1bXBMaXN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklU
Q29tcGlsZXI6OmJyZWFrTGFiZWxKdW1wTGlzdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENv
bXBpbGVyOjpwdXNoQ29udGludWVKdW1wU2NvcGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRD
b21waWxlcjo6cG9wQ29udGludWVKdW1wU2NvcGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRD
b21waWxlcjo6dG9wQ29udGludWVKdW1wU2NvcGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRD
b21waWxlcjo6cHVzaEJyZWFrSnVtcExpc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21w
aWxlcjo6cG9wQnJlYWtKdW1wTGlzdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVy
Ojp0b3BCcmVha0p1bXBMaXN0KToKKyAgICAgICAgKiB3YXNtL1dhc21PcGNvZGVzLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpXYXNtOjpvcGVyYXRvcnwgKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
b3BlcmF0b3ImKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcjo6RXhwcik6CisgICAgICAgIChK
U0M6Oldhc206OkV4cHI6OnR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpFeHByOjppMzIpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpFeHByOjpmMzIpOgorICAgICAgICAoSlNDOjpXYXNtOjpFeHBy
OjpmNjQpOgorICAgICAgICAoSlNDOjpXYXNtOjpFeHByOjpvcGVyYXRvcj09KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6RXhwcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6Oldhc206OlBhY2tP
cFdpdGhJbW0pOgorICAgICAgICAoSlNDOjpXYXNtOjpVbnBhY2tPcFdpdGhJbW0pOgorICAgICAg
ICAoSlNDOjpXYXNtOjpFeHByV2l0aEltbTo6RXhwcldpdGhJbW0pOgorICAgICAgICAoSlNDOjpX
YXNtOjpFeHByV2l0aEltbTo6dHlwZSk6CisgICAgICAgIChKU0M6Oldhc206OkV4cHJXaXRoSW1t
OjppMzIpOgorICAgICAgICAoSlNDOjpXYXNtOjpFeHByV2l0aEltbTo6ZjMyKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6RXhwcldpdGhJbW06OmY2NCk6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25h
dHVyZTo6U2lnbmF0dXJlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0dXJlOjpvcGVyYXRv
cj09KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0dXJlOjpvcGVyYXRvciE9KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6U2lnbmF0dXJlOjpIYXNoOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6SW46OkluKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW46OnN0bXQpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpJbjo6c3dpdGNoQ2FzZSk6CisgICAgICAgIChKU0M6Oldhc206OkluOjp2
b2lkRXhwcik6CisgICAgICAgIChKU0M6Oldhc206OkluOjpleHBvcnRGb3JtYXQpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpJbjo6dHlwZSk6CisgICAgICAgIChKU0M6Oldhc206OkluOjpydHlwZSk6
CisgICAgICAgIChKU0M6Oldhc206OkluOjpzaW5nbGVDaGFyKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6SW46OnU4KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW46OmZpeGVkV2lkdGg8dWludDMyX3Q+
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW46OmZpeGVkV2lkdGg8ZmxvYXQ+KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6SW46OmZpeGVkV2lkdGg8ZG91YmxlPik6CisgICAgICAgIChKU0M6Oldhc206
OkluOjpjb2RlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW46OmltbVUzMik6CisgICAgICAgIChK
U0M6Oldhc206OkluOjppbW1TMzIpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbjo6aWZJMzJMaXQp
OgorCiAyMDE1LTA2LTIwICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgog
CiAgICAgICAgIFtFUzZdIERlc3RydWN0dXJpbmcgYXNzaWdubWVudCBuZWVkIHRvIGFjY2VwdCBp
dGVyYWJsZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMGZjYjA5MmU3NzFkZWFh
NTk1ZjU0YmMzNmMzZGE4M2IwZjgwMDc5Ni4uMDc0ZjZhNjU2YjlhYWE3ZGEzYzZjNjZjNWMwYjQ5
NDU3ZGJmOWFiNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMTYsNiArMTAx
Niw5IEBACiAJCTcwRUNBNjA3MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjAy
MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmNwcCAqLzsgfTsKIAkJNzBFQ0E2
MDgxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjAzMUFGREJFQTIwMDQ0OTczOSAv
KiBUZW1wbGF0ZVJlZ2lzdHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNzBFQ0E2MDkxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0
cnlLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcw
RUNBNjA0MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0IyRDA0QUIxQjQ2NTdD
QTAwRjdDNDcxIC8qIFdhc21KSVRDb21waWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjJEMDRBODFCNDY1N0M3MDBGN0M0NzEgLyogV2FzbUpJ
VENvbXBpbGVyLmNwcCAqLzsgfTsKKwkJN0IyRDA0QUMxQjQ2NTdDRDAwRjdDNDcxIC8qIFdhc21K
SVRDb21waWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0IyRDA0QTkxQjQ2NTdDNzAwRjdDNDcxIC8qIFdhc21KSVRDb21waWxlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCMkQwNEFEMUI0NjU3
RDIwMEY3QzQ3MSAvKiBXYXNtT3Bjb2Rlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0IyRDA0QUExQjQ2NTdDNzAwRjdDNDcxIC8qIFdhc21PcGNvZGVz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0Mw
MDhDRDIxODZGOEE5MzAwOTU1QzI0IC8qIEpTUHJvbWlzZUZ1bmN0aW9ucy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzAwOENEMDE4NkY4QTkzMDA5
NTVDMjQgLyogSlNQcm9taXNlRnVuY3Rpb25zLmNwcCAqLzsgfTsKIAkJN0MwMDhDRDMxODZGOEE5
MzAwOTU1QzI0IC8qIEpTUHJvbWlzZUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwMDhDRDExODZGOEE5MzAwOTU1QzI0IC8qIEpTUHJv
bWlzZUZ1bmN0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTdDMDA4Q0RBMTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzAwOENE
ODE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQuY3BwICovOyB9OwpAQCAtMjc1
OCw2ICsyNzYxLDkgQEAKIAkJNzBFQ0E2MDIxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVn
aXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVtcGxhdGVS
ZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwRUNBNjAzMUFGREJF
QTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeUtleS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QjJEMDRBODFCNDY1N0M3MDBGN0M0NzEgLyogV2Fz
bUpJVENvbXBpbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdh
c21KSVRDb21waWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCMkQwNEE5
MUI0NjU3QzcwMEY3QzQ3MSAvKiBXYXNtSklUQ29tcGlsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2FzbUpJVENvbXBpbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTdCMkQwNEFBMUI0NjU3QzcwMEY3QzQ3MSAvKiBXYXNtT3Bjb2Rlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtT3Bjb2Rlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3QzAwOENEMDE4NkY4QTkzMDA5NTVDMjQgLyogSlNQcm9taXNlRnVuY3Rp
b25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbGluZUVuZGluZyA9IDA7IHBh
dGggPSBKU1Byb21pc2VGdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xh
bmd1YWdlU3BlY2lmaWNhdGlvbklkZW50aWZpZXIgPSB4Y29kZS5sYW5nLmNwcDsgfTsKIAkJN0Mw
MDhDRDExODZGOEE5MzAwOTU1QzI0IC8qIEpTUHJvbWlzZUZ1bmN0aW9ucy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1Byb21pc2VGdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0MwMDhDRDgxODcxMjRCQjAwOTU1QzI0IC8qIEpTUHJvbWlzZURl
ZmVycmVkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUHJvbWlz
ZURlZmVycmVkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2MTcsNiArMzYy
Myw3IEBACiAJCQkJN0VGNkUwQkIwRUI3QTFFQzAwNzlBRkFGIC8qIHJ1bnRpbWUgKi8sCiAJCQkJ
MTQxMjExMDAwQTQ4NzcyNjAwNDgwMjU1IC8qIHRlc3RzICovLAogCQkJCTg2MDNDRUYwMTRDNzUz
RUYwMEFFNTlFMyAvKiB0b29scyAqLywKKwkJCQk3QjJEMDRBNzFCNDY1N0FDMDBGN0M0NzEgLyog
d2FzbSAqLywKIAkJCQk4NkVBQzQ4QzBGOTNFOEI5MDA4RUM5NDggLyogeWFyciAqLywKIAkJCSk7
CiAJCQluYW1lID0gSmF2YVNjcmlwdENvcmU7CkBAIC00MjgwLDYgKzQyODcsMTYgQEAKIAkJCXBh
dGggPSBkaXNhc3NlbWJsZXIvQVJNdjc7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9
OworCQk3QjJEMDRBNzFCNDY1N0FDMDBGN0M0NzEgLyogd2FzbSAqLyA9IHsKKwkJCWlzYSA9IFBC
WEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJN0IyRDA0QTgxQjQ2NTdDNzAwRjdDNDcxIC8q
IFdhc21KSVRDb21waWxlci5jcHAgKi8sCisJCQkJN0IyRDA0QTkxQjQ2NTdDNzAwRjdDNDcxIC8q
IFdhc21KSVRDb21waWxlci5oICovLAorCQkJCTdCMkQwNEFBMUI0NjU3QzcwMEY3QzQ3MSAvKiBX
YXNtT3Bjb2Rlcy5oICovLAorCQkJKTsKKwkJCXBhdGggPSB3YXNtOworCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKKwkJfTsKIAkJN0UzOUQ4MUQwRUMzOEVGQTAwM0FGMTFBIC8qIGJ5dGVjb21w
aWxlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC02MDQz
LDYgKzYwNjAsNyBAQAogCQkJCUJDMThDNDBGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBJZGVudGlmaWVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA3NjE4OUIwMzhDMDA2MzMyMzEgLyogSWRlbnRp
ZmllcnNGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTYyMzFFOTE4RDE4MDQyMDBDMDNG
REEgLyogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzIGluIEhlYWRlcnMgKi8sCisJCQkJN0Iy
RDA0QUQxQjQ2NTdEMjAwRjdDNDcxIC8qIFdhc21PcGNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDMjVGOEJDRTE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkI3RjM5OTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdIZWFkZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlBMTVFRDhFNDYwMEYxNjdCMiAvKiBJbmRleGlu
Z0hlYWRlcklubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjE0NSw2ICs2MTYzLDcgQEAKIAkJ
CQk4NkUzQzYxMzE2N0JBQkQ3MDA2RDc2MEEgLyogSlNDb250ZXh0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NkUzQzYxNzE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDNDFFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NvbnRleHRSZWYu
aCBpbiBIZWFkZXJzICovLAorCQkJCTdCMkQwNEFDMUI0NjU3Q0QwMEY3QzQ3MSAvKiBXYXNtSklU
Q29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0OENEMUQ4MTA4Q0Y5MDIwMDgxNjNDNiAv
KiBKU0NvbnRleHRSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzIwMjhCODE3OTc2
MDFFMDA5ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
Rjc1NzZEMzE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCBp
biBIZWFkZXJzICovLApAQCAtNzE2Nyw2ICs3MTg2LDcgQEAKIAkJCQkwRkYwRjE5QzE2QjcyQTAz
MDA1REY5NUIgLyogREZHTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE1ODFCQTE1MEU5
NTJDMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5
RENGMTMyOERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTdCMkQwNEFCMUI0NjU3Q0EwMEY3QzQ3MSAvKiBXYXNtSklUQ29tcGlsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTdEODlDRkQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFNTYxNDFEQUYw
ODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzI1
MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggOTEyNzI1MWI5ZjQ5ZjBkN2QyYzQ2
MDc2MTFhNTYzMDFkNDJjZDlmYi4uZDFjNGI3NTRlNDZjOTk0MTY0NmJkYjg5ZGI1ZThkMmYyOWQz
ZjhjMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJT
dHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCIKICNpbmNsdWRlICJUZXN0UnVubmVyVXRpbHMuaCIK
ICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKKyNpbmNsdWRlICJXYXNtSklUQ29tcGlsZXIu
aCIKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRs
aWIuaD4KQEAgLTQ5MCw2ICs0OTEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvblJldHVyblR5cGVGb3IoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkR1bXBCYXNpY0Jsb2NrRXhlY3V0aW9uUmFuZ2Vz
KEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25IYXNCYXNpY0Jsb2NrRXhlY3V0ZWQoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVuYWJsZUV4Y2VwdGlvbkZ1enooRXhlY1N0YXRlKik7
CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYWRXZWJBc3Nl
bWJseShFeGVjU3RhdGUqKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykKIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0U2FtcGxpbmdGbGFncyhFeGVj
U3RhdGUqKTsKQEAgLTY1MSw2ICs2NTMsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGFkZEZ1bmN0
aW9uKHZtLCAiaGFzQmFzaWNCbG9ja0V4ZWN1dGVkIiwgZnVuY3Rpb25IYXNCYXNpY0Jsb2NrRXhl
Y3V0ZWQsIDIpOwogCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiZW5hYmxlRXhjZXB0aW9uRnV6
eiIsIGZ1bmN0aW9uRW5hYmxlRXhjZXB0aW9uRnV6eiwgMCk7CisKKyAgICAgICAgYWRkRnVuY3Rp
b24odm0sICJsb2FkV2ViQXNzZW1ibHkiLCBmdW5jdGlvbkxvYWRXZWJBc3NlbWJseSwgMSk7CiAg
ICAgICAgIAogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZ2xv
YmFsRXhlYygpLCAwKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudHMu
c2l6ZSgpOyArK2kpCkBAIC0xMTY1LDYgKzExNjksMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkVuYWJsZUV4Y2VwdGlvbkZ1enooRXhlY1N0YXRlKikKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZFdlYkFzc2VtYmx5KEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICBTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7CisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICBpZiAoIWZpbGxCdWZm
ZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZU5hbWUsIGJ1ZmZlcikpCisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVFcnJv
cihleGVjLCBBU0NJSUxpdGVyYWwoIkNvdWxkIG5vdCBvcGVuIGZpbGUuIikpKSk7CisgICAgSlNW
YWx1ZSByZXN1bHQgPSBXYXNtOjpjb21waWxlQW5kUnVuKGV4ZWMsIGJ1ZmZlcik7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCiAvLyBVc2UgU0VIIGZvciBSZWxlYXNl
IGJ1aWxkcyBvbmx5IHRvIGdldCByaWQgb2YgdGhlIGNyYXNoIHJlcG9ydCBkaWFsb2cKIC8vIChs
dWNraWx5IHRoZSBzYW1lIHRlc3RzIGZhaWwgaW4gUmVsZWFzZSBhbmQgRGVidWcgYnVpbGRzIHNv
IGZhcikuIE5lZWQgdG8KIC8vIGJlIGluIGEgc2VwYXJhdGUgbWFpbiBmdW5jdGlvbiBiZWNhdXNl
IHRoZSBqc2NtYWluIGZ1bmN0aW9uIHJlcXVpcmVzIG9iamVjdApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUpJVENvbXBpbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21KSVRDb21waWxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTgxNzhkOTlmYzky
NDczYmM4NzM3NWM1NDgzYTUyOWMwYzBkZTQwMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21KSVRDb21waWxlci5jcHAKQEAgLTAsMCArMSw4NjIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorIExpY2Vu
c2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIp
OworIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0
aGUgTGljZW5zZS4KKyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAK
KyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAKKyBVbmxlc3Mg
cmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3
YXJlCisgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4g
IkFTIElTIiBCQVNJUywKKyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkg
S0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRo
ZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgbGltaXRhdGlv
bnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2FzbUpJVENvbXBpbGVyLmgiCisKKyNpbmNsdWRlICJKSVRDb2RlLmgiCisjaW5jbHVkZSAi
SlNDYWxsZWUuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiUHJvdG9DYWxs
RnJhbWUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXYXNtIHsKKworY2xhc3Mg
SnVtcFNjb3BlIHsKK3B1YmxpYzoKKyAgICBKdW1wU2NvcGUoTWFjcm9Bc3NlbWJsZXIqIG1hY3Jv
QXNzZW1ibGVyKQorICAgICAgICA6IG1fbWFjcm9Bc3NlbWJsZXIobWFjcm9Bc3NlbWJsZXIpCisg
ICAgICAgICwgbV9saW5rZWQoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIEp1bXBTY29wZShN
YWNyb0Fzc2VtYmxlciogbWFjcm9Bc3NlbWJsZXIsIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCYgbGFiZWwpCisgICAgICAgIDogbV9tYWNyb0Fzc2VtYmxlcihtYWNyb0Fzc2VtYmxlcikKKyAg
ICAgICAgLCBtX2xpbmtlZCh0cnVlKQorICAgICAgICAsIG1fbGFiZWwobGFiZWwpCisgICAgewor
ICAgIH0KKworICAgIHZvaWQganVtcCgpCisgICAgeworICAgICAgICBpZiAobV9saW5rZWQpCisg
ICAgICAgICAgICBtX21hY3JvQXNzZW1ibGVyLT5qdW1wKG1fbGFiZWwpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX2p1bXBMaXN0LmFwcGVuZChtX21hY3JvQXNzZW1ibGVyLT5qdW1wKCkp
OworICAgIH0KKworICAgIHZvaWQgbGluaygpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fbGlu
a2VkKTsKKyAgICAgICAgbV9qdW1wTGlzdC5saW5rKG1fbWFjcm9Bc3NlbWJsZXIpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBNYWNyb0Fzc2VtYmxlciogbV9tYWNyb0Fzc2VtYmxlcjsKKyAgICBi
b29sIG1fbGlua2VkOworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX2xhYmVsOworICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2p1bXBMaXN0OworfTsKKworSlNWYWx1ZSBKSVRDb21w
aWxlcjo6Y29tcGlsZUFuZFJ1bihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFZlY3RvcjxjaGFyPiYg
YnVmZmVyKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgUmVmUHRyPEpJVENvZGU+
IGppdENvZGUgPSBjb21waWxlKHZtLCBidWZmZXIpOworCisgICAgUHJvdG9DYWxsRnJhbWUgcHJv
dG9DYWxsRnJhbWU7CisgICAgcHJvdG9DYWxsRnJhbWUuaW5pdCgwLCBKU0NhbGxlZTo6Y3JlYXRl
KHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSksIGpzVW5kZWZpbmVkKCksIDEpOworCisgICAgcmV0dXJuIGppdENvZGUtPmV4ZWN1dGUo
JnZtLCAmcHJvdG9DYWxsRnJhbWUpOworfQorCitSZWZQdHI8SklUQ29kZT4gSklUQ29tcGlsZXI6
OmNvbXBpbGUoVk0mIHZtLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICBlbWl0
RnVuY3Rpb25Qcm9sb2d1ZSgpOworCisgICAgbV9yZWFkID0gSW4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50OF90Kj4oYnVmZmVyLmRhdGEoKSkpOworICAgIHBhcnNlKCk7CisKKyAgICBib3hJ
bnQ1MihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQ
UkluZm86OnJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICBlbWl0RnVuY3Rpb25FcGlsb2d1
ZSgpOworICAgIHJldCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih2bSwgKnRoaXMs
IDAsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciB3aXRoQXJpdHlDaGVjazsKKyAgICBDb2RlUmVmIHJlc3VsdCA9IEZJTkFMSVpFX0NPREUocGF0
Y2hCdWZmZXIsICgiQmFzZWxpbmUgSklUIGNvZGUgZm9yIFdlYkFzc2VtYmx5IikpOworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCBK
SVRDb2RlOjpCYXNlbGluZUpJVCkpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZSgpCit7
CisgICAgaWYgKG1fcmVhZC5maXhlZFdpZHRoPHVpbnQzMl90PigpICE9IE1hZ2ljTnVtYmVyKQor
ICAgICAgICBhYm9ydCgpOworICAgIG1fcmVhZC5maXhlZFdpZHRoPHVpbnQzMl90PigpOyAvLyBv
dXRwdXQgc2l6ZSBpbiBhc20uanMgZm9ybWF0CisKKyAgICBwYXJzZUNvbnN0YW50UG9vbFNlY3Rp
b24oKTsKKyAgICBwYXJzZVNpZ25hdHVyZVNlY3Rpb24oKTsKKyAgICBwYXJzZUZ1bmN0aW9uSW1w
b3J0U2VjdGlvbigpOworICAgIHBhcnNlR2xvYmFsU2VjdGlvbigpOworICAgIHBhcnNlRnVuY3Rp
b25EZWNsYXJhdGlvblNlY3Rpb24oKTsKKyAgICBwYXJzZUZ1bmN0aW9uUG9pbnRlclRhYmxlcygp
OworICAgIHBhcnNlRnVuY3Rpb25EZWZpbml0aW9uU2VjdGlvbigpOworICAgIHBhcnNlRXhwb3J0
U2VjdGlvbigpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUNvbnN0YW50UG9vbFNlY3Rp
b24oKQoreworICAgIHVpbnQzMl90IG51bWJlck9mSTMycyA9IG1fcmVhZC5pbW1VMzIoKTsKKyAg
ICB1aW50MzJfdCBudW1iZXJPZkYzMnMgPSBtX3JlYWQuaW1tVTMyKCk7CisgICAgdWludDMyX3Qg
bnVtYmVyT2ZGNjRzID0gbV9yZWFkLmltbVUzMigpOworCisgICAgVmVjdG9yPHVpbnQzMl90PiBp
MzJzKG51bWJlck9mSTMycyk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9m
STMyczsgKytpKQorICAgICAgICBpMzJzW2ldID0gbV9yZWFkLmltbVUzMigpOworCisgICAgVmVj
dG9yPGZsb2F0PiBmMzJzKG51bWJlck9mRjMycyk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsg
aSA8IG51bWJlck9mRjMyczsgKytpKQorICAgICAgICBmMzJzW2ldID0gbV9yZWFkLmZpeGVkV2lk
dGg8ZmxvYXQ+KCk7CisKKyAgICBWZWN0b3I8ZG91YmxlPiBmNjRzKG51bWJlck9mRjY0cyk7Cisg
ICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mRjY0czsgKytpKQorICAgICAgICBm
NjRzW2ldID0gbV9yZWFkLmZpeGVkV2lkdGg8ZG91YmxlPigpOworCisgICAgbV9pMzJzID0gV1RG
Ojptb3ZlKGkzMnMpOworICAgIG1fZjMycyA9IFdURjo6bW92ZShmMzJzKTsKKyAgICBtX2Y2NHMg
PSBXVEY6Om1vdmUoZjY0cyk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlU2lnbmF0dXJl
U2VjdGlvbigpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZTaWduYXR1cmVzID0gbV9yZWFkLmlt
bVUzMigpOworICAgIFZlY3RvcjxTaWduYXR1cmU+IHNpZ25hdHVyZXMobnVtYmVyT2ZTaWduYXR1
cmVzKTsKKyAgICBmb3IgKHVpbnQzMl90IHNpZ25hdHVyZUluZGV4ID0gMDsgc2lnbmF0dXJlSW5k
ZXggPCBudW1iZXJPZlNpZ25hdHVyZXM7ICsrc2lnbmF0dXJlSW5kZXgpIHsKKyAgICAgICAgUlR5
cGUgcmV0ID0gbV9yZWFkLnJ0eXBlKCk7CisgICAgICAgIHVpbnQzMl90IGFyZ3VtZW50Q291bnQg
PSBtX3JlYWQuaW1tVTMyKCk7CisgICAgICAgIFNpZ25hdHVyZSBzaWduYXR1cmUocmV0LCBhcmd1
bWVudENvdW50KTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBhcmd1bWVudEluZGV4ID0gMDsgYXJn
dW1lbnRJbmRleCA8IGFyZ3VtZW50Q291bnQ7ICsrYXJndW1lbnRJbmRleCkKKyAgICAgICAgICAg
IHNpZ25hdHVyZS5hcmd1bWVudHNbYXJndW1lbnRJbmRleF0gPSBtX3JlYWQudHlwZSgpOworICAg
ICAgICBzaWduYXR1cmVzW3NpZ25hdHVyZUluZGV4XSA9IFdURjo6bW92ZShzaWduYXR1cmUpOwor
ICAgIH0KKworICAgIG1fc2lnbmF0dXJlcyA9IFdURjo6bW92ZShzaWduYXR1cmVzKTsKK30KKwor
dm9pZCBKSVRDb21waWxlcjo6cGFyc2VGdW5jdGlvbkltcG9ydFNlY3Rpb24oKQoreworICAgIHVp
bnQzMl90IG51bUZ1bmNJbXBvcnRzID0gbV9yZWFkLmltbVUzMigpOworICAgIHVpbnQzMl90IG51
bUZ1bmNJbXBvcnRTaWduYXR1cmVzID0gbV9yZWFkLmltbVUzMigpOworCisgICAgVmVjdG9yPEZ1
bmNJbXBvcnRTaWduYXR1cmU+IGZ1bmNJbXBvcnRTaWduYXR1cmVzKG51bUZ1bmNJbXBvcnRTaWdu
YXR1cmVzKTsKKyAgICBGdW5jSW1wb3J0U2lnbmF0dXJlKiBmdW5jSW1wb3J0U2lnbmF0dXJlID0g
ZnVuY0ltcG9ydFNpZ25hdHVyZXMuZGF0YSgpOworICAgIGZvciAodWludDMyX3QgZnVuY0ltcG9y
dEluZGV4ID0gMDsgZnVuY0ltcG9ydEluZGV4IDwgbnVtRnVuY0ltcG9ydHM7ICsrZnVuY0ltcG9y
dEluZGV4KSB7CisgICAgICAgIHdoaWxlIChtX3JlYWQuc2luZ2xlQ2hhcigpKSB7IH0KKworICAg
ICAgICB1aW50MzJfdCBudW1iZXJPZlNpZ25hdHVyZXMgPSBtX3JlYWQuaW1tVTMyKCk7CisgICAg
ICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZlNpZ25hdHVyZXM7ICsraSkgewor
ICAgICAgICAgICAgZnVuY0ltcG9ydFNpZ25hdHVyZS0+c2lnbmF0dXJlSW5kZXggPSBtX3JlYWQu
aW1tVTMyKCk7CisgICAgICAgICAgICBmdW5jSW1wb3J0U2lnbmF0dXJlLT5mdW5jSW1wb3J0SW5k
ZXggPSBmdW5jSW1wb3J0SW5kZXg7CisgICAgICAgICAgICBmdW5jSW1wb3J0U2lnbmF0dXJlKys7
CisgICAgICAgIH0KKyAgICB9CisgICAgYXNzZXJ0KGZ1bmNJbXBvcnRTaWduYXR1cmUgPT0gZnVu
Y0ltcG9ydFNpZ25hdHVyZXMuZGF0YSgpICsgbnVtRnVuY0ltcG9ydFNpZ25hdHVyZXMpOworCisg
ICAgbV9mdW5jSW1wb3J0U2lnbmF0dXJlcyA9IFdURjo6bW92ZShmdW5jSW1wb3J0U2lnbmF0dXJl
cyk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlR2xvYmFsU2VjdGlvbigpCit7CisgICAg
dWludDMyX3QgbnVtSTMyWmVybyA9IG1fcmVhZC5pbW1VMzIoKTsKKyAgICB1aW50MzJfdCBudW1G
MzJaZXJvID0gbV9yZWFkLmltbVUzMigpOworICAgIHVpbnQzMl90IG51bUY2NFplcm8gPSBtX3Jl
YWQuaW1tVTMyKCk7CisgICAgdWludDMyX3QgbnVtSTMySW1wb3J0ID0gbV9yZWFkLmltbVUzMigp
OworICAgIHVpbnQzMl90IG51bUYzMkltcG9ydCA9IG1fcmVhZC5pbW1VMzIoKTsKKyAgICB1aW50
MzJfdCBudW1GNjRJbXBvcnQgPSBtX3JlYWQuaW1tVTMyKCk7CisgICAgdWludDMyX3QgbnVtR2xv
YmFsVmFycyA9IG51bUkzMlplcm8gKyBudW1GMzJaZXJvICsgbnVtRjY0WmVybyArIG51bUkzMklt
cG9ydCArIG51bUYzMkltcG9ydCArIG51bUY2NEltcG9ydDsKKworICAgIFZlY3RvcjxUeXBlPiBn
bG9iYWxUeXBlcyhudW1HbG9iYWxWYXJzKTsKKyAgICBzaXplX3QgZ2xvYmFsVHlwZUluZGV4ID0g
MDsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtSTMyWmVybzsgKytpKQorICAgICAg
ICBnbG9iYWxUeXBlc1tnbG9iYWxUeXBlSW5kZXgrK10gPSBUeXBlOjpJMzI7CisgICAgZm9yICh1
aW50MzJfdCBpID0gMDsgaSA8IG51bUYzMlplcm87ICsraSkKKyAgICAgICAgZ2xvYmFsVHlwZXNb
Z2xvYmFsVHlwZUluZGV4KytdID0gVHlwZTo6RjMyOworICAgIGZvciAodWludDMyX3QgaSA9IDA7
IGkgPCBudW1GNjRaZXJvOyArK2kpCisgICAgICAgIGdsb2JhbFR5cGVzW2dsb2JhbFR5cGVJbmRl
eCsrXSA9IFR5cGU6OkY2NDsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtSTMySW1w
b3J0OyArK2kpIHsKKyAgICAgICAgd2hpbGUgKG1fcmVhZC5zaW5nbGVDaGFyKCkpIHsgfQorICAg
ICAgICBnbG9iYWxUeXBlc1tnbG9iYWxUeXBlSW5kZXgrK10gPSBUeXBlOjpJMzI7CisgICAgfQor
ICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1GMzJJbXBvcnQ7ICsraSkgeworICAgICAg
ICB3aGlsZSAobV9yZWFkLnNpbmdsZUNoYXIoKSkgeyB9CisgICAgICAgIGdsb2JhbFR5cGVzW2ds
b2JhbFR5cGVJbmRleCsrXSA9IFR5cGU6OkYzMjsKKyAgICB9CisgICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IG51bUY2NEltcG9ydDsgKytpKSB7CisgICAgICAgIHdoaWxlIChtX3JlYWQuc2lu
Z2xlQ2hhcigpKSB7IH0KKyAgICAgICAgZ2xvYmFsVHlwZXNbZ2xvYmFsVHlwZUluZGV4KytdID0g
VHlwZTo6RjY0OworICAgIH0KKyAgICBtX2dsb2JhbFR5cGVzID0gV1RGOjptb3ZlKGdsb2JhbFR5
cGVzKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uU2Vj
dGlvbigpCit7CisgICAgdWludDMyX3QgbnVtRnVuY3MgPSBtX3JlYWQuaW1tVTMyKCk7CisgICAg
VmVjdG9yPHVpbnQzMl90PiBmdW5jU2lncyhudW1GdW5jcyk7CisgICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IG51bUZ1bmNzOyArK2kpCisgICAgICAgIGZ1bmNTaWdzW2ldID0gbV9yZWFkLmlt
bVUzMigpOworCisgICAgbV9mdW5jU2lncyA9IFdURjo6bW92ZShmdW5jU2lncyk7Cit9CisKK3Zv
aWQgSklUQ29tcGlsZXI6OnBhcnNlRnVuY3Rpb25Qb2ludGVyVGFibGVzKCkKK3sKKyAgICB1aW50
MzJfdCBudW1GdW5jUHRyVGFibGVzID0gbV9yZWFkLmltbVUzMigpOworICAgIFZlY3RvcjxGdW5j
UHRyVGFibGU+IGZ1bmNQdHJUYWJsZXMobnVtRnVuY1B0clRhYmxlcyk7CisgICAgZm9yICh1aW50
MzJfdCBpID0gMDsgaSA8IG51bUZ1bmNQdHJUYWJsZXM7ICsraSkgeworICAgICAgICBmdW5jUHRy
VGFibGVzW2ldLnNpZ25hdHVyZUluZGV4ID0gbV9yZWFkLmltbVUzMigpOworICAgICAgICB1aW50
MzJfdCBudW1FbGVtZW50cyA9IG1fcmVhZC5pbW1VMzIoKTsKKyAgICAgICAgVmVjdG9yPHVpbnQz
Ml90PiBlbGVtZW50cyhudW1FbGVtZW50cyk7CisgICAgICAgIGZvciAodWludDMyX3QgaiA9IDA7
IGogPCBudW1FbGVtZW50czsgKytqKQorICAgICAgICAgICAgZWxlbWVudHNbal0gPSBtX3JlYWQu
aW1tVTMyKCk7CisgICAgICAgIGZ1bmNQdHJUYWJsZXNbaV0uZWxlbWVudHMgPSBXVEY6Om1vdmUo
ZWxlbWVudHMpOworICAgIH0KKworICAgIG1fZnVuY1B0clRhYmxlcyA9IFdURjo6bW92ZShmdW5j
UHRyVGFibGVzKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRp
b25TZWN0aW9uKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVuY1NpZ3Muc2l6
ZSgpOyArK2kpCisgICAgICAgIHBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKGkpOworfQorCit2b2lk
IEpJVENvbXBpbGVyOjpwYXJzZUV4cG9ydFNlY3Rpb24oKQoreworICAgIHN3aXRjaCAobV9yZWFk
LmV4cG9ydEZvcm1hdCgpKSB7CisgICAgY2FzZSBFeHBvcnRGb3JtYXQ6OkRlZmF1bHQ6CisgICAg
ICAgIG1fcmVhZC5pbW1VMzIoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHBvcnRGb3Jt
YXQ6OlJlY29yZDoKKyAgICAgICAgaWYgKHVpbnQzMl90IG51bUV4cG9ydHMgPSBtX3JlYWQuaW1t
VTMyKCkpIHsKKyAgICAgICAgICAgIGZvciAodWludDMyX3QgZXhwb3J0SW5kZXggPSAwOyBleHBv
cnRJbmRleCA8IG51bUV4cG9ydHM7ICsrZXhwb3J0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICB3
aGlsZSAobV9yZWFkLnNpbmdsZUNoYXIoKSkgeyB9CisgICAgICAgICAgICAgICAgbV9yZWFkLmlt
bVUzMigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQor
Cit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbihzaXplX3QgZnVuY0lu
ZGV4KQoreworICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gbV9zaWduYXR1cmVzW21f
ZnVuY1NpZ3NbZnVuY0luZGV4XV07CisgICAgbV9jdXJyZW50UmV0dXJuVHlwZSA9IHNpZ25hdHVy
ZS5yZXQ7CisgICAgbV9jdXJyZW50TG9jYWxUeXBlcy5jbGVhcigpOworICAgIHBhcnNlQXJndW1l
bnRzKHNpZ25hdHVyZSk7CisgICAgcGFyc2VWYXJzKCk7CisgICAgcGFyc2VTdG10TGlzdCgwKTsK
K30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUpCit7CisgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBzaWduYXR1cmUuYXJndW1l
bnRzLnNpemUoKTsKKyAgICBmb3IgKHVpbnQzMl90IGFyZ0luZGV4ID0gMDsgYXJnSW5kZXggPCBh
cmd1bWVudENvdW50OyArK2FyZ0luZGV4KSB7CisgICAgICAgIFR5cGUgdHlwZSA9IHNpZ25hdHVy
ZS5hcmd1bWVudHNbYXJnSW5kZXhdOworICAgICAgICBtX2N1cnJlbnRMb2NhbFR5cGVzLmFwcGVu
ZCh0eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMy
OgorICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSklUQ29tcGls
ZXI6OnBhcnNlVmFycygpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZJMzJWYXJzID0gMDsKKyAg
ICB1aW50MzJfdCBudW1iZXJPZkYzMlZhcnMgPSAwOworICAgIHVpbnQzMl90IG51bWJlck9mRjY0
VmFycyA9IDA7CisKKyAgICBWYXJUeXBlcyB2YXJUeXBlczsKKyAgICBWYXJUeXBlc1dpdGhJbW0g
dmFyVHlwZXNXaXRoSW1tOworICAgIHVpbnQ4X3QgaW1tOworICAgIGlmIChtX3JlYWQuY29kZSgm
dmFyVHlwZXMsICZ2YXJUeXBlc1dpdGhJbW0sICZpbW0pKSB7CisgICAgICAgIGlmICh2YXJUeXBl
cyAmIFZhclR5cGVzOjpJMzIpCisgICAgICAgICAgICBudW1iZXJPZkkzMlZhcnMgPSBtX3JlYWQu
aW1tVTMyKCk7CisgICAgICAgIGlmICh2YXJUeXBlcyAmIFZhclR5cGVzOjpGMzIpCisgICAgICAg
ICAgICBudW1iZXJPZkYzMlZhcnMgPSBtX3JlYWQuaW1tVTMyKCk7CisgICAgICAgIGlmICh2YXJU
eXBlcyAmIFZhclR5cGVzOjpGNjQpCisgICAgICAgICAgICBudW1iZXJPZkY2NFZhcnMgPSBtX3Jl
YWQuaW1tVTMyKCk7CisgICAgfSBlbHNlCisgICAgICAgIG51bWJlck9mSTMyVmFycyA9IGltbTsK
KworICAgIHVpbnQzMl90IG51bWJlck9mVmFycyA9IG51bWJlck9mSTMyVmFycyArIG51bWJlck9m
RjMyVmFycyArIG51bWJlck9mRjY0VmFyczsKKyAgICBpZiAobnVtYmVyT2ZWYXJzID4gMCkgewor
ICAgICAgICB1aW50MzJfdCBsb2NhbEluZGV4ID0gbV9jdXJyZW50TG9jYWxUeXBlcy5zaXplKCk7
CisgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkkzMlZhcnM7ICsraSkg
eworICAgICAgICAgICAgbV9jdXJyZW50TG9jYWxUeXBlcy5hcHBlbmQoVHlwZTo6STMyKTsKKyAg
ICAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBzdGFja0FkZHJlc3MobG9jYWxJbmRl
eCsrKSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJl
ck9mRjMyVmFyczsgKytpKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRMb2NhbFR5cGVzLmFwcGVu
ZChUeXBlOjpGMzIpOworICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIHN0YWNr
QWRkcmVzcyhsb2NhbEluZGV4KyspKTsgLy8gRklYTUU6IGZsb2F0PworICAgICAgICB9CisgICAg
ICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkY2NFZhcnM7ICsraSkgeworICAg
ICAgICAgICAgbV9jdXJyZW50TG9jYWxUeXBlcy5hcHBlbmQoVHlwZTo6RjY0KTsKKyAgICAgICAg
ICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KDApLCBzdGFja0FkZHJlc3MobG9jYWxJbmRleCsrKSk7
IC8vIEZJWE1FOiBmbG9hdD8KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBKSVRDb21waWxl
cjo6cGFyc2VTdG10KGludCBkc3QpCit7CisgICAgU3RtdCBzdG10OworICAgIFN0bXRXaXRoSW1t
IHN0bXRXaXRoSW1tOworICAgIHVpbnQ4X3QgaW1tOworICAgIGlmIChtX3JlYWQuY29kZSgmc3Rt
dCwgJnN0bXRXaXRoSW1tLCAmaW1tKSkgeworICAgICAgICBzd2l0Y2ggKHN0bXQpIHsKKyAgICAg
ICAgY2FzZSBTdG10OjpTZXRMb2M6CisgICAgICAgICAgICBwYXJzZVNldExvY2FsKGRzdCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdG10OjpTZXRHbG86CisgICAgICAgIGNh
c2UgU3RtdDo6STMyU3RvcmU4OgorICAgICAgICBjYXNlIFN0bXQ6OkkzMlN0b3JlT2ZmODoKKyAg
ICAgICAgY2FzZSBTdG10OjpJMzJTdG9yZTE2OgorICAgICAgICBjYXNlIFN0bXQ6OkkzMlN0b3Jl
T2ZmMTY6CisgICAgICAgIGNhc2UgU3RtdDo6STMyU3RvcmUzMjoKKyAgICAgICAgY2FzZSBTdG10
OjpJMzJTdG9yZU9mZjMyOgorICAgICAgICBjYXNlIFN0bXQ6OkYzMlN0b3JlOgorICAgICAgICBj
YXNlIFN0bXQ6OkYzMlN0b3JlT2ZmOgorICAgICAgICBjYXNlIFN0bXQ6OkY2NFN0b3JlOgorICAg
ICAgICBjYXNlIFN0bXQ6OkY2NFN0b3JlT2ZmOgorICAgICAgICBjYXNlIFN0bXQ6OkNhbGxJbnQ6
CisgICAgICAgIGNhc2UgU3RtdDo6Q2FsbEluZDoKKyAgICAgICAgY2FzZSBTdG10OjpDYWxsSW1w
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2Fz
ZSBTdG10OjpSZXQ6CisgICAgICAgICAgICBwYXJzZVJldHVyblN0bXQoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgY2FzZSBTdG10OjpCbG9jazoKKyAgICAgICAgICAgIHBhcnNlQmxv
Y2tTdG10KGRzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU3RtdDo6SWZU
aGVuOgorICAgICAgICAgICAgcGFyc2VJZlN0bXQoZHN0KTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgY2FzZSBTdG10OjpJZkVsc2U6CisgICAgICAgICAgICBwYXJzZUlmRWxzZVN0bXQo
ZHN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdG10OjpXaGlsZToKKyAg
ICAgICAgICAgIHBhcnNlV2hpbGVTdG10KGRzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGNhc2UgU3RtdDo6RG86CisgICAgICAgICAgICBwYXJzZURvU3RtdChkc3QpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6OkxhYmVsOgorICAgICAgICAgICAgcGFy
c2VMYWJlbFN0bXQoZHN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdG10
OjpCcmVhazoKKyAgICAgICAgICAgIHRvcEJyZWFrSnVtcExpc3QoKS0+YXBwZW5kKGp1bXAoKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU3RtdDo6QnJlYWtMYWJlbDoKKyAg
ICAgICAgICAgIHBhcnNlQnJlYWtMYWJlbFN0bXQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgY2FzZSBTdG10OjpDb250aW51ZToKKyAgICAgICAgICAgIHRvcENvbnRpbnVlSnVtcFNj
b3BlKCktPmp1bXAoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0bXQ6OkNv
bnRpbnVlTGFiZWw6CisgICAgICAgICAgICBwYXJzZUNvbnRpbnVlTGFiZWxTdG10KCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU3RtdDo6U3dpdGNoOgorICAgICAgICAgICAg
cGFyc2VTd2l0Y2hTdG10KGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBzd2l0Y2ggKHN0bXRXaXRoSW1tKSB7CisgICAgICAgIGNh
c2UgU3RtdFdpdGhJbW06OlNldExvYzoKKyAgICAgICAgICAgIHBhcnNlU2V0TG9jYWwoaW1tLCBk
c3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RtdFdpdGhJbW06OlNldEds
bzoKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlR2V0
TG9jYWwoaW50IGRzdCkKK3sKKyAgICAvLyBGSVhNRTogdHlwZQorICAgIHVpbnQzMl90IGltbSA9
IG1fcmVhZC5pbW1VMzIoKTsKKyAgICBsb2FkMzIoc3RhY2tBZGRyZXNzKGltbSksIEdQUkluZm86
OnJlZ1QwKTsKKyAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRz
dCkpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZVNldExvY2FsKHVpbnQzMl90IGltbSwg
aW50IGRzdCkKK3sKKyAgICBUeXBlIHR5cGUgPSBtX2N1cnJlbnRMb2NhbFR5cGVzW2ltbV07IC8v
IEZJWE1FOiBTaG91bGQgd2UgcmVjZWl2ZSB0aGUgVHlwZSBmcm9tIHRoZSBwYXJlbnQ/CisKKyAg
ICBwYXJzZUV4cHIoUlR5cGUodHlwZSksIGRzdCk7CisKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICBjYXNlIFR5cGU6OkkzMjogeworICAgICAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3Qp
LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHN0YWNr
QWRkcmVzcyhpbW0pKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgVHlwZTo6RjMy
OgorICAgIGNhc2UgVHlwZTo6RjY0OgorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZVNl
dExvY2FsKGludCBkc3QpCit7CisgICAgcGFyc2VTZXRMb2NhbChtX3JlYWQuaW1tVTMyKCksIGRz
dCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlUmV0dXJuU3RtdCgpCit7CisgICAgLy8g
RklYTUU6IGhhY2t5CisgICAgc3dpdGNoIChtX2N1cnJlbnRSZXR1cm5UeXBlKSB7CisgICAgY2Fz
ZSBSVHlwZTo6STMyOgorICAgICAgICBwYXJzZVNpZ25lZEV4cHIoU2lnbmVkbmVzczo6U2lnbmVk
LCAwKTsKKyAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoMCksIEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSVHlwZTo6RjMyOgorICAgICAg
ICBwYXJzZUV4cHIoUlR5cGU6OkYzMiwgMCk7CisgICAgICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRy
ZXNzKDApLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUlR5cGU6OkY2NDoKKyAgICAgICAgcGFyc2VFeHByKFJUeXBlOjpGNjQsIDApOworICAgICAg
ICBsb2FkNjQodGVtcG9yYXJ5QWRkcmVzcygwKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFJUeXBlOjpWb2lkOgorICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlU3RtdExpc3QoaW50IGRzdCkKK3sKKyAg
ICB1aW50MzJfdCBudW1TdG10cyA9IG1fcmVhZC5pbW1VMzIoKTsKKyAgICBmb3IgKHVpbnQzMl90
IGkgPSAwOyBpIDwgbnVtU3RtdHM7ICsraSkKKyAgICAgICAgcGFyc2VTdG10KGRzdCk7Cit9CisK
K3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlQmxvY2tTdG10KGludCBkc3QpCit7CisgICAgcGFyc2VT
dG10TGlzdChkc3QpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUlmU3RtdChpbnQgZHN0
KQoreworICAgIHBhcnNlRXhwcihSVHlwZTo6STMyLCBkc3QpOworICAgIGxvYWQzMih0ZW1wb3Jh
cnlBZGRyZXNzKGRzdCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBKdW1wIGVuZCA9IGJyYW5jaFRl
c3QzMihaZXJvLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgcGFyc2VTdG10KGRzdCk7CisgICAgZW5k
LmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlSWZFbHNlU3RtdChpbnQg
ZHN0KQoreworICAgIHBhcnNlRXhwcihSVHlwZTo6STMyLCBkc3QpOworICAgIGxvYWQzMih0ZW1w
b3JhcnlBZGRyZXNzKGRzdCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBKdW1wIGVscyA9IGJyYW5j
aFRlc3QzMihaZXJvLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgcGFyc2VTdG10KGRzdCk7CisgICAg
SnVtcCBlbmQgPSBqdW1wKCk7CisgICAgZWxzLmxpbmsodGhpcyk7CisgICAgcGFyc2VTdG10KGRz
dCk7CisgICAgZW5kLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlV2hp
bGVTdG10KGludCBkc3QpCit7CisgICAgSnVtcFNjb3BlIGNvbnRpbnVlSnVtcFNjb3BlKHRoaXMs
IGxhYmVsKCkpOworICAgIHB1c2hDb250aW51ZUp1bXBTY29wZSgmY29udGludWVKdW1wU2NvcGUp
OworCisgICAgSnVtcExpc3QgYnJlYWtKdW1wTGlzdDsKKyAgICBwdXNoQnJlYWtKdW1wTGlzdCgm
YnJlYWtKdW1wTGlzdCk7CisKKyAgICBwYXJzZUV4cHIoUlR5cGU6OkkzMiwgZHN0KTsKKyAgICBs
b2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgSnVtcCBl
bmQgPSBicmFuY2hUZXN0MzIoWmVybywgR1BSSW5mbzo6cmVnVDApOworICAgIHBhcnNlU3RtdChk
c3QpOworICAgIGNvbnRpbnVlSnVtcFNjb3BlLmp1bXAoKTsKKyAgICBlbmQubGluayh0aGlzKTsK
KyAgICBicmVha0p1bXBMaXN0LmxpbmsodGhpcyk7CisKKyAgICBwb3BCcmVha0p1bXBMaXN0KCk7
CisKKyAgICBwb3BDb250aW51ZUp1bXBTY29wZSgpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpw
YXJzZURvU3RtdChpbnQgZHN0KQoreworICAgIEp1bXBTY29wZSBjb250aW51ZUp1bXBTY29wZSh0
aGlzKTsKKyAgICBwdXNoQ29udGludWVKdW1wU2NvcGUoJmNvbnRpbnVlSnVtcFNjb3BlKTsKKwor
ICAgIEp1bXBMaXN0IGJyZWFrSnVtcExpc3Q7CisgICAgcHVzaEJyZWFrSnVtcExpc3QoJmJyZWFr
SnVtcExpc3QpOworCisgICAgTGFiZWwgc3RhcnQgPSBsYWJlbCgpOworICAgIHBhcnNlU3RtdChk
c3QpOworICAgIGNvbnRpbnVlSnVtcFNjb3BlLmxpbmsoKTsKKyAgICBwYXJzZUV4cHIoUlR5cGU6
OkkzMiwgZHN0KTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpy
ZWdUMCk7CisgICAgSnVtcCBqdW1wVG9TdGFydCA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAganVtcFRvU3RhcnQubGlua1RvKHN0YXJ0LCB0aGlzKTsKKyAgICBi
cmVha0p1bXBMaXN0LmxpbmsodGhpcyk7CisKKyAgICBwb3BCcmVha0p1bXBMaXN0KCk7CisKKyAg
ICBwb3BDb250aW51ZUp1bXBTY29wZSgpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUxh
YmVsU3RtdChpbnQgZHN0KQoreworICAgIExhYmVsIGNvbnRpbnVlTGFiZWwgPSBsYWJlbCgpOwor
ICAgIEp1bXBMaXN0IGJyZWFrSnVtcExpc3Q7CisgICAgcHVzaENvbnRpbnVlTGFiZWxMYWJlbCgm
Y29udGludWVMYWJlbCk7CisgICAgcHVzaEJyZWFrTGFiZWxKdW1wTGlzdCgmYnJlYWtKdW1wTGlz
dCk7CisgICAgcGFyc2VTdG10KGRzdCk7CisgICAgYnJlYWtKdW1wTGlzdC5saW5rKHRoaXMpOwor
ICAgIHBvcEJyZWFrTGFiZWxKdW1wTGlzdCgpOworICAgIHBvcENvbnRpbnVlTGFiZWxMYWJlbCgp
OworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUJyZWFrTGFiZWxTdG10KCkKK3sKKyAgICB1
aW50MzJfdCBpbmRleCA9IG1fcmVhZC5pbW1VMzIoKTsKKyAgICBicmVha0xhYmVsSnVtcExpc3Qo
aW5kZXgpLT5hcHBlbmQoanVtcCgpKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VDb250
aW51ZUxhYmVsU3RtdCgpCit7CisgICAgdWludDMyX3QgaW5kZXggPSBtX3JlYWQuaW1tVTMyKCk7
CisgICAganVtcCgqY29udGludWVMYWJlbExhYmVsKGluZGV4KSk7Cit9CisKK3ZvaWQgSklUQ29t
cGlsZXI6OnBhcnNlU3dpdGNoU3RtdChpbnQgZHN0KQoreworICAgIEp1bXBMaXN0IGJyZWFrSnVt
cExpc3Q7CisgICAgcHVzaEJyZWFrSnVtcExpc3QoJmJyZWFrSnVtcExpc3QpOworCisgICAgdWlu
dDMyX3QgbnVtYmVyT2ZDYXNlcyA9IG1fcmVhZC5pbW1VMzIoKTsKKyAgICBwYXJzZVNpZ25lZEV4
cHIoU2lnbmVkbmVzczo6U2lnbmVkLCBkc3QpOworICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNz
KGRzdCksIEdQUkluZm86OnJlZ1QwKTsKKworICAgIEp1bXAgdGFibGUgPSBqdW1wKCk7CisKKyAg
ICBWZWN0b3I8TGFiZWw+IGxhYmVsczsKKyAgICBWZWN0b3I8aW50MzJfdD4gaW1tczsKKyAgICBM
YWJlbCBkZWZhdWx0TGFiZWw7CisgICAgYm9vbCBoYXNEZWZhdWx0ID0gZmFsc2U7CisKKyAgICBm
b3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZDYXNlczsgKytpKSB7CisgICAgICAgIHN3
aXRjaCAobV9yZWFkLnN3aXRjaENhc2UoKSkgeworICAgICAgICBjYXNlIFN3aXRjaENhc2U6OkNh
c2UwOgorICAgICAgICAgICAgbGFiZWxzLmFwcGVuZChsYWJlbCgpKTsKKyAgICAgICAgICAgIGlt
bXMuYXBwZW5kKG1fcmVhZC5pbW1TMzIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBTd2l0Y2hDYXNlOjpDYXNlMToKKyAgICAgICAgICAgIGxhYmVscy5hcHBlbmQobGFiZWwo
KSk7CisgICAgICAgICAgICBpbW1zLmFwcGVuZChtX3JlYWQuaW1tUzMyKCkpOworICAgICAgICAg
ICAgcGFyc2VTdG10KGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTd2l0
Y2hDYXNlOjpDYXNlTjoKKyAgICAgICAgICAgIGxhYmVscy5hcHBlbmQobGFiZWwoKSk7CisgICAg
ICAgICAgICBpbW1zLmFwcGVuZChtX3JlYWQuaW1tUzMyKCkpOworICAgICAgICAgICAgcGFyc2VT
dG10TGlzdChkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3dpdGNoQ2Fz
ZTo6RGVmYXVsdDA6CisgICAgICAgICAgICBkZWZhdWx0TGFiZWwgPSBsYWJlbCgpOworICAgICAg
ICAgICAgaGFzRGVmYXVsdCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBTd2l0Y2hDYXNlOjpEZWZhdWx0MToKKyAgICAgICAgICAgIGRlZmF1bHRMYWJlbCA9IGxhYmVs
KCk7CisgICAgICAgICAgICBoYXNEZWZhdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHBhcnNlU3Rt
dChkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3dpdGNoQ2FzZTo6RGVm
YXVsdE46CisgICAgICAgICAgICBkZWZhdWx0TGFiZWwgPSBsYWJlbCgpOworICAgICAgICAgICAg
aGFzRGVmYXVsdCA9IHRydWU7CisgICAgICAgICAgICBwYXJzZVN0bXRMaXN0KGRzdCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKdW1wIGVuZCA9IGp1
bXAoKTsKKyAgICB0YWJsZS5saW5rKHRoaXMpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsYWJlbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgSnVtcCBqbXAgPSBicmFuY2gzMihFcXVh
bCwgR1BSSW5mbzo6cmVnVDAsIFRydXN0ZWRJbW0zMihpbW1zW2ldKSk7CisgICAgICAgIGptcC5s
aW5rVG8obGFiZWxzW2ldLCB0aGlzKTsKKyAgICB9CisgICAgaWYgKGhhc0RlZmF1bHQpCisgICAg
ICAgIGp1bXAoZGVmYXVsdExhYmVsKTsKKworICAgIGVuZC5saW5rKHRoaXMpOworCisgICAgYnJl
YWtKdW1wTGlzdC5saW5rKHRoaXMpOworICAgIHBvcEJyZWFrSnVtcExpc3QoKTsKK30KKwordm9p
ZCBKSVRDb21waWxlcjo6cGFyc2VFeHByKFJUeXBlIHJUeXBlLCBpbnQgZHN0KQoreworICAgIEkz
MiBpMzI7CisgICAgSTMyV2l0aEltbSBpMzJXaXRoSW1tOworICAgIHVpbnQ4X3QgaW1tOworCisg
ICAgaWYgKHJUeXBlICE9IFJUeXBlOjpJMzIpCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisKKyAgICBpZiAobV9yZWFkLmNvZGUoJmkzMiwgJmkzMldpdGhJbW0sICZpbW0p
KSB7CisgICAgICAgIHN3aXRjaCAoaTMyKSB7CisgICAgICAgIGNhc2UgSTMyOjpMaXRJbW06Cisg
ICAgICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihtX3JlYWQuaW1tVTMyKCkpLCB0ZW1wb3Jh
cnlBZGRyZXNzKGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpM
aXRQb29sOgorICAgICAgICBjYXNlIEkzMjo6R2V0TG9jOgorICAgICAgICAgICAgcGFyc2VHZXRM
b2NhbChkc3QpOyAvLyBUT0RPOiBzaG91bGQgcGFzcyBJMzIgYXMgUlR5cGUKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6R2V0R2xvOgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBJMzI6OlNldExvYzoKKyAgICAgICAg
ICAgIHBhcnNlU2V0TG9jYWwoZHN0KTsgLy8gVE9ETzogc2hvdWxkIHBhc3MgSTMyIGFzIFJUeXBl
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlNldEdsbzoKKyAgICAgICAg
Y2FzZSBJMzI6OlNMb2FkODoKKyAgICAgICAgY2FzZSBJMzI6OlNMb2FkT2ZmODoKKyAgICAgICAg
Y2FzZSBJMzI6OlVMb2FkODoKKyAgICAgICAgY2FzZSBJMzI6OlVMb2FkT2ZmODoKKyAgICAgICAg
Y2FzZSBJMzI6OlNMb2FkMTY6CisgICAgICAgIGNhc2UgSTMyOjpTTG9hZE9mZjE2OgorICAgICAg
ICBjYXNlIEkzMjo6VUxvYWQxNjoKKyAgICAgICAgY2FzZSBJMzI6OlVMb2FkT2ZmMTY6CisgICAg
ICAgIGNhc2UgSTMyOjpMb2FkMzI6CisgICAgICAgIGNhc2UgSTMyOjpMb2FkT2ZmMzI6CisgICAg
ICAgIGNhc2UgSTMyOjpTdG9yZTg6CisgICAgICAgIGNhc2UgSTMyOjpTdG9yZU9mZjg6CisgICAg
ICAgIGNhc2UgSTMyOjpTdG9yZTE2OgorICAgICAgICBjYXNlIEkzMjo6U3RvcmVPZmYxNjoKKyAg
ICAgICAgY2FzZSBJMzI6OlN0b3JlMzI6CisgICAgICAgIGNhc2UgSTMyOjpTdG9yZU9mZjMyOgor
ICAgICAgICBjYXNlIEkzMjo6Q2FsbEludDoKKyAgICAgICAgY2FzZSBJMzI6OkNhbGxJbmQ6Cisg
ICAgICAgIGNhc2UgSTMyOjpDYWxsSW1wOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBJMzI6OkNvbmQ6CisgICAgICAgICAgICBwYXJzZUNv
bmQoUlR5cGU6OkkzMiwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkz
Mjo6Q29tbWE6CisgICAgICAgICAgICBwYXJzZUNvbW1hKFJUeXBlOjpJMzIsIGRzdCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkZyb21GMzI6CisgICAgICAgIGNhc2Ug
STMyOjpGcm9tRjY0OgorICAgICAgICBjYXNlIEkzMjo6TmVnOgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBJMzI6OkFkZDoKKyAgICAgICAg
ICAgIHBhcnNlQWRkU3ViKCcrJywgUlR5cGU6OkkzMiwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEkzMjo6U3ViOgorICAgICAgICAgICAgcGFyc2VBZGRTdWIoJy0nLCBS
VHlwZTo6STMyLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpN
dWw6CisgICAgICAgICAgICBwYXJzZU11bEkzMihkc3QpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSTMyOjpTRGl2OgorICAgICAgICBjYXNlIEkzMjo6VURpdjoKKyAgICAgICAg
Y2FzZSBJMzI6OlNNb2Q6CisgICAgICAgIGNhc2UgSTMyOjpVTW9kOgorICAgICAgICBjYXNlIEkz
Mjo6Qml0Tm90OgorICAgICAgICBjYXNlIEkzMjo6Qml0T3I6CisgICAgICAgIGNhc2UgSTMyOjpC
aXRBbmQ6CisgICAgICAgIGNhc2UgSTMyOjpCaXRYb3I6CisgICAgICAgIGNhc2UgSTMyOjpMc2g6
CisgICAgICAgIGNhc2UgSTMyOjpBcml0aFJzaDoKKyAgICAgICAgY2FzZSBJMzI6OkxvZ2ljUnNo
OgorICAgICAgICBjYXNlIEkzMjo6Q2x6OgorICAgICAgICBjYXNlIEkzMjo6TG9naWNOb3Q6Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNlIEkz
Mjo6RXFJMzI6CisgICAgICAgICAgICBwYXJzZVJlbEkzMihTaWduZWRuZXNzOjpTaWduZWQsIEVx
dWFsLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpFcUYzMjoK
KyAgICAgICAgY2FzZSBJMzI6OkVxRjY0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBJMzI6Ok5FcUkzMjoKKyAgICAgICAgICAgIHBhcnNl
UmVsSTMyKFNpZ25lZG5lc3M6OlNpZ25lZCwgTm90RXF1YWwsIGRzdCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBJMzI6Ok5FcUYzMjoKKyAgICAgICAgY2FzZSBJMzI6Ok5FcUY2
NDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNh
c2UgSTMyOjpTTGVUaEkzMjoKKyAgICAgICAgICAgIHBhcnNlUmVsSTMyKFNpZ25lZG5lc3M6OlNp
Z25lZCwgTGVzc1RoYW4sIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
MzI6OlVMZVRoSTMyOgorICAgICAgICAgICAgcGFyc2VSZWxJMzIoU2lnbmVkbmVzczo6VW5zaWdu
ZWQsIExlc3NUaGFuLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMy
OjpMZVRoRjMyOgorICAgICAgICBjYXNlIEkzMjo6TGVUaEY2NDoKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgSTMyOjpTTGVFcUkzMjoKKyAg
ICAgICAgICAgIHBhcnNlUmVsSTMyKFNpZ25lZG5lc3M6OlNpZ25lZCwgTGVzc1RoYW5PckVxdWFs
LCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpVTGVFcUkzMjoK
KyAgICAgICAgICAgIHBhcnNlUmVsSTMyKFNpZ25lZG5lc3M6OlVuc2lnbmVkLCBMZXNzVGhhbk9y
RXF1YWwsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkxlRXFG
MzI6CisgICAgICAgIGNhc2UgSTMyOjpMZUVxRjY0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBJMzI6OlNHclRoSTMyOgorICAgICAgICAg
ICAgcGFyc2VSZWxJMzIoU2lnbmVkbmVzczo6U2lnbmVkLCBHcmVhdGVyVGhhbiwgZHN0KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6VUdyVGhJMzI6CisgICAgICAgICAg
ICBwYXJzZVJlbEkzMihTaWduZWRuZXNzOjpVbnNpZ25lZCwgR3JlYXRlclRoYW4sIGRzdCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkdyVGhGMzI6CisgICAgICAgIGNh
c2UgSTMyOjpHclRoRjY0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgY2FzZSBJMzI6OlNHckVxSTMyOgorICAgICAgICAgICAgcGFyc2VSZWxJMzIo
U2lnbmVkbmVzczo6U2lnbmVkLCBHcmVhdGVyVGhhbk9yRXF1YWwsIGRzdCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlVHckVxSTMyOgorICAgICAgICAgICAgcGFyc2VS
ZWxJMzIoU2lnbmVkbmVzczo6VW5zaWduZWQsIEdyZWF0ZXJUaGFuT3JFcXVhbCwgZHN0KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6R3JFcUYzMjoKKyAgICAgICAgY2Fz
ZSBJMzI6OkdyRXFGNjQ6CisgICAgICAgIGNhc2UgSTMyOjpTTWluOgorICAgICAgICBjYXNlIEkz
Mjo6VU1pbjoKKyAgICAgICAgY2FzZSBJMzI6OlNNYXg6CisgICAgICAgIGNhc2UgSTMyOjpVTWF4
OgorICAgICAgICBjYXNlIEkzMjo6QWJzOgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIHN3aXRjaCAoaTMyV2l0aEltbSkgeworICAgICAgICBjYXNlIEkzMldpdGhJbW06Okxp
dEltbToKKyAgICAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGltbSksIHRlbXBvcmFyeUFk
ZHJlc3MoZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzJXaXRoSW1t
OjpMaXRQb29sOgorICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobV9pMzJzW2ltbV0p
LCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSTMyV2l0aEltbTo6R2V0TG9jOgorICAgICAgICAgICAgbG9hZDMyKHN0YWNrQWRkcmVzcyhp
bW0pLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1Qw
LCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICB9CisgICAgfQorfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZVNpZ25lZEV4cHIoU2lnbmVk
bmVzcyBzaWduZWRuZXNzLCBpbnQgZHN0KQoreworICAgIHVpbnQzMl90IHUzMjsKKyAgICBpZiAo
bV9yZWFkLmlmSTMyTGl0KG1faTMycywgJnUzMikpIHsKKyAgICAgICAgaWYgKHNpZ25lZG5lc3Mg
PT0gU2lnbmVkbmVzczo6U2lnbmVkKQorICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIo
dTMyKSwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIodTMyKSwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsgLy8gRklY
TUU6IHVuc2lnbmVkCisgICAgfSBlbHNlIGlmIChzaWduZWRuZXNzID09IFNpZ25lZG5lc3M6OlNp
Z25lZCkKKyAgICAgICAgcGFyc2VFeHByKFJUeXBlOjpJMzIsIGRzdCk7CisgICAgZWxzZQorICAg
ICAgICBwYXJzZUV4cHIoUlR5cGU6OkkzMiwgZHN0KTsgLy8gRklYTUU6IHVuc2lnbmVkCit9CisK
K3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlQWRkU3ViKGNoYXIgb3AsIFJUeXBlIHJUeXBlLCBpbnQg
ZHN0KQoreworICAgIHBhcnNlRXhwcihyVHlwZSwgZHN0KTsKKyAgICBwYXJzZUV4cHIoclR5cGUs
IGRzdCArIDEpOworICAgIGlmIChvcCA9PSAnKycpIHsKKyAgICAgICAgbG9hZDMyKHRlbXBvcmFy
eUFkZHJlc3MoZHN0KSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBsb2FkMzIodGVtcG9yYXJ5
QWRkcmVzcyhkc3QgKyAxKSwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBhZGQzMihHUFJJbmZv
OjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1Qw
LCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxvYWQzMih0
ZW1wb3JhcnlBZGRyZXNzKGRzdCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKHRl
bXBvcmFyeUFkZHJlc3MoZHN0ICsgMSksIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgc3ViMzIo
R1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgc3RvcmUzMihHUFJJbmZv
OjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUQ29t
cGlsZXI6OnBhcnNlTXVsSTMyKGludCBkc3QpCit7CisgICAgcGFyc2VFeHByKFJUeXBlOjpJMzIs
IGRzdCk7CisgICAgcGFyc2VFeHByKFJUeXBlOjpJMzIsIGRzdCArIDEpOworICAgIGxvYWQzMih0
ZW1wb3JhcnlBZGRyZXNzKGRzdCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBsb2FkMzIodGVtcG9y
YXJ5QWRkcmVzcyhkc3QgKyAxKSwgR1BSSW5mbzo6cmVnVDEpOworICAgIG11bDMyKEdQUkluZm86
OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgdGVt
cG9yYXJ5QWRkcmVzcyhkc3QpKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VSZWxJMzIo
U2lnbmVkbmVzcyBzaWduZWRuZXNzLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgaW50
IGRzdCkKK3sKKyAgICBwYXJzZVNpZ25lZEV4cHIoc2lnbmVkbmVzcywgZHN0KTsKKyAgICBwYXJz
ZVNpZ25lZEV4cHIoc2lnbmVkbmVzcywgZHN0ICsgMSk7CisgICAgbG9hZDMyKHRlbXBvcmFyeUFk
ZHJlc3MoZHN0KSwgR1BSSW5mbzo6cmVnVDApOworICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNz
KGRzdCArIDEpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgR1BS
SW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgc3RvcmUz
MihHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKK30KKwordm9pZCBKSVRD
b21waWxlcjo6cGFyc2VDb21tYShSVHlwZSByVHlwZSwgaW50IGRzdCkKK3sKKyAgICBwYXJzZUV4
cHIobV9yZWFkLnJ0eXBlKCksIGRzdCk7CisgICAgcGFyc2VFeHByKHJUeXBlLCBkc3QpOworfQor
Cit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUNvbmQoUlR5cGUgclR5cGUsIGludCBkc3QpCit7Cisg
ICAgcGFyc2VFeHByKFJUeXBlOjpJMzIsIGRzdCk7CisgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJl
c3MoZHN0KSwgR1BSSW5mbzo6cmVnVDApOworICAgIEp1bXAgZWxzID0gYnJhbmNoVGVzdDMyKFpl
cm8sIEdQUkluZm86OnJlZ1QwKTsKKyAgICBwYXJzZUV4cHIoclR5cGUsIGRzdCk7CisgICAgSnVt
cCBlbmQgPSBqdW1wKCk7CisgICAgZWxzLmxpbmsodGhpcyk7CisgICAgcGFyc2VFeHByKHJUeXBl
LCBkc3QpOworICAgIGVuZC5saW5rKHRoaXMpOworfQorCitKU1ZhbHVlIGNvbXBpbGVBbmRSdW4o
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICBKSVRD
b21waWxlciBjb21waWxlcigmZXhlYy0+dm0oKSk7CisgICAgcmV0dXJuIGNvbXBpbGVyLmNvbXBp
bGVBbmRSdW4oZXhlYywgYnVmZmVyKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21KSVRDb21waWxlci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUpJVENvbXBpbGVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTM5NGM3MGFlY2NkMmQzNzEzNzFkYTI5NTg0MTM2ZjI0N2Q5YjcyOAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21KSVRDb21waWxlci5oCkBAIC0w
LDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLyoKKyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0
aGUgIkxpY2Vuc2UiKTsKKyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w
bGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM
aWNlbnNlIGF0CisKKyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAK
KworIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3Jp
dGluZywgc29mdHdhcmUKKyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmli
dXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJ
T05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIFNlZSB0aGUgTGlj
ZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQK
KyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisKKyNpZm5kZWYgV2FzbUpJVENv
bXBpbGVyX2gKKyNkZWZpbmUgV2FzbUpJVENvbXBpbGVyX2gKKworI2luY2x1ZGUgIkFzc2VtYmx5
SGVscGVycy5oIgorI2luY2x1ZGUgIldhc21PcGNvZGVzLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBFeGVjU3RhdGU7CitjbGFzcyBKSVRDb2RlOworY2xhc3MgVk07CisKK25hbWVzcGFj
ZSBXYXNtIHsKKworY2xhc3MgSnVtcFNjb3BlOworCitjbGFzcyBKSVRDb21waWxlciA6IHByaXZh
dGUgQXNzZW1ibHlIZWxwZXJzIHsKK3B1YmxpYzoKKyAgICBKSVRDb21waWxlcihWTSogdm0pCisg
ICAgICAgIDogQXNzZW1ibHlIZWxwZXJzKHZtLCAwKQorICAgIHsKKyAgICB9CisgICAgSlNWYWx1
ZSBjb21waWxlQW5kUnVuKEV4ZWNTdGF0ZSosIGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyKTsK
KworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgRnVuY0ltcG9ydFNpZ25hdHVyZSB7CisgICAgICAgIHVp
bnQzMl90IHNpZ25hdHVyZUluZGV4OworICAgICAgICB1aW50MzJfdCBmdW5jSW1wb3J0SW5kZXg7
CisgICAgfTsKKworICAgIHN0cnVjdCBGdW5jUHRyVGFibGUgeworICAgICAgICB1aW50MzJfdCBz
aWduYXR1cmVJbmRleDsKKyAgICAgICAgVmVjdG9yPHVpbnQzMl90PiBlbGVtZW50czsKKyAgICB9
OworCisgICAgUmVmUHRyPEpJVENvZGU+IGNvbXBpbGUoVk0mLCBjb25zdCBWZWN0b3I8Y2hhcj4m
IGJ1ZmZlcik7CisgICAgdm9pZCBwYXJzZSgpOworICAgIHZvaWQgcGFyc2VDb25zdGFudFBvb2xT
ZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZVNpZ25hdHVyZVNlY3Rpb24oKTsKKyAgICB2b2lkIHBh
cnNlRnVuY3Rpb25JbXBvcnRTZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUdsb2JhbFNlY3Rpb24o
KTsKKyAgICB2b2lkIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvblNlY3Rpb24oKTsKKyAgICB2b2lk
IHBhcnNlRnVuY3Rpb25Qb2ludGVyVGFibGVzKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9uRGVm
aW5pdGlvblNlY3Rpb24oKTsKKyAgICB2b2lkIHBhcnNlRXhwb3J0U2VjdGlvbigpOworCisgICAg
dm9pZCBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbihzaXplX3QgZnVuY0luZGV4KTsKKyAgICB2b2lk
IHBhcnNlQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOworICAgIHZvaWQgcGFyc2VWYXJzKCk7
CisKKyAgICB2b2lkIHBhcnNlU3RtdChpbnQgZHN0KTsKKyAgICB2b2lkIHBhcnNlR2V0TG9jYWwo
aW50IGRzdCk7CisgICAgdm9pZCBwYXJzZVNldExvY2FsKHVpbnQzMl90IGltbSwgaW50IGRzdCk7
CisgICAgdm9pZCBwYXJzZVNldExvY2FsKGludCBkc3QpOworICAgIHZvaWQgcGFyc2VSZXR1cm5T
dG10KCk7CisgICAgdm9pZCBwYXJzZUJsb2NrU3RtdChpbnQgZHN0KTsKKyAgICB2b2lkIHBhcnNl
U3RtdExpc3QoaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZUlmU3RtdChpbnQgZHN0KTsKKyAgICB2
b2lkIHBhcnNlSWZFbHNlU3RtdChpbnQgZHN0KTsKKyAgICB2b2lkIHBhcnNlV2hpbGVTdG10KGlu
dCBkc3QpOworICAgIHZvaWQgcGFyc2VEb1N0bXQoaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZUxh
YmVsU3RtdChpbnQgZHN0KTsKKyAgICB2b2lkIHBhcnNlQnJlYWtMYWJlbFN0bXQoKTsKKyAgICB2
b2lkIHBhcnNlQ29udGludWVMYWJlbFN0bXQoKTsKKyAgICB2b2lkIHBhcnNlU3dpdGNoU3RtdChp
bnQgZHN0KTsKKworICAgIHZvaWQgcGFyc2VFeHByKFJUeXBlLCBpbnQgZHN0KTsKKyAgICB2b2lk
IHBhcnNlU2lnbmVkRXhwcihTaWduZWRuZXNzLCBpbnQgZHN0KTsKKyAgICB2b2lkIHBhcnNlQWRk
U3ViKGNoYXIgb3AsIFJUeXBlLCBpbnQgZHN0KTsKKyAgICB2b2lkIHBhcnNlTXVsSTMyKGludCBk
c3QpOworICAgIHZvaWQgcGFyc2VSZWxJMzIoU2lnbmVkbmVzcywgUmVsYXRpb25hbENvbmRpdGlv
biwgaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZUNvbW1hKFJUeXBlLCBpbnQgZHN0KTsKKyAgICB2
b2lkIHBhcnNlQ29uZChSVHlwZSwgaW50IGRzdCk7CisKKyAgICBBZGRyZXNzIHN0YWNrQWRkcmVz
cyhpbnQgaSkgY29uc3QgLy8gRklYTUU6IElzIHRoaXMgY29ycmVjdD8KKyAgICB7CisgICAgICAg
IHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAtaSAqIDggLSA4KTsK
KyAgICB9CisKKyAgICBBZGRyZXNzIHRlbXBvcmFyeUFkZHJlc3MoaW50IGkpIGNvbnN0IC8vIEZJ
WE1FOiBJcyB0aGlzIGNvcnJlY3Q/CisgICAgeworICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgLShpICsgbV9jdXJyZW50TG9jYWxUeXBlcy5zaXplKCkp
ICogOCAtIDgpOworICAgIH0KKworICAgIHZvaWQgcHVzaENvbnRpbnVlTGFiZWxMYWJlbChMYWJl
bCogbGFiZWwpIHsgbV9jb250aW51ZUxhYmVsTGFiZWxzLmFwcGVuZChsYWJlbCk7IH0KKyAgICB2
b2lkIHBvcENvbnRpbnVlTGFiZWxMYWJlbCgpIHsgbV9jb250aW51ZUxhYmVsTGFiZWxzLnJlbW92
ZUxhc3QoKTsgfQorICAgIExhYmVsKiBjb250aW51ZUxhYmVsTGFiZWwoc2l6ZV90IGkpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGludWVMYWJlbExhYmVsc1tpXTsgfQorICAgIHZvaWQgcHVzaEJyZWFr
TGFiZWxKdW1wTGlzdChKdW1wTGlzdCoganVtcExpc3QpIHsgbV9icmVha0xhYmVsSnVtcExpc3Rz
LmFwcGVuZChqdW1wTGlzdCk7IH0KKyAgICB2b2lkIHBvcEJyZWFrTGFiZWxKdW1wTGlzdCgpIHsg
bV9icmVha0xhYmVsSnVtcExpc3RzLnJlbW92ZUxhc3QoKTsgfQorICAgIEp1bXBMaXN0KiBicmVh
a0xhYmVsSnVtcExpc3Qoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fYnJlYWtMYWJlbEp1bXBM
aXN0c1tpXTsgfQorCisgICAgdm9pZCBwdXNoQ29udGludWVKdW1wU2NvcGUoSnVtcFNjb3BlKiBq
dW1wU2NvcGUpIHsgbV9jb250aW51ZUp1bXBTY29wZXMuYXBwZW5kKGp1bXBTY29wZSk7IH0KKyAg
ICB2b2lkIHBvcENvbnRpbnVlSnVtcFNjb3BlKCkgeyBtX2NvbnRpbnVlSnVtcFNjb3Blcy5yZW1v
dmVMYXN0KCk7IH0KKyAgICBKdW1wU2NvcGUqIHRvcENvbnRpbnVlSnVtcFNjb3BlKCkgY29uc3Qg
eyByZXR1cm4gbV9jb250aW51ZUp1bXBTY29wZXMubGFzdCgpOyB9CisKKyAgICB2b2lkIHB1c2hC
cmVha0p1bXBMaXN0KEp1bXBMaXN0KiBqdW1wTGlzdCkgeyBtX2JyZWFrSnVtcExpc3RzLmFwcGVu
ZChqdW1wTGlzdCk7IH0KKyAgICB2b2lkIHBvcEJyZWFrSnVtcExpc3QoKSB7IG1fYnJlYWtKdW1w
TGlzdHMucmVtb3ZlTGFzdCgpOyB9CisgICAgSnVtcExpc3QqIHRvcEJyZWFrSnVtcExpc3QoKSBj
b25zdCB7IHJldHVybiBtX2JyZWFrSnVtcExpc3RzLmxhc3QoKTsgfQorCisgICAgSW4gbV9yZWFk
OworCisgICAgVmVjdG9yPFNpZ25hdHVyZT4gbV9zaWduYXR1cmVzOworICAgIFZlY3Rvcjx1aW50
MzJfdD4gbV9pMzJzOworICAgIFZlY3RvcjxmbG9hdD4gbV9mMzJzOworICAgIFZlY3Rvcjxkb3Vi
bGU+IG1fZjY0czsKKyAgICBWZWN0b3I8RnVuY0ltcG9ydFNpZ25hdHVyZT4gbV9mdW5jSW1wb3J0
U2lnbmF0dXJlczsKKyAgICBWZWN0b3I8VHlwZT4gbV9nbG9iYWxUeXBlczsKKyAgICBWZWN0b3I8
dWludDMyX3Q+IG1fZnVuY1NpZ3M7CisgICAgVmVjdG9yPEZ1bmNQdHJUYWJsZT4gbV9mdW5jUHRy
VGFibGVzOworCisgICAgUlR5cGUgbV9jdXJyZW50UmV0dXJuVHlwZTsKKyAgICBWZWN0b3I8VHlw
ZT4gbV9jdXJyZW50TG9jYWxUeXBlczsKKworICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwqPiBtX2NvbnRpbnVlTGFiZWxMYWJlbHM7CisgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCo+IG1fYnJlYWtMYWJlbEp1bXBMaXN0czsKKworICAgIFZlY3RvcjxKdW1wU2NvcGUq
PiBtX2NvbnRpbnVlSnVtcFNjb3BlczsKKyAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0Kj4gbV9icmVha0p1bXBMaXN0czsKK307CisKK0pTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUg
Y29tcGlsZUFuZFJ1bihFeGVjU3RhdGUqLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcik7CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBXYXNtSklUQ29tcGlsZXJf
aApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wY29kZXMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGNvZGVzLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDRi
ZTUyOWRjMzBhNTNmZjQyYjg1ZTUyODIxMjZiNWQ5YjJhNGJjOQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGNvZGVzLmgKQEAgLTAsMCArMSw1OTEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorIExp
Y2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5z
ZSIpOworIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0
aCB0aGUgTGljZW5zZS4KKyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQK
KworIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgVW5sZXNz
IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0
d2FyZQorIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFu
ICJBUyBJUyIgQkFTSVMsCisgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5Z
IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgU2VlIHRoZSBMaWNlbnNlIGZvciB0
aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIGxpbWl0YXRp
b25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKworI2lmbmRlZiBXYXNtT3Bjb2Rlc19oCisjZGVm
aW5lIFdhc21PcGNvZGVzX2gKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXYXNtIHsK
Kworc3RhdGljIGNvbnN0IHVpbnQzMl90IE1hZ2ljTnVtYmVyID0gMHg2ZDczNjE3NzsKKworZW51
bSBjbGFzcyBTdG10IDogdWludDhfdCB7CisgICAgU2V0TG9jLAorICAgIFNldEdsbywKKyAgICBJ
MzJTdG9yZTgsCisgICAgSTMyU3RvcmVPZmY4LAorICAgIEkzMlN0b3JlMTYsCisgICAgSTMyU3Rv
cmVPZmYxNiwKKyAgICBJMzJTdG9yZTMyLAorICAgIEkzMlN0b3JlT2ZmMzIsCisgICAgRjMyU3Rv
cmUsCisgICAgRjMyU3RvcmVPZmYsCisgICAgRjY0U3RvcmUsCisgICAgRjY0U3RvcmVPZmYsCisg
ICAgQ2FsbEludCwKKyAgICBDYWxsSW5kLAorICAgIENhbGxJbXAsCisgICAgUmV0LAorICAgIEJs
b2NrLAorICAgIElmVGhlbiwKKyAgICBJZkVsc2UsCisgICAgV2hpbGUsCisgICAgRG8sCisgICAg
TGFiZWwsCisgICAgQnJlYWssCisgICAgQnJlYWtMYWJlbCwKKyAgICBDb250aW51ZSwKKyAgICBD
b250aW51ZUxhYmVsLAorICAgIFN3aXRjaCwKKworICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBT
dG10V2l0aEltbSA6IHVpbnQ4X3QgeworICAgIFNldExvYywKKyAgICBTZXRHbG8sCisgICAgUmVz
ZXZlZDEsCisgICAgUmVzZXZlZDIsCisKKyAgICBCYWQKK307CisKK2VudW0gY2xhc3MgU3dpdGNo
Q2FzZSA6IHVpbnQ4X3QgeworICAgIENhc2UwLAorICAgIENhc2UxLAorICAgIENhc2VOLAorICAg
IERlZmF1bHQwLAorICAgIERlZmF1bHQxLAorICAgIERlZmF1bHROCit9OworCitlbnVtIGNsYXNz
IEkzMiA6IHVpbnQ4X3QgeworICAgIExpdFBvb2wsCisgICAgTGl0SW1tLAorICAgIEdldExvYywK
KyAgICBHZXRHbG8sCisgICAgU2V0TG9jLAorICAgIFNldEdsbywKKyAgICBTTG9hZDgsCisgICAg
U0xvYWRPZmY4LAorICAgIFVMb2FkOCwKKyAgICBVTG9hZE9mZjgsCisgICAgU0xvYWQxNiwKKyAg
ICBTTG9hZE9mZjE2LAorICAgIFVMb2FkMTYsCisgICAgVUxvYWRPZmYxNiwKKyAgICBMb2FkMzIs
CisgICAgTG9hZE9mZjMyLAorICAgIFN0b3JlOCwKKyAgICBTdG9yZU9mZjgsCisgICAgU3RvcmUx
NiwKKyAgICBTdG9yZU9mZjE2LAorICAgIFN0b3JlMzIsCisgICAgU3RvcmVPZmYzMiwKKyAgICBD
YWxsSW50LAorICAgIENhbGxJbmQsCisgICAgQ2FsbEltcCwKKyAgICBDb25kLAorICAgIENvbW1h
LAorICAgIEZyb21GMzIsCisgICAgRnJvbUY2NCwKKyAgICBOZWcsCisgICAgQWRkLAorICAgIFN1
YiwKKyAgICBNdWwsCisgICAgU0RpdiwKKyAgICBVRGl2LAorICAgIFNNb2QsCisgICAgVU1vZCwK
KyAgICBCaXROb3QsCisgICAgQml0T3IsCisgICAgQml0QW5kLAorICAgIEJpdFhvciwKKyAgICBM
c2gsCisgICAgQXJpdGhSc2gsCisgICAgTG9naWNSc2gsCisgICAgQ2x6LAorICAgIExvZ2ljTm90
LAorICAgIEVxSTMyLAorICAgIEVxRjMyLAorICAgIEVxRjY0LAorICAgIE5FcUkzMiwKKyAgICBO
RXFGMzIsCisgICAgTkVxRjY0LAorICAgIFNMZVRoSTMyLAorICAgIFVMZVRoSTMyLAorICAgIExl
VGhGMzIsCisgICAgTGVUaEY2NCwKKyAgICBTTGVFcUkzMiwKKyAgICBVTGVFcUkzMiwKKyAgICBM
ZUVxRjMyLAorICAgIExlRXFGNjQsCisgICAgU0dyVGhJMzIsCisgICAgVUdyVGhJMzIsCisgICAg
R3JUaEYzMiwKKyAgICBHclRoRjY0LAorICAgIFNHckVxSTMyLAorICAgIFVHckVxSTMyLAorICAg
IEdyRXFGMzIsCisgICAgR3JFcUY2NCwKKyAgICBTTWluLAorICAgIFVNaW4sCisgICAgU01heCwK
KyAgICBVTWF4LAorICAgIEFicywKKworICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBJMzJXaXRo
SW1tIDogdWludDhfdCB7CisgICAgTGl0UG9vbCwKKyAgICBMaXRJbW0sCisgICAgR2V0TG9jLAor
ICAgIFJlc2VydmVkLAorCisgICAgQmFkCit9OworCitlbnVtIGNsYXNzIEYzMiA6IHVpbnQ4X3Qg
eworICAgIExpdFBvb2wsCisgICAgTGl0SW1tLAorICAgIEdldExvYywKKyAgICBHZXRHbG8sCisg
ICAgU2V0TG9jLAorICAgIFNldEdsbywKKyAgICBMb2FkLAorICAgIExvYWRPZmYsCisgICAgU3Rv
cmUsCisgICAgU3RvcmVPZmYsCisgICAgQ2FsbEludCwKKyAgICBDYWxsSW5kLAorICAgIENvbmQs
CisgICAgQ29tbWEsCisgICAgRnJvbVMzMiwKKyAgICBGcm9tVTMyLAorICAgIEZyb21GNjQsCisg
ICAgTmVnLAorICAgIEFkZCwKKyAgICBTdWIsCisgICAgTXVsLAorICAgIERpdiwKKyAgICBBYnMs
CisgICAgQ2VpbCwKKyAgICBGbG9vciwKKyAgICBTcXJ0LAorCisgICAgQmFkCit9OworCitlbnVt
IGNsYXNzIEYzMldpdGhJbW0gOiB1aW50OF90IHsKKyAgICBMaXRQb29sLAorICAgIEdldExvYywK
KyAgICBSZXNlcnZlZDAsCisgICAgUmVzZXJ2ZWQxLAorCisgICAgQmFkCit9OworCitlbnVtIGNs
YXNzIEY2NCA6IHVpbnQ4X3QgeworICAgIExpdFBvb2wsCisgICAgTGl0SW1tLAorICAgIEdldExv
YywKKyAgICBHZXRHbG8sCisgICAgU2V0TG9jLAorICAgIFNldEdsbywKKyAgICBMb2FkLAorICAg
IExvYWRPZmYsCisgICAgU3RvcmUsCisgICAgU3RvcmVPZmYsCisgICAgQ2FsbEludCwKKyAgICBD
YWxsSW5kLAorICAgIENhbGxJbXAsCisgICAgQ29uZCwKKyAgICBDb21tYSwKKyAgICBGcm9tUzMy
LAorICAgIEZyb21VMzIsCisgICAgRnJvbUYzMiwKKyAgICBOZWcsCisgICAgQWRkLAorICAgIFN1
YiwKKyAgICBNdWwsCisgICAgRGl2LAorICAgIE1vZCwKKyAgICBNaW4sCisgICAgTWF4LAorICAg
IEFicywKKyAgICBDZWlsLAorICAgIEZsb29yLAorICAgIFNxcnQsCisgICAgQ29zLAorICAgIFNp
biwKKyAgICBUYW4sCisgICAgQUNvcywKKyAgICBBU2luLAorICAgIEFUYW4sCisgICAgQVRhbjIs
CisgICAgRXhwLAorICAgIExuLAorICAgIFBvdywKKworICAgIEJhZAorfTsKKworZW51bSBjbGFz
cyBGNjRXaXRoSW1tIDogdWludDhfdCB7CisgICAgTGl0UG9vbCwKKyAgICBHZXRMb2MsCisgICAg
UmVzZXJ2ZWQwLAorICAgIFJlc2VydmVkMSwKKworICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBW
b2lkIDogdWludDhfdCB7CisgICAgQ2FsbEludCwKKyAgICBDYWxsSW5kLAorICAgIENhbGxJbXAs
CisKKyAgICBCYWQKK307CisKK2VudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeworICAgIEkzMiwK
KyAgICBGMzIsCisgICAgRjY0Cit9OworCitlbnVtIGNsYXNzIFZhclR5cGVzIDogdWludDhfdCB7
CisgICAgSTMyID0gMHgxLAorICAgIEYzMiA9IDB4MiwKKyAgICBGNjQgPSAweDQsCit9OworCitp
bmxpbmUgVmFyVHlwZXMgb3BlcmF0b3J8IChWYXJUeXBlcyBsaHMsIFZhclR5cGVzIHJocykgeyBy
ZXR1cm4gVmFyVHlwZXModWludDhfdChsaHMpIHwgdWludDhfdChyaHMpKTsgfQoraW5saW5lIGJv
b2wgb3BlcmF0b3ImKFZhclR5cGVzIGxocywgVmFyVHlwZXMgcmhzKSB7IHJldHVybiBib29sKHVp
bnQ4X3QobGhzKSAmIHVpbnQ4X3QocmhzKSk7IH0KKworZW51bSBjbGFzcyBWYXJUeXBlc1dpdGhJ
bW0gOiB1aW50OF90IHsKKyAgICBPbmx5STMyLAorICAgIFJlc2VydmVkMCwKKyAgICBSZXNlcnZl
ZDEsCisgICAgUmVzZXJ2ZWQyCit9OworCitlbnVtIGNsYXNzIFJUeXBlIDogdWludDhfdCB7Cisg
ICAgSTMyID0gdWludDhfdChUeXBlOjpJMzIpLAorICAgIEYzMiA9IHVpbnQ4X3QoVHlwZTo6RjMy
KSwKKyAgICBGNjQgPSB1aW50OF90KFR5cGU6OkY2NCksCisgICAgVm9pZAorfTsKKworY2xhc3Mg
RXhwciB7CitwdWJsaWM6CisgICAgRXhwcigpCisgICAgOiBtX3R5cGUoUlR5cGUoLTEpKSwgdSB7
IH0KKyAgICB7CisgICAgfQorICAgIEV4cHIoSTMyIGkzMikgOiBtX3R5cGUoUlR5cGU6OkkzMikg
eyB1LmkzMiA9IGkzMjsgfQorICAgIEV4cHIoRjMyIGYzMikgOiBtX3R5cGUoUlR5cGU6OkYzMikg
eyB1LmYzMiA9IGYzMjsgfQorICAgIEV4cHIoRjY0IGY2NCkgOiBtX3R5cGUoUlR5cGU6OkY2NCkg
eyB1LmY2NCA9IGY2NDsgfQorICAgIEV4cHIoVm9pZCB2KSA6IG1fdHlwZShSVHlwZTo6Vm9pZCkg
eyB1LnYgPSB2OyB9CisKKyAgICBSVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
CisgICAgSTMyIGkzMigpIGNvbnN0IHsgcmV0dXJuIHUuaTMyOyB9CisgICAgRjMyIGYzMigpIGNv
bnN0IHsgcmV0dXJuIHUuZjMyOyB9CisgICAgRjY0IGY2NCgpIGNvbnN0IHsgcmV0dXJuIHUuZjY0
OyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oRXhwciByaHMpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZSA9PSByaHMubV90eXBlICYmIHUucmF3ID09IHJocy51LnJhdzsgfQorICAgIGJvb2wgb3BlcmF0
b3IhPShFeHByIHJocykgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSByaHMpOyB9CisKK3ByaXZh
dGU6CisgICAgUlR5cGUgbV90eXBlOworICAgIHVuaW9uIFUgeworICAgICAgICBJMzIgaTMyOwor
ICAgICAgICBGMzIgZjMyOworICAgICAgICBGNjQgZjY0OworICAgICAgICBWb2lkIHY7CisgICAg
ICAgIHVpbnQ4X3QgcmF3OworICAgIH0gdTsKKworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFUp
ID09IHNpemVvZih1aW50OF90KSwgIkV4YWN0IG92ZXJsYXkgb2YgcmF3XyIpOworfTsKKworc3Rh
dGljIGNvbnN0IHVpbnQ4X3QgSGFzSW1tRmxhZyA9IDB4ODA7CitzdGF0aWNfYXNzZXJ0KHVpbnQ4
X3QoSTMyOjpCYWQpIDw9IEhhc0ltbUZsYWcsICJNU0IgcmVzZXJ2ZWQgdG8gZGlzdGluZ3Vpc2gg
STMyIGZyb20gSTMyV2l0aEltbSIpOworc3RhdGljX2Fzc2VydCh1aW50OF90KEYzMjo6QmFkKSA8
PSBIYXNJbW1GbGFnLCAiTVNCIHJlc2VydmVkIHRvIGRpc3Rpbmd1aXNoIEYzMiBmcm9tIEYzMldp
dGhJbW0iKTsKK3N0YXRpY19hc3NlcnQodWludDhfdChGNjQ6OkJhZCkgPD0gSGFzSW1tRmxhZywg
Ik1TQiByZXNlcnZlZCB0byBkaXN0aW5ndWlzaCBGNjQgZnJvbSBGNjRXaXRoSW1tIik7CisKK3N0
YXRpYyBjb25zdCB1bnNpZ25lZCBPcFdpdGhJbW1CaXRzID0gMjsKK3N0YXRpYyBjb25zdCB1aW50
MzJfdCBPcFdpdGhJbW1MaW1pdCA9IDEgPDwgT3BXaXRoSW1tQml0czsKK3N0YXRpY19hc3NlcnQo
dWludDhfdChJMzJXaXRoSW1tOjpCYWQpIDw9IE9wV2l0aEltbUxpbWl0LCAiSTMyV2l0aEltbSBv
cCBmaXRzIik7CitzdGF0aWNfYXNzZXJ0KHVpbnQ4X3QoRjMyV2l0aEltbTo6QmFkKSA8PSBPcFdp
dGhJbW1MaW1pdCwgIkYzMldpdGhJbW0gb3AgZml0cyIpOworc3RhdGljX2Fzc2VydCh1aW50OF90
KEY2NFdpdGhJbW06OkJhZCkgPD0gT3BXaXRoSW1tTGltaXQsICJGNjRXaXRoSW1tIG9wIGZpdHMi
KTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIEltbUJpdHMgPSA1Oworc3RhdGljIGNvbnN0IHVp
bnQzMl90IEltbUxpbWl0ID0gMSA8PCBJbW1CaXRzOworc3RhdGljX2Fzc2VydCgoMSArIE9wV2l0
aEltbUJpdHMgKyBJbW1CaXRzKSA9PSA4LCAiQml0cyBvZiBpbW1lZGlhdGUgb3Agc2hvdWxkIGFk
ZCB1cCB0byBhIGJ5dGUiKTsKKworc3RhdGljIGlubGluZSB1aW50OF90IFBhY2tPcFdpdGhJbW0o
dWludDhfdCBvcCwgdWludDhfdCBpbW0pCit7CisgICAgYXNzZXJ0KG9wIDwgT3BXaXRoSW1tTGlt
aXQpOworICAgIGFzc2VydChpbW0gPCBJbW1MaW1pdCk7CisgICAgcmV0dXJuIEhhc0ltbUZsYWcg
fCAodWludDhfdChvcCkgPDwgSW1tQml0cykgfCBpbW07Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBU
V2l0aEltbT4KK3N0YXRpYyBpbmxpbmUgdm9pZCBVbnBhY2tPcFdpdGhJbW0odWludDhfdCBieXRl
LCBUV2l0aEltbSogb3AsIHVpbnQ4X3QgKmltbSkKK3sKKyAgICBhc3NlcnQoYnl0ZSAmIEhhc0lt
bUZsYWcpOworICAgICpvcCA9IFRXaXRoSW1tKChieXRlID4+IEltbUJpdHMpICYgKE9wV2l0aElt
bUxpbWl0IC0gMSkpOworICAgICppbW0gPSBieXRlICYgKEltbUxpbWl0IC0gMSk7Cit9CisKK2Ns
YXNzIEV4cHJXaXRoSW1tIHsKK3B1YmxpYzoKKyAgICBFeHByV2l0aEltbSgpCisgICAgICAgIDog
bV90eXBlKFR5cGUoLTEpKQorICAgIHsKKyAgICB9CisgICAgRXhwcldpdGhJbW0oSTMyV2l0aElt
bSBpMzIpIDogbV90eXBlKFR5cGU6OkkzMikgeyB1LmkzMiA9IGkzMjsgfQorICAgIEV4cHJXaXRo
SW1tKEYzMldpdGhJbW0gZjMyKSA6IG1fdHlwZShUeXBlOjpGMzIpIHsgdS5mMzIgPSBmMzI7IH0K
KyAgICBFeHByV2l0aEltbShGNjRXaXRoSW1tIGY2NCkgOiBtX3R5cGUoVHlwZTo6RjY0KSB7IHUu
ZjY0ID0gZjY0OyB9CisKKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0K
KyAgICBJMzJXaXRoSW1tIGkzMigpIGNvbnN0IHsgcmV0dXJuIHUuaTMyOyB9CisgICAgRjMyV2l0
aEltbSBmMzIoKSBjb25zdCB7IHJldHVybiB1LmYzMjsgfQorICAgIEY2NFdpdGhJbW0gZjY0KCkg
Y29uc3QgeyByZXR1cm4gdS5mNjQ7IH0KKworcHJpdmF0ZToKKyAgICBUeXBlIG1fdHlwZTsKKyAg
ICB1bmlvbiBVIHsKKyAgICAgICAgSTMyV2l0aEltbSBpMzI7CisgICAgICAgIEYzMldpdGhJbW0g
ZjMyOworICAgICAgICBGNjRXaXRoSW1tIGY2NDsKKyAgICAgICAgdWludDhfdCByYXc7CisgICAg
fSB1OworCisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVSkgPT0gc2l6ZW9mKHVpbnQ4X3QpLCAi
RXhhY3Qgb3ZlcmxheSBvZiByYXdfIik7Cit9OworCitlbnVtIGNsYXNzIEV4cG9ydEZvcm1hdCA6
IHVpbnQ4X3QgeworICAgIERlZmF1bHQsCisgICAgUmVjb3JkCit9OworCitlbnVtIGNsYXNzIFNp
Z25lZG5lc3MgeyBTaWduZWQsIFVuc2lnbmVkIH07CisKK3N0cnVjdCBTaWduYXR1cmUgeworICAg
IFJUeXBlIHJldDsKKyAgICBWZWN0b3I8VHlwZT4gYXJndW1lbnRzOworCisgICAgU2lnbmF0dXJl
KCkgeyB9CisgICAgU2lnbmF0dXJlKFJUeXBlIHJldCkKKyAgICAgICAgOiByZXQocmV0KSB7IH0K
KyAgICBTaWduYXR1cmUoUlR5cGUgcmV0LCB1aW50MzJfdCBhcmd1bWVudENvdW50KQorICAgICAg
ICA6IHJldChyZXQpCisgICAgICAgICwgYXJndW1lbnRzKGFyZ3VtZW50Q291bnQpIHsgfQorICAg
IFNpZ25hdHVyZShSVHlwZSByZXQsIFZlY3RvcjxUeXBlPiYmIGFyZ3VtZW50cykKKyAgICAgICAg
OiByZXQocmV0KQorICAgICAgICAsIGFyZ3VtZW50cyhXVEY6Om1vdmUoYXJndW1lbnRzKSkgeyB9
CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU2lnbmF0dXJlJiByaHMpIGNvbnN0IHsgcmV0
dXJuIHJldCA9PSByaHMucmV0ICYmIGFyZ3VtZW50cyA9PSByaHMuYXJndW1lbnRzOyB9CisgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IFNpZ25hdHVyZSYgcmhzKSBjb25zdCB7IHJldHVybiAhKCp0
aGlzID09IHJocyk7IH0KKworICAgIHN0cnVjdCBIYXNoIHsKKyAgICAgICAgYm9vbCBvcGVyYXRv
cigpKGNvbnN0IFNpZ25hdHVyZSAmc2lnbmF0dXJlKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihUeXBlKSA9PSAxICYmIHNpemVvZihSVHlwZSkgPT0g
MSwgIlNoaWZ0IG1vcmUiKTsKKyAgICAgICAgICAgIHVpbnQzMl90IGggPSB1aW50OF90KHNpZ25h
dHVyZS5yZXQpOworICAgICAgICAgICAgZm9yIChUeXBlIHQgOiBzaWduYXR1cmUuYXJndW1lbnRz
KQorICAgICAgICAgICAgICAgIGggPSAoKGggPDwgMikgfCB1aW50OF90KHQpKSBeIChoID4+IDMw
KTsKKyAgICAgICAgICAgIHJldHVybiBoOworICAgICAgICB9CisgICAgfTsKK307CisKK2NsYXNz
IEluIHsKK3B1YmxpYzoKKyAgICBJbigpIHsgfQorICAgIEluKGNvbnN0IHVpbnQ4X3QqIGJlZ2lu
KQorICAgICAgICA6IG1fY3Vyc29yKGJlZ2luKQorICAgIHsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZSA8Y2xhc3MgVD4gVCBmaXhlZFdpZHRoKCk7CisgICAgU3RtdCBzdG10KCkgeyByZXR1cm4gdTg8
U3RtdD4oKTsgfQorICAgIFN3aXRjaENhc2Ugc3dpdGNoQ2FzZSgpIHsgcmV0dXJuIHU4PFN3aXRj
aENhc2U+KCk7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBUV2l0aEltbT4gaW5saW5l
IGJvb2wgY29kZShUKiwgVFdpdGhJbW0qLCB1aW50OF90Kik7CisgICAgVm9pZCB2b2lkRXhwcigp
IHsgcmV0dXJuIHU4PFZvaWQ+KCk7IH0KKyAgICBFeHBvcnRGb3JtYXQgZXhwb3J0Rm9ybWF0KCkg
eyByZXR1cm4gdTg8RXhwb3J0Rm9ybWF0PigpOyB9CisgICAgVHlwZSB0eXBlKCkgeyByZXR1cm4g
dTg8VHlwZT4oKTsgfQorICAgIFJUeXBlIHJ0eXBlKCkgeyByZXR1cm4gdTg8UlR5cGU+KCk7IH0K
KyAgICBpbmxpbmUgdWludDMyX3QgaW1tVTMyKCk7CisgICAgaW5saW5lIGludDMyX3QgaW1tUzMy
KCk7CisgICAgY2hhciBzaW5nbGVDaGFyKCkgeyByZXR1cm4gKm1fY3Vyc29yKys7IH0KKworICAg
IGlubGluZSBib29sIGlmSTMyTGl0KGNvbnN0IFZlY3Rvcjx1aW50MzJfdD4mIGkzMnMsIHVpbnQz
Ml90Kik7CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IFQgdTgoKSB7IHJldHVy
biBUKCptX2N1cnNvcisrKTsgfQorCisgICAgY29uc3QgdWludDhfdCogbV9jdXJzb3I7Cit9Owor
Cit0ZW1wbGF0ZSA8PgoraW5saW5lIHVpbnQzMl90IEluOjpmaXhlZFdpZHRoPHVpbnQzMl90Pigp
Cit7CisgICAgdWludDMyX3QgdTMyID0gbV9jdXJzb3JbMF0gfCBtX2N1cnNvclsxXSA8PCA4IHwg
bV9jdXJzb3JbMl0gPDwgMTYgfCBtX2N1cnNvclszXSA8PCAyNDsKKyAgICBtX2N1cnNvciArPSA0
OworICAgIHJldHVybiB1MzI7Cit9CisKK3RlbXBsYXRlIDw+CitpbmxpbmUgZmxvYXQgSW46OmZp
eGVkV2lkdGg8ZmxvYXQ+KCkKK3sKKyAgICB1bmlvbiB7CisgICAgICAgIHVpbnQ4X3QgYXJyWzRd
OworICAgICAgICBmbG9hdCBmOworICAgIH0gdSA9IHsgeyBtX2N1cnNvclswXSwgbV9jdXJzb3Jb
MV0sIG1fY3Vyc29yWzJdLCBtX2N1cnNvclszXSB9IH07CisgICAgbV9jdXJzb3IgKz0gNDsKKyAg
ICByZXR1cm4gdS5mOworfQorCit0ZW1wbGF0ZSA8PgoraW5saW5lIGRvdWJsZSBJbjo6Zml4ZWRX
aWR0aDxkb3VibGU+KCkKK3sKKyAgICB1bmlvbiB7CisgICAgICAgIHVpbnQ4X3QgYXJyWzhdOwor
ICAgICAgICBkb3VibGUgZDsKKyAgICB9IHUgPSB7IHsgbV9jdXJzb3JbMF0sIG1fY3Vyc29yWzFd
LCBtX2N1cnNvclsyXSwgbV9jdXJzb3JbM10sIG1fY3Vyc29yWzRdLCBtX2N1cnNvcls1XSwgbV9j
dXJzb3JbNl0sIG1fY3Vyc29yWzddIH0gfTsKKyAgICBtX2N1cnNvciArPSA4OworICAgIHJldHVy
biB1LmQ7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUV2l0aEltbT4KK2Jvb2wgSW46
OmNvZGUoVCogdCwgVFdpdGhJbW0qIHRXaXRoSW1tLCB1aW50OF90KiBpbW0pCit7CisgICAgdWlu
dDhfdCBieXRlID0gKm1fY3Vyc29yKys7CisgICAgaWYgKCEoYnl0ZSAmIEhhc0ltbUZsYWcpKSB7
CisgICAgICAgICp0ID0gVChieXRlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgVW5wYWNrT3BXaXRoSW1tKGJ5dGUsIHRXaXRoSW1tLCBpbW0pOworICAgIHJldHVybiBmYWxz
ZTsKK30KKworaW5saW5lIHVpbnQzMl90IEluOjppbW1VMzIoKQoreworICAgIHVpbnQzMl90IHUz
MiA9ICptX2N1cnNvcisrOworICAgIGlmICh1MzIgPCAweDgwKQorICAgICAgICByZXR1cm4gdTMy
OworCisgICAgdTMyICY9IDB4N2Y7CisKKyAgICBmb3IgKHVuc2lnbmVkIHNoaWZ0ID0gNzsgdHJ1
ZTsgc2hpZnQgKz0gNykgeworICAgICAgICB1aW50MzJfdCBiID0gKm1fY3Vyc29yKys7CisgICAg
ICAgIGlmIChiIDwgMHg4MCkKKyAgICAgICAgICAgIHJldHVybiB1MzIgfCAoYiA8PCBzaGlmdCk7
CisgICAgICAgIHUzMiB8PSAoYiAmIDB4N2YpIDw8IHNoaWZ0OworICAgIH0KK30KKworaW5saW5l
IGludDMyX3QgSW46OmltbVMzMigpCit7CisgICAgdWludDMyX3QgdTMyID0gKm1fY3Vyc29yKys7
CisgICAgaWYgKHUzMiA8IDB4ODApCisgICAgICAgIHJldHVybiBpbnQzMl90KHUzMikgPDwgKDMy
LTcpID4+ICgzMi03KTsKKworICAgIHUzMiAmPSAweDdmOworCisgICAgZm9yICh1bnNpZ25lZCBz
aGlmdCA9IDc7IHRydWU7IHNoaWZ0ICs9IDcpIHsKKyAgICAgICAgdWludDMyX3QgYiA9ICptX2N1
cnNvcisrOworICAgICAgICBpZiAoYiA8IDB4ODApIHsKKyAgICAgICAgICAgIHUzMiB8PSBiIDw8
IHNoaWZ0OworICAgICAgICAgICAgaW50IHNpZ25FeHRlbmQgPSAoMzItNykgLSBzaGlmdDsKKyAg
ICAgICAgICAgIGlmIChzaWduRXh0ZW5kID4gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50
MzJfdCh1MzIpIDw8IHNpZ25FeHRlbmQgPj4gc2lnbkV4dGVuZDsKKyAgICAgICAgICAgIHJldHVy
biBpbnQzMl90KHUzMik7CisgICAgICAgIH0KKyAgICAgICAgdTMyIHw9IChiICYgMHg3ZikgPDwg
c2hpZnQ7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBJbjo6aWZJMzJMaXQoY29uc3QgVmVjdG9y
PHVpbnQzMl90PiYgaTMycywgdWludDMyX3QqIHUzMikKK3sKKyAgICB1aW50OF90IGJ5dGUgPSAq
bV9jdXJzb3I7CisKKyAgICBpZiAoYnl0ZSAmIEhhc0ltbUZsYWcpIHsKKyAgICAgICAgSTMyV2l0
aEltbSBpMzJXaXRoSW1tOworICAgICAgICB1aW50OF90IGltbTsKKyAgICAgICAgVW5wYWNrT3BX
aXRoSW1tKGJ5dGUsICZpMzJXaXRoSW1tLCAmaW1tKTsKKworICAgICAgICBpZiAoaTMyV2l0aElt
bSA9PSBJMzJXaXRoSW1tOjpMaXRJbW0pIHsKKyAgICAgICAgICAgIG1fY3Vyc29yKys7CisgICAg
ICAgICAgICAqdTMyID0gaW1tOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoaTMyV2l0aEltbSA9PSBJMzJXaXRoSW1tOjpMaXRQb29sKSB7CisgICAg
ICAgICAgICBtX2N1cnNvcisrOworICAgICAgICAgICAgKnUzMiA9IGkzMnNbaW1tXTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGlmIChJMzIoYnl0ZSkgPT0gSTMyOjpMaXRJbW0pIHsKKyAgICAgICAgbV9j
dXJzb3IrKzsKKyAgICAgICAgKnUzMiA9IGltbVUzMigpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICBpZiAoSTMyKGJ5dGUpID09IEkzMjo6TGl0UG9vbCkgeworICAgICAgICBt
X2N1cnNvcisrOworICAgICAgICAqdTMyID0gaTMyc1tpbW1VMzIoKV07CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIFdhc21PcGNvZGVzX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256153</attachid>
            <date>2015-07-04 10:31:50 -0700</date>
            <delta_ts>2015-07-09 00:22:46 -0700</delta_ts>
            <desc>Work in progress. Add support for some 64-bit floating-point operations.</desc>
            <filename>bug-146064-20150704103053.patch</filename>
            <type>text/plain</type>
            <size>63909</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1Nzk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
ZGMwZDVjOTQ5M2QxMTVlODMxMzdlYmU3Zjk1NGI3ZjgyZDUwZDI1Li5jNmIwMjg4NGM4MzIyMGYw
MWUyMWNiZjYwYzA1Yjc0ZDI2NjMwYzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDkgQEAKKzIwMTUtMDctMDQgIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0Bn
bWFpbC5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBuYXRpdmVseSBzdXBwb3J0IFdlYkFzc2Vt
Ymx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYw
NjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICoganNjLmNw
cDoKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoZnVu
Y3Rpb25Mb2FkV2ViQXNzZW1ibHkpOgorICAgICAgICAqIHdhc20vV2FzbUpJVENvbXBpbGVyLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206Okp1bXBTY29wZTo6SnVtcFNjb3BlKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6SnVtcFNjb3BlOjpqdW1wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
SnVtcFNjb3BlOjpsaW5rKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OmNvbXBp
bGVBbmRSdW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6Y29tcGlsZSk6Cisg
ICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZSk6CisgICAgICAgIChKU0M6Oldh
c206OkpJVENvbXBpbGVyOjpwYXJzZUNvbnN0YW50UG9vbFNlY3Rpb24pOgorICAgICAgICAoSlND
OjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VTaWduYXR1cmVTZWN0aW9uKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlRnVuY3Rpb25JbXBvcnRTZWN0aW9uKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlR2xvYmFsU2VjdGlvbik6CisgICAgICAg
IChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9u
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlRnVuY3Rpb25Qb2ludGVy
VGFibGVzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlRnVuY3Rpb25E
ZWZpbml0aW9uU2VjdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJz
ZUV4cG9ydFNlY3Rpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VG
dW5jdGlvbkRlZmluaXRpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFy
c2VBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VWYXJz
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlU3RtdCk6CisgICAgICAg
IChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlU2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpK
SVRDb21waWxlcjo6cGFyc2VSZXR1cm5TdG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29t
cGlsZXI6OnBhcnNlU3RtdExpc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6
cGFyc2VCbG9ja1N0bXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VJ
ZlN0bXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VJZkVsc2VTdG10
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlV2hpbGVTdG10KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlRG9TdG10KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlTGFiZWxTdG10KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6SklUQ29tcGlsZXI6OnBhcnNlQnJlYWtMYWJlbFN0bXQpOgorICAgICAgICAoSlNDOjpXYXNt
OjpKSVRDb21waWxlcjo6cGFyc2VDb250aW51ZUxhYmVsU3RtdCk6CisgICAgICAgIChKU0M6Oldh
c206OkpJVENvbXBpbGVyOjpwYXJzZVN3aXRjaFN0bXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpK
SVRDb21waWxlcjo6cGFyc2VFeHByKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6
OnBhcnNlRXhwckkzMik6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZUV4
cHJGNjQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VCaW5hcnlPcCk6
CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZVVuYXJ5T3ApOgorICAgICAg
ICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VSZWxhdGlvbmFsT3ApOgorICAgICAgICAo
SlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VDb21tYSk6CisgICAgICAgIChKU0M6Oldhc206
OkpJVENvbXBpbGVyOjpwYXJzZUNvbmQpOgorICAgICAgICAoSlNDOjpXYXNtOjpjb21waWxlQW5k
UnVuKToKKyAgICAgICAgKiB3YXNtL1dhc21KSVRDb21waWxlci5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OkpJVENvbXBpbGVyKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6SklUQ29tcGlsZXI6OnN0YWNrQWRkcmVzcyk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENv
bXBpbGVyOjp0ZW1wb3JhcnlBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGls
ZXI6OnB1c2hDb250aW51ZUxhYmVsTGFiZWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21w
aWxlcjo6cG9wQ29udGludWVMYWJlbExhYmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29t
cGlsZXI6OmNvbnRpbnVlTGFiZWxMYWJlbCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBp
bGVyOjpwdXNoQnJlYWtMYWJlbEp1bXBMaXN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29t
cGlsZXI6OnBvcEJyZWFrTGFiZWxKdW1wTGlzdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENv
bXBpbGVyOjpicmVha0xhYmVsSnVtcExpc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21w
aWxlcjo6cHVzaENvbnRpbnVlSnVtcFNjb3BlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29t
cGlsZXI6OnBvcENvbnRpbnVlSnVtcFNjb3BlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29t
cGlsZXI6OnRvcENvbnRpbnVlSnVtcFNjb3BlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29t
cGlsZXI6OnB1c2hCcmVha0p1bXBMaXN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGls
ZXI6OnBvcEJyZWFrSnVtcExpc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6
dG9wQnJlYWtKdW1wTGlzdCk6CisgICAgICAgICogd2FzbS9XYXNtT3Bjb2Rlcy5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6V2FzbTo6b3BlcmF0b3J8ICk6CisgICAgICAgIChKU0M6Oldhc206Om9w
ZXJhdG9yJik6CisgICAgICAgIChKU0M6Oldhc206OkV4cHI6OkV4cHIpOgorICAgICAgICAoSlND
OjpXYXNtOjpFeHByOjp0eXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcjo6aTMyKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6RXhwcjo6ZjMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcjo6
ZjY0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChK
U0M6Oldhc206OkV4cHI6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpXYXNtOjpQYWNrT3BX
aXRoSW1tKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VW5wYWNrT3BXaXRoSW1tKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6RXhwcldpdGhJbW06OkV4cHJXaXRoSW1tKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6RXhwcldpdGhJbW06OnR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpFeHByV2l0aEltbTo6
aTMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcldpdGhJbW06OmYzMik6CisgICAgICAgIChK
U0M6Oldhc206OkV4cHJXaXRoSW1tOjpmNjQpOgorICAgICAgICAoSlNDOjpXYXNtOjpTaWduYXR1
cmU6OlNpZ25hdHVyZSk6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZTo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZTo6b3BlcmF0b3IhPSk6CisgICAgICAg
IChKU0M6Oldhc206OlNpZ25hdHVyZTo6SGFzaDo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6
Oldhc206OkluOjpJbik6CisgICAgICAgIChKU0M6Oldhc206OkluOjpzdG10KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6SW46OnN3aXRjaENhc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbjo6dm9p
ZEV4cHIpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbjo6ZXhwb3J0Rm9ybWF0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6SW46OnR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbjo6cnR5cGUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpJbjo6c2luZ2xlQ2hhcik6CisgICAgICAgIChKU0M6Oldhc206
OkluOjp1OCk6CisgICAgICAgIChKU0M6Oldhc206OkluOjpmaXhlZFdpZHRoPHVpbnQzMl90Pik6
CisgICAgICAgIChKU0M6Oldhc206OkluOjpmaXhlZFdpZHRoPGZsb2F0Pik6CisgICAgICAgIChK
U0M6Oldhc206OkluOjpmaXhlZFdpZHRoPGRvdWJsZT4pOgorICAgICAgICAoSlNDOjpXYXNtOjpJ
bjo6Y29kZSk6CisgICAgICAgIChKU0M6Oldhc206OkluOjppbW1VMzIpOgorICAgICAgICAoSlND
OjpXYXNtOjpJbjo6aW1tUzMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW46OmlmSTMyTGl0KToK
KwogMjAxNS0wNi0yMCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAog
ICAgICAgICBbRVM2XSBEZXN0cnVjdHVyaW5nIGFzc2lnbm1lbnQgbmVlZCB0byBhY2NlcHQgaXRl
cmFibGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDBmY2IwOTJlNzcxZGVhYTU5
NWY1NGJjMzZjM2RhODNiMGY4MDA3OTYuLjA3NGY2YTY1NmI5YWFhN2RhM2M2YzY2YzVjMGI0OTQ1
N2RiZjlhYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDE2LDYgKzEwMTYs
OSBAQAogCQk3MEVDQTYwNzFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVDQTYwMjFB
RkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5jcHAgKi87IH07CiAJCTcwRUNBNjA4
MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVDQTYwMzFBRkRCRUEyMDA0NDk3MzkgLyog
VGVtcGxhdGVSZWdpc3RyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTcwRUNBNjA5MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5
S2V5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVD
QTYwNDFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCMkQwNEFCMUI0NjU3Q0Ew
MEY3QzQ3MSAvKiBXYXNtSklUQ29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0IyRDA0QTgxQjQ2NTdDNzAwRjdDNDcxIC8qIFdhc21KSVRD
b21waWxlci5jcHAgKi87IH07CisJCTdCMkQwNEFDMUI0NjU3Q0QwMEY3QzQ3MSAvKiBXYXNtSklU
Q29tcGlsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdCMkQwNEE5MUI0NjU3QzcwMEY3QzQ3MSAvKiBXYXNtSklUQ29tcGlsZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3QjJEMDRBRDFCNDY1N0Qy
MDBGN0M0NzEgLyogV2FzbU9wY29kZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdCMkQwNEFBMUI0NjU3QzcwMEY3QzQ3MSAvKiBXYXNtT3Bjb2Rlcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMDA4
Q0QyMTg2RjhBOTMwMDk1NUMyNCAvKiBKU1Byb21pc2VGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwMDhDRDAxODZGOEE5MzAwOTU1
QzI0IC8qIEpTUHJvbWlzZUZ1bmN0aW9ucy5jcHAgKi87IH07CiAJCTdDMDA4Q0QzMTg2RjhBOTMw
MDk1NUMyNCAvKiBKU1Byb21pc2VGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDA4Q0QxMTg2RjhBOTMwMDk1NUMyNCAvKiBKU1Byb21p
c2VGdW5jdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3QzAwOENEQTE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwMDhDRDgx
ODcxMjRCQjAwOTU1QzI0IC8qIEpTUHJvbWlzZURlZmVycmVkLmNwcCAqLzsgfTsKQEAgLTI3NTgs
NiArMjc2MSw5IEBACiAJCTcwRUNBNjAyMUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lz
dHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRlbXBsYXRlUmVn
aXN0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MEVDQTYwMzFBRkRCRUEy
MDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUZW1wbGF0ZVJlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcwRUNBNjA0MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0cnlLZXkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0IyRDA0QTgxQjQ2NTdDNzAwRjdDNDcxIC8qIFdhc21K
SVRDb21waWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNt
SklUQ29tcGlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QjJEMDRBOTFC
NDY1N0M3MDBGN0M0NzEgLyogV2FzbUpJVENvbXBpbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdhc21KSVRDb21waWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3QjJEMDRBQTFCNDY1N0M3MDBGN0M0NzEgLyogV2FzbU9wY29kZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU9wY29kZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0MwMDhDRDAxODZGOEE5MzAwOTU1QzI0IC8qIEpTUHJvbWlzZUZ1bmN0aW9u
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IGxpbmVFbmRpbmcgPSAwOyBwYXRo
ID0gSlNQcm9taXNlRnVuY3Rpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgeGNMYW5n
dWFnZVNwZWNpZmljYXRpb25JZGVudGlmaWVyID0geGNvZGUubGFuZy5jcHA7IH07CiAJCTdDMDA4
Q0QxMTg2RjhBOTMwMDk1NUMyNCAvKiBKU1Byb21pc2VGdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNQcm9taXNlRnVuY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDMDA4Q0Q4MTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZl
cnJlZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Byb21pc2VE
ZWZlcnJlZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNjE3LDYgKzM2MjMs
NyBAQAogCQkJCTdFRjZFMEJCMEVCN0ExRUMwMDc5QUZBRiAvKiBydW50aW1lICovLAogCQkJCTE0
MTIxMTAwMEE0ODc3MjYwMDQ4MDI1NSAvKiB0ZXN0cyAqLywKIAkJCQk4NjAzQ0VGMDE0Qzc1M0VG
MDBBRTU5RTMgLyogdG9vbHMgKi8sCisJCQkJN0IyRDA0QTcxQjQ2NTdBQzAwRjdDNDcxIC8qIHdh
c20gKi8sCiAJCQkJODZFQUM0OEMwRjkzRThCOTAwOEVDOTQ4IC8qIHlhcnIgKi8sCiAJCQkpOwog
CQkJbmFtZSA9IEphdmFTY3JpcHRDb3JlOwpAQCAtNDI4MCw2ICs0Mjg3LDE2IEBACiAJCQlwYXRo
ID0gZGlzYXNzZW1ibGVyL0FSTXY3OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsK
KwkJN0IyRDA0QTcxQjQ2NTdBQzAwRjdDNDcxIC8qIHdhc20gKi8gPSB7CisJCQlpc2EgPSBQQlhH
cm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTdCMkQwNEE4MUI0NjU3QzcwMEY3QzQ3MSAvKiBX
YXNtSklUQ29tcGlsZXIuY3BwICovLAorCQkJCTdCMkQwNEE5MUI0NjU3QzcwMEY3QzQ3MSAvKiBX
YXNtSklUQ29tcGlsZXIuaCAqLywKKwkJCQk3QjJEMDRBQTFCNDY1N0M3MDBGN0M0NzEgLyogV2Fz
bU9wY29kZXMuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gd2FzbTsKKwkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CisJCX07CiAJCTdFMzlEODFEMEVDMzhFRkEwMDNBRjExQSAvKiBieXRlY29tcGls
ZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNjA0Myw2
ICs2MDYwLDcgQEAKIAkJCQlCQzE4QzQwRjBFMTZGNUNEMDBCMzQ0NjAgLyogSWRlbnRpZmllci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwNzYxODlCMDM4QzAwNjMzMjMxIC8qIElkZW50aWZp
ZXJzRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk2MjMxRTkxOEQxODA0MjAwQzAzRkRB
IC8qIEluc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcyBpbiBIZWFkZXJzICovLAorCQkJCTdCMkQw
NEFEMUI0NjU3RDIwMEY3QzQ3MSAvKiBXYXNtT3Bjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzI1RjhCQ0UxNTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFsU3dlZXBlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZCN0YzOTkxNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5QTE1RUQ4RTQ2MDBGMTY3QjIgLyogSW5kZXhpbmdI
ZWFkZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTYxNDUsNiArNjE2Myw3IEBACiAJCQkJ
ODZFM0M2MTMxNjdCQUJENzAwNkQ3NjBBIC8qIEpTQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZFM0M2MTcxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4dEludGVybmFsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQxRTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDb250ZXh0UmVmLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3QjJEMDRBQzFCNDY1N0NEMDBGN0M0NzEgLyogV2FzbUpJVENv
bXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDhDRDFEODEwOENGOTAyMDA4MTYzQzYgLyog
SlNDb250ZXh0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyMDI4QjgxNzk3NjAx
RTAwOTgwMjhDIC8qIEpTQ1Rlc3RSdW5uZXJVdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3
NTc2RDMxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmggaW4g
SGVhZGVycyAqLywKQEAgLTcxNjcsNiArNzE4Niw3IEBACiAJCQkJMEZGMEYxOUMxNkI3MkEwMzAw
NURGOTVCIC8qIERGR05vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBNTgxQkExNTBFOTUy
QzAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURD
RjEzMjhERjgyMDAyQjJBRDcgLyogREZHT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk3QjJEMDRBQjFCNDY1N0NBMDBGN0M0NzEgLyogV2FzbUpJVENvbXBpbGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE3RDg5Q0ZEMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTU2MTQxREFGMDgw
MDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMyNTE3
RDUxRjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwIGluIFNv
dXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IDkxMjcyNTFiOWY0OWYwZDdkMmM0NjA3
NjExYTU2MzAxZDQyY2Q5ZmIuLmQxYzRiNzU0ZTQ2Yzk5NDE2NDZiZGI4OWRiNWU4ZDJmMjlkM2Y4
YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiU3Ry
dWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVGVzdFJ1bm5lclV0aWxzLmgiCiAj
aW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCisjaW5jbHVkZSAiV2FzbUpJVENvbXBpbGVyLmgi
CiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGli
Lmg+CkBAIC00OTAsNiArNDkxLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25SZXR1cm5UeXBlRm9yKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EdW1wQmFzaWNCbG9ja0V4ZWN1dGlvblJhbmdlcyhF
eGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
SGFzQmFzaWNCbG9ja0V4ZWN1dGVkKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25FbmFibGVFeGNlcHRpb25GdXp6KEV4ZWNTdGF0ZSopOwor
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2FkV2ViQXNzZW1i
bHkoRXhlY1N0YXRlKik7CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfRkxBR1MpCiBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldFNhbXBsaW5nRmxhZ3MoRXhlY1N0
YXRlKik7CkBAIC02NTEsNiArNjUzLDggQEAgcHJvdGVjdGVkOgogICAgICAgICBhZGRGdW5jdGlv
bih2bSwgImhhc0Jhc2ljQmxvY2tFeGVjdXRlZCIsIGZ1bmN0aW9uSGFzQmFzaWNCbG9ja0V4ZWN1
dGVkLCAyKTsKIAogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImVuYWJsZUV4Y2VwdGlvbkZ1enoi
LCBmdW5jdGlvbkVuYWJsZUV4Y2VwdGlvbkZ1enosIDApOworCisgICAgICAgIGFkZEZ1bmN0aW9u
KHZtLCAibG9hZFdlYkFzc2VtYmx5IiwgZnVuY3Rpb25Mb2FkV2ViQXNzZW1ibHksIDEpOwogICAg
ICAgICAKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGdsb2Jh
bEV4ZWMoKSwgMCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRzLnNp
emUoKTsgKytpKQpAQCAtMTE2NSw2ICsxMTY5LDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25FbmFibGVFeGNlcHRpb25GdXp6KEV4ZWNTdGF0ZSopCiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkxvYWRXZWJBc3NlbWJseShFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOworICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7CisgICAgaWYgKCFmaWxsQnVmZmVy
V2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVOYW1lLCBidWZmZXIpKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlRXJyb3Io
ZXhlYywgQVNDSUlMaXRlcmFsKCJDb3VsZCBub3Qgb3BlbiBmaWxlLiIpKSkpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gV2FzbTo6Y29tcGlsZUFuZFJ1bihleGVjLCBidWZmZXIpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKwogLy8gVXNlIFNFSCBmb3IgUmVsZWFzZSBi
dWlsZHMgb25seSB0byBnZXQgcmlkIG9mIHRoZSBjcmFzaCByZXBvcnQgZGlhbG9nCiAvLyAobHVj
a2lseSB0aGUgc2FtZSB0ZXN0cyBmYWlsIGluIFJlbGVhc2UgYW5kIERlYnVnIGJ1aWxkcyBzbyBm
YXIpLiBOZWVkIHRvCiAvLyBiZSBpbiBhIHNlcGFyYXRlIG1haW4gZnVuY3Rpb24gYmVjYXVzZSB0
aGUganNjbWFpbiBmdW5jdGlvbiByZXF1aXJlcyBvYmplY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21KSVRDb21waWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtSklUQ29tcGlsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ5YzljZWQ4MjhmMDY2
MTQ0OTQ1ODcxODEzZTg2NTA3ZGIxNWI5MmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtSklUQ29tcGlsZXIuY3BwCkBAIC0wLDAgKzEsOTkwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyBMaWNlbnNl
ZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsK
KyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhl
IExpY2Vuc2UuCisgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgCisg
aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgCisgVW5sZXNzIHJl
cXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2Fy
ZQorIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJB
UyBJUyIgQkFTSVMsCisgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJ
TkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUg
c3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIGxpbWl0YXRpb25z
IHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ildhc21KSVRDb21waWxlci5oIgorCisjaW5jbHVkZSAiSklUQ29kZS5oIgorI2luY2x1ZGUgIkpT
Q2FsbGVlLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIlByb3RvQ2FsbEZy
YW1lLmgiCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIEp1
bXBTY29wZSB7CitwdWJsaWM6CisgICAgSnVtcFNjb3BlKE1hY3JvQXNzZW1ibGVyKiBtYWNyb0Fz
c2VtYmxlcikKKyAgICAgICAgOiBtX21hY3JvQXNzZW1ibGVyKG1hY3JvQXNzZW1ibGVyKQorICAg
ICAgICAsIG1fbGlua2VkKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBKdW1wU2NvcGUoTWFj
cm9Bc3NlbWJsZXIqIG1hY3JvQXNzZW1ibGVyLCBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwm
IGxhYmVsKQorICAgICAgICA6IG1fbWFjcm9Bc3NlbWJsZXIobWFjcm9Bc3NlbWJsZXIpCisgICAg
ICAgICwgbV9saW5rZWQodHJ1ZSkKKyAgICAgICAgLCBtX2xhYmVsKGxhYmVsKQorICAgIHsKKyAg
ICB9CisKKyAgICB2b2lkIGp1bXAoKQorICAgIHsKKyAgICAgICAgaWYgKG1fbGlua2VkKQorICAg
ICAgICAgICAgbV9tYWNyb0Fzc2VtYmxlci0+anVtcChtX2xhYmVsKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV9qdW1wTGlzdC5hcHBlbmQobV9tYWNyb0Fzc2VtYmxlci0+anVtcCgpKTsK
KyAgICB9CisKKyAgICB2b2lkIGxpbmsoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2xpbmtl
ZCk7CisgICAgICAgIG1fanVtcExpc3QubGluayhtX21hY3JvQXNzZW1ibGVyKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgTWFjcm9Bc3NlbWJsZXIqIG1fbWFjcm9Bc3NlbWJsZXI7CisgICAgYm9v
bCBtX2xpbmtlZDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9sYWJlbDsKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgbV9qdW1wTGlzdDsKK307CisKK0pTVmFsdWUgSklUQ29tcGls
ZXI6OmNvbXBpbGVBbmRSdW4oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1
ZmZlcikKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFJlZlB0cjxKSVRDb2RlPiBq
aXRDb2RlID0gY29tcGlsZSh2bSwgYnVmZmVyKTsKKworICAgIFByb3RvQ2FsbEZyYW1lIHByb3Rv
Q2FsbEZyYW1lOworICAgIHByb3RvQ2FsbEZyYW1lLmluaXQoMCwgSlNDYWxsZWU6OmNyZWF0ZSh2
bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpLCBqc1VuZGVmaW5lZCgpLCAxKTsKKworICAgIHJldHVybiBqaXRDb2RlLT5leGVjdXRlKCZ2
bSwgJnByb3RvQ2FsbEZyYW1lKTsKK30KKworUmVmUHRyPEpJVENvZGU+IEpJVENvbXBpbGVyOjpj
b21waWxlKFZNJiB2bSwgY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgZW1pdEZ1
bmN0aW9uUHJvbG9ndWUoKTsKKworICAgIG1fcmVhZCA9IEluKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KGJ1ZmZlci5kYXRhKCkpKTsKKyAgICBwYXJzZSgpOworCisgICAgYm94SW50
NTIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJ
bmZvOjpyZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUo
KTsKKyAgICByZXQoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIodm0sICp0aGlzLCAw
LCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
d2l0aEFyaXR5Q2hlY2s7CisgICAgQ29kZVJlZiByZXN1bHQgPSBGSU5BTElaRV9DT0RFKHBhdGNo
QnVmZmVyLCAoIkJhc2VsaW5lIEpJVCBjb2RlIGZvciBXZWJBc3NlbWJseSIpKTsKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklU
Q29kZTo6QmFzZWxpbmVKSVQpKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2UoKQorewor
ICAgIGlmIChtX3JlYWQuZml4ZWRXaWR0aDx1aW50MzJfdD4oKSAhPSBNYWdpY051bWJlcikKKyAg
ICAgICAgYWJvcnQoKTsKKyAgICBtX3JlYWQuZml4ZWRXaWR0aDx1aW50MzJfdD4oKTsgLy8gb3V0
cHV0IHNpemUgaW4gYXNtLmpzIGZvcm1hdAorCisgICAgcGFyc2VDb25zdGFudFBvb2xTZWN0aW9u
KCk7CisgICAgcGFyc2VTaWduYXR1cmVTZWN0aW9uKCk7CisgICAgcGFyc2VGdW5jdGlvbkltcG9y
dFNlY3Rpb24oKTsKKyAgICBwYXJzZUdsb2JhbFNlY3Rpb24oKTsKKyAgICBwYXJzZUZ1bmN0aW9u
RGVjbGFyYXRpb25TZWN0aW9uKCk7CisgICAgcGFyc2VGdW5jdGlvblBvaW50ZXJUYWJsZXMoKTsK
KyAgICBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvblNlY3Rpb24oKTsKKyAgICBwYXJzZUV4cG9ydFNl
Y3Rpb24oKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VDb25zdGFudFBvb2xTZWN0aW9u
KCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZkkzMnMgPSBtX3JlYWQuaW1tVTMyKCk7CisgICAg
dWludDMyX3QgbnVtYmVyT2ZGMzJzID0gbV9yZWFkLmltbVUzMigpOworICAgIHVpbnQzMl90IG51
bWJlck9mRjY0cyA9IG1fcmVhZC5pbW1VMzIoKTsKKworICAgIFZlY3Rvcjx1aW50MzJfdD4gY29u
c3RhbnRJMzJzKG51bWJlck9mSTMycyk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51
bWJlck9mSTMyczsgKytpKQorICAgICAgICBjb25zdGFudEkzMnNbaV0gPSBtX3JlYWQuaW1tVTMy
KCk7CisKKyAgICBWZWN0b3I8ZmxvYXQ+IGNvbnN0YW50RjMycyhudW1iZXJPZkYzMnMpOworICAg
IGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkYzMnM7ICsraSkKKyAgICAgICAgY29u
c3RhbnRGMzJzW2ldID0gbV9yZWFkLmZpeGVkV2lkdGg8ZmxvYXQ+KCk7CisKKyAgICBWZWN0b3I8
ZG91YmxlPiBjb25zdGFudEY2NHMobnVtYmVyT2ZGNjRzKTsKKyAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgbnVtYmVyT2ZGNjRzOyArK2kpCisgICAgICAgIGNvbnN0YW50RjY0c1tpXSA9IG1f
cmVhZC5maXhlZFdpZHRoPGRvdWJsZT4oKTsKKworICAgIG1fY29uc3RhbnRJMzJzID0gV1RGOjpt
b3ZlKGNvbnN0YW50STMycyk7CisgICAgbV9jb25zdGFudEYzMnMgPSBXVEY6Om1vdmUoY29uc3Rh
bnRGMzJzKTsKKyAgICBtX2NvbnN0YW50RjY0cyA9IFdURjo6bW92ZShjb25zdGFudEY2NHMpOwor
fQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZVNpZ25hdHVyZVNlY3Rpb24oKQoreworICAgIHVp
bnQzMl90IG51bWJlck9mU2lnbmF0dXJlcyA9IG1fcmVhZC5pbW1VMzIoKTsKKyAgICBWZWN0b3I8
U2lnbmF0dXJlPiBzaWduYXR1cmVzKG51bWJlck9mU2lnbmF0dXJlcyk7CisgICAgZm9yICh1aW50
MzJfdCBzaWduYXR1cmVJbmRleCA9IDA7IHNpZ25hdHVyZUluZGV4IDwgbnVtYmVyT2ZTaWduYXR1
cmVzOyArK3NpZ25hdHVyZUluZGV4KSB7CisgICAgICAgIFJUeXBlIHJldCA9IG1fcmVhZC5ydHlw
ZSgpOworICAgICAgICB1aW50MzJfdCBhcmd1bWVudENvdW50ID0gbV9yZWFkLmltbVUzMigpOwor
ICAgICAgICBTaWduYXR1cmUgc2lnbmF0dXJlKHJldCwgYXJndW1lbnRDb3VudCk7CisgICAgICAg
IGZvciAodWludDMyX3QgYXJndW1lbnRJbmRleCA9IDA7IGFyZ3VtZW50SW5kZXggPCBhcmd1bWVu
dENvdW50OyArK2FyZ3VtZW50SW5kZXgpCisgICAgICAgICAgICBzaWduYXR1cmUuYXJndW1lbnRz
W2FyZ3VtZW50SW5kZXhdID0gbV9yZWFkLnR5cGUoKTsKKyAgICAgICAgc2lnbmF0dXJlc1tzaWdu
YXR1cmVJbmRleF0gPSBXVEY6Om1vdmUoc2lnbmF0dXJlKTsKKyAgICB9CisKKyAgICBtX3NpZ25h
dHVyZXMgPSBXVEY6Om1vdmUoc2lnbmF0dXJlcyk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBh
cnNlRnVuY3Rpb25JbXBvcnRTZWN0aW9uKCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZkZ1bmNJ
bXBvcnRzID0gbV9yZWFkLmltbVUzMigpOworICAgIHVpbnQzMl90IG51bWJlck9mRnVuY0ltcG9y
dFNpZ25hdHVyZXMgPSBtX3JlYWQuaW1tVTMyKCk7CisKKyAgICBWZWN0b3I8RnVuY0ltcG9ydFNp
Z25hdHVyZT4gZnVuY0ltcG9ydFNpZ25hdHVyZXMobnVtYmVyT2ZGdW5jSW1wb3J0U2lnbmF0dXJl
cyk7CisgICAgRnVuY0ltcG9ydFNpZ25hdHVyZSogZnVuY0ltcG9ydFNpZ25hdHVyZSA9IGZ1bmNJ
bXBvcnRTaWduYXR1cmVzLmRhdGEoKTsKKyAgICBmb3IgKHVpbnQzMl90IGZ1bmNJbXBvcnRJbmRl
eCA9IDA7IGZ1bmNJbXBvcnRJbmRleCA8IG51bWJlck9mRnVuY0ltcG9ydHM7ICsrZnVuY0ltcG9y
dEluZGV4KSB7CisgICAgICAgIHdoaWxlIChtX3JlYWQuc2luZ2xlQ2hhcigpKSB7IH0KKworICAg
ICAgICB1aW50MzJfdCBudW1iZXJPZlNpZ25hdHVyZXMgPSBtX3JlYWQuaW1tVTMyKCk7CisgICAg
ICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZlNpZ25hdHVyZXM7ICsraSkgewor
ICAgICAgICAgICAgZnVuY0ltcG9ydFNpZ25hdHVyZS0+c2lnbmF0dXJlSW5kZXggPSBtX3JlYWQu
aW1tVTMyKCk7CisgICAgICAgICAgICBmdW5jSW1wb3J0U2lnbmF0dXJlLT5mdW5jSW1wb3J0SW5k
ZXggPSBmdW5jSW1wb3J0SW5kZXg7CisgICAgICAgICAgICBmdW5jSW1wb3J0U2lnbmF0dXJlKys7
CisgICAgICAgIH0KKyAgICB9CisgICAgYXNzZXJ0KGZ1bmNJbXBvcnRTaWduYXR1cmUgPT0gZnVu
Y0ltcG9ydFNpZ25hdHVyZXMuZGF0YSgpICsgbnVtYmVyT2ZGdW5jSW1wb3J0U2lnbmF0dXJlcyk7
CisKKyAgICBtX2Z1bmNJbXBvcnRTaWduYXR1cmVzID0gV1RGOjptb3ZlKGZ1bmNJbXBvcnRTaWdu
YXR1cmVzKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VHbG9iYWxTZWN0aW9uKCkKK3sK
KyAgICB1aW50MzJfdCBudW1iZXJPZkkzMlplcm8gPSBtX3JlYWQuaW1tVTMyKCk7CisgICAgdWlu
dDMyX3QgbnVtYmVyT2ZGMzJaZXJvID0gbV9yZWFkLmltbVUzMigpOworICAgIHVpbnQzMl90IG51
bWJlck9mRjY0WmVybyA9IG1fcmVhZC5pbW1VMzIoKTsKKyAgICB1aW50MzJfdCBudW1iZXJPZkkz
MkltcG9ydCA9IG1fcmVhZC5pbW1VMzIoKTsKKyAgICB1aW50MzJfdCBudW1iZXJPZkYzMkltcG9y
dCA9IG1fcmVhZC5pbW1VMzIoKTsKKyAgICB1aW50MzJfdCBudW1iZXJPZkY2NEltcG9ydCA9IG1f
cmVhZC5pbW1VMzIoKTsKKyAgICB1aW50MzJfdCBudW1iZXJPZkdsb2JhbFZhcnMgPSBudW1iZXJP
ZkkzMlplcm8gKyBudW1iZXJPZkYzMlplcm8gKyBudW1iZXJPZkY2NFplcm8gKyBudW1iZXJPZkkz
MkltcG9ydCArIG51bWJlck9mRjMySW1wb3J0ICsgbnVtYmVyT2ZGNjRJbXBvcnQ7CisKKyAgICBW
ZWN0b3I8VHlwZT4gZ2xvYmFsVHlwZXMobnVtYmVyT2ZHbG9iYWxWYXJzKTsKKyAgICBzaXplX3Qg
Z2xvYmFsVHlwZUluZGV4ID0gMDsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVy
T2ZJMzJaZXJvOyArK2kpCisgICAgICAgIGdsb2JhbFR5cGVzW2dsb2JhbFR5cGVJbmRleCsrXSA9
IFR5cGU6OkkzMjsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGMzJaZXJv
OyArK2kpCisgICAgICAgIGdsb2JhbFR5cGVzW2dsb2JhbFR5cGVJbmRleCsrXSA9IFR5cGU6OkYz
MjsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGNjRaZXJvOyArK2kpCisg
ICAgICAgIGdsb2JhbFR5cGVzW2dsb2JhbFR5cGVJbmRleCsrXSA9IFR5cGU6OkY2NDsKKyAgICBm
b3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZJMzJJbXBvcnQ7ICsraSkgeworICAgICAg
ICB3aGlsZSAobV9yZWFkLnNpbmdsZUNoYXIoKSkgeyB9CisgICAgICAgIGdsb2JhbFR5cGVzW2ds
b2JhbFR5cGVJbmRleCsrXSA9IFR5cGU6OkkzMjsKKyAgICB9CisgICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IG51bWJlck9mRjMySW1wb3J0OyArK2kpIHsKKyAgICAgICAgd2hpbGUgKG1fcmVh
ZC5zaW5nbGVDaGFyKCkpIHsgfQorICAgICAgICBnbG9iYWxUeXBlc1tnbG9iYWxUeXBlSW5kZXgr
K10gPSBUeXBlOjpGMzI7CisgICAgfQorICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1i
ZXJPZkY2NEltcG9ydDsgKytpKSB7CisgICAgICAgIHdoaWxlIChtX3JlYWQuc2luZ2xlQ2hhcigp
KSB7IH0KKyAgICAgICAgZ2xvYmFsVHlwZXNbZ2xvYmFsVHlwZUluZGV4KytdID0gVHlwZTo6RjY0
OworICAgIH0KKyAgICBtX2dsb2JhbFR5cGVzID0gV1RGOjptb3ZlKGdsb2JhbFR5cGVzKTsKK30K
Kwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uU2VjdGlvbigpCit7
CisgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jdGlvbnMgPSBtX3JlYWQuaW1tVTMyKCk7CisgICAg
VmVjdG9yPHVpbnQzMl90PiBmdW5jU2lnbmF0dXJlcyhudW1iZXJPZkZ1bmN0aW9ucyk7CisgICAg
Zm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mRnVuY3Rpb25zOyArK2kpCisgICAgICAg
IGZ1bmNTaWduYXR1cmVzW2ldID0gbV9yZWFkLmltbVUzMigpOworCisgICAgbV9mdW5jU2lnbmF0
dXJlcyA9IFdURjo6bW92ZShmdW5jU2lnbmF0dXJlcyk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6
OnBhcnNlRnVuY3Rpb25Qb2ludGVyVGFibGVzKCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZkZ1
bmNQdHJUYWJsZXMgPSBtX3JlYWQuaW1tVTMyKCk7CisgICAgVmVjdG9yPEZ1bmNQdHJUYWJsZT4g
ZnVuY1B0clRhYmxlcyhudW1iZXJPZkZ1bmNQdHJUYWJsZXMpOworICAgIGZvciAodWludDMyX3Qg
aSA9IDA7IGkgPCBudW1iZXJPZkZ1bmNQdHJUYWJsZXM7ICsraSkgeworICAgICAgICBmdW5jUHRy
VGFibGVzW2ldLnNpZ25hdHVyZUluZGV4ID0gbV9yZWFkLmltbVUzMigpOworICAgICAgICB1aW50
MzJfdCBudW1FbGVtZW50cyA9IG1fcmVhZC5pbW1VMzIoKTsKKyAgICAgICAgVmVjdG9yPHVpbnQz
Ml90PiBlbGVtZW50cyhudW1FbGVtZW50cyk7CisgICAgICAgIGZvciAodWludDMyX3QgaiA9IDA7
IGogPCBudW1FbGVtZW50czsgKytqKQorICAgICAgICAgICAgZWxlbWVudHNbal0gPSBtX3JlYWQu
aW1tVTMyKCk7CisgICAgICAgIGZ1bmNQdHJUYWJsZXNbaV0uZWxlbWVudHMgPSBXVEY6Om1vdmUo
ZWxlbWVudHMpOworICAgIH0KKworICAgIG1fZnVuY1B0clRhYmxlcyA9IFdURjo6bW92ZShmdW5j
UHRyVGFibGVzKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRp
b25TZWN0aW9uKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVuY1NpZ25hdHVy
ZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIHBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKGkpOworfQor
Cit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUV4cG9ydFNlY3Rpb24oKQoreworICAgIHN3aXRjaCAo
bV9yZWFkLmV4cG9ydEZvcm1hdCgpKSB7CisgICAgY2FzZSBFeHBvcnRGb3JtYXQ6OkRlZmF1bHQ6
CisgICAgICAgIG1fcmVhZC5pbW1VMzIoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHBv
cnRGb3JtYXQ6OlJlY29yZDoKKyAgICAgICAgaWYgKHVpbnQzMl90IG51bUV4cG9ydHMgPSBtX3Jl
YWQuaW1tVTMyKCkpIHsKKyAgICAgICAgICAgIGZvciAodWludDMyX3QgZXhwb3J0SW5kZXggPSAw
OyBleHBvcnRJbmRleCA8IG51bUV4cG9ydHM7ICsrZXhwb3J0SW5kZXgpIHsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAobV9yZWFkLnNpbmdsZUNoYXIoKSkgeyB9CisgICAgICAgICAgICAgICAgbV9y
ZWFkLmltbVUzMigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbihzaXplX3Qg
ZnVuY0luZGV4KQoreworICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gbV9zaWduYXR1
cmVzW21fZnVuY1NpZ25hdHVyZXNbZnVuY0luZGV4XV07CisgICAgbV9jdXJyZW50UmV0dXJuVHlw
ZSA9IHNpZ25hdHVyZS5yZXQ7CisgICAgbV9jdXJyZW50TG9jYWxUeXBlcy5jbGVhcigpOworICAg
IHBhcnNlQXJndW1lbnRzKHNpZ25hdHVyZSk7CisgICAgcGFyc2VWYXJzKCk7CisgICAgcGFyc2VT
dG10TGlzdCgwKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VBcmd1bWVudHMoY29uc3Qg
U2lnbmF0dXJlJiBzaWduYXR1cmUpCit7CisgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBzaWdu
YXR1cmUuYXJndW1lbnRzLnNpemUoKTsKKyAgICBmb3IgKHVpbnQzMl90IGFyZ0luZGV4ID0gMDsg
YXJnSW5kZXggPCBhcmd1bWVudENvdW50OyArK2FyZ0luZGV4KSB7CisgICAgICAgIFR5cGUgdHlw
ZSA9IHNpZ25hdHVyZS5hcmd1bWVudHNbYXJnSW5kZXhdOworICAgICAgICBtX2N1cnJlbnRMb2Nh
bFR5cGVzLmFwcGVuZCh0eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNh
c2UgVHlwZTo6STMyOgorICAgICAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgY2FzZSBUeXBl
OjpGNjQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgSklUQ29tcGlsZXI6OnBhcnNlVmFycygpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZJMzJW
YXJzID0gMDsKKyAgICB1aW50MzJfdCBudW1iZXJPZkYzMlZhcnMgPSAwOworICAgIHVpbnQzMl90
IG51bWJlck9mRjY0VmFycyA9IDA7CisKKyAgICBWYXJUeXBlcyB2YXJUeXBlczsKKyAgICBWYXJU
eXBlc1dpdGhJbW0gdmFyVHlwZXNXaXRoSW1tOworICAgIHVpbnQ4X3QgaW1tOworICAgIGlmICht
X3JlYWQuY29kZSgmdmFyVHlwZXMsICZ2YXJUeXBlc1dpdGhJbW0sICZpbW0pKSB7CisgICAgICAg
IGlmICh2YXJUeXBlcyAmIFZhclR5cGVzOjpJMzIpCisgICAgICAgICAgICBudW1iZXJPZkkzMlZh
cnMgPSBtX3JlYWQuaW1tVTMyKCk7CisgICAgICAgIGlmICh2YXJUeXBlcyAmIFZhclR5cGVzOjpG
MzIpCisgICAgICAgICAgICBudW1iZXJPZkYzMlZhcnMgPSBtX3JlYWQuaW1tVTMyKCk7CisgICAg
ICAgIGlmICh2YXJUeXBlcyAmIFZhclR5cGVzOjpGNjQpCisgICAgICAgICAgICBudW1iZXJPZkY2
NFZhcnMgPSBtX3JlYWQuaW1tVTMyKCk7CisgICAgfSBlbHNlCisgICAgICAgIG51bWJlck9mSTMy
VmFycyA9IGltbTsKKworICAgIHVpbnQzMl90IG51bWJlck9mVmFycyA9IG51bWJlck9mSTMyVmFy
cyArIG51bWJlck9mRjMyVmFycyArIG51bWJlck9mRjY0VmFyczsKKyAgICBpZiAobnVtYmVyT2ZW
YXJzID4gMCkgeworICAgICAgICB1aW50MzJfdCBsb2NhbEluZGV4ID0gbV9jdXJyZW50TG9jYWxU
eXBlcy5zaXplKCk7CisgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkkz
MlZhcnM7ICsraSkgeworICAgICAgICAgICAgbV9jdXJyZW50TG9jYWxUeXBlcy5hcHBlbmQoVHlw
ZTo6STMyKTsKKyAgICAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBzdGFja0FkZHJl
c3MobG9jYWxJbmRleCsrKSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0g
MDsgaSA8IG51bWJlck9mRjMyVmFyczsgKytpKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRMb2Nh
bFR5cGVzLmFwcGVuZChUeXBlOjpGMzIpOworICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1t
MzIoMCksIHN0YWNrQWRkcmVzcyhsb2NhbEluZGV4KyspKTsKKyAgICAgICAgfQorICAgICAgICBm
b3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGNjRWYXJzOyArK2kpIHsKKyAgICAgICAg
ICAgIG1fY3VycmVudExvY2FsVHlwZXMuYXBwZW5kKFR5cGU6OkY2NCk7CisgICAgICAgICAgICBz
dG9yZTY0KFRydXN0ZWRJbW02NCgwKSwgc3RhY2tBZGRyZXNzKGxvY2FsSW5kZXgrKykpOworICAg
ICAgICB9CisgICAgfQorfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZVN0bXQoaW50IGRzdCkK
K3sKKyAgICBTdG10IHN0bXQ7CisgICAgU3RtdFdpdGhJbW0gc3RtdFdpdGhJbW07CisgICAgdWlu
dDhfdCBpbW07CisgICAgaWYgKG1fcmVhZC5jb2RlKCZzdG10LCAmc3RtdFdpdGhJbW0sICZpbW0p
KSB7CisgICAgICAgIHN3aXRjaCAoc3RtdCkgeworICAgICAgICBjYXNlIFN0bXQ6OlNldExvYzoK
KyAgICAgICAgICAgIHBhcnNlU2V0TG9jYWwoZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFN0bXQ6OlNldEdsbzoKKyAgICAgICAgY2FzZSBTdG10OjpJMzJTdG9yZTg6Cisg
ICAgICAgIGNhc2UgU3RtdDo6STMyU3RvcmVPZmY4OgorICAgICAgICBjYXNlIFN0bXQ6OkkzMlN0
b3JlMTY6CisgICAgICAgIGNhc2UgU3RtdDo6STMyU3RvcmVPZmYxNjoKKyAgICAgICAgY2FzZSBT
dG10OjpJMzJTdG9yZTMyOgorICAgICAgICBjYXNlIFN0bXQ6OkkzMlN0b3JlT2ZmMzI6CisgICAg
ICAgIGNhc2UgU3RtdDo6RjMyU3RvcmU6CisgICAgICAgIGNhc2UgU3RtdDo6RjMyU3RvcmVPZmY6
CisgICAgICAgIGNhc2UgU3RtdDo6RjY0U3RvcmU6CisgICAgICAgIGNhc2UgU3RtdDo6RjY0U3Rv
cmVPZmY6CisgICAgICAgIGNhc2UgU3RtdDo6Q2FsbEludDoKKyAgICAgICAgY2FzZSBTdG10OjpD
YWxsSW5kOgorICAgICAgICBjYXNlIFN0bXQ6OkNhbGxJbXA6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNlIFN0bXQ6OlJldDoKKyAgICAgICAg
ICAgIHBhcnNlUmV0dXJuU3RtdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNl
IFN0bXQ6OkJsb2NrOgorICAgICAgICAgICAgcGFyc2VCbG9ja1N0bXQoZHN0KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdG10OjpJZlRoZW46CisgICAgICAgICAgICBwYXJz
ZUlmU3RtdChkc3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6Oklm
RWxzZToKKyAgICAgICAgICAgIHBhcnNlSWZFbHNlU3RtdChkc3QpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBjYXNlIFN0bXQ6OldoaWxlOgorICAgICAgICAgICAgcGFyc2VXaGlsZVN0
bXQoZHN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdG10OjpEbzoKKyAg
ICAgICAgICAgIHBhcnNlRG9TdG10KGRzdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGNhc2UgU3RtdDo6TGFiZWw6CisgICAgICAgICAgICBwYXJzZUxhYmVsU3RtdChkc3QpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6OkJyZWFrOgorICAgICAgICAgICAg
dG9wQnJlYWtKdW1wTGlzdCgpLT5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgY2FzZSBTdG10OjpCcmVha0xhYmVsOgorICAgICAgICAgICAgcGFyc2VCcmVha0xh
YmVsU3RtdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6OkNvbnRp
bnVlOgorICAgICAgICAgICAgdG9wQ29udGludWVKdW1wU2NvcGUoKS0+anVtcCgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RtdDo6Q29udGludWVMYWJlbDoKKyAgICAgICAg
ICAgIHBhcnNlQ29udGludWVMYWJlbFN0bXQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgY2FzZSBTdG10OjpTd2l0Y2g6CisgICAgICAgICAgICBwYXJzZVN3aXRjaFN0bXQoZHN0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IHN3aXRjaCAoc3RtdFdpdGhJbW0pIHsKKyAgICAgICAgY2FzZSBTdG10V2l0aEltbTo6U2V0TG9j
OgorICAgICAgICAgICAgcGFyc2VTZXRMb2NhbChpbW0sIGRzdCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBTdG10V2l0aEltbTo6U2V0R2xvOgorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VHZXRMb2NhbChpbnQgZHN0KQoreworICAg
IHVpbnQzMl90IGltbSA9IG1fcmVhZC5pbW1VMzIoKTsKKyAgICBzd2l0Y2ggKG1fY3VycmVudExv
Y2FsVHlwZXNbaW1tXSkgeworICAgIGNhc2UgVHlwZTo6STMyOgorICAgIGNhc2UgVHlwZTo6RjMy
OiAvLyBGSVhNRTogbG9hZEZsb2F0L3N0b3JlRmxvYXQ/CisgICAgICAgIGxvYWQzMihzdGFja0Fk
ZHJlc3MoaW1tKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJl
Z1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5
cGU6OkY2NDogLy8gRklYTUU6IGxvYWREb3VibGUvc3RvcmVEb3VibGU/CisgICAgICAgIGxvYWQ2
NChzdGFja0FkZHJlc3MoaW1tKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBzdG9yZTY0KEdQ
UkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
K30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VTZXRMb2NhbCh1aW50MzJfdCBpbW0sIGludCBk
c3QpCit7CisgICAgVHlwZSB0eXBlID0gbV9jdXJyZW50TG9jYWxUeXBlc1tpbW1dOworICAgIHBh
cnNlRXhwcihSVHlwZSh0eXBlKSwgZHN0KTsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNl
IFR5cGU6OkkzMjoKKyAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgbG9hZDMyKHRlbXBvcmFy
eUFkZHJlc3MoZHN0KSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBzdG9yZTMyKEdQUkluZm86
OnJlZ1QwLCBzdGFja0FkZHJlc3MoaW1tKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHlw
ZTo6RjY0OgorICAgICAgICBsb2FkNjQodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpy
ZWdUMCk7CisgICAgICAgIHN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHN0YWNrQWRkcmVzcyhpbW0p
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlU2V0TG9j
YWwoaW50IGRzdCkKK3sKKyAgICBwYXJzZVNldExvY2FsKG1fcmVhZC5pbW1VMzIoKSwgZHN0KTsK
K30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VSZXR1cm5TdG10KCkKK3sKKyAgICAvLyBGSVhN
RTogaGFja3kKKyAgICBzd2l0Y2ggKG1fY3VycmVudFJldHVyblR5cGUpIHsKKyAgICBjYXNlIFJU
eXBlOjpJMzI6CisgICAgICAgIHBhcnNlRXhwcihSVHlwZTo6STMyLCAwKTsKKyAgICAgICAgbG9h
ZDMyKHRlbXBvcmFyeUFkZHJlc3MoMCksIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBSVHlwZTo6RjMyOgorICAgICAgICBwYXJzZUV4cHIoUlR5cGU6
OkYzMiwgMCk7CisgICAgICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKDApLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUlR5cGU6OkY2NDoKKyAg
ICAgICAgcGFyc2VFeHByKFJUeXBlOjpGNjQsIDApOworICAgICAgICBsb2FkNjQodGVtcG9yYXJ5
QWRkcmVzcygwKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFJUeXBlOjpWb2lkOgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgSklU
Q29tcGlsZXI6OnBhcnNlU3RtdExpc3QoaW50IGRzdCkKK3sKKyAgICB1aW50MzJfdCBudW1TdG10
cyA9IG1fcmVhZC5pbW1VMzIoKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtU3Rt
dHM7ICsraSkKKyAgICAgICAgcGFyc2VTdG10KGRzdCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6
OnBhcnNlQmxvY2tTdG10KGludCBkc3QpCit7CisgICAgcGFyc2VTdG10TGlzdChkc3QpOworfQor
Cit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUlmU3RtdChpbnQgZHN0KQoreworICAgIHBhcnNlRXhw
cihSVHlwZTo6STMyLCBkc3QpOworICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKGRzdCksIEdQ
UkluZm86OnJlZ1QwKTsKKyAgICBKdW1wIGVuZCA9IGJyYW5jaFRlc3QzMihaZXJvLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgcGFyc2VTdG10KGRzdCk7CisgICAgZW5kLmxpbmsodGhpcyk7Cit9CisK
K3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlSWZFbHNlU3RtdChpbnQgZHN0KQoreworICAgIHBhcnNl
RXhwcihSVHlwZTo6STMyLCBkc3QpOworICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKGRzdCks
IEdQUkluZm86OnJlZ1QwKTsKKyAgICBKdW1wIGVscyA9IGJyYW5jaFRlc3QzMihaZXJvLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgcGFyc2VTdG10KGRzdCk7CisgICAgSnVtcCBlbmQgPSBqdW1wKCk7
CisgICAgZWxzLmxpbmsodGhpcyk7CisgICAgcGFyc2VTdG10KGRzdCk7CisgICAgZW5kLmxpbmso
dGhpcyk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlV2hpbGVTdG10KGludCBkc3QpCit7
CisgICAgSnVtcFNjb3BlIGNvbnRpbnVlSnVtcFNjb3BlKHRoaXMsIGxhYmVsKCkpOworICAgIHB1
c2hDb250aW51ZUp1bXBTY29wZSgmY29udGludWVKdW1wU2NvcGUpOworCisgICAgSnVtcExpc3Qg
YnJlYWtKdW1wTGlzdDsKKyAgICBwdXNoQnJlYWtKdW1wTGlzdCgmYnJlYWtKdW1wTGlzdCk7CisK
KyAgICBwYXJzZUV4cHIoUlR5cGU6OkkzMiwgZHN0KTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRk
cmVzcyhkc3QpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgSnVtcCBlbmQgPSBicmFuY2hUZXN0MzIo
WmVybywgR1BSSW5mbzo6cmVnVDApOworICAgIHBhcnNlU3RtdChkc3QpOworICAgIGNvbnRpbnVl
SnVtcFNjb3BlLmp1bXAoKTsKKyAgICBlbmQubGluayh0aGlzKTsKKyAgICBicmVha0p1bXBMaXN0
LmxpbmsodGhpcyk7CisKKyAgICBwb3BCcmVha0p1bXBMaXN0KCk7CisKKyAgICBwb3BDb250aW51
ZUp1bXBTY29wZSgpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZURvU3RtdChpbnQgZHN0
KQoreworICAgIEp1bXBTY29wZSBjb250aW51ZUp1bXBTY29wZSh0aGlzKTsKKyAgICBwdXNoQ29u
dGludWVKdW1wU2NvcGUoJmNvbnRpbnVlSnVtcFNjb3BlKTsKKworICAgIEp1bXBMaXN0IGJyZWFr
SnVtcExpc3Q7CisgICAgcHVzaEJyZWFrSnVtcExpc3QoJmJyZWFrSnVtcExpc3QpOworCisgICAg
TGFiZWwgc3RhcnQgPSBsYWJlbCgpOworICAgIHBhcnNlU3RtdChkc3QpOworICAgIGNvbnRpbnVl
SnVtcFNjb3BlLmxpbmsoKTsKKyAgICBwYXJzZUV4cHIoUlR5cGU6OkkzMiwgZHN0KTsKKyAgICBs
b2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgSnVtcCBq
dW1wVG9TdGFydCA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBHUFJJbmZvOjpyZWdUMCk7CisgICAg
anVtcFRvU3RhcnQubGlua1RvKHN0YXJ0LCB0aGlzKTsKKyAgICBicmVha0p1bXBMaXN0Lmxpbmso
dGhpcyk7CisKKyAgICBwb3BCcmVha0p1bXBMaXN0KCk7CisKKyAgICBwb3BDb250aW51ZUp1bXBT
Y29wZSgpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUxhYmVsU3RtdChpbnQgZHN0KQor
eworICAgIExhYmVsIGNvbnRpbnVlTGFiZWwgPSBsYWJlbCgpOworICAgIEp1bXBMaXN0IGJyZWFr
SnVtcExpc3Q7CisgICAgcHVzaENvbnRpbnVlTGFiZWxMYWJlbCgmY29udGludWVMYWJlbCk7Cisg
ICAgcHVzaEJyZWFrTGFiZWxKdW1wTGlzdCgmYnJlYWtKdW1wTGlzdCk7CisgICAgcGFyc2VTdG10
KGRzdCk7CisgICAgYnJlYWtKdW1wTGlzdC5saW5rKHRoaXMpOworICAgIHBvcEJyZWFrTGFiZWxK
dW1wTGlzdCgpOworICAgIHBvcENvbnRpbnVlTGFiZWxMYWJlbCgpOworfQorCit2b2lkIEpJVENv
bXBpbGVyOjpwYXJzZUJyZWFrTGFiZWxTdG10KCkKK3sKKyAgICB1aW50MzJfdCBpbmRleCA9IG1f
cmVhZC5pbW1VMzIoKTsKKyAgICBicmVha0xhYmVsSnVtcExpc3QoaW5kZXgpLT5hcHBlbmQoanVt
cCgpKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VDb250aW51ZUxhYmVsU3RtdCgpCit7
CisgICAgdWludDMyX3QgaW5kZXggPSBtX3JlYWQuaW1tVTMyKCk7CisgICAganVtcCgqY29udGlu
dWVMYWJlbExhYmVsKGluZGV4KSk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlU3dpdGNo
U3RtdChpbnQgZHN0KQoreworICAgIEp1bXBMaXN0IGJyZWFrSnVtcExpc3Q7CisgICAgcHVzaEJy
ZWFrSnVtcExpc3QoJmJyZWFrSnVtcExpc3QpOworCisgICAgdWludDMyX3QgbnVtYmVyT2ZDYXNl
cyA9IG1fcmVhZC5pbW1VMzIoKTsKKyAgICBwYXJzZUV4cHIoUlR5cGU6OkkzMiwgZHN0KTsKKyAg
ICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICBK
dW1wIHRhYmxlID0ganVtcCgpOworCisgICAgVmVjdG9yPExhYmVsPiBsYWJlbHM7CisgICAgVmVj
dG9yPGludDMyX3Q+IGltbXM7CisgICAgTGFiZWwgZGVmYXVsdExhYmVsOworICAgIGJvb2wgaGFz
RGVmYXVsdCA9IGZhbHNlOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9m
Q2FzZXM7ICsraSkgeworICAgICAgICBzd2l0Y2ggKG1fcmVhZC5zd2l0Y2hDYXNlKCkpIHsKKyAg
ICAgICAgY2FzZSBTd2l0Y2hDYXNlOjpDYXNlMDoKKyAgICAgICAgICAgIGxhYmVscy5hcHBlbmQo
bGFiZWwoKSk7CisgICAgICAgICAgICBpbW1zLmFwcGVuZChtX3JlYWQuaW1tUzMyKCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3dpdGNoQ2FzZTo6Q2FzZTE6CisgICAgICAg
ICAgICBsYWJlbHMuYXBwZW5kKGxhYmVsKCkpOworICAgICAgICAgICAgaW1tcy5hcHBlbmQobV9y
ZWFkLmltbVMzMigpKTsKKyAgICAgICAgICAgIHBhcnNlU3RtdChkc3QpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgU3dpdGNoQ2FzZTo6Q2FzZU46CisgICAgICAgICAgICBsYWJl
bHMuYXBwZW5kKGxhYmVsKCkpOworICAgICAgICAgICAgaW1tcy5hcHBlbmQobV9yZWFkLmltbVMz
MigpKTsKKyAgICAgICAgICAgIHBhcnNlU3RtdExpc3QoZHN0KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFN3aXRjaENhc2U6OkRlZmF1bHQwOgorICAgICAgICAgICAgZGVmYXVs
dExhYmVsID0gbGFiZWwoKTsKKyAgICAgICAgICAgIGhhc0RlZmF1bHQgPSB0cnVlOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3dpdGNoQ2FzZTo6RGVmYXVsdDE6CisgICAgICAg
ICAgICBkZWZhdWx0TGFiZWwgPSBsYWJlbCgpOworICAgICAgICAgICAgaGFzRGVmYXVsdCA9IHRy
dWU7CisgICAgICAgICAgICBwYXJzZVN0bXQoZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFN3aXRjaENhc2U6OkRlZmF1bHROOgorICAgICAgICAgICAgZGVmYXVsdExhYmVs
ID0gbGFiZWwoKTsKKyAgICAgICAgICAgIGhhc0RlZmF1bHQgPSB0cnVlOworICAgICAgICAgICAg
cGFyc2VTdG10TGlzdChkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgSnVtcCBlbmQgPSBqdW1wKCk7CisgICAgdGFibGUubGluayh0aGlzKTsKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGFiZWxzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IEp1bXAgam1wID0gYnJhbmNoMzIoRXF1YWwsIEdQUkluZm86OnJlZ1QwLCBUcnVzdGVkSW1tMzIo
aW1tc1tpXSkpOworICAgICAgICBqbXAubGlua1RvKGxhYmVsc1tpXSwgdGhpcyk7CisgICAgfQor
ICAgIGlmIChoYXNEZWZhdWx0KQorICAgICAgICBqdW1wKGRlZmF1bHRMYWJlbCk7CisKKyAgICBl
bmQubGluayh0aGlzKTsKKworICAgIGJyZWFrSnVtcExpc3QubGluayh0aGlzKTsKKyAgICBwb3BC
cmVha0p1bXBMaXN0KCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlRXhwcihSVHlwZSBy
VHlwZSwgaW50IGRzdCkKK3sKKyAgICBzd2l0Y2ggKHJUeXBlKSB7CisgICAgY2FzZSBSVHlwZTo6
STMyOgorICAgICAgICBwYXJzZUV4cHJJMzIoclR5cGUsIGRzdCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUlR5cGU6OkY2NDoKKyAgICAgICAgcGFyc2VFeHByRjY0KHJUeXBlLCBkc3QpOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VFeHBySTMyKFJU
eXBlLCBpbnQgZHN0KQoreworICAgIEkzMiBpMzI7CisgICAgSTMyV2l0aEltbSBpMzJXaXRoSW1t
OworICAgIHVpbnQ4X3QgaW1tOworCisgICAgaWYgKG1fcmVhZC5jb2RlKCZpMzIsICZpMzJXaXRo
SW1tLCAmaW1tKSkgeworICAgICAgICBzd2l0Y2ggKGkzMikgeworICAgICAgICBjYXNlIEkzMjo6
TGl0SW1tOgorICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobV9yZWFkLmltbVUzMigp
KSwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEkzMjo6TGl0UG9vbDoKKyAgICAgICAgY2FzZSBJMzI6OkdldExvYzoKKyAgICAgICAgICAg
IHBhcnNlR2V0TG9jYWwoZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkz
Mjo6R2V0R2xvOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgY2FzZSBJMzI6OlNldExvYzoKKyAgICAgICAgICAgIHBhcnNlU2V0TG9jYWwoZHN0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6U2V0R2xvOgorICAgICAgICBj
YXNlIEkzMjo6U0xvYWQ4OgorICAgICAgICBjYXNlIEkzMjo6U0xvYWRPZmY4OgorICAgICAgICBj
YXNlIEkzMjo6VUxvYWQ4OgorICAgICAgICBjYXNlIEkzMjo6VUxvYWRPZmY4OgorICAgICAgICBj
YXNlIEkzMjo6U0xvYWQxNjoKKyAgICAgICAgY2FzZSBJMzI6OlNMb2FkT2ZmMTY6CisgICAgICAg
IGNhc2UgSTMyOjpVTG9hZDE2OgorICAgICAgICBjYXNlIEkzMjo6VUxvYWRPZmYxNjoKKyAgICAg
ICAgY2FzZSBJMzI6OkxvYWQzMjoKKyAgICAgICAgY2FzZSBJMzI6OkxvYWRPZmYzMjoKKyAgICAg
ICAgY2FzZSBJMzI6OlN0b3JlODoKKyAgICAgICAgY2FzZSBJMzI6OlN0b3JlT2ZmODoKKyAgICAg
ICAgY2FzZSBJMzI6OlN0b3JlMTY6CisgICAgICAgIGNhc2UgSTMyOjpTdG9yZU9mZjE2OgorICAg
ICAgICBjYXNlIEkzMjo6U3RvcmUzMjoKKyAgICAgICAgY2FzZSBJMzI6OlN0b3JlT2ZmMzI6Cisg
ICAgICAgIGNhc2UgSTMyOjpDYWxsSW50OgorICAgICAgICBjYXNlIEkzMjo6Q2FsbEluZDoKKyAg
ICAgICAgY2FzZSBJMzI6OkNhbGxJbXA6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBjYXNlIEkzMjo6Q29uZDoKKyAgICAgICAgICAgIHBhcnNlQ29u
ZChSVHlwZTo6STMyLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMy
OjpDb21tYToKKyAgICAgICAgICAgIHBhcnNlQ29tbWEoUlR5cGU6OkkzMiwgZHN0KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6RnJvbUYzMjoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgSTMyOjpGcm9tRjY0Ogor
ICAgICAgICAgICAgcGFyc2VFeHByRjY0KFJUeXBlOjpGNjQsIGRzdCk7CisgICAgICAgICAgICBs
b2FkRG91YmxlKHRlbXBvcmFyeUFkZHJlc3MoZHN0KSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAg
ICAgICAgICB0cnVuY2F0ZURvdWJsZVRvSW50MzIoRlBSSW5mbzo6ZnBSZWdUMCwgR1BSSW5mbzo6
cmVnVDApOworICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRk
cmVzcyhkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6TmVnOgor
ICAgICAgICAgICAgcGFyc2VVbmFyeU9wKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGkzMiksIFJUeXBl
OjpJMzIsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkFkZDoK
KyAgICAgICAgY2FzZSBJMzI6OlN1YjoKKyAgICAgICAgY2FzZSBJMzI6Ok11bDoKKyAgICAgICAg
ICAgIHBhcnNlQmluYXJ5T3Aoc3RhdGljX2Nhc3Q8dWludDhfdD4oaTMyKSwgUlR5cGU6OkkzMiwg
ZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6U0RpdjoKKyAgICAg
ICAgY2FzZSBJMzI6OlVEaXY6CisgICAgICAgIGNhc2UgSTMyOjpTTW9kOgorICAgICAgICBjYXNl
IEkzMjo6VU1vZDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIGNhc2UgSTMyOjpCaXROb3Q6CisgICAgICAgICAgICBwYXJzZVVuYXJ5T3Aoc3RhdGlj
X2Nhc3Q8dWludDhfdD4oaTMyKSwgUlR5cGU6OkkzMiwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEkzMjo6Qml0T3I6CisgICAgICAgIGNhc2UgSTMyOjpCaXRBbmQ6Cisg
ICAgICAgIGNhc2UgSTMyOjpCaXRYb3I6CisgICAgICAgICAgICBwYXJzZUJpbmFyeU9wKHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KGkzMiksIFJUeXBlOjpJMzIsIGRzdCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJMzI6OkxzaDoKKyAgICAgICAgY2FzZSBJMzI6OkFyaXRoUnNoOgor
ICAgICAgICBjYXNlIEkzMjo6TG9naWNSc2g6CisgICAgICAgIGNhc2UgSTMyOjpDbHo6CisgICAg
ICAgIGNhc2UgSTMyOjpMb2dpY05vdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIGNhc2UgSTMyOjpFcUkzMjoKKyAgICAgICAgICAgIHBhcnNlUmVs
YXRpb25hbE9wKEVxdWFsLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
STMyOjpFcUYzMjoKKyAgICAgICAgY2FzZSBJMzI6OkVxRjY0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBJMzI6Ok5FcUkzMjoKKyAgICAg
ICAgICAgIHBhcnNlUmVsYXRpb25hbE9wKE5vdEVxdWFsLCBkc3QpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgSTMyOjpORXFGMzI6CisgICAgICAgIGNhc2UgSTMyOjpORXFGNjQ6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNl
IEkzMjo6U0xlVGhJMzI6CisgICAgICAgICAgICBwYXJzZVJlbGF0aW9uYWxPcChMZXNzVGhhbiwg
ZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6VUxlVGhJMzI6Cisg
ICAgICAgICAgICBwYXJzZVJlbGF0aW9uYWxPcChCZWxvdywgZHN0KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEkzMjo6TGVUaEYzMjoKKyAgICAgICAgY2FzZSBJMzI6OkxlVGhG
NjQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBj
YXNlIEkzMjo6U0xlRXFJMzI6CisgICAgICAgICAgICBwYXJzZVJlbGF0aW9uYWxPcChMZXNzVGhh
bk9yRXF1YWwsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlVM
ZUVxSTMyOgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3AoQmVsb3dPckVxdWFsLCBkc3Qp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpMZUVxRjMyOgorICAgICAg
ICBjYXNlIEkzMjo6TGVFcUY2NDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIGNhc2UgSTMyOjpTR3JUaEkzMjoKKyAgICAgICAgICAgIHBhcnNlUmVs
YXRpb25hbE9wKEdyZWF0ZXJUaGFuLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgSTMyOjpVR3JUaEkzMjoKKyAgICAgICAgICAgIHBhcnNlUmVsYXRpb25hbE9wKEFib3Zl
LCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpHclRoRjMyOgor
ICAgICAgICBjYXNlIEkzMjo6R3JUaEY2NDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgSTMyOjpTR3JFcUkzMjoKKyAgICAgICAgICAgIHBh
cnNlUmVsYXRpb25hbE9wKEdyZWF0ZXJUaGFuT3JFcXVhbCwgZHN0KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEkzMjo6VUdyRXFJMzI6CisgICAgICAgICAgICBwYXJzZVJlbGF0
aW9uYWxPcChBYm92ZU9yRXF1YWwsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJMzI6OkdyRXFGMzI6CisgICAgICAgIGNhc2UgSTMyOjpHckVxRjY0OgorICAgICAgICBj
YXNlIEkzMjo6U01pbjoKKyAgICAgICAgY2FzZSBJMzI6OlVNaW46CisgICAgICAgIGNhc2UgSTMy
OjpTTWF4OgorICAgICAgICBjYXNlIEkzMjo6VU1heDoKKyAgICAgICAgY2FzZSBJMzI6OkFiczoK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBzd2l0Y2ggKGkzMldpdGhJbW0p
IHsKKyAgICAgICAgY2FzZSBJMzJXaXRoSW1tOjpMaXRJbW06CisgICAgICAgICAgICBzdG9yZTMy
KFRydXN0ZWRJbW0zMihpbW0pLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSTMyV2l0aEltbTo6TGl0UG9vbDoKKyAgICAgICAgICAgIHN0
b3JlMzIoVHJ1c3RlZEltbTMyKG1fY29uc3RhbnRJMzJzW2ltbV0pLCB0ZW1wb3JhcnlBZGRyZXNz
KGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyV2l0aEltbTo6R2V0
TG9jOgorICAgICAgICAgICAgbG9hZDMyKHN0YWNrQWRkcmVzcyhpbW0pLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNz
KGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorfQorCit2
b2lkIEpJVENvbXBpbGVyOjpwYXJzZUV4cHJGNjQoUlR5cGUsIGludCBkc3QpCit7CisgICAgRjY0
IGY2NDsKKyAgICBGNjRXaXRoSW1tIGY2NFdpdGhJbW07CisgICAgdWludDhfdCBpbW07CisgICAg
CisgICAgaWYgKG1fcmVhZC5jb2RlKCZmNjQsICZmNjRXaXRoSW1tLCAmaW1tKSkgeworICAgICAg
ICBzd2l0Y2ggKGY2NCkgeworICAgICAgICBjYXNlIEY2NDo6TGl0SW1tOiB7CisgICAgICAgICAg
ICAvLyBGSVhNRTogVGhpcyBzZWVtcyB2ZXJ5IHdyb25nLgorICAgICAgICAgICAgZG91YmxlIGlt
bSA9IG1fcmVhZC5maXhlZFdpZHRoPGRvdWJsZT4oKTsKKyAgICAgICAgICAgIHN0b3JlNjQoVHJ1
c3RlZEltbTY0KCpyZWludGVycHJldF9jYXN0PGludDY0X3QqPigmaW1tKSksIHRlbXBvcmFyeUFk
ZHJlc3MoZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IEY2NDo6TmVnOgorICAgICAgICAgICAgcGFyc2VVbmFyeU9wKHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KGY2NCksIFJUeXBlOjpGNjQsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBGNjQ6OkFkZDoKKyAgICAgICAgY2FzZSBGNjQ6OlN1YjoKKyAgICAgICAgY2FzZSBGNjQ6Ok11
bDoKKyAgICAgICAgY2FzZSBGNjQ6OkRpdjoKKyAgICAgICAgICAgIHBhcnNlQmluYXJ5T3Aoc3Rh
dGljX2Nhc3Q8dWludDhfdD4oZjY0KSwgUlR5cGU6OkY2NCwgZHN0KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEY2NDo6U3FydDoKKyAgICAgICAgICAgIHBhcnNlVW5hcnlPcChz
dGF0aWNfY2FzdDx1aW50OF90PihmNjQpLCBSVHlwZTo6RjY0LCBkc3QpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3dpdGNoIChmNjRX
aXRoSW1tKSB7CisgICAgICAgIGNhc2UgRjY0V2l0aEltbTo6TGl0UG9vbDoKKyAgICAgICAgICAg
IHN0b3JlNjQoVHJ1c3RlZEltbTY0KG1fY29uc3RhbnRGNjRzW2ltbV0pLCB0ZW1wb3JhcnlBZGRy
ZXNzKGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRjY0V2l0aEltbTo6
R2V0TG9jOgorICAgICAgICAgICAgLy8gRklYTUU6IGxvYWREb3VibGUvc3RvcmVEb3VibGUKKyAg
ICAgICAgICAgIGxvYWQ2NChzdGFja0FkZHJlc3MoaW1tKSwgR1BSSW5mbzo6cmVnVDApOworICAg
ICAgICAgICAgc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBKSVRD
b21waWxlcjo6cGFyc2VCaW5hcnlPcCh1aW50OF90IG9wLCBSVHlwZSByVHlwZSwgaW50IGRzdCkK
K3sKKyAgICBwYXJzZUV4cHIoclR5cGUsIGRzdCk7CisgICAgcGFyc2VFeHByKHJUeXBlLCBkc3Qg
KyAxKTsKKyAgICBzd2l0Y2ggKHJUeXBlKSB7CisgICAgY2FzZSBSVHlwZTo6STMyOgorICAgICAg
ICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAg
IGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKGRzdCArIDEpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAg
ICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8STMyPihvcCkpIHsKKyAgICAgICAgY2FzZSBJMzI6OkFk
ZDoKKyAgICAgICAgICAgIGFkZDMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlN1YjoKKyAgICAgICAgICAgIHN1
YjMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBJMzI6Ok11bDoKKyAgICAgICAgICAgIG11bDMyKEdQUkluZm86OnJlZ1Qx
LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6
OkJpdE9yOgorICAgICAgICAgICAgb3IzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpCaXRBbmQ6CisgICAgICAg
ICAgICBhbmQzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpCaXRYb3I6CisgICAgICAgICAgICB4b3IzMihHUFJJ
bmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQor
ICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFJUeXBlOjpGNjQ6CisgICAgICAgIGxvYWREb3VibGUo
dGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgbG9hZERv
dWJsZSh0ZW1wb3JhcnlBZGRyZXNzKGRzdCArIDEpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAg
ICAgc3dpdGNoIChzdGF0aWNfY2FzdDxGNjQ+KG9wKSkgeworICAgICAgICBjYXNlIEY2NDo6QWRk
OgorICAgICAgICAgICAgYWRkRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVn
VDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRjY0OjpTdWI6CisgICAgICAg
ICAgICBzdWJEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGNjQ6Ok11bDoKKyAgICAgICAgICAgIG11bERv
dWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEY2NDo6RGl2OgorICAgICAgICAgICAgZGl2RG91YmxlKEZQUklu
Zm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
fQorICAgICAgICBzdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNz
KGRzdCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VV
bmFyeU9wKHVpbnQ4X3Qgb3AsIFJUeXBlIHJUeXBlLCBpbnQgZHN0KQoreworICAgIHBhcnNlRXhw
cihyVHlwZSwgZHN0KTsKKyAgICBzd2l0Y2ggKHJUeXBlKSB7CisgICAgY2FzZSBSVHlwZTo6STMy
OgorICAgICAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpyZWdUMCk7
CisgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8STMyPihvcCkpIHsKKyAgICAgICAgY2FzZSBJ
MzI6Ok5lZzoKKyAgICAgICAgICAgIG5lZzMyKEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6Qml0Tm90OgorICAgICAgICAgICAgeG9yMzIoVHJ1
c3RlZEltbTMyKC0xKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
fQorICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJUeXBlOjpGNjQ6CisgICAgICAgIGxvYWREb3Vi
bGUodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgc3dp
dGNoIChzdGF0aWNfY2FzdDxGNjQ+KG9wKSkgeworICAgICAgICBjYXNlIEY2NDo6TmVnOgorICAg
ICAgICAgICAgbmVnYXRlRG91YmxlKEZQUkluZm86OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDEp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRjY0OjpTcXJ0OgorICAgICAgICAg
ICAgc3FydERvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgc3RvcmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdU
MSwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQg
SklUQ29tcGlsZXI6OnBhcnNlUmVsYXRpb25hbE9wKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0
aW9uLCBpbnQgZHN0KQoreworICAgIHBhcnNlRXhwcihSVHlwZTo6STMyLCBkc3QpOworICAgIHBh
cnNlRXhwcihSVHlwZTo6STMyLCBkc3QgKyAxKTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVz
cyhkc3QpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoZHN0
ICsgMSksIEdQUkluZm86OnJlZ1QxKTsKKyAgICBjb21wYXJlMzIoY29uZGl0aW9uLCBHUFJJbmZv
OjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICBzdG9yZTMyKEdQ
UkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworfQorCit2b2lkIEpJVENvbXBp
bGVyOjpwYXJzZUNvbW1hKFJUeXBlIHJUeXBlLCBpbnQgZHN0KQoreworICAgIHBhcnNlRXhwciht
X3JlYWQucnR5cGUoKSwgZHN0KTsKKyAgICBwYXJzZUV4cHIoclR5cGUsIGRzdCk7Cit9CisKK3Zv
aWQgSklUQ29tcGlsZXI6OnBhcnNlQ29uZChSVHlwZSByVHlwZSwgaW50IGRzdCkKK3sKKyAgICBw
YXJzZUV4cHIoUlR5cGU6OkkzMiwgZHN0KTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhk
c3QpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgSnVtcCBlbHMgPSBicmFuY2hUZXN0MzIoWmVybywg
R1BSSW5mbzo6cmVnVDApOworICAgIHBhcnNlRXhwcihyVHlwZSwgZHN0KTsKKyAgICBKdW1wIGVu
ZCA9IGp1bXAoKTsKKyAgICBlbHMubGluayh0aGlzKTsKKyAgICBwYXJzZUV4cHIoclR5cGUsIGRz
dCk7CisgICAgZW5kLmxpbmsodGhpcyk7Cit9CisKK0pTVmFsdWUgY29tcGlsZUFuZFJ1bihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyKQoreworICAgIEpJVENvbXBp
bGVyIGNvbXBpbGVyKCZleGVjLT52bSgpKTsKKyAgICByZXR1cm4gY29tcGlsZXIuY29tcGlsZUFu
ZFJ1bihleGVjLCBidWZmZXIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUpJVENvbXBpbGVyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSklUQ29tcGlsZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
MGI4NTEzMjJmMzQxNzgxMDA2YjEwNWJlMjlkMWU0ZGI5MjE0MmQ5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUpJVENvbXBpbGVyLmgKQEAgLTAsMCAr
MSwxNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
KgorIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAi
TGljZW5zZSIpOworIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFu
Y2Ugd2l0aCB0aGUgTGljZW5zZS4KKyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vu
c2UgYXQKKworIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisg
VW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5n
LCBzb2Z0d2FyZQorIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVk
IG9uIGFuICJBUyBJUyIgQkFTSVMsCisgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMg
T0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgU2VlIHRoZSBMaWNlbnNl
IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIGxp
bWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKworI2lmbmRlZiBXYXNtSklUQ29tcGls
ZXJfaAorI2RlZmluZSBXYXNtSklUQ29tcGlsZXJfaAorCisjaW5jbHVkZSAiQXNzZW1ibHlIZWxw
ZXJzLmgiCisjaW5jbHVkZSAiV2FzbU9wY29kZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEpJVENvZGU7CitjbGFzcyBWTTsKKworbmFtZXNwYWNlIFdh
c20geworCitjbGFzcyBKdW1wU2NvcGU7CisKK2NsYXNzIEpJVENvbXBpbGVyIDogcHJpdmF0ZSBB
c3NlbWJseUhlbHBlcnMgeworcHVibGljOgorICAgIEpJVENvbXBpbGVyKFZNKiB2bSkKKyAgICAg
ICAgOiBBc3NlbWJseUhlbHBlcnModm0sIDApCisgICAgeworICAgIH0KKyAgICBKU1ZhbHVlIGNv
bXBpbGVBbmRSdW4oRXhlY1N0YXRlKiwgY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpOworCitw
cml2YXRlOgorICAgIHN0cnVjdCBGdW5jSW1wb3J0U2lnbmF0dXJlIHsKKyAgICAgICAgdWludDMy
X3Qgc2lnbmF0dXJlSW5kZXg7CisgICAgICAgIHVpbnQzMl90IGZ1bmNJbXBvcnRJbmRleDsKKyAg
ICB9OworCisgICAgc3RydWN0IEZ1bmNQdHJUYWJsZSB7CisgICAgICAgIHVpbnQzMl90IHNpZ25h
dHVyZUluZGV4OworICAgICAgICBWZWN0b3I8dWludDMyX3Q+IGVsZW1lbnRzOworICAgIH07CisK
KyAgICBSZWZQdHI8SklUQ29kZT4gY29tcGlsZShWTSYsIGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVm
ZmVyKTsKKyAgICB2b2lkIHBhcnNlKCk7CisgICAgdm9pZCBwYXJzZUNvbnN0YW50UG9vbFNlY3Rp
b24oKTsKKyAgICB2b2lkIHBhcnNlU2lnbmF0dXJlU2VjdGlvbigpOworICAgIHZvaWQgcGFyc2VG
dW5jdGlvbkltcG9ydFNlY3Rpb24oKTsKKyAgICB2b2lkIHBhcnNlR2xvYmFsU2VjdGlvbigpOwor
ICAgIHZvaWQgcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uU2VjdGlvbigpOworICAgIHZvaWQgcGFy
c2VGdW5jdGlvblBvaW50ZXJUYWJsZXMoKTsKKyAgICB2b2lkIHBhcnNlRnVuY3Rpb25EZWZpbml0
aW9uU2VjdGlvbigpOworICAgIHZvaWQgcGFyc2VFeHBvcnRTZWN0aW9uKCk7CisKKyAgICB2b2lk
IHBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKHNpemVfdCBmdW5jSW5kZXgpOworICAgIHZvaWQgcGFy
c2VBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJik7CisgICAgdm9pZCBwYXJzZVZhcnMoKTsKKwor
ICAgIHZvaWQgcGFyc2VTdG10KGludCBkc3QpOworICAgIHZvaWQgcGFyc2VHZXRMb2NhbChpbnQg
ZHN0KTsKKyAgICB2b2lkIHBhcnNlU2V0TG9jYWwodWludDMyX3QgaW1tLCBpbnQgZHN0KTsKKyAg
ICB2b2lkIHBhcnNlU2V0TG9jYWwoaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZVJldHVyblN0bXQo
KTsKKyAgICB2b2lkIHBhcnNlQmxvY2tTdG10KGludCBkc3QpOworICAgIHZvaWQgcGFyc2VTdG10
TGlzdChpbnQgZHN0KTsKKyAgICB2b2lkIHBhcnNlSWZTdG10KGludCBkc3QpOworICAgIHZvaWQg
cGFyc2VJZkVsc2VTdG10KGludCBkc3QpOworICAgIHZvaWQgcGFyc2VXaGlsZVN0bXQoaW50IGRz
dCk7CisgICAgdm9pZCBwYXJzZURvU3RtdChpbnQgZHN0KTsKKyAgICB2b2lkIHBhcnNlTGFiZWxT
dG10KGludCBkc3QpOworICAgIHZvaWQgcGFyc2VCcmVha0xhYmVsU3RtdCgpOworICAgIHZvaWQg
cGFyc2VDb250aW51ZUxhYmVsU3RtdCgpOworICAgIHZvaWQgcGFyc2VTd2l0Y2hTdG10KGludCBk
c3QpOworCisgICAgdm9pZCBwYXJzZUV4cHIoUlR5cGUsIGludCBkc3QpOworICAgIHZvaWQgcGFy
c2VFeHBySTMyKFJUeXBlLCBpbnQgZHN0KTsKKyAgICB2b2lkIHBhcnNlRXhwckY2NChSVHlwZSwg
aW50IGRzdCk7CisgICAgdm9pZCBwYXJzZUJpbmFyeU9wKHVpbnQ4X3Qgb3AsIFJUeXBlLCBpbnQg
ZHN0KTsKKyAgICB2b2lkIHBhcnNlVW5hcnlPcCh1aW50OF90IG9wLCBSVHlwZSwgaW50IGRzdCk7
CisgICAgdm9pZCBwYXJzZVJlbGF0aW9uYWxPcChSZWxhdGlvbmFsQ29uZGl0aW9uLCBpbnQgZHN0
KTsKKyAgICB2b2lkIHBhcnNlQ29tbWEoUlR5cGUsIGludCBkc3QpOworICAgIHZvaWQgcGFyc2VD
b25kKFJUeXBlLCBpbnQgZHN0KTsKKworICAgIEFkZHJlc3Mgc3RhY2tBZGRyZXNzKGludCBpKSBj
b25zdCAvLyBGSVhNRTogSXMgdGhpcyBjb3JyZWN0PworICAgIHsKKyAgICAgICAgcmV0dXJuIEFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIC1pICogOCAtIDgpOworICAgIH0KKwor
ICAgIEFkZHJlc3MgdGVtcG9yYXJ5QWRkcmVzcyhpbnQgaSkgY29uc3QgLy8gRklYTUU6IElzIHRo
aXMgY29ycmVjdD8KKyAgICB7CisgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCAtKGkgKyBtX2N1cnJlbnRMb2NhbFR5cGVzLnNpemUoKSkgKiA4IC0gOCk7
CisgICAgfQorCisgICAgdm9pZCBwdXNoQ29udGludWVMYWJlbExhYmVsKExhYmVsKiBsYWJlbCkg
eyBtX2NvbnRpbnVlTGFiZWxMYWJlbHMuYXBwZW5kKGxhYmVsKTsgfQorICAgIHZvaWQgcG9wQ29u
dGludWVMYWJlbExhYmVsKCkgeyBtX2NvbnRpbnVlTGFiZWxMYWJlbHMucmVtb3ZlTGFzdCgpOyB9
CisgICAgTGFiZWwqIGNvbnRpbnVlTGFiZWxMYWJlbChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4g
bV9jb250aW51ZUxhYmVsTGFiZWxzW2ldOyB9CisgICAgdm9pZCBwdXNoQnJlYWtMYWJlbEp1bXBM
aXN0KEp1bXBMaXN0KiBqdW1wTGlzdCkgeyBtX2JyZWFrTGFiZWxKdW1wTGlzdHMuYXBwZW5kKGp1
bXBMaXN0KTsgfQorICAgIHZvaWQgcG9wQnJlYWtMYWJlbEp1bXBMaXN0KCkgeyBtX2JyZWFrTGFi
ZWxKdW1wTGlzdHMucmVtb3ZlTGFzdCgpOyB9CisgICAgSnVtcExpc3QqIGJyZWFrTGFiZWxKdW1w
TGlzdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9icmVha0xhYmVsSnVtcExpc3RzW2ldOyB9
CisKKyAgICB2b2lkIHB1c2hDb250aW51ZUp1bXBTY29wZShKdW1wU2NvcGUqIGp1bXBTY29wZSkg
eyBtX2NvbnRpbnVlSnVtcFNjb3Blcy5hcHBlbmQoanVtcFNjb3BlKTsgfQorICAgIHZvaWQgcG9w
Q29udGludWVKdW1wU2NvcGUoKSB7IG1fY29udGludWVKdW1wU2NvcGVzLnJlbW92ZUxhc3QoKTsg
fQorICAgIEp1bXBTY29wZSogdG9wQ29udGludWVKdW1wU2NvcGUoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRpbnVlSnVtcFNjb3Blcy5sYXN0KCk7IH0KKworICAgIHZvaWQgcHVzaEJyZWFrSnVtcExp
c3QoSnVtcExpc3QqIGp1bXBMaXN0KSB7IG1fYnJlYWtKdW1wTGlzdHMuYXBwZW5kKGp1bXBMaXN0
KTsgfQorICAgIHZvaWQgcG9wQnJlYWtKdW1wTGlzdCgpIHsgbV9icmVha0p1bXBMaXN0cy5yZW1v
dmVMYXN0KCk7IH0KKyAgICBKdW1wTGlzdCogdG9wQnJlYWtKdW1wTGlzdCgpIGNvbnN0IHsgcmV0
dXJuIG1fYnJlYWtKdW1wTGlzdHMubGFzdCgpOyB9CisKKyAgICBJbiBtX3JlYWQ7CisKKyAgICBW
ZWN0b3I8U2lnbmF0dXJlPiBtX3NpZ25hdHVyZXM7CisgICAgVmVjdG9yPHVpbnQzMl90PiBtX2Nv
bnN0YW50STMyczsKKyAgICBWZWN0b3I8ZmxvYXQ+IG1fY29uc3RhbnRGMzJzOworICAgIFZlY3Rv
cjxkb3VibGU+IG1fY29uc3RhbnRGNjRzOworICAgIFZlY3RvcjxGdW5jSW1wb3J0U2lnbmF0dXJl
PiBtX2Z1bmNJbXBvcnRTaWduYXR1cmVzOworICAgIFZlY3RvcjxUeXBlPiBtX2dsb2JhbFR5cGVz
OworICAgIFZlY3Rvcjx1aW50MzJfdD4gbV9mdW5jU2lnbmF0dXJlczsKKyAgICBWZWN0b3I8RnVu
Y1B0clRhYmxlPiBtX2Z1bmNQdHJUYWJsZXM7CisKKyAgICBSVHlwZSBtX2N1cnJlbnRSZXR1cm5U
eXBlOworICAgIFZlY3RvcjxUeXBlPiBtX2N1cnJlbnRMb2NhbFR5cGVzOworCisgICAgVmVjdG9y
PE1hY3JvQXNzZW1ibGVyOjpMYWJlbCo+IG1fY29udGludWVMYWJlbExhYmVsczsKKyAgICBWZWN0
b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0Kj4gbV9icmVha0xhYmVsSnVtcExpc3RzOworCisg
ICAgVmVjdG9yPEp1bXBTY29wZSo+IG1fY29udGludWVKdW1wU2NvcGVzOworICAgIFZlY3RvcjxN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QqPiBtX2JyZWFrSnVtcExpc3RzOworfTsKKworSlNfRVhQ
T1JUX1BSSVZBVEUgSlNWYWx1ZSBjb21waWxlQW5kUnVuKEV4ZWNTdGF0ZSosIGNvbnN0IFZlY3Rv
cjxjaGFyPiYgYnVmZmVyKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlm
IC8vIFdhc21KSVRDb21waWxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtT3Bjb2Rlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wY29k
ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lYTE2OGY1ZWQ5MzIwMDgwMzBiYjU0NGRjOGVkYzQ1MGM3YzI4NGY0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wY29k
ZXMuaApAQCAtMCwwICsxLDU4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8qCisgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJz
aW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNl
cHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIFlvdSBtYXkgb2J0YWluIGEgY29w
eSBvZiB0aGUgTGljZW5zZSBhdAorCisgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJ
Q0VOU0UtMi4wCisKKyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVk
IHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2Ug
aXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyBXSVRIT1VUIFdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyBT
ZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlz
c2lvbnMgYW5kCisgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworCisjaWZuZGVm
IFdhc21PcGNvZGVzX2gKKyNkZWZpbmUgV2FzbU9wY29kZXNfaAorCituYW1lc3BhY2UgSlNDIHsK
KworbmFtZXNwYWNlIFdhc20geworCitzdGF0aWMgY29uc3QgdWludDMyX3QgTWFnaWNOdW1iZXIg
PSAweDZkNzM2MTc3OworCitlbnVtIGNsYXNzIFN0bXQgOiB1aW50OF90IHsKKyAgICBTZXRMb2Ms
CisgICAgU2V0R2xvLAorICAgIEkzMlN0b3JlOCwKKyAgICBJMzJTdG9yZU9mZjgsCisgICAgSTMy
U3RvcmUxNiwKKyAgICBJMzJTdG9yZU9mZjE2LAorICAgIEkzMlN0b3JlMzIsCisgICAgSTMyU3Rv
cmVPZmYzMiwKKyAgICBGMzJTdG9yZSwKKyAgICBGMzJTdG9yZU9mZiwKKyAgICBGNjRTdG9yZSwK
KyAgICBGNjRTdG9yZU9mZiwKKyAgICBDYWxsSW50LAorICAgIENhbGxJbmQsCisgICAgQ2FsbElt
cCwKKyAgICBSZXQsCisgICAgQmxvY2ssCisgICAgSWZUaGVuLAorICAgIElmRWxzZSwKKyAgICBX
aGlsZSwKKyAgICBEbywKKyAgICBMYWJlbCwKKyAgICBCcmVhaywKKyAgICBCcmVha0xhYmVsLAor
ICAgIENvbnRpbnVlLAorICAgIENvbnRpbnVlTGFiZWwsCisgICAgU3dpdGNoLAorCisgICAgQmFk
Cit9OworCitlbnVtIGNsYXNzIFN0bXRXaXRoSW1tIDogdWludDhfdCB7CisgICAgU2V0TG9jLAor
ICAgIFNldEdsbywKKyAgICBSZXNldmVkMSwKKyAgICBSZXNldmVkMiwKKworICAgIEJhZAorfTsK
KworZW51bSBjbGFzcyBTd2l0Y2hDYXNlIDogdWludDhfdCB7CisgICAgQ2FzZTAsCisgICAgQ2Fz
ZTEsCisgICAgQ2FzZU4sCisgICAgRGVmYXVsdDAsCisgICAgRGVmYXVsdDEsCisgICAgRGVmYXVs
dE4KK307CisKK2VudW0gY2xhc3MgSTMyIDogdWludDhfdCB7CisgICAgTGl0UG9vbCwKKyAgICBM
aXRJbW0sCisgICAgR2V0TG9jLAorICAgIEdldEdsbywKKyAgICBTZXRMb2MsCisgICAgU2V0R2xv
LAorICAgIFNMb2FkOCwKKyAgICBTTG9hZE9mZjgsCisgICAgVUxvYWQ4LAorICAgIFVMb2FkT2Zm
OCwKKyAgICBTTG9hZDE2LAorICAgIFNMb2FkT2ZmMTYsCisgICAgVUxvYWQxNiwKKyAgICBVTG9h
ZE9mZjE2LAorICAgIExvYWQzMiwKKyAgICBMb2FkT2ZmMzIsCisgICAgU3RvcmU4LAorICAgIFN0
b3JlT2ZmOCwKKyAgICBTdG9yZTE2LAorICAgIFN0b3JlT2ZmMTYsCisgICAgU3RvcmUzMiwKKyAg
ICBTdG9yZU9mZjMyLAorICAgIENhbGxJbnQsCisgICAgQ2FsbEluZCwKKyAgICBDYWxsSW1wLAor
ICAgIENvbmQsCisgICAgQ29tbWEsCisgICAgRnJvbUYzMiwKKyAgICBGcm9tRjY0LAorICAgIE5l
ZywKKyAgICBBZGQsCisgICAgU3ViLAorICAgIE11bCwKKyAgICBTRGl2LAorICAgIFVEaXYsCisg
ICAgU01vZCwKKyAgICBVTW9kLAorICAgIEJpdE5vdCwKKyAgICBCaXRPciwKKyAgICBCaXRBbmQs
CisgICAgQml0WG9yLAorICAgIExzaCwKKyAgICBBcml0aFJzaCwKKyAgICBMb2dpY1JzaCwKKyAg
ICBDbHosCisgICAgTG9naWNOb3QsCisgICAgRXFJMzIsCisgICAgRXFGMzIsCisgICAgRXFGNjQs
CisgICAgTkVxSTMyLAorICAgIE5FcUYzMiwKKyAgICBORXFGNjQsCisgICAgU0xlVGhJMzIsCisg
ICAgVUxlVGhJMzIsCisgICAgTGVUaEYzMiwKKyAgICBMZVRoRjY0LAorICAgIFNMZUVxSTMyLAor
ICAgIFVMZUVxSTMyLAorICAgIExlRXFGMzIsCisgICAgTGVFcUY2NCwKKyAgICBTR3JUaEkzMiwK
KyAgICBVR3JUaEkzMiwKKyAgICBHclRoRjMyLAorICAgIEdyVGhGNjQsCisgICAgU0dyRXFJMzIs
CisgICAgVUdyRXFJMzIsCisgICAgR3JFcUYzMiwKKyAgICBHckVxRjY0LAorICAgIFNNaW4sCisg
ICAgVU1pbiwKKyAgICBTTWF4LAorICAgIFVNYXgsCisgICAgQWJzLAorCisgICAgQmFkCit9Owor
CitlbnVtIGNsYXNzIEkzMldpdGhJbW0gOiB1aW50OF90IHsKKyAgICBMaXRQb29sLAorICAgIExp
dEltbSwKKyAgICBHZXRMb2MsCisgICAgUmVzZXJ2ZWQsCisKKyAgICBCYWQKK307CisKK2VudW0g
Y2xhc3MgRjMyIDogdWludDhfdCB7CisgICAgTGl0UG9vbCwKKyAgICBMaXRJbW0sCisgICAgR2V0
TG9jLAorICAgIEdldEdsbywKKyAgICBTZXRMb2MsCisgICAgU2V0R2xvLAorICAgIExvYWQsCisg
ICAgTG9hZE9mZiwKKyAgICBTdG9yZSwKKyAgICBTdG9yZU9mZiwKKyAgICBDYWxsSW50LAorICAg
IENhbGxJbmQsCisgICAgQ29uZCwKKyAgICBDb21tYSwKKyAgICBGcm9tUzMyLAorICAgIEZyb21V
MzIsCisgICAgRnJvbUY2NCwKKyAgICBOZWcsCisgICAgQWRkLAorICAgIFN1YiwKKyAgICBNdWws
CisgICAgRGl2LAorICAgIEFicywKKyAgICBDZWlsLAorICAgIEZsb29yLAorICAgIFNxcnQsCisK
KyAgICBCYWQKK307CisKK2VudW0gY2xhc3MgRjMyV2l0aEltbSA6IHVpbnQ4X3QgeworICAgIExp
dFBvb2wsCisgICAgR2V0TG9jLAorICAgIFJlc2VydmVkMCwKKyAgICBSZXNlcnZlZDEsCisKKyAg
ICBCYWQKK307CisKK2VudW0gY2xhc3MgRjY0IDogdWludDhfdCB7CisgICAgTGl0UG9vbCwKKyAg
ICBMaXRJbW0sCisgICAgR2V0TG9jLAorICAgIEdldEdsbywKKyAgICBTZXRMb2MsCisgICAgU2V0
R2xvLAorICAgIExvYWQsCisgICAgTG9hZE9mZiwKKyAgICBTdG9yZSwKKyAgICBTdG9yZU9mZiwK
KyAgICBDYWxsSW50LAorICAgIENhbGxJbmQsCisgICAgQ2FsbEltcCwKKyAgICBDb25kLAorICAg
IENvbW1hLAorICAgIEZyb21TMzIsCisgICAgRnJvbVUzMiwKKyAgICBGcm9tRjMyLAorICAgIE5l
ZywKKyAgICBBZGQsCisgICAgU3ViLAorICAgIE11bCwKKyAgICBEaXYsCisgICAgTW9kLAorICAg
IE1pbiwKKyAgICBNYXgsCisgICAgQWJzLAorICAgIENlaWwsCisgICAgRmxvb3IsCisgICAgU3Fy
dCwKKyAgICBDb3MsCisgICAgU2luLAorICAgIFRhbiwKKyAgICBBQ29zLAorICAgIEFTaW4sCisg
ICAgQVRhbiwKKyAgICBBVGFuMiwKKyAgICBFeHAsCisgICAgTG4sCisgICAgUG93LAorCisgICAg
QmFkCit9OworCitlbnVtIGNsYXNzIEY2NFdpdGhJbW0gOiB1aW50OF90IHsKKyAgICBMaXRQb29s
LAorICAgIEdldExvYywKKyAgICBSZXNlcnZlZDAsCisgICAgUmVzZXJ2ZWQxLAorCisgICAgQmFk
Cit9OworCitlbnVtIGNsYXNzIFZvaWQgOiB1aW50OF90IHsKKyAgICBDYWxsSW50LAorICAgIENh
bGxJbmQsCisgICAgQ2FsbEltcCwKKworICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBUeXBlIDog
dWludDhfdCB7CisgICAgSTMyLAorICAgIEYzMiwKKyAgICBGNjQKK307CisKK2VudW0gY2xhc3Mg
VmFyVHlwZXMgOiB1aW50OF90IHsKKyAgICBJMzIgPSAweDEsCisgICAgRjMyID0gMHgyLAorICAg
IEY2NCA9IDB4NCwKK307CisKK2lubGluZSBWYXJUeXBlcyBvcGVyYXRvcnwgKFZhclR5cGVzIGxo
cywgVmFyVHlwZXMgcmhzKSB7IHJldHVybiBWYXJUeXBlcyh1aW50OF90KGxocykgfCB1aW50OF90
KHJocykpOyB9CitpbmxpbmUgYm9vbCBvcGVyYXRvciYoVmFyVHlwZXMgbGhzLCBWYXJUeXBlcyBy
aHMpIHsgcmV0dXJuIGJvb2wodWludDhfdChsaHMpICYgdWludDhfdChyaHMpKTsgfQorCitlbnVt
IGNsYXNzIFZhclR5cGVzV2l0aEltbSA6IHVpbnQ4X3QgeworICAgIE9ubHlJMzIsCisgICAgUmVz
ZXJ2ZWQwLAorICAgIFJlc2VydmVkMSwKKyAgICBSZXNlcnZlZDIKK307CisKK2VudW0gY2xhc3Mg
UlR5cGUgOiB1aW50OF90IHsKKyAgICBJMzIgPSB1aW50OF90KFR5cGU6OkkzMiksCisgICAgRjMy
ID0gdWludDhfdChUeXBlOjpGMzIpLAorICAgIEY2NCA9IHVpbnQ4X3QoVHlwZTo6RjY0KSwKKyAg
ICBWb2lkCit9OworCitjbGFzcyBFeHByIHsKK3B1YmxpYzoKKyAgICBFeHByKCkKKyAgICA6IG1f
dHlwZShSVHlwZSgtMSkpLCB1IHsgfQorICAgIHsKKyAgICB9CisgICAgRXhwcihJMzIgaTMyKSA6
IG1fdHlwZShSVHlwZTo6STMyKSB7IHUuaTMyID0gaTMyOyB9CisgICAgRXhwcihGMzIgZjMyKSA6
IG1fdHlwZShSVHlwZTo6RjMyKSB7IHUuZjMyID0gZjMyOyB9CisgICAgRXhwcihGNjQgZjY0KSA6
IG1fdHlwZShSVHlwZTo6RjY0KSB7IHUuZjY0ID0gZjY0OyB9CisgICAgRXhwcihWb2lkIHYpIDog
bV90eXBlKFJUeXBlOjpWb2lkKSB7IHUudiA9IHY7IH0KKworICAgIFJUeXBlIHR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBJMzIgaTMyKCkgY29uc3QgeyByZXR1cm4gdS5pMzI7
IH0KKyAgICBGMzIgZjMyKCkgY29uc3QgeyByZXR1cm4gdS5mMzI7IH0KKyAgICBGNjQgZjY0KCkg
Y29uc3QgeyByZXR1cm4gdS5mNjQ7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShFeHByIHJocykg
Y29uc3QgeyByZXR1cm4gbV90eXBlID09IHJocy5tX3R5cGUgJiYgdS5yYXcgPT0gcmhzLnUucmF3
OyB9CisgICAgYm9vbCBvcGVyYXRvciE9KEV4cHIgcmhzKSBjb25zdCB7IHJldHVybiAhKCp0aGlz
ID09IHJocyk7IH0KKworcHJpdmF0ZToKKyAgICBSVHlwZSBtX3R5cGU7CisgICAgdW5pb24gVSB7
CisgICAgICAgIEkzMiBpMzI7CisgICAgICAgIEYzMiBmMzI7CisgICAgICAgIEY2NCBmNjQ7Cisg
ICAgICAgIFZvaWQgdjsKKyAgICAgICAgdWludDhfdCByYXc7CisgICAgfSB1OworCisgICAgc3Rh
dGljX2Fzc2VydChzaXplb2YoVSkgPT0gc2l6ZW9mKHVpbnQ4X3QpLCAiRXhhY3Qgb3ZlcmxheSBv
ZiByYXdfIik7Cit9OworCitzdGF0aWMgY29uc3QgdWludDhfdCBIYXNJbW1GbGFnID0gMHg4MDsK
K3N0YXRpY19hc3NlcnQodWludDhfdChJMzI6OkJhZCkgPD0gSGFzSW1tRmxhZywgIk1TQiByZXNl
cnZlZCB0byBkaXN0aW5ndWlzaCBJMzIgZnJvbSBJMzJXaXRoSW1tIik7CitzdGF0aWNfYXNzZXJ0
KHVpbnQ4X3QoRjMyOjpCYWQpIDw9IEhhc0ltbUZsYWcsICJNU0IgcmVzZXJ2ZWQgdG8gZGlzdGlu
Z3Vpc2ggRjMyIGZyb20gRjMyV2l0aEltbSIpOworc3RhdGljX2Fzc2VydCh1aW50OF90KEY2NDo6
QmFkKSA8PSBIYXNJbW1GbGFnLCAiTVNCIHJlc2VydmVkIHRvIGRpc3Rpbmd1aXNoIEY2NCBmcm9t
IEY2NFdpdGhJbW0iKTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIE9wV2l0aEltbUJpdHMgPSAy
Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IE9wV2l0aEltbUxpbWl0ID0gMSA8PCBPcFdpdGhJbW1C
aXRzOworc3RhdGljX2Fzc2VydCh1aW50OF90KEkzMldpdGhJbW06OkJhZCkgPD0gT3BXaXRoSW1t
TGltaXQsICJJMzJXaXRoSW1tIG9wIGZpdHMiKTsKK3N0YXRpY19hc3NlcnQodWludDhfdChGMzJX
aXRoSW1tOjpCYWQpIDw9IE9wV2l0aEltbUxpbWl0LCAiRjMyV2l0aEltbSBvcCBmaXRzIik7Citz
dGF0aWNfYXNzZXJ0KHVpbnQ4X3QoRjY0V2l0aEltbTo6QmFkKSA8PSBPcFdpdGhJbW1MaW1pdCwg
IkY2NFdpdGhJbW0gb3AgZml0cyIpOworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgSW1tQml0cyA9
IDU7CitzdGF0aWMgY29uc3QgdWludDMyX3QgSW1tTGltaXQgPSAxIDw8IEltbUJpdHM7CitzdGF0
aWNfYXNzZXJ0KCgxICsgT3BXaXRoSW1tQml0cyArIEltbUJpdHMpID09IDgsICJCaXRzIG9mIGlt
bWVkaWF0ZSBvcCBzaG91bGQgYWRkIHVwIHRvIGEgYnl0ZSIpOworCitzdGF0aWMgaW5saW5lIHVp
bnQ4X3QgUGFja09wV2l0aEltbSh1aW50OF90IG9wLCB1aW50OF90IGltbSkKK3sKKyAgICBhc3Nl
cnQob3AgPCBPcFdpdGhJbW1MaW1pdCk7CisgICAgYXNzZXJ0KGltbSA8IEltbUxpbWl0KTsKKyAg
ICByZXR1cm4gSGFzSW1tRmxhZyB8ICh1aW50OF90KG9wKSA8PCBJbW1CaXRzKSB8IGltbTsKK30K
KwordGVtcGxhdGUgPGNsYXNzIFRXaXRoSW1tPgorc3RhdGljIGlubGluZSB2b2lkIFVucGFja09w
V2l0aEltbSh1aW50OF90IGJ5dGUsIFRXaXRoSW1tKiBvcCwgdWludDhfdCAqaW1tKQoreworICAg
IGFzc2VydChieXRlICYgSGFzSW1tRmxhZyk7CisgICAgKm9wID0gVFdpdGhJbW0oKGJ5dGUgPj4g
SW1tQml0cykgJiAoT3BXaXRoSW1tTGltaXQgLSAxKSk7CisgICAgKmltbSA9IGJ5dGUgJiAoSW1t
TGltaXQgLSAxKTsKK30KKworY2xhc3MgRXhwcldpdGhJbW0geworcHVibGljOgorICAgIEV4cHJX
aXRoSW1tKCkKKyAgICAgICAgOiBtX3R5cGUoVHlwZSgtMSkpCisgICAgeworICAgIH0KKyAgICBF
eHByV2l0aEltbShJMzJXaXRoSW1tIGkzMikgOiBtX3R5cGUoVHlwZTo6STMyKSB7IHUuaTMyID0g
aTMyOyB9CisgICAgRXhwcldpdGhJbW0oRjMyV2l0aEltbSBmMzIpIDogbV90eXBlKFR5cGU6OkYz
MikgeyB1LmYzMiA9IGYzMjsgfQorICAgIEV4cHJXaXRoSW1tKEY2NFdpdGhJbW0gZjY0KSA6IG1f
dHlwZShUeXBlOjpGNjQpIHsgdS5mNjQgPSBmNjQ7IH0KKworICAgIFR5cGUgdHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIEkzMldpdGhJbW0gaTMyKCkgY29uc3QgeyByZXR1cm4g
dS5pMzI7IH0KKyAgICBGMzJXaXRoSW1tIGYzMigpIGNvbnN0IHsgcmV0dXJuIHUuZjMyOyB9Cisg
ICAgRjY0V2l0aEltbSBmNjQoKSBjb25zdCB7IHJldHVybiB1LmY2NDsgfQorCitwcml2YXRlOgor
ICAgIFR5cGUgbV90eXBlOworICAgIHVuaW9uIFUgeworICAgICAgICBJMzJXaXRoSW1tIGkzMjsK
KyAgICAgICAgRjMyV2l0aEltbSBmMzI7CisgICAgICAgIEY2NFdpdGhJbW0gZjY0OworICAgICAg
ICB1aW50OF90IHJhdzsKKyAgICB9IHU7CisKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihVKSA9
PSBzaXplb2YodWludDhfdCksICJFeGFjdCBvdmVybGF5IG9mIHJhd18iKTsKK307CisKK2VudW0g
Y2xhc3MgRXhwb3J0Rm9ybWF0IDogdWludDhfdCB7CisgICAgRGVmYXVsdCwKKyAgICBSZWNvcmQK
K307CisKK3N0cnVjdCBTaWduYXR1cmUgeworICAgIFJUeXBlIHJldDsKKyAgICBWZWN0b3I8VHlw
ZT4gYXJndW1lbnRzOworCisgICAgU2lnbmF0dXJlKCkgeyB9CisgICAgU2lnbmF0dXJlKFJUeXBl
IHJldCkKKyAgICAgICAgOiByZXQocmV0KSB7IH0KKyAgICBTaWduYXR1cmUoUlR5cGUgcmV0LCB1
aW50MzJfdCBhcmd1bWVudENvdW50KQorICAgICAgICA6IHJldChyZXQpCisgICAgICAgICwgYXJn
dW1lbnRzKGFyZ3VtZW50Q291bnQpIHsgfQorICAgIFNpZ25hdHVyZShSVHlwZSByZXQsIFZlY3Rv
cjxUeXBlPiYmIGFyZ3VtZW50cykKKyAgICAgICAgOiByZXQocmV0KQorICAgICAgICAsIGFyZ3Vt
ZW50cyhXVEY6Om1vdmUoYXJndW1lbnRzKSkgeyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgU2lnbmF0dXJlJiByaHMpIGNvbnN0IHsgcmV0dXJuIHJldCA9PSByaHMucmV0ICYmIGFyZ3Vt
ZW50cyA9PSByaHMuYXJndW1lbnRzOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNpZ25h
dHVyZSYgcmhzKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IHJocyk7IH0KKworICAgIHN0cnVj
dCBIYXNoIHsKKyAgICAgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IFNpZ25hdHVyZSAmc2lnbmF0
dXJlKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihU
eXBlKSA9PSAxICYmIHNpemVvZihSVHlwZSkgPT0gMSwgIlNoaWZ0IG1vcmUiKTsKKyAgICAgICAg
ICAgIHVpbnQzMl90IGggPSB1aW50OF90KHNpZ25hdHVyZS5yZXQpOworICAgICAgICAgICAgZm9y
IChUeXBlIHQgOiBzaWduYXR1cmUuYXJndW1lbnRzKQorICAgICAgICAgICAgICAgIGggPSAoKGgg
PDwgMikgfCB1aW50OF90KHQpKSBeIChoID4+IDMwKTsKKyAgICAgICAgICAgIHJldHVybiBoOwor
ICAgICAgICB9CisgICAgfTsKK307CisKK2NsYXNzIEluIHsKK3B1YmxpYzoKKyAgICBJbigpIHsg
fQorICAgIEluKGNvbnN0IHVpbnQ4X3QqIGJlZ2luKQorICAgICAgICA6IG1fY3Vyc29yKGJlZ2lu
KQorICAgIHsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gVCBmaXhlZFdpZHRoKCk7
CisgICAgU3RtdCBzdG10KCkgeyByZXR1cm4gdTg8U3RtdD4oKTsgfQorICAgIFN3aXRjaENhc2Ug
c3dpdGNoQ2FzZSgpIHsgcmV0dXJuIHU4PFN3aXRjaENhc2U+KCk7IH0KKyAgICB0ZW1wbGF0ZTxj
bGFzcyBULCBjbGFzcyBUV2l0aEltbT4gaW5saW5lIGJvb2wgY29kZShUKiwgVFdpdGhJbW0qLCB1
aW50OF90Kik7CisgICAgVm9pZCB2b2lkRXhwcigpIHsgcmV0dXJuIHU4PFZvaWQ+KCk7IH0KKyAg
ICBFeHBvcnRGb3JtYXQgZXhwb3J0Rm9ybWF0KCkgeyByZXR1cm4gdTg8RXhwb3J0Rm9ybWF0Pigp
OyB9CisgICAgVHlwZSB0eXBlKCkgeyByZXR1cm4gdTg8VHlwZT4oKTsgfQorICAgIFJUeXBlIHJ0
eXBlKCkgeyByZXR1cm4gdTg8UlR5cGU+KCk7IH0KKyAgICBpbmxpbmUgdWludDMyX3QgaW1tVTMy
KCk7CisgICAgaW5saW5lIGludDMyX3QgaW1tUzMyKCk7CisgICAgY2hhciBzaW5nbGVDaGFyKCkg
eyByZXR1cm4gKm1fY3Vyc29yKys7IH0KKworICAgIGlubGluZSBib29sIGlmSTMyTGl0KGNvbnN0
IFZlY3Rvcjx1aW50MzJfdD4mIGkzMnMsIHVpbnQzMl90Kik7CisKK3ByaXZhdGU6CisgICAgdGVt
cGxhdGUgPGNsYXNzIFQ+IFQgdTgoKSB7IHJldHVybiBUKCptX2N1cnNvcisrKTsgfQorCisgICAg
Y29uc3QgdWludDhfdCogbV9jdXJzb3I7Cit9OworCit0ZW1wbGF0ZSA8PgoraW5saW5lIHVpbnQz
Ml90IEluOjpmaXhlZFdpZHRoPHVpbnQzMl90PigpCit7CisgICAgdWludDMyX3QgdTMyID0gbV9j
dXJzb3JbMF0gfCBtX2N1cnNvclsxXSA8PCA4IHwgbV9jdXJzb3JbMl0gPDwgMTYgfCBtX2N1cnNv
clszXSA8PCAyNDsKKyAgICBtX2N1cnNvciArPSA0OworICAgIHJldHVybiB1MzI7Cit9CisKK3Rl
bXBsYXRlIDw+CitpbmxpbmUgZmxvYXQgSW46OmZpeGVkV2lkdGg8ZmxvYXQ+KCkKK3sKKyAgICB1
bmlvbiB7CisgICAgICAgIHVpbnQ4X3QgYXJyWzRdOworICAgICAgICBmbG9hdCBmOworICAgIH0g
dSA9IHsgeyBtX2N1cnNvclswXSwgbV9jdXJzb3JbMV0sIG1fY3Vyc29yWzJdLCBtX2N1cnNvclsz
XSB9IH07CisgICAgbV9jdXJzb3IgKz0gNDsKKyAgICByZXR1cm4gdS5mOworfQorCit0ZW1wbGF0
ZSA8PgoraW5saW5lIGRvdWJsZSBJbjo6Zml4ZWRXaWR0aDxkb3VibGU+KCkKK3sKKyAgICB1bmlv
biB7CisgICAgICAgIHVpbnQ4X3QgYXJyWzhdOworICAgICAgICBkb3VibGUgZDsKKyAgICB9IHUg
PSB7IHsgbV9jdXJzb3JbMF0sIG1fY3Vyc29yWzFdLCBtX2N1cnNvclsyXSwgbV9jdXJzb3JbM10s
IG1fY3Vyc29yWzRdLCBtX2N1cnNvcls1XSwgbV9jdXJzb3JbNl0sIG1fY3Vyc29yWzddIH0gfTsK
KyAgICBtX2N1cnNvciArPSA4OworICAgIHJldHVybiB1LmQ7Cit9CisKK3RlbXBsYXRlIDxjbGFz
cyBULCBjbGFzcyBUV2l0aEltbT4KK2Jvb2wgSW46OmNvZGUoVCogdCwgVFdpdGhJbW0qIHRXaXRo
SW1tLCB1aW50OF90KiBpbW0pCit7CisgICAgdWludDhfdCBieXRlID0gKm1fY3Vyc29yKys7Cisg
ICAgaWYgKCEoYnl0ZSAmIEhhc0ltbUZsYWcpKSB7CisgICAgICAgICp0ID0gVChieXRlKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgVW5wYWNrT3BXaXRoSW1tKGJ5dGUsIHRX
aXRoSW1tLCBpbW0pOworICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIHVpbnQzMl90IElu
OjppbW1VMzIoKQoreworICAgIHVpbnQzMl90IHUzMiA9ICptX2N1cnNvcisrOworICAgIGlmICh1
MzIgPCAweDgwKQorICAgICAgICByZXR1cm4gdTMyOworCisgICAgdTMyICY9IDB4N2Y7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIHNoaWZ0ID0gNzsgdHJ1ZTsgc2hpZnQgKz0gNykgeworICAgICAgICB1
aW50MzJfdCBiID0gKm1fY3Vyc29yKys7CisgICAgICAgIGlmIChiIDwgMHg4MCkKKyAgICAgICAg
ICAgIHJldHVybiB1MzIgfCAoYiA8PCBzaGlmdCk7CisgICAgICAgIHUzMiB8PSAoYiAmIDB4N2Yp
IDw8IHNoaWZ0OworICAgIH0KK30KKworaW5saW5lIGludDMyX3QgSW46OmltbVMzMigpCit7Cisg
ICAgdWludDMyX3QgdTMyID0gKm1fY3Vyc29yKys7CisgICAgaWYgKHUzMiA8IDB4ODApCisgICAg
ICAgIHJldHVybiBpbnQzMl90KHUzMikgPDwgKDMyLTcpID4+ICgzMi03KTsKKworICAgIHUzMiAm
PSAweDdmOworCisgICAgZm9yICh1bnNpZ25lZCBzaGlmdCA9IDc7IHRydWU7IHNoaWZ0ICs9IDcp
IHsKKyAgICAgICAgdWludDMyX3QgYiA9ICptX2N1cnNvcisrOworICAgICAgICBpZiAoYiA8IDB4
ODApIHsKKyAgICAgICAgICAgIHUzMiB8PSBiIDw8IHNoaWZ0OworICAgICAgICAgICAgaW50IHNp
Z25FeHRlbmQgPSAoMzItNykgLSBzaGlmdDsKKyAgICAgICAgICAgIGlmIChzaWduRXh0ZW5kID4g
MCkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50MzJfdCh1MzIpIDw8IHNpZ25FeHRlbmQgPj4g
c2lnbkV4dGVuZDsKKyAgICAgICAgICAgIHJldHVybiBpbnQzMl90KHUzMik7CisgICAgICAgIH0K
KyAgICAgICAgdTMyIHw9IChiICYgMHg3ZikgPDwgc2hpZnQ7CisgICAgfQorfQorCitpbmxpbmUg
Ym9vbCBJbjo6aWZJMzJMaXQoY29uc3QgVmVjdG9yPHVpbnQzMl90PiYgaTMycywgdWludDMyX3Qq
IHUzMikKK3sKKyAgICB1aW50OF90IGJ5dGUgPSAqbV9jdXJzb3I7CisKKyAgICBpZiAoYnl0ZSAm
IEhhc0ltbUZsYWcpIHsKKyAgICAgICAgSTMyV2l0aEltbSBpMzJXaXRoSW1tOworICAgICAgICB1
aW50OF90IGltbTsKKyAgICAgICAgVW5wYWNrT3BXaXRoSW1tKGJ5dGUsICZpMzJXaXRoSW1tLCAm
aW1tKTsKKworICAgICAgICBpZiAoaTMyV2l0aEltbSA9PSBJMzJXaXRoSW1tOjpMaXRJbW0pIHsK
KyAgICAgICAgICAgIG1fY3Vyc29yKys7CisgICAgICAgICAgICAqdTMyID0gaW1tOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaTMyV2l0aEltbSA9
PSBJMzJXaXRoSW1tOjpMaXRQb29sKSB7CisgICAgICAgICAgICBtX2N1cnNvcisrOworICAgICAg
ICAgICAgKnUzMiA9IGkzMnNbaW1tXTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChJMzIoYnl0ZSkg
PT0gSTMyOjpMaXRJbW0pIHsKKyAgICAgICAgbV9jdXJzb3IrKzsKKyAgICAgICAgKnUzMiA9IGlt
bVUzMigpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoSTMyKGJ5dGUp
ID09IEkzMjo6TGl0UG9vbCkgeworICAgICAgICBtX2N1cnNvcisrOworICAgICAgICAqdTMyID0g
aTMyc1tpbW1VMzIoKV07CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIFdh
c21PcGNvZGVzX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256466</attachid>
            <date>2015-07-09 00:22:50 -0700</date>
            <delta_ts>2015-07-10 20:17:10 -0700</delta_ts>
            <desc>Work in progress. Add initial support for calling internal functions.</desc>
            <filename>bug-146064-20150709002150.patch</filename>
            <type>text/plain</type>
            <size>102008</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1ODMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
ZGMwZDVjOTQ5M2QxMTVlODMxMzdlYmU3Zjk1NGI3ZjgyZDUwZDI1Li5kNTdhMmFhYTg1ZWMyNmJm
YWVjMTc2ODIyOWE4MzYxODNkMTRmY2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNTUgQEAKKzIwMTUtMDctMDkgIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0Bn
bWFpbC5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBuYXRpdmVseSBzdXBwb3J0IFdlYkFzc2Vt
Ymx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYw
NjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUNvZGVCbG9jazo6cmVwbGFjZW1lbnQpOgorICAgICAg
ICAoSlNDOjpXZWJBc3NlbWJseUNvZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsSW50ZXJuYWwpOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJs
eUNvZGVCbG9jazo6V2ViQXNzZW1ibHlDb2RlQmxvY2spOgorICAgICAgICAqIGpzYy5jcHA6Cisg
ICAgICAgIChHbG9iYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKGZ1bmN0aW9u
TG9hZFdlYkFzc2VtYmx5KToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6Cisg
ICAgICAgIChKU0M6OkxMSW50OjpzZXRVcENhbGwpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0
YWJsZS5jcHA6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKToK
KyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6bmV3Q29kZUJsb2NrRm9yKToKKyAgICAg
ICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGlvbkltcGwpOgorICAg
ICAgICAoSlNDOjpXZWJBc3NlbWJseUV4ZWN1dGFibGU6OldlYkFzc2VtYmx5RXhlY3V0YWJsZSk6
CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6ZmluaXNoQ3JlYXRpb24pOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4ZWN1dGFibGU6OmRlc3Ryb3kpOgorICAgICAgICAo
SlNDOjpXZWJBc3NlbWJseUV4ZWN1dGFibGU6OmJhc2VsaW5lQ29kZUJsb2NrRm9yKToKKyAgICAg
ICAgKEpTQzo6V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAg
KEpTQzo6V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpzeW1ib2xUYWJsZSk6CisgICAgICAgIChKU0M6
OldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6Y2xlYXJDb2RlKToKKyAgICAgICAgKEpTQzo6V2ViQXNz
ZW1ibHlFeGVjdXRhYmxlOjp1bmxpbmtDYWxscyk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRh
YmxlLmg6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjppc1dlYkFzc2VtYmx5RXhlY3V0
YWJsZSk6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6
SlNGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAg
ICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlSW1wbCk6CisgICAgICAgICogcnVudGltZS9K
U0Z1bmN0aW9uSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9u
KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6aXNIb3N0RnVuY3Rpb24pOgorICAgICAgICAq
IHJ1bnRpbWUvSlNUeXBlLmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChK
U0M6OlZNOjpWTSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAqIHdhc20vV2Fz
bUpJVENvbXBpbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206Okp1bXBTY29wZTo6
SnVtcFNjb3BlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SnVtcFNjb3BlOjpqdW1wKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6SnVtcFNjb3BlOjpsaW5rKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklU
Q29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBp
bGVyOjphbGxvY2F0ZVNwYWNlT25TdGFjayk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBp
bGVyOjpkZWFsbG9jYXRlU3BhY2VPblN0YWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29t
cGlsZXI6OnBhcnNlQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6
OnBhcnNlVmFycyk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZVN0bXQp
OgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VHZXRMb2NhbCk6CisgICAg
ICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZVNldExvY2FsKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlUmV0dXJuU3RtdCk6CisgICAgICAgIChKU0M6Oldh
c206OkpJVENvbXBpbGVyOjpwYXJzZVN0bXRMaXN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklU
Q29tcGlsZXI6OnBhcnNlQmxvY2tTdG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGls
ZXI6OnBhcnNlSWZTdG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNl
SWZFbHNlU3RtdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZVdoaWxl
U3RtdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZURvU3RtdCk6Cisg
ICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZUxhYmVsU3RtdCk6CisgICAgICAg
IChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZUJyZWFrU3RtdCk6CisgICAgICAgIChKU0M6
Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZUJyZWFrTGFiZWxTdG10KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlQ29udGludWVTdG10KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6SklUQ29tcGlsZXI6OnBhcnNlQ29udGludWVMYWJlbFN0bXQpOgorICAgICAgICAoSlNDOjpX
YXNtOjpKSVRDb21waWxlcjo6cGFyc2VTd2l0Y2hTdG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
SklUQ29tcGlsZXI6OnBhcnNlRXhwcik6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVy
OjpwYXJzZUV4cHJJMzIpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VF
eHByRjY0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6Y2FsbEludGVybmFsRnVuY3Rpb24pOgorICAg
ICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VDYWxsSW50ZXJuYWwpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VCaW5hcnlPcCk6CisgICAgICAgIChKU0M6
Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZVVuYXJ5T3ApOgorICAgICAgICAoSlNDOjpXYXNtOjpK
SVRDb21waWxlcjo6cGFyc2VSZWxhdGlvbmFsT3BJMzIpOgorICAgICAgICAoSlNDOjpXYXNtOjpK
SVRDb21waWxlcjo6cGFyc2VSZWxhdGlvbmFsT3BGNjQpOgorICAgICAgICAoSlNDOjpXYXNtOjpK
SVRDb21waWxlcjo6cGFyc2VDb21tYSk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVy
OjpwYXJzZUNvbmQpOgorICAgICAgICAqIHdhc20vV2FzbUpJVENvbXBpbGVyLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6SklUQ29tcGlsZXIpOgorICAgICAgICAo
SlNDOjpXYXNtOjpKSVRDb21waWxlcjo6YXBwZW5kQ2FsbCk6CisgICAgICAgIChKU0M6Oldhc206
OkpJVENvbXBpbGVyOjpzdGFja0FkZHJlc3MpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21w
aWxlcjo6dGVtcG9yYXJ5QWRkcmVzcyk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVy
OjpwdXNoQ29udGludWVMYWJlbExhYmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGls
ZXI6OnBvcENvbnRpbnVlTGFiZWxMYWJlbCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBp
bGVyOjpjb250aW51ZUxhYmVsTGFiZWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxl
cjo6cHVzaEJyZWFrTGFiZWxKdW1wTGlzdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBp
bGVyOjpwb3BCcmVha0xhYmVsSnVtcExpc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21w
aWxlcjo6YnJlYWtMYWJlbEp1bXBMaXN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGls
ZXI6OnB1c2hDb250aW51ZUp1bXBTY29wZSk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBp
bGVyOjpwb3BDb250aW51ZUp1bXBTY29wZSk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBp
bGVyOjp0b3BDb250aW51ZUp1bXBTY29wZSk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBp
bGVyOjpwdXNoQnJlYWtKdW1wTGlzdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVy
Ojpwb3BCcmVha0p1bXBMaXN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnRv
cEJyZWFrSnVtcExpc3QpOgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpNb2R1bGU6OnBhcnNlQ29uc3RhbnRQb29sU2VjdGlvbik6CisgICAgICAgIChKU0M6Oldhc206
Ok1vZHVsZTo6cGFyc2VTaWduYXR1cmVTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9k
dWxlOjpwYXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlvbik6CisgICAgICAgIChKU0M6Oldhc206Ok1v
ZHVsZTo6cGFyc2VHbG9iYWxTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpw
YXJzZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9k
dWxlOjpwYXJzZUZ1bmN0aW9uUG9pbnRlclRhYmxlcyk6CisgICAgICAgIChKU0M6Oldhc206Ok1v
ZHVsZTo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb25TZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6TW9kdWxlOjpwYXJzZUV4cG9ydFNlY3Rpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1
bGU6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxl
OjpjYWxsSW50ZXJuYWxGdW5jdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OmNvbXBpbGUpOgor
ICAgICAgICAqIHdhc20vV2FzbU1vZHVsZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlOjpNb2R1bGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OmNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiB3
YXNtL1dhc21PcGNvZGVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpvcGVyYXRvcnwg
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6b3BlcmF0b3ImKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
RXhwcjo6RXhwcik6CisgICAgICAgIChKU0M6Oldhc206OkV4cHI6OnR5cGUpOgorICAgICAgICAo
SlNDOjpXYXNtOjpFeHByOjppMzIpOgorICAgICAgICAoSlNDOjpXYXNtOjpFeHByOjpmMzIpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpFeHByOjpmNjQpOgorICAgICAgICAoSlNDOjpXYXNtOjpFeHBy
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcjo6b3BlcmF0b3IhPSk6Cisg
ICAgICAgIChKU0M6Oldhc206OlBhY2tPcFdpdGhJbW0pOgorICAgICAgICAoSlNDOjpXYXNtOjpV
bnBhY2tPcFdpdGhJbW0pOgorICAgICAgICAoSlNDOjpXYXNtOjpFeHByV2l0aEltbTo6RXhwcldp
dGhJbW0pOgorICAgICAgICAoSlNDOjpXYXNtOjpFeHByV2l0aEltbTo6dHlwZSk6CisgICAgICAg
IChKU0M6Oldhc206OkV4cHJXaXRoSW1tOjppMzIpOgorICAgICAgICAoSlNDOjpXYXNtOjpFeHBy
V2l0aEltbTo6ZjMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcldpdGhJbW06OmY2NCk6Cisg
ICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZTo6U2lnbmF0dXJlKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6U2lnbmF0dXJlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0
dXJlOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0dXJlOjpIYXNoOjpv
cGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVhZGVyOjpSZWFkZXIpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpSZWFkZXI6OnN0bXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6
OnN3aXRjaENhc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OnZvaWRFeHByKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6UmVhZGVyOjpleHBvcnRGb3JtYXQpOgorICAgICAgICAoSlNDOjpX
YXNtOjpSZWFkZXI6OnR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OnJ0eXBlKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6UmVhZGVyOjpzaW5nbGVDaGFyKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6UmVhZGVyOjp1OCk6CisgICAgICAgIChKU0M6Oldhc206OlJlYWRlcjo6Zml4ZWRXaWR0
aDx1aW50MzJfdD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OmZpeGVkV2lkdGg8Zmxv
YXQ+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVhZGVyOjpmaXhlZFdpZHRoPGRvdWJsZT4pOgor
ICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OmNvZGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpS
ZWFkZXI6OmltbVUzMik6CisgICAgICAgIChKU0M6Oldhc206OlJlYWRlcjo6aW1tUzMyKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6UmVhZGVyOjppZkkzMkxpdCk6CisKIDIwMTUtMDYtMjAgIFl1c3Vr
ZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgW0VTNl0gRGVzdHJ1
Y3R1cmluZyBhc3NpZ25tZW50IG5lZWQgdG8gYWNjZXB0IGl0ZXJhYmxlcwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCAwZmNiMDkyZTc3MWRlYWE1OTVmNTRiYzM2YzNkYTgzYjBmODAw
Nzk2Li5mMGFkNmFiMWMzN2UzMzJlN2NkOTgxNmQ5NzAwNzI1YTYyNzJmNzI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTAxNiw2ICsxMDE2LDExIEBACiAJCTcwRUNBNjA3MUFG
REJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjAyMUFGREJFQTIwMDQ0OTczOSAvKiBU
ZW1wbGF0ZVJlZ2lzdHJ5LmNwcCAqLzsgfTsKIAkJNzBFQ0E2MDgxQUZEQkVBMjAwNDQ5NzM5IC8q
IFRlbXBsYXRlUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcwRUNBNjAzMUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzBFQ0E2
MDkxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjA0MUFGREJFQTIwMDQ0OTcz
OSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0IyMDc2MzYxQjREQzA1OTAwRjdCQjkzIC8qIFdhc21Nb2R1
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMjA3
NjM1MUI0REMwNTYwMEY3QkI5MyAvKiBXYXNtTW9kdWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0IyMDc2MzcxQjREQzA1RTAwRjdCQjkzIC8q
IFdhc21Nb2R1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0IyMDc2MzQxQjREQzA1NjAwRjdCQjkzIC8qIFdhc21Nb2R1bGUuY3BwICovOyB9Owor
CQk3QjU0NUU1MDFCNDYwNUM3MDAyOTM5MEUgLyogV2FzbUpJVENvbXBpbGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCNTQ1RTREMUI0NjA1QzMw
MDI5MzkwRSAvKiBXYXNtSklUQ29tcGlsZXIuY3BwICovOyB9OworCQk3QjU0NUU1MTFCNDYwNUQz
MDAyOTM5MEUgLyogV2FzbUpJVENvbXBpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QjU0NUU0RTFCNDYwNUMzMDAyOTM5MEUgLyogV2FzbUpJVENv
bXBpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJN0I1NDVFNTIxQjQ2MDVEODAwMjkzOTBFIC8qIFdhc21PcGNvZGVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjU0NUU0RjFCNDYwNUMzMDAyOTM5
MEUgLyogV2FzbU9wY29kZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3QzAwOENEMjE4NkY4QTkzMDA5NTVDMjQgLyogSlNQcm9taXNlRnVuY3Rp
b25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
MDA4Q0QwMTg2RjhBOTMwMDk1NUMyNCAvKiBKU1Byb21pc2VGdW5jdGlvbnMuY3BwICovOyB9Owog
CQk3QzAwOENEMzE4NkY4QTkzMDA5NTVDMjQgLyogSlNQcm9taXNlRnVuY3Rpb25zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzAwOENEMTE4NkY4QTkz
MDA5NTVDMjQgLyogSlNQcm9taXNlRnVuY3Rpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MwMDhDREExODcxMjRCQjAwOTU1QzI0IC8qIEpT
UHJvbWlzZURlZmVycmVkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDMDA4Q0Q4MTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5j
cHAgKi87IH07CkBAIC0yNzU4LDYgKzI3NjMsMTEgQEAKIAkJNzBFQ0E2MDIxQUZEQkVBMjAwNDQ5
NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcwRUNBNjAzMUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0cnkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRl
UmVnaXN0cnlLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVtcGxhdGVS
ZWdpc3RyeUtleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QjIwNzYzNDFCNERD
MDU2MDBGN0JCOTMgLyogV2FzbU1vZHVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXYXNtTW9kdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
N0IyMDc2MzUxQjREQzA1NjAwRjdCQjkzIC8qIFdhc21Nb2R1bGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2FzbU1vZHVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3QjU0NUU0RDFCNDYwNUMzMDAyOTM5MEUgLyogV2FzbUpJVENvbXBpbGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21KSVRDb21waWxlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCNTQ1RTRFMUI0NjA1QzMwMDI5MzkwRSAvKiBX
YXNtSklUQ29tcGlsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUpJ
VENvbXBpbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCNTQ1RTRGMUI0NjA1
QzMwMDI5MzkwRSAvKiBXYXNtT3Bjb2Rlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXYXNtT3Bjb2Rlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzAwOENE
MDE4NkY4QTkzMDA5NTVDMjQgLyogSlNQcm9taXNlRnVuY3Rpb25zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbGluZUVuZGluZyA9IDA7IHBhdGggPSBKU1Byb21pc2VGdW5jdGlv
bnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdlU3BlY2lmaWNhdGlvbklk
ZW50aWZpZXIgPSB4Y29kZS5sYW5nLmNwcDsgfTsKIAkJN0MwMDhDRDExODZGOEE5MzAwOTU1QzI0
IC8qIEpTUHJvbWlzZUZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1Byb21pc2VGdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0Mw
MDhDRDgxODcxMjRCQjAwOTU1QzI0IC8qIEpTUHJvbWlzZURlZmVycmVkLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUHJvbWlzZURlZmVycmVkLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2MTcsNiArMzYyNyw3IEBACiAJCQkJN0VGNkUwQkIw
RUI3QTFFQzAwNzlBRkFGIC8qIHJ1bnRpbWUgKi8sCiAJCQkJMTQxMjExMDAwQTQ4NzcyNjAwNDgw
MjU1IC8qIHRlc3RzICovLAogCQkJCTg2MDNDRUYwMTRDNzUzRUYwMEFFNTlFMyAvKiB0b29scyAq
LywKKwkJCQk3QjU0NUU0QzFCNDYwNUEzMDAyOTM5MEUgLyogd2FzbSAqLywKIAkJCQk4NkVBQzQ4
QzBGOTNFOEI5MDA4RUM5NDggLyogeWFyciAqLywKIAkJCSk7CiAJCQluYW1lID0gSmF2YVNjcmlw
dENvcmU7CkBAIC00MjgwLDYgKzQyOTEsMTggQEAKIAkJCXBhdGggPSBkaXNhc3NlbWJsZXIvQVJN
djc7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk3QjU0NUU0QzFCNDYwNUEz
MDAyOTM5MEUgLyogd2FzbSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4g
PSAoCisJCQkJN0IyMDc2MzQxQjREQzA1NjAwRjdCQjkzIC8qIFdhc21Nb2R1bGUuY3BwICovLAor
CQkJCTdCMjA3NjM1MUI0REMwNTYwMEY3QkI5MyAvKiBXYXNtTW9kdWxlLmggKi8sCisJCQkJN0I1
NDVFNEQxQjQ2MDVDMzAwMjkzOTBFIC8qIFdhc21KSVRDb21waWxlci5jcHAgKi8sCisJCQkJN0I1
NDVFNEUxQjQ2MDVDMzAwMjkzOTBFIC8qIFdhc21KSVRDb21waWxlci5oICovLAorCQkJCTdCNTQ1
RTRGMUI0NjA1QzMwMDI5MzkwRSAvKiBXYXNtT3Bjb2Rlcy5oICovLAorCQkJKTsKKwkJCXBhdGgg
PSB3YXNtOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJN0UzOUQ4MUQwRUMz
OEVGQTAwM0FGMTFBIC8qIGJ5dGVjb21waWxlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCkBAIC01NjM2LDYgKzU2NTksNyBAQAogCQkJCUE1RUY5QjE2MUExRDQ0
MDAwMDcwMkU5MCAvKiBnZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkg
aW4gSGVhZGVycyAqLywKIAkJCQkyQUQyRURGQjE5Nzk5RTM4MDA0RDY0NzggLyogRW51bWVyYXRp
b25Nb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVGOUIxODFBMUQ0NDA2MDA3MDJFOTAgLyog
Z2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weSBpbiBIZWFkZXJzICovLAorCQkJ
CTdCMjA3NjM2MUI0REMwNTkwMEY3QkI5MyAvKiBXYXNtTW9kdWxlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNUVGOUIxOTFBMUQ0NDA3MDA3MDJFOTAgLyogZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5
cGVzX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJQzRGNEI2RjYxQTA1Qzk4
NDAwNUNBQjc2IC8qIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAog
CQkJCTcwREMzRTBBMUIyREYyQzcwMDA1NDI5OSAvKiBJdGVyYXRvclByb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8sCkBAIC02MDQzLDYgKzYwNjcsNyBAQAogCQkJCUJDMThDNDBGMEUxNkY1Q0QwMEIz
NDQ2MCAvKiBJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA3NjE4OUIwMzhD
MDA2MzMyMzEgLyogSWRlbnRpZmllcnNGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTYy
MzFFOTE4RDE4MDQyMDBDMDNGREEgLyogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzIGluIEhl
YWRlcnMgKi8sCisJCQkJN0I1NDVFNTIxQjQ2MDVEODAwMjkzOTBFIC8qIFdhc21PcGNvZGVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDMjVGOEJDRTE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50
YWxTd2VlcGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5OTE1RUQ4RTQ2MDBGMTY3QjIg
LyogSW5kZXhpbmdIZWFkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlBMTVFRDhFNDYw
MEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjE0
NSw2ICs2MTcwLDcgQEAKIAkJCQk4NkUzQzYxMzE2N0JBQkQ3MDA2RDc2MEEgLyogSlNDb250ZXh0
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNzE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250
ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFFMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBKU0NvbnRleHRSZWYuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCNTQ1RTUxMUI0NjA1RDMw
MDI5MzkwRSAvKiBXYXNtSklUQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0OENEMUQ4
MTA4Q0Y5MDIwMDgxNjNDNiAvKiBKU0NvbnRleHRSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzIwMjhCODE3OTc2MDFFMDA5ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjc1NzZEMzE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxs
SklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLApAQCAtNzE2Nyw2ICs3MTkzLDcgQEAKIAkJ
CQkwRkYwRjE5QzE2QjcyQTAzMDA1REY5NUIgLyogREZHTm9kZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkE1ODFCQTE1MEU5NTJDMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg2RUM5RENGMTMyOERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTdCNTQ1RTUwMUI0NjA1QzcwMDI5MzkwRSAvKiBXYXNtSklU
Q29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRkQxN0EwQjhDQzAwNzczQUQ4
IC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZEODJFNTYxNDFEQUYwODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGRDhBMzI1MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3Jl
YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTcyMDMsNiArNzIzMCw3IEBACiAJCQkJ
MEZDMDk3QTExNDZCMjhDQTAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjkzQjRBOTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNzA5RkI4NjcxQUUzMzVDNjAwMzlEMDY5IC8qIEpTV2Vha1NldC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk3QjIwNzYzNzFCNERDMDVFMDBGN0JCOTMgLyogV2FzbU1vZHVs
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMyNzE3RDUxRjU3MDBDQTJDNDAgLyogREZH
VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMy
OTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTc2NjIxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1
cmVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAKaW5kZXggYjQwZjhkY2NlNzQxMWE4NzkzMWExNjY1OTEzMmVkYzU4
Mjg1OTk1ZC4uZDI0M2NmYjFiYzNjNTI3Y2U4ZWIwNmM2NDcyNDk2MzUzNjBjZGUyNiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTIxODIsNiAr
MjE4Miw2OCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbgogICAgIG1faGVhcC0+bV9jb2RlQmxv
Y2tzLmFkZCh0aGlzKTsKICAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNp
emVvZihDb2RlQmxvY2spICsgbV9pbnN0cnVjdGlvbnMuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0
aW9uKSk7CiB9CisgICAgCitDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgOiBtX2ds
b2JhbE9iamVjdChnbG9iYWxPYmplY3QtPnZtKCksIG93bmVyRXhlY3V0YWJsZSwgZ2xvYmFsT2Jq
ZWN0KQorICAgICwgbV9oZWFwKCZtX2dsb2JhbE9iamVjdC0+dm0oKS5oZWFwKQorICAgICwgbV9u
dW1DYWxsZWVSZWdpc3RlcnMoMCkgLy8gRklYTUUKKyAgICAsIG1fbnVtVmFycygwKSAvLyBGSVhN
RQorICAgICwgbV9pc0NvbnN0cnVjdG9yKGZhbHNlKSAvLyBGSVhNRQorICAgICwgbV9zaG91bGRB
bHdheXNCZUlubGluZWQodHJ1ZSkKKyAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNl
KQorICAgICwgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMKGZhbHNlKQorICAgIC8vICwgbV91bmxp
bmtlZENvZGUobV9nbG9iYWxPYmplY3QtPnZtKCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRD
b2RlQmxvY2spCisgICAgLCBtX2hhc0RlYnVnZ2VyU3RhdGVtZW50KGZhbHNlKQorICAgICwgbV9z
dGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRGlzYWJsZWQpCisgICAgLCBtX251bUJyZWFrcG9pbnRz
KDApCisgICAgLCBtX293bmVyRXhlY3V0YWJsZShtX2dsb2JhbE9iamVjdC0+dm0oKSwgb3duZXJF
eGVjdXRhYmxlLCBvd25lckV4ZWN1dGFibGUpCisgICAgLCBtX3ZtKCZtX2dsb2JhbE9iamVjdC0+
dm0oKSkgLy8gRklYTUUKKyAgICAsIG1fdGhpc1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcigpKSAv
LyBGSVhNRQorICAgICwgbV9zY29wZVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcigpKSAvLyBGSVhN
RQorICAgICwgbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoKSkg
Ly8gRklYTUUKKyAgICAsIG1faXNTdHJpY3RNb2RlKGZhbHNlKSAvLyBGSVhNRQorICAgICwgbV9u
ZWVkc0FjdGl2YXRpb24oZmFsc2UpCisgICAgLCBtX21heUJlRXhlY3V0aW5nKGZhbHNlKQorICAg
ICwgbV9zb3VyY2UobnVsbHB0cikKKyAgICAsIG1fc291cmNlT2Zmc2V0KDApCisgICAgLCBtX2Zp
cnN0TGluZUNvbHVtbk9mZnNldCgwKQorICAgICwgbV9jb2RlVHlwZShGdW5jdGlvbkNvZGUpIC8v
IEZJWE1FCisgICAgLCBtX29zckV4aXRDb3VudGVyKDApCisgICAgLCBtX29wdGltaXphdGlvbkRl
bGF5Q291bnRlcigwKQorICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigwKQorI2lm
IEVOQUJMRShKSVQpCisgICAgLCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlKERGRzo6Q2FwYWJpbGl0
eUxldmVsTm90U2V0KQorI2VuZGlmCit7CisgICAgbV92aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxs
ZWQuc3RvcmUoZmFsc2UsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworCisgICAgQVNTRVJU
KG1faGVhcC0+aXNEZWZlcnJlZCgpKTsKKworICAgIC8qCisgICAgQVNTRVJUKG1fc2NvcGVSZWdp
c3Rlci5pc0xvY2FsKCkpOworCisgICAgYm9vbCBkaWRDbG9uZVN5bWJvbFRhYmxlID0gZmFsc2U7
CisKKyAgICBpZiAoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2st
PnN5bWJvbFRhYmxlKCkpIHsKKyAgICAgICAgaWYgKG1fdm0tPnR5cGVQcm9maWxlcigpKSB7Cisg
ICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2Nr
KTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlwZVByb2ZpbGluZyhsb2Nr
ZXIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2Rl
ICYmIHN5bWJvbFRhYmxlLT5zY29wZVNpemUoKSkgeworICAgICAgICAgICAgbV9zeW1ib2xUYWJs
ZS5zZXQoKm1fdm0sIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBzeW1ib2xUYWJsZS0+Y2xvbmVT
Y29wZVBhcnQoKm1fdm0pKTsKKyAgICAgICAgICAgIGRpZENsb25lU3ltYm9sVGFibGUgPSB0cnVl
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fc3ltYm9sVGFibGUuc2V0KCptX3ZtLCBt
X293bmVyRXhlY3V0YWJsZS5nZXQoKSwgc3ltYm9sVGFibGUpOworICAgIH0KKyAgICAqLworCisg
ICAgLy8gRklYTUU6CisgICAgc2V0TnVtUGFyYW1ldGVycygwKTsKKworICAgIG1faGVhcC0+bV9j
b2RlQmxvY2tzLmFkZCh0aGlzKTsKKyAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2Nh
dGVkKHNpemVvZihDb2RlQmxvY2spKTsKK30KIAogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKIHsK
QEAgLTMwNTcsNiArMzExOSwxMSBAQCBDb2RlQmxvY2sqIEZ1bmN0aW9uQ29kZUJsb2NrOjpyZXBs
YWNlbWVudCgpCiAgICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4
ZWN1dGFibGUoKSktPmNvZGVCbG9ja0ZvcihtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3Ry
dWN0IDogQ29kZUZvckNhbGwpOwogfQogCitDb2RlQmxvY2sqIFdlYkFzc2VtYmx5Q29kZUJsb2Nr
OjpyZXBsYWNlbWVudCgpCit7CisgICAgcmV0dXJuIGpzQ2FzdDxXZWJBc3NlbWJseUV4ZWN1dGFi
bGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvZGVCbG9ja0ZvcihtX2lzQ29uc3RydWN0b3IgPyBD
b2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOworfQorCiBERkc6OkNhcGFiaWxpdHlMZXZl
bCBQcm9ncmFtQ29kZUJsb2NrOjpjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpCiB7CiAgICAgcmV0
dXJuIERGRzo6cHJvZ3JhbUNhcGFiaWxpdHlMZXZlbCh0aGlzKTsKQEAgLTMwNzMsNiArMzE0MCwx
MSBAQCBERkc6OkNhcGFiaWxpdHlMZXZlbCBGdW5jdGlvbkNvZGVCbG9jazo6Y2FwYWJpbGl0eUxl
dmVsSW50ZXJuYWwoKQogICAgICAgICByZXR1cm4gREZHOjpmdW5jdGlvbkZvckNvbnN0cnVjdENh
cGFiaWxpdHlMZXZlbCh0aGlzKTsKICAgICByZXR1cm4gREZHOjpmdW5jdGlvbkZvckNhbGxDYXBh
YmlsaXR5TGV2ZWwodGhpcyk7CiB9CisKK0RGRzo6Q2FwYWJpbGl0eUxldmVsIFdlYkFzc2VtYmx5
Q29kZUJsb2NrOjpjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpCit7CisgICAgcmV0dXJuIERGRzo6
Q2Fubm90Q29tcGlsZTsKK30KICNlbmRpZgogCiB2b2lkIENvZGVCbG9jazo6amV0dGlzb24oUHJv
ZmlsZXI6OkpldHRpc29uUmVhc29uIHJlYXNvbiwgUmVvcHRpbWl6YXRpb25Nb2RlIG1vZGUsIGNv
bnN0IEZpcmVEZXRhaWwqIGRldGFpbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAppbmRleCA2NWRhYjk1NWU2OGYxNDc1N2M1YWIxYTI5ZTE5NzQyOGQwY2M4ZTk4
Li44MmY1M2ZkMzgyYmE5ZGI0NDU5OWY1N2I5MzhmNWE2MTZjMWViOWYzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC05Nyw2ICs5Nyw4IEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgCiAgICAgQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhl
Y3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqLCBKU1Njb3BlKiwgUGFzc1JlZlB0cjxTb3VyY2VQ
cm92aWRlcj4sIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1u
T2Zmc2V0KTsKIAorICAgIENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFi
bGUsIEpTR2xvYmFsT2JqZWN0Kik7CisgICAgCiAgICAgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2Jq
ZWN0PiBtX2dsb2JhbE9iamVjdDsKICAgICBIZWFwKiBtX2hlYXA7CiAKQEAgLTExNDIsNiArMTE0
NCwyNSBAQCBwcm90ZWN0ZWQ6CiAjZW5kaWYKIH07CiAKK2NsYXNzIFdlYkFzc2VtYmx5Q29kZUJs
b2NrIDogcHVibGljIENvZGVCbG9jayB7CitwdWJsaWM6CisgICAgV2ViQXNzZW1ibHlDb2RlQmxv
Y2soQ29weVBhcnNlZEJsb2NrVGFnLCBXZWJBc3NlbWJseUNvZGVCbG9jayYgb3RoZXIpCisgICAg
ICAgIDogQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCisgICAgeworICAgIH0KKwor
ICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogb3duZXJFeGVj
dXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgICAgICA6IENvZGVCbG9j
ayhvd25lckV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgfQorCisjaWYgRU5B
QkxFKEpJVCkKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQo
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlM
ZXZlbEludGVybmFsKCkgb3ZlcnJpZGU7CisjZW5kaWYKK307CisKIGlubGluZSBDb2RlQmxvY2sq
IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGlubGluZUNhbGxGcmFtZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qc2MuY3BwCmluZGV4IDkxMjcyNTFiOWY0OWYwZDdkMmM0NjA3NjExYTU2MzAxZDQy
Y2Q5ZmIuLjQ2NDQxNmVkODU3NTM3NjNmMmJkZTVjZWJmYTNlZjI5YzdiMGM1M2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlUmFyZURh
dGFJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVGVzdFJ1bm5lclV0aWxzLmgiCiAjaW5jbHVkZSAiVHlw
ZVByb2ZpbGVyTG9nLmgiCisjaW5jbHVkZSAiV2FzbUpJVENvbXBpbGVyLmgiCiAjaW5jbHVkZSA8
bWF0aC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC00OTAs
NiArNDkxLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25S
ZXR1cm5UeXBlRm9yKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25EdW1wQmFzaWNCbG9ja0V4ZWN1dGlvblJhbmdlcyhFeGVjU3RhdGUqKTsK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSGFzQmFzaWNCbG9j
a0V4ZWN1dGVkKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25FbmFibGVFeGNlcHRpb25GdXp6KEV4ZWNTdGF0ZSopOworc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2FkV2ViQXNzZW1ibHkoRXhlY1N0YXRl
Kik7CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfRkxBR1MpCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldFNhbXBsaW5nRmxhZ3MoRXhlY1N0YXRlKik7CkBAIC02
NTEsNiArNjUzLDggQEAgcHJvdGVjdGVkOgogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImhhc0Jh
c2ljQmxvY2tFeGVjdXRlZCIsIGZ1bmN0aW9uSGFzQmFzaWNCbG9ja0V4ZWN1dGVkLCAyKTsKIAog
ICAgICAgICBhZGRGdW5jdGlvbih2bSwgImVuYWJsZUV4Y2VwdGlvbkZ1enoiLCBmdW5jdGlvbkVu
YWJsZUV4Y2VwdGlvbkZ1enosIDApOworCisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAibG9hZFdl
YkFzc2VtYmx5IiwgZnVuY3Rpb25Mb2FkV2ViQXNzZW1ibHksIDEpOwogICAgICAgICAKICAgICAg
ICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbEV4ZWMoKSwgMCk7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgKytpKQpA
QCAtMTE2NSw2ICsxMTY5LDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25FbmFibGVFeGNlcHRpb25GdXp6KEV4ZWNTdGF0ZSopCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkxvYWRXZWJBc3NlbWJseShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgU3RyaW5nIGZp
bGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwor
ICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7CisgICAgaWYgKCFmaWxsQnVmZmVyV2l0aENvbnRlbnRz
T2ZGaWxlKGZpbGVOYW1lLCBidWZmZXIpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlM
aXRlcmFsKCJDb3VsZCBub3Qgb3BlbiBmaWxlLiIpKSkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
V2FzbTo6Y29tcGlsZShleGVjLCBidWZmZXIpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKK30KKwogLy8gVXNlIFNFSCBmb3IgUmVsZWFzZSBidWlsZHMgb25seSB0byBnZXQg
cmlkIG9mIHRoZSBjcmFzaCByZXBvcnQgZGlhbG9nCiAvLyAobHVja2lseSB0aGUgc2FtZSB0ZXN0
cyBmYWlsIGluIFJlbGVhc2UgYW5kIERlYnVnIGJ1aWxkcyBzbyBmYXIpLiBOZWVkIHRvCiAvLyBi
ZSBpbiBhIHNlcGFyYXRlIG1haW4gZnVuY3Rpb24gYmVjYXVzZSB0aGUganNjbWFpbiBmdW5jdGlv
biByZXF1aXJlcyBvYmplY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCmluZGV4IDljY2MxY2U0OTc4OGQ3MTBmYzY5YTY5MTU0MzQyNzFhOGMwOWQy
ZTQuLmM4ODhiMGYwMWE3NzljNGMwMGU4MDBhYjM3ZDc3Nzk5M2RmMjhkNzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApAQCAtMTExOSw3ICsx
MTE5LDkgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlY1N0YXRlKiBl
eGVjQ2FsbGVlLCBJbnN0cnVjdGlvbiogcGMsIENvZGUKICAgICAKICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY29kZVB0cjsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDA7Ci0gICAgaWYg
KGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCisgICAgaWYgKGV4ZWN1dGFibGUtPmlzV2Vi
QXNzZW1ibHlFeGVjdXRhYmxlKCkpIHsKKyAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVu
dHJ5cG9pbnRGb3Iodm0sIGtpbmQsIEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCwgUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CisgICAgfSBlbHNlIGlmIChleGVjdXRhYmxlLT5pc0hvc3RG
dW5jdGlvbigpKQogICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcih2
bSwga2luZCwgTXVzdENoZWNrQXJpdHksIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQp
OwogICAgIGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0
YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAppbmRleCA2Y2IwOWIw
MWIzODI1Yjg0NTZlOTVjMWFiYzlkZmYyYjgwNmU0MTE4Li5jMzEyOTQ2OTI4NGRhYTNhZjkyZGY1
MzI4YWFjMDEzMTk1NjMwZTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmNwcApAQCAtMTQ5LDYgKzE0OSwyNyBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6
Omluc3RhbGxDb2RlKENvZGVCbG9jayogZ2VuZXJpY0NvZGVCbG9jaykKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIAorICAgIAorICAgIGlmIChpc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKSB7
CisgICAgICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxXZWJB
c3NlbWJseUV4ZWN1dGFibGUqPih0aGlzKTsKKyAgICAgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PFdlYkFzc2VtYmx5Q29kZUJsb2NrKj4oZ2VuZXJpY0Nv
ZGVCbG9jayk7CisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIENvZGVGb3JD
YWxsOgorICAgICAgICAgICAgZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JDYWxsID0gY29kZUJs
b2NrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgZXhlY3V0YWJs
ZS0+bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPSBjb2RlQmxvY2s7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IHRoaXMgaXMganVzdCB0
byBtYWtlIGlzSG9zdEZ1bmN0aW9uKCkgaGFwcHkuCisgICAgICAgIC8vIEJ1dCB0aGlzIHdpbGwg
bWFrZSBpc0hvc3RGdW5jdGlvbigpIHJldHVybiB0cnVlLgorICAgICAgICBtX251bVBhcmFtZXRl
cnNGb3JDYWxsID0gMDsKKyAgICAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0ID0gMDsK
KyAgICB9IGVsc2UgeworICAgIAorICAgICAgICAvLyBGSVhNRTogbmVlZCB0byBkZWFsIHdpdGgg
Y29kZVR5cGUoKQogICAgIHN3aXRjaCAoZ2VuZXJpY0NvZGVCbG9jay0+Y29kZVR5cGUoKSkgewog
ICAgIGNhc2UgR2xvYmFsQ29kZTogewogICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpOwpAQCAtMTkyLDYgKzIxMyw4
IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUoQ29kZUJsb2NrKiBnZW5lcmlj
Q29kZUJsb2NrKQogICAgIGlmIChvbGRDb2RlQmxvY2spCiAgICAgICAgIG9sZENvZGVCbG9jay0+
dW5saW5rSW5jb21pbmdDYWxscygpOwogCisgICAgfQorICAgIAogICAgIERlYnVnZ2VyKiBkZWJ1
Z2dlciA9IGdlbmVyaWNDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpOwogICAg
IGlmIChkZWJ1Z2dlcikKICAgICAgICAgZGVidWdnZXItPnJlZ2lzdGVyQ29kZUJsb2NrKGdlbmVy
aWNDb2RlQmxvY2spOwpAQCAtMjI4LDYgKzI1MSw4IEBAIFJlZlB0cjxDb2RlQmxvY2s+IFNjcmlw
dEV4ZWN1dGFibGU6Om5ld0NvZGVCbG9ja0ZvcigKICAgICAgICAgICAgIGV4ZWN1dGFibGUtPnNv
dXJjZSgpLnByb3ZpZGVyKCksIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0Q29sdW1uKCkpKTsK
ICAgICB9CiAgICAgCisgICAgQVNTRVJUKCFpc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKTsKKyAg
ICAKICAgICBSRUxFQVNFX0FTU0VSVChjbGFzc0luZm8oKSA9PSBGdW5jdGlvbkV4ZWN1dGFibGU6
OmluZm8oKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb24pOwogICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKTsK
QEAgLTMyMyw2ICszNDgsOCBAQCBzdGF0aWMgdm9pZCBzZXR1cEpJVChWTSYgdm0sIENvZGVCbG9j
ayogY29kZUJsb2NrKQogSlNPYmplY3QqIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVj
dXRpb25JbXBsKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNGdW5jdGlvbiogZnVuY3Rpb24sIEpT
U2NvcGUqIHNjb3BlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CisgICAgQVNTRVJU
KCFpc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKTsKKyAgICAKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAKQEAgLTQyNSw2ICs0NTIs
MzUgQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogICAg
IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpLT5GdW5jdGlvbkV4ZWN1dGFi
bGU6On5GdW5jdGlvbkV4ZWN1dGFibGUoKTsKIH0KIAorY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2Vt
Ymx5RXhlY3V0YWJsZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHlFeGVjdXRhYmxlIiwgJlNjcmlw
dEV4ZWN1dGFibGU6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJseUV4
ZWN1dGFibGUpIH07CisKK1dlYkFzc2VtYmx5RXhlY3V0YWJsZTo6V2ViQXNzZW1ibHlFeGVjdXRh
YmxlKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQorICAgIDogU2NyaXB0RXhlY3V0
YWJsZSh2bS53ZWJBc3NlbWJseUV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIHZtLCBzb3VyY2Us
IC8qaXNJblN0cmljdENvbnRleHQqLyBmYWxzZSApCit7CisgICAgLyoKKyAgICBSRUxFQVNFX0FT
U0VSVCghc291cmNlLmlzTnVsbCgpKTsKKyAgICBBU1NFUlQoc291cmNlLmxlbmd0aCgpKTsKKyAg
ICBtX2ZpcnN0TGluZSA9IGZpcnN0TGluZTsKKyAgICBtX2xhc3RMaW5lID0gbGFzdExpbmU7Cisg
ICAgbV9zdGFydENvbHVtbiA9IHN0YXJ0Q29sdW1uOworICAgIG1fZW5kQ29sdW1uID0gZW5kQ29s
dW1uOworICAgIG1fcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0ID0gdW5saW5rZWRFeGVjdXRhYmxlLT5w
YXJhbWV0ZXJzU3RhcnRPZmZzZXQoKTsKKyAgICBtX3R5cGVQcm9maWxpbmdTdGFydE9mZnNldCA9
IHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCk7CisgICAgbV90
eXBlUHJvZmlsaW5nRW5kT2Zmc2V0ID0gdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5n
RW5kT2Zmc2V0KCk7CisgICAgKi8KK30KKwordm9pZCBXZWJBc3NlbWJseUV4ZWN1dGFibGU6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Cisg
ICAgbV9zaW5nbGV0b25GdW5jdGlvbi5zZXQodm0sIHRoaXMsIEluZmVycmVkVmFsdWU6OmNyZWF0
ZSh2bSkpOworfQorCit2b2lkIFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwq
IGNlbGwpCit7CisgICAgc3RhdGljX2Nhc3Q8V2ViQXNzZW1ibHlFeGVjdXRhYmxlKj4oY2VsbCkt
PldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6fldlYkFzc2VtYmx5RXhlY3V0YWJsZSgpOworfQorCiBp
bmxpbmUgY29uc3QgY2hhciogc2FtcGxpbmdEZXNjcmlwdGlvbihKSVRDb2RlOjpKSVRUeXBlIGpp
dFR5cGUpCiB7CiAgICAgc3dpdGNoIChqaXRUeXBlKSB7CkBAIC02MTksNiArNjc1LDQ4IEBAIEZ1
bmN0aW9uRXhlY3V0YWJsZSogRnVuY3Rpb25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZSgKICAg
ICByZXR1cm4gdW5saW5rZWRFeGVjdXRhYmxlLT5saW5rKGV4ZWMudm0oKSwgc291cmNlLCBvdmVy
cmlkZUxpbmVOdW1iZXIpOwogfQogCitXZWJBc3NlbWJseUNvZGVCbG9jayogV2ViQXNzZW1ibHlF
eGVjdXRhYmxlOjpiYXNlbGluZUNvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpCit7CisgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIHJlc3VsdDsKKyAgICBpZiAoa2luZCA9
PSBDb2RlRm9yQ2FsbCkKKyAgICAgICAgcmVzdWx0ID0gbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgp
OworICAgIGVsc2UgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JDb25z
dHJ1Y3QpOworICAgICAgICByZXN1bHQgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKTsK
KyAgICB9CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxXZWJBc3NlbWJseUNvZGVCbG9jayo+KHJlc3VsdC0+YmFzZWxpbmVBbHRlcm5h
dGl2ZSgpKTsKK30KKwordm9pZCBXZWJBc3NlbWJseUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBXZWJBc3NlbWJseUV4
ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlFeGVjdXRhYmxlKj4oY2Vs
bCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwor
ICAgIFNjcmlwdEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
CisgICAgaWYgKHRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9yQ2FsbCkKKyAgICAgICAgdGhpc09i
amVjdC0+bV9jb2RlQmxvY2tGb3JDYWxsLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICBp
ZiAodGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpCisgICAgICAgIHRoaXNPYmpl
Y3QtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAg
ICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9zaW5nbGV0b25GdW5jdGlvbik7Cit9CisK
K1N5bWJvbFRhYmxlKiBXZWJBc3NlbWJseUV4ZWN1dGFibGU6OnN5bWJvbFRhYmxlKENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICByZXR1cm4gY29kZUJsb2NrRm9yKGtpbmQpLT5z
eW1ib2xUYWJsZSgpOworfQorCit2b2lkIFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6Y2xlYXJDb2Rl
KCkKK3sKKyAgICBtX2NvZGVCbG9ja0ZvckNhbGwuY2xlYXIoKTsKKyAgICBtX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdC5jbGVhcigpOworICAgIEJhc2U6OmNsZWFyQ29kZSgpOworfQorCit2b2lkIFdl
YkFzc2VtYmx5RXhlY3V0YWJsZTo6dW5saW5rQ2FsbHMoKQoreworfQorCiB2b2lkIEV4ZWN1dGFi
bGVCYXNlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgRXhlY3V0YWJsZUJh
c2UqIHJlYWxUaGlzID0gY29uc3RfY2FzdDxFeGVjdXRhYmxlQmFzZSo+KHRoaXMpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCmluZGV4IDFjN2M4MDAwM2QyYTMy
YmQ2YTMxMWRhYzBkZTUzOTAxYThhZDc4MWYuLjk0YjY4MjAwOGY1YTU2MTZiN2VmYTU0ZjcyMzNh
ZWNhNzZkMjBkMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmgKQEAgLTUwLDYgKzUwLDcgQEAgY2xhc3MgRXZhbENvZGVCbG9jazsKIGNsYXNzIEZ1bmN0aW9u
Q29kZUJsb2NrOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgUHJvZ3JhbUNv
ZGVCbG9jazsKK2NsYXNzIFdlYkFzc2VtYmx5Q29kZUJsb2NrOwogY2xhc3MgSlNTY29wZTsKICAg
ICAKIGVudW0gQ29tcGlsYXRpb25LaW5kIHsgRmlyc3RDb21waWxhdGlvbiwgT3B0aW1pemluZ0Nv
bXBpbGF0aW9uIH07CkBAIC05OCw2ICs5OSwxMCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBy
ZXR1cm4gdHlwZSgpID09IEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGU7CiAgICAgfQorICAgIGJvb2wg
aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGUoKSA9
PSBXZWJBc3NlbWJseUV4ZWN1dGFibGVUeXBlOworICAgIH0KICAgICBib29sIGlzUHJvZ3JhbUV4
ZWN1dGFibGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGUoKSA9PSBQcm9ncmFtRXhlY3V0
YWJsZVR5cGU7CkBAIC02NzgsNiArNjgzLDEyMiBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmll
cjxJbmZlcnJlZFZhbHVlPiBtX3NpbmdsZXRvbkZ1bmN0aW9uOwogfTsKIAorY2xhc3MgV2ViQXNz
ZW1ibHlFeGVjdXRhYmxlIGZpbmFsIDogcHVibGljIFNjcmlwdEV4ZWN1dGFibGUgeworICAgIGZy
aWVuZCBjbGFzcyBKSVQ7CisgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIFNjcmlwdEV4ZWN1dGFibGUgQmFzZTsKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0
cnVjdHVyZUlzSW1tb3J0YWw7CisKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBj
cmVhdGUoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCisgICAgeworICAgICAgICBX
ZWJBc3NlbWJseUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxXZWJBc3NlbWJseUV4ZWN1dGFibGU+KHZtLmhlYXApKSBXZWJBc3NlbWJseUV4ZWN1dGFi
bGUodm0sIHNvdXJjZSk7CisgICAgICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKHZtKTsK
KyAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CisgICAgfQorICAgIC8vIHN0YXRpYyBXZWJBc3Nl
bWJseUV4ZWN1dGFibGUqIGZyb21HbG9iYWxDb2RlKGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEV4
ZWNTdGF0ZSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBKU09iamVjdComIGV4Y2VwdGlvbiwgaW50IG92
ZXJyaWRlTGluZU51bWJlcik7CisKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwor
ICAgICAgICAKKyAgICBib29sIGlzR2VuZXJhdGVkRm9yQ2FsbCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9jb2RlQmxvY2tGb3JDYWxsOworICAgIH0KKworICAgIFdlYkFzc2VtYmx5
Q29kZUJsb2NrKiBjb2RlQmxvY2tGb3JDYWxsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Nv
ZGVCbG9ja0ZvckNhbGwuZ2V0KCk7CisgICAgfQorCisgICAgYm9vbCBpc0dlbmVyYXRlZEZvckNv
bnN0cnVjdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3Q7CisgICAgfQorCisgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9ja0ZvckNv
bnN0cnVjdCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Qu
Z2V0KCk7CisgICAgfQorICAgICAgICAKKyAgICBib29sIGlzR2VuZXJhdGVkRm9yKENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCkKKyAgICB7CisgICAgICAgIGlmIChraW5kID09IENvZGVGb3JD
YWxsKQorICAgICAgICAgICAgcmV0dXJuIGlzR2VuZXJhdGVkRm9yQ2FsbCgpOworICAgICAgICBB
U1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAgcmV0dXJuIGlzR2VuZXJh
dGVkRm9yQ29uc3RydWN0KCk7CisgICAgfQorICAgICAgICAKKyAgICBXZWJBc3NlbWJseUNvZGVC
bG9jayogY29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICB7Cisg
ICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQorICAgICAgICAgICAgcmV0dXJuIGNvZGVC
bG9ja0ZvckNhbGwoKTsKKyAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7
CisgICAgICAgIHJldHVybiBjb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKTsKKyAgICB9CisKKyAgICBX
ZWJBc3NlbWJseUNvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0
aW9uS2luZCk7CisgICAgICAgIAorICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKiBwcm9maWxlZENv
ZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgeworICAgICAgICBy
ZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3Ioa2luZCk7CisgICAgfQorCisgICAgUmVmUHRyPFR5
cGVTZXQ+IHJldHVyblN0YXRlbWVudFR5cGVTZXQoKSAKKyAgICB7CisgICAgICAgIGlmICghbV9y
ZXR1cm5TdGF0ZW1lbnRUeXBlU2V0KQorICAgICAgICAgICAgbV9yZXR1cm5TdGF0ZW1lbnRUeXBl
U2V0ID0gVHlwZVNldDo6Y3JlYXRlKCk7CisKKyAgICAgICAgcmV0dXJuIG1fcmV0dXJuU3RhdGVt
ZW50VHlwZVNldDsKKyAgICB9CisgICAgICAgIAorICAgIC8vIEZ1bmN0aW9uTW9kZSBmdW5jdGlv
bk1vZGUoKSB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+ZnVuY3Rpb25Nb2RlKCk7IH0K
KyAgICAvLyBib29sIGlzQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtl
ZEV4ZWN1dGFibGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCk7IH0KKyAgICAvLyBib29sIGlzQ2xhc3ND
b25zdHJ1Y3RvckZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUt
PmlzQ2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9uKCk7IH0KKyAgICAvLyBjb25zdCBJZGVudGlmaWVy
JiBuYW1lKCkgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPm5hbWUoKTsgfQorICAgIC8v
IGNvbnN0IElkZW50aWZpZXImIGluZmVycmVkTmFtZSgpIHsgcmV0dXJuIG1fdW5saW5rZWRFeGVj
dXRhYmxlLT5pbmZlcnJlZE5hbWUoKTsgfQorICAgIC8vIEpTU3RyaW5nKiBuYW1lVmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+bmFtZVZhbHVlKCk7IH0KKyAgICAv
LyBzaXplX3QgcGFyYW1ldGVyQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0
YWJsZS0+cGFyYW1ldGVyQ291bnQoKTsgfSAvLyBFeGNsdWRpbmcgJ3RoaXMnIQorICAgIFN5bWJv
bFRhYmxlKiBzeW1ib2xUYWJsZShDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKworICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhXZWJBc3NlbWJseUV4ZWN1
dGFibGVUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgdW5zaWdu
ZWQgcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzU3Rh
cnRPZmZzZXQ7IH0KKworICAgIC8qCisgICAgdm9pZCBvdmVycmlkZVBhcmFtZXRlckFuZFR5cGVQ
cm9maWxpbmdTdGFydEVuZE9mZnNldHModW5zaWduZWQgcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0LCB1
bnNpZ25lZCB0eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQsIHVuc2lnbmVkIHR5cGVQcm9maWxpbmdF
bmRPZmZzZXQpCisgICAgeworICAgICAgICBtX3BhcmFtZXRlcnNTdGFydE9mZnNldCA9IHBhcmFt
ZXRlcnNTdGFydE9mZnNldDsKKyAgICAgICAgbV90eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQgPSB0
eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQ7CisgICAgICAgIG1fdHlwZVByb2ZpbGluZ0VuZE9mZnNl
dCA9IHR5cGVQcm9maWxpbmdFbmRPZmZzZXQ7CisgICAgfQorICAgICovCisKKyAgICBERUNMQVJF
X0lORk87CisgICAgICAgIAorICAgIHZvaWQgdW5saW5rQ2FsbHMoKTsKKworICAgIHZvaWQgY2xl
YXJDb2RlKCk7CisgICAgCisgICAgSW5mZXJyZWRWYWx1ZSogc2luZ2xldG9uRnVuY3Rpb24oKSB7
IHJldHVybiBtX3NpbmdsZXRvbkZ1bmN0aW9uLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgV2Vi
QXNzZW1ibHlFeGVjdXRhYmxlKFZNJiwgY29uc3QgU291cmNlQ29kZSYpOworICAgIAorICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKworICAgIGZyaWVuZCBjbGFzcyBTY3JpcHRFeGVjdXRh
YmxlOworCisgICAgUmVmUHRyPFdlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNh
bGw7CisgICAgUmVmUHRyPFdlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNvbnN0
cnVjdDsKKyAgICBSZWZQdHI8VHlwZVNldD4gbV9yZXR1cm5TdGF0ZW1lbnRUeXBlU2V0OworICAg
IHVuc2lnbmVkIG1fcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0OworICAgIFdyaXRlQmFycmllcjxJbmZl
cnJlZFZhbHVlPiBtX3NpbmdsZXRvbkZ1bmN0aW9uOworfTsKKwogaW5saW5lIHZvaWQgRXhlY3V0
YWJsZUJhc2U6OmNsZWFyQ29kZVZpcnR1YWwoRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUpCiB7
CiAgICAgc3dpdGNoIChleGVjdXRhYmxlLT50eXBlKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKaW5kZXggOWFhOWQ2MTY5ZDc3MzU4MmJkMjRmZmRj
NzJiYzNmZDFhYjY0NzQ3ZC4uNWJlYjZhOGYzY2MzMTlhNGZlZDZkOTVmMWUyOWI0NDM3NDZiMWZl
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKQEAg
LTYwLDEwICs2MCwxMSBAQCBib29sIEpTRnVuY3Rpb246OmlzSG9zdEZ1bmN0aW9uTm9uSW5saW5l
KCkgY29uc3QKICAgICByZXR1cm4gaXNIb3N0RnVuY3Rpb24oKTsKIH0KIAotSlNGdW5jdGlvbiog
SlNGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxl
LCBKU1Njb3BlKiBzY29wZSkKK0pTRnVuY3Rpb24qIEpTRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0s
IEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSkKIHsKICAgICBKU0Z1
bmN0aW9uKiByZXN1bHQgPSBjcmVhdGVJbXBsKHZtLCBleGVjdXRhYmxlLCBzY29wZSk7Ci0gICAg
ZXhlY3V0YWJsZS0+c2luZ2xldG9uRnVuY3Rpb24oKS0+bm90aWZ5V3JpdGUodm0sIHJlc3VsdCwg
IkFsbG9jYXRpbmcgYSBmdW5jdGlvbiIpOworICAgIGlmIChleGVjdXRhYmxlLT5pc0Z1bmN0aW9u
RXhlY3V0YWJsZSgpKQorICAgICAgICBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihl
eGVjdXRhYmxlKS0+c2luZ2xldG9uRnVuY3Rpb24oKS0+bm90aWZ5V3JpdGUodm0sIHJlc3VsdCwg
IkFsbG9jYXRpbmcgYSBmdW5jdGlvbiIpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAppbmRleCAwYjg3ZDc1YzkxNDUw
YzVhZjFhYWVkMjdhNjFhNzQ4ZWY4MGYwOTNlLi4yM2M3ZmIxNzg5YjM5MTcwNjZhNzNkNTA2Mjdk
YzJmZGMyYzljZmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Z1bmN0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bi5oCkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3Jl
YXRlV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludChWTSYsIEZ1bmN0aW9uRXhl
Y3V0YWJsZSosIEpTU2NvcGUqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNGdW5j
dGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBpbnQgbGVuZ3RoLCBjb25zdCBTdHJp
bmcmIG5hbWUsIE5hdGl2ZVN0ZEZ1bmN0aW9uJiYsIEludHJpbnNpYyA9IE5vSW50cmluc2ljLCBO
YXRpdmVGdW5jdGlvbiBuYXRpdmVDb25zdHJ1Y3RvciA9IGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0
cnVjdG9yKTsKIAotICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGUoVk0mLCBGdW5jdGlvbkV4
ZWN1dGFibGUqLCBKU1Njb3BlKik7CisgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShWTSYs
IEV4ZWN1dGFibGVCYXNlKiwgSlNTY29wZSopOwogCiAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNy
ZWF0ZUJ1aWx0aW5GdW5jdGlvbihWTSYsIEZ1bmN0aW9uRXhlY3V0YWJsZSosIEpTR2xvYmFsT2Jq
ZWN0Kik7CiAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZUJ1aWx0aW5GdW5jdGlvbihWTSYs
IEZ1bmN0aW9uRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1l
KTsKQEAgLTE0MCw3ICsxNDAsNyBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBKU19FWFBP
UlRfUFJJVkFURSBKU0Z1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsK
LSAgICBKU0Z1bmN0aW9uKFZNJiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwgSlNTY29wZSopOworICAg
IEpTRnVuY3Rpb24oVk0mLCBFeGVjdXRhYmxlQmFzZSosIEpTU2NvcGUqKTsKIAogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgaW50IGxlbmd0aCwgY29uc3Qg
U3RyaW5nJiBuYW1lKTsKICAgICB1c2luZyBCYXNlOjpmaW5pc2hDcmVhdGlvbjsKQEAgLTE1OSw3
ICsxNTksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBj
cmVhdGVJbXBsKFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU1Njb3Bl
KiBzY29wZSkKKyAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlSW1wbChWTSYgdm0sIEV4ZWN1
dGFibGVCYXNlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSkKICAgICB7CiAgICAgICAgIEpT
RnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNGdW5jdGlv
bj4odm0uaGVhcCkpIEpTRnVuY3Rpb24odm0sIGV4ZWN1dGFibGUsIHNjb3BlKTsKICAgICAgICAg
QVNTRVJUKGZ1bmN0aW9uLT5zdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmgKaW5kZXggZjZj
NmQ1OGVjNmU1YzExNjRjYjI3ZmE1ZTQxNjE4YjRiODE0MmYwMi4uYjkzMDYwNzU5OWE3YzJhMWRk
MDMwNDgwYTcyYmU4YWQzZGJkMjA0ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5oCkBAIC0zOCw3ICszOCw3IEBAIGlubGluZSBKU0Z1
bmN0aW9uKiBKU0Z1bmN0aW9uOjpjcmVhdGVXaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRj
aHBvaW50KAogICAgIHJldHVybiBjcmVhdGVJbXBsKHZtLCBleGVjdXRhYmxlLCBzY29wZSk7CiB9
CiAKLWlubGluZSBKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRh
YmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSkKK2lubGluZSBKU0Z1bmN0aW9uOjpKU0Z1
bmN0aW9uKFZNJiB2bSwgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3Bl
KQogICAgIDogQmFzZSh2bSwgc2NvcGUsIHNjb3BlLT5nbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25T
dHJ1Y3R1cmUoKSkKICAgICAsIG1fZXhlY3V0YWJsZSh2bSwgdGhpcywgZXhlY3V0YWJsZSkKICAg
ICAsIG1fcmFyZURhdGEoKQpAQCAtNTQsNiArNTQsOCBAQCBpbmxpbmUgRnVuY3Rpb25FeGVjdXRh
YmxlKiBKU0Z1bmN0aW9uOjpqc0V4ZWN1dGFibGUoKSBjb25zdAogaW5saW5lIGJvb2wgSlNGdW5j
dGlvbjo6aXNIb3N0RnVuY3Rpb24oKSBjb25zdAogewogICAgIEFTU0VSVChtX2V4ZWN1dGFibGUp
OworICAgIGlmIChtX2V4ZWN1dGFibGUtPmlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCkpIC8vIEZJ
WE1FOiBoYWNreQorICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gbV9leGVjdXRhYmxl
LT5pc0hvc3RGdW5jdGlvbigpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlw
ZS5oCmluZGV4IDQwMzI2Y2UwZjMyOWZhN2M3YmJjOTlmNDQ2NDI4ZmU5NmM5MTI0YjMuLjc2ZWZl
ODIyNDJhYWUxM2UwZTYxNTRhZjA1MjJjNmQ4NjcwMzA2NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVHlwZS5oCkBAIC03NCw2ICs3NCw4IEBAIGVudW0gSlNUeXBlIDogdWludDhf
dCB7CiAKICAgICBOYW1lU2NvcGVPYmplY3RUeXBlLAogCisgICAgV2ViQXNzZW1ibHlFeGVjdXRh
YmxlVHlwZSwgLy8gRklYTUU6IE1vdmUgaXQgYWJvdmUuCisKICAgICBHbG9iYWxPYmplY3RUeXBl
LAogICAgIEFjdGl2YXRpb25PYmplY3RUeXBlLAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAKaW5kZXggN2Q5ZGY4MGI0ZmU3NjY3YzE4OGNiZTFlN2Y5MWVlN2Q4ZDA4MzQzZC4uYWE5
MzhhN2UxZjdhYzg3MWI3ZmEzOTE3NWRjMWNmMWUwYzFjMDhlOCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcApAQCAtMjIxLDYgKzIyMSw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBl
LCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICBldmFsRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRo
aXMsIEV2YWxFeGVjdXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7
CiAgICAgcHJvZ3JhbUV4ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBQcm9ncmFtRXhlY3V0
YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGZ1bmN0aW9u
RXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRl
U3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHdlYkFzc2VtYmx5RXhlY3V0YWJs
ZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0
dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHJlZ0V4cFN0cnVjdHVyZS5zZXQoKnRoaXMs
IFJlZ0V4cDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHN5bWJv
bFN0cnVjdHVyZS5zZXQoKnRoaXMsIFN5bWJvbDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBq
c051bGwoKSkpOwogICAgIHN5bWJvbFRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgU3ltYm9sVGFi
bGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCmluZGV4IGJmYzRmNGE5YzI2NzUwNTIwNTExYzUwNjQzYWExMWU3NWUxOTMw
MmEuLjg4YmUxNTk5YzU2MzNmZmZkNDZkODgwYTk5NzJhM2VjMWU3ODk1YWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtMjU5LDYgKzI1OSw3IEBAIHB1YmxpYzoKICAgICBTdHJv
bmc8U3RydWN0dXJlPiBldmFsRXhlY3V0YWJsZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0
dXJlPiBwcm9ncmFtRXhlY3V0YWJsZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBm
dW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gd2ViQXNz
ZW1ibHlFeGVjdXRhYmxlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHJlZ0V4cFN0
cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBzeW1ib2xTdHJ1Y3R1cmU7CiAgICAgU3Ry
b25nPFN0cnVjdHVyZT4gc3ltYm9sVGFibGVTdHJ1Y3R1cmU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSklUQ29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUpJVENvbXBpbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZGJmZjFlMTBhZjhl
ZmIyNTkzMGJmMGQ0ZjZhZTkwOTA0Y2M3NThhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUpJVENvbXBpbGVyLmNwcApAQCAtMCwwICsxLDkxNSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgTGljZW5z
ZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7
CisgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRo
ZSBMaWNlbnNlLgorIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisg
aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyBVbmxlc3MgcmVx
dWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJl
CisgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFT
IElTIiBCQVNJUywKKyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lO
RCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBz
cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgbGltaXRhdGlvbnMg
dW5kZXIgdGhlIExpY2Vuc2UuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2FzbUpJVENvbXBpbGVyLmgiCisKKyNpbmNsdWRlICJKSVRDb2RlLmgiCisjaW5jbHVkZSAiSlND
SlNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiTWF4
RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVz
cGFjZSBXYXNtIHsKKworY2xhc3MgSnVtcFNjb3BlIHsKK3B1YmxpYzoKKyAgICBKdW1wU2NvcGUo
TWFjcm9Bc3NlbWJsZXIqIG1hY3JvQXNzZW1ibGVyKQorICAgICAgICA6IG1fbWFjcm9Bc3NlbWJs
ZXIobWFjcm9Bc3NlbWJsZXIpCisgICAgICAgICwgbV9saW5rZWQoZmFsc2UpCisgICAgeworICAg
IH0KKworICAgIEp1bXBTY29wZShNYWNyb0Fzc2VtYmxlciogbWFjcm9Bc3NlbWJsZXIsIGNvbnN0
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCYgbGFiZWwpCisgICAgICAgIDogbV9tYWNyb0Fzc2VtYmxl
cihtYWNyb0Fzc2VtYmxlcikKKyAgICAgICAgLCBtX2xpbmtlZCh0cnVlKQorICAgICAgICAsIG1f
bGFiZWwobGFiZWwpCisgICAgeworICAgIH0KKworICAgIHZvaWQganVtcCgpCisgICAgeworICAg
ICAgICBpZiAobV9saW5rZWQpCisgICAgICAgICAgICBtX21hY3JvQXNzZW1ibGVyLT5qdW1wKG1f
bGFiZWwpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2p1bXBMaXN0LmFwcGVuZChtX21h
Y3JvQXNzZW1ibGVyLT5qdW1wKCkpOworICAgIH0KKworICAgIHZvaWQgbGluaygpCisgICAgewor
ICAgICAgICBBU1NFUlQoIW1fbGlua2VkKTsKKyAgICAgICAgbV9qdW1wTGlzdC5saW5rKG1fbWFj
cm9Bc3NlbWJsZXIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNYWNyb0Fzc2VtYmxlciogbV9t
YWNyb0Fzc2VtYmxlcjsKKyAgICBib29sIG1fbGlua2VkOworICAgIE1hY3JvQXNzZW1ibGVyOjpM
YWJlbCBtX2xhYmVsOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2p1bXBMaXN0Owor
fTsKKworUmVmUHRyPEpJVENvZGU+IEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oVk0mIHZt
LCBzaXplX3QgZnVuY3Rpb25JbmRleCkKK3sKKyAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwor
ICAgIGFsbG9jYXRlU3BhY2VPblN0YWNrKCk7CisKKyAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSA9IG1fbW9kdWxlLT5tX3NpZ25hdHVyZXNbbV9tb2R1bGUtPm1fZnVuY1NpZ25hdHVyZXNb
ZnVuY3Rpb25JbmRleF1dOworICAgIG1fY3VycmVudFJldHVyblR5cGUgPSBzaWduYXR1cmUucmV0
OworICAgIG1fY3VycmVudExvY2FsVHlwZXMuY2xlYXIoKTsKKyAgICBwYXJzZUFyZ3VtZW50cyhz
aWduYXR1cmUpOworICAgIHBhcnNlVmFycygpOworICAgIHBhcnNlU3RtdExpc3QoKTsKKworICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIodm0sICp0aGlzLCAwLCBKSVRDb21waWxhdGlvbk11c3RT
dWNjZWVkKTsKKworICAgIGZvciAoYXV0byBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9
IG1fY2FsbHMuZW5kKCk7ICsraXRlcikKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhpdGVyLT5m
aXJzdCwgRnVuY3Rpb25QdHIoaXRlci0+c2Vjb25kKSk7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgd2l0aEFyaXR5Q2hlY2s7CisgICAgQ29kZVJlZiByZXN1bHQgPSBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCAoIkJhc2VsaW5lIEpJVCBjb2RlIGZvciBXZWJBc3NlbWJseSIpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVj
aywgSklUQ29kZTo6QmFzZWxpbmVKSVQpKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6YWxsb2Nh
dGVTcGFjZU9uU3RhY2soKQoreworICAgIG1fc3RhY2tIZWlnaHQgPSAzMjsgLy8gRklYTUU6IGNh
bGN1bGF0ZSB0aGUgYWN0dWFsIGhlaWdodAorICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLW1fc3Rh
Y2tIZWlnaHQpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6
OmRlYWxsb2NhdGVTcGFjZU9uU3RhY2soKQoreworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobV9z
dGFja0hlaWdodCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKK30KKwordm9pZCBKSVRDb21waWxl
cjo6cGFyc2VBcmd1bWVudHMoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUpCit7CisgICAgc2l6
ZV90IGFyZ3VtZW50Q291bnQgPSBzaWduYXR1cmUuYXJndW1lbnRzLnNpemUoKTsKKyAgICBmb3Ig
KHVpbnQzMl90IGFyZ0luZGV4ID0gMDsgYXJnSW5kZXggPCBhcmd1bWVudENvdW50OyArK2FyZ0lu
ZGV4KSB7CisgICAgICAgIFR5cGUgdHlwZSA9IHNpZ25hdHVyZS5hcmd1bWVudHNbYXJnSW5kZXhd
OworICAgICAgICBtX2N1cnJlbnRMb2NhbFR5cGVzLmFwcGVuZCh0eXBlKTsKKyAgICAgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBjYXNlIFR5cGU6
OkYzMjoKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlVmFycygpCit7Cisg
ICAgdWludDMyX3QgbnVtYmVyT2ZJMzJWYXJzID0gMDsKKyAgICB1aW50MzJfdCBudW1iZXJPZkYz
MlZhcnMgPSAwOworICAgIHVpbnQzMl90IG51bWJlck9mRjY0VmFycyA9IDA7CisKKyAgICBWYXJU
eXBlcyB2YXJUeXBlczsKKyAgICBWYXJUeXBlc1dpdGhJbW0gdmFyVHlwZXNXaXRoSW1tOworICAg
IHVpbnQ4X3QgaW1tOworICAgIGlmIChtX21vZHVsZS0+bV9yZWFkLmNvZGUoJnZhclR5cGVzLCAm
dmFyVHlwZXNXaXRoSW1tLCAmaW1tKSkgeworICAgICAgICBpZiAodmFyVHlwZXMgJiBWYXJUeXBl
czo6STMyKQorICAgICAgICAgICAgbnVtYmVyT2ZJMzJWYXJzID0gbV9tb2R1bGUtPm1fcmVhZC5p
bW1VMzIoKTsKKyAgICAgICAgaWYgKHZhclR5cGVzICYgVmFyVHlwZXM6OkYzMikKKyAgICAgICAg
ICAgIG51bWJlck9mRjMyVmFycyA9IG1fbW9kdWxlLT5tX3JlYWQuaW1tVTMyKCk7CisgICAgICAg
IGlmICh2YXJUeXBlcyAmIFZhclR5cGVzOjpGNjQpCisgICAgICAgICAgICBudW1iZXJPZkY2NFZh
cnMgPSBtX21vZHVsZS0+bV9yZWFkLmltbVUzMigpOworICAgIH0gZWxzZQorICAgICAgICBudW1i
ZXJPZkkzMlZhcnMgPSBpbW07CisKKyAgICB1aW50MzJfdCBudW1iZXJPZlZhcnMgPSBudW1iZXJP
ZkkzMlZhcnMgKyBudW1iZXJPZkYzMlZhcnMgKyBudW1iZXJPZkY2NFZhcnM7CisgICAgaWYgKG51
bWJlck9mVmFycyA+IDApIHsKKyAgICAgICAgdWludDMyX3QgbG9jYWxJbmRleCA9IG1fY3VycmVu
dExvY2FsVHlwZXMuc2l6ZSgpOworICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVt
YmVyT2ZJMzJWYXJzOyArK2kpIHsKKyAgICAgICAgICAgIG1fY3VycmVudExvY2FsVHlwZXMuYXBw
ZW5kKFR5cGU6OkkzMik7CisgICAgICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgc3Rh
Y2tBZGRyZXNzKGxvY2FsSW5kZXgrKykpOworICAgICAgICB9CisgICAgICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBudW1iZXJPZkYzMlZhcnM7ICsraSkgeworICAgICAgICAgICAgbV9jdXJy
ZW50TG9jYWxUeXBlcy5hcHBlbmQoVHlwZTo6RjMyKTsKKyAgICAgICAgICAgIHN0b3JlMzIoVHJ1
c3RlZEltbTMyKDApLCBzdGFja0FkZHJlc3MobG9jYWxJbmRleCsrKSk7CisgICAgICAgIH0KKyAg
ICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mRjY0VmFyczsgKytpKSB7Cisg
ICAgICAgICAgICBtX2N1cnJlbnRMb2NhbFR5cGVzLmFwcGVuZChUeXBlOjpGNjQpOworICAgICAg
ICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoMCksIHN0YWNrQWRkcmVzcyhsb2NhbEluZGV4Kysp
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VTdG10KCkK
K3sKKyAgICBTdG10IHN0bXQ7CisgICAgU3RtdFdpdGhJbW0gc3RtdFdpdGhJbW07CisgICAgdWlu
dDhfdCBpbW07CisgICAgaWYgKG1fbW9kdWxlLT5tX3JlYWQuY29kZSgmc3RtdCwgJnN0bXRXaXRo
SW1tLCAmaW1tKSkgeworICAgICAgICBzd2l0Y2ggKHN0bXQpIHsKKyAgICAgICAgY2FzZSBTdG10
OjpTZXRMb2M6CisgICAgICAgICAgICBwYXJzZVNldExvY2FsKDApOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgU3RtdDo6U2V0R2xvOgorICAgICAgICBjYXNlIFN0bXQ6OkkzMlN0
b3JlODoKKyAgICAgICAgY2FzZSBTdG10OjpJMzJTdG9yZU9mZjg6CisgICAgICAgIGNhc2UgU3Rt
dDo6STMyU3RvcmUxNjoKKyAgICAgICAgY2FzZSBTdG10OjpJMzJTdG9yZU9mZjE2OgorICAgICAg
ICBjYXNlIFN0bXQ6OkkzMlN0b3JlMzI6CisgICAgICAgIGNhc2UgU3RtdDo6STMyU3RvcmVPZmYz
MjoKKyAgICAgICAgY2FzZSBTdG10OjpGMzJTdG9yZToKKyAgICAgICAgY2FzZSBTdG10OjpGMzJT
dG9yZU9mZjoKKyAgICAgICAgY2FzZSBTdG10OjpGNjRTdG9yZToKKyAgICAgICAgY2FzZSBTdG10
OjpGNjRTdG9yZU9mZjoKKyAgICAgICAgY2FzZSBTdG10OjpDYWxsSW50OgorICAgICAgICBjYXNl
IFN0bXQ6OkNhbGxJbmQ6CisgICAgICAgIGNhc2UgU3RtdDo6Q2FsbEltcDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgU3RtdDo6UmV0Ogor
ICAgICAgICAgICAgcGFyc2VSZXR1cm5TdG10KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGNhc2UgU3RtdDo6QmxvY2s6CisgICAgICAgICAgICBwYXJzZUJsb2NrU3RtdCgpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6OklmVGhlbjoKKyAgICAgICAgICAg
IHBhcnNlSWZTdG10KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU3RtdDo6
SWZFbHNlOgorICAgICAgICAgICAgcGFyc2VJZkVsc2VTdG10KCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGNhc2UgU3RtdDo6V2hpbGU6CisgICAgICAgICAgICBwYXJzZVdoaWxlU3Rt
dCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6OkRvOgorICAgICAg
ICAgICAgcGFyc2VEb1N0bXQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBT
dG10OjpMYWJlbDoKKyAgICAgICAgICAgIHBhcnNlTGFiZWxTdG10KCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGNhc2UgU3RtdDo6QnJlYWs6CisgICAgICAgICAgICBwYXJzZUJyZWFr
U3RtdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6OkJyZWFrTGFi
ZWw6CisgICAgICAgICAgICBwYXJzZUJyZWFrTGFiZWxTdG10KCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGNhc2UgU3RtdDo6Q29udGludWU6CisgICAgICAgICAgICBwYXJzZUNvbnRp
bnVlU3RtdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RtdDo6Q29udGlu
dWVMYWJlbDoKKyAgICAgICAgICAgIHBhcnNlQ29udGludWVMYWJlbFN0bXQoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdG10OjpTd2l0Y2g6CisgICAgICAgICAgICBwYXJz
ZVN3aXRjaFN0bXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIHN3aXRjaCAoc3RtdFdpdGhJbW0pIHsKKyAgICAgICAgY2FzZSBTdG10
V2l0aEltbTo6U2V0TG9jOgorICAgICAgICAgICAgcGFyc2VTZXRMb2NhbChpbW0sIDApOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RtdFdpdGhJbW06OlNldEdsbzoKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlR2V0TG9jYWwoaW50
IGRzdCkKK3sKKyAgICB1aW50MzJfdCBpbW0gPSBtX21vZHVsZS0+bV9yZWFkLmltbVUzMigpOwor
ICAgIHN3aXRjaCAobV9jdXJyZW50TG9jYWxUeXBlc1tpbW1dKSB7CisgICAgY2FzZSBUeXBlOjpJ
MzI6CisgICAgY2FzZSBUeXBlOjpGMzI6IC8vIEZJWE1FOiBsb2FkRmxvYXQvc3RvcmVGbG9hdD8K
KyAgICAgICAgbG9hZDMyKHN0YWNrQWRkcmVzcyhpbW0pLCBHUFJJbmZvOjpyZWdUMCk7CisgICAg
ICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgVHlwZTo6RjY0OiAvLyBGSVhNRTogbG9hZERvdWJsZS9zdG9y
ZURvdWJsZT8KKyAgICAgICAgbG9hZDY0KHN0YWNrQWRkcmVzcyhpbW0pLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgICAgIHN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MoZHN0
KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZVNldExv
Y2FsKHVpbnQzMl90IGltbSwgaW50IGRzdCkKK3sKKyAgICBUeXBlIHR5cGUgPSBtX2N1cnJlbnRM
b2NhbFR5cGVzW2ltbV07CisgICAgcGFyc2VFeHByKFJUeXBlKHR5cGUpLCBkc3QpOworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHlwZTo6STMyOgorICAgIGNhc2UgVHlwZTo6RjMyOgor
ICAgICAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHN0YWNrQWRkcmVzcyhpbW0pKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgIGxvYWQ2NCh0ZW1wb3JhcnlB
ZGRyZXNzKGRzdCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgc3RvcmU2NChHUFJJbmZvOjpy
ZWdUMCwgc3RhY2tBZGRyZXNzKGltbSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBK
SVRDb21waWxlcjo6cGFyc2VTZXRMb2NhbChpbnQgZHN0KQoreworICAgIHBhcnNlU2V0TG9jYWwo
bV9tb2R1bGUtPm1fcmVhZC5pbW1VMzIoKSwgZHN0KTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6
cGFyc2VSZXR1cm5TdG10KCkKK3sKKyAgICBzd2l0Y2ggKG1fY3VycmVudFJldHVyblR5cGUpIHsK
KyAgICBjYXNlIFJUeXBlOjpJMzI6CisgICAgICAgIHBhcnNlRXhwcihSVHlwZTo6STMyLCAwKTsK
KyAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoMCksIEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKKyAgICAgICAgYm94SW50NTIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUlR5cGU6OkYzMjoKKyAgICAgICAgcGFyc2VFeHByKFJUeXBl
OjpGMzIsIDApOworICAgICAgICBsb2FkRG91YmxlKHRlbXBvcmFyeUFkZHJlc3MoMCksIEZQUklu
Zm86OmZwUmVnVDApOyAvLyBGSVhNRTogaGFja3khIFRoaXMgbG9hZHMgNjQgYml0cyEKKyAgICAg
ICAgY29udmVydEZsb2F0VG9Eb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdU
MCk7CisgICAgICAgIGJveERvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUlR5cGU6OkY2NDoKKyAgICAgICAg
cGFyc2VFeHByKFJUeXBlOjpGNjQsIDApOworICAgICAgICBsb2FkRG91YmxlKHRlbXBvcmFyeUFk
ZHJlc3MoMCksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBib3hEb3VibGUoRlBSSW5mbzo6
ZnBSZWdUMCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFJUeXBlOjpWb2lkOgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWFsbG9jYXRl
U3BhY2VPblN0YWNrKCk7CisgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICByZXQoKTsK
K30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VTdG10TGlzdCgpCit7CisgICAgdWludDMyX3Qg
bnVtYmVyT2ZTdG10cyA9IG1fbW9kdWxlLT5tX3JlYWQuaW1tVTMyKCk7CisgICAgZm9yICh1aW50
MzJfdCBpID0gMDsgaSA8IG51bWJlck9mU3RtdHM7ICsraSkKKyAgICAgICAgcGFyc2VTdG10KCk7
Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlQmxvY2tTdG10KCkKK3sKKyAgICBwYXJzZVN0
bXRMaXN0KCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlSWZTdG10KCkKK3sKKyAgICBw
YXJzZUV4cHIoUlR5cGU6OkkzMiwgMCk7CisgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoMCks
IEdQUkluZm86OnJlZ1QwKTsKKyAgICBKdW1wIGVuZCA9IGJyYW5jaFRlc3QzMihaZXJvLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgcGFyc2VTdG10KCk7CisgICAgZW5kLmxpbmsodGhpcyk7Cit9CisK
K3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlSWZFbHNlU3RtdCgpCit7CisgICAgcGFyc2VFeHByKFJU
eXBlOjpJMzIsIDApOworICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKDApLCBHUFJJbmZvOjpy
ZWdUMCk7CisgICAgSnVtcCBlbHMgPSBicmFuY2hUZXN0MzIoWmVybywgR1BSSW5mbzo6cmVnVDAp
OworICAgIHBhcnNlU3RtdCgpOworICAgIEp1bXAgZW5kID0ganVtcCgpOworICAgIGVscy5saW5r
KHRoaXMpOworICAgIHBhcnNlU3RtdCgpOworICAgIGVuZC5saW5rKHRoaXMpOworfQorCit2b2lk
IEpJVENvbXBpbGVyOjpwYXJzZVdoaWxlU3RtdCgpCit7CisgICAgSnVtcFNjb3BlIGNvbnRpbnVl
SnVtcFNjb3BlKHRoaXMsIGxhYmVsKCkpOworICAgIHB1c2hDb250aW51ZUp1bXBTY29wZSgmY29u
dGludWVKdW1wU2NvcGUpOworCisgICAgSnVtcExpc3QgYnJlYWtKdW1wTGlzdDsKKyAgICBwdXNo
QnJlYWtKdW1wTGlzdCgmYnJlYWtKdW1wTGlzdCk7CisKKyAgICBwYXJzZUV4cHIoUlR5cGU6Okkz
MiwgMCk7CisgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoMCksIEdQUkluZm86OnJlZ1QwKTsK
KyAgICBKdW1wIGVuZCA9IGJyYW5jaFRlc3QzMihaZXJvLCBHUFJJbmZvOjpyZWdUMCk7CisgICAg
cGFyc2VTdG10KCk7CisgICAgY29udGludWVKdW1wU2NvcGUuanVtcCgpOworICAgIGVuZC5saW5r
KHRoaXMpOworICAgIGJyZWFrSnVtcExpc3QubGluayh0aGlzKTsKKworICAgIHBvcEJyZWFrSnVt
cExpc3QoKTsKKworICAgIHBvcENvbnRpbnVlSnVtcFNjb3BlKCk7Cit9CisKK3ZvaWQgSklUQ29t
cGlsZXI6OnBhcnNlRG9TdG10KCkKK3sKKyAgICBKdW1wU2NvcGUgY29udGludWVKdW1wU2NvcGUo
dGhpcyk7CisgICAgcHVzaENvbnRpbnVlSnVtcFNjb3BlKCZjb250aW51ZUp1bXBTY29wZSk7CisK
KyAgICBKdW1wTGlzdCBicmVha0p1bXBMaXN0OworICAgIHB1c2hCcmVha0p1bXBMaXN0KCZicmVh
a0p1bXBMaXN0KTsKKworICAgIExhYmVsIHN0YXJ0ID0gbGFiZWwoKTsKKyAgICBwYXJzZVN0bXQo
KTsKKyAgICBjb250aW51ZUp1bXBTY29wZS5saW5rKCk7CisgICAgcGFyc2VFeHByKFJUeXBlOjpJ
MzIsIDApOworICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKDApLCBHUFJJbmZvOjpyZWdUMCk7
CisgICAgSnVtcCBqdW1wVG9TdGFydCA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBHUFJJbmZvOjpy
ZWdUMCk7CisgICAganVtcFRvU3RhcnQubGlua1RvKHN0YXJ0LCB0aGlzKTsKKyAgICBicmVha0p1
bXBMaXN0LmxpbmsodGhpcyk7CisKKyAgICBwb3BCcmVha0p1bXBMaXN0KCk7CisKKyAgICBwb3BD
b250aW51ZUp1bXBTY29wZSgpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUxhYmVsU3Rt
dCgpCit7CisgICAgTGFiZWwgY29udGludWVMYWJlbCA9IGxhYmVsKCk7CisgICAgSnVtcExpc3Qg
YnJlYWtKdW1wTGlzdDsKKyAgICBwdXNoQ29udGludWVMYWJlbExhYmVsKCZjb250aW51ZUxhYmVs
KTsKKyAgICBwdXNoQnJlYWtMYWJlbEp1bXBMaXN0KCZicmVha0p1bXBMaXN0KTsKKyAgICBwYXJz
ZVN0bXQoKTsKKyAgICBicmVha0p1bXBMaXN0LmxpbmsodGhpcyk7CisgICAgcG9wQnJlYWtMYWJl
bEp1bXBMaXN0KCk7CisgICAgcG9wQ29udGludWVMYWJlbExhYmVsKCk7Cit9CisKK3ZvaWQgSklU
Q29tcGlsZXI6OnBhcnNlQnJlYWtTdG10KCkKK3sKKyAgICB0b3BCcmVha0p1bXBMaXN0KCktPmFw
cGVuZChqdW1wKCkpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUJyZWFrTGFiZWxTdG10
KCkKK3sKKyAgICB1aW50MzJfdCBpbmRleCA9IG1fbW9kdWxlLT5tX3JlYWQuaW1tVTMyKCk7Cisg
ICAgYnJlYWtMYWJlbEp1bXBMaXN0KGluZGV4KS0+YXBwZW5kKGp1bXAoKSk7Cit9CisKK3ZvaWQg
SklUQ29tcGlsZXI6OnBhcnNlQ29udGludWVTdG10KCkKK3sKKyAgICB0b3BDb250aW51ZUp1bXBT
Y29wZSgpLT5qdW1wKCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlQ29udGludWVMYWJl
bFN0bXQoKQoreworICAgIHVpbnQzMl90IGluZGV4ID0gbV9tb2R1bGUtPm1fcmVhZC5pbW1VMzIo
KTsKKyAgICBqdW1wKCpjb250aW51ZUxhYmVsTGFiZWwoaW5kZXgpKTsKK30KKwordm9pZCBKSVRD
b21waWxlcjo6cGFyc2VTd2l0Y2hTdG10KCkKK3sKKyAgICBKdW1wTGlzdCBicmVha0p1bXBMaXN0
OworICAgIHB1c2hCcmVha0p1bXBMaXN0KCZicmVha0p1bXBMaXN0KTsKKworICAgIHVpbnQzMl90
IG51bWJlck9mQ2FzZXMgPSBtX21vZHVsZS0+bV9yZWFkLmltbVUzMigpOworICAgIHBhcnNlRXhw
cihSVHlwZTo6STMyLCAwKTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcygwKSwgR1BSSW5m
bzo6cmVnVDApOworCisgICAgSnVtcCB0YWJsZSA9IGp1bXAoKTsKKworICAgIFZlY3RvcjxMYWJl
bD4gbGFiZWxzOworICAgIFZlY3RvcjxpbnQzMl90PiBpbW1zOworICAgIExhYmVsIGRlZmF1bHRM
YWJlbDsKKyAgICBib29sIGhhc0RlZmF1bHQgPSBmYWxzZTsKKworICAgIGZvciAodWludDMyX3Qg
aSA9IDA7IGkgPCBudW1iZXJPZkNhc2VzOyArK2kpIHsKKyAgICAgICAgc3dpdGNoIChtX21vZHVs
ZS0+bV9yZWFkLnN3aXRjaENhc2UoKSkgeworICAgICAgICBjYXNlIFN3aXRjaENhc2U6OkNhc2Uw
OgorICAgICAgICAgICAgbGFiZWxzLmFwcGVuZChsYWJlbCgpKTsKKyAgICAgICAgICAgIGltbXMu
YXBwZW5kKG1fbW9kdWxlLT5tX3JlYWQuaW1tUzMyKCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgU3dpdGNoQ2FzZTo6Q2FzZTE6CisgICAgICAgICAgICBsYWJlbHMuYXBwZW5k
KGxhYmVsKCkpOworICAgICAgICAgICAgaW1tcy5hcHBlbmQobV9tb2R1bGUtPm1fcmVhZC5pbW1T
MzIoKSk7CisgICAgICAgICAgICBwYXJzZVN0bXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFN3aXRjaENhc2U6OkNhc2VOOgorICAgICAgICAgICAgbGFiZWxzLmFwcGVuZChs
YWJlbCgpKTsKKyAgICAgICAgICAgIGltbXMuYXBwZW5kKG1fbW9kdWxlLT5tX3JlYWQuaW1tUzMy
KCkpOworICAgICAgICAgICAgcGFyc2VTdG10TGlzdCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgU3dpdGNoQ2FzZTo6RGVmYXVsdDA6CisgICAgICAgICAgICBkZWZhdWx0TGFi
ZWwgPSBsYWJlbCgpOworICAgICAgICAgICAgaGFzRGVmYXVsdCA9IHRydWU7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBTd2l0Y2hDYXNlOjpEZWZhdWx0MToKKyAgICAgICAgICAg
IGRlZmF1bHRMYWJlbCA9IGxhYmVsKCk7CisgICAgICAgICAgICBoYXNEZWZhdWx0ID0gdHJ1ZTsK
KyAgICAgICAgICAgIHBhcnNlU3RtdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgU3dpdGNoQ2FzZTo6RGVmYXVsdE46CisgICAgICAgICAgICBkZWZhdWx0TGFiZWwgPSBsYWJl
bCgpOworICAgICAgICAgICAgaGFzRGVmYXVsdCA9IHRydWU7CisgICAgICAgICAgICBwYXJzZVN0
bXRMaXN0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBKdW1wIGVuZCA9IGp1bXAoKTsKKyAgICB0YWJsZS5saW5rKHRoaXMpOworCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsYWJlbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgSnVtcCBqbXAg
PSBicmFuY2gzMihFcXVhbCwgR1BSSW5mbzo6cmVnVDAsIFRydXN0ZWRJbW0zMihpbW1zW2ldKSk7
CisgICAgICAgIGptcC5saW5rVG8obGFiZWxzW2ldLCB0aGlzKTsKKyAgICB9CisgICAgaWYgKGhh
c0RlZmF1bHQpCisgICAgICAgIGp1bXAoZGVmYXVsdExhYmVsKTsKKworICAgIGVuZC5saW5rKHRo
aXMpOworCisgICAgYnJlYWtKdW1wTGlzdC5saW5rKHRoaXMpOworICAgIHBvcEJyZWFrSnVtcExp
c3QoKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VFeHByKFJUeXBlIHJUeXBlLCBpbnQg
ZHN0KQoreworICAgIHN3aXRjaCAoclR5cGUpIHsKKyAgICBjYXNlIFJUeXBlOjpJMzI6CisgICAg
ICAgIHBhcnNlRXhwckkzMihkc3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJUeXBlOjpG
NjQ6CisgICAgICAgIHBhcnNlRXhwckY2NChkc3QpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwor
dm9pZCBKSVRDb21waWxlcjo6cGFyc2VFeHBySTMyKGludCBkc3QpCit7CisgICAgSTMyIGkzMjsK
KyAgICBJMzJXaXRoSW1tIGkzMldpdGhJbW07CisgICAgdWludDhfdCBpbW07CisKKyAgICBpZiAo
bV9tb2R1bGUtPm1fcmVhZC5jb2RlKCZpMzIsICZpMzJXaXRoSW1tLCAmaW1tKSkgeworICAgICAg
ICBzd2l0Y2ggKGkzMikgeworICAgICAgICBjYXNlIEkzMjo6TGl0SW1tOgorICAgICAgICAgICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIobV9tb2R1bGUtPm1fcmVhZC5pbW1VMzIoKSksIHRlbXBvcmFy
eUFkZHJlc3MoZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6Okxp
dFBvb2w6CisgICAgICAgIGNhc2UgSTMyOjpHZXRMb2M6CisgICAgICAgICAgICBwYXJzZUdldExv
Y2FsKGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkdldEdsbzoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2Ug
STMyOjpTZXRMb2M6CisgICAgICAgICAgICBwYXJzZVNldExvY2FsKGRzdCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlNldEdsbzoKKyAgICAgICAgY2FzZSBJMzI6OlNM
b2FkODoKKyAgICAgICAgY2FzZSBJMzI6OlNMb2FkT2ZmODoKKyAgICAgICAgY2FzZSBJMzI6OlVM
b2FkODoKKyAgICAgICAgY2FzZSBJMzI6OlVMb2FkT2ZmODoKKyAgICAgICAgY2FzZSBJMzI6OlNM
b2FkMTY6CisgICAgICAgIGNhc2UgSTMyOjpTTG9hZE9mZjE2OgorICAgICAgICBjYXNlIEkzMjo6
VUxvYWQxNjoKKyAgICAgICAgY2FzZSBJMzI6OlVMb2FkT2ZmMTY6CisgICAgICAgIGNhc2UgSTMy
OjpMb2FkMzI6CisgICAgICAgIGNhc2UgSTMyOjpMb2FkT2ZmMzI6CisgICAgICAgIGNhc2UgSTMy
OjpTdG9yZTg6CisgICAgICAgIGNhc2UgSTMyOjpTdG9yZU9mZjg6CisgICAgICAgIGNhc2UgSTMy
OjpTdG9yZTE2OgorICAgICAgICBjYXNlIEkzMjo6U3RvcmVPZmYxNjoKKyAgICAgICAgY2FzZSBJ
MzI6OlN0b3JlMzI6CisgICAgICAgIGNhc2UgSTMyOjpTdG9yZU9mZjMyOgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBJMzI6OkNhbGxJbnQ6
CisgICAgICAgICAgICBwYXJzZUNhbGxJbnRlcm5hbChSVHlwZTo6STMyLCBkc3QpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpDYWxsSW5kOgorICAgICAgICBjYXNlIEkz
Mjo6Q2FsbEltcDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIGNhc2UgSTMyOjpDb25kOgorICAgICAgICAgICAgcGFyc2VDb25kKFJUeXBlOjpJMzIs
IGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkNvbW1hOgorICAg
ICAgICAgICAgcGFyc2VDb21tYShSVHlwZTo6STMyLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSTMyOjpGcm9tRjMyOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBJMzI6OkZyb21GNjQ6CisgICAgICAgICAgICBw
YXJzZUV4cHJGNjQoZHN0KTsKKyAgICAgICAgICAgIGxvYWREb3VibGUodGVtcG9yYXJ5QWRkcmVz
cyhkc3QpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIHRydW5jYXRlRG91YmxlVG9J
bnQzMihGUFJJbmZvOjpmcFJlZ1QwLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBzdG9y
ZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpOZWc6CisgICAgICAgICAgICBwYXJzZVVuYXJ5T3Ao
c3RhdGljX2Nhc3Q8dWludDhfdD4oaTMyKSwgUlR5cGU6OkkzMiwgZHN0KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6QWRkOgorICAgICAgICBjYXNlIEkzMjo6U3ViOgor
ICAgICAgICBjYXNlIEkzMjo6TXVsOgorICAgICAgICAgICAgcGFyc2VCaW5hcnlPcChzdGF0aWNf
Y2FzdDx1aW50OF90PihpMzIpLCBSVHlwZTo6STMyLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSTMyOjpTRGl2OgorICAgICAgICBjYXNlIEkzMjo6VURpdjoKKyAgICAg
ICAgY2FzZSBJMzI6OlNNb2Q6CisgICAgICAgIGNhc2UgSTMyOjpVTW9kOgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBJMzI6OkJpdE5vdDoK
KyAgICAgICAgICAgIHBhcnNlVW5hcnlPcChzdGF0aWNfY2FzdDx1aW50OF90PihpMzIpLCBSVHlw
ZTo6STMyLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpCaXRP
cjoKKyAgICAgICAgY2FzZSBJMzI6OkJpdEFuZDoKKyAgICAgICAgY2FzZSBJMzI6OkJpdFhvcjoK
KyAgICAgICAgICAgIHBhcnNlQmluYXJ5T3Aoc3RhdGljX2Nhc3Q8dWludDhfdD4oaTMyKSwgUlR5
cGU6OkkzMiwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6THNo
OgorICAgICAgICBjYXNlIEkzMjo6QXJpdGhSc2g6CisgICAgICAgIGNhc2UgSTMyOjpMb2dpY1Jz
aDoKKyAgICAgICAgY2FzZSBJMzI6OkNsejoKKyAgICAgICAgY2FzZSBJMzI6OkxvZ2ljTm90Ogor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBJ
MzI6OkVxSTMyOgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3BJMzIoRXF1YWwsIFJUeXBl
OjpJMzIsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkVxRjMy
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2Fz
ZSBJMzI6OkVxRjY0OgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3BGNjQoRG91YmxlRXF1
YWwsIFJUeXBlOjpGNjQsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
MzI6Ok5FcUkzMjoKKyAgICAgICAgICAgIHBhcnNlUmVsYXRpb25hbE9wSTMyKE5vdEVxdWFsLCBS
VHlwZTo6STMyLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpO
RXFGMzI6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICBjYXNlIEkzMjo6TkVxRjY0OgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3BGNjQoRG91
YmxlTm90RXF1YWwsIFJUeXBlOjpGNjQsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBJMzI6OlNMZVRoSTMyOgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3BJMzIo
TGVzc1RoYW4sIFJUeXBlOjpJMzIsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJMzI6OlVMZVRoSTMyOgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3BJMzIoQmVs
b3csIFJUeXBlOjpJMzIsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
MzI6OkxlVGhGMzI6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBjYXNlIEkzMjo6TGVUaEY2NDoKKyAgICAgICAgICAgIHBhcnNlUmVsYXRpb25hbE9w
RjY0KERvdWJsZUxlc3NUaGFuLCBSVHlwZTo6RjY0LCBkc3QpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSTMyOjpTTGVFcUkzMjoKKyAgICAgICAgICAgIHBhcnNlUmVsYXRpb25h
bE9wSTMyKExlc3NUaGFuT3JFcXVhbCwgUlR5cGU6OkkzMiwgZHN0KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEkzMjo6VUxlRXFJMzI6CisgICAgICAgICAgICBwYXJzZVJlbGF0
aW9uYWxPcEkzMihCZWxvd09yRXF1YWwsIFJUeXBlOjpJMzIsIGRzdCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkxlRXFGMzI6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNlIEkzMjo6TGVFcUY2NDoKKyAgICAgICAg
ICAgIHBhcnNlUmVsYXRpb25hbE9wRjY0KERvdWJsZUxlc3NUaGFuT3JFcXVhbCwgUlR5cGU6OkY2
NCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6U0dyVGhJMzI6
CisgICAgICAgICAgICBwYXJzZVJlbGF0aW9uYWxPcEkzMihHcmVhdGVyVGhhbiwgUlR5cGU6Okkz
MiwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6VUdyVGhJMzI6
CisgICAgICAgICAgICBwYXJzZVJlbGF0aW9uYWxPcEkzMihBYm92ZSwgUlR5cGU6OkkzMiwgZHN0
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6R3JUaEYzMjoKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgSTMyOjpH
clRoRjY0OgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3BGNjQoRG91YmxlR3JlYXRlclRo
YW4sIFJUeXBlOjpGNjQsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
MzI6OlNHckVxSTMyOgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3BJMzIoR3JlYXRlclRo
YW5PckVxdWFsLCBSVHlwZTo6STMyLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgSTMyOjpVR3JFcUkzMjoKKyAgICAgICAgICAgIHBhcnNlUmVsYXRpb25hbE9wSTMyKEFi
b3ZlT3JFcXVhbCwgUlR5cGU6OkkzMiwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEkzMjo6R3JFcUYzMjoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIGNhc2UgSTMyOjpHckVxRjY0OgorICAgICAgICAgICAgcGFyc2VSZWxh
dGlvbmFsT3BGNjQoRG91YmxlR3JlYXRlclRoYW5PckVxdWFsLCBSVHlwZTo6RjY0LCBkc3QpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpTTWluOgorICAgICAgICBjYXNl
IEkzMjo6VU1pbjoKKyAgICAgICAgY2FzZSBJMzI6OlNNYXg6CisgICAgICAgIGNhc2UgSTMyOjpV
TWF4OgorICAgICAgICBjYXNlIEkzMjo6QWJzOgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIHN3aXRjaCAoaTMyV2l0aEltbSkgeworICAgICAgICBjYXNlIEkzMldpdGhJbW06
OkxpdEltbToKKyAgICAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGltbSksIHRlbXBvcmFy
eUFkZHJlc3MoZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzJXaXRo
SW1tOjpMaXRQb29sOgorICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobV9tb2R1bGUt
Pm1fY29uc3RhbnRJMzJzW2ltbV0pLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyV2l0aEltbTo6R2V0TG9jOgorICAgICAgICAgICAg
bG9hZDMyKHN0YWNrQWRkcmVzcyhpbW0pLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBz
dG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEpJVENvbXBpbGVyOjpw
YXJzZUV4cHJGNjQoaW50IGRzdCkKK3sKKyAgICBGNjQgZjY0OworICAgIEY2NFdpdGhJbW0gZjY0
V2l0aEltbTsKKyAgICB1aW50OF90IGltbTsKKworICAgIGlmIChtX21vZHVsZS0+bV9yZWFkLmNv
ZGUoJmY2NCwgJmY2NFdpdGhJbW0sICZpbW0pKSB7CisgICAgICAgIHN3aXRjaCAoZjY0KSB7Cisg
ICAgICAgIGNhc2UgRjY0OjpMaXRJbW06CisgICAgICAgICAgICBzdG9yZTY0KFRydXN0ZWRJbW02
NChyZWludGVycHJldERvdWJsZVRvSW50NjQobV9tb2R1bGUtPm1fcmVhZC5maXhlZFdpZHRoPGRv
dWJsZT4oKSkpLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRjY0OjpOZWc6CisgICAgICAgICAgICBwYXJzZVVuYXJ5T3Aoc3RhdGljX2Nh
c3Q8dWludDhfdD4oZjY0KSwgUlR5cGU6OkY2NCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEY2NDo6QWRkOgorICAgICAgICBjYXNlIEY2NDo6U3ViOgorICAgICAgICBj
YXNlIEY2NDo6TXVsOgorICAgICAgICBjYXNlIEY2NDo6RGl2OgorICAgICAgICAgICAgcGFyc2VC
aW5hcnlPcChzdGF0aWNfY2FzdDx1aW50OF90PihmNjQpLCBSVHlwZTo6RjY0LCBkc3QpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRjY0OjpTcXJ0OgorICAgICAgICAgICAgcGFy
c2VVbmFyeU9wKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGY2NCksIFJUeXBlOjpGNjQsIGRzdCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBz
d2l0Y2ggKGY2NFdpdGhJbW0pIHsKKyAgICAgICAgY2FzZSBGNjRXaXRoSW1tOjpMaXRQb29sOgor
ICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQocmVpbnRlcnByZXREb3VibGVUb0ludDY0
KG1fbW9kdWxlLT5tX2NvbnN0YW50RjY0c1tpbW1dKSksIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGNjRXaXRoSW1tOjpHZXRMb2M6Cisg
ICAgICAgICAgICAvLyBGSVhNRTogbG9hZERvdWJsZS9zdG9yZURvdWJsZT8KKyAgICAgICAgICAg
IGxvYWQ2NChzdGFja0FkZHJlc3MoaW1tKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAg
c3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGludDMyX3QgY2Fs
bEludGVybmFsRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBNb2R1bGUqIG1vZHVsZSwgdWludDMy
X3QgZnVuY3Rpb25JbmRleCkKK3sKKyAgICAvLyBGSVhNRTogRG8gd2UgaGF2ZSB0byB1c2UgdGhl
c2UgdHdvIGxpbmVzPworICAgIC8vIFZNKiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgLy8gTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkbid0IHVuYm94IHRoZSB2YWx1ZSBoZXJlIQorICAgIHJldHVybiBtb2R1bGUtPmNhbGxJbnRl
cm5hbEZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uSW5kZXgpLmFzSW50MzIoKTsKK30KKwordm9pZCBK
SVRDb21waWxlcjo6cGFyc2VDYWxsSW50ZXJuYWwoUlR5cGUgclR5cGUsIGludCBkc3QpCit7Cisg
ICAgQVNTRVJUKHJUeXBlID09IFJUeXBlOjpJMzIpOworICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXggPSBtX21vZHVsZS0+bV9yZWFkLmltbVUzMigpOworICAgIGNvbnN0IFZlY3RvcjxUeXBlPiYg
YXJndW1lbnRzID0gbV9tb2R1bGUtPm1fc2lnbmF0dXJlc1ttX21vZHVsZS0+bV9mdW5jU2lnbmF0
dXJlc1tmdW5jdGlvbkluZGV4XV0uYXJndW1lbnRzOworCisgICAgLy8gVE9ETzogYWN0dWFsbHkg
cGFzcyBhcmd1bWVudHMKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXpl
KCk7ICsraSkgeworICAgICAgICBzd2l0Y2ggKGFyZ3VtZW50c1tpXSkgeworICAgICAgICBjYXNl
IFR5cGU6OkkzMjoKKyAgICAgICAgICAgIHBhcnNlRXhwcihSVHlwZTo6STMyLCBkc3QpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgcGFy
c2VFeHByKFJUeXBlOjpGNjQsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAg
fQorICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKKyAgICAgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMigtbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1Q
dHIobV9tb2R1bGUpLCBUcnVzdGVkSW1tMzIoZnVuY3Rpb25JbmRleCkpOworICAgIGFwcGVuZENh
bGwoY2FsbEludGVybmFsRnVuY3Rpb24pOworICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbCkKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIC8vIEZJWE1FOiBDYW4g
d2UgcmVhbGx5IHVzZSByZXR1cm5WYWx1ZUdQUj8KKyAgICBzdG9yZTMyKEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworfQorCit2b2lkIEpJVENvbXBpbGVy
OjpwYXJzZUJpbmFyeU9wKHVpbnQ4X3Qgb3AsIFJUeXBlIHJUeXBlLCBpbnQgZHN0KQoreworICAg
IHBhcnNlRXhwcihyVHlwZSwgZHN0KTsKKyAgICBwYXJzZUV4cHIoclR5cGUsIGRzdCArIDEpOwor
ICAgIHN3aXRjaCAoclR5cGUpIHsKKyAgICBjYXNlIFJUeXBlOjpJMzI6CisgICAgICAgIGxvYWQz
Mih0ZW1wb3JhcnlBZGRyZXNzKGRzdCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgbG9hZDMy
KHRlbXBvcmFyeUFkZHJlc3MoZHN0ICsgMSksIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgc3dp
dGNoIChzdGF0aWNfY2FzdDxJMzI+KG9wKSkgeworICAgICAgICBjYXNlIEkzMjo6QWRkOgorICAg
ICAgICAgICAgYWRkMzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6U3ViOgorICAgICAgICAgICAgc3ViMzIoR1BS
SW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEkzMjo6TXVsOgorICAgICAgICAgICAgbXVsMzIoR1BSSW5mbzo6cmVnVDEsIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6Qml0T3I6
CisgICAgICAgICAgICBvcjMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkJpdEFuZDoKKyAgICAgICAgICAgIGFu
ZDMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBJMzI6OkJpdFhvcjoKKyAgICAgICAgICAgIHhvcjMyKEdQUkluZm86OnJl
Z1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAg
IHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUlR5cGU6OkY2NDoKKyAgICAgICAgbG9hZERvdWJsZSh0ZW1wb3Jh
cnlBZGRyZXNzKGRzdCksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBsb2FkRG91YmxlKHRl
bXBvcmFyeUFkZHJlc3MoZHN0ICsgMSksIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICBzd2l0
Y2ggKHN0YXRpY19jYXN0PEY2ND4ob3ApKSB7CisgICAgICAgIGNhc2UgRjY0OjpBZGQ6CisgICAg
ICAgICAgICBhZGREb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGNjQ6OlN1YjoKKyAgICAgICAgICAgIHN1
YkRvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEY2NDo6TXVsOgorICAgICAgICAgICAgbXVsRG91YmxlKEZQ
UkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRjY0OjpEaXY6CisgICAgICAgICAgICBkaXZEb3VibGUoRlBSSW5mbzo6ZnBS
ZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAg
ICAgIHN0b3JlRG91YmxlKEZQUkluZm86OmZwUmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZVVuYXJ5T3Ao
dWludDhfdCBvcCwgUlR5cGUgclR5cGUsIGludCBkc3QpCit7CisgICAgcGFyc2VFeHByKHJUeXBl
LCBkc3QpOworICAgIHN3aXRjaCAoclR5cGUpIHsKKyAgICBjYXNlIFJUeXBlOjpJMzI6CisgICAg
ICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKGRzdCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAg
ICAgc3dpdGNoIChzdGF0aWNfY2FzdDxJMzI+KG9wKSkgeworICAgICAgICBjYXNlIEkzMjo6TmVn
OgorICAgICAgICAgICAgbmVnMzIoR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSTMyOjpCaXROb3Q6CisgICAgICAgICAgICB4b3IzMihUcnVzdGVkSW1t
MzIoLTEpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAg
ICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUlR5cGU6OkY2NDoKKyAgICAgICAgbG9hZERvdWJsZSh0ZW1w
b3JhcnlBZGRyZXNzKGRzdCksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBzd2l0Y2ggKHN0
YXRpY19jYXN0PEY2ND4ob3ApKSB7CisgICAgICAgIGNhc2UgRjY0OjpOZWc6CisgICAgICAgICAg
ICBuZWdhdGVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGNjQ6OlNxcnQ6CisgICAgICAgICAgICBzcXJ0
RG91YmxlKEZQUkluZm86OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgfQorICAgICAgICBzdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCB0ZW1w
b3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBKSVRDb21w
aWxlcjo6cGFyc2VSZWxhdGlvbmFsT3BJMzIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24s
IFJUeXBlIG9wZXJhbmRUeXBlLCBpbnQgZHN0KQoreworICAgIHBhcnNlRXhwcihvcGVyYW5kVHlw
ZSwgZHN0KTsKKyAgICBwYXJzZUV4cHIob3BlcmFuZFR5cGUsIGRzdCArIDEpOworICAgIHN3aXRj
aCAob3BlcmFuZFR5cGUpIHsKKyAgICBjYXNlIFJUeXBlOjpJMzI6CisgICAgICAgIGxvYWQzMih0
ZW1wb3JhcnlBZGRyZXNzKGRzdCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKHRl
bXBvcmFyeUFkZHJlc3MoZHN0ICsgMSksIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgY29tcGFy
ZTMyKGNvbmRpdGlvbiwgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpy
ZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHRl
bXBvcmFyeUFkZHJlc3MoZHN0KSk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlUmVsYXRp
b25hbE9wRjY0KERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIFJUeXBlIG9wZXJhbmRUeXBlLCBp
bnQgZHN0KQoreworICAgIHBhcnNlRXhwcihvcGVyYW5kVHlwZSwgZHN0KTsKKyAgICBwYXJzZUV4
cHIob3BlcmFuZFR5cGUsIGRzdCArIDEpOworICAgIHN3aXRjaCAob3BlcmFuZFR5cGUpIHsKKyAg
ICBjYXNlIFJUeXBlOjpGNjQ6IHsKKyAgICAgICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNz
KGRzdCksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBsb2FkRG91YmxlKHRlbXBvcmFyeUFk
ZHJlc3MoZHN0ICsgMSksIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICBKdW1wIHRydWVDYXNl
ID0gYnJhbmNoRG91YmxlKGNvbmRpdGlvbiwgRlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBS
ZWdUMSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCB0ZW1wb3JhcnlBZGRyZXNz
KGRzdCkpOworICAgICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKKyAgICAgICAgdHJ1ZUNhc2UubGlu
ayh0aGlzKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMSksIHRlbXBvcmFyeUFkZHJl
c3MoZHN0KSk7CisgICAgICAgIGVuZC5saW5rKHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlQ29tbWEoUlR5cGUgclR5cGUsIGludCBk
c3QpCit7CisgICAgcGFyc2VFeHByKG1fbW9kdWxlLT5tX3JlYWQucnR5cGUoKSwgZHN0KTsKKyAg
ICBwYXJzZUV4cHIoclR5cGUsIGRzdCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlQ29u
ZChSVHlwZSByVHlwZSwgaW50IGRzdCkKK3sKKyAgICBwYXJzZUV4cHIoUlR5cGU6OkkzMiwgZHN0
KTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgSnVtcCBlbHMgPSBicmFuY2hUZXN0MzIoWmVybywgR1BSSW5mbzo6cmVnVDApOworICAgIHBh
cnNlRXhwcihyVHlwZSwgZHN0KTsKKyAgICBKdW1wIGVuZCA9IGp1bXAoKTsKKyAgICBlbHMubGlu
ayh0aGlzKTsKKyAgICBwYXJzZUV4cHIoclR5cGUsIGRzdCk7CisgICAgZW5kLmxpbmsodGhpcyk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtSklUQ29tcGlsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21KSVRDb21waWxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5MTlhZjI0NWZiMjMzZGZhNmM0
NDcxZjE2ZjVhMmZhNTQyOWQ2NTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtSklUQ29tcGlsZXIuaApAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgTGljZW5zZWQgdW5kZXIg
dGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgeW91IG1h
eSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNl
LgorIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgaHR0cDovL3d3
dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyBVbmxlc3MgcmVxdWlyZWQgYnkg
YXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgZGlzdHJp
YnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJ
UywKKyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVy
IGV4cHJlc3Mgb3IgaW1wbGllZC4KKyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBs
YW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgbGltaXRhdGlvbnMgdW5kZXIgdGhl
IExpY2Vuc2UuCisqLworCisjaWZuZGVmIFdhc21KSVRDb21waWxlcl9oCisjZGVmaW5lIFdhc21K
SVRDb21waWxlcl9oCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJXYXNt
TW9kdWxlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBFeGVjU3RhdGU7CitjbGFzcyBK
SVRDb2RlOworY2xhc3MgVk07CisKK25hbWVzcGFjZSBXYXNtIHsKKworY2xhc3MgSnVtcFNjb3Bl
OworCitjbGFzcyBKSVRDb21waWxlciA6IHByaXZhdGUgQ0NhbGxIZWxwZXJzIHsKK3B1YmxpYzoK
KyAgICBKSVRDb21waWxlcihWTSogdm0sIE1vZHVsZSogbW9kdWxlKQorICAgICAgICA6IENDYWxs
SGVscGVycyh2bSwgMCkKKyAgICAgICAgLCBtX21vZHVsZShtb2R1bGUpCisgICAgeworICAgIH0K
KworICAgIFJlZlB0cjxKSVRDb2RlPiBjb21waWxlRnVuY3Rpb24oVk0mLCBzaXplX3QgZnVuY3Rp
b25JbmRleCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBhcHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9u
UHRyJiBmdW5jdGlvbikKKyAgICB7CisgICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2FsbCgp
OworICAgICAgICBtX2NhbGxzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihmdW5jdGlvbkNhbGwsIGZ1
bmN0aW9uLnZhbHVlKCkpKTsKKyAgICB9CisKKyAgICB2b2lkIGFsbG9jYXRlU3BhY2VPblN0YWNr
KCk7CisgICAgdm9pZCBkZWFsbG9jYXRlU3BhY2VPblN0YWNrKCk7CisKKyAgICB2b2lkIHBhcnNl
QXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOworICAgIHZvaWQgcGFyc2VWYXJzKCk7CisKKyAg
ICB2b2lkIHBhcnNlU3RtdCgpOworICAgIHZvaWQgcGFyc2VHZXRMb2NhbChpbnQgZHN0KTsKKyAg
ICB2b2lkIHBhcnNlU2V0TG9jYWwodWludDMyX3QgaW1tLCBpbnQgZHN0KTsKKyAgICB2b2lkIHBh
cnNlU2V0TG9jYWwoaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZVJldHVyblN0bXQoKTsKKyAgICB2
b2lkIHBhcnNlQmxvY2tTdG10KCk7CisgICAgdm9pZCBwYXJzZVN0bXRMaXN0KCk7CisgICAgdm9p
ZCBwYXJzZUlmU3RtdCgpOworICAgIHZvaWQgcGFyc2VJZkVsc2VTdG10KCk7CisgICAgdm9pZCBw
YXJzZVdoaWxlU3RtdCgpOworICAgIHZvaWQgcGFyc2VEb1N0bXQoKTsKKyAgICB2b2lkIHBhcnNl
TGFiZWxTdG10KCk7CisgICAgdm9pZCBwYXJzZUJyZWFrU3RtdCgpOworICAgIHZvaWQgcGFyc2VC
cmVha0xhYmVsU3RtdCgpOworICAgIHZvaWQgcGFyc2VDb250aW51ZVN0bXQoKTsKKyAgICB2b2lk
IHBhcnNlQ29udGludWVMYWJlbFN0bXQoKTsKKyAgICB2b2lkIHBhcnNlU3dpdGNoU3RtdCgpOwor
CisgICAgdm9pZCBwYXJzZUV4cHIoUlR5cGUsIGludCBkc3QpOworICAgIHZvaWQgcGFyc2VFeHBy
STMyKGludCBkc3QpOworICAgIHZvaWQgcGFyc2VFeHByRjY0KGludCBkc3QpOworICAgIHZvaWQg
cGFyc2VDYWxsSW50ZXJuYWwoUlR5cGUsIGludCBkc3QpOworICAgIHZvaWQgcGFyc2VCaW5hcnlP
cCh1aW50OF90IG9wLCBSVHlwZSwgaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZVVuYXJ5T3AodWlu
dDhfdCBvcCwgUlR5cGUsIGludCBkc3QpOworICAgIHZvaWQgcGFyc2VSZWxhdGlvbmFsT3BJMzIo
UmVsYXRpb25hbENvbmRpdGlvbiwgUlR5cGUgb3BlcmFuZFR5cGUsIGludCBkc3QpOworICAgIHZv
aWQgcGFyc2VSZWxhdGlvbmFsT3BGNjQoRG91YmxlQ29uZGl0aW9uLCBSVHlwZSBvcGVyYW5kVHlw
ZSwgaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZUNvbW1hKFJUeXBlLCBpbnQgZHN0KTsKKyAgICB2
b2lkIHBhcnNlQ29uZChSVHlwZSwgaW50IGRzdCk7CisKKyAgICBBZGRyZXNzIHN0YWNrQWRkcmVz
cyhpbnQgaSkgY29uc3QgLy8gRklYTUU6IElzIHRoaXMgY29ycmVjdD8KKyAgICB7CisgICAgICAg
IHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAtaSAqIDggLSA4KTsK
KyAgICB9CisKKyAgICBBZGRyZXNzIHRlbXBvcmFyeUFkZHJlc3MoaW50IGkpIGNvbnN0IC8vIEZJ
WE1FOiBJcyB0aGlzIGNvcnJlY3Q/CisgICAgeworICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgLShpICsgbV9jdXJyZW50TG9jYWxUeXBlcy5zaXplKCkp
ICogOCAtIDgpOworICAgIH0KKworICAgIHZvaWQgcHVzaENvbnRpbnVlTGFiZWxMYWJlbChMYWJl
bCogbGFiZWwpIHsgbV9jb250aW51ZUxhYmVsTGFiZWxzLmFwcGVuZChsYWJlbCk7IH0KKyAgICB2
b2lkIHBvcENvbnRpbnVlTGFiZWxMYWJlbCgpIHsgbV9jb250aW51ZUxhYmVsTGFiZWxzLnJlbW92
ZUxhc3QoKTsgfQorICAgIExhYmVsKiBjb250aW51ZUxhYmVsTGFiZWwoc2l6ZV90IGkpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGludWVMYWJlbExhYmVsc1tpXTsgfQorICAgIHZvaWQgcHVzaEJyZWFr
TGFiZWxKdW1wTGlzdChKdW1wTGlzdCoganVtcExpc3QpIHsgbV9icmVha0xhYmVsSnVtcExpc3Rz
LmFwcGVuZChqdW1wTGlzdCk7IH0KKyAgICB2b2lkIHBvcEJyZWFrTGFiZWxKdW1wTGlzdCgpIHsg
bV9icmVha0xhYmVsSnVtcExpc3RzLnJlbW92ZUxhc3QoKTsgfQorICAgIEp1bXBMaXN0KiBicmVh
a0xhYmVsSnVtcExpc3Qoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fYnJlYWtMYWJlbEp1bXBM
aXN0c1tpXTsgfQorCisgICAgdm9pZCBwdXNoQ29udGludWVKdW1wU2NvcGUoSnVtcFNjb3BlKiBq
dW1wU2NvcGUpIHsgbV9jb250aW51ZUp1bXBTY29wZXMuYXBwZW5kKGp1bXBTY29wZSk7IH0KKyAg
ICB2b2lkIHBvcENvbnRpbnVlSnVtcFNjb3BlKCkgeyBtX2NvbnRpbnVlSnVtcFNjb3Blcy5yZW1v
dmVMYXN0KCk7IH0KKyAgICBKdW1wU2NvcGUqIHRvcENvbnRpbnVlSnVtcFNjb3BlKCkgY29uc3Qg
eyByZXR1cm4gbV9jb250aW51ZUp1bXBTY29wZXMubGFzdCgpOyB9CisKKyAgICB2b2lkIHB1c2hC
cmVha0p1bXBMaXN0KEp1bXBMaXN0KiBqdW1wTGlzdCkgeyBtX2JyZWFrSnVtcExpc3RzLmFwcGVu
ZChqdW1wTGlzdCk7IH0KKyAgICB2b2lkIHBvcEJyZWFrSnVtcExpc3QoKSB7IG1fYnJlYWtKdW1w
TGlzdHMucmVtb3ZlTGFzdCgpOyB9CisgICAgSnVtcExpc3QqIHRvcEJyZWFrSnVtcExpc3QoKSBj
b25zdCB7IHJldHVybiBtX2JyZWFrSnVtcExpc3RzLmxhc3QoKTsgfQorCisgICAgTW9kdWxlKiBt
X21vZHVsZTsKKworICAgIHVpbnQzMl90IG1fc3RhY2tIZWlnaHQ7IC8vIEZJWE1FOiBUaGlzIGNh
dXNlZCBhICdzZWdtZW50YXRpb24gZmF1bHQnIGhlaXNlbmJ1ZyB3aGVuIEkgYWRkZWQgInNpemVf
dCBtX3N0YWNrSGVpZ2h0Ii4gU29tZXRoaW5nIG11c3QgYmUgd3JvbmcuCisKKyAgICBWZWN0b3I8
c3RkOjpwYWlyPENhbGwsIHZvaWQqPj4gbV9jYWxsczsKKworICAgIFJUeXBlIG1fY3VycmVudFJl
dHVyblR5cGU7CisgICAgVmVjdG9yPFR5cGU+IG1fY3VycmVudExvY2FsVHlwZXM7CisKKyAgICBW
ZWN0b3I8TWFjcm9Bc3NlbWJsZXI6OkxhYmVsKj4gbV9jb250aW51ZUxhYmVsTGFiZWxzOworICAg
IFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QqPiBtX2JyZWFrTGFiZWxKdW1wTGlzdHM7
CisKKyAgICBWZWN0b3I8SnVtcFNjb3BlKj4gbV9jb250aW51ZUp1bXBTY29wZXM7CisgICAgVmVj
dG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCo+IG1fYnJlYWtKdW1wTGlzdHM7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gV2FzbUpJVENvbXBpbGVyX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGQ2
ZjlhMjFmMWNjZmMzYTIzOWEwNzYyZGYwOGIxZTc1NzE2N2JhZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwCkBAIC0wLDAgKzEsMjY3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyBM
aWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vu
c2UiKTsKKyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdp
dGggdGhlIExpY2Vuc2UuCisgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0
CisKKyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworIFVubGVz
cyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29m
dHdhcmUKKyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBh
biAiQVMgSVMiIEJBU0lTLAorIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFO
WSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIFNlZSB0aGUgTGljZW5zZSBmb3Ig
dGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyBsaW1pdGF0
aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXYXNtTW9kdWxlLmgiCisKKyNpbmNsdWRlICJKSVRDb2RlLmgiCisjaW5jbHVkZSAiSlND
ZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAi
UHJvdG9DYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJXYXNtSklUQ29tcGlsZXIuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK25hbWVzcGFjZSBXYXNtIHsKKworY29uc3QgQ2xhc3NJbmZvIE1vZHVsZTo6
c19pbmZvID0geyAiTW9kdWxlIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShNb2R1bGUpIH07CisKK0pTVmFsdWUgTW9kdWxlOjpjb21waWxlKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgbV9yZWFkID0gUmVhZGVyKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlci5kYXRhKCkpKTsKKworICAgIGlmICht
X3JlYWQuZml4ZWRXaWR0aDx1aW50MzJfdD4oKSAhPSBNYWdpY051bWJlcikKKyAgICAgICAgYWJv
cnQoKTsKKyAgICBtX3JlYWQuZml4ZWRXaWR0aDx1aW50MzJfdD4oKTsgLy8gb3V0cHV0IHNpemUg
aW4gYXNtLmpzIGZvcm1hdAorCisgICAgcGFyc2VDb25zdGFudFBvb2xTZWN0aW9uKCk7CisgICAg
cGFyc2VTaWduYXR1cmVTZWN0aW9uKCk7CisgICAgcGFyc2VGdW5jdGlvbkltcG9ydFNlY3Rpb24o
KTsKKyAgICBwYXJzZUdsb2JhbFNlY3Rpb24oKTsKKyAgICBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRp
b25TZWN0aW9uKCk7CisgICAgcGFyc2VGdW5jdGlvblBvaW50ZXJUYWJsZXMoKTsKKyAgICBwYXJz
ZUZ1bmN0aW9uRGVmaW5pdGlvblNlY3Rpb24oZXhlYyk7CisgICAgcGFyc2VFeHBvcnRTZWN0aW9u
KCk7CisKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworCisgICAgSlNPYmplY3QqIG9iamVjdCA9
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2ppdENvZGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRD
b2RlID0gbV9qaXRDb2Rlc1tpXTsKKworICAgICAgICBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUgPSBXZWJBc3NlbWJseUV4ZWN1dGFibGU6OmNyZWF0ZSh2bSwgU291cmNlQ29kZSgp
KTsKKworICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisKKyAgICAgICAgUmVmUHRy
PFdlYkFzc2VtYmx5Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBhZG9wdFJlZihuZXcgV2ViQXNzZW1i
bHlDb2RlQmxvY2soZXhlY3V0YWJsZSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSk7Cisg
ICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZShqaXRDb2RlKTsKKyAgICAgICAgZXhlY3V0YWJs
ZS0+aW5zdGFsbENvZGUoY29kZUJsb2NrLmdldCgpKTsKKworICAgICAgICBKU0Z1bmN0aW9uKiBq
c0Z1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWN1dGFibGUsIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisKKyAgICAgICAgSWRlbnRpZmllciBpZGVudGlm
aWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIFN0cmluZzo6Zm9ybWF0KCJmJWx1Iiwg
aSkpOworICAgICAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwganNGdW5jdGlv
bik7CisgICAgfQorCisgICAgcmV0dXJuIG9iamVjdDsKK30KKwordm9pZCBNb2R1bGU6OnBhcnNl
Q29uc3RhbnRQb29sU2VjdGlvbigpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZJMzJzID0gbV9y
ZWFkLmltbVUzMigpOworICAgIHVpbnQzMl90IG51bWJlck9mRjMycyA9IG1fcmVhZC5pbW1VMzIo
KTsKKyAgICB1aW50MzJfdCBudW1iZXJPZkY2NHMgPSBtX3JlYWQuaW1tVTMyKCk7CisKKyAgICBW
ZWN0b3I8dWludDMyX3Q+IGNvbnN0YW50STMycyhudW1iZXJPZkkzMnMpOworICAgIGZvciAodWlu
dDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkkzMnM7ICsraSkKKyAgICAgICAgY29uc3RhbnRJMzJz
W2ldID0gbV9yZWFkLmltbVUzMigpOworCisgICAgVmVjdG9yPGZsb2F0PiBjb25zdGFudEYzMnMo
bnVtYmVyT2ZGMzJzKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGMzJz
OyArK2kpCisgICAgICAgIGNvbnN0YW50RjMyc1tpXSA9IG1fcmVhZC5maXhlZFdpZHRoPGZsb2F0
PigpOworCisgICAgVmVjdG9yPGRvdWJsZT4gY29uc3RhbnRGNjRzKG51bWJlck9mRjY0cyk7Cisg
ICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mRjY0czsgKytpKQorICAgICAgICBj
b25zdGFudEY2NHNbaV0gPSBtX3JlYWQuZml4ZWRXaWR0aDxkb3VibGU+KCk7CisKKyAgICBtX2Nv
bnN0YW50STMycyA9IFdURjo6bW92ZShjb25zdGFudEkzMnMpOworICAgIG1fY29uc3RhbnRGMzJz
ID0gV1RGOjptb3ZlKGNvbnN0YW50RjMycyk7CisgICAgbV9jb25zdGFudEY2NHMgPSBXVEY6Om1v
dmUoY29uc3RhbnRGNjRzKTsKK30KKwordm9pZCBNb2R1bGU6OnBhcnNlU2lnbmF0dXJlU2VjdGlv
bigpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZTaWduYXR1cmVzID0gbV9yZWFkLmltbVUzMigp
OworICAgIFZlY3RvcjxTaWduYXR1cmU+IHNpZ25hdHVyZXMobnVtYmVyT2ZTaWduYXR1cmVzKTsK
KyAgICBmb3IgKHVpbnQzMl90IHNpZ25hdHVyZUluZGV4ID0gMDsgc2lnbmF0dXJlSW5kZXggPCBu
dW1iZXJPZlNpZ25hdHVyZXM7ICsrc2lnbmF0dXJlSW5kZXgpIHsKKyAgICAgICAgUlR5cGUgcmV0
ID0gbV9yZWFkLnJ0eXBlKCk7CisgICAgICAgIHVpbnQzMl90IGFyZ3VtZW50Q291bnQgPSBtX3Jl
YWQuaW1tVTMyKCk7CisgICAgICAgIFNpZ25hdHVyZSBzaWduYXR1cmUocmV0LCBhcmd1bWVudENv
dW50KTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBhcmd1bWVudEluZGV4ID0gMDsgYXJndW1lbnRJ
bmRleCA8IGFyZ3VtZW50Q291bnQ7ICsrYXJndW1lbnRJbmRleCkKKyAgICAgICAgICAgIHNpZ25h
dHVyZS5hcmd1bWVudHNbYXJndW1lbnRJbmRleF0gPSBtX3JlYWQudHlwZSgpOworICAgICAgICBz
aWduYXR1cmVzW3NpZ25hdHVyZUluZGV4XSA9IFdURjo6bW92ZShzaWduYXR1cmUpOworICAgIH0K
KworICAgIG1fc2lnbmF0dXJlcyA9IFdURjo6bW92ZShzaWduYXR1cmVzKTsKK30KKwordm9pZCBN
b2R1bGU6OnBhcnNlRnVuY3Rpb25JbXBvcnRTZWN0aW9uKCkKK3sKKyAgICB1aW50MzJfdCBudW1i
ZXJPZkZ1bmNJbXBvcnRzID0gbV9yZWFkLmltbVUzMigpOworICAgIHVpbnQzMl90IG51bWJlck9m
RnVuY0ltcG9ydFNpZ25hdHVyZXMgPSBtX3JlYWQuaW1tVTMyKCk7CisKKyAgICBWZWN0b3I8RnVu
Y0ltcG9ydFNpZ25hdHVyZT4gZnVuY0ltcG9ydFNpZ25hdHVyZXMobnVtYmVyT2ZGdW5jSW1wb3J0
U2lnbmF0dXJlcyk7CisgICAgRnVuY0ltcG9ydFNpZ25hdHVyZSogZnVuY0ltcG9ydFNpZ25hdHVy
ZSA9IGZ1bmNJbXBvcnRTaWduYXR1cmVzLmRhdGEoKTsKKyAgICBmb3IgKHVpbnQzMl90IGZ1bmNJ
bXBvcnRJbmRleCA9IDA7IGZ1bmNJbXBvcnRJbmRleCA8IG51bWJlck9mRnVuY0ltcG9ydHM7ICsr
ZnVuY0ltcG9ydEluZGV4KSB7CisgICAgICAgIHdoaWxlIChtX3JlYWQuc2luZ2xlQ2hhcigpKSB7
IH0KKworICAgICAgICB1aW50MzJfdCBudW1iZXJPZlNpZ25hdHVyZXMgPSBtX3JlYWQuaW1tVTMy
KCk7CisgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZlNpZ25hdHVyZXM7
ICsraSkgeworICAgICAgICAgICAgZnVuY0ltcG9ydFNpZ25hdHVyZS0+c2lnbmF0dXJlSW5kZXgg
PSBtX3JlYWQuaW1tVTMyKCk7CisgICAgICAgICAgICBmdW5jSW1wb3J0U2lnbmF0dXJlLT5mdW5j
SW1wb3J0SW5kZXggPSBmdW5jSW1wb3J0SW5kZXg7CisgICAgICAgICAgICBmdW5jSW1wb3J0U2ln
bmF0dXJlKys7CisgICAgICAgIH0KKyAgICB9CisgICAgYXNzZXJ0KGZ1bmNJbXBvcnRTaWduYXR1
cmUgPT0gZnVuY0ltcG9ydFNpZ25hdHVyZXMuZGF0YSgpICsgbnVtYmVyT2ZGdW5jSW1wb3J0U2ln
bmF0dXJlcyk7CisKKyAgICBtX2Z1bmNJbXBvcnRTaWduYXR1cmVzID0gV1RGOjptb3ZlKGZ1bmNJ
bXBvcnRTaWduYXR1cmVzKTsKK30KKwordm9pZCBNb2R1bGU6OnBhcnNlR2xvYmFsU2VjdGlvbigp
Cit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZJMzJaZXJvID0gbV9yZWFkLmltbVUzMigpOworICAg
IHVpbnQzMl90IG51bWJlck9mRjMyWmVybyA9IG1fcmVhZC5pbW1VMzIoKTsKKyAgICB1aW50MzJf
dCBudW1iZXJPZkY2NFplcm8gPSBtX3JlYWQuaW1tVTMyKCk7CisgICAgdWludDMyX3QgbnVtYmVy
T2ZJMzJJbXBvcnQgPSBtX3JlYWQuaW1tVTMyKCk7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGMzJJ
bXBvcnQgPSBtX3JlYWQuaW1tVTMyKCk7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGNjRJbXBvcnQg
PSBtX3JlYWQuaW1tVTMyKCk7CisgICAgdWludDMyX3QgbnVtYmVyT2ZHbG9iYWxWYXJzID0gbnVt
YmVyT2ZJMzJaZXJvICsgbnVtYmVyT2ZGMzJaZXJvICsgbnVtYmVyT2ZGNjRaZXJvICsgbnVtYmVy
T2ZJMzJJbXBvcnQgKyBudW1iZXJPZkYzMkltcG9ydCArIG51bWJlck9mRjY0SW1wb3J0OworCisg
ICAgVmVjdG9yPFR5cGU+IGdsb2JhbFR5cGVzKG51bWJlck9mR2xvYmFsVmFycyk7CisgICAgc2l6
ZV90IGdsb2JhbFR5cGVJbmRleCA9IDA7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51
bWJlck9mSTMyWmVybzsgKytpKQorICAgICAgICBnbG9iYWxUeXBlc1tnbG9iYWxUeXBlSW5kZXgr
K10gPSBUeXBlOjpJMzI7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mRjMy
WmVybzsgKytpKQorICAgICAgICBnbG9iYWxUeXBlc1tnbG9iYWxUeXBlSW5kZXgrK10gPSBUeXBl
OjpGMzI7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mRjY0WmVybzsgKytp
KQorICAgICAgICBnbG9iYWxUeXBlc1tnbG9iYWxUeXBlSW5kZXgrK10gPSBUeXBlOjpGNjQ7Cisg
ICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mSTMySW1wb3J0OyArK2kpIHsKKyAg
ICAgICAgd2hpbGUgKG1fcmVhZC5zaW5nbGVDaGFyKCkpIHsgfQorICAgICAgICBnbG9iYWxUeXBl
c1tnbG9iYWxUeXBlSW5kZXgrK10gPSBUeXBlOjpJMzI7CisgICAgfQorICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBudW1iZXJPZkYzMkltcG9ydDsgKytpKSB7CisgICAgICAgIHdoaWxlICht
X3JlYWQuc2luZ2xlQ2hhcigpKSB7IH0KKyAgICAgICAgZ2xvYmFsVHlwZXNbZ2xvYmFsVHlwZUlu
ZGV4KytdID0gVHlwZTo6RjMyOworICAgIH0KKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwg
bnVtYmVyT2ZGNjRJbXBvcnQ7ICsraSkgeworICAgICAgICB3aGlsZSAobV9yZWFkLnNpbmdsZUNo
YXIoKSkgeyB9CisgICAgICAgIGdsb2JhbFR5cGVzW2dsb2JhbFR5cGVJbmRleCsrXSA9IFR5cGU6
OkY2NDsKKyAgICB9CisgICAgbV9nbG9iYWxUeXBlcyA9IFdURjo6bW92ZShnbG9iYWxUeXBlcyk7
Cit9CisKK3ZvaWQgTW9kdWxlOjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKCkKK3sK
KyAgICB1aW50MzJfdCBudW1iZXJPZkZ1bmN0aW9ucyA9IG1fcmVhZC5pbW1VMzIoKTsKKyAgICBW
ZWN0b3I8dWludDMyX3Q+IGZ1bmNTaWduYXR1cmVzKG51bWJlck9mRnVuY3Rpb25zKTsKKyAgICBm
b3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGdW5jdGlvbnM7ICsraSkKKyAgICAgICAg
ZnVuY1NpZ25hdHVyZXNbaV0gPSBtX3JlYWQuaW1tVTMyKCk7CisKKyAgICBtX2Z1bmNTaWduYXR1
cmVzID0gV1RGOjptb3ZlKGZ1bmNTaWduYXR1cmVzKTsKK30KKwordm9pZCBNb2R1bGU6OnBhcnNl
RnVuY3Rpb25Qb2ludGVyVGFibGVzKCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZkZ1bmNQdHJU
YWJsZXMgPSBtX3JlYWQuaW1tVTMyKCk7CisgICAgVmVjdG9yPEZ1bmNQdHJUYWJsZT4gZnVuY1B0
clRhYmxlcyhudW1iZXJPZkZ1bmNQdHJUYWJsZXMpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7
IGkgPCBudW1iZXJPZkZ1bmNQdHJUYWJsZXM7ICsraSkgeworICAgICAgICBmdW5jUHRyVGFibGVz
W2ldLnNpZ25hdHVyZUluZGV4ID0gbV9yZWFkLmltbVUzMigpOworICAgICAgICB1aW50MzJfdCBu
dW1FbGVtZW50cyA9IG1fcmVhZC5pbW1VMzIoKTsKKyAgICAgICAgVmVjdG9yPHVpbnQzMl90PiBl
bGVtZW50cyhudW1FbGVtZW50cyk7CisgICAgICAgIGZvciAodWludDMyX3QgaiA9IDA7IGogPCBu
dW1FbGVtZW50czsgKytqKQorICAgICAgICAgICAgZWxlbWVudHNbal0gPSBtX3JlYWQuaW1tVTMy
KCk7CisgICAgICAgIGZ1bmNQdHJUYWJsZXNbaV0uZWxlbWVudHMgPSBXVEY6Om1vdmUoZWxlbWVu
dHMpOworICAgIH0KKworICAgIG1fZnVuY1B0clRhYmxlcyA9IFdURjo6bW92ZShmdW5jUHRyVGFi
bGVzKTsKK30KKwordm9pZCBNb2R1bGU6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9uU2VjdGlvbihF
eGVjU3RhdGUqIGV4ZWMpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Z1bmNTaWdu
YXR1cmVzLnNpemUoKTsgKytpKQorICAgICAgICBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbihleGVj
LCBpKTsKK30KKwordm9pZCBNb2R1bGU6OnBhcnNlRXhwb3J0U2VjdGlvbigpCit7CisgICAgc3dp
dGNoIChtX3JlYWQuZXhwb3J0Rm9ybWF0KCkpIHsKKyAgICBjYXNlIEV4cG9ydEZvcm1hdDo6RGVm
YXVsdDoKKyAgICAgICAgbV9yZWFkLmltbVUzMigpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEV4cG9ydEZvcm1hdDo6UmVjb3JkOgorICAgICAgICBpZiAodWludDMyX3QgbnVtRXhwb3J0cyA9
IG1fcmVhZC5pbW1VMzIoKSkgeworICAgICAgICAgICAgZm9yICh1aW50MzJfdCBleHBvcnRJbmRl
eCA9IDA7IGV4cG9ydEluZGV4IDwgbnVtRXhwb3J0czsgKytleHBvcnRJbmRleCkgeworICAgICAg
ICAgICAgICAgIHdoaWxlIChtX3JlYWQuc2luZ2xlQ2hhcigpKSB7IH0KKyAgICAgICAgICAgICAg
ICBtX3JlYWQuaW1tVTMyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9Cit9CisKK3ZvaWQgTW9kdWxlOjpwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIHNpemVfdCBmdW5jdGlvbkluZGV4KQoreworICAgIEpJVENvbXBpbGVyIGppdENv
bXBpbGVyKCZleGVjLT52bSgpLCB0aGlzKTsKKyAgICBSZWZQdHI8SklUQ29kZT4gaml0Q29kZSA9
IGppdENvbXBpbGVyLmNvbXBpbGVGdW5jdGlvbihleGVjLT52bSgpLCBmdW5jdGlvbkluZGV4KTsK
KyAgICBtX2ppdENvZGVzLmFwcGVuZChqaXRDb2RlKTsKK30KKworSlNWYWx1ZSBNb2R1bGU6OmNh
bGxJbnRlcm5hbEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgc2l6ZV90IGZ1bmN0aW9uSW5kZXgp
Cit7CisgICAgLy8gRklYTUU6IGhhY2t5IQorICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
UHJvdG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7CisgICAgcHJvdG9DYWxsRnJhbWUuaW5pdCgw
LCBKU0NhbGxlZTo6Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSksIGpzVW5kZWZpbmVkKCksIDEpOworCisgICAgcmV0dXJu
IG1faml0Q29kZXNbZnVuY3Rpb25JbmRleF0tPmV4ZWN1dGUoJnZtLCAmcHJvdG9DYWxsRnJhbWUp
OworfQorCitKU1ZhbHVlIGNvbXBpbGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBWZWN0b3I8Y2hh
cj4mIGJ1ZmZlcikKK3sKKyAgICBNb2R1bGUqIG1vZHVsZSA9IE1vZHVsZTo6Y3JlYXRlKGV4ZWMt
PnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisKKyAgICAvLyBGSVhNRTogSWYg
dGhlIEdDIGhhcHBlbnMgdG8gcnVuIGF0IHRoaXMgdGltZSwgd2lsbCB3ZSBmYWlsPworCisgICAg
cmV0dXJuIG1vZHVsZS0+Y29tcGlsZShleGVjLCBidWZmZXIpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjJlOTc0NDNjNDQ0ZTlkZGUwNjdhM2Y2ZjNmODU0NDY4MjJkZDY4OGEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmgKQEAgLTAs
MCArMSwxMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvKgorIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRo
ZSAiTGljZW5zZSIpOworIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBs
aWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExp
Y2Vuc2UgYXQKKworIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAor
CisgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0
aW5nLCBzb2Z0d2FyZQorIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1
dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElP
TlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgU2VlIHRoZSBMaWNl
bnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAor
IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKworI2lmbmRlZiBXYXNtTW9kdWxl
X2gKKyNkZWZpbmUgV2FzbU1vZHVsZV9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1
ZGUgIldhc21PcGNvZGVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKSVRDb2RlOwor
Y2xhc3MgSklUQ29tcGlsZXI7CisKK25hbWVzcGFjZSBXYXNtIHsKKworY2xhc3MgTW9kdWxlIDog
cHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5h
bE9iamVjdCBCYXNlOworCisgICAgTW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0
aWMgTW9kdWxlKiBjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQor
ICAgIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjcmVhdGVTdHJ1Y3R1cmUodm0s
IGdsb2JhbE9iamVjdCk7IC8vIEZJWE1FOiBpcyB0aGlzIHJpZ2h0PworICAgICAgICBNb2R1bGUq
IG1vZHVsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE1vZHVsZT4odm0uaGVhcCkpIE1v
ZHVsZSh2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgbW9kdWxlLT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgICAgIHJldHVybiBtb2R1bGU7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworCisg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBqc051bGwoKSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIEpTVmFsdWUgY29tcGlsZShFeGVjU3Rh
dGUqLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcik7CisgICAgSlNWYWx1ZSBjYWxsSW50ZXJu
YWxGdW5jdGlvbihFeGVjU3RhdGUqLCBzaXplX3QgZnVuY3Rpb25JbmRleCk7CisKK3ByaXZhdGU6
CisgICAgZnJpZW5kIGNsYXNzIEpJVENvbXBpbGVyOworCisgICAgc3RydWN0IEZ1bmNJbXBvcnRT
aWduYXR1cmUgeworICAgICAgICB1aW50MzJfdCBzaWduYXR1cmVJbmRleDsKKyAgICAgICAgdWlu
dDMyX3QgZnVuY0ltcG9ydEluZGV4OworICAgIH07CisKKyAgICBzdHJ1Y3QgRnVuY1B0clRhYmxl
IHsKKyAgICAgICAgdWludDMyX3Qgc2lnbmF0dXJlSW5kZXg7CisgICAgICAgIFZlY3Rvcjx1aW50
MzJfdD4gZWxlbWVudHM7CisgICAgfTsKKworICAgIHZvaWQgcGFyc2VDb25zdGFudFBvb2xTZWN0
aW9uKCk7CisgICAgdm9pZCBwYXJzZVNpZ25hdHVyZVNlY3Rpb24oKTsKKyAgICB2b2lkIHBhcnNl
RnVuY3Rpb25JbXBvcnRTZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUdsb2JhbFNlY3Rpb24oKTsK
KyAgICB2b2lkIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvblNlY3Rpb24oKTsKKyAgICB2b2lkIHBh
cnNlRnVuY3Rpb25Qb2ludGVyVGFibGVzKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9uRGVmaW5p
dGlvblNlY3Rpb24oRXhlY1N0YXRlKik7CisgICAgdm9pZCBwYXJzZUV4cG9ydFNlY3Rpb24oKTsK
KworICAgIHZvaWQgcGFyc2VGdW5jdGlvbkRlZmluaXRpb24oRXhlY1N0YXRlKiwgc2l6ZV90IGZ1
bmN0aW9uSW5kZXgpOworCisgICAgUmVhZGVyIG1fcmVhZDsKKworICAgIFZlY3RvcjxTaWduYXR1
cmU+IG1fc2lnbmF0dXJlczsKKyAgICBWZWN0b3I8dWludDMyX3Q+IG1fY29uc3RhbnRJMzJzOwor
ICAgIFZlY3RvcjxmbG9hdD4gbV9jb25zdGFudEYzMnM7CisgICAgVmVjdG9yPGRvdWJsZT4gbV9j
b25zdGFudEY2NHM7CisgICAgVmVjdG9yPEZ1bmNJbXBvcnRTaWduYXR1cmU+IG1fZnVuY0ltcG9y
dFNpZ25hdHVyZXM7CisgICAgVmVjdG9yPFR5cGU+IG1fZ2xvYmFsVHlwZXM7CisgICAgVmVjdG9y
PHVpbnQzMl90PiBtX2Z1bmNTaWduYXR1cmVzOworICAgIFZlY3RvcjxGdW5jUHRyVGFibGU+IG1f
ZnVuY1B0clRhYmxlczsKKworICAgIFZlY3RvcjxSZWZQdHI8SklUQ29kZT4+IG1faml0Q29kZXM7
IC8vIFRPRE86IGtlZXAgSlNGdW5jdGlvbnMgaW5zdGVhZCBhbmQgbWFrZSBzdXJlIHRvIGtlZXAg
dGhlbSBhbGl2ZQorfTsKKworSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjb21waWxlKEV4ZWNT
dGF0ZSosIGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyKTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6Oldhc20KKworI2VuZGlmIC8vIFdhc21Nb2R1bGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wY29kZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PcGNvZGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjc3YzQzYTAzMTExZjU3ZDdlMDAzMTg1NzZm
YmNmYjg0ZWExMWVmYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PcGNvZGVzLmgKQEAgLTAsMCArMSw1OTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUg
TGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIHlvdSBtYXkgbm90IHVzZSB0
aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyBZb3UgbWF5
IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworIGh0dHA6Ly93d3cuYXBhY2hlLm9y
Zy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUg
bGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIGRpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgV0lUSE9V
VCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9y
IGltcGxpZWQuCisgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292
ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgor
Ki8KKworI2lmbmRlZiBXYXNtT3Bjb2Rlc19oCisjZGVmaW5lIFdhc21PcGNvZGVzX2gKKworI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXYXNt
IHsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IE1hZ2ljTnVtYmVyID0gMHg2ZDczNjE3NzsKKwor
ZW51bSBjbGFzcyBTdG10IDogdWludDhfdCB7CisgICAgU2V0TG9jLAorICAgIFNldEdsbywKKyAg
ICBJMzJTdG9yZTgsCisgICAgSTMyU3RvcmVPZmY4LAorICAgIEkzMlN0b3JlMTYsCisgICAgSTMy
U3RvcmVPZmYxNiwKKyAgICBJMzJTdG9yZTMyLAorICAgIEkzMlN0b3JlT2ZmMzIsCisgICAgRjMy
U3RvcmUsCisgICAgRjMyU3RvcmVPZmYsCisgICAgRjY0U3RvcmUsCisgICAgRjY0U3RvcmVPZmYs
CisgICAgQ2FsbEludCwKKyAgICBDYWxsSW5kLAorICAgIENhbGxJbXAsCisgICAgUmV0LAorICAg
IEJsb2NrLAorICAgIElmVGhlbiwKKyAgICBJZkVsc2UsCisgICAgV2hpbGUsCisgICAgRG8sCisg
ICAgTGFiZWwsCisgICAgQnJlYWssCisgICAgQnJlYWtMYWJlbCwKKyAgICBDb250aW51ZSwKKyAg
ICBDb250aW51ZUxhYmVsLAorICAgIFN3aXRjaCwKKworICAgIEJhZAorfTsKKworZW51bSBjbGFz
cyBTdG10V2l0aEltbSA6IHVpbnQ4X3QgeworICAgIFNldExvYywKKyAgICBTZXRHbG8sCisgICAg
UmVzZXZlZDEsCisgICAgUmVzZXZlZDIsCisKKyAgICBCYWQKK307CisKK2VudW0gY2xhc3MgU3dp
dGNoQ2FzZSA6IHVpbnQ4X3QgeworICAgIENhc2UwLAorICAgIENhc2UxLAorICAgIENhc2VOLAor
ICAgIERlZmF1bHQwLAorICAgIERlZmF1bHQxLAorICAgIERlZmF1bHROCit9OworCitlbnVtIGNs
YXNzIEkzMiA6IHVpbnQ4X3QgeworICAgIExpdFBvb2wsCisgICAgTGl0SW1tLAorICAgIEdldExv
YywKKyAgICBHZXRHbG8sCisgICAgU2V0TG9jLAorICAgIFNldEdsbywKKyAgICBTTG9hZDgsCisg
ICAgU0xvYWRPZmY4LAorICAgIFVMb2FkOCwKKyAgICBVTG9hZE9mZjgsCisgICAgU0xvYWQxNiwK
KyAgICBTTG9hZE9mZjE2LAorICAgIFVMb2FkMTYsCisgICAgVUxvYWRPZmYxNiwKKyAgICBMb2Fk
MzIsCisgICAgTG9hZE9mZjMyLAorICAgIFN0b3JlOCwKKyAgICBTdG9yZU9mZjgsCisgICAgU3Rv
cmUxNiwKKyAgICBTdG9yZU9mZjE2LAorICAgIFN0b3JlMzIsCisgICAgU3RvcmVPZmYzMiwKKyAg
ICBDYWxsSW50LAorICAgIENhbGxJbmQsCisgICAgQ2FsbEltcCwKKyAgICBDb25kLAorICAgIENv
bW1hLAorICAgIEZyb21GMzIsCisgICAgRnJvbUY2NCwKKyAgICBOZWcsCisgICAgQWRkLAorICAg
IFN1YiwKKyAgICBNdWwsCisgICAgU0RpdiwKKyAgICBVRGl2LAorICAgIFNNb2QsCisgICAgVU1v
ZCwKKyAgICBCaXROb3QsCisgICAgQml0T3IsCisgICAgQml0QW5kLAorICAgIEJpdFhvciwKKyAg
ICBMc2gsCisgICAgQXJpdGhSc2gsCisgICAgTG9naWNSc2gsCisgICAgQ2x6LAorICAgIExvZ2lj
Tm90LAorICAgIEVxSTMyLAorICAgIEVxRjMyLAorICAgIEVxRjY0LAorICAgIE5FcUkzMiwKKyAg
ICBORXFGMzIsCisgICAgTkVxRjY0LAorICAgIFNMZVRoSTMyLAorICAgIFVMZVRoSTMyLAorICAg
IExlVGhGMzIsCisgICAgTGVUaEY2NCwKKyAgICBTTGVFcUkzMiwKKyAgICBVTGVFcUkzMiwKKyAg
ICBMZUVxRjMyLAorICAgIExlRXFGNjQsCisgICAgU0dyVGhJMzIsCisgICAgVUdyVGhJMzIsCisg
ICAgR3JUaEYzMiwKKyAgICBHclRoRjY0LAorICAgIFNHckVxSTMyLAorICAgIFVHckVxSTMyLAor
ICAgIEdyRXFGMzIsCisgICAgR3JFcUY2NCwKKyAgICBTTWluLAorICAgIFVNaW4sCisgICAgU01h
eCwKKyAgICBVTWF4LAorICAgIEFicywKKworICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBJMzJX
aXRoSW1tIDogdWludDhfdCB7CisgICAgTGl0UG9vbCwKKyAgICBMaXRJbW0sCisgICAgR2V0TG9j
LAorICAgIFJlc2VydmVkLAorCisgICAgQmFkCit9OworCitlbnVtIGNsYXNzIEYzMiA6IHVpbnQ4
X3QgeworICAgIExpdFBvb2wsCisgICAgTGl0SW1tLAorICAgIEdldExvYywKKyAgICBHZXRHbG8s
CisgICAgU2V0TG9jLAorICAgIFNldEdsbywKKyAgICBMb2FkLAorICAgIExvYWRPZmYsCisgICAg
U3RvcmUsCisgICAgU3RvcmVPZmYsCisgICAgQ2FsbEludCwKKyAgICBDYWxsSW5kLAorICAgIENv
bmQsCisgICAgQ29tbWEsCisgICAgRnJvbVMzMiwKKyAgICBGcm9tVTMyLAorICAgIEZyb21GNjQs
CisgICAgTmVnLAorICAgIEFkZCwKKyAgICBTdWIsCisgICAgTXVsLAorICAgIERpdiwKKyAgICBB
YnMsCisgICAgQ2VpbCwKKyAgICBGbG9vciwKKyAgICBTcXJ0LAorCisgICAgQmFkCit9OworCitl
bnVtIGNsYXNzIEYzMldpdGhJbW0gOiB1aW50OF90IHsKKyAgICBMaXRQb29sLAorICAgIEdldExv
YywKKyAgICBSZXNlcnZlZDAsCisgICAgUmVzZXJ2ZWQxLAorCisgICAgQmFkCit9OworCitlbnVt
IGNsYXNzIEY2NCA6IHVpbnQ4X3QgeworICAgIExpdFBvb2wsCisgICAgTGl0SW1tLAorICAgIEdl
dExvYywKKyAgICBHZXRHbG8sCisgICAgU2V0TG9jLAorICAgIFNldEdsbywKKyAgICBMb2FkLAor
ICAgIExvYWRPZmYsCisgICAgU3RvcmUsCisgICAgU3RvcmVPZmYsCisgICAgQ2FsbEludCwKKyAg
ICBDYWxsSW5kLAorICAgIENhbGxJbXAsCisgICAgQ29uZCwKKyAgICBDb21tYSwKKyAgICBGcm9t
UzMyLAorICAgIEZyb21VMzIsCisgICAgRnJvbUYzMiwKKyAgICBOZWcsCisgICAgQWRkLAorICAg
IFN1YiwKKyAgICBNdWwsCisgICAgRGl2LAorICAgIE1vZCwKKyAgICBNaW4sCisgICAgTWF4LAor
ICAgIEFicywKKyAgICBDZWlsLAorICAgIEZsb29yLAorICAgIFNxcnQsCisgICAgQ29zLAorICAg
IFNpbiwKKyAgICBUYW4sCisgICAgQUNvcywKKyAgICBBU2luLAorICAgIEFUYW4sCisgICAgQVRh
bjIsCisgICAgRXhwLAorICAgIExuLAorICAgIFBvdywKKworICAgIEJhZAorfTsKKworZW51bSBj
bGFzcyBGNjRXaXRoSW1tIDogdWludDhfdCB7CisgICAgTGl0UG9vbCwKKyAgICBHZXRMb2MsCisg
ICAgUmVzZXJ2ZWQwLAorICAgIFJlc2VydmVkMSwKKworICAgIEJhZAorfTsKKworZW51bSBjbGFz
cyBWb2lkIDogdWludDhfdCB7CisgICAgQ2FsbEludCwKKyAgICBDYWxsSW5kLAorICAgIENhbGxJ
bXAsCisKKyAgICBCYWQKK307CisKK2VudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeworICAgIEkz
MiwKKyAgICBGMzIsCisgICAgRjY0Cit9OworCitlbnVtIGNsYXNzIFZhclR5cGVzIDogdWludDhf
dCB7CisgICAgSTMyID0gMHgxLAorICAgIEYzMiA9IDB4MiwKKyAgICBGNjQgPSAweDQsCit9Owor
CitpbmxpbmUgVmFyVHlwZXMgb3BlcmF0b3J8IChWYXJUeXBlcyBsaHMsIFZhclR5cGVzIHJocykg
eyByZXR1cm4gVmFyVHlwZXModWludDhfdChsaHMpIHwgdWludDhfdChyaHMpKTsgfQoraW5saW5l
IGJvb2wgb3BlcmF0b3ImKFZhclR5cGVzIGxocywgVmFyVHlwZXMgcmhzKSB7IHJldHVybiBib29s
KHVpbnQ4X3QobGhzKSAmIHVpbnQ4X3QocmhzKSk7IH0KKworZW51bSBjbGFzcyBWYXJUeXBlc1dp
dGhJbW0gOiB1aW50OF90IHsKKyAgICBPbmx5STMyLAorICAgIFJlc2VydmVkMCwKKyAgICBSZXNl
cnZlZDEsCisgICAgUmVzZXJ2ZWQyCit9OworCitlbnVtIGNsYXNzIFJUeXBlIDogdWludDhfdCB7
CisgICAgSTMyID0gdWludDhfdChUeXBlOjpJMzIpLAorICAgIEYzMiA9IHVpbnQ4X3QoVHlwZTo6
RjMyKSwKKyAgICBGNjQgPSB1aW50OF90KFR5cGU6OkY2NCksCisgICAgVm9pZAorfTsKKworY2xh
c3MgRXhwciB7CitwdWJsaWM6CisgICAgRXhwcigpCisgICAgOiBtX3R5cGUoUlR5cGUoLTEpKSwg
dSB7IH0KKyAgICB7CisgICAgfQorICAgIEV4cHIoSTMyIGkzMikgOiBtX3R5cGUoUlR5cGU6Okkz
MikgeyB1LmkzMiA9IGkzMjsgfQorICAgIEV4cHIoRjMyIGYzMikgOiBtX3R5cGUoUlR5cGU6OkYz
MikgeyB1LmYzMiA9IGYzMjsgfQorICAgIEV4cHIoRjY0IGY2NCkgOiBtX3R5cGUoUlR5cGU6OkY2
NCkgeyB1LmY2NCA9IGY2NDsgfQorICAgIEV4cHIoVm9pZCB2KSA6IG1fdHlwZShSVHlwZTo6Vm9p
ZCkgeyB1LnYgPSB2OyB9CisKKyAgICBSVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
OyB9CisgICAgSTMyIGkzMigpIGNvbnN0IHsgcmV0dXJuIHUuaTMyOyB9CisgICAgRjMyIGYzMigp
IGNvbnN0IHsgcmV0dXJuIHUuZjMyOyB9CisgICAgRjY0IGY2NCgpIGNvbnN0IHsgcmV0dXJuIHUu
ZjY0OyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oRXhwciByaHMpIGNvbnN0IHsgcmV0dXJuIG1f
dHlwZSA9PSByaHMubV90eXBlICYmIHUucmF3ID09IHJocy51LnJhdzsgfQorICAgIGJvb2wgb3Bl
cmF0b3IhPShFeHByIHJocykgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSByaHMpOyB9CisKK3By
aXZhdGU6CisgICAgUlR5cGUgbV90eXBlOworICAgIHVuaW9uIFUgeworICAgICAgICBJMzIgaTMy
OworICAgICAgICBGMzIgZjMyOworICAgICAgICBGNjQgZjY0OworICAgICAgICBWb2lkIHY7Cisg
ICAgICAgIHVpbnQ4X3QgcmF3OworICAgIH0gdTsKKworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9m
KFUpID09IHNpemVvZih1aW50OF90KSwgIkV4YWN0IG92ZXJsYXkgb2YgcmF3XyIpOworfTsKKwor
c3RhdGljIGNvbnN0IHVpbnQ4X3QgSGFzSW1tRmxhZyA9IDB4ODA7CitzdGF0aWNfYXNzZXJ0KHVp
bnQ4X3QoSTMyOjpCYWQpIDw9IEhhc0ltbUZsYWcsICJNU0IgcmVzZXJ2ZWQgdG8gZGlzdGluZ3Vp
c2ggSTMyIGZyb20gSTMyV2l0aEltbSIpOworc3RhdGljX2Fzc2VydCh1aW50OF90KEYzMjo6QmFk
KSA8PSBIYXNJbW1GbGFnLCAiTVNCIHJlc2VydmVkIHRvIGRpc3Rpbmd1aXNoIEYzMiBmcm9tIEYz
MldpdGhJbW0iKTsKK3N0YXRpY19hc3NlcnQodWludDhfdChGNjQ6OkJhZCkgPD0gSGFzSW1tRmxh
ZywgIk1TQiByZXNlcnZlZCB0byBkaXN0aW5ndWlzaCBGNjQgZnJvbSBGNjRXaXRoSW1tIik7CisK
K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBPcFdpdGhJbW1CaXRzID0gMjsKK3N0YXRpYyBjb25zdCB1
aW50MzJfdCBPcFdpdGhJbW1MaW1pdCA9IDEgPDwgT3BXaXRoSW1tQml0czsKK3N0YXRpY19hc3Nl
cnQodWludDhfdChJMzJXaXRoSW1tOjpCYWQpIDw9IE9wV2l0aEltbUxpbWl0LCAiSTMyV2l0aElt
bSBvcCBmaXRzIik7CitzdGF0aWNfYXNzZXJ0KHVpbnQ4X3QoRjMyV2l0aEltbTo6QmFkKSA8PSBP
cFdpdGhJbW1MaW1pdCwgIkYzMldpdGhJbW0gb3AgZml0cyIpOworc3RhdGljX2Fzc2VydCh1aW50
OF90KEY2NFdpdGhJbW06OkJhZCkgPD0gT3BXaXRoSW1tTGltaXQsICJGNjRXaXRoSW1tIG9wIGZp
dHMiKTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIEltbUJpdHMgPSA1Oworc3RhdGljIGNvbnN0
IHVpbnQzMl90IEltbUxpbWl0ID0gMSA8PCBJbW1CaXRzOworc3RhdGljX2Fzc2VydCgoMSArIE9w
V2l0aEltbUJpdHMgKyBJbW1CaXRzKSA9PSA4LCAiQml0cyBvZiBpbW1lZGlhdGUgb3Agc2hvdWxk
IGFkZCB1cCB0byBhIGJ5dGUiKTsKKworc3RhdGljIGlubGluZSB1aW50OF90IFBhY2tPcFdpdGhJ
bW0odWludDhfdCBvcCwgdWludDhfdCBpbW0pCit7CisgICAgYXNzZXJ0KG9wIDwgT3BXaXRoSW1t
TGltaXQpOworICAgIGFzc2VydChpbW0gPCBJbW1MaW1pdCk7CisgICAgcmV0dXJuIEhhc0ltbUZs
YWcgfCAodWludDhfdChvcCkgPDwgSW1tQml0cykgfCBpbW07Cit9CisKK3RlbXBsYXRlIDxjbGFz
cyBUV2l0aEltbT4KK3N0YXRpYyBpbmxpbmUgdm9pZCBVbnBhY2tPcFdpdGhJbW0odWludDhfdCBi
eXRlLCBUV2l0aEltbSogb3AsIHVpbnQ4X3QgKmltbSkKK3sKKyAgICBhc3NlcnQoYnl0ZSAmIEhh
c0ltbUZsYWcpOworICAgICpvcCA9IFRXaXRoSW1tKChieXRlID4+IEltbUJpdHMpICYgKE9wV2l0
aEltbUxpbWl0IC0gMSkpOworICAgICppbW0gPSBieXRlICYgKEltbUxpbWl0IC0gMSk7Cit9CisK
K2NsYXNzIEV4cHJXaXRoSW1tIHsKK3B1YmxpYzoKKyAgICBFeHByV2l0aEltbSgpCisgICAgICAg
IDogbV90eXBlKFR5cGUoLTEpKQorICAgIHsKKyAgICB9CisgICAgRXhwcldpdGhJbW0oSTMyV2l0
aEltbSBpMzIpIDogbV90eXBlKFR5cGU6OkkzMikgeyB1LmkzMiA9IGkzMjsgfQorICAgIEV4cHJX
aXRoSW1tKEYzMldpdGhJbW0gZjMyKSA6IG1fdHlwZShUeXBlOjpGMzIpIHsgdS5mMzIgPSBmMzI7
IH0KKyAgICBFeHByV2l0aEltbShGNjRXaXRoSW1tIGY2NCkgOiBtX3R5cGUoVHlwZTo6RjY0KSB7
IHUuZjY0ID0gZjY0OyB9CisKKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KKyAgICBJMzJXaXRoSW1tIGkzMigpIGNvbnN0IHsgcmV0dXJuIHUuaTMyOyB9CisgICAgRjMy
V2l0aEltbSBmMzIoKSBjb25zdCB7IHJldHVybiB1LmYzMjsgfQorICAgIEY2NFdpdGhJbW0gZjY0
KCkgY29uc3QgeyByZXR1cm4gdS5mNjQ7IH0KKworcHJpdmF0ZToKKyAgICBUeXBlIG1fdHlwZTsK
KyAgICB1bmlvbiBVIHsKKyAgICAgICAgSTMyV2l0aEltbSBpMzI7CisgICAgICAgIEYzMldpdGhJ
bW0gZjMyOworICAgICAgICBGNjRXaXRoSW1tIGY2NDsKKyAgICAgICAgdWludDhfdCByYXc7Cisg
ICAgfSB1OworCisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVSkgPT0gc2l6ZW9mKHVpbnQ4X3Qp
LCAiRXhhY3Qgb3ZlcmxheSBvZiByYXdfIik7Cit9OworCitlbnVtIGNsYXNzIEV4cG9ydEZvcm1h
dCA6IHVpbnQ4X3QgeworICAgIERlZmF1bHQsCisgICAgUmVjb3JkCit9OworCitzdHJ1Y3QgU2ln
bmF0dXJlIHsKKyAgICBSVHlwZSByZXQ7CisgICAgVmVjdG9yPFR5cGU+IGFyZ3VtZW50czsKKwor
ICAgIFNpZ25hdHVyZSgpIHsgfQorICAgIFNpZ25hdHVyZShSVHlwZSByZXQpCisgICAgICAgIDog
cmV0KHJldCkgeyB9CisgICAgU2lnbmF0dXJlKFJUeXBlIHJldCwgdWludDMyX3QgYXJndW1lbnRD
b3VudCkKKyAgICAgICAgOiByZXQocmV0KQorICAgICAgICAsIGFyZ3VtZW50cyhhcmd1bWVudENv
dW50KSB7IH0KKyAgICBTaWduYXR1cmUoUlR5cGUgcmV0LCBWZWN0b3I8VHlwZT4mJiBhcmd1bWVu
dHMpCisgICAgICAgIDogcmV0KHJldCkKKyAgICAgICAgLCBhcmd1bWVudHMoV1RGOjptb3ZlKGFy
Z3VtZW50cykpIHsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNpZ25hdHVyZSYgcmhz
KSBjb25zdCB7IHJldHVybiByZXQgPT0gcmhzLnJldCAmJiBhcmd1bWVudHMgPT0gcmhzLmFyZ3Vt
ZW50czsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTaWduYXR1cmUmIHJocykgY29uc3Qg
eyByZXR1cm4gISgqdGhpcyA9PSByaHMpOyB9CisKKyAgICBzdHJ1Y3QgSGFzaCB7CisgICAgICAg
IGJvb2wgb3BlcmF0b3IoKShjb25zdCBTaWduYXR1cmUgJnNpZ25hdHVyZSkgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVHlwZSkgPT0gMSAmJiBzaXpl
b2YoUlR5cGUpID09IDEsICJTaGlmdCBtb3JlIik7CisgICAgICAgICAgICB1aW50MzJfdCBoID0g
dWludDhfdChzaWduYXR1cmUucmV0KTsKKyAgICAgICAgICAgIGZvciAoVHlwZSB0IDogc2lnbmF0
dXJlLmFyZ3VtZW50cykKKyAgICAgICAgICAgICAgICBoID0gKChoIDw8IDIpIHwgdWludDhfdCh0
KSkgXiAoaCA+PiAzMCk7CisgICAgICAgICAgICByZXR1cm4gaDsKKyAgICAgICAgfQorICAgIH07
Cit9OworCitjbGFzcyBSZWFkZXIgeworcHVibGljOgorICAgIFJlYWRlcigpIHsgfQorICAgIFJl
YWRlcihjb25zdCB1aW50OF90KiBiZWdpbikKKyAgICAgICAgOiBtX2N1cnNvcihiZWdpbikKKyAg
ICB7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IFQgZml4ZWRXaWR0aCgpOworICAg
IFN0bXQgc3RtdCgpIHsgcmV0dXJuIHU4PFN0bXQ+KCk7IH0KKyAgICBTd2l0Y2hDYXNlIHN3aXRj
aENhc2UoKSB7IHJldHVybiB1ODxTd2l0Y2hDYXNlPigpOyB9CisgICAgdGVtcGxhdGU8Y2xhc3Mg
VCwgY2xhc3MgVFdpdGhJbW0+IGlubGluZSBib29sIGNvZGUoVCosIFRXaXRoSW1tKiwgdWludDhf
dCopOworICAgIFZvaWQgdm9pZEV4cHIoKSB7IHJldHVybiB1ODxWb2lkPigpOyB9CisgICAgRXhw
b3J0Rm9ybWF0IGV4cG9ydEZvcm1hdCgpIHsgcmV0dXJuIHU4PEV4cG9ydEZvcm1hdD4oKTsgfQor
ICAgIFR5cGUgdHlwZSgpIHsgcmV0dXJuIHU4PFR5cGU+KCk7IH0KKyAgICBSVHlwZSBydHlwZSgp
IHsgcmV0dXJuIHU4PFJUeXBlPigpOyB9CisgICAgaW5saW5lIHVpbnQzMl90IGltbVUzMigpOwor
ICAgIGlubGluZSBpbnQzMl90IGltbVMzMigpOworICAgIGNoYXIgc2luZ2xlQ2hhcigpIHsgcmV0
dXJuICptX2N1cnNvcisrOyB9CisKKyAgICBpbmxpbmUgYm9vbCBpZkkzMkxpdChjb25zdCBWZWN0
b3I8dWludDMyX3Q+JiBpMzJzLCB1aW50MzJfdCopOworCitwcml2YXRlOgorICAgIHRlbXBsYXRl
IDxjbGFzcyBUPiBUIHU4KCkgeyByZXR1cm4gVCgqbV9jdXJzb3IrKyk7IH0KKworICAgIGNvbnN0
IHVpbnQ4X3QqIG1fY3Vyc29yOworfTsKKwordGVtcGxhdGUgPD4KK2lubGluZSB1aW50MzJfdCBS
ZWFkZXI6OmZpeGVkV2lkdGg8dWludDMyX3Q+KCkKK3sKKyAgICB1aW50MzJfdCB1MzIgPSBtX2N1
cnNvclswXSB8IG1fY3Vyc29yWzFdIDw8IDggfCBtX2N1cnNvclsyXSA8PCAxNiB8IG1fY3Vyc29y
WzNdIDw8IDI0OworICAgIG1fY3Vyc29yICs9IDQ7CisgICAgcmV0dXJuIHUzMjsKK30KKwordGVt
cGxhdGUgPD4KK2lubGluZSBmbG9hdCBSZWFkZXI6OmZpeGVkV2lkdGg8ZmxvYXQ+KCkKK3sKKyAg
ICB1bmlvbiB7CisgICAgICAgIHVpbnQ4X3QgYXJyWzRdOworICAgICAgICBmbG9hdCBmOworICAg
IH0gdSA9IHsgeyBtX2N1cnNvclswXSwgbV9jdXJzb3JbMV0sIG1fY3Vyc29yWzJdLCBtX2N1cnNv
clszXSB9IH07CisgICAgbV9jdXJzb3IgKz0gNDsKKyAgICByZXR1cm4gdS5mOworfQorCit0ZW1w
bGF0ZSA8PgoraW5saW5lIGRvdWJsZSBSZWFkZXI6OmZpeGVkV2lkdGg8ZG91YmxlPigpCit7Cisg
ICAgdW5pb24geworICAgICAgICB1aW50OF90IGFycls4XTsKKyAgICAgICAgZG91YmxlIGQ7Cisg
ICAgfSB1ID0geyB7IG1fY3Vyc29yWzBdLCBtX2N1cnNvclsxXSwgbV9jdXJzb3JbMl0sIG1fY3Vy
c29yWzNdLCBtX2N1cnNvcls0XSwgbV9jdXJzb3JbNV0sIG1fY3Vyc29yWzZdLCBtX2N1cnNvcls3
XSB9IH07CisgICAgbV9jdXJzb3IgKz0gODsKKyAgICByZXR1cm4gdS5kOworfQorCit0ZW1wbGF0
ZSA8Y2xhc3MgVCwgY2xhc3MgVFdpdGhJbW0+Citib29sIFJlYWRlcjo6Y29kZShUKiB0LCBUV2l0
aEltbSogdFdpdGhJbW0sIHVpbnQ4X3QqIGltbSkKK3sKKyAgICB1aW50OF90IGJ5dGUgPSAqbV9j
dXJzb3IrKzsKKyAgICBpZiAoIShieXRlICYgSGFzSW1tRmxhZykpIHsKKyAgICAgICAgKnQgPSBU
KGJ5dGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBVbnBhY2tPcFdpdGhJ
bW0oYnl0ZSwgdFdpdGhJbW0sIGltbSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxpbmUg
dWludDMyX3QgUmVhZGVyOjppbW1VMzIoKQoreworICAgIHVpbnQzMl90IHUzMiA9ICptX2N1cnNv
cisrOworICAgIGlmICh1MzIgPCAweDgwKQorICAgICAgICByZXR1cm4gdTMyOworCisgICAgdTMy
ICY9IDB4N2Y7CisKKyAgICBmb3IgKHVuc2lnbmVkIHNoaWZ0ID0gNzsgdHJ1ZTsgc2hpZnQgKz0g
NykgeworICAgICAgICB1aW50MzJfdCBiID0gKm1fY3Vyc29yKys7CisgICAgICAgIGlmIChiIDwg
MHg4MCkKKyAgICAgICAgICAgIHJldHVybiB1MzIgfCAoYiA8PCBzaGlmdCk7CisgICAgICAgIHUz
MiB8PSAoYiAmIDB4N2YpIDw8IHNoaWZ0OworICAgIH0KK30KKworaW5saW5lIGludDMyX3QgUmVh
ZGVyOjppbW1TMzIoKQoreworICAgIHVpbnQzMl90IHUzMiA9ICptX2N1cnNvcisrOworICAgIGlm
ICh1MzIgPCAweDgwKQorICAgICAgICByZXR1cm4gaW50MzJfdCh1MzIpIDw8ICgzMi03KSA+PiAo
MzItNyk7CisKKyAgICB1MzIgJj0gMHg3ZjsKKworICAgIGZvciAodW5zaWduZWQgc2hpZnQgPSA3
OyB0cnVlOyBzaGlmdCArPSA3KSB7CisgICAgICAgIHVpbnQzMl90IGIgPSAqbV9jdXJzb3IrKzsK
KyAgICAgICAgaWYgKGIgPCAweDgwKSB7CisgICAgICAgICAgICB1MzIgfD0gYiA8PCBzaGlmdDsK
KyAgICAgICAgICAgIGludCBzaWduRXh0ZW5kID0gKDMyLTcpIC0gc2hpZnQ7CisgICAgICAgICAg
ICBpZiAoc2lnbkV4dGVuZCA+IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGludDMyX3QodTMy
KSA8PCBzaWduRXh0ZW5kID4+IHNpZ25FeHRlbmQ7CisgICAgICAgICAgICByZXR1cm4gaW50MzJf
dCh1MzIpOworICAgICAgICB9CisgICAgICAgIHUzMiB8PSAoYiAmIDB4N2YpIDw8IHNoaWZ0Owor
ICAgIH0KK30KKworaW5saW5lIGJvb2wgUmVhZGVyOjppZkkzMkxpdChjb25zdCBWZWN0b3I8dWlu
dDMyX3Q+JiBpMzJzLCB1aW50MzJfdCogdTMyKQoreworICAgIHVpbnQ4X3QgYnl0ZSA9ICptX2N1
cnNvcjsKKworICAgIGlmIChieXRlICYgSGFzSW1tRmxhZykgeworICAgICAgICBJMzJXaXRoSW1t
IGkzMldpdGhJbW07CisgICAgICAgIHVpbnQ4X3QgaW1tOworICAgICAgICBVbnBhY2tPcFdpdGhJ
bW0oYnl0ZSwgJmkzMldpdGhJbW0sICZpbW0pOworCisgICAgICAgIGlmIChpMzJXaXRoSW1tID09
IEkzMldpdGhJbW06OkxpdEltbSkgeworICAgICAgICAgICAgbV9jdXJzb3IrKzsKKyAgICAgICAg
ICAgICp1MzIgPSBpbW07CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChpMzJXaXRoSW1tID09IEkzMldpdGhJbW06OkxpdFBvb2wpIHsKKyAgICAgICAg
ICAgIG1fY3Vyc29yKys7CisgICAgICAgICAgICAqdTMyID0gaTMyc1tpbW1dOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKEkzMihieXRlKSA9PSBJMzI6OkxpdEltbSkgeworICAgICAgICBtX2N1cnNv
cisrOworICAgICAgICAqdTMyID0gaW1tVTMyKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIGlmIChJMzIoYnl0ZSkgPT0gSTMyOjpMaXRQb29sKSB7CisgICAgICAgIG1fY3Vy
c29yKys7CisgICAgICAgICp1MzIgPSBpMzJzW2ltbVUzMigpXTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6V2FzbQorCisjZW5kaWYgLy8gV2FzbU9wY29kZXNfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256641</attachid>
            <date>2015-07-10 20:17:22 -0700</date>
            <delta_ts>2015-07-11 11:23:40 -0700</delta_ts>
            <desc>Work in progress. Add support for calling JavaScript functions from WebAssembly functions and vice versa. Add initial support for importing and exporting functions.</desc>
            <filename>bug-146064-20150710201623.patch</filename>
            <type>text/plain</type>
            <size>110706</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg2NTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
OWZhNzg4ZjIxZjdmOTg5ZDI1NDdkMTQwYTMyNDRlY2RmNjcwZGI0Li4xOTExZDkzMDhjNDBkZmZl
ZTQ5NjkxZmQ4N2Q0NWYwMmNlOTFhNGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNjEgQEAKKzIwMTUtMDctMTAgIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0Bn
bWFpbC5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBuYXRpdmVseSBzdXBwb3J0IFdlYkFzc2Vt
Ymx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYw
NjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUNvZGVCbG9jazo6cmVwbGFjZW1lbnQpOgorICAgICAg
ICAoSlNDOjpXZWJBc3NlbWJseUNvZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsSW50ZXJuYWwpOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJs
eUNvZGVCbG9jazo6V2ViQXNzZW1ibHlDb2RlQmxvY2spOgorICAgICAgICAqIGppdC9KSVRPcGVy
YXRpb25zLmNwcDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0Ojpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChmdW5jdGlvbkxvYWRXZWJBc3NlbWJseSk6CisgICAg
ICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0
VXBDYWxsKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlND
OjpTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZSk6CisgICAgICAgIChKU0M6OlNjcmlwdEV4
ZWN1dGFibGU6Om5ld0NvZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFi
bGU6OnByZXBhcmVGb3JFeGVjdXRpb25JbXBsKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlF
eGVjdXRhYmxlOjpXZWJBc3NlbWJseUV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpXZWJBc3Nl
bWJseUV4ZWN1dGFibGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1i
bHlFeGVjdXRhYmxlOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlFeGVjdXRh
YmxlOjpiYXNlbGluZUNvZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhl
Y3V0YWJsZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhlY3V0
YWJsZTo6c3ltYm9sVGFibGUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4ZWN1dGFibGU6
OmNsZWFyQ29kZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6dW5saW5r
Q2FsbHMpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpF
eGVjdXRhYmxlQmFzZTo6aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmNyZWF0ZSk6Cisg
ICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246
OmNyZWF0ZUltcGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaDoKKyAg
ICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6SlNGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTRnVu
Y3Rpb246OmlzSG9zdEZ1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTVHlwZS5oOgorICAg
ICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKiB3YXNtL1dhc21KSVRDb21waWxlci5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpXYXNtOjpKdW1wU2NvcGU6Okp1bXBTY29wZSk6CisgICAgICAgIChK
U0M6Oldhc206Okp1bXBTY29wZTo6anVtcCk6CisgICAgICAgIChKU0M6Oldhc206Okp1bXBTY29w
ZTo6bGluayk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rp
b24pOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6YWxsb2NhdGVTcGFjZU9uU3Rh
Y2spOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6ZGVhbGxvY2F0ZVNwYWNlT25T
dGFjayk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZUFyZ3VtZW50cyk6
CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZVZhcnMpOgorICAgICAgICAo
SlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VTdG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
SklUQ29tcGlsZXI6OnBhcnNlR2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21w
aWxlcjo6cGFyc2VTZXRMb2NhbCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpw
YXJzZVJldHVyblN0bXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VT
dG10TGlzdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZUJsb2NrU3Rt
dCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZUlmU3RtdCk6CisgICAg
ICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZUlmRWxzZVN0bXQpOgorICAgICAgICAo
SlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VXaGlsZVN0bXQpOgorICAgICAgICAoSlNDOjpX
YXNtOjpKSVRDb21waWxlcjo6cGFyc2VEb1N0bXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRD
b21waWxlcjo6cGFyc2VMYWJlbFN0bXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxl
cjo6cGFyc2VCcmVha1N0bXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFy
c2VCcmVha0xhYmVsU3RtdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJz
ZUNvbnRpbnVlU3RtdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZUNv
bnRpbnVlTGFiZWxTdG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNl
U3dpdGNoU3RtdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZUV4cHIp
OgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VFeHBySTMyKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlRXhwckY2NCk6CisgICAgICAgIChKU0M6
Oldhc206OmdldEludGVybmFsRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21w
aWxlcjo6cGFyc2VDYWxsSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpnZXRJbXBvcnRl
ZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlQ2FsbElt
cG9ydCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpjYWxsRnVuY3Rpb25TbG93
Q2FzZSk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZUNhbGxBcmd1bWVu
dHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VCaW5hcnlPcCk6Cisg
ICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZVVuYXJ5T3ApOgorICAgICAgICAo
SlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VSZWxhdGlvbmFsT3BJMzIpOgorICAgICAgICAo
SlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VSZWxhdGlvbmFsT3BGNjQpOgorICAgICAgICAo
SlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VDb21tYSk6CisgICAgICAgIChKU0M6Oldhc206
OkpJVENvbXBpbGVyOjpwYXJzZUNvbmQpOgorICAgICAgICAqIHdhc20vV2FzbUpJVENvbXBpbGVy
Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6SklUQ29tcGlsZXIp
OgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6c3RhY2tBZGRyZXNzKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnRlbXBvcmFyeUFkZHJlc3MpOgorICAgICAgICAo
SlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cHVzaENvbnRpbnVlTGFiZWxMYWJlbCk6CisgICAgICAg
IChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwb3BDb250aW51ZUxhYmVsTGFiZWwpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6Y29udGludWVMYWJlbExhYmVsKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnB1c2hCcmVha0xhYmVsSnVtcExpc3QpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cG9wQnJlYWtMYWJlbEp1bXBMaXN0KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OmJyZWFrTGFiZWxKdW1wTGlzdCk6CisgICAgICAg
IChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwdXNoQ29udGludWVKdW1wU2NvcGUpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cG9wQ29udGludWVKdW1wU2NvcGUpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6dG9wQ29udGludWVKdW1wU2NvcGUpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cHVzaEJyZWFrSnVtcExpc3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cG9wQnJlYWtKdW1wTGlzdCk6CisgICAgICAgIChKU0M6
Oldhc206OkpJVENvbXBpbGVyOjp0b3BCcmVha0p1bXBMaXN0KToKKyAgICAgICAgKiB3YXNtL1dh
c21Nb2R1bGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpjb21waWxl
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpwYXJzZUNvbnN0YW50UG9vbFNlY3Rpb24p
OgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OnBhcnNlU2lnbmF0dXJlU2VjdGlvbik6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6cGFyc2VGdW5jdGlvbkltcG9ydFNlY3Rpb24pOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OnBhcnNlR2xvYmFsU2VjdGlvbik6CisgICAgICAg
IChKU0M6Oldhc206Ok1vZHVsZTo6cGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uU2VjdGlvbik6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6cGFyc2VGdW5jdGlvblBvaW50ZXJUYWJsZXMpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9uU2VjdGlv
bik6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6cGFyc2VFeHBvcnRTZWN0aW9uKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbik6CisgICAg
ICAgIChKU0M6Oldhc206Ok1vZHVsZTo6aW50ZXJuYWxGdW5jdGlvbik6CisgICAgICAgIChKU0M6
Oldhc206Ok1vZHVsZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6Oldhc206OmNvbXBp
bGUpOgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
V2FzbTo6TW9kdWxlOjpNb2R1bGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OmNyZWF0
ZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpmdW5jdGlvbkltcG9ydE5hbWUpOgorICAgICAgICAqIHdh
c20vV2FzbU9wY29kZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206Om9wZXJhdG9yfCAp
OgorICAgICAgICAoSlNDOjpXYXNtOjpvcGVyYXRvciYpOgorICAgICAgICAoSlNDOjpXYXNtOjpF
eHByOjpFeHByKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcjo6dHlwZSk6CisgICAgICAgIChK
U0M6Oldhc206OkV4cHI6OmkzMik6CisgICAgICAgIChKU0M6Oldhc206OkV4cHI6OmYzMik6Cisg
ICAgICAgIChKU0M6Oldhc206OkV4cHI6OmY2NCk6CisgICAgICAgIChKU0M6Oldhc206OkV4cHI6
Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpXYXNtOjpFeHByOjpvcGVyYXRvciE9KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6UGFja09wV2l0aEltbSk6CisgICAgICAgIChKU0M6Oldhc206OlVu
cGFja09wV2l0aEltbSk6CisgICAgICAgIChKU0M6Oldhc206OkV4cHJXaXRoSW1tOjpFeHByV2l0
aEltbSk6CisgICAgICAgIChKU0M6Oldhc206OkV4cHJXaXRoSW1tOjp0eXBlKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6RXhwcldpdGhJbW06OmkzMik6CisgICAgICAgIChKU0M6Oldhc206OkV4cHJX
aXRoSW1tOjpmMzIpOgorICAgICAgICAoSlNDOjpXYXNtOjpFeHByV2l0aEltbTo6ZjY0KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0dXJlOjpTaWduYXR1cmUpOgorICAgICAgICAoSlNDOjpX
YXNtOjpTaWduYXR1cmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpXYXNtOjpTaWduYXR1
cmU6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpXYXNtOjpTaWduYXR1cmU6Okhhc2g6Om9w
ZXJhdG9yKCkpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OlJlYWRlcik6CisgICAgICAg
IChKU0M6Oldhc206OlJlYWRlcjo6c3RtdCk6CisgICAgICAgIChKU0M6Oldhc206OlJlYWRlcjo6
c3dpdGNoQ2FzZSk6CisgICAgICAgIChKU0M6Oldhc206OlJlYWRlcjo6dm9pZEV4cHIpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OmV4cG9ydEZvcm1hdCk6CisgICAgICAgIChKU0M6Oldh
c206OlJlYWRlcjo6dHlwZSk6CisgICAgICAgIChKU0M6Oldhc206OlJlYWRlcjo6cnR5cGUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OnNpbmdsZUNoYXIpOgorICAgICAgICAoSlNDOjpX
YXNtOjpSZWFkZXI6OnU4KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVhZGVyOjpmaXhlZFdpZHRo
PHVpbnQzMl90Pik6CisgICAgICAgIChKU0M6Oldhc206OlJlYWRlcjo6Zml4ZWRXaWR0aDxmbG9h
dD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OmZpeGVkV2lkdGg8ZG91YmxlPik6Cisg
ICAgICAgIChKU0M6Oldhc206OlJlYWRlcjo6Y29kZSk6CisgICAgICAgIChKU0M6Oldhc206OlJl
YWRlcjo6aW1tVTMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVhZGVyOjppbW1TMzIpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OmlmSTMyTGl0KToKKwogMjAxNS0wNy0wOCAgSm9zZXBo
IFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBncmFtbWFyIGlz
c3VlIGluIFR5cGVFcnJvciBhdHRlbXB0aW5nIHRvIGNoYW5nZSBhbiB1bmNvbmZpZ3VyYWJsZSBw
cm9wZXJ0eQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwNmU5OTcwYzUyY2UwMTJh
Y2YzODA0MzI0MzdmMmMyNmY1Mjg4YTcwLi4wNDE5MjhmNDRkMmNlYzg5N2ZkZjQ0NGY2YzI2NTJh
Y2U1YTFkOWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTAyMCw2ICsxMDIw
LDExIEBACiAJCTcwRUNBNjA3MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjAy
MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmNwcCAqLzsgfTsKIAkJNzBFQ0E2
MDgxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjAzMUFGREJFQTIwMDQ0OTczOSAv
KiBUZW1wbGF0ZVJlZ2lzdHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNzBFQ0E2MDkxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0
cnlLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcw
RUNBNjA0MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0JEMTBDNDIxQjRFRDQz
QzAwQkQ1NDFBIC8qIFdhc21KSVRDb21waWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkQxMEMzRDFCNEVENDM5MDBCRDU0MUEgLyogV2FzbUpJ
VENvbXBpbGVyLmNwcCAqLzsgfTsKKwkJN0JEMTBDNDMxQjRFRDQ0MDAwQkQ1NDFBIC8qIFdhc21K
SVRDb21waWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0JEMTBDM0UxQjRFRDQzOTAwQkQ1NDFBIC8qIFdhc21KSVRDb21waWxlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCRDEwQzQ0MUI0RUQ0
NDUwMEJENTQxQSAvKiBXYXNtTW9kdWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdCRDEwQzNGMUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNtTW9kdWxl
LmNwcCAqLzsgfTsKKwkJN0JEMTBDNDUxQjRFRDQ0OTAwQkQ1NDFBIC8qIFdhc21Nb2R1bGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRDEwQzQwMUI0
RUQ0MzkwMEJENTQxQSAvKiBXYXNtTW9kdWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0JEMTBDNDYxQjRFRDQ0RTAwQkQ1NDFBIC8qIFdhc21P
cGNvZGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
QkQxMEM0MTFCNEVENDM5MDBCRDU0MUEgLyogV2FzbU9wY29kZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzAwOENEQTE4NzEyNEJCMDA5NTVD
MjQgLyogSlNQcm9taXNlRGVmZXJyZWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0MwMDhDRDgxODcxMjRCQjAwOTU1QzI0IC8qIEpTUHJvbWlzZURl
ZmVycmVkLmNwcCAqLzsgfTsKIAkJN0MwMDhDREIxODcxMjRCQjAwOTU1QzI0IC8qIEpTUHJvbWlz
ZURlZmVycmVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QzAwOENEOTE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzAwOENFNzE4NzYz
MUI2MDA5NTVDMjQgLyogTWljcm90YXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QzAwOENFNTE4NzYzMUI2MDA5NTVDMjQgLyogTWljcm90YXNrLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI3NjIs
NiArMjc2NywxMSBAQAogCQk3MEVDQTYwMjFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdp
c3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZW1wbGF0ZVJl
Z2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzBFQ0E2MDMxQUZEQkVB
MjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MEVDQTYwNDFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZW1wbGF0ZVJlZ2lzdHJ5S2V5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCRDEwQzNEMUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNt
SklUQ29tcGlsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Fz
bUpJVENvbXBpbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0JEMTBDM0Ux
QjRFRDQzOTAwQkQ1NDFBIC8qIFdhc21KSVRDb21waWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXYXNtSklUQ29tcGlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJN0JEMTBDM0YxQjRFRDQzOTAwQkQ1NDFBIC8qIFdhc21Nb2R1bGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbU1vZHVsZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTdCRDEwQzQwMUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNtTW9kdWxl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21Nb2R1bGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0JEMTBDNDExQjRFRDQzOTAwQkQ1NDFBIC8qIFdhc21P
cGNvZGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21PcGNvZGVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMDA4Q0Q4MTg3MTI0QkIwMDk1NUMyNCAv
KiBKU1Byb21pc2VEZWZlcnJlZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU1Byb21pc2VEZWZlcnJlZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdDMDA4Q0Q5MTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1Byb21pc2VEZWZlcnJlZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3QzAwOENFNTE4NzYzMUI2MDA5NTVDMjQgLyogTWljcm90YXNr
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1pY3JvdGFzay5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzYxNyw2ICszNjI3LDcgQEAKIAkJCQk3RUY2RTBCQjBF
QjdBMUVDMDA3OUFGQUYgLyogcnVudGltZSAqLywKIAkJCQkxNDEyMTEwMDBBNDg3NzI2MDA0ODAy
NTUgLyogdGVzdHMgKi8sCiAJCQkJODYwM0NFRjAxNEM3NTNFRjAwQUU1OUUzIC8qIHRvb2xzICov
LAorCQkJCTdCRDEwQzNDMUI0RUQ0MUQwMEJENTQxQSAvKiB3YXNtICovLAogCQkJCTg2RUFDNDhD
MEY5M0U4QjkwMDhFQzk0OCAvKiB5YXJyICovLAogCQkJKTsKIAkJCW5hbWUgPSBKYXZhU2NyaXB0
Q29yZTsKQEAgLTQyNzksNiArNDI5MCwxOCBAQAogCQkJcGF0aCA9IGRpc2Fzc2VtYmxlci9BUk12
NzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTdCRDEwQzNDMUI0RUQ0MUQw
MEJENTQxQSAvKiB3YXNtICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQk3QkQxMEMzRDFCNEVENDM5MDBCRDU0MUEgLyogV2FzbUpJVENvbXBpbGVyLmNwcCAq
LywKKwkJCQk3QkQxMEMzRTFCNEVENDM5MDBCRDU0MUEgLyogV2FzbUpJVENvbXBpbGVyLmggKi8s
CisJCQkJN0JEMTBDM0YxQjRFRDQzOTAwQkQ1NDFBIC8qIFdhc21Nb2R1bGUuY3BwICovLAorCQkJ
CTdCRDEwQzQwMUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNtTW9kdWxlLmggKi8sCisJCQkJN0JEMTBD
NDExQjRFRDQzOTAwQkQ1NDFBIC8qIFdhc21PcGNvZGVzLmggKi8sCisJCQkpOworCQkJcGF0aCA9
IHdhc207CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk3RTM5RDgxRDBFQzM4
RUZBMDAzQUYxMUEgLyogYnl0ZWNvbXBpbGVyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKQEAgLTYwMTEsNiArNjAzNCw3IEBACiAJCQkJQkMxOEM0MDUwRTE2RjVD
RDAwQjM0NDYwIC8qIEZ1bmN0aW9uUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0JF
MkNBRTE0RTk4NUFBMDAwNTkzQUQgLyogR0NBc3NlcnRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjc2NkQzMDE1QThEQ0UyMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3QkQxMEM0NTFCNEVENDQ5MDBCRDU0MUEgLyogV2FzbU1vZHVsZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNzBFQzBFQzcxQUEwRDdEQTAwQjZBQUZBIC8qIFN0cmluZ0l0
ZXJhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZBQzE3QjZCNTNGMDBB
N0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2
NkFEMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCBpbiBI
ZWFkZXJzICovLApAQCAtNjE0NSw2ICs2MTY5LDcgQEAKIAkJCQlCQzE4QzQxRDBFMTZGNUNEMDBC
MzQ0NjAgLyogSlNDbGFzc1JlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTMxNjdCQUJE
NzAwNkQ3NjBBIC8qIEpTQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTcxNjdC
QUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4dEludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQk3
QkQxMEM0MzFCNEVENDQwMDBCRDU0MUEgLyogV2FzbUpJVENvbXBpbGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQxRTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDb250ZXh0UmVmLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDhDRDFEODEwOENGOTAyMDA4MTYzQzYgLyogSlNDb250ZXh0UmVmUHJp
dmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyMDI4QjgxNzk3NjAxRTAwOTgwMjhDIC8qIEpT
Q1Rlc3RSdW5uZXJVdGlscy5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTU0LDYgKzYxNzksNyBAQAog
CQkJCTk3ODgwMTQxMTQ3MUFEOTIwMDQxQjAxNiAvKiBKU0RhdGVNYXRoLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDMkE3RjY4ODE2MDQzMkQ0MDBGNzZCOTggLyogSlNEZXN0cnVjdGlibGVPYmplY3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE0MTY3QkFCRDcwMDZENzYwQSAvKiBKU0V4cG9y
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0JEMTBDNDYxQjRFRDQ0RTAwQkQ1NDFBIC8qIFdhc21P
cGNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0I0QUNBRjE0ODRDOUNFMDBCMzhBMzYgLyog
SlNFeHBvcnRNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkVGMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjAxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLywKQEAgLTcxNTIs
NiArNzE3OCw3IEBACiAJCQkJMEZBNTgxQkExNTBFOTUyQzAwQjlBMkQ5IC8qIERGR05vZGVGbGFn
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURDRjEzMjhERjgyMDAyQjJBRDcgLyogREZH
T3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGRDE3QTBCOENDMDA3NzNB
RDggLyogREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk3QkQxMEM0MjFCNEVENDNDMDBCRDU0MUEgLyogV2FzbUpJVENvbXBpbGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRDgyRTU2MTQxREFGMDgwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMyNTE3RDUxRjU3MDBDQTJDNDAgLyogREZHT1NS
RW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU1MDY4Njcx
QUUyNUUyODAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTcxODgsNiArNzIxNSw3IEBACiAJCQkJMEZDMDk3QTExNDZCMjhDQTAwQ0YyNDQyIC8qIERG
R1RodW5rcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzQjRBOTE4QjkyQzREMDAxNzhBM0Yg
LyogUHV0QnlJZFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzA5RkI4NjcxQUUzMzVD
NjAwMzlEMDY5IC8qIEpTV2Vha1NldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QkQxMEM0NDFC
NEVENDQ1MDBCRDU0MUEgLyogV2FzbU1vZHVsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4
QTMyNzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMyOTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTc2
NjIxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKaW5kZXggMTI0Mzll
MDhjYWUxMDg2NmU5M2Q5YTc0NmZjMmM1N2JiZmE4MmQwYy4uZDJjZjE1MzhhZjZjMGNjOWMyYjJi
YWNiNWY2OTZiNmFiNzllNzk0NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKQEAgLTIxODMsNiArMjE4Myw2OCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9j
ayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1
bmxpbgogICAgIG1faGVhcC0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoc2l6ZW9mKENvZGVC
bG9jaykgKyBtX2luc3RydWN0aW9ucy5zaXplKCkgKiBzaXplb2YoSW5zdHJ1Y3Rpb24pKTsKIH0K
IAorQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxl
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIDogbV9nbG9iYWxPYmplY3QoZ2xv
YmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCkKKyAgICAsIG1f
aGVhcCgmbV9nbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkKKyAgICAsIG1fbnVtQ2FsbGVlUmVnaXN0
ZXJzKDApIC8vIEZJWE1FCisgICAgLCBtX251bVZhcnMoMCkgLy8gRklYTUUKKyAgICAsIG1faXND
b25zdHJ1Y3RvcihmYWxzZSkgLy8gRklYTUUKKyAgICAsIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVk
KHRydWUpCisgICAgLCBtX2RpZEZhaWxGVExDb21waWxhdGlvbihmYWxzZSkKKyAgICAsIG1faGFz
QmVlbkNvbXBpbGVkV2l0aEZUTChmYWxzZSkKKyAgICAvLyAsIG1fdW5saW5rZWRDb2RlKG1fZ2xv
YmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrKQorICAg
ICwgbV9oYXNEZWJ1Z2dlclN0YXRlbWVudChmYWxzZSkKKyAgICAsIG1fc3RlcHBpbmdNb2RlKFN0
ZXBwaW5nTW9kZURpc2FibGVkKQorICAgICwgbV9udW1CcmVha3BvaW50cygwKQorICAgICwgbV9v
d25lckV4ZWN1dGFibGUobV9nbG9iYWxPYmplY3QtPnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3du
ZXJFeGVjdXRhYmxlKQorICAgICwgbV92bSgmbV9nbG9iYWxPYmplY3QtPnZtKCkpIC8vIEZJWE1F
CisgICAgLCBtX3RoaXNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoKSkgLy8gRklYTUUKKyAgICAs
IG1fc2NvcGVSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoKSkgLy8gRklYTUUKKyAgICAsIG1fbGV4
aWNhbEVudmlyb25tZW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpIC8vIEZJWE1FCisgICAg
LCBtX2lzU3RyaWN0TW9kZShmYWxzZSkgLy8gRklYTUUKKyAgICAsIG1fbmVlZHNBY3RpdmF0aW9u
KGZhbHNlKQorICAgICwgbV9tYXlCZUV4ZWN1dGluZyhmYWxzZSkKKyAgICAsIG1fc291cmNlKG51
bGxwdHIpCisgICAgLCBtX3NvdXJjZU9mZnNldCgwKQorICAgICwgbV9maXJzdExpbmVDb2x1bW5P
ZmZzZXQoMCkKKyAgICAsIG1fY29kZVR5cGUoRnVuY3Rpb25Db2RlKSAvLyBGSVhNRQorICAgICwg
bV9vc3JFeGl0Q291bnRlcigwKQorICAgICwgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoMCkK
KyAgICAsIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoMCkKKyNpZiBFTkFCTEUoSklUKQor
ICAgICwgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZShERkc6OkNhcGFiaWxpdHlMZXZlbE5vdFNldCkK
KyNlbmRpZgoreworICAgIG1fdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkLnN0b3JlKGZhbHNl
LCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKworICAgIEFTU0VSVChtX2hlYXAtPmlzRGVm
ZXJyZWQoKSk7CisKKyAgICAvKgorICAgIEFTU0VSVChtX3Njb3BlUmVnaXN0ZXIuaXNMb2NhbCgp
KTsKKworICAgIGJvb2wgZGlkQ2xvbmVTeW1ib2xUYWJsZSA9IGZhbHNlOworCisgICAgaWYgKFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
KSB7CisgICAgICAgIGlmIChtX3ZtLT50eXBlUHJvZmlsZXIoKSkgeworICAgICAgICAgICAgQ29u
Y3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7CisgICAgICAgICAg
ICBzeW1ib2xUYWJsZS0+cHJlcGFyZUZvclR5cGVQcm9maWxpbmcobG9ja2VyKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChjb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBzeW1ib2xUYWJs
ZS0+c2NvcGVTaXplKCkpIHsKKyAgICAgICAgICAgIG1fc3ltYm9sVGFibGUuc2V0KCptX3ZtLCBt
X293bmVyRXhlY3V0YWJsZS5nZXQoKSwgc3ltYm9sVGFibGUtPmNsb25lU2NvcGVQYXJ0KCptX3Zt
KSk7CisgICAgICAgICAgICBkaWRDbG9uZVN5bWJvbFRhYmxlID0gdHJ1ZTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBtX3N5bWJvbFRhYmxlLnNldCgqbV92bSwgbV9vd25lckV4ZWN1dGFi
bGUuZ2V0KCksIHN5bWJvbFRhYmxlKTsKKyAgICB9CisgICAgKi8KKworICAgIC8vIEZJWE1FOgor
ICAgIHNldE51bVBhcmFtZXRlcnMoMCk7CisKKyAgICBtX2hlYXAtPm1fY29kZUJsb2Nrcy5hZGQo
dGhpcyk7CisgICAgbV9oZWFwLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChzaXplb2YoQ29k
ZUJsb2NrKSk7Cit9CisKIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiB7CiAgICAgaWYgKG1fdm0t
Pm1fcGVyQnl0ZWNvZGVQcm9maWxlcikKQEAgLTMwNTcsNiArMzExOSwxMSBAQCBDb2RlQmxvY2sq
IEZ1bmN0aW9uQ29kZUJsb2NrOjpyZXBsYWNlbWVudCgpCiAgICAgcmV0dXJuIGpzQ2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvZGVCbG9ja0ZvcihtX2lzQ29u
c3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOwogfQogCitDb2RlQmxv
Y2sqIFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpyZXBsYWNlbWVudCgpCit7CisgICAgcmV0dXJuIGpz
Q2FzdDxXZWJBc3NlbWJseUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvZGVCbG9j
a0ZvcihtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOwor
fQorCiBERkc6OkNhcGFiaWxpdHlMZXZlbCBQcm9ncmFtQ29kZUJsb2NrOjpjYXBhYmlsaXR5TGV2
ZWxJbnRlcm5hbCgpCiB7CiAgICAgcmV0dXJuIERGRzo6cHJvZ3JhbUNhcGFiaWxpdHlMZXZlbCh0
aGlzKTsKQEAgLTMwNzMsNiArMzE0MCwxMSBAQCBERkc6OkNhcGFiaWxpdHlMZXZlbCBGdW5jdGlv
bkNvZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKQogICAgICAgICByZXR1cm4gREZH
OjpmdW5jdGlvbkZvckNvbnN0cnVjdENhcGFiaWxpdHlMZXZlbCh0aGlzKTsKICAgICByZXR1cm4g
REZHOjpmdW5jdGlvbkZvckNhbGxDYXBhYmlsaXR5TGV2ZWwodGhpcyk7CiB9CisKK0RGRzo6Q2Fw
YWJpbGl0eUxldmVsIFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpjYXBhYmlsaXR5TGV2ZWxJbnRlcm5h
bCgpCit7CisgICAgcmV0dXJuIERGRzo6Q2Fubm90Q29tcGlsZTsKK30KICNlbmRpZgogCiB2b2lk
IENvZGVCbG9jazo6amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uUmVhc29uIHJlYXNvbiwgUmVv
cHRpbWl6YXRpb25Nb2RlIG1vZGUsIGNvbnN0IEZpcmVEZXRhaWwqIGRldGFpbCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRleCA2NWRhYjk1NWU2OGYxNDc1
N2M1YWIxYTI5ZTE5NzQyOGQwY2M4ZTk4Li5hODg0ZmMxOThjNmE2Nzk4M2MwZDA2OWI3MTJjZGNj
YjUxMzBjMTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CkBAIC05Nyw2ICs5Nyw4IEBAIHByb3RlY3RlZDoKICAgICAgICAgCiAgICAgQ29kZUJsb2NrKFNj
cmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqLCBKU1Nj
b3BlKiwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4sIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwg
dW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KTsKIAorICAgIENvZGVCbG9jayhTY3JpcHRF
eGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0Kik7CisKICAgICBXcml0
ZUJhcnJpZXI8SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0OwogICAgIEhlYXAqIG1faGVh
cDsKIApAQCAtMTE0Miw2ICsxMTQ0LDI3IEBAIHByb3RlY3RlZDoKICNlbmRpZgogfTsKIAorY2xh
c3MgV2ViQXNzZW1ibHlDb2RlQmxvY2sgOiBwdWJsaWMgQ29kZUJsb2NrIHsKK3B1YmxpYzoKKyAg
ICBXZWJBc3NlbWJseUNvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsIFdlYkFzc2VtYmx5Q29k
ZUJsb2NrJiBvdGhlcikKKyAgICAgICAgOiBDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrLCBvdGhl
cikKKyAgICB7CisgICAgfQorCisgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2soV2ViQXNzZW1ibHlF
eGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
CisgICAgICAgIDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0KQorICAg
IHsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkoKSBvdmVycmlkZSB7IH07CisKKyNpZiBFTkFCTEUoSklUKQorICAgIHZpcnR1YWwg
Q29kZUJsb2NrKiByZXBsYWNlbWVudCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgREZHOjpDYXBh
YmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKSBvdmVycmlkZTsKKyNlbmRpZgor
fTsKKwogaW5saW5lIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJh
bWUoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiB7CiAgICAgUkVMRUFTRV9BU1NF
UlQoaW5saW5lQ2FsbEZyYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCmluZGV4IDM4MDE1ZDJkODA0ZjkzNTkyMGY5NzU2YTcxY2EyZmRmZWExNzk1OTAu
LjAxODhlNTM1NmY0YTE0Y2QzMWYzZTQ5ZTUxMDJhMTYwOGJjMDUzMmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtNzc4LDcgKzc3OCwxMCBAQCBp
bmxpbmUgY2hhciogbGlua0ZvcigKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRy
OwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gMDsKLSAgICBpZiAoZXhlY3V0YWJsZS0+aXNI
b3N0RnVuY3Rpb24oKSkKKyAgICBpZiAoZXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFi
bGUoKSkgeworICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHJlYWxseSB1c2UgUmVnaXN0ZXJQ
cmVzZXJ2YXRpb25Ob3RSZXF1aXJlZD8KKyAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVu
dHJ5cG9pbnRGb3IoKnZtLCBraW5kLCBBcml0eUNoZWNrTm90UmVxdWlyZWQsIFJlZ2lzdGVyUHJl
c2VydmF0aW9uTm90UmVxdWlyZWQpOworICAgIH0gZWxzZSBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0
RnVuY3Rpb24oKSkKICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Io
KnZtLCBraW5kLCBNdXN0Q2hlY2tBcml0eSwgcmVnaXN0ZXJzKTsKICAgICBlbHNlIHsKICAgICAg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKQEAgLTc5NSwxNiArNzk4LDE5IEBAIGlu
bGluZSBjaGFyKiBsaW5rRm9yKAogICAgICAgICB9CiAgICAgICAgIGNvZGVCbG9jayA9IGZ1bmN0
aW9uRXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpOwogICAgICAgICBBcml0eUNoZWNrTW9k
ZSBhcml0eTsKLSAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSB8
fCBjYWxsTGlua0luZm8tPmNhbGxUeXBlKCkgPT0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJncyB8
fCBjYWxsTGlua0luZm8tPmNhbGxUeXBlKCkgPT0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJh
cmdzKQorICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMo
KSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpIHx8IChj
YWxsTGlua0luZm8gJiYgKGNhbGxMaW5rSW5mby0+Y2FsbFR5cGUoKSA9PSBDYWxsTGlua0luZm86
OkNhbGxWYXJhcmdzIHx8IGNhbGxMaW5rSW5mby0+Y2FsbFR5cGUoKSA9PSBDYWxsTGlua0luZm86
OkNvbnN0cnVjdFZhcmFyZ3MpKSkKICAgICAgICAgICAgIGFyaXR5ID0gTXVzdENoZWNrQXJpdHk7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFyaXR5ID0gQXJpdHlDaGVja05vdFJlcXVpcmVk
OwogICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKCp2
bSwga2luZCwgYXJpdHksIHJlZ2lzdGVycyk7CiAgICAgfQotICAgIGlmICghY2FsbExpbmtJbmZv
LT5zZWVuT25jZSgpKQotICAgICAgICBjYWxsTGlua0luZm8tPnNldFNlZW4oKTsKLSAgICBlbHNl
Ci0gICAgICAgIGxpbmtGb3IoZXhlY0NhbGxlZSwgKmNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBj
YWxsZWUsIGNvZGVQdHIsIGtpbmQsIHJlZ2lzdGVycyk7CisgICAgLy8gVE9ETzogc3VwcG9ydCBy
ZXBhdGNoaW5nCisgICAgaWYgKGNhbGxMaW5rSW5mbykgeworICAgICAgICBpZiAoIWNhbGxMaW5r
SW5mby0+c2Vlbk9uY2UoKSkKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0U2VlbigpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBsaW5rRm9yKGV4ZWNDYWxsZWUsICpjYWxsTGlua0lu
Zm8sIGNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRyLCBraW5kLCByZWdpc3RlcnMpOworICAgIH0K
ICAgICAKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29kZVB0ci5leGVjdXRh
YmxlQWRkcmVzcygpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2Mu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggMzgwZDg5YjVkMzU5Mjc0
YTI3NDgyOTE4MzJjZWVkODg4YTYzYzIzNi4uNjkwMWI2MTJhMTNlMTU0ZWIxYzQxMjBjYTc1MGIy
NDNhMDc1YmRiNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNs
dWRlICJTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCIKICNpbmNsdWRlICJUZXN0UnVubmVyVXRp
bHMuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKKyNpbmNsdWRlICJXYXNtSklUQ29t
cGlsZXIuaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRl
IDxzdGRsaWIuaD4KQEAgLTQ5MSw2ICs0OTIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblJldHVyblR5cGVGb3IoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkR1bXBCYXNpY0Jsb2NrRXhlY3V0aW9u
UmFuZ2VzKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25IYXNCYXNpY0Jsb2NrRXhlY3V0ZWQoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVuYWJsZUV4Y2VwdGlvbkZ1enooRXhlY1N0
YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYWRX
ZWJBc3NlbWJseShFeGVjU3RhdGUqKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykKIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0U2FtcGxpbmdGbGFn
cyhFeGVjU3RhdGUqKTsKQEAgLTY1Myw2ICs2NTUsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGFk
ZEZ1bmN0aW9uKHZtLCAiaGFzQmFzaWNCbG9ja0V4ZWN1dGVkIiwgZnVuY3Rpb25IYXNCYXNpY0Js
b2NrRXhlY3V0ZWQsIDIpOwogCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiZW5hYmxlRXhjZXB0
aW9uRnV6eiIsIGZ1bmN0aW9uRW5hYmxlRXhjZXB0aW9uRnV6eiwgMCk7CisKKyAgICAgICAgYWRk
RnVuY3Rpb24odm0sICJsb2FkV2ViQXNzZW1ibHkiLCBmdW5jdGlvbkxvYWRXZWJBc3NlbWJseSwg
MSk7CiAgICAgICAgIAogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJy
YXkoZ2xvYmFsRXhlYygpLCAwKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1
bWVudHMuc2l6ZSgpOyArK2kpCkBAIC0xMTgyLDYgKzExODYsMTYgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVuYWJsZUV4Y2VwdGlvbkZ1enooRXhlY1N0YXRlKikKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZFdlYkFzc2VtYmx5KEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICBTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7CisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICBpZiAoIWZp
bGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZU5hbWUsIGJ1ZmZlcikpCisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVh
dGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkNvdWxkIG5vdCBvcGVuIGZpbGUuIikpKSk7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSBXYXNtOjpjb21waWxlKGV4ZWMsIGJ1ZmZlcik7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCiAvLyBVc2UgU0VIIGZvciBSZWxlYXNl
IGJ1aWxkcyBvbmx5IHRvIGdldCByaWQgb2YgdGhlIGNyYXNoIHJlcG9ydCBkaWFsb2cKIC8vIChs
dWNraWx5IHRoZSBzYW1lIHRlc3RzIGZhaWwgaW4gUmVsZWFzZSBhbmQgRGVidWcgYnVpbGRzIHNv
IGZhcikuIE5lZWQgdG8KIC8vIGJlIGluIGEgc2VwYXJhdGUgbWFpbiBmdW5jdGlvbiBiZWNhdXNl
IHRoZSBqc2NtYWluIGZ1bmN0aW9uIHJlcXVpcmVzIG9iamVjdApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggOWNjYzFjZTQ5Nzg4ZDcxMGZj
NjlhNjkxNTQzNDI3MWE4YzA5ZDJlNC4uYjQ5ZWFhYzUxYWQ2OTE4ZTAxY2RhM2U4M2VlYTFlMjNi
OTFkMmRhNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xv
d1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCkBAIC0xMTE5LDcgKzExMTksOSBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNl
dFVwQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEluc3RydWN0aW9uKiBwYywgQ29kZQogICAg
IAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOwogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gMDsKLSAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICBp
ZiAoZXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKSkKKyAgICAgICAgY29kZVB0
ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Iodm0sIGtpbmQsIEFyaXR5Q2hlY2tOb3RSZXF1
aXJlZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CisgICAgZWxzZSBpZiAoZXhl
Y3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUt
PmVudHJ5cG9pbnRGb3Iodm0sIGtpbmQsIE11c3RDaGVja0FyaXR5LCBSZWdpc3RlclByZXNlcnZh
dGlvbk5vdFJlcXVpcmVkKTsKICAgICBlbHNlIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihl
eGVjdXRhYmxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
ZWN1dGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5j
cHAKaW5kZXggNTUyNDBmZDkxZjdiYzc4NDJmMTNlNTkyODFkMTBkMjFkODZjNGY1MC4uYjBlMWQx
NTRiNjkyMzIyY2U0ZTgzNzFkZWMzZmMxMjcxOTdlN2YxZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKQEAgLTE0OSw2ICsxNDksMjYgQEAgdm9pZCBT
Y3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZShDb2RlQmxvY2sqIGdlbmVyaWNDb2RlQmxvY2sp
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKKyAgICBpZiAoaXNXZWJBc3NlbWJseUV4ZWN1
dGFibGUoKSkgeworICAgICAgICBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBq
c0Nhc3Q8V2ViQXNzZW1ibHlFeGVjdXRhYmxlKj4odGhpcyk7CisgICAgICAgIFdlYkFzc2VtYmx5
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxXZWJBc3NlbWJseUNvZGVCbG9jayo+
KGdlbmVyaWNDb2RlQmxvY2spOworICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2Fz
ZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAgICAgIGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ2Fs
bCA9IGNvZGVCbG9jazsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvZGVGb3JD
b25zdHJ1Y3Q6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0ID0gY29kZUJsb2NrOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiB0aGlz
IGlzIGp1c3QgdG8gbWFrZSBpc0hvc3RGdW5jdGlvbigpIGhhcHB5LgorICAgICAgICAvLyBCdXQg
dGhpcyB3aWxsIG1ha2UgaXNIb3N0RnVuY3Rpb24oKSByZXR1cm4gdHJ1ZS4KKyAgICAgICAgbV9u
dW1QYXJhbWV0ZXJzRm9yQ2FsbCA9IDA7CisgICAgICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0
cnVjdCA9IDA7CisgICAgfSBlbHNlIHsKKworICAgICAgICAvLyBGSVhNRTogbmVlZCB0byBkZWFs
IHdpdGggY29kZVR5cGUoKQogICAgIHN3aXRjaCAoZ2VuZXJpY0NvZGVCbG9jay0+Y29kZVR5cGUo
KSkgewogICAgIGNhc2UgR2xvYmFsQ29kZTogewogICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpOwpAQCAtMTkyLDYg
KzIxMiw4IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUoQ29kZUJsb2NrKiBn
ZW5lcmljQ29kZUJsb2NrKQogICAgIGlmIChvbGRDb2RlQmxvY2spCiAgICAgICAgIG9sZENvZGVC
bG9jay0+dW5saW5rSW5jb21pbmdDYWxscygpOwogCisgICAgfQorICAgIAogICAgIERlYnVnZ2Vy
KiBkZWJ1Z2dlciA9IGdlbmVyaWNDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigp
OwogICAgIGlmIChkZWJ1Z2dlcikKICAgICAgICAgZGVidWdnZXItPnJlZ2lzdGVyQ29kZUJsb2Nr
KGdlbmVyaWNDb2RlQmxvY2spOwpAQCAtMjI4LDYgKzI1MCw4IEBAIFJlZlB0cjxDb2RlQmxvY2s+
IFNjcmlwdEV4ZWN1dGFibGU6Om5ld0NvZGVCbG9ja0ZvcigKICAgICAgICAgICAgIGV4ZWN1dGFi
bGUtPnNvdXJjZSgpLnByb3ZpZGVyKCksIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0Q29sdW1u
KCkpKTsKICAgICB9CiAgICAgCisgICAgQVNTRVJUKCFpc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgp
KTsKKyAgICAKICAgICBSRUxFQVNFX0FTU0VSVChjbGFzc0luZm8oKSA9PSBGdW5jdGlvbkV4ZWN1
dGFibGU6OmluZm8oKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb24pOwogICAgIEZ1bmN0
aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0
aGlzKTsKQEAgLTMyMyw2ICszNDcsOCBAQCBzdGF0aWMgdm9pZCBzZXR1cEpJVChWTSYgdm0sIENv
ZGVCbG9jayogY29kZUJsb2NrKQogSlNPYmplY3QqIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVG
b3JFeGVjdXRpb25JbXBsKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNGdW5jdGlvbiogZnVuY3Rp
b24sIEpTU2NvcGUqIHNjb3BlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CisgICAg
QVNTRVJUKCFpc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKTsKKyAgICAKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAKQEAgLTQyNSw2
ICs0NTEsMzUgQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxs
KQogICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpLT5GdW5jdGlvbkV4
ZWN1dGFibGU6On5GdW5jdGlvbkV4ZWN1dGFibGUoKTsKIH0KIAorY29uc3QgQ2xhc3NJbmZvIFdl
YkFzc2VtYmx5RXhlY3V0YWJsZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHlFeGVjdXRhYmxlIiwg
JlNjcmlwdEV4ZWN1dGFibGU6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3Nl
bWJseUV4ZWN1dGFibGUpIH07CisKK1dlYkFzc2VtYmx5RXhlY3V0YWJsZTo6V2ViQXNzZW1ibHlF
eGVjdXRhYmxlKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQorICAgIDogU2NyaXB0
RXhlY3V0YWJsZSh2bS53ZWJBc3NlbWJseUV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIHZtLCBz
b3VyY2UsIC8qaXNJblN0cmljdENvbnRleHQqLyBmYWxzZSApCit7CisgICAgLyoKKyAgICBSRUxF
QVNFX0FTU0VSVCghc291cmNlLmlzTnVsbCgpKTsKKyAgICBBU1NFUlQoc291cmNlLmxlbmd0aCgp
KTsKKyAgICBtX2ZpcnN0TGluZSA9IGZpcnN0TGluZTsKKyAgICBtX2xhc3RMaW5lID0gbGFzdExp
bmU7CisgICAgbV9zdGFydENvbHVtbiA9IHN0YXJ0Q29sdW1uOworICAgIG1fZW5kQ29sdW1uID0g
ZW5kQ29sdW1uOworICAgIG1fcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0ID0gdW5saW5rZWRFeGVjdXRh
YmxlLT5wYXJhbWV0ZXJzU3RhcnRPZmZzZXQoKTsKKyAgICBtX3R5cGVQcm9maWxpbmdTdGFydE9m
ZnNldCA9IHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCk7Cisg
ICAgbV90eXBlUHJvZmlsaW5nRW5kT2Zmc2V0ID0gdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJv
ZmlsaW5nRW5kT2Zmc2V0KCk7CisgICAgKi8KK30KKwordm9pZCBXZWJBc3NlbWJseUV4ZWN1dGFi
bGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CisgICAgbV9zaW5nbGV0b25GdW5jdGlvbi5zZXQodm0sIHRoaXMsIEluZmVycmVkVmFsdWU6
OmNyZWF0ZSh2bSkpOworfQorCit2b2lkIFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6ZGVzdHJveShK
U0NlbGwqIGNlbGwpCit7CisgICAgc3RhdGljX2Nhc3Q8V2ViQXNzZW1ibHlFeGVjdXRhYmxlKj4o
Y2VsbCktPldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6fldlYkFzc2VtYmx5RXhlY3V0YWJsZSgpOwor
fQorCiBpbmxpbmUgY29uc3QgY2hhciogc2FtcGxpbmdEZXNjcmlwdGlvbihKSVRDb2RlOjpKSVRU
eXBlIGppdFR5cGUpCiB7CiAgICAgc3dpdGNoIChqaXRUeXBlKSB7CkBAIC02MTksNiArNjc0LDQ4
IEBAIEZ1bmN0aW9uRXhlY3V0YWJsZSogRnVuY3Rpb25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29k
ZSgKICAgICByZXR1cm4gdW5saW5rZWRFeGVjdXRhYmxlLT5saW5rKGV4ZWMudm0oKSwgc291cmNl
LCBvdmVycmlkZUxpbmVOdW1iZXIpOwogfQogCitXZWJBc3NlbWJseUNvZGVCbG9jayogV2ViQXNz
ZW1ibHlFeGVjdXRhYmxlOjpiYXNlbGluZUNvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQpCit7CisgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIHJlc3VsdDsKKyAgICBpZiAo
a2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAgICAgICAgcmVzdWx0ID0gbV9jb2RlQmxvY2tGb3JDYWxs
LmdldCgpOworICAgIGVsc2UgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChraW5kID09IENvZGVG
b3JDb25zdHJ1Y3QpOworICAgICAgICByZXN1bHQgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5n
ZXQoKTsKKyAgICB9CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxXZWJBc3NlbWJseUNvZGVCbG9jayo+KHJlc3VsdC0+YmFzZWxpbmVB
bHRlcm5hdGl2ZSgpKTsKK30KKwordm9pZCBXZWJBc3NlbWJseUV4ZWN1dGFibGU6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBXZWJBc3Nl
bWJseUV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlFeGVjdXRhYmxl
Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOworICAgIFNjcmlwdEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7CisgICAgaWYgKHRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9yQ2FsbCkKKyAgICAgICAg
dGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDYWxsLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsK
KyAgICBpZiAodGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpCisgICAgICAgIHRo
aXNPYmplY3QtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9y
KTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9zaW5nbGV0b25GdW5jdGlvbik7
Cit9CisKK1N5bWJvbFRhYmxlKiBXZWJBc3NlbWJseUV4ZWN1dGFibGU6OnN5bWJvbFRhYmxlKENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICByZXR1cm4gY29kZUJsb2NrRm9yKGtp
bmQpLT5zeW1ib2xUYWJsZSgpOworfQorCit2b2lkIFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6Y2xl
YXJDb2RlKCkKK3sKKyAgICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBudWxscHRyOworICAgIG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0ID0gbnVsbHB0cjsKKyAgICBCYXNlOjpjbGVhckNvZGUoKTsKK30K
Kwordm9pZCBXZWJBc3NlbWJseUV4ZWN1dGFibGU6OnVubGlua0NhbGxzKCkKK3sKK30KKwogdm9p
ZCBFeGVjdXRhYmxlQmFzZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIEV4
ZWN1dGFibGVCYXNlKiByZWFsVGhpcyA9IGNvbnN0X2Nhc3Q8RXhlY3V0YWJsZUJhc2UqPih0aGlz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAppbmRleCAxYzdj
ODAwMDNkMmEzMmJkNmEzMTFkYWMwZGU1MzkwMWE4YWQ3ODFmLi45NGI2ODIwMDhmNWE1NjE2Yjdl
ZmE1NGY3MjMzYWVjYTc2ZDIwZDI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5oCkBAIC01MCw2ICs1MCw3IEBAIGNsYXNzIEV2YWxDb2RlQmxvY2s7CiBjbGFz
cyBGdW5jdGlvbkNvZGVCbG9jazsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNz
IFByb2dyYW1Db2RlQmxvY2s7CitjbGFzcyBXZWJBc3NlbWJseUNvZGVCbG9jazsKIGNsYXNzIEpT
U2NvcGU7CiAgICAgCiBlbnVtIENvbXBpbGF0aW9uS2luZCB7IEZpcnN0Q29tcGlsYXRpb24sIE9w
dGltaXppbmdDb21waWxhdGlvbiB9OwpAQCAtOTgsNiArOTksMTAgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgcmV0dXJuIHR5cGUoKSA9PSBGdW5jdGlvbkV4ZWN1dGFibGVUeXBlOwogICAgIH0K
KyAgICBib29sIGlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCkKKyAgICB7CisgICAgICAgIHJldHVy
biB0eXBlKCkgPT0gV2ViQXNzZW1ibHlFeGVjdXRhYmxlVHlwZTsKKyAgICB9CiAgICAgYm9vbCBp
c1Byb2dyYW1FeGVjdXRhYmxlKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0eXBlKCkgPT0gUHJv
Z3JhbUV4ZWN1dGFibGVUeXBlOwpAQCAtNjc4LDYgKzY4MywxMjIgQEAgcHJpdmF0ZToKICAgICBX
cml0ZUJhcnJpZXI8SW5mZXJyZWRWYWx1ZT4gbV9zaW5nbGV0b25GdW5jdGlvbjsKIH07CiAKK2Ns
YXNzIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSBmaW5hbCA6IHB1YmxpYyBTY3JpcHRFeGVjdXRhYmxl
IHsKKyAgICBmcmllbmQgY2xhc3MgSklUOworICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CitwdWJsaWM6CisgICAgdHlwZWRlZiBTY3JpcHRFeGVjdXRhYmxlIEJhc2U7Cisg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJl
RmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOworCisgICAgc3RhdGljIFdlYkFzc2VtYmx5RXhl
Y3V0YWJsZSogY3JlYXRlKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQorICAgIHsK
KyAgICAgICAgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlFeGVjdXRhYmxlPih2bS5oZWFwKSkgV2ViQXNzZW1i
bHlFeGVjdXRhYmxlKHZtLCBzb3VyY2UpOworICAgICAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVh
dGlvbih2bSk7CisgICAgICAgIHJldHVybiBleGVjdXRhYmxlOworICAgIH0KKyAgICAvLyBzdGF0
aWMgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBmcm9tR2xvYmFsQ29kZShjb25zdCBJZGVudGlmaWVy
JiBuYW1lLCBFeGVjU3RhdGUmLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNPYmplY3QqJiBleGNlcHRp
b24sIGludCBvdmVycmlkZUxpbmVOdW1iZXIpOworCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShK
U0NlbGwqKTsKKyAgICAgICAgCisgICAgYm9vbCBpc0dlbmVyYXRlZEZvckNhbGwoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ2FsbDsKKyAgICB9CisKKyAgICBX
ZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrRm9yQ2FsbCgpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpOworICAgIH0KKworICAgIGJvb2wgaXNHZW5l
cmF0ZWRGb3JDb25zdHJ1Y3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29kZUJs
b2NrRm9yQ29uc3RydWN0OworICAgIH0KKworICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrRm9y
Q29uc3RydWN0LmdldCgpOworICAgIH0KKyAgICAgICAgCisgICAgYm9vbCBpc0dlbmVyYXRlZEZv
cihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgeworICAgICAgICBpZiAoa2luZCA9
PSBDb2RlRm9yQ2FsbCkKKyAgICAgICAgICAgIHJldHVybiBpc0dlbmVyYXRlZEZvckNhbGwoKTsK
KyAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CisgICAgICAgIHJldHVy
biBpc0dlbmVyYXRlZEZvckNvbnN0cnVjdCgpOworICAgIH0KKyAgICAgICAgCisgICAgV2ViQXNz
ZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQp
CisgICAgeworICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAgICAgICAgICAgIHJl
dHVybiBjb2RlQmxvY2tGb3JDYWxsKCk7CisgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JD
b25zdHJ1Y3QpOworICAgICAgICByZXR1cm4gY29kZUJsb2NrRm9yQ29uc3RydWN0KCk7CisgICAg
fQorCisgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKENvZGVT
cGVjaWFsaXphdGlvbktpbmQpOworICAgICAgICAKKyAgICBXZWJBc3NlbWJseUNvZGVCbG9jayog
cHJvZmlsZWRDb2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9yKGtpbmQpOworICAgIH0KKworICAg
IFJlZlB0cjxUeXBlU2V0PiByZXR1cm5TdGF0ZW1lbnRUeXBlU2V0KCkgCisgICAgeworICAgICAg
ICBpZiAoIW1fcmV0dXJuU3RhdGVtZW50VHlwZVNldCkKKyAgICAgICAgICAgIG1fcmV0dXJuU3Rh
dGVtZW50VHlwZVNldCA9IFR5cGVTZXQ6OmNyZWF0ZSgpOworCisgICAgICAgIHJldHVybiBtX3Jl
dHVyblN0YXRlbWVudFR5cGVTZXQ7CisgICAgfQorICAgICAgICAKKyAgICAvLyBGdW5jdGlvbk1v
ZGUgZnVuY3Rpb25Nb2RlKCkgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmZ1bmN0aW9u
TW9kZSgpOyB9CisgICAgLy8gYm9vbCBpc0J1aWx0aW5GdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fdW5saW5rZWRFeGVjdXRhYmxlLT5pc0J1aWx0aW5GdW5jdGlvbigpOyB9CisgICAgLy8gYm9v
bCBpc0NsYXNzQ29uc3RydWN0b3JGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRF
eGVjdXRhYmxlLT5pc0NsYXNzQ29uc3RydWN0b3JGdW5jdGlvbigpOyB9CisgICAgLy8gY29uc3Qg
SWRlbnRpZmllciYgbmFtZSgpIHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5uYW1lKCk7
IH0KKyAgICAvLyBjb25zdCBJZGVudGlmaWVyJiBpbmZlcnJlZE5hbWUoKSB7IHJldHVybiBtX3Vu
bGlua2VkRXhlY3V0YWJsZS0+aW5mZXJyZWROYW1lKCk7IH0KKyAgICAvLyBKU1N0cmluZyogbmFt
ZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPm5hbWVWYWx1ZSgp
OyB9CisgICAgLy8gc2l6ZV90IHBhcmFtZXRlckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV91bmxp
bmtlZEV4ZWN1dGFibGUtPnBhcmFtZXRlckNvdW50KCk7IH0gLy8gRXhjbHVkaW5nICd0aGlzJyEK
KyAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUoQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CisK
KyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKKyAgICB7CisgICAgICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oV2ViQXNz
ZW1ibHlFeGVjdXRhYmxlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKwor
ICAgIHVuc2lnbmVkIHBhcmFtZXRlcnNTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFy
YW1ldGVyc1N0YXJ0T2Zmc2V0OyB9CisKKyAgICAvKgorICAgIHZvaWQgb3ZlcnJpZGVQYXJhbWV0
ZXJBbmRUeXBlUHJvZmlsaW5nU3RhcnRFbmRPZmZzZXRzKHVuc2lnbmVkIHBhcmFtZXRlcnNTdGFy
dE9mZnNldCwgdW5zaWduZWQgdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0LCB1bnNpZ25lZCB0eXBl
UHJvZmlsaW5nRW5kT2Zmc2V0KQorICAgIHsKKyAgICAgICAgbV9wYXJhbWV0ZXJzU3RhcnRPZmZz
ZXQgPSBwYXJhbWV0ZXJzU3RhcnRPZmZzZXQ7CisgICAgICAgIG1fdHlwZVByb2ZpbGluZ1N0YXJ0
T2Zmc2V0ID0gdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0OworICAgICAgICBtX3R5cGVQcm9maWxp
bmdFbmRPZmZzZXQgPSB0eXBlUHJvZmlsaW5nRW5kT2Zmc2V0OworICAgIH0KKyAgICAqLworCisg
ICAgREVDTEFSRV9JTkZPOworICAgICAgICAKKyAgICB2b2lkIHVubGlua0NhbGxzKCk7CisKKyAg
ICB2b2lkIGNsZWFyQ29kZSgpOworICAgIAorICAgIEluZmVycmVkVmFsdWUqIHNpbmdsZXRvbkZ1
bmN0aW9uKCkgeyByZXR1cm4gbV9zaW5nbGV0b25GdW5jdGlvbi5nZXQoKTsgfQorCitwcml2YXRl
OgorICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZShWTSYsIGNvbnN0IFNvdXJjZUNvZGUmKTsKKyAg
ICAKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisKKyAgICBmcmllbmQgY2xhc3MgU2Ny
aXB0RXhlY3V0YWJsZTsKKworICAgIFJlZlB0cjxXZWJBc3NlbWJseUNvZGVCbG9jaz4gbV9jb2Rl
QmxvY2tGb3JDYWxsOworICAgIFJlZlB0cjxXZWJBc3NlbWJseUNvZGVCbG9jaz4gbV9jb2RlQmxv
Y2tGb3JDb25zdHJ1Y3Q7CisgICAgUmVmUHRyPFR5cGVTZXQ+IG1fcmV0dXJuU3RhdGVtZW50VHlw
ZVNldDsKKyAgICB1bnNpZ25lZCBtX3BhcmFtZXRlcnNTdGFydE9mZnNldDsKKyAgICBXcml0ZUJh
cnJpZXI8SW5mZXJyZWRWYWx1ZT4gbV9zaW5nbGV0b25GdW5jdGlvbjsKK307CisKIGlubGluZSB2
b2lkIEV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGVWaXJ0dWFsKEV4ZWN1dGFibGVCYXNlKiBleGVj
dXRhYmxlKQogewogICAgIHN3aXRjaCAoZXhlY3V0YWJsZS0+dHlwZSgpKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCmluZGV4IDFiOGM0MDdlYzNkNDk0
OWI2MDZlYzk1YjlhYzliNGUyZGZjNjgxMmYuLjdkYzY3MjNiNGE2YmZlM2FhODQ0ODJlY2Q1MmY5
NDQ5ZWEzZjlhODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b24uY3BwCkBAIC02MCwxMCArNjAsMTEgQEAgYm9vbCBKU0Z1bmN0aW9uOjppc0hvc3RGdW5jdGlv
bk5vbklubGluZSgpIGNvbnN0CiAgICAgcmV0dXJuIGlzSG9zdEZ1bmN0aW9uKCk7CiB9CiAKLUpT
RnVuY3Rpb24qIEpTRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUpCitKU0Z1bmN0aW9uKiBKU0Z1bmN0aW9uOjpjcmVh
dGUoVk0mIHZtLCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUpCiB7
CiAgICAgSlNGdW5jdGlvbiogcmVzdWx0ID0gY3JlYXRlSW1wbCh2bSwgZXhlY3V0YWJsZSwgc2Nv
cGUpOwotICAgIGV4ZWN1dGFibGUtPnNpbmdsZXRvbkZ1bmN0aW9uKCktPm5vdGlmeVdyaXRlKHZt
LCByZXN1bHQsICJBbGxvY2F0aW5nIGEgZnVuY3Rpb24iKTsKKyAgICBpZiAoZXhlY3V0YWJsZS0+
aXNGdW5jdGlvbkV4ZWN1dGFibGUoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVj
dXRhYmxlKj4oZXhlY3V0YWJsZSktPnNpbmdsZXRvbkZ1bmN0aW9uKCktPm5vdGlmeVdyaXRlKHZt
LCByZXN1bHQsICJBbGxvY2F0aW5nIGEgZnVuY3Rpb24iKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9u
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKaW5kZXggMGI4
N2Q3NWM5MTQ1MGM1YWYxYWFlZDI3YTYxYTc0OGVmODBmMDkzZS4uMjNjN2ZiMTc4OWIzOTE3MDY2
YTczZDUwNjI3ZGMyZmRjMmM5Y2ZhNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uaApAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTRnVu
Y3Rpb24qIGNyZWF0ZVdpdGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlvbldhdGNocG9pbnQoVk0mLCBG
dW5jdGlvbkV4ZWN1dGFibGUqLCBKU1Njb3BlKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIEpTRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgaW50IGxlbmd0aCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBOYXRpdmVTdGRGdW5jdGlvbiYmLCBJbnRyaW5zaWMgPSBOb0lu
dHJpbnNpYywgTmF0aXZlRnVuY3Rpb24gbmF0aXZlQ29uc3RydWN0b3IgPSBjYWxsSG9zdEZ1bmN0
aW9uQXNDb25zdHJ1Y3Rvcik7CiAKLSAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlKFZNJiwg
RnVuY3Rpb25FeGVjdXRhYmxlKiwgSlNTY29wZSopOworICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBj
cmVhdGUoVk0mLCBFeGVjdXRhYmxlQmFzZSosIEpTU2NvcGUqKTsKIAogICAgIHN0YXRpYyBKU0Z1
bmN0aW9uKiBjcmVhdGVCdWlsdGluRnVuY3Rpb24oVk0mLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBK
U0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVCdWlsdGluRnVu
Y3Rpb24oVk0mLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0
cmluZyYgbmFtZSk7CkBAIC0xNDAsNyArMTQwLDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3Ry
dWN0dXJlKik7Ci0gICAgSlNGdW5jdGlvbihWTSYsIEZ1bmN0aW9uRXhlY3V0YWJsZSosIEpTU2Nv
cGUqKTsKKyAgICBKU0Z1bmN0aW9uKFZNJiwgRXhlY3V0YWJsZUJhc2UqLCBKU1Njb3BlKik7CiAK
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIGludCBsZW5n
dGgsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgdXNpbmcgQmFzZTo6ZmluaXNoQ3JlYXRpb247
CkBAIC0xNTksNyArMTU5LDcgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgSlNG
dW5jdGlvbiogY3JlYXRlSW1wbChWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSwgSlNTY29wZSogc2NvcGUpCisgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZUltcGwoVk0m
IHZtLCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUpCiAgICAgewog
ICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEpTRnVuY3Rpb24+KHZtLmhlYXApKSBKU0Z1bmN0aW9uKHZtLCBleGVjdXRhYmxlLCBzY29wZSk7
CiAgICAgICAgIEFTU0VSVChmdW5jdGlvbi0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25Jbmxp
bmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5o
CmluZGV4IGY2YzZkNThlYzZlNWMxMTY0Y2IyN2ZhNWU0MTYxOGI0YjgxNDJmMDIuLmI5MzA2MDc1
OTlhN2MyYTFkZDAzMDQ4MGE3MmJlOGFkM2RiZDIwNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaApAQCAtMzgsNyArMzgsNyBAQCBp
bmxpbmUgSlNGdW5jdGlvbiogSlNGdW5jdGlvbjo6Y3JlYXRlV2l0aEludmFsaWRhdGVkUmVhbGxv
Y2F0aW9uV2F0Y2hwb2ludCgKICAgICByZXR1cm4gY3JlYXRlSW1wbCh2bSwgZXhlY3V0YWJsZSwg
c2NvcGUpOwogfQogCi1pbmxpbmUgSlNGdW5jdGlvbjo6SlNGdW5jdGlvbihWTSYgdm0sIEZ1bmN0
aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUpCitpbmxpbmUgSlNGdW5j
dGlvbjo6SlNGdW5jdGlvbihWTSYgdm0sIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlLCBKU1Nj
b3BlKiBzY29wZSkKICAgICA6IEJhc2Uodm0sIHNjb3BlLCBzY29wZS0+Z2xvYmFsT2JqZWN0KCkt
PmZ1bmN0aW9uU3RydWN0dXJlKCkpCiAgICAgLCBtX2V4ZWN1dGFibGUodm0sIHRoaXMsIGV4ZWN1
dGFibGUpCiAgICAgLCBtX3JhcmVEYXRhKCkKQEAgLTU0LDYgKzU0LDggQEAgaW5saW5lIEZ1bmN0
aW9uRXhlY3V0YWJsZSogSlNGdW5jdGlvbjo6anNFeGVjdXRhYmxlKCkgY29uc3QKIGlubGluZSBi
b29sIEpTRnVuY3Rpb246OmlzSG9zdEZ1bmN0aW9uKCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9l
eGVjdXRhYmxlKTsKKyAgICBpZiAobV9leGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJs
ZSgpKSAvLyBGSVhNRTogaGFja3kKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIG1f
ZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1R5cGUuaAppbmRleCA0MDMyNmNlMGYzMjlmYTdjN2JiYzk5ZjQ0NjQyOGZlOTZjOTEy
NGIzLi43NmVmZTgyMjQyYWFlMTNlMGU2MTU0YWYwNTIyYzZkODY3MDMwNjVlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaApAQCAtNzQsNiArNzQsOCBAQCBlbnVtIEpTVHlw
ZSA6IHVpbnQ4X3QgewogCiAgICAgTmFtZVNjb3BlT2JqZWN0VHlwZSwKIAorICAgIFdlYkFzc2Vt
Ymx5RXhlY3V0YWJsZVR5cGUsIC8vIEZJWE1FOiBNb3ZlIGl0IGFib3ZlLgorCiAgICAgR2xvYmFs
T2JqZWN0VHlwZSwKICAgICBBY3RpdmF0aW9uT2JqZWN0VHlwZSwKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCmluZGV4IDc2NzQxZGQ4YWVhMzdmZjU3Y2NhNGNmNjM2YmZjMzJiYjQy
OWNjNDEuLjRkNWY1ZGYzNTY5YWM2MjVmOTIzMGM5NGRiMjc4ODgzMDhiOWJjYjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTIyMCw2ICsyMjAsNyBAQCBWTTo6Vk0oVk1U
eXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgZXZhbEV4ZWN1dGFibGVTdHJ1Y3R1
cmUuc2V0KCp0aGlzLCBFdmFsRXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBq
c051bGwoKSkpOwogICAgIHByb2dyYW1FeGVjdXRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgUHJv
Z3JhbUV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAg
ICBmdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBGdW5jdGlvbkV4ZWN1dGFi
bGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICB3ZWJBc3NlbWJs
eUV4ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWJBc3NlbWJseUV4ZWN1dGFibGU6OmNy
ZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICByZWdFeHBTdHJ1Y3R1cmUu
c2V0KCp0aGlzLCBSZWdFeHA6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
ICAgICBzeW1ib2xTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTeW1ib2w6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKICAgICBzeW1ib2xUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMs
IFN5bWJvbFRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCBmNzhmOWViOTY0NjBhZTlmZGJmZjkxNjljMjg0
YTg1ODQ4MTZjNzM5Li4zNzNkNDBkYzdmOThlNWVjNTg1NjhkNGJiNWIzNmQ0ZmY5MTFjNmMxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTI1OSw2ICsyNTksNyBAQCBwdWJsaWM6
CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZXZhbEV4ZWN1dGFibGVTdHJ1Y3R1cmU7CiAgICAgU3Ry
b25nPFN0cnVjdHVyZT4gcHJvZ3JhbUV4ZWN1dGFibGVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0
cnVjdHVyZT4gZnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1
cmU+IHdlYkFzc2VtYmx5RXhlY3V0YWJsZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJl
PiByZWdFeHBTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3ltYm9sU3RydWN0dXJl
OwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN5bWJvbFRhYmxlU3RydWN0dXJlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUpJVENvbXBpbGVyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21KSVRDb21waWxlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTQx
ZmU4MTEzODI1NDY2ZTU1NTk5YWQ3NmVmODQzZTMyZjE0ZTlhMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21KSVRDb21waWxlci5jcHAKQEAgLTAsMCAr
MSwxMDI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
LyoKKyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUg
IkxpY2Vuc2UiKTsKKyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlh
bmNlIHdpdGggdGhlIExpY2Vuc2UuCisgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNl
bnNlIGF0CisKKyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKwor
IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGlu
Zywgc29mdHdhcmUKKyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRl
ZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05T
IE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIFNlZSB0aGUgTGljZW5z
ZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyBs
aW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXYXNtSklUQ29tcGlsZXIuaCIKKworI2luY2x1ZGUgIkpJVENvZGUuaCIKKyNp
bmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNp
bmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgorI2luY2x1ZGUgIlJlZ2lz
dGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIEp1
bXBTY29wZSB7CitwdWJsaWM6CisgICAgSnVtcFNjb3BlKE1hY3JvQXNzZW1ibGVyKiBtYWNyb0Fz
c2VtYmxlcikKKyAgICAgICAgOiBtX21hY3JvQXNzZW1ibGVyKG1hY3JvQXNzZW1ibGVyKQorICAg
ICAgICAsIG1fbGlua2VkKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBKdW1wU2NvcGUoTWFj
cm9Bc3NlbWJsZXIqIG1hY3JvQXNzZW1ibGVyLCBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwm
IGxhYmVsKQorICAgICAgICA6IG1fbWFjcm9Bc3NlbWJsZXIobWFjcm9Bc3NlbWJsZXIpCisgICAg
ICAgICwgbV9saW5rZWQodHJ1ZSkKKyAgICAgICAgLCBtX2xhYmVsKGxhYmVsKQorICAgIHsKKyAg
ICB9CisKKyAgICB2b2lkIGp1bXAoKQorICAgIHsKKyAgICAgICAgaWYgKG1fbGlua2VkKQorICAg
ICAgICAgICAgbV9tYWNyb0Fzc2VtYmxlci0+anVtcChtX2xhYmVsKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV9qdW1wTGlzdC5hcHBlbmQobV9tYWNyb0Fzc2VtYmxlci0+anVtcCgpKTsK
KyAgICB9CisKKyAgICB2b2lkIGxpbmsoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2xpbmtl
ZCk7CisgICAgICAgIG1fanVtcExpc3QubGluayhtX21hY3JvQXNzZW1ibGVyKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgTWFjcm9Bc3NlbWJsZXIqIG1fbWFjcm9Bc3NlbWJsZXI7CisgICAgYm9v
bCBtX2xpbmtlZDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9sYWJlbDsKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgbV9qdW1wTGlzdDsKK307CisKK1JlZlB0cjxKSVRDb2RlPiBK
SVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKFZNJiB2bSwgc2l6ZV90IGZ1bmN0aW9uSW5kZXgp
Cit7CisgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKyAgICAvLyBGSVhNRTogbmVlZCB0byBk
byB0aGlzIQorICAgIC8vIGVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVC
bG9jaywgSlNTdGFjazo6Q29kZUJsb2NrKTsKKworICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlID0gbV9tb2R1bGUtPm1fc2lnbmF0dXJlc1ttX21vZHVsZS0+bV9mdW5jU2lnbmF0dXJlc1tm
dW5jdGlvbkluZGV4XV07CisgICAgbV9jdXJyZW50UmV0dXJuVHlwZSA9IHNpZ25hdHVyZS5yZXR1
cm5UeXBlOworICAgIHBhcnNlQXJndW1lbnRzKHNpZ25hdHVyZSk7CisKKyAgICAvLyBGSVhNRTog
Q2FsY3VsYXRlIHRoZSBhY3R1YWwgaGVpZ2h0LiAoQmUgY2FyZWZ1bCBhYm91dCBjYWxscy4pCisg
ICAgbV9zdGFja0hlaWdodCA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVu
dFJlZ2lzdGVycygpLCBzaWduYXR1cmUuYXJndW1lbnRzLnNpemUoKSArIDgpICogc2l6ZW9mKFJl
Z2lzdGVyKTsKKyAgICBhbGxvY2F0ZVNwYWNlT25TdGFjaygpOworCisgICAgcGFyc2VWYXJzKCk7
CisgICAgcGFyc2VTdG10TGlzdCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih2bSwg
KnRoaXMsIDAsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOworCisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIHdpdGhBcml0eUNoZWNrOworICAgIENvZGVSZWYgcmVzdWx0ID0gRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgKCJCYXNlbGluZSBKSVQgY29kZSBmb3IgV2ViQXNzZW1ibHkiKSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5
Q2hlY2ssIEpJVENvZGU6OkJhc2VsaW5lSklUKSk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OmFs
bG9jYXRlU3BhY2VPblN0YWNrKCkKK3sKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1tX3N0YWNr
SGVpZ2h0KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpk
ZWFsbG9jYXRlU3BhY2VPblN0YWNrKCkKK3sKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1fc3Rh
Y2tIZWlnaHQpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6
OnBhcnNlQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKQoreworICAgIHNpemVf
dCBhcmd1bWVudENvdW50ID0gc2lnbmF0dXJlLmFyZ3VtZW50cy5zaXplKCk7CisgICAgZm9yICh1
aW50MzJfdCBhcmdJbmRleCA9IDA7IGFyZ0luZGV4IDwgYXJndW1lbnRDb3VudDsgKythcmdJbmRl
eCkgeworICAgICAgICBUeXBlIHR5cGUgPSBzaWduYXR1cmUuYXJndW1lbnRzW2FyZ0luZGV4XTsK
KyAgICAgICAgbV9jdXJyZW50TG9jYWxUeXBlcy5hcHBlbmQodHlwZSk7CisgICAgICAgIHN3aXRj
aCAodHlwZSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgICAgIGxvYWQzMihB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAoYXJnSW5kZXggKyAxICsgQ2FsbEZy
YW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6
cmVnVDApOworICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgc3RhY2tBZGRyZXNz
KGFyZ0luZGV4KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNl
IFR5cGU6OkY2NDoKKyAgICAgICAgICAgIGxvYWQ2NChBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCAoYXJnSW5kZXggKyAxICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQo
KSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgdW5i
b3hEb3VibGVXaXRob3V0QXNzZXJ0aW9ucyhHUFJJbmZvOjpyZWdUMCwgRlBSSW5mbzo6ZnBSZWdU
MCk7CisgICAgICAgICAgICBzdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBzdGFja0FkZHJl
c3MoYXJnSW5kZXgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VWYXJzKCkKK3sKKyAgICB1aW50MzJfdCBudW1i
ZXJPZkkzMlZhcnMgPSAwOworICAgIHVpbnQzMl90IG51bWJlck9mRjMyVmFycyA9IDA7CisgICAg
dWludDMyX3QgbnVtYmVyT2ZGNjRWYXJzID0gMDsKKworICAgIFZhclR5cGVzIHZhclR5cGVzOwor
ICAgIFZhclR5cGVzV2l0aEltbSB2YXJUeXBlc1dpdGhJbW07CisgICAgdWludDhfdCBpbW07Cisg
ICAgaWYgKG1fbW9kdWxlLT5tX3JlYWRlci5jb2RlKCZ2YXJUeXBlcywgJnZhclR5cGVzV2l0aElt
bSwgJmltbSkpIHsKKyAgICAgICAgaWYgKHZhclR5cGVzICYgVmFyVHlwZXM6OkkzMikKKyAgICAg
ICAgICAgIG51bWJlck9mSTMyVmFycyA9IG1fbW9kdWxlLT5tX3JlYWRlci5pbW1VMzIoKTsKKyAg
ICAgICAgaWYgKHZhclR5cGVzICYgVmFyVHlwZXM6OkYzMikKKyAgICAgICAgICAgIG51bWJlck9m
RjMyVmFycyA9IG1fbW9kdWxlLT5tX3JlYWRlci5pbW1VMzIoKTsKKyAgICAgICAgaWYgKHZhclR5
cGVzICYgVmFyVHlwZXM6OkY2NCkKKyAgICAgICAgICAgIG51bWJlck9mRjY0VmFycyA9IG1fbW9k
dWxlLT5tX3JlYWRlci5pbW1VMzIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbnVtYmVyT2ZJMzJW
YXJzID0gaW1tOworCisgICAgdWludDMyX3QgbnVtYmVyT2ZWYXJzID0gbnVtYmVyT2ZJMzJWYXJz
ICsgbnVtYmVyT2ZGMzJWYXJzICsgbnVtYmVyT2ZGNjRWYXJzOworICAgIGlmIChudW1iZXJPZlZh
cnMgPiAwKSB7CisgICAgICAgIHVpbnQzMl90IGxvY2FsSW5kZXggPSBtX2N1cnJlbnRMb2NhbFR5
cGVzLnNpemUoKTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mSTMy
VmFyczsgKytpKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRMb2NhbFR5cGVzLmFwcGVuZChUeXBl
OjpJMzIpOworICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIHN0YWNrQWRkcmVz
cyhsb2NhbEluZGV4KyspKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDwgbnVtYmVyT2ZGMzJWYXJzOyArK2kpIHsKKyAgICAgICAgICAgIG1fY3VycmVudExvY2Fs
VHlwZXMuYXBwZW5kKFR5cGU6OkYzMik7CisgICAgICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0z
MigwKSwgc3RhY2tBZGRyZXNzKGxvY2FsSW5kZXgrKykpOworICAgICAgICB9CisgICAgICAgIGZv
ciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkY2NFZhcnM7ICsraSkgeworICAgICAgICAg
ICAgbV9jdXJyZW50TG9jYWxUeXBlcy5hcHBlbmQoVHlwZTo6RjY0KTsKKyAgICAgICAgICAgIHN0
b3JlNjQoVHJ1c3RlZEltbTY0KDApLCBzdGFja0FkZHJlc3MobG9jYWxJbmRleCsrKSk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlU3RtdCgpCit7CisgICAg
U3RtdCBzdG10OworICAgIFN0bXRXaXRoSW1tIHN0bXRXaXRoSW1tOworICAgIHVpbnQ4X3QgaW1t
OworICAgIGlmIChtX21vZHVsZS0+bV9yZWFkZXIuY29kZSgmc3RtdCwgJnN0bXRXaXRoSW1tLCAm
aW1tKSkgeworICAgICAgICBzd2l0Y2ggKHN0bXQpIHsKKyAgICAgICAgY2FzZSBTdG10OjpTZXRM
b2M6CisgICAgICAgICAgICBwYXJzZVNldExvY2FsKDApOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgU3RtdDo6U2V0R2xvOgorICAgICAgICBjYXNlIFN0bXQ6OkkzMlN0b3JlODoK
KyAgICAgICAgY2FzZSBTdG10OjpJMzJTdG9yZU9mZjg6CisgICAgICAgIGNhc2UgU3RtdDo6STMy
U3RvcmUxNjoKKyAgICAgICAgY2FzZSBTdG10OjpJMzJTdG9yZU9mZjE2OgorICAgICAgICBjYXNl
IFN0bXQ6OkkzMlN0b3JlMzI6CisgICAgICAgIGNhc2UgU3RtdDo6STMyU3RvcmVPZmYzMjoKKyAg
ICAgICAgY2FzZSBTdG10OjpGMzJTdG9yZToKKyAgICAgICAgY2FzZSBTdG10OjpGMzJTdG9yZU9m
ZjoKKyAgICAgICAgY2FzZSBTdG10OjpGNjRTdG9yZToKKyAgICAgICAgY2FzZSBTdG10OjpGNjRT
dG9yZU9mZjoKKyAgICAgICAgY2FzZSBTdG10OjpDYWxsSW50OgorICAgICAgICBjYXNlIFN0bXQ6
OkNhbGxJbmQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICBjYXNlIFN0bXQ6OkNhbGxJbXA6CisgICAgICAgICAgICBwYXJzZUNhbGxJbXBvcnQoUmV0
dXJuVHlwZTo6Vm9pZCwgMCk7IC8vIEZJWE1FOiBJcyBpdCByZWFsbHkgVm9pZD8KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0bXQ6OlJldDoKKyAgICAgICAgICAgIHBhcnNlUmV0
dXJuU3RtdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6OkJsb2Nr
OgorICAgICAgICAgICAgcGFyc2VCbG9ja1N0bXQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgY2FzZSBTdG10OjpJZlRoZW46CisgICAgICAgICAgICBwYXJzZUlmU3RtdCgpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6OklmRWxzZToKKyAgICAgICAgICAg
IHBhcnNlSWZFbHNlU3RtdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0
bXQ6OldoaWxlOgorICAgICAgICAgICAgcGFyc2VXaGlsZVN0bXQoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgY2FzZSBTdG10OjpEbzoKKyAgICAgICAgICAgIHBhcnNlRG9TdG10KCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU3RtdDo6TGFiZWw6CisgICAgICAg
ICAgICBwYXJzZUxhYmVsU3RtdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNl
IFN0bXQ6OkJyZWFrOgorICAgICAgICAgICAgcGFyc2VCcmVha1N0bXQoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgY2FzZSBTdG10OjpCcmVha0xhYmVsOgorICAgICAgICAgICAgcGFy
c2VCcmVha0xhYmVsU3RtdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0
bXQ6OkNvbnRpbnVlOgorICAgICAgICAgICAgcGFyc2VDb250aW51ZVN0bXQoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0bXQ6OkNvbnRpbnVlTGFiZWw6CisgICAgICAgICAg
ICBwYXJzZUNvbnRpbnVlTGFiZWxTdG10KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGNhc2UgU3RtdDo6U3dpdGNoOgorICAgICAgICAgICAgcGFyc2VTd2l0Y2hTdG10KCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBzd2l0
Y2ggKHN0bXRXaXRoSW1tKSB7CisgICAgICAgIGNhc2UgU3RtdFdpdGhJbW06OlNldExvYzoKKyAg
ICAgICAgICAgIHBhcnNlU2V0TG9jYWwoaW1tLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFN0bXRXaXRoSW1tOjpTZXRHbG86CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUdldExvY2FsKGludCBkc3QpCit7CisgICAgdWludDMy
X3QgaW1tID0gbV9tb2R1bGUtPm1fcmVhZGVyLmltbVUzMigpOworICAgIHN3aXRjaCAobV9jdXJy
ZW50TG9jYWxUeXBlc1tpbW1dKSB7CisgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgY2FzZSBUeXBl
OjpGMzI6CisgICAgICAgIGxvYWQzMihzdGFja0FkZHJlc3MoaW1tKSwgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgbG9hZDY0KHN0
YWNrQWRkcmVzcyhpbW0pLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIHN0b3JlNjQoR1BSSW5m
bzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQor
Cit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZVNldExvY2FsKHVpbnQzMl90IGltbSwgaW50IGRzdCkK
K3sKKyAgICBUeXBlIHR5cGUgPSBtX2N1cnJlbnRMb2NhbFR5cGVzW2ltbV07CisgICAgcGFyc2VF
eHByKFJldHVyblR5cGUodHlwZSksIGRzdCk7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBUeXBlOjpJMzI6CisgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgIGxvYWQzMih0ZW1wb3Jh
cnlBZGRyZXNzKGRzdCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgc3RvcmUzMihHUFJJbmZv
OjpyZWdUMCwgc3RhY2tBZGRyZXNzKGltbSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5
cGU6OkY2NDoKKyAgICAgICAgbG9hZDY0KHRlbXBvcmFyeUFkZHJlc3MoZHN0KSwgR1BSSW5mbzo6
cmVnVDApOworICAgICAgICBzdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBzdGFja0FkZHJlc3MoaW1t
KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZVNldExv
Y2FsKGludCBkc3QpCit7CisgICAgcGFyc2VTZXRMb2NhbChtX21vZHVsZS0+bV9yZWFkZXIuaW1t
VTMyKCksIGRzdCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlUmV0dXJuU3RtdCgpCit7
CisgICAgc3dpdGNoIChtX2N1cnJlbnRSZXR1cm5UeXBlKSB7CisgICAgY2FzZSBSZXR1cm5UeXBl
OjpJMzI6CisgICAgICAgIHBhcnNlRXhwcihSZXR1cm5UeXBlOjpJMzIsIDApOworICAgICAgICBs
b2FkMzIodGVtcG9yYXJ5QWRkcmVzcygwKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAg
ICAgICBvcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJldHVyblR5cGU6OkYzMjoKKyAg
ICAgICAgcGFyc2VFeHByKFJldHVyblR5cGU6OkYzMiwgMCk7CisgICAgICAgIGxvYWREb3VibGUo
dGVtcG9yYXJ5QWRkcmVzcygwKSwgRlBSSW5mbzo6ZnBSZWdUMCk7IC8vIEZJWE1FOiBUaGlzIGxv
YWRzIDY0IGJpdHMhCisgICAgICAgIGNvbnZlcnRGbG9hdFRvRG91YmxlKEZQUkluZm86OmZwUmVn
VDAsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBib3hEb3VibGUoRlBSSW5mbzo6ZnBSZWdU
MCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJl
dHVyblR5cGU6OkY2NDoKKyAgICAgICAgcGFyc2VFeHByKFJldHVyblR5cGU6OkY2NCwgMCk7Cisg
ICAgICAgIGxvYWREb3VibGUodGVtcG9yYXJ5QWRkcmVzcygwKSwgRlBSSW5mbzo6ZnBSZWdUMCk7
CisgICAgICAgIGJveERvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmV0dXJuVHlwZTo6Vm9pZDoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgZGVhbGxvY2F0ZVNwYWNlT25TdGFjaygpOworICAgIGVt
aXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgcmV0KCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6
OnBhcnNlU3RtdExpc3QoKQoreworICAgIHVpbnQzMl90IG51bWJlck9mU3RtdHMgPSBtX21vZHVs
ZS0+bV9yZWFkZXIuaW1tVTMyKCk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJl
ck9mU3RtdHM7ICsraSkKKyAgICAgICAgcGFyc2VTdG10KCk7Cit9CisKK3ZvaWQgSklUQ29tcGls
ZXI6OnBhcnNlQmxvY2tTdG10KCkKK3sKKyAgICBwYXJzZVN0bXRMaXN0KCk7Cit9CisKK3ZvaWQg
SklUQ29tcGlsZXI6OnBhcnNlSWZTdG10KCkKK3sKKyAgICBwYXJzZUV4cHIoUmV0dXJuVHlwZTo6
STMyLCAwKTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcygwKSwgR1BSSW5mbzo6cmVnVDAp
OworICAgIEp1bXAgZW5kID0gYnJhbmNoVGVzdDMyKFplcm8sIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICBwYXJzZVN0bXQoKTsKKyAgICBlbmQubGluayh0aGlzKTsKK30KKwordm9pZCBKSVRDb21waWxl
cjo6cGFyc2VJZkVsc2VTdG10KCkKK3sKKyAgICBwYXJzZUV4cHIoUmV0dXJuVHlwZTo6STMyLCAw
KTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcygwKSwgR1BSSW5mbzo6cmVnVDApOworICAg
IEp1bXAgZWxzID0gYnJhbmNoVGVzdDMyKFplcm8sIEdQUkluZm86OnJlZ1QwKTsKKyAgICBwYXJz
ZVN0bXQoKTsKKyAgICBKdW1wIGVuZCA9IGp1bXAoKTsKKyAgICBlbHMubGluayh0aGlzKTsKKyAg
ICBwYXJzZVN0bXQoKTsKKyAgICBlbmQubGluayh0aGlzKTsKK30KKwordm9pZCBKSVRDb21waWxl
cjo6cGFyc2VXaGlsZVN0bXQoKQoreworICAgIEp1bXBTY29wZSBjb250aW51ZUp1bXBTY29wZSh0
aGlzLCBsYWJlbCgpKTsKKyAgICBwdXNoQ29udGludWVKdW1wU2NvcGUoJmNvbnRpbnVlSnVtcFNj
b3BlKTsKKworICAgIEp1bXBMaXN0IGJyZWFrSnVtcExpc3Q7CisgICAgcHVzaEJyZWFrSnVtcExp
c3QoJmJyZWFrSnVtcExpc3QpOworCisgICAgcGFyc2VFeHByKFJldHVyblR5cGU6OkkzMiwgMCk7
CisgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoMCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBK
dW1wIGVuZCA9IGJyYW5jaFRlc3QzMihaZXJvLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgcGFyc2VT
dG10KCk7CisgICAgY29udGludWVKdW1wU2NvcGUuanVtcCgpOworICAgIGVuZC5saW5rKHRoaXMp
OworICAgIGJyZWFrSnVtcExpc3QubGluayh0aGlzKTsKKworICAgIHBvcEJyZWFrSnVtcExpc3Qo
KTsKKworICAgIHBvcENvbnRpbnVlSnVtcFNjb3BlKCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6
OnBhcnNlRG9TdG10KCkKK3sKKyAgICBKdW1wU2NvcGUgY29udGludWVKdW1wU2NvcGUodGhpcyk7
CisgICAgcHVzaENvbnRpbnVlSnVtcFNjb3BlKCZjb250aW51ZUp1bXBTY29wZSk7CisKKyAgICBK
dW1wTGlzdCBicmVha0p1bXBMaXN0OworICAgIHB1c2hCcmVha0p1bXBMaXN0KCZicmVha0p1bXBM
aXN0KTsKKworICAgIExhYmVsIHN0YXJ0ID0gbGFiZWwoKTsKKyAgICBwYXJzZVN0bXQoKTsKKyAg
ICBjb250aW51ZUp1bXBTY29wZS5saW5rKCk7CisgICAgcGFyc2VFeHByKFJldHVyblR5cGU6Okkz
MiwgMCk7CisgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoMCksIEdQUkluZm86OnJlZ1QwKTsK
KyAgICBKdW1wIGp1bXBUb1N0YXJ0ID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIEdQUkluZm86OnJl
Z1QwKTsKKyAgICBqdW1wVG9TdGFydC5saW5rVG8oc3RhcnQsIHRoaXMpOworICAgIGJyZWFrSnVt
cExpc3QubGluayh0aGlzKTsKKworICAgIHBvcEJyZWFrSnVtcExpc3QoKTsKKworICAgIHBvcENv
bnRpbnVlSnVtcFNjb3BlKCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlTGFiZWxTdG10
KCkKK3sKKyAgICBMYWJlbCBjb250aW51ZUxhYmVsID0gbGFiZWwoKTsKKyAgICBKdW1wTGlzdCBi
cmVha0p1bXBMaXN0OworICAgIHB1c2hDb250aW51ZUxhYmVsTGFiZWwoJmNvbnRpbnVlTGFiZWwp
OworICAgIHB1c2hCcmVha0xhYmVsSnVtcExpc3QoJmJyZWFrSnVtcExpc3QpOworICAgIHBhcnNl
U3RtdCgpOworICAgIGJyZWFrSnVtcExpc3QubGluayh0aGlzKTsKKyAgICBwb3BCcmVha0xhYmVs
SnVtcExpc3QoKTsKKyAgICBwb3BDb250aW51ZUxhYmVsTGFiZWwoKTsKK30KKwordm9pZCBKSVRD
b21waWxlcjo6cGFyc2VCcmVha1N0bXQoKQoreworICAgIHRvcEJyZWFrSnVtcExpc3QoKS0+YXBw
ZW5kKGp1bXAoKSk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlQnJlYWtMYWJlbFN0bXQo
KQoreworICAgIHVpbnQzMl90IGluZGV4ID0gbV9tb2R1bGUtPm1fcmVhZGVyLmltbVUzMigpOwor
ICAgIGJyZWFrTGFiZWxKdW1wTGlzdChpbmRleCktPmFwcGVuZChqdW1wKCkpOworfQorCit2b2lk
IEpJVENvbXBpbGVyOjpwYXJzZUNvbnRpbnVlU3RtdCgpCit7CisgICAgdG9wQ29udGludWVKdW1w
U2NvcGUoKS0+anVtcCgpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUNvbnRpbnVlTGFi
ZWxTdG10KCkKK3sKKyAgICB1aW50MzJfdCBpbmRleCA9IG1fbW9kdWxlLT5tX3JlYWRlci5pbW1V
MzIoKTsKKyAgICBqdW1wKCpjb250aW51ZUxhYmVsTGFiZWwoaW5kZXgpKTsKK30KKwordm9pZCBK
SVRDb21waWxlcjo6cGFyc2VTd2l0Y2hTdG10KCkKK3sKKyAgICBKdW1wTGlzdCBicmVha0p1bXBM
aXN0OworICAgIHB1c2hCcmVha0p1bXBMaXN0KCZicmVha0p1bXBMaXN0KTsKKworICAgIHVpbnQz
Ml90IG51bWJlck9mQ2FzZXMgPSBtX21vZHVsZS0+bV9yZWFkZXIuaW1tVTMyKCk7CisgICAgcGFy
c2VFeHByKFJldHVyblR5cGU6OkkzMiwgMCk7CisgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3Mo
MCksIEdQUkluZm86OnJlZ1QwKTsKKworICAgIEp1bXAgdGFibGUgPSBqdW1wKCk7CisKKyAgICBW
ZWN0b3I8TGFiZWw+IGxhYmVsczsKKyAgICBWZWN0b3I8aW50MzJfdD4gaW1tczsKKyAgICBMYWJl
bCBkZWZhdWx0TGFiZWw7CisgICAgYm9vbCBoYXNEZWZhdWx0ID0gZmFsc2U7CisKKyAgICBmb3Ig
KHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZDYXNlczsgKytpKSB7CisgICAgICAgIHN3aXRj
aCAobV9tb2R1bGUtPm1fcmVhZGVyLnN3aXRjaENhc2UoKSkgeworICAgICAgICBjYXNlIFN3aXRj
aENhc2U6OkNhc2UwOgorICAgICAgICAgICAgbGFiZWxzLmFwcGVuZChsYWJlbCgpKTsKKyAgICAg
ICAgICAgIGltbXMuYXBwZW5kKG1fbW9kdWxlLT5tX3JlYWRlci5pbW1TMzIoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTd2l0Y2hDYXNlOjpDYXNlMToKKyAgICAgICAgICAg
IGxhYmVscy5hcHBlbmQobGFiZWwoKSk7CisgICAgICAgICAgICBpbW1zLmFwcGVuZChtX21vZHVs
ZS0+bV9yZWFkZXIuaW1tUzMyKCkpOworICAgICAgICAgICAgcGFyc2VTdG10KCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTd2l0Y2hDYXNlOjpDYXNlTjoKKyAgICAgICAgICAg
IGxhYmVscy5hcHBlbmQobGFiZWwoKSk7CisgICAgICAgICAgICBpbW1zLmFwcGVuZChtX21vZHVs
ZS0+bV9yZWFkZXIuaW1tUzMyKCkpOworICAgICAgICAgICAgcGFyc2VTdG10TGlzdCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3dpdGNoQ2FzZTo6RGVmYXVsdDA6CisgICAg
ICAgICAgICBkZWZhdWx0TGFiZWwgPSBsYWJlbCgpOworICAgICAgICAgICAgaGFzRGVmYXVsdCA9
IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTd2l0Y2hDYXNlOjpEZWZh
dWx0MToKKyAgICAgICAgICAgIGRlZmF1bHRMYWJlbCA9IGxhYmVsKCk7CisgICAgICAgICAgICBo
YXNEZWZhdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHBhcnNlU3RtdCgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgU3dpdGNoQ2FzZTo6RGVmYXVsdE46CisgICAgICAgICAgICBk
ZWZhdWx0TGFiZWwgPSBsYWJlbCgpOworICAgICAgICAgICAgaGFzRGVmYXVsdCA9IHRydWU7Cisg
ICAgICAgICAgICBwYXJzZVN0bXRMaXN0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBKdW1wIGVuZCA9IGp1bXAoKTsKKyAgICB0YWJsZS5saW5rKHRo
aXMpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYWJlbHMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgSnVtcCBqbXAgPSBicmFuY2gzMihFcXVhbCwgR1BSSW5mbzo6cmVnVDAsIFRydXN0
ZWRJbW0zMihpbW1zW2ldKSk7CisgICAgICAgIGptcC5saW5rVG8obGFiZWxzW2ldLCB0aGlzKTsK
KyAgICB9CisgICAgaWYgKGhhc0RlZmF1bHQpCisgICAgICAgIGp1bXAoZGVmYXVsdExhYmVsKTsK
KworICAgIGVuZC5saW5rKHRoaXMpOworCisgICAgYnJlYWtKdW1wTGlzdC5saW5rKHRoaXMpOwor
ICAgIHBvcEJyZWFrSnVtcExpc3QoKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VFeHBy
KFJldHVyblR5cGUgclR5cGUsIGludCBkc3QpCit7CisgICAgc3dpdGNoIChyVHlwZSkgeworICAg
IGNhc2UgUmV0dXJuVHlwZTo6STMyOgorICAgICAgICBwYXJzZUV4cHJJMzIoZHN0KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpGNjQ6CisgICAgICAgIHBhcnNlRXhwckY2
NChkc3QpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VF
eHBySTMyKGludCBkc3QpCit7CisgICAgSTMyIGkzMjsKKyAgICBJMzJXaXRoSW1tIGkzMldpdGhJ
bW07CisgICAgdWludDhfdCBpbW07CisKKyAgICBpZiAobV9tb2R1bGUtPm1fcmVhZGVyLmNvZGUo
JmkzMiwgJmkzMldpdGhJbW0sICZpbW0pKSB7CisgICAgICAgIHN3aXRjaCAoaTMyKSB7CisgICAg
ICAgIGNhc2UgSTMyOjpMaXRJbW06CisgICAgICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMiht
X21vZHVsZS0+bV9yZWFkZXIuaW1tVTMyKCkpLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpMaXRQb29sOgorICAgICAgICBjYXNl
IEkzMjo6R2V0TG9jOgorICAgICAgICAgICAgcGFyc2VHZXRMb2NhbChkc3QpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpHZXRHbG86CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNlIEkzMjo6U2V0TG9jOgorICAgICAg
ICAgICAgcGFyc2VTZXRMb2NhbChkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSTMyOjpTZXRHbG86CisgICAgICAgIGNhc2UgSTMyOjpTTG9hZDg6CisgICAgICAgIGNhc2Ug
STMyOjpTTG9hZE9mZjg6CisgICAgICAgIGNhc2UgSTMyOjpVTG9hZDg6CisgICAgICAgIGNhc2Ug
STMyOjpVTG9hZE9mZjg6CisgICAgICAgIGNhc2UgSTMyOjpTTG9hZDE2OgorICAgICAgICBjYXNl
IEkzMjo6U0xvYWRPZmYxNjoKKyAgICAgICAgY2FzZSBJMzI6OlVMb2FkMTY6CisgICAgICAgIGNh
c2UgSTMyOjpVTG9hZE9mZjE2OgorICAgICAgICBjYXNlIEkzMjo6TG9hZDMyOgorICAgICAgICBj
YXNlIEkzMjo6TG9hZE9mZjMyOgorICAgICAgICBjYXNlIEkzMjo6U3RvcmU4OgorICAgICAgICBj
YXNlIEkzMjo6U3RvcmVPZmY4OgorICAgICAgICBjYXNlIEkzMjo6U3RvcmUxNjoKKyAgICAgICAg
Y2FzZSBJMzI6OlN0b3JlT2ZmMTY6CisgICAgICAgIGNhc2UgSTMyOjpTdG9yZTMyOgorICAgICAg
ICBjYXNlIEkzMjo6U3RvcmVPZmYzMjoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIGNhc2UgSTMyOjpDYWxsSW50OgorICAgICAgICAgICAgcGFyc2VD
YWxsSW50ZXJuYWwoUmV0dXJuVHlwZTo6STMyLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSTMyOjpDYWxsSW5kOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBJMzI6OkNhbGxJbXA6CisgICAgICAgICAgICBwYXJz
ZUNhbGxJbXBvcnQoUmV0dXJuVHlwZTo6STMyLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSTMyOjpDb25kOgorICAgICAgICAgICAgcGFyc2VDb25kKFJldHVyblR5cGU6
OkkzMiwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6Q29tbWE6
CisgICAgICAgICAgICBwYXJzZUNvbW1hKFJldHVyblR5cGU6OkkzMiwgZHN0KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6RnJvbUYzMjoKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgSTMyOjpGcm9tRjY0OgorICAg
ICAgICAgICAgcGFyc2VFeHByRjY0KGRzdCk7CisgICAgICAgICAgICBsb2FkRG91YmxlKHRlbXBv
cmFyeUFkZHJlc3MoZHN0KSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICB0cnVuY2F0
ZURvdWJsZVRvSW50MzIoRlBSSW5mbzo6ZnBSZWdUMCwgR1BSSW5mbzo6cmVnVDApOworICAgICAg
ICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6TmVnOgorICAgICAgICAgICAgcGFy
c2VVbmFyeU9wKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGkzMiksIFJldHVyblR5cGU6OkkzMiwgZHN0
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6QWRkOgorICAgICAgICBj
YXNlIEkzMjo6U3ViOgorICAgICAgICBjYXNlIEkzMjo6TXVsOgorICAgICAgICAgICAgcGFyc2VC
aW5hcnlPcChzdGF0aWNfY2FzdDx1aW50OF90PihpMzIpLCBSZXR1cm5UeXBlOjpJMzIsIGRzdCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlNEaXY6CisgICAgICAgIGNh
c2UgSTMyOjpVRGl2OgorICAgICAgICBjYXNlIEkzMjo6U01vZDoKKyAgICAgICAgY2FzZSBJMzI6
OlVNb2Q6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICBjYXNlIEkzMjo6Qml0Tm90OgorICAgICAgICAgICAgcGFyc2VVbmFyeU9wKHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KGkzMiksIFJldHVyblR5cGU6OkkzMiwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEkzMjo6Qml0T3I6CisgICAgICAgIGNhc2UgSTMyOjpCaXRBbmQ6Cisg
ICAgICAgIGNhc2UgSTMyOjpCaXRYb3I6CisgICAgICAgICAgICBwYXJzZUJpbmFyeU9wKHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KGkzMiksIFJldHVyblR5cGU6OkkzMiwgZHN0KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6THNoOgorICAgICAgICBjYXNlIEkzMjo6QXJpdGhS
c2g6CisgICAgICAgIGNhc2UgSTMyOjpMb2dpY1JzaDoKKyAgICAgICAgY2FzZSBJMzI6OkNsejoK
KyAgICAgICAgY2FzZSBJMzI6OkxvZ2ljTm90OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBJMzI6OkVxSTMyOgorICAgICAgICAgICAgcGFy
c2VSZWxhdGlvbmFsT3BJMzIoRXF1YWwsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBJMzI6OkVxRjMyOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgY2FzZSBJMzI6OkVxRjY0OgorICAgICAgICAgICAgcGFyc2VSZWxhdGlv
bmFsT3BGNjQoRG91YmxlRXF1YWwsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJMzI6Ok5FcUkzMjoKKyAgICAgICAgICAgIHBhcnNlUmVsYXRpb25hbE9wSTMyKE5vdEVx
dWFsLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpORXFGMzI6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNl
IEkzMjo6TkVxRjY0OgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3BGNjQoRG91YmxlTm90
RXF1YWwsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlNMZVRo
STMyOgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3BJMzIoTGVzc1RoYW4sIGRzdCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlVMZVRoSTMyOgorICAgICAgICAg
ICAgcGFyc2VSZWxhdGlvbmFsT3BJMzIoQmVsb3csIGRzdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBJMzI6OkxlVGhGMzI6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNlIEkzMjo6TGVUaEY2NDoKKyAgICAgICAgICAgIHBh
cnNlUmVsYXRpb25hbE9wRjY0KERvdWJsZUxlc3NUaGFuLCBkc3QpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgSTMyOjpTTGVFcUkzMjoKKyAgICAgICAgICAgIHBhcnNlUmVsYXRp
b25hbE9wSTMyKExlc3NUaGFuT3JFcXVhbCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEkzMjo6VUxlRXFJMzI6CisgICAgICAgICAgICBwYXJzZVJlbGF0aW9uYWxPcEkz
MihCZWxvd09yRXF1YWwsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
MzI6OkxlRXFGMzI6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBjYXNlIEkzMjo6TGVFcUY2NDoKKyAgICAgICAgICAgIHBhcnNlUmVsYXRpb25hbE9w
RjY0KERvdWJsZUxlc3NUaGFuT3JFcXVhbCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEkzMjo6U0dyVGhJMzI6CisgICAgICAgICAgICBwYXJzZVJlbGF0aW9uYWxPcEkz
MihHcmVhdGVyVGhhbiwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkz
Mjo6VUdyVGhJMzI6CisgICAgICAgICAgICBwYXJzZVJlbGF0aW9uYWxPcEkzMihBYm92ZSwgZHN0
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6R3JUaEYzMjoKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgSTMyOjpH
clRoRjY0OgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3BGNjQoRG91YmxlR3JlYXRlclRo
YW4sIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlNHckVxSTMy
OgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3BJMzIoR3JlYXRlclRoYW5PckVxdWFsLCBk
c3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpVR3JFcUkzMjoKKyAg
ICAgICAgICAgIHBhcnNlUmVsYXRpb25hbE9wSTMyKEFib3ZlT3JFcXVhbCwgZHN0KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6R3JFcUYzMjoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgSTMyOjpHckVxRjY0Ogor
ICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3BGNjQoRG91YmxlR3JlYXRlclRoYW5PckVxdWFs
LCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpTTWluOgorICAg
ICAgICBjYXNlIEkzMjo6VU1pbjoKKyAgICAgICAgY2FzZSBJMzI6OlNNYXg6CisgICAgICAgIGNh
c2UgSTMyOjpVTWF4OgorICAgICAgICBjYXNlIEkzMjo6QWJzOgorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIHN3aXRjaCAoaTMyV2l0aEltbSkgeworICAgICAgICBjYXNlIEkz
MldpdGhJbW06OkxpdEltbToKKyAgICAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGltbSks
IHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJMzJXaXRoSW1tOjpMaXRQb29sOgorICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIo
bV9tb2R1bGUtPm1fY29uc3RhbnRJMzJzW2ltbV0pLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyV2l0aEltbTo6R2V0TG9jOgorICAg
ICAgICAgICAgbG9hZDMyKHN0YWNrQWRkcmVzcyhpbW0pLCBHUFJJbmZvOjpyZWdUMCk7CisgICAg
ICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEpJVENv
bXBpbGVyOjpwYXJzZUV4cHJGNjQoaW50IGRzdCkKK3sKKyAgICBGNjQgZjY0OworICAgIEY2NFdp
dGhJbW0gZjY0V2l0aEltbTsKKyAgICB1aW50OF90IGltbTsKKworICAgIGlmIChtX21vZHVsZS0+
bV9yZWFkZXIuY29kZSgmZjY0LCAmZjY0V2l0aEltbSwgJmltbSkpIHsKKyAgICAgICAgc3dpdGNo
IChmNjQpIHsKKyAgICAgICAgY2FzZSBGNjQ6OkxpdEltbToKKyAgICAgICAgICAgIHN0b3JlNjQo
VHJ1c3RlZEltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NChtX21vZHVsZS0+bV9yZWFkZXIu
Zml4ZWRXaWR0aDxkb3VibGU+KCkpKSwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2NDo6TmVnOgorICAgICAgICAgICAgcGFyc2VVbmFy
eU9wKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGY2NCksIFJldHVyblR5cGU6OkY2NCwgZHN0KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2NDo6QWRkOgorICAgICAgICBjYXNlIEY2
NDo6U3ViOgorICAgICAgICBjYXNlIEY2NDo6TXVsOgorICAgICAgICBjYXNlIEY2NDo6RGl2Ogor
ICAgICAgICAgICAgcGFyc2VCaW5hcnlPcChzdGF0aWNfY2FzdDx1aW50OF90PihmNjQpLCBSZXR1
cm5UeXBlOjpGNjQsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGNjQ6
OlNxcnQ6CisgICAgICAgICAgICBwYXJzZVVuYXJ5T3Aoc3RhdGljX2Nhc3Q8dWludDhfdD4oZjY0
KSwgUmV0dXJuVHlwZTo6RjY0LCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRjY0OjpDYWxsSW50OgorICAgICAgICAgICAgcGFyc2VDYWxsSW50ZXJuYWwoUmV0dXJuVHlw
ZTo6RjY0LCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRjY0OjpDYWxs
SW1wOgorICAgICAgICAgICAgcGFyc2VDYWxsSW1wb3J0KFJldHVyblR5cGU6OkY2NCwgZHN0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IHN3aXRjaCAoZjY0V2l0aEltbSkgeworICAgICAgICBjYXNlIEY2NFdpdGhJbW06OkxpdFBvb2w6
CisgICAgICAgICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChyZWludGVycHJldERvdWJsZVRvSW50
NjQobV9tb2R1bGUtPm1fY29uc3RhbnRGNjRzW2ltbV0pKSwgdGVtcG9yYXJ5QWRkcmVzcyhkc3Qp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2NFdpdGhJbW06OkdldExvYzoK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBsb2FkRG91YmxlL3N0b3JlRG91YmxlPworICAgICAgICAg
ICAgbG9hZDY0KHN0YWNrQWRkcmVzcyhpbW0pLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAg
ICBzdG9yZTY0KEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgZ2V0SW50ZXJuYWxGdW5jdGlvbihFeGVjU3RhdGUqLCBNb2R1bGUqIG1vZHVsZSwgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCkKK3sKKyAgICAvLyBUT0RPOiBVc2UgdGhlc2UgdHdvIGxpbmVz
PworICAgIC8vIFZNKiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgLy8gTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICByZXR1cm4gbW9kdWxlLT5pbnRlcm5hbEZ1bmN0
aW9uKGZ1bmN0aW9uSW5kZXgpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUNhbGxJbnRl
cm5hbChSZXR1cm5UeXBlIHJUeXBlLCBpbnQgZHN0KQoreworICAgIHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXggPSBtX21vZHVsZS0+bV9yZWFkZXIuaW1tVTMyKCk7CisgICAgY29uc3QgU2lnbmF0dXJl
JiBzaWduYXR1cmUgPSBtX21vZHVsZS0+bV9zaWduYXR1cmVzW21fbW9kdWxlLT5tX2Z1bmNTaWdu
YXR1cmVzW2Z1bmN0aW9uSW5kZXhdXTsKKyAgICBjb25zdCBWZWN0b3I8VHlwZT4mIGFyZ3VtZW50
cyA9IHNpZ25hdHVyZS5hcmd1bWVudHM7CisgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBhcmd1
bWVudHMuc2l6ZSgpOworICAgIC8vIEZJWE1FOiByVHlwZSBpcyByZWR1bmRhbnQgd2l0aCBzaWdu
YXR1cmUucmV0dXJuVHlwZQorCisgICAgcGFyc2VDYWxsQXJndW1lbnRzKGFyZ3VtZW50cywgZHN0
KTsKKworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGFyZ3VtZW50Q291bnQgKyAxKSwgQWRkcmVz
cyhzdGFja1BvaW50ZXJSZWdpc3RlciwgSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0IC0gc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpKSk7CisKKyAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwp
CisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLW1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShUcnVzdGVkSW1tUHRyKG1fbW9kdWxlKSwgVHJ1c3RlZEltbTMyKGZ1bmN0aW9uSW5kZXgp
KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihnZXRJbnRlcm5h
bEZ1bmN0aW9uKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGNhbGwoR1BSSW5mbzo6bm9u
QXJnR1BSMCk7CisgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQorICAgICAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgbW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
R1BSSW5mbzo6cmVnVDApOyAvLyByZWdUMCBob2xkcyBjYWxsZWUuCisgICAgc3RvcmU2NChHUFJJ
bmZvOjpyZWdUMCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgSlNTdGFjazo6Q2FsbGVl
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSAtIHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSkpOworCisgICAgY2FsbEZ1bmN0aW9uU2xvd0Nhc2UoclR5cGUsIGRzdCk7Cit9CisK
K3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBnZXRJbXBvcnRlZEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgTW9kdWxlKiBtb2R1bGUsIHVpbnQzMl90IGZ1bmNJbXBvcnRJbmRleCkKK3sKKyAgICAvLyBU
T0RPOiBVc2UgdGhlc2UgdHdvIGxpbmVzPworICAgIC8vIFZNKiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgLy8gTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICBjb25z
dCBTdHJpbmcmIGZ1bmN0aW9uSW1wb3J0TmFtZSA9IG1vZHVsZS0+ZnVuY3Rpb25JbXBvcnROYW1l
KGZ1bmNJbXBvcnRJbmRleCk7CisKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMtPnZtKCksIGZ1bmN0aW9uSW1wb3J0TmFtZSk7
CisgICAgUHJvcGVydHlTbG90IHNsb3QoZ2xvYmFsT2JqZWN0KTsKKworICAgIGlmICghZ2xvYmFs
T2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnRpZmllciwgc2xvdCkpIHsKKyAgICAg
ICAgLy8gVE9ETzogZG8gc29tZXRoaW5nIQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbid0
IGZpbmQgYSBmdW5jdGlvbiBuYW1lZCBcIiVzXCIuXG4iLCBmdW5jdGlvbkltcG9ydE5hbWUudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgIGFib3J0KCk7CisgICAgfQorCisgICAgSlNWYWx1ZSB2YWx1
ZSA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnRpZmllcik7CisgICAgaWYgKCF2YWx1ZS5pc0Z1
bmN0aW9uKCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJcIiVzXCIgaXMgbm90IGEgZnVu
Y3Rpb24uXG4iLCBmdW5jdGlvbkltcG9ydE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGFi
b3J0KCk7CisgICAgfQorCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7Cit9CisK
K3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlQ2FsbEltcG9ydChSZXR1cm5UeXBlIHJUeXBlLCBpbnQg
ZHN0KQoreworICAgIHVpbnQzMl90IGZ1bmNJbXBvcnRTaWduYXR1cmVJbmRleCA9IG1fbW9kdWxl
LT5tX3JlYWRlci5pbW1VMzIoKTsKKyAgICBjb25zdCBNb2R1bGU6OkZ1bmNJbXBvcnRTaWduYXR1
cmUmIGZ1bmNJbXBvcnRTaWduYXR1cmUgPSBtX21vZHVsZS0+bV9mdW5jSW1wb3J0U2lnbmF0dXJl
c1tmdW5jSW1wb3J0U2lnbmF0dXJlSW5kZXhdOworICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlID0gbV9tb2R1bGUtPm1fc2lnbmF0dXJlc1tmdW5jSW1wb3J0U2lnbmF0dXJlLnNpZ25hdHVy
ZUluZGV4XTsKKyAgICBjb25zdCBWZWN0b3I8VHlwZT4mIGFyZ3VtZW50cyA9IHNpZ25hdHVyZS5h
cmd1bWVudHM7CisgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBhcmd1bWVudHMuc2l6ZSgpOwor
ICAgIC8vIEZJWE1FOiByVHlwZSBpcyByZWR1bmRhbnQgd2l0aCBzaWduYXR1cmUucmV0dXJuVHlw
ZQorCisgICAgcGFyc2VDYWxsQXJndW1lbnRzKGFyZ3VtZW50cywgZHN0KTsKKworICAgIHN0b3Jl
MzIoVHJ1c3RlZEltbTMyKGFyZ3VtZW50Q291bnQgKyAxKSwgQWRkcmVzcyhzdGFja1BvaW50ZXJS
ZWdpc3RlciwgSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7
CisKKyAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCisgICAgICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoLW1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1t
UHRyKG1fbW9kdWxlKSwgVHJ1c3RlZEltbTMyKGZ1bmNJbXBvcnRTaWduYXR1cmUuZnVuY0ltcG9y
dEluZGV4KSk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oZ2V0
SW1wb3J0ZWRGdW5jdGlvbikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBjYWxsKEdQUklu
Zm86Om5vbkFyZ0dQUjApOworICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkK
KyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2Fs
bCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIG1vdmUoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIEdQUkluZm86OnJlZ1QwKTsgLy8gcmVnVDAgaG9sZHMgY2FsbGVlLgorICAgIHN0b3Jl
NjQoR1BSSW5mbzo6cmVnVDAsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIEpTU3RhY2s6
OkNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBzaXplb2YoQ2Fs
bGVyRnJhbWVBbmRQQykpKTsKKworICAgIGNhbGxGdW5jdGlvblNsb3dDYXNlKHJUeXBlLCBkc3Qp
OworfQorCit2b2lkIEpJVENvbXBpbGVyOjpjYWxsRnVuY3Rpb25TbG93Q2FzZShSZXR1cm5UeXBl
IHJUeXBlLCBpbnQgZHN0KQoreworICAgIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciA9IGxpbmtU
aHVua0dlbmVyYXRvckZvcihDb2RlRm9yQ2FsbCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1
aXJlZCk7CisKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEdQUkluZm86OnJlZ1Qy
KTsgLy8gVE9ETzogdXNlIENhbGxMaW5rSW5mbworCisgICAgQ29kZVB0ciBwdHIgPSBtX3ZtLT5n
ZXRDVElTdHViKGdlbmVyYXRvcikuY29kZSgpOworCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKHB0
ci5leGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisKKyAgICBjYWxs
KEdQUkluZm86Om5vbkFyZ0dQUjApOworCisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtbV9zdGFj
a0hlaWdodCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7IC8vIEZJWE1FOiBoYWNreQorCisgICAgLy8gRklYTUU6IENhbiB3ZSByZWFsbHkgdXNlIHJl
dHVyblZhbHVlR1BSPworICAgIHN3aXRjaCAoclR5cGUpIHsKKyAgICBjYXNlIFJldHVyblR5cGU6
OkkzMjoKKyAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgdGVtcG9yYXJ5
QWRkcmVzcyhkc3QpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpGNjQ6
CisgICAgICAgIHVuYm94RG91YmxlV2l0aG91dEFzc2VydGlvbnMoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBzdG9yZURvdWJsZShGUFJJbmZvOjpm
cFJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFJldHVyblR5cGU6OlZvaWQ6CisgICAgICAgIGJyZWFrOyAvLyBUT0RPOiBzdXJlPworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBK
SVRDb21waWxlcjo6cGFyc2VDYWxsQXJndW1lbnRzKGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJndW1l
bnRzLCBpbnQgZHN0KQoreworICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gYXJndW1lbnRzLnNp
emUoKTsKKyAgICBzaXplX3Qgb2Zmc2V0ID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNr
QWxpZ25tZW50UmVnaXN0ZXJzKCksIGRzdCArIGFyZ3VtZW50Q291bnQgKyBtX2N1cnJlbnRMb2Nh
bFR5cGVzLnNpemUoKSkgLSBtX2N1cnJlbnRMb2NhbFR5cGVzLnNpemUoKTsgLy8gRklYTUU6IGJl
dHRlciBuYW1lCisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsr
aSkgeworICAgICAgICBzd2l0Y2ggKGFyZ3VtZW50c1tpXSkgeworICAgICAgICBjYXNlIFR5cGU6
OkkzMjoKKyAgICAgICAgICAgIHBhcnNlRXhwcihSZXR1cm5UeXBlOjpJMzIsIG9mZnNldCk7Cisg
ICAgICAgICAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhvZmZzZXQpLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgICAgICAgICBvcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgR1BS
SW5mbzo6cmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgdGVtcG9y
YXJ5QWRkcmVzcyhvZmZzZXQgLSBpIC0gMSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAgICAgcGFyc2VFeHByKFJldHVyblR5cGU6OkY2NCwg
b2Zmc2V0KTsKKyAgICAgICAgICAgIGxvYWREb3VibGUodGVtcG9yYXJ5QWRkcmVzcyhvZmZzZXQp
LCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGJveERvdWJsZShGUFJJbmZvOjpmcFJl
Z1QwLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KEdQUkluZm86OnJlZ1Qw
LCB0ZW1wb3JhcnlBZGRyZXNzKG9mZnNldCAtIGkgLSAxKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtKG9mZnNldCArIG1fY3Vy
cmVudExvY2FsVHlwZXMuc2l6ZSgpICsgMykgKiA4IC0gOCksIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7IC8vIEZJWE1FOiBoYWNreQorfQorCit2b2lk
IEpJVENvbXBpbGVyOjpwYXJzZUJpbmFyeU9wKHVpbnQ4X3Qgb3AsIFJldHVyblR5cGUgclR5cGUs
IGludCBkc3QpCit7CisgICAgcGFyc2VFeHByKHJUeXBlLCBkc3QpOworICAgIHBhcnNlRXhwcihy
VHlwZSwgZHN0ICsgMSk7CisgICAgc3dpdGNoIChyVHlwZSkgeworICAgIGNhc2UgUmV0dXJuVHlw
ZTo6STMyOgorICAgICAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpy
ZWdUMCk7CisgICAgICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKGRzdCArIDEpLCBHUFJJbmZv
OjpyZWdUMSk7CisgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8STMyPihvcCkpIHsKKyAgICAg
ICAgY2FzZSBJMzI6OkFkZDoKKyAgICAgICAgICAgIGFkZDMyKEdQUkluZm86OnJlZ1QxLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlN1YjoK
KyAgICAgICAgICAgIHN1YjMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6Ok11bDoKKyAgICAgICAgICAgIG11bDMy
KEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJMzI6OkJpdE9yOgorICAgICAgICAgICAgb3IzMihHUFJJbmZvOjpyZWdUMSwg
R1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpC
aXRBbmQ6CisgICAgICAgICAgICBhbmQzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpCaXRYb3I6CisgICAgICAg
ICAgICB4b3IzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgfQorICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlB
ZGRyZXNzKGRzdCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJldHVyblR5cGU6OkY2NDoK
KyAgICAgICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKGRzdCksIEZQUkluZm86OmZwUmVn
VDApOworICAgICAgICBsb2FkRG91YmxlKHRlbXBvcmFyeUFkZHJlc3MoZHN0ICsgMSksIEZQUklu
Zm86OmZwUmVnVDEpOworICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PEY2ND4ob3ApKSB7Cisg
ICAgICAgIGNhc2UgRjY0OjpBZGQ6CisgICAgICAgICAgICBhZGREb3VibGUoRlBSSW5mbzo6ZnBS
ZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBGNjQ6OlN1YjoKKyAgICAgICAgICAgIHN1YkRvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJ
bmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2NDo6TXVs
OgorICAgICAgICAgICAgbXVsRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVn
VDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRjY0OjpEaXY6CisgICAgICAg
ICAgICBkaXZEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIHN0b3JlRG91YmxlKEZQUkluZm86OmZwUmVn
VDAsIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lk
IEpJVENvbXBpbGVyOjpwYXJzZVVuYXJ5T3AodWludDhfdCBvcCwgUmV0dXJuVHlwZSByVHlwZSwg
aW50IGRzdCkKK3sKKyAgICBwYXJzZUV4cHIoclR5cGUsIGRzdCk7CisgICAgc3dpdGNoIChyVHlw
ZSkgeworICAgIGNhc2UgUmV0dXJuVHlwZTo6STMyOgorICAgICAgICBsb2FkMzIodGVtcG9yYXJ5
QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nh
c3Q8STMyPihvcCkpIHsKKyAgICAgICAgY2FzZSBJMzI6Ok5lZzoKKyAgICAgICAgICAgIG5lZzMy
KEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6
Qml0Tm90OgorICAgICAgICAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKC0xKSwgR1BSSW5mbzo6cmVn
VDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBzdG9yZTMyKEdQUkluZm86
OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFJldHVyblR5cGU6OkY2NDoKKyAgICAgICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKGRz
dCksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PEY2ND4o
b3ApKSB7CisgICAgICAgIGNhc2UgRjY0OjpOZWc6CisgICAgICAgICAgICBuZWdhdGVEb3VibGUo
RlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBGNjQ6OlNxcnQ6CisgICAgICAgICAgICBzcXJ0RG91YmxlKEZQUkluZm86
OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQor
ICAgICAgICBzdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCB0ZW1wb3JhcnlBZGRyZXNzKGRz
dCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VSZWxh
dGlvbmFsT3BJMzIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIGludCBkc3QpCit7Cisg
ICAgcGFyc2VFeHByKFJldHVyblR5cGU6OkkzMiwgZHN0KTsKKyAgICBwYXJzZUV4cHIoUmV0dXJu
VHlwZTo6STMyLCBkc3QgKyAxKTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBH
UFJJbmZvOjpyZWdUMCk7CisgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoZHN0ICsgMSksIEdQ
UkluZm86OnJlZ1QxKTsKKyAgICBjb21wYXJlMzIoY29uZGl0aW9uLCBHUFJJbmZvOjpyZWdUMCwg
R1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICBzdG9yZTMyKEdQUkluZm86OnJl
Z1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJz
ZVJlbGF0aW9uYWxPcEY2NChEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBpbnQgZHN0KQorewor
ICAgIHBhcnNlRXhwcihSZXR1cm5UeXBlOjpGNjQsIGRzdCk7CisgICAgcGFyc2VFeHByKFJldHVy
blR5cGU6OkY2NCwgZHN0ICsgMSk7CisgICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKGRz
dCksIEZQUkluZm86OmZwUmVnVDApOworICAgIGxvYWREb3VibGUodGVtcG9yYXJ5QWRkcmVzcyhk
c3QgKyAxKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgSnVtcCB0cnVlQ2FzZSA9IGJyYW5jaERv
dWJsZShjb25kaXRpb24sIEZQUkluZm86OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDEpOworICAg
IHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgIEp1
bXAgZW5kID0ganVtcCgpOworICAgIHRydWVDYXNlLmxpbmsodGhpcyk7CisgICAgc3RvcmUzMihU
cnVzdGVkSW1tMzIoMSksIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgZW5kLmxpbmsodGhp
cyk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlQ29tbWEoUmV0dXJuVHlwZSByVHlwZSwg
aW50IGRzdCkKK3sKKyAgICBwYXJzZUV4cHIobV9tb2R1bGUtPm1fcmVhZGVyLnJ0eXBlKCksIGRz
dCk7CisgICAgcGFyc2VFeHByKHJUeXBlLCBkc3QpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpw
YXJzZUNvbmQoUmV0dXJuVHlwZSByVHlwZSwgaW50IGRzdCkKK3sKKyAgICBwYXJzZUV4cHIoUmV0
dXJuVHlwZTo6STMyLCBkc3QpOworICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKGRzdCksIEdQ
UkluZm86OnJlZ1QwKTsKKyAgICBKdW1wIGVscyA9IGJyYW5jaFRlc3QzMihaZXJvLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgcGFyc2VFeHByKHJUeXBlLCBkc3QpOworICAgIEp1bXAgZW5kID0ganVt
cCgpOworICAgIGVscy5saW5rKHRoaXMpOworICAgIHBhcnNlRXhwcihyVHlwZSwgZHN0KTsKKyAg
ICBlbmQubGluayh0aGlzKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21KSVRDb21waWxlci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUpJVENvbXBpbGVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTk3
NWY2NjcwMDE2ZmRjOTRlY2RkNmZlMzQ3OTFkZmU5NjBlOGZkNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21KSVRDb21waWxlci5oCkBAIC0wLDAgKzEs
MTQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoK
KyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxp
Y2Vuc2UiKTsKKyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGggdGhlIExpY2Vuc2UuCisgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNl
IGF0CisKKyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworIFVu
bGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywg
c29mdHdhcmUKKyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBv
biBhbiAiQVMgSVMiIEJBU0lTLAorIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIFNlZSB0aGUgTGljZW5zZSBm
b3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyBsaW1p
dGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisKKyNpZm5kZWYgV2FzbUpJVENvbXBpbGVy
X2gKKyNkZWZpbmUgV2FzbUpJVENvbXBpbGVyX2gKKworI2luY2x1ZGUgIkNDYWxsSGVscGVycy5o
IgorI2luY2x1ZGUgIldhc21Nb2R1bGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEV4
ZWNTdGF0ZTsKK2NsYXNzIEpJVENvZGU7CitjbGFzcyBWTTsKKworbmFtZXNwYWNlIFdhc20gewor
CitjbGFzcyBKdW1wU2NvcGU7CisKK2NsYXNzIEpJVENvbXBpbGVyIDogcHJpdmF0ZSBDQ2FsbEhl
bHBlcnMgeworcHVibGljOgorICAgIEpJVENvbXBpbGVyKFZNKiB2bSwgTW9kdWxlKiBtb2R1bGUp
CisgICAgICAgIDogQ0NhbGxIZWxwZXJzKHZtLCAwKQorICAgICAgICAsIG1fbW9kdWxlKG1vZHVs
ZSkKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPEpJVENvZGU+IGNvbXBpbGVGdW5jdGlvbihW
TSYsIHNpemVfdCBmdW5jdGlvbkluZGV4KTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGFsbG9jYXRl
U3BhY2VPblN0YWNrKCk7CisgICAgdm9pZCBkZWFsbG9jYXRlU3BhY2VPblN0YWNrKCk7CisKKyAg
ICB2b2lkIHBhcnNlQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYpOworICAgIHZvaWQgcGFyc2VW
YXJzKCk7CisKKyAgICB2b2lkIHBhcnNlU3RtdCgpOworICAgIHZvaWQgcGFyc2VHZXRMb2NhbChp
bnQgZHN0KTsKKyAgICB2b2lkIHBhcnNlU2V0TG9jYWwodWludDMyX3QgaW1tLCBpbnQgZHN0KTsK
KyAgICB2b2lkIHBhcnNlU2V0TG9jYWwoaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZVJldHVyblN0
bXQoKTsKKyAgICB2b2lkIHBhcnNlQmxvY2tTdG10KCk7CisgICAgdm9pZCBwYXJzZVN0bXRMaXN0
KCk7CisgICAgdm9pZCBwYXJzZUlmU3RtdCgpOworICAgIHZvaWQgcGFyc2VJZkVsc2VTdG10KCk7
CisgICAgdm9pZCBwYXJzZVdoaWxlU3RtdCgpOworICAgIHZvaWQgcGFyc2VEb1N0bXQoKTsKKyAg
ICB2b2lkIHBhcnNlTGFiZWxTdG10KCk7CisgICAgdm9pZCBwYXJzZUJyZWFrU3RtdCgpOworICAg
IHZvaWQgcGFyc2VCcmVha0xhYmVsU3RtdCgpOworICAgIHZvaWQgcGFyc2VDb250aW51ZVN0bXQo
KTsKKyAgICB2b2lkIHBhcnNlQ29udGludWVMYWJlbFN0bXQoKTsKKyAgICB2b2lkIHBhcnNlU3dp
dGNoU3RtdCgpOworCisgICAgdm9pZCBwYXJzZUV4cHIoUmV0dXJuVHlwZSwgaW50IGRzdCk7Cisg
ICAgdm9pZCBwYXJzZUV4cHJJMzIoaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZUV4cHJGNjQoaW50
IGRzdCk7CisgICAgdm9pZCBwYXJzZUNhbGxJbnRlcm5hbChSZXR1cm5UeXBlLCBpbnQgZHN0KTsK
KyAgICB2b2lkIHBhcnNlQ2FsbEltcG9ydChSZXR1cm5UeXBlLCBpbnQgZHN0KTsKKyAgICB2b2lk
IGNhbGxGdW5jdGlvblNsb3dDYXNlKFJldHVyblR5cGUsIGludCBkc3QpOworICAgIHZvaWQgcGFy
c2VDYWxsQXJndW1lbnRzKGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJndW1lbnRzLCBpbnQgZHN0KTsK
KyAgICB2b2lkIHBhcnNlQmluYXJ5T3AodWludDhfdCBvcCwgUmV0dXJuVHlwZSwgaW50IGRzdCk7
CisgICAgdm9pZCBwYXJzZVVuYXJ5T3AodWludDhfdCBvcCwgUmV0dXJuVHlwZSwgaW50IGRzdCk7
CisgICAgdm9pZCBwYXJzZVJlbGF0aW9uYWxPcEkzMihSZWxhdGlvbmFsQ29uZGl0aW9uLCBpbnQg
ZHN0KTsKKyAgICB2b2lkIHBhcnNlUmVsYXRpb25hbE9wRjY0KERvdWJsZUNvbmRpdGlvbiwgaW50
IGRzdCk7CisgICAgdm9pZCBwYXJzZUNvbW1hKFJldHVyblR5cGUsIGludCBkc3QpOworICAgIHZv
aWQgcGFyc2VDb25kKFJldHVyblR5cGUsIGludCBkc3QpOworCisgICAgQWRkcmVzcyBzdGFja0Fk
ZHJlc3MoaW50IGkpIGNvbnN0IC8vIEZJWE1FOiBJcyB0aGlzIGNvcnJlY3Q/CisgICAgeworICAg
ICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgLWkgKiA4IC0g
OCk7CisgICAgfQorCisgICAgQWRkcmVzcyB0ZW1wb3JhcnlBZGRyZXNzKGludCBpKSBjb25zdCAv
LyBGSVhNRTogSXMgdGhpcyBjb3JyZWN0PworICAgIHsKKyAgICAgICAgcmV0dXJuIEFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIC0oaSArIG1fY3VycmVudExvY2FsVHlwZXMuc2l6
ZSgpKSAqIDggLSA4KTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2hDb250aW51ZUxhYmVsTGFiZWwo
TGFiZWwqIGxhYmVsKSB7IG1fY29udGludWVMYWJlbExhYmVscy5hcHBlbmQobGFiZWwpOyB9Cisg
ICAgdm9pZCBwb3BDb250aW51ZUxhYmVsTGFiZWwoKSB7IG1fY29udGludWVMYWJlbExhYmVscy5y
ZW1vdmVMYXN0KCk7IH0KKyAgICBMYWJlbCogY29udGludWVMYWJlbExhYmVsKHNpemVfdCBpKSBj
b25zdCB7IHJldHVybiBtX2NvbnRpbnVlTGFiZWxMYWJlbHNbaV07IH0KKyAgICB2b2lkIHB1c2hC
cmVha0xhYmVsSnVtcExpc3QoSnVtcExpc3QqIGp1bXBMaXN0KSB7IG1fYnJlYWtMYWJlbEp1bXBM
aXN0cy5hcHBlbmQoanVtcExpc3QpOyB9CisgICAgdm9pZCBwb3BCcmVha0xhYmVsSnVtcExpc3Qo
KSB7IG1fYnJlYWtMYWJlbEp1bXBMaXN0cy5yZW1vdmVMYXN0KCk7IH0KKyAgICBKdW1wTGlzdCog
YnJlYWtMYWJlbEp1bXBMaXN0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX2JyZWFrTGFiZWxK
dW1wTGlzdHNbaV07IH0KKworICAgIHZvaWQgcHVzaENvbnRpbnVlSnVtcFNjb3BlKEp1bXBTY29w
ZSoganVtcFNjb3BlKSB7IG1fY29udGludWVKdW1wU2NvcGVzLmFwcGVuZChqdW1wU2NvcGUpOyB9
CisgICAgdm9pZCBwb3BDb250aW51ZUp1bXBTY29wZSgpIHsgbV9jb250aW51ZUp1bXBTY29wZXMu
cmVtb3ZlTGFzdCgpOyB9CisgICAgSnVtcFNjb3BlKiB0b3BDb250aW51ZUp1bXBTY29wZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGludWVKdW1wU2NvcGVzLmxhc3QoKTsgfQorCisgICAgdm9pZCBw
dXNoQnJlYWtKdW1wTGlzdChKdW1wTGlzdCoganVtcExpc3QpIHsgbV9icmVha0p1bXBMaXN0cy5h
cHBlbmQoanVtcExpc3QpOyB9CisgICAgdm9pZCBwb3BCcmVha0p1bXBMaXN0KCkgeyBtX2JyZWFr
SnVtcExpc3RzLnJlbW92ZUxhc3QoKTsgfQorICAgIEp1bXBMaXN0KiB0b3BCcmVha0p1bXBMaXN0
KCkgY29uc3QgeyByZXR1cm4gbV9icmVha0p1bXBMaXN0cy5sYXN0KCk7IH0KKworICAgIE1vZHVs
ZSogbV9tb2R1bGU7CisKKyAgICB1aW50MzJfdCBtX3N0YWNrSGVpZ2h0OyAvLyBGSVhNRTogVGhp
cyBjYXVzZWQgYSAnc2VnbWVudGF0aW9uIGZhdWx0JyBoZWlzZW5idWcgd2hlbiBJIGFkZGVkICJz
aXplX3QgbV9zdGFja0hlaWdodCIuIFNvbWV0aGluZyBtdXN0IGJlIHdyb25nLgorCisgICAgUmV0
dXJuVHlwZSBtX2N1cnJlbnRSZXR1cm5UeXBlOworICAgIFZlY3RvcjxUeXBlPiBtX2N1cnJlbnRM
b2NhbFR5cGVzOworCisgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpMYWJlbCo+IG1fY29udGlu
dWVMYWJlbExhYmVsczsKKyAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0Kj4gbV9i
cmVha0xhYmVsSnVtcExpc3RzOworCisgICAgVmVjdG9yPEp1bXBTY29wZSo+IG1fY29udGludWVK
dW1wU2NvcGVzOworICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QqPiBtX2JyZWFr
SnVtcExpc3RzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8v
IFdhc21KSVRDb21waWxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtTW9kdWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjc3NjcwYzAxOTVhZGY0OWEzOWZiNDU5ZmUyZWY4NTM3NzlhNWZhYTkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxl
LmNwcApAQCAtMCwwICsxLDI3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8qCisgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJz
aW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNl
cHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIFlvdSBtYXkgb2J0YWluIGEgY29w
eSBvZiB0aGUgTGljZW5zZSBhdAorCisgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJ
Q0VOU0UtMi4wCisKKyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVk
IHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2Ug
aXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyBXSVRIT1VUIFdBUlJBTlRJRVMg
T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyBT
ZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlz
c2lvbnMgYW5kCisgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbU1vZHVsZS5oIgorCisjaW5jbHVkZSAiSklUQ29k
ZS5oIgorI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJPYmplY3RDb25zdHJ1
Y3Rvci5oIgorI2luY2x1ZGUgIldhc21KSVRDb21waWxlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXYXNtIHsK
KworY29uc3QgQ2xhc3NJbmZvIE1vZHVsZTo6c19pbmZvID0geyAiTW9kdWxlIiwgJkJhc2U6OnNf
aW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShNb2R1bGUpIH07CisKK0pTVmFsdWUgTW9kdWxl
Ojpjb21waWxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7
CisgICAgbV9yZWFkZXIgPSBSZWFkZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4o
YnVmZmVyLmRhdGEoKSkpOworCisgICAgaWYgKG1fcmVhZGVyLmZpeGVkV2lkdGg8dWludDMyX3Q+
KCkgIT0gTWFnaWNOdW1iZXIpCisgICAgICAgIGFib3J0KCk7CisgICAgbV9yZWFkZXIuZml4ZWRX
aWR0aDx1aW50MzJfdD4oKTsgLy8gb3V0cHV0IHNpemUgaW4gYXNtLmpzIGZvcm1hdAorCisgICAg
cGFyc2VDb25zdGFudFBvb2xTZWN0aW9uKCk7CisgICAgcGFyc2VTaWduYXR1cmVTZWN0aW9uKCk7
CisgICAgcGFyc2VGdW5jdGlvbkltcG9ydFNlY3Rpb24oKTsKKyAgICBwYXJzZUdsb2JhbFNlY3Rp
b24oKTsKKyAgICBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKCk7CisgICAgcGFyc2VG
dW5jdGlvblBvaW50ZXJUYWJsZXMoKTsKKyAgICBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvblNlY3Rp
b24oZXhlYyk7CisgICAgSlNPYmplY3QqIG9iamVjdCA9IHBhcnNlRXhwb3J0U2VjdGlvbihleGVj
KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3ZvaWQgTW9kdWxlOjpwYXJzZUNvbnN0YW50
UG9vbFNlY3Rpb24oKQoreworICAgIHVpbnQzMl90IG51bWJlck9mSTMycyA9IG1fcmVhZGVyLmlt
bVUzMigpOworICAgIHVpbnQzMl90IG51bWJlck9mRjMycyA9IG1fcmVhZGVyLmltbVUzMigpOwor
ICAgIHVpbnQzMl90IG51bWJlck9mRjY0cyA9IG1fcmVhZGVyLmltbVUzMigpOworCisgICAgVmVj
dG9yPHVpbnQzMl90PiBjb25zdGFudEkzMnMobnVtYmVyT2ZJMzJzKTsKKyAgICBmb3IgKHVpbnQz
Ml90IGkgPSAwOyBpIDwgbnVtYmVyT2ZJMzJzOyArK2kpCisgICAgICAgIGNvbnN0YW50STMyc1tp
XSA9IG1fcmVhZGVyLmltbVUzMigpOworCisgICAgVmVjdG9yPGZsb2F0PiBjb25zdGFudEYzMnMo
bnVtYmVyT2ZGMzJzKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGMzJz
OyArK2kpCisgICAgICAgIGNvbnN0YW50RjMyc1tpXSA9IG1fcmVhZGVyLmZpeGVkV2lkdGg8Zmxv
YXQ+KCk7CisKKyAgICBWZWN0b3I8ZG91YmxlPiBjb25zdGFudEY2NHMobnVtYmVyT2ZGNjRzKTsK
KyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGNjRzOyArK2kpCisgICAgICAg
IGNvbnN0YW50RjY0c1tpXSA9IG1fcmVhZGVyLmZpeGVkV2lkdGg8ZG91YmxlPigpOworCisgICAg
bV9jb25zdGFudEkzMnMgPSBXVEY6Om1vdmUoY29uc3RhbnRJMzJzKTsKKyAgICBtX2NvbnN0YW50
RjMycyA9IFdURjo6bW92ZShjb25zdGFudEYzMnMpOworICAgIG1fY29uc3RhbnRGNjRzID0gV1RG
Ojptb3ZlKGNvbnN0YW50RjY0cyk7Cit9CisKK3ZvaWQgTW9kdWxlOjpwYXJzZVNpZ25hdHVyZVNl
Y3Rpb24oKQoreworICAgIHVpbnQzMl90IG51bWJlck9mU2lnbmF0dXJlcyA9IG1fcmVhZGVyLmlt
bVUzMigpOworICAgIFZlY3RvcjxTaWduYXR1cmU+IHNpZ25hdHVyZXMobnVtYmVyT2ZTaWduYXR1
cmVzKTsKKyAgICBmb3IgKHVpbnQzMl90IHNpZ25hdHVyZUluZGV4ID0gMDsgc2lnbmF0dXJlSW5k
ZXggPCBudW1iZXJPZlNpZ25hdHVyZXM7ICsrc2lnbmF0dXJlSW5kZXgpIHsKKyAgICAgICAgUmV0
dXJuVHlwZSByZXR1cm5UeXBlID0gbV9yZWFkZXIucnR5cGUoKTsKKyAgICAgICAgdWludDMyX3Qg
YXJndW1lbnRDb3VudCA9IG1fcmVhZGVyLmltbVUzMigpOworICAgICAgICBTaWduYXR1cmUgc2ln
bmF0dXJlKHJldHVyblR5cGUsIGFyZ3VtZW50Q291bnQpOworICAgICAgICBmb3IgKHVpbnQzMl90
IGFyZ3VtZW50SW5kZXggPSAwOyBhcmd1bWVudEluZGV4IDwgYXJndW1lbnRDb3VudDsgKythcmd1
bWVudEluZGV4KQorICAgICAgICAgICAgc2lnbmF0dXJlLmFyZ3VtZW50c1thcmd1bWVudEluZGV4
XSA9IG1fcmVhZGVyLnR5cGUoKTsKKyAgICAgICAgc2lnbmF0dXJlc1tzaWduYXR1cmVJbmRleF0g
PSBXVEY6Om1vdmUoc2lnbmF0dXJlKTsKKyAgICB9CisKKyAgICBtX3NpZ25hdHVyZXMgPSBXVEY6
Om1vdmUoc2lnbmF0dXJlcyk7Cit9CisKK3ZvaWQgTW9kdWxlOjpwYXJzZUZ1bmN0aW9uSW1wb3J0
U2VjdGlvbigpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jSW1wb3J0cyA9IG1fcmVhZGVy
LmltbVUzMigpOworICAgIHVpbnQzMl90IG51bWJlck9mRnVuY0ltcG9ydFNpZ25hdHVyZXMgPSBt
X3JlYWRlci5pbW1VMzIoKTsKKworICAgIG1fZnVuY3Rpb25JbXBvcnROYW1lcy5yZXNlcnZlQ2Fw
YWNpdHkobnVtYmVyT2ZGdW5jSW1wb3J0cyk7CisKKyAgICBWZWN0b3I8RnVuY0ltcG9ydFNpZ25h
dHVyZT4gZnVuY0ltcG9ydFNpZ25hdHVyZXMobnVtYmVyT2ZGdW5jSW1wb3J0U2lnbmF0dXJlcyk7
CisgICAgRnVuY0ltcG9ydFNpZ25hdHVyZSogZnVuY0ltcG9ydFNpZ25hdHVyZSA9IGZ1bmNJbXBv
cnRTaWduYXR1cmVzLmRhdGEoKTsKKyAgICBmb3IgKHVpbnQzMl90IGZ1bmNJbXBvcnRJbmRleCA9
IDA7IGZ1bmNJbXBvcnRJbmRleCA8IG51bWJlck9mRnVuY0ltcG9ydHM7ICsrZnVuY0ltcG9ydElu
ZGV4KSB7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgd2hpbGUgKGNo
YXIgYyA9IG1fcmVhZGVyLnNpbmdsZUNoYXIoKSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KGMpOworICAgICAgICBtX2Z1bmN0aW9uSW1wb3J0TmFtZXMuYXBwZW5kKGJ1aWxkZXIudG9TdHJp
bmcoKSk7CisgICAgICAgIC8vIHByaW50ZigiJXNcbiIsIGJ1aWxkZXIudG9TdHJpbmcoKS51dGY4
KCkuZGF0YSgpKTsKKworICAgICAgICB1aW50MzJfdCBudW1iZXJPZlNpZ25hdHVyZXMgPSBtX3Jl
YWRlci5pbW1VMzIoKTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9m
U2lnbmF0dXJlczsgKytpKSB7CisgICAgICAgICAgICBmdW5jSW1wb3J0U2lnbmF0dXJlLT5zaWdu
YXR1cmVJbmRleCA9IG1fcmVhZGVyLmltbVUzMigpOworICAgICAgICAgICAgZnVuY0ltcG9ydFNp
Z25hdHVyZS0+ZnVuY0ltcG9ydEluZGV4ID0gZnVuY0ltcG9ydEluZGV4OworICAgICAgICAgICAg
ZnVuY0ltcG9ydFNpZ25hdHVyZSsrOworICAgICAgICB9CisgICAgfQorICAgIGFzc2VydChmdW5j
SW1wb3J0U2lnbmF0dXJlID09IGZ1bmNJbXBvcnRTaWduYXR1cmVzLmRhdGEoKSArIG51bWJlck9m
RnVuY0ltcG9ydFNpZ25hdHVyZXMpOworCisgICAgbV9mdW5jSW1wb3J0U2lnbmF0dXJlcyA9IFdU
Rjo6bW92ZShmdW5jSW1wb3J0U2lnbmF0dXJlcyk7Cit9CisKK3ZvaWQgTW9kdWxlOjpwYXJzZUds
b2JhbFNlY3Rpb24oKQoreworICAgIHVpbnQzMl90IG51bWJlck9mSTMyWmVybyA9IG1fcmVhZGVy
LmltbVUzMigpOworICAgIHVpbnQzMl90IG51bWJlck9mRjMyWmVybyA9IG1fcmVhZGVyLmltbVUz
MigpOworICAgIHVpbnQzMl90IG51bWJlck9mRjY0WmVybyA9IG1fcmVhZGVyLmltbVUzMigpOwor
ICAgIHVpbnQzMl90IG51bWJlck9mSTMySW1wb3J0ID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAg
dWludDMyX3QgbnVtYmVyT2ZGMzJJbXBvcnQgPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICB1aW50
MzJfdCBudW1iZXJPZkY2NEltcG9ydCA9IG1fcmVhZGVyLmltbVUzMigpOworICAgIHVpbnQzMl90
IG51bWJlck9mR2xvYmFsVmFycyA9IG51bWJlck9mSTMyWmVybyArIG51bWJlck9mRjMyWmVybyAr
IG51bWJlck9mRjY0WmVybyArIG51bWJlck9mSTMySW1wb3J0ICsgbnVtYmVyT2ZGMzJJbXBvcnQg
KyBudW1iZXJPZkY2NEltcG9ydDsKKworICAgIFZlY3RvcjxUeXBlPiBnbG9iYWxUeXBlcyhudW1i
ZXJPZkdsb2JhbFZhcnMpOworICAgIHNpemVfdCBnbG9iYWxUeXBlSW5kZXggPSAwOworICAgIGZv
ciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkkzMlplcm87ICsraSkKKyAgICAgICAgZ2xv
YmFsVHlwZXNbZ2xvYmFsVHlwZUluZGV4KytdID0gVHlwZTo6STMyOworICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBudW1iZXJPZkYzMlplcm87ICsraSkKKyAgICAgICAgZ2xvYmFsVHlwZXNb
Z2xvYmFsVHlwZUluZGV4KytdID0gVHlwZTo6RjMyOworICAgIGZvciAodWludDMyX3QgaSA9IDA7
IGkgPCBudW1iZXJPZkY2NFplcm87ICsraSkKKyAgICAgICAgZ2xvYmFsVHlwZXNbZ2xvYmFsVHlw
ZUluZGV4KytdID0gVHlwZTo6RjY0OworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1i
ZXJPZkkzMkltcG9ydDsgKytpKSB7CisgICAgICAgIHdoaWxlIChtX3JlYWRlci5zaW5nbGVDaGFy
KCkpIHsgfQorICAgICAgICBnbG9iYWxUeXBlc1tnbG9iYWxUeXBlSW5kZXgrK10gPSBUeXBlOjpJ
MzI7CisgICAgfQorICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkYzMkltcG9y
dDsgKytpKSB7CisgICAgICAgIHdoaWxlIChtX3JlYWRlci5zaW5nbGVDaGFyKCkpIHsgfQorICAg
ICAgICBnbG9iYWxUeXBlc1tnbG9iYWxUeXBlSW5kZXgrK10gPSBUeXBlOjpGMzI7CisgICAgfQor
ICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkY2NEltcG9ydDsgKytpKSB7Cisg
ICAgICAgIHdoaWxlIChtX3JlYWRlci5zaW5nbGVDaGFyKCkpIHsgfQorICAgICAgICBnbG9iYWxU
eXBlc1tnbG9iYWxUeXBlSW5kZXgrK10gPSBUeXBlOjpGNjQ7CisgICAgfQorICAgIG1fZ2xvYmFs
VHlwZXMgPSBXVEY6Om1vdmUoZ2xvYmFsVHlwZXMpOworfQorCit2b2lkIE1vZHVsZTo6cGFyc2VG
dW5jdGlvbkRlY2xhcmF0aW9uU2VjdGlvbigpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5j
dGlvbnMgPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGZ1bmNTaWdu
YXR1cmVzKG51bWJlck9mRnVuY3Rpb25zKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwg
bnVtYmVyT2ZGdW5jdGlvbnM7ICsraSkKKyAgICAgICAgZnVuY1NpZ25hdHVyZXNbaV0gPSBtX3Jl
YWRlci5pbW1VMzIoKTsKKworICAgIG1fZnVuY1NpZ25hdHVyZXMgPSBXVEY6Om1vdmUoZnVuY1Np
Z25hdHVyZXMpOworfQorCit2b2lkIE1vZHVsZTo6cGFyc2VGdW5jdGlvblBvaW50ZXJUYWJsZXMo
KQoreworICAgIHVpbnQzMl90IG51bWJlck9mRnVuY1B0clRhYmxlcyA9IG1fcmVhZGVyLmltbVUz
MigpOworICAgIFZlY3RvcjxGdW5jUHRyVGFibGU+IGZ1bmNQdHJUYWJsZXMobnVtYmVyT2ZGdW5j
UHRyVGFibGVzKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGdW5jUHRy
VGFibGVzOyArK2kpIHsKKyAgICAgICAgZnVuY1B0clRhYmxlc1tpXS5zaWduYXR1cmVJbmRleCA9
IG1fcmVhZGVyLmltbVUzMigpOworICAgICAgICB1aW50MzJfdCBudW1FbGVtZW50cyA9IG1fcmVh
ZGVyLmltbVUzMigpOworICAgICAgICBWZWN0b3I8dWludDMyX3Q+IGVsZW1lbnRzKG51bUVsZW1l
bnRzKTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBqID0gMDsgaiA8IG51bUVsZW1lbnRzOyArK2op
CisgICAgICAgICAgICBlbGVtZW50c1tqXSA9IG1fcmVhZGVyLmltbVUzMigpOworICAgICAgICBm
dW5jUHRyVGFibGVzW2ldLmVsZW1lbnRzID0gV1RGOjptb3ZlKGVsZW1lbnRzKTsKKyAgICB9CisK
KyAgICBtX2Z1bmNQdHJUYWJsZXMgPSBXVEY6Om1vdmUoZnVuY1B0clRhYmxlcyk7Cit9CisKK3Zv
aWQgTW9kdWxlOjpwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvblNlY3Rpb24oRXhlY1N0YXRlKiBleGVj
KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mdW5jU2lnbmF0dXJlcy5zaXplKCk7
ICsraSkKKyAgICAgICAgcGFyc2VGdW5jdGlvbkRlZmluaXRpb24oZXhlYywgaSk7Cit9CisKK0pT
T2JqZWN0KiBNb2R1bGU6OnBhcnNlRXhwb3J0U2VjdGlvbihFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgc3dpdGNoIChtX3JlYWRlci5leHBvcnRGb3JtYXQoKSkgeworICAgIGNhc2UgRXhwb3J0Rm9y
bWF0OjpEZWZhdWx0OiB7CisgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSBtX3JlYWRl
ci5pbW1VMzIoKTsKKyAgICAgICAgcmV0dXJuIG1fZnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLmdl
dCgpOworICAgIH0KKyAgICBjYXNlIEV4cG9ydEZvcm1hdDo6UmVjb3JkOiB7CisgICAgICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKKyAgICAgICAgdWlu
dDMyX3QgbnVtYmVyT2ZFeHBvcnRzID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIGZvciAodWludDMyX3QgZXhwb3J0SW5kZXggPSAwOyBl
eHBvcnRJbmRleCA8IG51bWJlck9mRXhwb3J0czsgKytleHBvcnRJbmRleCkgeworICAgICAgICAg
ICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgICAgICAgICAgd2hpbGUgKGNoYXIgYyA9IG1f
cmVhZGVyLnNpbmdsZUNoYXIoKSkKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChjKTsK
KyAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSBtX3JlYWRlci5pbW1VMzIoKTsK
KyAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCBidWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJl
Y3Qodm0sIGlkZW50aWZpZXIsIG1fZnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLmdldCgpKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH0KKyAgICBkZWZhdWx0OgorICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKwordm9pZCBNb2R1bGU6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgc2l6ZV90IGZ1bmN0aW9uSW5kZXgpCit7CisgICAgSklUQ29tcGlsZXIgaml0Q29t
cGlsZXIoJmV4ZWMtPnZtKCksIHRoaXMpOworICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRDb2RlID0g
aml0Q29tcGlsZXIuY29tcGlsZUZ1bmN0aW9uKGV4ZWMtPnZtKCksIGZ1bmN0aW9uSW5kZXgpOwor
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKworICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSA9IFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6Y3JlYXRlKHZtLCBTb3VyY2VDb2Rl
KCkpOworCisgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworCisgICAgUmVmUHRyPFdlYkFz
c2VtYmx5Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBhZG9wdFJlZihuZXcgV2ViQXNzZW1ibHlDb2Rl
QmxvY2soZXhlY3V0YWJsZSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSk7CisgICAgY29k
ZUJsb2NrLT5zZXRKSVRDb2RlKGppdENvZGUpOworICAgIGV4ZWN1dGFibGUtPmluc3RhbGxDb2Rl
KGNvZGVCbG9jay5nZXQoKSk7CisKKyAgICBKU0Z1bmN0aW9uKiBqc0Z1bmN0aW9uID0gSlNGdW5j
dGlvbjo6Y3JlYXRlKHZtLCBleGVjdXRhYmxlLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkp
OworICAgIG1fZnVuY3Rpb25zLmFwcGVuZChXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4odm0sIHRo
aXMsIGpzRnVuY3Rpb24pKTsKK30KKworRW5jb2RlZEpTVmFsdWUgTW9kdWxlOjppbnRlcm5hbEZ1
bmN0aW9uKHNpemVfdCBmdW5jdGlvbkluZGV4KQoreworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUobV9mdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0uZ2V0KCkpOworfQorCit2b2lkIE1vZHVsZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAg
IC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBuZXZlciBjYWxsZWQ/CisgICAgTW9kdWxlKiB0aGlzT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8TW9kdWxlKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7CisgICAgZm9yIChhdXRvIGZ1bmN0aW9uIDogdGhpc09iamVjdC0+
bV9mdW5jdGlvbnMpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZmdW5jdGlvbik7Cit9CisKK0pT
VmFsdWUgY29tcGlsZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVy
KQoreworICAgIE1vZHVsZSogbW9kdWxlID0gTW9kdWxlOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKKyAgICByZXR1cm4gbW9kdWxlLT5jb21waWxlKGV4
ZWMsIGJ1ZmZlcik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjUzZTAyMzA0M2FlNGRiMTk4
ZmY1N2Y4YjMzMGRhMTQ0MmIxYzZiNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgTGljZW5zZWQgdW5kZXIgdGhl
IEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgeW91IG1heSBu
b3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgor
IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgaHR0cDovL3d3dy5h
cGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBw
bGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgZGlzdHJpYnV0
ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywK
KyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4
cHJlc3Mgb3IgaW1wbGllZC4KKyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5n
dWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExp
Y2Vuc2UuCisqLworCisjaWZuZGVmIFdhc21Nb2R1bGVfaAorI2RlZmluZSBXYXNtTW9kdWxlX2gK
KworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiV2FzbU9wY29kZXMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpJVENvZGU7CitjbGFzcyBKSVRDb21waWxlcjsKKworbmFt
ZXNwYWNlIFdhc20geworCitjbGFzcyBNb2R1bGUgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKKyAgICBzdHJ1
Y3QgRnVuY0ltcG9ydFNpZ25hdHVyZSB7CisgICAgICAgIHVpbnQzMl90IHNpZ25hdHVyZUluZGV4
OworICAgICAgICB1aW50MzJfdCBmdW5jSW1wb3J0SW5kZXg7CisgICAgfTsKKworICAgIHN0cnVj
dCBGdW5jUHRyVGFibGUgeworICAgICAgICB1aW50MzJfdCBzaWduYXR1cmVJbmRleDsKKyAgICAg
ICAgVmVjdG9yPHVpbnQzMl90PiBlbGVtZW50czsKKyAgICB9OworCisgICAgTW9kdWxlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQor
ICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgTW9kdWxlKiBjcmVhdGUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCk7IC8vIEZJWE1FOiBpcyB0aGlz
IHJpZ2h0PworICAgICAgICBNb2R1bGUqIG1vZHVsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPE1vZHVsZT4odm0uaGVhcCkpIE1vZHVsZSh2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgbW9k
dWxlLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBtb2R1bGU7CisgICAgfQor
CisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBqc051bGwoKSwgVHlw
ZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAg
IEpTVmFsdWUgY29tcGlsZShFeGVjU3RhdGUqLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcik7
CisgICAgRW5jb2RlZEpTVmFsdWUgaW50ZXJuYWxGdW5jdGlvbihzaXplX3QgZnVuY3Rpb25JbmRl
eCk7CisgICAgY29uc3QgU3RyaW5nJiBmdW5jdGlvbkltcG9ydE5hbWUoc2l6ZV90IGZ1bmN0aW9u
SW1wb3J0SW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25JbXBvcnROYW1lc1tmdW5jdGlv
bkltcG9ydEluZGV4XTsgfQorCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBKSVRDb21waWxl
cjsKKworICAgIHZvaWQgcGFyc2VDb25zdGFudFBvb2xTZWN0aW9uKCk7CisgICAgdm9pZCBwYXJz
ZVNpZ25hdHVyZVNlY3Rpb24oKTsKKyAgICB2b2lkIHBhcnNlRnVuY3Rpb25JbXBvcnRTZWN0aW9u
KCk7CisgICAgdm9pZCBwYXJzZUdsb2JhbFNlY3Rpb24oKTsKKyAgICB2b2lkIHBhcnNlRnVuY3Rp
b25EZWNsYXJhdGlvblNlY3Rpb24oKTsKKyAgICB2b2lkIHBhcnNlRnVuY3Rpb25Qb2ludGVyVGFi
bGVzKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvblNlY3Rpb24oRXhlY1N0YXRl
Kik7CisgICAgSlNPYmplY3QqIHBhcnNlRXhwb3J0U2VjdGlvbihFeGVjU3RhdGUqKTsKKworICAg
IHZvaWQgcGFyc2VGdW5jdGlvbkRlZmluaXRpb24oRXhlY1N0YXRlKiwgc2l6ZV90IGZ1bmN0aW9u
SW5kZXgpOworCisgICAgUmVhZGVyIG1fcmVhZGVyOworCisgICAgVmVjdG9yPFNpZ25hdHVyZT4g
bV9zaWduYXR1cmVzOworICAgIFZlY3Rvcjx1aW50MzJfdD4gbV9jb25zdGFudEkzMnM7CisgICAg
VmVjdG9yPGZsb2F0PiBtX2NvbnN0YW50RjMyczsKKyAgICBWZWN0b3I8ZG91YmxlPiBtX2NvbnN0
YW50RjY0czsKKyAgICBWZWN0b3I8U3RyaW5nPiBtX2Z1bmN0aW9uSW1wb3J0TmFtZXM7CisgICAg
VmVjdG9yPEZ1bmNJbXBvcnRTaWduYXR1cmU+IG1fZnVuY0ltcG9ydFNpZ25hdHVyZXM7CisgICAg
VmVjdG9yPFR5cGU+IG1fZ2xvYmFsVHlwZXM7CisgICAgVmVjdG9yPHVpbnQzMl90PiBtX2Z1bmNT
aWduYXR1cmVzOworICAgIFZlY3RvcjxGdW5jUHRyVGFibGU+IG1fZnVuY1B0clRhYmxlczsKKwor
ICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4+IG1fZnVuY3Rpb25zOworfTsKKwor
SlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjb21waWxlKEV4ZWNTdGF0ZSosIGNvbnN0IFZlY3Rv
cjxjaGFyPiYgYnVmZmVyKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlm
IC8vIFdhc21Nb2R1bGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU9wY29kZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGNvZGVzLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZDA3NzliODM0NzVmOGExNDUzY2Y3NGE2OWIxMmZjMjYzOWRlMmQ1YwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGNvZGVzLmgK
QEAgLTAsMCArMSw1OTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvKgorIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAy
LjAgKHRoZSAiTGljZW5zZSIpOworIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGlu
IGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2Yg
dGhlIExpY2Vuc2UgYXQKKworIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNF
LTIuMAorCisgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBp
biB3cml0aW5nLCBzb2Z0d2FyZQorIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRp
c3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENP
TkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgU2VlIHRo
ZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25z
IGFuZAorIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKworI2lmbmRlZiBXYXNt
T3Bjb2Rlc19oCisjZGVmaW5lIFdhc21PcGNvZGVzX2gKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXYXNtIHsKKworc3RhdGljIGNvbnN0
IHVpbnQzMl90IE1hZ2ljTnVtYmVyID0gMHg2ZDczNjE3NzsKKworZW51bSBjbGFzcyBTdG10IDog
dWludDhfdCB7CisgICAgU2V0TG9jLAorICAgIFNldEdsbywKKyAgICBJMzJTdG9yZTgsCisgICAg
STMyU3RvcmVPZmY4LAorICAgIEkzMlN0b3JlMTYsCisgICAgSTMyU3RvcmVPZmYxNiwKKyAgICBJ
MzJTdG9yZTMyLAorICAgIEkzMlN0b3JlT2ZmMzIsCisgICAgRjMyU3RvcmUsCisgICAgRjMyU3Rv
cmVPZmYsCisgICAgRjY0U3RvcmUsCisgICAgRjY0U3RvcmVPZmYsCisgICAgQ2FsbEludCwKKyAg
ICBDYWxsSW5kLAorICAgIENhbGxJbXAsCisgICAgUmV0LAorICAgIEJsb2NrLAorICAgIElmVGhl
biwKKyAgICBJZkVsc2UsCisgICAgV2hpbGUsCisgICAgRG8sCisgICAgTGFiZWwsCisgICAgQnJl
YWssCisgICAgQnJlYWtMYWJlbCwKKyAgICBDb250aW51ZSwKKyAgICBDb250aW51ZUxhYmVsLAor
ICAgIFN3aXRjaCwKKworICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBTdG10V2l0aEltbSA6IHVp
bnQ4X3QgeworICAgIFNldExvYywKKyAgICBTZXRHbG8sCisgICAgUmVzZXZlZDEsCisgICAgUmVz
ZXZlZDIsCisKKyAgICBCYWQKK307CisKK2VudW0gY2xhc3MgU3dpdGNoQ2FzZSA6IHVpbnQ4X3Qg
eworICAgIENhc2UwLAorICAgIENhc2UxLAorICAgIENhc2VOLAorICAgIERlZmF1bHQwLAorICAg
IERlZmF1bHQxLAorICAgIERlZmF1bHROCit9OworCitlbnVtIGNsYXNzIEkzMiA6IHVpbnQ4X3Qg
eworICAgIExpdFBvb2wsCisgICAgTGl0SW1tLAorICAgIEdldExvYywKKyAgICBHZXRHbG8sCisg
ICAgU2V0TG9jLAorICAgIFNldEdsbywKKyAgICBTTG9hZDgsCisgICAgU0xvYWRPZmY4LAorICAg
IFVMb2FkOCwKKyAgICBVTG9hZE9mZjgsCisgICAgU0xvYWQxNiwKKyAgICBTTG9hZE9mZjE2LAor
ICAgIFVMb2FkMTYsCisgICAgVUxvYWRPZmYxNiwKKyAgICBMb2FkMzIsCisgICAgTG9hZE9mZjMy
LAorICAgIFN0b3JlOCwKKyAgICBTdG9yZU9mZjgsCisgICAgU3RvcmUxNiwKKyAgICBTdG9yZU9m
ZjE2LAorICAgIFN0b3JlMzIsCisgICAgU3RvcmVPZmYzMiwKKyAgICBDYWxsSW50LAorICAgIENh
bGxJbmQsCisgICAgQ2FsbEltcCwKKyAgICBDb25kLAorICAgIENvbW1hLAorICAgIEZyb21GMzIs
CisgICAgRnJvbUY2NCwKKyAgICBOZWcsCisgICAgQWRkLAorICAgIFN1YiwKKyAgICBNdWwsCisg
ICAgU0RpdiwKKyAgICBVRGl2LAorICAgIFNNb2QsCisgICAgVU1vZCwKKyAgICBCaXROb3QsCisg
ICAgQml0T3IsCisgICAgQml0QW5kLAorICAgIEJpdFhvciwKKyAgICBMc2gsCisgICAgQXJpdGhS
c2gsCisgICAgTG9naWNSc2gsCisgICAgQ2x6LAorICAgIExvZ2ljTm90LAorICAgIEVxSTMyLAor
ICAgIEVxRjMyLAorICAgIEVxRjY0LAorICAgIE5FcUkzMiwKKyAgICBORXFGMzIsCisgICAgTkVx
RjY0LAorICAgIFNMZVRoSTMyLAorICAgIFVMZVRoSTMyLAorICAgIExlVGhGMzIsCisgICAgTGVU
aEY2NCwKKyAgICBTTGVFcUkzMiwKKyAgICBVTGVFcUkzMiwKKyAgICBMZUVxRjMyLAorICAgIExl
RXFGNjQsCisgICAgU0dyVGhJMzIsCisgICAgVUdyVGhJMzIsCisgICAgR3JUaEYzMiwKKyAgICBH
clRoRjY0LAorICAgIFNHckVxSTMyLAorICAgIFVHckVxSTMyLAorICAgIEdyRXFGMzIsCisgICAg
R3JFcUY2NCwKKyAgICBTTWluLAorICAgIFVNaW4sCisgICAgU01heCwKKyAgICBVTWF4LAorICAg
IEFicywKKworICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBJMzJXaXRoSW1tIDogdWludDhfdCB7
CisgICAgTGl0UG9vbCwKKyAgICBMaXRJbW0sCisgICAgR2V0TG9jLAorICAgIFJlc2VydmVkLAor
CisgICAgQmFkCit9OworCitlbnVtIGNsYXNzIEYzMiA6IHVpbnQ4X3QgeworICAgIExpdFBvb2ws
CisgICAgTGl0SW1tLAorICAgIEdldExvYywKKyAgICBHZXRHbG8sCisgICAgU2V0TG9jLAorICAg
IFNldEdsbywKKyAgICBMb2FkLAorICAgIExvYWRPZmYsCisgICAgU3RvcmUsCisgICAgU3RvcmVP
ZmYsCisgICAgQ2FsbEludCwKKyAgICBDYWxsSW5kLAorICAgIENvbmQsCisgICAgQ29tbWEsCisg
ICAgRnJvbVMzMiwKKyAgICBGcm9tVTMyLAorICAgIEZyb21GNjQsCisgICAgTmVnLAorICAgIEFk
ZCwKKyAgICBTdWIsCisgICAgTXVsLAorICAgIERpdiwKKyAgICBBYnMsCisgICAgQ2VpbCwKKyAg
ICBGbG9vciwKKyAgICBTcXJ0LAorCisgICAgQmFkCit9OworCitlbnVtIGNsYXNzIEYzMldpdGhJ
bW0gOiB1aW50OF90IHsKKyAgICBMaXRQb29sLAorICAgIEdldExvYywKKyAgICBSZXNlcnZlZDAs
CisgICAgUmVzZXJ2ZWQxLAorCisgICAgQmFkCit9OworCitlbnVtIGNsYXNzIEY2NCA6IHVpbnQ4
X3QgeworICAgIExpdFBvb2wsCisgICAgTGl0SW1tLAorICAgIEdldExvYywKKyAgICBHZXRHbG8s
CisgICAgU2V0TG9jLAorICAgIFNldEdsbywKKyAgICBMb2FkLAorICAgIExvYWRPZmYsCisgICAg
U3RvcmUsCisgICAgU3RvcmVPZmYsCisgICAgQ2FsbEludCwKKyAgICBDYWxsSW5kLAorICAgIENh
bGxJbXAsCisgICAgQ29uZCwKKyAgICBDb21tYSwKKyAgICBGcm9tUzMyLAorICAgIEZyb21VMzIs
CisgICAgRnJvbUYzMiwKKyAgICBOZWcsCisgICAgQWRkLAorICAgIFN1YiwKKyAgICBNdWwsCisg
ICAgRGl2LAorICAgIE1vZCwKKyAgICBNaW4sCisgICAgTWF4LAorICAgIEFicywKKyAgICBDZWls
LAorICAgIEZsb29yLAorICAgIFNxcnQsCisgICAgQ29zLAorICAgIFNpbiwKKyAgICBUYW4sCisg
ICAgQUNvcywKKyAgICBBU2luLAorICAgIEFUYW4sCisgICAgQVRhbjIsCisgICAgRXhwLAorICAg
IExuLAorICAgIFBvdywKKworICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBGNjRXaXRoSW1tIDog
dWludDhfdCB7CisgICAgTGl0UG9vbCwKKyAgICBHZXRMb2MsCisgICAgUmVzZXJ2ZWQwLAorICAg
IFJlc2VydmVkMSwKKworICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBWb2lkIDogdWludDhfdCB7
CisgICAgQ2FsbEludCwKKyAgICBDYWxsSW5kLAorICAgIENhbGxJbXAsCisKKyAgICBCYWQKK307
CisKK2VudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeworICAgIEkzMiwKKyAgICBGMzIsCisgICAg
RjY0Cit9OworCitlbnVtIGNsYXNzIFZhclR5cGVzIDogdWludDhfdCB7CisgICAgSTMyID0gMHgx
LAorICAgIEYzMiA9IDB4MiwKKyAgICBGNjQgPSAweDQsCit9OworCitpbmxpbmUgVmFyVHlwZXMg
b3BlcmF0b3J8IChWYXJUeXBlcyBsaHMsIFZhclR5cGVzIHJocykgeyByZXR1cm4gVmFyVHlwZXMo
dWludDhfdChsaHMpIHwgdWludDhfdChyaHMpKTsgfQoraW5saW5lIGJvb2wgb3BlcmF0b3ImKFZh
clR5cGVzIGxocywgVmFyVHlwZXMgcmhzKSB7IHJldHVybiBib29sKHVpbnQ4X3QobGhzKSAmIHVp
bnQ4X3QocmhzKSk7IH0KKworZW51bSBjbGFzcyBWYXJUeXBlc1dpdGhJbW0gOiB1aW50OF90IHsK
KyAgICBPbmx5STMyLAorICAgIFJlc2VydmVkMCwKKyAgICBSZXNlcnZlZDEsCisgICAgUmVzZXJ2
ZWQyCit9OworCitlbnVtIGNsYXNzIFJldHVyblR5cGUgOiB1aW50OF90IHsKKyAgICBJMzIgPSB1
aW50OF90KFR5cGU6OkkzMiksCisgICAgRjMyID0gdWludDhfdChUeXBlOjpGMzIpLAorICAgIEY2
NCA9IHVpbnQ4X3QoVHlwZTo6RjY0KSwKKyAgICBWb2lkCit9OworCitjbGFzcyBFeHByIHsKK3B1
YmxpYzoKKyAgICBFeHByKCkKKyAgICA6IG1fdHlwZShSZXR1cm5UeXBlKC0xKSksIHUgeyB9Cisg
ICAgeworICAgIH0KKyAgICBFeHByKEkzMiBpMzIpIDogbV90eXBlKFJldHVyblR5cGU6OkkzMikg
eyB1LmkzMiA9IGkzMjsgfQorICAgIEV4cHIoRjMyIGYzMikgOiBtX3R5cGUoUmV0dXJuVHlwZTo6
RjMyKSB7IHUuZjMyID0gZjMyOyB9CisgICAgRXhwcihGNjQgZjY0KSA6IG1fdHlwZShSZXR1cm5U
eXBlOjpGNjQpIHsgdS5mNjQgPSBmNjQ7IH0KKyAgICBFeHByKFZvaWQgdikgOiBtX3R5cGUoUmV0
dXJuVHlwZTo6Vm9pZCkgeyB1LnYgPSB2OyB9CisKKyAgICBSZXR1cm5UeXBlIHR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBJMzIgaTMyKCkgY29uc3QgeyByZXR1cm4gdS5pMzI7
IH0KKyAgICBGMzIgZjMyKCkgY29uc3QgeyByZXR1cm4gdS5mMzI7IH0KKyAgICBGNjQgZjY0KCkg
Y29uc3QgeyByZXR1cm4gdS5mNjQ7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShFeHByIHJocykg
Y29uc3QgeyByZXR1cm4gbV90eXBlID09IHJocy5tX3R5cGUgJiYgdS5yYXcgPT0gcmhzLnUucmF3
OyB9CisgICAgYm9vbCBvcGVyYXRvciE9KEV4cHIgcmhzKSBjb25zdCB7IHJldHVybiAhKCp0aGlz
ID09IHJocyk7IH0KKworcHJpdmF0ZToKKyAgICBSZXR1cm5UeXBlIG1fdHlwZTsKKyAgICB1bmlv
biBVIHsKKyAgICAgICAgSTMyIGkzMjsKKyAgICAgICAgRjMyIGYzMjsKKyAgICAgICAgRjY0IGY2
NDsKKyAgICAgICAgVm9pZCB2OworICAgICAgICB1aW50OF90IHJhdzsKKyAgICB9IHU7CisKKyAg
ICBzdGF0aWNfYXNzZXJ0KHNpemVvZihVKSA9PSBzaXplb2YodWludDhfdCksICJFeGFjdCBvdmVy
bGF5IG9mIHJhd18iKTsKK307CisKK3N0YXRpYyBjb25zdCB1aW50OF90IEhhc0ltbUZsYWcgPSAw
eDgwOworc3RhdGljX2Fzc2VydCh1aW50OF90KEkzMjo6QmFkKSA8PSBIYXNJbW1GbGFnLCAiTVNC
IHJlc2VydmVkIHRvIGRpc3Rpbmd1aXNoIEkzMiBmcm9tIEkzMldpdGhJbW0iKTsKK3N0YXRpY19h
c3NlcnQodWludDhfdChGMzI6OkJhZCkgPD0gSGFzSW1tRmxhZywgIk1TQiByZXNlcnZlZCB0byBk
aXN0aW5ndWlzaCBGMzIgZnJvbSBGMzJXaXRoSW1tIik7CitzdGF0aWNfYXNzZXJ0KHVpbnQ4X3Qo
RjY0OjpCYWQpIDw9IEhhc0ltbUZsYWcsICJNU0IgcmVzZXJ2ZWQgdG8gZGlzdGluZ3Vpc2ggRjY0
IGZyb20gRjY0V2l0aEltbSIpOworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgT3BXaXRoSW1tQml0
cyA9IDI7CitzdGF0aWMgY29uc3QgdWludDMyX3QgT3BXaXRoSW1tTGltaXQgPSAxIDw8IE9wV2l0
aEltbUJpdHM7CitzdGF0aWNfYXNzZXJ0KHVpbnQ4X3QoSTMyV2l0aEltbTo6QmFkKSA8PSBPcFdp
dGhJbW1MaW1pdCwgIkkzMldpdGhJbW0gb3AgZml0cyIpOworc3RhdGljX2Fzc2VydCh1aW50OF90
KEYzMldpdGhJbW06OkJhZCkgPD0gT3BXaXRoSW1tTGltaXQsICJGMzJXaXRoSW1tIG9wIGZpdHMi
KTsKK3N0YXRpY19hc3NlcnQodWludDhfdChGNjRXaXRoSW1tOjpCYWQpIDw9IE9wV2l0aEltbUxp
bWl0LCAiRjY0V2l0aEltbSBvcCBmaXRzIik7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBJbW1C
aXRzID0gNTsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBJbW1MaW1pdCA9IDEgPDwgSW1tQml0czsK
K3N0YXRpY19hc3NlcnQoKDEgKyBPcFdpdGhJbW1CaXRzICsgSW1tQml0cykgPT0gOCwgIkJpdHMg
b2YgaW1tZWRpYXRlIG9wIHNob3VsZCBhZGQgdXAgdG8gYSBieXRlIik7CisKK3N0YXRpYyBpbmxp
bmUgdWludDhfdCBQYWNrT3BXaXRoSW1tKHVpbnQ4X3Qgb3AsIHVpbnQ4X3QgaW1tKQoreworICAg
IGFzc2VydChvcCA8IE9wV2l0aEltbUxpbWl0KTsKKyAgICBhc3NlcnQoaW1tIDwgSW1tTGltaXQp
OworICAgIHJldHVybiBIYXNJbW1GbGFnIHwgKHVpbnQ4X3Qob3ApIDw8IEltbUJpdHMpIHwgaW1t
OworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVFdpdGhJbW0+CitzdGF0aWMgaW5saW5lIHZvaWQgVW5w
YWNrT3BXaXRoSW1tKHVpbnQ4X3QgYnl0ZSwgVFdpdGhJbW0qIG9wLCB1aW50OF90ICppbW0pCit7
CisgICAgYXNzZXJ0KGJ5dGUgJiBIYXNJbW1GbGFnKTsKKyAgICAqb3AgPSBUV2l0aEltbSgoYnl0
ZSA+PiBJbW1CaXRzKSAmIChPcFdpdGhJbW1MaW1pdCAtIDEpKTsKKyAgICAqaW1tID0gYnl0ZSAm
IChJbW1MaW1pdCAtIDEpOworfQorCitjbGFzcyBFeHByV2l0aEltbSB7CitwdWJsaWM6CisgICAg
RXhwcldpdGhJbW0oKQorICAgICAgICA6IG1fdHlwZShUeXBlKC0xKSkKKyAgICB7CisgICAgfQor
ICAgIEV4cHJXaXRoSW1tKEkzMldpdGhJbW0gaTMyKSA6IG1fdHlwZShUeXBlOjpJMzIpIHsgdS5p
MzIgPSBpMzI7IH0KKyAgICBFeHByV2l0aEltbShGMzJXaXRoSW1tIGYzMikgOiBtX3R5cGUoVHlw
ZTo6RjMyKSB7IHUuZjMyID0gZjMyOyB9CisgICAgRXhwcldpdGhJbW0oRjY0V2l0aEltbSBmNjQp
IDogbV90eXBlKFR5cGU6OkY2NCkgeyB1LmY2NCA9IGY2NDsgfQorCisgICAgVHlwZSB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgSTMyV2l0aEltbSBpMzIoKSBjb25zdCB7IHJl
dHVybiB1LmkzMjsgfQorICAgIEYzMldpdGhJbW0gZjMyKCkgY29uc3QgeyByZXR1cm4gdS5mMzI7
IH0KKyAgICBGNjRXaXRoSW1tIGY2NCgpIGNvbnN0IHsgcmV0dXJuIHUuZjY0OyB9CisKK3ByaXZh
dGU6CisgICAgVHlwZSBtX3R5cGU7CisgICAgdW5pb24gVSB7CisgICAgICAgIEkzMldpdGhJbW0g
aTMyOworICAgICAgICBGMzJXaXRoSW1tIGYzMjsKKyAgICAgICAgRjY0V2l0aEltbSBmNjQ7Cisg
ICAgICAgIHVpbnQ4X3QgcmF3OworICAgIH0gdTsKKworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9m
KFUpID09IHNpemVvZih1aW50OF90KSwgIkV4YWN0IG92ZXJsYXkgb2YgcmF3XyIpOworfTsKKwor
ZW51bSBjbGFzcyBFeHBvcnRGb3JtYXQgOiB1aW50OF90IHsKKyAgICBEZWZhdWx0LAorICAgIFJl
Y29yZAorfTsKKworc3RydWN0IFNpZ25hdHVyZSB7CisgICAgUmV0dXJuVHlwZSByZXR1cm5UeXBl
OworICAgIFZlY3RvcjxUeXBlPiBhcmd1bWVudHM7CisKKyAgICBTaWduYXR1cmUoKSB7IH0KKyAg
ICBTaWduYXR1cmUoUmV0dXJuVHlwZSByZXR1cm5UeXBlKQorICAgICAgICA6IHJldHVyblR5cGUo
cmV0dXJuVHlwZSkgeyB9CisgICAgU2lnbmF0dXJlKFJldHVyblR5cGUgcmV0dXJuVHlwZSwgdWlu
dDMyX3QgYXJndW1lbnRDb3VudCkKKyAgICAgICAgOiByZXR1cm5UeXBlKHJldHVyblR5cGUpCisg
ICAgICAgICwgYXJndW1lbnRzKGFyZ3VtZW50Q291bnQpIHsgfQorICAgIFNpZ25hdHVyZShSZXR1
cm5UeXBlIHJldHVyblR5cGUsIFZlY3RvcjxUeXBlPiYmIGFyZ3VtZW50cykKKyAgICAgICAgOiBy
ZXR1cm5UeXBlKHJldHVyblR5cGUpCisgICAgICAgICwgYXJndW1lbnRzKFdURjo6bW92ZShhcmd1
bWVudHMpKSB7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaWduYXR1cmUmIHJocykg
Y29uc3QgeyByZXR1cm4gcmV0dXJuVHlwZSA9PSByaHMucmV0dXJuVHlwZSAmJiBhcmd1bWVudHMg
PT0gcmhzLmFyZ3VtZW50czsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTaWduYXR1cmUm
IHJocykgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSByaHMpOyB9CisKKyAgICBzdHJ1Y3QgSGFz
aCB7CisgICAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBTaWduYXR1cmUgJnNpZ25hdHVyZSkg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVHlwZSkg
PT0gMSAmJiBzaXplb2YoUmV0dXJuVHlwZSkgPT0gMSwgIlNoaWZ0IG1vcmUiKTsKKyAgICAgICAg
ICAgIHVpbnQzMl90IGggPSB1aW50OF90KHNpZ25hdHVyZS5yZXR1cm5UeXBlKTsKKyAgICAgICAg
ICAgIGZvciAoVHlwZSB0IDogc2lnbmF0dXJlLmFyZ3VtZW50cykKKyAgICAgICAgICAgICAgICBo
ID0gKChoIDw8IDIpIHwgdWludDhfdCh0KSkgXiAoaCA+PiAzMCk7CisgICAgICAgICAgICByZXR1
cm4gaDsKKyAgICAgICAgfQorICAgIH07Cit9OworCitjbGFzcyBSZWFkZXIgeworcHVibGljOgor
ICAgIFJlYWRlcigpIHsgfQorICAgIFJlYWRlcihjb25zdCB1aW50OF90KiBiZWdpbikKKyAgICAg
ICAgOiBtX2N1cnNvcihiZWdpbikKKyAgICB7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGNsYXNz
IFQ+IFQgZml4ZWRXaWR0aCgpOworICAgIFN0bXQgc3RtdCgpIHsgcmV0dXJuIHU4PFN0bXQ+KCk7
IH0KKyAgICBTd2l0Y2hDYXNlIHN3aXRjaENhc2UoKSB7IHJldHVybiB1ODxTd2l0Y2hDYXNlPigp
OyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVFdpdGhJbW0+IGlubGluZSBib29sIGNv
ZGUoVCosIFRXaXRoSW1tKiwgdWludDhfdCopOworICAgIFZvaWQgdm9pZEV4cHIoKSB7IHJldHVy
biB1ODxWb2lkPigpOyB9CisgICAgRXhwb3J0Rm9ybWF0IGV4cG9ydEZvcm1hdCgpIHsgcmV0dXJu
IHU4PEV4cG9ydEZvcm1hdD4oKTsgfQorICAgIFR5cGUgdHlwZSgpIHsgcmV0dXJuIHU4PFR5cGU+
KCk7IH0KKyAgICBSZXR1cm5UeXBlIHJ0eXBlKCkgeyByZXR1cm4gdTg8UmV0dXJuVHlwZT4oKTsg
fQorICAgIGlubGluZSB1aW50MzJfdCBpbW1VMzIoKTsKKyAgICBpbmxpbmUgaW50MzJfdCBpbW1T
MzIoKTsKKyAgICBjaGFyIHNpbmdsZUNoYXIoKSB7IHJldHVybiAqbV9jdXJzb3IrKzsgfQorCisg
ICAgaW5saW5lIGJvb2wgaWZJMzJMaXQoY29uc3QgVmVjdG9yPHVpbnQzMl90PiYgaTMycywgdWlu
dDMyX3QqKTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gVCB1OCgpIHsgcmV0
dXJuIFQoKm1fY3Vyc29yKyspOyB9CisKKyAgICBjb25zdCB1aW50OF90KiBtX2N1cnNvcjsKK307
CisKK3RlbXBsYXRlIDw+CitpbmxpbmUgdWludDMyX3QgUmVhZGVyOjpmaXhlZFdpZHRoPHVpbnQz
Ml90PigpCit7CisgICAgdWludDMyX3QgdTMyID0gbV9jdXJzb3JbMF0gfCBtX2N1cnNvclsxXSA8
PCA4IHwgbV9jdXJzb3JbMl0gPDwgMTYgfCBtX2N1cnNvclszXSA8PCAyNDsKKyAgICBtX2N1cnNv
ciArPSA0OworICAgIHJldHVybiB1MzI7Cit9CisKK3RlbXBsYXRlIDw+CitpbmxpbmUgZmxvYXQg
UmVhZGVyOjpmaXhlZFdpZHRoPGZsb2F0PigpCit7CisgICAgdW5pb24geworICAgICAgICB1aW50
OF90IGFycls0XTsKKyAgICAgICAgZmxvYXQgZjsKKyAgICB9IHUgPSB7IHsgbV9jdXJzb3JbMF0s
IG1fY3Vyc29yWzFdLCBtX2N1cnNvclsyXSwgbV9jdXJzb3JbM10gfSB9OworICAgIG1fY3Vyc29y
ICs9IDQ7CisgICAgcmV0dXJuIHUuZjsKK30KKwordGVtcGxhdGUgPD4KK2lubGluZSBkb3VibGUg
UmVhZGVyOjpmaXhlZFdpZHRoPGRvdWJsZT4oKQoreworICAgIHVuaW9uIHsKKyAgICAgICAgdWlu
dDhfdCBhcnJbOF07CisgICAgICAgIGRvdWJsZSBkOworICAgIH0gdSA9IHsgeyBtX2N1cnNvclsw
XSwgbV9jdXJzb3JbMV0sIG1fY3Vyc29yWzJdLCBtX2N1cnNvclszXSwgbV9jdXJzb3JbNF0sIG1f
Y3Vyc29yWzVdLCBtX2N1cnNvcls2XSwgbV9jdXJzb3JbN10gfSB9OworICAgIG1fY3Vyc29yICs9
IDg7CisgICAgcmV0dXJuIHUuZDsKK30KKwordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRXaXRo
SW1tPgorYm9vbCBSZWFkZXI6OmNvZGUoVCogdCwgVFdpdGhJbW0qIHRXaXRoSW1tLCB1aW50OF90
KiBpbW0pCit7CisgICAgdWludDhfdCBieXRlID0gKm1fY3Vyc29yKys7CisgICAgaWYgKCEoYnl0
ZSAmIEhhc0ltbUZsYWcpKSB7CisgICAgICAgICp0ID0gVChieXRlKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgVW5wYWNrT3BXaXRoSW1tKGJ5dGUsIHRXaXRoSW1tLCBpbW0p
OworICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIHVpbnQzMl90IFJlYWRlcjo6aW1tVTMy
KCkKK3sKKyAgICB1aW50MzJfdCB1MzIgPSAqbV9jdXJzb3IrKzsKKyAgICBpZiAodTMyIDwgMHg4
MCkKKyAgICAgICAgcmV0dXJuIHUzMjsKKworICAgIHUzMiAmPSAweDdmOworCisgICAgZm9yICh1
bnNpZ25lZCBzaGlmdCA9IDc7IHRydWU7IHNoaWZ0ICs9IDcpIHsKKyAgICAgICAgdWludDMyX3Qg
YiA9ICptX2N1cnNvcisrOworICAgICAgICBpZiAoYiA8IDB4ODApCisgICAgICAgICAgICByZXR1
cm4gdTMyIHwgKGIgPDwgc2hpZnQpOworICAgICAgICB1MzIgfD0gKGIgJiAweDdmKSA8PCBzaGlm
dDsKKyAgICB9Cit9CisKK2lubGluZSBpbnQzMl90IFJlYWRlcjo6aW1tUzMyKCkKK3sKKyAgICB1
aW50MzJfdCB1MzIgPSAqbV9jdXJzb3IrKzsKKyAgICBpZiAodTMyIDwgMHg4MCkKKyAgICAgICAg
cmV0dXJuIGludDMyX3QodTMyKSA8PCAoMzItNykgPj4gKDMyLTcpOworCisgICAgdTMyICY9IDB4
N2Y7CisKKyAgICBmb3IgKHVuc2lnbmVkIHNoaWZ0ID0gNzsgdHJ1ZTsgc2hpZnQgKz0gNykgewor
ICAgICAgICB1aW50MzJfdCBiID0gKm1fY3Vyc29yKys7CisgICAgICAgIGlmIChiIDwgMHg4MCkg
eworICAgICAgICAgICAgdTMyIHw9IGIgPDwgc2hpZnQ7CisgICAgICAgICAgICBpbnQgc2lnbkV4
dGVuZCA9ICgzMi03KSAtIHNoaWZ0OworICAgICAgICAgICAgaWYgKHNpZ25FeHRlbmQgPiAwKQor
ICAgICAgICAgICAgICAgIHJldHVybiBpbnQzMl90KHUzMikgPDwgc2lnbkV4dGVuZCA+PiBzaWdu
RXh0ZW5kOworICAgICAgICAgICAgcmV0dXJuIGludDMyX3QodTMyKTsKKyAgICAgICAgfQorICAg
ICAgICB1MzIgfD0gKGIgJiAweDdmKSA8PCBzaGlmdDsKKyAgICB9Cit9CisKK2lubGluZSBib29s
IFJlYWRlcjo6aWZJMzJMaXQoY29uc3QgVmVjdG9yPHVpbnQzMl90PiYgaTMycywgdWludDMyX3Qq
IHUzMikKK3sKKyAgICB1aW50OF90IGJ5dGUgPSAqbV9jdXJzb3I7CisKKyAgICBpZiAoYnl0ZSAm
IEhhc0ltbUZsYWcpIHsKKyAgICAgICAgSTMyV2l0aEltbSBpMzJXaXRoSW1tOworICAgICAgICB1
aW50OF90IGltbTsKKyAgICAgICAgVW5wYWNrT3BXaXRoSW1tKGJ5dGUsICZpMzJXaXRoSW1tLCAm
aW1tKTsKKworICAgICAgICBpZiAoaTMyV2l0aEltbSA9PSBJMzJXaXRoSW1tOjpMaXRJbW0pIHsK
KyAgICAgICAgICAgIG1fY3Vyc29yKys7CisgICAgICAgICAgICAqdTMyID0gaW1tOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaTMyV2l0aEltbSA9
PSBJMzJXaXRoSW1tOjpMaXRQb29sKSB7CisgICAgICAgICAgICBtX2N1cnNvcisrOworICAgICAg
ICAgICAgKnUzMiA9IGkzMnNbaW1tXTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChJMzIoYnl0ZSkg
PT0gSTMyOjpMaXRJbW0pIHsKKyAgICAgICAgbV9jdXJzb3IrKzsKKyAgICAgICAgKnUzMiA9IGlt
bVUzMigpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoSTMyKGJ5dGUp
ID09IEkzMjo6TGl0UG9vbCkgeworICAgICAgICBtX2N1cnNvcisrOworICAgICAgICAqdTMyID0g
aTMyc1tpbW1VMzIoKV07CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIFdh
c21PcGNvZGVzX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256659</attachid>
            <date>2015-07-11 11:23:46 -0700</date>
            <delta_ts>2015-07-13 03:24:22 -0700</delta_ts>
            <desc>Work in progress. Fix GC-related bugs.</desc>
            <filename>bug-146064-20150711112243.patch</filename>
            <type>text/plain</type>
            <size>110986</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg2NTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
OWZhNzg4ZjIxZjdmOTg5ZDI1NDdkMTQwYTMyNDRlY2RmNjcwZGI0Li5jYmMzMDJlNzlmOTEwMmJj
NTkwMjY4YjJjYzQ3MzZlOGVkMWMxNDc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNjIgQEAKKzIwMTUtMDctMTEgIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0Bn
bWFpbC5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBuYXRpdmVseSBzdXBwb3J0IFdlYkFzc2Vt
Ymx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYw
NjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUNvZGVCbG9jazo6cmVwbGFjZW1lbnQpOgorICAgICAg
ICAoSlNDOjpXZWJBc3NlbWJseUNvZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsSW50ZXJuYWwpOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJs
eUNvZGVCbG9jazo6V2ViQXNzZW1ibHlDb2RlQmxvY2spOgorICAgICAgICAqIGppdC9KSVRPcGVy
YXRpb25zLmNwcDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0Ojpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChmdW5jdGlvbkxvYWRXZWJBc3NlbWJseSk6CisgICAg
ICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0
VXBDYWxsKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlND
OjpTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZSk6CisgICAgICAgIChKU0M6OlNjcmlwdEV4
ZWN1dGFibGU6Om5ld0NvZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFi
bGU6OnByZXBhcmVGb3JFeGVjdXRpb25JbXBsKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlF
eGVjdXRhYmxlOjpXZWJBc3NlbWJseUV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpXZWJBc3Nl
bWJseUV4ZWN1dGFibGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1i
bHlFeGVjdXRhYmxlOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlFeGVjdXRh
YmxlOjpiYXNlbGluZUNvZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhl
Y3V0YWJsZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhlY3V0
YWJsZTo6c3ltYm9sVGFibGUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4ZWN1dGFibGU6
OmNsZWFyQ29kZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6dW5saW5r
Q2FsbHMpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpF
eGVjdXRhYmxlQmFzZTo6aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpF
eGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlVmlydHVhbCk6CisgICAgICAgICogcnVudGltZS9KU0Z1
bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAg
KiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRl
SW1wbCk6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5oOgorICAgICAgICAo
SlNDOjpKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6
aXNIb3N0RnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlLmg6CisgICAgICAgICog
cnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgICogcnVudGlt
ZS9WTS5oOgorICAgICAgICAqIHdhc20vV2FzbUpJVENvbXBpbGVyLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6Oldhc206Okp1bXBTY29wZTo6SnVtcFNjb3BlKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6SnVtcFNjb3BlOjpqdW1wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SnVtcFNjb3BlOjpsaW5r
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbik6Cisg
ICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjphbGxvY2F0ZVNwYWNlT25TdGFjayk6Cisg
ICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpkZWFsbG9jYXRlU3BhY2VPblN0YWNrKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlQXJndW1lbnRzKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlVmFycyk6CisgICAgICAgIChKU0M6Oldh
c206OkpJVENvbXBpbGVyOjpwYXJzZVN0bXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21w
aWxlcjo6cGFyc2VHZXRMb2NhbCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpw
YXJzZVNldExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlUmV0
dXJuU3RtdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZVN0bXRMaXN0
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlQmxvY2tTdG10KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlSWZTdG10KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlSWZFbHNlU3RtdCk6CisgICAgICAgIChKU0M6Oldh
c206OkpJVENvbXBpbGVyOjpwYXJzZVdoaWxlU3RtdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJ
VENvbXBpbGVyOjpwYXJzZURvU3RtdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVy
OjpwYXJzZUxhYmVsU3RtdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJz
ZUJyZWFrU3RtdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZUJyZWFr
TGFiZWxTdG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlQ29udGlu
dWVTdG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlQ29udGludWVM
YWJlbFN0bXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VTd2l0Y2hT
dG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlRXhwcik6CisgICAg
ICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZUV4cHJJMzIpOgorICAgICAgICAoSlND
OjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VFeHByRjY0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
Z2V0SW50ZXJuYWxGdW5jdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpw
YXJzZUNhbGxJbnRlcm5hbCk6CisgICAgICAgIChKU0M6Oldhc206OmdldEltcG9ydGVkRnVuY3Rp
b24pOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VDYWxsSW1wb3J0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OmNhbGxGdW5jdGlvblNsb3dDYXNlKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlQ2FsbEFyZ3VtZW50cyk6Cisg
ICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZVVuYXJ5T3ApOgorICAgICAgICAo
SlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VCaW5hcnlPcCk6CisgICAgICAgIChKU0M6Oldh
c206OkpJVENvbXBpbGVyOjpwYXJzZVJlbGF0aW9uYWxPcEkzMik6CisgICAgICAgIChKU0M6Oldh
c206OkpJVENvbXBpbGVyOjpwYXJzZVJlbGF0aW9uYWxPcEY2NCk6CisgICAgICAgIChKU0M6Oldh
c206OkpJVENvbXBpbGVyOjpwYXJzZUNvbW1hKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29t
cGlsZXI6OnBhcnNlQ29uZCk6CisgICAgICAgICogd2FzbS9XYXNtSklUQ29tcGlsZXIuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpKSVRDb21waWxlcik6CisgICAg
ICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpzdGFja0FkZHJlc3MpOgorICAgICAgICAoSlND
OjpXYXNtOjpKSVRDb21waWxlcjo6dGVtcG9yYXJ5QWRkcmVzcyk6CisgICAgICAgIChKU0M6Oldh
c206OkpJVENvbXBpbGVyOjpwdXNoQ29udGludWVMYWJlbExhYmVsKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6SklUQ29tcGlsZXI6OnBvcENvbnRpbnVlTGFiZWxMYWJlbCk6CisgICAgICAgIChKU0M6
Oldhc206OkpJVENvbXBpbGVyOjpjb250aW51ZUxhYmVsTGFiZWwpOgorICAgICAgICAoSlNDOjpX
YXNtOjpKSVRDb21waWxlcjo6cHVzaEJyZWFrTGFiZWxKdW1wTGlzdCk6CisgICAgICAgIChKU0M6
Oldhc206OkpJVENvbXBpbGVyOjpwb3BCcmVha0xhYmVsSnVtcExpc3QpOgorICAgICAgICAoSlND
OjpXYXNtOjpKSVRDb21waWxlcjo6YnJlYWtMYWJlbEp1bXBMaXN0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6SklUQ29tcGlsZXI6OnB1c2hDb250aW51ZUp1bXBTY29wZSk6CisgICAgICAgIChKU0M6
Oldhc206OkpJVENvbXBpbGVyOjpwb3BDb250aW51ZUp1bXBTY29wZSk6CisgICAgICAgIChKU0M6
Oldhc206OkpJVENvbXBpbGVyOjp0b3BDb250aW51ZUp1bXBTY29wZSk6CisgICAgICAgIChKU0M6
Oldhc206OkpJVENvbXBpbGVyOjpwdXNoQnJlYWtKdW1wTGlzdCk6CisgICAgICAgIChKU0M6Oldh
c206OkpJVENvbXBpbGVyOjpwb3BCcmVha0p1bXBMaXN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
SklUQ29tcGlsZXI6OnRvcEJyZWFrSnVtcExpc3QpOgorICAgICAgICAqIHdhc20vV2FzbU1vZHVs
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OmNvbXBpbGUpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OnBhcnNlQ29uc3RhbnRQb29sU2VjdGlvbik6CisgICAg
ICAgIChKU0M6Oldhc206Ok1vZHVsZTo6cGFyc2VTaWduYXR1cmVTZWN0aW9uKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TW9kdWxlOjpwYXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlvbik6CisgICAgICAg
IChKU0M6Oldhc206Ok1vZHVsZTo6cGFyc2VHbG9iYWxTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TW9kdWxlOjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TW9kdWxlOjpwYXJzZUZ1bmN0aW9uUG9pbnRlclRhYmxlcyk6CisgICAgICAg
IChKU0M6Oldhc206Ok1vZHVsZTo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb25TZWN0aW9uKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpwYXJzZUV4cG9ydFNlY3Rpb24pOgorICAgICAgICAo
SlNDOjpXYXNtOjpNb2R1bGU6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlOjppbnRlcm5hbEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Y29tcGlsZSk6Cisg
ICAgICAgICogd2FzbS9XYXNtTW9kdWxlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpN
b2R1bGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6Y3JlYXRlU3RydWN0
dXJlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpmdW5jdGlvbkltcG9ydE5hbWUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6Ok1vZHVsZSk6CisgICAgICAgICogd2FzbS9XYXNt
T3Bjb2Rlcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6b3BlcmF0b3J8ICk6CisgICAg
ICAgIChKU0M6Oldhc206Om9wZXJhdG9yJik6CisgICAgICAgIChKU0M6Oldhc206OkV4cHI6OkV4
cHIpOgorICAgICAgICAoSlNDOjpXYXNtOjpFeHByOjp0eXBlKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6RXhwcjo6aTMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcjo6ZjMyKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6RXhwcjo6ZjY0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcjo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChKU0M6Oldhc206OkV4cHI6Om9wZXJhdG9yIT0pOgorICAgICAgICAo
SlNDOjpXYXNtOjpQYWNrT3BXaXRoSW1tKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VW5wYWNrT3BX
aXRoSW1tKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcldpdGhJbW06OkV4cHJXaXRoSW1tKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcldpdGhJbW06OnR5cGUpOgorICAgICAgICAoSlNDOjpX
YXNtOjpFeHByV2l0aEltbTo6aTMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcldpdGhJbW06
OmYzMik6CisgICAgICAgIChKU0M6Oldhc206OkV4cHJXaXRoSW1tOjpmNjQpOgorICAgICAgICAo
SlNDOjpXYXNtOjpTaWduYXR1cmU6OlNpZ25hdHVyZSk6CisgICAgICAgIChKU0M6Oldhc206OlNp
Z25hdHVyZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZTo6b3Bl
cmF0b3IhPSk6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZTo6SGFzaDo6b3BlcmF0b3Io
KSk6CisgICAgICAgIChKU0M6Oldhc206OlJlYWRlcjo6UmVhZGVyKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6UmVhZGVyOjpzdG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVhZGVyOjpzd2l0Y2hD
YXNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVhZGVyOjp2b2lkRXhwcik6CisgICAgICAgIChK
U0M6Oldhc206OlJlYWRlcjo6ZXhwb3J0Rm9ybWF0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVh
ZGVyOjp0eXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVhZGVyOjpydHlwZSk6CisgICAgICAg
IChKU0M6Oldhc206OlJlYWRlcjo6c2luZ2xlQ2hhcik6CisgICAgICAgIChKU0M6Oldhc206OlJl
YWRlcjo6dTgpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OmZpeGVkV2lkdGg8dWludDMy
X3Q+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVhZGVyOjpmaXhlZFdpZHRoPGZsb2F0Pik6Cisg
ICAgICAgIChKU0M6Oldhc206OlJlYWRlcjo6Zml4ZWRXaWR0aDxkb3VibGU+KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6UmVhZGVyOjpjb2RlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVhZGVyOjpp
bW1VMzIpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OmltbVMzMik6CisgICAgICAgIChK
U0M6Oldhc206OlJlYWRlcjo6aWZJMzJMaXQpOgorCiAyMDE1LTA3LTA4ICBKb3NlcGggUGVjb3Jh
cm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGdyYW1tYXIgaXNzdWUgaW4g
VHlwZUVycm9yIGF0dGVtcHRpbmcgdG8gY2hhbmdlIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDA2ZTk5NzBjNTJjZTAxMmFjZjM4MDQz
MjQzN2YyYzI2ZjUyODhhNzAuLjA0MTkyOGY0NGQyY2VjODk3ZmRmNDQ0ZjZjMjY1MmFjZTVhMWQ5
Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDIwLDYgKzEwMjAsMTEgQEAK
IAkJNzBFQ0E2MDcxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MDIxQUZEQkVB
MjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuY3BwICovOyB9OwogCQk3MEVDQTYwODFBRkRC
RUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MDMxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBs
YXRlUmVnaXN0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3MEVDQTYwOTFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MDQx
QUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3QkQxMEM0MjFCNEVENDNDMDBCRDU0
MUEgLyogV2FzbUpJVENvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdCRDEwQzNEMUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNtSklUQ29tcGls
ZXIuY3BwICovOyB9OworCQk3QkQxMEM0MzFCNEVENDQwMDBCRDU0MUEgLyogV2FzbUpJVENvbXBp
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkQx
MEMzRTFCNEVENDM5MDBCRDU0MUEgLyogV2FzbUpJVENvbXBpbGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0JEMTBDNDQxQjRFRDQ0NTAwQkQ1
NDFBIC8qIFdhc21Nb2R1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0JEMTBDM0YxQjRFRDQzOTAwQkQ1NDFBIC8qIFdhc21Nb2R1bGUuY3BwICov
OyB9OworCQk3QkQxMEM0NTFCNEVENDQ5MDBCRDU0MUEgLyogV2FzbU1vZHVsZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JEMTBDNDAxQjRFRDQzOTAw
QkQ1NDFBIC8qIFdhc21Nb2R1bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk3QkQxMEM0NjFCNEVENDRFMDBCRDU0MUEgLyogV2FzbU9wY29kZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRDEwQzQx
MUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNtT3Bjb2Rlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMDA4Q0RBMTg3MTI0QkIwMDk1NUMyNCAvKiBK
U1Byb21pc2VEZWZlcnJlZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QzAwOENEODE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQu
Y3BwICovOyB9OwogCQk3QzAwOENEQjE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJy
ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDA4
Q0Q5MTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMDA4Q0U3MTg3NjMxQjYwMDk1
NUMyNCAvKiBNaWNyb3Rhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDMDA4Q0U1MTg3NjMxQjYwMDk1NUMyNCAvKiBNaWNyb3Rhc2suaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjc2Miw2ICsyNzY3
LDExIEBACiAJCTcwRUNBNjAyMUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0cnku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MEVDQTYwMzFBRkRCRUEyMDA0NDk3
MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUZW1wbGF0ZVJlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwRUNB
NjA0MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0cnlLZXkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJN0JEMTBDM0QxQjRFRDQzOTAwQkQ1NDFBIC8qIFdhc21KSVRDb21w
aWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtSklUQ29t
cGlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QkQxMEMzRTFCNEVENDM5
MDBCRDU0MUEgLyogV2FzbUpJVENvbXBpbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdhc21KSVRDb21waWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
QkQxMEMzRjFCNEVENDM5MDBCRDU0MUEgLyogV2FzbU1vZHVsZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtTW9kdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJN0JEMTBDNDAxQjRFRDQzOTAwQkQ1NDFBIC8qIFdhc21Nb2R1bGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU1vZHVsZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3QkQxMEM0MTFCNEVENDM5MDBCRDU0MUEgLyogV2FzbU9wY29kZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU9wY29kZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MwMDhDRDgxODcxMjRCQjAwOTU1QzI0IC8qIEpTUHJv
bWlzZURlZmVycmVkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
UHJvbWlzZURlZmVycmVkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MwMDhD
RDkxODcxMjRCQjAwOTU1QzI0IC8qIEpTUHJvbWlzZURlZmVycmVkLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTUHJvbWlzZURlZmVycmVkLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdDMDA4Q0U1MTg3NjMxQjYwMDk1NUMyNCAvKiBNaWNyb3Rhc2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWljcm90YXNrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0zNjE3LDYgKzM2MjcsNyBAQAogCQkJCTdFRjZFMEJCMEVCN0ExRUMw
MDc5QUZBRiAvKiBydW50aW1lICovLAogCQkJCTE0MTIxMTAwMEE0ODc3MjYwMDQ4MDI1NSAvKiB0
ZXN0cyAqLywKIAkJCQk4NjAzQ0VGMDE0Qzc1M0VGMDBBRTU5RTMgLyogdG9vbHMgKi8sCisJCQkJ
N0JEMTBDM0MxQjRFRDQxRDAwQkQ1NDFBIC8qIHdhc20gKi8sCiAJCQkJODZFQUM0OEMwRjkzRThC
OTAwOEVDOTQ4IC8qIHlhcnIgKi8sCiAJCQkpOwogCQkJbmFtZSA9IEphdmFTY3JpcHRDb3JlOwpA
QCAtNDI3OSw2ICs0MjkwLDE4IEBACiAJCQlwYXRoID0gZGlzYXNzZW1ibGVyL0FSTXY3OwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJN0JEMTBDM0MxQjRFRDQxRDAwQkQ1NDFB
IC8qIHdhc20gKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJ
CTdCRDEwQzNEMUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNtSklUQ29tcGlsZXIuY3BwICovLAorCQkJ
CTdCRDEwQzNFMUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNtSklUQ29tcGlsZXIuaCAqLywKKwkJCQk3
QkQxMEMzRjFCNEVENDM5MDBCRDU0MUEgLyogV2FzbU1vZHVsZS5jcHAgKi8sCisJCQkJN0JEMTBD
NDAxQjRFRDQzOTAwQkQ1NDFBIC8qIFdhc21Nb2R1bGUuaCAqLywKKwkJCQk3QkQxMEM0MTFCNEVE
NDM5MDBCRDU0MUEgLyogV2FzbU9wY29kZXMuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gd2FzbTsK
KwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTdFMzlEODFEMEVDMzhFRkEwMDNB
RjExQSAvKiBieXRlY29tcGlsZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKApAQCAtNjAxMSw2ICs2MDM0LDcgQEAKIAkJCQlCQzE4QzQwNTBFMTZGNUNEMDBCMzQ0
NjAgLyogRnVuY3Rpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQkUyQ0FFMTRF
OTg1QUEwMDA1OTNBRCAvKiBHQ0Fzc2VydGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2
RDMwMTVBOERDRTIwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTdCRDEwQzQ1MUI0RUQ0NDkwMEJENTQxQSAvKiBXYXNtTW9kdWxlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3MEVDMEVDNzFBQTBEN0RBMDBCNkFBRkEgLyogU3RyaW5nSXRlcmF0b3JQ
cm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkFDMTdCNkI1M0YwMEE3QUUzRiAv
KiBHQ0luY29taW5nUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2QUQxN0I2
QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02MTQ1LDYgKzYxNjksNyBAQAogCQkJCUJDMThDNDFEMEUxNkY1Q0QwMEIzNDQ2MCAv
KiBKU0NsYXNzUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxMzE2N0JBQkQ3MDA2RDc2
MEEgLyogSlNDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNzE2N0JBQkVFMDA2
RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCRDEwQzQz
MUI0RUQ0NDAwMEJENTQxQSAvKiBXYXNtSklUQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDFFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NvbnRleHRSZWYuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0OENEMUQ4MTA4Q0Y5MDIwMDgxNjNDNiAvKiBKU0NvbnRleHRSZWZQcml2YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzIwMjhCODE3OTc2MDFFMDA5ODAyOEMgLyogSlNDVGVzdFJ1
bm5lclV0aWxzLmggaW4gSGVhZGVycyAqLywKQEAgLTYxNTQsNiArNjE3OSw3IEBACiAJCQkJOTc4
ODAxNDExNDcxQUQ5MjAwNDFCMDE2IC8qIEpTRGF0ZU1hdGguaCBpbiBIZWFkZXJzICovLAogCQkJ
CUMyQTdGNjg4MTYwNDMyRDQwMEY3NkI5OCAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODZFM0M2MTQxNjdCQUJENzAwNkQ3NjBBIC8qIEpTRXhwb3J0LmggaW4g
SGVhZGVycyAqLywKKwkJCQk3QkQxMEM0NjFCNEVENDRFMDBCRDU0MUEgLyogV2FzbU9wY29kZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3QjRBQ0FGMTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9y
dE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RUYxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTRmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtNzE1Miw2ICs3MTc4
LDcgQEAKIAkJCQkwRkE1ODFCQTE1MEU5NTJDMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg2RUM5RENGMTMyOERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRp
b25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0ZEMTdBMEI4Q0MwMDc3M0FEOCAvKiBE
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdC
RDEwQzQyMUI0RUQ0M0MwMEJENTQxQSAvKiBXYXNtSklUQ29tcGlsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZEODJFNTYxNDFEQUYwODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRDhBMzI1MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBv
aW50Q3JlYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTUwNjg2NzFBRTI1RTI4
MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzE4
OCw2ICs3MjE1LDcgQEAKIAkJCQkwRkMwOTdBMTE0NkIyOENBMDBDRjI0NDIgLyogREZHVGh1bmtz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTNCNEE5MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRC
eUlkVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDlGQjg2NzFBRTMzNUM2MDAzOUQw
NjkgLyogSlNXZWFrU2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdCRDEwQzQ0MUI0RUQ0NDUw
MEJENTQxQSAvKiBXYXNtTW9kdWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzI3MTdE
NTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRDhBMzI5MTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxNzY2MjE5NkI4
RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCAxMjQzOWUwOGNhZTEw
ODY2ZTkzZDlhNzQ2ZmMyYzU3YmJmYTgyZDBjLi5kMmNmMTUzOGFmNmMwY2M5YzJiMmJhY2I1ZjY5
NmI2YWI3OWU3OTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcApAQCAtMjE4Myw2ICsyMTgzLDY4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlw
dEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGluCiAg
ICAgbV9oZWFwLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChzaXplb2YoQ29kZUJsb2NrKSAr
IG1faW5zdHJ1Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikpOwogfQogCitDb2Rl
QmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgOiBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmpl
Y3QtPnZtKCksIG93bmVyRXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0KQorICAgICwgbV9oZWFwKCZt
X2dsb2JhbE9iamVjdC0+dm0oKS5oZWFwKQorICAgICwgbV9udW1DYWxsZWVSZWdpc3RlcnMoMCkg
Ly8gRklYTUUKKyAgICAsIG1fbnVtVmFycygwKSAvLyBGSVhNRQorICAgICwgbV9pc0NvbnN0cnVj
dG9yKGZhbHNlKSAvLyBGSVhNRQorICAgICwgbV9zaG91bGRBbHdheXNCZUlubGluZWQodHJ1ZSkK
KyAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQorICAgICwgbV9oYXNCZWVuQ29t
cGlsZWRXaXRoRlRMKGZhbHNlKQorICAgIC8vICwgbV91bmxpbmtlZENvZGUobV9nbG9iYWxPYmpl
Y3QtPnZtKCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2spCisgICAgLCBtX2hh
c0RlYnVnZ2VyU3RhdGVtZW50KGZhbHNlKQorICAgICwgbV9zdGVwcGluZ01vZGUoU3RlcHBpbmdN
b2RlRGlzYWJsZWQpCisgICAgLCBtX251bUJyZWFrcG9pbnRzKDApCisgICAgLCBtX293bmVyRXhl
Y3V0YWJsZShtX2dsb2JhbE9iamVjdC0+dm0oKSwgb3duZXJFeGVjdXRhYmxlLCBvd25lckV4ZWN1
dGFibGUpCisgICAgLCBtX3ZtKCZtX2dsb2JhbE9iamVjdC0+dm0oKSkgLy8gRklYTUUKKyAgICAs
IG1fdGhpc1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcigpKSAvLyBGSVhNRQorICAgICwgbV9zY29w
ZVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcigpKSAvLyBGSVhNRQorICAgICwgbV9sZXhpY2FsRW52
aXJvbm1lbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoKSkgLy8gRklYTUUKKyAgICAsIG1faXNT
dHJpY3RNb2RlKGZhbHNlKSAvLyBGSVhNRQorICAgICwgbV9uZWVkc0FjdGl2YXRpb24oZmFsc2Up
CisgICAgLCBtX21heUJlRXhlY3V0aW5nKGZhbHNlKQorICAgICwgbV9zb3VyY2UobnVsbHB0cikK
KyAgICAsIG1fc291cmNlT2Zmc2V0KDApCisgICAgLCBtX2ZpcnN0TGluZUNvbHVtbk9mZnNldCgw
KQorICAgICwgbV9jb2RlVHlwZShGdW5jdGlvbkNvZGUpIC8vIEZJWE1FCisgICAgLCBtX29zckV4
aXRDb3VudGVyKDApCisgICAgLCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcigwKQorICAgICwg
bV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigwKQorI2lmIEVOQUJMRShKSVQpCisgICAgLCBt
X2NhcGFiaWxpdHlMZXZlbFN0YXRlKERGRzo6Q2FwYWJpbGl0eUxldmVsTm90U2V0KQorI2VuZGlm
Cit7CisgICAgbV92aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQuc3RvcmUoZmFsc2UsIHN0ZDo6
bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworCisgICAgQVNTRVJUKG1faGVhcC0+aXNEZWZlcnJlZCgp
KTsKKworICAgIC8qCisgICAgQVNTRVJUKG1fc2NvcGVSZWdpc3Rlci5pc0xvY2FsKCkpOworCisg
ICAgYm9vbCBkaWRDbG9uZVN5bWJvbFRhYmxlID0gZmFsc2U7CisKKyAgICBpZiAoU3ltYm9sVGFi
bGUqIHN5bWJvbFRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkpIHsKKyAg
ICAgICAgaWYgKG1fdm0tPnR5cGVQcm9maWxlcigpKSB7CisgICAgICAgICAgICBDb25jdXJyZW50
SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKKyAgICAgICAgICAgIHN5bWJv
bFRhYmxlLT5wcmVwYXJlRm9yVHlwZVByb2ZpbGluZyhsb2NrZXIpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHN5bWJvbFRhYmxlLT5zY29w
ZVNpemUoKSkgeworICAgICAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQoKm1fdm0sIG1fb3duZXJF
eGVjdXRhYmxlLmdldCgpLCBzeW1ib2xUYWJsZS0+Y2xvbmVTY29wZVBhcnQoKm1fdm0pKTsKKyAg
ICAgICAgICAgIGRpZENsb25lU3ltYm9sVGFibGUgPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIG1fc3ltYm9sVGFibGUuc2V0KCptX3ZtLCBtX293bmVyRXhlY3V0YWJsZS5nZXQo
KSwgc3ltYm9sVGFibGUpOworICAgIH0KKyAgICAqLworCisgICAgLy8gRklYTUU6CisgICAgc2V0
TnVtUGFyYW1ldGVycygwKTsKKworICAgIG1faGVhcC0+bV9jb2RlQmxvY2tzLmFkZCh0aGlzKTsK
KyAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVvZihDb2RlQmxvY2sp
KTsKK30KKwogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKIHsKICAgICBpZiAobV92bS0+bV9wZXJC
eXRlY29kZVByb2ZpbGVyKQpAQCAtMzA1Nyw2ICszMTE5LDExIEBAIENvZGVCbG9jayogRnVuY3Rp
b25Db2RlQmxvY2s6OnJlcGxhY2VtZW50KCkKICAgICByZXR1cm4ganNDYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29kZUJsb2NrRm9yKG1faXNDb25zdHJ1Y3Rv
ciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7CiB9CiAKK0NvZGVCbG9jayogV2Vi
QXNzZW1ibHlDb2RlQmxvY2s6OnJlcGxhY2VtZW50KCkKK3sKKyAgICByZXR1cm4ganNDYXN0PFdl
YkFzc2VtYmx5RXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29kZUJsb2NrRm9yKG1f
aXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7Cit9CisKIERG
Rzo6Q2FwYWJpbGl0eUxldmVsIFByb2dyYW1Db2RlQmxvY2s6OmNhcGFiaWxpdHlMZXZlbEludGVy
bmFsKCkKIHsKICAgICByZXR1cm4gREZHOjpwcm9ncmFtQ2FwYWJpbGl0eUxldmVsKHRoaXMpOwpA
QCAtMzA3Myw2ICszMTQwLDExIEBAIERGRzo6Q2FwYWJpbGl0eUxldmVsIEZ1bmN0aW9uQ29kZUJs
b2NrOjpjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpCiAgICAgICAgIHJldHVybiBERkc6OmZ1bmN0
aW9uRm9yQ29uc3RydWN0Q2FwYWJpbGl0eUxldmVsKHRoaXMpOwogICAgIHJldHVybiBERkc6OmZ1
bmN0aW9uRm9yQ2FsbENhcGFiaWxpdHlMZXZlbCh0aGlzKTsKIH0KKworREZHOjpDYXBhYmlsaXR5
TGV2ZWwgV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNhcGFiaWxpdHlMZXZlbEludGVybmFsKCkKK3sK
KyAgICByZXR1cm4gREZHOjpDYW5ub3RDb21waWxlOworfQogI2VuZGlmCiAKIHZvaWQgQ29kZUJs
b2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25SZWFzb24gcmVhc29uLCBSZW9wdGltaXph
dGlvbk1vZGUgbW9kZSwgY29uc3QgRmlyZURldGFpbCogZGV0YWlsKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4IDY1ZGFiOTU1ZTY4ZjE0NzU3YzVhYjFh
MjllMTk3NDI4ZDBjYzhlOTguLmE4ODRmYzE5OGM2YTY3OTgzYzBkMDY5YjcxMmNkY2NiNTEzMGMx
MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKQEAgLTk3
LDYgKzk3LDggQEAgcHJvdGVjdGVkOgogICAgICAgICAKICAgICBDb2RlQmxvY2soU2NyaXB0RXhl
Y3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayosIEpTU2NvcGUqLCBQ
YXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCB1bnNpZ25l
ZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpOwogCisgICAgQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFi
bGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqKTsKKwogICAgIFdyaXRlQmFycmll
cjxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7CiAgICAgSGVhcCogbV9oZWFwOwogCkBA
IC0xMTQyLDYgKzExNDQsMjcgQEAgcHJvdGVjdGVkOgogI2VuZGlmCiB9OwogCitjbGFzcyBXZWJB
c3NlbWJseUNvZGVCbG9jayA6IHB1YmxpYyBDb2RlQmxvY2sgeworcHVibGljOgorICAgIFdlYkFz
c2VtYmx5Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywgV2ViQXNzZW1ibHlDb2RlQmxvY2sm
IG90aGVyKQorICAgICAgICA6IENvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQorICAg
IHsKKyAgICB9CisKKyAgICBXZWJBc3NlbWJseUNvZGVCbG9jayhXZWJBc3NlbWJseUV4ZWN1dGFi
bGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICAg
ICAgOiBDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpCisgICAgeworICAg
IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxs
eSgpIG92ZXJyaWRlIHsgfTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgdmlydHVhbCBDb2RlQmxv
Y2sqIHJlcGxhY2VtZW50KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlM
ZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpIG92ZXJyaWRlOworI2VuZGlmCit9OworCiBp
bmxpbmUgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpbmxp
bmVDYWxsRnJhbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKaW5kZXggMzgwMTVkMmQ4MDRmOTM1OTIwZjk3NTZhNzFjYTJmZGZlYTE3OTU5MC4uMDE4OGU1
MzU2ZjRhMTRjZDMxZjNlNDllNTEwMmExNjA4YmMwNTMyZSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC03NzgsNyArNzc4LDEwIEBAIGlubGluZSBj
aGFyKiBsaW5rRm9yKAogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHI7CiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSAwOwotICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5j
dGlvbigpKQorICAgIGlmIChleGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKSB7
CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgcmVhbGx5IHVzZSBSZWdpc3RlclByZXNlcnZh
dGlvbk5vdFJlcXVpcmVkPworICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlwb2lu
dEZvcigqdm0sIGtpbmQsIEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCwgUmVnaXN0ZXJQcmVzZXJ2YXRp
b25Ob3RSZXF1aXJlZCk7CisgICAgfSBlbHNlIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlv
bigpKQogICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcigqdm0sIGtp
bmQsIE11c3RDaGVja0FyaXR5LCByZWdpc3RlcnMpOwogICAgIGVsc2UgewogICAgICAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwpAQCAtNzk1LDE2ICs3OTgsMTkgQEAgaW5saW5lIGNo
YXIqIGxpbmtGb3IoCiAgICAgICAgIH0KICAgICAgICAgY29kZUJsb2NrID0gZnVuY3Rpb25FeGVj
dXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCk7CiAgICAgICAgIEFyaXR5Q2hlY2tNb2RlIGFyaXR5
OwotICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8
IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxM
aW5rSW5mby0+Y2FsbFR5cGUoKSA9PSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzIHx8IGNhbGxM
aW5rSW5mby0+Y2FsbFR5cGUoKSA9PSBDYWxsTGlua0luZm86OkNvbnN0cnVjdFZhcmFyZ3MpCisg
ICAgICAgIGlmIChleGVjQ2FsbGVlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3Rh
dGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgfHwgKGNhbGxMaW5r
SW5mbyAmJiAoY2FsbExpbmtJbmZvLT5jYWxsVHlwZSgpID09IENhbGxMaW5rSW5mbzo6Q2FsbFZh
cmFyZ3MgfHwgY2FsbExpbmtJbmZvLT5jYWxsVHlwZSgpID09IENhbGxMaW5rSW5mbzo6Q29uc3Ry
dWN0VmFyYXJncykpKQogICAgICAgICAgICAgYXJpdHkgPSBNdXN0Q2hlY2tBcml0eTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNoZWNrTm90UmVxdWlyZWQ7CiAgICAg
ICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3IoKnZtLCBraW5k
LCBhcml0eSwgcmVnaXN0ZXJzKTsKICAgICB9Ci0gICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5P
bmNlKCkpCi0gICAgICAgIGNhbGxMaW5rSW5mby0+c2V0U2VlbigpOwotICAgIGVsc2UKLSAgICAg
ICAgbGlua0ZvcihleGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwg
Y29kZVB0ciwga2luZCwgcmVnaXN0ZXJzKTsKKyAgICAvLyBUT0RPOiBzdXBwb3J0IHJlcGF0Y2hp
bmcKKyAgICBpZiAoY2FsbExpbmtJbmZvKSB7CisgICAgICAgIGlmICghY2FsbExpbmtJbmZvLT5z
ZWVuT25jZSgpKQorICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGxpbmtGb3IoZXhlY0NhbGxlZSwgKmNhbGxMaW5rSW5mbywgY29k
ZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIsIGtpbmQsIHJlZ2lzdGVycyk7CisgICAgfQogICAgIAog
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihjb2RlUHRyLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCAzODBkODliNWQzNTkyNzRhMjc0ODI5
MTgzMmNlZWQ4ODhhNjNjMjM2Li45ODM5NDNlZDFlYzRkOTdmYWFhMjQzMDMyMDExNGZhMzM1NWRm
YzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIlN0
cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIgogI2luY2x1ZGUgIlRlc3RSdW5uZXJVdGlscy5oIgog
I2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgorI2luY2x1ZGUgIldhc21KSVRDb21waWxlci5o
IgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxp
Yi5oPgpAQCAtNDkxLDYgKzQ5Miw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uUmV0dXJuVHlwZUZvcihFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRHVtcEJhc2ljQmxvY2tFeGVjdXRpb25SYW5nZXMo
RXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkhhc0Jhc2ljQmxvY2tFeGVjdXRlZChFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRW5hYmxlRXhjZXB0aW9uRnV6eihFeGVjU3RhdGUqKTsK
K3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZFdlYkFzc2Vt
Ymx5KEV4ZWNTdGF0ZSopOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQogc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRTYW1wbGluZ0ZsYWdzKEV4ZWNT
dGF0ZSopOwpAQCAtNjUzLDYgKzY1NSw4IEBAIHByb3RlY3RlZDoKICAgICAgICAgYWRkRnVuY3Rp
b24odm0sICJoYXNCYXNpY0Jsb2NrRXhlY3V0ZWQiLCBmdW5jdGlvbkhhc0Jhc2ljQmxvY2tFeGVj
dXRlZCwgMik7CiAKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJlbmFibGVFeGNlcHRpb25GdXp6
IiwgZnVuY3Rpb25FbmFibGVFeGNlcHRpb25GdXp6LCAwKTsKKworICAgICAgICBhZGRGdW5jdGlv
bih2bSwgImxvYWRXZWJBc3NlbWJseSIsIGZ1bmN0aW9uTG9hZFdlYkFzc2VtYmx5LCAxKTsKICAg
ICAgICAgCiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShnbG9i
YWxFeGVjKCksIDApOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50cy5z
aXplKCk7ICsraSkKQEAgLTExODIsNiArMTE4NiwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uRW5hYmxlRXhjZXB0aW9uRnV6eihFeGVjU3RhdGUqKQogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25Mb2FkV2ViQXNzZW1ibHkoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIFN0cmluZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKKyAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOworICAgIGlmICghZmlsbEJ1ZmZl
cldpdGhDb250ZW50c09mRmlsZShmaWxlTmFtZSwgYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQ291bGQgbm90IG9wZW4gZmlsZS4iKSkpKTsKKyAgICBXYXNt
OjpNb2R1bGUqIG1vZHVsZSA9IFdhc206OmNvbXBpbGUoZXhlYywgYnVmZmVyKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKG1vZHVsZSk7Cit9CisKIC8vIFVzZSBTRUggZm9yIFJlbGVhc2Ug
YnVpbGRzIG9ubHkgdG8gZ2V0IHJpZCBvZiB0aGUgY3Jhc2ggcmVwb3J0IGRpYWxvZwogLy8gKGx1
Y2tpbHkgdGhlIHNhbWUgdGVzdHMgZmFpbCBpbiBSZWxlYXNlIGFuZCBEZWJ1ZyBidWlsZHMgc28g
ZmFyKS4gTmVlZCB0bwogLy8gYmUgaW4gYSBzZXBhcmF0ZSBtYWluIGZ1bmN0aW9uIGJlY2F1c2Ug
dGhlIGpzY21haW4gZnVuY3Rpb24gcmVxdWlyZXMgb2JqZWN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAppbmRleCA5Y2NjMWNlNDk3ODhkNzEwZmM2
OWE2OTE1NDM0MjcxYThjMDlkMmU0Li5iNDllYWFjNTFhZDY5MThlMDFjZGEzZTgzZWVhMWUyM2I5
MWQyZGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRo
cy5jcHAKQEAgLTExMTksNyArMTExOSw5IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0
VXBDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSW5zdHJ1Y3Rpb24qIHBjLCBDb2RlCiAgICAg
CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHI7CiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSAwOwotICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQorICAgIGlm
IChleGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKQorICAgICAgICBjb2RlUHRy
ID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcih2bSwga2luZCwgQXJpdHlDaGVja05vdFJlcXVp
cmVkLCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKKyAgICBlbHNlIGlmIChleGVj
dXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQogICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+
ZW50cnlwb2ludEZvcih2bSwga2luZCwgTXVzdENoZWNrQXJpdHksIFJlZ2lzdGVyUHJlc2VydmF0
aW9uTm90UmVxdWlyZWQpOwogICAgIGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4
ZWN1dGFibGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNw
cAppbmRleCA1NTI0MGZkOTFmN2JjNzg0MmYxM2U1OTI4MWQxMGQyMWQ4NmM0ZjUwLi5hYmYyZDE1
NjU0YzY2ZTA2ZmYxYWVhN2FjMGJjNDlmNTIxNmQzZmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcApAQCAtMTQ5LDYgKzE0OSwyMSBAQCB2b2lkIFNj
cmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKENvZGVCbG9jayogZ2VuZXJpY0NvZGVCbG9jaykK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIAorICAgIGlmIChpc1dlYkFzc2VtYmx5RXhlY3V0
YWJsZSgpKSB7CisgICAgICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpz
Q2FzdDxXZWJBc3NlbWJseUV4ZWN1dGFibGUqPih0aGlzKTsKKyAgICAgICAgV2ViQXNzZW1ibHlD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PFdlYkFzc2VtYmx5Q29kZUJsb2NrKj4o
Z2VuZXJpY0NvZGVCbG9jayk7CisKKyAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwp
OworCisgICAgICAgIGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ2FsbCA9IGNvZGVCbG9jazsK
KyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiB0aGlzIGlzIGp1c3QgdG8gbWFrZSBpc0hvc3RG
dW5jdGlvbigpIGhhcHB5LgorICAgICAgICAvLyBCdXQgdGhpcyB3aWxsIG1ha2UgaXNIb3N0RnVu
Y3Rpb24oKSByZXR1cm4gdHJ1ZS4KKyAgICAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCA9IDA7
CisgICAgICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCA9IDA7CisgICAgfSBlbHNlIHsK
KworICAgICAgICAvLyBGSVhNRTogbmVlZCB0byBkZWFsIHdpdGggY29kZVR5cGUoKQogICAgIHN3
aXRjaCAoZ2VuZXJpY0NvZGVCbG9jay0+Y29kZVR5cGUoKSkgewogICAgIGNhc2UgR2xvYmFsQ29k
ZTogewogICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxQcm9n
cmFtRXhlY3V0YWJsZSo+KHRoaXMpOwpAQCAtMTkyLDYgKzIwNyw4IEBAIHZvaWQgU2NyaXB0RXhl
Y3V0YWJsZTo6aW5zdGFsbENvZGUoQ29kZUJsb2NrKiBnZW5lcmljQ29kZUJsb2NrKQogICAgIGlm
IChvbGRDb2RlQmxvY2spCiAgICAgICAgIG9sZENvZGVCbG9jay0+dW5saW5rSW5jb21pbmdDYWxs
cygpOwogCisgICAgfQorICAgIAogICAgIERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGdlbmVyaWNDb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpOwogICAgIGlmIChkZWJ1Z2dlcikKICAg
ICAgICAgZGVidWdnZXItPnJlZ2lzdGVyQ29kZUJsb2NrKGdlbmVyaWNDb2RlQmxvY2spOwpAQCAt
MjI4LDYgKzI0NSw4IEBAIFJlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6Om5ld0Nv
ZGVCbG9ja0ZvcigKICAgICAgICAgICAgIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCks
IGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0Q29sdW1uKCkpKTsKICAgICB9CiAgICAgCisgICAg
QVNTRVJUKCFpc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKTsKKyAgICAKICAgICBSRUxFQVNFX0FT
U0VSVChjbGFzc0luZm8oKSA9PSBGdW5jdGlvbkV4ZWN1dGFibGU6OmluZm8oKSk7CiAgICAgUkVM
RUFTRV9BU1NFUlQoZnVuY3Rpb24pOwogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKTsKQEAgLTMyMyw2ICszNDIsOCBA
QCBzdGF0aWMgdm9pZCBzZXR1cEpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQogSlNP
YmplY3QqIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb25JbXBsKAogICAgIEV4
ZWNTdGF0ZSogZXhlYywgSlNGdW5jdGlvbiogZnVuY3Rpb24sIEpTU2NvcGUqIHNjb3BlLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CisgICAgQVNTRVJUKCFpc1dlYkFzc2VtYmx5RXhl
Y3V0YWJsZSgpKTsKKyAgICAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIERlZmVyR0Mg
ZGVmZXJHQyh2bS5oZWFwKTsKICAgICAKQEAgLTQyNSw2ICs0NDYsMzUgQEAgdm9pZCBGdW5jdGlv
bkV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogICAgIHN0YXRpY19jYXN0PEZ1bmN0
aW9uRXhlY3V0YWJsZSo+KGNlbGwpLT5GdW5jdGlvbkV4ZWN1dGFibGU6On5GdW5jdGlvbkV4ZWN1
dGFibGUoKTsKIH0KIAorY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6c19p
bmZvID0geyAiV2ViQXNzZW1ibHlFeGVjdXRhYmxlIiwgJlNjcmlwdEV4ZWN1dGFibGU6OnNfaW5m
bywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJseUV4ZWN1dGFibGUpIH07CisKK1dl
YkFzc2VtYmx5RXhlY3V0YWJsZTo6V2ViQXNzZW1ibHlFeGVjdXRhYmxlKFZNJiB2bSwgY29uc3Qg
U291cmNlQ29kZSYgc291cmNlKQorICAgIDogU2NyaXB0RXhlY3V0YWJsZSh2bS53ZWJBc3NlbWJs
eUV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIHZtLCBzb3VyY2UsIC8qaXNJblN0cmljdENvbnRl
eHQqLyBmYWxzZSApCit7CisgICAgLyoKKyAgICBSRUxFQVNFX0FTU0VSVCghc291cmNlLmlzTnVs
bCgpKTsKKyAgICBBU1NFUlQoc291cmNlLmxlbmd0aCgpKTsKKyAgICBtX2ZpcnN0TGluZSA9IGZp
cnN0TGluZTsKKyAgICBtX2xhc3RMaW5lID0gbGFzdExpbmU7CisgICAgbV9zdGFydENvbHVtbiA9
IHN0YXJ0Q29sdW1uOworICAgIG1fZW5kQ29sdW1uID0gZW5kQ29sdW1uOworICAgIG1fcGFyYW1l
dGVyc1N0YXJ0T2Zmc2V0ID0gdW5saW5rZWRFeGVjdXRhYmxlLT5wYXJhbWV0ZXJzU3RhcnRPZmZz
ZXQoKTsKKyAgICBtX3R5cGVQcm9maWxpbmdTdGFydE9mZnNldCA9IHVubGlua2VkRXhlY3V0YWJs
ZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCk7CisgICAgbV90eXBlUHJvZmlsaW5nRW5kT2Zm
c2V0ID0gdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCk7CisgICAg
Ki8KK30KKwordm9pZCBXZWJBc3NlbWJseUV4ZWN1dGFibGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgbV9zaW5nbGV0b25GdW5j
dGlvbi5zZXQodm0sIHRoaXMsIEluZmVycmVkVmFsdWU6OmNyZWF0ZSh2bSkpOworfQorCit2b2lk
IFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgc3Rh
dGljX2Nhc3Q8V2ViQXNzZW1ibHlFeGVjdXRhYmxlKj4oY2VsbCktPldlYkFzc2VtYmx5RXhlY3V0
YWJsZTo6fldlYkFzc2VtYmx5RXhlY3V0YWJsZSgpOworfQorCiBpbmxpbmUgY29uc3QgY2hhciog
c2FtcGxpbmdEZXNjcmlwdGlvbihKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpCiB7CiAgICAgc3dp
dGNoIChqaXRUeXBlKSB7CkBAIC02MTksNiArNjY5LDQzIEBAIEZ1bmN0aW9uRXhlY3V0YWJsZSog
RnVuY3Rpb25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZSgKICAgICByZXR1cm4gdW5saW5rZWRF
eGVjdXRhYmxlLT5saW5rKGV4ZWMudm0oKSwgc291cmNlLCBvdmVycmlkZUxpbmVOdW1iZXIpOwog
fQogCitXZWJBc3NlbWJseUNvZGVCbG9jayogV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpiYXNlbGlu
ZUNvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit7CisgICAgQVNTRVJU
KGtpbmQgPT0gQ29kZUZvckNhbGwpOworCisgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIHJlc3Vs
dCA9IG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkFzc2VtYmx5Q29kZUJsb2NrKj4o
cmVzdWx0LT5iYXNlbGluZUFsdGVybmF0aXZlKCkpOworfQorCit2b2lkIFdlYkFzc2VtYmx5RXhl
Y3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQoreworICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJB
c3NlbWJseUV4ZWN1dGFibGUqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgU2NyaXB0RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICBpZiAodGhpc09iamVjdC0+bV9jb2RlQmxvY2tG
b3JDYWxsKQorICAgICAgICB0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja0ZvckNhbGwtPnZpc2l0QWdn
cmVnYXRlKHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Npbmds
ZXRvbkZ1bmN0aW9uKTsKK30KKworU3ltYm9sVGFibGUqIFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6
c3ltYm9sVGFibGUoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoreworICAgIHJldHVybiBj
b2RlQmxvY2tGb3Ioa2luZCktPnN5bWJvbFRhYmxlKCk7Cit9CisKK3ZvaWQgV2ViQXNzZW1ibHlF
eGVjdXRhYmxlOjpjbGVhckNvZGUoKQoreworICAgIC8vIEZJWE1FOiBoYWNreQorICAgIC8vIG1f
Y29kZUJsb2NrRm9yQ2FsbCA9IG51bGxwdHI7CisgICAgLy8gQmFzZTo6Y2xlYXJDb2RlKCk7Cit9
CisKK3ZvaWQgV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjp1bmxpbmtDYWxscygpCit7CisgICAgLy8g
RklYTUU6IGhhY2t5Cit9CisKIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKIHsKICAgICBFeGVjdXRhYmxlQmFzZSogcmVhbFRoaXMgPSBjb25zdF9jYXN0
PEV4ZWN1dGFibGVCYXNlKj4odGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmgKaW5kZXggMWM3YzgwMDAzZDJhMzJiZDZhMzExZGFjMGRlNTM5MDFhOGFkNzgx
Zi4uZWQ4MjI5YTE5ZTkyNDZlNzQ1ZjM2MDgwZjg1MDE4MmQ3NDRiNDhiYSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaApAQCAtNTAsNiArNTAsNyBAQCBjbGFz
cyBFdmFsQ29kZUJsb2NrOwogY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBMTEludE9m
ZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBQcm9ncmFtQ29kZUJsb2NrOworY2xhc3MgV2ViQXNzZW1i
bHlDb2RlQmxvY2s7CiBjbGFzcyBKU1Njb3BlOwogICAgIAogZW51bSBDb21waWxhdGlvbktpbmQg
eyBGaXJzdENvbXBpbGF0aW9uLCBPcHRpbWl6aW5nQ29tcGlsYXRpb24gfTsKQEAgLTk4LDYgKzk5
LDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiB0eXBlKCkgPT0gRnVuY3Rpb25F
eGVjdXRhYmxlVHlwZTsKICAgICB9CisgICAgYm9vbCBpc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgp
CisgICAgeworICAgICAgICByZXR1cm4gdHlwZSgpID09IFdlYkFzc2VtYmx5RXhlY3V0YWJsZVR5
cGU7CisgICAgfQogICAgIGJvb2wgaXNQcm9ncmFtRXhlY3V0YWJsZSgpCiAgICAgewogICAgICAg
ICByZXR1cm4gdHlwZSgpID09IFByb2dyYW1FeGVjdXRhYmxlVHlwZTsKQEAgLTY3OCw2ICs2ODMs
MTIxIEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEluZmVycmVkVmFsdWU+IG1fc2luZ2xl
dG9uRnVuY3Rpb247CiB9OwogCitjbGFzcyBXZWJBc3NlbWJseUV4ZWN1dGFibGUgZmluYWwgOiBw
dWJsaWMgU2NyaXB0RXhlY3V0YWJsZSB7CisgICAgZnJpZW5kIGNsYXNzIEpJVDsKKyAgICBmcmll
bmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworcHVibGljOgorICAgIHR5cGVkZWYgU2Ny
aXB0RXhlY3V0YWJsZSBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKKworICAg
IHN0YXRpYyBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIGNyZWF0ZShWTSYgdm0sIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSkKKyAgICB7CisgICAgICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogZXhl
Y3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5RXhlY3V0YWJs
ZT4odm0uaGVhcCkpIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSh2bSwgc291cmNlKTsKKyAgICAgICAg
ZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gZXhlY3V0YWJs
ZTsKKyAgICB9CisgICAgLy8gc3RhdGljIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogZnJvbUdsb2Jh
bENvZGUoY29uc3QgSWRlbnRpZmllciYgbmFtZSwgRXhlY1N0YXRlJiwgY29uc3QgU291cmNlQ29k
ZSYsIEpTT2JqZWN0KiYgZXhjZXB0aW9uLCBpbnQgb3ZlcnJpZGVMaW5lTnVtYmVyKTsKKworICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisgICAgICAgIAorICAgIGJvb2wgaXNHZW5l
cmF0ZWRGb3JDYWxsKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0Zv
ckNhbGw7CisgICAgfQorCisgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9ja0ZvckNh
bGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKTsKKyAg
ICB9CisKKyAgICBib29sIGlzR2VuZXJhdGVkRm9yQ29uc3RydWN0KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBXZWJBc3NlbWJseUNvZGVCbG9jayog
Y29kZUJsb2NrRm9yQ29uc3RydWN0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKyAgICAgICAgCisgICAgYm9vbCBpc0dlbmVyYXRlZEZvcihDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQpCisgICAgeworICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAg
ICAgICAgICAgIHJldHVybiBpc0dlbmVyYXRlZEZvckNhbGwoKTsKKyAgICAgICAgQVNTRVJUKGtp
bmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CisgICAgICAgIHJldHVybiBpc0dlbmVyYXRlZEZvckNv
bnN0cnVjdCgpOworICAgIH0KKyAgICAgICAgCisgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNv
ZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgeworICAgICAgICBp
ZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAgICAgICAgICAgIHJldHVybiBjb2RlQmxvY2tGb3JD
YWxsKCk7CisgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAg
ICByZXR1cm4gY29kZUJsb2NrRm9yQ29uc3RydWN0KCk7CisgICAgfQorCisgICAgV2ViQXNzZW1i
bHlDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQp
OworICAgICAgICAKKyAgICBXZWJBc3NlbWJseUNvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2tG
b3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJh
c2VsaW5lQ29kZUJsb2NrRm9yKGtpbmQpOworICAgIH0KKworICAgIFJlZlB0cjxUeXBlU2V0PiBy
ZXR1cm5TdGF0ZW1lbnRUeXBlU2V0KCkgCisgICAgeworICAgICAgICBpZiAoIW1fcmV0dXJuU3Rh
dGVtZW50VHlwZVNldCkKKyAgICAgICAgICAgIG1fcmV0dXJuU3RhdGVtZW50VHlwZVNldCA9IFR5
cGVTZXQ6OmNyZWF0ZSgpOworCisgICAgICAgIHJldHVybiBtX3JldHVyblN0YXRlbWVudFR5cGVT
ZXQ7CisgICAgfQorICAgICAgICAKKyAgICAvLyBGdW5jdGlvbk1vZGUgZnVuY3Rpb25Nb2RlKCkg
eyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmZ1bmN0aW9uTW9kZSgpOyB9CisgICAgLy8g
Ym9vbCBpc0J1aWx0aW5GdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRh
YmxlLT5pc0J1aWx0aW5GdW5jdGlvbigpOyB9CisgICAgLy8gYm9vbCBpc0NsYXNzQ29uc3RydWN0
b3JGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5pc0NsYXNz
Q29uc3RydWN0b3JGdW5jdGlvbigpOyB9CisgICAgLy8gY29uc3QgSWRlbnRpZmllciYgbmFtZSgp
IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5uYW1lKCk7IH0KKyAgICAvLyBjb25zdCBJ
ZGVudGlmaWVyJiBpbmZlcnJlZE5hbWUoKSB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+
aW5mZXJyZWROYW1lKCk7IH0KKyAgICAvLyBKU1N0cmluZyogbmFtZVZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPm5hbWVWYWx1ZSgpOyB9CisgICAgLy8gc2l6ZV90
IHBhcmFtZXRlckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPnBh
cmFtZXRlckNvdW50KCk7IH0gLy8gRXhjbHVkaW5nICd0aGlzJyEKKyAgICBTeW1ib2xUYWJsZSog
c3ltYm9sVGFibGUoQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CisKKyAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90bykKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oV2ViQXNzZW1ibHlFeGVjdXRhYmxlVHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIHVuc2lnbmVkIHBhcmFt
ZXRlcnNTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0
OyB9CisKKyAgICAvKgorICAgIHZvaWQgb3ZlcnJpZGVQYXJhbWV0ZXJBbmRUeXBlUHJvZmlsaW5n
U3RhcnRFbmRPZmZzZXRzKHVuc2lnbmVkIHBhcmFtZXRlcnNTdGFydE9mZnNldCwgdW5zaWduZWQg
dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0LCB1bnNpZ25lZCB0eXBlUHJvZmlsaW5nRW5kT2Zmc2V0
KQorICAgIHsKKyAgICAgICAgbV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQgPSBwYXJhbWV0ZXJzU3Rh
cnRPZmZzZXQ7CisgICAgICAgIG1fdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0ID0gdHlwZVByb2Zp
bGluZ1N0YXJ0T2Zmc2V0OworICAgICAgICBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQgPSB0eXBl
UHJvZmlsaW5nRW5kT2Zmc2V0OworICAgIH0KKyAgICAqLworCisgICAgREVDTEFSRV9JTkZPOwor
ICAgICAgICAKKyAgICB2b2lkIHVubGlua0NhbGxzKCk7CisKKyAgICB2b2lkIGNsZWFyQ29kZSgp
OworICAgIAorICAgIEluZmVycmVkVmFsdWUqIHNpbmdsZXRvbkZ1bmN0aW9uKCkgeyByZXR1cm4g
bV9zaW5nbGV0b25GdW5jdGlvbi5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIFdlYkFzc2VtYmx5
RXhlY3V0YWJsZShWTSYsIGNvbnN0IFNvdXJjZUNvZGUmKTsKKyAgICAKKyAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJik7CisKKyAgICBmcmllbmQgY2xhc3MgU2NyaXB0RXhlY3V0YWJsZTsKKwor
ICAgIFJlZlB0cjxXZWJBc3NlbWJseUNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDYWxsOworICAg
IFJlZlB0cjxUeXBlU2V0PiBtX3JldHVyblN0YXRlbWVudFR5cGVTZXQ7CisgICAgdW5zaWduZWQg
bV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQ7CisgICAgV3JpdGVCYXJyaWVyPEluZmVycmVkVmFsdWU+
IG1fc2luZ2xldG9uRnVuY3Rpb247Cit9OworCiBpbmxpbmUgdm9pZCBFeGVjdXRhYmxlQmFzZTo6
Y2xlYXJDb2RlVmlydHVhbChFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSkKIHsKICAgICBzd2l0
Y2ggKGV4ZWN1dGFibGUtPnR5cGUoKSkgewpAQCAtNjg3LDYgKzgwNyw4IEBAIGlubGluZSB2b2lk
IEV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGVWaXJ0dWFsKEV4ZWN1dGFibGVCYXNlKiBleGVjdXRh
YmxlKQogICAgICAgICByZXR1cm4ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4oZXhlY3V0YWJs
ZSktPmNsZWFyQ29kZSgpOwogICAgIGNhc2UgRnVuY3Rpb25FeGVjdXRhYmxlVHlwZToKICAgICAg
ICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Y2xlYXJD
b2RlKCk7CisgICAgY2FzZSBXZWJBc3NlbWJseUV4ZWN1dGFibGVUeXBlOgorICAgICAgICByZXR1
cm4ganNDYXN0PFdlYkFzc2VtYmx5RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5jbGVhckNvZGUo
KTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4ganNDYXN0PE5hdGl2ZUV4ZWN1dGFibGUq
PihleGVjdXRhYmxlKS0+Y2xlYXJDb2RlKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAppbmRleCAxYjhjNDA3ZWMzZDQ5NDliNjA2ZWM5NWI5
YWM5YjRlMmRmYzY4MTJmLi43ZGM2NzIzYjRhNmJmZTNhYTg0NDgyZWNkNTJmOTQ0OWVhM2Y5YTgw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcApAQCAt
NjAsMTAgKzYwLDExIEBAIGJvb2wgSlNGdW5jdGlvbjo6aXNIb3N0RnVuY3Rpb25Ob25JbmxpbmUo
KSBjb25zdAogICAgIHJldHVybiBpc0hvc3RGdW5jdGlvbigpOwogfQogCi1KU0Z1bmN0aW9uKiBK
U0Z1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUs
IEpTU2NvcGUqIHNjb3BlKQorSlNGdW5jdGlvbiogSlNGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwg
RXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3BlKQogewogICAgIEpTRnVu
Y3Rpb24qIHJlc3VsdCA9IGNyZWF0ZUltcGwodm0sIGV4ZWN1dGFibGUsIHNjb3BlKTsKLSAgICBl
eGVjdXRhYmxlLT5zaW5nbGV0b25GdW5jdGlvbigpLT5ub3RpZnlXcml0ZSh2bSwgcmVzdWx0LCAi
QWxsb2NhdGluZyBhIGZ1bmN0aW9uIik7CisgICAgaWYgKGV4ZWN1dGFibGUtPmlzRnVuY3Rpb25F
eGVjdXRhYmxlKCkpCisgICAgICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4
ZWN1dGFibGUpLT5zaW5nbGV0b25GdW5jdGlvbigpLT5ub3RpZnlXcml0ZSh2bSwgcmVzdWx0LCAi
QWxsb2NhdGluZyBhIGZ1bmN0aW9uIik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCmluZGV4IDBiODdkNzVjOTE0NTBj
NWFmMWFhZWQyN2E2MWE3NDhlZjgwZjA5M2UuLjIzYzdmYjE3ODliMzkxNzA2NmE3M2Q1MDYyN2Rj
MmZkYzJjOWNmYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9u
LmgKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVh
dGVXaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50KFZNJiwgRnVuY3Rpb25FeGVj
dXRhYmxlKiwgSlNTY29wZSopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0Z1bmN0
aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIGludCBsZW5ndGgsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgTmF0aXZlU3RkRnVuY3Rpb24mJiwgSW50cmluc2ljID0gTm9JbnRyaW5zaWMsIE5h
dGl2ZUZ1bmN0aW9uIG5hdGl2ZUNvbnN0cnVjdG9yID0gY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3Ry
dWN0b3IpOwogCi0gICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEZ1bmN0aW9uRXhl
Y3V0YWJsZSosIEpTU2NvcGUqKTsKKyAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlKFZNJiwg
RXhlY3V0YWJsZUJhc2UqLCBKU1Njb3BlKik7CiAKICAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3Jl
YXRlQnVpbHRpbkZ1bmN0aW9uKFZNJiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmpl
Y3QqKTsKICAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlQnVpbHRpbkZ1bmN0aW9uKFZNJiwg
RnVuY3Rpb25FeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUp
OwpAQCAtMTQwLDcgKzE0MCw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIEpTX0VYUE9S
VF9QUklWQVRFIEpTRnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwot
ICAgIEpTRnVuY3Rpb24oVk0mLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU1Njb3BlKik7CisgICAg
SlNGdW5jdGlvbihWTSYsIEV4ZWN1dGFibGVCYXNlKiwgSlNTY29wZSopOwogCiAgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBpbnQgbGVuZ3RoLCBjb25zdCBT
dHJpbmcmIG5hbWUpOwogICAgIHVzaW5nIEJhc2U6OmZpbmlzaENyZWF0aW9uOwpAQCAtMTU5LDcg
KzE1OSw3IEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIEpTRnVuY3Rpb24qIGNy
ZWF0ZUltcGwoVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUq
IHNjb3BlKQorICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVJbXBsKFZNJiB2bSwgRXhlY3V0
YWJsZUJhc2UqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3BlKQogICAgIHsKICAgICAgICAgSlNG
dW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0Z1bmN0aW9u
Pih2bS5oZWFwKSkgSlNGdW5jdGlvbih2bSwgZXhlY3V0YWJsZSwgc2NvcGUpOwogICAgICAgICBB
U1NFUlQoZnVuY3Rpb24tPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaAppbmRleCBmNmM2
ZDU4ZWM2ZTVjMTE2NGNiMjdmYTVlNDE2MThiNGI4MTQyZjAyLi5iOTMwNjA3NTk5YTdjMmExZGQw
MzA0ODBhNzJiZThhZDNkYmQyMDRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmgKQEAgLTM4LDcgKzM4LDcgQEAgaW5saW5lIEpTRnVu
Y3Rpb24qIEpTRnVuY3Rpb246OmNyZWF0ZVdpdGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlvbldhdGNo
cG9pbnQoCiAgICAgcmV0dXJuIGNyZWF0ZUltcGwodm0sIGV4ZWN1dGFibGUsIHNjb3BlKTsKIH0K
IAotaW5saW5lIEpTRnVuY3Rpb246OkpTRnVuY3Rpb24oVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3BlKQoraW5saW5lIEpTRnVuY3Rpb246OkpTRnVu
Y3Rpb24oVk0mIHZtLCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUp
CiAgICAgOiBCYXNlKHZtLCBzY29wZSwgc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0
cnVjdHVyZSgpKQogICAgICwgbV9leGVjdXRhYmxlKHZtLCB0aGlzLCBleGVjdXRhYmxlKQogICAg
ICwgbV9yYXJlRGF0YSgpCkBAIC01NCw2ICs1NCw4IEBAIGlubGluZSBGdW5jdGlvbkV4ZWN1dGFi
bGUqIEpTRnVuY3Rpb246OmpzRXhlY3V0YWJsZSgpIGNvbnN0CiBpbmxpbmUgYm9vbCBKU0Z1bmN0
aW9uOjppc0hvc3RGdW5jdGlvbigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZXhlY3V0YWJsZSk7
CisgICAgaWYgKG1fZXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKSkgLy8gRklY
TUU6IGhhY2t5CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiBtX2V4ZWN1dGFibGUt
PmlzSG9zdEZ1bmN0aW9uKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVHlwZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBl
LmgKaW5kZXggNDAzMjZjZTBmMzI5ZmE3YzdiYmM5OWY0NDY0MjhmZTk2YzkxMjRiMy4uNzZlZmU4
MjI0MmFhZTEzZTBlNjE1NGFmMDUyMmM2ZDg2NzAzMDY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNUeXBlLmgKQEAgLTc0LDYgKzc0LDggQEAgZW51bSBKU1R5cGUgOiB1aW50OF90
IHsKIAogICAgIE5hbWVTY29wZU9iamVjdFR5cGUsCiAKKyAgICBXZWJBc3NlbWJseUV4ZWN1dGFi
bGVUeXBlLCAvLyBGSVhNRTogTW92ZSBpdCBhYm92ZS4KKwogICAgIEdsb2JhbE9iamVjdFR5cGUs
CiAgICAgQWN0aXZhdGlvbk9iamVjdFR5cGUsCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAppbmRleCA3Njc0MWRkOGFlYTM3ZmY1N2NjYTRjZjYzNmJmYzMyYmI0MjljYzQxLi40ZDVm
NWRmMzU2OWFjNjI1ZjkyMzBjOTRkYjI3ODg4MzA4YjliY2I0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCkBAIC0yMjAsNiArMjIwLDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUs
IEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIGV2YWxFeGVjdXRhYmxlU3RydWN0dXJlLnNldCgqdGhp
cywgRXZhbEV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
ICAgICBwcm9ncmFtRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFByb2dyYW1FeGVjdXRh
YmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgZnVuY3Rpb25F
eGVjdXRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGVT
dHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgd2ViQXNzZW1ibHlFeGVjdXRhYmxl
U3RydWN0dXJlLnNldCgqdGhpcywgV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgcmVnRXhwU3RydWN0dXJlLnNldCgqdGhpcywg
UmVnRXhwOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgc3ltYm9s
U3RydWN0dXJlLnNldCgqdGhpcywgU3ltYm9sOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CiAgICAgc3ltYm9sVGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTeW1ib2xUYWJs
ZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmgKaW5kZXggZjc4ZjllYjk2NDYwYWU5ZmRiZmY5MTY5YzI4NGE4NTg0ODE2Yzcz
OS4uMzczZDQwZGM3Zjk4ZTVlYzU4NTY4ZDRiYjViMzZkNGZmOTExYzZjMSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oCkBAIC0yNTksNiArMjU5LDcgQEAgcHVibGljOgogICAgIFN0cm9u
ZzxTdHJ1Y3R1cmU+IGV2YWxFeGVjdXRhYmxlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1
cmU+IHByb2dyYW1FeGVjdXRhYmxlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGZ1
bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiB3ZWJBc3Nl
bWJseUV4ZWN1dGFibGVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcmVnRXhwU3Ry
dWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN5bWJvbFN0cnVjdHVyZTsKICAgICBTdHJv
bmc8U3RydWN0dXJlPiBzeW1ib2xUYWJsZVN0cnVjdHVyZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21KSVRDb21waWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtSklUQ29tcGlsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU2Y2E0Y2VlMjgyZjgy
Yzc0ZDU0YWJiZTAyNGEwZDhiMDMzYmUzY2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtSklUQ29tcGlsZXIuY3BwCkBAIC0wLDAgKzEsMTAzNiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgTGljZW5z
ZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7
CisgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRo
ZSBMaWNlbnNlLgorIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisg
aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyBVbmxlc3MgcmVx
dWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJl
CisgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFT
IElTIiBCQVNJUywKKyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lO
RCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBz
cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgbGltaXRhdGlvbnMg
dW5kZXIgdGhlIExpY2Vuc2UuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2FzbUpJVENvbXBpbGVyLmgiCisKKyNpbmNsdWRlICJKSVRDb2RlLmgiCisjaW5jbHVkZSAiSlND
SlNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiTWF4
RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKKyNpbmNsdWRlICJSZWdpc3Rlci5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBKdW1wU2NvcGUgewor
cHVibGljOgorICAgIEp1bXBTY29wZShNYWNyb0Fzc2VtYmxlciogbWFjcm9Bc3NlbWJsZXIpCisg
ICAgICAgIDogbV9tYWNyb0Fzc2VtYmxlcihtYWNyb0Fzc2VtYmxlcikKKyAgICAgICAgLCBtX2xp
bmtlZChmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgSnVtcFNjb3BlKE1hY3JvQXNzZW1ibGVy
KiBtYWNyb0Fzc2VtYmxlciwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsJiBsYWJlbCkKKyAg
ICAgICAgOiBtX21hY3JvQXNzZW1ibGVyKG1hY3JvQXNzZW1ibGVyKQorICAgICAgICAsIG1fbGlu
a2VkKHRydWUpCisgICAgICAgICwgbV9sYWJlbChsYWJlbCkKKyAgICB7CisgICAgfQorCisgICAg
dm9pZCBqdW1wKCkKKyAgICB7CisgICAgICAgIGlmIChtX2xpbmtlZCkKKyAgICAgICAgICAgIG1f
bWFjcm9Bc3NlbWJsZXItPmp1bXAobV9sYWJlbCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG1fanVtcExpc3QuYXBwZW5kKG1fbWFjcm9Bc3NlbWJsZXItPmp1bXAoKSk7CisgICAgfQorCisg
ICAgdm9pZCBsaW5rKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9saW5rZWQpOworICAgICAg
ICBtX2p1bXBMaXN0LmxpbmsobV9tYWNyb0Fzc2VtYmxlcik7CisgICAgfQorCitwcml2YXRlOgor
ICAgIE1hY3JvQXNzZW1ibGVyKiBtX21hY3JvQXNzZW1ibGVyOworICAgIGJvb2wgbV9saW5rZWQ7
CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fbGFiZWw7CisgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IG1fanVtcExpc3Q7Cit9OworCitSZWZQdHI8SklUQ29kZT4gSklUQ29tcGlsZXI6
OmNvbXBpbGVGdW5jdGlvbihWTSYgdm0sIHNpemVfdCBmdW5jdGlvbkluZGV4KQoreworICAgIGVt
aXRGdW5jdGlvblByb2xvZ3VlKCk7CisgICAgLy8gRklYTUU6IG5lZWQgdG8gZG8gdGhpcyEKKyAg
ICAvLyBlbWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIEpTU3Rh
Y2s6OkNvZGVCbG9jayk7CisKKyAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IG1fbW9k
dWxlLT5tX3NpZ25hdHVyZXNbbV9tb2R1bGUtPm1fZnVuY1NpZ25hdHVyZXNbZnVuY3Rpb25JbmRl
eF1dOworICAgIG1fY3VycmVudFJldHVyblR5cGUgPSBzaWduYXR1cmUucmV0dXJuVHlwZTsKKyAg
ICBwYXJzZUFyZ3VtZW50cyhzaWduYXR1cmUpOworCisgICAgLy8gRklYTUU6IENhbGN1bGF0ZSB0
aGUgYWN0dWFsIGhlaWdodC4gKEJlIGNhcmVmdWwgYWJvdXQgY2FsbHMuKQorICAgIG1fc3RhY2tI
ZWlnaHQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMo
KSwgc2lnbmF0dXJlLmFyZ3VtZW50cy5zaXplKCkgKyA4KSAqIHNpemVvZihSZWdpc3Rlcik7Cisg
ICAgYWxsb2NhdGVTcGFjZU9uU3RhY2soKTsKKworICAgIHBhcnNlVmFycygpOworICAgIHBhcnNl
U3RtdExpc3QoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIodm0sICp0aGlzLCAwLCBK
SVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKKworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3
aXRoQXJpdHlDaGVjazsKKyAgICBDb2RlUmVmIHJlc3VsdCA9IEZJTkFMSVpFX0NPREUocGF0Y2hC
dWZmZXIsICgiQmFzZWxpbmUgSklUIGNvZGUgZm9yIFdlYkFzc2VtYmx5IikpOworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCBKSVRD
b2RlOjpCYXNlbGluZUpJVCkpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjphbGxvY2F0ZVNwYWNl
T25TdGFjaygpCit7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtbV9zdGFja0hlaWdodCksIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6ZGVhbGxvY2F0ZVNw
YWNlT25TdGFjaygpCit7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtX3N0YWNrSGVpZ2h0KSwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUFyZ3Vt
ZW50cyhjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSkKK3sKKyAgICBzaXplX3QgYXJndW1lbnRD
b3VudCA9IHNpZ25hdHVyZS5hcmd1bWVudHMuc2l6ZSgpOworICAgIGZvciAodWludDMyX3QgYXJn
SW5kZXggPSAwOyBhcmdJbmRleCA8IGFyZ3VtZW50Q291bnQ7ICsrYXJnSW5kZXgpIHsKKyAgICAg
ICAgVHlwZSB0eXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50c1thcmdJbmRleF07CisgICAgICAgIG1f
Y3VycmVudExvY2FsVHlwZXMuYXBwZW5kKHR5cGUpOworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgKGFyZ0luZGV4ICsgMSArIENhbGxGcmFtZTo6dGhpc0Fy
Z3VtZW50T2Zmc2V0KCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAgICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHN0YWNrQWRkcmVzcyhhcmdJbmRleCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6
CisgICAgICAgICAgICBsb2FkNjQoQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
KGFyZ0luZGV4ICsgMSArIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpICogc2l6ZW9m
KFJlZ2lzdGVyKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIHVuYm94RG91YmxlV2l0
aG91dEFzc2VydGlvbnMoR1BSSW5mbzo6cmVnVDAsIEZQUkluZm86OmZwUmVnVDApOworICAgICAg
ICAgICAgc3RvcmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgc3RhY2tBZGRyZXNzKGFyZ0luZGV4
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
SklUQ29tcGlsZXI6OnBhcnNlVmFycygpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZJMzJWYXJz
ID0gMDsKKyAgICB1aW50MzJfdCBudW1iZXJPZkYzMlZhcnMgPSAwOworICAgIHVpbnQzMl90IG51
bWJlck9mRjY0VmFycyA9IDA7CisKKyAgICBWYXJUeXBlcyB2YXJUeXBlczsKKyAgICBWYXJUeXBl
c1dpdGhJbW0gdmFyVHlwZXNXaXRoSW1tOworICAgIHVpbnQ4X3QgaW1tOworICAgIGlmIChtX21v
ZHVsZS0+bV9yZWFkZXIuY29kZSgmdmFyVHlwZXMsICZ2YXJUeXBlc1dpdGhJbW0sICZpbW0pKSB7
CisgICAgICAgIGlmICh2YXJUeXBlcyAmIFZhclR5cGVzOjpJMzIpCisgICAgICAgICAgICBudW1i
ZXJPZkkzMlZhcnMgPSBtX21vZHVsZS0+bV9yZWFkZXIuaW1tVTMyKCk7CisgICAgICAgIGlmICh2
YXJUeXBlcyAmIFZhclR5cGVzOjpGMzIpCisgICAgICAgICAgICBudW1iZXJPZkYzMlZhcnMgPSBt
X21vZHVsZS0+bV9yZWFkZXIuaW1tVTMyKCk7CisgICAgICAgIGlmICh2YXJUeXBlcyAmIFZhclR5
cGVzOjpGNjQpCisgICAgICAgICAgICBudW1iZXJPZkY2NFZhcnMgPSBtX21vZHVsZS0+bV9yZWFk
ZXIuaW1tVTMyKCk7CisgICAgfSBlbHNlCisgICAgICAgIG51bWJlck9mSTMyVmFycyA9IGltbTsK
KworICAgIHVpbnQzMl90IG51bWJlck9mVmFycyA9IG51bWJlck9mSTMyVmFycyArIG51bWJlck9m
RjMyVmFycyArIG51bWJlck9mRjY0VmFyczsKKyAgICBpZiAobnVtYmVyT2ZWYXJzID4gMCkgewor
ICAgICAgICB1aW50MzJfdCBsb2NhbEluZGV4ID0gbV9jdXJyZW50TG9jYWxUeXBlcy5zaXplKCk7
CisgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkkzMlZhcnM7ICsraSkg
eworICAgICAgICAgICAgbV9jdXJyZW50TG9jYWxUeXBlcy5hcHBlbmQoVHlwZTo6STMyKTsKKyAg
ICAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBzdGFja0FkZHJlc3MobG9jYWxJbmRl
eCsrKSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJl
ck9mRjMyVmFyczsgKytpKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRMb2NhbFR5cGVzLmFwcGVu
ZChUeXBlOjpGMzIpOworICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIHN0YWNr
QWRkcmVzcyhsb2NhbEluZGV4KyspKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVpbnQzMl90
IGkgPSAwOyBpIDwgbnVtYmVyT2ZGNjRWYXJzOyArK2kpIHsKKyAgICAgICAgICAgIG1fY3VycmVu
dExvY2FsVHlwZXMuYXBwZW5kKFR5cGU6OkY2NCk7CisgICAgICAgICAgICBzdG9yZTY0KFRydXN0
ZWRJbW02NCgwKSwgc3RhY2tBZGRyZXNzKGxvY2FsSW5kZXgrKykpOworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZVN0bXQoKQoreworICAgIFN0bXQgc3RtdDsK
KyAgICBTdG10V2l0aEltbSBzdG10V2l0aEltbTsKKyAgICB1aW50OF90IGltbTsKKyAgICBpZiAo
bV9tb2R1bGUtPm1fcmVhZGVyLmNvZGUoJnN0bXQsICZzdG10V2l0aEltbSwgJmltbSkpIHsKKyAg
ICAgICAgc3dpdGNoIChzdG10KSB7CisgICAgICAgIGNhc2UgU3RtdDo6U2V0TG9jOgorICAgICAg
ICAgICAgcGFyc2VTZXRMb2NhbCgwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFN0bXQ6OlNldEdsbzoKKyAgICAgICAgY2FzZSBTdG10OjpJMzJTdG9yZTg6CisgICAgICAgIGNh
c2UgU3RtdDo6STMyU3RvcmVPZmY4OgorICAgICAgICBjYXNlIFN0bXQ6OkkzMlN0b3JlMTY6Cisg
ICAgICAgIGNhc2UgU3RtdDo6STMyU3RvcmVPZmYxNjoKKyAgICAgICAgY2FzZSBTdG10OjpJMzJT
dG9yZTMyOgorICAgICAgICBjYXNlIFN0bXQ6OkkzMlN0b3JlT2ZmMzI6CisgICAgICAgIGNhc2Ug
U3RtdDo6RjMyU3RvcmU6CisgICAgICAgIGNhc2UgU3RtdDo6RjMyU3RvcmVPZmY6CisgICAgICAg
IGNhc2UgU3RtdDo6RjY0U3RvcmU6CisgICAgICAgIGNhc2UgU3RtdDo6RjY0U3RvcmVPZmY6Cisg
ICAgICAgIGNhc2UgU3RtdDo6Q2FsbEludDoKKyAgICAgICAgY2FzZSBTdG10OjpDYWxsSW5kOgor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBT
dG10OjpDYWxsSW1wOgorICAgICAgICAgICAgcGFyc2VDYWxsSW1wb3J0KFJldHVyblR5cGU6OlZv
aWQsIDApOyAvLyBGSVhNRTogSXMgaXQgcmVhbGx5IFZvaWQ/CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBTdG10OjpSZXQ6CisgICAgICAgICAgICBwYXJzZVJldHVyblN0bXQoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdG10OjpCbG9jazoKKyAgICAgICAg
ICAgIHBhcnNlQmxvY2tTdG10KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2Ug
U3RtdDo6SWZUaGVuOgorICAgICAgICAgICAgcGFyc2VJZlN0bXQoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgY2FzZSBTdG10OjpJZkVsc2U6CisgICAgICAgICAgICBwYXJzZUlmRWxz
ZVN0bXQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdG10OjpXaGlsZToK
KyAgICAgICAgICAgIHBhcnNlV2hpbGVTdG10KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGNhc2UgU3RtdDo6RG86CisgICAgICAgICAgICBwYXJzZURvU3RtdCgpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6OkxhYmVsOgorICAgICAgICAgICAgcGFyc2VM
YWJlbFN0bXQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdG10OjpCcmVh
azoKKyAgICAgICAgICAgIHBhcnNlQnJlYWtTdG10KCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGNhc2UgU3RtdDo6QnJlYWtMYWJlbDoKKyAgICAgICAgICAgIHBhcnNlQnJlYWtMYWJl
bFN0bXQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdG10OjpDb250aW51
ZToKKyAgICAgICAgICAgIHBhcnNlQ29udGludWVTdG10KCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBTdG10OjpDb250aW51ZUxhYmVsOgorICAgICAgICAgICAgcGFyc2VDb250
aW51ZUxhYmVsU3RtdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6
OlN3aXRjaDoKKyAgICAgICAgICAgIHBhcnNlU3dpdGNoU3RtdCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3dpdGNoIChzdG10V2l0
aEltbSkgeworICAgICAgICBjYXNlIFN0bXRXaXRoSW1tOjpTZXRMb2M6CisgICAgICAgICAgICBw
YXJzZVNldExvY2FsKGltbSwgMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBT
dG10V2l0aEltbTo6U2V0R2xvOgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBKSVRD
b21waWxlcjo6cGFyc2VHZXRMb2NhbChpbnQgZHN0KQoreworICAgIHVpbnQzMl90IGltbSA9IG1f
bW9kdWxlLT5tX3JlYWRlci5pbW1VMzIoKTsKKyAgICBzd2l0Y2ggKG1fY3VycmVudExvY2FsVHlw
ZXNbaW1tXSkgeworICAgIGNhc2UgVHlwZTo6STMyOgorICAgIGNhc2UgVHlwZTo6RjMyOgorICAg
ICAgICBsb2FkMzIoc3RhY2tBZGRyZXNzKGltbSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAg
c3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgIGxvYWQ2NChzdGFja0FkZHJlc3Mo
aW1tKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBzdG9yZTY0KEdQUkluZm86OnJlZ1QwLCB0
ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBKSVRD
b21waWxlcjo6cGFyc2VTZXRMb2NhbCh1aW50MzJfdCBpbW0sIGludCBkc3QpCit7CisgICAgVHlw
ZSB0eXBlID0gbV9jdXJyZW50TG9jYWxUeXBlc1tpbW1dOworICAgIHBhcnNlRXhwcihSZXR1cm5U
eXBlKHR5cGUpLCBkc3QpOworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHlwZTo6STMy
OgorICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhk
c3QpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHN0
YWNrQWRkcmVzcyhpbW0pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUeXBlOjpGNjQ6Cisg
ICAgICAgIGxvYWQ2NCh0ZW1wb3JhcnlBZGRyZXNzKGRzdCksIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAgICAgc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgc3RhY2tBZGRyZXNzKGltbSkpOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VTZXRMb2NhbChpbnQgZHN0
KQoreworICAgIHBhcnNlU2V0TG9jYWwobV9tb2R1bGUtPm1fcmVhZGVyLmltbVUzMigpLCBkc3Qp
OworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZVJldHVyblN0bXQoKQoreworICAgIHN3aXRj
aCAobV9jdXJyZW50UmV0dXJuVHlwZSkgeworICAgIGNhc2UgUmV0dXJuVHlwZTo6STMyOgorICAg
ICAgICBwYXJzZUV4cHIoUmV0dXJuVHlwZTo6STMyLCAwKTsKKyAgICAgICAgbG9hZDMyKHRlbXBv
cmFyeUFkZHJlc3MoMCksIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgb3I2NChH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpGMzI6CisgICAgICAgIHBhcnNl
RXhwcihSZXR1cm5UeXBlOjpGMzIsIDApOworICAgICAgICBsb2FkRG91YmxlKHRlbXBvcmFyeUFk
ZHJlc3MoMCksIEZQUkluZm86OmZwUmVnVDApOyAvLyBGSVhNRTogVGhpcyBsb2FkcyA2NCBiaXRz
IQorICAgICAgICBjb252ZXJ0RmxvYXRUb0RvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZv
OjpmcFJlZ1QwKTsKKyAgICAgICAgYm94RG91YmxlKEZQUkluZm86OmZwUmVnVDAsIEdQUkluZm86
OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpG
NjQ6CisgICAgICAgIHBhcnNlRXhwcihSZXR1cm5UeXBlOjpGNjQsIDApOworICAgICAgICBsb2Fk
RG91YmxlKHRlbXBvcmFyeUFkZHJlc3MoMCksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBi
b3hEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFJldHVyblR5cGU6OlZvaWQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGRlYWxsb2NhdGVTcGFjZU9uU3RhY2soKTsKKyAgICBlbWl0RnVuY3Rpb25F
cGlsb2d1ZSgpOworICAgIHJldCgpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZVN0bXRM
aXN0KCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZlN0bXRzID0gbV9tb2R1bGUtPm1fcmVhZGVy
LmltbVUzMigpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZlN0bXRzOyAr
K2kpCisgICAgICAgIHBhcnNlU3RtdCgpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUJs
b2NrU3RtdCgpCit7CisgICAgcGFyc2VTdG10TGlzdCgpOworfQorCit2b2lkIEpJVENvbXBpbGVy
OjpwYXJzZUlmU3RtdCgpCit7CisgICAgcGFyc2VFeHByKFJldHVyblR5cGU6OkkzMiwgMCk7Cisg
ICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoMCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBKdW1w
IGVuZCA9IGJyYW5jaFRlc3QzMihaZXJvLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgcGFyc2VTdG10
KCk7CisgICAgZW5kLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlSWZF
bHNlU3RtdCgpCit7CisgICAgcGFyc2VFeHByKFJldHVyblR5cGU6OkkzMiwgMCk7CisgICAgbG9h
ZDMyKHRlbXBvcmFyeUFkZHJlc3MoMCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBKdW1wIGVscyA9
IGJyYW5jaFRlc3QzMihaZXJvLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgcGFyc2VTdG10KCk7Cisg
ICAgSnVtcCBlbmQgPSBqdW1wKCk7CisgICAgZWxzLmxpbmsodGhpcyk7CisgICAgcGFyc2VTdG10
KCk7CisgICAgZW5kLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlV2hp
bGVTdG10KCkKK3sKKyAgICBKdW1wU2NvcGUgY29udGludWVKdW1wU2NvcGUodGhpcywgbGFiZWwo
KSk7CisgICAgcHVzaENvbnRpbnVlSnVtcFNjb3BlKCZjb250aW51ZUp1bXBTY29wZSk7CisKKyAg
ICBKdW1wTGlzdCBicmVha0p1bXBMaXN0OworICAgIHB1c2hCcmVha0p1bXBMaXN0KCZicmVha0p1
bXBMaXN0KTsKKworICAgIHBhcnNlRXhwcihSZXR1cm5UeXBlOjpJMzIsIDApOworICAgIGxvYWQz
Mih0ZW1wb3JhcnlBZGRyZXNzKDApLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgSnVtcCBlbmQgPSBi
cmFuY2hUZXN0MzIoWmVybywgR1BSSW5mbzo6cmVnVDApOworICAgIHBhcnNlU3RtdCgpOworICAg
IGNvbnRpbnVlSnVtcFNjb3BlLmp1bXAoKTsKKyAgICBlbmQubGluayh0aGlzKTsKKyAgICBicmVh
a0p1bXBMaXN0LmxpbmsodGhpcyk7CisKKyAgICBwb3BCcmVha0p1bXBMaXN0KCk7CisKKyAgICBw
b3BDb250aW51ZUp1bXBTY29wZSgpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZURvU3Rt
dCgpCit7CisgICAgSnVtcFNjb3BlIGNvbnRpbnVlSnVtcFNjb3BlKHRoaXMpOworICAgIHB1c2hD
b250aW51ZUp1bXBTY29wZSgmY29udGludWVKdW1wU2NvcGUpOworCisgICAgSnVtcExpc3QgYnJl
YWtKdW1wTGlzdDsKKyAgICBwdXNoQnJlYWtKdW1wTGlzdCgmYnJlYWtKdW1wTGlzdCk7CisKKyAg
ICBMYWJlbCBzdGFydCA9IGxhYmVsKCk7CisgICAgcGFyc2VTdG10KCk7CisgICAgY29udGludWVK
dW1wU2NvcGUubGluaygpOworICAgIHBhcnNlRXhwcihSZXR1cm5UeXBlOjpJMzIsIDApOworICAg
IGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKDApLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgSnVtcCBq
dW1wVG9TdGFydCA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBHUFJJbmZvOjpyZWdUMCk7CisgICAg
anVtcFRvU3RhcnQubGlua1RvKHN0YXJ0LCB0aGlzKTsKKyAgICBicmVha0p1bXBMaXN0Lmxpbmso
dGhpcyk7CisKKyAgICBwb3BCcmVha0p1bXBMaXN0KCk7CisKKyAgICBwb3BDb250aW51ZUp1bXBT
Y29wZSgpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUxhYmVsU3RtdCgpCit7CisgICAg
TGFiZWwgY29udGludWVMYWJlbCA9IGxhYmVsKCk7CisgICAgSnVtcExpc3QgYnJlYWtKdW1wTGlz
dDsKKyAgICBwdXNoQ29udGludWVMYWJlbExhYmVsKCZjb250aW51ZUxhYmVsKTsKKyAgICBwdXNo
QnJlYWtMYWJlbEp1bXBMaXN0KCZicmVha0p1bXBMaXN0KTsKKyAgICBwYXJzZVN0bXQoKTsKKyAg
ICBicmVha0p1bXBMaXN0LmxpbmsodGhpcyk7CisgICAgcG9wQnJlYWtMYWJlbEp1bXBMaXN0KCk7
CisgICAgcG9wQ29udGludWVMYWJlbExhYmVsKCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBh
cnNlQnJlYWtTdG10KCkKK3sKKyAgICB0b3BCcmVha0p1bXBMaXN0KCktPmFwcGVuZChqdW1wKCkp
OworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUJyZWFrTGFiZWxTdG10KCkKK3sKKyAgICB1
aW50MzJfdCBpbmRleCA9IG1fbW9kdWxlLT5tX3JlYWRlci5pbW1VMzIoKTsKKyAgICBicmVha0xh
YmVsSnVtcExpc3QoaW5kZXgpLT5hcHBlbmQoanVtcCgpKTsKK30KKwordm9pZCBKSVRDb21waWxl
cjo6cGFyc2VDb250aW51ZVN0bXQoKQoreworICAgIHRvcENvbnRpbnVlSnVtcFNjb3BlKCktPmp1
bXAoKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VDb250aW51ZUxhYmVsU3RtdCgpCit7
CisgICAgdWludDMyX3QgaW5kZXggPSBtX21vZHVsZS0+bV9yZWFkZXIuaW1tVTMyKCk7CisgICAg
anVtcCgqY29udGludWVMYWJlbExhYmVsKGluZGV4KSk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6
OnBhcnNlU3dpdGNoU3RtdCgpCit7CisgICAgSnVtcExpc3QgYnJlYWtKdW1wTGlzdDsKKyAgICBw
dXNoQnJlYWtKdW1wTGlzdCgmYnJlYWtKdW1wTGlzdCk7CisKKyAgICB1aW50MzJfdCBudW1iZXJP
ZkNhc2VzID0gbV9tb2R1bGUtPm1fcmVhZGVyLmltbVUzMigpOworICAgIHBhcnNlRXhwcihSZXR1
cm5UeXBlOjpJMzIsIDApOworICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKDApLCBHUFJJbmZv
OjpyZWdUMCk7CisKKyAgICBKdW1wIHRhYmxlID0ganVtcCgpOworCisgICAgVmVjdG9yPExhYmVs
PiBsYWJlbHM7CisgICAgVmVjdG9yPGludDMyX3Q+IGltbXM7CisgICAgTGFiZWwgZGVmYXVsdExh
YmVsOworICAgIGJvb2wgaGFzRGVmYXVsdCA9IGZhbHNlOworCisgICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IG51bWJlck9mQ2FzZXM7ICsraSkgeworICAgICAgICBzd2l0Y2ggKG1fbW9kdWxl
LT5tX3JlYWRlci5zd2l0Y2hDYXNlKCkpIHsKKyAgICAgICAgY2FzZSBTd2l0Y2hDYXNlOjpDYXNl
MDoKKyAgICAgICAgICAgIGxhYmVscy5hcHBlbmQobGFiZWwoKSk7CisgICAgICAgICAgICBpbW1z
LmFwcGVuZChtX21vZHVsZS0+bV9yZWFkZXIuaW1tUzMyKCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgU3dpdGNoQ2FzZTo6Q2FzZTE6CisgICAgICAgICAgICBsYWJlbHMuYXBw
ZW5kKGxhYmVsKCkpOworICAgICAgICAgICAgaW1tcy5hcHBlbmQobV9tb2R1bGUtPm1fcmVhZGVy
LmltbVMzMigpKTsKKyAgICAgICAgICAgIHBhcnNlU3RtdCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgU3dpdGNoQ2FzZTo6Q2FzZU46CisgICAgICAgICAgICBsYWJlbHMuYXBw
ZW5kKGxhYmVsKCkpOworICAgICAgICAgICAgaW1tcy5hcHBlbmQobV9tb2R1bGUtPm1fcmVhZGVy
LmltbVMzMigpKTsKKyAgICAgICAgICAgIHBhcnNlU3RtdExpc3QoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFN3aXRjaENhc2U6OkRlZmF1bHQwOgorICAgICAgICAgICAgZGVm
YXVsdExhYmVsID0gbGFiZWwoKTsKKyAgICAgICAgICAgIGhhc0RlZmF1bHQgPSB0cnVlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3dpdGNoQ2FzZTo6RGVmYXVsdDE6CisgICAg
ICAgICAgICBkZWZhdWx0TGFiZWwgPSBsYWJlbCgpOworICAgICAgICAgICAgaGFzRGVmYXVsdCA9
IHRydWU7CisgICAgICAgICAgICBwYXJzZVN0bXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFN3aXRjaENhc2U6OkRlZmF1bHROOgorICAgICAgICAgICAgZGVmYXVsdExhYmVs
ID0gbGFiZWwoKTsKKyAgICAgICAgICAgIGhhc0RlZmF1bHQgPSB0cnVlOworICAgICAgICAgICAg
cGFyc2VTdG10TGlzdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAg
fQorCisgICAgSnVtcCBlbmQgPSBqdW1wKCk7CisgICAgdGFibGUubGluayh0aGlzKTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGFiZWxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEp1
bXAgam1wID0gYnJhbmNoMzIoRXF1YWwsIEdQUkluZm86OnJlZ1QwLCBUcnVzdGVkSW1tMzIoaW1t
c1tpXSkpOworICAgICAgICBqbXAubGlua1RvKGxhYmVsc1tpXSwgdGhpcyk7CisgICAgfQorICAg
IGlmIChoYXNEZWZhdWx0KQorICAgICAgICBqdW1wKGRlZmF1bHRMYWJlbCk7CisKKyAgICBlbmQu
bGluayh0aGlzKTsKKworICAgIGJyZWFrSnVtcExpc3QubGluayh0aGlzKTsKKyAgICBwb3BCcmVh
a0p1bXBMaXN0KCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlRXhwcihSZXR1cm5UeXBl
IHJldHVyblR5cGUsIGludCBkc3QpCit7CisgICAgc3dpdGNoIChyZXR1cm5UeXBlKSB7CisgICAg
Y2FzZSBSZXR1cm5UeXBlOjpJMzI6CisgICAgICAgIHBhcnNlRXhwckkzMihkc3QpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFJldHVyblR5cGU6OkY2NDoKKyAgICAgICAgcGFyc2VFeHByRjY0
KGRzdCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUV4
cHJJMzIoaW50IGRzdCkKK3sKKyAgICBJMzIgaTMyOworICAgIEkzMldpdGhJbW0gaTMyV2l0aElt
bTsKKyAgICB1aW50OF90IGltbTsKKworICAgIGlmIChtX21vZHVsZS0+bV9yZWFkZXIuY29kZSgm
aTMyLCAmaTMyV2l0aEltbSwgJmltbSkpIHsKKyAgICAgICAgc3dpdGNoIChpMzIpIHsKKyAgICAg
ICAgY2FzZSBJMzI6OkxpdEltbToKKyAgICAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKG1f
bW9kdWxlLT5tX3JlYWRlci5pbW1VMzIoKSksIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkxpdFBvb2w6CisgICAgICAgIGNhc2Ug
STMyOjpHZXRMb2M6CisgICAgICAgICAgICBwYXJzZUdldExvY2FsKGRzdCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkdldEdsbzoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgSTMyOjpTZXRMb2M6CisgICAgICAg
ICAgICBwYXJzZVNldExvY2FsKGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJMzI6OlNldEdsbzoKKyAgICAgICAgY2FzZSBJMzI6OlNMb2FkODoKKyAgICAgICAgY2FzZSBJ
MzI6OlNMb2FkT2ZmODoKKyAgICAgICAgY2FzZSBJMzI6OlVMb2FkODoKKyAgICAgICAgY2FzZSBJ
MzI6OlVMb2FkT2ZmODoKKyAgICAgICAgY2FzZSBJMzI6OlNMb2FkMTY6CisgICAgICAgIGNhc2Ug
STMyOjpTTG9hZE9mZjE2OgorICAgICAgICBjYXNlIEkzMjo6VUxvYWQxNjoKKyAgICAgICAgY2Fz
ZSBJMzI6OlVMb2FkT2ZmMTY6CisgICAgICAgIGNhc2UgSTMyOjpMb2FkMzI6CisgICAgICAgIGNh
c2UgSTMyOjpMb2FkT2ZmMzI6CisgICAgICAgIGNhc2UgSTMyOjpTdG9yZTg6CisgICAgICAgIGNh
c2UgSTMyOjpTdG9yZU9mZjg6CisgICAgICAgIGNhc2UgSTMyOjpTdG9yZTE2OgorICAgICAgICBj
YXNlIEkzMjo6U3RvcmVPZmYxNjoKKyAgICAgICAgY2FzZSBJMzI6OlN0b3JlMzI6CisgICAgICAg
IGNhc2UgSTMyOjpTdG9yZU9mZjMyOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgY2FzZSBJMzI6OkNhbGxJbnQ6CisgICAgICAgICAgICBwYXJzZUNh
bGxJbnRlcm5hbChSZXR1cm5UeXBlOjpJMzIsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJMzI6OkNhbGxJbmQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBjYXNlIEkzMjo6Q2FsbEltcDoKKyAgICAgICAgICAgIHBhcnNl
Q2FsbEltcG9ydChSZXR1cm5UeXBlOjpJMzIsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJMzI6OkNvbmQ6CisgICAgICAgICAgICBwYXJzZUNvbmQoUmV0dXJuVHlwZTo6
STMyLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpDb21tYToK
KyAgICAgICAgICAgIHBhcnNlQ29tbWEoUmV0dXJuVHlwZTo6STMyLCBkc3QpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpGcm9tRjMyOgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBJMzI6OkZyb21GNjQ6CisgICAg
ICAgICAgICBwYXJzZUV4cHJGNjQoZHN0KTsKKyAgICAgICAgICAgIGxvYWREb3VibGUodGVtcG9y
YXJ5QWRkcmVzcyhkc3QpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIHRydW5jYXRl
RG91YmxlVG9JbnQzMihGUFJJbmZvOjpmcFJlZ1QwLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAg
ICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpOZWc6CisgICAgICAgICAgICBwYXJz
ZVVuYXJ5T3Aoc3RhdGljX2Nhc3Q8dWludDhfdD4oaTMyKSwgUmV0dXJuVHlwZTo6STMyLCBkc3Qp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpBZGQ6CisgICAgICAgIGNh
c2UgSTMyOjpTdWI6CisgICAgICAgIGNhc2UgSTMyOjpNdWw6CisgICAgICAgICAgICBwYXJzZUJp
bmFyeU9wKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGkzMiksIFJldHVyblR5cGU6OkkzMiwgZHN0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6U0RpdjoKKyAgICAgICAgY2Fz
ZSBJMzI6OlVEaXY6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBjYXNlIEkzMjo6U01vZDoKKyAgICAgICAgICAgIHBhcnNlQmluYXJ5T3Aoc3RhdGlj
X2Nhc3Q8dWludDhfdD4oaTMyKSwgUmV0dXJuVHlwZTo6STMyLCBkc3QpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpVTW9kOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBJMzI6OkJpdE5vdDoKKyAgICAgICAgICAg
IHBhcnNlVW5hcnlPcChzdGF0aWNfY2FzdDx1aW50OF90PihpMzIpLCBSZXR1cm5UeXBlOjpJMzIs
IGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkJpdE9yOgorICAg
ICAgICBjYXNlIEkzMjo6Qml0QW5kOgorICAgICAgICBjYXNlIEkzMjo6Qml0WG9yOgorICAgICAg
ICAgICAgcGFyc2VCaW5hcnlPcChzdGF0aWNfY2FzdDx1aW50OF90PihpMzIpLCBSZXR1cm5UeXBl
OjpJMzIsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkxzaDoK
KyAgICAgICAgY2FzZSBJMzI6OkFyaXRoUnNoOgorICAgICAgICBjYXNlIEkzMjo6TG9naWNSc2g6
CisgICAgICAgIGNhc2UgSTMyOjpDbHo6CisgICAgICAgIGNhc2UgSTMyOjpMb2dpY05vdDoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgSTMy
OjpFcUkzMjoKKyAgICAgICAgICAgIHBhcnNlUmVsYXRpb25hbE9wSTMyKEVxdWFsLCBkc3QpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpFcUYzMjoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgSTMyOjpFcUY2NDoK
KyAgICAgICAgICAgIHBhcnNlUmVsYXRpb25hbE9wRjY0KERvdWJsZUVxdWFsLCBkc3QpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpORXFJMzI6CisgICAgICAgICAgICBw
YXJzZVJlbGF0aW9uYWxPcEkzMihOb3RFcXVhbCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEkzMjo6TkVxRjMyOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBJMzI6Ok5FcUY2NDoKKyAgICAgICAgICAgIHBhcnNl
UmVsYXRpb25hbE9wRjY0KERvdWJsZU5vdEVxdWFsLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSTMyOjpTTGVUaEkzMjoKKyAgICAgICAgICAgIHBhcnNlUmVsYXRpb25h
bE9wSTMyKExlc3NUaGFuLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
STMyOjpVTGVUaEkzMjoKKyAgICAgICAgICAgIHBhcnNlUmVsYXRpb25hbE9wSTMyKEJlbG93LCBk
c3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpMZVRoRjMyOgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBJMzI6
OkxlVGhGNjQ6CisgICAgICAgICAgICBwYXJzZVJlbGF0aW9uYWxPcEY2NChEb3VibGVMZXNzVGhh
biwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6U0xlRXFJMzI6
CisgICAgICAgICAgICBwYXJzZVJlbGF0aW9uYWxPcEkzMihMZXNzVGhhbk9yRXF1YWwsIGRzdCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlVMZUVxSTMyOgorICAgICAg
ICAgICAgcGFyc2VSZWxhdGlvbmFsT3BJMzIoQmVsb3dPckVxdWFsLCBkc3QpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpMZUVxRjMyOgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBJMzI6OkxlRXFGNjQ6CisgICAg
ICAgICAgICBwYXJzZVJlbGF0aW9uYWxPcEY2NChEb3VibGVMZXNzVGhhbk9yRXF1YWwsIGRzdCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlNHclRoSTMyOgorICAgICAg
ICAgICAgcGFyc2VSZWxhdGlvbmFsT3BJMzIoR3JlYXRlclRoYW4sIGRzdCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlVHclRoSTMyOgorICAgICAgICAgICAgcGFyc2VS
ZWxhdGlvbmFsT3BJMzIoQWJvdmUsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJMzI6OkdyVGhGMzI6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICBjYXNlIEkzMjo6R3JUaEY2NDoKKyAgICAgICAgICAgIHBhcnNlUmVsYXRp
b25hbE9wRjY0KERvdWJsZUdyZWF0ZXJUaGFuLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSTMyOjpTR3JFcUkzMjoKKyAgICAgICAgICAgIHBhcnNlUmVsYXRpb25hbE9w
STMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEkzMjo6VUdyRXFJMzI6CisgICAgICAgICAgICBwYXJzZVJlbGF0aW9uYWxPcEkzMihB
Ym92ZU9yRXF1YWwsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6
OkdyRXFGMzI6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICBjYXNlIEkzMjo6R3JFcUY2NDoKKyAgICAgICAgICAgIHBhcnNlUmVsYXRpb25hbE9wRjY0
KERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEkzMjo6U01pbjoKKyAgICAgICAgY2FzZSBJMzI6OlVNaW46CisgICAgICAgIGNh
c2UgSTMyOjpTTWF4OgorICAgICAgICBjYXNlIEkzMjo6VU1heDoKKyAgICAgICAgY2FzZSBJMzI6
OkFiczoKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBzd2l0Y2ggKGkzMldp
dGhJbW0pIHsKKyAgICAgICAgY2FzZSBJMzJXaXRoSW1tOjpMaXRJbW06CisgICAgICAgICAgICBz
dG9yZTMyKFRydXN0ZWRJbW0zMihpbW0pLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyV2l0aEltbTo6TGl0UG9vbDoKKyAgICAgICAg
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKG1fbW9kdWxlLT5tX2NvbnN0YW50STMyc1tpbW1dKSwg
dGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEkzMldpdGhJbW06OkdldExvYzoKKyAgICAgICAgICAgIGxvYWQzMihzdGFja0FkZHJlc3MoaW1t
KSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwg
dGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VFeHByRjY0KGludCBkc3QpCit7
CisgICAgRjY0IGY2NDsKKyAgICBGNjRXaXRoSW1tIGY2NFdpdGhJbW07CisgICAgdWludDhfdCBp
bW07CisKKyAgICBpZiAobV9tb2R1bGUtPm1fcmVhZGVyLmNvZGUoJmY2NCwgJmY2NFdpdGhJbW0s
ICZpbW0pKSB7CisgICAgICAgIHN3aXRjaCAoZjY0KSB7CisgICAgICAgIGNhc2UgRjY0OjpMaXRJ
bW06CisgICAgICAgICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChyZWludGVycHJldERvdWJsZVRv
SW50NjQobV9tb2R1bGUtPm1fcmVhZGVyLmZpeGVkV2lkdGg8ZG91YmxlPigpKSksIHRlbXBvcmFy
eUFkZHJlc3MoZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGNjQ6Ok5l
ZzoKKyAgICAgICAgICAgIHBhcnNlVW5hcnlPcChzdGF0aWNfY2FzdDx1aW50OF90PihmNjQpLCBS
ZXR1cm5UeXBlOjpGNjQsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBG
NjQ6OkFkZDoKKyAgICAgICAgY2FzZSBGNjQ6OlN1YjoKKyAgICAgICAgY2FzZSBGNjQ6Ok11bDoK
KyAgICAgICAgY2FzZSBGNjQ6OkRpdjoKKyAgICAgICAgICAgIHBhcnNlQmluYXJ5T3Aoc3RhdGlj
X2Nhc3Q8dWludDhfdD4oZjY0KSwgUmV0dXJuVHlwZTo6RjY0LCBkc3QpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRjY0OjpTcXJ0OgorICAgICAgICAgICAgcGFyc2VVbmFyeU9w
KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGY2NCksIFJldHVyblR5cGU6OkY2NCwgZHN0KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2NDo6Q2FsbEludDoKKyAgICAgICAgICAgIHBh
cnNlQ2FsbEludGVybmFsKFJldHVyblR5cGU6OkY2NCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEY2NDo6Q2FsbEltcDoKKyAgICAgICAgICAgIHBhcnNlQ2FsbEltcG9y
dChSZXR1cm5UeXBlOjpGNjQsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBzd2l0Y2ggKGY2NFdpdGhJbW0pIHsKKyAgICAgICAg
Y2FzZSBGNjRXaXRoSW1tOjpMaXRQb29sOgorICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1t
NjQocmVpbnRlcnByZXREb3VibGVUb0ludDY0KG1fbW9kdWxlLT5tX2NvbnN0YW50RjY0c1tpbW1d
KSksIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBGNjRXaXRoSW1tOjpHZXRMb2M6CisgICAgICAgICAgICAvLyBGSVhNRTogbG9hZERvdWJs
ZS9zdG9yZURvdWJsZT8KKyAgICAgICAgICAgIGxvYWQ2NChzdGFja0FkZHJlc3MoaW1tKSwgR1BS
SW5mbzo6cmVnVDApOworICAgICAgICAgICAgc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgdGVtcG9y
YXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAg
IH0KK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIGdldEludGVybmFsRnVuY3Rpb24oRXhlY1N0
YXRlKiwgTW9kdWxlKiBtb2R1bGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCit7CisgICAgLy8g
VE9ETzogVXNlIHRoZXNlIHR3byBsaW5lcz8KKyAgICAvLyBWTSogdm0gPSBleGVjLT52bSgpOwor
ICAgIC8vIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShtb2R1bGUtPmludGVybmFsRnVuY3Rpb24oZnVuY3Rpb25JbmRl
eCkpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUNhbGxJbnRlcm5hbChSZXR1cm5UeXBl
IHJldHVyblR5cGUsIGludCBkc3QpCit7CisgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleCA9IG1f
bW9kdWxlLT5tX3JlYWRlci5pbW1VMzIoKTsKKyAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVy
ZSA9IG1fbW9kdWxlLT5tX3NpZ25hdHVyZXNbbV9tb2R1bGUtPm1fZnVuY1NpZ25hdHVyZXNbZnVu
Y3Rpb25JbmRleF1dOworICAgIGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJndW1lbnRzID0gc2lnbmF0
dXJlLmFyZ3VtZW50czsKKyAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9IGFyZ3VtZW50cy5zaXpl
KCk7CisgICAgLy8gRklYTUU6IHJldHVyblR5cGUgaXMgcmVkdW5kYW50IHdpdGggc2lnbmF0dXJl
LnJldHVyblR5cGUKKworICAgIHBhcnNlQ2FsbEFyZ3VtZW50cyhhcmd1bWVudHMsIGRzdCk7CisK
KyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihhcmd1bWVudENvdW50ICsgMSksIEFkZHJlc3Moc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCAtIHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSkpOworCisgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQorICAg
ICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1tYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCks
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
VHJ1c3RlZEltbVB0cihtX21vZHVsZSksIFRydXN0ZWRJbW0zMihmdW5jdGlvbkluZGV4KSk7Cisg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oZ2V0SW50ZXJuYWxGdW5j
dGlvbikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBjYWxsKEdQUkluZm86Om5vbkFyZ0dQ
UjApOworICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKKyAgICAgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKworICAgIG1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUklu
Zm86OnJlZ1QwKTsgLy8gcmVnVDAgaG9sZHMgY2FsbGVlLgorICAgIHN0b3JlNjQoR1BSSW5mbzo6
cmVnVDAsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIEpTU3RhY2s6OkNhbGxlZSAqIHN0
YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
QykpKTsKKworICAgIGNhbGxGdW5jdGlvblNsb3dDYXNlKHJldHVyblR5cGUsIGRzdCk7Cit9CisK
K3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBnZXRJbXBvcnRlZEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgTW9kdWxlKiBtb2R1bGUsIHVpbnQzMl90IGZ1bmNJbXBvcnRJbmRleCkKK3sKKyAgICAvLyBU
T0RPOiBVc2UgdGhlc2UgdHdvIGxpbmVzPworICAgIC8vIFZNKiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgLy8gTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICBjb25z
dCBTdHJpbmcmIGZ1bmN0aW9uSW1wb3J0TmFtZSA9IG1vZHVsZS0+ZnVuY3Rpb25JbXBvcnROYW1l
KGZ1bmNJbXBvcnRJbmRleCk7CisKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMtPnZtKCksIGZ1bmN0aW9uSW1wb3J0TmFtZSk7
CisgICAgUHJvcGVydHlTbG90IHNsb3QoZ2xvYmFsT2JqZWN0KTsKKworICAgIGlmICghZ2xvYmFs
T2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnRpZmllciwgc2xvdCkpIHsKKyAgICAg
ICAgLy8gVE9ETzogZG8gc29tZXRoaW5nIQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbid0
IGZpbmQgYSBmdW5jdGlvbiBuYW1lZCBcIiVzXCIuXG4iLCBmdW5jdGlvbkltcG9ydE5hbWUudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgIGFib3J0KCk7CisgICAgfQorCisgICAgSlNWYWx1ZSB2YWx1
ZSA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnRpZmllcik7CisgICAgaWYgKCF2YWx1ZS5pc0Z1
bmN0aW9uKCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJcIiVzXCIgaXMgbm90IGEgZnVu
Y3Rpb24uXG4iLCBmdW5jdGlvbkltcG9ydE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGFi
b3J0KCk7CisgICAgfQorCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7Cit9CisK
K3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlQ2FsbEltcG9ydChSZXR1cm5UeXBlIHJldHVyblR5cGUs
IGludCBkc3QpCit7CisgICAgdWludDMyX3QgZnVuY0ltcG9ydFNpZ25hdHVyZUluZGV4ID0gbV9t
b2R1bGUtPm1fcmVhZGVyLmltbVUzMigpOworICAgIGNvbnN0IE1vZHVsZTo6RnVuY0ltcG9ydFNp
Z25hdHVyZSYgZnVuY0ltcG9ydFNpZ25hdHVyZSA9IG1fbW9kdWxlLT5tX2Z1bmNJbXBvcnRTaWdu
YXR1cmVzW2Z1bmNJbXBvcnRTaWduYXR1cmVJbmRleF07CisgICAgY29uc3QgU2lnbmF0dXJlJiBz
aWduYXR1cmUgPSBtX21vZHVsZS0+bV9zaWduYXR1cmVzW2Z1bmNJbXBvcnRTaWduYXR1cmUuc2ln
bmF0dXJlSW5kZXhdOworICAgIGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJndW1lbnRzID0gc2lnbmF0
dXJlLmFyZ3VtZW50czsKKyAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9IGFyZ3VtZW50cy5zaXpl
KCk7CisgICAgLy8gRklYTUU6IHJldHVyblR5cGUgaXMgcmVkdW5kYW50IHdpdGggc2lnbmF0dXJl
LnJldHVyblR5cGUKKworICAgIHBhcnNlQ2FsbEFyZ3VtZW50cyhhcmd1bWVudHMsIGRzdCk7CisK
KyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihhcmd1bWVudENvdW50ICsgMSksIEFkZHJlc3Moc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCAtIHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSkpOworCisgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQorICAg
ICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1tYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCks
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
VHJ1c3RlZEltbVB0cihtX21vZHVsZSksIFRydXN0ZWRJbW0zMihmdW5jSW1wb3J0U2lnbmF0dXJl
LmZ1bmNJbXBvcnRJbmRleCkpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8
dm9pZCo+KGdldEltcG9ydGVkRnVuY3Rpb24pKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAg
Y2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGwpCisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JT
bG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICBtb3ZlKEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7IC8vIHJlZ1QwIGhvbGRzIGNhbGxlZS4K
KyAgICBzdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVy
LCBKU1N0YWNrOjpDYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpIC0g
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CisKKyAgICBjYWxsRnVuY3Rpb25TbG93Q2FzZShy
ZXR1cm5UeXBlLCBkc3QpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpjYWxsRnVuY3Rpb25TbG93
Q2FzZShSZXR1cm5UeXBlIHJldHVyblR5cGUsIGludCBkc3QpCit7CisgICAgVGh1bmtHZW5lcmF0
b3IgZ2VuZXJhdG9yID0gbGlua1RodW5rR2VuZXJhdG9yRm9yKENvZGVGb3JDYWxsLCBSZWdpc3Rl
clByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKKworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihudWxs
cHRyKSwgR1BSSW5mbzo6cmVnVDIpOyAvLyBUT0RPOiB1c2UgQ2FsbExpbmtJbmZvCisKKyAgICBD
b2RlUHRyIHB0ciA9IG1fdm0tPmdldENUSVN0dWIoZ2VuZXJhdG9yKS5jb2RlKCk7CisKKyAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIocHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpub25B
cmdHUFIwKTsKKworICAgIGNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisKKyAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKC1tX3N0YWNrSGVpZ2h0KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsgLy8gRklYTUU6IGhhY2t5CisKKyAgICAvLyBGSVhNRTog
Q2FuIHdlIHJlYWxseSB1c2UgcmV0dXJuVmFsdWVHUFI/CisgICAgc3dpdGNoIChyZXR1cm5UeXBl
KSB7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpJMzI6CisgICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUmV0dXJuVHlwZTo6RjY0OgorICAgICAgICB1bmJveERvdWJsZVdpdGhvdXRBc3Nl
cnRpb25zKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAg
ICAgc3RvcmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpWb2lkOgorICAgICAgICBicmVh
azsgLy8gVE9ETzogc3VyZT8KKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlQ2FsbEFyZ3VtZW50cyhj
b25zdCBWZWN0b3I8VHlwZT4mIGFyZ3VtZW50cywgaW50IGRzdCkKK3sKKyAgICBzaXplX3QgYXJn
dW1lbnRDb3VudCA9IGFyZ3VtZW50cy5zaXplKCk7CisgICAgc2l6ZV90IG9mZnNldCA9IFdURjo6
cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBkc3QgKyBhcmd1
bWVudENvdW50ICsgbV9jdXJyZW50TG9jYWxUeXBlcy5zaXplKCkpIC0gbV9jdXJyZW50TG9jYWxU
eXBlcy5zaXplKCk7IC8vIEZJWE1FOiBiZXR0ZXIgbmFtZQorCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpIHsKKyAgICAgICAgc3dpdGNoIChhcmd1bWVudHNb
aV0pIHsKKyAgICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgICAgICBwYXJzZUV4cHIoUmV0
dXJuVHlwZTo6STMyLCBvZmZzZXQpOworICAgICAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJl
c3Mob2Zmc2V0KSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgb3I2NChHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3Jl
NjQoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3Mob2Zmc2V0IC0gaSAtIDEpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAgIHBh
cnNlRXhwcihSZXR1cm5UeXBlOjpGNjQsIG9mZnNldCk7CisgICAgICAgICAgICBsb2FkRG91Ymxl
KHRlbXBvcmFyeUFkZHJlc3Mob2Zmc2V0KSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAg
ICBib3hEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAg
ICAgc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhvZmZzZXQgLSBpIC0g
MSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoLShvZmZzZXQgKyBtX2N1cnJlbnRMb2NhbFR5cGVzLnNpemUoKSArIDMpICogOCAt
IDgpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOyAv
LyBGSVhNRTogaGFja3kKK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VVbmFyeU9wKHVpbnQ4
X3Qgb3AsIFJldHVyblR5cGUgcmV0dXJuVHlwZSwgaW50IGRzdCkKK3sKKyAgICBwYXJzZUV4cHIo
cmV0dXJuVHlwZSwgZHN0KTsKKyAgICBzd2l0Y2ggKHJldHVyblR5cGUpIHsKKyAgICBjYXNlIFJl
dHVyblR5cGU6OkkzMjoKKyAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoZHN0KSwgR1BS
SW5mbzo6cmVnVDApOworICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PEkzMj4ob3ApKSB7Cisg
ICAgICAgIGNhc2UgSTMyOjpOZWc6CisgICAgICAgICAgICBuZWczMihHUFJJbmZvOjpyZWdUMCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkJpdE5vdDoKKyAgICAgICAg
ICAgIHhvcjMyKFRydXN0ZWRJbW0zMigtMSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKyAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5
QWRkcmVzcyhkc3QpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpGNjQ6
CisgICAgICAgIGxvYWREb3VibGUodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBGUFJJbmZvOjpmcFJl
Z1QwKTsKKyAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxGNjQ+KG9wKSkgeworICAgICAgICBj
YXNlIEY2NDo6TmVnOgorICAgICAgICAgICAgbmVnYXRlRG91YmxlKEZQUkluZm86OmZwUmVnVDAs
IEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRjY0
OjpTcXJ0OgorICAgICAgICAgICAgc3FydERvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZv
OjpmcFJlZ1QxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgc3RvcmVEb3Vi
bGUoRlBSSW5mbzo6ZnBSZWdUMSwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlQmluYXJ5T3AodWludDhfdCBvcCwg
UmV0dXJuVHlwZSByZXR1cm5UeXBlLCBpbnQgZHN0KQoreworICAgIHBhcnNlRXhwcihyZXR1cm5U
eXBlLCBkc3QpOworICAgIHBhcnNlRXhwcihyZXR1cm5UeXBlLCBkc3QgKyAxKTsKKyAgICBzd2l0
Y2ggKHJldHVyblR5cGUpIHsKKyAgICBjYXNlIFJldHVyblR5cGU6OkkzMjoKKyAgICAgICAgbG9h
ZDMyKHRlbXBvcmFyeUFkZHJlc3MoZHN0KSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBsb2Fk
MzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QgKyAxKSwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBz
d2l0Y2ggKHN0YXRpY19jYXN0PEkzMj4ob3ApKSB7CisgICAgICAgIGNhc2UgSTMyOjpBZGQ6Cisg
ICAgICAgICAgICBhZGQzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpTdWI6CisgICAgICAgICAgICBzdWIzMihH
UFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgSTMyOjpNdWw6CisgICAgICAgICAgICBtdWwzMihHUFJJbmZvOjpyZWdUMSwgR1BS
SW5mbzo6cmVnVDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpTTW9k
OgorICAgICAgICAgICAgbW92ZShHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDIpOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuY2RxKCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5pZGl2
bF9yKEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgIG1vdmUoR1BSSW5mbzo6cmVnVDEsIEdQ
UkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6Qml0
T3I6CisgICAgICAgICAgICBvcjMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkJpdEFuZDoKKyAgICAgICAgICAg
IGFuZDMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJMzI6OkJpdFhvcjoKKyAgICAgICAgICAgIHhvcjMyKEdQUkluZm86
OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAg
ICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUmV0dXJuVHlwZTo6RjY0OgorICAgICAgICBsb2FkRG91Ymxl
KHRlbXBvcmFyeUFkZHJlc3MoZHN0KSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgIGxvYWRE
b3VibGUodGVtcG9yYXJ5QWRkcmVzcyhkc3QgKyAxKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAg
ICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8RjY0PihvcCkpIHsKKyAgICAgICAgY2FzZSBGNjQ6OkFk
ZDoKKyAgICAgICAgICAgIGFkZERvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJl
Z1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2NDo6U3ViOgorICAgICAg
ICAgICAgc3ViRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRjY0OjpNdWw6CisgICAgICAgICAgICBtdWxE
b3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBGNjQ6OkRpdjoKKyAgICAgICAgICAgIGRpdkRvdWJsZShGUFJJ
bmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IH0KKyAgICAgICAgc3RvcmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgdGVtcG9yYXJ5QWRkcmVz
cyhkc3QpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNl
UmVsYXRpb25hbE9wSTMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBpbnQgZHN0KQor
eworICAgIHBhcnNlRXhwcihSZXR1cm5UeXBlOjpJMzIsIGRzdCk7CisgICAgcGFyc2VFeHByKFJl
dHVyblR5cGU6OkkzMiwgZHN0ICsgMSk7CisgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoZHN0
KSwgR1BSSW5mbzo6cmVnVDApOworICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKGRzdCArIDEp
LCBHUFJJbmZvOjpyZWdUMSk7CisgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgR1BSSW5mbzo6cmVn
VDAsIEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgc3RvcmUzMihHUFJJbmZv
OjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6
cGFyc2VSZWxhdGlvbmFsT3BGNjQoRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgaW50IGRzdCkK
K3sKKyAgICBwYXJzZUV4cHIoUmV0dXJuVHlwZTo6RjY0LCBkc3QpOworICAgIHBhcnNlRXhwcihS
ZXR1cm5UeXBlOjpGNjQsIGRzdCArIDEpOworICAgIGxvYWREb3VibGUodGVtcG9yYXJ5QWRkcmVz
cyhkc3QpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICBsb2FkRG91YmxlKHRlbXBvcmFyeUFkZHJl
c3MoZHN0ICsgMSksIEZQUkluZm86OmZwUmVnVDEpOworICAgIEp1bXAgdHJ1ZUNhc2UgPSBicmFu
Y2hEb3VibGUoY29uZGl0aW9uLCBGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QxKTsK
KyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAg
ICBKdW1wIGVuZCA9IGp1bXAoKTsKKyAgICB0cnVlQ2FzZS5saW5rKHRoaXMpOworICAgIHN0b3Jl
MzIoVHJ1c3RlZEltbTMyKDEpLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgIGVuZC5saW5r
KHRoaXMpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUNvbW1hKFJldHVyblR5cGUgcmV0
dXJuVHlwZSwgaW50IGRzdCkKK3sKKyAgICBwYXJzZUV4cHIobV9tb2R1bGUtPm1fcmVhZGVyLnJ0
eXBlKCksIGRzdCk7CisgICAgcGFyc2VFeHByKHJldHVyblR5cGUsIGRzdCk7Cit9CisKK3ZvaWQg
SklUQ29tcGlsZXI6OnBhcnNlQ29uZChSZXR1cm5UeXBlIHJldHVyblR5cGUsIGludCBkc3QpCit7
CisgICAgcGFyc2VFeHByKFJldHVyblR5cGU6OkkzMiwgZHN0KTsKKyAgICBsb2FkMzIodGVtcG9y
YXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgSnVtcCBlbHMgPSBicmFuY2hU
ZXN0MzIoWmVybywgR1BSSW5mbzo6cmVnVDApOworICAgIHBhcnNlRXhwcihyZXR1cm5UeXBlLCBk
c3QpOworICAgIEp1bXAgZW5kID0ganVtcCgpOworICAgIGVscy5saW5rKHRoaXMpOworICAgIHBh
cnNlRXhwcihyZXR1cm5UeXBlLCBkc3QpOworICAgIGVuZC5saW5rKHRoaXMpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUpJVENvbXBpbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
SklUQ29tcGlsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MzM2YWFkNjA0NDcwOWNlYzRkZWI4YWUyZTZmYjIy
MzdkYTQ3MGU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUpJVENvbXBpbGVyLmgKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUg
TGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIHlvdSBtYXkgbm90IHVzZSB0
aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyBZb3UgbWF5
IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworIGh0dHA6Ly93d3cuYXBhY2hlLm9y
Zy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUg
bGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIGRpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgV0lUSE9V
VCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9y
IGltcGxpZWQuCisgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292
ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgor
Ki8KKworI2lmbmRlZiBXYXNtSklUQ29tcGlsZXJfaAorI2RlZmluZSBXYXNtSklUQ29tcGlsZXJf
aAorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiV2FzbU1vZHVsZS5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgRXhlY1N0YXRlOworY2xhc3MgSklUQ29kZTsKK2Ns
YXNzIFZNOworCituYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIEp1bXBTY29wZTsKKworY2xhc3Mg
SklUQ29tcGlsZXIgOiBwcml2YXRlIENDYWxsSGVscGVycyB7CitwdWJsaWM6CisgICAgSklUQ29t
cGlsZXIoVk0qIHZtLCBNb2R1bGUqIG1vZHVsZSkKKyAgICAgICAgOiBDQ2FsbEhlbHBlcnModm0s
IDApCisgICAgICAgICwgbV9tb2R1bGUobW9kdWxlKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQ
dHI8SklUQ29kZT4gY29tcGlsZUZ1bmN0aW9uKFZNJiwgc2l6ZV90IGZ1bmN0aW9uSW5kZXgpOwor
Citwcml2YXRlOgorICAgIHZvaWQgYWxsb2NhdGVTcGFjZU9uU3RhY2soKTsKKyAgICB2b2lkIGRl
YWxsb2NhdGVTcGFjZU9uU3RhY2soKTsKKworICAgIHZvaWQgcGFyc2VBcmd1bWVudHMoY29uc3Qg
U2lnbmF0dXJlJik7CisgICAgdm9pZCBwYXJzZVZhcnMoKTsKKworICAgIHZvaWQgcGFyc2VTdG10
KCk7CisgICAgdm9pZCBwYXJzZUdldExvY2FsKGludCBkc3QpOworICAgIHZvaWQgcGFyc2VTZXRM
b2NhbCh1aW50MzJfdCBpbW0sIGludCBkc3QpOworICAgIHZvaWQgcGFyc2VTZXRMb2NhbChpbnQg
ZHN0KTsKKyAgICB2b2lkIHBhcnNlUmV0dXJuU3RtdCgpOworICAgIHZvaWQgcGFyc2VCbG9ja1N0
bXQoKTsKKyAgICB2b2lkIHBhcnNlU3RtdExpc3QoKTsKKyAgICB2b2lkIHBhcnNlSWZTdG10KCk7
CisgICAgdm9pZCBwYXJzZUlmRWxzZVN0bXQoKTsKKyAgICB2b2lkIHBhcnNlV2hpbGVTdG10KCk7
CisgICAgdm9pZCBwYXJzZURvU3RtdCgpOworICAgIHZvaWQgcGFyc2VMYWJlbFN0bXQoKTsKKyAg
ICB2b2lkIHBhcnNlQnJlYWtTdG10KCk7CisgICAgdm9pZCBwYXJzZUJyZWFrTGFiZWxTdG10KCk7
CisgICAgdm9pZCBwYXJzZUNvbnRpbnVlU3RtdCgpOworICAgIHZvaWQgcGFyc2VDb250aW51ZUxh
YmVsU3RtdCgpOworICAgIHZvaWQgcGFyc2VTd2l0Y2hTdG10KCk7CisKKyAgICB2b2lkIHBhcnNl
RXhwcihSZXR1cm5UeXBlLCBpbnQgZHN0KTsKKyAgICB2b2lkIHBhcnNlRXhwckkzMihpbnQgZHN0
KTsKKyAgICB2b2lkIHBhcnNlRXhwckY2NChpbnQgZHN0KTsKKyAgICB2b2lkIHBhcnNlQ2FsbElu
dGVybmFsKFJldHVyblR5cGUsIGludCBkc3QpOworICAgIHZvaWQgcGFyc2VDYWxsSW1wb3J0KFJl
dHVyblR5cGUsIGludCBkc3QpOworICAgIHZvaWQgY2FsbEZ1bmN0aW9uU2xvd0Nhc2UoUmV0dXJu
VHlwZSwgaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZUNhbGxBcmd1bWVudHMoY29uc3QgVmVjdG9y
PFR5cGU+JiBhcmd1bWVudHMsIGludCBkc3QpOworICAgIHZvaWQgcGFyc2VVbmFyeU9wKHVpbnQ4
X3Qgb3AsIFJldHVyblR5cGUsIGludCBkc3QpOworICAgIHZvaWQgcGFyc2VCaW5hcnlPcCh1aW50
OF90IG9wLCBSZXR1cm5UeXBlLCBpbnQgZHN0KTsKKyAgICB2b2lkIHBhcnNlUmVsYXRpb25hbE9w
STMyKFJlbGF0aW9uYWxDb25kaXRpb24sIGludCBkc3QpOworICAgIHZvaWQgcGFyc2VSZWxhdGlv
bmFsT3BGNjQoRG91YmxlQ29uZGl0aW9uLCBpbnQgZHN0KTsKKyAgICB2b2lkIHBhcnNlQ29tbWEo
UmV0dXJuVHlwZSwgaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZUNvbmQoUmV0dXJuVHlwZSwgaW50
IGRzdCk7CisKKyAgICBBZGRyZXNzIHN0YWNrQWRkcmVzcyhpbnQgaSkgY29uc3QgLy8gRklYTUU6
IElzIHRoaXMgY29ycmVjdD8KKyAgICB7CisgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCAtaSAqIDggLSA4KTsKKyAgICB9CisKKyAgICBBZGRyZXNzIHRl
bXBvcmFyeUFkZHJlc3MoaW50IGkpIGNvbnN0IC8vIEZJWE1FOiBJcyB0aGlzIGNvcnJlY3Q/Cisg
ICAgeworICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
LShpICsgbV9jdXJyZW50TG9jYWxUeXBlcy5zaXplKCkpICogOCAtIDgpOworICAgIH0KKworICAg
IHZvaWQgcHVzaENvbnRpbnVlTGFiZWxMYWJlbChMYWJlbCogbGFiZWwpIHsgbV9jb250aW51ZUxh
YmVsTGFiZWxzLmFwcGVuZChsYWJlbCk7IH0KKyAgICB2b2lkIHBvcENvbnRpbnVlTGFiZWxMYWJl
bCgpIHsgbV9jb250aW51ZUxhYmVsTGFiZWxzLnJlbW92ZUxhc3QoKTsgfQorICAgIExhYmVsKiBj
b250aW51ZUxhYmVsTGFiZWwoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fY29udGludWVMYWJl
bExhYmVsc1tpXTsgfQorICAgIHZvaWQgcHVzaEJyZWFrTGFiZWxKdW1wTGlzdChKdW1wTGlzdCog
anVtcExpc3QpIHsgbV9icmVha0xhYmVsSnVtcExpc3RzLmFwcGVuZChqdW1wTGlzdCk7IH0KKyAg
ICB2b2lkIHBvcEJyZWFrTGFiZWxKdW1wTGlzdCgpIHsgbV9icmVha0xhYmVsSnVtcExpc3RzLnJl
bW92ZUxhc3QoKTsgfQorICAgIEp1bXBMaXN0KiBicmVha0xhYmVsSnVtcExpc3Qoc2l6ZV90IGkp
IGNvbnN0IHsgcmV0dXJuIG1fYnJlYWtMYWJlbEp1bXBMaXN0c1tpXTsgfQorCisgICAgdm9pZCBw
dXNoQ29udGludWVKdW1wU2NvcGUoSnVtcFNjb3BlKiBqdW1wU2NvcGUpIHsgbV9jb250aW51ZUp1
bXBTY29wZXMuYXBwZW5kKGp1bXBTY29wZSk7IH0KKyAgICB2b2lkIHBvcENvbnRpbnVlSnVtcFNj
b3BlKCkgeyBtX2NvbnRpbnVlSnVtcFNjb3Blcy5yZW1vdmVMYXN0KCk7IH0KKyAgICBKdW1wU2Nv
cGUqIHRvcENvbnRpbnVlSnVtcFNjb3BlKCkgY29uc3QgeyByZXR1cm4gbV9jb250aW51ZUp1bXBT
Y29wZXMubGFzdCgpOyB9CisKKyAgICB2b2lkIHB1c2hCcmVha0p1bXBMaXN0KEp1bXBMaXN0KiBq
dW1wTGlzdCkgeyBtX2JyZWFrSnVtcExpc3RzLmFwcGVuZChqdW1wTGlzdCk7IH0KKyAgICB2b2lk
IHBvcEJyZWFrSnVtcExpc3QoKSB7IG1fYnJlYWtKdW1wTGlzdHMucmVtb3ZlTGFzdCgpOyB9Cisg
ICAgSnVtcExpc3QqIHRvcEJyZWFrSnVtcExpc3QoKSBjb25zdCB7IHJldHVybiBtX2JyZWFrSnVt
cExpc3RzLmxhc3QoKTsgfQorCisgICAgTW9kdWxlKiBtX21vZHVsZTsKKworICAgIHVpbnQzMl90
IG1fc3RhY2tIZWlnaHQ7IC8vIEZJWE1FOiBUaGlzIGNhdXNlZCBhICdzZWdtZW50YXRpb24gZmF1
bHQnIGhlaXNlbmJ1ZyB3aGVuIEkgYWRkZWQgInNpemVfdCBtX3N0YWNrSGVpZ2h0Ii4gU29tZXRo
aW5nIG11c3QgYmUgd3JvbmcuCisKKyAgICBSZXR1cm5UeXBlIG1fY3VycmVudFJldHVyblR5cGU7
CisgICAgVmVjdG9yPFR5cGU+IG1fY3VycmVudExvY2FsVHlwZXM7CisKKyAgICBWZWN0b3I8TWFj
cm9Bc3NlbWJsZXI6OkxhYmVsKj4gbV9jb250aW51ZUxhYmVsTGFiZWxzOworICAgIFZlY3RvcjxN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QqPiBtX2JyZWFrTGFiZWxKdW1wTGlzdHM7CisKKyAgICBW
ZWN0b3I8SnVtcFNjb3BlKj4gbV9jb250aW51ZUp1bXBTY29wZXM7CisgICAgVmVjdG9yPE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCo+IG1fYnJlYWtKdW1wTGlzdHM7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gV2FzbUpJVENvbXBpbGVyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmI1ZGE5ZTY0YmU3
ZGRmYWMyZTY5YmZiNTMxMWVkYmQxZjNiZWE0MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwCkBAIC0wLDAgKzEsMjY5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyBMaWNlbnNlZCB1
bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyB5
b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExp
Y2Vuc2UuCisgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyBodHRw
Oi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworIFVubGVzcyByZXF1aXJl
ZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyBk
aXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMi
IEJBU0lTLAorIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBl
aXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNp
ZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyBsaW1pdGF0aW9ucyB1bmRl
ciB0aGUgTGljZW5zZS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNt
TW9kdWxlLmgiCisKKyNpbmNsdWRlICJKSVRDb2RlLmgiCisjaW5jbHVkZSAiSlNDZWxsSW5saW5l
cy5oIgorI2luY2x1ZGUgIldhc21KSVRDb21waWxlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXYXNtIHsKKwor
Y29uc3QgQ2xhc3NJbmZvIE1vZHVsZTo6c19pbmZvID0geyAiTW9kdWxlIiwgJkJhc2U6OnNfaW5m
bywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShNb2R1bGUpIH07CisKK3ZvaWQgTW9kdWxlOjpjb21w
aWxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAg
bV9yZWFkZXIgPSBSZWFkZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVy
LmRhdGEoKSkpOworCisgICAgaWYgKG1fcmVhZGVyLmZpeGVkV2lkdGg8dWludDMyX3Q+KCkgIT0g
TWFnaWNOdW1iZXIpCisgICAgICAgIGFib3J0KCk7CisgICAgbV9yZWFkZXIuZml4ZWRXaWR0aDx1
aW50MzJfdD4oKTsgLy8gb3V0cHV0IHNpemUgaW4gYXNtLmpzIGZvcm1hdAorCisgICAgcGFyc2VD
b25zdGFudFBvb2xTZWN0aW9uKCk7CisgICAgcGFyc2VTaWduYXR1cmVTZWN0aW9uKCk7CisgICAg
cGFyc2VGdW5jdGlvbkltcG9ydFNlY3Rpb24oKTsKKyAgICBwYXJzZUdsb2JhbFNlY3Rpb24oKTsK
KyAgICBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKCk7CisgICAgcGFyc2VGdW5jdGlv
blBvaW50ZXJUYWJsZXMoKTsKKyAgICBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvblNlY3Rpb24oZXhl
Yyk7CisgICAgcGFyc2VFeHBvcnRTZWN0aW9uKGV4ZWMtPnZtKCkpOworfQorCit2b2lkIE1vZHVs
ZTo6cGFyc2VDb25zdGFudFBvb2xTZWN0aW9uKCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZkkz
MnMgPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICB1aW50MzJfdCBudW1iZXJPZkYzMnMgPSBtX3Jl
YWRlci5pbW1VMzIoKTsKKyAgICB1aW50MzJfdCBudW1iZXJPZkY2NHMgPSBtX3JlYWRlci5pbW1V
MzIoKTsKKworICAgIFZlY3Rvcjx1aW50MzJfdD4gY29uc3RhbnRJMzJzKG51bWJlck9mSTMycyk7
CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mSTMyczsgKytpKQorICAgICAg
ICBjb25zdGFudEkzMnNbaV0gPSBtX3JlYWRlci5pbW1VMzIoKTsKKworICAgIFZlY3RvcjxmbG9h
dD4gY29uc3RhbnRGMzJzKG51bWJlck9mRjMycyk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsg
aSA8IG51bWJlck9mRjMyczsgKytpKQorICAgICAgICBjb25zdGFudEYzMnNbaV0gPSBtX3JlYWRl
ci5maXhlZFdpZHRoPGZsb2F0PigpOworCisgICAgVmVjdG9yPGRvdWJsZT4gY29uc3RhbnRGNjRz
KG51bWJlck9mRjY0cyk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mRjY0
czsgKytpKQorICAgICAgICBjb25zdGFudEY2NHNbaV0gPSBtX3JlYWRlci5maXhlZFdpZHRoPGRv
dWJsZT4oKTsKKworICAgIG1fY29uc3RhbnRJMzJzID0gV1RGOjptb3ZlKGNvbnN0YW50STMycyk7
CisgICAgbV9jb25zdGFudEYzMnMgPSBXVEY6Om1vdmUoY29uc3RhbnRGMzJzKTsKKyAgICBtX2Nv
bnN0YW50RjY0cyA9IFdURjo6bW92ZShjb25zdGFudEY2NHMpOworfQorCit2b2lkIE1vZHVsZTo6
cGFyc2VTaWduYXR1cmVTZWN0aW9uKCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZlNpZ25hdHVy
ZXMgPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICBWZWN0b3I8U2lnbmF0dXJlPiBzaWduYXR1cmVz
KG51bWJlck9mU2lnbmF0dXJlcyk7CisgICAgZm9yICh1aW50MzJfdCBzaWduYXR1cmVJbmRleCA9
IDA7IHNpZ25hdHVyZUluZGV4IDwgbnVtYmVyT2ZTaWduYXR1cmVzOyArK3NpZ25hdHVyZUluZGV4
KSB7CisgICAgICAgIFJldHVyblR5cGUgcmV0dXJuVHlwZSA9IG1fcmVhZGVyLnJ0eXBlKCk7Cisg
ICAgICAgIHVpbnQzMl90IGFyZ3VtZW50Q291bnQgPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICAg
ICAgU2lnbmF0dXJlIHNpZ25hdHVyZShyZXR1cm5UeXBlLCBhcmd1bWVudENvdW50KTsKKyAgICAg
ICAgZm9yICh1aW50MzJfdCBhcmd1bWVudEluZGV4ID0gMDsgYXJndW1lbnRJbmRleCA8IGFyZ3Vt
ZW50Q291bnQ7ICsrYXJndW1lbnRJbmRleCkKKyAgICAgICAgICAgIHNpZ25hdHVyZS5hcmd1bWVu
dHNbYXJndW1lbnRJbmRleF0gPSBtX3JlYWRlci50eXBlKCk7CisgICAgICAgIHNpZ25hdHVyZXNb
c2lnbmF0dXJlSW5kZXhdID0gV1RGOjptb3ZlKHNpZ25hdHVyZSk7CisgICAgfQorCisgICAgbV9z
aWduYXR1cmVzID0gV1RGOjptb3ZlKHNpZ25hdHVyZXMpOworfQorCit2b2lkIE1vZHVsZTo6cGFy
c2VGdW5jdGlvbkltcG9ydFNlY3Rpb24oKQoreworICAgIHVpbnQzMl90IG51bWJlck9mRnVuY0lt
cG9ydHMgPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICB1aW50MzJfdCBudW1iZXJPZkZ1bmNJbXBv
cnRTaWduYXR1cmVzID0gbV9yZWFkZXIuaW1tVTMyKCk7CisKKyAgICBtX2Z1bmN0aW9uSW1wb3J0
TmFtZXMucmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9mRnVuY0ltcG9ydHMpOworCisgICAgVmVjdG9y
PEZ1bmNJbXBvcnRTaWduYXR1cmU+IGZ1bmNJbXBvcnRTaWduYXR1cmVzKG51bWJlck9mRnVuY0lt
cG9ydFNpZ25hdHVyZXMpOworICAgIEZ1bmNJbXBvcnRTaWduYXR1cmUqIGZ1bmNJbXBvcnRTaWdu
YXR1cmUgPSBmdW5jSW1wb3J0U2lnbmF0dXJlcy5kYXRhKCk7CisgICAgZm9yICh1aW50MzJfdCBm
dW5jSW1wb3J0SW5kZXggPSAwOyBmdW5jSW1wb3J0SW5kZXggPCBudW1iZXJPZkZ1bmNJbXBvcnRz
OyArK2Z1bmNJbXBvcnRJbmRleCkgeworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Cisg
ICAgICAgIHdoaWxlIChjaGFyIGMgPSBtX3JlYWRlci5zaW5nbGVDaGFyKCkpCisgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZChjKTsKKyAgICAgICAgbV9mdW5jdGlvbkltcG9ydE5hbWVzLmFwcGVu
ZChidWlsZGVyLnRvU3RyaW5nKCkpOworCisgICAgICAgIHVpbnQzMl90IG51bWJlck9mU2lnbmF0
dXJlcyA9IG1fcmVhZGVyLmltbVUzMigpOworICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBp
IDwgbnVtYmVyT2ZTaWduYXR1cmVzOyArK2kpIHsKKyAgICAgICAgICAgIGZ1bmNJbXBvcnRTaWdu
YXR1cmUtPnNpZ25hdHVyZUluZGV4ID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgICAgICAgICBm
dW5jSW1wb3J0U2lnbmF0dXJlLT5mdW5jSW1wb3J0SW5kZXggPSBmdW5jSW1wb3J0SW5kZXg7Cisg
ICAgICAgICAgICBmdW5jSW1wb3J0U2lnbmF0dXJlKys7CisgICAgICAgIH0KKyAgICB9CisgICAg
YXNzZXJ0KGZ1bmNJbXBvcnRTaWduYXR1cmUgPT0gZnVuY0ltcG9ydFNpZ25hdHVyZXMuZGF0YSgp
ICsgbnVtYmVyT2ZGdW5jSW1wb3J0U2lnbmF0dXJlcyk7CisKKyAgICBtX2Z1bmNJbXBvcnRTaWdu
YXR1cmVzID0gV1RGOjptb3ZlKGZ1bmNJbXBvcnRTaWduYXR1cmVzKTsKK30KKwordm9pZCBNb2R1
bGU6OnBhcnNlR2xvYmFsU2VjdGlvbigpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZJMzJaZXJv
ID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGMzJaZXJvID0gbV9y
ZWFkZXIuaW1tVTMyKCk7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGNjRaZXJvID0gbV9yZWFkZXIu
aW1tVTMyKCk7CisgICAgdWludDMyX3QgbnVtYmVyT2ZJMzJJbXBvcnQgPSBtX3JlYWRlci5pbW1V
MzIoKTsKKyAgICB1aW50MzJfdCBudW1iZXJPZkYzMkltcG9ydCA9IG1fcmVhZGVyLmltbVUzMigp
OworICAgIHVpbnQzMl90IG51bWJlck9mRjY0SW1wb3J0ID0gbV9yZWFkZXIuaW1tVTMyKCk7Cisg
ICAgdWludDMyX3QgbnVtYmVyT2ZHbG9iYWxWYXJzID0gbnVtYmVyT2ZJMzJaZXJvICsgbnVtYmVy
T2ZGMzJaZXJvICsgbnVtYmVyT2ZGNjRaZXJvICsgbnVtYmVyT2ZJMzJJbXBvcnQgKyBudW1iZXJP
ZkYzMkltcG9ydCArIG51bWJlck9mRjY0SW1wb3J0OworCisgICAgVmVjdG9yPFR5cGU+IGdsb2Jh
bFR5cGVzKG51bWJlck9mR2xvYmFsVmFycyk7CisgICAgc2l6ZV90IGdsb2JhbFR5cGVJbmRleCA9
IDA7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mSTMyWmVybzsgKytpKQor
ICAgICAgICBnbG9iYWxUeXBlc1tnbG9iYWxUeXBlSW5kZXgrK10gPSBUeXBlOjpJMzI7CisgICAg
Zm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mRjMyWmVybzsgKytpKQorICAgICAgICBn
bG9iYWxUeXBlc1tnbG9iYWxUeXBlSW5kZXgrK10gPSBUeXBlOjpGMzI7CisgICAgZm9yICh1aW50
MzJfdCBpID0gMDsgaSA8IG51bWJlck9mRjY0WmVybzsgKytpKQorICAgICAgICBnbG9iYWxUeXBl
c1tnbG9iYWxUeXBlSW5kZXgrK10gPSBUeXBlOjpGNjQ7CisgICAgZm9yICh1aW50MzJfdCBpID0g
MDsgaSA8IG51bWJlck9mSTMySW1wb3J0OyArK2kpIHsKKyAgICAgICAgd2hpbGUgKG1fcmVhZGVy
LnNpbmdsZUNoYXIoKSkgeyB9CisgICAgICAgIGdsb2JhbFR5cGVzW2dsb2JhbFR5cGVJbmRleCsr
XSA9IFR5cGU6OkkzMjsKKyAgICB9CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJl
ck9mRjMySW1wb3J0OyArK2kpIHsKKyAgICAgICAgd2hpbGUgKG1fcmVhZGVyLnNpbmdsZUNoYXIo
KSkgeyB9CisgICAgICAgIGdsb2JhbFR5cGVzW2dsb2JhbFR5cGVJbmRleCsrXSA9IFR5cGU6OkYz
MjsKKyAgICB9CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mRjY0SW1wb3J0
OyArK2kpIHsKKyAgICAgICAgd2hpbGUgKG1fcmVhZGVyLnNpbmdsZUNoYXIoKSkgeyB9CisgICAg
ICAgIGdsb2JhbFR5cGVzW2dsb2JhbFR5cGVJbmRleCsrXSA9IFR5cGU6OkY2NDsKKyAgICB9Cisg
ICAgbV9nbG9iYWxUeXBlcyA9IFdURjo6bW92ZShnbG9iYWxUeXBlcyk7Cit9CisKK3ZvaWQgTW9k
dWxlOjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKCkKK3sKKyAgICB1aW50MzJfdCBu
dW1iZXJPZkZ1bmN0aW9ucyA9IG1fcmVhZGVyLmltbVUzMigpOworICAgIFZlY3Rvcjx1aW50MzJf
dD4gZnVuY1NpZ25hdHVyZXMobnVtYmVyT2ZGdW5jdGlvbnMpOworICAgIGZvciAodWludDMyX3Qg
aSA9IDA7IGkgPCBudW1iZXJPZkZ1bmN0aW9uczsgKytpKQorICAgICAgICBmdW5jU2lnbmF0dXJl
c1tpXSA9IG1fcmVhZGVyLmltbVUzMigpOworCisgICAgbV9mdW5jU2lnbmF0dXJlcyA9IFdURjo6
bW92ZShmdW5jU2lnbmF0dXJlcyk7Cit9CisKK3ZvaWQgTW9kdWxlOjpwYXJzZUZ1bmN0aW9uUG9p
bnRlclRhYmxlcygpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jUHRyVGFibGVzID0gbV9y
ZWFkZXIuaW1tVTMyKCk7CisgICAgVmVjdG9yPEZ1bmNQdHJUYWJsZT4gZnVuY1B0clRhYmxlcyhu
dW1iZXJPZkZ1bmNQdHJUYWJsZXMpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1i
ZXJPZkZ1bmNQdHJUYWJsZXM7ICsraSkgeworICAgICAgICBmdW5jUHRyVGFibGVzW2ldLnNpZ25h
dHVyZUluZGV4ID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgICAgIHVpbnQzMl90IG51bUVsZW1l
bnRzID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgICAgIFZlY3Rvcjx1aW50MzJfdD4gZWxlbWVu
dHMobnVtRWxlbWVudHMpOworICAgICAgICBmb3IgKHVpbnQzMl90IGogPSAwOyBqIDwgbnVtRWxl
bWVudHM7ICsraikKKyAgICAgICAgICAgIGVsZW1lbnRzW2pdID0gbV9yZWFkZXIuaW1tVTMyKCk7
CisgICAgICAgIGZ1bmNQdHJUYWJsZXNbaV0uZWxlbWVudHMgPSBXVEY6Om1vdmUoZWxlbWVudHMp
OworICAgIH0KKworICAgIG1fZnVuY1B0clRhYmxlcyA9IFdURjo6bW92ZShmdW5jUHRyVGFibGVz
KTsKK30KKwordm9pZCBNb2R1bGU6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9uU2VjdGlvbihFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Z1bmNTaWduYXR1
cmVzLnNpemUoKTsgKytpKQorICAgICAgICBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbihleGVjLCBp
KTsKK30KKwordm9pZCBNb2R1bGU6OnBhcnNlRXhwb3J0U2VjdGlvbihWTSYgdm0pCit7CisgICAg
c3dpdGNoIChtX3JlYWRlci5leHBvcnRGb3JtYXQoKSkgeworICAgIGNhc2UgRXhwb3J0Rm9ybWF0
OjpEZWZhdWx0OiB7CisgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSBtX3JlYWRlci5p
bW1VMzIoKTsKKyAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJkZWZhdWx0Iik7IC8vIFRPRE86IFVzZSBvdGhlciBuYW1lcworICAgICAg
ICBwdXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIG1fZnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLmdl
dCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgRXhwb3J0Rm9ybWF0OjpSZWNv
cmQ6IHsKKyAgICAgICAgdWludDMyX3QgbnVtYmVyT2ZFeHBvcnRzID0gbV9yZWFkZXIuaW1tVTMy
KCk7CisgICAgICAgIGZvciAodWludDMyX3QgZXhwb3J0SW5kZXggPSAwOyBleHBvcnRJbmRleCA8
IG51bWJlck9mRXhwb3J0czsgKytleHBvcnRJbmRleCkgeworICAgICAgICAgICAgU3RyaW5nQnVp
bGRlciBidWlsZGVyOworICAgICAgICAgICAgd2hpbGUgKGNoYXIgYyA9IG1fcmVhZGVyLnNpbmds
ZUNoYXIoKSkKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChjKTsKKyAgICAgICAgICAg
IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICAgICAgICAg
IElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBidWls
ZGVyLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgcHV0RGlyZWN0KHZtLCBpZGVudGlmaWVyLCBt
X2Z1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorfQorCit2b2lkIE1vZHVsZTo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb24o
RXhlY1N0YXRlKiBleGVjLCBzaXplX3QgZnVuY3Rpb25JbmRleCkKK3sKKyAgICBKSVRDb21waWxl
ciBqaXRDb21waWxlcigmZXhlYy0+dm0oKSwgdGhpcyk7CisgICAgUmVmUHRyPEpJVENvZGU+IGpp
dENvZGUgPSBqaXRDb21waWxlci5jb21waWxlRnVuY3Rpb24oZXhlYy0+dm0oKSwgZnVuY3Rpb25J
bmRleCk7CisKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworCisgICAgV2ViQXNzZW1ibHlFeGVj
dXRhYmxlKiBleGVjdXRhYmxlID0gV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpjcmVhdGUodm0sIFNv
dXJjZUNvZGUoKSk7CisKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisKKyAgICBSZWZQ
dHI8V2ViQXNzZW1ibHlDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGFkb3B0UmVmKG5ldyBXZWJBc3Nl
bWJseUNvZGVCbG9jayhleGVjdXRhYmxlLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsK
KyAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoaml0Q29kZSk7CisgICAgZXhlY3V0YWJsZS0+aW5z
dGFsbENvZGUoY29kZUJsb2NrLmdldCgpKTsKKworICAgIEpTRnVuY3Rpb24qIGpzRnVuY3Rpb24g
PSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGV4ZWN1dGFibGUsIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSk7CisgICAgbV9mdW5jdGlvbnMuYXBwZW5kKFdyaXRlQmFycmllcjxKU0Z1bmN0aW9u
Pih2bSwgdGhpcywganNGdW5jdGlvbikpOworfQorCitKU0Z1bmN0aW9uKiBNb2R1bGU6OmludGVy
bmFsRnVuY3Rpb24oc2l6ZV90IGZ1bmN0aW9uSW5kZXgpCit7CisgICAgcmV0dXJuIG1fZnVuY3Rp
b25zW2Z1bmN0aW9uSW5kZXhdLmdldCgpOworfQorCit2b2lkIE1vZHVsZTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIE1vZHVsZSogdGhp
c09iamVjdCA9IHN0YXRpY19jYXN0PE1vZHVsZSo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIGZvciAoYXV0byBmdW5jdGlvbiA6IHRoaXNPYmpl
Y3QtPm1fZnVuY3Rpb25zKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZnVuY3Rpb24pOworfQor
CitNb2R1bGUqIGNvbXBpbGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1
ZmZlcikKK3sKKyAgICBNb2R1bGUqIG1vZHVsZSA9IE1vZHVsZTo6Y3JlYXRlKGV4ZWMtPnZtKCks
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisgICAgbW9kdWxlLT5jb21waWxlKGV4ZWMs
IGJ1ZmZlcik7CisgICAgcmV0dXJuIG1vZHVsZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
ODkwODY1MDMzMjg1NzFlNzY0NzdmMDhiMjI0NjMyYjY4ZDBmNjA5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oCkBAIC0wLDAgKzEsMTI1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyBM
aWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vu
c2UiKTsKKyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdp
dGggdGhlIExpY2Vuc2UuCisgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0
CisKKyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworIFVubGVz
cyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29m
dHdhcmUKKyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBh
biAiQVMgSVMiIEJBU0lTLAorIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFO
WSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIFNlZSB0aGUgTGljZW5zZSBmb3Ig
dGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyBsaW1pdGF0
aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisKKyNpZm5kZWYgV2FzbU1vZHVsZV9oCisjZGVm
aW5lIFdhc21Nb2R1bGVfaAorCisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRl
ICJXYXNtT3Bjb2Rlcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSklUQ29tcGlsZXI7
CisKK25hbWVzcGFjZSBXYXNtIHsKKworY2xhc3MgTW9kdWxlIDogcHVibGljIEpTR2xvYmFsT2Jq
ZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTR2xvYmFsT2JqZWN0IEJhc2U7CisKKyAgICBz
dGF0aWMgTW9kdWxlKiBjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQorICAgIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjcmVhdGVTdHJ1Y3R1cmUo
dm0sIGdsb2JhbE9iamVjdCk7IC8vIEZJWE1FOiBpcyB0aGlzIHJpZ2h0PworICAgICAgICBNb2R1
bGUqIG1vZHVsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE1vZHVsZT4odm0uaGVhcCkp
IE1vZHVsZSh2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgbW9kdWxlLT5maW5pc2hDcmVhdGlvbih2
bSk7CisgICAgICAgIHJldHVybiBtb2R1bGU7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOwor
CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBqc051bGwoKSwgVHlwZUluZm8oR2xvYmFsT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZShF
eGVjU3RhdGUqLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcik7CisgICAgSlNGdW5jdGlvbiog
aW50ZXJuYWxGdW5jdGlvbihzaXplX3QgZnVuY3Rpb25JbmRleCk7CisgICAgY29uc3QgU3RyaW5n
JiBmdW5jdGlvbkltcG9ydE5hbWUoc2l6ZV90IGZ1bmN0aW9uSW1wb3J0SW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fZnVuY3Rpb25JbXBvcnROYW1lc1tmdW5jdGlvbkltcG9ydEluZGV4XTsgfQorCisg
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCitw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBKSVRDb21waWxlcjsKKworICAgIHN0cnVjdCBGdW5j
SW1wb3J0U2lnbmF0dXJlIHsKKyAgICAgICAgdWludDMyX3Qgc2lnbmF0dXJlSW5kZXg7CisgICAg
ICAgIHVpbnQzMl90IGZ1bmNJbXBvcnRJbmRleDsKKyAgICB9OworICAgIAorICAgIHN0cnVjdCBG
dW5jUHRyVGFibGUgeworICAgICAgICB1aW50MzJfdCBzaWduYXR1cmVJbmRleDsKKyAgICAgICAg
VmVjdG9yPHVpbnQzMl90PiBlbGVtZW50czsKKyAgICB9OworCisgICAgTW9kdWxlKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAg
IHsKKyAgICB9CisKKyAgICB2b2lkIHBhcnNlQ29uc3RhbnRQb29sU2VjdGlvbigpOworICAgIHZv
aWQgcGFyc2VTaWduYXR1cmVTZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9uSW1wb3J0
U2VjdGlvbigpOworICAgIHZvaWQgcGFyc2VHbG9iYWxTZWN0aW9uKCk7CisgICAgdm9pZCBwYXJz
ZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9uUG9p
bnRlclRhYmxlcygpOworICAgIHZvaWQgcGFyc2VGdW5jdGlvbkRlZmluaXRpb25TZWN0aW9uKEV4
ZWNTdGF0ZSopOworICAgIHZvaWQgcGFyc2VFeHBvcnRTZWN0aW9uKFZNJik7CisKKyAgICB2b2lk
IHBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKEV4ZWNTdGF0ZSosIHNpemVfdCBmdW5jdGlvbkluZGV4
KTsKKworICAgIFJlYWRlciBtX3JlYWRlcjsKKworICAgIFZlY3RvcjxTaWduYXR1cmU+IG1fc2ln
bmF0dXJlczsKKyAgICBWZWN0b3I8dWludDMyX3Q+IG1fY29uc3RhbnRJMzJzOworICAgIFZlY3Rv
cjxmbG9hdD4gbV9jb25zdGFudEYzMnM7CisgICAgVmVjdG9yPGRvdWJsZT4gbV9jb25zdGFudEY2
NHM7CisgICAgVmVjdG9yPFN0cmluZz4gbV9mdW5jdGlvbkltcG9ydE5hbWVzOworICAgIFZlY3Rv
cjxGdW5jSW1wb3J0U2lnbmF0dXJlPiBtX2Z1bmNJbXBvcnRTaWduYXR1cmVzOworICAgIFZlY3Rv
cjxUeXBlPiBtX2dsb2JhbFR5cGVzOworICAgIFZlY3Rvcjx1aW50MzJfdD4gbV9mdW5jU2lnbmF0
dXJlczsKKyAgICBWZWN0b3I8RnVuY1B0clRhYmxlPiBtX2Z1bmNQdHJUYWJsZXM7CisKKyAgICBW
ZWN0b3I8V3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+PiBtX2Z1bmN0aW9uczsKK307CisKK0pTX0VY
UE9SVF9QUklWQVRFIE1vZHVsZSogY29tcGlsZShFeGVjU3RhdGUqLCBjb25zdCBWZWN0b3I8Y2hh
cj4mIGJ1ZmZlcik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBX
YXNtTW9kdWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21P
cGNvZGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3Bjb2Rlcy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmQwNzc5YjgzNDc1ZjhhMTQ1M2NmNzRhNjliMTJmYzI2MzlkZTJkNWMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3Bjb2Rlcy5oCkBAIC0w
LDAgKzEsNTkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLyoKKyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0
aGUgIkxpY2Vuc2UiKTsKKyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w
bGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM
aWNlbnNlIGF0CisKKyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAK
KworIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3Jp
dGluZywgc29mdHdhcmUKKyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmli
dXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJ
T05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIFNlZSB0aGUgTGlj
ZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQK
KyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisKKyNpZm5kZWYgV2FzbU9wY29k
ZXNfaAorI2RlZmluZSBXYXNtT3Bjb2Rlc19oCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgV2FzbSB7CisKK3N0YXRpYyBjb25zdCB1aW50
MzJfdCBNYWdpY051bWJlciA9IDB4NmQ3MzYxNzc7CisKK2VudW0gY2xhc3MgU3RtdCA6IHVpbnQ4
X3QgeworICAgIFNldExvYywKKyAgICBTZXRHbG8sCisgICAgSTMyU3RvcmU4LAorICAgIEkzMlN0
b3JlT2ZmOCwKKyAgICBJMzJTdG9yZTE2LAorICAgIEkzMlN0b3JlT2ZmMTYsCisgICAgSTMyU3Rv
cmUzMiwKKyAgICBJMzJTdG9yZU9mZjMyLAorICAgIEYzMlN0b3JlLAorICAgIEYzMlN0b3JlT2Zm
LAorICAgIEY2NFN0b3JlLAorICAgIEY2NFN0b3JlT2ZmLAorICAgIENhbGxJbnQsCisgICAgQ2Fs
bEluZCwKKyAgICBDYWxsSW1wLAorICAgIFJldCwKKyAgICBCbG9jaywKKyAgICBJZlRoZW4sCisg
ICAgSWZFbHNlLAorICAgIFdoaWxlLAorICAgIERvLAorICAgIExhYmVsLAorICAgIEJyZWFrLAor
ICAgIEJyZWFrTGFiZWwsCisgICAgQ29udGludWUsCisgICAgQ29udGludWVMYWJlbCwKKyAgICBT
d2l0Y2gsCisKKyAgICBCYWQKK307CisKK2VudW0gY2xhc3MgU3RtdFdpdGhJbW0gOiB1aW50OF90
IHsKKyAgICBTZXRMb2MsCisgICAgU2V0R2xvLAorICAgIFJlc2V2ZWQxLAorICAgIFJlc2V2ZWQy
LAorCisgICAgQmFkCit9OworCitlbnVtIGNsYXNzIFN3aXRjaENhc2UgOiB1aW50OF90IHsKKyAg
ICBDYXNlMCwKKyAgICBDYXNlMSwKKyAgICBDYXNlTiwKKyAgICBEZWZhdWx0MCwKKyAgICBEZWZh
dWx0MSwKKyAgICBEZWZhdWx0TgorfTsKKworZW51bSBjbGFzcyBJMzIgOiB1aW50OF90IHsKKyAg
ICBMaXRQb29sLAorICAgIExpdEltbSwKKyAgICBHZXRMb2MsCisgICAgR2V0R2xvLAorICAgIFNl
dExvYywKKyAgICBTZXRHbG8sCisgICAgU0xvYWQ4LAorICAgIFNMb2FkT2ZmOCwKKyAgICBVTG9h
ZDgsCisgICAgVUxvYWRPZmY4LAorICAgIFNMb2FkMTYsCisgICAgU0xvYWRPZmYxNiwKKyAgICBV
TG9hZDE2LAorICAgIFVMb2FkT2ZmMTYsCisgICAgTG9hZDMyLAorICAgIExvYWRPZmYzMiwKKyAg
ICBTdG9yZTgsCisgICAgU3RvcmVPZmY4LAorICAgIFN0b3JlMTYsCisgICAgU3RvcmVPZmYxNiwK
KyAgICBTdG9yZTMyLAorICAgIFN0b3JlT2ZmMzIsCisgICAgQ2FsbEludCwKKyAgICBDYWxsSW5k
LAorICAgIENhbGxJbXAsCisgICAgQ29uZCwKKyAgICBDb21tYSwKKyAgICBGcm9tRjMyLAorICAg
IEZyb21GNjQsCisgICAgTmVnLAorICAgIEFkZCwKKyAgICBTdWIsCisgICAgTXVsLAorICAgIFNE
aXYsCisgICAgVURpdiwKKyAgICBTTW9kLAorICAgIFVNb2QsCisgICAgQml0Tm90LAorICAgIEJp
dE9yLAorICAgIEJpdEFuZCwKKyAgICBCaXRYb3IsCisgICAgTHNoLAorICAgIEFyaXRoUnNoLAor
ICAgIExvZ2ljUnNoLAorICAgIENseiwKKyAgICBMb2dpY05vdCwKKyAgICBFcUkzMiwKKyAgICBF
cUYzMiwKKyAgICBFcUY2NCwKKyAgICBORXFJMzIsCisgICAgTkVxRjMyLAorICAgIE5FcUY2NCwK
KyAgICBTTGVUaEkzMiwKKyAgICBVTGVUaEkzMiwKKyAgICBMZVRoRjMyLAorICAgIExlVGhGNjQs
CisgICAgU0xlRXFJMzIsCisgICAgVUxlRXFJMzIsCisgICAgTGVFcUYzMiwKKyAgICBMZUVxRjY0
LAorICAgIFNHclRoSTMyLAorICAgIFVHclRoSTMyLAorICAgIEdyVGhGMzIsCisgICAgR3JUaEY2
NCwKKyAgICBTR3JFcUkzMiwKKyAgICBVR3JFcUkzMiwKKyAgICBHckVxRjMyLAorICAgIEdyRXFG
NjQsCisgICAgU01pbiwKKyAgICBVTWluLAorICAgIFNNYXgsCisgICAgVU1heCwKKyAgICBBYnMs
CisKKyAgICBCYWQKK307CisKK2VudW0gY2xhc3MgSTMyV2l0aEltbSA6IHVpbnQ4X3QgeworICAg
IExpdFBvb2wsCisgICAgTGl0SW1tLAorICAgIEdldExvYywKKyAgICBSZXNlcnZlZCwKKworICAg
IEJhZAorfTsKKworZW51bSBjbGFzcyBGMzIgOiB1aW50OF90IHsKKyAgICBMaXRQb29sLAorICAg
IExpdEltbSwKKyAgICBHZXRMb2MsCisgICAgR2V0R2xvLAorICAgIFNldExvYywKKyAgICBTZXRH
bG8sCisgICAgTG9hZCwKKyAgICBMb2FkT2ZmLAorICAgIFN0b3JlLAorICAgIFN0b3JlT2ZmLAor
ICAgIENhbGxJbnQsCisgICAgQ2FsbEluZCwKKyAgICBDb25kLAorICAgIENvbW1hLAorICAgIEZy
b21TMzIsCisgICAgRnJvbVUzMiwKKyAgICBGcm9tRjY0LAorICAgIE5lZywKKyAgICBBZGQsCisg
ICAgU3ViLAorICAgIE11bCwKKyAgICBEaXYsCisgICAgQWJzLAorICAgIENlaWwsCisgICAgRmxv
b3IsCisgICAgU3FydCwKKworICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBGMzJXaXRoSW1tIDog
dWludDhfdCB7CisgICAgTGl0UG9vbCwKKyAgICBHZXRMb2MsCisgICAgUmVzZXJ2ZWQwLAorICAg
IFJlc2VydmVkMSwKKworICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBGNjQgOiB1aW50OF90IHsK
KyAgICBMaXRQb29sLAorICAgIExpdEltbSwKKyAgICBHZXRMb2MsCisgICAgR2V0R2xvLAorICAg
IFNldExvYywKKyAgICBTZXRHbG8sCisgICAgTG9hZCwKKyAgICBMb2FkT2ZmLAorICAgIFN0b3Jl
LAorICAgIFN0b3JlT2ZmLAorICAgIENhbGxJbnQsCisgICAgQ2FsbEluZCwKKyAgICBDYWxsSW1w
LAorICAgIENvbmQsCisgICAgQ29tbWEsCisgICAgRnJvbVMzMiwKKyAgICBGcm9tVTMyLAorICAg
IEZyb21GMzIsCisgICAgTmVnLAorICAgIEFkZCwKKyAgICBTdWIsCisgICAgTXVsLAorICAgIERp
diwKKyAgICBNb2QsCisgICAgTWluLAorICAgIE1heCwKKyAgICBBYnMsCisgICAgQ2VpbCwKKyAg
ICBGbG9vciwKKyAgICBTcXJ0LAorICAgIENvcywKKyAgICBTaW4sCisgICAgVGFuLAorICAgIEFD
b3MsCisgICAgQVNpbiwKKyAgICBBVGFuLAorICAgIEFUYW4yLAorICAgIEV4cCwKKyAgICBMbiwK
KyAgICBQb3csCisKKyAgICBCYWQKK307CisKK2VudW0gY2xhc3MgRjY0V2l0aEltbSA6IHVpbnQ4
X3QgeworICAgIExpdFBvb2wsCisgICAgR2V0TG9jLAorICAgIFJlc2VydmVkMCwKKyAgICBSZXNl
cnZlZDEsCisKKyAgICBCYWQKK307CisKK2VudW0gY2xhc3MgVm9pZCA6IHVpbnQ4X3QgeworICAg
IENhbGxJbnQsCisgICAgQ2FsbEluZCwKKyAgICBDYWxsSW1wLAorCisgICAgQmFkCit9OworCitl
bnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsKKyAgICBJMzIsCisgICAgRjMyLAorICAgIEY2NAor
fTsKKworZW51bSBjbGFzcyBWYXJUeXBlcyA6IHVpbnQ4X3QgeworICAgIEkzMiA9IDB4MSwKKyAg
ICBGMzIgPSAweDIsCisgICAgRjY0ID0gMHg0LAorfTsKKworaW5saW5lIFZhclR5cGVzIG9wZXJh
dG9yfCAoVmFyVHlwZXMgbGhzLCBWYXJUeXBlcyByaHMpIHsgcmV0dXJuIFZhclR5cGVzKHVpbnQ4
X3QobGhzKSB8IHVpbnQ4X3QocmhzKSk7IH0KK2lubGluZSBib29sIG9wZXJhdG9yJihWYXJUeXBl
cyBsaHMsIFZhclR5cGVzIHJocykgeyByZXR1cm4gYm9vbCh1aW50OF90KGxocykgJiB1aW50OF90
KHJocykpOyB9CisKK2VudW0gY2xhc3MgVmFyVHlwZXNXaXRoSW1tIDogdWludDhfdCB7CisgICAg
T25seUkzMiwKKyAgICBSZXNlcnZlZDAsCisgICAgUmVzZXJ2ZWQxLAorICAgIFJlc2VydmVkMgor
fTsKKworZW51bSBjbGFzcyBSZXR1cm5UeXBlIDogdWludDhfdCB7CisgICAgSTMyID0gdWludDhf
dChUeXBlOjpJMzIpLAorICAgIEYzMiA9IHVpbnQ4X3QoVHlwZTo6RjMyKSwKKyAgICBGNjQgPSB1
aW50OF90KFR5cGU6OkY2NCksCisgICAgVm9pZAorfTsKKworY2xhc3MgRXhwciB7CitwdWJsaWM6
CisgICAgRXhwcigpCisgICAgOiBtX3R5cGUoUmV0dXJuVHlwZSgtMSkpLCB1IHsgfQorICAgIHsK
KyAgICB9CisgICAgRXhwcihJMzIgaTMyKSA6IG1fdHlwZShSZXR1cm5UeXBlOjpJMzIpIHsgdS5p
MzIgPSBpMzI7IH0KKyAgICBFeHByKEYzMiBmMzIpIDogbV90eXBlKFJldHVyblR5cGU6OkYzMikg
eyB1LmYzMiA9IGYzMjsgfQorICAgIEV4cHIoRjY0IGY2NCkgOiBtX3R5cGUoUmV0dXJuVHlwZTo6
RjY0KSB7IHUuZjY0ID0gZjY0OyB9CisgICAgRXhwcihWb2lkIHYpIDogbV90eXBlKFJldHVyblR5
cGU6OlZvaWQpIHsgdS52ID0gdjsgfQorCisgICAgUmV0dXJuVHlwZSB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9CisgICAgSTMyIGkzMigpIGNvbnN0IHsgcmV0dXJuIHUuaTMyOyB9Cisg
ICAgRjMyIGYzMigpIGNvbnN0IHsgcmV0dXJuIHUuZjMyOyB9CisgICAgRjY0IGY2NCgpIGNvbnN0
IHsgcmV0dXJuIHUuZjY0OyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oRXhwciByaHMpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZSA9PSByaHMubV90eXBlICYmIHUucmF3ID09IHJocy51LnJhdzsgfQor
ICAgIGJvb2wgb3BlcmF0b3IhPShFeHByIHJocykgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBy
aHMpOyB9CisKK3ByaXZhdGU6CisgICAgUmV0dXJuVHlwZSBtX3R5cGU7CisgICAgdW5pb24gVSB7
CisgICAgICAgIEkzMiBpMzI7CisgICAgICAgIEYzMiBmMzI7CisgICAgICAgIEY2NCBmNjQ7Cisg
ICAgICAgIFZvaWQgdjsKKyAgICAgICAgdWludDhfdCByYXc7CisgICAgfSB1OworCisgICAgc3Rh
dGljX2Fzc2VydChzaXplb2YoVSkgPT0gc2l6ZW9mKHVpbnQ4X3QpLCAiRXhhY3Qgb3ZlcmxheSBv
ZiByYXdfIik7Cit9OworCitzdGF0aWMgY29uc3QgdWludDhfdCBIYXNJbW1GbGFnID0gMHg4MDsK
K3N0YXRpY19hc3NlcnQodWludDhfdChJMzI6OkJhZCkgPD0gSGFzSW1tRmxhZywgIk1TQiByZXNl
cnZlZCB0byBkaXN0aW5ndWlzaCBJMzIgZnJvbSBJMzJXaXRoSW1tIik7CitzdGF0aWNfYXNzZXJ0
KHVpbnQ4X3QoRjMyOjpCYWQpIDw9IEhhc0ltbUZsYWcsICJNU0IgcmVzZXJ2ZWQgdG8gZGlzdGlu
Z3Vpc2ggRjMyIGZyb20gRjMyV2l0aEltbSIpOworc3RhdGljX2Fzc2VydCh1aW50OF90KEY2NDo6
QmFkKSA8PSBIYXNJbW1GbGFnLCAiTVNCIHJlc2VydmVkIHRvIGRpc3Rpbmd1aXNoIEY2NCBmcm9t
IEY2NFdpdGhJbW0iKTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIE9wV2l0aEltbUJpdHMgPSAy
Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IE9wV2l0aEltbUxpbWl0ID0gMSA8PCBPcFdpdGhJbW1C
aXRzOworc3RhdGljX2Fzc2VydCh1aW50OF90KEkzMldpdGhJbW06OkJhZCkgPD0gT3BXaXRoSW1t
TGltaXQsICJJMzJXaXRoSW1tIG9wIGZpdHMiKTsKK3N0YXRpY19hc3NlcnQodWludDhfdChGMzJX
aXRoSW1tOjpCYWQpIDw9IE9wV2l0aEltbUxpbWl0LCAiRjMyV2l0aEltbSBvcCBmaXRzIik7Citz
dGF0aWNfYXNzZXJ0KHVpbnQ4X3QoRjY0V2l0aEltbTo6QmFkKSA8PSBPcFdpdGhJbW1MaW1pdCwg
IkY2NFdpdGhJbW0gb3AgZml0cyIpOworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgSW1tQml0cyA9
IDU7CitzdGF0aWMgY29uc3QgdWludDMyX3QgSW1tTGltaXQgPSAxIDw8IEltbUJpdHM7CitzdGF0
aWNfYXNzZXJ0KCgxICsgT3BXaXRoSW1tQml0cyArIEltbUJpdHMpID09IDgsICJCaXRzIG9mIGlt
bWVkaWF0ZSBvcCBzaG91bGQgYWRkIHVwIHRvIGEgYnl0ZSIpOworCitzdGF0aWMgaW5saW5lIHVp
bnQ4X3QgUGFja09wV2l0aEltbSh1aW50OF90IG9wLCB1aW50OF90IGltbSkKK3sKKyAgICBhc3Nl
cnQob3AgPCBPcFdpdGhJbW1MaW1pdCk7CisgICAgYXNzZXJ0KGltbSA8IEltbUxpbWl0KTsKKyAg
ICByZXR1cm4gSGFzSW1tRmxhZyB8ICh1aW50OF90KG9wKSA8PCBJbW1CaXRzKSB8IGltbTsKK30K
KwordGVtcGxhdGUgPGNsYXNzIFRXaXRoSW1tPgorc3RhdGljIGlubGluZSB2b2lkIFVucGFja09w
V2l0aEltbSh1aW50OF90IGJ5dGUsIFRXaXRoSW1tKiBvcCwgdWludDhfdCAqaW1tKQoreworICAg
IGFzc2VydChieXRlICYgSGFzSW1tRmxhZyk7CisgICAgKm9wID0gVFdpdGhJbW0oKGJ5dGUgPj4g
SW1tQml0cykgJiAoT3BXaXRoSW1tTGltaXQgLSAxKSk7CisgICAgKmltbSA9IGJ5dGUgJiAoSW1t
TGltaXQgLSAxKTsKK30KKworY2xhc3MgRXhwcldpdGhJbW0geworcHVibGljOgorICAgIEV4cHJX
aXRoSW1tKCkKKyAgICAgICAgOiBtX3R5cGUoVHlwZSgtMSkpCisgICAgeworICAgIH0KKyAgICBF
eHByV2l0aEltbShJMzJXaXRoSW1tIGkzMikgOiBtX3R5cGUoVHlwZTo6STMyKSB7IHUuaTMyID0g
aTMyOyB9CisgICAgRXhwcldpdGhJbW0oRjMyV2l0aEltbSBmMzIpIDogbV90eXBlKFR5cGU6OkYz
MikgeyB1LmYzMiA9IGYzMjsgfQorICAgIEV4cHJXaXRoSW1tKEY2NFdpdGhJbW0gZjY0KSA6IG1f
dHlwZShUeXBlOjpGNjQpIHsgdS5mNjQgPSBmNjQ7IH0KKworICAgIFR5cGUgdHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIEkzMldpdGhJbW0gaTMyKCkgY29uc3QgeyByZXR1cm4g
dS5pMzI7IH0KKyAgICBGMzJXaXRoSW1tIGYzMigpIGNvbnN0IHsgcmV0dXJuIHUuZjMyOyB9Cisg
ICAgRjY0V2l0aEltbSBmNjQoKSBjb25zdCB7IHJldHVybiB1LmY2NDsgfQorCitwcml2YXRlOgor
ICAgIFR5cGUgbV90eXBlOworICAgIHVuaW9uIFUgeworICAgICAgICBJMzJXaXRoSW1tIGkzMjsK
KyAgICAgICAgRjMyV2l0aEltbSBmMzI7CisgICAgICAgIEY2NFdpdGhJbW0gZjY0OworICAgICAg
ICB1aW50OF90IHJhdzsKKyAgICB9IHU7CisKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihVKSA9
PSBzaXplb2YodWludDhfdCksICJFeGFjdCBvdmVybGF5IG9mIHJhd18iKTsKK307CisKK2VudW0g
Y2xhc3MgRXhwb3J0Rm9ybWF0IDogdWludDhfdCB7CisgICAgRGVmYXVsdCwKKyAgICBSZWNvcmQK
K307CisKK3N0cnVjdCBTaWduYXR1cmUgeworICAgIFJldHVyblR5cGUgcmV0dXJuVHlwZTsKKyAg
ICBWZWN0b3I8VHlwZT4gYXJndW1lbnRzOworCisgICAgU2lnbmF0dXJlKCkgeyB9CisgICAgU2ln
bmF0dXJlKFJldHVyblR5cGUgcmV0dXJuVHlwZSkKKyAgICAgICAgOiByZXR1cm5UeXBlKHJldHVy
blR5cGUpIHsgfQorICAgIFNpZ25hdHVyZShSZXR1cm5UeXBlIHJldHVyblR5cGUsIHVpbnQzMl90
IGFyZ3VtZW50Q291bnQpCisgICAgICAgIDogcmV0dXJuVHlwZShyZXR1cm5UeXBlKQorICAgICAg
ICAsIGFyZ3VtZW50cyhhcmd1bWVudENvdW50KSB7IH0KKyAgICBTaWduYXR1cmUoUmV0dXJuVHlw
ZSByZXR1cm5UeXBlLCBWZWN0b3I8VHlwZT4mJiBhcmd1bWVudHMpCisgICAgICAgIDogcmV0dXJu
VHlwZShyZXR1cm5UeXBlKQorICAgICAgICAsIGFyZ3VtZW50cyhXVEY6Om1vdmUoYXJndW1lbnRz
KSkgeyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU2lnbmF0dXJlJiByaHMpIGNvbnN0
IHsgcmV0dXJuIHJldHVyblR5cGUgPT0gcmhzLnJldHVyblR5cGUgJiYgYXJndW1lbnRzID09IHJo
cy5hcmd1bWVudHM7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU2lnbmF0dXJlJiByaHMp
IGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gcmhzKTsgfQorCisgICAgc3RydWN0IEhhc2ggewor
ICAgICAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgU2lnbmF0dXJlICZzaWduYXR1cmUpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFR5cGUpID09IDEg
JiYgc2l6ZW9mKFJldHVyblR5cGUpID09IDEsICJTaGlmdCBtb3JlIik7CisgICAgICAgICAgICB1
aW50MzJfdCBoID0gdWludDhfdChzaWduYXR1cmUucmV0dXJuVHlwZSk7CisgICAgICAgICAgICBm
b3IgKFR5cGUgdCA6IHNpZ25hdHVyZS5hcmd1bWVudHMpCisgICAgICAgICAgICAgICAgaCA9ICgo
aCA8PCAyKSB8IHVpbnQ4X3QodCkpIF4gKGggPj4gMzApOworICAgICAgICAgICAgcmV0dXJuIGg7
CisgICAgICAgIH0KKyAgICB9OworfTsKKworY2xhc3MgUmVhZGVyIHsKK3B1YmxpYzoKKyAgICBS
ZWFkZXIoKSB7IH0KKyAgICBSZWFkZXIoY29uc3QgdWludDhfdCogYmVnaW4pCisgICAgICAgIDog
bV9jdXJzb3IoYmVnaW4pCisgICAgeworICAgIH0KKworICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBU
IGZpeGVkV2lkdGgoKTsKKyAgICBTdG10IHN0bXQoKSB7IHJldHVybiB1ODxTdG10PigpOyB9Cisg
ICAgU3dpdGNoQ2FzZSBzd2l0Y2hDYXNlKCkgeyByZXR1cm4gdTg8U3dpdGNoQ2FzZT4oKTsgfQor
ICAgIHRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFRXaXRoSW1tPiBpbmxpbmUgYm9vbCBjb2RlKFQq
LCBUV2l0aEltbSosIHVpbnQ4X3QqKTsKKyAgICBWb2lkIHZvaWRFeHByKCkgeyByZXR1cm4gdTg8
Vm9pZD4oKTsgfQorICAgIEV4cG9ydEZvcm1hdCBleHBvcnRGb3JtYXQoKSB7IHJldHVybiB1ODxF
eHBvcnRGb3JtYXQ+KCk7IH0KKyAgICBUeXBlIHR5cGUoKSB7IHJldHVybiB1ODxUeXBlPigpOyB9
CisgICAgUmV0dXJuVHlwZSBydHlwZSgpIHsgcmV0dXJuIHU4PFJldHVyblR5cGU+KCk7IH0KKyAg
ICBpbmxpbmUgdWludDMyX3QgaW1tVTMyKCk7CisgICAgaW5saW5lIGludDMyX3QgaW1tUzMyKCk7
CisgICAgY2hhciBzaW5nbGVDaGFyKCkgeyByZXR1cm4gKm1fY3Vyc29yKys7IH0KKworICAgIGlu
bGluZSBib29sIGlmSTMyTGl0KGNvbnN0IFZlY3Rvcjx1aW50MzJfdD4mIGkzMnMsIHVpbnQzMl90
Kik7CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IFQgdTgoKSB7IHJldHVybiBU
KCptX2N1cnNvcisrKTsgfQorCisgICAgY29uc3QgdWludDhfdCogbV9jdXJzb3I7Cit9OworCit0
ZW1wbGF0ZSA8PgoraW5saW5lIHVpbnQzMl90IFJlYWRlcjo6Zml4ZWRXaWR0aDx1aW50MzJfdD4o
KQoreworICAgIHVpbnQzMl90IHUzMiA9IG1fY3Vyc29yWzBdIHwgbV9jdXJzb3JbMV0gPDwgOCB8
IG1fY3Vyc29yWzJdIDw8IDE2IHwgbV9jdXJzb3JbM10gPDwgMjQ7CisgICAgbV9jdXJzb3IgKz0g
NDsKKyAgICByZXR1cm4gdTMyOworfQorCit0ZW1wbGF0ZSA8PgoraW5saW5lIGZsb2F0IFJlYWRl
cjo6Zml4ZWRXaWR0aDxmbG9hdD4oKQoreworICAgIHVuaW9uIHsKKyAgICAgICAgdWludDhfdCBh
cnJbNF07CisgICAgICAgIGZsb2F0IGY7CisgICAgfSB1ID0geyB7IG1fY3Vyc29yWzBdLCBtX2N1
cnNvclsxXSwgbV9jdXJzb3JbMl0sIG1fY3Vyc29yWzNdIH0gfTsKKyAgICBtX2N1cnNvciArPSA0
OworICAgIHJldHVybiB1LmY7Cit9CisKK3RlbXBsYXRlIDw+CitpbmxpbmUgZG91YmxlIFJlYWRl
cjo6Zml4ZWRXaWR0aDxkb3VibGU+KCkKK3sKKyAgICB1bmlvbiB7CisgICAgICAgIHVpbnQ4X3Qg
YXJyWzhdOworICAgICAgICBkb3VibGUgZDsKKyAgICB9IHUgPSB7IHsgbV9jdXJzb3JbMF0sIG1f
Y3Vyc29yWzFdLCBtX2N1cnNvclsyXSwgbV9jdXJzb3JbM10sIG1fY3Vyc29yWzRdLCBtX2N1cnNv
cls1XSwgbV9jdXJzb3JbNl0sIG1fY3Vyc29yWzddIH0gfTsKKyAgICBtX2N1cnNvciArPSA4Owor
ICAgIHJldHVybiB1LmQ7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUV2l0aEltbT4K
K2Jvb2wgUmVhZGVyOjpjb2RlKFQqIHQsIFRXaXRoSW1tKiB0V2l0aEltbSwgdWludDhfdCogaW1t
KQoreworICAgIHVpbnQ4X3QgYnl0ZSA9ICptX2N1cnNvcisrOworICAgIGlmICghKGJ5dGUgJiBI
YXNJbW1GbGFnKSkgeworICAgICAgICAqdCA9IFQoYnl0ZSk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIFVucGFja09wV2l0aEltbShieXRlLCB0V2l0aEltbSwgaW1tKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSB1aW50MzJfdCBSZWFkZXI6OmltbVUzMigpCit7
CisgICAgdWludDMyX3QgdTMyID0gKm1fY3Vyc29yKys7CisgICAgaWYgKHUzMiA8IDB4ODApCisg
ICAgICAgIHJldHVybiB1MzI7CisKKyAgICB1MzIgJj0gMHg3ZjsKKworICAgIGZvciAodW5zaWdu
ZWQgc2hpZnQgPSA3OyB0cnVlOyBzaGlmdCArPSA3KSB7CisgICAgICAgIHVpbnQzMl90IGIgPSAq
bV9jdXJzb3IrKzsKKyAgICAgICAgaWYgKGIgPCAweDgwKQorICAgICAgICAgICAgcmV0dXJuIHUz
MiB8IChiIDw8IHNoaWZ0KTsKKyAgICAgICAgdTMyIHw9IChiICYgMHg3ZikgPDwgc2hpZnQ7Cisg
ICAgfQorfQorCitpbmxpbmUgaW50MzJfdCBSZWFkZXI6OmltbVMzMigpCit7CisgICAgdWludDMy
X3QgdTMyID0gKm1fY3Vyc29yKys7CisgICAgaWYgKHUzMiA8IDB4ODApCisgICAgICAgIHJldHVy
biBpbnQzMl90KHUzMikgPDwgKDMyLTcpID4+ICgzMi03KTsKKworICAgIHUzMiAmPSAweDdmOwor
CisgICAgZm9yICh1bnNpZ25lZCBzaGlmdCA9IDc7IHRydWU7IHNoaWZ0ICs9IDcpIHsKKyAgICAg
ICAgdWludDMyX3QgYiA9ICptX2N1cnNvcisrOworICAgICAgICBpZiAoYiA8IDB4ODApIHsKKyAg
ICAgICAgICAgIHUzMiB8PSBiIDw8IHNoaWZ0OworICAgICAgICAgICAgaW50IHNpZ25FeHRlbmQg
PSAoMzItNykgLSBzaGlmdDsKKyAgICAgICAgICAgIGlmIChzaWduRXh0ZW5kID4gMCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gaW50MzJfdCh1MzIpIDw8IHNpZ25FeHRlbmQgPj4gc2lnbkV4dGVu
ZDsKKyAgICAgICAgICAgIHJldHVybiBpbnQzMl90KHUzMik7CisgICAgICAgIH0KKyAgICAgICAg
dTMyIHw9IChiICYgMHg3ZikgPDwgc2hpZnQ7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBSZWFk
ZXI6OmlmSTMyTGl0KGNvbnN0IFZlY3Rvcjx1aW50MzJfdD4mIGkzMnMsIHVpbnQzMl90KiB1MzIp
Cit7CisgICAgdWludDhfdCBieXRlID0gKm1fY3Vyc29yOworCisgICAgaWYgKGJ5dGUgJiBIYXNJ
bW1GbGFnKSB7CisgICAgICAgIEkzMldpdGhJbW0gaTMyV2l0aEltbTsKKyAgICAgICAgdWludDhf
dCBpbW07CisgICAgICAgIFVucGFja09wV2l0aEltbShieXRlLCAmaTMyV2l0aEltbSwgJmltbSk7
CisKKyAgICAgICAgaWYgKGkzMldpdGhJbW0gPT0gSTMyV2l0aEltbTo6TGl0SW1tKSB7CisgICAg
ICAgICAgICBtX2N1cnNvcisrOworICAgICAgICAgICAgKnUzMiA9IGltbTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGkzMldpdGhJbW0gPT0gSTMy
V2l0aEltbTo6TGl0UG9vbCkgeworICAgICAgICAgICAgbV9jdXJzb3IrKzsKKyAgICAgICAgICAg
ICp1MzIgPSBpMzJzW2ltbV07CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoSTMyKGJ5dGUpID09IEkz
Mjo6TGl0SW1tKSB7CisgICAgICAgIG1fY3Vyc29yKys7CisgICAgICAgICp1MzIgPSBpbW1VMzIo
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKEkzMihieXRlKSA9PSBJ
MzI6OkxpdFBvb2wpIHsKKyAgICAgICAgbV9jdXJzb3IrKzsKKyAgICAgICAgKnUzMiA9IGkzMnNb
aW1tVTMyKCldOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBXYXNtT3Bj
b2Rlc19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256693</attachid>
            <date>2015-07-13 03:24:27 -0700</date>
            <delta_ts>2015-07-14 04:16:03 -0700</delta_ts>
            <desc>Work in progress. Implement linear memory.</desc>
            <filename>bug-146064-20150713032322.patch</filename>
            <type>text/plain</type>
            <size>118939</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg2NTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
OWZhNzg4ZjIxZjdmOTg5ZDI1NDdkMTQwYTMyNDRlY2RmNjcwZGI0Li5jYmMzMDJlNzlmOTEwMmJj
NTkwMjY4YjJjYzQ3MzZlOGVkMWMxNDc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNjIgQEAKKzIwMTUtMDctMTEgIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0Bn
bWFpbC5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBuYXRpdmVseSBzdXBwb3J0IFdlYkFzc2Vt
Ymx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYw
NjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUNvZGVCbG9jazo6cmVwbGFjZW1lbnQpOgorICAgICAg
ICAoSlNDOjpXZWJBc3NlbWJseUNvZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsSW50ZXJuYWwpOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJs
eUNvZGVCbG9jazo6V2ViQXNzZW1ibHlDb2RlQmxvY2spOgorICAgICAgICAqIGppdC9KSVRPcGVy
YXRpb25zLmNwcDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0Ojpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChmdW5jdGlvbkxvYWRXZWJBc3NlbWJseSk6CisgICAg
ICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0
VXBDYWxsKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlND
OjpTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZSk6CisgICAgICAgIChKU0M6OlNjcmlwdEV4
ZWN1dGFibGU6Om5ld0NvZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFi
bGU6OnByZXBhcmVGb3JFeGVjdXRpb25JbXBsKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlF
eGVjdXRhYmxlOjpXZWJBc3NlbWJseUV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpXZWJBc3Nl
bWJseUV4ZWN1dGFibGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1i
bHlFeGVjdXRhYmxlOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlFeGVjdXRh
YmxlOjpiYXNlbGluZUNvZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhl
Y3V0YWJsZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhlY3V0
YWJsZTo6c3ltYm9sVGFibGUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4ZWN1dGFibGU6
OmNsZWFyQ29kZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6dW5saW5r
Q2FsbHMpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpF
eGVjdXRhYmxlQmFzZTo6aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpF
eGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlVmlydHVhbCk6CisgICAgICAgICogcnVudGltZS9KU0Z1
bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAg
KiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRl
SW1wbCk6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5oOgorICAgICAgICAo
SlNDOjpKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6
aXNIb3N0RnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlLmg6CisgICAgICAgICog
cnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgICogcnVudGlt
ZS9WTS5oOgorICAgICAgICAqIHdhc20vV2FzbUpJVENvbXBpbGVyLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6Oldhc206Okp1bXBTY29wZTo6SnVtcFNjb3BlKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6SnVtcFNjb3BlOjpqdW1wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SnVtcFNjb3BlOjpsaW5r
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbik6Cisg
ICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjphbGxvY2F0ZVNwYWNlT25TdGFjayk6Cisg
ICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpkZWFsbG9jYXRlU3BhY2VPblN0YWNrKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlQXJndW1lbnRzKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlVmFycyk6CisgICAgICAgIChKU0M6Oldh
c206OkpJVENvbXBpbGVyOjpwYXJzZVN0bXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21w
aWxlcjo6cGFyc2VHZXRMb2NhbCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpw
YXJzZVNldExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlUmV0
dXJuU3RtdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZVN0bXRMaXN0
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlQmxvY2tTdG10KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlSWZTdG10KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlSWZFbHNlU3RtdCk6CisgICAgICAgIChKU0M6Oldh
c206OkpJVENvbXBpbGVyOjpwYXJzZVdoaWxlU3RtdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJ
VENvbXBpbGVyOjpwYXJzZURvU3RtdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVy
OjpwYXJzZUxhYmVsU3RtdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJz
ZUJyZWFrU3RtdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZUJyZWFr
TGFiZWxTdG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlQ29udGlu
dWVTdG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlQ29udGludWVM
YWJlbFN0bXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VTd2l0Y2hT
dG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlRXhwcik6CisgICAg
ICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZUV4cHJJMzIpOgorICAgICAgICAoSlND
OjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VFeHByRjY0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
Z2V0SW50ZXJuYWxGdW5jdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpw
YXJzZUNhbGxJbnRlcm5hbCk6CisgICAgICAgIChKU0M6Oldhc206OmdldEltcG9ydGVkRnVuY3Rp
b24pOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VDYWxsSW1wb3J0KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OmNhbGxGdW5jdGlvblNsb3dDYXNlKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlQ2FsbEFyZ3VtZW50cyk6Cisg
ICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZVVuYXJ5T3ApOgorICAgICAgICAo
SlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VCaW5hcnlPcCk6CisgICAgICAgIChKU0M6Oldh
c206OkpJVENvbXBpbGVyOjpwYXJzZVJlbGF0aW9uYWxPcEkzMik6CisgICAgICAgIChKU0M6Oldh
c206OkpJVENvbXBpbGVyOjpwYXJzZVJlbGF0aW9uYWxPcEY2NCk6CisgICAgICAgIChKU0M6Oldh
c206OkpJVENvbXBpbGVyOjpwYXJzZUNvbW1hKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29t
cGlsZXI6OnBhcnNlQ29uZCk6CisgICAgICAgICogd2FzbS9XYXNtSklUQ29tcGlsZXIuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpKSVRDb21waWxlcik6CisgICAg
ICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpzdGFja0FkZHJlc3MpOgorICAgICAgICAoSlND
OjpXYXNtOjpKSVRDb21waWxlcjo6dGVtcG9yYXJ5QWRkcmVzcyk6CisgICAgICAgIChKU0M6Oldh
c206OkpJVENvbXBpbGVyOjpwdXNoQ29udGludWVMYWJlbExhYmVsKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6SklUQ29tcGlsZXI6OnBvcENvbnRpbnVlTGFiZWxMYWJlbCk6CisgICAgICAgIChKU0M6
Oldhc206OkpJVENvbXBpbGVyOjpjb250aW51ZUxhYmVsTGFiZWwpOgorICAgICAgICAoSlNDOjpX
YXNtOjpKSVRDb21waWxlcjo6cHVzaEJyZWFrTGFiZWxKdW1wTGlzdCk6CisgICAgICAgIChKU0M6
Oldhc206OkpJVENvbXBpbGVyOjpwb3BCcmVha0xhYmVsSnVtcExpc3QpOgorICAgICAgICAoSlND
OjpXYXNtOjpKSVRDb21waWxlcjo6YnJlYWtMYWJlbEp1bXBMaXN0KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6SklUQ29tcGlsZXI6OnB1c2hDb250aW51ZUp1bXBTY29wZSk6CisgICAgICAgIChKU0M6
Oldhc206OkpJVENvbXBpbGVyOjpwb3BDb250aW51ZUp1bXBTY29wZSk6CisgICAgICAgIChKU0M6
Oldhc206OkpJVENvbXBpbGVyOjp0b3BDb250aW51ZUp1bXBTY29wZSk6CisgICAgICAgIChKU0M6
Oldhc206OkpJVENvbXBpbGVyOjpwdXNoQnJlYWtKdW1wTGlzdCk6CisgICAgICAgIChKU0M6Oldh
c206OkpJVENvbXBpbGVyOjpwb3BCcmVha0p1bXBMaXN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
SklUQ29tcGlsZXI6OnRvcEJyZWFrSnVtcExpc3QpOgorICAgICAgICAqIHdhc20vV2FzbU1vZHVs
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OmNvbXBpbGUpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OnBhcnNlQ29uc3RhbnRQb29sU2VjdGlvbik6CisgICAg
ICAgIChKU0M6Oldhc206Ok1vZHVsZTo6cGFyc2VTaWduYXR1cmVTZWN0aW9uKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TW9kdWxlOjpwYXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlvbik6CisgICAgICAg
IChKU0M6Oldhc206Ok1vZHVsZTo6cGFyc2VHbG9iYWxTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TW9kdWxlOjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6TW9kdWxlOjpwYXJzZUZ1bmN0aW9uUG9pbnRlclRhYmxlcyk6CisgICAgICAg
IChKU0M6Oldhc206Ok1vZHVsZTo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb25TZWN0aW9uKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpwYXJzZUV4cG9ydFNlY3Rpb24pOgorICAgICAgICAo
SlNDOjpXYXNtOjpNb2R1bGU6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlOjppbnRlcm5hbEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Y29tcGlsZSk6Cisg
ICAgICAgICogd2FzbS9XYXNtTW9kdWxlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpN
b2R1bGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6Y3JlYXRlU3RydWN0
dXJlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpmdW5jdGlvbkltcG9ydE5hbWUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6Ok1vZHVsZSk6CisgICAgICAgICogd2FzbS9XYXNt
T3Bjb2Rlcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6b3BlcmF0b3J8ICk6CisgICAg
ICAgIChKU0M6Oldhc206Om9wZXJhdG9yJik6CisgICAgICAgIChKU0M6Oldhc206OkV4cHI6OkV4
cHIpOgorICAgICAgICAoSlNDOjpXYXNtOjpFeHByOjp0eXBlKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6RXhwcjo6aTMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcjo6ZjMyKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6RXhwcjo6ZjY0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcjo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChKU0M6Oldhc206OkV4cHI6Om9wZXJhdG9yIT0pOgorICAgICAgICAo
SlNDOjpXYXNtOjpQYWNrT3BXaXRoSW1tKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VW5wYWNrT3BX
aXRoSW1tKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcldpdGhJbW06OkV4cHJXaXRoSW1tKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcldpdGhJbW06OnR5cGUpOgorICAgICAgICAoSlNDOjpX
YXNtOjpFeHByV2l0aEltbTo6aTMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcldpdGhJbW06
OmYzMik6CisgICAgICAgIChKU0M6Oldhc206OkV4cHJXaXRoSW1tOjpmNjQpOgorICAgICAgICAo
SlNDOjpXYXNtOjpTaWduYXR1cmU6OlNpZ25hdHVyZSk6CisgICAgICAgIChKU0M6Oldhc206OlNp
Z25hdHVyZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZTo6b3Bl
cmF0b3IhPSk6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZTo6SGFzaDo6b3BlcmF0b3Io
KSk6CisgICAgICAgIChKU0M6Oldhc206OlJlYWRlcjo6UmVhZGVyKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6UmVhZGVyOjpzdG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVhZGVyOjpzd2l0Y2hD
YXNlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVhZGVyOjp2b2lkRXhwcik6CisgICAgICAgIChK
U0M6Oldhc206OlJlYWRlcjo6ZXhwb3J0Rm9ybWF0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVh
ZGVyOjp0eXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVhZGVyOjpydHlwZSk6CisgICAgICAg
IChKU0M6Oldhc206OlJlYWRlcjo6c2luZ2xlQ2hhcik6CisgICAgICAgIChKU0M6Oldhc206OlJl
YWRlcjo6dTgpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OmZpeGVkV2lkdGg8dWludDMy
X3Q+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVhZGVyOjpmaXhlZFdpZHRoPGZsb2F0Pik6Cisg
ICAgICAgIChKU0M6Oldhc206OlJlYWRlcjo6Zml4ZWRXaWR0aDxkb3VibGU+KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6UmVhZGVyOjpjb2RlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVhZGVyOjpp
bW1VMzIpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OmltbVMzMik6CisgICAgICAgIChK
U0M6Oldhc206OlJlYWRlcjo6aWZJMzJMaXQpOgorCiAyMDE1LTA3LTA4ICBKb3NlcGggUGVjb3Jh
cm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGdyYW1tYXIgaXNzdWUgaW4g
VHlwZUVycm9yIGF0dGVtcHRpbmcgdG8gY2hhbmdlIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDA2ZTk5NzBjNTJjZTAxMmFjZjM4MDQz
MjQzN2YyYzI2ZjUyODhhNzAuLjA0MTkyOGY0NGQyY2VjODk3ZmRmNDQ0ZjZjMjY1MmFjZTVhMWQ5
Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDIwLDYgKzEwMjAsMTEgQEAK
IAkJNzBFQ0E2MDcxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MDIxQUZEQkVB
MjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuY3BwICovOyB9OwogCQk3MEVDQTYwODFBRkRC
RUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MDMxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBs
YXRlUmVnaXN0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3MEVDQTYwOTFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MDQx
QUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3QkQxMEM0MjFCNEVENDNDMDBCRDU0
MUEgLyogV2FzbUpJVENvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdCRDEwQzNEMUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNtSklUQ29tcGls
ZXIuY3BwICovOyB9OworCQk3QkQxMEM0MzFCNEVENDQwMDBCRDU0MUEgLyogV2FzbUpJVENvbXBp
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkQx
MEMzRTFCNEVENDM5MDBCRDU0MUEgLyogV2FzbUpJVENvbXBpbGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0JEMTBDNDQxQjRFRDQ0NTAwQkQ1
NDFBIC8qIFdhc21Nb2R1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0JEMTBDM0YxQjRFRDQzOTAwQkQ1NDFBIC8qIFdhc21Nb2R1bGUuY3BwICov
OyB9OworCQk3QkQxMEM0NTFCNEVENDQ5MDBCRDU0MUEgLyogV2FzbU1vZHVsZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JEMTBDNDAxQjRFRDQzOTAw
QkQ1NDFBIC8qIFdhc21Nb2R1bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk3QkQxMEM0NjFCNEVENDRFMDBCRDU0MUEgLyogV2FzbU9wY29kZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRDEwQzQx
MUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNtT3Bjb2Rlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMDA4Q0RBMTg3MTI0QkIwMDk1NUMyNCAvKiBK
U1Byb21pc2VEZWZlcnJlZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QzAwOENEODE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQu
Y3BwICovOyB9OwogCQk3QzAwOENEQjE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJy
ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDA4
Q0Q5MTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMDA4Q0U3MTg3NjMxQjYwMDk1
NUMyNCAvKiBNaWNyb3Rhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDMDA4Q0U1MTg3NjMxQjYwMDk1NUMyNCAvKiBNaWNyb3Rhc2suaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjc2Miw2ICsyNzY3
LDExIEBACiAJCTcwRUNBNjAyMUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0cnku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MEVDQTYwMzFBRkRCRUEyMDA0NDk3
MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUZW1wbGF0ZVJlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwRUNB
NjA0MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0cnlLZXkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJN0JEMTBDM0QxQjRFRDQzOTAwQkQ1NDFBIC8qIFdhc21KSVRDb21w
aWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtSklUQ29t
cGlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QkQxMEMzRTFCNEVENDM5
MDBCRDU0MUEgLyogV2FzbUpJVENvbXBpbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdhc21KSVRDb21waWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
QkQxMEMzRjFCNEVENDM5MDBCRDU0MUEgLyogV2FzbU1vZHVsZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtTW9kdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJN0JEMTBDNDAxQjRFRDQzOTAwQkQ1NDFBIC8qIFdhc21Nb2R1bGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU1vZHVsZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3QkQxMEM0MTFCNEVENDM5MDBCRDU0MUEgLyogV2FzbU9wY29kZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU9wY29kZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MwMDhDRDgxODcxMjRCQjAwOTU1QzI0IC8qIEpTUHJv
bWlzZURlZmVycmVkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
UHJvbWlzZURlZmVycmVkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MwMDhD
RDkxODcxMjRCQjAwOTU1QzI0IC8qIEpTUHJvbWlzZURlZmVycmVkLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTUHJvbWlzZURlZmVycmVkLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdDMDA4Q0U1MTg3NjMxQjYwMDk1NUMyNCAvKiBNaWNyb3Rhc2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWljcm90YXNrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0zNjE3LDYgKzM2MjcsNyBAQAogCQkJCTdFRjZFMEJCMEVCN0ExRUMw
MDc5QUZBRiAvKiBydW50aW1lICovLAogCQkJCTE0MTIxMTAwMEE0ODc3MjYwMDQ4MDI1NSAvKiB0
ZXN0cyAqLywKIAkJCQk4NjAzQ0VGMDE0Qzc1M0VGMDBBRTU5RTMgLyogdG9vbHMgKi8sCisJCQkJ
N0JEMTBDM0MxQjRFRDQxRDAwQkQ1NDFBIC8qIHdhc20gKi8sCiAJCQkJODZFQUM0OEMwRjkzRThC
OTAwOEVDOTQ4IC8qIHlhcnIgKi8sCiAJCQkpOwogCQkJbmFtZSA9IEphdmFTY3JpcHRDb3JlOwpA
QCAtNDI3OSw2ICs0MjkwLDE4IEBACiAJCQlwYXRoID0gZGlzYXNzZW1ibGVyL0FSTXY3OwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJN0JEMTBDM0MxQjRFRDQxRDAwQkQ1NDFB
IC8qIHdhc20gKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJ
CTdCRDEwQzNEMUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNtSklUQ29tcGlsZXIuY3BwICovLAorCQkJ
CTdCRDEwQzNFMUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNtSklUQ29tcGlsZXIuaCAqLywKKwkJCQk3
QkQxMEMzRjFCNEVENDM5MDBCRDU0MUEgLyogV2FzbU1vZHVsZS5jcHAgKi8sCisJCQkJN0JEMTBD
NDAxQjRFRDQzOTAwQkQ1NDFBIC8qIFdhc21Nb2R1bGUuaCAqLywKKwkJCQk3QkQxMEM0MTFCNEVE
NDM5MDBCRDU0MUEgLyogV2FzbU9wY29kZXMuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gd2FzbTsK
KwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTdFMzlEODFEMEVDMzhFRkEwMDNB
RjExQSAvKiBieXRlY29tcGlsZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKApAQCAtNjAxMSw2ICs2MDM0LDcgQEAKIAkJCQlCQzE4QzQwNTBFMTZGNUNEMDBCMzQ0
NjAgLyogRnVuY3Rpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQkUyQ0FFMTRF
OTg1QUEwMDA1OTNBRCAvKiBHQ0Fzc2VydGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2
RDMwMTVBOERDRTIwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTdCRDEwQzQ1MUI0RUQ0NDkwMEJENTQxQSAvKiBXYXNtTW9kdWxlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3MEVDMEVDNzFBQTBEN0RBMDBCNkFBRkEgLyogU3RyaW5nSXRlcmF0b3JQ
cm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkFDMTdCNkI1M0YwMEE3QUUzRiAv
KiBHQ0luY29taW5nUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2QUQxN0I2
QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02MTQ1LDYgKzYxNjksNyBAQAogCQkJCUJDMThDNDFEMEUxNkY1Q0QwMEIzNDQ2MCAv
KiBKU0NsYXNzUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxMzE2N0JBQkQ3MDA2RDc2
MEEgLyogSlNDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNzE2N0JBQkVFMDA2
RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCRDEwQzQz
MUI0RUQ0NDAwMEJENTQxQSAvKiBXYXNtSklUQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDFFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NvbnRleHRSZWYuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0OENEMUQ4MTA4Q0Y5MDIwMDgxNjNDNiAvKiBKU0NvbnRleHRSZWZQcml2YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzIwMjhCODE3OTc2MDFFMDA5ODAyOEMgLyogSlNDVGVzdFJ1
bm5lclV0aWxzLmggaW4gSGVhZGVycyAqLywKQEAgLTYxNTQsNiArNjE3OSw3IEBACiAJCQkJOTc4
ODAxNDExNDcxQUQ5MjAwNDFCMDE2IC8qIEpTRGF0ZU1hdGguaCBpbiBIZWFkZXJzICovLAogCQkJ
CUMyQTdGNjg4MTYwNDMyRDQwMEY3NkI5OCAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODZFM0M2MTQxNjdCQUJENzAwNkQ3NjBBIC8qIEpTRXhwb3J0LmggaW4g
SGVhZGVycyAqLywKKwkJCQk3QkQxMEM0NjFCNEVENDRFMDBCRDU0MUEgLyogV2FzbU9wY29kZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3QjRBQ0FGMTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9y
dE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RUYxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTRmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtNzE1Miw2ICs3MTc4
LDcgQEAKIAkJCQkwRkE1ODFCQTE1MEU5NTJDMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg2RUM5RENGMTMyOERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRp
b25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0ZEMTdBMEI4Q0MwMDc3M0FEOCAvKiBE
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdC
RDEwQzQyMUI0RUQ0M0MwMEJENTQxQSAvKiBXYXNtSklUQ29tcGlsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZEODJFNTYxNDFEQUYwODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRDhBMzI1MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBv
aW50Q3JlYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTUwNjg2NzFBRTI1RTI4
MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzE4
OCw2ICs3MjE1LDcgQEAKIAkJCQkwRkMwOTdBMTE0NkIyOENBMDBDRjI0NDIgLyogREZHVGh1bmtz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTNCNEE5MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRC
eUlkVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDlGQjg2NzFBRTMzNUM2MDAzOUQw
NjkgLyogSlNXZWFrU2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdCRDEwQzQ0MUI0RUQ0NDUw
MEJENTQxQSAvKiBXYXNtTW9kdWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzI3MTdE
NTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRDhBMzI5MTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxNzY2MjE5NkI4
RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCAxMjQzOWUwOGNhZTEw
ODY2ZTkzZDlhNzQ2ZmMyYzU3YmJmYTgyZDBjLi43NGM5ODgyNDY2ZWRhYjQ2NDhjZGJlODMzMDM3
NDU5ZGMzMTI2NTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcApAQCAtODYsNiArODYsOSBAQCBDU3RyaW5nIENvZGVCbG9jazo6aW5mZXJyZWROYW1l
KCkgY29uc3QKICAgICBjYXNlIEV2YWxDb2RlOgogICAgICAgICByZXR1cm4gIjxldmFsPiI7CiAg
ICAgY2FzZSBGdW5jdGlvbkNvZGU6CisgICAgICAgIC8vIEZJWE1FOiBoYWNreQorICAgICAgICBp
ZiAob3duZXJFeGVjdXRhYmxlKCktPmlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCkpCisgICAgICAg
ICAgICByZXR1cm4gIjx3ZWJhc3NlbWJseT4iOwogICAgICAgICByZXR1cm4ganNDYXN0PEZ1bmN0
aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+aW5mZXJyZWROYW1lKCkudXRmOCgp
OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7CkBAIC0yMTgzLDYgKzIxODYsNjggQEAg
Q29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBV
bmxpbmtlZENvZGVCbG9jayogdW5saW4KICAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5QWxs
b2NhdGVkKHNpemVvZihDb2RlQmxvY2spICsgbV9pbnN0cnVjdGlvbnMuc2l6ZSgpICogc2l6ZW9m
KEluc3RydWN0aW9uKSk7CiB9CiAKK0NvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFi
bGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICA6
IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+dm0oKSwgb3duZXJFeGVjdXRhYmxlLCBnbG9i
YWxPYmplY3QpCisgICAgLCBtX2hlYXAoJm1fZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApCisgICAg
LCBtX251bUNhbGxlZVJlZ2lzdGVycygwKSAvLyBGSVhNRQorICAgICwgbV9udW1WYXJzKDApIC8v
IEZJWE1FCisgICAgLCBtX2lzQ29uc3RydWN0b3IoZmFsc2UpIC8vIEZJWE1FCisgICAgLCBtX3No
b3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQorICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24o
ZmFsc2UpCisgICAgLCBtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwoZmFsc2UpCisgICAgLy8gLCBt
X3VubGlua2VkQ29kZShtX2dsb2JhbE9iamVjdC0+dm0oKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxp
bmtlZENvZGVCbG9jaykKKyAgICAsIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQoZmFsc2UpCisgICAg
LCBtX3N0ZXBwaW5nTW9kZShTdGVwcGluZ01vZGVEaXNhYmxlZCkKKyAgICAsIG1fbnVtQnJlYWtw
b2ludHMoMCkKKyAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBv
d25lckV4ZWN1dGFibGUsIG93bmVyRXhlY3V0YWJsZSkKKyAgICAsIG1fdm0oJm1fZ2xvYmFsT2Jq
ZWN0LT52bSgpKSAvLyBGSVhNRQorICAgICwgbV90aGlzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
KCkpIC8vIEZJWE1FCisgICAgLCBtX3Njb3BlUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpIC8v
IEZJWE1FCisgICAgLCBtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rl
cigpKSAvLyBGSVhNRQorICAgICwgbV9pc1N0cmljdE1vZGUoZmFsc2UpIC8vIEZJWE1FCisgICAg
LCBtX25lZWRzQWN0aXZhdGlvbihmYWxzZSkKKyAgICAsIG1fbWF5QmVFeGVjdXRpbmcoZmFsc2Up
CisgICAgLCBtX3NvdXJjZShudWxscHRyKQorICAgICwgbV9zb3VyY2VPZmZzZXQoMCkKKyAgICAs
IG1fZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KDApCisgICAgLCBtX2NvZGVUeXBlKEZ1bmN0aW9uQ29k
ZSkgLy8gRklYTUUKKyAgICAsIG1fb3NyRXhpdENvdW50ZXIoMCkKKyAgICAsIG1fb3B0aW1pemF0
aW9uRGVsYXlDb3VudGVyKDApCisgICAgLCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKDAp
CisjaWYgRU5BQkxFKEpJVCkKKyAgICAsIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUoREZHOjpDYXBh
YmlsaXR5TGV2ZWxOb3RTZXQpCisjZW5kaWYKK3sKKyAgICBtX3Zpc2l0QWdncmVnYXRlSGFzQmVl
bkNhbGxlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisKKyAgICBB
U1NFUlQobV9oZWFwLT5pc0RlZmVycmVkKCkpOworCisgICAgLyoKKyAgICBBU1NFUlQobV9zY29w
ZVJlZ2lzdGVyLmlzTG9jYWwoKSk7CisKKyAgICBib29sIGRpZENsb25lU3ltYm9sVGFibGUgPSBm
YWxzZTsKKworICAgIGlmIChTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSB1bmxpbmtlZENvZGVC
bG9jay0+c3ltYm9sVGFibGUoKSkgeworICAgICAgICBpZiAobV92bS0+dHlwZVByb2ZpbGVyKCkp
IHsKKyAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5t
X2xvY2spOworICAgICAgICAgICAgc3ltYm9sVGFibGUtPnByZXBhcmVGb3JUeXBlUHJvZmlsaW5n
KGxvY2tlcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29kZVR5cGUoKSA9PSBGdW5jdGlv
bkNvZGUgJiYgc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgpKSB7CisgICAgICAgICAgICBtX3N5bWJv
bFRhYmxlLnNldCgqbV92bSwgbV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIHN5bWJvbFRhYmxlLT5j
bG9uZVNjb3BlUGFydCgqbV92bSkpOworICAgICAgICAgICAgZGlkQ2xvbmVTeW1ib2xUYWJsZSA9
IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQoKm1f
dm0sIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBzeW1ib2xUYWJsZSk7CisgICAgfQorICAgICov
CisKKyAgICAvLyBGSVhNRToKKyAgICBzZXROdW1QYXJhbWV0ZXJzKDApOworCisgICAgbV9oZWFw
LT5tX2NvZGVCbG9ja3MuYWRkKHRoaXMpOworICAgIG1faGVhcC0+cmVwb3J0RXh0cmFNZW1vcnlB
bGxvY2F0ZWQoc2l6ZW9mKENvZGVCbG9jaykpOworfQorCiBDb2RlQmxvY2s6On5Db2RlQmxvY2so
KQogewogICAgIGlmIChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpCkBAIC0zMDU3LDYgKzMx
MjIsMTEgQEAgQ29kZUJsb2NrKiBGdW5jdGlvbkNvZGVCbG9jazo6cmVwbGFjZW1lbnQoKQogICAg
IHJldHVybiBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5j
b2RlQmxvY2tGb3IobV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JD
YWxsKTsKIH0KIAorQ29kZUJsb2NrKiBXZWJBc3NlbWJseUNvZGVCbG9jazo6cmVwbGFjZW1lbnQo
KQoreworICAgIHJldHVybiBqc0Nhc3Q8V2ViQXNzZW1ibHlFeGVjdXRhYmxlKj4ob3duZXJFeGVj
dXRhYmxlKCkpLT5jb2RlQmxvY2tGb3IobV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVj
dCA6IENvZGVGb3JDYWxsKTsKK30KKwogREZHOjpDYXBhYmlsaXR5TGV2ZWwgUHJvZ3JhbUNvZGVC
bG9jazo6Y2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKQogewogICAgIHJldHVybiBERkc6OnByb2dy
YW1DYXBhYmlsaXR5TGV2ZWwodGhpcyk7CkBAIC0zMDczLDYgKzMxNDMsMTEgQEAgREZHOjpDYXBh
YmlsaXR5TGV2ZWwgRnVuY3Rpb25Db2RlQmxvY2s6OmNhcGFiaWxpdHlMZXZlbEludGVybmFsKCkK
ICAgICAgICAgcmV0dXJuIERGRzo6ZnVuY3Rpb25Gb3JDb25zdHJ1Y3RDYXBhYmlsaXR5TGV2ZWwo
dGhpcyk7CiAgICAgcmV0dXJuIERGRzo6ZnVuY3Rpb25Gb3JDYWxsQ2FwYWJpbGl0eUxldmVsKHRo
aXMpOwogfQorCitERkc6OkNhcGFiaWxpdHlMZXZlbCBXZWJBc3NlbWJseUNvZGVCbG9jazo6Y2Fw
YWJpbGl0eUxldmVsSW50ZXJuYWwoKQoreworICAgIHJldHVybiBERkc6OkNhbm5vdENvbXBpbGU7
Cit9CiAjZW5kaWYKIAogdm9pZCBDb2RlQmxvY2s6OmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNv
blJlYXNvbiByZWFzb24sIFJlb3B0aW1pemF0aW9uTW9kZSBtb2RlLCBjb25zdCBGaXJlRGV0YWls
KiBkZXRhaWwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5k
ZXggNjVkYWI5NTVlNjhmMTQ3NTdjNWFiMWEyOWUxOTc0MjhkMGNjOGU5OC4uZTZlMjg5ZGZmYmY2
MWM1OGJiODNiYmUyYmYyNGUwMDg3ZDAyYWQ2NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaApAQCAtOTcsNiArOTcsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAg
IAogICAgIENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlu
a2VkQ29kZUJsb2NrKiwgSlNTY29wZSosIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+LCB1bnNp
Z25lZCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCk7CiAKKyAg
ICBDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBKU0dsb2JhbE9i
amVjdCopOworCiAgICAgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9iamVj
dDsKICAgICBIZWFwKiBtX2hlYXA7CiAKQEAgLTM0OCw3ICszNTAsMTQgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbV9uZWVkc0FjdGl2YXRpb247CiAgICAgfQogICAgIAotICAgIENvZGVUeXBl
IGNvZGVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvZGVUeXBlKCk7IH0K
KyAgICBDb2RlVHlwZSBjb2RlVHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICAvLyBGSVhNRTog
aGFja3kKKyAgICAgICAgaWYgKG93bmVyRXhlY3V0YWJsZSgpLT5pc1dlYkFzc2VtYmx5RXhlY3V0
YWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uQ29kZTsKKyAgICAgICAgcmV0dXJu
IG1fdW5saW5rZWRDb2RlLT5jb2RlVHlwZSgpOworICAgIH0KKwogICAgIFB1dFByb3BlcnR5U2xv
dDo6Q29udGV4dCBwdXRCeUlkQ29udGV4dCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoY29k
ZVR5cGUoKSA9PSBFdmFsQ29kZSkKQEAgLTExNDIsNiArMTE1MSwyNyBAQCBwcm90ZWN0ZWQ6CiAj
ZW5kaWYKIH07CiAKK2NsYXNzIFdlYkFzc2VtYmx5Q29kZUJsb2NrIDogcHVibGljIENvZGVCbG9j
ayB7CitwdWJsaWM6CisgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFn
LCBXZWJBc3NlbWJseUNvZGVCbG9jayYgb3RoZXIpCisgICAgICAgIDogQ29kZUJsb2NrKENvcHlQ
YXJzZWRCbG9jaywgb3RoZXIpCisgICAgeworICAgIH0KKworICAgIFdlYkFzc2VtYmx5Q29kZUJs
b2NrKFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQorICAgICAgICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGds
b2JhbE9iamVjdCkKKyAgICB7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lk
IGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGUgeyB9OworCisjaWYgRU5BQkxFKEpJ
VCkKKyAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbEludGVybmFsKCkgb3Zl
cnJpZGU7CisjZW5kaWYKK307CisKIGlubGluZSBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
Rm9ySW5saW5lQ2FsbEZyYW1lKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogewog
ICAgIFJFTEVBU0VfQVNTRVJUKGlubGluZUNhbGxGcmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCAzODAxNWQyZDgwNGY5MzU5MjBmOTc1NmE3
MWNhMmZkZmVhMTc5NTkwLi4wMTg4ZTUzNTZmNGExNGNkMzFmM2U0OWU1MTAyYTE2MDhiYzA1MzJl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTc3
OCw3ICs3NzgsMTAgQEAgaW5saW5lIGNoYXIqIGxpbmtGb3IoCiAKICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY29kZVB0cjsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDA7Ci0gICAgaWYg
KGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCisgICAgaWYgKGV4ZWN1dGFibGUtPmlzV2Vi
QXNzZW1ibHlFeGVjdXRhYmxlKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSByZWFs
bHkgdXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ/CisgICAgICAgIGNvZGVQdHIg
PSBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKCp2bSwga2luZCwgQXJpdHlDaGVja05vdFJlcXVp
cmVkLCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKKyAgICB9IGVsc2UgaWYgKGV4
ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxl
LT5lbnRyeXBvaW50Rm9yKCp2bSwga2luZCwgTXVzdENoZWNrQXJpdHksIHJlZ2lzdGVycyk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxl
ID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CkBAIC03OTUs
MTYgKzc5OCwxOSBAQCBpbmxpbmUgY2hhciogbGlua0ZvcigKICAgICAgICAgfQogICAgICAgICBj
b2RlQmxvY2sgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcihraW5kKTsKICAgICAg
ICAgQXJpdHlDaGVja01vZGUgYXJpdHk7Ci0gICAgICAgIGlmIChleGVjQ2FsbGVlLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSkgfHwgY2FsbExpbmtJbmZvLT5jYWxsVHlwZSgpID09IENhbGxMaW5rSW5m
bzo6Q2FsbFZhcmFyZ3MgfHwgY2FsbExpbmtJbmZvLT5jYWxsVHlwZSgpID09IENhbGxMaW5rSW5m
bzo6Q29uc3RydWN0VmFyYXJncykKKyAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpKSB8fCAoY2FsbExpbmtJbmZvICYmIChjYWxsTGlua0luZm8tPmNhbGxUeXBlKCkg
PT0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJncyB8fCBjYWxsTGlua0luZm8tPmNhbGxUeXBlKCkg
PT0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzKSkpCiAgICAgICAgICAgICBhcml0eSA9
IE11c3RDaGVja0FyaXR5OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhcml0eSA9IEFyaXR5
Q2hlY2tOb3RSZXF1aXJlZDsKICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+
ZW50cnlwb2ludEZvcigqdm0sIGtpbmQsIGFyaXR5LCByZWdpc3RlcnMpOwogICAgIH0KLSAgICBp
ZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKLSAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRT
ZWVuKCk7Ci0gICAgZWxzZQotICAgICAgICBsaW5rRm9yKGV4ZWNDYWxsZWUsICpjYWxsTGlua0lu
Zm8sIGNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRyLCBraW5kLCByZWdpc3RlcnMpOworICAgIC8v
IFRPRE86IHN1cHBvcnQgcmVwYXRjaGluZworICAgIGlmIChjYWxsTGlua0luZm8pIHsKKyAgICAg
ICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCisgICAgICAgICAgICBjYWxsTGlua0lu
Zm8tPnNldFNlZW4oKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbGlua0ZvcihleGVjQ2Fs
bGVlLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0ciwga2luZCwgcmVn
aXN0ZXJzKTsKKyAgICB9CiAgICAgCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4
IDM4MGQ4OWI1ZDM1OTI3NGEyNzQ4MjkxODMyY2VlZDg4OGE2M2MyMzYuLjk4Mzk0M2VkMWVjNGQ5
N2ZhYWEyNDMwMzIwMTE0ZmEzMzU1ZGZjMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC00OSw2
ICs0OSw3IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiVGVzdFJ1bm5lclV0aWxzLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCisjaW5j
bHVkZSAiV2FzbUpJVENvbXBpbGVyLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0
ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC00OTEsNiArNDkyLDcgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZXR1cm5UeXBlRm9yKEV4ZWNTdGF0
ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EdW1wQmFz
aWNCbG9ja0V4ZWN1dGlvblJhbmdlcyhFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSGFzQmFzaWNCbG9ja0V4ZWN1dGVkKEV4ZWNTdGF0ZSop
Owogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25FbmFibGVFeGNl
cHRpb25GdXp6KEV4ZWNTdGF0ZSopOworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25Mb2FkV2ViQXNzZW1ibHkoRXhlY1N0YXRlKik7CiAKICNpZiBFTkFCTEUoU0FN
UExJTkdfRkxBR1MpCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blNldFNhbXBsaW5nRmxhZ3MoRXhlY1N0YXRlKik7CkBAIC02NTMsNiArNjU1LDggQEAgcHJvdGVj
dGVkOgogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImhhc0Jhc2ljQmxvY2tFeGVjdXRlZCIsIGZ1
bmN0aW9uSGFzQmFzaWNCbG9ja0V4ZWN1dGVkLCAyKTsKIAogICAgICAgICBhZGRGdW5jdGlvbih2
bSwgImVuYWJsZUV4Y2VwdGlvbkZ1enoiLCBmdW5jdGlvbkVuYWJsZUV4Y2VwdGlvbkZ1enosIDAp
OworCisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAibG9hZFdlYkFzc2VtYmx5IiwgZnVuY3Rpb25M
b2FkV2ViQXNzZW1ibHksIDEpOwogICAgICAgICAKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBj
b25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbEV4ZWMoKSwgMCk7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgKytpKQpAQCAtMTE4Miw2ICsxMTg2LDE2IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25FbmFibGVFeGNlcHRpb25GdXp6
KEV4ZWNTdGF0ZSopCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYWRXZWJBc3NlbWJs
eShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIFZlY3RvcjxjaGFyPiBidWZm
ZXI7CisgICAgaWYgKCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVOYW1lLCBidWZm
ZXIpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPnZtKCkudGhyb3dFeGNl
cHRpb24oZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDb3VsZCBub3Qgb3Bl
biBmaWxlLiIpKSkpOworICAgIFdhc206Ok1vZHVsZSogbW9kdWxlID0gV2FzbTo6Y29tcGlsZShl
eGVjLCBidWZmZXIpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobW9kdWxlKTsKK30KKwog
Ly8gVXNlIFNFSCBmb3IgUmVsZWFzZSBidWlsZHMgb25seSB0byBnZXQgcmlkIG9mIHRoZSBjcmFz
aCByZXBvcnQgZGlhbG9nCiAvLyAobHVja2lseSB0aGUgc2FtZSB0ZXN0cyBmYWlsIGluIFJlbGVh
c2UgYW5kIERlYnVnIGJ1aWxkcyBzbyBmYXIpLiBOZWVkIHRvCiAvLyBiZSBpbiBhIHNlcGFyYXRl
IG1haW4gZnVuY3Rpb24gYmVjYXVzZSB0aGUganNjbWFpbiBmdW5jdGlvbiByZXF1aXJlcyBvYmpl
Y3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRo
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCmlu
ZGV4IDljY2MxY2U0OTc4OGQ3MTBmYzY5YTY5MTU0MzQyNzFhOGMwOWQyZTQuLmI0OWVhYWM1MWFk
NjkxOGUwMWNkYTNlODNlZWExZTIzYjkxZDJkYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApAQCAtMTExOSw3ICsxMTE5LDkgQEAgaW5saW5l
IFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBJbnN0
cnVjdGlvbiogcGMsIENvZGUKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0
cjsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDA7Ci0gICAgaWYgKGV4ZWN1dGFibGUtPmlz
SG9zdEZ1bmN0aW9uKCkpCisgICAgaWYgKGV4ZWN1dGFibGUtPmlzV2ViQXNzZW1ibHlFeGVjdXRh
YmxlKCkpCisgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKHZtLCBr
aW5kLCBBcml0eUNoZWNrTm90UmVxdWlyZWQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWly
ZWQpOworICAgIGVsc2UgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAg
IGNvZGVQdHIgPSBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKHZtLCBraW5kLCBNdXN0Q2hlY2tB
cml0eSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiAgICAgZWxzZSB7CiAgICAg
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCmluZGV4IDU1MjQwZmQ5MWY3YmM3ODQyZjEzZTU5Mjgx
ZDEwZDIxZDg2YzRmNTAuLmFiZjJkMTU2NTRjNjZlMDZmZjFhZWE3YWMwYmM0OWY1MjE2ZDNmZDQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCkBAIC0x
NDksNiArMTQ5LDIxIEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUoQ29kZUJs
b2NrKiBnZW5lcmljQ29kZUJsb2NrKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCisgICAg
aWYgKGlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCkpIHsKKyAgICAgICAgV2ViQXNzZW1ibHlFeGVj
dXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PFdlYkFzc2VtYmx5RXhlY3V0YWJsZSo+KHRoaXMp
OworICAgICAgICBXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8
V2ViQXNzZW1ibHlDb2RlQmxvY2sqPihnZW5lcmljQ29kZUJsb2NrKTsKKworICAgICAgICBBU1NF
UlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CisKKyAgICAgICAgZXhlY3V0YWJsZS0+bV9jb2RlQmxv
Y2tGb3JDYWxsID0gY29kZUJsb2NrOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IHRoaXMg
aXMganVzdCB0byBtYWtlIGlzSG9zdEZ1bmN0aW9uKCkgaGFwcHkuCisgICAgICAgIC8vIEJ1dCB0
aGlzIHdpbGwgbWFrZSBpc0hvc3RGdW5jdGlvbigpIHJldHVybiB0cnVlLgorICAgICAgICBtX251
bVBhcmFtZXRlcnNGb3JDYWxsID0gMDsKKyAgICAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3Ry
dWN0ID0gMDsKKyAgICB9IGVsc2UgeworCisgICAgICAgIC8vIEZJWE1FOiBuZWVkIHRvIGRlYWwg
d2l0aCBjb2RlVHlwZSgpCiAgICAgc3dpdGNoIChnZW5lcmljQ29kZUJsb2NrLT5jb2RlVHlwZSgp
KSB7CiAgICAgY2FzZSBHbG9iYWxDb2RlOiB7CiAgICAgICAgIFByb2dyYW1FeGVjdXRhYmxlKiBl
eGVjdXRhYmxlID0ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyk7CkBAIC0xOTIsNiAr
MjA3LDggQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZShDb2RlQmxvY2sqIGdl
bmVyaWNDb2RlQmxvY2spCiAgICAgaWYgKG9sZENvZGVCbG9jaykKICAgICAgICAgb2xkQ29kZUJs
b2NrLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7CiAKKyAgICB9CisgICAgCiAgICAgRGVidWdnZXIq
IGRlYnVnZ2VyID0gZ2VuZXJpY0NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCk7
CiAgICAgaWYgKGRlYnVnZ2VyKQogICAgICAgICBkZWJ1Z2dlci0+cmVnaXN0ZXJDb2RlQmxvY2so
Z2VuZXJpY0NvZGVCbG9jayk7CkBAIC0yMjgsNiArMjQ1LDggQEAgUmVmUHRyPENvZGVCbG9jaz4g
U2NyaXB0RXhlY3V0YWJsZTo6bmV3Q29kZUJsb2NrRm9yKAogICAgICAgICAgICAgZXhlY3V0YWJs
ZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXhlY3V0YWJsZS0+c291cmNlKCkuc3RhcnRDb2x1bW4o
KSkpOwogICAgIH0KICAgICAKKyAgICBBU1NFUlQoIWlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCkp
OworICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKGNsYXNzSW5mbygpID09IEZ1bmN0aW9uRXhlY3V0
YWJsZTo6aW5mbygpKTsKICAgICBSRUxFQVNFX0FTU0VSVChmdW5jdGlvbik7CiAgICAgRnVuY3Rp
b25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHRo
aXMpOwpAQCAtMzIzLDYgKzM0Miw4IEBAIHN0YXRpYyB2b2lkIHNldHVwSklUKFZNJiB2bSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCiBKU09iamVjdCogU2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZv
ckV4ZWN1dGlvbkltcGwoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBKU0Z1bmN0aW9uKiBmdW5jdGlv
biwgSlNTY29wZSogc2NvcGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKKyAgICBB
U1NFUlQoIWlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCkpOworICAgIAogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIApAQCAtNDI1LDYg
KzQ0NiwzNSBAQCB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwp
CiAgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCktPkZ1bmN0aW9uRXhl
Y3V0YWJsZTo6fkZ1bmN0aW9uRXhlY3V0YWJsZSgpOwogfQogCitjb25zdCBDbGFzc0luZm8gV2Vi
QXNzZW1ibHlFeGVjdXRhYmxlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseUV4ZWN1dGFibGUiLCAm
U2NyaXB0RXhlY3V0YWJsZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdlYkFzc2Vt
Ymx5RXhlY3V0YWJsZSkgfTsKKworV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpXZWJBc3NlbWJseUV4
ZWN1dGFibGUoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCisgICAgOiBTY3JpcHRF
eGVjdXRhYmxlKHZtLndlYkFzc2VtYmx5RXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwgdm0sIHNv
dXJjZSwgLyppc0luU3RyaWN0Q29udGV4dCovIGZhbHNlICkKK3sKKyAgICAvKgorICAgIFJFTEVB
U0VfQVNTRVJUKCFzb3VyY2UuaXNOdWxsKCkpOworICAgIEFTU0VSVChzb3VyY2UubGVuZ3RoKCkp
OworICAgIG1fZmlyc3RMaW5lID0gZmlyc3RMaW5lOworICAgIG1fbGFzdExpbmUgPSBsYXN0TGlu
ZTsKKyAgICBtX3N0YXJ0Q29sdW1uID0gc3RhcnRDb2x1bW47CisgICAgbV9lbmRDb2x1bW4gPSBl
bmRDb2x1bW47CisgICAgbV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQgPSB1bmxpbmtlZEV4ZWN1dGFi
bGUtPnBhcmFtZXRlcnNTdGFydE9mZnNldCgpOworICAgIG1fdHlwZVByb2ZpbGluZ1N0YXJ0T2Zm
c2V0ID0gdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKTsKKyAg
ICBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQgPSB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9m
aWxpbmdFbmRPZmZzZXQoKTsKKyAgICAqLworfQorCit2b2lkIFdlYkFzc2VtYmx5RXhlY3V0YWJs
ZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICBtX3NpbmdsZXRvbkZ1bmN0aW9uLnNldCh2bSwgdGhpcywgSW5mZXJyZWRWYWx1ZTo6
Y3JlYXRlKHZtKSk7Cit9CisKK3ZvaWQgV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpkZXN0cm95KEpT
Q2VsbCogY2VsbCkKK3sKKyAgICBzdGF0aWNfY2FzdDxXZWJBc3NlbWJseUV4ZWN1dGFibGUqPihj
ZWxsKS0+V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjp+V2ViQXNzZW1ibHlFeGVjdXRhYmxlKCk7Cit9
CisKIGlubGluZSBjb25zdCBjaGFyKiBzYW1wbGluZ0Rlc2NyaXB0aW9uKEpJVENvZGU6OkpJVFR5
cGUgaml0VHlwZSkKIHsKICAgICBzd2l0Y2ggKGppdFR5cGUpIHsKQEAgLTYxOSw2ICs2NjksNDMg
QEAgRnVuY3Rpb25FeGVjdXRhYmxlKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmZyb21HbG9iYWxDb2Rl
KAogICAgIHJldHVybiB1bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmsoZXhlYy52bSgpLCBzb3VyY2Us
IG92ZXJyaWRlTGluZU51bWJlcik7CiB9CiAKK1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBXZWJBc3Nl
bWJseUV4ZWN1dGFibGU6OmJhc2VsaW5lQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKK3sKKyAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CisKKyAgICBXZWJB
c3NlbWJseUNvZGVCbG9jayogcmVzdWx0ID0gbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpOworICAg
IGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
V2ViQXNzZW1ibHlDb2RlQmxvY2sqPihyZXN1bHQtPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKSk7Cit9
CisKK3ZvaWQgV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiB0
aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5RXhlY3V0YWJsZSo+KGNlbGwpOworICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBTY3JpcHRF
eGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIGlmICh0
aGlzT2JqZWN0LT5tX2NvZGVCbG9ja0ZvckNhbGwpCisgICAgICAgIHRoaXNPYmplY3QtPm1fY29k
ZUJsb2NrRm9yQ2FsbC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBl
bmQoJnRoaXNPYmplY3QtPm1fc2luZ2xldG9uRnVuY3Rpb24pOworfQorCitTeW1ib2xUYWJsZSog
V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpzeW1ib2xUYWJsZShDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQpCit7CisgICAgcmV0dXJuIGNvZGVCbG9ja0ZvcihraW5kKS0+c3ltYm9sVGFibGUoKTsK
K30KKwordm9pZCBXZWJBc3NlbWJseUV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCit7CisgICAgLy8g
RklYTUU6IGhhY2t5CisgICAgLy8gbV9jb2RlQmxvY2tGb3JDYWxsID0gbnVsbHB0cjsKKyAgICAv
LyBCYXNlOjpjbGVhckNvZGUoKTsKK30KKwordm9pZCBXZWJBc3NlbWJseUV4ZWN1dGFibGU6OnVu
bGlua0NhbGxzKCkKK3sKKyAgICAvLyBGSVhNRTogaGFja3kKK30KKwogdm9pZCBFeGVjdXRhYmxl
QmFzZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIEV4ZWN1dGFibGVCYXNl
KiByZWFsVGhpcyA9IGNvbnN0X2Nhc3Q8RXhlY3V0YWJsZUJhc2UqPih0aGlzKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAppbmRleCAxYzdjODAwMDNkMmEzMmJk
NmEzMTFkYWMwZGU1MzkwMWE4YWQ3ODFmLi5lZDgyMjlhMTllOTI0NmU3NDVmMzYwODBmODUwMTgy
ZDc0NGI0OGJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5o
CkBAIC01MCw2ICs1MCw3IEBAIGNsYXNzIEV2YWxDb2RlQmxvY2s7CiBjbGFzcyBGdW5jdGlvbkNv
ZGVCbG9jazsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFByb2dyYW1Db2Rl
QmxvY2s7CitjbGFzcyBXZWJBc3NlbWJseUNvZGVCbG9jazsKIGNsYXNzIEpTU2NvcGU7CiAgICAg
CiBlbnVtIENvbXBpbGF0aW9uS2luZCB7IEZpcnN0Q29tcGlsYXRpb24sIE9wdGltaXppbmdDb21w
aWxhdGlvbiB9OwpAQCAtOTgsNiArOTksMTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0
dXJuIHR5cGUoKSA9PSBGdW5jdGlvbkV4ZWN1dGFibGVUeXBlOwogICAgIH0KKyAgICBib29sIGlz
V2ViQXNzZW1ibHlFeGVjdXRhYmxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0eXBlKCkgPT0g
V2ViQXNzZW1ibHlFeGVjdXRhYmxlVHlwZTsKKyAgICB9CiAgICAgYm9vbCBpc1Byb2dyYW1FeGVj
dXRhYmxlKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0eXBlKCkgPT0gUHJvZ3JhbUV4ZWN1dGFi
bGVUeXBlOwpAQCAtNjc4LDYgKzY4MywxMjEgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8
SW5mZXJyZWRWYWx1ZT4gbV9zaW5nbGV0b25GdW5jdGlvbjsKIH07CiAKK2NsYXNzIFdlYkFzc2Vt
Ymx5RXhlY3V0YWJsZSBmaW5hbCA6IHB1YmxpYyBTY3JpcHRFeGVjdXRhYmxlIHsKKyAgICBmcmll
bmQgY2xhc3MgSklUOworICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBTY3JpcHRFeGVjdXRhYmxlIEJhc2U7CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1
Y3R1cmVJc0ltbW9ydGFsOworCisgICAgc3RhdGljIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogY3Jl
YXRlKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQorICAgIHsKKyAgICAgICAgV2Vi
QXNzZW1ibHlFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8V2ViQXNzZW1ibHlFeGVjdXRhYmxlPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlFeGVjdXRhYmxl
KHZtLCBzb3VyY2UpOworICAgICAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbih2bSk7Cisg
ICAgICAgIHJldHVybiBleGVjdXRhYmxlOworICAgIH0KKyAgICAvLyBzdGF0aWMgV2ViQXNzZW1i
bHlFeGVjdXRhYmxlKiBmcm9tR2xvYmFsQ29kZShjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBFeGVj
U3RhdGUmLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNPYmplY3QqJiBleGNlcHRpb24sIGludCBvdmVy
cmlkZUxpbmVOdW1iZXIpOworCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKyAg
ICAgICAgCisgICAgYm9vbCBpc0dlbmVyYXRlZEZvckNhbGwoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ2FsbDsKKyAgICB9CisKKyAgICBXZWJBc3NlbWJseUNv
ZGVCbG9jayogY29kZUJsb2NrRm9yQ2FsbCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9jb2Rl
QmxvY2tGb3JDYWxsLmdldCgpOworICAgIH0KKworICAgIGJvb2wgaXNHZW5lcmF0ZWRGb3JDb25z
dHJ1Y3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IFdlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgICAgICAKKyAgICBib29sIGlzR2VuZXJh
dGVkRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICB7CisgICAgICAgIGlmIChr
aW5kID09IENvZGVGb3JDYWxsKQorICAgICAgICAgICAgcmV0dXJuIGlzR2VuZXJhdGVkRm9yQ2Fs
bCgpOworICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAg
cmV0dXJuIGlzR2VuZXJhdGVkRm9yQ29uc3RydWN0KCk7CisgICAgfQorICAgICAgICAKKyAgICBX
ZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCkKKyAgICB7CisgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQorICAgICAgICAg
ICAgcmV0dXJuIGNvZGVCbG9ja0ZvckNhbGwoKTsKKyAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29k
ZUZvckNvbnN0cnVjdCk7CisgICAgICAgIHJldHVybiBjb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKTsK
KyAgICB9CisKKyAgICBXZWJBc3NlbWJseUNvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3Io
Q29kZVNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgICAgIAorICAgIFdlYkFzc2VtYmx5Q29kZUJs
b2NrKiBwcm9maWxlZENvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisg
ICAgeworICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3Ioa2luZCk7CisgICAgfQor
CisgICAgUmVmUHRyPFR5cGVTZXQ+IHJldHVyblN0YXRlbWVudFR5cGVTZXQoKSAKKyAgICB7Cisg
ICAgICAgIGlmICghbV9yZXR1cm5TdGF0ZW1lbnRUeXBlU2V0KQorICAgICAgICAgICAgbV9yZXR1
cm5TdGF0ZW1lbnRUeXBlU2V0ID0gVHlwZVNldDo6Y3JlYXRlKCk7CisKKyAgICAgICAgcmV0dXJu
IG1fcmV0dXJuU3RhdGVtZW50VHlwZVNldDsKKyAgICB9CisgICAgICAgIAorICAgIC8vIEZ1bmN0
aW9uTW9kZSBmdW5jdGlvbk1vZGUoKSB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+ZnVu
Y3Rpb25Nb2RlKCk7IH0KKyAgICAvLyBib29sIGlzQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCk7IH0KKyAgICAv
LyBib29sIGlzQ2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV91bmxp
bmtlZEV4ZWN1dGFibGUtPmlzQ2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9uKCk7IH0KKyAgICAvLyBj
b25zdCBJZGVudGlmaWVyJiBuYW1lKCkgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPm5h
bWUoKTsgfQorICAgIC8vIGNvbnN0IElkZW50aWZpZXImIGluZmVycmVkTmFtZSgpIHsgcmV0dXJu
IG1fdW5saW5rZWRFeGVjdXRhYmxlLT5pbmZlcnJlZE5hbWUoKTsgfQorICAgIC8vIEpTU3RyaW5n
KiBuYW1lVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+bmFtZVZh
bHVlKCk7IH0KKyAgICAvLyBzaXplX3QgcGFyYW1ldGVyQ291bnQoKSBjb25zdCB7IHJldHVybiBt
X3VubGlua2VkRXhlY3V0YWJsZS0+cGFyYW1ldGVyQ291bnQoKTsgfSAvLyBFeGNsdWRpbmcgJ3Ro
aXMnIQorICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZShDb2RlU3BlY2lhbGl6YXRpb25LaW5k
KTsKKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBUeXBlSW5mbyhX
ZWJBc3NlbWJseUV4ZWN1dGFibGVUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAg
fQorCisgICAgdW5zaWduZWQgcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQ7IH0KKworICAgIC8qCisgICAgdm9pZCBvdmVycmlkZVBh
cmFtZXRlckFuZFR5cGVQcm9maWxpbmdTdGFydEVuZE9mZnNldHModW5zaWduZWQgcGFyYW1ldGVy
c1N0YXJ0T2Zmc2V0LCB1bnNpZ25lZCB0eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQsIHVuc2lnbmVk
IHR5cGVQcm9maWxpbmdFbmRPZmZzZXQpCisgICAgeworICAgICAgICBtX3BhcmFtZXRlcnNTdGFy
dE9mZnNldCA9IHBhcmFtZXRlcnNTdGFydE9mZnNldDsKKyAgICAgICAgbV90eXBlUHJvZmlsaW5n
U3RhcnRPZmZzZXQgPSB0eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQ7CisgICAgICAgIG1fdHlwZVBy
b2ZpbGluZ0VuZE9mZnNldCA9IHR5cGVQcm9maWxpbmdFbmRPZmZzZXQ7CisgICAgfQorICAgICov
CisKKyAgICBERUNMQVJFX0lORk87CisgICAgICAgIAorICAgIHZvaWQgdW5saW5rQ2FsbHMoKTsK
KworICAgIHZvaWQgY2xlYXJDb2RlKCk7CisgICAgCisgICAgSW5mZXJyZWRWYWx1ZSogc2luZ2xl
dG9uRnVuY3Rpb24oKSB7IHJldHVybiBtX3NpbmdsZXRvbkZ1bmN0aW9uLmdldCgpOyB9CisKK3By
aXZhdGU6CisgICAgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKFZNJiwgY29uc3QgU291cmNlQ29kZSYp
OworICAgIAorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKworICAgIGZyaWVuZCBjbGFz
cyBTY3JpcHRFeGVjdXRhYmxlOworCisgICAgUmVmUHRyPFdlYkFzc2VtYmx5Q29kZUJsb2NrPiBt
X2NvZGVCbG9ja0ZvckNhbGw7CisgICAgUmVmUHRyPFR5cGVTZXQ+IG1fcmV0dXJuU3RhdGVtZW50
VHlwZVNldDsKKyAgICB1bnNpZ25lZCBtX3BhcmFtZXRlcnNTdGFydE9mZnNldDsKKyAgICBXcml0
ZUJhcnJpZXI8SW5mZXJyZWRWYWx1ZT4gbV9zaW5nbGV0b25GdW5jdGlvbjsKK307CisKIGlubGlu
ZSB2b2lkIEV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGVWaXJ0dWFsKEV4ZWN1dGFibGVCYXNlKiBl
eGVjdXRhYmxlKQogewogICAgIHN3aXRjaCAoZXhlY3V0YWJsZS0+dHlwZSgpKSB7CkBAIC02ODcs
NiArODA3LDggQEAgaW5saW5lIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZVZpcnR1YWwo
RXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUpCiAgICAgICAgIHJldHVybiBqc0Nhc3Q8UHJvZ3Jh
bUV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Y2xlYXJDb2RlKCk7CiAgICAgY2FzZSBGdW5jdGlv
bkV4ZWN1dGFibGVUeXBlOgogICAgICAgICByZXR1cm4ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KGV4ZWN1dGFibGUpLT5jbGVhckNvZGUoKTsKKyAgICBjYXNlIFdlYkFzc2VtYmx5RXhlY3V0
YWJsZVR5cGU6CisgICAgICAgIHJldHVybiBqc0Nhc3Q8V2ViQXNzZW1ibHlFeGVjdXRhYmxlKj4o
ZXhlY3V0YWJsZSktPmNsZWFyQ29kZSgpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBq
c0Nhc3Q8TmF0aXZlRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5jbGVhckNvZGUoKTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCmluZGV4IDFi
OGM0MDdlYzNkNDk0OWI2MDZlYzk1YjlhYzliNGUyZGZjNjgxMmYuLjdkYzY3MjNiNGE2YmZlM2Fh
ODQ0ODJlY2Q1MmY5NDQ5ZWEzZjlhODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb24uY3BwCkBAIC02MCwxMCArNjAsMTEgQEAgYm9vbCBKU0Z1bmN0aW9uOjpp
c0hvc3RGdW5jdGlvbk5vbklubGluZSgpIGNvbnN0CiAgICAgcmV0dXJuIGlzSG9zdEZ1bmN0aW9u
KCk7CiB9CiAKLUpTRnVuY3Rpb24qIEpTRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUpCitKU0Z1bmN0aW9uKiBKU0Z1
bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgSlNTY29w
ZSogc2NvcGUpCiB7CiAgICAgSlNGdW5jdGlvbiogcmVzdWx0ID0gY3JlYXRlSW1wbCh2bSwgZXhl
Y3V0YWJsZSwgc2NvcGUpOwotICAgIGV4ZWN1dGFibGUtPnNpbmdsZXRvbkZ1bmN0aW9uKCktPm5v
dGlmeVdyaXRlKHZtLCByZXN1bHQsICJBbGxvY2F0aW5nIGEgZnVuY3Rpb24iKTsKKyAgICBpZiAo
ZXhlY3V0YWJsZS0+aXNGdW5jdGlvbkV4ZWN1dGFibGUoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPnNpbmdsZXRvbkZ1bmN0aW9uKCktPm5v
dGlmeVdyaXRlKHZtLCByZXN1bHQsICJBbGxvY2F0aW5nIGEgZnVuY3Rpb24iKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9u
LmgKaW5kZXggMGI4N2Q3NWM5MTQ1MGM1YWYxYWFlZDI3YTYxYTc0OGVmODBmMDkzZS4uMjNjN2Zi
MTc4OWIzOTE3MDY2YTczZDUwNjI3ZGMyZmRjMmM5Y2ZhNiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaApAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZVdpdGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlvbldhdGNo
cG9pbnQoVk0mLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU1Njb3BlKik7CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
aW50IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBOYXRpdmVTdGRGdW5jdGlvbiYmLCBJbnRy
aW5zaWMgPSBOb0ludHJpbnNpYywgTmF0aXZlRnVuY3Rpb24gbmF0aXZlQ29uc3RydWN0b3IgPSBj
YWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rvcik7CiAKLSAgICBzdGF0aWMgSlNGdW5jdGlvbiog
Y3JlYXRlKFZNJiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwgSlNTY29wZSopOworICAgIHN0YXRpYyBK
U0Z1bmN0aW9uKiBjcmVhdGUoVk0mLCBFeGVjdXRhYmxlQmFzZSosIEpTU2NvcGUqKTsKIAogICAg
IHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVCdWlsdGluRnVuY3Rpb24oVk0mLCBGdW5jdGlvbkV4
ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVh
dGVCdWlsdGluRnVuY3Rpb24oVk0mLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVj
dCosIGNvbnN0IFN0cmluZyYgbmFtZSk7CkBAIC0xNDAsNyArMTQwLDcgQEAgcHVibGljOgogCiBw
cm90ZWN0ZWQ6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNGdW5jdGlvbihWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgU3RydWN0dXJlKik7Ci0gICAgSlNGdW5jdGlvbihWTSYsIEZ1bmN0aW9uRXhlY3V0
YWJsZSosIEpTU2NvcGUqKTsKKyAgICBKU0Z1bmN0aW9uKFZNJiwgRXhlY3V0YWJsZUJhc2UqLCBK
U1Njb3BlKik7CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJs
ZSosIGludCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgdXNpbmcgQmFzZTo6Zmlu
aXNoQ3JlYXRpb247CkBAIC0xNTksNyArMTU5LDcgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKLSAg
ICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlSW1wbChWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUpCisgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNy
ZWF0ZUltcGwoVk0mIHZtLCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2Nv
cGUpCiAgICAgewogICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEpTRnVuY3Rpb24+KHZtLmhlYXApKSBKU0Z1bmN0aW9uKHZtLCBleGVjdXRh
YmxlLCBzY29wZSk7CiAgICAgICAgIEFTU0VSVChmdW5jdGlvbi0+c3RydWN0dXJlKCktPmdsb2Jh
bE9iamVjdCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb25JbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0
aW9uSW5saW5lcy5oCmluZGV4IGY2YzZkNThlYzZlNWMxMTY0Y2IyN2ZhNWU0MTYxOGI0YjgxNDJm
MDIuLmI5MzA2MDc1OTlhN2MyYTFkZDAzMDQ4MGE3MmJlOGFkM2RiZDIwNGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaApAQCAtMzgs
NyArMzgsNyBAQCBpbmxpbmUgSlNGdW5jdGlvbiogSlNGdW5jdGlvbjo6Y3JlYXRlV2l0aEludmFs
aWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludCgKICAgICByZXR1cm4gY3JlYXRlSW1wbCh2bSwg
ZXhlY3V0YWJsZSwgc2NvcGUpOwogfQogCi1pbmxpbmUgSlNGdW5jdGlvbjo6SlNGdW5jdGlvbihW
TSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUpCitp
bmxpbmUgSlNGdW5jdGlvbjo6SlNGdW5jdGlvbihWTSYgdm0sIEV4ZWN1dGFibGVCYXNlKiBleGVj
dXRhYmxlLCBKU1Njb3BlKiBzY29wZSkKICAgICA6IEJhc2Uodm0sIHNjb3BlLCBzY29wZS0+Z2xv
YmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCkpCiAgICAgLCBtX2V4ZWN1dGFibGUodm0s
IHRoaXMsIGV4ZWN1dGFibGUpCiAgICAgLCBtX3JhcmVEYXRhKCkKQEAgLTU0LDYgKzU0LDggQEAg
aW5saW5lIEZ1bmN0aW9uRXhlY3V0YWJsZSogSlNGdW5jdGlvbjo6anNFeGVjdXRhYmxlKCkgY29u
c3QKIGlubGluZSBib29sIEpTRnVuY3Rpb246OmlzSG9zdEZ1bmN0aW9uKCkgY29uc3QKIHsKICAg
ICBBU1NFUlQobV9leGVjdXRhYmxlKTsKKyAgICBpZiAobV9leGVjdXRhYmxlLT5pc1dlYkFzc2Vt
Ymx5RXhlY3V0YWJsZSgpKSAvLyBGSVhNRTogaGFja3kKKyAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgcmV0dXJuIG1fZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAppbmRleCA0MDMyNmNlMGYzMjlmYTdjN2JiYzk5ZjQ0
NjQyOGZlOTZjOTEyNGIzLi43NmVmZTgyMjQyYWFlMTNlMGU2MTU0YWYwNTIyYzZkODY3MDMwNjVl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaApAQCAtNzQsNiArNzQsOCBA
QCBlbnVtIEpTVHlwZSA6IHVpbnQ4X3QgewogCiAgICAgTmFtZVNjb3BlT2JqZWN0VHlwZSwKIAor
ICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZVR5cGUsIC8vIEZJWE1FOiBNb3ZlIGl0IGFib3ZlLgor
CiAgICAgR2xvYmFsT2JqZWN0VHlwZSwKICAgICBBY3RpdmF0aW9uT2JqZWN0VHlwZSwKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IDc2NzQxZGQ4YWVhMzdmZjU3Y2NhNGNm
NjM2YmZjMzJiYjQyOWNjNDEuLjRkNWY1ZGYzNTY5YWM2MjVmOTIzMGM5NGRiMjc4ODgzMDhiOWJj
YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTIyMCw2ICsyMjAsNyBA
QCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgZXZhbEV4ZWN1
dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBFdmFsRXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJl
KCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHByb2dyYW1FeGVjdXRhYmxlU3RydWN0dXJlLnNl
dCgqdGhpcywgUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKICAgICBmdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBGdW5j
dGlvbkV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAg
ICB3ZWJBc3NlbWJseUV4ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWJBc3NlbWJseUV4
ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICByZWdF
eHBTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBSZWdFeHA6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwg
anNOdWxsKCkpKTsKICAgICBzeW1ib2xTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTeW1ib2w6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBzeW1ib2xUYWJsZVN0cnVjdHVy
ZS5zZXQoKnRoaXMsIFN5bWJvbFRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVs
bCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCBmNzhmOWViOTY0NjBhZTlm
ZGJmZjkxNjljMjg0YTg1ODQ4MTZjNzM5Li4zNzNkNDBkYzdmOThlNWVjNTg1NjhkNGJiNWIzNmQ0
ZmY5MTFjNmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTI1OSw2ICsyNTks
NyBAQCBwdWJsaWM6CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZXZhbEV4ZWN1dGFibGVTdHJ1Y3R1
cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvZ3JhbUV4ZWN1dGFibGVTdHJ1Y3R1cmU7CiAg
ICAgU3Ryb25nPFN0cnVjdHVyZT4gZnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlOworICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5RXhlY3V0YWJsZVN0cnVjdHVyZTsKICAgICBTdHJv
bmc8U3RydWN0dXJlPiByZWdFeHBTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3lt
Ym9sU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN5bWJvbFRhYmxlU3RydWN0dXJl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUpJVENvbXBpbGVy
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21KSVRDb21waWxlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOTg4YzZmNzk1ZThmNzJjNjc2Y2RmY2I4OTVkM2JiNmRkMDhiNmVkOAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21KSVRDb21waWxlci5j
cHAKQEAgLTAsMCArMSwxMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLyoKKyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNp
b24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2Vw
dCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgWW91IG1heSBvYnRhaW4gYSBjb3B5
IG9mIHRoZSBMaWNlbnNlIGF0CisKKyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElD
RU5TRS0yLjAKKworIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQg
dG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBp
cyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIFdJVEhPVVQgV0FSUkFOVElFUyBP
UiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIFNl
ZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNz
aW9ucyBhbmQKKyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtSklUQ29tcGlsZXIuaCIKKworI2luY2x1ZGUgIkpJ
VENvZGUuaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkxpbmtC
dWZmZXIuaCIKKyNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgorI2lu
Y2x1ZGUgIlJlZ2lzdGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgV2FzbSB7
CisKK2NsYXNzIEp1bXBTY29wZSB7CitwdWJsaWM6CisgICAgSnVtcFNjb3BlKE1hY3JvQXNzZW1i
bGVyKiBtYWNyb0Fzc2VtYmxlcikKKyAgICAgICAgOiBtX21hY3JvQXNzZW1ibGVyKG1hY3JvQXNz
ZW1ibGVyKQorICAgICAgICAsIG1fbGlua2VkKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBK
dW1wU2NvcGUoTWFjcm9Bc3NlbWJsZXIqIG1hY3JvQXNzZW1ibGVyLCBjb25zdCBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwmIGxhYmVsKQorICAgICAgICA6IG1fbWFjcm9Bc3NlbWJsZXIobWFjcm9Bc3Nl
bWJsZXIpCisgICAgICAgICwgbV9saW5rZWQodHJ1ZSkKKyAgICAgICAgLCBtX2xhYmVsKGxhYmVs
KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGp1bXAoKQorICAgIHsKKyAgICAgICAgaWYgKG1f
bGlua2VkKQorICAgICAgICAgICAgbV9tYWNyb0Fzc2VtYmxlci0+anVtcChtX2xhYmVsKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbV9qdW1wTGlzdC5hcHBlbmQobV9tYWNyb0Fzc2VtYmxl
ci0+anVtcCgpKTsKKyAgICB9CisKKyAgICB2b2lkIGxpbmsoKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFtX2xpbmtlZCk7CisgICAgICAgIG1fanVtcExpc3QubGluayhtX21hY3JvQXNzZW1ibGVy
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWFjcm9Bc3NlbWJsZXIqIG1fbWFjcm9Bc3NlbWJs
ZXI7CisgICAgYm9vbCBtX2xpbmtlZDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9sYWJl
bDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbV9qdW1wTGlzdDsKK307CisKK1JlZlB0
cjxKSVRDb2RlPiBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKFZNJiB2bSwgc2l6ZV90IGZ1
bmN0aW9uSW5kZXgpCit7CisgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKyAgICBlbWl0UHV0
SW1tZWRpYXRlVG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIEpTU3RhY2s6OkNvZGVCbG9j
ayk7CisKKyAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IG1fbW9kdWxlLT5tX3NpZ25h
dHVyZXNbbV9tb2R1bGUtPm1fZnVuY1NpZ25hdHVyZXNbZnVuY3Rpb25JbmRleF1dOworICAgIG1f
Y3VycmVudFJldHVyblR5cGUgPSBzaWduYXR1cmUucmV0dXJuVHlwZTsKKyAgICBwYXJzZUFyZ3Vt
ZW50cyhzaWduYXR1cmUpOworCisgICAgLy8gRklYTUU6IENhbGN1bGF0ZSB0aGUgYWN0dWFsIGhl
aWdodC4gKEJlIGNhcmVmdWwgYWJvdXQgY2FsbHMuKQorICAgIG1fc3RhY2tIZWlnaHQgPSBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgc2lnbmF0dXJl
LmFyZ3VtZW50cy5zaXplKCkgKyA4KSAqIHNpemVvZihSZWdpc3Rlcik7CisgICAgYWxsb2NhdGVT
cGFjZU9uU3RhY2soKTsKKworICAgIHBhcnNlVmFycygpOworICAgIHBhcnNlU3RtdExpc3QoKTsK
KworICAgIC8vIEZJWE1FOiBTa2lwIHRoZXNlIGlmIHRoZSBsYXN0IHN0YXRlbWVudCBpcyBhIHJl
dHVybiBzdGF0ZW1lbnQuCisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpKSwgR1BSSW5mbzo6cmVnVDApOyAvLyBGSVhNRTogU2hvdWxkIHdlIHJldHVy
biB1bmRlZmluZWQ/CisgICAgZGVhbGxvY2F0ZVNwYWNlT25TdGFjaygpOworICAgIGVtaXRGdW5j
dGlvbkVwaWxvZ3VlKCk7CisgICAgcmV0KCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KHZtLCAqdGhpcywgMCwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCk7CisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIHdpdGhBcml0eUNoZWNrOworICAgIENvZGVSZWYgcmVzdWx0ID0gRklOQUxJ
WkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJCYXNlbGluZSBKSVQgY29kZSBmb3IgV2ViQXNzZW1ibHki
KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFy
aXR5Q2hlY2ssIEpJVENvZGU6OkJhc2VsaW5lSklUKSk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6
OmFsbG9jYXRlU3BhY2VPblN0YWNrKCkKK3sKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1tX3N0
YWNrSGVpZ2h0KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworfQorCit2b2lkIEpJVENvbXBpbGVy
OjpkZWFsbG9jYXRlU3BhY2VPblN0YWNrKCkKK3sKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1f
c3RhY2tIZWlnaHQpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cit9CisKK3ZvaWQgSklUQ29tcGls
ZXI6OnBhcnNlQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKQoreworICAgIHNp
emVfdCBhcmd1bWVudENvdW50ID0gc2lnbmF0dXJlLmFyZ3VtZW50cy5zaXplKCk7CisgICAgZm9y
ICh1aW50MzJfdCBhcmdJbmRleCA9IDA7IGFyZ0luZGV4IDwgYXJndW1lbnRDb3VudDsgKythcmdJ
bmRleCkgeworICAgICAgICBUeXBlIHR5cGUgPSBzaWduYXR1cmUuYXJndW1lbnRzW2FyZ0luZGV4
XTsKKyAgICAgICAgbV9jdXJyZW50TG9jYWxUeXBlcy5hcHBlbmQodHlwZSk7CisgICAgICAgIHN3
aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgICAgIGxvYWQz
MihBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAoYXJnSW5kZXggKyAxICsgQ2Fs
bEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5m
bzo6cmVnVDApOworICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgc3RhY2tBZGRy
ZXNzKGFyZ0luZGV4KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpG
MzI6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBj
YXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAgIGxvYWQ2NChBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCAoYXJnSW5kZXggKyAxICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZz
ZXQoKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAg
dW5ib3hEb3VibGVXaXRob3V0QXNzZXJ0aW9ucyhHUFJJbmZvOjpyZWdUMCwgRlBSSW5mbzo6ZnBS
ZWdUMCk7CisgICAgICAgICAgICBzdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBzdGFja0Fk
ZHJlc3MoYXJnSW5kZXgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VWYXJzKCkKK3sKKyAgICB1aW50MzJfdCBu
dW1iZXJPZkkzMlZhcnMgPSAwOworICAgIHVpbnQzMl90IG51bWJlck9mRjMyVmFycyA9IDA7Cisg
ICAgdWludDMyX3QgbnVtYmVyT2ZGNjRWYXJzID0gMDsKKworICAgIFZhclR5cGVzIHZhclR5cGVz
OworICAgIFZhclR5cGVzV2l0aEltbSB2YXJUeXBlc1dpdGhJbW07CisgICAgdWludDhfdCBpbW07
CisgICAgaWYgKG1fbW9kdWxlLT5tX3JlYWRlci5jb2RlKCZ2YXJUeXBlcywgJnZhclR5cGVzV2l0
aEltbSwgJmltbSkpIHsKKyAgICAgICAgaWYgKHZhclR5cGVzICYgVmFyVHlwZXM6OkkzMikKKyAg
ICAgICAgICAgIG51bWJlck9mSTMyVmFycyA9IG1fbW9kdWxlLT5tX3JlYWRlci5pbW1VMzIoKTsK
KyAgICAgICAgaWYgKHZhclR5cGVzICYgVmFyVHlwZXM6OkYzMikKKyAgICAgICAgICAgIG51bWJl
ck9mRjMyVmFycyA9IG1fbW9kdWxlLT5tX3JlYWRlci5pbW1VMzIoKTsKKyAgICAgICAgaWYgKHZh
clR5cGVzICYgVmFyVHlwZXM6OkY2NCkKKyAgICAgICAgICAgIG51bWJlck9mRjY0VmFycyA9IG1f
bW9kdWxlLT5tX3JlYWRlci5pbW1VMzIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbnVtYmVyT2ZJ
MzJWYXJzID0gaW1tOworCisgICAgdWludDMyX3QgbnVtYmVyT2ZWYXJzID0gbnVtYmVyT2ZJMzJW
YXJzICsgbnVtYmVyT2ZGMzJWYXJzICsgbnVtYmVyT2ZGNjRWYXJzOworICAgIGlmIChudW1iZXJP
ZlZhcnMgPiAwKSB7CisgICAgICAgIHVpbnQzMl90IGxvY2FsSW5kZXggPSBtX2N1cnJlbnRMb2Nh
bFR5cGVzLnNpemUoKTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9m
STMyVmFyczsgKytpKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRMb2NhbFR5cGVzLmFwcGVuZChU
eXBlOjpJMzIpOworICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIHN0YWNrQWRk
cmVzcyhsb2NhbEluZGV4KyspKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgbnVtYmVyT2ZGMzJWYXJzOyArK2kpIHsKKyAgICAgICAgICAgIG1fY3VycmVudExv
Y2FsVHlwZXMuYXBwZW5kKFR5cGU6OkYzMik7CisgICAgICAgICAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMigwKSwgc3RhY2tBZGRyZXNzKGxvY2FsSW5kZXgrKykpOworICAgICAgICB9CisgICAgICAg
IGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkY2NFZhcnM7ICsraSkgeworICAgICAg
ICAgICAgbV9jdXJyZW50TG9jYWxUeXBlcy5hcHBlbmQoVHlwZTo6RjY0KTsKKyAgICAgICAgICAg
IHN0b3JlNjQoVHJ1c3RlZEltbTY0KDApLCBzdGFja0FkZHJlc3MobG9jYWxJbmRleCsrKSk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlU3RtdCgpCit7Cisg
ICAgU3RtdCBzdG10OworICAgIFN0bXRXaXRoSW1tIHN0bXRXaXRoSW1tOworICAgIHVpbnQ4X3Qg
aW1tOworICAgIGlmIChtX21vZHVsZS0+bV9yZWFkZXIuY29kZSgmc3RtdCwgJnN0bXRXaXRoSW1t
LCAmaW1tKSkgeworICAgICAgICBzd2l0Y2ggKHN0bXQpIHsKKyAgICAgICAgY2FzZSBTdG10OjpT
ZXRMb2M6CisgICAgICAgICAgICBwYXJzZVNldExvY2FsKDApOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgU3RtdDo6U2V0R2xvOgorICAgICAgICBjYXNlIFN0bXQ6OkkzMlN0b3Jl
ODoKKyAgICAgICAgY2FzZSBTdG10OjpJMzJTdG9yZU9mZjg6CisgICAgICAgIGNhc2UgU3RtdDo6
STMyU3RvcmUxNjoKKyAgICAgICAgY2FzZSBTdG10OjpJMzJTdG9yZU9mZjE2OgorICAgICAgICBj
YXNlIFN0bXQ6OkkzMlN0b3JlMzI6CisgICAgICAgIGNhc2UgU3RtdDo6STMyU3RvcmVPZmYzMjoK
KyAgICAgICAgY2FzZSBTdG10OjpGMzJTdG9yZToKKyAgICAgICAgY2FzZSBTdG10OjpGMzJTdG9y
ZU9mZjoKKyAgICAgICAgY2FzZSBTdG10OjpGNjRTdG9yZToKKyAgICAgICAgY2FzZSBTdG10OjpG
NjRTdG9yZU9mZjoKKyAgICAgICAgY2FzZSBTdG10OjpDYWxsSW50OgorICAgICAgICBjYXNlIFN0
bXQ6OkNhbGxJbmQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBjYXNlIFN0bXQ6OkNhbGxJbXA6CisgICAgICAgICAgICBwYXJzZUNhbGxJbXBvcnQo
UmV0dXJuVHlwZTo6Vm9pZCwgMCk7IC8vIEZJWE1FOiBJcyBpdCByZWFsbHkgVm9pZD8KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0bXQ6OlJldDoKKyAgICAgICAgICAgIHBhcnNl
UmV0dXJuU3RtdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6OkJs
b2NrOgorICAgICAgICAgICAgcGFyc2VCbG9ja1N0bXQoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgY2FzZSBTdG10OjpJZlRoZW46CisgICAgICAgICAgICBwYXJzZUlmU3RtdCgpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6OklmRWxzZToKKyAgICAgICAg
ICAgIHBhcnNlSWZFbHNlU3RtdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNl
IFN0bXQ6OldoaWxlOgorICAgICAgICAgICAgcGFyc2VXaGlsZVN0bXQoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgY2FzZSBTdG10OjpEbzoKKyAgICAgICAgICAgIHBhcnNlRG9TdG10
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU3RtdDo6TGFiZWw6CisgICAg
ICAgICAgICBwYXJzZUxhYmVsU3RtdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBj
YXNlIFN0bXQ6OkJyZWFrOgorICAgICAgICAgICAgcGFyc2VCcmVha1N0bXQoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdG10OjpCcmVha0xhYmVsOgorICAgICAgICAgICAg
cGFyc2VCcmVha0xhYmVsU3RtdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNl
IFN0bXQ6OkNvbnRpbnVlOgorICAgICAgICAgICAgcGFyc2VDb250aW51ZVN0bXQoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0bXQ6OkNvbnRpbnVlTGFiZWw6CisgICAgICAg
ICAgICBwYXJzZUNvbnRpbnVlTGFiZWxTdG10KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGNhc2UgU3RtdDo6U3dpdGNoOgorICAgICAgICAgICAgcGFyc2VTd2l0Y2hTdG10KCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBz
d2l0Y2ggKHN0bXRXaXRoSW1tKSB7CisgICAgICAgIGNhc2UgU3RtdFdpdGhJbW06OlNldExvYzoK
KyAgICAgICAgICAgIHBhcnNlU2V0TG9jYWwoaW1tLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFN0bXRXaXRoSW1tOjpTZXRHbG86CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUdldExvY2FsKGludCBkc3QpCit7CisgICAgdWlu
dDMyX3QgaW1tID0gbV9tb2R1bGUtPm1fcmVhZGVyLmltbVUzMigpOworICAgIHN3aXRjaCAobV9j
dXJyZW50TG9jYWxUeXBlc1tpbW1dKSB7CisgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgY2FzZSBU
eXBlOjpGMzI6CisgICAgICAgIGxvYWQzMihzdGFja0FkZHJlc3MoaW1tKSwgR1BSSW5mbzo6cmVn
VDApOworICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRz
dCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgbG9hZDY0
KHN0YWNrQWRkcmVzcyhpbW0pLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIHN0b3JlNjQoR1BS
SW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
fQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZVNldExvY2FsKHVpbnQzMl90IGltbSwgaW50IGRz
dCkKK3sKKyAgICBUeXBlIHR5cGUgPSBtX2N1cnJlbnRMb2NhbFR5cGVzW2ltbV07CisgICAgcGFy
c2VFeHByKFJldHVyblR5cGUodHlwZSksIGRzdCk7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBUeXBlOjpJMzI6CisgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgIGxvYWQzMih0ZW1w
b3JhcnlBZGRyZXNzKGRzdCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgc3RvcmUzMihHUFJJ
bmZvOjpyZWdUMCwgc3RhY2tBZGRyZXNzKGltbSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFR5cGU6OkY2NDoKKyAgICAgICAgbG9hZDY0KHRlbXBvcmFyeUFkZHJlc3MoZHN0KSwgR1BSSW5m
bzo6cmVnVDApOworICAgICAgICBzdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBzdGFja0FkZHJlc3Mo
aW1tKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZVNl
dExvY2FsKGludCBkc3QpCit7CisgICAgcGFyc2VTZXRMb2NhbChtX21vZHVsZS0+bV9yZWFkZXIu
aW1tVTMyKCksIGRzdCk7Cit9CisKK3N0YXRpYyBjb25zdCB2b2lkKiBKU0NfSE9TVF9DQUxMIGdl
dEFycmF5QnVmZmVyRGF0YShFeGVjU3RhdGUqLCBNb2R1bGUqIG1vZHVsZSkKK3sKKyAgICAvLyBG
SVhNRTogRG8gd2UgcmVhbGx5IGhhdmUgdG8gZG8gdGhpcz8KKyAgICAvLyBUT0RPOiBVc2UgdGhl
c2UgdHdvIGxpbmVzPworICAgIC8vIFZNKiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgLy8gTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgcmV0dXJuIG1vZHVs
ZS0+YXJyYXlCdWZmZXJEYXRhKCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlTG9hZChS
ZXR1cm5UeXBlIHJldHVyblR5cGUsIGJvb2wgaGFzT2Zmc2V0LCBpbnQgZHN0KQoreworICAgIC8v
IFRPRE86IENoZWNrIGZvciBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KKyAgICB1aW50MzJfdCBvZmZz
ZXQgPSBoYXNPZmZzZXQgPyBtX21vZHVsZS0+bV9yZWFkZXIuaW1tVTMyKCkgOiAwOworICAgIHVp
bnQzMl90IHUzMjsKKyAgICBpZiAobV9tb2R1bGUtPm1fcmVhZGVyLmlmSTMyTGl0KG1fbW9kdWxl
LT5tX2NvbnN0YW50STMycywgJnUzMikpCisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKHUz
MiArIG9mZnNldCksIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgZWxzZSB7CisgICAgICAg
IHBhcnNlRXhwcihSZXR1cm5UeXBlOjpJMzIsIGRzdCk7CisgICAgICAgIGxvYWQzMih0ZW1wb3Jh
cnlBZGRyZXNzKGRzdCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgaWYgKG9mZnNldCkKKyAg
ICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMihvZmZzZXQpLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7Cisg
ICAgfQorCisgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQorICAgICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKC1tYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKyAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3Rl
ZEltbVB0cihtX21vZHVsZSkpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8
dm9pZCo+KGdldEFycmF5QnVmZmVyRGF0YSkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBj
YWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbCkKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIGxvYWQzMih0ZW1wb3Jh
cnlBZGRyZXNzKGRzdCksIEdQUkluZm86OnJlZ1QxKTsKKyAgICBCYXNlSW5kZXggYWRkcmVzcyA9
IEJhc2VJbmRleChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDEsIFRpbWVz
T25lKTsKKworICAgIHN3aXRjaCAocmV0dXJuVHlwZSkgeworICAgIGNhc2UgUmV0dXJuVHlwZTo6
STMyOgorICAgICAgICBsb2FkMzIoYWRkcmVzcywgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBz
dG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFJldHVyblR5cGU6OkY2NDoKKyAgICAgICAgbG9hZDY0KGFkZHJlc3Ms
IEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgdGVtcG9y
YXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUQ29tcGls
ZXI6OnBhcnNlUmV0dXJuU3RtdCgpCit7CisgICAgc3dpdGNoIChtX2N1cnJlbnRSZXR1cm5UeXBl
KSB7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpJMzI6CisgICAgICAgIHBhcnNlRXhwcihSZXR1cm5U
eXBlOjpJMzIsIDApOworICAgICAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcygwKSwgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBvcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFJldHVyblR5cGU6OkYzMjoKKyAgICAgICAgcGFyc2VFeHByKFJldHVyblR5cGU6OkYzMiwg
MCk7CisgICAgICAgIGxvYWREb3VibGUodGVtcG9yYXJ5QWRkcmVzcygwKSwgRlBSSW5mbzo6ZnBS
ZWdUMCk7IC8vIEZJWE1FOiBUaGlzIGxvYWRzIDY0IGJpdHMhCisgICAgICAgIGNvbnZlcnRGbG9h
dFRvRG91YmxlKEZQUkluZm86OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBi
b3hEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFJldHVyblR5cGU6OkY2NDoKKyAgICAgICAgcGFyc2VFeHBy
KFJldHVyblR5cGU6OkY2NCwgMCk7CisgICAgICAgIGxvYWREb3VibGUodGVtcG9yYXJ5QWRkcmVz
cygwKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgIGJveERvdWJsZShGUFJJbmZvOjpmcFJl
Z1QwLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UmV0dXJuVHlwZTo6Vm9pZDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVhbGxvY2F0
ZVNwYWNlT25TdGFjaygpOworICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgcmV0KCk7
Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlU3RtdExpc3QoKQoreworICAgIHVpbnQzMl90
IG51bWJlck9mU3RtdHMgPSBtX21vZHVsZS0+bV9yZWFkZXIuaW1tVTMyKCk7CisgICAgZm9yICh1
aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mU3RtdHM7ICsraSkKKyAgICAgICAgcGFyc2VTdG10
KCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlQmxvY2tTdG10KCkKK3sKKyAgICBwYXJz
ZVN0bXRMaXN0KCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlSWZTdG10KCkKK3sKKyAg
ICBwYXJzZUV4cHIoUmV0dXJuVHlwZTo6STMyLCAwKTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRk
cmVzcygwKSwgR1BSSW5mbzo6cmVnVDApOworICAgIEp1bXAgZW5kID0gYnJhbmNoVGVzdDMyKFpl
cm8sIEdQUkluZm86OnJlZ1QwKTsKKyAgICBwYXJzZVN0bXQoKTsKKyAgICBlbmQubGluayh0aGlz
KTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VJZkVsc2VTdG10KCkKK3sKKyAgICBwYXJz
ZUV4cHIoUmV0dXJuVHlwZTo6STMyLCAwKTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcygw
KSwgR1BSSW5mbzo6cmVnVDApOworICAgIEp1bXAgZWxzID0gYnJhbmNoVGVzdDMyKFplcm8sIEdQ
UkluZm86OnJlZ1QwKTsKKyAgICBwYXJzZVN0bXQoKTsKKyAgICBKdW1wIGVuZCA9IGp1bXAoKTsK
KyAgICBlbHMubGluayh0aGlzKTsKKyAgICBwYXJzZVN0bXQoKTsKKyAgICBlbmQubGluayh0aGlz
KTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VXaGlsZVN0bXQoKQoreworICAgIEp1bXBT
Y29wZSBjb250aW51ZUp1bXBTY29wZSh0aGlzLCBsYWJlbCgpKTsKKyAgICBwdXNoQ29udGludWVK
dW1wU2NvcGUoJmNvbnRpbnVlSnVtcFNjb3BlKTsKKworICAgIEp1bXBMaXN0IGJyZWFrSnVtcExp
c3Q7CisgICAgcHVzaEJyZWFrSnVtcExpc3QoJmJyZWFrSnVtcExpc3QpOworCisgICAgcGFyc2VF
eHByKFJldHVyblR5cGU6OkkzMiwgMCk7CisgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoMCks
IEdQUkluZm86OnJlZ1QwKTsKKyAgICBKdW1wIGVuZCA9IGJyYW5jaFRlc3QzMihaZXJvLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgcGFyc2VTdG10KCk7CisgICAgY29udGludWVKdW1wU2NvcGUuanVt
cCgpOworICAgIGVuZC5saW5rKHRoaXMpOworICAgIGJyZWFrSnVtcExpc3QubGluayh0aGlzKTsK
KworICAgIHBvcEJyZWFrSnVtcExpc3QoKTsKKworICAgIHBvcENvbnRpbnVlSnVtcFNjb3BlKCk7
Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlRG9TdG10KCkKK3sKKyAgICBKdW1wU2NvcGUg
Y29udGludWVKdW1wU2NvcGUodGhpcyk7CisgICAgcHVzaENvbnRpbnVlSnVtcFNjb3BlKCZjb250
aW51ZUp1bXBTY29wZSk7CisKKyAgICBKdW1wTGlzdCBicmVha0p1bXBMaXN0OworICAgIHB1c2hC
cmVha0p1bXBMaXN0KCZicmVha0p1bXBMaXN0KTsKKworICAgIExhYmVsIHN0YXJ0ID0gbGFiZWwo
KTsKKyAgICBwYXJzZVN0bXQoKTsKKyAgICBjb250aW51ZUp1bXBTY29wZS5saW5rKCk7CisgICAg
cGFyc2VFeHByKFJldHVyblR5cGU6OkkzMiwgMCk7CisgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJl
c3MoMCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBKdW1wIGp1bXBUb1N0YXJ0ID0gYnJhbmNoVGVz
dDMyKE5vblplcm8sIEdQUkluZm86OnJlZ1QwKTsKKyAgICBqdW1wVG9TdGFydC5saW5rVG8oc3Rh
cnQsIHRoaXMpOworICAgIGJyZWFrSnVtcExpc3QubGluayh0aGlzKTsKKworICAgIHBvcEJyZWFr
SnVtcExpc3QoKTsKKworICAgIHBvcENvbnRpbnVlSnVtcFNjb3BlKCk7Cit9CisKK3ZvaWQgSklU
Q29tcGlsZXI6OnBhcnNlTGFiZWxTdG10KCkKK3sKKyAgICBMYWJlbCBjb250aW51ZUxhYmVsID0g
bGFiZWwoKTsKKyAgICBKdW1wTGlzdCBicmVha0p1bXBMaXN0OworICAgIHB1c2hDb250aW51ZUxh
YmVsTGFiZWwoJmNvbnRpbnVlTGFiZWwpOworICAgIHB1c2hCcmVha0xhYmVsSnVtcExpc3QoJmJy
ZWFrSnVtcExpc3QpOworICAgIHBhcnNlU3RtdCgpOworICAgIGJyZWFrSnVtcExpc3QubGluayh0
aGlzKTsKKyAgICBwb3BCcmVha0xhYmVsSnVtcExpc3QoKTsKKyAgICBwb3BDb250aW51ZUxhYmVs
TGFiZWwoKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VCcmVha1N0bXQoKQoreworICAg
IHRvcEJyZWFrSnVtcExpc3QoKS0+YXBwZW5kKGp1bXAoKSk7Cit9CisKK3ZvaWQgSklUQ29tcGls
ZXI6OnBhcnNlQnJlYWtMYWJlbFN0bXQoKQoreworICAgIHVpbnQzMl90IGluZGV4ID0gbV9tb2R1
bGUtPm1fcmVhZGVyLmltbVUzMigpOworICAgIGJyZWFrTGFiZWxKdW1wTGlzdChpbmRleCktPmFw
cGVuZChqdW1wKCkpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUNvbnRpbnVlU3RtdCgp
Cit7CisgICAgdG9wQ29udGludWVKdW1wU2NvcGUoKS0+anVtcCgpOworfQorCit2b2lkIEpJVENv
bXBpbGVyOjpwYXJzZUNvbnRpbnVlTGFiZWxTdG10KCkKK3sKKyAgICB1aW50MzJfdCBpbmRleCA9
IG1fbW9kdWxlLT5tX3JlYWRlci5pbW1VMzIoKTsKKyAgICBqdW1wKCpjb250aW51ZUxhYmVsTGFi
ZWwoaW5kZXgpKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VTd2l0Y2hTdG10KCkKK3sK
KyAgICBKdW1wTGlzdCBicmVha0p1bXBMaXN0OworICAgIHB1c2hCcmVha0p1bXBMaXN0KCZicmVh
a0p1bXBMaXN0KTsKKworICAgIHVpbnQzMl90IG51bWJlck9mQ2FzZXMgPSBtX21vZHVsZS0+bV9y
ZWFkZXIuaW1tVTMyKCk7CisgICAgcGFyc2VFeHByKFJldHVyblR5cGU6OkkzMiwgMCk7CisgICAg
bG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoMCksIEdQUkluZm86OnJlZ1QwKTsKKworICAgIEp1bXAg
dGFibGUgPSBqdW1wKCk7CisKKyAgICBWZWN0b3I8TGFiZWw+IGxhYmVsczsKKyAgICBWZWN0b3I8
aW50MzJfdD4gaW1tczsKKyAgICBMYWJlbCBkZWZhdWx0TGFiZWw7CisgICAgYm9vbCBoYXNEZWZh
dWx0ID0gZmFsc2U7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZDYXNl
czsgKytpKSB7CisgICAgICAgIHN3aXRjaCAobV9tb2R1bGUtPm1fcmVhZGVyLnN3aXRjaENhc2Uo
KSkgeworICAgICAgICBjYXNlIFN3aXRjaENhc2U6OkNhc2UwOgorICAgICAgICAgICAgbGFiZWxz
LmFwcGVuZChsYWJlbCgpKTsKKyAgICAgICAgICAgIGltbXMuYXBwZW5kKG1fbW9kdWxlLT5tX3Jl
YWRlci5pbW1TMzIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTd2l0Y2hD
YXNlOjpDYXNlMToKKyAgICAgICAgICAgIGxhYmVscy5hcHBlbmQobGFiZWwoKSk7CisgICAgICAg
ICAgICBpbW1zLmFwcGVuZChtX21vZHVsZS0+bV9yZWFkZXIuaW1tUzMyKCkpOworICAgICAgICAg
ICAgcGFyc2VTdG10KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTd2l0Y2hD
YXNlOjpDYXNlTjoKKyAgICAgICAgICAgIGxhYmVscy5hcHBlbmQobGFiZWwoKSk7CisgICAgICAg
ICAgICBpbW1zLmFwcGVuZChtX21vZHVsZS0+bV9yZWFkZXIuaW1tUzMyKCkpOworICAgICAgICAg
ICAgcGFyc2VTdG10TGlzdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3dp
dGNoQ2FzZTo6RGVmYXVsdDA6CisgICAgICAgICAgICBkZWZhdWx0TGFiZWwgPSBsYWJlbCgpOwor
ICAgICAgICAgICAgaGFzRGVmYXVsdCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBTd2l0Y2hDYXNlOjpEZWZhdWx0MToKKyAgICAgICAgICAgIGRlZmF1bHRMYWJlbCA9
IGxhYmVsKCk7CisgICAgICAgICAgICBoYXNEZWZhdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHBh
cnNlU3RtdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3dpdGNoQ2FzZTo6
RGVmYXVsdE46CisgICAgICAgICAgICBkZWZhdWx0TGFiZWwgPSBsYWJlbCgpOworICAgICAgICAg
ICAgaGFzRGVmYXVsdCA9IHRydWU7CisgICAgICAgICAgICBwYXJzZVN0bXRMaXN0KCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKdW1wIGVuZCA9IGp1
bXAoKTsKKyAgICB0YWJsZS5saW5rKHRoaXMpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsYWJlbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgSnVtcCBqbXAgPSBicmFuY2gzMihFcXVh
bCwgR1BSSW5mbzo6cmVnVDAsIFRydXN0ZWRJbW0zMihpbW1zW2ldKSk7CisgICAgICAgIGptcC5s
aW5rVG8obGFiZWxzW2ldLCB0aGlzKTsKKyAgICB9CisgICAgaWYgKGhhc0RlZmF1bHQpCisgICAg
ICAgIGp1bXAoZGVmYXVsdExhYmVsKTsKKworICAgIGVuZC5saW5rKHRoaXMpOworCisgICAgYnJl
YWtKdW1wTGlzdC5saW5rKHRoaXMpOworICAgIHBvcEJyZWFrSnVtcExpc3QoKTsKK30KKwordm9p
ZCBKSVRDb21waWxlcjo6cGFyc2VFeHByKFJldHVyblR5cGUgcmV0dXJuVHlwZSwgaW50IGRzdCkK
K3sKKyAgICBzd2l0Y2ggKHJldHVyblR5cGUpIHsKKyAgICBjYXNlIFJldHVyblR5cGU6OkkzMjoK
KyAgICAgICAgcGFyc2VFeHBySTMyKGRzdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmV0
dXJuVHlwZTo6RjY0OgorICAgICAgICBwYXJzZUV4cHJGNjQoZHN0KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBSZXR1cm5UeXBlOjpWb2lkOgorICAgICAgICBwYXJzZUV4cHJWb2lkKGRzdCk7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUV4cHJJMzIo
aW50IGRzdCkKK3sKKyAgICBJMzIgaTMyOworICAgIEkzMldpdGhJbW0gaTMyV2l0aEltbTsKKyAg
ICB1aW50OF90IGltbTsKKworICAgIGlmIChtX21vZHVsZS0+bV9yZWFkZXIuY29kZSgmaTMyLCAm
aTMyV2l0aEltbSwgJmltbSkpIHsKKyAgICAgICAgc3dpdGNoIChpMzIpIHsKKyAgICAgICAgY2Fz
ZSBJMzI6OkxpdEltbToKKyAgICAgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKG1fbW9kdWxl
LT5tX3JlYWRlci5pbW1VMzIoKSksIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkxpdFBvb2w6CisgICAgICAgIGNhc2UgSTMyOjpH
ZXRMb2M6CisgICAgICAgICAgICBwYXJzZUdldExvY2FsKGRzdCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJMzI6OkdldEdsbzoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgSTMyOjpTZXRMb2M6CisgICAgICAgICAgICBw
YXJzZVNldExvY2FsKGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6
OlNldEdsbzoKKyAgICAgICAgY2FzZSBJMzI6OlNMb2FkODoKKyAgICAgICAgY2FzZSBJMzI6OlNM
b2FkT2ZmODoKKyAgICAgICAgY2FzZSBJMzI6OlVMb2FkODoKKyAgICAgICAgY2FzZSBJMzI6OlVM
b2FkT2ZmODoKKyAgICAgICAgY2FzZSBJMzI6OlNMb2FkMTY6CisgICAgICAgIGNhc2UgSTMyOjpT
TG9hZE9mZjE2OgorICAgICAgICBjYXNlIEkzMjo6VUxvYWQxNjoKKyAgICAgICAgY2FzZSBJMzI6
OlVMb2FkT2ZmMTY6CisgICAgICAgIGNhc2UgSTMyOjpMb2FkMzI6CisgICAgICAgICAgICBwYXJz
ZUxvYWQoUmV0dXJuVHlwZTo6STMyLCBmYWxzZSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEkzMjo6TG9hZE9mZjMyOgorICAgICAgICAgICAgcGFyc2VMb2FkKFJldHVy
blR5cGU6OkkzMiwgdHJ1ZSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEkzMjo6U3RvcmU4OgorICAgICAgICBjYXNlIEkzMjo6U3RvcmVPZmY4OgorICAgICAgICBjYXNl
IEkzMjo6U3RvcmUxNjoKKyAgICAgICAgY2FzZSBJMzI6OlN0b3JlT2ZmMTY6CisgICAgICAgIGNh
c2UgSTMyOjpTdG9yZTMyOgorICAgICAgICBjYXNlIEkzMjo6U3RvcmVPZmYzMjoKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgSTMyOjpDYWxs
SW50OgorICAgICAgICAgICAgcGFyc2VDYWxsSW50ZXJuYWwoUmV0dXJuVHlwZTo6STMyLCBkc3Qp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpDYWxsSW5kOgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBJMzI6OkNh
bGxJbXA6CisgICAgICAgICAgICBwYXJzZUNhbGxJbXBvcnQoUmV0dXJuVHlwZTo6STMyLCBkc3Qp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpDb25kOgorICAgICAgICAg
ICAgcGFyc2VDb25kKFJldHVyblR5cGU6OkkzMiwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEkzMjo6Q29tbWE6CisgICAgICAgICAgICBwYXJzZUNvbW1hKFJldHVyblR5
cGU6OkkzMiwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6RnJv
bUYzMjoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IGNhc2UgSTMyOjpGcm9tRjY0OgorICAgICAgICAgICAgcGFyc2VFeHByRjY0KGRzdCk7CisgICAg
ICAgICAgICBsb2FkRG91YmxlKHRlbXBvcmFyeUFkZHJlc3MoZHN0KSwgRlBSSW5mbzo6ZnBSZWdU
MCk7CisgICAgICAgICAgICB0cnVuY2F0ZURvdWJsZVRvSW50MzIoRlBSSW5mbzo6ZnBSZWdUMCwg
R1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgdGVt
cG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkz
Mjo6TmVnOgorICAgICAgICAgICAgcGFyc2VVbmFyeU9wKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGkz
MiksIFJldHVyblR5cGU6OkkzMiwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEkzMjo6QWRkOgorICAgICAgICBjYXNlIEkzMjo6U3ViOgorICAgICAgICBjYXNlIEkzMjo6
TXVsOgorICAgICAgICBjYXNlIEkzMjo6U0RpdjoKKyAgICAgICAgICAgIHBhcnNlQmluYXJ5T3Ao
c3RhdGljX2Nhc3Q8dWludDhfdD4oaTMyKSwgUmV0dXJuVHlwZTo6STMyLCBkc3QpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpVRGl2OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBJMzI6OlNNb2Q6CisgICAgICAg
ICAgICBwYXJzZUJpbmFyeU9wKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGkzMiksIFJldHVyblR5cGU6
OkkzMiwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6VU1vZDoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2Ug
STMyOjpCaXROb3Q6CisgICAgICAgICAgICBwYXJzZVVuYXJ5T3Aoc3RhdGljX2Nhc3Q8dWludDhf
dD4oaTMyKSwgUmV0dXJuVHlwZTo6STMyLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgSTMyOjpCaXRPcjoKKyAgICAgICAgY2FzZSBJMzI6OkJpdEFuZDoKKyAgICAgICAg
Y2FzZSBJMzI6OkJpdFhvcjoKKyAgICAgICAgY2FzZSBJMzI6OkxzaDoKKyAgICAgICAgY2FzZSBJ
MzI6OkFyaXRoUnNoOgorICAgICAgICBjYXNlIEkzMjo6TG9naWNSc2g6CisgICAgICAgICAgICBw
YXJzZUJpbmFyeU9wKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGkzMiksIFJldHVyblR5cGU6OkkzMiwg
ZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6Q2x6OgorICAgICAg
ICAgICAgcGFyc2VVbmFyeU9wKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGkzMiksIFJldHVyblR5cGU6
OkkzMiwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6TG9naWNO
b3Q6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBj
YXNlIEkzMjo6RXFJMzI6CisgICAgICAgICAgICBwYXJzZVJlbGF0aW9uYWxPcEkzMihFcXVhbCwg
ZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6RXFGMzI6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNlIEkzMjo6
RXFGNjQ6CisgICAgICAgICAgICBwYXJzZVJlbGF0aW9uYWxPcEY2NChEb3VibGVFcXVhbCwgZHN0
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6TkVxSTMyOgorICAgICAg
ICAgICAgcGFyc2VSZWxhdGlvbmFsT3BJMzIoTm90RXF1YWwsIGRzdCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBJMzI6Ok5FcUYzMjoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgSTMyOjpORXFGNjQ6CisgICAgICAgICAg
ICBwYXJzZVJlbGF0aW9uYWxPcEY2NChEb3VibGVOb3RFcXVhbCwgZHN0KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6U0xlVGhJMzI6CisgICAgICAgICAgICBwYXJzZVJl
bGF0aW9uYWxPcEkzMihMZXNzVGhhbiwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEkzMjo6VUxlVGhJMzI6CisgICAgICAgICAgICBwYXJzZVJlbGF0aW9uYWxPcEkzMihC
ZWxvdywgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6TGVUaEYz
MjoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNh
c2UgSTMyOjpMZVRoRjY0OgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3BGNjQoRG91Ymxl
TGVzc1RoYW4sIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlNM
ZUVxSTMyOgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3BJMzIoTGVzc1RoYW5PckVxdWFs
LCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpVTGVFcUkzMjoK
KyAgICAgICAgICAgIHBhcnNlUmVsYXRpb25hbE9wSTMyKEJlbG93T3JFcXVhbCwgZHN0KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6TGVFcUYzMjoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgSTMyOjpMZUVxRjY0
OgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3BGNjQoRG91YmxlTGVzc1RoYW5PckVxdWFs
LCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpTR3JUaEkzMjoK
KyAgICAgICAgICAgIHBhcnNlUmVsYXRpb25hbE9wSTMyKEdyZWF0ZXJUaGFuLCBkc3QpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpVR3JUaEkzMjoKKyAgICAgICAgICAg
IHBhcnNlUmVsYXRpb25hbE9wSTMyKEFib3ZlLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSTMyOjpHclRoRjMyOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBJMzI6OkdyVGhGNjQ6CisgICAgICAgICAgICBwYXJz
ZVJlbGF0aW9uYWxPcEY2NChEb3VibGVHcmVhdGVyVGhhbiwgZHN0KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEkzMjo6U0dyRXFJMzI6CisgICAgICAgICAgICBwYXJzZVJlbGF0
aW9uYWxPcEkzMihHcmVhdGVyVGhhbk9yRXF1YWwsIGRzdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBJMzI6OlVHckVxSTMyOgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFs
T3BJMzIoQWJvdmVPckVxdWFsLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSTMyOjpHckVxRjMyOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgY2FzZSBJMzI6OkdyRXFGNjQ6CisgICAgICAgICAgICBwYXJzZVJlbGF0aW9u
YWxPcEY2NChEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwsIGRzdCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJMzI6OlNNaW46CisgICAgICAgIGNhc2UgSTMyOjpVTWluOgorICAg
ICAgICBjYXNlIEkzMjo6U01heDoKKyAgICAgICAgY2FzZSBJMzI6OlVNYXg6CisgICAgICAgIGNh
c2UgSTMyOjpBYnM6CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3dpdGNo
IChpMzJXaXRoSW1tKSB7CisgICAgICAgIGNhc2UgSTMyV2l0aEltbTo6TGl0SW1tOgorICAgICAg
ICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoaW1tKSwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMldpdGhJbW06OkxpdFBvb2w6Cisg
ICAgICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihtX21vZHVsZS0+bV9jb25zdGFudEkzMnNb
aW1tXSksIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBJMzJXaXRoSW1tOjpHZXRMb2M6CisgICAgICAgICAgICBsb2FkMzIoc3RhY2tBZGRy
ZXNzKGltbSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6
cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlRXhwckY2NChpbnQg
ZHN0KQoreworICAgIEY2NCBmNjQ7CisgICAgRjY0V2l0aEltbSBmNjRXaXRoSW1tOworICAgIHVp
bnQ4X3QgaW1tOworCisgICAgaWYgKG1fbW9kdWxlLT5tX3JlYWRlci5jb2RlKCZmNjQsICZmNjRX
aXRoSW1tLCAmaW1tKSkgeworICAgICAgICBzd2l0Y2ggKGY2NCkgeworICAgICAgICBjYXNlIEY2
NDo6TGl0SW1tOgorICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQocmVpbnRlcnByZXRE
b3VibGVUb0ludDY0KG1fbW9kdWxlLT5tX3JlYWRlci5maXhlZFdpZHRoPGRvdWJsZT4oKSkpLCB0
ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RjY0OjpMb2FkOgorICAgICAgICAgICAgcGFyc2VMb2FkKFJldHVyblR5cGU6OkY2NCwgZmFsc2Us
IGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGNjQ6OkxvYWRPZmY6Cisg
ICAgICAgICAgICBwYXJzZUxvYWQoUmV0dXJuVHlwZTo6RjY0LCB0cnVlLCBkc3QpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRjY0OjpOZWc6CisgICAgICAgICAgICBwYXJzZVVu
YXJ5T3Aoc3RhdGljX2Nhc3Q8dWludDhfdD4oZjY0KSwgUmV0dXJuVHlwZTo6RjY0LCBkc3QpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRjY0OjpBZGQ6CisgICAgICAgIGNhc2Ug
RjY0OjpTdWI6CisgICAgICAgIGNhc2UgRjY0OjpNdWw6CisgICAgICAgIGNhc2UgRjY0OjpEaXY6
CisgICAgICAgICAgICBwYXJzZUJpbmFyeU9wKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGY2NCksIFJl
dHVyblR5cGU6OkY2NCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2
NDo6U3FydDoKKyAgICAgICAgICAgIHBhcnNlVW5hcnlPcChzdGF0aWNfY2FzdDx1aW50OF90Pihm
NjQpLCBSZXR1cm5UeXBlOjpGNjQsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBGNjQ6OkNhbGxJbnQ6CisgICAgICAgICAgICBwYXJzZUNhbGxJbnRlcm5hbChSZXR1cm5U
eXBlOjpGNjQsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGNjQ6OkNh
bGxJbXA6CisgICAgICAgICAgICBwYXJzZUNhbGxJbXBvcnQoUmV0dXJuVHlwZTo6RjY0LCBkc3Qp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgc3dpdGNoIChmNjRXaXRoSW1tKSB7CisgICAgICAgIGNhc2UgRjY0V2l0aEltbTo6TGl0UG9v
bDoKKyAgICAgICAgICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9J
bnQ2NChtX21vZHVsZS0+bV9jb25zdGFudEY2NHNbaW1tXSkpLCB0ZW1wb3JhcnlBZGRyZXNzKGRz
dCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRjY0V2l0aEltbTo6R2V0TG9j
OgorICAgICAgICAgICAgLy8gRklYTUU6IGxvYWREb3VibGUvc3RvcmVEb3VibGU/CisgICAgICAg
ICAgICBsb2FkNjQoc3RhY2tBZGRyZXNzKGltbSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAg
ICAgIHN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSklUQ29tcGls
ZXI6OnBhcnNlRXhwclZvaWQoaW50IGRzdCkKK3sKKyAgICBzd2l0Y2ggKG1fbW9kdWxlLT5tX3Jl
YWRlci52b2lkRXhwcigpKSB7CisgICAgY2FzZSBWb2lkOjpDYWxsSW50OgorICAgICAgICBwYXJz
ZUNhbGxJbnRlcm5hbChSZXR1cm5UeXBlOjpWb2lkLCBkc3QpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFZvaWQ6OkNhbGxJbmQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgY2FzZSBWb2lkOjpDYWxsSW1wOgorICAgICAgICBwYXJzZUNhbGxJbXBvcnQoUmV0
dXJuVHlwZTo6Vm9pZCwgZHN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3N0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdldEludGVybmFsRnVuY3Rpb24oRXhlY1N0YXRlKiwg
TW9kdWxlKiBtb2R1bGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCit7CisgICAgLy8gVE9ETzog
VXNlIHRoZXNlIHR3byBsaW5lcz8KKyAgICAvLyBWTSogdm0gPSBleGVjLT52bSgpOworICAgIC8v
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShtb2R1bGUtPmludGVybmFsRnVuY3Rpb24oZnVuY3Rpb25JbmRleCkpOwor
fQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUNhbGxJbnRlcm5hbChSZXR1cm5UeXBlIHJldHVy
blR5cGUsIGludCBkc3QpCit7CisgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleCA9IG1fbW9kdWxl
LT5tX3JlYWRlci5pbW1VMzIoKTsKKyAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IG1f
bW9kdWxlLT5tX3NpZ25hdHVyZXNbbV9tb2R1bGUtPm1fZnVuY1NpZ25hdHVyZXNbZnVuY3Rpb25J
bmRleF1dOworICAgIGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJndW1lbnRzID0gc2lnbmF0dXJlLmFy
Z3VtZW50czsKKyAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9IGFyZ3VtZW50cy5zaXplKCk7Cisg
ICAgLy8gRklYTUU6IHJldHVyblR5cGUgaXMgcmVkdW5kYW50IHdpdGggc2lnbmF0dXJlLnJldHVy
blR5cGUKKworICAgIHBhcnNlQ2FsbEFyZ3VtZW50cyhhcmd1bWVudHMsIGRzdCk7CisKKyAgICBz
dG9yZTMyKFRydXN0ZWRJbW0zMihhcmd1bWVudENvdW50ICsgMSksIEFkZHJlc3Moc3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSkpOworCisgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQorICAgICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKC1tYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKyAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3Rl
ZEltbVB0cihtX21vZHVsZSksIFRydXN0ZWRJbW0zMihmdW5jdGlvbkluZGV4KSk7CisgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oZ2V0SW50ZXJuYWxGdW5jdGlvbikp
LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBjYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOwor
ICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKKyAgICAgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKworICAgIG1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJl
Z1QwKTsgLy8gcmVnVDAgaG9sZHMgY2FsbGVlLgorICAgIHN0b3JlNjQoR1BSSW5mbzo6cmVnVDAs
IEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIEpTU3RhY2s6OkNhbGxlZSAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsK
KworICAgIGNhbGxGdW5jdGlvblNsb3dDYXNlKHJldHVyblR5cGUsIGRzdCk7Cit9CisKK3N0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdldEltcG9ydGVkRnVuY3Rpb24oRXhlY1N0
YXRlKiBleGVjLCBNb2R1bGUqIG1vZHVsZSwgdWludDMyX3QgZnVuY0ltcG9ydEluZGV4KQorewor
ICAgIC8vIFRPRE86IFVzZSB0aGVzZSB0d28gbGluZXM/CisgICAgLy8gVk0qIHZtID0gZXhlYy0+
dm0oKTsKKyAgICAvLyBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKwor
ICAgIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JbXBvcnROYW1lID0gbW9kdWxlLT5mdW5jdGlvbklt
cG9ydE5hbWUoZnVuY0ltcG9ydEluZGV4KTsKKworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgSWRlbnRpZmllciBpZGVu
dGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYy0+dm0oKSwgZnVuY3Rpb25JbXBv
cnROYW1lKTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChnbG9iYWxPYmplY3QpOworCisgICAgaWYg
KCFnbG9iYWxPYmplY3QtPmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudGlmaWVyLCBzbG90KSkg
eworICAgICAgICAvLyBUT0RPOiBEbyBzb21ldGhpbmchCisgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiQ2FuJ3QgZmluZCBhIGZ1bmN0aW9uIG5hbWVkIFwiJXNcIi5cbiIsIGZ1bmN0aW9uSW1wb3J0
TmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgYWJvcnQoKTsKKyAgICB9CisKKyAgICBKU1Zh
bHVlIHZhbHVlID0gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudGlmaWVyKTsKKyAgICBpZiAoIXZh
bHVlLmlzRnVuY3Rpb24oKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlwiJXNcIiBpcyBu
b3QgYSBmdW5jdGlvbi5cbiIsIGZ1bmN0aW9uSW1wb3J0TmFtZS51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgYWJvcnQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVl
KTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VDYWxsSW1wb3J0KFJldHVyblR5cGUgcmV0
dXJuVHlwZSwgaW50IGRzdCkKK3sKKyAgICB1aW50MzJfdCBmdW5jSW1wb3J0U2lnbmF0dXJlSW5k
ZXggPSBtX21vZHVsZS0+bV9yZWFkZXIuaW1tVTMyKCk7CisgICAgY29uc3QgTW9kdWxlOjpGdW5j
SW1wb3J0U2lnbmF0dXJlJiBmdW5jSW1wb3J0U2lnbmF0dXJlID0gbV9tb2R1bGUtPm1fZnVuY0lt
cG9ydFNpZ25hdHVyZXNbZnVuY0ltcG9ydFNpZ25hdHVyZUluZGV4XTsKKyAgICBjb25zdCBTaWdu
YXR1cmUmIHNpZ25hdHVyZSA9IG1fbW9kdWxlLT5tX3NpZ25hdHVyZXNbZnVuY0ltcG9ydFNpZ25h
dHVyZS5zaWduYXR1cmVJbmRleF07CisgICAgY29uc3QgVmVjdG9yPFR5cGU+JiBhcmd1bWVudHMg
PSBzaWduYXR1cmUuYXJndW1lbnRzOworICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gYXJndW1l
bnRzLnNpemUoKTsKKyAgICAvLyBGSVhNRTogcmV0dXJuVHlwZSBpcyByZWR1bmRhbnQgd2l0aCBz
aWduYXR1cmUucmV0dXJuVHlwZQorCisgICAgcGFyc2VDYWxsQXJndW1lbnRzKGFyZ3VtZW50cywg
ZHN0KTsKKworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGFyZ3VtZW50Q291bnQgKyAxKSwgQWRk
cmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0IC0gc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpKSk7CisKKyAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwpCisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLW1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKG1fbW9kdWxlKSwgVHJ1c3RlZEltbTMyKGZ1bmNJbXBvcnRT
aWduYXR1cmUuZnVuY0ltcG9ydEluZGV4KSk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJpdHdp
c2VfY2FzdDx2b2lkKj4oZ2V0SW1wb3J0ZWRGdW5jdGlvbikpLCBHUFJJbmZvOjpub25BcmdHUFIw
KTsKKyAgICBjYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGlmIChtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbCkKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4
dGVudEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIG1vdmUo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJlZ1QwKTsgLy8gcmVnVDAgaG9sZHMg
Y2FsbGVlLgorICAgIHN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFkZHJlc3Moc3RhY2tQb2ludGVy
UmVnaXN0ZXIsIEpTU3RhY2s6OkNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSkgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKworICAgIGNhbGxGdW5jdGlvblNs
b3dDYXNlKHJldHVyblR5cGUsIGRzdCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OmNhbGxGdW5j
dGlvblNsb3dDYXNlKFJldHVyblR5cGUgcmV0dXJuVHlwZSwgaW50IGRzdCkKK3sKKyAgICBUaHVu
a0dlbmVyYXRvciBnZW5lcmF0b3IgPSBsaW5rVGh1bmtHZW5lcmF0b3JGb3IoQ29kZUZvckNhbGws
IFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOworCisgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG51bGxwdHIpLCBHUFJJbmZvOjpyZWdUMik7IC8vIFRPRE86IFVzZSBDYWxsTGlua0luZm8K
KworICAgIENvZGVQdHIgcHRyID0gbV92bS0+Z2V0Q1RJU3R1YihnZW5lcmF0b3IpLmNvZGUoKTsK
KworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihwdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUklu
Zm86Om5vbkFyZ0dQUjApOworCisgICAgY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKworICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoLW1fc3RhY2tIZWlnaHQpLCBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOyAvLyBGSVhNRTogaGFja3kKKworICAgIC8v
IEZJWE1FOiBDYW4gd2UgcmVhbGx5IHVzZSByZXR1cm5WYWx1ZUdQUj8KKyAgICBzd2l0Y2ggKHJl
dHVyblR5cGUpIHsKKyAgICBjYXNlIFJldHVyblR5cGU6OkkzMjoKKyAgICAgICAgc3RvcmUzMihH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpGNjQ6CisgICAgICAgIHVuYm94RG91YmxlV2l0
aG91dEFzc2VydGlvbnMoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OmZwUmVnVDAp
OworICAgICAgICBzdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNz
KGRzdCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJldHVyblR5cGU6OlZvaWQ6CisgICAg
ICAgIGJyZWFrOyAvLyBUT0RPOiBTdXJlPworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VDYWxsQXJn
dW1lbnRzKGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJndW1lbnRzLCBpbnQgZHN0KQoreworICAgIHNp
emVfdCBhcmd1bWVudENvdW50ID0gYXJndW1lbnRzLnNpemUoKTsKKyAgICBzaXplX3Qgb2Zmc2V0
ID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIGRz
dCArIGFyZ3VtZW50Q291bnQgKyBtX2N1cnJlbnRMb2NhbFR5cGVzLnNpemUoKSkgLSBtX2N1cnJl
bnRMb2NhbFR5cGVzLnNpemUoKTsgLy8gRklYTUU6IEJldHRlciBuYW1lCisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkgeworICAgICAgICBzd2l0Y2ggKGFy
Z3VtZW50c1tpXSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgICAgIHBhcnNl
RXhwcihSZXR1cm5UeXBlOjpJMzIsIG9mZnNldCk7CisgICAgICAgICAgICBsb2FkMzIodGVtcG9y
YXJ5QWRkcmVzcyhvZmZzZXQpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBvcjY0KEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAg
ICAgc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhvZmZzZXQgLSBpIC0g
MSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAg
ICAgICAgcGFyc2VFeHByKFJldHVyblR5cGU6OkY2NCwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGxv
YWREb3VibGUodGVtcG9yYXJ5QWRkcmVzcyhvZmZzZXQpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAg
ICAgICAgICAgIGJveERvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgICAgICAgICBzdG9yZTY0KEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKG9mZnNl
dCAtIGkgLSAxKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMigtKG9mZnNldCArIG1fY3VycmVudExvY2FsVHlwZXMuc2l6ZSgpICsg
MykgKiA4IC0gOCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7IC8vIEZJWE1FOiBoYWNreQorfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZVVuYXJ5
T3AodWludDhfdCBvcCwgUmV0dXJuVHlwZSByZXR1cm5UeXBlLCBpbnQgZHN0KQoreworICAgIHBh
cnNlRXhwcihyZXR1cm5UeXBlLCBkc3QpOworICAgIHN3aXRjaCAocmV0dXJuVHlwZSkgeworICAg
IGNhc2UgUmV0dXJuVHlwZTo6STMyOgorICAgICAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhk
c3QpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8STMyPihv
cCkpIHsKKyAgICAgICAgY2FzZSBJMzI6Ok5lZzoKKyAgICAgICAgICAgIG5lZzMyKEdQUkluZm86
OnJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6Qml0Tm90Ogor
ICAgICAgICAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKC0xKSwgR1BSSW5mbzo6cmVnVDApOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpDbHo6CisgICAgICAgICAgICBjb3Vu
dExlYWRpbmdaZXJvczMyKEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICB9CisgICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHRlbXBv
cmFyeUFkZHJlc3MoZHN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmV0dXJuVHlwZTo6
RjY0OgorICAgICAgICBsb2FkRG91YmxlKHRlbXBvcmFyeUFkZHJlc3MoZHN0KSwgRlBSSW5mbzo6
ZnBSZWdUMCk7CisgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8RjY0PihvcCkpIHsKKyAgICAg
ICAgY2FzZSBGNjQ6Ok5lZzoKKyAgICAgICAgICAgIG5lZ2F0ZURvdWJsZShGUFJJbmZvOjpmcFJl
Z1QwLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEY2NDo6U3FydDoKKyAgICAgICAgICAgIHNxcnREb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgRlBS
SW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIHN0b3Jl
RG91YmxlKEZQUkluZm86OmZwUmVnVDEsIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUJpbmFyeU9wKHVpbnQ4X3Qg
b3AsIFJldHVyblR5cGUgcmV0dXJuVHlwZSwgaW50IGRzdCkKK3sKKyAgICBwYXJzZUV4cHIocmV0
dXJuVHlwZSwgZHN0KTsKKyAgICBwYXJzZUV4cHIocmV0dXJuVHlwZSwgZHN0ICsgMSk7CisgICAg
c3dpdGNoIChyZXR1cm5UeXBlKSB7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpJMzI6CisgICAgICAg
IGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKGRzdCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAg
bG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoZHN0ICsgMSksIEdQUkluZm86OnJlZ1QxKTsKKyAgICAg
ICAgc3dpdGNoIChzdGF0aWNfY2FzdDxJMzI+KG9wKSkgeworICAgICAgICBjYXNlIEkzMjo6QWRk
OgorICAgICAgICAgICAgYWRkMzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6U3ViOgorICAgICAgICAgICAgc3Vi
MzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEkzMjo6TXVsOgorICAgICAgICAgICAgbXVsMzIoR1BSSW5mbzo6cmVnVDEs
IEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6
U0RpdjoKKyAgICAgICAgICAgIG1vdmUoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNkcSgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIu
aWRpdmxfcihHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJMzI6OlNNb2Q6CisgICAgICAgICAgICBtb3ZlKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpy
ZWdUMik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jZHEoKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmlkaXZsX3IoR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgbW92ZShHUFJJbmZv
OjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSTMyOjpCaXRPcjoKKyAgICAgICAgICAgIG9yMzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86
OnJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6Qml0QW5kOgor
ICAgICAgICAgICAgYW5kMzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6Qml0WG9yOgorICAgICAgICAgICAgeG9y
MzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEkzMjo6THNoOgorICAgICAgICAgICAgbHNoaWZ0MzIoR1BSSW5mbzo6cmVn
VDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkz
Mjo6QXJpdGhSc2g6CisgICAgICAgICAgICByc2hpZnQzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5m
bzo6cmVnVDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpMb2dpY1Jz
aDoKKyAgICAgICAgICAgIHVyc2hpZnQzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJl
Z1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJl
dHVyblR5cGU6OkY2NDoKKyAgICAgICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKGRzdCks
IEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBsb2FkRG91YmxlKHRlbXBvcmFyeUFkZHJlc3Mo
ZHN0ICsgMSksIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0
PEY2ND4ob3ApKSB7CisgICAgICAgIGNhc2UgRjY0OjpBZGQ6CisgICAgICAgICAgICBhZGREb3Vi
bGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBGNjQ6OlN1YjoKKyAgICAgICAgICAgIHN1YkRvdWJsZShGUFJJbmZv
OjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEY2NDo6TXVsOgorICAgICAgICAgICAgbXVsRG91YmxlKEZQUkluZm86OmZwUmVnVDEs
IEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRjY0
OjpEaXY6CisgICAgICAgICAgICBkaXZEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6
ZnBSZWdUMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIHN0b3JlRG91Ymxl
KEZQUkluZm86OmZwUmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZVJlbGF0aW9uYWxPcEkzMihSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwgaW50IGRzdCkKK3sKKyAgICBwYXJzZUV4cHIoUmV0dXJu
VHlwZTo6STMyLCBkc3QpOworICAgIHBhcnNlRXhwcihSZXR1cm5UeXBlOjpJMzIsIGRzdCArIDEp
OworICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKGRzdCksIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QgKyAxKSwgR1BSSW5mbzo6cmVnVDEpOworICAg
IGNvbXBhcmUzMihjb25kaXRpb24sIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwgR1BS
SW5mbzo6cmVnVDApOworICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJl
c3MoZHN0KSk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlUmVsYXRpb25hbE9wRjY0KERv
dWJsZUNvbmRpdGlvbiBjb25kaXRpb24sIGludCBkc3QpCit7CisgICAgcGFyc2VFeHByKFJldHVy
blR5cGU6OkY2NCwgZHN0KTsKKyAgICBwYXJzZUV4cHIoUmV0dXJuVHlwZTo6RjY0LCBkc3QgKyAx
KTsKKyAgICBsb2FkRG91YmxlKHRlbXBvcmFyeUFkZHJlc3MoZHN0KSwgRlBSSW5mbzo6ZnBSZWdU
MCk7CisgICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKGRzdCArIDEpLCBGUFJJbmZvOjpm
cFJlZ1QxKTsKKyAgICBKdW1wIHRydWVDYXNlID0gYnJhbmNoRG91YmxlKGNvbmRpdGlvbiwgRlBS
SW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1t
MzIoMCksIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgSnVtcCBlbmQgPSBqdW1wKCk7Cisg
ICAgdHJ1ZUNhc2UubGluayh0aGlzKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigxKSwgdGVt
cG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICBlbmQubGluayh0aGlzKTsKK30KKwordm9pZCBKSVRD
b21waWxlcjo6cGFyc2VDb21tYShSZXR1cm5UeXBlIHJldHVyblR5cGUsIGludCBkc3QpCit7Cisg
ICAgcGFyc2VFeHByKG1fbW9kdWxlLT5tX3JlYWRlci5yZXR1cm5UeXBlKCksIGRzdCk7CisgICAg
cGFyc2VFeHByKHJldHVyblR5cGUsIGRzdCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNl
Q29uZChSZXR1cm5UeXBlIHJldHVyblR5cGUsIGludCBkc3QpCit7CisgICAgcGFyc2VFeHByKFJl
dHVyblR5cGU6OkkzMiwgZHN0KTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBH
UFJJbmZvOjpyZWdUMCk7CisgICAgSnVtcCBlbHMgPSBicmFuY2hUZXN0MzIoWmVybywgR1BSSW5m
bzo6cmVnVDApOworICAgIHBhcnNlRXhwcihyZXR1cm5UeXBlLCBkc3QpOworICAgIEp1bXAgZW5k
ID0ganVtcCgpOworICAgIGVscy5saW5rKHRoaXMpOworICAgIHBhcnNlRXhwcihyZXR1cm5UeXBl
LCBkc3QpOworICAgIGVuZC5saW5rKHRoaXMpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUpJVENvbXBp
bGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSklUQ29tcGlsZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wODk5NWM3NDU5Y2QzYWUxYzdhZDVjMTZiOGY3ZDY5ZGQzNzg0NWYwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUpJVENvbXBpbGVyLmgK
QEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvKgorIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAy
LjAgKHRoZSAiTGljZW5zZSIpOworIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGlu
IGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2Yg
dGhlIExpY2Vuc2UgYXQKKworIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNF
LTIuMAorCisgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBp
biB3cml0aW5nLCBzb2Z0d2FyZQorIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRp
c3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENP
TkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgU2VlIHRo
ZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25z
IGFuZAorIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKworI2lmbmRlZiBXYXNt
SklUQ29tcGlsZXJfaAorI2RlZmluZSBXYXNtSklUQ29tcGlsZXJfaAorCisjaW5jbHVkZSAiQ0Nh
bGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiV2FzbU1vZHVsZS5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgRXhlY1N0YXRlOworY2xhc3MgSklUQ29kZTsKK2NsYXNzIFZNOworCituYW1lc3Bh
Y2UgV2FzbSB7CisKK2NsYXNzIEp1bXBTY29wZTsKKworY2xhc3MgSklUQ29tcGlsZXIgOiBwcml2
YXRlIENDYWxsSGVscGVycyB7CitwdWJsaWM6CisgICAgSklUQ29tcGlsZXIoVk0qIHZtLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgTW9kdWxlKiBtb2R1bGUpCisgICAgICAgIDogQ0NhbGxIZWxwZXJz
KHZtLCBjb2RlQmxvY2spCisgICAgICAgICwgbV9tb2R1bGUobW9kdWxlKQorICAgIHsKKyAgICB9
CisKKyAgICBSZWZQdHI8SklUQ29kZT4gY29tcGlsZUZ1bmN0aW9uKFZNJiwgc2l6ZV90IGZ1bmN0
aW9uSW5kZXgpOworCitwcml2YXRlOgorICAgIHZvaWQgYWxsb2NhdGVTcGFjZU9uU3RhY2soKTsK
KyAgICB2b2lkIGRlYWxsb2NhdGVTcGFjZU9uU3RhY2soKTsKKworICAgIHZvaWQgcGFyc2VBcmd1
bWVudHMoY29uc3QgU2lnbmF0dXJlJik7CisgICAgdm9pZCBwYXJzZVZhcnMoKTsKKworICAgIHZv
aWQgcGFyc2VTdG10KCk7CisgICAgdm9pZCBwYXJzZUdldExvY2FsKGludCBkc3QpOworICAgIHZv
aWQgcGFyc2VTZXRMb2NhbCh1aW50MzJfdCBpbW0sIGludCBkc3QpOworICAgIHZvaWQgcGFyc2VT
ZXRMb2NhbChpbnQgZHN0KTsKKyAgICB2b2lkIHBhcnNlTG9hZChSZXR1cm5UeXBlLCBib29sIGhh
c09mZnNldCwgaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZVJldHVyblN0bXQoKTsKKyAgICB2b2lk
IHBhcnNlQmxvY2tTdG10KCk7CisgICAgdm9pZCBwYXJzZVN0bXRMaXN0KCk7CisgICAgdm9pZCBw
YXJzZUlmU3RtdCgpOworICAgIHZvaWQgcGFyc2VJZkVsc2VTdG10KCk7CisgICAgdm9pZCBwYXJz
ZVdoaWxlU3RtdCgpOworICAgIHZvaWQgcGFyc2VEb1N0bXQoKTsKKyAgICB2b2lkIHBhcnNlTGFi
ZWxTdG10KCk7CisgICAgdm9pZCBwYXJzZUJyZWFrU3RtdCgpOworICAgIHZvaWQgcGFyc2VCcmVh
a0xhYmVsU3RtdCgpOworICAgIHZvaWQgcGFyc2VDb250aW51ZVN0bXQoKTsKKyAgICB2b2lkIHBh
cnNlQ29udGludWVMYWJlbFN0bXQoKTsKKyAgICB2b2lkIHBhcnNlU3dpdGNoU3RtdCgpOworCisg
ICAgdm9pZCBwYXJzZUV4cHIoUmV0dXJuVHlwZSwgaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZUV4
cHJJMzIoaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZUV4cHJGNjQoaW50IGRzdCk7CisgICAgdm9p
ZCBwYXJzZUV4cHJWb2lkKGludCBkc3QpOworICAgIHZvaWQgcGFyc2VDYWxsSW50ZXJuYWwoUmV0
dXJuVHlwZSwgaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZUNhbGxJbXBvcnQoUmV0dXJuVHlwZSwg
aW50IGRzdCk7CisgICAgdm9pZCBjYWxsRnVuY3Rpb25TbG93Q2FzZShSZXR1cm5UeXBlLCBpbnQg
ZHN0KTsKKyAgICB2b2lkIHBhcnNlQ2FsbEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mIGFy
Z3VtZW50cywgaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZVVuYXJ5T3AodWludDhfdCBvcCwgUmV0
dXJuVHlwZSwgaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZUJpbmFyeU9wKHVpbnQ4X3Qgb3AsIFJl
dHVyblR5cGUsIGludCBkc3QpOworICAgIHZvaWQgcGFyc2VSZWxhdGlvbmFsT3BJMzIoUmVsYXRp
b25hbENvbmRpdGlvbiwgaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZVJlbGF0aW9uYWxPcEY2NChE
b3VibGVDb25kaXRpb24sIGludCBkc3QpOworICAgIHZvaWQgcGFyc2VDb21tYShSZXR1cm5UeXBl
LCBpbnQgZHN0KTsKKyAgICB2b2lkIHBhcnNlQ29uZChSZXR1cm5UeXBlLCBpbnQgZHN0KTsKKwor
ICAgIEFkZHJlc3Mgc3RhY2tBZGRyZXNzKGludCBpKSBjb25zdCAvLyBGSVhNRTogSXMgdGhpcyBj
b3JyZWN0PworICAgIHsKKyAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIC1pICogOCAtIDgpOworICAgIH0KKworICAgIEFkZHJlc3MgdGVtcG9yYXJ5QWRk
cmVzcyhpbnQgaSkgY29uc3QgLy8gRklYTUU6IElzIHRoaXMgY29ycmVjdD8KKyAgICB7CisgICAg
ICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAtKGkgKyBtX2N1
cnJlbnRMb2NhbFR5cGVzLnNpemUoKSkgKiA4IC0gOCk7CisgICAgfQorCisgICAgdm9pZCBwdXNo
Q29udGludWVMYWJlbExhYmVsKExhYmVsKiBsYWJlbCkgeyBtX2NvbnRpbnVlTGFiZWxMYWJlbHMu
YXBwZW5kKGxhYmVsKTsgfQorICAgIHZvaWQgcG9wQ29udGludWVMYWJlbExhYmVsKCkgeyBtX2Nv
bnRpbnVlTGFiZWxMYWJlbHMucmVtb3ZlTGFzdCgpOyB9CisgICAgTGFiZWwqIGNvbnRpbnVlTGFi
ZWxMYWJlbChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9jb250aW51ZUxhYmVsTGFiZWxzW2ld
OyB9CisgICAgdm9pZCBwdXNoQnJlYWtMYWJlbEp1bXBMaXN0KEp1bXBMaXN0KiBqdW1wTGlzdCkg
eyBtX2JyZWFrTGFiZWxKdW1wTGlzdHMuYXBwZW5kKGp1bXBMaXN0KTsgfQorICAgIHZvaWQgcG9w
QnJlYWtMYWJlbEp1bXBMaXN0KCkgeyBtX2JyZWFrTGFiZWxKdW1wTGlzdHMucmVtb3ZlTGFzdCgp
OyB9CisgICAgSnVtcExpc3QqIGJyZWFrTGFiZWxKdW1wTGlzdChzaXplX3QgaSkgY29uc3QgeyBy
ZXR1cm4gbV9icmVha0xhYmVsSnVtcExpc3RzW2ldOyB9CisKKyAgICB2b2lkIHB1c2hDb250aW51
ZUp1bXBTY29wZShKdW1wU2NvcGUqIGp1bXBTY29wZSkgeyBtX2NvbnRpbnVlSnVtcFNjb3Blcy5h
cHBlbmQoanVtcFNjb3BlKTsgfQorICAgIHZvaWQgcG9wQ29udGludWVKdW1wU2NvcGUoKSB7IG1f
Y29udGludWVKdW1wU2NvcGVzLnJlbW92ZUxhc3QoKTsgfQorICAgIEp1bXBTY29wZSogdG9wQ29u
dGludWVKdW1wU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRpbnVlSnVtcFNjb3Blcy5sYXN0
KCk7IH0KKworICAgIHZvaWQgcHVzaEJyZWFrSnVtcExpc3QoSnVtcExpc3QqIGp1bXBMaXN0KSB7
IG1fYnJlYWtKdW1wTGlzdHMuYXBwZW5kKGp1bXBMaXN0KTsgfQorICAgIHZvaWQgcG9wQnJlYWtK
dW1wTGlzdCgpIHsgbV9icmVha0p1bXBMaXN0cy5yZW1vdmVMYXN0KCk7IH0KKyAgICBKdW1wTGlz
dCogdG9wQnJlYWtKdW1wTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fYnJlYWtKdW1wTGlzdHMubGFz
dCgpOyB9CisKKyAgICBNb2R1bGUqIG1fbW9kdWxlOworCisgICAgdWludDMyX3QgbV9zdGFja0hl
aWdodDsgLy8gRklYTUU6IFRoaXMgY2F1c2VkIGEgJ3NlZ21lbnRhdGlvbiBmYXVsdCcgaGVpc2Vu
YnVnIHdoZW4gSSBhZGRlZCAic2l6ZV90IG1fc3RhY2tIZWlnaHQiLiBTb21ldGhpbmcgbXVzdCBi
ZSB3cm9uZy4KKworICAgIFJldHVyblR5cGUgbV9jdXJyZW50UmV0dXJuVHlwZTsKKyAgICBWZWN0
b3I8VHlwZT4gbV9jdXJyZW50TG9jYWxUeXBlczsKKworICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwqPiBtX2NvbnRpbnVlTGFiZWxMYWJlbHM7CisgICAgVmVjdG9yPE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCo+IG1fYnJlYWtMYWJlbEp1bXBMaXN0czsKKworICAgIFZlY3RvcjxKdW1w
U2NvcGUqPiBtX2NvbnRpbnVlSnVtcFNjb3BlczsKKyAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0Kj4gbV9icmVha0p1bXBMaXN0czsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpXYXNtCisKKyNlbmRpZiAvLyBXYXNtSklUQ29tcGlsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTW9kdWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YmQzNzA2NDhiM2I1ZDc0M2UwYmQ0
ZTMyZGRhYTEwZDc0MWYzOWEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZS5jcHAKQEAgLTAsMCArMSwzMzYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorIExpY2Vuc2VkIHVuZGVyIHRoZSBB
cGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIHlvdSBtYXkgbm90
IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyBZ
b3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworIGh0dHA6Ly93d3cuYXBh
Y2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxp
Y2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIGRpc3RyaWJ1dGVk
IHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisg
V0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHBy
ZXNzIG9yIGltcGxpZWQuCisgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3Vh
Z2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNl
bnNlLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21Nb2R1bGUuaCIK
KworI2luY2x1ZGUgIkpJVENvZGUuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisjaW5j
bHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIlJlamVjdC5oIgorI2luY2x1ZGUgIlNs
b3RWaXNpdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21KSVRDb21waWxlci5oIgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVz
cGFjZSBXYXNtIHsKKworY29uc3QgQ2xhc3NJbmZvIE1vZHVsZTo6c19pbmZvID0geyAiTW9kdWxl
IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShNb2R1bGUpIH07CisKK3Zv
aWQgTW9kdWxlOjpjb21waWxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVmVjdG9yPGNoYXI+JiBi
dWZmZXIpCit7CisgICAgbV9yZWFkZXIgPSBSZWFkZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50OF90Kj4oYnVmZmVyLmRhdGEoKSkpOworICAgIGlmIChtX3JlYWRlci5maXhlZFdpZHRoPHVp
bnQzMl90PigpICE9IE1hZ2ljTnVtYmVyKQorICAgICAgICBhYm9ydCgpOworICAgIG1fcmVhZGVy
LmZpeGVkV2lkdGg8dWludDMyX3Q+KCk7IC8vIG91dHB1dCBzaXplIGluIGFzbS5qcyBmb3JtYXQK
KworICAgIGluaXRpYWxpemVBcnJheUJ1ZmZlcihleGVjKTsKKworICAgIHBhcnNlQ29uc3RhbnRQ
b29sU2VjdGlvbigpOworICAgIHBhcnNlU2lnbmF0dXJlU2VjdGlvbigpOworICAgIHBhcnNlRnVu
Y3Rpb25JbXBvcnRTZWN0aW9uKCk7CisgICAgcGFyc2VHbG9iYWxTZWN0aW9uKCk7CisgICAgcGFy
c2VGdW5jdGlvbkRlY2xhcmF0aW9uU2VjdGlvbigpOworICAgIHBhcnNlRnVuY3Rpb25Qb2ludGVy
VGFibGVzKCk7CisgICAgcGFyc2VGdW5jdGlvbkRlZmluaXRpb25TZWN0aW9uKGV4ZWMpOworICAg
IHBhcnNlRXhwb3J0U2VjdGlvbihleGVjLT52bSgpKTsKK30KKwordm9pZCBNb2R1bGU6OmluaXRp
YWxpemVBcnJheUJ1ZmZlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgLy8gVE9ETzogTWFrZSB0
aGlzIGxlc3MgaGFja3kKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFJlZlB0cjxBcnJh
eUJ1ZmZlcj4gYXJyYXlCdWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKDEwMjQsIDEpOworICAg
IEpTQXJyYXlCdWZmZXIqIGpzQXJyYXlCdWZmZXIgPSBKU0FycmF5QnVmZmVyOjpjcmVhdGUodm0s
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoKSwgYXJy
YXlCdWZmZXIucmVsZWFzZSgpKTsKKyAgICBtX2FycmF5QnVmZmVyLnNldCh2bSwgdGhpcywganNB
cnJheUJ1ZmZlcik7Cit9CisKK3ZvaWQgTW9kdWxlOjpwYXJzZUNvbnN0YW50UG9vbFNlY3Rpb24o
KQoreworICAgIHVpbnQzMl90IG51bWJlck9mSTMycyA9IG1fcmVhZGVyLmltbVUzMigpOworICAg
IHVpbnQzMl90IG51bWJlck9mRjMycyA9IG1fcmVhZGVyLmltbVUzMigpOworICAgIHVpbnQzMl90
IG51bWJlck9mRjY0cyA9IG1fcmVhZGVyLmltbVUzMigpOworCisgICAgVmVjdG9yPHVpbnQzMl90
PiBjb25zdGFudEkzMnMobnVtYmVyT2ZJMzJzKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBp
IDwgbnVtYmVyT2ZJMzJzOyArK2kpCisgICAgICAgIGNvbnN0YW50STMyc1tpXSA9IG1fcmVhZGVy
LmltbVUzMigpOworCisgICAgVmVjdG9yPGZsb2F0PiBjb25zdGFudEYzMnMobnVtYmVyT2ZGMzJz
KTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGMzJzOyArK2kpCisgICAg
ICAgIGNvbnN0YW50RjMyc1tpXSA9IG1fcmVhZGVyLmZpeGVkV2lkdGg8ZmxvYXQ+KCk7CisKKyAg
ICBWZWN0b3I8ZG91YmxlPiBjb25zdGFudEY2NHMobnVtYmVyT2ZGNjRzKTsKKyAgICBmb3IgKHVp
bnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGNjRzOyArK2kpCisgICAgICAgIGNvbnN0YW50RjY0
c1tpXSA9IG1fcmVhZGVyLmZpeGVkV2lkdGg8ZG91YmxlPigpOworCisgICAgbV9jb25zdGFudEkz
MnMgPSBXVEY6Om1vdmUoY29uc3RhbnRJMzJzKTsKKyAgICBtX2NvbnN0YW50RjMycyA9IFdURjo6
bW92ZShjb25zdGFudEYzMnMpOworICAgIG1fY29uc3RhbnRGNjRzID0gV1RGOjptb3ZlKGNvbnN0
YW50RjY0cyk7Cit9CisKK3ZvaWQgTW9kdWxlOjpwYXJzZVNpZ25hdHVyZVNlY3Rpb24oKQorewor
ICAgIHVpbnQzMl90IG51bWJlck9mU2lnbmF0dXJlcyA9IG1fcmVhZGVyLmltbVUzMigpOworICAg
IFZlY3RvcjxTaWduYXR1cmU+IHNpZ25hdHVyZXMobnVtYmVyT2ZTaWduYXR1cmVzKTsKKyAgICBm
b3IgKHVpbnQzMl90IHNpZ25hdHVyZUluZGV4ID0gMDsgc2lnbmF0dXJlSW5kZXggPCBudW1iZXJP
ZlNpZ25hdHVyZXM7ICsrc2lnbmF0dXJlSW5kZXgpIHsKKyAgICAgICAgUmV0dXJuVHlwZSByZXR1
cm5UeXBlID0gbV9yZWFkZXIucmV0dXJuVHlwZSgpOworICAgICAgICB1aW50MzJfdCBhcmd1bWVu
dENvdW50ID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgICAgIFNpZ25hdHVyZSBzaWduYXR1cmUo
cmV0dXJuVHlwZSwgYXJndW1lbnRDb3VudCk7CisgICAgICAgIGZvciAodWludDMyX3QgYXJndW1l
bnRJbmRleCA9IDA7IGFyZ3VtZW50SW5kZXggPCBhcmd1bWVudENvdW50OyArK2FyZ3VtZW50SW5k
ZXgpCisgICAgICAgICAgICBzaWduYXR1cmUuYXJndW1lbnRzW2FyZ3VtZW50SW5kZXhdID0gbV9y
ZWFkZXIudHlwZSgpOworICAgICAgICBzaWduYXR1cmVzW3NpZ25hdHVyZUluZGV4XSA9IFdURjo6
bW92ZShzaWduYXR1cmUpOworICAgIH0KKworICAgIG1fc2lnbmF0dXJlcyA9IFdURjo6bW92ZShz
aWduYXR1cmVzKTsKK30KKwordm9pZCBNb2R1bGU6OnBhcnNlRnVuY3Rpb25JbXBvcnRTZWN0aW9u
KCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZkZ1bmNJbXBvcnRzID0gbV9yZWFkZXIuaW1tVTMy
KCk7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jSW1wb3J0U2lnbmF0dXJlcyA9IG1fcmVhZGVy
LmltbVUzMigpOworCisgICAgbV9mdW5jdGlvbkltcG9ydE5hbWVzLnJlc2VydmVDYXBhY2l0eShu
dW1iZXJPZkZ1bmNJbXBvcnRzKTsKKworICAgIFZlY3RvcjxGdW5jSW1wb3J0U2lnbmF0dXJlPiBm
dW5jSW1wb3J0U2lnbmF0dXJlcyhudW1iZXJPZkZ1bmNJbXBvcnRTaWduYXR1cmVzKTsKKyAgICBG
dW5jSW1wb3J0U2lnbmF0dXJlKiBmdW5jSW1wb3J0U2lnbmF0dXJlID0gZnVuY0ltcG9ydFNpZ25h
dHVyZXMuZGF0YSgpOworICAgIGZvciAodWludDMyX3QgZnVuY0ltcG9ydEluZGV4ID0gMDsgZnVu
Y0ltcG9ydEluZGV4IDwgbnVtYmVyT2ZGdW5jSW1wb3J0czsgKytmdW5jSW1wb3J0SW5kZXgpIHsK
KyAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgICAgICB3aGlsZSAoY2hhciBjID0g
bV9yZWFkZXIuc2luZ2xlQ2hhcigpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoYyk7Cisg
ICAgICAgIG1fZnVuY3Rpb25JbXBvcnROYW1lcy5hcHBlbmQoYnVpbGRlci50b1N0cmluZygpKTsK
KworICAgICAgICB1aW50MzJfdCBudW1iZXJPZlNpZ25hdHVyZXMgPSBtX3JlYWRlci5pbW1VMzIo
KTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mU2lnbmF0dXJlczsg
KytpKSB7CisgICAgICAgICAgICBmdW5jSW1wb3J0U2lnbmF0dXJlLT5zaWduYXR1cmVJbmRleCA9
IG1fcmVhZGVyLmltbVUzMigpOworICAgICAgICAgICAgZnVuY0ltcG9ydFNpZ25hdHVyZS0+ZnVu
Y0ltcG9ydEluZGV4ID0gZnVuY0ltcG9ydEluZGV4OworICAgICAgICAgICAgZnVuY0ltcG9ydFNp
Z25hdHVyZSsrOworICAgICAgICB9CisgICAgfQorICAgIGFzc2VydChmdW5jSW1wb3J0U2lnbmF0
dXJlID09IGZ1bmNJbXBvcnRTaWduYXR1cmVzLmRhdGEoKSArIG51bWJlck9mRnVuY0ltcG9ydFNp
Z25hdHVyZXMpOworCisgICAgbV9mdW5jSW1wb3J0U2lnbmF0dXJlcyA9IFdURjo6bW92ZShmdW5j
SW1wb3J0U2lnbmF0dXJlcyk7Cit9CisKK3ZvaWQgTW9kdWxlOjpwYXJzZUdsb2JhbFNlY3Rpb24o
KQoreworICAgIHVpbnQzMl90IG51bWJlck9mSTMyWmVybyA9IG1fcmVhZGVyLmltbVUzMigpOwor
ICAgIHVpbnQzMl90IG51bWJlck9mRjMyWmVybyA9IG1fcmVhZGVyLmltbVUzMigpOworICAgIHVp
bnQzMl90IG51bWJlck9mRjY0WmVybyA9IG1fcmVhZGVyLmltbVUzMigpOworICAgIHVpbnQzMl90
IG51bWJlck9mSTMySW1wb3J0ID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgdWludDMyX3QgbnVt
YmVyT2ZGMzJJbXBvcnQgPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICB1aW50MzJfdCBudW1iZXJP
ZkY2NEltcG9ydCA9IG1fcmVhZGVyLmltbVUzMigpOworICAgIHVpbnQzMl90IG51bWJlck9mR2xv
YmFsVmFycyA9IG51bWJlck9mSTMyWmVybyArIG51bWJlck9mRjMyWmVybyArIG51bWJlck9mRjY0
WmVybyArIG51bWJlck9mSTMySW1wb3J0ICsgbnVtYmVyT2ZGMzJJbXBvcnQgKyBudW1iZXJPZkY2
NEltcG9ydDsKKworICAgIFZlY3RvcjxUeXBlPiBnbG9iYWxUeXBlcyhudW1iZXJPZkdsb2JhbFZh
cnMpOworICAgIHNpemVfdCBnbG9iYWxUeXBlSW5kZXggPSAwOworICAgIGZvciAodWludDMyX3Qg
aSA9IDA7IGkgPCBudW1iZXJPZkkzMlplcm87ICsraSkKKyAgICAgICAgZ2xvYmFsVHlwZXNbZ2xv
YmFsVHlwZUluZGV4KytdID0gVHlwZTo6STMyOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkg
PCBudW1iZXJPZkYzMlplcm87ICsraSkKKyAgICAgICAgZ2xvYmFsVHlwZXNbZ2xvYmFsVHlwZUlu
ZGV4KytdID0gVHlwZTo6RjMyOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJP
ZkY2NFplcm87ICsraSkKKyAgICAgICAgZ2xvYmFsVHlwZXNbZ2xvYmFsVHlwZUluZGV4KytdID0g
VHlwZTo6RjY0OworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkkzMkltcG9y
dDsgKytpKSB7CisgICAgICAgIHdoaWxlIChtX3JlYWRlci5zaW5nbGVDaGFyKCkpIHsgfQorICAg
ICAgICBnbG9iYWxUeXBlc1tnbG9iYWxUeXBlSW5kZXgrK10gPSBUeXBlOjpJMzI7CisgICAgfQor
ICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkYzMkltcG9ydDsgKytpKSB7Cisg
ICAgICAgIHdoaWxlIChtX3JlYWRlci5zaW5nbGVDaGFyKCkpIHsgfQorICAgICAgICBnbG9iYWxU
eXBlc1tnbG9iYWxUeXBlSW5kZXgrK10gPSBUeXBlOjpGMzI7CisgICAgfQorICAgIGZvciAodWlu
dDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkY2NEltcG9ydDsgKytpKSB7CisgICAgICAgIHdoaWxl
IChtX3JlYWRlci5zaW5nbGVDaGFyKCkpIHsgfQorICAgICAgICBnbG9iYWxUeXBlc1tnbG9iYWxU
eXBlSW5kZXgrK10gPSBUeXBlOjpGNjQ7CisgICAgfQorICAgIG1fZ2xvYmFsVHlwZXMgPSBXVEY6
Om1vdmUoZ2xvYmFsVHlwZXMpOworfQorCit2b2lkIE1vZHVsZTo6cGFyc2VGdW5jdGlvbkRlY2xh
cmF0aW9uU2VjdGlvbigpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jdGlvbnMgPSBtX3Jl
YWRlci5pbW1VMzIoKTsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGZ1bmNTaWduYXR1cmVzKG51bWJl
ck9mRnVuY3Rpb25zKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGdW5j
dGlvbnM7ICsraSkKKyAgICAgICAgZnVuY1NpZ25hdHVyZXNbaV0gPSBtX3JlYWRlci5pbW1VMzIo
KTsKKworICAgIG1fZnVuY1NpZ25hdHVyZXMgPSBXVEY6Om1vdmUoZnVuY1NpZ25hdHVyZXMpOwor
fQorCit2b2lkIE1vZHVsZTo6cGFyc2VGdW5jdGlvblBvaW50ZXJUYWJsZXMoKQoreworICAgIHVp
bnQzMl90IG51bWJlck9mRnVuY1B0clRhYmxlcyA9IG1fcmVhZGVyLmltbVUzMigpOworICAgIFZl
Y3RvcjxGdW5jUHRyVGFibGU+IGZ1bmNQdHJUYWJsZXMobnVtYmVyT2ZGdW5jUHRyVGFibGVzKTsK
KyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGdW5jUHRyVGFibGVzOyArK2kp
IHsKKyAgICAgICAgZnVuY1B0clRhYmxlc1tpXS5zaWduYXR1cmVJbmRleCA9IG1fcmVhZGVyLmlt
bVUzMigpOworICAgICAgICB1aW50MzJfdCBudW1FbGVtZW50cyA9IG1fcmVhZGVyLmltbVUzMigp
OworICAgICAgICBWZWN0b3I8dWludDMyX3Q+IGVsZW1lbnRzKG51bUVsZW1lbnRzKTsKKyAgICAg
ICAgZm9yICh1aW50MzJfdCBqID0gMDsgaiA8IG51bUVsZW1lbnRzOyArK2opCisgICAgICAgICAg
ICBlbGVtZW50c1tqXSA9IG1fcmVhZGVyLmltbVUzMigpOworICAgICAgICBmdW5jUHRyVGFibGVz
W2ldLmVsZW1lbnRzID0gV1RGOjptb3ZlKGVsZW1lbnRzKTsKKyAgICB9CisKKyAgICBtX2Z1bmNQ
dHJUYWJsZXMgPSBXVEY6Om1vdmUoZnVuY1B0clRhYmxlcyk7Cit9CisKK3ZvaWQgTW9kdWxlOjpw
YXJzZUZ1bmN0aW9uRGVmaW5pdGlvblNlY3Rpb24oRXhlY1N0YXRlKiBleGVjKQoreworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mdW5jU2lnbmF0dXJlcy5zaXplKCk7ICsraSkKKyAgICAg
ICAgcGFyc2VGdW5jdGlvbkRlZmluaXRpb24oZXhlYywgaSk7Cit9CisKK3ZvaWQgTW9kdWxlOjpw
YXJzZUV4cG9ydFNlY3Rpb24oVk0mIHZtKQoreworICAgIHN3aXRjaCAobV9yZWFkZXIuZXhwb3J0
Rm9ybWF0KCkpIHsKKyAgICBjYXNlIEV4cG9ydEZvcm1hdDo6RGVmYXVsdDogeworICAgICAgICB1
aW50MzJfdCBmdW5jdGlvbkluZGV4ID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgICAgIElkZW50
aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZGVmYXVsdCIp
OyAvLyBUT0RPOiBVc2Ugb3RoZXIgbmFtZXMKKyAgICAgICAgcHV0RGlyZWN0KHZtLCBpZGVudGlm
aWVyLCBtX2Z1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS5nZXQoKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIEV4cG9ydEZvcm1hdDo6UmVjb3JkOiB7CisgICAgICAgIHVpbnQzMl90
IG51bWJlck9mRXhwb3J0cyA9IG1fcmVhZGVyLmltbVUzMigpOworICAgICAgICBmb3IgKHVpbnQz
Ml90IGV4cG9ydEluZGV4ID0gMDsgZXhwb3J0SW5kZXggPCBudW1iZXJPZkV4cG9ydHM7ICsrZXhw
b3J0SW5kZXgpIHsKKyAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAg
ICAgIHdoaWxlIChjaGFyIGMgPSBtX3JlYWRlci5zaW5nbGVDaGFyKCkpCisgICAgICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoYyk7CisgICAgICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4
ID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgYnVpbGRlci50b1N0cmluZygpKTsKKyAgICAg
ICAgICAgIHB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwgbV9mdW5jdGlvbnNbZnVuY3Rpb25JbmRl
eF0uZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0
OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9p
ZCBNb2R1bGU6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKEV4ZWNTdGF0ZSogZXhlYywgc2l6ZV90
IGZ1bmN0aW9uSW5kZXgpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOyAvLyBG
SVhNRTogc2hvdWxkIGl0IGJlICd0aGlzJz8KKworICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSA9IFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6Y3JlYXRlKHZtLCBTb3VyY2VDb2Rl
KCkpOworICAgIHsKKyAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgICAgICBS
ZWZQdHI8V2ViQXNzZW1ibHlDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGFkb3B0UmVmKG5ldyBXZWJB
c3NlbWJseUNvZGVCbG9jayhleGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpKTsKKyAgICAgICAgSklU
Q29tcGlsZXIgaml0Q29tcGlsZXIoJnZtLCBjb2RlQmxvY2suZ2V0KCksIHRoaXMpOworICAgICAg
ICBjb2RlQmxvY2stPnNldEpJVENvZGUoaml0Q29tcGlsZXIuY29tcGlsZUZ1bmN0aW9uKHZtLCBm
dW5jdGlvbkluZGV4KSk7CisgICAgICAgIGV4ZWN1dGFibGUtPmluc3RhbGxDb2RlKGNvZGVCbG9j
ay5nZXQoKSk7CisgICAgfQorCisgICAgSlNGdW5jdGlvbioganNGdW5jdGlvbiA9IEpTRnVuY3Rp
b246OmNyZWF0ZSh2bSwgZXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICBtX2Z1bmN0aW9u
cy5hcHBlbmQoV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+KHZtLCB0aGlzLCBqc0Z1bmN0aW9uKSk7
Cit9CisKK0pTRnVuY3Rpb24qIE1vZHVsZTo6aW50ZXJuYWxGdW5jdGlvbihzaXplX3QgZnVuY3Rp
b25JbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0u
Z2V0KCk7Cit9CisKK2NvbnN0IHZvaWQqIE1vZHVsZTo6YXJyYXlCdWZmZXJEYXRhKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9hcnJheUJ1ZmZlci0+aW1wbCgpLT5kYXRhKCk7Cit9CisKK3ZvaWQg
TW9kdWxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgTW9kdWxlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8TW9kdWxlKj4oY2VsbCk7
CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgZm9yIChhdXRv
IGZ1bmN0aW9uIDogdGhpc09iamVjdC0+bV9mdW5jdGlvbnMpCisgICAgICAgIHZpc2l0b3IuYXBw
ZW5kKCZmdW5jdGlvbik7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYXJyYXlC
dWZmZXIpOworfQorCitib29sIE1vZHVsZTo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90JiBzbG90KQoreworICAgIE1vZHVsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxNb2R1bGUq
PihvYmplY3QpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
LmJ1ZmZlcikgeworICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIERvbnREZWxldGUg
fCBSZWFkT25seSwgdGhpc09iamVjdC0+bV9hcnJheUJ1ZmZlci5nZXQoKSk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKwordm9pZCBNb2R1bGU6
OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIE1vZHVs
ZSogdGhpc09iamVjdCA9IGpzQ2FzdDxNb2R1bGUqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpIHsKKyAgICAgICAgcmVqZWN0KGV4
ZWMsIHNsb3QuaXNTdHJpY3RNb2RlKCksICJBdHRlbXB0aW5nIHRvIHdyaXRlIHRvIGEgcmVhZC1v
bmx5IGFycmF5IGJ1ZmZlciBwcm9wZXJ0eS4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90
KTsKK30KKworYm9vbCBNb2R1bGU6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVy
dHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQoreworICAgIE1vZHVs
ZSogdGhpc09iamVjdCA9IGpzQ2FzdDxNb2R1bGUqPihvYmplY3QpOworICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHJlYWQtb25seSBh
cnJheSBidWZmZXIgcHJvcGVydHkuIik7CisKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJv
cGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRU
aHJvdyk7Cit9CisKK2Jvb2wgTW9kdWxlOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBNb2R1bGUq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8TW9kdWxlKj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFt
ZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSk7Cit9CisKK3ZvaWQgTW9kdWxlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJh
eSYgYXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIE1vZHVsZSogdGhpc09iamVj
dCA9IGpzQ2FzdDxNb2R1bGUqPihvYmplY3QpOworICAgIGlmIChtb2RlLmluY2x1ZGVEb250RW51
bVByb3BlcnRpZXMoKSkKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5i
dWZmZXIpOworICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlz
T2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK01vZHVsZSogY29tcGlsZShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyKQoreworICAgIE1vZHVsZSogbW9k
dWxlID0gTW9kdWxlOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpKTsKKyAgICBtb2R1bGUtPmNvbXBpbGUoZXhlYywgYnVmZmVyKTsKKyAgICByZXR1cm4gbW9k
dWxlOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1vZHVsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZlM2VjMzk1YzAxZGY5NmZlYTQzMDNlZjMw
NWQyN2FlNjU2NDFhYmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTW9kdWxlLmgKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUg
TGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIHlvdSBtYXkgbm90IHVzZSB0
aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyBZb3UgbWF5
IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworIGh0dHA6Ly93d3cuYXBhY2hlLm9y
Zy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUg
bGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIGRpc3RyaWJ1dGVkIHVuZGVy
IHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgV0lUSE9V
VCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9y
IGltcGxpZWQuCisgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292
ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgor
Ki8KKworI2lmbmRlZiBXYXNtTW9kdWxlX2gKKyNkZWZpbmUgV2FzbU1vZHVsZV9oCisKKyNpbmNs
dWRlICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIldhc21PcGNvZGVzLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBKSVRDb21waWxlcjsKKworbmFtZXNwYWNlIFdhc20geworCitj
bGFzcyBNb2R1bGUgOiBwdWJsaWMgSlNHbG9iYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVk
ZWYgSlNHbG9iYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFt
ZXMgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CisKKyAgICBzdGF0aWMgTW9kdWxlKiBj
cmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVj
dCk7IC8vIEZJWE1FOiBpcyB0aGlzIHJpZ2h0PworICAgICAgICBNb2R1bGUqIG1vZHVsZSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE1vZHVsZT4odm0uaGVhcCkpIE1vZHVsZSh2bSwgc3Ry
dWN0dXJlKTsKKyAgICAgICAgbW9kdWxlLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJl
dHVybiBtb2R1bGU7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBqc051bGwoKSwgVHlwZUluZm8oR2xvYmFsT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZShFeGVjU3RhdGUqLCBjb25z
dCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcik7CisgICAgSlNGdW5jdGlvbiogaW50ZXJuYWxGdW5jdGlv
bihzaXplX3QgZnVuY3Rpb25JbmRleCkgY29uc3Q7CisgICAgY29uc3QgU3RyaW5nJiBmdW5jdGlv
bkltcG9ydE5hbWUoc2l6ZV90IGZ1bmN0aW9uSW1wb3J0SW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1f
ZnVuY3Rpb25JbXBvcnROYW1lc1tmdW5jdGlvbkltcG9ydEluZGV4XTsgfQorICAgIGNvbnN0IHZv
aWQqIGFycmF5QnVmZmVyRGF0YSgpIGNvbnN0OworCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBKSVRDb21waWxlcjsKKworICAgIHN0cnVjdCBGdW5jSW1wb3J0U2lnbmF0dXJlIHsKKyAgICAg
ICAgdWludDMyX3Qgc2lnbmF0dXJlSW5kZXg7CisgICAgICAgIHVpbnQzMl90IGZ1bmNJbXBvcnRJ
bmRleDsKKyAgICB9OworICAgIAorICAgIHN0cnVjdCBGdW5jUHRyVGFibGUgeworICAgICAgICB1
aW50MzJfdCBzaWduYXR1cmVJbmRleDsKKyAgICAgICAgVmVjdG9yPHVpbnQzMl90PiBlbGVtZW50
czsKKyAgICB9OworCisgICAgTW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisg
ICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGlu
aXRpYWxpemVBcnJheUJ1ZmZlcihFeGVjU3RhdGUqKTsKKworICAgIHZvaWQgcGFyc2VDb25zdGFu
dFBvb2xTZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZVNpZ25hdHVyZVNlY3Rpb24oKTsKKyAgICB2
b2lkIHBhcnNlRnVuY3Rpb25JbXBvcnRTZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUdsb2JhbFNl
Y3Rpb24oKTsKKyAgICB2b2lkIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvblNlY3Rpb24oKTsKKyAg
ICB2b2lkIHBhcnNlRnVuY3Rpb25Qb2ludGVyVGFibGVzKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0
aW9uRGVmaW5pdGlvblNlY3Rpb24oRXhlY1N0YXRlKik7CisgICAgdm9pZCBwYXJzZUV4cG9ydFNl
Y3Rpb24oVk0mKTsKKworICAgIHZvaWQgcGFyc2VGdW5jdGlvbkRlZmluaXRpb24oRXhlY1N0YXRl
Kiwgc2l6ZV90IGZ1bmN0aW9uSW5kZXgpOworCisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
KTsKKyAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Q
cm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVy
dHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVsZXRl
UHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMg
dm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisKKyAgICBSZWFkZXIgbV9yZWFk
ZXI7CisKKyAgICBWZWN0b3I8U2lnbmF0dXJlPiBtX3NpZ25hdHVyZXM7CisgICAgVmVjdG9yPHVp
bnQzMl90PiBtX2NvbnN0YW50STMyczsKKyAgICBWZWN0b3I8ZmxvYXQ+IG1fY29uc3RhbnRGMzJz
OworICAgIFZlY3Rvcjxkb3VibGU+IG1fY29uc3RhbnRGNjRzOworICAgIFZlY3RvcjxTdHJpbmc+
IG1fZnVuY3Rpb25JbXBvcnROYW1lczsKKyAgICBWZWN0b3I8RnVuY0ltcG9ydFNpZ25hdHVyZT4g
bV9mdW5jSW1wb3J0U2lnbmF0dXJlczsKKyAgICBWZWN0b3I8VHlwZT4gbV9nbG9iYWxUeXBlczsK
KyAgICBWZWN0b3I8dWludDMyX3Q+IG1fZnVuY1NpZ25hdHVyZXM7CisgICAgVmVjdG9yPEZ1bmNQ
dHJUYWJsZT4gbV9mdW5jUHRyVGFibGVzOworCisgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0Z1
bmN0aW9uPj4gbV9mdW5jdGlvbnM7CisgICAgV3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZmZXI+IG1f
YXJyYXlCdWZmZXI7Cit9OworCitKU19FWFBPUlRfUFJJVkFURSBNb2R1bGUqIGNvbXBpbGUoRXhl
Y1N0YXRlKiwgY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpOworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V2FzbQorCisjZW5kaWYgLy8gV2FzbU1vZHVsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3Bjb2Rlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU9wY29kZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYzQ1MGI3Mjg1MDNjYjU2ZDY5M2IwNzQ4
Mzg3NDg4NWY1ODVkZjM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU9wY29kZXMuaApAQCAtMCwwICsxLDU5MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNo
ZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgeW91IG1heSBub3QgdXNl
IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIFlvdSBt
YXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgaHR0cDovL3d3dy5hcGFjaGUu
b3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJs
ZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgZGlzdHJpYnV0ZWQgdW5k
ZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyBXSVRI
T1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mg
b3IgaW1wbGllZC4KKyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBn
b3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2Uu
CisqLworCisjaWZuZGVmIFdhc21PcGNvZGVzX2gKKyNkZWZpbmUgV2FzbU9wY29kZXNfaAorCisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdh
c20geworCitzdGF0aWMgY29uc3QgdWludDMyX3QgTWFnaWNOdW1iZXIgPSAweDZkNzM2MTc3Owor
CitlbnVtIGNsYXNzIFN0bXQgOiB1aW50OF90IHsKKyAgICBTZXRMb2MsCisgICAgU2V0R2xvLAor
ICAgIEkzMlN0b3JlOCwKKyAgICBJMzJTdG9yZU9mZjgsCisgICAgSTMyU3RvcmUxNiwKKyAgICBJ
MzJTdG9yZU9mZjE2LAorICAgIEkzMlN0b3JlMzIsCisgICAgSTMyU3RvcmVPZmYzMiwKKyAgICBG
MzJTdG9yZSwKKyAgICBGMzJTdG9yZU9mZiwKKyAgICBGNjRTdG9yZSwKKyAgICBGNjRTdG9yZU9m
ZiwKKyAgICBDYWxsSW50LAorICAgIENhbGxJbmQsCisgICAgQ2FsbEltcCwKKyAgICBSZXQsCisg
ICAgQmxvY2ssCisgICAgSWZUaGVuLAorICAgIElmRWxzZSwKKyAgICBXaGlsZSwKKyAgICBEbywK
KyAgICBMYWJlbCwKKyAgICBCcmVhaywKKyAgICBCcmVha0xhYmVsLAorICAgIENvbnRpbnVlLAor
ICAgIENvbnRpbnVlTGFiZWwsCisgICAgU3dpdGNoLAorCisgICAgQmFkCit9OworCitlbnVtIGNs
YXNzIFN0bXRXaXRoSW1tIDogdWludDhfdCB7CisgICAgU2V0TG9jLAorICAgIFNldEdsbywKKyAg
ICBSZXNldmVkMSwKKyAgICBSZXNldmVkMiwKKworICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBT
d2l0Y2hDYXNlIDogdWludDhfdCB7CisgICAgQ2FzZTAsCisgICAgQ2FzZTEsCisgICAgQ2FzZU4s
CisgICAgRGVmYXVsdDAsCisgICAgRGVmYXVsdDEsCisgICAgRGVmYXVsdE4KK307CisKK2VudW0g
Y2xhc3MgSTMyIDogdWludDhfdCB7CisgICAgTGl0UG9vbCwKKyAgICBMaXRJbW0sCisgICAgR2V0
TG9jLAorICAgIEdldEdsbywKKyAgICBTZXRMb2MsCisgICAgU2V0R2xvLAorICAgIFNMb2FkOCwK
KyAgICBTTG9hZE9mZjgsCisgICAgVUxvYWQ4LAorICAgIFVMb2FkT2ZmOCwKKyAgICBTTG9hZDE2
LAorICAgIFNMb2FkT2ZmMTYsCisgICAgVUxvYWQxNiwKKyAgICBVTG9hZE9mZjE2LAorICAgIExv
YWQzMiwKKyAgICBMb2FkT2ZmMzIsCisgICAgU3RvcmU4LAorICAgIFN0b3JlT2ZmOCwKKyAgICBT
dG9yZTE2LAorICAgIFN0b3JlT2ZmMTYsCisgICAgU3RvcmUzMiwKKyAgICBTdG9yZU9mZjMyLAor
ICAgIENhbGxJbnQsCisgICAgQ2FsbEluZCwKKyAgICBDYWxsSW1wLAorICAgIENvbmQsCisgICAg
Q29tbWEsCisgICAgRnJvbUYzMiwKKyAgICBGcm9tRjY0LAorICAgIE5lZywKKyAgICBBZGQsCisg
ICAgU3ViLAorICAgIE11bCwKKyAgICBTRGl2LAorICAgIFVEaXYsCisgICAgU01vZCwKKyAgICBV
TW9kLAorICAgIEJpdE5vdCwKKyAgICBCaXRPciwKKyAgICBCaXRBbmQsCisgICAgQml0WG9yLAor
ICAgIExzaCwKKyAgICBBcml0aFJzaCwKKyAgICBMb2dpY1JzaCwKKyAgICBDbHosCisgICAgTG9n
aWNOb3QsCisgICAgRXFJMzIsCisgICAgRXFGMzIsCisgICAgRXFGNjQsCisgICAgTkVxSTMyLAor
ICAgIE5FcUYzMiwKKyAgICBORXFGNjQsCisgICAgU0xlVGhJMzIsCisgICAgVUxlVGhJMzIsCisg
ICAgTGVUaEYzMiwKKyAgICBMZVRoRjY0LAorICAgIFNMZUVxSTMyLAorICAgIFVMZUVxSTMyLAor
ICAgIExlRXFGMzIsCisgICAgTGVFcUY2NCwKKyAgICBTR3JUaEkzMiwKKyAgICBVR3JUaEkzMiwK
KyAgICBHclRoRjMyLAorICAgIEdyVGhGNjQsCisgICAgU0dyRXFJMzIsCisgICAgVUdyRXFJMzIs
CisgICAgR3JFcUYzMiwKKyAgICBHckVxRjY0LAorICAgIFNNaW4sCisgICAgVU1pbiwKKyAgICBT
TWF4LAorICAgIFVNYXgsCisgICAgQWJzLAorCisgICAgQmFkCit9OworCitlbnVtIGNsYXNzIEkz
MldpdGhJbW0gOiB1aW50OF90IHsKKyAgICBMaXRQb29sLAorICAgIExpdEltbSwKKyAgICBHZXRM
b2MsCisgICAgUmVzZXJ2ZWQsCisKKyAgICBCYWQKK307CisKK2VudW0gY2xhc3MgRjMyIDogdWlu
dDhfdCB7CisgICAgTGl0UG9vbCwKKyAgICBMaXRJbW0sCisgICAgR2V0TG9jLAorICAgIEdldEds
bywKKyAgICBTZXRMb2MsCisgICAgU2V0R2xvLAorICAgIExvYWQsCisgICAgTG9hZE9mZiwKKyAg
ICBTdG9yZSwKKyAgICBTdG9yZU9mZiwKKyAgICBDYWxsSW50LAorICAgIENhbGxJbmQsCisgICAg
Q29uZCwKKyAgICBDb21tYSwKKyAgICBGcm9tUzMyLAorICAgIEZyb21VMzIsCisgICAgRnJvbUY2
NCwKKyAgICBOZWcsCisgICAgQWRkLAorICAgIFN1YiwKKyAgICBNdWwsCisgICAgRGl2LAorICAg
IEFicywKKyAgICBDZWlsLAorICAgIEZsb29yLAorICAgIFNxcnQsCisKKyAgICBCYWQKK307CisK
K2VudW0gY2xhc3MgRjMyV2l0aEltbSA6IHVpbnQ4X3QgeworICAgIExpdFBvb2wsCisgICAgR2V0
TG9jLAorICAgIFJlc2VydmVkMCwKKyAgICBSZXNlcnZlZDEsCisKKyAgICBCYWQKK307CisKK2Vu
dW0gY2xhc3MgRjY0IDogdWludDhfdCB7CisgICAgTGl0UG9vbCwKKyAgICBMaXRJbW0sCisgICAg
R2V0TG9jLAorICAgIEdldEdsbywKKyAgICBTZXRMb2MsCisgICAgU2V0R2xvLAorICAgIExvYWQs
CisgICAgTG9hZE9mZiwKKyAgICBTdG9yZSwKKyAgICBTdG9yZU9mZiwKKyAgICBDYWxsSW50LAor
ICAgIENhbGxJbmQsCisgICAgQ2FsbEltcCwKKyAgICBDb25kLAorICAgIENvbW1hLAorICAgIEZy
b21TMzIsCisgICAgRnJvbVUzMiwKKyAgICBGcm9tRjMyLAorICAgIE5lZywKKyAgICBBZGQsCisg
ICAgU3ViLAorICAgIE11bCwKKyAgICBEaXYsCisgICAgTW9kLAorICAgIE1pbiwKKyAgICBNYXgs
CisgICAgQWJzLAorICAgIENlaWwsCisgICAgRmxvb3IsCisgICAgU3FydCwKKyAgICBDb3MsCisg
ICAgU2luLAorICAgIFRhbiwKKyAgICBBQ29zLAorICAgIEFTaW4sCisgICAgQVRhbiwKKyAgICBB
VGFuMiwKKyAgICBFeHAsCisgICAgTG4sCisgICAgUG93LAorCisgICAgQmFkCit9OworCitlbnVt
IGNsYXNzIEY2NFdpdGhJbW0gOiB1aW50OF90IHsKKyAgICBMaXRQb29sLAorICAgIEdldExvYywK
KyAgICBSZXNlcnZlZDAsCisgICAgUmVzZXJ2ZWQxLAorCisgICAgQmFkCit9OworCitlbnVtIGNs
YXNzIFZvaWQgOiB1aW50OF90IHsKKyAgICBDYWxsSW50LAorICAgIENhbGxJbmQsCisgICAgQ2Fs
bEltcCwKKworICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CisgICAg
STMyLAorICAgIEYzMiwKKyAgICBGNjQKK307CisKK2VudW0gY2xhc3MgVmFyVHlwZXMgOiB1aW50
OF90IHsKKyAgICBJMzIgPSAweDEsCisgICAgRjMyID0gMHgyLAorICAgIEY2NCA9IDB4NCwKK307
CisKK2lubGluZSBWYXJUeXBlcyBvcGVyYXRvcnwgKFZhclR5cGVzIGxocywgVmFyVHlwZXMgcmhz
KSB7IHJldHVybiBWYXJUeXBlcyh1aW50OF90KGxocykgfCB1aW50OF90KHJocykpOyB9Citpbmxp
bmUgYm9vbCBvcGVyYXRvciYoVmFyVHlwZXMgbGhzLCBWYXJUeXBlcyByaHMpIHsgcmV0dXJuIGJv
b2wodWludDhfdChsaHMpICYgdWludDhfdChyaHMpKTsgfQorCitlbnVtIGNsYXNzIFZhclR5cGVz
V2l0aEltbSA6IHVpbnQ4X3QgeworICAgIE9ubHlJMzIsCisgICAgUmVzZXJ2ZWQwLAorICAgIFJl
c2VydmVkMSwKKyAgICBSZXNlcnZlZDIKK307CisKK2VudW0gY2xhc3MgUmV0dXJuVHlwZSA6IHVp
bnQ4X3QgeworICAgIEkzMiA9IHVpbnQ4X3QoVHlwZTo6STMyKSwKKyAgICBGMzIgPSB1aW50OF90
KFR5cGU6OkYzMiksCisgICAgRjY0ID0gdWludDhfdChUeXBlOjpGNjQpLAorICAgIFZvaWQKK307
CisKK2NsYXNzIEV4cHIgeworcHVibGljOgorICAgIEV4cHIoKQorICAgIDogbV90eXBlKFJldHVy
blR5cGUoLTEpKSwgdSB7IH0KKyAgICB7CisgICAgfQorICAgIEV4cHIoSTMyIGkzMikgOiBtX3R5
cGUoUmV0dXJuVHlwZTo6STMyKSB7IHUuaTMyID0gaTMyOyB9CisgICAgRXhwcihGMzIgZjMyKSA6
IG1fdHlwZShSZXR1cm5UeXBlOjpGMzIpIHsgdS5mMzIgPSBmMzI7IH0KKyAgICBFeHByKEY2NCBm
NjQpIDogbV90eXBlKFJldHVyblR5cGU6OkY2NCkgeyB1LmY2NCA9IGY2NDsgfQorICAgIEV4cHIo
Vm9pZCB2KSA6IG1fdHlwZShSZXR1cm5UeXBlOjpWb2lkKSB7IHUudiA9IHY7IH0KKworICAgIFJl
dHVyblR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIEkzMiBpMzIoKSBj
b25zdCB7IHJldHVybiB1LmkzMjsgfQorICAgIEYzMiBmMzIoKSBjb25zdCB7IHJldHVybiB1LmYz
MjsgfQorICAgIEY2NCBmNjQoKSBjb25zdCB7IHJldHVybiB1LmY2NDsgfQorCisgICAgYm9vbCBv
cGVyYXRvcj09KEV4cHIgcmhzKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gcmhzLm1fdHlwZSAm
JiB1LnJhdyA9PSByaHMudS5yYXc7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oRXhwciByaHMpIGNv
bnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gcmhzKTsgfQorCitwcml2YXRlOgorICAgIFJldHVyblR5
cGUgbV90eXBlOworICAgIHVuaW9uIFUgeworICAgICAgICBJMzIgaTMyOworICAgICAgICBGMzIg
ZjMyOworICAgICAgICBGNjQgZjY0OworICAgICAgICBWb2lkIHY7CisgICAgICAgIHVpbnQ4X3Qg
cmF3OworICAgIH0gdTsKKworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFUpID09IHNpemVvZih1
aW50OF90KSwgIkV4YWN0IG92ZXJsYXkgb2YgcmF3XyIpOworfTsKKworc3RhdGljIGNvbnN0IHVp
bnQ4X3QgSGFzSW1tRmxhZyA9IDB4ODA7CitzdGF0aWNfYXNzZXJ0KHVpbnQ4X3QoSTMyOjpCYWQp
IDw9IEhhc0ltbUZsYWcsICJNU0IgcmVzZXJ2ZWQgdG8gZGlzdGluZ3Vpc2ggSTMyIGZyb20gSTMy
V2l0aEltbSIpOworc3RhdGljX2Fzc2VydCh1aW50OF90KEYzMjo6QmFkKSA8PSBIYXNJbW1GbGFn
LCAiTVNCIHJlc2VydmVkIHRvIGRpc3Rpbmd1aXNoIEYzMiBmcm9tIEYzMldpdGhJbW0iKTsKK3N0
YXRpY19hc3NlcnQodWludDhfdChGNjQ6OkJhZCkgPD0gSGFzSW1tRmxhZywgIk1TQiByZXNlcnZl
ZCB0byBkaXN0aW5ndWlzaCBGNjQgZnJvbSBGNjRXaXRoSW1tIik7CisKK3N0YXRpYyBjb25zdCB1
bnNpZ25lZCBPcFdpdGhJbW1CaXRzID0gMjsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBPcFdpdGhJ
bW1MaW1pdCA9IDEgPDwgT3BXaXRoSW1tQml0czsKK3N0YXRpY19hc3NlcnQodWludDhfdChJMzJX
aXRoSW1tOjpCYWQpIDw9IE9wV2l0aEltbUxpbWl0LCAiSTMyV2l0aEltbSBvcCBmaXRzIik7Citz
dGF0aWNfYXNzZXJ0KHVpbnQ4X3QoRjMyV2l0aEltbTo6QmFkKSA8PSBPcFdpdGhJbW1MaW1pdCwg
IkYzMldpdGhJbW0gb3AgZml0cyIpOworc3RhdGljX2Fzc2VydCh1aW50OF90KEY2NFdpdGhJbW06
OkJhZCkgPD0gT3BXaXRoSW1tTGltaXQsICJGNjRXaXRoSW1tIG9wIGZpdHMiKTsKKworc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIEltbUJpdHMgPSA1Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IEltbUxp
bWl0ID0gMSA8PCBJbW1CaXRzOworc3RhdGljX2Fzc2VydCgoMSArIE9wV2l0aEltbUJpdHMgKyBJ
bW1CaXRzKSA9PSA4LCAiQml0cyBvZiBpbW1lZGlhdGUgb3Agc2hvdWxkIGFkZCB1cCB0byBhIGJ5
dGUiKTsKKworc3RhdGljIGlubGluZSB1aW50OF90IFBhY2tPcFdpdGhJbW0odWludDhfdCBvcCwg
dWludDhfdCBpbW0pCit7CisgICAgYXNzZXJ0KG9wIDwgT3BXaXRoSW1tTGltaXQpOworICAgIGFz
c2VydChpbW0gPCBJbW1MaW1pdCk7CisgICAgcmV0dXJuIEhhc0ltbUZsYWcgfCAodWludDhfdChv
cCkgPDwgSW1tQml0cykgfCBpbW07Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUV2l0aEltbT4KK3N0
YXRpYyBpbmxpbmUgdm9pZCBVbnBhY2tPcFdpdGhJbW0odWludDhfdCBieXRlLCBUV2l0aEltbSog
b3AsIHVpbnQ4X3QgKmltbSkKK3sKKyAgICBhc3NlcnQoYnl0ZSAmIEhhc0ltbUZsYWcpOworICAg
ICpvcCA9IFRXaXRoSW1tKChieXRlID4+IEltbUJpdHMpICYgKE9wV2l0aEltbUxpbWl0IC0gMSkp
OworICAgICppbW0gPSBieXRlICYgKEltbUxpbWl0IC0gMSk7Cit9CisKK2NsYXNzIEV4cHJXaXRo
SW1tIHsKK3B1YmxpYzoKKyAgICBFeHByV2l0aEltbSgpCisgICAgICAgIDogbV90eXBlKFR5cGUo
LTEpKQorICAgIHsKKyAgICB9CisgICAgRXhwcldpdGhJbW0oSTMyV2l0aEltbSBpMzIpIDogbV90
eXBlKFR5cGU6OkkzMikgeyB1LmkzMiA9IGkzMjsgfQorICAgIEV4cHJXaXRoSW1tKEYzMldpdGhJ
bW0gZjMyKSA6IG1fdHlwZShUeXBlOjpGMzIpIHsgdS5mMzIgPSBmMzI7IH0KKyAgICBFeHByV2l0
aEltbShGNjRXaXRoSW1tIGY2NCkgOiBtX3R5cGUoVHlwZTo6RjY0KSB7IHUuZjY0ID0gZjY0OyB9
CisKKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBJMzJXaXRo
SW1tIGkzMigpIGNvbnN0IHsgcmV0dXJuIHUuaTMyOyB9CisgICAgRjMyV2l0aEltbSBmMzIoKSBj
b25zdCB7IHJldHVybiB1LmYzMjsgfQorICAgIEY2NFdpdGhJbW0gZjY0KCkgY29uc3QgeyByZXR1
cm4gdS5mNjQ7IH0KKworcHJpdmF0ZToKKyAgICBUeXBlIG1fdHlwZTsKKyAgICB1bmlvbiBVIHsK
KyAgICAgICAgSTMyV2l0aEltbSBpMzI7CisgICAgICAgIEYzMldpdGhJbW0gZjMyOworICAgICAg
ICBGNjRXaXRoSW1tIGY2NDsKKyAgICAgICAgdWludDhfdCByYXc7CisgICAgfSB1OworCisgICAg
c3RhdGljX2Fzc2VydChzaXplb2YoVSkgPT0gc2l6ZW9mKHVpbnQ4X3QpLCAiRXhhY3Qgb3Zlcmxh
eSBvZiByYXdfIik7Cit9OworCitlbnVtIGNsYXNzIEV4cG9ydEZvcm1hdCA6IHVpbnQ4X3Qgewor
ICAgIERlZmF1bHQsCisgICAgUmVjb3JkCit9OworCitzdHJ1Y3QgU2lnbmF0dXJlIHsKKyAgICBS
ZXR1cm5UeXBlIHJldHVyblR5cGU7CisgICAgVmVjdG9yPFR5cGU+IGFyZ3VtZW50czsKKworICAg
IFNpZ25hdHVyZSgpIHsgfQorICAgIFNpZ25hdHVyZShSZXR1cm5UeXBlIHJldHVyblR5cGUpCisg
ICAgICAgIDogcmV0dXJuVHlwZShyZXR1cm5UeXBlKSB7IH0KKyAgICBTaWduYXR1cmUoUmV0dXJu
VHlwZSByZXR1cm5UeXBlLCB1aW50MzJfdCBhcmd1bWVudENvdW50KQorICAgICAgICA6IHJldHVy
blR5cGUocmV0dXJuVHlwZSkKKyAgICAgICAgLCBhcmd1bWVudHMoYXJndW1lbnRDb3VudCkgeyB9
CisgICAgU2lnbmF0dXJlKFJldHVyblR5cGUgcmV0dXJuVHlwZSwgVmVjdG9yPFR5cGU+JiYgYXJn
dW1lbnRzKQorICAgICAgICA6IHJldHVyblR5cGUocmV0dXJuVHlwZSkKKyAgICAgICAgLCBhcmd1
bWVudHMoV1RGOjptb3ZlKGFyZ3VtZW50cykpIHsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFNpZ25hdHVyZSYgcmhzKSBjb25zdCB7IHJldHVybiByZXR1cm5UeXBlID09IHJocy5yZXR1
cm5UeXBlICYmIGFyZ3VtZW50cyA9PSByaHMuYXJndW1lbnRzOyB9CisgICAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IFNpZ25hdHVyZSYgcmhzKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IHJocyk7
IH0KKworICAgIHN0cnVjdCBIYXNoIHsKKyAgICAgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IFNp
Z25hdHVyZSAmc2lnbmF0dXJlKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBzdGF0aWNf
YXNzZXJ0KHNpemVvZihUeXBlKSA9PSAxICYmIHNpemVvZihSZXR1cm5UeXBlKSA9PSAxLCAiU2hp
ZnQgbW9yZSIpOworICAgICAgICAgICAgdWludDMyX3QgaCA9IHVpbnQ4X3Qoc2lnbmF0dXJlLnJl
dHVyblR5cGUpOworICAgICAgICAgICAgZm9yIChUeXBlIHQgOiBzaWduYXR1cmUuYXJndW1lbnRz
KQorICAgICAgICAgICAgICAgIGggPSAoKGggPDwgMikgfCB1aW50OF90KHQpKSBeIChoID4+IDMw
KTsKKyAgICAgICAgICAgIHJldHVybiBoOworICAgICAgICB9CisgICAgfTsKK307CisKK2NsYXNz
IFJlYWRlciB7CitwdWJsaWM6CisgICAgUmVhZGVyKCkgeyB9CisgICAgUmVhZGVyKGNvbnN0IHVp
bnQ4X3QqIGJlZ2luKQorICAgICAgICA6IG1fY3Vyc29yKGJlZ2luKQorICAgIHsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gVCBmaXhlZFdpZHRoKCk7CisgICAgU3RtdCBzdG10KCkg
eyByZXR1cm4gdTg8U3RtdD4oKTsgfQorICAgIFN3aXRjaENhc2Ugc3dpdGNoQ2FzZSgpIHsgcmV0
dXJuIHU4PFN3aXRjaENhc2U+KCk7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBUV2l0
aEltbT4gaW5saW5lIGJvb2wgY29kZShUKiwgVFdpdGhJbW0qLCB1aW50OF90Kik7CisgICAgVm9p
ZCB2b2lkRXhwcigpIHsgcmV0dXJuIHU4PFZvaWQ+KCk7IH0KKyAgICBFeHBvcnRGb3JtYXQgZXhw
b3J0Rm9ybWF0KCkgeyByZXR1cm4gdTg8RXhwb3J0Rm9ybWF0PigpOyB9CisgICAgVHlwZSB0eXBl
KCkgeyByZXR1cm4gdTg8VHlwZT4oKTsgfQorICAgIFJldHVyblR5cGUgcmV0dXJuVHlwZSgpIHsg
cmV0dXJuIHU4PFJldHVyblR5cGU+KCk7IH0KKyAgICBpbmxpbmUgdWludDMyX3QgaW1tVTMyKCk7
CisgICAgaW5saW5lIGludDMyX3QgaW1tUzMyKCk7CisgICAgY2hhciBzaW5nbGVDaGFyKCkgeyBy
ZXR1cm4gKm1fY3Vyc29yKys7IH0KKworICAgIGlubGluZSBib29sIGlmSTMyTGl0KGNvbnN0IFZl
Y3Rvcjx1aW50MzJfdD4mIGkzMnMsIHVpbnQzMl90Kik7CisKK3ByaXZhdGU6CisgICAgdGVtcGxh
dGUgPGNsYXNzIFQ+IFQgdTgoKSB7IHJldHVybiBUKCptX2N1cnNvcisrKTsgfQorCisgICAgY29u
c3QgdWludDhfdCogbV9jdXJzb3I7Cit9OworCit0ZW1wbGF0ZSA8PgoraW5saW5lIHVpbnQzMl90
IFJlYWRlcjo6Zml4ZWRXaWR0aDx1aW50MzJfdD4oKQoreworICAgIHVpbnQzMl90IHUzMiA9IG1f
Y3Vyc29yWzBdIHwgbV9jdXJzb3JbMV0gPDwgOCB8IG1fY3Vyc29yWzJdIDw8IDE2IHwgbV9jdXJz
b3JbM10gPDwgMjQ7CisgICAgbV9jdXJzb3IgKz0gNDsKKyAgICByZXR1cm4gdTMyOworfQorCit0
ZW1wbGF0ZSA8PgoraW5saW5lIGZsb2F0IFJlYWRlcjo6Zml4ZWRXaWR0aDxmbG9hdD4oKQorewor
ICAgIHVuaW9uIHsKKyAgICAgICAgdWludDhfdCBhcnJbNF07CisgICAgICAgIGZsb2F0IGY7Cisg
ICAgfSB1ID0geyB7IG1fY3Vyc29yWzBdLCBtX2N1cnNvclsxXSwgbV9jdXJzb3JbMl0sIG1fY3Vy
c29yWzNdIH0gfTsKKyAgICBtX2N1cnNvciArPSA0OworICAgIHJldHVybiB1LmY7Cit9CisKK3Rl
bXBsYXRlIDw+CitpbmxpbmUgZG91YmxlIFJlYWRlcjo6Zml4ZWRXaWR0aDxkb3VibGU+KCkKK3sK
KyAgICB1bmlvbiB7CisgICAgICAgIHVpbnQ4X3QgYXJyWzhdOworICAgICAgICBkb3VibGUgZDsK
KyAgICB9IHUgPSB7IHsgbV9jdXJzb3JbMF0sIG1fY3Vyc29yWzFdLCBtX2N1cnNvclsyXSwgbV9j
dXJzb3JbM10sIG1fY3Vyc29yWzRdLCBtX2N1cnNvcls1XSwgbV9jdXJzb3JbNl0sIG1fY3Vyc29y
WzddIH0gfTsKKyAgICBtX2N1cnNvciArPSA4OworICAgIHJldHVybiB1LmQ7Cit9CisKK3RlbXBs
YXRlIDxjbGFzcyBULCBjbGFzcyBUV2l0aEltbT4KK2Jvb2wgUmVhZGVyOjpjb2RlKFQqIHQsIFRX
aXRoSW1tKiB0V2l0aEltbSwgdWludDhfdCogaW1tKQoreworICAgIHVpbnQ4X3QgYnl0ZSA9ICpt
X2N1cnNvcisrOworICAgIGlmICghKGJ5dGUgJiBIYXNJbW1GbGFnKSkgeworICAgICAgICAqdCA9
IFQoYnl0ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIFVucGFja09wV2l0
aEltbShieXRlLCB0V2l0aEltbSwgaW1tKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGlu
ZSB1aW50MzJfdCBSZWFkZXI6OmltbVUzMigpCit7CisgICAgdWludDMyX3QgdTMyID0gKm1fY3Vy
c29yKys7CisgICAgaWYgKHUzMiA8IDB4ODApCisgICAgICAgIHJldHVybiB1MzI7CisKKyAgICB1
MzIgJj0gMHg3ZjsKKworICAgIGZvciAodW5zaWduZWQgc2hpZnQgPSA3OyB0cnVlOyBzaGlmdCAr
PSA3KSB7CisgICAgICAgIHVpbnQzMl90IGIgPSAqbV9jdXJzb3IrKzsKKyAgICAgICAgaWYgKGIg
PCAweDgwKQorICAgICAgICAgICAgcmV0dXJuIHUzMiB8IChiIDw8IHNoaWZ0KTsKKyAgICAgICAg
dTMyIHw9IChiICYgMHg3ZikgPDwgc2hpZnQ7CisgICAgfQorfQorCitpbmxpbmUgaW50MzJfdCBS
ZWFkZXI6OmltbVMzMigpCit7CisgICAgdWludDMyX3QgdTMyID0gKm1fY3Vyc29yKys7CisgICAg
aWYgKHUzMiA8IDB4ODApCisgICAgICAgIHJldHVybiBpbnQzMl90KHUzMikgPDwgKDMyLTcpID4+
ICgzMi03KTsKKworICAgIHUzMiAmPSAweDdmOworCisgICAgZm9yICh1bnNpZ25lZCBzaGlmdCA9
IDc7IHRydWU7IHNoaWZ0ICs9IDcpIHsKKyAgICAgICAgdWludDMyX3QgYiA9ICptX2N1cnNvcisr
OworICAgICAgICBpZiAoYiA8IDB4ODApIHsKKyAgICAgICAgICAgIHUzMiB8PSBiIDw8IHNoaWZ0
OworICAgICAgICAgICAgaW50IHNpZ25FeHRlbmQgPSAoMzItNykgLSBzaGlmdDsKKyAgICAgICAg
ICAgIGlmIChzaWduRXh0ZW5kID4gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50MzJfdCh1
MzIpIDw8IHNpZ25FeHRlbmQgPj4gc2lnbkV4dGVuZDsKKyAgICAgICAgICAgIHJldHVybiBpbnQz
Ml90KHUzMik7CisgICAgICAgIH0KKyAgICAgICAgdTMyIHw9IChiICYgMHg3ZikgPDwgc2hpZnQ7
CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBSZWFkZXI6OmlmSTMyTGl0KGNvbnN0IFZlY3Rvcjx1
aW50MzJfdD4mIGkzMnMsIHVpbnQzMl90KiB1MzIpCit7CisgICAgdWludDhfdCBieXRlID0gKm1f
Y3Vyc29yOworCisgICAgaWYgKGJ5dGUgJiBIYXNJbW1GbGFnKSB7CisgICAgICAgIEkzMldpdGhJ
bW0gaTMyV2l0aEltbTsKKyAgICAgICAgdWludDhfdCBpbW07CisgICAgICAgIFVucGFja09wV2l0
aEltbShieXRlLCAmaTMyV2l0aEltbSwgJmltbSk7CisKKyAgICAgICAgaWYgKGkzMldpdGhJbW0g
PT0gSTMyV2l0aEltbTo6TGl0SW1tKSB7CisgICAgICAgICAgICBtX2N1cnNvcisrOworICAgICAg
ICAgICAgKnUzMiA9IGltbTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGkzMldpdGhJbW0gPT0gSTMyV2l0aEltbTo6TGl0UG9vbCkgeworICAgICAg
ICAgICAgbV9jdXJzb3IrKzsKKyAgICAgICAgICAgICp1MzIgPSBpMzJzW2ltbV07CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBpZiAoSTMyKGJ5dGUpID09IEkzMjo6TGl0SW1tKSB7CisgICAgICAgIG1fY3Vy
c29yKys7CisgICAgICAgICp1MzIgPSBpbW1VMzIoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgaWYgKEkzMihieXRlKSA9PSBJMzI6OkxpdFBvb2wpIHsKKyAgICAgICAgbV9j
dXJzb3IrKzsKKyAgICAgICAgKnUzMiA9IGkzMnNbaW1tVTMyKCldOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpXYXNtCisKKyNlbmRpZiAvLyBXYXNtT3Bjb2Rlc19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256765</attachid>
            <date>2015-07-14 04:16:09 -0700</date>
            <delta_ts>2015-07-15 12:43:12 -0700</delta_ts>
            <desc>Work in progress. Implement all the linear memory operations and many mathematical operations.</desc>
            <filename>bug-146064-20150714041502.patch</filename>
            <type>text/plain</type>
            <size>129713</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg2NTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
OWZhNzg4ZjIxZjdmOTg5ZDI1NDdkMTQwYTMyNDRlY2RmNjcwZGI0Li5hYTQwZDNmZDllMDU0OTU3
NjhhZTIyZjA3Njc0ZTVmY2JkYzE0OTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNzcgQEAKKzIwMTUtMDctMTQgIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0Bn
bWFpbC5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBuYXRpdmVseSBzdXBwb3J0IFdlYkFzc2Vt
Ymx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYw
NjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppbmZlcnJlZE5hbWUp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6Oldl
YkFzc2VtYmx5Q29kZUJsb2NrOjpyZXBsYWNlbWVudCk6CisgICAgICAgIChKU0M6OldlYkFzc2Vt
Ymx5Q29kZUJsb2NrOjpjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCk6CisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29kZVR5cGUpOgorICAg
ICAgICAoSlNDOjpXZWJBc3NlbWJseUNvZGVCbG9jazo6V2ViQXNzZW1ibHlDb2RlQmxvY2spOgor
ICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAg
ICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChmdW5jdGlvbkxv
YWRXZWJBc3NlbWJseSk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAg
ICAgICAoSlNDOjpMTEludDo6c2V0VXBDYWxsKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFi
bGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZSk6Cisg
ICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6Om5ld0NvZGVCbG9ja0Zvcik6CisgICAgICAg
IChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb25JbXBsKToKKyAgICAg
ICAgKEpTQzo6V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpXZWJBc3NlbWJseUV4ZWN1dGFibGUpOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4ZWN1dGFibGU6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpkZXN0cm95KToKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpiYXNlbGluZUNvZGVCbG9ja0Zvcik6CisgICAgICAg
IChKU0M6OldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChK
U0M6OldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6c3ltYm9sVGFibGUpOgorICAgICAgICAoSlNDOjpX
ZWJBc3NlbWJseUV4ZWN1dGFibGU6OmNsZWFyQ29kZSk6CisgICAgICAgIChKU0M6OldlYkFzc2Vt
Ymx5RXhlY3V0YWJsZTo6dW5saW5rQ2FsbHMpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJs
ZS5oOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6aXNXZWJBc3NlbWJseUV4ZWN1dGFi
bGUpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlVmlydHVhbCk6Cisg
ICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlv
bjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKEpT
Qzo6SlNGdW5jdGlvbjo6Y3JlYXRlSW1wbCk6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9u
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKToKKyAgICAg
ICAgKEpTQzo6SlNGdW5jdGlvbjo6aXNIb3N0RnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUv
SlNUeXBlLmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpW
TSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAqIHdhc20vV2FzbUpJVENvbXBp
bGVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206Okp1bXBTY29wZTo6SnVtcFNjb3Bl
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SnVtcFNjb3BlOjpqdW1wKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6SnVtcFNjb3BlOjpsaW5rKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6
OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjphbGxv
Y2F0ZVNwYWNlT25TdGFjayk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpkZWFs
bG9jYXRlU3BhY2VPblN0YWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBh
cnNlQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlVmFy
cyk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZVN0bXQpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VHZXRMb2NhbCk6CisgICAgICAgIChKU0M6
Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZVNldExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
Z2V0QXJyYXlCdWZmZXJEYXRhKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBh
cnNlQXJyYXlCdWZmZXJPZmZzZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6
cGFyc2VMb2FkKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlU3RvcmUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VSZXR1cm5TdG10KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlU3RtdExpc3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VCbG9ja1N0bXQpOgorICAgICAgICAoSlNDOjpX
YXNtOjpKSVRDb21waWxlcjo6cGFyc2VJZlN0bXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRD
b21waWxlcjo6cGFyc2VJZkVsc2VTdG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGls
ZXI6OnBhcnNlV2hpbGVTdG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBh
cnNlRG9TdG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlTGFiZWxT
dG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlQnJlYWtTdG10KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlQnJlYWtMYWJlbFN0bXQpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VDb250aW51ZVN0bXQpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VDb250aW51ZUxhYmVsU3RtdCk6Cisg
ICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZVN3aXRjaFN0bXQpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VFeHByKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6SklUQ29tcGlsZXI6OnBhcnNlRXhwckkzMik6CisgICAgICAgIChKU0M6Oldhc206OkpJVENv
bXBpbGVyOjpwYXJzZUV4cHJGNjQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6
cGFyc2VFeHByVm9pZCk6CisgICAgICAgIChKU0M6Oldhc206OmdldEludGVybmFsRnVuY3Rpb24p
OgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VDYWxsSW50ZXJuYWwpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpnZXRJbXBvcnRlZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlQ2FsbEltcG9ydCk6CisgICAgICAgIChKU0M6Oldhc206
OkpJVENvbXBpbGVyOjpjYWxsRnVuY3Rpb25TbG93Q2FzZSk6CisgICAgICAgIChKU0M6Oldhc206
OkpJVENvbXBpbGVyOjpwYXJzZUNhbGxBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpK
SVRDb21waWxlcjo6Y2FsbERvdWJsZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklU
Q29tcGlsZXI6OnBhcnNlVW5hcnlPcCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVy
OjpwYXJzZUJpbmFyeU9wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNl
UmVsYXRpb25hbE9wSTMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNl
UmVsYXRpb25hbE9wRjY0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNl
Q29tbWEpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VDb25kKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlTWluTWF4STMyKToKKyAgICAgICAg
KiB3YXNtL1dhc21KSVRDb21waWxlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6SklU
Q29tcGlsZXI6OkpJVENvbXBpbGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6
OnN0YWNrQWRkcmVzcyk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjp0ZW1wb3Jh
cnlBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnB1c2hDb250aW51
ZUxhYmVsTGFiZWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cG9wQ29udGlu
dWVMYWJlbExhYmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OmNvbnRpbnVl
TGFiZWxMYWJlbCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwdXNoQnJlYWtM
YWJlbEp1bXBMaXN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBvcEJyZWFr
TGFiZWxKdW1wTGlzdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpicmVha0xh
YmVsSnVtcExpc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cHVzaENvbnRp
bnVlSnVtcFNjb3BlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBvcENvbnRp
bnVlSnVtcFNjb3BlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnRvcENvbnRp
bnVlSnVtcFNjb3BlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnB1c2hCcmVh
a0p1bXBMaXN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBvcEJyZWFrSnVt
cExpc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6dG9wQnJlYWtKdW1wTGlz
dCk6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
Oldhc206Ok1vZHVsZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1
bGU6OnBhcnNlQ29uc3RhbnRQb29sU2VjdGlvbik6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVs
ZTo6cGFyc2VTaWduYXR1cmVTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpw
YXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlvbik6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6
cGFyc2VHbG9iYWxTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpwYXJzZUZ1
bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpw
YXJzZUZ1bmN0aW9uUG9pbnRlclRhYmxlcyk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6
cGFyc2VGdW5jdGlvbkRlZmluaXRpb25TZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9k
dWxlOjpwYXJzZUV4cG9ydFNlY3Rpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OnBh
cnNlRnVuY3Rpb25EZWZpbml0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpmdW5j
dGlvbik6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6YXJyYXlCdWZmZXJEYXRhKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TW9kdWxlOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpN
b2R1bGU6OnB1dCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6ZGVmaW5lT3duUHJvcGVy
dHkpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpjb21waWxlKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGUuaDog
QWRkZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpN
b2R1bGU6OmZ1bmN0aW9uSW1wb3J0TmFtZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6
TW9kdWxlKToKKyAgICAgICAgKiB3YXNtL1dhc21PcGNvZGVzLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpXYXNtOjpvcGVyYXRvcnwgKToKKyAgICAgICAgKEpTQzo6V2FzbTo6b3BlcmF0b3ImKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcjo6RXhwcik6CisgICAgICAgIChKU0M6Oldhc206OkV4
cHI6OnR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpFeHByOjppMzIpOgorICAgICAgICAoSlND
OjpXYXNtOjpFeHByOjpmMzIpOgorICAgICAgICAoSlNDOjpXYXNtOjpFeHByOjpmNjQpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpFeHByOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
RXhwcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6Oldhc206OlBhY2tPcFdpdGhJbW0pOgor
ICAgICAgICAoSlNDOjpXYXNtOjpVbnBhY2tPcFdpdGhJbW0pOgorICAgICAgICAoSlNDOjpXYXNt
OjpFeHByV2l0aEltbTo6RXhwcldpdGhJbW0pOgorICAgICAgICAoSlNDOjpXYXNtOjpFeHByV2l0
aEltbTo6dHlwZSk6CisgICAgICAgIChKU0M6Oldhc206OkV4cHJXaXRoSW1tOjppMzIpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpFeHByV2l0aEltbTo6ZjMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
RXhwcldpdGhJbW06OmY2NCk6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZTo6U2lnbmF0
dXJlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0dXJlOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6U2lnbmF0dXJlOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6U2lnbmF0dXJlOjpIYXNoOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVh
ZGVyOjpSZWFkZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OnN0bXQpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpSZWFkZXI6OnN3aXRjaENhc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpS
ZWFkZXI6OnZvaWRFeHByKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVhZGVyOjpleHBvcnRGb3Jt
YXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OnR5cGUpOgorICAgICAgICAoSlNDOjpX
YXNtOjpSZWFkZXI6OnJldHVyblR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OnNp
bmdsZUNoYXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OnU4KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6UmVhZGVyOjpmaXhlZFdpZHRoPHVpbnQzMl90Pik6CisgICAgICAgIChKU0M6Oldh
c206OlJlYWRlcjo6Zml4ZWRXaWR0aDxmbG9hdD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFk
ZXI6OmZpeGVkV2lkdGg8ZG91YmxlPik6CisgICAgICAgIChKU0M6Oldhc206OlJlYWRlcjo6Y29k
ZSk6CisgICAgICAgIChKU0M6Oldhc206OlJlYWRlcjo6aW1tVTMyKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6UmVhZGVyOjppbW1TMzIpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OmlmSTMy
TGl0KToKKwogMjAxNS0wNy0wOCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29t
PgogCiAgICAgICAgIEZpeCBncmFtbWFyIGlzc3VlIGluIFR5cGVFcnJvciBhdHRlbXB0aW5nIHRv
IGNoYW5nZSBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCAwNmU5OTcwYzUyY2UwMTJhY2YzODA0MzI0MzdmMmMyNmY1Mjg4YTcwLi4wNDE5
MjhmNDRkMmNlYzg5N2ZkZjQ0NGY2YzI2NTJhY2U1YTFkOWNkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTAyMCw2ICsxMDIwLDExIEBACiAJCTcwRUNBNjA3MUFGREJFQTIwMDQ0
OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjAyMUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJl
Z2lzdHJ5LmNwcCAqLzsgfTsKIAkJNzBFQ0E2MDgxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRl
UmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcwRUNBNjAzMUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzBFQ0E2MDkxQUZEQkVB
MjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjA0MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1w
bGF0ZVJlZ2lzdHJ5S2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJN0JEMTBDNDIxQjRFRDQzQzAwQkQ1NDFBIC8qIFdhc21KSVRDb21waWxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkQxMEMz
RDFCNEVENDM5MDBCRDU0MUEgLyogV2FzbUpJVENvbXBpbGVyLmNwcCAqLzsgfTsKKwkJN0JEMTBD
NDMxQjRFRDQ0MDAwQkQ1NDFBIC8qIFdhc21KSVRDb21waWxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JEMTBDM0UxQjRFRDQzOTAwQkQ1NDFBIC8q
IFdhc21KSVRDb21waWxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTdCRDEwQzQ0MUI0RUQ0NDUwMEJENTQxQSAvKiBXYXNtTW9kdWxlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRDEwQzNGMUI0
RUQ0MzkwMEJENTQxQSAvKiBXYXNtTW9kdWxlLmNwcCAqLzsgfTsKKwkJN0JEMTBDNDUxQjRFRDQ0
OTAwQkQ1NDFBIC8qIFdhc21Nb2R1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdCRDEwQzQwMUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNtTW9kdWxlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0JEMTBD
NDYxQjRFRDQ0RTAwQkQ1NDFBIC8qIFdhc21PcGNvZGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkQxMEM0MTFCNEVENDM5MDBCRDU0MUEgLyogV2Fz
bU9wY29kZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3QzAwOENEQTE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwMDhDRDgxODcx
MjRCQjAwOTU1QzI0IC8qIEpTUHJvbWlzZURlZmVycmVkLmNwcCAqLzsgfTsKIAkJN0MwMDhDREIx
ODcxMjRCQjAwOTU1QzI0IC8qIEpTUHJvbWlzZURlZmVycmVkLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzAwOENEOTE4NzEyNEJCMDA5NTVDMjQgLyog
SlNQcm9taXNlRGVmZXJyZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3QzAwOENFNzE4NzYzMUI2MDA5NTVDMjQgLyogTWljcm90YXNrLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzAwOENFNTE4NzYz
MUI2MDA5NTVDMjQgLyogTWljcm90YXNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI3NjIsNiArMjc2NywxMSBAQAogCQk3MEVDQTYwMjFBRkRC
RUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUZW1wbGF0ZVJlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzBFQ0E2MDMxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MEVDQTYwNDFBRkRCRUEyMDA0NDk3MzkgLyog
VGVtcGxhdGVSZWdpc3RyeUtleS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
ZW1wbGF0ZVJlZ2lzdHJ5S2V5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCRDEw
QzNEMUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNtSklUQ29tcGlsZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUpJVENvbXBpbGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJN0JEMTBDM0UxQjRFRDQzOTAwQkQ1NDFBIC8qIFdhc21KSVRDb21w
aWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtSklUQ29tcGlsZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0JEMTBDM0YxQjRFRDQzOTAwQkQ1NDFB
IC8qIFdhc21Nb2R1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2FzbU1vZHVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCRDEwQzQwMUI0
RUQ0MzkwMEJENTQxQSAvKiBXYXNtTW9kdWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdhc21Nb2R1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0JEMTBD
NDExQjRFRDQzOTAwQkQ1NDFBIC8qIFdhc21PcGNvZGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdhc21PcGNvZGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdDMDA4Q0Q4MTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Byb21pc2VEZWZlcnJlZC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMDA4Q0Q5MTg3MTI0QkIwMDk1NUMyNCAvKiBK
U1Byb21pc2VEZWZlcnJlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1By
b21pc2VEZWZlcnJlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzAwOENFNTE4
NzYzMUI2MDA5NTVDMjQgLyogTWljcm90YXNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1pY3JvdGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzYxNyw2
ICszNjI3LDcgQEAKIAkJCQk3RUY2RTBCQjBFQjdBMUVDMDA3OUFGQUYgLyogcnVudGltZSAqLywK
IAkJCQkxNDEyMTEwMDBBNDg3NzI2MDA0ODAyNTUgLyogdGVzdHMgKi8sCiAJCQkJODYwM0NFRjAx
NEM3NTNFRjAwQUU1OUUzIC8qIHRvb2xzICovLAorCQkJCTdCRDEwQzNDMUI0RUQ0MUQwMEJENTQx
QSAvKiB3YXNtICovLAogCQkJCTg2RUFDNDhDMEY5M0U4QjkwMDhFQzk0OCAvKiB5YXJyICovLAog
CQkJKTsKIAkJCW5hbWUgPSBKYXZhU2NyaXB0Q29yZTsKQEAgLTQyNzksNiArNDI5MCwxOCBAQAog
CQkJcGF0aCA9IGRpc2Fzc2VtYmxlci9BUk12NzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CiAJCX07CisJCTdCRDEwQzNDMUI0RUQ0MUQwMEJENTQxQSAvKiB3YXNtICovID0geworCQkJaXNh
ID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3QkQxMEMzRDFCNEVENDM5MDBCRDU0
MUEgLyogV2FzbUpJVENvbXBpbGVyLmNwcCAqLywKKwkJCQk3QkQxMEMzRTFCNEVENDM5MDBCRDU0
MUEgLyogV2FzbUpJVENvbXBpbGVyLmggKi8sCisJCQkJN0JEMTBDM0YxQjRFRDQzOTAwQkQ1NDFB
IC8qIFdhc21Nb2R1bGUuY3BwICovLAorCQkJCTdCRDEwQzQwMUI0RUQ0MzkwMEJENTQxQSAvKiBX
YXNtTW9kdWxlLmggKi8sCisJCQkJN0JEMTBDNDExQjRFRDQzOTAwQkQ1NDFBIC8qIFdhc21PcGNv
ZGVzLmggKi8sCisJCQkpOworCQkJcGF0aCA9IHdhc207CisJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOworCQl9OwogCQk3RTM5RDgxRDBFQzM4RUZBMDAzQUYxMUEgLyogYnl0ZWNvbXBpbGVyICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTYwMTEsNiArNjAz
NCw3IEBACiAJCQkJQkMxOEM0MDUwRTE2RjVDRDAwQjM0NDYwIC8qIEZ1bmN0aW9uUHJvdG90eXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0JFMkNBRTE0RTk4NUFBMDAwNTkzQUQgLyogR0NBc3Nl
cnRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzMDE1QThEQ0UyMDA4RjM2M0UgLyog
R0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QkQxMEM0NTFCNEVE
NDQ5MDBCRDU0MUEgLyogV2FzbU1vZHVsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBFQzBFQzcx
QUEwRDdEQTAwQjZBQUZBIC8qIFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJCNjZBQzE3QjZCNTNGMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29t
aW5nUmVmQ291bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjE0NSw2ICs2MTY5LDcg
QEAKIAkJCQlCQzE4QzQxRDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDbGFzc1JlZi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODZFM0M2MTMxNjdCQUJENzAwNkQ3NjBBIC8qIEpTQ29udGV4dC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODZFM0M2MTcxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4dEludGVy
bmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QkQxMEM0MzFCNEVENDQwMDBCRDU0MUEgLyogV2Fz
bUpJVENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxRTBFMTZGNUNEMDBCMzQ0
NjAgLyogSlNDb250ZXh0UmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDhDRDFEODEwOENGOTAy
MDA4MTYzQzYgLyogSlNDb250ZXh0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcy
MDI4QjgxNzk3NjAxRTAwOTgwMjhDIC8qIEpTQ1Rlc3RSdW5uZXJVdGlscy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02MTU0LDYgKzYxNzksNyBAQAogCQkJCTk3ODgwMTQxMTQ3MUFEOTIwMDQxQjAxNiAv
KiBKU0RhdGVNYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkE3RjY4ODE2MDQzMkQ0MDBGNzZC
OTggLyogSlNEZXN0cnVjdGlibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE0
MTY3QkFCRDcwMDZENzYwQSAvKiBKU0V4cG9ydC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0JEMTBD
NDYxQjRFRDQ0RTAwQkQ1NDFBIC8qIFdhc21PcGNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
N0I0QUNBRjE0ODRDOUNFMDBCMzhBMzYgLyogSlNFeHBvcnRNYWNyb3MuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkI2NkVGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyQjY2RjAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5
LmggaW4gSGVhZGVycyAqLywKQEAgLTcxNTIsNiArNzE3OCw3IEBACiAJCQkJMEZBNTgxQkExNTBF
OTUyQzAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVD
OURDRjEzMjhERjgyMDAyQjJBRDcgLyogREZHT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBN0Q4OUNGRDE3QTBCOENDMDA3NzNBRDggLyogREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXNQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QkQxMEM0MjFCNEVENDNDMDBCRDU0MUEg
LyogV2FzbUpJVENvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTU2MTQxREFG
MDgwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMy
NTE3RDUxRjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRkU1MDY4NjcxQUUyNUUyODAwMDlEQUI3IC8qIERlZmVycmVkU291
cmNlRHVtcC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTcxODgsNiArNzIxNSw3IEBACiAJCQkJMEZD
MDk3QTExNDZCMjhDQTAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjkzQjRBOTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNzA5RkI4NjcxQUUzMzVDNjAwMzlEMDY5IC8qIEpTV2Vha1NldC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk3QkQxMEM0NDFCNEVENDQ1MDBCRDU0MUEgLyogV2FzbU1vZHVsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMyNzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGll
clVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMyOTE3
RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTc2NjIxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVW
YWx1ZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKaW5kZXggMTI0MzllMDhjYWUxMDg2NmU5M2Q5YTc0NmZjMmM1N2JiZmE4
MmQwYy4uNzRjOTg4MjQ2NmVkYWI0NjQ4Y2RiZTgzMzAzNzQ1OWRjMzEyNjU1OSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTg2LDYgKzg2LDkg
QEAgQ1N0cmluZyBDb2RlQmxvY2s6OmluZmVycmVkTmFtZSgpIGNvbnN0CiAgICAgY2FzZSBFdmFs
Q29kZToKICAgICAgICAgcmV0dXJuICI8ZXZhbD4iOwogICAgIGNhc2UgRnVuY3Rpb25Db2RlOgor
ICAgICAgICAvLyBGSVhNRTogaGFja3kKKyAgICAgICAgaWYgKG93bmVyRXhlY3V0YWJsZSgpLT5p
c1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuICI8d2ViYXNzZW1i
bHk+IjsKICAgICAgICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4
ZWN1dGFibGUoKSktPmluZmVycmVkTmFtZSgpLnV0ZjgoKTsKICAgICBkZWZhdWx0OgogICAgICAg
ICBDUkFTSCgpOwpAQCAtMjE4Myw2ICsyMTg2LDY4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNj
cmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlu
CiAgICAgbV9oZWFwLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChzaXplb2YoQ29kZUJsb2Nr
KSArIG1faW5zdHJ1Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikpOwogfQogCitD
b2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgOiBtX2dsb2JhbE9iamVjdChnbG9iYWxP
YmplY3QtPnZtKCksIG93bmVyRXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0KQorICAgICwgbV9oZWFw
KCZtX2dsb2JhbE9iamVjdC0+dm0oKS5oZWFwKQorICAgICwgbV9udW1DYWxsZWVSZWdpc3RlcnMo
MCkgLy8gRklYTUUKKyAgICAsIG1fbnVtVmFycygwKSAvLyBGSVhNRQorICAgICwgbV9pc0NvbnN0
cnVjdG9yKGZhbHNlKSAvLyBGSVhNRQorICAgICwgbV9zaG91bGRBbHdheXNCZUlubGluZWQodHJ1
ZSkKKyAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQorICAgICwgbV9oYXNCZWVu
Q29tcGlsZWRXaXRoRlRMKGZhbHNlKQorICAgIC8vICwgbV91bmxpbmtlZENvZGUobV9nbG9iYWxP
YmplY3QtPnZtKCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2spCisgICAgLCBt
X2hhc0RlYnVnZ2VyU3RhdGVtZW50KGZhbHNlKQorICAgICwgbV9zdGVwcGluZ01vZGUoU3RlcHBp
bmdNb2RlRGlzYWJsZWQpCisgICAgLCBtX251bUJyZWFrcG9pbnRzKDApCisgICAgLCBtX293bmVy
RXhlY3V0YWJsZShtX2dsb2JhbE9iamVjdC0+dm0oKSwgb3duZXJFeGVjdXRhYmxlLCBvd25lckV4
ZWN1dGFibGUpCisgICAgLCBtX3ZtKCZtX2dsb2JhbE9iamVjdC0+dm0oKSkgLy8gRklYTUUKKyAg
ICAsIG1fdGhpc1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcigpKSAvLyBGSVhNRQorICAgICwgbV9z
Y29wZVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcigpKSAvLyBGSVhNRQorICAgICwgbV9sZXhpY2Fs
RW52aXJvbm1lbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoKSkgLy8gRklYTUUKKyAgICAsIG1f
aXNTdHJpY3RNb2RlKGZhbHNlKSAvLyBGSVhNRQorICAgICwgbV9uZWVkc0FjdGl2YXRpb24oZmFs
c2UpCisgICAgLCBtX21heUJlRXhlY3V0aW5nKGZhbHNlKQorICAgICwgbV9zb3VyY2UobnVsbHB0
cikKKyAgICAsIG1fc291cmNlT2Zmc2V0KDApCisgICAgLCBtX2ZpcnN0TGluZUNvbHVtbk9mZnNl
dCgwKQorICAgICwgbV9jb2RlVHlwZShGdW5jdGlvbkNvZGUpIC8vIEZJWE1FCisgICAgLCBtX29z
ckV4aXRDb3VudGVyKDApCisgICAgLCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcigwKQorICAg
ICwgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigwKQorI2lmIEVOQUJMRShKSVQpCisgICAg
LCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlKERGRzo6Q2FwYWJpbGl0eUxldmVsTm90U2V0KQorI2Vu
ZGlmCit7CisgICAgbV92aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQuc3RvcmUoZmFsc2UsIHN0
ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworCisgICAgQVNTRVJUKG1faGVhcC0+aXNEZWZlcnJl
ZCgpKTsKKworICAgIC8qCisgICAgQVNTRVJUKG1fc2NvcGVSZWdpc3Rlci5pc0xvY2FsKCkpOwor
CisgICAgYm9vbCBkaWRDbG9uZVN5bWJvbFRhYmxlID0gZmFsc2U7CisKKyAgICBpZiAoU3ltYm9s
VGFibGUqIHN5bWJvbFRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkpIHsK
KyAgICAgICAgaWYgKG1fdm0tPnR5cGVQcm9maWxlcigpKSB7CisgICAgICAgICAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKKyAgICAgICAgICAgIHN5
bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlwZVByb2ZpbGluZyhsb2NrZXIpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHN5bWJvbFRhYmxlLT5z
Y29wZVNpemUoKSkgeworICAgICAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQoKm1fdm0sIG1fb3du
ZXJFeGVjdXRhYmxlLmdldCgpLCBzeW1ib2xUYWJsZS0+Y2xvbmVTY29wZVBhcnQoKm1fdm0pKTsK
KyAgICAgICAgICAgIGRpZENsb25lU3ltYm9sVGFibGUgPSB0cnVlOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIG1fc3ltYm9sVGFibGUuc2V0KCptX3ZtLCBtX293bmVyRXhlY3V0YWJsZS5n
ZXQoKSwgc3ltYm9sVGFibGUpOworICAgIH0KKyAgICAqLworCisgICAgLy8gRklYTUU6CisgICAg
c2V0TnVtUGFyYW1ldGVycygwKTsKKworICAgIG1faGVhcC0+bV9jb2RlQmxvY2tzLmFkZCh0aGlz
KTsKKyAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVvZihDb2RlQmxv
Y2spKTsKK30KKwogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKIHsKICAgICBpZiAobV92bS0+bV9w
ZXJCeXRlY29kZVByb2ZpbGVyKQpAQCAtMzA1Nyw2ICszMTIyLDExIEBAIENvZGVCbG9jayogRnVu
Y3Rpb25Db2RlQmxvY2s6OnJlcGxhY2VtZW50KCkKICAgICByZXR1cm4ganNDYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29kZUJsb2NrRm9yKG1faXNDb25zdHJ1
Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7CiB9CiAKK0NvZGVCbG9jayog
V2ViQXNzZW1ibHlDb2RlQmxvY2s6OnJlcGxhY2VtZW50KCkKK3sKKyAgICByZXR1cm4ganNDYXN0
PFdlYkFzc2VtYmx5RXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29kZUJsb2NrRm9y
KG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7Cit9CisK
IERGRzo6Q2FwYWJpbGl0eUxldmVsIFByb2dyYW1Db2RlQmxvY2s6OmNhcGFiaWxpdHlMZXZlbElu
dGVybmFsKCkKIHsKICAgICByZXR1cm4gREZHOjpwcm9ncmFtQ2FwYWJpbGl0eUxldmVsKHRoaXMp
OwpAQCAtMzA3Myw2ICszMTQzLDExIEBAIERGRzo6Q2FwYWJpbGl0eUxldmVsIEZ1bmN0aW9uQ29k
ZUJsb2NrOjpjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpCiAgICAgICAgIHJldHVybiBERkc6OmZ1
bmN0aW9uRm9yQ29uc3RydWN0Q2FwYWJpbGl0eUxldmVsKHRoaXMpOwogICAgIHJldHVybiBERkc6
OmZ1bmN0aW9uRm9yQ2FsbENhcGFiaWxpdHlMZXZlbCh0aGlzKTsKIH0KKworREZHOjpDYXBhYmls
aXR5TGV2ZWwgV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNhcGFiaWxpdHlMZXZlbEludGVybmFsKCkK
K3sKKyAgICByZXR1cm4gREZHOjpDYW5ub3RDb21waWxlOworfQogI2VuZGlmCiAKIHZvaWQgQ29k
ZUJsb2NrOjpqZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25SZWFzb24gcmVhc29uLCBSZW9wdGlt
aXphdGlvbk1vZGUgbW9kZSwgY29uc3QgRmlyZURldGFpbCogZGV0YWlsKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4IDY1ZGFiOTU1ZTY4ZjE0NzU3YzVh
YjFhMjllMTk3NDI4ZDBjYzhlOTguLmU2ZTI4OWRmZmJmNjFjNThiYjgzYmJlMmJmMjRlMDA4N2Qw
MmFkNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKQEAg
LTk3LDYgKzk3LDggQEAgcHJvdGVjdGVkOgogICAgICAgICAKICAgICBDb2RlQmxvY2soU2NyaXB0
RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayosIEpTU2NvcGUq
LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCB1bnNp
Z25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpOwogCisgICAgQ29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqKTsKKwogICAgIFdyaXRlQmFy
cmllcjxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7CiAgICAgSGVhcCogbV9oZWFwOwog
CkBAIC0zNDgsNyArMzUwLDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbmVlZHNBY3Rp
dmF0aW9uOwogICAgIH0KICAgICAKLSAgICBDb2RlVHlwZSBjb2RlVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdW5saW5rZWRDb2RlLT5jb2RlVHlwZSgpOyB9CisgICAgQ29kZVR5cGUgY29kZVR5cGUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGhhY2t5CisgICAgICAgIGlmIChvd25l
ckV4ZWN1dGFibGUoKS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKSkKKyAgICAgICAgICAgIHJl
dHVybiBGdW5jdGlvbkNvZGU7CisgICAgICAgIHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29kZVR5
cGUoKTsKKyAgICB9CisKICAgICBQdXRQcm9wZXJ0eVNsb3Q6OkNvbnRleHQgcHV0QnlJZENvbnRl
eHQoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRXZhbENvZGUpCkBA
IC0xMTQyLDYgKzExNTEsMjcgQEAgcHJvdGVjdGVkOgogI2VuZGlmCiB9OwogCitjbGFzcyBXZWJB
c3NlbWJseUNvZGVCbG9jayA6IHB1YmxpYyBDb2RlQmxvY2sgeworcHVibGljOgorICAgIFdlYkFz
c2VtYmx5Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywgV2ViQXNzZW1ibHlDb2RlQmxvY2sm
IG90aGVyKQorICAgICAgICA6IENvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQorICAg
IHsKKyAgICB9CisKKyAgICBXZWJBc3NlbWJseUNvZGVCbG9jayhXZWJBc3NlbWJseUV4ZWN1dGFi
bGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICAg
ICAgOiBDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpCisgICAgeworICAg
IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxs
eSgpIG92ZXJyaWRlIHsgfTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgdmlydHVhbCBDb2RlQmxv
Y2sqIHJlcGxhY2VtZW50KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlM
ZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpIG92ZXJyaWRlOworI2VuZGlmCit9OworCiBp
bmxpbmUgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpbmxp
bmVDYWxsRnJhbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKaW5kZXggMzgwMTVkMmQ4MDRmOTM1OTIwZjk3NTZhNzFjYTJmZGZlYTE3OTU5MC4uMDE4OGU1
MzU2ZjRhMTRjZDMxZjNlNDllNTEwMmExNjA4YmMwNTMyZSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC03NzgsNyArNzc4LDEwIEBAIGlubGluZSBj
aGFyKiBsaW5rRm9yKAogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHI7CiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSAwOwotICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5j
dGlvbigpKQorICAgIGlmIChleGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKSB7
CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgcmVhbGx5IHVzZSBSZWdpc3RlclByZXNlcnZh
dGlvbk5vdFJlcXVpcmVkPworICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlwb2lu
dEZvcigqdm0sIGtpbmQsIEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCwgUmVnaXN0ZXJQcmVzZXJ2YXRp
b25Ob3RSZXF1aXJlZCk7CisgICAgfSBlbHNlIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlv
bigpKQogICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcigqdm0sIGtp
bmQsIE11c3RDaGVja0FyaXR5LCByZWdpc3RlcnMpOwogICAgIGVsc2UgewogICAgICAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwpAQCAtNzk1LDE2ICs3OTgsMTkgQEAgaW5saW5lIGNo
YXIqIGxpbmtGb3IoCiAgICAgICAgIH0KICAgICAgICAgY29kZUJsb2NrID0gZnVuY3Rpb25FeGVj
dXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCk7CiAgICAgICAgIEFyaXR5Q2hlY2tNb2RlIGFyaXR5
OwotICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8
IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxM
aW5rSW5mby0+Y2FsbFR5cGUoKSA9PSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzIHx8IGNhbGxM
aW5rSW5mby0+Y2FsbFR5cGUoKSA9PSBDYWxsTGlua0luZm86OkNvbnN0cnVjdFZhcmFyZ3MpCisg
ICAgICAgIGlmIChleGVjQ2FsbGVlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3Rh
dGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgfHwgKGNhbGxMaW5r
SW5mbyAmJiAoY2FsbExpbmtJbmZvLT5jYWxsVHlwZSgpID09IENhbGxMaW5rSW5mbzo6Q2FsbFZh
cmFyZ3MgfHwgY2FsbExpbmtJbmZvLT5jYWxsVHlwZSgpID09IENhbGxMaW5rSW5mbzo6Q29uc3Ry
dWN0VmFyYXJncykpKQogICAgICAgICAgICAgYXJpdHkgPSBNdXN0Q2hlY2tBcml0eTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNoZWNrTm90UmVxdWlyZWQ7CiAgICAg
ICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3IoKnZtLCBraW5k
LCBhcml0eSwgcmVnaXN0ZXJzKTsKICAgICB9Ci0gICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5P
bmNlKCkpCi0gICAgICAgIGNhbGxMaW5rSW5mby0+c2V0U2VlbigpOwotICAgIGVsc2UKLSAgICAg
ICAgbGlua0ZvcihleGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwg
Y29kZVB0ciwga2luZCwgcmVnaXN0ZXJzKTsKKyAgICAvLyBUT0RPOiBzdXBwb3J0IHJlcGF0Y2hp
bmcKKyAgICBpZiAoY2FsbExpbmtJbmZvKSB7CisgICAgICAgIGlmICghY2FsbExpbmtJbmZvLT5z
ZWVuT25jZSgpKQorICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGxpbmtGb3IoZXhlY0NhbGxlZSwgKmNhbGxMaW5rSW5mbywgY29k
ZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIsIGtpbmQsIHJlZ2lzdGVycyk7CisgICAgfQogICAgIAog
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihjb2RlUHRyLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCAzODBkODliNWQzNTkyNzRhMjc0ODI5
MTgzMmNlZWQ4ODhhNjNjMjM2Li45ODM5NDNlZDFlYzRkOTdmYWFhMjQzMDMyMDExNGZhMzM1NWRm
YzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIlN0
cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIgogI2luY2x1ZGUgIlRlc3RSdW5uZXJVdGlscy5oIgog
I2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgorI2luY2x1ZGUgIldhc21KSVRDb21waWxlci5o
IgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxp
Yi5oPgpAQCAtNDkxLDYgKzQ5Miw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uUmV0dXJuVHlwZUZvcihFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRHVtcEJhc2ljQmxvY2tFeGVjdXRpb25SYW5nZXMo
RXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
bkhhc0Jhc2ljQmxvY2tFeGVjdXRlZChFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRW5hYmxlRXhjZXB0aW9uRnV6eihFeGVjU3RhdGUqKTsK
K3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZFdlYkFzc2Vt
Ymx5KEV4ZWNTdGF0ZSopOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQogc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRTYW1wbGluZ0ZsYWdzKEV4ZWNT
dGF0ZSopOwpAQCAtNjUzLDYgKzY1NSw4IEBAIHByb3RlY3RlZDoKICAgICAgICAgYWRkRnVuY3Rp
b24odm0sICJoYXNCYXNpY0Jsb2NrRXhlY3V0ZWQiLCBmdW5jdGlvbkhhc0Jhc2ljQmxvY2tFeGVj
dXRlZCwgMik7CiAKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJlbmFibGVFeGNlcHRpb25GdXp6
IiwgZnVuY3Rpb25FbmFibGVFeGNlcHRpb25GdXp6LCAwKTsKKworICAgICAgICBhZGRGdW5jdGlv
bih2bSwgImxvYWRXZWJBc3NlbWJseSIsIGZ1bmN0aW9uTG9hZFdlYkFzc2VtYmx5LCAxKTsKICAg
ICAgICAgCiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShnbG9i
YWxFeGVjKCksIDApOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50cy5z
aXplKCk7ICsraSkKQEAgLTExODIsNiArMTE4NiwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uRW5hYmxlRXhjZXB0aW9uRnV6eihFeGVjU3RhdGUqKQogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25Mb2FkV2ViQXNzZW1ibHkoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIFN0cmluZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKKyAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOworICAgIGlmICghZmlsbEJ1ZmZl
cldpdGhDb250ZW50c09mRmlsZShmaWxlTmFtZSwgYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQ291bGQgbm90IG9wZW4gZmlsZS4iKSkpKTsKKyAgICBXYXNt
OjpNb2R1bGUqIG1vZHVsZSA9IFdhc206OmNvbXBpbGUoZXhlYywgYnVmZmVyKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKG1vZHVsZSk7Cit9CisKIC8vIFVzZSBTRUggZm9yIFJlbGVhc2Ug
YnVpbGRzIG9ubHkgdG8gZ2V0IHJpZCBvZiB0aGUgY3Jhc2ggcmVwb3J0IGRpYWxvZwogLy8gKGx1
Y2tpbHkgdGhlIHNhbWUgdGVzdHMgZmFpbCBpbiBSZWxlYXNlIGFuZCBEZWJ1ZyBidWlsZHMgc28g
ZmFyKS4gTmVlZCB0bwogLy8gYmUgaW4gYSBzZXBhcmF0ZSBtYWluIGZ1bmN0aW9uIGJlY2F1c2Ug
dGhlIGpzY21haW4gZnVuY3Rpb24gcmVxdWlyZXMgb2JqZWN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAppbmRleCA5Y2NjMWNlNDk3ODhkNzEwZmM2
OWE2OTE1NDM0MjcxYThjMDlkMmU0Li5iNDllYWFjNTFhZDY5MThlMDFjZGEzZTgzZWVhMWUyM2I5
MWQyZGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRo
cy5jcHAKQEAgLTExMTksNyArMTExOSw5IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0
VXBDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSW5zdHJ1Y3Rpb24qIHBjLCBDb2RlCiAgICAg
CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHI7CiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSAwOwotICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQorICAgIGlm
IChleGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKQorICAgICAgICBjb2RlUHRy
ID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcih2bSwga2luZCwgQXJpdHlDaGVja05vdFJlcXVp
cmVkLCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKKyAgICBlbHNlIGlmIChleGVj
dXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQogICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+
ZW50cnlwb2ludEZvcih2bSwga2luZCwgTXVzdENoZWNrQXJpdHksIFJlZ2lzdGVyUHJlc2VydmF0
aW9uTm90UmVxdWlyZWQpOwogICAgIGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4
ZWN1dGFibGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNw
cAppbmRleCA1NTI0MGZkOTFmN2JjNzg0MmYxM2U1OTI4MWQxMGQyMWQ4NmM0ZjUwLi5hYmYyZDE1
NjU0YzY2ZTA2ZmYxYWVhN2FjMGJjNDlmNTIxNmQzZmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcApAQCAtMTQ5LDYgKzE0OSwyMSBAQCB2b2lkIFNj
cmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKENvZGVCbG9jayogZ2VuZXJpY0NvZGVCbG9jaykK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIAorICAgIGlmIChpc1dlYkFzc2VtYmx5RXhlY3V0
YWJsZSgpKSB7CisgICAgICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpz
Q2FzdDxXZWJBc3NlbWJseUV4ZWN1dGFibGUqPih0aGlzKTsKKyAgICAgICAgV2ViQXNzZW1ibHlD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PFdlYkFzc2VtYmx5Q29kZUJsb2NrKj4o
Z2VuZXJpY0NvZGVCbG9jayk7CisKKyAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwp
OworCisgICAgICAgIGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ2FsbCA9IGNvZGVCbG9jazsK
KyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiB0aGlzIGlzIGp1c3QgdG8gbWFrZSBpc0hvc3RG
dW5jdGlvbigpIGhhcHB5LgorICAgICAgICAvLyBCdXQgdGhpcyB3aWxsIG1ha2UgaXNIb3N0RnVu
Y3Rpb24oKSByZXR1cm4gdHJ1ZS4KKyAgICAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCA9IDA7
CisgICAgICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCA9IDA7CisgICAgfSBlbHNlIHsK
KworICAgICAgICAvLyBGSVhNRTogbmVlZCB0byBkZWFsIHdpdGggY29kZVR5cGUoKQogICAgIHN3
aXRjaCAoZ2VuZXJpY0NvZGVCbG9jay0+Y29kZVR5cGUoKSkgewogICAgIGNhc2UgR2xvYmFsQ29k
ZTogewogICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxQcm9n
cmFtRXhlY3V0YWJsZSo+KHRoaXMpOwpAQCAtMTkyLDYgKzIwNyw4IEBAIHZvaWQgU2NyaXB0RXhl
Y3V0YWJsZTo6aW5zdGFsbENvZGUoQ29kZUJsb2NrKiBnZW5lcmljQ29kZUJsb2NrKQogICAgIGlm
IChvbGRDb2RlQmxvY2spCiAgICAgICAgIG9sZENvZGVCbG9jay0+dW5saW5rSW5jb21pbmdDYWxs
cygpOwogCisgICAgfQorICAgIAogICAgIERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGdlbmVyaWNDb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpOwogICAgIGlmIChkZWJ1Z2dlcikKICAg
ICAgICAgZGVidWdnZXItPnJlZ2lzdGVyQ29kZUJsb2NrKGdlbmVyaWNDb2RlQmxvY2spOwpAQCAt
MjI4LDYgKzI0NSw4IEBAIFJlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6Om5ld0Nv
ZGVCbG9ja0ZvcigKICAgICAgICAgICAgIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCks
IGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0Q29sdW1uKCkpKTsKICAgICB9CiAgICAgCisgICAg
QVNTRVJUKCFpc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKTsKKyAgICAKICAgICBSRUxFQVNFX0FT
U0VSVChjbGFzc0luZm8oKSA9PSBGdW5jdGlvbkV4ZWN1dGFibGU6OmluZm8oKSk7CiAgICAgUkVM
RUFTRV9BU1NFUlQoZnVuY3Rpb24pOwogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKTsKQEAgLTMyMyw2ICszNDIsOCBA
QCBzdGF0aWMgdm9pZCBzZXR1cEpJVChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQogSlNP
YmplY3QqIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb25JbXBsKAogICAgIEV4
ZWNTdGF0ZSogZXhlYywgSlNGdW5jdGlvbiogZnVuY3Rpb24sIEpTU2NvcGUqIHNjb3BlLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CisgICAgQVNTRVJUKCFpc1dlYkFzc2VtYmx5RXhl
Y3V0YWJsZSgpKTsKKyAgICAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIERlZmVyR0Mg
ZGVmZXJHQyh2bS5oZWFwKTsKICAgICAKQEAgLTQyNSw2ICs0NDYsMzUgQEAgdm9pZCBGdW5jdGlv
bkV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogICAgIHN0YXRpY19jYXN0PEZ1bmN0
aW9uRXhlY3V0YWJsZSo+KGNlbGwpLT5GdW5jdGlvbkV4ZWN1dGFibGU6On5GdW5jdGlvbkV4ZWN1
dGFibGUoKTsKIH0KIAorY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6c19p
bmZvID0geyAiV2ViQXNzZW1ibHlFeGVjdXRhYmxlIiwgJlNjcmlwdEV4ZWN1dGFibGU6OnNfaW5m
bywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJseUV4ZWN1dGFibGUpIH07CisKK1dl
YkFzc2VtYmx5RXhlY3V0YWJsZTo6V2ViQXNzZW1ibHlFeGVjdXRhYmxlKFZNJiB2bSwgY29uc3Qg
U291cmNlQ29kZSYgc291cmNlKQorICAgIDogU2NyaXB0RXhlY3V0YWJsZSh2bS53ZWJBc3NlbWJs
eUV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIHZtLCBzb3VyY2UsIC8qaXNJblN0cmljdENvbnRl
eHQqLyBmYWxzZSApCit7CisgICAgLyoKKyAgICBSRUxFQVNFX0FTU0VSVCghc291cmNlLmlzTnVs
bCgpKTsKKyAgICBBU1NFUlQoc291cmNlLmxlbmd0aCgpKTsKKyAgICBtX2ZpcnN0TGluZSA9IGZp
cnN0TGluZTsKKyAgICBtX2xhc3RMaW5lID0gbGFzdExpbmU7CisgICAgbV9zdGFydENvbHVtbiA9
IHN0YXJ0Q29sdW1uOworICAgIG1fZW5kQ29sdW1uID0gZW5kQ29sdW1uOworICAgIG1fcGFyYW1l
dGVyc1N0YXJ0T2Zmc2V0ID0gdW5saW5rZWRFeGVjdXRhYmxlLT5wYXJhbWV0ZXJzU3RhcnRPZmZz
ZXQoKTsKKyAgICBtX3R5cGVQcm9maWxpbmdTdGFydE9mZnNldCA9IHVubGlua2VkRXhlY3V0YWJs
ZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCk7CisgICAgbV90eXBlUHJvZmlsaW5nRW5kT2Zm
c2V0ID0gdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCk7CisgICAg
Ki8KK30KKwordm9pZCBXZWJBc3NlbWJseUV4ZWN1dGFibGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgbV9zaW5nbGV0b25GdW5j
dGlvbi5zZXQodm0sIHRoaXMsIEluZmVycmVkVmFsdWU6OmNyZWF0ZSh2bSkpOworfQorCit2b2lk
IFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgc3Rh
dGljX2Nhc3Q8V2ViQXNzZW1ibHlFeGVjdXRhYmxlKj4oY2VsbCktPldlYkFzc2VtYmx5RXhlY3V0
YWJsZTo6fldlYkFzc2VtYmx5RXhlY3V0YWJsZSgpOworfQorCiBpbmxpbmUgY29uc3QgY2hhciog
c2FtcGxpbmdEZXNjcmlwdGlvbihKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpCiB7CiAgICAgc3dp
dGNoIChqaXRUeXBlKSB7CkBAIC02MTksNiArNjY5LDQzIEBAIEZ1bmN0aW9uRXhlY3V0YWJsZSog
RnVuY3Rpb25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZSgKICAgICByZXR1cm4gdW5saW5rZWRF
eGVjdXRhYmxlLT5saW5rKGV4ZWMudm0oKSwgc291cmNlLCBvdmVycmlkZUxpbmVOdW1iZXIpOwog
fQogCitXZWJBc3NlbWJseUNvZGVCbG9jayogV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpiYXNlbGlu
ZUNvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit7CisgICAgQVNTRVJU
KGtpbmQgPT0gQ29kZUZvckNhbGwpOworCisgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIHJlc3Vs
dCA9IG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkFzc2VtYmx5Q29kZUJsb2NrKj4o
cmVzdWx0LT5iYXNlbGluZUFsdGVybmF0aXZlKCkpOworfQorCit2b2lkIFdlYkFzc2VtYmx5RXhl
Y3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQoreworICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJB
c3NlbWJseUV4ZWN1dGFibGUqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgU2NyaXB0RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICBpZiAodGhpc09iamVjdC0+bV9jb2RlQmxvY2tG
b3JDYWxsKQorICAgICAgICB0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja0ZvckNhbGwtPnZpc2l0QWdn
cmVnYXRlKHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Npbmds
ZXRvbkZ1bmN0aW9uKTsKK30KKworU3ltYm9sVGFibGUqIFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6
c3ltYm9sVGFibGUoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoreworICAgIHJldHVybiBj
b2RlQmxvY2tGb3Ioa2luZCktPnN5bWJvbFRhYmxlKCk7Cit9CisKK3ZvaWQgV2ViQXNzZW1ibHlF
eGVjdXRhYmxlOjpjbGVhckNvZGUoKQoreworICAgIC8vIEZJWE1FOiBoYWNreQorICAgIC8vIG1f
Y29kZUJsb2NrRm9yQ2FsbCA9IG51bGxwdHI7CisgICAgLy8gQmFzZTo6Y2xlYXJDb2RlKCk7Cit9
CisKK3ZvaWQgV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjp1bmxpbmtDYWxscygpCit7CisgICAgLy8g
RklYTUU6IGhhY2t5Cit9CisKIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKIHsKICAgICBFeGVjdXRhYmxlQmFzZSogcmVhbFRoaXMgPSBjb25zdF9jYXN0
PEV4ZWN1dGFibGVCYXNlKj4odGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmgKaW5kZXggMWM3YzgwMDAzZDJhMzJiZDZhMzExZGFjMGRlNTM5MDFhOGFkNzgx
Zi4uZWQ4MjI5YTE5ZTkyNDZlNzQ1ZjM2MDgwZjg1MDE4MmQ3NDRiNDhiYSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaApAQCAtNTAsNiArNTAsNyBAQCBjbGFz
cyBFdmFsQ29kZUJsb2NrOwogY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBMTEludE9m
ZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBQcm9ncmFtQ29kZUJsb2NrOworY2xhc3MgV2ViQXNzZW1i
bHlDb2RlQmxvY2s7CiBjbGFzcyBKU1Njb3BlOwogICAgIAogZW51bSBDb21waWxhdGlvbktpbmQg
eyBGaXJzdENvbXBpbGF0aW9uLCBPcHRpbWl6aW5nQ29tcGlsYXRpb24gfTsKQEAgLTk4LDYgKzk5
LDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiB0eXBlKCkgPT0gRnVuY3Rpb25F
eGVjdXRhYmxlVHlwZTsKICAgICB9CisgICAgYm9vbCBpc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgp
CisgICAgeworICAgICAgICByZXR1cm4gdHlwZSgpID09IFdlYkFzc2VtYmx5RXhlY3V0YWJsZVR5
cGU7CisgICAgfQogICAgIGJvb2wgaXNQcm9ncmFtRXhlY3V0YWJsZSgpCiAgICAgewogICAgICAg
ICByZXR1cm4gdHlwZSgpID09IFByb2dyYW1FeGVjdXRhYmxlVHlwZTsKQEAgLTY3OCw2ICs2ODMs
MTIxIEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEluZmVycmVkVmFsdWU+IG1fc2luZ2xl
dG9uRnVuY3Rpb247CiB9OwogCitjbGFzcyBXZWJBc3NlbWJseUV4ZWN1dGFibGUgZmluYWwgOiBw
dWJsaWMgU2NyaXB0RXhlY3V0YWJsZSB7CisgICAgZnJpZW5kIGNsYXNzIEpJVDsKKyAgICBmcmll
bmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworcHVibGljOgorICAgIHR5cGVkZWYgU2Ny
aXB0RXhlY3V0YWJsZSBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKKworICAg
IHN0YXRpYyBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIGNyZWF0ZShWTSYgdm0sIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSkKKyAgICB7CisgICAgICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogZXhl
Y3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5RXhlY3V0YWJs
ZT4odm0uaGVhcCkpIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSh2bSwgc291cmNlKTsKKyAgICAgICAg
ZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gZXhlY3V0YWJs
ZTsKKyAgICB9CisgICAgLy8gc3RhdGljIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogZnJvbUdsb2Jh
bENvZGUoY29uc3QgSWRlbnRpZmllciYgbmFtZSwgRXhlY1N0YXRlJiwgY29uc3QgU291cmNlQ29k
ZSYsIEpTT2JqZWN0KiYgZXhjZXB0aW9uLCBpbnQgb3ZlcnJpZGVMaW5lTnVtYmVyKTsKKworICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisgICAgICAgIAorICAgIGJvb2wgaXNHZW5l
cmF0ZWRGb3JDYWxsKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0Zv
ckNhbGw7CisgICAgfQorCisgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9ja0ZvckNh
bGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKTsKKyAg
ICB9CisKKyAgICBib29sIGlzR2VuZXJhdGVkRm9yQ29uc3RydWN0KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBXZWJBc3NlbWJseUNvZGVCbG9jayog
Y29kZUJsb2NrRm9yQ29uc3RydWN0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKyAgICAgICAgCisgICAgYm9vbCBpc0dlbmVyYXRlZEZvcihDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQpCisgICAgeworICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAg
ICAgICAgICAgIHJldHVybiBpc0dlbmVyYXRlZEZvckNhbGwoKTsKKyAgICAgICAgQVNTRVJUKGtp
bmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CisgICAgICAgIHJldHVybiBpc0dlbmVyYXRlZEZvckNv
bnN0cnVjdCgpOworICAgIH0KKyAgICAgICAgCisgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNv
ZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgeworICAgICAgICBp
ZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAgICAgICAgICAgIHJldHVybiBjb2RlQmxvY2tGb3JD
YWxsKCk7CisgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAg
ICByZXR1cm4gY29kZUJsb2NrRm9yQ29uc3RydWN0KCk7CisgICAgfQorCisgICAgV2ViQXNzZW1i
bHlDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQp
OworICAgICAgICAKKyAgICBXZWJBc3NlbWJseUNvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2tG
b3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJh
c2VsaW5lQ29kZUJsb2NrRm9yKGtpbmQpOworICAgIH0KKworICAgIFJlZlB0cjxUeXBlU2V0PiBy
ZXR1cm5TdGF0ZW1lbnRUeXBlU2V0KCkgCisgICAgeworICAgICAgICBpZiAoIW1fcmV0dXJuU3Rh
dGVtZW50VHlwZVNldCkKKyAgICAgICAgICAgIG1fcmV0dXJuU3RhdGVtZW50VHlwZVNldCA9IFR5
cGVTZXQ6OmNyZWF0ZSgpOworCisgICAgICAgIHJldHVybiBtX3JldHVyblN0YXRlbWVudFR5cGVT
ZXQ7CisgICAgfQorICAgICAgICAKKyAgICAvLyBGdW5jdGlvbk1vZGUgZnVuY3Rpb25Nb2RlKCkg
eyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmZ1bmN0aW9uTW9kZSgpOyB9CisgICAgLy8g
Ym9vbCBpc0J1aWx0aW5GdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRh
YmxlLT5pc0J1aWx0aW5GdW5jdGlvbigpOyB9CisgICAgLy8gYm9vbCBpc0NsYXNzQ29uc3RydWN0
b3JGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5pc0NsYXNz
Q29uc3RydWN0b3JGdW5jdGlvbigpOyB9CisgICAgLy8gY29uc3QgSWRlbnRpZmllciYgbmFtZSgp
IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5uYW1lKCk7IH0KKyAgICAvLyBjb25zdCBJ
ZGVudGlmaWVyJiBpbmZlcnJlZE5hbWUoKSB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+
aW5mZXJyZWROYW1lKCk7IH0KKyAgICAvLyBKU1N0cmluZyogbmFtZVZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPm5hbWVWYWx1ZSgpOyB9CisgICAgLy8gc2l6ZV90
IHBhcmFtZXRlckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPnBh
cmFtZXRlckNvdW50KCk7IH0gLy8gRXhjbHVkaW5nICd0aGlzJyEKKyAgICBTeW1ib2xUYWJsZSog
c3ltYm9sVGFibGUoQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CisKKyAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90bykKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oV2ViQXNzZW1ibHlFeGVjdXRhYmxlVHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIHVuc2lnbmVkIHBhcmFt
ZXRlcnNTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0
OyB9CisKKyAgICAvKgorICAgIHZvaWQgb3ZlcnJpZGVQYXJhbWV0ZXJBbmRUeXBlUHJvZmlsaW5n
U3RhcnRFbmRPZmZzZXRzKHVuc2lnbmVkIHBhcmFtZXRlcnNTdGFydE9mZnNldCwgdW5zaWduZWQg
dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0LCB1bnNpZ25lZCB0eXBlUHJvZmlsaW5nRW5kT2Zmc2V0
KQorICAgIHsKKyAgICAgICAgbV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQgPSBwYXJhbWV0ZXJzU3Rh
cnRPZmZzZXQ7CisgICAgICAgIG1fdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0ID0gdHlwZVByb2Zp
bGluZ1N0YXJ0T2Zmc2V0OworICAgICAgICBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQgPSB0eXBl
UHJvZmlsaW5nRW5kT2Zmc2V0OworICAgIH0KKyAgICAqLworCisgICAgREVDTEFSRV9JTkZPOwor
ICAgICAgICAKKyAgICB2b2lkIHVubGlua0NhbGxzKCk7CisKKyAgICB2b2lkIGNsZWFyQ29kZSgp
OworICAgIAorICAgIEluZmVycmVkVmFsdWUqIHNpbmdsZXRvbkZ1bmN0aW9uKCkgeyByZXR1cm4g
bV9zaW5nbGV0b25GdW5jdGlvbi5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIFdlYkFzc2VtYmx5
RXhlY3V0YWJsZShWTSYsIGNvbnN0IFNvdXJjZUNvZGUmKTsKKyAgICAKKyAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJik7CisKKyAgICBmcmllbmQgY2xhc3MgU2NyaXB0RXhlY3V0YWJsZTsKKwor
ICAgIFJlZlB0cjxXZWJBc3NlbWJseUNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDYWxsOworICAg
IFJlZlB0cjxUeXBlU2V0PiBtX3JldHVyblN0YXRlbWVudFR5cGVTZXQ7CisgICAgdW5zaWduZWQg
bV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQ7CisgICAgV3JpdGVCYXJyaWVyPEluZmVycmVkVmFsdWU+
IG1fc2luZ2xldG9uRnVuY3Rpb247Cit9OworCiBpbmxpbmUgdm9pZCBFeGVjdXRhYmxlQmFzZTo6
Y2xlYXJDb2RlVmlydHVhbChFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSkKIHsKICAgICBzd2l0
Y2ggKGV4ZWN1dGFibGUtPnR5cGUoKSkgewpAQCAtNjg3LDYgKzgwNyw4IEBAIGlubGluZSB2b2lk
IEV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGVWaXJ0dWFsKEV4ZWN1dGFibGVCYXNlKiBleGVjdXRh
YmxlKQogICAgICAgICByZXR1cm4ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4oZXhlY3V0YWJs
ZSktPmNsZWFyQ29kZSgpOwogICAgIGNhc2UgRnVuY3Rpb25FeGVjdXRhYmxlVHlwZToKICAgICAg
ICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Y2xlYXJD
b2RlKCk7CisgICAgY2FzZSBXZWJBc3NlbWJseUV4ZWN1dGFibGVUeXBlOgorICAgICAgICByZXR1
cm4ganNDYXN0PFdlYkFzc2VtYmx5RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5jbGVhckNvZGUo
KTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4ganNDYXN0PE5hdGl2ZUV4ZWN1dGFibGUq
PihleGVjdXRhYmxlKS0+Y2xlYXJDb2RlKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAppbmRleCAxYjhjNDA3ZWMzZDQ5NDliNjA2ZWM5NWI5
YWM5YjRlMmRmYzY4MTJmLi43ZGM2NzIzYjRhNmJmZTNhYTg0NDgyZWNkNTJmOTQ0OWVhM2Y5YTgw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcApAQCAt
NjAsMTAgKzYwLDExIEBAIGJvb2wgSlNGdW5jdGlvbjo6aXNIb3N0RnVuY3Rpb25Ob25JbmxpbmUo
KSBjb25zdAogICAgIHJldHVybiBpc0hvc3RGdW5jdGlvbigpOwogfQogCi1KU0Z1bmN0aW9uKiBK
U0Z1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUs
IEpTU2NvcGUqIHNjb3BlKQorSlNGdW5jdGlvbiogSlNGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwg
RXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3BlKQogewogICAgIEpTRnVu
Y3Rpb24qIHJlc3VsdCA9IGNyZWF0ZUltcGwodm0sIGV4ZWN1dGFibGUsIHNjb3BlKTsKLSAgICBl
eGVjdXRhYmxlLT5zaW5nbGV0b25GdW5jdGlvbigpLT5ub3RpZnlXcml0ZSh2bSwgcmVzdWx0LCAi
QWxsb2NhdGluZyBhIGZ1bmN0aW9uIik7CisgICAgaWYgKGV4ZWN1dGFibGUtPmlzRnVuY3Rpb25F
eGVjdXRhYmxlKCkpCisgICAgICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4
ZWN1dGFibGUpLT5zaW5nbGV0b25GdW5jdGlvbigpLT5ub3RpZnlXcml0ZSh2bSwgcmVzdWx0LCAi
QWxsb2NhdGluZyBhIGZ1bmN0aW9uIik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCmluZGV4IDBiODdkNzVjOTE0NTBj
NWFmMWFhZWQyN2E2MWE3NDhlZjgwZjA5M2UuLjIzYzdmYjE3ODliMzkxNzA2NmE3M2Q1MDYyN2Rj
MmZkYzJjOWNmYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9u
LmgKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVh
dGVXaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50KFZNJiwgRnVuY3Rpb25FeGVj
dXRhYmxlKiwgSlNTY29wZSopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0Z1bmN0
aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIGludCBsZW5ndGgsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgTmF0aXZlU3RkRnVuY3Rpb24mJiwgSW50cmluc2ljID0gTm9JbnRyaW5zaWMsIE5h
dGl2ZUZ1bmN0aW9uIG5hdGl2ZUNvbnN0cnVjdG9yID0gY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3Ry
dWN0b3IpOwogCi0gICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEZ1bmN0aW9uRXhl
Y3V0YWJsZSosIEpTU2NvcGUqKTsKKyAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlKFZNJiwg
RXhlY3V0YWJsZUJhc2UqLCBKU1Njb3BlKik7CiAKICAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3Jl
YXRlQnVpbHRpbkZ1bmN0aW9uKFZNJiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmpl
Y3QqKTsKICAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlQnVpbHRpbkZ1bmN0aW9uKFZNJiwg
RnVuY3Rpb25FeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUp
OwpAQCAtMTQwLDcgKzE0MCw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIEpTX0VYUE9S
VF9QUklWQVRFIEpTRnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwot
ICAgIEpTRnVuY3Rpb24oVk0mLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU1Njb3BlKik7CisgICAg
SlNGdW5jdGlvbihWTSYsIEV4ZWN1dGFibGVCYXNlKiwgSlNTY29wZSopOwogCiAgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBpbnQgbGVuZ3RoLCBjb25zdCBT
dHJpbmcmIG5hbWUpOwogICAgIHVzaW5nIEJhc2U6OmZpbmlzaENyZWF0aW9uOwpAQCAtMTU5LDcg
KzE1OSw3IEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIEpTRnVuY3Rpb24qIGNy
ZWF0ZUltcGwoVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUq
IHNjb3BlKQorICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVJbXBsKFZNJiB2bSwgRXhlY3V0
YWJsZUJhc2UqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3BlKQogICAgIHsKICAgICAgICAgSlNG
dW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0Z1bmN0aW9u
Pih2bS5oZWFwKSkgSlNGdW5jdGlvbih2bSwgZXhlY3V0YWJsZSwgc2NvcGUpOwogICAgICAgICBB
U1NFUlQoZnVuY3Rpb24tPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaAppbmRleCBmNmM2
ZDU4ZWM2ZTVjMTE2NGNiMjdmYTVlNDE2MThiNGI4MTQyZjAyLi5iOTMwNjA3NTk5YTdjMmExZGQw
MzA0ODBhNzJiZThhZDNkYmQyMDRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmgKQEAgLTM4LDcgKzM4LDcgQEAgaW5saW5lIEpTRnVu
Y3Rpb24qIEpTRnVuY3Rpb246OmNyZWF0ZVdpdGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlvbldhdGNo
cG9pbnQoCiAgICAgcmV0dXJuIGNyZWF0ZUltcGwodm0sIGV4ZWN1dGFibGUsIHNjb3BlKTsKIH0K
IAotaW5saW5lIEpTRnVuY3Rpb246OkpTRnVuY3Rpb24oVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3BlKQoraW5saW5lIEpTRnVuY3Rpb246OkpTRnVu
Y3Rpb24oVk0mIHZtLCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUp
CiAgICAgOiBCYXNlKHZtLCBzY29wZSwgc2NvcGUtPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0
cnVjdHVyZSgpKQogICAgICwgbV9leGVjdXRhYmxlKHZtLCB0aGlzLCBleGVjdXRhYmxlKQogICAg
ICwgbV9yYXJlRGF0YSgpCkBAIC01NCw2ICs1NCw4IEBAIGlubGluZSBGdW5jdGlvbkV4ZWN1dGFi
bGUqIEpTRnVuY3Rpb246OmpzRXhlY3V0YWJsZSgpIGNvbnN0CiBpbmxpbmUgYm9vbCBKU0Z1bmN0
aW9uOjppc0hvc3RGdW5jdGlvbigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fZXhlY3V0YWJsZSk7
CisgICAgaWYgKG1fZXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKSkgLy8gRklY
TUU6IGhhY2t5CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiBtX2V4ZWN1dGFibGUt
PmlzSG9zdEZ1bmN0aW9uKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVHlwZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBl
LmgKaW5kZXggNDAzMjZjZTBmMzI5ZmE3YzdiYmM5OWY0NDY0MjhmZTk2YzkxMjRiMy4uNzZlZmU4
MjI0MmFhZTEzZTBlNjE1NGFmMDUyMmM2ZDg2NzAzMDY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNUeXBlLmgKQEAgLTc0LDYgKzc0LDggQEAgZW51bSBKU1R5cGUgOiB1aW50OF90
IHsKIAogICAgIE5hbWVTY29wZU9iamVjdFR5cGUsCiAKKyAgICBXZWJBc3NlbWJseUV4ZWN1dGFi
bGVUeXBlLCAvLyBGSVhNRTogTW92ZSBpdCBhYm92ZS4KKwogICAgIEdsb2JhbE9iamVjdFR5cGUs
CiAgICAgQWN0aXZhdGlvbk9iamVjdFR5cGUsCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAppbmRleCA3Njc0MWRkOGFlYTM3ZmY1N2NjYTRjZjYzNmJmYzMyYmI0MjljYzQxLi40ZDVm
NWRmMzU2OWFjNjI1ZjkyMzBjOTRkYjI3ODg4MzA4YjliY2I0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCkBAIC0yMjAsNiArMjIwLDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUs
IEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIGV2YWxFeGVjdXRhYmxlU3RydWN0dXJlLnNldCgqdGhp
cywgRXZhbEV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
ICAgICBwcm9ncmFtRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFByb2dyYW1FeGVjdXRh
YmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgZnVuY3Rpb25F
eGVjdXRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGVT
dHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgd2ViQXNzZW1ibHlFeGVjdXRhYmxl
U3RydWN0dXJlLnNldCgqdGhpcywgV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgcmVnRXhwU3RydWN0dXJlLnNldCgqdGhpcywg
UmVnRXhwOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgc3ltYm9s
U3RydWN0dXJlLnNldCgqdGhpcywgU3ltYm9sOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CiAgICAgc3ltYm9sVGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTeW1ib2xUYWJs
ZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmgKaW5kZXggZjc4ZjllYjk2NDYwYWU5ZmRiZmY5MTY5YzI4NGE4NTg0ODE2Yzcz
OS4uMzczZDQwZGM3Zjk4ZTVlYzU4NTY4ZDRiYjViMzZkNGZmOTExYzZjMSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oCkBAIC0yNTksNiArMjU5LDcgQEAgcHVibGljOgogICAgIFN0cm9u
ZzxTdHJ1Y3R1cmU+IGV2YWxFeGVjdXRhYmxlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1
cmU+IHByb2dyYW1FeGVjdXRhYmxlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGZ1
bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiB3ZWJBc3Nl
bWJseUV4ZWN1dGFibGVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcmVnRXhwU3Ry
dWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN5bWJvbFN0cnVjdHVyZTsKICAgICBTdHJv
bmc8U3RydWN0dXJlPiBzeW1ib2xUYWJsZVN0cnVjdHVyZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21KSVRDb21waWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtSklUQ29tcGlsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMzYjkxN2FmM2FiMDVk
MDRjMWE1YzNiMDM4YTI5MjNkYjFiMTZlZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtSklUQ29tcGlsZXIuY3BwCkBAIC0wLDAgKzEsMTM5NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgTGljZW5z
ZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7
CisgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRo
ZSBMaWNlbnNlLgorIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisg
aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyBVbmxlc3MgcmVx
dWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJl
CisgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFT
IElTIiBCQVNJUywKKyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lO
RCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBz
cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgbGltaXRhdGlvbnMg
dW5kZXIgdGhlIExpY2Vuc2UuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2FzbUpJVENvbXBpbGVyLmgiCisKKyNpbmNsdWRlICJKSVRDb2RlLmgiCisjaW5jbHVkZSAiSlND
SlNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiTWF4
RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKKyNpbmNsdWRlICJSZWdpc3Rlci5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBKdW1wU2NvcGUgewor
cHVibGljOgorICAgIEp1bXBTY29wZShNYWNyb0Fzc2VtYmxlciogbWFjcm9Bc3NlbWJsZXIpCisg
ICAgICAgIDogbV9tYWNyb0Fzc2VtYmxlcihtYWNyb0Fzc2VtYmxlcikKKyAgICAgICAgLCBtX2xp
bmtlZChmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgSnVtcFNjb3BlKE1hY3JvQXNzZW1ibGVy
KiBtYWNyb0Fzc2VtYmxlciwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsJiBsYWJlbCkKKyAg
ICAgICAgOiBtX21hY3JvQXNzZW1ibGVyKG1hY3JvQXNzZW1ibGVyKQorICAgICAgICAsIG1fbGlu
a2VkKHRydWUpCisgICAgICAgICwgbV9sYWJlbChsYWJlbCkKKyAgICB7CisgICAgfQorCisgICAg
dm9pZCBqdW1wKCkKKyAgICB7CisgICAgICAgIGlmIChtX2xpbmtlZCkKKyAgICAgICAgICAgIG1f
bWFjcm9Bc3NlbWJsZXItPmp1bXAobV9sYWJlbCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG1fanVtcExpc3QuYXBwZW5kKG1fbWFjcm9Bc3NlbWJsZXItPmp1bXAoKSk7CisgICAgfQorCisg
ICAgdm9pZCBsaW5rKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9saW5rZWQpOworICAgICAg
ICBtX2p1bXBMaXN0LmxpbmsobV9tYWNyb0Fzc2VtYmxlcik7CisgICAgfQorCitwcml2YXRlOgor
ICAgIE1hY3JvQXNzZW1ibGVyKiBtX21hY3JvQXNzZW1ibGVyOworICAgIGJvb2wgbV9saW5rZWQ7
CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fbGFiZWw7CisgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IG1fanVtcExpc3Q7Cit9OworCitlbnVtIGNsYXNzIExpbmVhck1lbW9yeVR5cGUg
OiB1bnNpZ25lZCB7CisgICAgSTgsCisgICAgUzgsCisgICAgVTgsCisgICAgSTE2LAorICAgIFMx
NiwKKyAgICBVMTYsCisgICAgSTMyLAorICAgIEYzMiwKKyAgICBGNjQKK307CisKK1JlZlB0cjxK
SVRDb2RlPiBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKFZNJiB2bSwgc2l6ZV90IGZ1bmN0
aW9uSW5kZXgpCit7CisgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKyAgICBlbWl0UHV0SW1t
ZWRpYXRlVG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIEpTU3RhY2s6OkNvZGVCbG9jayk7
CisKKyAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IG1fbW9kdWxlLT5tX3NpZ25hdHVy
ZXNbbV9tb2R1bGUtPm1fZnVuY1NpZ25hdHVyZXNbZnVuY3Rpb25JbmRleF1dOworICAgIG1fY3Vy
cmVudFJldHVyblR5cGUgPSBzaWduYXR1cmUucmV0dXJuVHlwZTsKKyAgICBwYXJzZUFyZ3VtZW50
cyhzaWduYXR1cmUpOworCisgICAgLy8gRklYTUU6IENhbGN1bGF0ZSB0aGUgYWN0dWFsIGhlaWdo
dC4gKEJlIGNhcmVmdWwgYWJvdXQgY2FsbHMuKQorICAgIG1fc3RhY2tIZWlnaHQgPSBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgc2lnbmF0dXJlLmFy
Z3VtZW50cy5zaXplKCkgKyA4KSAqIHNpemVvZihSZWdpc3Rlcik7CisgICAgYWxsb2NhdGVTcGFj
ZU9uU3RhY2soKTsKKworICAgIHBhcnNlVmFycygpOworICAgIHBhcnNlU3RtdExpc3QoKTsKKwor
ICAgIC8vIEZJWE1FOiBTa2lwIHRoZXNlIGlmIHRoZSBsYXN0IHN0YXRlbWVudCBpcyBhIHJldHVy
biBzdGF0ZW1lbnQuCisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpKSwgR1BSSW5mbzo6cmVnVDApOyAvLyBGSVhNRTogU2hvdWxkIHdlIHJldHVybiB1
bmRlZmluZWQ/CisgICAgZGVhbGxvY2F0ZVNwYWNlT25TdGFjaygpOworICAgIGVtaXRGdW5jdGlv
bkVwaWxvZ3VlKCk7CisgICAgcmV0KCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHZt
LCAqdGhpcywgMCwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCk7CisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIHdpdGhBcml0eUNoZWNrOworICAgIENvZGVSZWYgcmVzdWx0ID0gRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgKCJCYXNlbGluZSBKSVQgY29kZSBmb3IgV2ViQXNzZW1ibHkiKSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5
Q2hlY2ssIEpJVENvZGU6OkJhc2VsaW5lSklUKSk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OmFs
bG9jYXRlU3BhY2VPblN0YWNrKCkKK3sKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1tX3N0YWNr
SGVpZ2h0KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpk
ZWFsbG9jYXRlU3BhY2VPblN0YWNrKCkKK3sKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1fc3Rh
Y2tIZWlnaHQpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6
OnBhcnNlQXJndW1lbnRzKGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlKQoreworICAgIHNpemVf
dCBhcmd1bWVudENvdW50ID0gc2lnbmF0dXJlLmFyZ3VtZW50cy5zaXplKCk7CisgICAgZm9yICh1
aW50MzJfdCBhcmdJbmRleCA9IDA7IGFyZ0luZGV4IDwgYXJndW1lbnRDb3VudDsgKythcmdJbmRl
eCkgeworICAgICAgICBUeXBlIHR5cGUgPSBzaWduYXR1cmUuYXJndW1lbnRzW2FyZ0luZGV4XTsK
KyAgICAgICAgbV9jdXJyZW50TG9jYWxUeXBlcy5hcHBlbmQodHlwZSk7CisgICAgICAgIHN3aXRj
aCAodHlwZSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgICAgIGxvYWQzMihB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAoYXJnSW5kZXggKyAxICsgQ2FsbEZy
YW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6
cmVnVDApOworICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgc3RhY2tBZGRyZXNz
KGFyZ0luZGV4KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNl
IFR5cGU6OkY2NDoKKyAgICAgICAgICAgIGxvYWQ2NChBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCAoYXJnSW5kZXggKyAxICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQo
KSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgdW5i
b3hEb3VibGVXaXRob3V0QXNzZXJ0aW9ucyhHUFJJbmZvOjpyZWdUMCwgRlBSSW5mbzo6ZnBSZWdU
MCk7CisgICAgICAgICAgICBzdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBzdGFja0FkZHJl
c3MoYXJnSW5kZXgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VWYXJzKCkKK3sKKyAgICB1aW50MzJfdCBudW1i
ZXJPZkkzMlZhcnMgPSAwOworICAgIHVpbnQzMl90IG51bWJlck9mRjMyVmFycyA9IDA7CisgICAg
dWludDMyX3QgbnVtYmVyT2ZGNjRWYXJzID0gMDsKKworICAgIFZhclR5cGVzIHZhclR5cGVzOwor
ICAgIFZhclR5cGVzV2l0aEltbSB2YXJUeXBlc1dpdGhJbW07CisgICAgdWludDhfdCBpbW07Cisg
ICAgaWYgKG1fbW9kdWxlLT5tX3JlYWRlci5jb2RlKCZ2YXJUeXBlcywgJnZhclR5cGVzV2l0aElt
bSwgJmltbSkpIHsKKyAgICAgICAgaWYgKHZhclR5cGVzICYgVmFyVHlwZXM6OkkzMikKKyAgICAg
ICAgICAgIG51bWJlck9mSTMyVmFycyA9IG1fbW9kdWxlLT5tX3JlYWRlci5pbW1VMzIoKTsKKyAg
ICAgICAgaWYgKHZhclR5cGVzICYgVmFyVHlwZXM6OkYzMikKKyAgICAgICAgICAgIG51bWJlck9m
RjMyVmFycyA9IG1fbW9kdWxlLT5tX3JlYWRlci5pbW1VMzIoKTsKKyAgICAgICAgaWYgKHZhclR5
cGVzICYgVmFyVHlwZXM6OkY2NCkKKyAgICAgICAgICAgIG51bWJlck9mRjY0VmFycyA9IG1fbW9k
dWxlLT5tX3JlYWRlci5pbW1VMzIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbnVtYmVyT2ZJMzJW
YXJzID0gaW1tOworCisgICAgdWludDMyX3QgbnVtYmVyT2ZWYXJzID0gbnVtYmVyT2ZJMzJWYXJz
ICsgbnVtYmVyT2ZGMzJWYXJzICsgbnVtYmVyT2ZGNjRWYXJzOworICAgIGlmIChudW1iZXJPZlZh
cnMgPiAwKSB7CisgICAgICAgIHVpbnQzMl90IGxvY2FsSW5kZXggPSBtX2N1cnJlbnRMb2NhbFR5
cGVzLnNpemUoKTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mSTMy
VmFyczsgKytpKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRMb2NhbFR5cGVzLmFwcGVuZChUeXBl
OjpJMzIpOworICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIHN0YWNrQWRkcmVz
cyhsb2NhbEluZGV4KyspKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDwgbnVtYmVyT2ZGMzJWYXJzOyArK2kpIHsKKyAgICAgICAgICAgIG1fY3VycmVudExvY2Fs
VHlwZXMuYXBwZW5kKFR5cGU6OkYzMik7CisgICAgICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0z
MigwKSwgc3RhY2tBZGRyZXNzKGxvY2FsSW5kZXgrKykpOworICAgICAgICB9CisgICAgICAgIGZv
ciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkY2NFZhcnM7ICsraSkgeworICAgICAgICAg
ICAgbV9jdXJyZW50TG9jYWxUeXBlcy5hcHBlbmQoVHlwZTo6RjY0KTsKKyAgICAgICAgICAgIHN0
b3JlNjQoVHJ1c3RlZEltbTY0KDApLCBzdGFja0FkZHJlc3MobG9jYWxJbmRleCsrKSk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlU3RtdCgpCit7CisgICAg
U3RtdCBzdG10OworICAgIFN0bXRXaXRoSW1tIHN0bXRXaXRoSW1tOworICAgIHVpbnQ4X3QgaW1t
OworICAgIGlmIChtX21vZHVsZS0+bV9yZWFkZXIuY29kZSgmc3RtdCwgJnN0bXRXaXRoSW1tLCAm
aW1tKSkgeworICAgICAgICBzd2l0Y2ggKHN0bXQpIHsKKyAgICAgICAgY2FzZSBTdG10OjpTZXRM
b2M6CisgICAgICAgICAgICBwYXJzZVNldExvY2FsKDApOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgU3RtdDo6U2V0R2xvOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBTdG10OjpJMzJTdG9yZTg6CisgICAgICAgICAgICBw
YXJzZVN0b3JlKFJldHVyblR5cGU6OkkzMiwgTGluZWFyTWVtb3J5VHlwZTo6STgsIGZhbHNlLCAw
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0bXQ6OkkzMlN0b3JlT2ZmODoK
KyAgICAgICAgICAgIHBhcnNlU3RvcmUoUmV0dXJuVHlwZTo6STMyLCBMaW5lYXJNZW1vcnlUeXBl
OjpJOCwgdHJ1ZSwgMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdG10OjpJ
MzJTdG9yZTE2OgorICAgICAgICAgICAgcGFyc2VTdG9yZShSZXR1cm5UeXBlOjpJMzIsIExpbmVh
ck1lbW9yeVR5cGU6OkkxNiwgZmFsc2UsIDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgU3RtdDo6STMyU3RvcmVPZmYxNjoKKyAgICAgICAgICAgIHBhcnNlU3RvcmUoUmV0dXJu
VHlwZTo6STMyLCBMaW5lYXJNZW1vcnlUeXBlOjpJMTYsIHRydWUsIDApOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgU3RtdDo6STMyU3RvcmUzMjoKKyAgICAgICAgICAgIHBhcnNl
U3RvcmUoUmV0dXJuVHlwZTo6STMyLCBMaW5lYXJNZW1vcnlUeXBlOjpJMzIsIGZhbHNlLCAwKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0bXQ6OkkzMlN0b3JlT2ZmMzI6Cisg
ICAgICAgICAgICBwYXJzZVN0b3JlKFJldHVyblR5cGU6OkkzMiwgTGluZWFyTWVtb3J5VHlwZTo6
STMyLCB0cnVlLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0bXQ6OkYz
MlN0b3JlOgorICAgICAgICAgICAgcGFyc2VTdG9yZShSZXR1cm5UeXBlOjpGMzIsIExpbmVhck1l
bW9yeVR5cGU6OkYzMiwgZmFsc2UsIDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgU3RtdDo6RjMyU3RvcmVPZmY6CisgICAgICAgICAgICBwYXJzZVN0b3JlKFJldHVyblR5cGU6
OkYzMiwgTGluZWFyTWVtb3J5VHlwZTo6RjMyLCB0cnVlLCAwKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFN0bXQ6OkY2NFN0b3JlOgorICAgICAgICAgICAgcGFyc2VTdG9yZShS
ZXR1cm5UeXBlOjpGNjQsIExpbmVhck1lbW9yeVR5cGU6OkY2NCwgZmFsc2UsIDApOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RtdDo6RjY0U3RvcmVPZmY6CisgICAgICAgICAg
ICBwYXJzZVN0b3JlKFJldHVyblR5cGU6OkY2NCwgTGluZWFyTWVtb3J5VHlwZTo6RjY0LCB0cnVl
LCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0bXQ6OkNhbGxJbnQ6Cisg
ICAgICAgICAgICBwYXJzZUNhbGxJbnRlcm5hbChSZXR1cm5UeXBlOjpWb2lkLCAwKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0bXQ6OkNhbGxJbmQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNlIFN0bXQ6OkNhbGxJbXA6
CisgICAgICAgICAgICBwYXJzZUNhbGxJbXBvcnQoUmV0dXJuVHlwZTo6Vm9pZCwgMCk7IC8vIEZJ
WE1FOiBJcyBpdCByZWFsbHkgVm9pZD8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFN0bXQ6OlJldDoKKyAgICAgICAgICAgIHBhcnNlUmV0dXJuU3RtdCgpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6OkJsb2NrOgorICAgICAgICAgICAgcGFyc2VCbG9j
a1N0bXQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdG10OjpJZlRoZW46
CisgICAgICAgICAgICBwYXJzZUlmU3RtdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBjYXNlIFN0bXQ6OklmRWxzZToKKyAgICAgICAgICAgIHBhcnNlSWZFbHNlU3RtdCgpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6OldoaWxlOgorICAgICAgICAgICAg
cGFyc2VXaGlsZVN0bXQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdG10
OjpEbzoKKyAgICAgICAgICAgIHBhcnNlRG9TdG10KCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGNhc2UgU3RtdDo6TGFiZWw6CisgICAgICAgICAgICBwYXJzZUxhYmVsU3RtdCgpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6OkJyZWFrOgorICAgICAgICAg
ICAgcGFyc2VCcmVha1N0bXQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBT
dG10OjpCcmVha0xhYmVsOgorICAgICAgICAgICAgcGFyc2VCcmVha0xhYmVsU3RtdCgpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6OkNvbnRpbnVlOgorICAgICAgICAg
ICAgcGFyc2VDb250aW51ZVN0bXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFN0bXQ6OkNvbnRpbnVlTGFiZWw6CisgICAgICAgICAgICBwYXJzZUNvbnRpbnVlTGFiZWxTdG10
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU3RtdDo6U3dpdGNoOgorICAg
ICAgICAgICAgcGFyc2VTd2l0Y2hTdG10KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBzd2l0Y2ggKHN0bXRXaXRoSW1tKSB7CisgICAg
ICAgIGNhc2UgU3RtdFdpdGhJbW06OlNldExvYzoKKyAgICAgICAgICAgIHBhcnNlU2V0TG9jYWwo
aW1tLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0bXRXaXRoSW1tOjpT
ZXRHbG86CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJz
ZUdldExvY2FsKGludCBkc3QpCit7CisgICAgdWludDMyX3QgaW1tID0gbV9tb2R1bGUtPm1fcmVh
ZGVyLmltbVUzMigpOworICAgIHN3aXRjaCAobV9jdXJyZW50TG9jYWxUeXBlc1tpbW1dKSB7Cisg
ICAgY2FzZSBUeXBlOjpJMzI6CisgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgIGxvYWQzMihz
dGFja0FkZHJlc3MoaW1tKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBzdG9yZTMyKEdQUklu
Zm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFR5cGU6OkY2NDoKKyAgICAgICAgbG9hZDY0KHN0YWNrQWRkcmVzcyhpbW0pLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgICAgIHN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJl
c3MoZHN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJz
ZVNldExvY2FsKHVpbnQzMl90IGltbSwgaW50IGRzdCkKK3sKKyAgICBUeXBlIHR5cGUgPSBtX2N1
cnJlbnRMb2NhbFR5cGVzW2ltbV07CisgICAgcGFyc2VFeHByKFJldHVyblR5cGUodHlwZSksIGRz
dCk7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgY2FzZSBU
eXBlOjpGMzI6CisgICAgICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKGRzdCksIEdQUkluZm86
OnJlZ1QwKTsKKyAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgc3RhY2tBZGRyZXNzKGlt
bSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgbG9hZDY0
KHRlbXBvcmFyeUFkZHJlc3MoZHN0KSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBzdG9yZTY0
KEdQUkluZm86OnJlZ1QwLCBzdGFja0FkZHJlc3MoaW1tKSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
fQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZVNldExvY2FsKGludCBkc3QpCit7CisgICAgcGFy
c2VTZXRMb2NhbChtX21vZHVsZS0+bV9yZWFkZXIuaW1tVTMyKCksIGRzdCk7Cit9CisKK3N0YXRp
YyBjb25zdCB2b2lkKiBKU0NfSE9TVF9DQUxMIGdldEFycmF5QnVmZmVyRGF0YShNb2R1bGUqIG1v
ZHVsZSkKK3sKKyAgICAvLyBGSVhNRTogRG8gd2UgcmVhbGx5IGhhdmUgdG8gZG8gdGhpcz8KKyAg
ICByZXR1cm4gbW9kdWxlLT5hcnJheUJ1ZmZlckRhdGEoKTsKK30KKwordm9pZCBKSVRDb21waWxl
cjo6cGFyc2VBcnJheUJ1ZmZlck9mZnNldChib29sIGhhc09mZnNldCwgaW50IGRzdCkKK3sKKyAg
ICAvLyBUT0RPOiBDaGVjayBmb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MuCisgICAgdWludDMyX3Qg
b2Zmc2V0ID0gaGFzT2Zmc2V0ID8gbV9tb2R1bGUtPm1fcmVhZGVyLmltbVUzMigpIDogMDsKKyAg
ICB1aW50MzJfdCB1MzI7CisgICAgaWYgKG1fbW9kdWxlLT5tX3JlYWRlci5pZkkzMkxpdChtX21v
ZHVsZS0+bV9jb25zdGFudEkzMnMsICZ1MzIpKQorICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0z
Mih1MzIgKyBvZmZzZXQpLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgIGVsc2UgeworICAg
ICAgICBwYXJzZUV4cHIoUmV0dXJuVHlwZTo6STMyLCBkc3QpOworICAgICAgICBsb2FkMzIodGVt
cG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGlmIChvZmZzZXQp
CisgICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIob2Zmc2V0KSwgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkp
OworICAgIH0KKworICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKKyAgICAg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgc2V0dXBBcmd1bWVudHMoVHJ1c3RlZEltbVB0ciht
X21vZHVsZSkpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGdl
dEFycmF5QnVmZmVyRGF0YSkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBjYWxsKEdQUklu
Zm86Om5vbkFyZ0dQUjApOworICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkK
KyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2Fs
bCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKK30KKyAgICAKK3ZvaWQgSklUQ29tcGlsZXI6OnBh
cnNlTG9hZChSZXR1cm5UeXBlIHJldHVyblR5cGUsIExpbmVhck1lbW9yeVR5cGUgbGluZWFyTWVt
b3J5VHlwZSwgYm9vbCBoYXNPZmZzZXQsIGludCBkc3QpCit7CisgICAgcGFyc2VBcnJheUJ1ZmZl
ck9mZnNldChoYXNPZmZzZXQsIGRzdCk7CisgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoZHN0
KSwgR1BSSW5mbzo6cmVnVDEpOworICAgIEJhc2VJbmRleCBhZGRyZXNzID0gQmFzZUluZGV4KEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMSwgVGltZXNPbmUpOworCisgICAg
c3dpdGNoIChyZXR1cm5UeXBlKSB7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpJMzI6CisgICAgICAg
IHN3aXRjaCAobGluZWFyTWVtb3J5VHlwZSkgeworICAgICAgICBjYXNlIExpbmVhck1lbW9yeVR5
cGU6OlM4OgorICAgICAgICAgICAgbG9hZDhTaWduZWRFeHRlbmRUbzMyKGFkZHJlc3MsIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExpbmVhck1lbW9y
eVR5cGU6OlU4OgorICAgICAgICAgICAgbG9hZDgoYWRkcmVzcywgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTGluZWFyTWVtb3J5VHlwZTo6UzE2Ogor
ICAgICAgICAgICAgbG9hZDE2U2lnbmVkRXh0ZW5kVG8zMihhZGRyZXNzLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMaW5lYXJNZW1vcnlUeXBlOjpV
MTY6CisgICAgICAgICAgICBsb2FkMTYoYWRkcmVzcywgR1BSSW5mbzo6cmVnVDApOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTGluZWFyTWVtb3J5VHlwZTo6STMyOgorICAgICAg
ICAgICAgbG9hZDMyKGFkZHJlc3MsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVz
cyhkc3QpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpGMzI6CisgICAg
ICAgIGxvYWQzMihhZGRyZXNzLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIHN0b3JlMzIoR1BS
SW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUmV0dXJuVHlwZTo6RjY0OgorICAgICAgICBsb2FkNjQoYWRkcmVzcywgR1BSSW5mbzo6
cmVnVDApOworICAgICAgICBzdG9yZTY0KEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNz
KGRzdCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VT
dG9yZShSZXR1cm5UeXBlIHJldHVyblR5cGUsIExpbmVhck1lbW9yeVR5cGUgbGluZWFyTWVtb3J5
VHlwZSwgYm9vbCBoYXNPZmZzZXQsIGludCBkc3QpCit7CisgICAgcGFyc2VBcnJheUJ1ZmZlck9m
ZnNldChoYXNPZmZzZXQsIGRzdCArIDEpOworICAgIHN0b3JlUHRyKEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworCisgICAgcGFyc2VFeHByKHJldHVyblR5
cGUsIGRzdCArIDIpOworCisgICAgbG9hZFB0cih0ZW1wb3JhcnlBZGRyZXNzKGRzdCksIEdQUklu
Zm86OnJlZ1QxKTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QgKyAxKSwgR1BSSW5m
bzo6cmVnVDIpOworICAgIEJhc2VJbmRleCBhZGRyZXNzID0gQmFzZUluZGV4KEdQUkluZm86OnJl
Z1QxLCBHUFJJbmZvOjpyZWdUMiwgVGltZXNPbmUpOworCisgICAgc3dpdGNoIChyZXR1cm5UeXBl
KSB7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpJMzI6CisgICAgICAgIGxvYWQzMih0ZW1wb3JhcnlB
ZGRyZXNzKGRzdCArIDIpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIHN3aXRjaCAobGluZWFy
TWVtb3J5VHlwZSkgeworICAgICAgICBjYXNlIExpbmVhck1lbW9yeVR5cGU6Okk4OgorICAgICAg
ICAgICAgc3RvcmU4KEdQUkluZm86OnJlZ1QwLCBhZGRyZXNzKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIExpbmVhck1lbW9yeVR5cGU6OkkxNjoKKyAgICAgICAgICAgIHN0b3Jl
MTYoR1BSSW5mbzo6cmVnVDAsIGFkZHJlc3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgTGluZWFyTWVtb3J5VHlwZTo6STMyOgorICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZv
OjpyZWdUMCwgYWRkcmVzcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIHN0
b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUmV0dXJuVHlwZTo6RjMyOgorICAgICAgICBsb2FkMzIodGVtcG9yYXJ5
QWRkcmVzcyhkc3QgKyAyKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBzdG9yZTMyKEdQUklu
Zm86OnJlZ1QwLCBhZGRyZXNzKTsKKyAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgdGVt
cG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXR1cm5UeXBl
OjpGNjQ6CisgICAgICAgIGxvYWQ2NCh0ZW1wb3JhcnlBZGRyZXNzKGRzdCArIDIpLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgICAgIHN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIGFkZHJlc3MpOworICAg
ICAgICBzdG9yZTY0KEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VSZXR1cm5TdG10KCkK
K3sKKyAgICBzd2l0Y2ggKG1fY3VycmVudFJldHVyblR5cGUpIHsKKyAgICBjYXNlIFJldHVyblR5
cGU6OkkzMjoKKyAgICAgICAgcGFyc2VFeHByKFJldHVyblR5cGU6OkkzMiwgMCk7CisgICAgICAg
IGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKDApLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Cisg
ICAgICAgIG9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmV0dXJuVHlwZTo6RjMyOgor
ICAgICAgICBwYXJzZUV4cHIoUmV0dXJuVHlwZTo6RjMyLCAwKTsKKyAgICAgICAgbG9hZERvdWJs
ZSh0ZW1wb3JhcnlBZGRyZXNzKDApLCBGUFJJbmZvOjpmcFJlZ1QwKTsgLy8gRklYTUU6IFRoaXMg
bG9hZHMgNjQgYml0cyEKKyAgICAgICAgY29udmVydEZsb2F0VG9Eb3VibGUoRlBSSW5mbzo6ZnBS
ZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgIGJveERvdWJsZShGUFJJbmZvOjpmcFJl
Z1QwLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UmV0dXJuVHlwZTo6RjY0OgorICAgICAgICBwYXJzZUV4cHIoUmV0dXJuVHlwZTo6RjY0LCAwKTsK
KyAgICAgICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKDApLCBGUFJJbmZvOjpmcFJlZ1Qw
KTsKKyAgICAgICAgYm94RG91YmxlKEZQUkluZm86OmZwUmVnVDAsIEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpWb2lkOgorICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWFsbG9jYXRlU3BhY2VPblN0YWNrKCk7CisgICAg
ZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICByZXQoKTsKK30KKwordm9pZCBKSVRDb21waWxl
cjo6cGFyc2VTdG10TGlzdCgpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZTdG10cyA9IG1fbW9k
dWxlLT5tX3JlYWRlci5pbW1VMzIoKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVt
YmVyT2ZTdG10czsgKytpKQorICAgICAgICBwYXJzZVN0bXQoKTsKK30KKwordm9pZCBKSVRDb21w
aWxlcjo6cGFyc2VCbG9ja1N0bXQoKQoreworICAgIHBhcnNlU3RtdExpc3QoKTsKK30KKwordm9p
ZCBKSVRDb21waWxlcjo6cGFyc2VJZlN0bXQoKQoreworICAgIHBhcnNlRXhwcihSZXR1cm5UeXBl
OjpJMzIsIDApOworICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKDApLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgSnVtcCBlbmQgPSBicmFuY2hUZXN0MzIoWmVybywgR1BSSW5mbzo6cmVnVDApOwor
ICAgIHBhcnNlU3RtdCgpOworICAgIGVuZC5saW5rKHRoaXMpOworfQorCit2b2lkIEpJVENvbXBp
bGVyOjpwYXJzZUlmRWxzZVN0bXQoKQoreworICAgIHBhcnNlRXhwcihSZXR1cm5UeXBlOjpJMzIs
IDApOworICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKDApLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgSnVtcCBlbHMgPSBicmFuY2hUZXN0MzIoWmVybywgR1BSSW5mbzo6cmVnVDApOworICAgIHBh
cnNlU3RtdCgpOworICAgIEp1bXAgZW5kID0ganVtcCgpOworICAgIGVscy5saW5rKHRoaXMpOwor
ICAgIHBhcnNlU3RtdCgpOworICAgIGVuZC5saW5rKHRoaXMpOworfQorCit2b2lkIEpJVENvbXBp
bGVyOjpwYXJzZVdoaWxlU3RtdCgpCit7CisgICAgSnVtcFNjb3BlIGNvbnRpbnVlSnVtcFNjb3Bl
KHRoaXMsIGxhYmVsKCkpOworICAgIHB1c2hDb250aW51ZUp1bXBTY29wZSgmY29udGludWVKdW1w
U2NvcGUpOworCisgICAgSnVtcExpc3QgYnJlYWtKdW1wTGlzdDsKKyAgICBwdXNoQnJlYWtKdW1w
TGlzdCgmYnJlYWtKdW1wTGlzdCk7CisKKyAgICBwYXJzZUV4cHIoUmV0dXJuVHlwZTo6STMyLCAw
KTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcygwKSwgR1BSSW5mbzo6cmVnVDApOworICAg
IEp1bXAgZW5kID0gYnJhbmNoVGVzdDMyKFplcm8sIEdQUkluZm86OnJlZ1QwKTsKKyAgICBwYXJz
ZVN0bXQoKTsKKyAgICBjb250aW51ZUp1bXBTY29wZS5qdW1wKCk7CisgICAgZW5kLmxpbmsodGhp
cyk7CisgICAgYnJlYWtKdW1wTGlzdC5saW5rKHRoaXMpOworCisgICAgcG9wQnJlYWtKdW1wTGlz
dCgpOworCisgICAgcG9wQ29udGludWVKdW1wU2NvcGUoKTsKK30KKwordm9pZCBKSVRDb21waWxl
cjo6cGFyc2VEb1N0bXQoKQoreworICAgIEp1bXBTY29wZSBjb250aW51ZUp1bXBTY29wZSh0aGlz
KTsKKyAgICBwdXNoQ29udGludWVKdW1wU2NvcGUoJmNvbnRpbnVlSnVtcFNjb3BlKTsKKworICAg
IEp1bXBMaXN0IGJyZWFrSnVtcExpc3Q7CisgICAgcHVzaEJyZWFrSnVtcExpc3QoJmJyZWFrSnVt
cExpc3QpOworCisgICAgTGFiZWwgc3RhcnQgPSBsYWJlbCgpOworICAgIHBhcnNlU3RtdCgpOwor
ICAgIGNvbnRpbnVlSnVtcFNjb3BlLmxpbmsoKTsKKyAgICBwYXJzZUV4cHIoUmV0dXJuVHlwZTo6
STMyLCAwKTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcygwKSwgR1BSSW5mbzo6cmVnVDAp
OworICAgIEp1bXAganVtcFRvU3RhcnQgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgR1BSSW5mbzo6
cmVnVDApOworICAgIGp1bXBUb1N0YXJ0LmxpbmtUbyhzdGFydCwgdGhpcyk7CisgICAgYnJlYWtK
dW1wTGlzdC5saW5rKHRoaXMpOworCisgICAgcG9wQnJlYWtKdW1wTGlzdCgpOworCisgICAgcG9w
Q29udGludWVKdW1wU2NvcGUoKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VMYWJlbFN0
bXQoKQoreworICAgIExhYmVsIGNvbnRpbnVlTGFiZWwgPSBsYWJlbCgpOworICAgIEp1bXBMaXN0
IGJyZWFrSnVtcExpc3Q7CisgICAgcHVzaENvbnRpbnVlTGFiZWxMYWJlbCgmY29udGludWVMYWJl
bCk7CisgICAgcHVzaEJyZWFrTGFiZWxKdW1wTGlzdCgmYnJlYWtKdW1wTGlzdCk7CisgICAgcGFy
c2VTdG10KCk7CisgICAgYnJlYWtKdW1wTGlzdC5saW5rKHRoaXMpOworICAgIHBvcEJyZWFrTGFi
ZWxKdW1wTGlzdCgpOworICAgIHBvcENvbnRpbnVlTGFiZWxMYWJlbCgpOworfQorCit2b2lkIEpJ
VENvbXBpbGVyOjpwYXJzZUJyZWFrU3RtdCgpCit7CisgICAgdG9wQnJlYWtKdW1wTGlzdCgpLT5h
cHBlbmQoanVtcCgpKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VCcmVha0xhYmVsU3Rt
dCgpCit7CisgICAgdWludDMyX3QgaW5kZXggPSBtX21vZHVsZS0+bV9yZWFkZXIuaW1tVTMyKCk7
CisgICAgYnJlYWtMYWJlbEp1bXBMaXN0KGluZGV4KS0+YXBwZW5kKGp1bXAoKSk7Cit9CisKK3Zv
aWQgSklUQ29tcGlsZXI6OnBhcnNlQ29udGludWVTdG10KCkKK3sKKyAgICB0b3BDb250aW51ZUp1
bXBTY29wZSgpLT5qdW1wKCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlQ29udGludWVM
YWJlbFN0bXQoKQoreworICAgIHVpbnQzMl90IGluZGV4ID0gbV9tb2R1bGUtPm1fcmVhZGVyLmlt
bVUzMigpOworICAgIGp1bXAoKmNvbnRpbnVlTGFiZWxMYWJlbChpbmRleCkpOworfQorCit2b2lk
IEpJVENvbXBpbGVyOjpwYXJzZVN3aXRjaFN0bXQoKQoreworICAgIEp1bXBMaXN0IGJyZWFrSnVt
cExpc3Q7CisgICAgcHVzaEJyZWFrSnVtcExpc3QoJmJyZWFrSnVtcExpc3QpOworCisgICAgdWlu
dDMyX3QgbnVtYmVyT2ZDYXNlcyA9IG1fbW9kdWxlLT5tX3JlYWRlci5pbW1VMzIoKTsKKyAgICBw
YXJzZUV4cHIoUmV0dXJuVHlwZTo6STMyLCAwKTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVz
cygwKSwgR1BSSW5mbzo6cmVnVDApOworCisgICAgSnVtcCB0YWJsZSA9IGp1bXAoKTsKKworICAg
IFZlY3RvcjxMYWJlbD4gbGFiZWxzOworICAgIFZlY3RvcjxpbnQzMl90PiBpbW1zOworICAgIExh
YmVsIGRlZmF1bHRMYWJlbDsKKyAgICBib29sIGhhc0RlZmF1bHQgPSBmYWxzZTsKKworICAgIGZv
ciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkNhc2VzOyArK2kpIHsKKyAgICAgICAgc3dp
dGNoIChtX21vZHVsZS0+bV9yZWFkZXIuc3dpdGNoQ2FzZSgpKSB7CisgICAgICAgIGNhc2UgU3dp
dGNoQ2FzZTo6Q2FzZTA6CisgICAgICAgICAgICBsYWJlbHMuYXBwZW5kKGxhYmVsKCkpOworICAg
ICAgICAgICAgaW1tcy5hcHBlbmQobV9tb2R1bGUtPm1fcmVhZGVyLmltbVMzMigpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN3aXRjaENhc2U6OkNhc2UxOgorICAgICAgICAg
ICAgbGFiZWxzLmFwcGVuZChsYWJlbCgpKTsKKyAgICAgICAgICAgIGltbXMuYXBwZW5kKG1fbW9k
dWxlLT5tX3JlYWRlci5pbW1TMzIoKSk7CisgICAgICAgICAgICBwYXJzZVN0bXQoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN3aXRjaENhc2U6OkNhc2VOOgorICAgICAgICAg
ICAgbGFiZWxzLmFwcGVuZChsYWJlbCgpKTsKKyAgICAgICAgICAgIGltbXMuYXBwZW5kKG1fbW9k
dWxlLT5tX3JlYWRlci5pbW1TMzIoKSk7CisgICAgICAgICAgICBwYXJzZVN0bXRMaXN0KCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTd2l0Y2hDYXNlOjpEZWZhdWx0MDoKKyAg
ICAgICAgICAgIGRlZmF1bHRMYWJlbCA9IGxhYmVsKCk7CisgICAgICAgICAgICBoYXNEZWZhdWx0
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN3aXRjaENhc2U6OkRl
ZmF1bHQxOgorICAgICAgICAgICAgZGVmYXVsdExhYmVsID0gbGFiZWwoKTsKKyAgICAgICAgICAg
IGhhc0RlZmF1bHQgPSB0cnVlOworICAgICAgICAgICAgcGFyc2VTdG10KCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBTd2l0Y2hDYXNlOjpEZWZhdWx0TjoKKyAgICAgICAgICAg
IGRlZmF1bHRMYWJlbCA9IGxhYmVsKCk7CisgICAgICAgICAgICBoYXNEZWZhdWx0ID0gdHJ1ZTsK
KyAgICAgICAgICAgIHBhcnNlU3RtdExpc3QoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIEp1bXAgZW5kID0ganVtcCgpOworICAgIHRhYmxlLmxpbmso
dGhpcyk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxhYmVscy5zaXplKCk7ICsraSkg
eworICAgICAgICBKdW1wIGptcCA9IGJyYW5jaDMyKEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgVHJ1
c3RlZEltbTMyKGltbXNbaV0pKTsKKyAgICAgICAgam1wLmxpbmtUbyhsYWJlbHNbaV0sIHRoaXMp
OworICAgIH0KKyAgICBpZiAoaGFzRGVmYXVsdCkKKyAgICAgICAganVtcChkZWZhdWx0TGFiZWwp
OworCisgICAgZW5kLmxpbmsodGhpcyk7CisKKyAgICBicmVha0p1bXBMaXN0LmxpbmsodGhpcyk7
CisgICAgcG9wQnJlYWtKdW1wTGlzdCgpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUV4
cHIoUmV0dXJuVHlwZSByZXR1cm5UeXBlLCBpbnQgZHN0KQoreworICAgIHN3aXRjaCAocmV0dXJu
VHlwZSkgeworICAgIGNhc2UgUmV0dXJuVHlwZTo6STMyOgorICAgICAgICBwYXJzZUV4cHJJMzIo
ZHN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpGNjQ6CisgICAgICAg
IHBhcnNlRXhwckY2NChkc3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJldHVyblR5cGU6
OlZvaWQ6CisgICAgICAgIHBhcnNlRXhwclZvaWQoZHN0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9
CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlRXhwckkzMihpbnQgZHN0KQoreworICAgIEkzMiBp
MzI7CisgICAgSTMyV2l0aEltbSBpMzJXaXRoSW1tOworICAgIHVpbnQ4X3QgaW1tOworCisgICAg
aWYgKG1fbW9kdWxlLT5tX3JlYWRlci5jb2RlKCZpMzIsICZpMzJXaXRoSW1tLCAmaW1tKSkgewor
ICAgICAgICBzd2l0Y2ggKGkzMikgeworICAgICAgICBjYXNlIEkzMjo6TGl0UG9vbDoKKyAgICAg
ICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKG1fbW9kdWxlLT5tX2NvbnN0YW50STMyc1ttX21v
ZHVsZS0+bV9yZWFkZXIuaW1tVTMyKCldKSwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6TGl0SW1tOgorICAgICAgICAgICAgc3Rv
cmUzMihUcnVzdGVkSW1tMzIobV9tb2R1bGUtPm1fcmVhZGVyLmltbVUzMigpKSwgdGVtcG9yYXJ5
QWRkcmVzcyhkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6R2V0
TG9jOgorICAgICAgICAgICAgcGFyc2VHZXRMb2NhbChkc3QpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSTMyOjpHZXRHbG86CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNlIEkzMjo6U2V0TG9jOgorICAgICAgICAgICAgcGFy
c2VTZXRMb2NhbChkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpT
ZXRHbG86CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICBjYXNlIEkzMjo6U0xvYWQ4OgorICAgICAgICAgICAgcGFyc2VMb2FkKFJldHVyblR5cGU6Okkz
MiwgTGluZWFyTWVtb3J5VHlwZTo6UzgsIGZhbHNlLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSTMyOjpTTG9hZE9mZjg6CisgICAgICAgICAgICBwYXJzZUxvYWQoUmV0
dXJuVHlwZTo6STMyLCBMaW5lYXJNZW1vcnlUeXBlOjpTOCwgdHJ1ZSwgZHN0KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6VUxvYWQ4OgorICAgICAgICAgICAgcGFyc2VM
b2FkKFJldHVyblR5cGU6OkkzMiwgTGluZWFyTWVtb3J5VHlwZTo6VTgsIGZhbHNlLCBkc3QpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpVTG9hZE9mZjg6CisgICAgICAg
ICAgICBwYXJzZUxvYWQoUmV0dXJuVHlwZTo6STMyLCBMaW5lYXJNZW1vcnlUeXBlOjpVOCwgdHJ1
ZSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6U0xvYWQxNjoK
KyAgICAgICAgICAgIHBhcnNlTG9hZChSZXR1cm5UeXBlOjpJMzIsIExpbmVhck1lbW9yeVR5cGU6
OlMxNiwgZmFsc2UsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6
OlNMb2FkT2ZmMTY6CisgICAgICAgICAgICBwYXJzZUxvYWQoUmV0dXJuVHlwZTo6STMyLCBMaW5l
YXJNZW1vcnlUeXBlOjpTMTYsIHRydWUsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBJMzI6OlVMb2FkMTY6CisgICAgICAgICAgICBwYXJzZUxvYWQoUmV0dXJuVHlwZTo6
STMyLCBMaW5lYXJNZW1vcnlUeXBlOjpVMTYsIGZhbHNlLCBkc3QpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgSTMyOjpVTG9hZE9mZjE2OgorICAgICAgICAgICAgcGFyc2VMb2Fk
KFJldHVyblR5cGU6OkkzMiwgTGluZWFyTWVtb3J5VHlwZTo6VTE2LCB0cnVlLCBkc3QpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpMb2FkMzI6CisgICAgICAgICAgICBw
YXJzZUxvYWQoUmV0dXJuVHlwZTo6STMyLCBMaW5lYXJNZW1vcnlUeXBlOjpJMzIsIGZhbHNlLCBk
c3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpMb2FkT2ZmMzI6Cisg
ICAgICAgICAgICBwYXJzZUxvYWQoUmV0dXJuVHlwZTo6STMyLCBMaW5lYXJNZW1vcnlUeXBlOjpJ
MzIsIHRydWUsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlN0
b3JlODoKKyAgICAgICAgICAgIHBhcnNlU3RvcmUoUmV0dXJuVHlwZTo6STMyLCBMaW5lYXJNZW1v
cnlUeXBlOjpJOCwgZmFsc2UsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJMzI6OlN0b3JlT2ZmODoKKyAgICAgICAgICAgIHBhcnNlU3RvcmUoUmV0dXJuVHlwZTo6STMy
LCBMaW5lYXJNZW1vcnlUeXBlOjpJOCwgdHJ1ZSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEkzMjo6U3RvcmUxNjoKKyAgICAgICAgICAgIHBhcnNlU3RvcmUoUmV0dXJu
VHlwZTo6STMyLCBMaW5lYXJNZW1vcnlUeXBlOjpJMTYsIGZhbHNlLCBkc3QpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpTdG9yZU9mZjE2OgorICAgICAgICAgICAgcGFy
c2VTdG9yZShSZXR1cm5UeXBlOjpJMzIsIExpbmVhck1lbW9yeVR5cGU6OkkxNiwgdHJ1ZSwgZHN0
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6U3RvcmUzMjoKKyAgICAg
ICAgICAgIHBhcnNlU3RvcmUoUmV0dXJuVHlwZTo6STMyLCBMaW5lYXJNZW1vcnlUeXBlOjpJMzIs
IGZhbHNlLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpTdG9y
ZU9mZjMyOgorICAgICAgICAgICAgcGFyc2VTdG9yZShSZXR1cm5UeXBlOjpJMzIsIExpbmVhck1l
bW9yeVR5cGU6OkkzMiwgdHJ1ZSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEkzMjo6Q2FsbEludDoKKyAgICAgICAgICAgIHBhcnNlQ2FsbEludGVybmFsKFJldHVyblR5
cGU6OkkzMiwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6Q2Fs
bEluZDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IGNhc2UgSTMyOjpDYWxsSW1wOgorICAgICAgICAgICAgcGFyc2VDYWxsSW1wb3J0KFJldHVyblR5
cGU6OkkzMiwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6Q29u
ZDoKKyAgICAgICAgICAgIHBhcnNlQ29uZChSZXR1cm5UeXBlOjpJMzIsIGRzdCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkNvbW1hOgorICAgICAgICAgICAgcGFyc2VD
b21tYShSZXR1cm5UeXBlOjpJMzIsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJMzI6OkZyb21GMzI6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICBjYXNlIEkzMjo6RnJvbUY2NDoKKyAgICAgICAgICAgIHBhcnNlRXhwckY2
NChkc3QpOworICAgICAgICAgICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKGRzdCksIEZQ
UkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgdHJ1bmNhdGVEb3VibGVUb0ludDMyKEZQUklu
Zm86OmZwUmVnVDAsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlMzIoR1BSSW5m
bzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJMzI6Ok5lZzoKKyAgICAgICAgY2FzZSBJMzI6OkJpdE5vdDoKKyAgICAgICAg
Y2FzZSBJMzI6OkNsejoKKyAgICAgICAgY2FzZSBJMzI6OkFiczoKKyAgICAgICAgICAgIHBhcnNl
VW5hcnlPcChzdGF0aWNfY2FzdDx1aW50OF90PihpMzIpLCBSZXR1cm5UeXBlOjpJMzIsIGRzdCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkFkZDoKKyAgICAgICAgY2Fz
ZSBJMzI6OlN1YjoKKyAgICAgICAgY2FzZSBJMzI6Ok11bDoKKyAgICAgICAgY2FzZSBJMzI6OlNE
aXY6CisgICAgICAgIGNhc2UgSTMyOjpTTW9kOgorICAgICAgICBjYXNlIEkzMjo6Qml0T3I6Cisg
ICAgICAgIGNhc2UgSTMyOjpCaXRBbmQ6CisgICAgICAgIGNhc2UgSTMyOjpCaXRYb3I6CisgICAg
ICAgIGNhc2UgSTMyOjpMc2g6CisgICAgICAgIGNhc2UgSTMyOjpBcml0aFJzaDoKKyAgICAgICAg
Y2FzZSBJMzI6OkxvZ2ljUnNoOgorICAgICAgICAgICAgcGFyc2VCaW5hcnlPcChzdGF0aWNfY2Fz
dDx1aW50OF90PihpMzIpLCBSZXR1cm5UeXBlOjpJMzIsIGRzdCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJMzI6OlVEaXY6CisgICAgICAgIGNhc2UgSTMyOjpVTW9kOgorICAg
ICAgICBjYXNlIEkzMjo6TG9naWNOb3Q6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBjYXNlIEkzMjo6RXFJMzI6CisgICAgICAgICAgICBwYXJzZVJl
bGF0aW9uYWxPcEkzMihFcXVhbCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEkzMjo6RXFGMzI6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICBjYXNlIEkzMjo6RXFGNjQ6CisgICAgICAgICAgICBwYXJzZVJlbGF0aW9uYWxP
cEY2NChEb3VibGVFcXVhbCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEkzMjo6TkVxSTMyOgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3BJMzIoTm90RXF1YWws
IGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6Ok5FcUYzMjoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgSTMy
OjpORXFGNjQ6CisgICAgICAgICAgICBwYXJzZVJlbGF0aW9uYWxPcEY2NChEb3VibGVOb3RFcXVh
bCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6U0xlVGhJMzI6
CisgICAgICAgICAgICBwYXJzZVJlbGF0aW9uYWxPcEkzMihMZXNzVGhhbiwgZHN0KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6VUxlVGhJMzI6CisgICAgICAgICAgICBw
YXJzZVJlbGF0aW9uYWxPcEkzMihCZWxvdywgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEkzMjo6TGVUaEYzMjoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIGNhc2UgSTMyOjpMZVRoRjY0OgorICAgICAgICAgICAgcGFyc2VS
ZWxhdGlvbmFsT3BGNjQoRG91YmxlTGVzc1RoYW4sIGRzdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBJMzI6OlNMZUVxSTMyOgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFs
T3BJMzIoTGVzc1RoYW5PckVxdWFsLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgSTMyOjpVTGVFcUkzMjoKKyAgICAgICAgICAgIHBhcnNlUmVsYXRpb25hbE9wSTMyKEJl
bG93T3JFcXVhbCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6
TGVFcUYzMjoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIGNhc2UgSTMyOjpMZUVxRjY0OgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3BGNjQo
RG91YmxlTGVzc1RoYW5PckVxdWFsLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgSTMyOjpTR3JUaEkzMjoKKyAgICAgICAgICAgIHBhcnNlUmVsYXRpb25hbE9wSTMyKEdy
ZWF0ZXJUaGFuLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpV
R3JUaEkzMjoKKyAgICAgICAgICAgIHBhcnNlUmVsYXRpb25hbE9wSTMyKEFib3ZlLCBkc3QpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpHclRoRjMyOgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBJMzI6OkdyVGhG
NjQ6CisgICAgICAgICAgICBwYXJzZVJlbGF0aW9uYWxPcEY2NChEb3VibGVHcmVhdGVyVGhhbiwg
ZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6U0dyRXFJMzI6Cisg
ICAgICAgICAgICBwYXJzZVJlbGF0aW9uYWxPcEkzMihHcmVhdGVyVGhhbk9yRXF1YWwsIGRzdCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlVHckVxSTMyOgorICAgICAg
ICAgICAgcGFyc2VSZWxhdGlvbmFsT3BJMzIoQWJvdmVPckVxdWFsLCBkc3QpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpHckVxRjMyOgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBJMzI6OkdyRXFGNjQ6CisgICAg
ICAgICAgICBwYXJzZVJlbGF0aW9uYWxPcEY2NChEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwsIGRz
dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlNNaW46CisgICAgICAg
ICAgICBwYXJzZU1pbk1heEkzMihMZXNzVGhhbk9yRXF1YWwsIGRzdCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlVNaW46CisgICAgICAgICAgICBwYXJzZU1pbk1heEkz
MihCZWxvd09yRXF1YWwsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
MzI6OlNNYXg6CisgICAgICAgICAgICBwYXJzZU1pbk1heEkzMihHcmVhdGVyVGhhbk9yRXF1YWws
IGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlVNYXg6CisgICAg
ICAgICAgICBwYXJzZU1pbk1heEkzMihBYm92ZU9yRXF1YWwsIGRzdCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBzd2l0Y2ggKGkzMldp
dGhJbW0pIHsKKyAgICAgICAgY2FzZSBJMzJXaXRoSW1tOjpMaXRJbW06CisgICAgICAgICAgICBz
dG9yZTMyKFRydXN0ZWRJbW0zMihpbW0pLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyV2l0aEltbTo6TGl0UG9vbDoKKyAgICAgICAg
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKG1fbW9kdWxlLT5tX2NvbnN0YW50STMyc1tpbW1dKSwg
dGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEkzMldpdGhJbW06OkdldExvYzoKKyAgICAgICAgICAgIGxvYWQzMihzdGFja0FkZHJlc3MoaW1t
KSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwg
dGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VFeHByRjY0KGludCBkc3QpCit7
CisgICAgRjY0IGY2NDsKKyAgICBGNjRXaXRoSW1tIGY2NFdpdGhJbW07CisgICAgdWludDhfdCBp
bW07CisKKyAgICBpZiAobV9tb2R1bGUtPm1fcmVhZGVyLmNvZGUoJmY2NCwgJmY2NFdpdGhJbW0s
ICZpbW0pKSB7CisgICAgICAgIHN3aXRjaCAoZjY0KSB7CisgICAgICAgIGNhc2UgRjY0OjpMaXRQ
b29sOgorICAgICAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQocmVpbnRlcnByZXREb3VibGVU
b0ludDY0KG1fbW9kdWxlLT5tX2NvbnN0YW50RjY0c1ttX21vZHVsZS0+bV9yZWFkZXIuaW1tVTMy
KCldKSksIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBGNjQ6OkxpdEltbToKKyAgICAgICAgICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KHJl
aW50ZXJwcmV0RG91YmxlVG9JbnQ2NChtX21vZHVsZS0+bV9yZWFkZXIuZml4ZWRXaWR0aDxkb3Vi
bGU+KCkpKSwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEY2NDo6TG9hZDoKKyAgICAgICAgICAgIHBhcnNlTG9hZChSZXR1cm5UeXBlOjpG
NjQsIExpbmVhck1lbW9yeVR5cGU6OkY2NCwgZmFsc2UsIGRzdCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBGNjQ6OkxvYWRPZmY6CisgICAgICAgICAgICBwYXJzZUxvYWQoUmV0
dXJuVHlwZTo6RjY0LCBMaW5lYXJNZW1vcnlUeXBlOjpGNjQsIHRydWUsIGRzdCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGNjQ6OlN0b3JlOgorICAgICAgICAgICAgcGFyc2VT
dG9yZShSZXR1cm5UeXBlOjpGNjQsIExpbmVhck1lbW9yeVR5cGU6OkY2NCwgZmFsc2UsIGRzdCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGNjQ6OlN0b3JlT2ZmOgorICAgICAg
ICAgICAgcGFyc2VTdG9yZShSZXR1cm5UeXBlOjpGNjQsIExpbmVhck1lbW9yeVR5cGU6OkY2NCwg
dHJ1ZSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2NDo6Q2FsbElu
dDoKKyAgICAgICAgICAgIHBhcnNlQ2FsbEludGVybmFsKFJldHVyblR5cGU6OkY2NCwgZHN0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2NDo6Q2FsbEltcDoKKyAgICAgICAg
ICAgIHBhcnNlQ2FsbEltcG9ydChSZXR1cm5UeXBlOjpGNjQsIGRzdCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBGNjQ6OkNvbmQ6CisgICAgICAgICAgICBwYXJzZUNvbmQoUmV0
dXJuVHlwZTo6RjY0LCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRjY0
OjpDb21tYToKKyAgICAgICAgICAgIHBhcnNlQ29tbWEoUmV0dXJuVHlwZTo6RjY0LCBkc3QpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRjY0OjpGcm9tUzMyOgorICAgICAgICAg
ICAgcGFyc2VFeHBySTMyKGRzdCk7CisgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZSh0
ZW1wb3JhcnlBZGRyZXNzKGRzdCksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgc3Rv
cmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2NDo6RnJvbVUzMjoKKyAgICAgICAgY2FzZSBG
NjQ6OkZyb21GMzI6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBjYXNlIEY2NDo6TmVnOgorICAgICAgICBjYXNlIEY2NDo6QWJzOgorICAgICAgICBj
YXNlIEY2NDo6Q2VpbDoKKyAgICAgICAgY2FzZSBGNjQ6OkZsb29yOgorICAgICAgICBjYXNlIEY2
NDo6U3FydDoKKyAgICAgICAgY2FzZSBGNjQ6OkNvczoKKyAgICAgICAgY2FzZSBGNjQ6OlNpbjoK
KyAgICAgICAgY2FzZSBGNjQ6OlRhbjoKKyAgICAgICAgY2FzZSBGNjQ6OkFDb3M6CisgICAgICAg
IGNhc2UgRjY0OjpBU2luOgorICAgICAgICBjYXNlIEY2NDo6QVRhbjoKKyAgICAgICAgY2FzZSBG
NjQ6OkV4cDoKKyAgICAgICAgY2FzZSBGNjQ6OkxuOgorICAgICAgICAgICAgcGFyc2VVbmFyeU9w
KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGY2NCksIFJldHVyblR5cGU6OkY2NCwgZHN0KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2NDo6QWRkOgorICAgICAgICBjYXNlIEY2NDo6
U3ViOgorICAgICAgICBjYXNlIEY2NDo6TXVsOgorICAgICAgICBjYXNlIEY2NDo6RGl2OgorICAg
ICAgICBjYXNlIEY2NDo6QVRhbjI6CisgICAgICAgIGNhc2UgRjY0OjpQb3c6CisgICAgICAgICAg
ICBwYXJzZUJpbmFyeU9wKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGY2NCksIFJldHVyblR5cGU6OkY2
NCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2NDo6TW9kOgorICAg
ICAgICBjYXNlIEY2NDo6TWluOgorICAgICAgICBjYXNlIEY2NDo6TWF4OgorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIHN3aXRjaCAoZjY0V2l0aEltbSkgeworICAgICAgICBj
YXNlIEY2NFdpdGhJbW06OkxpdFBvb2w6CisgICAgICAgICAgICBzdG9yZTY0KFRydXN0ZWRJbW02
NChyZWludGVycHJldERvdWJsZVRvSW50NjQobV9tb2R1bGUtPm1fY29uc3RhbnRGNjRzW2ltbV0p
KSwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEY2NFdpdGhJbW06OkdldExvYzoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBsb2FkRG91Ymxl
L3N0b3JlRG91YmxlPworICAgICAgICAgICAgbG9hZDY0KHN0YWNrQWRkcmVzcyhpbW0pLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgICAgICAgICBzdG9yZTY0KEdQUkluZm86OnJlZ1QwLCB0ZW1wb3Jh
cnlBZGRyZXNzKGRzdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUV4cHJWb2lkKGludCBkc3QpCit7CisgICAg
c3dpdGNoIChtX21vZHVsZS0+bV9yZWFkZXIudm9pZEV4cHIoKSkgeworICAgIGNhc2UgVm9pZDo6
Q2FsbEludDoKKyAgICAgICAgcGFyc2VDYWxsSW50ZXJuYWwoUmV0dXJuVHlwZTo6Vm9pZCwgZHN0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWb2lkOjpDYWxsSW5kOgorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIGNhc2UgVm9pZDo6Q2FsbEltcDoKKyAgICAg
ICAgcGFyc2VDYWxsSW1wb3J0KFJldHVyblR5cGU6OlZvaWQsIGRzdCk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZXRJbnRlcm5h
bEZ1bmN0aW9uKEV4ZWNTdGF0ZSosIE1vZHVsZSogbW9kdWxlLCB1aW50MzJfdCBmdW5jdGlvbklu
ZGV4KQoreworICAgIC8vIFRPRE86IFVzZSB0aGVzZSB0d28gbGluZXM/CisgICAgLy8gVk0qIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICAvLyBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobW9kdWxlLT5mdW5jdGlvbihmdW5j
dGlvbkluZGV4KSk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlQ2FsbEludGVybmFsKFJl
dHVyblR5cGUgcmV0dXJuVHlwZSwgaW50IGRzdCkKK3sKKyAgICB1aW50MzJfdCBmdW5jdGlvbklu
ZGV4ID0gbV9tb2R1bGUtPm1fcmVhZGVyLmltbVUzMigpOworICAgIGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlID0gbV9tb2R1bGUtPm1fc2lnbmF0dXJlc1ttX21vZHVsZS0+bV9mdW5jU2lnbmF0
dXJlc1tmdW5jdGlvbkluZGV4XV07CisgICAgY29uc3QgVmVjdG9yPFR5cGU+JiBhcmd1bWVudHMg
PSBzaWduYXR1cmUuYXJndW1lbnRzOworICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gYXJndW1l
bnRzLnNpemUoKTsKKyAgICAvLyBGSVhNRTogcmV0dXJuVHlwZSBpcyByZWR1bmRhbnQgd2l0aCBz
aWduYXR1cmUucmV0dXJuVHlwZQorCisgICAgcGFyc2VDYWxsQXJndW1lbnRzKGFyZ3VtZW50cywg
ZHN0KTsKKworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGFyZ3VtZW50Q291bnQgKyAxKSwgQWRk
cmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0IC0gc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpKSk7CisKKyAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwpCisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLW1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKG1fbW9kdWxlKSwgVHJ1c3RlZEltbTMyKGZ1bmN0aW9uSW5k
ZXgpKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihnZXRJbnRl
cm5hbEZ1bmN0aW9uKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGNhbGwoR1BSSW5mbzo6
bm9uQXJnR1BSMCk7CisgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQorICAg
ICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgbW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgR1BSSW5mbzo6cmVnVDApOyAvLyByZWdUMCBob2xkcyBjYWxsZWUuCisgICAgc3RvcmU2NChH
UFJJbmZvOjpyZWdUMCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgSlNTdGFjazo6Q2Fs
bGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSAtIHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKSkpOworCisgICAgY2FsbEZ1bmN0aW9uU2xvd0Nhc2UocmV0dXJuVHlwZSwgZHN0
KTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2V0SW1wb3J0ZWRG
dW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIE1vZHVsZSogbW9kdWxlLCB1aW50MzJfdCBmdW5jSW1w
b3J0SW5kZXgpCit7CisgICAgLy8gVE9ETzogVXNlIHRoZXNlIHR3byBsaW5lcz8KKyAgICAvLyBW
TSogdm0gPSBleGVjLT52bSgpOworICAgIC8vIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOworCisgICAgY29uc3QgU3RyaW5nJiBmdW5jdGlvbkltcG9ydE5hbWUgPSBtb2R1
bGUtPmZ1bmN0aW9uSW1wb3J0TmFtZShmdW5jSW1wb3J0SW5kZXgpOworCisgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICBJ
ZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLT52bSgp
LCBmdW5jdGlvbkltcG9ydE5hbWUpOworICAgIFByb3BlcnR5U2xvdCBzbG90KGdsb2JhbE9iamVj
dCk7CisKKyAgICBpZiAoIWdsb2JhbE9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50
aWZpZXIsIHNsb3QpKSB7CisgICAgICAgIC8vIFRPRE86IERvIHNvbWV0aGluZyEKKyAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJDYW4ndCBmaW5kIGEgZnVuY3Rpb24gbmFtZWQgXCIlc1wiLlxuIiwg
ZnVuY3Rpb25JbXBvcnROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBhYm9ydCgpOworICAg
IH0KKworICAgIEpTVmFsdWUgdmFsdWUgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50aWZpZXIp
OworICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiXCIlc1wiIGlzIG5vdCBhIGZ1bmN0aW9uLlxuIiwgZnVuY3Rpb25JbXBvcnROYW1lLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICBhYm9ydCgpOworICAgIH0KKworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodmFsdWUpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUNhbGxJbXBvcnQo
UmV0dXJuVHlwZSByZXR1cm5UeXBlLCBpbnQgZHN0KQoreworICAgIHVpbnQzMl90IGZ1bmNJbXBv
cnRTaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlLT5tX3JlYWRlci5pbW1VMzIoKTsKKyAgICBjb25z
dCBNb2R1bGU6OkZ1bmNJbXBvcnRTaWduYXR1cmUmIGZ1bmNJbXBvcnRTaWduYXR1cmUgPSBtX21v
ZHVsZS0+bV9mdW5jSW1wb3J0U2lnbmF0dXJlc1tmdW5jSW1wb3J0U2lnbmF0dXJlSW5kZXhdOwor
ICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gbV9tb2R1bGUtPm1fc2lnbmF0dXJlc1tm
dW5jSW1wb3J0U2lnbmF0dXJlLnNpZ25hdHVyZUluZGV4XTsKKyAgICBjb25zdCBWZWN0b3I8VHlw
ZT4mIGFyZ3VtZW50cyA9IHNpZ25hdHVyZS5hcmd1bWVudHM7CisgICAgc2l6ZV90IGFyZ3VtZW50
Q291bnQgPSBhcmd1bWVudHMuc2l6ZSgpOworICAgIC8vIEZJWE1FOiByZXR1cm5UeXBlIGlzIHJl
ZHVuZGFudCB3aXRoIHNpZ25hdHVyZS5yZXR1cm5UeXBlCisKKyAgICBwYXJzZUNhbGxBcmd1bWVu
dHMoYXJndW1lbnRzLCBkc3QpOworCisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoYXJndW1lbnRD
b3VudCArIDEpLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBKU1N0YWNrOjpBcmd1bWVu
dENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZz
ZXQgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKworICAgIGlmIChtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbCkKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtbWF4RnJhbWVF
eHRlbnRGb3JTbG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIobV9tb2R1bGUpLCBUcnVzdGVkSW1t
MzIoZnVuY0ltcG9ydFNpZ25hdHVyZS5mdW5jSW1wb3J0SW5kZXgpKTsKKyAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihnZXRJbXBvcnRlZEZ1bmN0aW9uKSksIEdQUklu
Zm86Om5vbkFyZ0dQUjApOworICAgIGNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgaWYg
KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQorICAgICAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OworCisgICAgbW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDApOyAv
LyByZWdUMCBob2xkcyBjYWxsZWUuCisgICAgc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQWRkcmVz
cyhzdGFja1BvaW50ZXJSZWdpc3RlciwgSlNTdGFjazo6Q2FsbGVlICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOworCisgICAg
Y2FsbEZ1bmN0aW9uU2xvd0Nhc2UocmV0dXJuVHlwZSwgZHN0KTsKK30KKwordm9pZCBKSVRDb21w
aWxlcjo6Y2FsbEZ1bmN0aW9uU2xvd0Nhc2UoUmV0dXJuVHlwZSByZXR1cm5UeXBlLCBpbnQgZHN0
KQoreworICAgIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvciA9IGxpbmtUaHVua0dlbmVyYXRvckZv
cihDb2RlRm9yQ2FsbCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CisKKyAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEdQUkluZm86OnJlZ1QyKTsgLy8gVE9ETzogVXNl
IENhbGxMaW5rSW5mbworCisgICAgQ29kZVB0ciBwdHIgPSBtX3ZtLT5nZXRDVElTdHViKGdlbmVy
YXRvcikuY29kZSgpOworCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKHB0ci5leGVjdXRhYmxlQWRk
cmVzcygpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisKKyAgICBjYWxsKEdQUkluZm86Om5vbkFy
Z0dQUjApOworCisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtbV9zdGFja0hlaWdodCksIEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7IC8vIEZJWE1FOiBo
YWNreQorCisgICAgLy8gRklYTUU6IENhbiB3ZSByZWFsbHkgdXNlIHJldHVyblZhbHVlR1BSPwor
ICAgIHN3aXRjaCAocmV0dXJuVHlwZSkgeworICAgIGNhc2UgUmV0dXJuVHlwZTo6STMyOgorICAg
ICAgICBzdG9yZTMyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCB0ZW1wb3JhcnlBZGRyZXNzKGRz
dCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJldHVyblR5cGU6OkY2NDoKKyAgICAgICAg
dW5ib3hEb3VibGVXaXRob3V0QXNzZXJ0aW9ucyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBS
SW5mbzo6ZnBSZWdUMCk7CisgICAgICAgIHN0b3JlRG91YmxlKEZQUkluZm86OmZwUmVnVDAsIHRl
bXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmV0dXJuVHlw
ZTo6Vm9pZDoKKyAgICAgICAgYnJlYWs7IC8vIFRPRE86IFN1cmU/CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVENvbXBpbGVy
OjpwYXJzZUNhbGxBcmd1bWVudHMoY29uc3QgVmVjdG9yPFR5cGU+JiBhcmd1bWVudHMsIGludCBk
c3QpCit7CisgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBhcmd1bWVudHMuc2l6ZSgpOworICAg
IHNpemVfdCBvZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRS
ZWdpc3RlcnMoKSwgZHN0ICsgYXJndW1lbnRDb3VudCArIG1fY3VycmVudExvY2FsVHlwZXMuc2l6
ZSgpKSAtIG1fY3VycmVudExvY2FsVHlwZXMuc2l6ZSgpOyAvLyBGSVhNRTogQmV0dGVyIG5hbWUK
KworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKSB7CisgICAg
ICAgIHN3aXRjaCAoYXJndW1lbnRzW2ldKSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAg
ICAgICAgICAgcGFyc2VFeHByKFJldHVyblR5cGU6OkkzMiwgb2Zmc2V0KTsKKyAgICAgICAgICAg
IGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKG9mZnNldCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAg
ICAgICAgIG9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgICAgICAgICBzdG9yZTY0KEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNz
KG9mZnNldCAtIGkgLSAxKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBl
OjpGNjQ6CisgICAgICAgICAgICBwYXJzZUV4cHIoUmV0dXJuVHlwZTo6RjY0LCBvZmZzZXQpOwor
ICAgICAgICAgICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKG9mZnNldCksIEZQUkluZm86
OmZwUmVnVDApOworICAgICAgICAgICAgYm94RG91YmxlKEZQUkluZm86OmZwUmVnVDAsIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFy
eUFkZHJlc3Mob2Zmc2V0IC0gaSAtIDEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSkpLCB0ZW1wb3JhcnlBZGRyZXNzKG9mZnNldCkpOworCisgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMigtKG9mZnNldCArIG1fY3VycmVudExvY2FsVHlwZXMuc2l6ZSgpICsgMykgKiA4IC0gOCks
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7IC8vIEZJ
WE1FOiBoYWNreQorfQorCit2b2lkIEpJVENvbXBpbGVyOjpjYWxsRG91YmxlRnVuY3Rpb24oZG91
YmxlICgqZnVuY3Rpb24pKGRvdWJsZSksIEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBk
c3QpCit7CisgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQorICAgICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKC1tYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKyAgICBzZXR1cEFyZ3VtZW50cyhzcmMpOworICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uKSksIEdQUkluZm86Om5vbkFy
Z0dQUjApOworICAgIGNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgaWYgKG1heEZyYW1l
RXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQorICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZy
YW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAg
Ly8gRklYTUU6IG9ubHkgd29ya3Mgb24geDg2CisgICAgbW92ZURvdWJsZShGUFJJbmZvOjpyZXR1
cm5WYWx1ZUZQUiwgZHN0KTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6Y2FsbERvdWJsZUZ1bmN0
aW9uKGRvdWJsZSAoKmZ1bmN0aW9uKShkb3VibGUsIGRvdWJsZSksIEZQUmVnaXN0ZXJJRCBzcmMx
LCBGUFJlZ2lzdGVySUQgc3JjMiwgRlBSZWdpc3RlcklEIGRzdCkKK3sKKyAgICBpZiAobWF4RnJh
bWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLW1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAg
IHNldHVwQXJndW1lbnRzKHNyYzEsIHNyYzIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihiaXR3
aXNlX2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGNh
bGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKQorICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gRklYTUU6IG9ubHkg
d29ya3Mgb24geDg2CisgICAgbW92ZURvdWJsZShGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgZHN0
KTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VVbmFyeU9wKHVpbnQ4X3Qgb3AsIFJldHVy
blR5cGUgcmV0dXJuVHlwZSwgaW50IGRzdCkKK3sKKyAgICBwYXJzZUV4cHIocmV0dXJuVHlwZSwg
ZHN0KTsKKyAgICBzd2l0Y2ggKHJldHVyblR5cGUpIHsKKyAgICBjYXNlIFJldHVyblR5cGU6Okkz
MjoKKyAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoZHN0KSwgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PEkzMj4ob3ApKSB7CisgICAgICAgIGNhc2Ug
STMyOjpOZWc6CisgICAgICAgICAgICBuZWczMihHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkJpdE5vdDoKKyAgICAgICAgICAgIHhvcjMyKFRy
dXN0ZWRJbW0zMigtMSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEkzMjo6Q2x6OgorICAgICAgICAgICAgY291bnRMZWFkaW5nWmVyb3MzMihHUFJJ
bmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgSTMyOjpBYnM6IHsKKyAgICAgICAgICAgIEp1bXAgZW5kID0gYnJhbmNoVGVzdDMyKFBv
c2l0aXZlT3JaZXJvLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBuZWczMihHUFJJbmZv
OjpyZWdUMCk7CisgICAgICAgICAgICBlbmQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1w
b3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJldHVyblR5cGU6
OkY2NDoKKyAgICAgICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKGRzdCksIEZQUkluZm86
OmZwUmVnVDApOworICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PEY2ND4ob3ApKSB7CisgICAg
ICAgIGNhc2UgRjY0OjpOZWc6CisgICAgICAgICAgICBuZWdhdGVEb3VibGUoRlBSSW5mbzo6ZnBS
ZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBGNjQ6OkFiczoKKyAgICAgICAgICAgIGFic0RvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJ
bmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2NDo6Q2Vp
bDoKKyAgICAgICAgICAgIGNhbGxEb3VibGVGdW5jdGlvbihjZWlsLCBGUFJJbmZvOjpmcFJlZ1Qw
LCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2
NDo6Rmxvb3I6CisgICAgICAgICAgICBjYWxsRG91YmxlRnVuY3Rpb24oZmxvb3IsIEZQUkluZm86
OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRjY0OjpTcXJ0OgorICAgICAgICAgICAgc3FydERvdWJsZShGUFJJbmZvOjpmcFJlZ1Qw
LCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2
NDo6Q29zOgorICAgICAgICAgICAgY2FsbERvdWJsZUZ1bmN0aW9uKGNvcywgRlBSSW5mbzo6ZnBS
ZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBGNjQ6OlNpbjoKKyAgICAgICAgICAgIGNhbGxEb3VibGVGdW5jdGlvbihzaW4sIEZQUkluZm86
OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRjY0OjpUYW46CisgICAgICAgICAgICBjYWxsRG91YmxlRnVuY3Rpb24odGFuLCBGUFJJ
bmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEY2NDo6QUNvczoKKyAgICAgICAgICAgIGNhbGxEb3VibGVGdW5jdGlvbihhY29z
LCBGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEY2NDo6QVNpbjoKKyAgICAgICAgICAgIGNhbGxEb3VibGVGdW5jdGlv
bihhc2luLCBGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEY2NDo6QVRhbjoKKyAgICAgICAgICAgIGNhbGxEb3VibGVG
dW5jdGlvbihhdGFuLCBGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2NDo6RXhwOgorICAgICAgICAgICAgY2FsbERv
dWJsZUZ1bmN0aW9uKGV4cCwgRlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGNjQ6OkxuOgorICAgICAgICAgICAgY2Fs
bERvdWJsZUZ1bmN0aW9uKGxvZywgRlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIHN0b3JlRG91YmxlKEZQUkluZm86
OmZwUmVnVDEsIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQor
Cit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUJpbmFyeU9wKHVpbnQ4X3Qgb3AsIFJldHVyblR5cGUg
cmV0dXJuVHlwZSwgaW50IGRzdCkKK3sKKyAgICBwYXJzZUV4cHIocmV0dXJuVHlwZSwgZHN0KTsK
KyAgICBwYXJzZUV4cHIocmV0dXJuVHlwZSwgZHN0ICsgMSk7CisgICAgc3dpdGNoIChyZXR1cm5U
eXBlKSB7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpJMzI6CisgICAgICAgIGxvYWQzMih0ZW1wb3Jh
cnlBZGRyZXNzKGRzdCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKHRlbXBvcmFy
eUFkZHJlc3MoZHN0ICsgMSksIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgc3dpdGNoIChzdGF0
aWNfY2FzdDxJMzI+KG9wKSkgeworICAgICAgICBjYXNlIEkzMjo6QWRkOgorICAgICAgICAgICAg
YWRkMzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEkzMjo6U3ViOgorICAgICAgICAgICAgc3ViMzIoR1BSSW5mbzo6cmVn
VDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkz
Mjo6TXVsOgorICAgICAgICAgICAgbXVsMzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6U0RpdjoKKyAgICAgICAg
ICAgIG1vdmUoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmNkcSgpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuaWRpdmxfcihHUFJJbmZv
OjpyZWdUMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlNNb2Q6Cisg
ICAgICAgICAgICBtb3ZlKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5jZHEoKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmlkaXZsX3Io
R1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgbW92ZShHUFJJbmZvOjpyZWdUMSwgR1BSSW5m
bzo6cmVnVDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpCaXRPcjoK
KyAgICAgICAgICAgIG9yMzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6Qml0QW5kOgorICAgICAgICAgICAgYW5k
MzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEkzMjo6Qml0WG9yOgorICAgICAgICAgICAgeG9yMzIoR1BSSW5mbzo6cmVn
VDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkz
Mjo6THNoOgorICAgICAgICAgICAgbHNoaWZ0MzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJl
Z1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6QXJpdGhSc2g6Cisg
ICAgICAgICAgICByc2hpZnQzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpMb2dpY1JzaDoKKyAgICAgICAgICAg
IHVyc2hpZnQzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgfQorICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlB
ZGRyZXNzKGRzdCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJldHVyblR5cGU6OkY2NDoK
KyAgICAgICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKGRzdCksIEZQUkluZm86OmZwUmVn
VDApOworICAgICAgICBsb2FkRG91YmxlKHRlbXBvcmFyeUFkZHJlc3MoZHN0ICsgMSksIEZQUklu
Zm86OmZwUmVnVDEpOworICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PEY2ND4ob3ApKSB7Cisg
ICAgICAgIGNhc2UgRjY0OjpBZGQ6CisgICAgICAgICAgICBhZGREb3VibGUoRlBSSW5mbzo6ZnBS
ZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBGNjQ6OlN1YjoKKyAgICAgICAgICAgIHN1YkRvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJ
bmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2NDo6TXVs
OgorICAgICAgICAgICAgbXVsRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVn
VDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRjY0OjpEaXY6CisgICAgICAg
ICAgICBkaXZEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGNjQ6OkFUYW4yOgorICAgICAgICAgICAgY2Fs
bERvdWJsZUZ1bmN0aW9uKGF0YW4yLCBGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1Qx
LCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2
NDo6UG93OgorICAgICAgICAgICAgY2FsbERvdWJsZUZ1bmN0aW9uKHBvdywgRlBSSW5mbzo6ZnBS
ZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICB9CisgICAgICAgIHN0b3JlRG91YmxlKEZQUkluZm86OmZwUmVnVDAsIHRlbXBv
cmFyeUFkZHJlc3MoZHN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVENvbXBp
bGVyOjpwYXJzZVJlbGF0aW9uYWxPcEkzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwg
aW50IGRzdCkKK3sKKyAgICBwYXJzZUV4cHIoUmV0dXJuVHlwZTo6STMyLCBkc3QpOworICAgIHBh
cnNlRXhwcihSZXR1cm5UeXBlOjpJMzIsIGRzdCArIDEpOworICAgIGxvYWQzMih0ZW1wb3JhcnlB
ZGRyZXNzKGRzdCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVz
cyhkc3QgKyAxKSwgR1BSSW5mbzo6cmVnVDEpOworICAgIGNvbXBhcmUzMihjb25kaXRpb24sIEdQ
UkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAgIHN0b3Jl
MzIoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7Cit9CisKK3ZvaWQgSklU
Q29tcGlsZXI6OnBhcnNlUmVsYXRpb25hbE9wRjY0KERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24s
IGludCBkc3QpCit7CisgICAgcGFyc2VFeHByKFJldHVyblR5cGU6OkY2NCwgZHN0KTsKKyAgICBw
YXJzZUV4cHIoUmV0dXJuVHlwZTo6RjY0LCBkc3QgKyAxKTsKKyAgICBsb2FkRG91YmxlKHRlbXBv
cmFyeUFkZHJlc3MoZHN0KSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgbG9hZERvdWJsZSh0ZW1w
b3JhcnlBZGRyZXNzKGRzdCArIDEpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICBKdW1wIHRydWVD
YXNlID0gYnJhbmNoRG91YmxlKGNvbmRpdGlvbiwgRlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6
ZnBSZWdUMSk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIHRlbXBvcmFyeUFkZHJlc3Mo
ZHN0KSk7CisgICAgSnVtcCBlbmQgPSBqdW1wKCk7CisgICAgdHJ1ZUNhc2UubGluayh0aGlzKTsK
KyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigxKSwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAg
ICBlbmQubGluayh0aGlzKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VDb21tYShSZXR1
cm5UeXBlIHJldHVyblR5cGUsIGludCBkc3QpCit7CisgICAgcGFyc2VFeHByKG1fbW9kdWxlLT5t
X3JlYWRlci5yZXR1cm5UeXBlKCksIGRzdCk7CisgICAgcGFyc2VFeHByKHJldHVyblR5cGUsIGRz
dCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlQ29uZChSZXR1cm5UeXBlIHJldHVyblR5
cGUsIGludCBkc3QpCit7CisgICAgcGFyc2VFeHByKFJldHVyblR5cGU6OkkzMiwgZHN0KTsKKyAg
ICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgSnVt
cCBlbHMgPSBicmFuY2hUZXN0MzIoWmVybywgR1BSSW5mbzo6cmVnVDApOworICAgIHBhcnNlRXhw
cihyZXR1cm5UeXBlLCBkc3QpOworICAgIEp1bXAgZW5kID0ganVtcCgpOworICAgIGVscy5saW5r
KHRoaXMpOworICAgIHBhcnNlRXhwcihyZXR1cm5UeXBlLCBkc3QpOworICAgIGVuZC5saW5rKHRo
aXMpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZU1pbk1heEkzMihSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmRpdGlvbiwgaW50IGRzdCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZkFyZ3Vt
ZW50cyA9IG1fbW9kdWxlLT5tX3JlYWRlci5pbW1VMzIoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChu
dW1iZXJPZkFyZ3VtZW50cyA+PSAxKTsKKyAgICBwYXJzZUV4cHIoUmV0dXJuVHlwZTo6STMyLCBk
c3QpOworICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKGRzdCksIEdQUkluZm86OnJlZ1QwKTsK
KyAgICBmb3IgKHVpbnQzMl90IGkgPSAxOyBpIDwgbnVtYmVyT2ZBcmd1bWVudHM7ICsraSkgewor
ICAgICAgICBwYXJzZUV4cHIoUmV0dXJuVHlwZTo6STMyLCBkc3QpOworICAgICAgICBsb2FkMzIo
dGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIEp1bXAgZW5k
ID0gYnJhbmNoMzIoY29uZGl0aW9uLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEpOwor
ICAgICAgICBtb3ZlKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGVu
ZC5saW5rKHRoaXMpOworICAgIH0KKyAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1wb3Jh
cnlBZGRyZXNzKGRzdCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUpJVENvbXBpbGVyLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSklUQ29tcGlsZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNTNi
MzY5ZTZmNjk5MGE2YjBiY2QwNjA4NDAxODZhNTM0OTQ0OTgwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUpJVENvbXBpbGVyLmgKQEAgLTAsMCArMSwx
NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgor
IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGlj
ZW5zZSIpOworIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ug
d2l0aCB0aGUgTGljZW5zZS4KKyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2Ug
YXQKKworIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgVW5s
ZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBz
b2Z0d2FyZQorIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9u
IGFuICJBUyBJUyIgQkFTSVMsCisgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0Yg
QU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgU2VlIHRoZSBMaWNlbnNlIGZv
ciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIGxpbWl0
YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKworI2lmbmRlZiBXYXNtSklUQ29tcGlsZXJf
aAorI2RlZmluZSBXYXNtSklUQ29tcGlsZXJfaAorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgi
CisjaW5jbHVkZSAiV2FzbU1vZHVsZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgRXhl
Y1N0YXRlOworY2xhc3MgSklUQ29kZTsKK2NsYXNzIFZNOworCituYW1lc3BhY2UgV2FzbSB7CisK
K2NsYXNzIEp1bXBTY29wZTsKK2VudW0gY2xhc3MgTGluZWFyTWVtb3J5VHlwZSA6IHVuc2lnbmVk
OworCitjbGFzcyBKSVRDb21waWxlciA6IHByaXZhdGUgQ0NhbGxIZWxwZXJzIHsKK3B1YmxpYzoK
KyAgICBKSVRDb21waWxlcihWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBNb2R1bGUqIG1v
ZHVsZSkKKyAgICAgICAgOiBDQ2FsbEhlbHBlcnModm0sIGNvZGVCbG9jaykKKyAgICAgICAgLCBt
X21vZHVsZShtb2R1bGUpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxKSVRDb2RlPiBjb21w
aWxlRnVuY3Rpb24oVk0mLCBzaXplX3QgZnVuY3Rpb25JbmRleCk7CisKK3ByaXZhdGU6CisgICAg
dm9pZCBhbGxvY2F0ZVNwYWNlT25TdGFjaygpOworICAgIHZvaWQgZGVhbGxvY2F0ZVNwYWNlT25T
dGFjaygpOworCisgICAgdm9pZCBwYXJzZUFyZ3VtZW50cyhjb25zdCBTaWduYXR1cmUmKTsKKyAg
ICB2b2lkIHBhcnNlVmFycygpOworCisgICAgdm9pZCBwYXJzZVN0bXQoKTsKKyAgICB2b2lkIHBh
cnNlR2V0TG9jYWwoaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZVNldExvY2FsKHVpbnQzMl90IGlt
bSwgaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZVNldExvY2FsKGludCBkc3QpOworICAgIHZvaWQg
cGFyc2VBcnJheUJ1ZmZlck9mZnNldChib29sIGhhc09mZnNldCwgaW50IGRzdCk7CisgICAgdm9p
ZCBwYXJzZUxvYWQoUmV0dXJuVHlwZSwgTGluZWFyTWVtb3J5VHlwZSwgYm9vbCBoYXNPZmZzZXQs
IGludCBkc3QpOworICAgIHZvaWQgcGFyc2VTdG9yZShSZXR1cm5UeXBlLCBMaW5lYXJNZW1vcnlU
eXBlLCBib29sIGhhc09mZnNldCwgaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZVJldHVyblN0bXQo
KTsKKyAgICB2b2lkIHBhcnNlQmxvY2tTdG10KCk7CisgICAgdm9pZCBwYXJzZVN0bXRMaXN0KCk7
CisgICAgdm9pZCBwYXJzZUlmU3RtdCgpOworICAgIHZvaWQgcGFyc2VJZkVsc2VTdG10KCk7Cisg
ICAgdm9pZCBwYXJzZVdoaWxlU3RtdCgpOworICAgIHZvaWQgcGFyc2VEb1N0bXQoKTsKKyAgICB2
b2lkIHBhcnNlTGFiZWxTdG10KCk7CisgICAgdm9pZCBwYXJzZUJyZWFrU3RtdCgpOworICAgIHZv
aWQgcGFyc2VCcmVha0xhYmVsU3RtdCgpOworICAgIHZvaWQgcGFyc2VDb250aW51ZVN0bXQoKTsK
KyAgICB2b2lkIHBhcnNlQ29udGludWVMYWJlbFN0bXQoKTsKKyAgICB2b2lkIHBhcnNlU3dpdGNo
U3RtdCgpOworCisgICAgdm9pZCBwYXJzZUV4cHIoUmV0dXJuVHlwZSwgaW50IGRzdCk7CisgICAg
dm9pZCBwYXJzZUV4cHJJMzIoaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZUV4cHJGNjQoaW50IGRz
dCk7CisgICAgdm9pZCBwYXJzZUV4cHJWb2lkKGludCBkc3QpOworICAgIHZvaWQgcGFyc2VDYWxs
SW50ZXJuYWwoUmV0dXJuVHlwZSwgaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZUNhbGxJbXBvcnQo
UmV0dXJuVHlwZSwgaW50IGRzdCk7CisgICAgdm9pZCBjYWxsRnVuY3Rpb25TbG93Q2FzZShSZXR1
cm5UeXBlLCBpbnQgZHN0KTsKKyAgICB2b2lkIHBhcnNlQ2FsbEFyZ3VtZW50cyhjb25zdCBWZWN0
b3I8VHlwZT4mIGFyZ3VtZW50cywgaW50IGRzdCk7CisgICAgdm9pZCBjYWxsRG91YmxlRnVuY3Rp
b24oZG91YmxlICgqZnVuY3Rpb24pKGRvdWJsZSksIEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0
ZXJJRCBkc3QpOworICAgIHZvaWQgY2FsbERvdWJsZUZ1bmN0aW9uKGRvdWJsZSAoKmZ1bmN0aW9u
KShkb3VibGUsIGRvdWJsZSksIEZQUmVnaXN0ZXJJRCBzcmMxLCBGUFJlZ2lzdGVySUQgc3JjMiwg
RlBSZWdpc3RlcklEIGRzdCk7CisgICAgdm9pZCBwYXJzZVVuYXJ5T3AodWludDhfdCBvcCwgUmV0
dXJuVHlwZSwgaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZUJpbmFyeU9wKHVpbnQ4X3Qgb3AsIFJl
dHVyblR5cGUsIGludCBkc3QpOworICAgIHZvaWQgcGFyc2VSZWxhdGlvbmFsT3BJMzIoUmVsYXRp
b25hbENvbmRpdGlvbiwgaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZVJlbGF0aW9uYWxPcEY2NChE
b3VibGVDb25kaXRpb24sIGludCBkc3QpOworICAgIHZvaWQgcGFyc2VDb21tYShSZXR1cm5UeXBl
LCBpbnQgZHN0KTsKKyAgICB2b2lkIHBhcnNlQ29uZChSZXR1cm5UeXBlLCBpbnQgZHN0KTsKKyAg
ICB2b2lkIHBhcnNlTWluTWF4STMyKFJlbGF0aW9uYWxDb25kaXRpb24sIGludCBkc3QpOworCisg
ICAgQWRkcmVzcyBzdGFja0FkZHJlc3MoaW50IGkpIGNvbnN0IC8vIEZJWE1FOiBJcyB0aGlzIGNv
cnJlY3Q/CisgICAgeworICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgLWkgKiA4IC0gOCk7CisgICAgfQorCisgICAgQWRkcmVzcyB0ZW1wb3JhcnlBZGRy
ZXNzKGludCBpKSBjb25zdCAvLyBGSVhNRTogSXMgdGhpcyBjb3JyZWN0PworICAgIHsKKyAgICAg
ICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIC0oaSArIG1fY3Vy
cmVudExvY2FsVHlwZXMuc2l6ZSgpKSAqIDggLSA4KTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2hD
b250aW51ZUxhYmVsTGFiZWwoTGFiZWwqIGxhYmVsKSB7IG1fY29udGludWVMYWJlbExhYmVscy5h
cHBlbmQobGFiZWwpOyB9CisgICAgdm9pZCBwb3BDb250aW51ZUxhYmVsTGFiZWwoKSB7IG1fY29u
dGludWVMYWJlbExhYmVscy5yZW1vdmVMYXN0KCk7IH0KKyAgICBMYWJlbCogY29udGludWVMYWJl
bExhYmVsKHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX2NvbnRpbnVlTGFiZWxMYWJlbHNbaV07
IH0KKyAgICB2b2lkIHB1c2hCcmVha0xhYmVsSnVtcExpc3QoSnVtcExpc3QqIGp1bXBMaXN0KSB7
IG1fYnJlYWtMYWJlbEp1bXBMaXN0cy5hcHBlbmQoanVtcExpc3QpOyB9CisgICAgdm9pZCBwb3BC
cmVha0xhYmVsSnVtcExpc3QoKSB7IG1fYnJlYWtMYWJlbEp1bXBMaXN0cy5yZW1vdmVMYXN0KCk7
IH0KKyAgICBKdW1wTGlzdCogYnJlYWtMYWJlbEp1bXBMaXN0KHNpemVfdCBpKSBjb25zdCB7IHJl
dHVybiBtX2JyZWFrTGFiZWxKdW1wTGlzdHNbaV07IH0KKworICAgIHZvaWQgcHVzaENvbnRpbnVl
SnVtcFNjb3BlKEp1bXBTY29wZSoganVtcFNjb3BlKSB7IG1fY29udGludWVKdW1wU2NvcGVzLmFw
cGVuZChqdW1wU2NvcGUpOyB9CisgICAgdm9pZCBwb3BDb250aW51ZUp1bXBTY29wZSgpIHsgbV9j
b250aW51ZUp1bXBTY29wZXMucmVtb3ZlTGFzdCgpOyB9CisgICAgSnVtcFNjb3BlKiB0b3BDb250
aW51ZUp1bXBTY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGludWVKdW1wU2NvcGVzLmxhc3Qo
KTsgfQorCisgICAgdm9pZCBwdXNoQnJlYWtKdW1wTGlzdChKdW1wTGlzdCoganVtcExpc3QpIHsg
bV9icmVha0p1bXBMaXN0cy5hcHBlbmQoanVtcExpc3QpOyB9CisgICAgdm9pZCBwb3BCcmVha0p1
bXBMaXN0KCkgeyBtX2JyZWFrSnVtcExpc3RzLnJlbW92ZUxhc3QoKTsgfQorICAgIEp1bXBMaXN0
KiB0b3BCcmVha0p1bXBMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9icmVha0p1bXBMaXN0cy5sYXN0
KCk7IH0KKworICAgIE1vZHVsZSogbV9tb2R1bGU7CisKKyAgICB1aW50MzJfdCBtX3N0YWNrSGVp
Z2h0OyAvLyBGSVhNRTogVGhpcyBjYXVzZWQgYSAnc2VnbWVudGF0aW9uIGZhdWx0JyBoZWlzZW5i
dWcgd2hlbiBJIGFkZGVkICJzaXplX3QgbV9zdGFja0hlaWdodCIuIFNvbWV0aGluZyBtdXN0IGJl
IHdyb25nLgorCisgICAgUmV0dXJuVHlwZSBtX2N1cnJlbnRSZXR1cm5UeXBlOworICAgIFZlY3Rv
cjxUeXBlPiBtX2N1cnJlbnRMb2NhbFR5cGVzOworCisgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCo+IG1fY29udGludWVMYWJlbExhYmVsczsKKyAgICBWZWN0b3I8TWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0Kj4gbV9icmVha0xhYmVsSnVtcExpc3RzOworCisgICAgVmVjdG9yPEp1bXBT
Y29wZSo+IG1fY29udGludWVKdW1wU2NvcGVzOworICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QqPiBtX2JyZWFrSnVtcExpc3RzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
Oldhc20KKworI2VuZGlmIC8vIFdhc21KSVRDb21waWxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Nb2R1bGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1YmFmMmI4ZGMzN2UyNTFhOWNiMmZj
ZjhjNDIzNmYzMDZiNTVmOTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTW9kdWxlLmNwcApAQCAtMCwwICsxLDMyNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgTGljZW5zZWQgdW5kZXIgdGhlIEFw
YWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgeW91IG1heSBub3Qg
dXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIFlv
dSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgaHR0cDovL3d3dy5hcGFj
aGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGlj
YWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgZGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyBX
SVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJl
c3Mgb3IgaW1wbGllZC4KKyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFn
ZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vu
c2UuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbU1vZHVsZS5oIgor
CisjaW5jbHVkZSAiSklUQ29kZS5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNs
dWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiUmVqZWN0LmgiCisjaW5jbHVkZSAiU2xv
dFZpc2l0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiV2FzbUpJVENvbXBpbGVyLmgiCisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNw
YWNlIFdhc20geworCitjb25zdCBDbGFzc0luZm8gTW9kdWxlOjpzX2luZm8gPSB7ICJNb2R1bGUi
LCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKE1vZHVsZSkgfTsKKwordm9p
ZCBNb2R1bGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOworCisgICAgbV9yZWFkZXIgPSBSZWFkZXIocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4oYnVmZmVyLmRhdGEoKSkpOworICAgIGlmIChtX3JlYWRlci5maXhlZFdpZHRo
PHVpbnQzMl90PigpICE9IE1hZ2ljTnVtYmVyKQorICAgICAgICBhYm9ydCgpOworICAgIG1fcmVh
ZGVyLmZpeGVkV2lkdGg8dWludDMyX3Q+KCk7IC8vIG91dHB1dCBzaXplIGluIGFzbS5qcyBmb3Jt
YXQKKworICAgIC8vIFRPRE86IE1ha2UgdGhpcyBsZXNzIGhhY2t5CisgICAgUmVmUHRyPEFycmF5
QnVmZmVyPiBhcnJheUJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUoMTAyNCwgMSk7CisgICAg
SlNBcnJheUJ1ZmZlcioganNBcnJheUJ1ZmZlciA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LT5hcnJheUJ1ZmZlclN0cnVjdHVyZSgpLCBhcnJheUJ1ZmZlci5yZWxlYXNl
KCkpOworICAgIG1fYXJyYXlCdWZmZXIuc2V0KHZtLCB0aGlzLCBqc0FycmF5QnVmZmVyKTsKKwor
ICAgIHBhcnNlQ29uc3RhbnRQb29sU2VjdGlvbigpOworICAgIHBhcnNlU2lnbmF0dXJlU2VjdGlv
bigpOworICAgIHBhcnNlRnVuY3Rpb25JbXBvcnRTZWN0aW9uKCk7CisgICAgcGFyc2VHbG9iYWxT
ZWN0aW9uKCk7CisgICAgcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uU2VjdGlvbigpOworICAgIHBh
cnNlRnVuY3Rpb25Qb2ludGVyVGFibGVzKCk7CisgICAgcGFyc2VGdW5jdGlvbkRlZmluaXRpb25T
ZWN0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgIHBhcnNlRXhwb3J0U2VjdGlvbih2bSk7Cit9
CisKK3ZvaWQgTW9kdWxlOjpwYXJzZUNvbnN0YW50UG9vbFNlY3Rpb24oKQoreworICAgIHVpbnQz
Ml90IG51bWJlck9mSTMycyA9IG1fcmVhZGVyLmltbVUzMigpOworICAgIHVpbnQzMl90IG51bWJl
ck9mRjMycyA9IG1fcmVhZGVyLmltbVUzMigpOworICAgIHVpbnQzMl90IG51bWJlck9mRjY0cyA9
IG1fcmVhZGVyLmltbVUzMigpOworCisgICAgVmVjdG9yPHVpbnQzMl90PiBjb25zdGFudEkzMnMo
bnVtYmVyT2ZJMzJzKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZJMzJz
OyArK2kpCisgICAgICAgIGNvbnN0YW50STMyc1tpXSA9IG1fcmVhZGVyLmltbVUzMigpOworCisg
ICAgVmVjdG9yPGZsb2F0PiBjb25zdGFudEYzMnMobnVtYmVyT2ZGMzJzKTsKKyAgICBmb3IgKHVp
bnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGMzJzOyArK2kpCisgICAgICAgIGNvbnN0YW50RjMy
c1tpXSA9IG1fcmVhZGVyLmZpeGVkV2lkdGg8ZmxvYXQ+KCk7CisKKyAgICBWZWN0b3I8ZG91Ymxl
PiBjb25zdGFudEY2NHMobnVtYmVyT2ZGNjRzKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBp
IDwgbnVtYmVyT2ZGNjRzOyArK2kpCisgICAgICAgIGNvbnN0YW50RjY0c1tpXSA9IG1fcmVhZGVy
LmZpeGVkV2lkdGg8ZG91YmxlPigpOworCisgICAgbV9jb25zdGFudEkzMnMgPSBXVEY6Om1vdmUo
Y29uc3RhbnRJMzJzKTsKKyAgICBtX2NvbnN0YW50RjMycyA9IFdURjo6bW92ZShjb25zdGFudEYz
MnMpOworICAgIG1fY29uc3RhbnRGNjRzID0gV1RGOjptb3ZlKGNvbnN0YW50RjY0cyk7Cit9CisK
K3ZvaWQgTW9kdWxlOjpwYXJzZVNpZ25hdHVyZVNlY3Rpb24oKQoreworICAgIHVpbnQzMl90IG51
bWJlck9mU2lnbmF0dXJlcyA9IG1fcmVhZGVyLmltbVUzMigpOworICAgIFZlY3RvcjxTaWduYXR1
cmU+IHNpZ25hdHVyZXMobnVtYmVyT2ZTaWduYXR1cmVzKTsKKyAgICBmb3IgKHVpbnQzMl90IHNp
Z25hdHVyZUluZGV4ID0gMDsgc2lnbmF0dXJlSW5kZXggPCBudW1iZXJPZlNpZ25hdHVyZXM7ICsr
c2lnbmF0dXJlSW5kZXgpIHsKKyAgICAgICAgUmV0dXJuVHlwZSByZXR1cm5UeXBlID0gbV9yZWFk
ZXIucmV0dXJuVHlwZSgpOworICAgICAgICB1aW50MzJfdCBhcmd1bWVudENvdW50ID0gbV9yZWFk
ZXIuaW1tVTMyKCk7CisgICAgICAgIFNpZ25hdHVyZSBzaWduYXR1cmUocmV0dXJuVHlwZSwgYXJn
dW1lbnRDb3VudCk7CisgICAgICAgIGZvciAodWludDMyX3QgYXJndW1lbnRJbmRleCA9IDA7IGFy
Z3VtZW50SW5kZXggPCBhcmd1bWVudENvdW50OyArK2FyZ3VtZW50SW5kZXgpCisgICAgICAgICAg
ICBzaWduYXR1cmUuYXJndW1lbnRzW2FyZ3VtZW50SW5kZXhdID0gbV9yZWFkZXIudHlwZSgpOwor
ICAgICAgICBzaWduYXR1cmVzW3NpZ25hdHVyZUluZGV4XSA9IFdURjo6bW92ZShzaWduYXR1cmUp
OworICAgIH0KKworICAgIG1fc2lnbmF0dXJlcyA9IFdURjo6bW92ZShzaWduYXR1cmVzKTsKK30K
Kwordm9pZCBNb2R1bGU6OnBhcnNlRnVuY3Rpb25JbXBvcnRTZWN0aW9uKCkKK3sKKyAgICB1aW50
MzJfdCBudW1iZXJPZkZ1bmNJbXBvcnRzID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgdWludDMy
X3QgbnVtYmVyT2ZGdW5jSW1wb3J0U2lnbmF0dXJlcyA9IG1fcmVhZGVyLmltbVUzMigpOworCisg
ICAgbV9mdW5jdGlvbkltcG9ydE5hbWVzLnJlc2VydmVDYXBhY2l0eShudW1iZXJPZkZ1bmNJbXBv
cnRzKTsKKworICAgIFZlY3RvcjxGdW5jSW1wb3J0U2lnbmF0dXJlPiBmdW5jSW1wb3J0U2lnbmF0
dXJlcyhudW1iZXJPZkZ1bmNJbXBvcnRTaWduYXR1cmVzKTsKKyAgICBGdW5jSW1wb3J0U2lnbmF0
dXJlKiBmdW5jSW1wb3J0U2lnbmF0dXJlID0gZnVuY0ltcG9ydFNpZ25hdHVyZXMuZGF0YSgpOwor
ICAgIGZvciAodWludDMyX3QgZnVuY0ltcG9ydEluZGV4ID0gMDsgZnVuY0ltcG9ydEluZGV4IDwg
bnVtYmVyT2ZGdW5jSW1wb3J0czsgKytmdW5jSW1wb3J0SW5kZXgpIHsKKyAgICAgICAgU3RyaW5n
QnVpbGRlciBidWlsZGVyOworICAgICAgICB3aGlsZSAoY2hhciBjID0gbV9yZWFkZXIuc2luZ2xl
Q2hhcigpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoYyk7CisgICAgICAgIG1fZnVuY3Rp
b25JbXBvcnROYW1lcy5hcHBlbmQoYnVpbGRlci50b1N0cmluZygpKTsKKworICAgICAgICB1aW50
MzJfdCBudW1iZXJPZlNpZ25hdHVyZXMgPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICAgICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mU2lnbmF0dXJlczsgKytpKSB7CisgICAgICAg
ICAgICBmdW5jSW1wb3J0U2lnbmF0dXJlLT5zaWduYXR1cmVJbmRleCA9IG1fcmVhZGVyLmltbVUz
MigpOworICAgICAgICAgICAgZnVuY0ltcG9ydFNpZ25hdHVyZS0+ZnVuY0ltcG9ydEluZGV4ID0g
ZnVuY0ltcG9ydEluZGV4OworICAgICAgICAgICAgZnVuY0ltcG9ydFNpZ25hdHVyZSsrOworICAg
ICAgICB9CisgICAgfQorICAgIGFzc2VydChmdW5jSW1wb3J0U2lnbmF0dXJlID09IGZ1bmNJbXBv
cnRTaWduYXR1cmVzLmRhdGEoKSArIG51bWJlck9mRnVuY0ltcG9ydFNpZ25hdHVyZXMpOworCisg
ICAgbV9mdW5jSW1wb3J0U2lnbmF0dXJlcyA9IFdURjo6bW92ZShmdW5jSW1wb3J0U2lnbmF0dXJl
cyk7Cit9CisKK3ZvaWQgTW9kdWxlOjpwYXJzZUdsb2JhbFNlY3Rpb24oKQoreworICAgIHVpbnQz
Ml90IG51bWJlck9mSTMyWmVybyA9IG1fcmVhZGVyLmltbVUzMigpOworICAgIHVpbnQzMl90IG51
bWJlck9mRjMyWmVybyA9IG1fcmVhZGVyLmltbVUzMigpOworICAgIHVpbnQzMl90IG51bWJlck9m
RjY0WmVybyA9IG1fcmVhZGVyLmltbVUzMigpOworICAgIHVpbnQzMl90IG51bWJlck9mSTMySW1w
b3J0ID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGMzJJbXBvcnQg
PSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICB1aW50MzJfdCBudW1iZXJPZkY2NEltcG9ydCA9IG1f
cmVhZGVyLmltbVUzMigpOworICAgIHVpbnQzMl90IG51bWJlck9mR2xvYmFsVmFycyA9IG51bWJl
ck9mSTMyWmVybyArIG51bWJlck9mRjMyWmVybyArIG51bWJlck9mRjY0WmVybyArIG51bWJlck9m
STMySW1wb3J0ICsgbnVtYmVyT2ZGMzJJbXBvcnQgKyBudW1iZXJPZkY2NEltcG9ydDsKKworICAg
IFZlY3RvcjxUeXBlPiBnbG9iYWxUeXBlcyhudW1iZXJPZkdsb2JhbFZhcnMpOworICAgIHNpemVf
dCBnbG9iYWxUeXBlSW5kZXggPSAwOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1i
ZXJPZkkzMlplcm87ICsraSkKKyAgICAgICAgZ2xvYmFsVHlwZXNbZ2xvYmFsVHlwZUluZGV4Kytd
ID0gVHlwZTo6STMyOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkYzMlpl
cm87ICsraSkKKyAgICAgICAgZ2xvYmFsVHlwZXNbZ2xvYmFsVHlwZUluZGV4KytdID0gVHlwZTo6
RjMyOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkY2NFplcm87ICsraSkK
KyAgICAgICAgZ2xvYmFsVHlwZXNbZ2xvYmFsVHlwZUluZGV4KytdID0gVHlwZTo6RjY0OworICAg
IGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkkzMkltcG9ydDsgKytpKSB7CisgICAg
ICAgIHdoaWxlIChtX3JlYWRlci5zaW5nbGVDaGFyKCkpIHsgfQorICAgICAgICBnbG9iYWxUeXBl
c1tnbG9iYWxUeXBlSW5kZXgrK10gPSBUeXBlOjpJMzI7CisgICAgfQorICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBudW1iZXJPZkYzMkltcG9ydDsgKytpKSB7CisgICAgICAgIHdoaWxlICht
X3JlYWRlci5zaW5nbGVDaGFyKCkpIHsgfQorICAgICAgICBnbG9iYWxUeXBlc1tnbG9iYWxUeXBl
SW5kZXgrK10gPSBUeXBlOjpGMzI7CisgICAgfQorICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkg
PCBudW1iZXJPZkY2NEltcG9ydDsgKytpKSB7CisgICAgICAgIHdoaWxlIChtX3JlYWRlci5zaW5n
bGVDaGFyKCkpIHsgfQorICAgICAgICBnbG9iYWxUeXBlc1tnbG9iYWxUeXBlSW5kZXgrK10gPSBU
eXBlOjpGNjQ7CisgICAgfQorICAgIG1fZ2xvYmFsVHlwZXMgPSBXVEY6Om1vdmUoZ2xvYmFsVHlw
ZXMpOworfQorCit2b2lkIE1vZHVsZTo6cGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uU2VjdGlvbigp
Cit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jdGlvbnMgPSBtX3JlYWRlci5pbW1VMzIoKTsK
KyAgICBWZWN0b3I8dWludDMyX3Q+IGZ1bmNTaWduYXR1cmVzKG51bWJlck9mRnVuY3Rpb25zKTsK
KyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGdW5jdGlvbnM7ICsraSkKKyAg
ICAgICAgZnVuY1NpZ25hdHVyZXNbaV0gPSBtX3JlYWRlci5pbW1VMzIoKTsKKworICAgIG1fZnVu
Y1NpZ25hdHVyZXMgPSBXVEY6Om1vdmUoZnVuY1NpZ25hdHVyZXMpOworfQorCit2b2lkIE1vZHVs
ZTo6cGFyc2VGdW5jdGlvblBvaW50ZXJUYWJsZXMoKQoreworICAgIHVpbnQzMl90IG51bWJlck9m
RnVuY1B0clRhYmxlcyA9IG1fcmVhZGVyLmltbVUzMigpOworICAgIFZlY3RvcjxGdW5jUHRyVGFi
bGU+IGZ1bmNQdHJUYWJsZXMobnVtYmVyT2ZGdW5jUHRyVGFibGVzKTsKKyAgICBmb3IgKHVpbnQz
Ml90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGdW5jUHRyVGFibGVzOyArK2kpIHsKKyAgICAgICAgZnVu
Y1B0clRhYmxlc1tpXS5zaWduYXR1cmVJbmRleCA9IG1fcmVhZGVyLmltbVUzMigpOworICAgICAg
ICB1aW50MzJfdCBudW1FbGVtZW50cyA9IG1fcmVhZGVyLmltbVUzMigpOworICAgICAgICBWZWN0
b3I8dWludDMyX3Q+IGVsZW1lbnRzKG51bUVsZW1lbnRzKTsKKyAgICAgICAgZm9yICh1aW50MzJf
dCBqID0gMDsgaiA8IG51bUVsZW1lbnRzOyArK2opCisgICAgICAgICAgICBlbGVtZW50c1tqXSA9
IG1fcmVhZGVyLmltbVUzMigpOworICAgICAgICBmdW5jUHRyVGFibGVzW2ldLmVsZW1lbnRzID0g
V1RGOjptb3ZlKGVsZW1lbnRzKTsKKyAgICB9CisKKyAgICBtX2Z1bmNQdHJUYWJsZXMgPSBXVEY6
Om1vdmUoZnVuY1B0clRhYmxlcyk7Cit9CisKK3ZvaWQgTW9kdWxlOjpwYXJzZUZ1bmN0aW9uRGVm
aW5pdGlvblNlY3Rpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorewor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mdW5jU2lnbmF0dXJlcy5zaXplKCk7ICsraSkK
KyAgICAgICAgcGFyc2VGdW5jdGlvbkRlZmluaXRpb24odm0sIGdsb2JhbE9iamVjdCwgaSk7Cit9
CisKK3ZvaWQgTW9kdWxlOjpwYXJzZUV4cG9ydFNlY3Rpb24oVk0mIHZtKQoreworICAgIHN3aXRj
aCAobV9yZWFkZXIuZXhwb3J0Rm9ybWF0KCkpIHsKKyAgICBjYXNlIEV4cG9ydEZvcm1hdDo6RGVm
YXVsdDogeworICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4ID0gbV9yZWFkZXIuaW1tVTMy
KCk7CisgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCAiZGVmYXVsdCIpOyAvLyBUT0RPOiBVc2Ugb3RoZXIgbmFtZXMKKyAgICAgICAgcHV0
RGlyZWN0KHZtLCBpZGVudGlmaWVyLCBtX2Z1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS5nZXQoKSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEV4cG9ydEZvcm1hdDo6UmVjb3JkOiB7
CisgICAgICAgIHVpbnQzMl90IG51bWJlck9mRXhwb3J0cyA9IG1fcmVhZGVyLmltbVUzMigpOwor
ICAgICAgICBmb3IgKHVpbnQzMl90IGV4cG9ydEluZGV4ID0gMDsgZXhwb3J0SW5kZXggPCBudW1i
ZXJPZkV4cG9ydHM7ICsrZXhwb3J0SW5kZXgpIHsKKyAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIg
YnVpbGRlcjsKKyAgICAgICAgICAgIHdoaWxlIChjaGFyIGMgPSBtX3JlYWRlci5zaW5nbGVDaGFy
KCkpCisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoYyk7CisgICAgICAgICAgICB1aW50
MzJfdCBmdW5jdGlvbkluZGV4ID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgICAgICAgICBJZGVu
dGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgYnVpbGRlci50
b1N0cmluZygpKTsKKyAgICAgICAgICAgIHB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwgbV9mdW5j
dGlvbnNbZnVuY3Rpb25JbmRleF0uZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KK30KKwordm9pZCBNb2R1bGU6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgc2l6ZV90IGZ1bmN0aW9uSW5kZXgpCit7
CisgICAgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gV2ViQXNzZW1ibHlFeGVj
dXRhYmxlOjpjcmVhdGUodm0sIFNvdXJjZUNvZGUoKSk7CisgICAgeworICAgICAgICBEZWZlckdD
IGRlZmVyR0Modm0uaGVhcCk7CisgICAgICAgIFJlZlB0cjxXZWJBc3NlbWJseUNvZGVCbG9jaz4g
Y29kZUJsb2NrID0gYWRvcHRSZWYobmV3IFdlYkFzc2VtYmx5Q29kZUJsb2NrKGV4ZWN1dGFibGUs
IGdsb2JhbE9iamVjdCkpOworICAgICAgICBKSVRDb21waWxlciBqaXRDb21waWxlcigmdm0sIGNv
ZGVCbG9jay5nZXQoKSwgdGhpcyk7CisgICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZShqaXRD
b21waWxlci5jb21waWxlRnVuY3Rpb24odm0sIGZ1bmN0aW9uSW5kZXgpKTsKKyAgICAgICAgZXhl
Y3V0YWJsZS0+aW5zdGFsbENvZGUoY29kZUJsb2NrLmdldCgpKTsKKyAgICB9CisKKyAgICBKU0Z1
bmN0aW9uKiBqc0Z1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBleGVjdXRhYmxlLCBn
bG9iYWxPYmplY3QpOworICAgIG1fZnVuY3Rpb25zLmFwcGVuZChXcml0ZUJhcnJpZXI8SlNGdW5j
dGlvbj4odm0sIHRoaXMsIGpzRnVuY3Rpb24pKTsKK30KKworSlNGdW5jdGlvbiogTW9kdWxlOjpm
dW5jdGlvbihzaXplX3QgZnVuY3Rpb25JbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mdW5j
dGlvbnNbZnVuY3Rpb25JbmRleF0uZ2V0KCk7Cit9CisKK2NvbnN0IHZvaWQqIE1vZHVsZTo6YXJy
YXlCdWZmZXJEYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hcnJheUJ1ZmZlci0+aW1wbCgp
LT5kYXRhKCk7Cit9CisKK3ZvaWQgTW9kdWxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgTW9kdWxlKiB0aGlzT2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8TW9kdWxlKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7CisgICAgZm9yIChhdXRvIGZ1bmN0aW9uIDogdGhpc09iamVjdC0+bV9mdW5jdGlvbnMp
CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZmdW5jdGlvbik7CisgICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fYXJyYXlCdWZmZXIpOworfQorCitib29sIE1vZHVsZTo6Z2V0T3duUHJv
cGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIE1vZHVsZSogdGhpc09i
amVjdCA9IGpzQ2FzdDxNb2R1bGUqPihvYmplY3QpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0g
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikgeworICAgICAgICBzbG90LnNldFZhbHVlKHRo
aXNPYmplY3QsIERvbnREZWxldGUgfCBSZWFkT25seSwgdGhpc09iamVjdC0+bV9hcnJheUJ1ZmZl
ci5nZXQoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBCYXNl
OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90
KTsKK30KKwordm9pZCBNb2R1bGU6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90
JiBzbG90KQoreworICAgIE1vZHVsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxNb2R1bGUqPihjZWxs
KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIp
IHsKKyAgICAgICAgcmVqZWN0KGV4ZWMsIHNsb3QuaXNTdHJpY3RNb2RlKCksICJBdHRlbXB0aW5n
IHRvIHdyaXRlIHRvIGEgcmVhZC1vbmx5IGFycmF5IGJ1ZmZlciBwcm9wZXJ0eS4iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKworYm9vbCBNb2R1bGU6OmRlZmluZU93blByb3Bl
cnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3Vs
ZFRocm93KQoreworICAgIE1vZHVsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxNb2R1bGUqPihvYmpl
Y3QpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcg
dG8gZGVmaW5lIHJlYWQtb25seSBhcnJheSBidWZmZXIgcHJvcGVydHkuIik7CisKKyAgICByZXR1
cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK2Jvb2wgTW9kdWxlOjpkZWxldGVQcm9w
ZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkKK3sKKyAgICBNb2R1bGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8TW9kdWxlKj4oY2VsbCk7
CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3Bl
cnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Cit9CisKK3ZvaWQgTW9kdWxlOjpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQorewor
ICAgIE1vZHVsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxNb2R1bGUqPihvYmplY3QpOworICAgIGlm
IChtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkKKyAgICAgICAgYXJyYXkuYWRkKGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpOworICAgIAorICAgIEJhc2U6OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK01v
ZHVsZSogY29tcGlsZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVy
KQoreworICAgIHJldHVybiBNb2R1bGU6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCksIGJ1ZmZlcik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNt
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjBkNTQy
Nzc4Yzc4OTJmNzQ5OGQ4ZWFjMWIzZjg0MzdiNjI3NzUwMAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaApAQCAtMCwwICsxLDEzNSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgTGljZW5z
ZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7
CisgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRo
ZSBMaWNlbnNlLgorIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisg
aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyBVbmxlc3MgcmVx
dWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJl
CisgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFT
IElTIiBCQVNJUywKKyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lO
RCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBz
cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgbGltaXRhdGlvbnMg
dW5kZXIgdGhlIExpY2Vuc2UuCisqLworCisjaWZuZGVmIFdhc21Nb2R1bGVfaAorI2RlZmluZSBX
YXNtTW9kdWxlX2gKKworI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiV2Fz
bU9wY29kZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpJVENvbXBpbGVyOworCitu
YW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIE1vZHVsZSA6IHB1YmxpYyBKU0dsb2JhbE9iamVjdCB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0dsb2JhbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3Zl
cnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKKwor
ICAgIHN0YXRpYyBNb2R1bGUqIGNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyKQorICAgIHsKKyAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCk7IC8vIEZJ
WE1FOiBpcyB0aGlzIHJpZ2h0PworICAgICAgICBNb2R1bGUqIG1vZHVsZSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPE1vZHVsZT4odm0uaGVhcCkpIE1vZHVsZSh2bSwgc3RydWN0dXJlKTsK
KyAgICAgICAgbW9kdWxlLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBidWZmZXIp
OworICAgICAgICByZXR1cm4gbW9kdWxlOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKwor
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwganNOdWxsKCksIFR5cGVJbmZvKEdsb2JhbE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBKU0Z1bmN0aW9uKiBmdW5j
dGlvbihzaXplX3QgZnVuY3Rpb25JbmRleCkgY29uc3Q7CisgICAgY29uc3QgU3RyaW5nJiBmdW5j
dGlvbkltcG9ydE5hbWUoc2l6ZV90IGZ1bmN0aW9uSW1wb3J0SW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fZnVuY3Rpb25JbXBvcnROYW1lc1tmdW5jdGlvbkltcG9ydEluZGV4XTsgfQorICAgIGNvbnN0
IHZvaWQqIGFycmF5QnVmZmVyRGF0YSgpIGNvbnN0OworCisgICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBKSVRDb21waWxlcjsKKworICAgIHN0cnVjdCBGdW5jSW1wb3J0U2lnbmF0dXJlIHsKKyAg
ICAgICAgdWludDMyX3Qgc2lnbmF0dXJlSW5kZXg7CisgICAgICAgIHVpbnQzMl90IGZ1bmNJbXBv
cnRJbmRleDsKKyAgICB9OworICAgIAorICAgIHN0cnVjdCBGdW5jUHRyVGFibGUgeworICAgICAg
ICB1aW50MzJfdCBzaWduYXR1cmVJbmRleDsKKyAgICAgICAgVmVjdG9yPHVpbnQzMl90PiBlbGVt
ZW50czsKKyAgICB9OworCisgICAgTW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBWZWN0b3I8Y2hhcj4m
IGJ1ZmZlcik7CisKKyAgICB2b2lkIHBhcnNlQ29uc3RhbnRQb29sU2VjdGlvbigpOworICAgIHZv
aWQgcGFyc2VTaWduYXR1cmVTZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9uSW1wb3J0
U2VjdGlvbigpOworICAgIHZvaWQgcGFyc2VHbG9iYWxTZWN0aW9uKCk7CisgICAgdm9pZCBwYXJz
ZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9uUG9p
bnRlclRhYmxlcygpOworICAgIHZvaWQgcGFyc2VGdW5jdGlvbkRlZmluaXRpb25TZWN0aW9uKFZN
JiwgSlNHbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIHBhcnNlRXhwb3J0U2VjdGlvbihWTSYpOwor
CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
c2l6ZV90IGZ1bmN0aW9uSW5kZXgpOworCisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
KyAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9w
ZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlE
ZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJv
cGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgdm9p
ZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisKKyAgICBSZWFkZXIgbV9yZWFkZXI7
CisKKyAgICBWZWN0b3I8U2lnbmF0dXJlPiBtX3NpZ25hdHVyZXM7CisgICAgVmVjdG9yPHVpbnQz
Ml90PiBtX2NvbnN0YW50STMyczsKKyAgICBWZWN0b3I8ZmxvYXQ+IG1fY29uc3RhbnRGMzJzOwor
ICAgIFZlY3Rvcjxkb3VibGU+IG1fY29uc3RhbnRGNjRzOworICAgIFZlY3RvcjxTdHJpbmc+IG1f
ZnVuY3Rpb25JbXBvcnROYW1lczsKKyAgICBWZWN0b3I8RnVuY0ltcG9ydFNpZ25hdHVyZT4gbV9m
dW5jSW1wb3J0U2lnbmF0dXJlczsKKyAgICBWZWN0b3I8VHlwZT4gbV9nbG9iYWxUeXBlczsKKyAg
ICBWZWN0b3I8dWludDMyX3Q+IG1fZnVuY1NpZ25hdHVyZXM7CisgICAgVmVjdG9yPEZ1bmNQdHJU
YWJsZT4gbV9mdW5jUHRyVGFibGVzOworCisgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0Z1bmN0
aW9uPj4gbV9mdW5jdGlvbnM7CisgICAgV3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZmZXI+IG1fYXJy
YXlCdWZmZXI7Cit9OworCitKU19FWFBPUlRfUFJJVkFURSBNb2R1bGUqIGNvbXBpbGUoRXhlY1N0
YXRlKiwgY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpOworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6V2FzbQorCisjZW5kaWYgLy8gV2FzbU1vZHVsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtT3Bjb2Rlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU9wY29kZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZDk3YTA2NmQ3NDI4MzZjY2QwOWY2MGI4ZGU3
NDQ1ZjYxOTBmNjM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU9wY29kZXMuaApAQCAtMCwwICsxLDU5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBM
aWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgeW91IG1heSBub3QgdXNlIHRo
aXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIFlvdSBtYXkg
b2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgaHR0cDovL3d3dy5hcGFjaGUub3Jn
L2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBs
YXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgZGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyBXSVRIT1VU
IFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3Ig
aW1wbGllZC4KKyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zl
cm5pbmcgcGVybWlzc2lvbnMgYW5kCisgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisq
LworCisjaWZuZGVmIFdhc21PcGNvZGVzX2gKKyNkZWZpbmUgV2FzbU9wY29kZXNfaAorCisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdhc20g
eworCitzdGF0aWMgY29uc3QgdWludDMyX3QgTWFnaWNOdW1iZXIgPSAweDZkNzM2MTc3OworCitl
bnVtIGNsYXNzIFN0bXQgOiB1aW50OF90IHsKKyAgICBTZXRMb2MsCisgICAgU2V0R2xvLAorICAg
IEkzMlN0b3JlOCwKKyAgICBJMzJTdG9yZU9mZjgsCisgICAgSTMyU3RvcmUxNiwKKyAgICBJMzJT
dG9yZU9mZjE2LAorICAgIEkzMlN0b3JlMzIsCisgICAgSTMyU3RvcmVPZmYzMiwKKyAgICBGMzJT
dG9yZSwKKyAgICBGMzJTdG9yZU9mZiwKKyAgICBGNjRTdG9yZSwKKyAgICBGNjRTdG9yZU9mZiwK
KyAgICBDYWxsSW50LAorICAgIENhbGxJbmQsCisgICAgQ2FsbEltcCwKKyAgICBSZXQsCisgICAg
QmxvY2ssCisgICAgSWZUaGVuLAorICAgIElmRWxzZSwKKyAgICBXaGlsZSwKKyAgICBEbywKKyAg
ICBMYWJlbCwKKyAgICBCcmVhaywKKyAgICBCcmVha0xhYmVsLAorICAgIENvbnRpbnVlLAorICAg
IENvbnRpbnVlTGFiZWwsCisgICAgU3dpdGNoLAorCisgICAgQmFkCit9OworCitlbnVtIGNsYXNz
IFN0bXRXaXRoSW1tIDogdWludDhfdCB7CisgICAgU2V0TG9jLAorICAgIFNldEdsbywKKyAgICBS
ZXNldmVkMSwKKyAgICBSZXNldmVkMiwKKworICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBTd2l0
Y2hDYXNlIDogdWludDhfdCB7CisgICAgQ2FzZTAsCisgICAgQ2FzZTEsCisgICAgQ2FzZU4sCisg
ICAgRGVmYXVsdDAsCisgICAgRGVmYXVsdDEsCisgICAgRGVmYXVsdE4KK307CisKK2VudW0gY2xh
c3MgSTMyIDogdWludDhfdCB7CisgICAgTGl0UG9vbCwKKyAgICBMaXRJbW0sCisgICAgR2V0TG9j
LAorICAgIEdldEdsbywKKyAgICBTZXRMb2MsCisgICAgU2V0R2xvLAorICAgIFNMb2FkOCwKKyAg
ICBTTG9hZE9mZjgsCisgICAgVUxvYWQ4LAorICAgIFVMb2FkT2ZmOCwKKyAgICBTTG9hZDE2LAor
ICAgIFNMb2FkT2ZmMTYsCisgICAgVUxvYWQxNiwKKyAgICBVTG9hZE9mZjE2LAorICAgIExvYWQz
MiwKKyAgICBMb2FkT2ZmMzIsCisgICAgU3RvcmU4LAorICAgIFN0b3JlT2ZmOCwKKyAgICBTdG9y
ZTE2LAorICAgIFN0b3JlT2ZmMTYsCisgICAgU3RvcmUzMiwKKyAgICBTdG9yZU9mZjMyLAorICAg
IENhbGxJbnQsCisgICAgQ2FsbEluZCwKKyAgICBDYWxsSW1wLAorICAgIENvbmQsCisgICAgQ29t
bWEsCisgICAgRnJvbUYzMiwKKyAgICBGcm9tRjY0LAorICAgIE5lZywKKyAgICBBZGQsCisgICAg
U3ViLAorICAgIE11bCwKKyAgICBTRGl2LAorICAgIFVEaXYsCisgICAgU01vZCwKKyAgICBVTW9k
LAorICAgIEJpdE5vdCwKKyAgICBCaXRPciwKKyAgICBCaXRBbmQsCisgICAgQml0WG9yLAorICAg
IExzaCwKKyAgICBBcml0aFJzaCwKKyAgICBMb2dpY1JzaCwKKyAgICBDbHosCisgICAgTG9naWNO
b3QsCisgICAgRXFJMzIsCisgICAgRXFGMzIsCisgICAgRXFGNjQsCisgICAgTkVxSTMyLAorICAg
IE5FcUYzMiwKKyAgICBORXFGNjQsCisgICAgU0xlVGhJMzIsCisgICAgVUxlVGhJMzIsCisgICAg
TGVUaEYzMiwKKyAgICBMZVRoRjY0LAorICAgIFNMZUVxSTMyLAorICAgIFVMZUVxSTMyLAorICAg
IExlRXFGMzIsCisgICAgTGVFcUY2NCwKKyAgICBTR3JUaEkzMiwKKyAgICBVR3JUaEkzMiwKKyAg
ICBHclRoRjMyLAorICAgIEdyVGhGNjQsCisgICAgU0dyRXFJMzIsCisgICAgVUdyRXFJMzIsCisg
ICAgR3JFcUYzMiwKKyAgICBHckVxRjY0LAorICAgIFNNaW4sCisgICAgVU1pbiwKKyAgICBTTWF4
LAorICAgIFVNYXgsCisgICAgQWJzLAorCisgICAgQmFkCit9OworCitlbnVtIGNsYXNzIEkzMldp
dGhJbW0gOiB1aW50OF90IHsKKyAgICBMaXRQb29sLAorICAgIExpdEltbSwKKyAgICBHZXRMb2Ms
CisgICAgUmVzZXJ2ZWQsCisKKyAgICBCYWQKK307CisKK2VudW0gY2xhc3MgRjMyIDogdWludDhf
dCB7CisgICAgTGl0UG9vbCwKKyAgICBMaXRJbW0sCisgICAgR2V0TG9jLAorICAgIEdldEdsbywK
KyAgICBTZXRMb2MsCisgICAgU2V0R2xvLAorICAgIExvYWQsCisgICAgTG9hZE9mZiwKKyAgICBT
dG9yZSwKKyAgICBTdG9yZU9mZiwKKyAgICBDYWxsSW50LAorICAgIENhbGxJbmQsCisgICAgQ29u
ZCwKKyAgICBDb21tYSwKKyAgICBGcm9tUzMyLAorICAgIEZyb21VMzIsCisgICAgRnJvbUY2NCwK
KyAgICBOZWcsCisgICAgQWRkLAorICAgIFN1YiwKKyAgICBNdWwsCisgICAgRGl2LAorICAgIEFi
cywKKyAgICBDZWlsLAorICAgIEZsb29yLAorICAgIFNxcnQsCisKKyAgICBCYWQKK307CisKK2Vu
dW0gY2xhc3MgRjMyV2l0aEltbSA6IHVpbnQ4X3QgeworICAgIExpdFBvb2wsCisgICAgR2V0TG9j
LAorICAgIFJlc2VydmVkMCwKKyAgICBSZXNlcnZlZDEsCisKKyAgICBCYWQKK307CisKK2VudW0g
Y2xhc3MgRjY0IDogdWludDhfdCB7CisgICAgTGl0UG9vbCwKKyAgICBMaXRJbW0sCisgICAgR2V0
TG9jLAorICAgIEdldEdsbywKKyAgICBTZXRMb2MsCisgICAgU2V0R2xvLAorICAgIExvYWQsCisg
ICAgTG9hZE9mZiwKKyAgICBTdG9yZSwKKyAgICBTdG9yZU9mZiwKKyAgICBDYWxsSW50LAorICAg
IENhbGxJbmQsCisgICAgQ2FsbEltcCwKKyAgICBDb25kLAorICAgIENvbW1hLAorICAgIEZyb21T
MzIsCisgICAgRnJvbVUzMiwKKyAgICBGcm9tRjMyLAorICAgIE5lZywKKyAgICBBZGQsCisgICAg
U3ViLAorICAgIE11bCwKKyAgICBEaXYsCisgICAgTW9kLAorICAgIE1pbiwKKyAgICBNYXgsCisg
ICAgQWJzLAorICAgIENlaWwsCisgICAgRmxvb3IsCisgICAgU3FydCwKKyAgICBDb3MsCisgICAg
U2luLAorICAgIFRhbiwKKyAgICBBQ29zLAorICAgIEFTaW4sCisgICAgQVRhbiwKKyAgICBBVGFu
MiwKKyAgICBFeHAsCisgICAgTG4sCisgICAgUG93LAorCisgICAgQmFkCit9OworCitlbnVtIGNs
YXNzIEY2NFdpdGhJbW0gOiB1aW50OF90IHsKKyAgICBMaXRQb29sLAorICAgIEdldExvYywKKyAg
ICBSZXNlcnZlZDAsCisgICAgUmVzZXJ2ZWQxLAorCisgICAgQmFkCit9OworCitlbnVtIGNsYXNz
IFZvaWQgOiB1aW50OF90IHsKKyAgICBDYWxsSW50LAorICAgIENhbGxJbmQsCisgICAgQ2FsbElt
cCwKKworICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7CisgICAgSTMy
LAorICAgIEYzMiwKKyAgICBGNjQKK307CisKK2VudW0gY2xhc3MgVmFyVHlwZXMgOiB1aW50OF90
IHsKKyAgICBJMzIgPSAweDEsCisgICAgRjMyID0gMHgyLAorICAgIEY2NCA9IDB4NCwKK307CisK
K2lubGluZSBWYXJUeXBlcyBvcGVyYXRvcnwgKFZhclR5cGVzIGxocywgVmFyVHlwZXMgcmhzKSB7
IHJldHVybiBWYXJUeXBlcyh1aW50OF90KGxocykgfCB1aW50OF90KHJocykpOyB9CitpbmxpbmUg
Ym9vbCBvcGVyYXRvciYoVmFyVHlwZXMgbGhzLCBWYXJUeXBlcyByaHMpIHsgcmV0dXJuIGJvb2wo
dWludDhfdChsaHMpICYgdWludDhfdChyaHMpKTsgfQorCitlbnVtIGNsYXNzIFZhclR5cGVzV2l0
aEltbSA6IHVpbnQ4X3QgeworICAgIE9ubHlJMzIsCisgICAgUmVzZXJ2ZWQwLAorICAgIFJlc2Vy
dmVkMSwKKyAgICBSZXNlcnZlZDIKK307CisKK2VudW0gY2xhc3MgUmV0dXJuVHlwZSA6IHVpbnQ4
X3QgeworICAgIEkzMiA9IHVpbnQ4X3QoVHlwZTo6STMyKSwKKyAgICBGMzIgPSB1aW50OF90KFR5
cGU6OkYzMiksCisgICAgRjY0ID0gdWludDhfdChUeXBlOjpGNjQpLAorICAgIFZvaWQKK307CisK
KworCitjbGFzcyBFeHByIHsKK3B1YmxpYzoKKyAgICBFeHByKCkKKyAgICA6IG1fdHlwZShSZXR1
cm5UeXBlKC0xKSksIHUgeyB9CisgICAgeworICAgIH0KKyAgICBFeHByKEkzMiBpMzIpIDogbV90
eXBlKFJldHVyblR5cGU6OkkzMikgeyB1LmkzMiA9IGkzMjsgfQorICAgIEV4cHIoRjMyIGYzMikg
OiBtX3R5cGUoUmV0dXJuVHlwZTo6RjMyKSB7IHUuZjMyID0gZjMyOyB9CisgICAgRXhwcihGNjQg
ZjY0KSA6IG1fdHlwZShSZXR1cm5UeXBlOjpGNjQpIHsgdS5mNjQgPSBmNjQ7IH0KKyAgICBFeHBy
KFZvaWQgdikgOiBtX3R5cGUoUmV0dXJuVHlwZTo6Vm9pZCkgeyB1LnYgPSB2OyB9CisKKyAgICBS
ZXR1cm5UeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBJMzIgaTMyKCkg
Y29uc3QgeyByZXR1cm4gdS5pMzI7IH0KKyAgICBGMzIgZjMyKCkgY29uc3QgeyByZXR1cm4gdS5m
MzI7IH0KKyAgICBGNjQgZjY0KCkgY29uc3QgeyByZXR1cm4gdS5mNjQ7IH0KKworICAgIGJvb2wg
b3BlcmF0b3I9PShFeHByIHJocykgY29uc3QgeyByZXR1cm4gbV90eXBlID09IHJocy5tX3R5cGUg
JiYgdS5yYXcgPT0gcmhzLnUucmF3OyB9CisgICAgYm9vbCBvcGVyYXRvciE9KEV4cHIgcmhzKSBj
b25zdCB7IHJldHVybiAhKCp0aGlzID09IHJocyk7IH0KKworcHJpdmF0ZToKKyAgICBSZXR1cm5U
eXBlIG1fdHlwZTsKKyAgICB1bmlvbiBVIHsKKyAgICAgICAgSTMyIGkzMjsKKyAgICAgICAgRjMy
IGYzMjsKKyAgICAgICAgRjY0IGY2NDsKKyAgICAgICAgVm9pZCB2OworICAgICAgICB1aW50OF90
IHJhdzsKKyAgICB9IHU7CisKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihVKSA9PSBzaXplb2Yo
dWludDhfdCksICJFeGFjdCBvdmVybGF5IG9mIHJhd18iKTsKK307CisKK3N0YXRpYyBjb25zdCB1
aW50OF90IEhhc0ltbUZsYWcgPSAweDgwOworc3RhdGljX2Fzc2VydCh1aW50OF90KEkzMjo6QmFk
KSA8PSBIYXNJbW1GbGFnLCAiTVNCIHJlc2VydmVkIHRvIGRpc3Rpbmd1aXNoIEkzMiBmcm9tIEkz
MldpdGhJbW0iKTsKK3N0YXRpY19hc3NlcnQodWludDhfdChGMzI6OkJhZCkgPD0gSGFzSW1tRmxh
ZywgIk1TQiByZXNlcnZlZCB0byBkaXN0aW5ndWlzaCBGMzIgZnJvbSBGMzJXaXRoSW1tIik7Citz
dGF0aWNfYXNzZXJ0KHVpbnQ4X3QoRjY0OjpCYWQpIDw9IEhhc0ltbUZsYWcsICJNU0IgcmVzZXJ2
ZWQgdG8gZGlzdGluZ3Vpc2ggRjY0IGZyb20gRjY0V2l0aEltbSIpOworCitzdGF0aWMgY29uc3Qg
dW5zaWduZWQgT3BXaXRoSW1tQml0cyA9IDI7CitzdGF0aWMgY29uc3QgdWludDMyX3QgT3BXaXRo
SW1tTGltaXQgPSAxIDw8IE9wV2l0aEltbUJpdHM7CitzdGF0aWNfYXNzZXJ0KHVpbnQ4X3QoSTMy
V2l0aEltbTo6QmFkKSA8PSBPcFdpdGhJbW1MaW1pdCwgIkkzMldpdGhJbW0gb3AgZml0cyIpOwor
c3RhdGljX2Fzc2VydCh1aW50OF90KEYzMldpdGhJbW06OkJhZCkgPD0gT3BXaXRoSW1tTGltaXQs
ICJGMzJXaXRoSW1tIG9wIGZpdHMiKTsKK3N0YXRpY19hc3NlcnQodWludDhfdChGNjRXaXRoSW1t
OjpCYWQpIDw9IE9wV2l0aEltbUxpbWl0LCAiRjY0V2l0aEltbSBvcCBmaXRzIik7CisKK3N0YXRp
YyBjb25zdCB1bnNpZ25lZCBJbW1CaXRzID0gNTsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBJbW1M
aW1pdCA9IDEgPDwgSW1tQml0czsKK3N0YXRpY19hc3NlcnQoKDEgKyBPcFdpdGhJbW1CaXRzICsg
SW1tQml0cykgPT0gOCwgIkJpdHMgb2YgaW1tZWRpYXRlIG9wIHNob3VsZCBhZGQgdXAgdG8gYSBi
eXRlIik7CisKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBQYWNrT3BXaXRoSW1tKHVpbnQ4X3Qgb3As
IHVpbnQ4X3QgaW1tKQoreworICAgIGFzc2VydChvcCA8IE9wV2l0aEltbUxpbWl0KTsKKyAgICBh
c3NlcnQoaW1tIDwgSW1tTGltaXQpOworICAgIHJldHVybiBIYXNJbW1GbGFnIHwgKHVpbnQ4X3Qo
b3ApIDw8IEltbUJpdHMpIHwgaW1tOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVFdpdGhJbW0+Citz
dGF0aWMgaW5saW5lIHZvaWQgVW5wYWNrT3BXaXRoSW1tKHVpbnQ4X3QgYnl0ZSwgVFdpdGhJbW0q
IG9wLCB1aW50OF90ICppbW0pCit7CisgICAgYXNzZXJ0KGJ5dGUgJiBIYXNJbW1GbGFnKTsKKyAg
ICAqb3AgPSBUV2l0aEltbSgoYnl0ZSA+PiBJbW1CaXRzKSAmIChPcFdpdGhJbW1MaW1pdCAtIDEp
KTsKKyAgICAqaW1tID0gYnl0ZSAmIChJbW1MaW1pdCAtIDEpOworfQorCitjbGFzcyBFeHByV2l0
aEltbSB7CitwdWJsaWM6CisgICAgRXhwcldpdGhJbW0oKQorICAgICAgICA6IG1fdHlwZShUeXBl
KC0xKSkKKyAgICB7CisgICAgfQorICAgIEV4cHJXaXRoSW1tKEkzMldpdGhJbW0gaTMyKSA6IG1f
dHlwZShUeXBlOjpJMzIpIHsgdS5pMzIgPSBpMzI7IH0KKyAgICBFeHByV2l0aEltbShGMzJXaXRo
SW1tIGYzMikgOiBtX3R5cGUoVHlwZTo6RjMyKSB7IHUuZjMyID0gZjMyOyB9CisgICAgRXhwcldp
dGhJbW0oRjY0V2l0aEltbSBmNjQpIDogbV90eXBlKFR5cGU6OkY2NCkgeyB1LmY2NCA9IGY2NDsg
fQorCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgSTMyV2l0
aEltbSBpMzIoKSBjb25zdCB7IHJldHVybiB1LmkzMjsgfQorICAgIEYzMldpdGhJbW0gZjMyKCkg
Y29uc3QgeyByZXR1cm4gdS5mMzI7IH0KKyAgICBGNjRXaXRoSW1tIGY2NCgpIGNvbnN0IHsgcmV0
dXJuIHUuZjY0OyB9CisKK3ByaXZhdGU6CisgICAgVHlwZSBtX3R5cGU7CisgICAgdW5pb24gVSB7
CisgICAgICAgIEkzMldpdGhJbW0gaTMyOworICAgICAgICBGMzJXaXRoSW1tIGYzMjsKKyAgICAg
ICAgRjY0V2l0aEltbSBmNjQ7CisgICAgICAgIHVpbnQ4X3QgcmF3OworICAgIH0gdTsKKworICAg
IHN0YXRpY19hc3NlcnQoc2l6ZW9mKFUpID09IHNpemVvZih1aW50OF90KSwgIkV4YWN0IG92ZXJs
YXkgb2YgcmF3XyIpOworfTsKKworZW51bSBjbGFzcyBFeHBvcnRGb3JtYXQgOiB1aW50OF90IHsK
KyAgICBEZWZhdWx0LAorICAgIFJlY29yZAorfTsKKworc3RydWN0IFNpZ25hdHVyZSB7CisgICAg
UmV0dXJuVHlwZSByZXR1cm5UeXBlOworICAgIFZlY3RvcjxUeXBlPiBhcmd1bWVudHM7CisKKyAg
ICBTaWduYXR1cmUoKSB7IH0KKyAgICBTaWduYXR1cmUoUmV0dXJuVHlwZSByZXR1cm5UeXBlKQor
ICAgICAgICA6IHJldHVyblR5cGUocmV0dXJuVHlwZSkgeyB9CisgICAgU2lnbmF0dXJlKFJldHVy
blR5cGUgcmV0dXJuVHlwZSwgdWludDMyX3QgYXJndW1lbnRDb3VudCkKKyAgICAgICAgOiByZXR1
cm5UeXBlKHJldHVyblR5cGUpCisgICAgICAgICwgYXJndW1lbnRzKGFyZ3VtZW50Q291bnQpIHsg
fQorICAgIFNpZ25hdHVyZShSZXR1cm5UeXBlIHJldHVyblR5cGUsIFZlY3RvcjxUeXBlPiYmIGFy
Z3VtZW50cykKKyAgICAgICAgOiByZXR1cm5UeXBlKHJldHVyblR5cGUpCisgICAgICAgICwgYXJn
dW1lbnRzKFdURjo6bW92ZShhcmd1bWVudHMpKSB7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBTaWduYXR1cmUmIHJocykgY29uc3QgeyByZXR1cm4gcmV0dXJuVHlwZSA9PSByaHMucmV0
dXJuVHlwZSAmJiBhcmd1bWVudHMgPT0gcmhzLmFyZ3VtZW50czsgfQorICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBTaWduYXR1cmUmIHJocykgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSByaHMp
OyB9CisKKyAgICBzdHJ1Y3QgSGFzaCB7CisgICAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBT
aWduYXR1cmUgJnNpZ25hdHVyZSkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdGlj
X2Fzc2VydChzaXplb2YoVHlwZSkgPT0gMSAmJiBzaXplb2YoUmV0dXJuVHlwZSkgPT0gMSwgIlNo
aWZ0IG1vcmUiKTsKKyAgICAgICAgICAgIHVpbnQzMl90IGggPSB1aW50OF90KHNpZ25hdHVyZS5y
ZXR1cm5UeXBlKTsKKyAgICAgICAgICAgIGZvciAoVHlwZSB0IDogc2lnbmF0dXJlLmFyZ3VtZW50
cykKKyAgICAgICAgICAgICAgICBoID0gKChoIDw8IDIpIHwgdWludDhfdCh0KSkgXiAoaCA+PiAz
MCk7CisgICAgICAgICAgICByZXR1cm4gaDsKKyAgICAgICAgfQorICAgIH07Cit9OworCitjbGFz
cyBSZWFkZXIgeworcHVibGljOgorICAgIFJlYWRlcigpIHsgfQorICAgIFJlYWRlcihjb25zdCB1
aW50OF90KiBiZWdpbikKKyAgICAgICAgOiBtX2N1cnNvcihiZWdpbikKKyAgICB7CisgICAgfQor
CisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IFQgZml4ZWRXaWR0aCgpOworICAgIFN0bXQgc3RtdCgp
IHsgcmV0dXJuIHU4PFN0bXQ+KCk7IH0KKyAgICBTd2l0Y2hDYXNlIHN3aXRjaENhc2UoKSB7IHJl
dHVybiB1ODxTd2l0Y2hDYXNlPigpOyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVFdp
dGhJbW0+IGlubGluZSBib29sIGNvZGUoVCosIFRXaXRoSW1tKiwgdWludDhfdCopOworICAgIFZv
aWQgdm9pZEV4cHIoKSB7IHJldHVybiB1ODxWb2lkPigpOyB9CisgICAgRXhwb3J0Rm9ybWF0IGV4
cG9ydEZvcm1hdCgpIHsgcmV0dXJuIHU4PEV4cG9ydEZvcm1hdD4oKTsgfQorICAgIFR5cGUgdHlw
ZSgpIHsgcmV0dXJuIHU4PFR5cGU+KCk7IH0KKyAgICBSZXR1cm5UeXBlIHJldHVyblR5cGUoKSB7
IHJldHVybiB1ODxSZXR1cm5UeXBlPigpOyB9CisgICAgaW5saW5lIHVpbnQzMl90IGltbVUzMigp
OworICAgIGlubGluZSBpbnQzMl90IGltbVMzMigpOworICAgIGNoYXIgc2luZ2xlQ2hhcigpIHsg
cmV0dXJuICptX2N1cnNvcisrOyB9CisKKyAgICBpbmxpbmUgYm9vbCBpZkkzMkxpdChjb25zdCBW
ZWN0b3I8dWludDMyX3Q+JiBpMzJzLCB1aW50MzJfdCopOworCitwcml2YXRlOgorICAgIHRlbXBs
YXRlIDxjbGFzcyBUPiBUIHU4KCkgeyByZXR1cm4gVCgqbV9jdXJzb3IrKyk7IH0KKworICAgIGNv
bnN0IHVpbnQ4X3QqIG1fY3Vyc29yOworfTsKKwordGVtcGxhdGUgPD4KK2lubGluZSB1aW50MzJf
dCBSZWFkZXI6OmZpeGVkV2lkdGg8dWludDMyX3Q+KCkKK3sKKyAgICB1aW50MzJfdCB1MzIgPSBt
X2N1cnNvclswXSB8IG1fY3Vyc29yWzFdIDw8IDggfCBtX2N1cnNvclsyXSA8PCAxNiB8IG1fY3Vy
c29yWzNdIDw8IDI0OworICAgIG1fY3Vyc29yICs9IDQ7CisgICAgcmV0dXJuIHUzMjsKK30KKwor
dGVtcGxhdGUgPD4KK2lubGluZSBmbG9hdCBSZWFkZXI6OmZpeGVkV2lkdGg8ZmxvYXQ+KCkKK3sK
KyAgICB1bmlvbiB7CisgICAgICAgIHVpbnQ4X3QgYXJyWzRdOworICAgICAgICBmbG9hdCBmOwor
ICAgIH0gdSA9IHsgeyBtX2N1cnNvclswXSwgbV9jdXJzb3JbMV0sIG1fY3Vyc29yWzJdLCBtX2N1
cnNvclszXSB9IH07CisgICAgbV9jdXJzb3IgKz0gNDsKKyAgICByZXR1cm4gdS5mOworfQorCit0
ZW1wbGF0ZSA8PgoraW5saW5lIGRvdWJsZSBSZWFkZXI6OmZpeGVkV2lkdGg8ZG91YmxlPigpCit7
CisgICAgdW5pb24geworICAgICAgICB1aW50OF90IGFycls4XTsKKyAgICAgICAgZG91YmxlIGQ7
CisgICAgfSB1ID0geyB7IG1fY3Vyc29yWzBdLCBtX2N1cnNvclsxXSwgbV9jdXJzb3JbMl0sIG1f
Y3Vyc29yWzNdLCBtX2N1cnNvcls0XSwgbV9jdXJzb3JbNV0sIG1fY3Vyc29yWzZdLCBtX2N1cnNv
cls3XSB9IH07CisgICAgbV9jdXJzb3IgKz0gODsKKyAgICByZXR1cm4gdS5kOworfQorCit0ZW1w
bGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVFdpdGhJbW0+Citib29sIFJlYWRlcjo6Y29kZShUKiB0LCBU
V2l0aEltbSogdFdpdGhJbW0sIHVpbnQ4X3QqIGltbSkKK3sKKyAgICB1aW50OF90IGJ5dGUgPSAq
bV9jdXJzb3IrKzsKKyAgICBpZiAoIShieXRlICYgSGFzSW1tRmxhZykpIHsKKyAgICAgICAgKnQg
PSBUKGJ5dGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBVbnBhY2tPcFdp
dGhJbW0oYnl0ZSwgdFdpdGhJbW0sIGltbSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxp
bmUgdWludDMyX3QgUmVhZGVyOjppbW1VMzIoKQoreworICAgIHVpbnQzMl90IHUzMiA9ICptX2N1
cnNvcisrOworICAgIGlmICh1MzIgPCAweDgwKQorICAgICAgICByZXR1cm4gdTMyOworCisgICAg
dTMyICY9IDB4N2Y7CisKKyAgICBmb3IgKHVuc2lnbmVkIHNoaWZ0ID0gNzsgdHJ1ZTsgc2hpZnQg
Kz0gNykgeworICAgICAgICB1aW50MzJfdCBiID0gKm1fY3Vyc29yKys7CisgICAgICAgIGlmIChi
IDwgMHg4MCkKKyAgICAgICAgICAgIHJldHVybiB1MzIgfCAoYiA8PCBzaGlmdCk7CisgICAgICAg
IHUzMiB8PSAoYiAmIDB4N2YpIDw8IHNoaWZ0OworICAgIH0KK30KKworaW5saW5lIGludDMyX3Qg
UmVhZGVyOjppbW1TMzIoKQoreworICAgIHVpbnQzMl90IHUzMiA9ICptX2N1cnNvcisrOworICAg
IGlmICh1MzIgPCAweDgwKQorICAgICAgICByZXR1cm4gaW50MzJfdCh1MzIpIDw8ICgzMi03KSA+
PiAoMzItNyk7CisKKyAgICB1MzIgJj0gMHg3ZjsKKworICAgIGZvciAodW5zaWduZWQgc2hpZnQg
PSA3OyB0cnVlOyBzaGlmdCArPSA3KSB7CisgICAgICAgIHVpbnQzMl90IGIgPSAqbV9jdXJzb3Ir
KzsKKyAgICAgICAgaWYgKGIgPCAweDgwKSB7CisgICAgICAgICAgICB1MzIgfD0gYiA8PCBzaGlm
dDsKKyAgICAgICAgICAgIGludCBzaWduRXh0ZW5kID0gKDMyLTcpIC0gc2hpZnQ7CisgICAgICAg
ICAgICBpZiAoc2lnbkV4dGVuZCA+IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGludDMyX3Qo
dTMyKSA8PCBzaWduRXh0ZW5kID4+IHNpZ25FeHRlbmQ7CisgICAgICAgICAgICByZXR1cm4gaW50
MzJfdCh1MzIpOworICAgICAgICB9CisgICAgICAgIHUzMiB8PSAoYiAmIDB4N2YpIDw8IHNoaWZ0
OworICAgIH0KK30KKworaW5saW5lIGJvb2wgUmVhZGVyOjppZkkzMkxpdChjb25zdCBWZWN0b3I8
dWludDMyX3Q+JiBpMzJzLCB1aW50MzJfdCogdTMyKQoreworICAgIHVpbnQ4X3QgYnl0ZSA9ICpt
X2N1cnNvcjsKKworICAgIGlmIChieXRlICYgSGFzSW1tRmxhZykgeworICAgICAgICBJMzJXaXRo
SW1tIGkzMldpdGhJbW07CisgICAgICAgIHVpbnQ4X3QgaW1tOworICAgICAgICBVbnBhY2tPcFdp
dGhJbW0oYnl0ZSwgJmkzMldpdGhJbW0sICZpbW0pOworCisgICAgICAgIGlmIChpMzJXaXRoSW1t
ID09IEkzMldpdGhJbW06OkxpdEltbSkgeworICAgICAgICAgICAgbV9jdXJzb3IrKzsKKyAgICAg
ICAgICAgICp1MzIgPSBpbW07CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChpMzJXaXRoSW1tID09IEkzMldpdGhJbW06OkxpdFBvb2wpIHsKKyAgICAg
ICAgICAgIG1fY3Vyc29yKys7CisgICAgICAgICAgICAqdTMyID0gaTMyc1tpbW1dOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKEkzMihieXRlKSA9PSBJMzI6OkxpdEltbSkgeworICAgICAgICBtX2N1
cnNvcisrOworICAgICAgICAqdTMyID0gaW1tVTMyKCk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIGlmIChJMzIoYnl0ZSkgPT0gSTMyOjpMaXRQb29sKSB7CisgICAgICAgIG1f
Y3Vyc29yKys7CisgICAgICAgICp1MzIgPSBpMzJzW2ltbVUzMigpXTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V2FzbQorCisjZW5kaWYgLy8gV2FzbU9wY29kZXNfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256851</attachid>
            <date>2015-07-15 12:43:17 -0700</date>
            <delta_ts>2015-07-16 03:28:42 -0700</delta_ts>
            <desc>Work in progress. First attempt at templatizing the parser. Add a stack height calculator.</desc>
            <filename>bug-146064-20150715124209.patch</filename>
            <type>text/plain</type>
            <size>166268</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg2NTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
OWZhNzg4ZjIxZjdmOTg5ZDI1NDdkMTQwYTMyNDRlY2RmNjcwZGI0Li5hYTQwZDNmZDllMDU0OTU3
NjhhZTIyZjA3Njc0ZTVmY2JkYzE0OTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNzcgQEAKKzIwMTUtMDctMTQgIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0Bn
bWFpbC5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBuYXRpdmVseSBzdXBwb3J0IFdlYkFzc2Vt
Ymx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYw
NjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppbmZlcnJlZE5hbWUp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6Oldl
YkFzc2VtYmx5Q29kZUJsb2NrOjpyZXBsYWNlbWVudCk6CisgICAgICAgIChKU0M6OldlYkFzc2Vt
Ymx5Q29kZUJsb2NrOjpjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCk6CisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29kZVR5cGUpOgorICAg
ICAgICAoSlNDOjpXZWJBc3NlbWJseUNvZGVCbG9jazo6V2ViQXNzZW1ibHlDb2RlQmxvY2spOgor
ICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAg
ICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChmdW5jdGlvbkxv
YWRXZWJBc3NlbWJseSk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAg
ICAgICAoSlNDOjpMTEludDo6c2V0VXBDYWxsKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFi
bGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZSk6Cisg
ICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6Om5ld0NvZGVCbG9ja0Zvcik6CisgICAgICAg
IChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb25JbXBsKToKKyAgICAg
ICAgKEpTQzo6V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpXZWJBc3NlbWJseUV4ZWN1dGFibGUpOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4ZWN1dGFibGU6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpkZXN0cm95KToKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpiYXNlbGluZUNvZGVCbG9ja0Zvcik6CisgICAgICAg
IChKU0M6OldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChK
U0M6OldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6c3ltYm9sVGFibGUpOgorICAgICAgICAoSlNDOjpX
ZWJBc3NlbWJseUV4ZWN1dGFibGU6OmNsZWFyQ29kZSk6CisgICAgICAgIChKU0M6OldlYkFzc2Vt
Ymx5RXhlY3V0YWJsZTo6dW5saW5rQ2FsbHMpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJs
ZS5oOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6aXNXZWJBc3NlbWJseUV4ZWN1dGFi
bGUpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlVmlydHVhbCk6Cisg
ICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlv
bjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKEpT
Qzo6SlNGdW5jdGlvbjo6Y3JlYXRlSW1wbCk6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9u
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKToKKyAgICAg
ICAgKEpTQzo6SlNGdW5jdGlvbjo6aXNIb3N0RnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUv
SlNUeXBlLmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpW
TSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAqIHdhc20vV2FzbUpJVENvbXBp
bGVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206Okp1bXBTY29wZTo6SnVtcFNjb3Bl
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SnVtcFNjb3BlOjpqdW1wKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6SnVtcFNjb3BlOjpsaW5rKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6
OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjphbGxv
Y2F0ZVNwYWNlT25TdGFjayk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpkZWFs
bG9jYXRlU3BhY2VPblN0YWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBh
cnNlQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlVmFy
cyk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZVN0bXQpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VHZXRMb2NhbCk6CisgICAgICAgIChKU0M6
Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZVNldExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
Z2V0QXJyYXlCdWZmZXJEYXRhKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBh
cnNlQXJyYXlCdWZmZXJPZmZzZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6
cGFyc2VMb2FkKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlU3RvcmUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VSZXR1cm5TdG10KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlU3RtdExpc3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VCbG9ja1N0bXQpOgorICAgICAgICAoSlNDOjpX
YXNtOjpKSVRDb21waWxlcjo6cGFyc2VJZlN0bXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRD
b21waWxlcjo6cGFyc2VJZkVsc2VTdG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGls
ZXI6OnBhcnNlV2hpbGVTdG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBh
cnNlRG9TdG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlTGFiZWxT
dG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlQnJlYWtTdG10KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlQnJlYWtMYWJlbFN0bXQpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VDb250aW51ZVN0bXQpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VDb250aW51ZUxhYmVsU3RtdCk6Cisg
ICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZVN3aXRjaFN0bXQpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VFeHByKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6SklUQ29tcGlsZXI6OnBhcnNlRXhwckkzMik6CisgICAgICAgIChKU0M6Oldhc206OkpJVENv
bXBpbGVyOjpwYXJzZUV4cHJGNjQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6
cGFyc2VFeHByVm9pZCk6CisgICAgICAgIChKU0M6Oldhc206OmdldEludGVybmFsRnVuY3Rpb24p
OgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VDYWxsSW50ZXJuYWwpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpnZXRJbXBvcnRlZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlQ2FsbEltcG9ydCk6CisgICAgICAgIChKU0M6Oldhc206
OkpJVENvbXBpbGVyOjpjYWxsRnVuY3Rpb25TbG93Q2FzZSk6CisgICAgICAgIChKU0M6Oldhc206
OkpJVENvbXBpbGVyOjpwYXJzZUNhbGxBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpK
SVRDb21waWxlcjo6Y2FsbERvdWJsZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklU
Q29tcGlsZXI6OnBhcnNlVW5hcnlPcCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVy
OjpwYXJzZUJpbmFyeU9wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNl
UmVsYXRpb25hbE9wSTMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNl
UmVsYXRpb25hbE9wRjY0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNl
Q29tbWEpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VDb25kKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlTWluTWF4STMyKToKKyAgICAgICAg
KiB3YXNtL1dhc21KSVRDb21waWxlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6SklU
Q29tcGlsZXI6OkpJVENvbXBpbGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6
OnN0YWNrQWRkcmVzcyk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjp0ZW1wb3Jh
cnlBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnB1c2hDb250aW51
ZUxhYmVsTGFiZWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cG9wQ29udGlu
dWVMYWJlbExhYmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OmNvbnRpbnVl
TGFiZWxMYWJlbCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwdXNoQnJlYWtM
YWJlbEp1bXBMaXN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBvcEJyZWFr
TGFiZWxKdW1wTGlzdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpicmVha0xh
YmVsSnVtcExpc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cHVzaENvbnRp
bnVlSnVtcFNjb3BlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBvcENvbnRp
bnVlSnVtcFNjb3BlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnRvcENvbnRp
bnVlSnVtcFNjb3BlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnB1c2hCcmVh
a0p1bXBMaXN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBvcEJyZWFrSnVt
cExpc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6dG9wQnJlYWtKdW1wTGlz
dCk6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
Oldhc206Ok1vZHVsZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1
bGU6OnBhcnNlQ29uc3RhbnRQb29sU2VjdGlvbik6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVs
ZTo6cGFyc2VTaWduYXR1cmVTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpw
YXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlvbik6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6
cGFyc2VHbG9iYWxTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpwYXJzZUZ1
bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpw
YXJzZUZ1bmN0aW9uUG9pbnRlclRhYmxlcyk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6
cGFyc2VGdW5jdGlvbkRlZmluaXRpb25TZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9k
dWxlOjpwYXJzZUV4cG9ydFNlY3Rpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OnBh
cnNlRnVuY3Rpb25EZWZpbml0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpmdW5j
dGlvbik6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6YXJyYXlCdWZmZXJEYXRhKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TW9kdWxlOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpN
b2R1bGU6OnB1dCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6ZGVmaW5lT3duUHJvcGVy
dHkpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpjb21waWxlKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGUuaDog
QWRkZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpN
b2R1bGU6OmZ1bmN0aW9uSW1wb3J0TmFtZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6
TW9kdWxlKToKKyAgICAgICAgKiB3YXNtL1dhc21PcGNvZGVzLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpXYXNtOjpvcGVyYXRvcnwgKToKKyAgICAgICAgKEpTQzo6V2FzbTo6b3BlcmF0b3ImKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcjo6RXhwcik6CisgICAgICAgIChKU0M6Oldhc206OkV4
cHI6OnR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpFeHByOjppMzIpOgorICAgICAgICAoSlND
OjpXYXNtOjpFeHByOjpmMzIpOgorICAgICAgICAoSlNDOjpXYXNtOjpFeHByOjpmNjQpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpFeHByOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
RXhwcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6Oldhc206OlBhY2tPcFdpdGhJbW0pOgor
ICAgICAgICAoSlNDOjpXYXNtOjpVbnBhY2tPcFdpdGhJbW0pOgorICAgICAgICAoSlNDOjpXYXNt
OjpFeHByV2l0aEltbTo6RXhwcldpdGhJbW0pOgorICAgICAgICAoSlNDOjpXYXNtOjpFeHByV2l0
aEltbTo6dHlwZSk6CisgICAgICAgIChKU0M6Oldhc206OkV4cHJXaXRoSW1tOjppMzIpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpFeHByV2l0aEltbTo6ZjMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
RXhwcldpdGhJbW06OmY2NCk6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZTo6U2lnbmF0
dXJlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0dXJlOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6U2lnbmF0dXJlOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6U2lnbmF0dXJlOjpIYXNoOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVh
ZGVyOjpSZWFkZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OnN0bXQpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpSZWFkZXI6OnN3aXRjaENhc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpS
ZWFkZXI6OnZvaWRFeHByKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVhZGVyOjpleHBvcnRGb3Jt
YXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OnR5cGUpOgorICAgICAgICAoSlNDOjpX
YXNtOjpSZWFkZXI6OnJldHVyblR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OnNp
bmdsZUNoYXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OnU4KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6UmVhZGVyOjpmaXhlZFdpZHRoPHVpbnQzMl90Pik6CisgICAgICAgIChKU0M6Oldh
c206OlJlYWRlcjo6Zml4ZWRXaWR0aDxmbG9hdD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFk
ZXI6OmZpeGVkV2lkdGg8ZG91YmxlPik6CisgICAgICAgIChKU0M6Oldhc206OlJlYWRlcjo6Y29k
ZSk6CisgICAgICAgIChKU0M6Oldhc206OlJlYWRlcjo6aW1tVTMyKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6UmVhZGVyOjppbW1TMzIpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OmlmSTMy
TGl0KToKKwogMjAxNS0wNy0wOCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29t
PgogCiAgICAgICAgIEZpeCBncmFtbWFyIGlzc3VlIGluIFR5cGVFcnJvciBhdHRlbXB0aW5nIHRv
IGNoYW5nZSBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCAwNmU5OTcwYzUyY2UwMTJhY2YzODA0MzI0MzdmMmMyNmY1Mjg4YTcwLi4wM2Nk
NDBiZmRkMzk3Njc4NWU3MmE3YzdhNTIwYWMwMGI0OGI1MGZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTAyMCw2ICsxMDIwLDE1IEBACiAJCTcwRUNBNjA3MUFGREJFQTIwMDQ0
OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjAyMUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJl
Z2lzdHJ5LmNwcCAqLzsgfTsKIAkJNzBFQ0E2MDgxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRl
UmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcwRUNBNjAzMUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzBFQ0E2MDkxQUZEQkVB
MjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjA0MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1w
bGF0ZVJlZ2lzdHJ5S2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJN0I3MjNEQUQxQjU1RUUyQTAwOEE3Mjc5IC8qIFdhc21BU1RQYXJzZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCNzIzREFDMUI1
NUVFMjYwMDhBNzI3OSAvKiBXYXNtQVNUUGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0I3MjNEQUUxQjU1RUUyRTAwOEE3Mjc5IC8qIFdh
c21BU1RQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0I3MjNEQUIxQjU1RUUyNjAwOEE3Mjc5IC8qIFdhc21BU1RQYXJzZXIuY3BwICovOyB9
OworCQk3QkQxMEM0MjFCNEVENDNDMDBCRDU0MUEgLyogV2FzbUpJVENvbXBpbGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRDEwQzNEMUI0RUQ0
MzkwMEJENTQxQSAvKiBXYXNtSklUQ29tcGlsZXIuY3BwICovOyB9OworCQk3QkQxMEM0MzFCNEVE
NDQwMDBCRDU0MUEgLyogV2FzbUpJVENvbXBpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkQxMEMzRTFCNEVENDM5MDBCRDU0MUEgLyogV2FzbUpJ
VENvbXBpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJN0JEMTBDNDQxQjRFRDQ0NTAwQkQ1NDFBIC8qIFdhc21Nb2R1bGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JEMTBDM0YxQjRFRDQzOTAw
QkQ1NDFBIC8qIFdhc21Nb2R1bGUuY3BwICovOyB9OworCQk3QkQxMEM0NTFCNEVENDQ5MDBCRDU0
MUEgLyogV2FzbU1vZHVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0JEMTBDNDAxQjRFRDQzOTAwQkQ1NDFBIC8qIFdhc21Nb2R1bGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3QkQxMEM0NjFCNEVE
NDRFMDBCRDU0MUEgLyogV2FzbU9wY29kZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdCRDEwQzQxMUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNtT3Bjb2Rl
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdC
RjA1RTg0MUI1NkMwRkEwMDg4QUVGMSAvKiBXYXNtU3RhY2tIZWlnaHRDYWxjdWxhdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkYwNUU4MzFCNTZD
MEY4MDA4OEFFRjEgLyogV2FzbVN0YWNrSGVpZ2h0Q2FsY3VsYXRvci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCRjA1RTg1MUI1NkMxMDAwMDg4
QUVGMSAvKiBXYXNtU3RhY2tIZWlnaHRDYWxjdWxhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRjA1RTgyMUI1NkMwRjgwMDg4QUVGMSAvKiBX
YXNtU3RhY2tIZWlnaHRDYWxjdWxhdG9yLmNwcCAqLzsgfTsKIAkJN0MwMDhDREExODcxMjRCQjAw
OTU1QzI0IC8qIEpTUHJvbWlzZURlZmVycmVkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDA4Q0Q4MTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21p
c2VEZWZlcnJlZC5jcHAgKi87IH07CiAJCTdDMDA4Q0RCMTg3MTI0QkIwMDk1NUMyNCAvKiBKU1By
b21pc2VEZWZlcnJlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0MwMDhDRDkxODcxMjRCQjAwOTU1QzI0IC8qIEpTUHJvbWlzZURlZmVycmVkLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MwMDhDRTcx
ODc2MzFCNjAwOTU1QzI0IC8qIE1pY3JvdGFzay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwMDhDRTUxODc2MzFCNjAwOTU1QzI0IC8qIE1pY3JvdGFz
ay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0y
NzYyLDYgKzI3NzEsMTUgQEAKIAkJNzBFQ0E2MDIxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRl
UmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVtcGxh
dGVSZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwRUNBNjAzMUFG
REJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeUtleS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QjcyM0RBQjFCNTVFRTI2MDA4QTcyNzkgLyog
V2FzbUFTVFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
YXNtQVNUUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0I3MjNEQUMx
QjU1RUUyNjAwOEE3Mjc5IC8qIFdhc21BU1RQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2FzbUFTVFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3QkQxMEMzRDFCNEVENDM5MDBCRDU0MUEgLyogV2FzbUpJVENvbXBpbGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21KSVRDb21waWxlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCRDEwQzNFMUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNt
SklUQ29tcGlsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUpJVENv
bXBpbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCRDEwQzNGMUI0RUQ0Mzkw
MEJENTQxQSAvKiBXYXNtTW9kdWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdhc21Nb2R1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QkQx
MEM0MDFCNEVENDM5MDBCRDU0MUEgLyogV2FzbU1vZHVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXYXNtTW9kdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTdCRDEwQzQxMUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNtT3Bjb2Rlcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtT3Bjb2Rlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3QkYwNUU4MjFCNTZDMEY4MDA4OEFFRjEgLyogV2FzbVN0YWNrSGVpZ2h0Q2FsY3Vs
YXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtU3RhY2tI
ZWlnaHRDYWxjdWxhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0JGMDVF
ODMxQjU2QzBGODAwODhBRUYxIC8qIFdhc21TdGFja0hlaWdodENhbGN1bGF0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVN0YWNrSGVpZ2h0Q2FsY3VsYXRvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzAwOENEODE4NzEyNEJCMDA5NTVDMjQgLyog
SlNQcm9taXNlRGVmZXJyZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNQcm9taXNlRGVmZXJyZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QzAwOENEOTE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNQcm9taXNlRGVmZXJyZWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0MwMDhDRTUxODc2MzFCNjAwOTU1QzI0IC8qIE1pY3JvdGFzay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNaWNyb3Rhc2suaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2MTcsNiArMzYzNSw3IEBACiAJCQkJN0VGNkUwQkIwRUI3
QTFFQzAwNzlBRkFGIC8qIHJ1bnRpbWUgKi8sCiAJCQkJMTQxMjExMDAwQTQ4NzcyNjAwNDgwMjU1
IC8qIHRlc3RzICovLAogCQkJCTg2MDNDRUYwMTRDNzUzRUYwMEFFNTlFMyAvKiB0b29scyAqLywK
KwkJCQk3QkQxMEMzQzFCNEVENDFEMDBCRDU0MUEgLyogd2FzbSAqLywKIAkJCQk4NkVBQzQ4QzBG
OTNFOEI5MDA4RUM5NDggLyogeWFyciAqLywKIAkJCSk7CiAJCQluYW1lID0gSmF2YVNjcmlwdENv
cmU7CkBAIC00Mjc5LDYgKzQyOTgsMjIgQEAKIAkJCXBhdGggPSBkaXNhc3NlbWJsZXIvQVJNdjc7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk3QkQxMEMzQzFCNEVENDFEMDBC
RDU0MUEgLyogd2FzbSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAo
CisJCQkJN0I3MjNEQUIxQjU1RUUyNjAwOEE3Mjc5IC8qIFdhc21BU1RQYXJzZXIuY3BwICovLAor
CQkJCTdCNzIzREFDMUI1NUVFMjYwMDhBNzI3OSAvKiBXYXNtQVNUUGFyc2VyLmggKi8sCisJCQkJ
N0JEMTBDM0QxQjRFRDQzOTAwQkQ1NDFBIC8qIFdhc21KSVRDb21waWxlci5jcHAgKi8sCisJCQkJ
N0JEMTBDM0UxQjRFRDQzOTAwQkQ1NDFBIC8qIFdhc21KSVRDb21waWxlci5oICovLAorCQkJCTdC
RDEwQzNGMUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNtTW9kdWxlLmNwcCAqLywKKwkJCQk3QkQxMEM0
MDFCNEVENDM5MDBCRDU0MUEgLyogV2FzbU1vZHVsZS5oICovLAorCQkJCTdCRDEwQzQxMUI0RUQ0
MzkwMEJENTQxQSAvKiBXYXNtT3Bjb2Rlcy5oICovLAorCQkJCTdCRjA1RTgyMUI1NkMwRjgwMDg4
QUVGMSAvKiBXYXNtU3RhY2tIZWlnaHRDYWxjdWxhdG9yLmNwcCAqLywKKwkJCQk3QkYwNUU4MzFC
NTZDMEY4MDA4OEFFRjEgLyogV2FzbVN0YWNrSGVpZ2h0Q2FsY3VsYXRvci5oICovLAorCQkJKTsK
KwkJCXBhdGggPSB3YXNtOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJN0Uz
OUQ4MUQwRUMzOEVGQTAwM0FGMTFBIC8qIGJ5dGVjb21waWxlciAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC01ODgyLDYgKzU5MTcsNyBAQAogCQkJCTBGRDk0
OTg1MUE5N0RCOTYwMEUyODk2NiAvKiBKU0Z1bmN0aW9uTmFtZVNjb3BlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkVGQzlBQjE2ODFBM0I2MDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhv
bGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0Q0VENUYxOENFQTdBQjAwODAyRkUwIC8qIFBv
bHltb3JwaGljR2V0QnlJZExpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCRjA1RTg0MUI1NkMw
RkEwMDg4QUVGMSAvKiBXYXNtU3RhY2tIZWlnaHRDYWxjdWxhdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjIzNUJFRTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk1QzE0RUY5MEFGMDBDNzI1MzIgLyogREZHUGhhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MEVFMTlGNUI1QzQwMDk4RjVFQyAvKiBKU0NvbnRl
eHRSZWZJbnNwZWN0b3JTdXBwb3J0LmggaW4gSGVhZGVycyAqLywKQEAgLTYwMTEsNiArNjA0Nyw3
IEBACiAJCQkJQkMxOEM0MDUwRTE2RjVDRDAwQjM0NDYwIC8qIEZ1bmN0aW9uUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQ0JFMkNBRTE0RTk4NUFBMDAwNTkzQUQgLyogR0NBc3NlcnRp
b25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzMDE1QThEQ0UyMDA4RjM2M0UgLyogR0NB
d2FyZUpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QkQxMEM0NTFCNEVENDQ5
MDBCRDU0MUEgLyogV2FzbU1vZHVsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBFQzBFQzcxQUEw
RDdEQTAwQjZBQUZBIC8qIFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjJCNjZBQzE3QjZCNTNGMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5n
UmVmQ291bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjEwOSw2ICs2MTQ2LDcgQEAK
IAkJCQlGRUY2ODM1RjE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1YnNBUk12Ny5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRkVGNjgzNjExNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzWDg2LmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRUY2ODM2MDE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1YnNYODZf
NjQuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCNzIzREFEMUI1NUVFMkEwMDhBNzI3OSAvKiBXYXNt
QVNUUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRERCMUY2MzE4RDc3REJFMDA5QjU4QTgg
LyogT3BhcXVlUm9vdFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBNEFFMTAxNzk3M0I0RDAw
NTYxMkIxIC8qIEpJVFN0dWJzWDg2Q29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVFRjkx
RjE2ODc4RjdEMDAzRTVDMjUgLyogSklUVGh1bmtzLmggaW4gSGVhZGVycyAqLywKQEAgLTYxNDUs
NiArNjE4Myw3IEBACiAJCQkJQkMxOEM0MUQwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2xhc3NSZWYu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjEzMTY3QkFCRDcwMDZENzYwQSAvKiBKU0NvbnRl
eHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE3MTY3QkFCRUUwMDZENzYwQSAvKiBKU0Nv
bnRleHRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0JEMTBDNDMxQjRFRDQ0MDAwQkQ1
NDFBIC8qIFdhc21KSVRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MUUwRTE2
RjVDRDAwQjM0NDYwIC8qIEpTQ29udGV4dFJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4Q0Qx
RDgxMDhDRjkwMjAwODE2M0M2IC8qIEpTQ29udGV4dFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3MjAyOEI4MTc5NzYwMUUwMDk4MDI4QyAvKiBKU0NUZXN0UnVubmVyVXRpbHMuaCBp
biBIZWFkZXJzICovLApAQCAtNjE1NCw2ICs2MTkzLDcgQEAKIAkJCQk5Nzg4MDE0MTE0NzFBRDky
MDA0MUIwMTYgLyogSlNEYXRlTWF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJBN0Y2ODgxNjA0
MzJENDAwRjc2Qjk4IC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkUzQzYxNDE2N0JBQkQ3MDA2RDc2MEEgLyogSlNFeHBvcnQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTdCRDEwQzQ2MUI0RUQ0NEUwMEJENTQxQSAvKiBXYXNtT3Bjb2Rlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTdCNEFDQUYxNDg0QzlDRTAwQjM4QTM2IC8qIEpTRXhwb3J0TWFjcm9zLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJCNjZFRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDMyQXJy
YXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkYwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zs
b2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC03MTUyLDYgKzcxOTIsNyBAQAogCQkJCTBG
QTU4MUJBMTUwRTk1MkMwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODZFQzlEQ0YxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTdEODlDRkQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0JEMTBDNDIxQjRFRDQz
QzAwQkQ1NDFBIC8qIFdhc21KSVRDb21waWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4
MkU1NjE0MURBRjA4MDAxNzlDOTQgLyogREZHT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZEOEEzMjUxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBo
YXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFNTA2ODY3MUFFMjVFMjgwMDA5REFCNyAvKiBE
ZWZlcnJlZFNvdXJjZUR1bXAuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03MTg4LDYgKzcyMjksNyBA
QAogCQkJCTBGQzA5N0ExMTQ2QjI4Q0EwMENGMjQ0MiAvKiBERkdUaHVua3MuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY5M0I0QTkxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTcwOUZCODY3MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtT
ZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0JEMTBDNDQxQjRFRDQ0NTAwQkQ1NDFBIC8qIFdh
c21Nb2R1bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEzMjcxN0Q1MUY1NzAwQ0EyQzQw
IC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZEOEEzMjkxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjE3NjYyMTk2QjhGOUUwMDkxMDUyQSAv
KiBERkdQdXJlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03MzExLDYgKzczNTMsNyBAQAog
CQkJCUE1N0QyM0U1MTg5MENFQkYwMDMxQzdGQSAvKiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzI0Mzg3MTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzA5RkI4NjkxQUUz
MzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk3QkYwNUU4NTFCNTZDMTAwMDA4OEFFRjEgLyogV2FzbVN0YWNrSGVpZ2h0Q2FsY3VsYXRvci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTMyNDM4OTE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVj
dG9yRnJvbnRlbmREaXNwYXRjaGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTMyNDM4QjE4
NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1MEU0QjYxMTg4MDlERDUwMDY4QTQ2RCAvKiBJbnNwZWN0b3JSdW50aW1lQWdl
bnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NTI5LDYgKzc1NzIsNyBAQAogCQkJCTg2NDJDNTEw
MTUxQzA2QTkwMDQ2RDRFRiAvKiBSZWdFeHBDYWNoZWRSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQyODA4NDIxMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg2NDJDNTEyMTUxQzA4M0QwMDQ2RDRFRiAvKiBSZWdFeHBNYXRj
aGVzQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0I3MjNEQUUxQjU1RUUyRTAwOEE3Mjc5
IC8qIFdhc21BU1RQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDMxMDdFQzA5
MzAwMTNFN0IyIC8qIFJlZ0V4cE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0
NDEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNkIxQ0JEMTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBw
ZXJHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IDEyNDM5ZTA4Y2FlMTA4NjZlOTNkOWE3NDZmYzJj
NTdiYmZhODJkMGMuLjc0Yzk4ODI0NjZlZGFiNDY0OGNkYmU4MzMwMzc0NTlkYzMxMjY1NTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC04Niw2
ICs4Niw5IEBAIENTdHJpbmcgQ29kZUJsb2NrOjppbmZlcnJlZE5hbWUoKSBjb25zdAogICAgIGNh
c2UgRXZhbENvZGU6CiAgICAgICAgIHJldHVybiAiPGV2YWw+IjsKICAgICBjYXNlIEZ1bmN0aW9u
Q29kZToKKyAgICAgICAgLy8gRklYTUU6IGhhY2t5CisgICAgICAgIGlmIChvd25lckV4ZWN1dGFi
bGUoKS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiAiPHdl
YmFzc2VtYmx5PiI7CiAgICAgICAgIHJldHVybiBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
b3duZXJFeGVjdXRhYmxlKCkpLT5pbmZlcnJlZE5hbWUoKS51dGY4KCk7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgQ1JBU0goKTsKQEAgLTIxODMsNiArMjE4Niw2OCBAQCBDb2RlQmxvY2s6OkNvZGVC
bG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2Nr
KiB1bmxpbgogICAgIG1faGVhcC0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoc2l6ZW9mKENv
ZGVCbG9jaykgKyBtX2luc3RydWN0aW9ucy5zaXplKCkgKiBzaXplb2YoSW5zdHJ1Y3Rpb24pKTsK
IH0KIAorQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRh
YmxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIDogbV9nbG9iYWxPYmplY3Qo
Z2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCkKKyAgICAs
IG1faGVhcCgmbV9nbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkKKyAgICAsIG1fbnVtQ2FsbGVlUmVn
aXN0ZXJzKDApIC8vIEZJWE1FCisgICAgLCBtX251bVZhcnMoMCkgLy8gRklYTUUKKyAgICAsIG1f
aXNDb25zdHJ1Y3RvcihmYWxzZSkgLy8gRklYTUUKKyAgICAsIG1fc2hvdWxkQWx3YXlzQmVJbmxp
bmVkKHRydWUpCisgICAgLCBtX2RpZEZhaWxGVExDb21waWxhdGlvbihmYWxzZSkKKyAgICAsIG1f
aGFzQmVlbkNvbXBpbGVkV2l0aEZUTChmYWxzZSkKKyAgICAvLyAsIG1fdW5saW5rZWRDb2RlKG1f
Z2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrKQor
ICAgICwgbV9oYXNEZWJ1Z2dlclN0YXRlbWVudChmYWxzZSkKKyAgICAsIG1fc3RlcHBpbmdNb2Rl
KFN0ZXBwaW5nTW9kZURpc2FibGVkKQorICAgICwgbV9udW1CcmVha3BvaW50cygwKQorICAgICwg
bV9vd25lckV4ZWN1dGFibGUobV9nbG9iYWxPYmplY3QtPnZtKCksIG93bmVyRXhlY3V0YWJsZSwg
b3duZXJFeGVjdXRhYmxlKQorICAgICwgbV92bSgmbV9nbG9iYWxPYmplY3QtPnZtKCkpIC8vIEZJ
WE1FCisgICAgLCBtX3RoaXNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoKSkgLy8gRklYTUUKKyAg
ICAsIG1fc2NvcGVSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoKSkgLy8gRklYTUUKKyAgICAsIG1f
bGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpIC8vIEZJWE1FCisg
ICAgLCBtX2lzU3RyaWN0TW9kZShmYWxzZSkgLy8gRklYTUUKKyAgICAsIG1fbmVlZHNBY3RpdmF0
aW9uKGZhbHNlKQorICAgICwgbV9tYXlCZUV4ZWN1dGluZyhmYWxzZSkKKyAgICAsIG1fc291cmNl
KG51bGxwdHIpCisgICAgLCBtX3NvdXJjZU9mZnNldCgwKQorICAgICwgbV9maXJzdExpbmVDb2x1
bW5PZmZzZXQoMCkKKyAgICAsIG1fY29kZVR5cGUoRnVuY3Rpb25Db2RlKSAvLyBGSVhNRQorICAg
ICwgbV9vc3JFeGl0Q291bnRlcigwKQorICAgICwgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIo
MCkKKyAgICAsIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoMCkKKyNpZiBFTkFCTEUoSklU
KQorICAgICwgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZShERkc6OkNhcGFiaWxpdHlMZXZlbE5vdFNl
dCkKKyNlbmRpZgoreworICAgIG1fdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkLnN0b3JlKGZh
bHNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKworICAgIEFTU0VSVChtX2hlYXAtPmlz
RGVmZXJyZWQoKSk7CisKKyAgICAvKgorICAgIEFTU0VSVChtX3Njb3BlUmVnaXN0ZXIuaXNMb2Nh
bCgpKTsKKworICAgIGJvb2wgZGlkQ2xvbmVTeW1ib2xUYWJsZSA9IGZhbHNlOworCisgICAgaWYg
KFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5zeW1ib2xUYWJs
ZSgpKSB7CisgICAgICAgIGlmIChtX3ZtLT50eXBlUHJvZmlsZXIoKSkgeworICAgICAgICAgICAg
Q29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7CisgICAgICAg
ICAgICBzeW1ib2xUYWJsZS0+cHJlcGFyZUZvclR5cGVQcm9maWxpbmcobG9ja2VyKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChjb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBzeW1ib2xU
YWJsZS0+c2NvcGVTaXplKCkpIHsKKyAgICAgICAgICAgIG1fc3ltYm9sVGFibGUuc2V0KCptX3Zt
LCBtX293bmVyRXhlY3V0YWJsZS5nZXQoKSwgc3ltYm9sVGFibGUtPmNsb25lU2NvcGVQYXJ0KCpt
X3ZtKSk7CisgICAgICAgICAgICBkaWRDbG9uZVN5bWJvbFRhYmxlID0gdHJ1ZTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBtX3N5bWJvbFRhYmxlLnNldCgqbV92bSwgbV9vd25lckV4ZWN1
dGFibGUuZ2V0KCksIHN5bWJvbFRhYmxlKTsKKyAgICB9CisgICAgKi8KKworICAgIC8vIEZJWE1F
OgorICAgIHNldE51bVBhcmFtZXRlcnMoMCk7CisKKyAgICBtX2hlYXAtPm1fY29kZUJsb2Nrcy5h
ZGQodGhpcyk7CisgICAgbV9oZWFwLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChzaXplb2Yo
Q29kZUJsb2NrKSk7Cit9CisKIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiB7CiAgICAgaWYgKG1f
dm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikKQEAgLTMwNTcsNiArMzEyMiwxMSBAQCBDb2RlQmxv
Y2sqIEZ1bmN0aW9uQ29kZUJsb2NrOjpyZXBsYWNlbWVudCgpCiAgICAgcmV0dXJuIGpzQ2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvZGVCbG9ja0ZvcihtX2lz
Q29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOwogfQogCitDb2Rl
QmxvY2sqIFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpyZXBsYWNlbWVudCgpCit7CisgICAgcmV0dXJu
IGpzQ2FzdDxXZWJBc3NlbWJseUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvZGVC
bG9ja0ZvcihtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwp
OworfQorCiBERkc6OkNhcGFiaWxpdHlMZXZlbCBQcm9ncmFtQ29kZUJsb2NrOjpjYXBhYmlsaXR5
TGV2ZWxJbnRlcm5hbCgpCiB7CiAgICAgcmV0dXJuIERGRzo6cHJvZ3JhbUNhcGFiaWxpdHlMZXZl
bCh0aGlzKTsKQEAgLTMwNzMsNiArMzE0MywxMSBAQCBERkc6OkNhcGFiaWxpdHlMZXZlbCBGdW5j
dGlvbkNvZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKQogICAgICAgICByZXR1cm4g
REZHOjpmdW5jdGlvbkZvckNvbnN0cnVjdENhcGFiaWxpdHlMZXZlbCh0aGlzKTsKICAgICByZXR1
cm4gREZHOjpmdW5jdGlvbkZvckNhbGxDYXBhYmlsaXR5TGV2ZWwodGhpcyk7CiB9CisKK0RGRzo6
Q2FwYWJpbGl0eUxldmVsIFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpjYXBhYmlsaXR5TGV2ZWxJbnRl
cm5hbCgpCit7CisgICAgcmV0dXJuIERGRzo6Q2Fubm90Q29tcGlsZTsKK30KICNlbmRpZgogCiB2
b2lkIENvZGVCbG9jazo6amV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uUmVhc29uIHJlYXNvbiwg
UmVvcHRpbWl6YXRpb25Nb2RlIG1vZGUsIGNvbnN0IEZpcmVEZXRhaWwqIGRldGFpbCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRleCA2NWRhYjk1NWU2OGYx
NDc1N2M1YWIxYTI5ZTE5NzQyOGQwY2M4ZTk4Li5lNmUyODlkZmZiZjYxYzU4YmI4M2JiZTJiZjI0
ZTAwODdkMDJhZDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCkBAIC05Nyw2ICs5Nyw4IEBAIHByb3RlY3RlZDoKICAgICAgICAgCiAgICAgQ29kZUJsb2Nr
KFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqLCBK
U1Njb3BlKiwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4sIHVuc2lnbmVkIHNvdXJjZU9mZnNl
dCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KTsKIAorICAgIENvZGVCbG9jayhTY3Jp
cHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0Kik7CisKICAgICBX
cml0ZUJhcnJpZXI8SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0OwogICAgIEhlYXAqIG1f
aGVhcDsKIApAQCAtMzQ4LDcgKzM1MCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX25l
ZWRzQWN0aXZhdGlvbjsKICAgICB9CiAgICAgCi0gICAgQ29kZVR5cGUgY29kZVR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29kZVR5cGUoKTsgfQorICAgIENvZGVUeXBlIGNv
ZGVUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBoYWNreQorICAgICAgICBp
ZiAob3duZXJFeGVjdXRhYmxlKCktPmlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCkpCisgICAgICAg
ICAgICByZXR1cm4gRnVuY3Rpb25Db2RlOworICAgICAgICByZXR1cm4gbV91bmxpbmtlZENvZGUt
PmNvZGVUeXBlKCk7CisgICAgfQorCiAgICAgUHV0UHJvcGVydHlTbG90OjpDb250ZXh0IHB1dEJ5
SWRDb250ZXh0KCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChjb2RlVHlwZSgpID09IEV2YWxD
b2RlKQpAQCAtMTE0Miw2ICsxMTUxLDI3IEBAIHByb3RlY3RlZDoKICNlbmRpZgogfTsKIAorY2xh
c3MgV2ViQXNzZW1ibHlDb2RlQmxvY2sgOiBwdWJsaWMgQ29kZUJsb2NrIHsKK3B1YmxpYzoKKyAg
ICBXZWJBc3NlbWJseUNvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsIFdlYkFzc2VtYmx5Q29k
ZUJsb2NrJiBvdGhlcikKKyAgICAgICAgOiBDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrLCBvdGhl
cikKKyAgICB7CisgICAgfQorCisgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2soV2ViQXNzZW1ibHlF
eGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
CisgICAgICAgIDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0KQorICAg
IHsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkoKSBvdmVycmlkZSB7IH07CisKKyNpZiBFTkFCTEUoSklUKQorICAgIHZpcnR1YWwg
Q29kZUJsb2NrKiByZXBsYWNlbWVudCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgREZHOjpDYXBh
YmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKSBvdmVycmlkZTsKKyNlbmRpZgor
fTsKKwogaW5saW5lIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJh
bWUoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiB7CiAgICAgUkVMRUFTRV9BU1NF
UlQoaW5saW5lQ2FsbEZyYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCmluZGV4IDM4MDE1ZDJkODA0ZjkzNTkyMGY5NzU2YTcxY2EyZmRmZWExNzk1OTAu
LmIzOWI0ODVkZWJkYmNhY2RkMDU3YTNhNDUwNzJmOWMyMGE2OTJjNzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtNzc4LDcgKzc3OCw5IEBAIGlu
bGluZSBjaGFyKiBsaW5rRm9yKAogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHI7
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAwOwotICAgIGlmIChleGVjdXRhYmxlLT5pc0hv
c3RGdW5jdGlvbigpKQorICAgIGlmIChleGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJs
ZSgpKQorICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcigqdm0sIGtp
bmQsIEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCwgcmVnaXN0ZXJzKTsKKyAgICBlbHNlIGlmIChleGVj
dXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQogICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+
ZW50cnlwb2ludEZvcigqdm0sIGtpbmQsIE11c3RDaGVja0FyaXR5LCByZWdpc3RlcnMpOwogICAg
IGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9
IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwpAQCAtNzk1LDE2
ICs3OTcsMTkgQEAgaW5saW5lIGNoYXIqIGxpbmtGb3IoCiAgICAgICAgIH0KICAgICAgICAgY29k
ZUJsb2NrID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCk7CiAgICAgICAg
IEFyaXR5Q2hlY2tNb2RlIGFyaXR5OwotICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1Q
YXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby0+Y2FsbFR5cGUoKSA9PSBDYWxsTGlua0luZm86
OkNhbGxWYXJhcmdzIHx8IGNhbGxMaW5rSW5mby0+Y2FsbFR5cGUoKSA9PSBDYWxsTGlua0luZm86
OkNvbnN0cnVjdFZhcmFyZ3MpCisgICAgICAgIGlmIChleGVjQ2FsbGVlLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSkgfHwgKGNhbGxMaW5rSW5mbyAmJiAoY2FsbExpbmtJbmZvLT5jYWxsVHlwZSgpID09
IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3MgfHwgY2FsbExpbmtJbmZvLT5jYWxsVHlwZSgpID09
IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0VmFyYXJncykpKQogICAgICAgICAgICAgYXJpdHkgPSBN
dXN0Q2hlY2tBcml0eTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNo
ZWNrTm90UmVxdWlyZWQ7CiAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVu
dHJ5cG9pbnRGb3IoKnZtLCBraW5kLCBhcml0eSwgcmVnaXN0ZXJzKTsKICAgICB9Ci0gICAgaWYg
KCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCi0gICAgICAgIGNhbGxMaW5rSW5mby0+c2V0U2Vl
bigpOwotICAgIGVsc2UKLSAgICAgICAgbGlua0ZvcihleGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZv
LCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0ciwga2luZCwgcmVnaXN0ZXJzKTsKKyAgICAvLyBU
T0RPOiBzdXBwb3J0IHJlcGF0Y2hpbmcKKyAgICBpZiAoY2FsbExpbmtJbmZvKSB7CisgICAgICAg
IGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQorICAgICAgICAgICAgY2FsbExpbmtJbmZv
LT5zZXRTZWVuKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxpbmtGb3IoZXhlY0NhbGxl
ZSwgKmNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIsIGtpbmQsIHJlZ2lz
dGVycyk7CisgICAgfQogICAgIAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihj
b2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCAz
ODBkODliNWQzNTkyNzRhMjc0ODI5MTgzMmNlZWQ4ODhhNjNjMjM2Li45ODM5NDNlZDFlYzRkOTdm
YWFhMjQzMDMyMDExNGZhMzM1NWRmYzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtNDksNiAr
NDksNyBAQAogI2luY2x1ZGUgIlN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIgogI2luY2x1ZGUg
IlRlc3RSdW5uZXJVdGlscy5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgorI2luY2x1
ZGUgIldhc21KSVRDb21waWxlci5oIgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdGRp
by5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtNDkxLDYgKzQ5Miw3IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmV0dXJuVHlwZUZvcihFeGVjU3RhdGUq
KTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRHVtcEJhc2lj
QmxvY2tFeGVjdXRpb25SYW5nZXMoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkhhc0Jhc2ljQmxvY2tFeGVjdXRlZChFeGVjU3RhdGUqKTsK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRW5hYmxlRXhjZXB0
aW9uRnV6eihFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uTG9hZFdlYkFzc2VtYmx5KEV4ZWNTdGF0ZSopOwogCiAjaWYgRU5BQkxFKFNBTVBM
SU5HX0ZMQUdTKQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25T
ZXRTYW1wbGluZ0ZsYWdzKEV4ZWNTdGF0ZSopOwpAQCAtNjUzLDYgKzY1NSw4IEBAIHByb3RlY3Rl
ZDoKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJoYXNCYXNpY0Jsb2NrRXhlY3V0ZWQiLCBmdW5j
dGlvbkhhc0Jhc2ljQmxvY2tFeGVjdXRlZCwgMik7CiAKICAgICAgICAgYWRkRnVuY3Rpb24odm0s
ICJlbmFibGVFeGNlcHRpb25GdXp6IiwgZnVuY3Rpb25FbmFibGVFeGNlcHRpb25GdXp6LCAwKTsK
KworICAgICAgICBhZGRGdW5jdGlvbih2bSwgImxvYWRXZWJBc3NlbWJseSIsIGZ1bmN0aW9uTG9h
ZFdlYkFzc2VtYmx5LCAxKTsKICAgICAgICAgCiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29u
c3RydWN0RW1wdHlBcnJheShnbG9iYWxFeGVjKCksIDApOwogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7ICsraSkKQEAgLTExODIsNiArMTE4NiwxNiBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRW5hYmxlRXhjZXB0aW9uRnV6eihF
eGVjU3RhdGUqKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9
CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2FkV2ViQXNzZW1ibHko
RXhlY1N0YXRlKiBleGVjKQoreworICAgIFN0cmluZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50
KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICBWZWN0b3I8Y2hhcj4gYnVmZmVy
OworICAgIGlmICghZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShmaWxlTmFtZSwgYnVmZmVy
KSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT52bSgpLnRocm93RXhjZXB0
aW9uKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQ291bGQgbm90IG9wZW4g
ZmlsZS4iKSkpKTsKKyAgICBXYXNtOjpNb2R1bGUqIG1vZHVsZSA9IFdhc206OmNvbXBpbGUoZXhl
YywgYnVmZmVyKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG1vZHVsZSk7Cit9CisKIC8v
IFVzZSBTRUggZm9yIFJlbGVhc2UgYnVpbGRzIG9ubHkgdG8gZ2V0IHJpZCBvZiB0aGUgY3Jhc2gg
cmVwb3J0IGRpYWxvZwogLy8gKGx1Y2tpbHkgdGhlIHNhbWUgdGVzdHMgZmFpbCBpbiBSZWxlYXNl
IGFuZCBEZWJ1ZyBidWlsZHMgc28gZmFyKS4gTmVlZCB0bwogLy8gYmUgaW4gYSBzZXBhcmF0ZSBt
YWluIGZ1bmN0aW9uIGJlY2F1c2UgdGhlIGpzY21haW4gZnVuY3Rpb24gcmVxdWlyZXMgb2JqZWN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAppbmRl
eCA5Y2NjMWNlNDk3ODhkNzEwZmM2OWE2OTE1NDM0MjcxYThjMDlkMmU0Li5iNDllYWFjNTFhZDY5
MThlMDFjZGEzZTgzZWVhMWUyM2I5MWQyZGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKQEAgLTExMTksNyArMTExOSw5IEBAIGlubGluZSBT
bG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSW5zdHJ1
Y3Rpb24qIHBjLCBDb2RlCiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHI7
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAwOwotICAgIGlmIChleGVjdXRhYmxlLT5pc0hv
c3RGdW5jdGlvbigpKQorICAgIGlmIChleGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJs
ZSgpKQorICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcih2bSwga2lu
ZCwgQXJpdHlDaGVja05vdFJlcXVpcmVkLCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVk
KTsKKyAgICBlbHNlIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQogICAgICAgICBj
b2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcih2bSwga2luZCwgTXVzdENoZWNrQXJp
dHksIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOwogICAgIGVsc2UgewogICAgICAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmNwcAppbmRleCA1NTI0MGZkOTFmN2JjNzg0MmYxM2U1OTI4MWQx
MGQyMWQ4NmM0ZjUwLi5hYmYyZDE1NjU0YzY2ZTA2ZmYxYWVhN2FjMGJjNDlmNTIxNmQzZmQ0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcApAQCAtMTQ5
LDYgKzE0OSwyMSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKENvZGVCbG9j
ayogZ2VuZXJpY0NvZGVCbG9jaykKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIAorICAgIGlm
IChpc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKSB7CisgICAgICAgIFdlYkFzc2VtYmx5RXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxXZWJBc3NlbWJseUV4ZWN1dGFibGUqPih0aGlzKTsK
KyAgICAgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PFdl
YkFzc2VtYmx5Q29kZUJsb2NrKj4oZ2VuZXJpY0NvZGVCbG9jayk7CisKKyAgICAgICAgQVNTRVJU
KGtpbmQgPT0gQ29kZUZvckNhbGwpOworCisgICAgICAgIGV4ZWN1dGFibGUtPm1fY29kZUJsb2Nr
Rm9yQ2FsbCA9IGNvZGVCbG9jazsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiB0aGlzIGlz
IGp1c3QgdG8gbWFrZSBpc0hvc3RGdW5jdGlvbigpIGhhcHB5LgorICAgICAgICAvLyBCdXQgdGhp
cyB3aWxsIG1ha2UgaXNIb3N0RnVuY3Rpb24oKSByZXR1cm4gdHJ1ZS4KKyAgICAgICAgbV9udW1Q
YXJhbWV0ZXJzRm9yQ2FsbCA9IDA7CisgICAgICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVj
dCA9IDA7CisgICAgfSBlbHNlIHsKKworICAgICAgICAvLyBGSVhNRTogbmVlZCB0byBkZWFsIHdp
dGggY29kZVR5cGUoKQogICAgIHN3aXRjaCAoZ2VuZXJpY0NvZGVCbG9jay0+Y29kZVR5cGUoKSkg
ewogICAgIGNhc2UgR2xvYmFsQ29kZTogewogICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZSogZXhl
Y3V0YWJsZSA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpOwpAQCAtMTkyLDYgKzIw
Nyw4IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUoQ29kZUJsb2NrKiBnZW5l
cmljQ29kZUJsb2NrKQogICAgIGlmIChvbGRDb2RlQmxvY2spCiAgICAgICAgIG9sZENvZGVCbG9j
ay0+dW5saW5rSW5jb21pbmdDYWxscygpOwogCisgICAgfQorICAgIAogICAgIERlYnVnZ2VyKiBk
ZWJ1Z2dlciA9IGdlbmVyaWNDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpOwog
ICAgIGlmIChkZWJ1Z2dlcikKICAgICAgICAgZGVidWdnZXItPnJlZ2lzdGVyQ29kZUJsb2NrKGdl
bmVyaWNDb2RlQmxvY2spOwpAQCAtMjI4LDYgKzI0NSw4IEBAIFJlZlB0cjxDb2RlQmxvY2s+IFNj
cmlwdEV4ZWN1dGFibGU6Om5ld0NvZGVCbG9ja0ZvcigKICAgICAgICAgICAgIGV4ZWN1dGFibGUt
PnNvdXJjZSgpLnByb3ZpZGVyKCksIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0Q29sdW1uKCkp
KTsKICAgICB9CiAgICAgCisgICAgQVNTRVJUKCFpc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKTsK
KyAgICAKICAgICBSRUxFQVNFX0FTU0VSVChjbGFzc0luZm8oKSA9PSBGdW5jdGlvbkV4ZWN1dGFi
bGU6OmluZm8oKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoZnVuY3Rpb24pOwogICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlz
KTsKQEAgLTMyMyw2ICszNDIsOCBAQCBzdGF0aWMgdm9pZCBzZXR1cEpJVChWTSYgdm0sIENvZGVC
bG9jayogY29kZUJsb2NrKQogSlNPYmplY3QqIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JF
eGVjdXRpb25JbXBsKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNGdW5jdGlvbiogZnVuY3Rpb24s
IEpTU2NvcGUqIHNjb3BlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CisgICAgQVNT
RVJUKCFpc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKTsKKyAgICAKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAKQEAgLTQyNSw2ICs0
NDYsMzUgQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQog
ICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpLT5GdW5jdGlvbkV4ZWN1
dGFibGU6On5GdW5jdGlvbkV4ZWN1dGFibGUoKTsKIH0KIAorY29uc3QgQ2xhc3NJbmZvIFdlYkFz
c2VtYmx5RXhlY3V0YWJsZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHlFeGVjdXRhYmxlIiwgJlNj
cmlwdEV4ZWN1dGFibGU6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJs
eUV4ZWN1dGFibGUpIH07CisKK1dlYkFzc2VtYmx5RXhlY3V0YWJsZTo6V2ViQXNzZW1ibHlFeGVj
dXRhYmxlKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQorICAgIDogU2NyaXB0RXhl
Y3V0YWJsZSh2bS53ZWJBc3NlbWJseUV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIHZtLCBzb3Vy
Y2UsIC8qaXNJblN0cmljdENvbnRleHQqLyBmYWxzZSApCit7CisgICAgLyoKKyAgICBSRUxFQVNF
X0FTU0VSVCghc291cmNlLmlzTnVsbCgpKTsKKyAgICBBU1NFUlQoc291cmNlLmxlbmd0aCgpKTsK
KyAgICBtX2ZpcnN0TGluZSA9IGZpcnN0TGluZTsKKyAgICBtX2xhc3RMaW5lID0gbGFzdExpbmU7
CisgICAgbV9zdGFydENvbHVtbiA9IHN0YXJ0Q29sdW1uOworICAgIG1fZW5kQ29sdW1uID0gZW5k
Q29sdW1uOworICAgIG1fcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0ID0gdW5saW5rZWRFeGVjdXRhYmxl
LT5wYXJhbWV0ZXJzU3RhcnRPZmZzZXQoKTsKKyAgICBtX3R5cGVQcm9maWxpbmdTdGFydE9mZnNl
dCA9IHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCk7CisgICAg
bV90eXBlUHJvZmlsaW5nRW5kT2Zmc2V0ID0gdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmls
aW5nRW5kT2Zmc2V0KCk7CisgICAgKi8KK30KKwordm9pZCBXZWJBc3NlbWJseUV4ZWN1dGFibGU6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CisgICAgbV9zaW5nbGV0b25GdW5jdGlvbi5zZXQodm0sIHRoaXMsIEluZmVycmVkVmFsdWU6OmNy
ZWF0ZSh2bSkpOworfQorCit2b2lkIFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6ZGVzdHJveShKU0Nl
bGwqIGNlbGwpCit7CisgICAgc3RhdGljX2Nhc3Q8V2ViQXNzZW1ibHlFeGVjdXRhYmxlKj4oY2Vs
bCktPldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6fldlYkFzc2VtYmx5RXhlY3V0YWJsZSgpOworfQor
CiBpbmxpbmUgY29uc3QgY2hhciogc2FtcGxpbmdEZXNjcmlwdGlvbihKSVRDb2RlOjpKSVRUeXBl
IGppdFR5cGUpCiB7CiAgICAgc3dpdGNoIChqaXRUeXBlKSB7CkBAIC02MTksNiArNjY5LDQzIEBA
IEZ1bmN0aW9uRXhlY3V0YWJsZSogRnVuY3Rpb25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZSgK
ICAgICByZXR1cm4gdW5saW5rZWRFeGVjdXRhYmxlLT5saW5rKGV4ZWMudm0oKSwgc291cmNlLCBv
dmVycmlkZUxpbmVOdW1iZXIpOwogfQogCitXZWJBc3NlbWJseUNvZGVCbG9jayogV2ViQXNzZW1i
bHlFeGVjdXRhYmxlOjpiYXNlbGluZUNvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQpCit7CisgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwpOworCisgICAgV2ViQXNz
ZW1ibHlDb2RlQmxvY2sqIHJlc3VsdCA9IG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKTsKKyAgICBp
ZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdl
YkFzc2VtYmx5Q29kZUJsb2NrKj4ocmVzdWx0LT5iYXNlbGluZUFsdGVybmF0aXZlKCkpOworfQor
Cit2b2lkIFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogdGhp
c09iamVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJseUV4ZWN1dGFibGUqPihjZWxsKTsKKyAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgU2NyaXB0RXhl
Y3V0YWJsZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICBpZiAodGhp
c09iamVjdC0+bV9jb2RlQmxvY2tGb3JDYWxsKQorICAgICAgICB0aGlzT2JqZWN0LT5tX2NvZGVC
bG9ja0ZvckNhbGwtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX3NpbmdsZXRvbkZ1bmN0aW9uKTsKK30KKworU3ltYm9sVGFibGUqIFdl
YkFzc2VtYmx5RXhlY3V0YWJsZTo6c3ltYm9sVGFibGUoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBr
aW5kKQoreworICAgIHJldHVybiBjb2RlQmxvY2tGb3Ioa2luZCktPnN5bWJvbFRhYmxlKCk7Cit9
CisKK3ZvaWQgV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpjbGVhckNvZGUoKQoreworICAgIC8vIEZJ
WE1FOiBoYWNreQorICAgIC8vIG1fY29kZUJsb2NrRm9yQ2FsbCA9IG51bGxwdHI7CisgICAgLy8g
QmFzZTo6Y2xlYXJDb2RlKCk7Cit9CisKK3ZvaWQgV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjp1bmxp
bmtDYWxscygpCit7CisgICAgLy8gRklYTUU6IGhhY2t5Cit9CisKIHZvaWQgRXhlY3V0YWJsZUJh
c2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBFeGVjdXRhYmxlQmFzZSog
cmVhbFRoaXMgPSBjb25zdF9jYXN0PEV4ZWN1dGFibGVCYXNlKj4odGhpcyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKaW5kZXggMWM3YzgwMDAzZDJhMzJiZDZh
MzExZGFjMGRlNTM5MDFhOGFkNzgxZi4uZWQ4MjI5YTE5ZTkyNDZlNzQ1ZjM2MDgwZjg1MDE4MmQ3
NDRiNDhiYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0
YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaApA
QCAtNTAsNiArNTAsNyBAQCBjbGFzcyBFdmFsQ29kZUJsb2NrOwogY2xhc3MgRnVuY3Rpb25Db2Rl
QmxvY2s7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBQcm9ncmFtQ29kZUJs
b2NrOworY2xhc3MgV2ViQXNzZW1ibHlDb2RlQmxvY2s7CiBjbGFzcyBKU1Njb3BlOwogICAgIAog
ZW51bSBDb21waWxhdGlvbktpbmQgeyBGaXJzdENvbXBpbGF0aW9uLCBPcHRpbWl6aW5nQ29tcGls
YXRpb24gfTsKQEAgLTk4LDYgKzk5LDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVy
biB0eXBlKCkgPT0gRnVuY3Rpb25FeGVjdXRhYmxlVHlwZTsKICAgICB9CisgICAgYm9vbCBpc1dl
YkFzc2VtYmx5RXhlY3V0YWJsZSgpCisgICAgeworICAgICAgICByZXR1cm4gdHlwZSgpID09IFdl
YkFzc2VtYmx5RXhlY3V0YWJsZVR5cGU7CisgICAgfQogICAgIGJvb2wgaXNQcm9ncmFtRXhlY3V0
YWJsZSgpCiAgICAgewogICAgICAgICByZXR1cm4gdHlwZSgpID09IFByb2dyYW1FeGVjdXRhYmxl
VHlwZTsKQEAgLTY3OCw2ICs2ODMsMTIxIEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPElu
ZmVycmVkVmFsdWU+IG1fc2luZ2xldG9uRnVuY3Rpb247CiB9OwogCitjbGFzcyBXZWJBc3NlbWJs
eUV4ZWN1dGFibGUgZmluYWwgOiBwdWJsaWMgU2NyaXB0RXhlY3V0YWJsZSB7CisgICAgZnJpZW5k
IGNsYXNzIEpJVDsKKyAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworcHVi
bGljOgorICAgIHR5cGVkZWYgU2NyaXB0RXhlY3V0YWJsZSBCYXNlOworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0
dXJlSXNJbW1vcnRhbDsKKworICAgIHN0YXRpYyBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIGNyZWF0
ZShWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKKyAgICB7CisgICAgICAgIFdlYkFz
c2VtYmx5RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PFdlYkFzc2VtYmx5RXhlY3V0YWJsZT4odm0uaGVhcCkpIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSh2
bSwgc291cmNlKTsKKyAgICAgICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24odm0pOworICAg
ICAgICByZXR1cm4gZXhlY3V0YWJsZTsKKyAgICB9CisgICAgLy8gc3RhdGljIFdlYkFzc2VtYmx5
RXhlY3V0YWJsZSogZnJvbUdsb2JhbENvZGUoY29uc3QgSWRlbnRpZmllciYgbmFtZSwgRXhlY1N0
YXRlJiwgY29uc3QgU291cmNlQ29kZSYsIEpTT2JqZWN0KiYgZXhjZXB0aW9uLCBpbnQgb3ZlcnJp
ZGVMaW5lTnVtYmVyKTsKKworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisgICAg
ICAgIAorICAgIGJvb2wgaXNHZW5lcmF0ZWRGb3JDYWxsKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2NvZGVCbG9ja0ZvckNhbGw7CisgICAgfQorCisgICAgV2ViQXNzZW1ibHlDb2Rl
QmxvY2sqIGNvZGVCbG9ja0ZvckNhbGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29kZUJs
b2NrRm9yQ2FsbC5nZXQoKTsKKyAgICB9CisKKyAgICBib29sIGlzR2VuZXJhdGVkRm9yQ29uc3Ry
dWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBX
ZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrRm9yQ29uc3RydWN0KCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAgICAgCisgICAgYm9vbCBpc0dlbmVyYXRl
ZEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgeworICAgICAgICBpZiAoa2lu
ZCA9PSBDb2RlRm9yQ2FsbCkKKyAgICAgICAgICAgIHJldHVybiBpc0dlbmVyYXRlZEZvckNhbGwo
KTsKKyAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CisgICAgICAgIHJl
dHVybiBpc0dlbmVyYXRlZEZvckNvbnN0cnVjdCgpOworICAgIH0KKyAgICAgICAgCisgICAgV2Vi
QXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpCisgICAgeworICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAgICAgICAgICAg
IHJldHVybiBjb2RlQmxvY2tGb3JDYWxsKCk7CisgICAgICAgIEFTU0VSVChraW5kID09IENvZGVG
b3JDb25zdHJ1Y3QpOworICAgICAgICByZXR1cm4gY29kZUJsb2NrRm9yQ29uc3RydWN0KCk7Cisg
ICAgfQorCisgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKENv
ZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgICAgICAKKyAgICBXZWJBc3NlbWJseUNvZGVCbG9j
ayogcHJvZmlsZWRDb2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9yKGtpbmQpOworICAgIH0KKwor
ICAgIFJlZlB0cjxUeXBlU2V0PiByZXR1cm5TdGF0ZW1lbnRUeXBlU2V0KCkgCisgICAgeworICAg
ICAgICBpZiAoIW1fcmV0dXJuU3RhdGVtZW50VHlwZVNldCkKKyAgICAgICAgICAgIG1fcmV0dXJu
U3RhdGVtZW50VHlwZVNldCA9IFR5cGVTZXQ6OmNyZWF0ZSgpOworCisgICAgICAgIHJldHVybiBt
X3JldHVyblN0YXRlbWVudFR5cGVTZXQ7CisgICAgfQorICAgICAgICAKKyAgICAvLyBGdW5jdGlv
bk1vZGUgZnVuY3Rpb25Nb2RlKCkgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmZ1bmN0
aW9uTW9kZSgpOyB9CisgICAgLy8gYm9vbCBpc0J1aWx0aW5GdW5jdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5pc0J1aWx0aW5GdW5jdGlvbigpOyB9CisgICAgLy8g
Ym9vbCBpc0NsYXNzQ29uc3RydWN0b3JGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5r
ZWRFeGVjdXRhYmxlLT5pc0NsYXNzQ29uc3RydWN0b3JGdW5jdGlvbigpOyB9CisgICAgLy8gY29u
c3QgSWRlbnRpZmllciYgbmFtZSgpIHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5uYW1l
KCk7IH0KKyAgICAvLyBjb25zdCBJZGVudGlmaWVyJiBpbmZlcnJlZE5hbWUoKSB7IHJldHVybiBt
X3VubGlua2VkRXhlY3V0YWJsZS0+aW5mZXJyZWROYW1lKCk7IH0KKyAgICAvLyBKU1N0cmluZyog
bmFtZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPm5hbWVWYWx1
ZSgpOyB9CisgICAgLy8gc2l6ZV90IHBhcmFtZXRlckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV91
bmxpbmtlZEV4ZWN1dGFibGUtPnBhcmFtZXRlckNvdW50KCk7IH0gLy8gRXhjbHVkaW5nICd0aGlz
JyEKKyAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUoQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7
CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykKKyAgICB7CisgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90bywgVHlwZUluZm8oV2Vi
QXNzZW1ibHlFeGVjdXRhYmxlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0K
KworICAgIHVuc2lnbmVkIHBhcmFtZXRlcnNTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
cGFyYW1ldGVyc1N0YXJ0T2Zmc2V0OyB9CisKKyAgICAvKgorICAgIHZvaWQgb3ZlcnJpZGVQYXJh
bWV0ZXJBbmRUeXBlUHJvZmlsaW5nU3RhcnRFbmRPZmZzZXRzKHVuc2lnbmVkIHBhcmFtZXRlcnNT
dGFydE9mZnNldCwgdW5zaWduZWQgdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0LCB1bnNpZ25lZCB0
eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KQorICAgIHsKKyAgICAgICAgbV9wYXJhbWV0ZXJzU3RhcnRP
ZmZzZXQgPSBwYXJhbWV0ZXJzU3RhcnRPZmZzZXQ7CisgICAgICAgIG1fdHlwZVByb2ZpbGluZ1N0
YXJ0T2Zmc2V0ID0gdHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0OworICAgICAgICBtX3R5cGVQcm9m
aWxpbmdFbmRPZmZzZXQgPSB0eXBlUHJvZmlsaW5nRW5kT2Zmc2V0OworICAgIH0KKyAgICAqLwor
CisgICAgREVDTEFSRV9JTkZPOworICAgICAgICAKKyAgICB2b2lkIHVubGlua0NhbGxzKCk7CisK
KyAgICB2b2lkIGNsZWFyQ29kZSgpOworICAgIAorICAgIEluZmVycmVkVmFsdWUqIHNpbmdsZXRv
bkZ1bmN0aW9uKCkgeyByZXR1cm4gbV9zaW5nbGV0b25GdW5jdGlvbi5nZXQoKTsgfQorCitwcml2
YXRlOgorICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZShWTSYsIGNvbnN0IFNvdXJjZUNvZGUmKTsK
KyAgICAKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisKKyAgICBmcmllbmQgY2xhc3Mg
U2NyaXB0RXhlY3V0YWJsZTsKKworICAgIFJlZlB0cjxXZWJBc3NlbWJseUNvZGVCbG9jaz4gbV9j
b2RlQmxvY2tGb3JDYWxsOworICAgIFJlZlB0cjxUeXBlU2V0PiBtX3JldHVyblN0YXRlbWVudFR5
cGVTZXQ7CisgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQ7CisgICAgV3JpdGVC
YXJyaWVyPEluZmVycmVkVmFsdWU+IG1fc2luZ2xldG9uRnVuY3Rpb247Cit9OworCiBpbmxpbmUg
dm9pZCBFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlVmlydHVhbChFeGVjdXRhYmxlQmFzZSogZXhl
Y3V0YWJsZSkKIHsKICAgICBzd2l0Y2ggKGV4ZWN1dGFibGUtPnR5cGUoKSkgewpAQCAtNjg3LDYg
KzgwNyw4IEBAIGlubGluZSB2b2lkIEV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGVWaXJ0dWFsKEV4
ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKQogICAgICAgICByZXR1cm4ganNDYXN0PFByb2dyYW1F
eGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNsZWFyQ29kZSgpOwogICAgIGNhc2UgRnVuY3Rpb25F
eGVjdXRhYmxlVHlwZToKICAgICAgICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUq
PihleGVjdXRhYmxlKS0+Y2xlYXJDb2RlKCk7CisgICAgY2FzZSBXZWJBc3NlbWJseUV4ZWN1dGFi
bGVUeXBlOgorICAgICAgICByZXR1cm4ganNDYXN0PFdlYkFzc2VtYmx5RXhlY3V0YWJsZSo+KGV4
ZWN1dGFibGUpLT5jbGVhckNvZGUoKTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4ganND
YXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Y2xlYXJDb2RlKCk7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAppbmRleCAxYjhj
NDA3ZWMzZDQ5NDliNjA2ZWM5NWI5YWM5YjRlMmRmYzY4MTJmLi43ZGM2NzIzYjRhNmJmZTNhYTg0
NDgyZWNkNTJmOTQ0OWVhM2Y5YTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmNwcApAQCAtNjAsMTAgKzYwLDExIEBAIGJvb2wgSlNGdW5jdGlvbjo6aXNI
b3N0RnVuY3Rpb25Ob25JbmxpbmUoKSBjb25zdAogICAgIHJldHVybiBpc0hvc3RGdW5jdGlvbigp
OwogfQogCi1KU0Z1bmN0aW9uKiBKU0Z1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBGdW5jdGlvbkV4
ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3BlKQorSlNGdW5jdGlvbiogSlNGdW5j
dGlvbjo6Y3JlYXRlKFZNJiB2bSwgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUsIEpTU2NvcGUq
IHNjb3BlKQogewogICAgIEpTRnVuY3Rpb24qIHJlc3VsdCA9IGNyZWF0ZUltcGwodm0sIGV4ZWN1
dGFibGUsIHNjb3BlKTsKLSAgICBleGVjdXRhYmxlLT5zaW5nbGV0b25GdW5jdGlvbigpLT5ub3Rp
ZnlXcml0ZSh2bSwgcmVzdWx0LCAiQWxsb2NhdGluZyBhIGZ1bmN0aW9uIik7CisgICAgaWYgKGV4
ZWN1dGFibGUtPmlzRnVuY3Rpb25FeGVjdXRhYmxlKCkpCisgICAgICAgIHN0YXRpY19jYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5zaW5nbGV0b25GdW5jdGlvbigpLT5ub3Rp
ZnlXcml0ZSh2bSwgcmVzdWx0LCAiQWxsb2NhdGluZyBhIGZ1bmN0aW9uIik7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGdW5jdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5o
CmluZGV4IDBiODdkNzVjOTE0NTBjNWFmMWFhZWQyN2E2MWE3NDhlZjgwZjA5M2UuLjIzYzdmYjE3
ODliMzkxNzA2NmE3M2Q1MDYyN2RjMmZkYzJjOWNmYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgIHN0
YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVXaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBv
aW50KFZNJiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwgSlNTY29wZSopOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIGlu
dCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgTmF0aXZlU3RkRnVuY3Rpb24mJiwgSW50cmlu
c2ljID0gTm9JbnRyaW5zaWMsIE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUNvbnN0cnVjdG9yID0gY2Fs
bEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IpOwogCi0gICAgc3RhdGljIEpTRnVuY3Rpb24qIGNy
ZWF0ZShWTSYsIEZ1bmN0aW9uRXhlY3V0YWJsZSosIEpTU2NvcGUqKTsKKyAgICBzdGF0aWMgSlNG
dW5jdGlvbiogY3JlYXRlKFZNJiwgRXhlY3V0YWJsZUJhc2UqLCBKU1Njb3BlKik7CiAKICAgICBz
dGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlQnVpbHRpbkZ1bmN0aW9uKFZNJiwgRnVuY3Rpb25FeGVj
dXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRl
QnVpbHRpbkZ1bmN0aW9uKFZNJiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3Qq
LCBjb25zdCBTdHJpbmcmIG5hbWUpOwpAQCAtMTQwLDcgKzE0MCw3IEBAIHB1YmxpYzoKIAogcHJv
dGVjdGVkOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTRnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9i
amVjdCosIFN0cnVjdHVyZSopOwotICAgIEpTRnVuY3Rpb24oVk0mLCBGdW5jdGlvbkV4ZWN1dGFi
bGUqLCBKU1Njb3BlKik7CisgICAgSlNGdW5jdGlvbihWTSYsIEV4ZWN1dGFibGVCYXNlKiwgSlNT
Y29wZSopOwogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUq
LCBpbnQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIHVzaW5nIEJhc2U6OmZpbmlz
aENyZWF0aW9uOwpAQCAtMTU5LDcgKzE1OSw3IEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6Ci0gICAg
c3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZUltcGwoVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3BlKQorICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVh
dGVJbXBsKFZNJiB2bSwgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3Bl
KQogICAgIHsKICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU0Z1bmN0aW9uPih2bS5oZWFwKSkgSlNGdW5jdGlvbih2bSwgZXhlY3V0YWJs
ZSwgc2NvcGUpOwogICAgICAgICBBU1NFUlQoZnVuY3Rpb24tPnN0cnVjdHVyZSgpLT5nbG9iYWxP
YmplY3QoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1
bmN0aW9uSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bklubGluZXMuaAppbmRleCBmNmM2ZDU4ZWM2ZTVjMTE2NGNiMjdmYTVlNDE2MThiNGI4MTQyZjAy
Li5iOTMwNjA3NTk5YTdjMmExZGQwMzA0ODBhNzJiZThhZDNkYmQyMDRkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmgKQEAgLTM4LDcg
KzM4LDcgQEAgaW5saW5lIEpTRnVuY3Rpb24qIEpTRnVuY3Rpb246OmNyZWF0ZVdpdGhJbnZhbGlk
YXRlZFJlYWxsb2NhdGlvbldhdGNocG9pbnQoCiAgICAgcmV0dXJuIGNyZWF0ZUltcGwodm0sIGV4
ZWN1dGFibGUsIHNjb3BlKTsKIH0KIAotaW5saW5lIEpTRnVuY3Rpb246OkpTRnVuY3Rpb24oVk0m
IHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3BlKQoraW5s
aW5lIEpTRnVuY3Rpb246OkpTRnVuY3Rpb24oVk0mIHZtLCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0
YWJsZSwgSlNTY29wZSogc2NvcGUpCiAgICAgOiBCYXNlKHZtLCBzY29wZSwgc2NvcGUtPmdsb2Jh
bE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpKQogICAgICwgbV9leGVjdXRhYmxlKHZtLCB0
aGlzLCBleGVjdXRhYmxlKQogICAgICwgbV9yYXJlRGF0YSgpCkBAIC01NCw2ICs1NCw4IEBAIGlu
bGluZSBGdW5jdGlvbkV4ZWN1dGFibGUqIEpTRnVuY3Rpb246OmpzRXhlY3V0YWJsZSgpIGNvbnN0
CiBpbmxpbmUgYm9vbCBKU0Z1bmN0aW9uOjppc0hvc3RGdW5jdGlvbigpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKG1fZXhlY3V0YWJsZSk7CisgICAgaWYgKG1fZXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJs
eUV4ZWN1dGFibGUoKSkgLy8gRklYTUU6IGhhY2t5CisgICAgICAgIHJldHVybiB0cnVlOwogICAg
IHJldHVybiBtX2V4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgKaW5kZXggNDAzMjZjZTBmMzI5ZmE3YzdiYmM5OWY0NDY0
MjhmZTk2YzkxMjRiMy4uNzZlZmU4MjI0MmFhZTEzZTBlNjE1NGFmMDUyMmM2ZDg2NzAzMDY1ZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgKQEAgLTc0LDYgKzc0LDggQEAg
ZW51bSBKU1R5cGUgOiB1aW50OF90IHsKIAogICAgIE5hbWVTY29wZU9iamVjdFR5cGUsCiAKKyAg
ICBXZWJBc3NlbWJseUV4ZWN1dGFibGVUeXBlLCAvLyBGSVhNRTogTW92ZSBpdCBhYm92ZS4KKwog
ICAgIEdsb2JhbE9iamVjdFR5cGUsCiAgICAgQWN0aXZhdGlvbk9iamVjdFR5cGUsCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCA3Njc0MWRkOGFlYTM3ZmY1N2NjYTRjZjYz
NmJmYzMyYmI0MjljYzQxLi40ZDVmNWRmMzU2OWFjNjI1ZjkyMzBjOTRkYjI3ODg4MzA4YjliY2I0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0yMjAsNiArMjIwLDcgQEAg
Vk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIGV2YWxFeGVjdXRh
YmxlU3RydWN0dXJlLnNldCgqdGhpcywgRXZhbEV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKICAgICBwcm9ncmFtRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQo
KnRoaXMsIFByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVs
bCgpKSk7CiAgICAgZnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgRnVuY3Rp
b25FeGVjdXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAg
d2ViQXNzZW1ibHlFeGVjdXRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgV2ViQXNzZW1ibHlFeGVj
dXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgcmVnRXhw
U3RydWN0dXJlLnNldCgqdGhpcywgUmVnRXhwOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CiAgICAgc3ltYm9sU3RydWN0dXJlLnNldCgqdGhpcywgU3ltYm9sOjpjcmVhdGVT
dHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgc3ltYm9sVGFibGVTdHJ1Y3R1cmUu
c2V0KCp0aGlzLCBTeW1ib2xUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggZjc4ZjllYjk2NDYwYWU5ZmRi
ZmY5MTY5YzI4NGE4NTg0ODE2YzczOS4uMzczZDQwZGM3Zjk4ZTVlYzU4NTY4ZDRiYjViMzZkNGZm
OTExYzZjMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC0yNTksNiArMjU5LDcg
QEAgcHVibGljOgogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGV2YWxFeGVjdXRhYmxlU3RydWN0dXJl
OwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb2dyYW1FeGVjdXRhYmxlU3RydWN0dXJlOwogICAg
IFN0cm9uZzxTdHJ1Y3R1cmU+IGZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZTsKKyAgICBTdHJv
bmc8U3RydWN0dXJlPiB3ZWJBc3NlbWJseUV4ZWN1dGFibGVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25n
PFN0cnVjdHVyZT4gcmVnRXhwU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN5bWJv
bFN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBzeW1ib2xUYWJsZVN0cnVjdHVyZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BU1RQYXJzZXIuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFTVFBhcnNlci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZDc5NmEwNTg3ODQ0YjE5MDEzZmY5ZTA4ZDA4NzMxNTQ3NDRkYjMyZQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BU1RQYXJzZXIuY3BwCkBAIC0w
LDAgKzEsODI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21BU1RQYXJzZXIuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXYXNtIHsKKworZW51bSBjbGFzcyBMaW5lYXJNZW1v
cnlUeXBlIDogdW5zaWduZWQgeworICAgIEk4LAorICAgIFM4LAorICAgIFU4LAorICAgIEkxNiwK
KyAgICBTMTYsCisgICAgVTE2LAorICAgIEkzMiwKKyAgICBGMzIsCisgICAgRjY0Cit9OworCit2
b2lkIEFTVFBhcnNlcjo6cGFyc2Uoc2l6ZV90IGZ1bmN0aW9uSW5kZXgpCit7CisgICAgcGFyc2VT
aWduYXR1cmUoZnVuY3Rpb25JbmRleCk7CisgICAgcGFyc2VWYXJzKCk7CisgICAgcGFyc2VTdG10
TGlzdCgpOworfQorCit2b2lkIEFTVFBhcnNlcjo6cGFyc2VTaWduYXR1cmUoc2l6ZV90IGZ1bmN0
aW9uSW5kZXgpCit7CisgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBtX21vZHVsZS0+
bV9zaWduYXR1cmVzW21fbW9kdWxlLT5tX2Z1bmNTaWduYXR1cmVzW2Z1bmN0aW9uSW5kZXhdXTsK
KworICAgIG1fY3VycmVudFJldHVyblR5cGUgPSBzaWduYXR1cmUucmV0dXJuVHlwZTsKKworICAg
IGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJndW1lbnRzID0gc2lnbmF0dXJlLmFyZ3VtZW50czsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7ICsraSkKKyAgICAgICAg
bV9jdXJyZW50TG9jYWxUeXBlcy5hcHBlbmQoYXJndW1lbnRzW2ldKTsKK30KKwordm9pZCBBU1RQ
YXJzZXI6OnBhcnNlVmFycygpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZJMzJWYXJzID0gMDsK
KyAgICB1aW50MzJfdCBudW1iZXJPZkYzMlZhcnMgPSAwOworICAgIHVpbnQzMl90IG51bWJlck9m
RjY0VmFycyA9IDA7CisgICAgCisgICAgVmFyVHlwZXMgdmFyVHlwZXM7CisgICAgVmFyVHlwZXNX
aXRoSW1tIHZhclR5cGVzV2l0aEltbTsKKyAgICB1aW50OF90IGltbTsKKyAgICBpZiAobV9tb2R1
bGUtPm1fcmVhZGVyLmNvZGUoJnZhclR5cGVzLCAmdmFyVHlwZXNXaXRoSW1tLCAmaW1tKSkgewor
ICAgICAgICBpZiAodmFyVHlwZXMgJiBWYXJUeXBlczo6STMyKQorICAgICAgICAgICAgbnVtYmVy
T2ZJMzJWYXJzID0gbV9tb2R1bGUtPm1fcmVhZGVyLmltbVUzMigpOworICAgICAgICBpZiAodmFy
VHlwZXMgJiBWYXJUeXBlczo6RjMyKQorICAgICAgICAgICAgbnVtYmVyT2ZGMzJWYXJzID0gbV9t
b2R1bGUtPm1fcmVhZGVyLmltbVUzMigpOworICAgICAgICBpZiAodmFyVHlwZXMgJiBWYXJUeXBl
czo6RjY0KQorICAgICAgICAgICAgbnVtYmVyT2ZGNjRWYXJzID0gbV9tb2R1bGUtPm1fcmVhZGVy
LmltbVUzMigpOworICAgIH0gZWxzZQorICAgICAgICBudW1iZXJPZkkzMlZhcnMgPSBpbW07Cisg
ICAgCisgICAgdWludDMyX3QgbnVtYmVyT2ZWYXJzID0gbnVtYmVyT2ZJMzJWYXJzICsgbnVtYmVy
T2ZGMzJWYXJzICsgbnVtYmVyT2ZGNjRWYXJzOworICAgIGlmIChudW1iZXJPZlZhcnMgPiAwKSB7
CisgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkkzMlZhcnM7ICsraSkK
KyAgICAgICAgICAgIG1fY3VycmVudExvY2FsVHlwZXMuYXBwZW5kKFR5cGU6OkkzMik7CisgICAg
ICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkYzMlZhcnM7ICsraSkKKyAgICAg
ICAgICAgIG1fY3VycmVudExvY2FsVHlwZXMuYXBwZW5kKFR5cGU6OkYzMik7CisgICAgICAgIGZv
ciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkY2NFZhcnM7ICsraSkKKyAgICAgICAgICAg
IG1fY3VycmVudExvY2FsVHlwZXMuYXBwZW5kKFR5cGU6OkY2NCk7CisgICAgfQorfQorCit2b2lk
IEFTVFBhcnNlcjo6cGFyc2VTdG10KCkKK3sKKyAgICBTdG10IHN0bXQ7CisgICAgU3RtdFdpdGhJ
bW0gc3RtdFdpdGhJbW07CisgICAgdWludDhfdCBpbW07CisgICAgaWYgKG1fbW9kdWxlLT5tX3Jl
YWRlci5jb2RlKCZzdG10LCAmc3RtdFdpdGhJbW0sICZpbW0pKSB7CisgICAgICAgIHN3aXRjaCAo
c3RtdCkgeworICAgICAgICBjYXNlIFN0bXQ6OlNldExvYzoKKyAgICAgICAgICAgIHBhcnNlU2V0
TG9jYWwoMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdG10OjpTZXRHbG86
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNl
IFN0bXQ6OkkzMlN0b3JlODoKKyAgICAgICAgICAgIHBhcnNlU3RvcmUoUmV0dXJuVHlwZTo6STMy
LCBMaW5lYXJNZW1vcnlUeXBlOjpJOCwgZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgU3RtdDo6STMyU3RvcmVPZmY4OgorICAgICAgICAgICAgcGFyc2VTdG9yZShSZXR1
cm5UeXBlOjpJMzIsIExpbmVhck1lbW9yeVR5cGU6Okk4LCB0cnVlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFN0bXQ6OkkzMlN0b3JlMTY6CisgICAgICAgICAgICBwYXJzZVN0
b3JlKFJldHVyblR5cGU6OkkzMiwgTGluZWFyTWVtb3J5VHlwZTo6STE2LCBmYWxzZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdG10OjpJMzJTdG9yZU9mZjE2OgorICAgICAg
ICAgICAgcGFyc2VTdG9yZShSZXR1cm5UeXBlOjpJMzIsIExpbmVhck1lbW9yeVR5cGU6OkkxNiwg
dHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdG10OjpJMzJTdG9yZTMy
OgorICAgICAgICAgICAgcGFyc2VTdG9yZShSZXR1cm5UeXBlOjpJMzIsIExpbmVhck1lbW9yeVR5
cGU6OkkzMiwgZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RtdDo6
STMyU3RvcmVPZmYzMjoKKyAgICAgICAgICAgIHBhcnNlU3RvcmUoUmV0dXJuVHlwZTo6STMyLCBM
aW5lYXJNZW1vcnlUeXBlOjpJMzIsIHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgU3RtdDo6RjMyU3RvcmU6CisgICAgICAgICAgICBwYXJzZVN0b3JlKFJldHVyblR5cGU6
OkYzMiwgTGluZWFyTWVtb3J5VHlwZTo6RjMyLCBmYWxzZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBTdG10OjpGMzJTdG9yZU9mZjoKKyAgICAgICAgICAgIHBhcnNlU3RvcmUo
UmV0dXJuVHlwZTo6RjMyLCBMaW5lYXJNZW1vcnlUeXBlOjpGMzIsIHRydWUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RtdDo6RjY0U3RvcmU6CisgICAgICAgICAgICBwYXJz
ZVN0b3JlKFJldHVyblR5cGU6OkY2NCwgTGluZWFyTWVtb3J5VHlwZTo6RjY0LCBmYWxzZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdG10OjpGNjRTdG9yZU9mZjoKKyAgICAg
ICAgICAgIHBhcnNlU3RvcmUoUmV0dXJuVHlwZTo6RjY0LCBMaW5lYXJNZW1vcnlUeXBlOjpGNjQs
IHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RtdDo6Q2FsbEludDoK
KyAgICAgICAgICAgIHBhcnNlQ2FsbEludGVybmFsKFJldHVyblR5cGU6OlZvaWQpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RtdDo6Q2FsbEluZDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgU3RtdDo6Q2FsbEltcDoK
KyAgICAgICAgICAgIHBhcnNlQ2FsbEltcG9ydChSZXR1cm5UeXBlOjpWb2lkKTsgLy8gRklYTUU6
IElzIGl0IHJlYWxseSBWb2lkPworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3Rt
dDo6UmV0OgorICAgICAgICAgICAgcGFyc2VSZXR1cm5TdG10KCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGNhc2UgU3RtdDo6QmxvY2s6CisgICAgICAgICAgICBwYXJzZUJsb2NrU3Rt
dCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6OklmVGhlbjoKKyAg
ICAgICAgICAgIHBhcnNlSWZTdG10KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNh
c2UgU3RtdDo6SWZFbHNlOgorICAgICAgICAgICAgcGFyc2VJZkVsc2VTdG10KCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU3RtdDo6V2hpbGU6CisgICAgICAgICAgICBwYXJz
ZVdoaWxlU3RtdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6OkRv
OgorICAgICAgICAgICAgcGFyc2VEb1N0bXQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgY2FzZSBTdG10OjpMYWJlbDoKKyAgICAgICAgICAgIHBhcnNlTGFiZWxTdG10KCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU3RtdDo6QnJlYWs6CisgICAgICAgICAgICBw
YXJzZUJyZWFrU3RtdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6
OkJyZWFrTGFiZWw6CisgICAgICAgICAgICBwYXJzZUJyZWFrTGFiZWxTdG10KCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU3RtdDo6Q29udGludWU6CisgICAgICAgICAgICBw
YXJzZUNvbnRpbnVlU3RtdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3Rt
dDo6Q29udGludWVMYWJlbDoKKyAgICAgICAgICAgIHBhcnNlQ29udGludWVMYWJlbFN0bXQoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdG10OjpTd2l0Y2g6CisgICAgICAg
ICAgICBwYXJzZVN3aXRjaFN0bXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIHN3aXRjaCAoc3RtdFdpdGhJbW0pIHsKKyAgICAgICAg
Y2FzZSBTdG10V2l0aEltbTo6U2V0TG9jOgorICAgICAgICAgICAgcGFyc2VTZXRMb2NhbChpbW0p
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RtdFdpdGhJbW06OlNldEdsbzoK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQVNUUGFyc2VyOjpwYXJzZUdldExvY2Fs
KHVpbnQzMl90KQoreworfQorCit2b2lkIEFTVFBhcnNlcjo6cGFyc2VHZXRMb2NhbCgpCit7Cisg
ICAgdWludDMyX3QgaW1tID0gbV9tb2R1bGUtPm1fcmVhZGVyLmltbVUzMigpOworICAgIHBhcnNl
R2V0TG9jYWwoaW1tKTsKK30KKwordm9pZCBBU1RQYXJzZXI6OnBhcnNlU2V0TG9jYWwodWludDMy
X3QgaW1tKQoreworICAgIFR5cGUgdHlwZSA9IG1fY3VycmVudExvY2FsVHlwZXNbaW1tXTsKKyAg
ICBwYXJzZUV4cHIoUmV0dXJuVHlwZSh0eXBlKSk7Cit9CisKK3ZvaWQgQVNUUGFyc2VyOjpwYXJz
ZVNldExvY2FsKCkKK3sKKyAgICB1aW50MzJfdCBpbW0gPSBtX21vZHVsZS0+bV9yZWFkZXIuaW1t
VTMyKCk7CisgICAgcGFyc2VTZXRMb2NhbChpbW0pOworfQorCit2b2lkIEFTVFBhcnNlcjo6cGFy
c2VBcnJheUJ1ZmZlck9mZnNldChib29sIGhhc09mZnNldCkKK3sKKyAgICBpZiAoaGFzT2Zmc2V0
KQorICAgICAgICBtX21vZHVsZS0+bV9yZWFkZXIuaW1tVTMyKCk7CisgICAgdWludDMyX3QgdTMy
OworICAgIGlmICghbV9tb2R1bGUtPm1fcmVhZGVyLmlmSTMyTGl0KG1fbW9kdWxlLT5tX2NvbnN0
YW50STMycywgJnUzMikpCisgICAgICAgIHBhcnNlRXhwckkzMigpOworfQorICAgIAordm9pZCBB
U1RQYXJzZXI6OnBhcnNlTG9hZChSZXR1cm5UeXBlLCBMaW5lYXJNZW1vcnlUeXBlLCBib29sIGhh
c09mZnNldCkKK3sKKyAgICBwYXJzZUFycmF5QnVmZmVyT2Zmc2V0KGhhc09mZnNldCk7Cit9CisK
K3ZvaWQgQVNUUGFyc2VyOjpwYXJzZVN0b3JlKFJldHVyblR5cGUgcmV0dXJuVHlwZSwgTGluZWFy
TWVtb3J5VHlwZSwgYm9vbCBoYXNPZmZzZXQpCit7CisgICAgcGFyc2VBcnJheUJ1ZmZlck9mZnNl
dChoYXNPZmZzZXQpOworICAgIHBhcnNlRXhwcihyZXR1cm5UeXBlKTsKK30KKwordm9pZCBBU1RQ
YXJzZXI6OnBhcnNlUmV0dXJuU3RtdCgpCit7CisgICAgc3dpdGNoIChtX2N1cnJlbnRSZXR1cm5U
eXBlKSB7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpJMzI6CisgICAgICAgIHBhcnNlRXhwcihSZXR1
cm5UeXBlOjpJMzIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJldHVyblR5cGU6OkY2NDoK
KyAgICAgICAgcGFyc2VFeHByKFJldHVyblR5cGU6OkY2NCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUmV0dXJuVHlwZTo6Vm9pZDoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgQVNU
UGFyc2VyOjpwYXJzZVN0bXRMaXN0KCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZlN0bXRzID0g
bV9tb2R1bGUtPm1fcmVhZGVyLmltbVUzMigpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkg
PCBudW1iZXJPZlN0bXRzOyArK2kpCisgICAgICAgIHBhcnNlU3RtdCgpOworfQorCit2b2lkIEFT
VFBhcnNlcjo6cGFyc2VCbG9ja1N0bXQoKQoreworICAgIHBhcnNlU3RtdExpc3QoKTsKK30KKwor
dm9pZCBBU1RQYXJzZXI6OnBhcnNlSWZTdG10KCkKK3sKKyAgICBwYXJzZUV4cHIoUmV0dXJuVHlw
ZTo6STMyKTsKKyAgICBwYXJzZVN0bXQoKTsKK30KKwordm9pZCBBU1RQYXJzZXI6OnBhcnNlSWZF
bHNlU3RtdCgpCit7CisgICAgcGFyc2VFeHByKFJldHVyblR5cGU6OkkzMik7CisgICAgcGFyc2VT
dG10KCk7CisgICAgcGFyc2VTdG10KCk7Cit9CisKK3ZvaWQgQVNUUGFyc2VyOjpwYXJzZVdoaWxl
U3RtdCgpCit7CisgICAgcGFyc2VFeHByKFJldHVyblR5cGU6OkkzMik7CisgICAgcGFyc2VTdG10
KCk7Cit9CisKK3ZvaWQgQVNUUGFyc2VyOjpwYXJzZURvU3RtdCgpCit7CisgICAgcGFyc2VTdG10
KCk7CisgICAgcGFyc2VFeHByKFJldHVyblR5cGU6OkkzMik7Cit9CisKK3ZvaWQgQVNUUGFyc2Vy
OjpwYXJzZUxhYmVsU3RtdCgpCit7CisgICAgcGFyc2VTdG10KCk7Cit9CisKK3ZvaWQgQVNUUGFy
c2VyOjpwYXJzZUJyZWFrU3RtdCgpCit7Cit9CisKK3ZvaWQgQVNUUGFyc2VyOjpwYXJzZUJyZWFr
TGFiZWxTdG10KCkKK3sKKyAgICBtX21vZHVsZS0+bV9yZWFkZXIuaW1tVTMyKCk7Cit9CisKK3Zv
aWQgQVNUUGFyc2VyOjpwYXJzZUNvbnRpbnVlU3RtdCgpCit7Cit9CisKK3ZvaWQgQVNUUGFyc2Vy
OjpwYXJzZUNvbnRpbnVlTGFiZWxTdG10KCkKK3sKKyAgICBtX21vZHVsZS0+bV9yZWFkZXIuaW1t
VTMyKCk7Cit9CisKK3ZvaWQgQVNUUGFyc2VyOjpwYXJzZVN3aXRjaFN0bXQoKQoreworICAgIHVp
bnQzMl90IG51bWJlck9mQ2FzZXMgPSBtX21vZHVsZS0+bV9yZWFkZXIuaW1tVTMyKCk7CisgICAg
cGFyc2VFeHByKFJldHVyblR5cGU6OkkzMik7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBp
IDwgbnVtYmVyT2ZDYXNlczsgKytpKSB7CisgICAgICAgIHN3aXRjaCAobV9tb2R1bGUtPm1fcmVh
ZGVyLnN3aXRjaENhc2UoKSkgeworICAgICAgICBjYXNlIFN3aXRjaENhc2U6OkNhc2UwOgorICAg
ICAgICAgICAgbV9tb2R1bGUtPm1fcmVhZGVyLmltbVMzMigpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgU3dpdGNoQ2FzZTo6Q2FzZTE6CisgICAgICAgICAgICBtX21vZHVsZS0+
bV9yZWFkZXIuaW1tUzMyKCk7CisgICAgICAgICAgICBwYXJzZVN0bXQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFN3aXRjaENhc2U6OkNhc2VOOgorICAgICAgICAgICAgbV9t
b2R1bGUtPm1fcmVhZGVyLmltbVMzMigpOworICAgICAgICAgICAgcGFyc2VTdG10TGlzdCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3dpdGNoQ2FzZTo6RGVmYXVsdDA6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTd2l0Y2hDYXNlOjpEZWZhdWx0MToKKyAg
ICAgICAgICAgIHBhcnNlU3RtdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
U3dpdGNoQ2FzZTo6RGVmYXVsdE46CisgICAgICAgICAgICBwYXJzZVN0bXRMaXN0KCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQVNUUGFyc2Vy
OjpwYXJzZUV4cHIoUmV0dXJuVHlwZSByZXR1cm5UeXBlKQoreworICAgIHN3aXRjaCAocmV0dXJu
VHlwZSkgeworICAgIGNhc2UgUmV0dXJuVHlwZTo6STMyOgorICAgICAgICBwYXJzZUV4cHJJMzIo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpGNjQ6CisgICAgICAgIHBh
cnNlRXhwckY2NCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJldHVyblR5cGU6OlZvaWQ6
CisgICAgICAgIHBhcnNlRXhwclZvaWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQg
QVNUUGFyc2VyOjpwYXJzZUV4cHJJMzIoKQoreworICAgIEkzMiBpMzI7CisgICAgSTMyV2l0aElt
bSBpMzJXaXRoSW1tOworICAgIHVpbnQ4X3QgaW1tOworCisgICAgaWYgKG1fbW9kdWxlLT5tX3Jl
YWRlci5jb2RlKCZpMzIsICZpMzJXaXRoSW1tLCAmaW1tKSkgeworICAgICAgICBzd2l0Y2ggKGkz
MikgeworICAgICAgICBjYXNlIEkzMjo6TGl0UG9vbDoKKyAgICAgICAgICAgIHBhcnNlTGl0UG9v
bChSZXR1cm5UeXBlOjpJMzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMy
OjpMaXRJbW06CisgICAgICAgICAgICBwYXJzZUxpdEltbShSZXR1cm5UeXBlOjpJMzIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpHZXRMb2M6CisgICAgICAgICAgICBw
YXJzZUdldExvY2FsKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6Okdl
dEdsbzoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IGNhc2UgSTMyOjpTZXRMb2M6CisgICAgICAgICAgICBwYXJzZVNldExvY2FsKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlNldEdsbzoKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgSTMyOjpTTG9hZDg6CisgICAg
ICAgICAgICBwYXJzZUxvYWQoUmV0dXJuVHlwZTo6STMyLCBMaW5lYXJNZW1vcnlUeXBlOjpTOCwg
ZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpTTG9hZE9mZjg6
CisgICAgICAgICAgICBwYXJzZUxvYWQoUmV0dXJuVHlwZTo6STMyLCBMaW5lYXJNZW1vcnlUeXBl
OjpTOCwgdHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlVMb2Fk
ODoKKyAgICAgICAgICAgIHBhcnNlTG9hZChSZXR1cm5UeXBlOjpJMzIsIExpbmVhck1lbW9yeVR5
cGU6OlU4LCBmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlVM
b2FkT2ZmODoKKyAgICAgICAgICAgIHBhcnNlTG9hZChSZXR1cm5UeXBlOjpJMzIsIExpbmVhck1l
bW9yeVR5cGU6OlU4LCB0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkz
Mjo6U0xvYWQxNjoKKyAgICAgICAgICAgIHBhcnNlTG9hZChSZXR1cm5UeXBlOjpJMzIsIExpbmVh
ck1lbW9yeVR5cGU6OlMxNiwgZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSTMyOjpTTG9hZE9mZjE2OgorICAgICAgICAgICAgcGFyc2VMb2FkKFJldHVyblR5cGU6Okkz
MiwgTGluZWFyTWVtb3J5VHlwZTo6UzE2LCB0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEkzMjo6VUxvYWQxNjoKKyAgICAgICAgICAgIHBhcnNlTG9hZChSZXR1cm5UeXBl
OjpJMzIsIExpbmVhck1lbW9yeVR5cGU6OlUxNiwgZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSTMyOjpVTG9hZE9mZjE2OgorICAgICAgICAgICAgcGFyc2VMb2FkKFJl
dHVyblR5cGU6OkkzMiwgTGluZWFyTWVtb3J5VHlwZTo6VTE2LCB0cnVlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6TG9hZDMyOgorICAgICAgICAgICAgcGFyc2VMb2Fk
KFJldHVyblR5cGU6OkkzMiwgTGluZWFyTWVtb3J5VHlwZTo6STMyLCBmYWxzZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkxvYWRPZmYzMjoKKyAgICAgICAgICAgIHBh
cnNlTG9hZChSZXR1cm5UeXBlOjpJMzIsIExpbmVhck1lbW9yeVR5cGU6OkkzMiwgdHJ1ZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlN0b3JlODoKKyAgICAgICAgICAg
IHBhcnNlU3RvcmUoUmV0dXJuVHlwZTo6STMyLCBMaW5lYXJNZW1vcnlUeXBlOjpJOCwgZmFsc2Up
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpTdG9yZU9mZjg6CisgICAg
ICAgICAgICBwYXJzZVN0b3JlKFJldHVyblR5cGU6OkkzMiwgTGluZWFyTWVtb3J5VHlwZTo6STgs
IHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpTdG9yZTE2Ogor
ICAgICAgICAgICAgcGFyc2VTdG9yZShSZXR1cm5UeXBlOjpJMzIsIExpbmVhck1lbW9yeVR5cGU6
OkkxNiwgZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpTdG9y
ZU9mZjE2OgorICAgICAgICAgICAgcGFyc2VTdG9yZShSZXR1cm5UeXBlOjpJMzIsIExpbmVhck1l
bW9yeVR5cGU6OkkxNiwgdHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
MzI6OlN0b3JlMzI6CisgICAgICAgICAgICBwYXJzZVN0b3JlKFJldHVyblR5cGU6OkkzMiwgTGlu
ZWFyTWVtb3J5VHlwZTo6STMyLCBmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJMzI6OlN0b3JlT2ZmMzI6CisgICAgICAgICAgICBwYXJzZVN0b3JlKFJldHVyblR5cGU6
OkkzMiwgTGluZWFyTWVtb3J5VHlwZTo6STMyLCB0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEkzMjo6Q2FsbEludDoKKyAgICAgICAgICAgIHBhcnNlQ2FsbEludGVybmFs
KFJldHVyblR5cGU6OkkzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6
OkNhbGxJbmQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICBjYXNlIEkzMjo6Q2FsbEltcDoKKyAgICAgICAgICAgIHBhcnNlQ2FsbEltcG9ydChSZXR1
cm5UeXBlOjpJMzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpDb25k
OgorICAgICAgICAgICAgcGFyc2VDb25kKFJldHVyblR5cGU6OkkzMik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkNvbW1hOgorICAgICAgICAgICAgcGFyc2VDb21tYShS
ZXR1cm5UeXBlOjpJMzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpG
cm9tRjMyOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgY2FzZSBJMzI6OkZyb21GNjQ6CisgICAgICAgICAgICBwYXJzZUZyb21GNjRJMzIoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6TmVnOgorICAgICAgICBjYXNlIEkz
Mjo6Qml0Tm90OgorICAgICAgICBjYXNlIEkzMjo6Q2x6OgorICAgICAgICBjYXNlIEkzMjo6TG9n
aWNOb3Q6CisgICAgICAgIGNhc2UgSTMyOjpBYnM6CisgICAgICAgICAgICBwYXJzZVVuYXJ5T3BJ
MzIoaTMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6QWRkOgorICAg
ICAgICBjYXNlIEkzMjo6U3ViOgorICAgICAgICBjYXNlIEkzMjo6TXVsOgorICAgICAgICBjYXNl
IEkzMjo6U0RpdjoKKyAgICAgICAgY2FzZSBJMzI6OlNNb2Q6CisgICAgICAgIGNhc2UgSTMyOjpC
aXRPcjoKKyAgICAgICAgY2FzZSBJMzI6OkJpdEFuZDoKKyAgICAgICAgY2FzZSBJMzI6OkJpdFhv
cjoKKyAgICAgICAgY2FzZSBJMzI6OkxzaDoKKyAgICAgICAgY2FzZSBJMzI6OkFyaXRoUnNoOgor
ICAgICAgICBjYXNlIEkzMjo6TG9naWNSc2g6CisgICAgICAgICAgICBwYXJzZUJpbmFyeU9wSTMy
KGkzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlVEaXY6CisgICAg
ICAgIGNhc2UgSTMyOjpVTW9kOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgY2FzZSBJMzI6OkVxSTMyOgorICAgICAgICAgICAgcGFyc2VSZWxhdGlv
bmFsT3BJMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEkzMjo6RXFGMzI6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICBjYXNlIEkzMjo6RXFGNjQ6CisgICAgICAgICAgICBwYXJzZVJlbGF0
aW9uYWxPcEY2NChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgSTMyOjpORXFJMzI6CisgICAgICAgICAgICBwYXJzZVJlbGF0aW9u
YWxPcEkzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSTMyOjpORXFGMzI6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBjYXNlIEkzMjo6TkVxRjY0OgorICAgICAgICAgICAgcGFyc2VS
ZWxhdGlvbmFsT3BGNjQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6U0xlVGhJMzI6CisgICAgICAgICAgICBwYXJz
ZVJlbGF0aW9uYWxPcEkzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4pOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpVTGVUaEkzMjoKKyAgICAgICAgICAgIHBhcnNlUmVs
YXRpb25hbE9wSTMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdyk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBJMzI6OkxlVGhGMzI6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNlIEkzMjo6TGVUaEY2NDoKKyAgICAgICAgICAgIHBh
cnNlUmVsYXRpb25hbE9wRjY0KE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlNMZUVxSTMyOgorICAgICAgICAgICAg
cGFyc2VSZWxhdGlvbmFsT3BJMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVhbCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlVMZUVxSTMyOgorICAgICAgICAg
ICAgcGFyc2VSZWxhdGlvbmFsT3BJMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkxlRXFGMzI6CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNlIEkzMjo6TGVFcUY2
NDoKKyAgICAgICAgICAgIHBhcnNlUmVsYXRpb25hbE9wRjY0KE1hY3JvQXNzZW1ibGVyOjpEb3Vi
bGVMZXNzVGhhbk9yRXF1YWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMy
OjpTR3JUaEkzMjoKKyAgICAgICAgICAgIHBhcnNlUmVsYXRpb25hbE9wSTMyKE1hY3JvQXNzZW1i
bGVyOjpHcmVhdGVyVGhhbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6
OlVHclRoSTMyOgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3BJMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6R3JUaEYz
MjoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNh
c2UgSTMyOjpHclRoRjY0OgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3BGNjQoTWFjcm9B
c3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEkzMjo6U0dyRXFJMzI6CisgICAgICAgICAgICBwYXJzZVJlbGF0aW9uYWxPcEkzMihN
YWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEkzMjo6VUdyRXFJMzI6CisgICAgICAgICAgICBwYXJzZVJlbGF0aW9uYWxP
cEkzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEkzMjo6R3JFcUYzMjoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgSTMyOjpHckVxRjY0OgorICAgICAgICAgICAgcGFy
c2VSZWxhdGlvbmFsT3BGNjQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVh
bCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlNNaW46CisgICAgICAg
ICAgICBwYXJzZU1pbk1heEkzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW5PckVxdWFsKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6VU1pbjoKKyAgICAgICAgICAgIHBh
cnNlTWluTWF4STMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpTTWF4OgorICAgICAgICAgICAgcGFyc2VNaW5NYXhJ
MzIoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJMzI6OlVNYXg6CisgICAgICAgICAgICBwYXJzZU1pbk1heEkzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHN3aXRjaCAoaTMyV2l0aEltbSkgeworICAg
ICAgICBjYXNlIEkzMldpdGhJbW06OkxpdEltbToKKyAgICAgICAgICAgIHBhcnNlTGl0SW1tKFJl
dHVyblR5cGU6OkkzMiwgaW1tKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkz
MldpdGhJbW06OkxpdFBvb2w6CisgICAgICAgICAgICBwYXJzZUxpdFBvb2woUmV0dXJuVHlwZTo6
STMyLCBpbW0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyV2l0aEltbTo6
R2V0TG9jOgorICAgICAgICAgICAgcGFyc2VHZXRMb2NhbChpbW0pOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEFTVFBhcnNlcjo6cGFyc2VFeHBy
RjY0KCkKK3sKKyAgICBGNjQgZjY0OworICAgIEY2NFdpdGhJbW0gZjY0V2l0aEltbTsKKyAgICB1
aW50OF90IGltbTsKKworICAgIGlmIChtX21vZHVsZS0+bV9yZWFkZXIuY29kZSgmZjY0LCAmZjY0
V2l0aEltbSwgJmltbSkpIHsKKyAgICAgICAgc3dpdGNoIChmNjQpIHsKKyAgICAgICAgY2FzZSBG
NjQ6OkxpdFBvb2w6CisgICAgICAgICAgICBwYXJzZUxpdFBvb2woUmV0dXJuVHlwZTo6RjY0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2NDo6TGl0SW1tOgorICAgICAgICAg
ICAgcGFyc2VMaXRJbW0oUmV0dXJuVHlwZTo6RjY0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEY2NDo6R2V0TG9jOgorICAgICAgICAgICAgcGFyc2VHZXRMb2NhbCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRjY0OjpHZXRHbG86CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNlIEY2NDo6U2V0TG9jOgor
ICAgICAgICAgICAgcGFyc2VTZXRMb2NhbCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRjY0OjpTZXRHbG86CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICBjYXNlIEY2NDo6TG9hZDoKKyAgICAgICAgICAgIHBhcnNlTG9hZChSZXR1
cm5UeXBlOjpGNjQsIExpbmVhck1lbW9yeVR5cGU6OkY2NCwgZmFsc2UpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRjY0OjpMb2FkT2ZmOgorICAgICAgICAgICAgcGFyc2VMb2Fk
KFJldHVyblR5cGU6OkY2NCwgTGluZWFyTWVtb3J5VHlwZTo6RjY0LCB0cnVlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2NDo6U3RvcmU6CisgICAgICAgICAgICBwYXJzZVN0
b3JlKFJldHVyblR5cGU6OkY2NCwgTGluZWFyTWVtb3J5VHlwZTo6RjY0LCBmYWxzZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGNjQ6OlN0b3JlT2ZmOgorICAgICAgICAgICAg
cGFyc2VTdG9yZShSZXR1cm5UeXBlOjpGNjQsIExpbmVhck1lbW9yeVR5cGU6OkY2NCwgdHJ1ZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGNjQ6OkNhbGxJbnQ6CisgICAgICAg
ICAgICBwYXJzZUNhbGxJbnRlcm5hbChSZXR1cm5UeXBlOjpGNjQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRjY0OjpDYWxsSW5kOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBGNjQ6OkNhbGxJbXA6CisgICAgICAgICAg
ICBwYXJzZUNhbGxJbXBvcnQoUmV0dXJuVHlwZTo6RjY0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEY2NDo6Q29uZDoKKyAgICAgICAgICAgIHBhcnNlQ29uZChSZXR1cm5UeXBl
OjpGNjQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRjY0OjpDb21tYToKKyAg
ICAgICAgICAgIHBhcnNlQ29tbWEoUmV0dXJuVHlwZTo6RjY0KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEY2NDo6RnJvbVMzMjoKKyAgICAgICAgICAgIHBhcnNlRnJvbVMzMkY2
NCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRjY0OjpGcm9tVTMyOgorICAg
ICAgICBjYXNlIEY2NDo6RnJvbUYzMjoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIGNhc2UgRjY0OjpOZWc6CisgICAgICAgIGNhc2UgRjY0OjpBYnM6
CisgICAgICAgIGNhc2UgRjY0OjpDZWlsOgorICAgICAgICBjYXNlIEY2NDo6Rmxvb3I6CisgICAg
ICAgIGNhc2UgRjY0OjpTcXJ0OgorICAgICAgICBjYXNlIEY2NDo6Q29zOgorICAgICAgICBjYXNl
IEY2NDo6U2luOgorICAgICAgICBjYXNlIEY2NDo6VGFuOgorICAgICAgICBjYXNlIEY2NDo6QUNv
czoKKyAgICAgICAgY2FzZSBGNjQ6OkFTaW46CisgICAgICAgIGNhc2UgRjY0OjpBVGFuOgorICAg
ICAgICBjYXNlIEY2NDo6RXhwOgorICAgICAgICBjYXNlIEY2NDo6TG46CisgICAgICAgICAgICBw
YXJzZVVuYXJ5T3BGNjQoZjY0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2
NDo6QWRkOgorICAgICAgICBjYXNlIEY2NDo6U3ViOgorICAgICAgICBjYXNlIEY2NDo6TXVsOgor
ICAgICAgICBjYXNlIEY2NDo6RGl2OgorICAgICAgICBjYXNlIEY2NDo6QVRhbjI6CisgICAgICAg
IGNhc2UgRjY0OjpQb3c6CisgICAgICAgICAgICBwYXJzZUJpbmFyeU9wRjY0KGY2NCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGNjQ6Ok1vZDoKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgRjY0OjpNaW46CisgICAgICAg
ICAgICBwYXJzZU1pbk1heEY2NChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFs
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2NDo6TWF4OgorICAgICAgICAg
ICAgcGFyc2VNaW5NYXhGNjQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVh
bCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICBzd2l0Y2ggKGY2NFdpdGhJbW0pIHsKKyAgICAgICAgY2FzZSBGNjRXaXRoSW1tOjpMaXRQ
b29sOgorICAgICAgICAgICAgcGFyc2VMaXRQb29sKFJldHVyblR5cGU6OkY2NCwgaW1tKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2NFdpdGhJbW06OkdldExvYzoKKyAgICAg
ICAgICAgIHBhcnNlR2V0TG9jYWwoaW1tKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBBU1RQYXJzZXI6OnBhcnNlRXhwclZvaWQoKQoreworICAg
IHN3aXRjaCAobV9tb2R1bGUtPm1fcmVhZGVyLnZvaWRFeHByKCkpIHsKKyAgICBjYXNlIFZvaWQ6
OkNhbGxJbnQ6CisgICAgICAgIHBhcnNlQ2FsbEludGVybmFsKFJldHVyblR5cGU6OlZvaWQpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFZvaWQ6OkNhbGxJbmQ6CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgY2FzZSBWb2lkOjpDYWxsSW1wOgorICAgICAgICBw
YXJzZUNhbGxJbXBvcnQoUmV0dXJuVHlwZTo6Vm9pZCk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQor
Cit2b2lkIEFTVFBhcnNlcjo6cGFyc2VMaXRQb29sKFJldHVyblR5cGUsIHVpbnQzMl90KQorewor
fQorCit2b2lkIEFTVFBhcnNlcjo6cGFyc2VMaXRQb29sKFJldHVyblR5cGUgcmV0dXJuVHlwZSkK
K3sKKyAgICB1aW50MzJfdCBpbmRleCA9IG1fbW9kdWxlLT5tX3JlYWRlci5pbW1VMzIoKTsKKyAg
ICBwYXJzZUxpdFBvb2wocmV0dXJuVHlwZSwgaW5kZXgpOworfQorCit2b2lkIEFTVFBhcnNlcjo6
cGFyc2VMaXRJbW0oUmV0dXJuVHlwZSwgdWludDMyX3QpCit7Cit9CisKK3ZvaWQgQVNUUGFyc2Vy
OjpwYXJzZUxpdEltbShSZXR1cm5UeXBlIHJldHVyblR5cGUpCit7CisgICAgc3dpdGNoIChyZXR1
cm5UeXBlKSB7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpJMzI6CisgICAgICAgIG1fbW9kdWxlLT5t
X3JlYWRlci5pbW1VMzIoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpG
NjQ6CisgICAgICAgIG1fbW9kdWxlLT5tX3JlYWRlci5maXhlZFdpZHRoPGRvdWJsZT4oKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorfQorCit2b2lkIEFTVFBhcnNlcjo6cGFyc2VDYWxsSW50ZXJuYWwoUmV0dXJuVHlw
ZSkKK3sKKyAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4ID0gbV9tb2R1bGUtPm1fcmVhZGVyLmlt
bVUzMigpOworICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gbV9tb2R1bGUtPm1fc2ln
bmF0dXJlc1ttX21vZHVsZS0+bV9mdW5jU2lnbmF0dXJlc1tmdW5jdGlvbkluZGV4XV07CisgICAg
Y29uc3QgVmVjdG9yPFR5cGU+JiBhcmd1bWVudHMgPSBzaWduYXR1cmUuYXJndW1lbnRzOworICAg
IC8vIEZJWE1FOiByZXR1cm5UeXBlIGlzIHJlZHVuZGFudCB3aXRoIHNpZ25hdHVyZS5yZXR1cm5U
eXBlCisKKyAgICBwYXJzZUNhbGxBcmd1bWVudHMoYXJndW1lbnRzKTsKK30KKwordm9pZCBBU1RQ
YXJzZXI6OnBhcnNlQ2FsbEltcG9ydChSZXR1cm5UeXBlKQoreworICAgIHVpbnQzMl90IGZ1bmNJ
bXBvcnRTaWduYXR1cmVJbmRleCA9IG1fbW9kdWxlLT5tX3JlYWRlci5pbW1VMzIoKTsKKyAgICBj
b25zdCBNb2R1bGU6OkZ1bmNJbXBvcnRTaWduYXR1cmUmIGZ1bmNJbXBvcnRTaWduYXR1cmUgPSBt
X21vZHVsZS0+bV9mdW5jSW1wb3J0U2lnbmF0dXJlc1tmdW5jSW1wb3J0U2lnbmF0dXJlSW5kZXhd
OworICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gbV9tb2R1bGUtPm1fc2lnbmF0dXJl
c1tmdW5jSW1wb3J0U2lnbmF0dXJlLnNpZ25hdHVyZUluZGV4XTsKKyAgICBjb25zdCBWZWN0b3I8
VHlwZT4mIGFyZ3VtZW50cyA9IHNpZ25hdHVyZS5hcmd1bWVudHM7CisgICAgLy8gRklYTUU6IHJl
dHVyblR5cGUgaXMgcmVkdW5kYW50IHdpdGggc2lnbmF0dXJlLnJldHVyblR5cGUKKworICAgIHBh
cnNlQ2FsbEFyZ3VtZW50cyhhcmd1bWVudHMpOworfQorCit2b2lkIEFTVFBhcnNlcjo6cGFyc2VD
YWxsQXJndW1lbnRzKGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJndW1lbnRzKQoreworICAgIHNpemVf
dCBhcmd1bWVudENvdW50ID0gYXJndW1lbnRzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkgeworICAgICAgICBzd2l0Y2ggKGFyZ3VtZW50c1tp
XSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgICAgIHBhcnNlRXhwckkzMigp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAg
ICAgcGFyc2VFeHByRjY0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIEFTVFBhcnNlcjo6cGFyc2VDb25kKFJldHVyblR5cGUgcmV0dXJuVHlwZSkKK3sKKyAg
ICBwYXJzZUV4cHJJMzIoKTsKKyAgICBwYXJzZUV4cHIocmV0dXJuVHlwZSk7CisgICAgcGFyc2VF
eHByKHJldHVyblR5cGUpOworfQorCit2b2lkIEFTVFBhcnNlcjo6cGFyc2VDb21tYShSZXR1cm5U
eXBlIHJldHVyblR5cGUpCit7CisgICAgcGFyc2VFeHByKG1fbW9kdWxlLT5tX3JlYWRlci5yZXR1
cm5UeXBlKCkpOworICAgIHBhcnNlRXhwcihyZXR1cm5UeXBlKTsKK30KKwordm9pZCBBU1RQYXJz
ZXI6OnBhcnNlRnJvbUY2NEkzMigpCit7CisgICAgcGFyc2VFeHByRjY0KCk7Cit9CisKK3ZvaWQg
QVNUUGFyc2VyOjpwYXJzZUZyb21TMzJGNjQoKQoreworICAgIHBhcnNlRXhwckkzMigpOworfQor
Cit2b2lkIEFTVFBhcnNlcjo6cGFyc2VVbmFyeU9wSTMyKEkzMikKK3sKKyAgICBwYXJzZUV4cHJJ
MzIoKTsKK30KKwordm9pZCBBU1RQYXJzZXI6OnBhcnNlVW5hcnlPcEY2NChGNjQpCit7CisgICAg
cGFyc2VFeHByRjY0KCk7Cit9CisKK3ZvaWQgQVNUUGFyc2VyOjpwYXJzZUJpbmFyeU9wSTMyKEkz
MikKK3sKKyAgICBwYXJzZUV4cHJJMzIoKTsKKyAgICBwYXJzZUV4cHJJMzIoKTsKK30KKwordm9p
ZCBBU1RQYXJzZXI6OnBhcnNlQmluYXJ5T3BGNjQoRjY0KQoreworICAgIHBhcnNlRXhwckY2NCgp
OworICAgIHBhcnNlRXhwckY2NCgpOworfQorCit2b2lkIEFTVFBhcnNlcjo6cGFyc2VSZWxhdGlv
bmFsT3BJMzIoTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24pCit7CisgICAgcGFy
c2VFeHBySTMyKCk7CisgICAgcGFyc2VFeHBySTMyKCk7Cit9CisKK3ZvaWQgQVNUUGFyc2VyOjpw
YXJzZVJlbGF0aW9uYWxPcEY2NChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uKQorewor
ICAgIHBhcnNlRXhwckY2NCgpOworICAgIHBhcnNlRXhwckY2NCgpOworfQorCit2b2lkIEFTVFBh
cnNlcjo6cGFyc2VNaW5NYXhJMzIoTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24p
Cit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZBcmd1bWVudHMgPSBtX21vZHVsZS0+bV9yZWFkZXIu
aW1tVTMyKCk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mQXJndW1lbnRz
OyArK2kpCisgICAgICAgIHBhcnNlRXhwckkzMigpOworfQorCit2b2lkIEFTVFBhcnNlcjo6cGFy
c2VNaW5NYXhGNjQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbikKK3sKKyAgICB1aW50
MzJfdCBudW1iZXJPZkFyZ3VtZW50cyA9IG1fbW9kdWxlLT5tX3JlYWRlci5pbW1VMzIoKTsKKyAg
ICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZBcmd1bWVudHM7ICsraSkKKyAgICAg
ICAgcGFyc2VFeHByRjY0KCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQVNUUGFyc2VyLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQVNUUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjU0MDRk
MDEyYjM0OGNkNDdkMDk4YTY1ZmFhMjhmNWE2NDgyYmNkOQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BU1RQYXJzZXIuaApAQCAtMCwwICsxLDEwNyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
V2FzbUFTVFBhcnNlcl9oCisjZGVmaW5lIFdhc21BU1RQYXJzZXJfaAorCisjaW5jbHVkZSAiTWFj
cm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCituYW1lc3BhY2UgV2FzbSB7CisKK2VudW0gY2xhc3MgTGluZWFyTWVtb3J5VHlwZSA6IHVu
c2lnbmVkOworCitjbGFzcyBBU1RQYXJzZXIgeworcHVibGljOgorICAgIEFTVFBhcnNlcihNb2R1
bGUqIG1vZHVsZSkKKyAgICAgICAgOiBtX21vZHVsZShtb2R1bGUpCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgfkFTVFBhcnNlcigpIHsgfQorCisgICAgdm9pZCBwYXJzZShzaXplX3QgZnVu
Y3Rpb25JbmRleCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VTaWduYXR1
cmUoc2l6ZV90IGZ1bmN0aW9uSW5kZXgpOworICAgIHZpcnR1YWwgdm9pZCBwYXJzZVZhcnMoKTsK
KworICAgIHZvaWQgcGFyc2VTdG10KCk7CisgICAgdmlydHVhbCB2b2lkIHBhcnNlR2V0TG9jYWwo
dWludDMyX3QgaW1tKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VHZXRMb2NhbCgpOworICAgIHZp
cnR1YWwgdm9pZCBwYXJzZVNldExvY2FsKHVpbnQzMl90IGltbSk7CisgICAgdmlydHVhbCB2b2lk
IHBhcnNlU2V0TG9jYWwoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VBcnJheUJ1ZmZlck9mZnNl
dChib29sIGhhc09mZnNldCk7CisgICAgdmlydHVhbCB2b2lkIHBhcnNlTG9hZChSZXR1cm5UeXBl
LCBMaW5lYXJNZW1vcnlUeXBlLCBib29sIGhhc09mZnNldCk7CisgICAgdmlydHVhbCB2b2lkIHBh
cnNlU3RvcmUoUmV0dXJuVHlwZSwgTGluZWFyTWVtb3J5VHlwZSwgYm9vbCBoYXNPZmZzZXQpOwor
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZVJldHVyblN0bXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFy
c2VCbG9ja1N0bXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VTdG10TGlzdCgpOworICAgIHZp
cnR1YWwgdm9pZCBwYXJzZUlmU3RtdCgpOworICAgIHZpcnR1YWwgdm9pZCBwYXJzZUlmRWxzZVN0
bXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VXaGlsZVN0bXQoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VEb1N0bXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VMYWJlbFN0bXQoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFyc2VCcmVha1N0bXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VC
cmVha0xhYmVsU3RtdCgpOworICAgIHZpcnR1YWwgdm9pZCBwYXJzZUNvbnRpbnVlU3RtdCgpOwor
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZUNvbnRpbnVlTGFiZWxTdG10KCk7CisgICAgdmlydHVhbCB2
b2lkIHBhcnNlU3dpdGNoU3RtdCgpOworCisgICAgdm9pZCBwYXJzZUV4cHIoUmV0dXJuVHlwZSk7
CisgICAgdmlydHVhbCB2b2lkIHBhcnNlRXhwckkzMigpOworICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZUV4cHJGNjQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VFeHByVm9pZCgpOworICAgIHZpcnR1
YWwgdm9pZCBwYXJzZUxpdFBvb2woUmV0dXJuVHlwZSwgdWludDMyX3QgaW5kZXgpOworICAgIHZp
cnR1YWwgdm9pZCBwYXJzZUxpdFBvb2woUmV0dXJuVHlwZSk7CisgICAgdmlydHVhbCB2b2lkIHBh
cnNlTGl0SW1tKFJldHVyblR5cGUsIHVpbnQzMl90IGltbSk7CisgICAgdmlydHVhbCB2b2lkIHBh
cnNlTGl0SW1tKFJldHVyblR5cGUpOworICAgIHZpcnR1YWwgdm9pZCBwYXJzZUNhbGxJbnRlcm5h
bChSZXR1cm5UeXBlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VDYWxsSW1wb3J0KFJldHVyblR5
cGUpOworICAgIHZpcnR1YWwgdm9pZCBwYXJzZUNhbGxBcmd1bWVudHMoY29uc3QgVmVjdG9yPFR5
cGU+JiBhcmd1bWVudHMpOworICAgIHZpcnR1YWwgdm9pZCBwYXJzZUNvbmQoUmV0dXJuVHlwZSk7
CisgICAgdmlydHVhbCB2b2lkIHBhcnNlQ29tbWEoUmV0dXJuVHlwZSk7CisgICAgdmlydHVhbCB2
b2lkIHBhcnNlRnJvbUY2NEkzMigpOworICAgIHZpcnR1YWwgdm9pZCBwYXJzZUZyb21TMzJGNjQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VVbmFyeU9wSTMyKEkzMiBvcCk7CisgICAgdmlydHVh
bCB2b2lkIHBhcnNlVW5hcnlPcEY2NChGNjQgb3ApOworICAgIHZpcnR1YWwgdm9pZCBwYXJzZUJp
bmFyeU9wSTMyKEkzMiBvcCk7CisgICAgdmlydHVhbCB2b2lkIHBhcnNlQmluYXJ5T3BGNjQoRjY0
IG9wKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VSZWxhdGlvbmFsT3BJMzIoTWFjcm9Bc3NlbWJs
ZXI6OlJlbGF0aW9uYWxDb25kaXRpb24pOworICAgIHZpcnR1YWwgdm9pZCBwYXJzZVJlbGF0aW9u
YWxPcEY2NChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNaW5NYXhJMzIoTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24pOwor
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1pbk1heEY2NChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29u
ZGl0aW9uKTsKKworICAgIE1vZHVsZSogbV9tb2R1bGU7CisKKyAgICBSZXR1cm5UeXBlIG1fY3Vy
cmVudFJldHVyblR5cGU7CisgICAgVmVjdG9yPFR5cGU+IG1fY3VycmVudExvY2FsVHlwZXM7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gV2FzbUFTVFBhcnNl
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSklUQ29tcGls
ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUpJVENvbXBpbGVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mNDAzNzlmOWM5NGZmNTBiNjA3ZmQ2YjdlNmRhZTIxZmI4YWQwMThlCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUpJVENvbXBpbGVy
LmNwcApAQCAtMCwwICsxLDE0NzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2FzbUpJVENvbXBp
bGVyLmgiCisKKyNpbmNsdWRlICJKSVRDb2RlLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGlu
ZXMuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwuaCIKKyNpbmNsdWRlICJSZWdpc3Rlci5oIgorI2luY2x1ZGUgIldhc21T
dGFja0hlaWdodENhbGN1bGF0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBX
YXNtIHsKKworY2xhc3MgSnVtcFNjb3BlIHsKK3B1YmxpYzoKKyAgICBKdW1wU2NvcGUoTWFjcm9B
c3NlbWJsZXIqIG1hY3JvQXNzZW1ibGVyKQorICAgICAgICA6IG1fbWFjcm9Bc3NlbWJsZXIobWFj
cm9Bc3NlbWJsZXIpCisgICAgICAgICwgbV9saW5rZWQoZmFsc2UpCisgICAgeworICAgIH0KKwor
ICAgIEp1bXBTY29wZShNYWNyb0Fzc2VtYmxlciogbWFjcm9Bc3NlbWJsZXIsIGNvbnN0IE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCYgbGFiZWwpCisgICAgICAgIDogbV9tYWNyb0Fzc2VtYmxlcihtYWNy
b0Fzc2VtYmxlcikKKyAgICAgICAgLCBtX2xpbmtlZCh0cnVlKQorICAgICAgICAsIG1fbGFiZWwo
bGFiZWwpCisgICAgeworICAgIH0KKworICAgIHZvaWQganVtcCgpCisgICAgeworICAgICAgICBp
ZiAobV9saW5rZWQpCisgICAgICAgICAgICBtX21hY3JvQXNzZW1ibGVyLT5qdW1wKG1fbGFiZWwp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2p1bXBMaXN0LmFwcGVuZChtX21hY3JvQXNz
ZW1ibGVyLT5qdW1wKCkpOworICAgIH0KKworICAgIHZvaWQgbGluaygpCisgICAgeworICAgICAg
ICBBU1NFUlQoIW1fbGlua2VkKTsKKyAgICAgICAgbV9qdW1wTGlzdC5saW5rKG1fbWFjcm9Bc3Nl
bWJsZXIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNYWNyb0Fzc2VtYmxlciogbV9tYWNyb0Fz
c2VtYmxlcjsKKyAgICBib29sIG1fbGlua2VkOworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBt
X2xhYmVsOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2p1bXBMaXN0OworfTsKKwor
ZW51bSBjbGFzcyBMaW5lYXJNZW1vcnlUeXBlIDogdW5zaWduZWQgeworICAgIEk4LAorICAgIFM4
LAorICAgIFU4LAorICAgIEkxNiwKKyAgICBTMTYsCisgICAgVTE2LAorICAgIEkzMiwKKyAgICBG
MzIsCisgICAgRjY0Cit9OworCitSZWZQdHI8SklUQ29kZT4gSklUQ29tcGlsZXI6OmNvbXBpbGVG
dW5jdGlvbihWTSYgdm0sIHNpemVfdCBmdW5jdGlvbkluZGV4KQoreworICAgIGNvbnN0IHVpbnQ4
X3QqIGN1cnNvciA9IG1fbW9kdWxlLT5tX3JlYWRlci5jdXJzb3IoKTsKKyAgICBTdGFja0hlaWdo
dENhbGN1bGF0b3Igc3RhY2tIZWlnaHRDYWxjdWxhdG9yKG1fbW9kdWxlKTsKKyAgICBtX3N0YWNr
SGVpZ2h0ID0gc3RhY2tIZWlnaHRDYWxjdWxhdG9yLmNhbGN1bGF0ZVN0YWNrSGVpZ2h0KGZ1bmN0
aW9uSW5kZXgpOworICAgIG1fbW9kdWxlLT5tX3JlYWRlci5zZXRDdXJzb3IoY3Vyc29yKTsKKwor
ICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CisgICAgZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZy
YW1lSGVhZGVyKG1fY29kZUJsb2NrLCBKU1N0YWNrOjpDb2RlQmxvY2spOworICAgIGFsbG9jYXRl
U3BhY2VPblN0YWNrKCk7CisKKyAgICBwYXJzZVNpZ25hdHVyZShmdW5jdGlvbkluZGV4KTsKKyAg
ICBwYXJzZVZhcnMoKTsKKyAgICBwYXJzZVN0bXRMaXN0KCk7CisKKyAgICAvLyBGSVhNRTogU2tp
cCB0aGVzZSBpZiB0aGUgbGFzdCBzdGF0ZW1lbnQgaXMgYSByZXR1cm4gc3RhdGVtZW50LgorICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUklu
Zm86OnJlZ1QwKTsgLy8gRklYTUU6IFNob3VsZCB3ZSByZXR1cm4gdW5kZWZpbmVkPworICAgIGRl
YWxsb2NhdGVTcGFjZU9uU3RhY2soKTsKKyAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAg
IHJldCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih2bSwgKnRoaXMsIDAsIEpJVENv
bXBpbGF0aW9uTXVzdFN1Y2NlZWQpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3aXRoQXJp
dHlDaGVjazsKKyAgICAvLyBUT0RPOiBJbXBsZW1lbnQgYXJpdHkgY2hlY2sKKyAgICBDb2RlUmVm
IHJlc3VsdCA9IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiQmFzZWxpbmUgSklUIGNvZGUg
Zm9yIFdlYkFzc2VtYmx5IikpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29k
ZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCBKSVRDb2RlOjpCYXNlbGluZUpJVCkpOworfQorCit2
b2lkIEpJVENvbXBpbGVyOjphbGxvY2F0ZVNwYWNlT25TdGFjaygpCit7CisgICAgLy8gVE9ETzog
Y2hlY2sgZm9yIHN0YWNrIG92ZXJmbG93CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtbV9zdGFj
a0hlaWdodCAqIDgpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cit9CisKK3ZvaWQgSklUQ29tcGls
ZXI6OmRlYWxsb2NhdGVTcGFjZU9uU3RhY2soKQoreworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
bV9zdGFja0hlaWdodCAqIDgpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cit9CisKK3ZvaWQgSklU
Q29tcGlsZXI6OnBhcnNlU2lnbmF0dXJlKHNpemVfdCBmdW5jdGlvbkluZGV4KQoreworICAgIGNv
bnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gbV9tb2R1bGUtPm1fc2lnbmF0dXJlc1ttX21vZHVs
ZS0+bV9mdW5jU2lnbmF0dXJlc1tmdW5jdGlvbkluZGV4XV07CisgICAgbV9jdXJyZW50UmV0dXJu
VHlwZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlOworICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0g
c2lnbmF0dXJlLmFyZ3VtZW50cy5zaXplKCk7CisgICAgZm9yICh1aW50MzJfdCBhcmdJbmRleCA9
IDA7IGFyZ0luZGV4IDwgYXJndW1lbnRDb3VudDsgKythcmdJbmRleCkgeworICAgICAgICBUeXBl
IHR5cGUgPSBzaWduYXR1cmUuYXJndW1lbnRzW2FyZ0luZGV4XTsKKyAgICAgICAgbV9jdXJyZW50
TG9jYWxUeXBlcy5hcHBlbmQodHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAg
ICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCAoYXJnSW5kZXggKyAxICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRP
ZmZzZXQoKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAg
ICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgc3RhY2tBZGRyZXNzKGFyZ0luZGV4KSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAg
ICAgICAgIGxvYWQ2NChBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAoYXJnSW5k
ZXggKyAxICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSkgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgdW5ib3hEb3VibGVXaXRob3V0QXNz
ZXJ0aW9ucyhHUFJJbmZvOjpyZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBz
dG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBzdGFja0FkZHJlc3MoYXJnSW5kZXgpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBKSVRDb21w
aWxlcjo6cGFyc2VWYXJzKCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZkkzMlZhcnMgPSAwOwor
ICAgIHVpbnQzMl90IG51bWJlck9mRjMyVmFycyA9IDA7CisgICAgdWludDMyX3QgbnVtYmVyT2ZG
NjRWYXJzID0gMDsKKworICAgIFZhclR5cGVzIHZhclR5cGVzOworICAgIFZhclR5cGVzV2l0aElt
bSB2YXJUeXBlc1dpdGhJbW07CisgICAgdWludDhfdCBpbW07CisgICAgaWYgKG1fbW9kdWxlLT5t
X3JlYWRlci5jb2RlKCZ2YXJUeXBlcywgJnZhclR5cGVzV2l0aEltbSwgJmltbSkpIHsKKyAgICAg
ICAgaWYgKHZhclR5cGVzICYgVmFyVHlwZXM6OkkzMikKKyAgICAgICAgICAgIG51bWJlck9mSTMy
VmFycyA9IG1fbW9kdWxlLT5tX3JlYWRlci5pbW1VMzIoKTsKKyAgICAgICAgaWYgKHZhclR5cGVz
ICYgVmFyVHlwZXM6OkYzMikKKyAgICAgICAgICAgIG51bWJlck9mRjMyVmFycyA9IG1fbW9kdWxl
LT5tX3JlYWRlci5pbW1VMzIoKTsKKyAgICAgICAgaWYgKHZhclR5cGVzICYgVmFyVHlwZXM6OkY2
NCkKKyAgICAgICAgICAgIG51bWJlck9mRjY0VmFycyA9IG1fbW9kdWxlLT5tX3JlYWRlci5pbW1V
MzIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbnVtYmVyT2ZJMzJWYXJzID0gaW1tOworCisgICAg
dWludDMyX3QgbnVtYmVyT2ZWYXJzID0gbnVtYmVyT2ZJMzJWYXJzICsgbnVtYmVyT2ZGMzJWYXJz
ICsgbnVtYmVyT2ZGNjRWYXJzOworICAgIGlmIChudW1iZXJPZlZhcnMgPiAwKSB7CisgICAgICAg
IHVpbnQzMl90IGxvY2FsSW5kZXggPSBtX2N1cnJlbnRMb2NhbFR5cGVzLnNpemUoKTsKKyAgICAg
ICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mSTMyVmFyczsgKytpKSB7CisgICAg
ICAgICAgICBtX2N1cnJlbnRMb2NhbFR5cGVzLmFwcGVuZChUeXBlOjpJMzIpOworICAgICAgICAg
ICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIHN0YWNrQWRkcmVzcyhsb2NhbEluZGV4KyspKTsK
KyAgICAgICAgfQorICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGMzJW
YXJzOyArK2kpIHsKKyAgICAgICAgICAgIG1fY3VycmVudExvY2FsVHlwZXMuYXBwZW5kKFR5cGU6
OkYzMik7CisgICAgICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgc3RhY2tBZGRyZXNz
KGxvY2FsSW5kZXgrKykpOworICAgICAgICB9CisgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7
IGkgPCBudW1iZXJPZkY2NFZhcnM7ICsraSkgeworICAgICAgICAgICAgbV9jdXJyZW50TG9jYWxU
eXBlcy5hcHBlbmQoVHlwZTo6RjY0KTsKKyAgICAgICAgICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0
KDApLCBzdGFja0FkZHJlc3MobG9jYWxJbmRleCsrKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlU3RtdCgpCit7CisgICAgU3RtdCBzdG10OworICAgIFN0
bXRXaXRoSW1tIHN0bXRXaXRoSW1tOworICAgIHVpbnQ4X3QgaW1tOworICAgIGlmIChtX21vZHVs
ZS0+bV9yZWFkZXIuY29kZSgmc3RtdCwgJnN0bXRXaXRoSW1tLCAmaW1tKSkgeworICAgICAgICBz
d2l0Y2ggKHN0bXQpIHsKKyAgICAgICAgY2FzZSBTdG10OjpTZXRMb2M6CisgICAgICAgICAgICBw
YXJzZVNldExvY2FsKDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RtdDo6
U2V0R2xvOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgY2FzZSBTdG10OjpJMzJTdG9yZTg6CisgICAgICAgICAgICBwYXJzZVN0b3JlKFJldHVyblR5
cGU6OkkzMiwgTGluZWFyTWVtb3J5VHlwZTo6STgsIGZhbHNlLCAwKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFN0bXQ6OkkzMlN0b3JlT2ZmODoKKyAgICAgICAgICAgIHBhcnNl
U3RvcmUoUmV0dXJuVHlwZTo6STMyLCBMaW5lYXJNZW1vcnlUeXBlOjpJOCwgdHJ1ZSwgMCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdG10OjpJMzJTdG9yZTE2OgorICAgICAg
ICAgICAgcGFyc2VTdG9yZShSZXR1cm5UeXBlOjpJMzIsIExpbmVhck1lbW9yeVR5cGU6OkkxNiwg
ZmFsc2UsIDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RtdDo6STMyU3Rv
cmVPZmYxNjoKKyAgICAgICAgICAgIHBhcnNlU3RvcmUoUmV0dXJuVHlwZTo6STMyLCBMaW5lYXJN
ZW1vcnlUeXBlOjpJMTYsIHRydWUsIDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgU3RtdDo6STMyU3RvcmUzMjoKKyAgICAgICAgICAgIHBhcnNlU3RvcmUoUmV0dXJuVHlwZTo6
STMyLCBMaW5lYXJNZW1vcnlUeXBlOjpJMzIsIGZhbHNlLCAwKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFN0bXQ6OkkzMlN0b3JlT2ZmMzI6CisgICAgICAgICAgICBwYXJzZVN0
b3JlKFJldHVyblR5cGU6OkkzMiwgTGluZWFyTWVtb3J5VHlwZTo6STMyLCB0cnVlLCAwKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0bXQ6OkYzMlN0b3JlOgorICAgICAgICAg
ICAgcGFyc2VTdG9yZShSZXR1cm5UeXBlOjpGMzIsIExpbmVhck1lbW9yeVR5cGU6OkYzMiwgZmFs
c2UsIDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RtdDo6RjMyU3RvcmVP
ZmY6CisgICAgICAgICAgICBwYXJzZVN0b3JlKFJldHVyblR5cGU6OkYzMiwgTGluZWFyTWVtb3J5
VHlwZTo6RjMyLCB0cnVlLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0
bXQ6OkY2NFN0b3JlOgorICAgICAgICAgICAgcGFyc2VTdG9yZShSZXR1cm5UeXBlOjpGNjQsIExp
bmVhck1lbW9yeVR5cGU6OkY2NCwgZmFsc2UsIDApOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgU3RtdDo6RjY0U3RvcmVPZmY6CisgICAgICAgICAgICBwYXJzZVN0b3JlKFJldHVy
blR5cGU6OkY2NCwgTGluZWFyTWVtb3J5VHlwZTo6RjY0LCB0cnVlLCAwKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFN0bXQ6OkNhbGxJbnQ6CisgICAgICAgICAgICBwYXJzZUNh
bGxJbnRlcm5hbChSZXR1cm5UeXBlOjpWb2lkLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFN0bXQ6OkNhbGxJbmQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBjYXNlIFN0bXQ6OkNhbGxJbXA6CisgICAgICAgICAgICBwYXJz
ZUNhbGxJbXBvcnQoUmV0dXJuVHlwZTo6Vm9pZCwgMCk7IC8vIEZJWE1FOiBJcyBpdCByZWFsbHkg
Vm9pZD8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0bXQ6OlJldDoKKyAgICAg
ICAgICAgIHBhcnNlUmV0dXJuU3RtdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBj
YXNlIFN0bXQ6OkJsb2NrOgorICAgICAgICAgICAgcGFyc2VCbG9ja1N0bXQoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdG10OjpJZlRoZW46CisgICAgICAgICAgICBwYXJz
ZUlmU3RtdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6OklmRWxz
ZToKKyAgICAgICAgICAgIHBhcnNlSWZFbHNlU3RtdCgpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBjYXNlIFN0bXQ6OldoaWxlOgorICAgICAgICAgICAgcGFyc2VXaGlsZVN0bXQoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdG10OjpEbzoKKyAgICAgICAgICAg
IHBhcnNlRG9TdG10KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU3RtdDo6
TGFiZWw6CisgICAgICAgICAgICBwYXJzZUxhYmVsU3RtdCgpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBjYXNlIFN0bXQ6OkJyZWFrOgorICAgICAgICAgICAgcGFyc2VCcmVha1N0bXQo
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdG10OjpCcmVha0xhYmVsOgor
ICAgICAgICAgICAgcGFyc2VCcmVha0xhYmVsU3RtdCgpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBjYXNlIFN0bXQ6OkNvbnRpbnVlOgorICAgICAgICAgICAgcGFyc2VDb250aW51ZVN0
bXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0bXQ6OkNvbnRpbnVlTGFi
ZWw6CisgICAgICAgICAgICBwYXJzZUNvbnRpbnVlTGFiZWxTdG10KCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGNhc2UgU3RtdDo6U3dpdGNoOgorICAgICAgICAgICAgcGFyc2VTd2l0
Y2hTdG10KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICBzd2l0Y2ggKHN0bXRXaXRoSW1tKSB7CisgICAgICAgIGNhc2UgU3RtdFdpdGhJ
bW06OlNldExvYzoKKyAgICAgICAgICAgIHBhcnNlU2V0TG9jYWwoaW1tLCAwKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0bXRXaXRoSW1tOjpTZXRHbG86CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICB9CisgICAgfQorfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUdldExvY2FsKHVpbnQzMl90
IGltbSwgaW50IGRzdCkKK3sKKyAgICBzd2l0Y2ggKG1fY3VycmVudExvY2FsVHlwZXNbaW1tXSkg
eworICAgIGNhc2UgVHlwZTo6STMyOgorICAgIGNhc2UgVHlwZTo6RjMyOgorICAgICAgICBsb2Fk
MzIoc3RhY2tBZGRyZXNzKGltbSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgc3RvcmUzMihH
UFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgIC8vIEZJWE1FOiBsb2FkRG91YmxlL3N0b3JlRG91
YmxlPworICAgICAgICBsb2FkNjQoc3RhY2tBZGRyZXNzKGltbSksIEdQUkluZm86OnJlZ1QwKTsK
KyAgICAgICAgc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlR2V0TG9jYWwo
aW50IGRzdCkKK3sKKyAgICB1aW50MzJfdCBpbW0gPSBtX21vZHVsZS0+bV9yZWFkZXIuaW1tVTMy
KCk7CisgICAgcGFyc2VHZXRMb2NhbChpbW0sIGRzdCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6
OnBhcnNlU2V0TG9jYWwodWludDMyX3QgaW1tLCBpbnQgZHN0KQoreworICAgIFR5cGUgdHlwZSA9
IG1fY3VycmVudExvY2FsVHlwZXNbaW1tXTsKKyAgICBwYXJzZUV4cHIoUmV0dXJuVHlwZSh0eXBl
KSwgZHN0KTsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICBj
YXNlIFR5cGU6OkYzMjoKKyAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoZHN0KSwgR1BS
SW5mbzo6cmVnVDApOworICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCBzdGFja0FkZHJl
c3MoaW1tKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICBs
b2FkNjQodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIHN0
b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHN0YWNrQWRkcmVzcyhpbW0pKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlU2V0TG9jYWwoaW50IGRzdCkKK3sKKyAg
ICB1aW50MzJfdCBpbW0gPSBtX21vZHVsZS0+bV9yZWFkZXIuaW1tVTMyKCk7CisgICAgcGFyc2VT
ZXRMb2NhbChpbW0sIGRzdCk7Cit9CisKK3N0YXRpYyBjb25zdCB2b2lkKiBKU0NfSE9TVF9DQUxM
IGdldEFycmF5QnVmZmVyRGF0YShNb2R1bGUqIG1vZHVsZSkKK3sKKyAgICAvLyBGSVhNRTogRG8g
d2UgcmVhbGx5IGhhdmUgdG8gZG8gdGhpcz8KKyAgICByZXR1cm4gbW9kdWxlLT5hcnJheUJ1ZmZl
ckRhdGEoKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VBcnJheUJ1ZmZlck9mZnNldChi
b29sIGhhc09mZnNldCwgaW50IGRzdCkKK3sKKyAgICAvLyBUT0RPOiBDaGVjayBmb3Igb3V0LW9m
LWJvdW5kcyBhY2Nlc3MuCisgICAgdWludDMyX3Qgb2Zmc2V0ID0gaGFzT2Zmc2V0ID8gbV9tb2R1
bGUtPm1fcmVhZGVyLmltbVUzMigpIDogMDsKKyAgICB1aW50MzJfdCB1MzI7CisgICAgaWYgKG1f
bW9kdWxlLT5tX3JlYWRlci5pZkkzMkxpdChtX21vZHVsZS0+bV9jb25zdGFudEkzMnMsICZ1MzIp
KQorICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMih1MzIgKyBvZmZzZXQpLCB0ZW1wb3JhcnlB
ZGRyZXNzKGRzdCkpOworICAgIGVsc2UgeworICAgICAgICBwYXJzZUV4cHJJMzIoZHN0KTsKKyAg
ICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoZHN0KSwgR1BSSW5mbzo6cmVnVDApOworICAg
ICAgICBpZiAob2Zmc2V0KQorICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKG9mZnNldCks
IEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgdGVtcG9y
YXJ5QWRkcmVzcyhkc3QpKTsKKyAgICB9CisKKyAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGwpCisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLW1heEZyYW1lRXh0ZW50Rm9y
U2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIHNldHVwQXJndW1lbnRz
KFRydXN0ZWRJbW1QdHIobV9tb2R1bGUpKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYml0d2lz
ZV9jYXN0PHZvaWQqPihnZXRBcnJheUJ1ZmZlckRhdGEpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7
CisgICAgY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBpZiAobWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwpCisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRl
bnRGb3JTbG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgc3RvcmVQdHIo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHRlbXBvcmFyeUFkZHJlc3MoZHN0ICsgMSkpOworfQor
ICAgIAordm9pZCBKSVRDb21waWxlcjo6cGFyc2VMb2FkKFJldHVyblR5cGUgcmV0dXJuVHlwZSwg
TGluZWFyTWVtb3J5VHlwZSBsaW5lYXJNZW1vcnlUeXBlLCBib29sIGhhc09mZnNldCwgaW50IGRz
dCkKK3sKKyAgICBwYXJzZUFycmF5QnVmZmVyT2Zmc2V0KGhhc09mZnNldCwgZHN0KTsKKyAgICBs
b2FkUHRyKHRlbXBvcmFyeUFkZHJlc3MoZHN0ICsgMSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBs
b2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgQmFzZUlu
ZGV4IGFkZHJlc3MgPSBCYXNlSW5kZXgoR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QxLCBU
aW1lc09uZSk7CisKKyAgICBzd2l0Y2ggKHJldHVyblR5cGUpIHsKKyAgICBjYXNlIFJldHVyblR5
cGU6OkkzMjoKKyAgICAgICAgc3dpdGNoIChsaW5lYXJNZW1vcnlUeXBlKSB7CisgICAgICAgIGNh
c2UgTGluZWFyTWVtb3J5VHlwZTo6Uzg6CisgICAgICAgICAgICBsb2FkOFNpZ25lZEV4dGVuZFRv
MzIoYWRkcmVzcywgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgTGluZWFyTWVtb3J5VHlwZTo6VTg6CisgICAgICAgICAgICBsb2FkOChhZGRyZXNzLCBH
UFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMaW5lYXJN
ZW1vcnlUeXBlOjpTMTY6CisgICAgICAgICAgICBsb2FkMTZTaWduZWRFeHRlbmRUbzMyKGFkZHJl
c3MsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExp
bmVhck1lbW9yeVR5cGU6OlUxNjoKKyAgICAgICAgICAgIGxvYWQxNihhZGRyZXNzLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMaW5lYXJNZW1vcnlU
eXBlOjpJMzI6CisgICAgICAgICAgICBsb2FkMzIoYWRkcmVzcywgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1Qw
LCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJldHVy
blR5cGU6OkYzMjoKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpGNjQ6CisgICAgICAgIGxvYWQ2NChh
ZGRyZXNzLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIHN0b3JlNjQoR1BSSW5mbzo6cmVnVDAs
IHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJ
VENvbXBpbGVyOjpwYXJzZVN0b3JlKFJldHVyblR5cGUgcmV0dXJuVHlwZSwgTGluZWFyTWVtb3J5
VHlwZSBsaW5lYXJNZW1vcnlUeXBlLCBib29sIGhhc09mZnNldCwgaW50IGRzdCkKK3sKKyAgICBw
YXJzZUFycmF5QnVmZmVyT2Zmc2V0KGhhc09mZnNldCwgZHN0KTsKKyAgICBwYXJzZUV4cHIocmV0
dXJuVHlwZSwgZHN0ICsgMik7CisKKyAgICBsb2FkUHRyKHRlbXBvcmFyeUFkZHJlc3MoZHN0ICsg
MSksIEdQUkluZm86OnJlZ1QxKTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBH
UFJJbmZvOjpyZWdUMik7CisgICAgQmFzZUluZGV4IGFkZHJlc3MgPSBCYXNlSW5kZXgoR1BSSW5m
bzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyLCBUaW1lc09uZSk7CisKKyAgICBzd2l0Y2ggKHJldHVy
blR5cGUpIHsKKyAgICBjYXNlIFJldHVyblR5cGU6OkkzMjoKKyAgICAgICAgbG9hZDMyKHRlbXBv
cmFyeUFkZHJlc3MoZHN0ICsgMiksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgc3dpdGNoIChs
aW5lYXJNZW1vcnlUeXBlKSB7CisgICAgICAgIGNhc2UgTGluZWFyTWVtb3J5VHlwZTo6STg6Cisg
ICAgICAgICAgICBzdG9yZTgoR1BSSW5mbzo6cmVnVDAsIGFkZHJlc3MpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgTGluZWFyTWVtb3J5VHlwZTo6STE2OgorICAgICAgICAgICAg
c3RvcmUxNihHUFJJbmZvOjpyZWdUMCwgYWRkcmVzcyk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBMaW5lYXJNZW1vcnlUeXBlOjpJMzI6CisgICAgICAgICAgICBzdG9yZTMyKEdQ
UkluZm86OnJlZ1QwLCBhZGRyZXNzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAg
ICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpGMzI6CisgICAgICAgIGxvYWQzMih0ZW1w
b3JhcnlBZGRyZXNzKGRzdCArIDIpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIHN0b3JlMzIo
R1BSSW5mbzo6cmVnVDAsIGFkZHJlc3MpOworICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1Qw
LCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJldHVy
blR5cGU6OkY2NDoKKyAgICAgICAgbG9hZDY0KHRlbXBvcmFyeUFkZHJlc3MoZHN0ICsgMiksIEdQ
UkluZm86OnJlZ1QwKTsKKyAgICAgICAgc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgYWRkcmVzcyk7
CisgICAgICAgIHN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZVJldHVyblN0
bXQoKQoreworICAgIHN3aXRjaCAobV9jdXJyZW50UmV0dXJuVHlwZSkgeworICAgIGNhc2UgUmV0
dXJuVHlwZTo6STMyOgorICAgICAgICBwYXJzZUV4cHJJMzIoMCk7CisgICAgICAgIGxvYWQzMih0
ZW1wb3JhcnlBZGRyZXNzKDApLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIG9y
NjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
Uik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmV0dXJuVHlwZTo6RjMyOgorICAgICAgICBw
YXJzZUV4cHIoUmV0dXJuVHlwZTo6RjMyLCAwKTsKKyAgICAgICAgbG9hZERvdWJsZSh0ZW1wb3Jh
cnlBZGRyZXNzKDApLCBGUFJJbmZvOjpmcFJlZ1QwKTsgLy8gRklYTUU6IFRoaXMgbG9hZHMgNjQg
Yml0cyEKKyAgICAgICAgY29udmVydEZsb2F0VG9Eb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgRlBS
SW5mbzo6ZnBSZWdUMCk7CisgICAgICAgIGJveERvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmV0dXJuVHlw
ZTo6RjY0OgorICAgICAgICBwYXJzZUV4cHJGNjQoMCk7CisgICAgICAgIGxvYWREb3VibGUodGVt
cG9yYXJ5QWRkcmVzcygwKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgIGJveERvdWJsZShG
UFJJbmZvOjpmcFJlZ1QwLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUmV0dXJuVHlwZTo6Vm9pZDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgZGVhbGxvY2F0ZVNwYWNlT25TdGFjaygpOworICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7
CisgICAgcmV0KCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlU3RtdExpc3QoKQorewor
ICAgIHVpbnQzMl90IG51bWJlck9mU3RtdHMgPSBtX21vZHVsZS0+bV9yZWFkZXIuaW1tVTMyKCk7
CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mU3RtdHM7ICsraSkKKyAgICAg
ICAgcGFyc2VTdG10KCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlQmxvY2tTdG10KCkK
K3sKKyAgICBwYXJzZVN0bXRMaXN0KCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlSWZT
dG10KCkKK3sKKyAgICBwYXJzZUV4cHJJMzIoMCk7CisgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJl
c3MoMCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBKdW1wIGVuZCA9IGJyYW5jaFRlc3QzMihaZXJv
LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgcGFyc2VTdG10KCk7CisgICAgZW5kLmxpbmsodGhpcyk7
Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlSWZFbHNlU3RtdCgpCit7CisgICAgcGFyc2VF
eHBySTMyKDApOworICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKDApLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgSnVtcCBlbHMgPSBicmFuY2hUZXN0MzIoWmVybywgR1BSSW5mbzo6cmVnVDApOwor
ICAgIHBhcnNlU3RtdCgpOworICAgIEp1bXAgZW5kID0ganVtcCgpOworICAgIGVscy5saW5rKHRo
aXMpOworICAgIHBhcnNlU3RtdCgpOworICAgIGVuZC5saW5rKHRoaXMpOworfQorCit2b2lkIEpJ
VENvbXBpbGVyOjpwYXJzZVdoaWxlU3RtdCgpCit7CisgICAgSnVtcFNjb3BlIGNvbnRpbnVlSnVt
cFNjb3BlKHRoaXMsIGxhYmVsKCkpOworICAgIHB1c2hDb250aW51ZUp1bXBTY29wZSgmY29udGlu
dWVKdW1wU2NvcGUpOworCisgICAgSnVtcExpc3QgYnJlYWtKdW1wTGlzdDsKKyAgICBwdXNoQnJl
YWtKdW1wTGlzdCgmYnJlYWtKdW1wTGlzdCk7CisKKyAgICBwYXJzZUV4cHJJMzIoMCk7CisgICAg
bG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoMCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBKdW1wIGVu
ZCA9IGJyYW5jaFRlc3QzMihaZXJvLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgcGFyc2VTdG10KCk7
CisgICAgY29udGludWVKdW1wU2NvcGUuanVtcCgpOworICAgIGVuZC5saW5rKHRoaXMpOworICAg
IGJyZWFrSnVtcExpc3QubGluayh0aGlzKTsKKworICAgIHBvcEJyZWFrSnVtcExpc3QoKTsKKwor
ICAgIHBvcENvbnRpbnVlSnVtcFNjb3BlKCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNl
RG9TdG10KCkKK3sKKyAgICBKdW1wU2NvcGUgY29udGludWVKdW1wU2NvcGUodGhpcyk7CisgICAg
cHVzaENvbnRpbnVlSnVtcFNjb3BlKCZjb250aW51ZUp1bXBTY29wZSk7CisKKyAgICBKdW1wTGlz
dCBicmVha0p1bXBMaXN0OworICAgIHB1c2hCcmVha0p1bXBMaXN0KCZicmVha0p1bXBMaXN0KTsK
KworICAgIExhYmVsIHN0YXJ0ID0gbGFiZWwoKTsKKyAgICBwYXJzZVN0bXQoKTsKKyAgICBjb250
aW51ZUp1bXBTY29wZS5saW5rKCk7CisgICAgcGFyc2VFeHBySTMyKDApOworICAgIGxvYWQzMih0
ZW1wb3JhcnlBZGRyZXNzKDApLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgSnVtcCBqdW1wVG9TdGFy
dCA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBHUFJJbmZvOjpyZWdUMCk7CisgICAganVtcFRvU3Rh
cnQubGlua1RvKHN0YXJ0LCB0aGlzKTsKKyAgICBicmVha0p1bXBMaXN0LmxpbmsodGhpcyk7CisK
KyAgICBwb3BCcmVha0p1bXBMaXN0KCk7CisKKyAgICBwb3BDb250aW51ZUp1bXBTY29wZSgpOwor
fQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUxhYmVsU3RtdCgpCit7CisgICAgTGFiZWwgY29u
dGludWVMYWJlbCA9IGxhYmVsKCk7CisgICAgSnVtcExpc3QgYnJlYWtKdW1wTGlzdDsKKyAgICBw
dXNoQ29udGludWVMYWJlbExhYmVsKCZjb250aW51ZUxhYmVsKTsKKyAgICBwdXNoQnJlYWtMYWJl
bEp1bXBMaXN0KCZicmVha0p1bXBMaXN0KTsKKyAgICBwYXJzZVN0bXQoKTsKKyAgICBicmVha0p1
bXBMaXN0LmxpbmsodGhpcyk7CisgICAgcG9wQnJlYWtMYWJlbEp1bXBMaXN0KCk7CisgICAgcG9w
Q29udGludWVMYWJlbExhYmVsKCk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlQnJlYWtT
dG10KCkKK3sKKyAgICB0b3BCcmVha0p1bXBMaXN0KCktPmFwcGVuZChqdW1wKCkpOworfQorCit2
b2lkIEpJVENvbXBpbGVyOjpwYXJzZUJyZWFrTGFiZWxTdG10KCkKK3sKKyAgICB1aW50MzJfdCBp
bmRleCA9IG1fbW9kdWxlLT5tX3JlYWRlci5pbW1VMzIoKTsKKyAgICBicmVha0xhYmVsSnVtcExp
c3QoaW5kZXgpLT5hcHBlbmQoanVtcCgpKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VD
b250aW51ZVN0bXQoKQoreworICAgIHRvcENvbnRpbnVlSnVtcFNjb3BlKCktPmp1bXAoKTsKK30K
Kwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VDb250aW51ZUxhYmVsU3RtdCgpCit7CisgICAgdWlu
dDMyX3QgaW5kZXggPSBtX21vZHVsZS0+bV9yZWFkZXIuaW1tVTMyKCk7CisgICAganVtcCgqY29u
dGludWVMYWJlbExhYmVsKGluZGV4KSk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlU3dp
dGNoU3RtdCgpCit7CisgICAgSnVtcExpc3QgYnJlYWtKdW1wTGlzdDsKKyAgICBwdXNoQnJlYWtK
dW1wTGlzdCgmYnJlYWtKdW1wTGlzdCk7CisKKyAgICB1aW50MzJfdCBudW1iZXJPZkNhc2VzID0g
bV9tb2R1bGUtPm1fcmVhZGVyLmltbVUzMigpOworICAgIHBhcnNlRXhwckkzMigwKTsKKyAgICBs
b2FkMzIodGVtcG9yYXJ5QWRkcmVzcygwKSwgR1BSSW5mbzo6cmVnVDApOworCisgICAgSnVtcCB0
YWJsZSA9IGp1bXAoKTsKKworICAgIFZlY3RvcjxMYWJlbD4gbGFiZWxzOworICAgIFZlY3Rvcjxp
bnQzMl90PiBpbW1zOworICAgIExhYmVsIGRlZmF1bHRMYWJlbDsKKyAgICBib29sIGhhc0RlZmF1
bHQgPSBmYWxzZTsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkNhc2Vz
OyArK2kpIHsKKyAgICAgICAgc3dpdGNoIChtX21vZHVsZS0+bV9yZWFkZXIuc3dpdGNoQ2FzZSgp
KSB7CisgICAgICAgIGNhc2UgU3dpdGNoQ2FzZTo6Q2FzZTA6CisgICAgICAgICAgICBsYWJlbHMu
YXBwZW5kKGxhYmVsKCkpOworICAgICAgICAgICAgaW1tcy5hcHBlbmQobV9tb2R1bGUtPm1fcmVh
ZGVyLmltbVMzMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN3aXRjaENh
c2U6OkNhc2UxOgorICAgICAgICAgICAgbGFiZWxzLmFwcGVuZChsYWJlbCgpKTsKKyAgICAgICAg
ICAgIGltbXMuYXBwZW5kKG1fbW9kdWxlLT5tX3JlYWRlci5pbW1TMzIoKSk7CisgICAgICAgICAg
ICBwYXJzZVN0bXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN3aXRjaENh
c2U6OkNhc2VOOgorICAgICAgICAgICAgbGFiZWxzLmFwcGVuZChsYWJlbCgpKTsKKyAgICAgICAg
ICAgIGltbXMuYXBwZW5kKG1fbW9kdWxlLT5tX3JlYWRlci5pbW1TMzIoKSk7CisgICAgICAgICAg
ICBwYXJzZVN0bXRMaXN0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTd2l0
Y2hDYXNlOjpEZWZhdWx0MDoKKyAgICAgICAgICAgIGRlZmF1bHRMYWJlbCA9IGxhYmVsKCk7Cisg
ICAgICAgICAgICBoYXNEZWZhdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFN3aXRjaENhc2U6OkRlZmF1bHQxOgorICAgICAgICAgICAgZGVmYXVsdExhYmVsID0g
bGFiZWwoKTsKKyAgICAgICAgICAgIGhhc0RlZmF1bHQgPSB0cnVlOworICAgICAgICAgICAgcGFy
c2VTdG10KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTd2l0Y2hDYXNlOjpE
ZWZhdWx0TjoKKyAgICAgICAgICAgIGRlZmF1bHRMYWJlbCA9IGxhYmVsKCk7CisgICAgICAgICAg
ICBoYXNEZWZhdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHBhcnNlU3RtdExpc3QoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEp1bXAgZW5kID0ganVt
cCgpOworICAgIHRhYmxlLmxpbmsodGhpcyk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxhYmVscy5zaXplKCk7ICsraSkgeworICAgICAgICBKdW1wIGptcCA9IGJyYW5jaDMyKEVxdWFs
LCBHUFJJbmZvOjpyZWdUMCwgVHJ1c3RlZEltbTMyKGltbXNbaV0pKTsKKyAgICAgICAgam1wLmxp
bmtUbyhsYWJlbHNbaV0sIHRoaXMpOworICAgIH0KKyAgICBpZiAoaGFzRGVmYXVsdCkKKyAgICAg
ICAganVtcChkZWZhdWx0TGFiZWwpOworCisgICAgZW5kLmxpbmsodGhpcyk7CisKKyAgICBicmVh
a0p1bXBMaXN0LmxpbmsodGhpcyk7CisgICAgcG9wQnJlYWtKdW1wTGlzdCgpOworfQorCit2b2lk
IEpJVENvbXBpbGVyOjpwYXJzZUV4cHIoUmV0dXJuVHlwZSByZXR1cm5UeXBlLCBpbnQgZHN0KQor
eworICAgIHN3aXRjaCAocmV0dXJuVHlwZSkgeworICAgIGNhc2UgUmV0dXJuVHlwZTo6STMyOgor
ICAgICAgICBwYXJzZUV4cHJJMzIoZHN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXR1
cm5UeXBlOjpGNjQ6CisgICAgICAgIHBhcnNlRXhwckY2NChkc3QpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFJldHVyblR5cGU6OlZvaWQ6CisgICAgICAgIHBhcnNlRXhwclZvaWQoZHN0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlRXhwckkzMihp
bnQgZHN0KQoreworICAgIEkzMiBpMzI7CisgICAgSTMyV2l0aEltbSBpMzJXaXRoSW1tOworICAg
IHVpbnQ4X3QgaW1tOworCisgICAgaWYgKG1fbW9kdWxlLT5tX3JlYWRlci5jb2RlKCZpMzIsICZp
MzJXaXRoSW1tLCAmaW1tKSkgeworICAgICAgICBzd2l0Y2ggKGkzMikgeworICAgICAgICBjYXNl
IEkzMjo6TGl0UG9vbDoKKyAgICAgICAgICAgIHBhcnNlTGl0UG9vbChSZXR1cm5UeXBlOjpJMzIs
IGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkxpdEltbToKKyAg
ICAgICAgICAgIHBhcnNlTGl0SW1tKFJldHVyblR5cGU6OkkzMiwgZHN0KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6R2V0TG9jOgorICAgICAgICAgICAgcGFyc2VHZXRM
b2NhbChkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpHZXRHbG86
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNl
IEkzMjo6U2V0TG9jOgorICAgICAgICAgICAgcGFyc2VTZXRMb2NhbChkc3QpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpTZXRHbG86CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNlIEkzMjo6U0xvYWQ4OgorICAgICAg
ICAgICAgcGFyc2VMb2FkKFJldHVyblR5cGU6OkkzMiwgTGluZWFyTWVtb3J5VHlwZTo6UzgsIGZh
bHNlLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpTTG9hZE9m
Zjg6CisgICAgICAgICAgICBwYXJzZUxvYWQoUmV0dXJuVHlwZTo6STMyLCBMaW5lYXJNZW1vcnlU
eXBlOjpTOCwgdHJ1ZSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkz
Mjo6VUxvYWQ4OgorICAgICAgICAgICAgcGFyc2VMb2FkKFJldHVyblR5cGU6OkkzMiwgTGluZWFy
TWVtb3J5VHlwZTo6VTgsIGZhbHNlLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgSTMyOjpVTG9hZE9mZjg6CisgICAgICAgICAgICBwYXJzZUxvYWQoUmV0dXJuVHlwZTo6
STMyLCBMaW5lYXJNZW1vcnlUeXBlOjpVOCwgdHJ1ZSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEkzMjo6U0xvYWQxNjoKKyAgICAgICAgICAgIHBhcnNlTG9hZChSZXR1
cm5UeXBlOjpJMzIsIExpbmVhck1lbW9yeVR5cGU6OlMxNiwgZmFsc2UsIGRzdCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlNMb2FkT2ZmMTY6CisgICAgICAgICAgICBw
YXJzZUxvYWQoUmV0dXJuVHlwZTo6STMyLCBMaW5lYXJNZW1vcnlUeXBlOjpTMTYsIHRydWUsIGRz
dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlVMb2FkMTY6CisgICAg
ICAgICAgICBwYXJzZUxvYWQoUmV0dXJuVHlwZTo6STMyLCBMaW5lYXJNZW1vcnlUeXBlOjpVMTYs
IGZhbHNlLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpVTG9h
ZE9mZjE2OgorICAgICAgICAgICAgcGFyc2VMb2FkKFJldHVyblR5cGU6OkkzMiwgTGluZWFyTWVt
b3J5VHlwZTo6VTE2LCB0cnVlLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSTMyOjpMb2FkMzI6CisgICAgICAgICAgICBwYXJzZUxvYWQoUmV0dXJuVHlwZTo6STMyLCBM
aW5lYXJNZW1vcnlUeXBlOjpJMzIsIGZhbHNlLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSTMyOjpMb2FkT2ZmMzI6CisgICAgICAgICAgICBwYXJzZUxvYWQoUmV0dXJu
VHlwZTo6STMyLCBMaW5lYXJNZW1vcnlUeXBlOjpJMzIsIHRydWUsIGRzdCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlN0b3JlODoKKyAgICAgICAgICAgIHBhcnNlU3Rv
cmUoUmV0dXJuVHlwZTo6STMyLCBMaW5lYXJNZW1vcnlUeXBlOjpJOCwgZmFsc2UsIGRzdCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlN0b3JlT2ZmODoKKyAgICAgICAg
ICAgIHBhcnNlU3RvcmUoUmV0dXJuVHlwZTo6STMyLCBMaW5lYXJNZW1vcnlUeXBlOjpJOCwgdHJ1
ZSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6U3RvcmUxNjoK
KyAgICAgICAgICAgIHBhcnNlU3RvcmUoUmV0dXJuVHlwZTo6STMyLCBMaW5lYXJNZW1vcnlUeXBl
OjpJMTYsIGZhbHNlLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMy
OjpTdG9yZU9mZjE2OgorICAgICAgICAgICAgcGFyc2VTdG9yZShSZXR1cm5UeXBlOjpJMzIsIExp
bmVhck1lbW9yeVR5cGU6OkkxNiwgdHJ1ZSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEkzMjo6U3RvcmUzMjoKKyAgICAgICAgICAgIHBhcnNlU3RvcmUoUmV0dXJuVHlw
ZTo6STMyLCBMaW5lYXJNZW1vcnlUeXBlOjpJMzIsIGZhbHNlLCBkc3QpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpTdG9yZU9mZjMyOgorICAgICAgICAgICAgcGFyc2VT
dG9yZShSZXR1cm5UeXBlOjpJMzIsIExpbmVhck1lbW9yeVR5cGU6OkkzMiwgdHJ1ZSwgZHN0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6Q2FsbEludDoKKyAgICAgICAg
ICAgIHBhcnNlQ2FsbEludGVybmFsKFJldHVyblR5cGU6OkkzMiwgZHN0KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6Q2FsbEluZDoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgSTMyOjpDYWxsSW1wOgorICAgICAg
ICAgICAgcGFyc2VDYWxsSW1wb3J0KFJldHVyblR5cGU6OkkzMiwgZHN0KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6Q29uZDoKKyAgICAgICAgICAgIHBhcnNlQ29uZChS
ZXR1cm5UeXBlOjpJMzIsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
MzI6OkNvbW1hOgorICAgICAgICAgICAgcGFyc2VDb21tYShSZXR1cm5UeXBlOjpJMzIsIGRzdCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkZyb21GMzI6CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNlIEkzMjo6RnJv
bUY2NDoKKyAgICAgICAgICAgIHBhcnNlRnJvbUY2NEkzMihkc3QpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgSTMyOjpOZWc6CisgICAgICAgIGNhc2UgSTMyOjpCaXROb3Q6Cisg
ICAgICAgIGNhc2UgSTMyOjpDbHo6CisgICAgICAgIGNhc2UgSTMyOjpMb2dpY05vdDoKKyAgICAg
ICAgY2FzZSBJMzI6OkFiczoKKyAgICAgICAgICAgIHBhcnNlVW5hcnlPcEkzMihpMzIsIGRzdCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkFkZDoKKyAgICAgICAgY2Fz
ZSBJMzI6OlN1YjoKKyAgICAgICAgY2FzZSBJMzI6Ok11bDoKKyAgICAgICAgY2FzZSBJMzI6OlNE
aXY6CisgICAgICAgIGNhc2UgSTMyOjpTTW9kOgorICAgICAgICBjYXNlIEkzMjo6Qml0T3I6Cisg
ICAgICAgIGNhc2UgSTMyOjpCaXRBbmQ6CisgICAgICAgIGNhc2UgSTMyOjpCaXRYb3I6CisgICAg
ICAgIGNhc2UgSTMyOjpMc2g6CisgICAgICAgIGNhc2UgSTMyOjpBcml0aFJzaDoKKyAgICAgICAg
Y2FzZSBJMzI6OkxvZ2ljUnNoOgorICAgICAgICAgICAgcGFyc2VCaW5hcnlPcEkzMihpMzIsIGRz
dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlVEaXY6CisgICAgICAg
IGNhc2UgSTMyOjpVTW9kOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgY2FzZSBJMzI6OkVxSTMyOgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFs
T3BJMzIoRXF1YWwsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6
OkVxRjMyOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgY2FzZSBJMzI6OkVxRjY0OgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3BGNjQoRG91
YmxlRXF1YWwsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6Ok5F
cUkzMjoKKyAgICAgICAgICAgIHBhcnNlUmVsYXRpb25hbE9wSTMyKE5vdEVxdWFsLCBkc3QpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpORXFGMzI6CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNlIEkzMjo6TkVxRjY0
OgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3BGNjQoRG91YmxlTm90RXF1YWwsIGRzdCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlNMZVRoSTMyOgorICAgICAg
ICAgICAgcGFyc2VSZWxhdGlvbmFsT3BJMzIoTGVzc1RoYW4sIGRzdCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlVMZVRoSTMyOgorICAgICAgICAgICAgcGFyc2VSZWxh
dGlvbmFsT3BJMzIoQmVsb3csIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJMzI6OkxlVGhGMzI6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICBjYXNlIEkzMjo6TGVUaEY2NDoKKyAgICAgICAgICAgIHBhcnNlUmVsYXRpb25h
bE9wRjY0KERvdWJsZUxlc3NUaGFuLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgSTMyOjpTTGVFcUkzMjoKKyAgICAgICAgICAgIHBhcnNlUmVsYXRpb25hbE9wSTMyKExl
c3NUaGFuT3JFcXVhbCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkz
Mjo6VUxlRXFJMzI6CisgICAgICAgICAgICBwYXJzZVJlbGF0aW9uYWxPcEkzMihCZWxvd09yRXF1
YWwsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkxlRXFGMzI6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNl
IEkzMjo6TGVFcUY2NDoKKyAgICAgICAgICAgIHBhcnNlUmVsYXRpb25hbE9wRjY0KERvdWJsZUxl
c3NUaGFuT3JFcXVhbCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkz
Mjo6U0dyVGhJMzI6CisgICAgICAgICAgICBwYXJzZVJlbGF0aW9uYWxPcEkzMihHcmVhdGVyVGhh
biwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6VUdyVGhJMzI6
CisgICAgICAgICAgICBwYXJzZVJlbGF0aW9uYWxPcEkzMihBYm92ZSwgZHN0KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6R3JUaEYzMjoKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgSTMyOjpHclRoRjY0OgorICAg
ICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3BGNjQoRG91YmxlR3JlYXRlclRoYW4sIGRzdCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlNHckVxSTMyOgorICAgICAgICAg
ICAgcGFyc2VSZWxhdGlvbmFsT3BJMzIoR3JlYXRlclRoYW5PckVxdWFsLCBkc3QpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpVR3JFcUkzMjoKKyAgICAgICAgICAgIHBh
cnNlUmVsYXRpb25hbE9wSTMyKEFib3ZlT3JFcXVhbCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEkzMjo6R3JFcUYzMjoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgSTMyOjpHckVxRjY0OgorICAgICAgICAgICAg
cGFyc2VSZWxhdGlvbmFsT3BGNjQoRG91YmxlR3JlYXRlclRoYW5PckVxdWFsLCBkc3QpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpTTWluOgorICAgICAgICAgICAgcGFy
c2VNaW5NYXhJMzIoTGVzc1RoYW5PckVxdWFsLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSTMyOjpVTWluOgorICAgICAgICAgICAgcGFyc2VNaW5NYXhJMzIoQmVsb3dP
ckVxdWFsLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpTTWF4
OgorICAgICAgICAgICAgcGFyc2VNaW5NYXhJMzIoR3JlYXRlclRoYW5PckVxdWFsLCBkc3QpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpVTWF4OgorICAgICAgICAgICAg
cGFyc2VNaW5NYXhJMzIoQWJvdmVPckVxdWFsLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3dpdGNoIChpMzJXaXRoSW1tKSB7
CisgICAgICAgIGNhc2UgSTMyV2l0aEltbTo6TGl0SW1tOgorICAgICAgICAgICAgcGFyc2VMaXRJ
bW0oUmV0dXJuVHlwZTo6STMyLCBpbW0sIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBJMzJXaXRoSW1tOjpMaXRQb29sOgorICAgICAgICAgICAgcGFyc2VMaXRQb29sKFJl
dHVyblR5cGU6OkkzMiwgaW1tLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSTMyV2l0aEltbTo6R2V0TG9jOgorICAgICAgICAgICAgcGFyc2VHZXRMb2NhbChpbW0sIGRz
dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
SklUQ29tcGlsZXI6OnBhcnNlRXhwckY2NChpbnQgZHN0KQoreworICAgIEY2NCBmNjQ7CisgICAg
RjY0V2l0aEltbSBmNjRXaXRoSW1tOworICAgIHVpbnQ4X3QgaW1tOworCisgICAgaWYgKG1fbW9k
dWxlLT5tX3JlYWRlci5jb2RlKCZmNjQsICZmNjRXaXRoSW1tLCAmaW1tKSkgeworICAgICAgICBz
d2l0Y2ggKGY2NCkgeworICAgICAgICBjYXNlIEY2NDo6TGl0UG9vbDoKKyAgICAgICAgICAgIHBh
cnNlTGl0UG9vbChSZXR1cm5UeXBlOjpGNjQsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBGNjQ6OkxpdEltbToKKyAgICAgICAgICAgIHBhcnNlTGl0SW1tKFJldHVyblR5
cGU6OkY2NCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2NDo6R2V0
TG9jOgorICAgICAgICAgICAgcGFyc2VHZXRMb2NhbChkc3QpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRjY0OjpHZXRHbG86CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNlIEY2NDo6U2V0TG9jOgorICAgICAgICAgICAgcGFy
c2VTZXRMb2NhbChkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRjY0OjpT
ZXRHbG86CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICBjYXNlIEY2NDo6TG9hZDoKKyAgICAgICAgICAgIHBhcnNlTG9hZChSZXR1cm5UeXBlOjpGNjQs
IExpbmVhck1lbW9yeVR5cGU6OkY2NCwgZmFsc2UsIGRzdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBGNjQ6OkxvYWRPZmY6CisgICAgICAgICAgICBwYXJzZUxvYWQoUmV0dXJu
VHlwZTo6RjY0LCBMaW5lYXJNZW1vcnlUeXBlOjpGNjQsIHRydWUsIGRzdCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBGNjQ6OlN0b3JlOgorICAgICAgICAgICAgcGFyc2VTdG9y
ZShSZXR1cm5UeXBlOjpGNjQsIExpbmVhck1lbW9yeVR5cGU6OkY2NCwgZmFsc2UsIGRzdCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGNjQ6OlN0b3JlT2ZmOgorICAgICAgICAg
ICAgcGFyc2VTdG9yZShSZXR1cm5UeXBlOjpGNjQsIExpbmVhck1lbW9yeVR5cGU6OkY2NCwgdHJ1
ZSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2NDo6Q2FsbEludDoK
KyAgICAgICAgICAgIHBhcnNlQ2FsbEludGVybmFsKFJldHVyblR5cGU6OkY2NCwgZHN0KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2NDo6Q2FsbEluZDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgRjY0OjpDYWxsSW1w
OgorICAgICAgICAgICAgcGFyc2VDYWxsSW1wb3J0KFJldHVyblR5cGU6OkY2NCwgZHN0KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2NDo6Q29uZDoKKyAgICAgICAgICAgIHBh
cnNlQ29uZChSZXR1cm5UeXBlOjpGNjQsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBGNjQ6OkNvbW1hOgorICAgICAgICAgICAgcGFyc2VDb21tYShSZXR1cm5UeXBlOjpG
NjQsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGNjQ6OkZyb21TMzI6
CisgICAgICAgICAgICBwYXJzZUZyb21TMzJGNjQoZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEY2NDo6RnJvbVUzMjoKKyAgICAgICAgY2FzZSBGNjQ6OkZyb21GMzI6Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNlIEY2
NDo6TmVnOgorICAgICAgICBjYXNlIEY2NDo6QWJzOgorICAgICAgICBjYXNlIEY2NDo6Q2VpbDoK
KyAgICAgICAgY2FzZSBGNjQ6OkZsb29yOgorICAgICAgICBjYXNlIEY2NDo6U3FydDoKKyAgICAg
ICAgY2FzZSBGNjQ6OkNvczoKKyAgICAgICAgY2FzZSBGNjQ6OlNpbjoKKyAgICAgICAgY2FzZSBG
NjQ6OlRhbjoKKyAgICAgICAgY2FzZSBGNjQ6OkFDb3M6CisgICAgICAgIGNhc2UgRjY0OjpBU2lu
OgorICAgICAgICBjYXNlIEY2NDo6QVRhbjoKKyAgICAgICAgY2FzZSBGNjQ6OkV4cDoKKyAgICAg
ICAgY2FzZSBGNjQ6OkxuOgorICAgICAgICAgICAgcGFyc2VVbmFyeU9wRjY0KGY2NCwgZHN0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2NDo6QWRkOgorICAgICAgICBjYXNl
IEY2NDo6U3ViOgorICAgICAgICBjYXNlIEY2NDo6TXVsOgorICAgICAgICBjYXNlIEY2NDo6RGl2
OgorICAgICAgICBjYXNlIEY2NDo6QVRhbjI6CisgICAgICAgIGNhc2UgRjY0OjpQb3c6CisgICAg
ICAgICAgICBwYXJzZUJpbmFyeU9wRjY0KGY2NCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEY2NDo6TW9kOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgY2FzZSBGNjQ6Ok1pbjoKKyAgICAgICAgICAgIHBhcnNlTWluTWF4
RjY0KERvdWJsZUxlc3NUaGFuT3JFcXVhbCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEY2NDo6TWF4OgorICAgICAgICAgICAgcGFyc2VNaW5NYXhGNjQoRG91YmxlR3Jl
YXRlclRoYW5PckVxdWFsLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3dpdGNoIChmNjRXaXRoSW1tKSB7CisgICAgICAgIGNh
c2UgRjY0V2l0aEltbTo6TGl0UG9vbDoKKyAgICAgICAgICAgIHBhcnNlTGl0UG9vbChSZXR1cm5U
eXBlOjpGNjQsIGltbSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2
NFdpdGhJbW06OkdldExvYzoKKyAgICAgICAgICAgIHBhcnNlR2V0TG9jYWwoaW1tLCBkc3QpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEpJVENv
bXBpbGVyOjpwYXJzZUV4cHJWb2lkKGludCBkc3QpCit7CisgICAgc3dpdGNoIChtX21vZHVsZS0+
bV9yZWFkZXIudm9pZEV4cHIoKSkgeworICAgIGNhc2UgVm9pZDo6Q2FsbEludDoKKyAgICAgICAg
cGFyc2VDYWxsSW50ZXJuYWwoUmV0dXJuVHlwZTo6Vm9pZCwgZHN0KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBWb2lkOjpDYWxsSW5kOgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIGNhc2UgVm9pZDo6Q2FsbEltcDoKKyAgICAgICAgcGFyc2VDYWxsSW1wb3J0
KFJldHVyblR5cGU6OlZvaWQsIGRzdCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEpJ
VENvbXBpbGVyOjpwYXJzZUxpdFBvb2woUmV0dXJuVHlwZSByZXR1cm5UeXBlLCB1aW50MzJfdCBp
bmRleCwgaW50IGRzdCkKK3sKKyAgICBzd2l0Y2ggKHJldHVyblR5cGUpIHsKKyAgICBjYXNlIFJl
dHVyblR5cGU6OkkzMjoKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobV9tb2R1bGUtPm1f
Y29uc3RhbnRJMzJzW2luZGV4XSksIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUmV0dXJuVHlwZTo6RjY0OgorICAgICAgICBzdG9yZTY0KFRydXN0ZWRJ
bW02NChyZWludGVycHJldERvdWJsZVRvSW50NjQobV9tb2R1bGUtPm1fY29uc3RhbnRGNjRzW2lu
ZGV4XSkpLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklU
Q29tcGlsZXI6OnBhcnNlTGl0UG9vbChSZXR1cm5UeXBlIHJldHVyblR5cGUsIGludCBkc3QpCit7
CisgICAgdWludDMyX3QgaW5kZXggPSBtX21vZHVsZS0+bV9yZWFkZXIuaW1tVTMyKCk7CisgICAg
cGFyc2VMaXRQb29sKHJldHVyblR5cGUsIGluZGV4LCBkc3QpOworfQorCit2b2lkIEpJVENvbXBp
bGVyOjpwYXJzZUxpdEltbShSZXR1cm5UeXBlIHJldHVyblR5cGUsIHVpbnQzMl90IGltbSwgaW50
IGRzdCkKK3sKKyAgICBBU1NFUlQocmV0dXJuVHlwZSA9PSBSZXR1cm5UeXBlOjpJMzIpOworICAg
IHN0b3JlMzIoVHJ1c3RlZEltbTMyKGltbSksIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7Cit9CisK
K3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlTGl0SW1tKFJldHVyblR5cGUgcmV0dXJuVHlwZSwgaW50
IGRzdCkKK3sKKyAgICBzd2l0Y2ggKHJldHVyblR5cGUpIHsKKyAgICBjYXNlIFJldHVyblR5cGU6
OkkzMjoKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobV9tb2R1bGUtPm1fcmVhZGVyLmlt
bVUzMigpKSwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBSZXR1cm5UeXBlOjpGNjQ6CisgICAgICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KHJlaW50ZXJw
cmV0RG91YmxlVG9JbnQ2NChtX21vZHVsZS0+bV9yZWFkZXIuZml4ZWRXaWR0aDxkb3VibGU+KCkp
KSwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZXRJbnRlcm5hbEZ1bmN0aW9uKEV4ZWNTdGF0ZSosIE1v
ZHVsZSogbW9kdWxlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KQoreworICAgIC8vIFRPRE86IFVz
ZSB0aGVzZSB0d28gbGluZXM/CisgICAgLy8gVk0qIHZtID0gZXhlYy0+dm0oKTsKKyAgICAvLyBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUobW9kdWxlLT5mdW5jdGlvbihmdW5jdGlvbkluZGV4KSk7Cit9CisKK3ZvaWQg
SklUQ29tcGlsZXI6OnBhcnNlQ2FsbEludGVybmFsKFJldHVyblR5cGUgcmV0dXJuVHlwZSwgaW50
IGRzdCkKK3sKKyAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4ID0gbV9tb2R1bGUtPm1fcmVhZGVy
LmltbVUzMigpOworICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gbV9tb2R1bGUtPm1f
c2lnbmF0dXJlc1ttX21vZHVsZS0+bV9mdW5jU2lnbmF0dXJlc1tmdW5jdGlvbkluZGV4XV07Cisg
ICAgY29uc3QgVmVjdG9yPFR5cGU+JiBhcmd1bWVudHMgPSBzaWduYXR1cmUuYXJndW1lbnRzOwor
ICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gYXJndW1lbnRzLnNpemUoKTsKKyAgICAvLyBGSVhN
RTogcmV0dXJuVHlwZSBpcyByZWR1bmRhbnQgd2l0aCBzaWduYXR1cmUucmV0dXJuVHlwZQorCisg
ICAgcGFyc2VDYWxsQXJndW1lbnRzKGFyZ3VtZW50cywgZHN0KTsKKworICAgIHN0b3JlMzIoVHJ1
c3RlZEltbTMyKGFyZ3VtZW50Q291bnQgKyAxKSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSkgKyBQYXlsb2FkT2Zmc2V0IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CisKKyAg
ICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCisgICAgICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoLW1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKG1f
bW9kdWxlKSwgVHJ1c3RlZEltbTMyKGZ1bmN0aW9uSW5kZXgpKTsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihnZXRJbnRlcm5hbEZ1bmN0aW9uKSksIEdQUkluZm86
Om5vbkFyZ0dQUjApOworICAgIGNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgaWYgKG1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQorICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
CisgICAgbW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDApOyAvLyBy
ZWdUMCBob2xkcyBjYWxsZWUuCisgICAgc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQWRkcmVzcyhz
dGFja1BvaW50ZXJSZWdpc3RlciwgSlNTdGFjazo6Q2FsbGVlICogc3RhdGljX2Nhc3Q8aW50Pihz
aXplb2YoUmVnaXN0ZXIpKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOworCisgICAgY2Fs
bEZ1bmN0aW9uU2xvd0Nhc2UocmV0dXJuVHlwZSwgZHN0KTsKK30KKworc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2V0SW1wb3J0ZWRGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMs
IE1vZHVsZSogbW9kdWxlLCB1aW50MzJfdCBmdW5jSW1wb3J0SW5kZXgpCit7CisgICAgLy8gVE9E
TzogVXNlIHRoZXNlIHR3byBsaW5lcz8KKyAgICAvLyBWTSogdm0gPSBleGVjLT52bSgpOworICAg
IC8vIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgY29uc3Qg
U3RyaW5nJiBmdW5jdGlvbkltcG9ydE5hbWUgPSBtb2R1bGUtPmZ1bmN0aW9uSW1wb3J0TmFtZShm
dW5jSW1wb3J0SW5kZXgpOworCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLT52bSgpLCBmdW5jdGlvbkltcG9ydE5hbWUpOwor
ICAgIFByb3BlcnR5U2xvdCBzbG90KGdsb2JhbE9iamVjdCk7CisKKyAgICBpZiAoIWdsb2JhbE9i
amVjdC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50aWZpZXIsIHNsb3QpKSB7CisgICAgICAg
IC8vIFRPRE86IERvIHNvbWV0aGluZyEKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCBm
aW5kIGEgZnVuY3Rpb24gbmFtZWQgXCIlc1wiLlxuIiwgZnVuY3Rpb25JbXBvcnROYW1lLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICBhYm9ydCgpOworICAgIH0KKworICAgIEpTVmFsdWUgdmFsdWUg
PSBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50aWZpZXIpOworICAgIGlmICghdmFsdWUuaXNGdW5j
dGlvbigpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXCIlc1wiIGlzIG5vdCBhIGZ1bmN0
aW9uLlxuIiwgZnVuY3Rpb25JbXBvcnROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBhYm9y
dCgpOworICAgIH0KKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOworfQorCit2
b2lkIEpJVENvbXBpbGVyOjpwYXJzZUNhbGxJbXBvcnQoUmV0dXJuVHlwZSByZXR1cm5UeXBlLCBp
bnQgZHN0KQoreworICAgIHVpbnQzMl90IGZ1bmNJbXBvcnRTaWduYXR1cmVJbmRleCA9IG1fbW9k
dWxlLT5tX3JlYWRlci5pbW1VMzIoKTsKKyAgICBjb25zdCBNb2R1bGU6OkZ1bmNJbXBvcnRTaWdu
YXR1cmUmIGZ1bmNJbXBvcnRTaWduYXR1cmUgPSBtX21vZHVsZS0+bV9mdW5jSW1wb3J0U2lnbmF0
dXJlc1tmdW5jSW1wb3J0U2lnbmF0dXJlSW5kZXhdOworICAgIGNvbnN0IFNpZ25hdHVyZSYgc2ln
bmF0dXJlID0gbV9tb2R1bGUtPm1fc2lnbmF0dXJlc1tmdW5jSW1wb3J0U2lnbmF0dXJlLnNpZ25h
dHVyZUluZGV4XTsKKyAgICBjb25zdCBWZWN0b3I8VHlwZT4mIGFyZ3VtZW50cyA9IHNpZ25hdHVy
ZS5hcmd1bWVudHM7CisgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBhcmd1bWVudHMuc2l6ZSgp
OworICAgIC8vIEZJWE1FOiByZXR1cm5UeXBlIGlzIHJlZHVuZGFudCB3aXRoIHNpZ25hdHVyZS5y
ZXR1cm5UeXBlCisKKyAgICBwYXJzZUNhbGxBcmd1bWVudHMoYXJndW1lbnRzLCBkc3QpOworCisg
ICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoYXJndW1lbnRDb3VudCArIDEpLCBBZGRyZXNzKHN0YWNr
UG9pbnRlclJlZ2lzdGVyLCBKU1N0YWNrOjpBcmd1bWVudENvdW50ICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQgLSBzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykpKTsKKworICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKKyAgICAg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRy
dXN0ZWRJbW1QdHIobV9tb2R1bGUpLCBUcnVzdGVkSW1tMzIoZnVuY0ltcG9ydFNpZ25hdHVyZS5m
dW5jSW1wb3J0SW5kZXgpKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZv
aWQqPihnZXRJbXBvcnRlZEZ1bmN0aW9uKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGNh
bGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKQorICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgbW92ZShHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDApOyAvLyByZWdUMCBob2xkcyBjYWxsZWUuCisg
ICAgc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwg
SlNTdGFjazo6Q2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSAtIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOworCisgICAgY2FsbEZ1bmN0aW9uU2xvd0Nhc2UocmV0
dXJuVHlwZSwgZHN0KTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6Y2FsbEZ1bmN0aW9uU2xvd0Nh
c2UoUmV0dXJuVHlwZSByZXR1cm5UeXBlLCBpbnQgZHN0KQoreworICAgIFRodW5rR2VuZXJhdG9y
IGdlbmVyYXRvciA9IGxpbmtUaHVua0dlbmVyYXRvckZvcihDb2RlRm9yQ2FsbCwgUmVnaXN0ZXJQ
cmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CisKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobnVsbHB0
ciksIEdQUkluZm86OnJlZ1QyKTsgLy8gVE9ETzogVXNlIENhbGxMaW5rSW5mbworCisgICAgQ29k
ZVB0ciBwdHIgPSBtX3ZtLT5nZXRDVElTdHViKGdlbmVyYXRvcikuY29kZSgpOworCisgICAgbW92
ZShUcnVzdGVkSW1tUHRyKHB0ci5leGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6bm9uQXJn
R1BSMCk7CisKKyAgICBjYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOworCisgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMigtbV9zdGFja0hlaWdodCAqIDgpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOyAvLyBGSVhNRTogaGFja3kKKworICAgIC8vIEZJWE1F
OiBDYW4gd2UgcmVhbGx5IHVzZSByZXR1cm5WYWx1ZUdQUj8KKyAgICBzd2l0Y2ggKHJldHVyblR5
cGUpIHsKKyAgICBjYXNlIFJldHVyblR5cGU6OkkzMjoKKyAgICAgICAgc3RvcmUzMihHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBSZXR1cm5UeXBlOjpGNjQ6CisgICAgICAgIHVuYm94RG91YmxlV2l0aG91dEFz
c2VydGlvbnMoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OmZwUmVnVDApOworICAg
ICAgICBzdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJldHVyblR5cGU6OlZvaWQ6CisgICAgICAgIGJy
ZWFrOyAvLyBUT0RPOiBTdXJlPworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KK30KKwordm9pZCBKSVRDb21waWxlcjo6cGFyc2VDYWxsQXJndW1lbnRz
KGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJndW1lbnRzLCBpbnQgZHN0KQoreworICAgIHNpemVfdCBh
cmd1bWVudENvdW50ID0gYXJndW1lbnRzLnNpemUoKTsKKyAgICBzaXplX3Qgb2Zmc2V0ID0gV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIGRzdCArIGFy
Z3VtZW50Q291bnQgKyBtX2N1cnJlbnRMb2NhbFR5cGVzLnNpemUoKSkgLSBtX2N1cnJlbnRMb2Nh
bFR5cGVzLnNpemUoKTsgLy8gRklYTUU6IEJldHRlciBuYW1lCisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkgeworICAgICAgICBzd2l0Y2ggKGFyZ3VtZW50
c1tpXSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgICAgIHBhcnNlRXhwckkz
MihvZmZzZXQpOworICAgICAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3Mob2Zmc2V0KSwg
R1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgb3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQoR1BSSW5mbzo6
cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3Mob2Zmc2V0IC0gaSAtIDEpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFR5cGU6OkY2NDoKKyAgICAgICAgICAgIHBhcnNlRXhwckY2NChv
ZmZzZXQpOworICAgICAgICAgICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKG9mZnNldCks
IEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgYm94RG91YmxlKEZQUkluZm86OmZwUmVn
VDAsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIHN0b3JlNjQoR1BSSW5mbzo6cmVnVDAs
IHRlbXBvcmFyeUFkZHJlc3Mob2Zmc2V0IC0gaSAtIDEpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSkpLCB0ZW1wb3JhcnlBZGRyZXNzKG9mZnNldCkpOworCisgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMigtKG9mZnNldCArIG1fY3VycmVudExvY2FsVHlwZXMuc2l6ZSgpICsgMykg
KiA4IC0gOCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7IC8vIEZJWE1FOiBoYWNreQorfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUNvbmQoUmV0
dXJuVHlwZSByZXR1cm5UeXBlLCBpbnQgZHN0KQoreworICAgIHBhcnNlRXhwckkzMihkc3QpOwor
ICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKGRzdCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBK
dW1wIGVscyA9IGJyYW5jaFRlc3QzMihaZXJvLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgcGFyc2VF
eHByKHJldHVyblR5cGUsIGRzdCk7CisgICAgSnVtcCBlbmQgPSBqdW1wKCk7CisgICAgZWxzLmxp
bmsodGhpcyk7CisgICAgcGFyc2VFeHByKHJldHVyblR5cGUsIGRzdCk7CisgICAgZW5kLmxpbmso
dGhpcyk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlQ29tbWEoUmV0dXJuVHlwZSByZXR1
cm5UeXBlLCBpbnQgZHN0KQoreworICAgIHBhcnNlRXhwcihtX21vZHVsZS0+bV9yZWFkZXIucmV0
dXJuVHlwZSgpLCBkc3QpOworICAgIHBhcnNlRXhwcihyZXR1cm5UeXBlLCBkc3QpOworfQorCit2
b2lkIEpJVENvbXBpbGVyOjpwYXJzZUZyb21GNjRJMzIoaW50IGRzdCkKK3sKKyAgICBwYXJzZUV4
cHJGNjQoZHN0KTsKKyAgICBsb2FkRG91YmxlKHRlbXBvcmFyeUFkZHJlc3MoZHN0KSwgRlBSSW5m
bzo6ZnBSZWdUMCk7CisgICAgdHJ1bmNhdGVEb3VibGVUb0ludDMyKEZQUkluZm86OmZwUmVnVDAs
IEdQUkluZm86OnJlZ1QwKTsKKyAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlB
ZGRyZXNzKGRzdCkpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZUZyb21TMzJGNjQoaW50
IGRzdCkKK3sKKyAgICBwYXJzZUV4cHJJMzIoZHN0KTsKKyAgICBjb252ZXJ0SW50MzJUb0RvdWJs
ZSh0ZW1wb3JhcnlBZGRyZXNzKGRzdCksIEZQUkluZm86OmZwUmVnVDApOworICAgIHN0b3JlRG91
YmxlKEZQUkluZm86OmZwUmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7Cit9CisKK3ZvaWQg
SklUQ29tcGlsZXI6OmNhbGxEb3VibGVGdW5jdGlvbihkb3VibGUgKCpmdW5jdGlvbikoZG91Ymxl
KSwgRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKK3sKKyAgICBpZiAobWF4RnJh
bWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLW1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAg
IHNldHVwQXJndW1lbnRzKHNyYyk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2Fz
dDx2b2lkKj4oZnVuY3Rpb24pKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgY2FsbChHUFJJ
bmZvOjpub25BcmdHUFIwKTsKKyAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwp
CisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICAvLyBGSVhNRTogb25seSB3b3JrcyBv
biB4ODYKKyAgICBtb3ZlRG91YmxlKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBkc3QpOworfQor
Cit2b2lkIEpJVENvbXBpbGVyOjpjYWxsRG91YmxlRnVuY3Rpb24oZG91YmxlICgqZnVuY3Rpb24p
KGRvdWJsZSwgZG91YmxlKSwgRlBSZWdpc3RlcklEIHNyYzEsIEZQUmVnaXN0ZXJJRCBzcmMyLCBG
UFJlZ2lzdGVySUQgZHN0KQoreworICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2Fs
bCkKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgc2V0dXBBcmd1bWVudHMoc3JjMSwg
c3JjMik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oZnVuY3Rp
b24pKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgY2FsbChHUFJJbmZvOjpub25BcmdHUFIw
KTsKKyAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCisgICAgICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisKKyAgICAvLyBGSVhNRTogb25seSB3b3JrcyBvbiB4ODYKKyAgICBtb3Zl
RG91YmxlKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBkc3QpOworfQorCit2b2lkIEpJVENvbXBp
bGVyOjpwYXJzZVVuYXJ5T3BJMzIoSTMyIG9wLCBpbnQgZHN0KQoreworICAgIHBhcnNlRXhwcihS
ZXR1cm5UeXBlOjpJMzIsIGRzdCk7CisgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoZHN0KSwg
R1BSSW5mbzo6cmVnVDApOworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIEkzMjo6TmVnOgor
ICAgICAgICBuZWczMihHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
STMyOjpCaXROb3Q6CisgICAgICAgIHhvcjMyKFRydXN0ZWRJbW0zMigtMSksIEdQUkluZm86OnJl
Z1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJMzI6OkNsejoKKyAgICAgICAgY291bnRM
ZWFkaW5nWmVyb3MzMihHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEkzMjo6TG9naWNOb3Q6IHsKKyAgICAgICAgSnVtcCB6ZXJvID0gYnJh
bmNoVGVzdDMyKFplcm8sIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
NjQoMCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgSnVtcCBlbmQgPSBqdW1wKCk7CisgICAg
ICAgIHplcm8ubGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoMSksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgZW5kLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIEkzMjo6QWJzOiB7CisgICAgICAgIEp1bXAgZW5kID0gYnJhbmNoVGVzdDMy
KFBvc2l0aXZlT3JaZXJvLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIG5lZzMyKEdQUkluZm86
OnJlZ1QwKTsKKyAgICAgICAgZW5kLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAg
c3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKK30KKwordm9p
ZCBKSVRDb21waWxlcjo6cGFyc2VVbmFyeU9wRjY0KEY2NCBvcCwgaW50IGRzdCkKK3sKKyAgICBw
YXJzZUV4cHIoUmV0dXJuVHlwZTo6RjY0LCBkc3QpOworICAgIGxvYWREb3VibGUodGVtcG9yYXJ5
QWRkcmVzcyhkc3QpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAg
Y2FzZSBGNjQ6Ok5lZzoKKyAgICAgICAgbmVnYXRlRG91YmxlKEZQUkluZm86OmZwUmVnVDAsIEZQ
UkluZm86OmZwUmVnVDEpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEY2NDo6QWJzOgorICAg
ICAgICBhYnNEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRjY0OjpDZWlsOgorICAgICAgICBjYWxsRG91YmxlRnVuY3Rp
b24oY2VpbCwgRlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRjY0OjpGbG9vcjoKKyAgICAgICAgY2FsbERvdWJsZUZ1bmN0aW9uKGZs
b29yLCBGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBGNjQ6OlNxcnQ6CisgICAgICAgIHNxcnREb3VibGUoRlBSSW5mbzo6ZnBSZWdU
MCwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRjY0OjpDb3M6
CisgICAgICAgIGNhbGxEb3VibGVGdW5jdGlvbihjb3MsIEZQUkluZm86OmZwUmVnVDAsIEZQUklu
Zm86OmZwUmVnVDEpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEY2NDo6U2luOgorICAgICAg
ICBjYWxsRG91YmxlRnVuY3Rpb24oc2luLCBGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJl
Z1QxKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGNjQ6OlRhbjoKKyAgICAgICAgY2FsbERv
dWJsZUZ1bmN0aW9uKHRhbiwgRlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRjY0OjpBQ29zOgorICAgICAgICBjYWxsRG91YmxlRnVu
Y3Rpb24oYWNvcywgRlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRjY0OjpBU2luOgorICAgICAgICBjYWxsRG91YmxlRnVuY3Rpb24o
YXNpbiwgRlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRjY0OjpBVGFuOgorICAgICAgICBjYWxsRG91YmxlRnVuY3Rpb24oYXRhbiwg
RlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRjY0OjpFeHA6CisgICAgICAgIGNhbGxEb3VibGVGdW5jdGlvbihleHAsIEZQUkluZm86
OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEY2
NDo6TG46CisgICAgICAgIGNhbGxEb3VibGVGdW5jdGlvbihsb2csIEZQUkluZm86OmZwUmVnVDAs
IEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgc3RvcmVEb3VibGUoRlBSSW5mbzo6
ZnBSZWdUMSwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKK30KKwordm9pZCBKSVRDb21waWxlcjo6
cGFyc2VCaW5hcnlPcEkzMihJMzIgb3AsIGludCBkc3QpCit7CisgICAgcGFyc2VFeHByKFJldHVy
blR5cGU6OkkzMiwgZHN0KTsKKyAgICBwYXJzZUV4cHIoUmV0dXJuVHlwZTo6STMyLCBkc3QgKyAx
KTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoZHN0ICsgMSksIEdQUkluZm86OnJlZ1QxKTsKKyAg
ICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBJMzI6OkFkZDoKKyAgICAgICAgYWRkMzIoR1BSSW5m
bzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJMzI6
OlN1YjoKKyAgICAgICAgc3ViMzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBJMzI6Ok11bDoKKyAgICAgICAgbXVsMzIoR1BSSW5mbzo6
cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJMzI6OlNE
aXY6CisgICAgICAgIG1vdmUoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIuY2RxKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmlkaXZsX3IoR1BSSW5m
bzo6cmVnVDIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEkzMjo6U01vZDoKKyAgICAgICAg
bW92ZShHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICBtX2Fzc2VtYmxl
ci5jZHEoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuaWRpdmxfcihHUFJJbmZvOjpyZWdUMik7Cisg
ICAgICAgIG1vdmUoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBJMzI6OkJpdE9yOgorICAgICAgICBvcjMyKEdQUkluZm86OnJlZ1QxLCBH
UFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSTMyOjpCaXRBbmQ6Cisg
ICAgICAgIGFuZDMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgSTMyOjpCaXRYb3I6CisgICAgICAgIHhvcjMyKEdQUkluZm86OnJlZ1Qx
LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSTMyOjpMc2g6Cisg
ICAgICAgIGxzaGlmdDMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSTMyOjpBcml0aFJzaDoKKyAgICAgICAgcnNoaWZ0MzIoR1BSSW5m
bzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJMzI6
OkxvZ2ljUnNoOgorICAgICAgICB1cnNoaWZ0MzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJl
Z1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFk
ZHJlc3MoZHN0KSk7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlQmluYXJ5T3BGNjQoRjY0
IG9wLCBpbnQgZHN0KQoreworICAgIHBhcnNlRXhwcihSZXR1cm5UeXBlOjpGNjQsIGRzdCk7Cisg
ICAgcGFyc2VFeHByKFJldHVyblR5cGU6OkY2NCwgZHN0ICsgMSk7CisgICAgbG9hZERvdWJsZSh0
ZW1wb3JhcnlBZGRyZXNzKGRzdCksIEZQUkluZm86OmZwUmVnVDApOworICAgIGxvYWREb3VibGUo
dGVtcG9yYXJ5QWRkcmVzcyhkc3QgKyAxKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgc3dpdGNo
IChvcCkgeworICAgIGNhc2UgRjY0OjpBZGQ6CisgICAgICAgIGFkZERvdWJsZShGUFJJbmZvOjpm
cFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGNjQ6
OlN1YjoKKyAgICAgICAgc3ViRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVn
VDApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEY2NDo6TXVsOgorICAgICAgICBtdWxEb3Vi
bGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRjY0OjpEaXY6CisgICAgICAgIGRpdkRvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBG
UFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGNjQ6OkFUYW4yOgor
ICAgICAgICBjYWxsRG91YmxlRnVuY3Rpb24oYXRhbjIsIEZQUkluZm86OmZwUmVnVDAsIEZQUklu
Zm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEY2NDo6UG93OgorICAgICAgICBjYWxsRG91YmxlRnVuY3Rpb24ocG93LCBGUFJJbmZvOjpmcFJl
Z1QwLCBGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAg
IHN0b3JlRG91YmxlKEZQUkluZm86OmZwUmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7Cit9
CisKK3ZvaWQgSklUQ29tcGlsZXI6OnBhcnNlUmVsYXRpb25hbE9wSTMyKFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZGl0aW9uLCBpbnQgZHN0KQoreworICAgIHBhcnNlRXhwckkzMihkc3QpOworICAg
IHBhcnNlRXhwckkzMihkc3QgKyAxKTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3Qp
LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoZHN0ICsgMSks
IEdQUkluZm86OnJlZ1QxKTsKKyAgICBjb21wYXJlMzIoY29uZGl0aW9uLCBHUFJJbmZvOjpyZWdU
MCwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICBzdG9yZTMyKEdQUkluZm86
OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpw
YXJzZVJlbGF0aW9uYWxPcEY2NChEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBpbnQgZHN0KQor
eworICAgIHBhcnNlRXhwckY2NChkc3QpOworICAgIHBhcnNlRXhwckY2NChkc3QgKyAxKTsKKyAg
ICBsb2FkRG91YmxlKHRlbXBvcmFyeUFkZHJlc3MoZHN0KSwgRlBSSW5mbzo6ZnBSZWdUMCk7Cisg
ICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKGRzdCArIDEpLCBGUFJJbmZvOjpmcFJlZ1Qx
KTsKKyAgICBKdW1wIHRydWVDYXNlID0gYnJhbmNoRG91YmxlKGNvbmRpdGlvbiwgRlBSSW5mbzo6
ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCks
IHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgSnVtcCBlbmQgPSBqdW1wKCk7CisgICAgdHJ1
ZUNhc2UubGluayh0aGlzKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigxKSwgdGVtcG9yYXJ5
QWRkcmVzcyhkc3QpKTsKKyAgICBlbmQubGluayh0aGlzKTsKK30KKwordm9pZCBKSVRDb21waWxl
cjo6cGFyc2VNaW5NYXhJMzIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24sIGludCBkc3Qp
Cit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZBcmd1bWVudHMgPSBtX21vZHVsZS0+bV9yZWFkZXIu
aW1tVTMyKCk7CisgICAgUkVMRUFTRV9BU1NFUlQobnVtYmVyT2ZBcmd1bWVudHMgPj0gMSk7Cisg
ICAgcGFyc2VFeHBySTMyKGRzdCk7CisgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoZHN0KSwg
R1BSSW5mbzo6cmVnVDApOworICAgIGZvciAodWludDMyX3QgaSA9IDE7IGkgPCBudW1iZXJPZkFy
Z3VtZW50czsgKytpKSB7CisgICAgICAgIHBhcnNlRXhwckkzMihkc3QpOworICAgICAgICBsb2Fk
MzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIEp1bXAg
ZW5kID0gYnJhbmNoMzIoY29uZGl0aW9uLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEp
OworICAgICAgICBtb3ZlKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAg
IGVuZC5saW5rKHRoaXMpOworICAgIH0KKyAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1w
b3JhcnlBZGRyZXNzKGRzdCkpOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpwYXJzZU1pbk1heEY2
NChEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBpbnQgZHN0KQoreworICAgIHVpbnQzMl90IG51
bWJlck9mQXJndW1lbnRzID0gbV9tb2R1bGUtPm1fcmVhZGVyLmltbVUzMigpOworICAgIFJFTEVB
U0VfQVNTRVJUKG51bWJlck9mQXJndW1lbnRzID49IDEpOworICAgIHBhcnNlRXhwckY2NChkc3Qp
OworICAgIGxvYWREb3VibGUodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBGUFJJbmZvOjpmcFJlZ1Qw
KTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAxOyBpIDwgbnVtYmVyT2ZBcmd1bWVudHM7ICsraSkg
eworICAgICAgICBwYXJzZUV4cHJGNjQoZHN0KTsKKyAgICAgICAgbG9hZERvdWJsZSh0ZW1wb3Jh
cnlBZGRyZXNzKGRzdCksIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICBKdW1wIGVuZCA9IGJy
YW5jaERvdWJsZShjb25kaXRpb24sIEZQUkluZm86OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDEp
OworICAgICAgICBtb3ZlRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDAp
OworICAgICAgICBlbmQubGluayh0aGlzKTsKKyAgICB9CisgICAgc3RvcmVEb3VibGUoRlBSSW5m
bzo6ZnBSZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21K
SVRDb21waWxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUpJVENvbXBpbGVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNGVlYjAwOGEwOTI1OWUyZTAyMjE1MjI1MGIwMDEzNGY5NTkxOWMwYgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21KSVRDb21w
aWxlci5oCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBXYXNtSklUQ29tcGlsZXJfaAorI2RlZmluZSBXYXNtSklU
Q29tcGlsZXJfaAorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiV2FzbU1v
ZHVsZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgRXhlY1N0YXRlOworY2xhc3MgSklU
Q29kZTsKK2NsYXNzIFZNOworCituYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIEp1bXBTY29wZTsK
K2VudW0gY2xhc3MgTGluZWFyTWVtb3J5VHlwZSA6IHVuc2lnbmVkOworCitjbGFzcyBKSVRDb21w
aWxlciA6IHByaXZhdGUgQ0NhbGxIZWxwZXJzIHsKK3B1YmxpYzoKKyAgICBKSVRDb21waWxlcihW
TSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBNb2R1bGUqIG1vZHVsZSkKKyAgICAgICAgOiBD
Q2FsbEhlbHBlcnModm0sIGNvZGVCbG9jaykKKyAgICAgICAgLCBtX21vZHVsZShtb2R1bGUpCisg
ICAgeworICAgIH0KKworICAgIFJlZlB0cjxKSVRDb2RlPiBjb21waWxlRnVuY3Rpb24oVk0mLCBz
aXplX3QgZnVuY3Rpb25JbmRleCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBhbGxvY2F0ZVNwYWNl
T25TdGFjaygpOworICAgIHZvaWQgZGVhbGxvY2F0ZVNwYWNlT25TdGFjaygpOworCisgICAgdm9p
ZCBwYXJzZVNpZ25hdHVyZShzaXplX3QgZnVuY3Rpb25JbmRleCk7CisgICAgdm9pZCBwYXJzZVZh
cnMoKTsKKworICAgIHZvaWQgcGFyc2VTdG10KCk7CisgICAgdm9pZCBwYXJzZUdldExvY2FsKHVp
bnQzMl90IGltbSwgaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZUdldExvY2FsKGludCBkc3QpOwor
ICAgIHZvaWQgcGFyc2VTZXRMb2NhbCh1aW50MzJfdCBpbW0sIGludCBkc3QpOworICAgIHZvaWQg
cGFyc2VTZXRMb2NhbChpbnQgZHN0KTsKKyAgICB2b2lkIHBhcnNlQXJyYXlCdWZmZXJPZmZzZXQo
Ym9vbCBoYXNPZmZzZXQsIGludCBkc3QpOworICAgIHZvaWQgcGFyc2VMb2FkKFJldHVyblR5cGUs
IExpbmVhck1lbW9yeVR5cGUsIGJvb2wgaGFzT2Zmc2V0LCBpbnQgZHN0KTsKKyAgICB2b2lkIHBh
cnNlU3RvcmUoUmV0dXJuVHlwZSwgTGluZWFyTWVtb3J5VHlwZSwgYm9vbCBoYXNPZmZzZXQsIGlu
dCBkc3QpOworICAgIHZvaWQgcGFyc2VSZXR1cm5TdG10KCk7CisgICAgdm9pZCBwYXJzZUJsb2Nr
U3RtdCgpOworICAgIHZvaWQgcGFyc2VTdG10TGlzdCgpOworICAgIHZvaWQgcGFyc2VJZlN0bXQo
KTsKKyAgICB2b2lkIHBhcnNlSWZFbHNlU3RtdCgpOworICAgIHZvaWQgcGFyc2VXaGlsZVN0bXQo
KTsKKyAgICB2b2lkIHBhcnNlRG9TdG10KCk7CisgICAgdm9pZCBwYXJzZUxhYmVsU3RtdCgpOwor
ICAgIHZvaWQgcGFyc2VCcmVha1N0bXQoKTsKKyAgICB2b2lkIHBhcnNlQnJlYWtMYWJlbFN0bXQo
KTsKKyAgICB2b2lkIHBhcnNlQ29udGludWVTdG10KCk7CisgICAgdm9pZCBwYXJzZUNvbnRpbnVl
TGFiZWxTdG10KCk7CisgICAgdm9pZCBwYXJzZVN3aXRjaFN0bXQoKTsKKworICAgIHZvaWQgcGFy
c2VFeHByKFJldHVyblR5cGUsIGludCBkc3QpOworICAgIHZvaWQgcGFyc2VFeHBySTMyKGludCBk
c3QpOworICAgIHZvaWQgcGFyc2VFeHByRjY0KGludCBkc3QpOworICAgIHZvaWQgcGFyc2VFeHBy
Vm9pZChpbnQgZHN0KTsKKyAgICB2b2lkIHBhcnNlTGl0UG9vbChSZXR1cm5UeXBlLCB1aW50MzJf
dCBpbmRleCwgaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZUxpdFBvb2woUmV0dXJuVHlwZSwgaW50
IGRzdCk7CisgICAgdm9pZCBwYXJzZUxpdEltbShSZXR1cm5UeXBlLCB1aW50MzJfdCBpbW0sIGlu
dCBkc3QpOworICAgIHZvaWQgcGFyc2VMaXRJbW0oUmV0dXJuVHlwZSwgaW50IGRzdCk7CisgICAg
dm9pZCBwYXJzZUNhbGxJbnRlcm5hbChSZXR1cm5UeXBlLCBpbnQgZHN0KTsKKyAgICB2b2lkIHBh
cnNlQ2FsbEltcG9ydChSZXR1cm5UeXBlLCBpbnQgZHN0KTsKKyAgICB2b2lkIGNhbGxGdW5jdGlv
blNsb3dDYXNlKFJldHVyblR5cGUsIGludCBkc3QpOworICAgIHZvaWQgcGFyc2VDYWxsQXJndW1l
bnRzKGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJndW1lbnRzLCBpbnQgZHN0KTsKKyAgICB2b2lkIHBh
cnNlQ29uZChSZXR1cm5UeXBlLCBpbnQgZHN0KTsKKyAgICB2b2lkIHBhcnNlQ29tbWEoUmV0dXJu
VHlwZSwgaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZUZyb21GNjRJMzIoaW50IGRzdCk7CisgICAg
dm9pZCBwYXJzZUZyb21TMzJGNjQoaW50IGRzdCk7CisgICAgdm9pZCBjYWxsRG91YmxlRnVuY3Rp
b24oZG91YmxlICgqZnVuY3Rpb24pKGRvdWJsZSksIEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0
ZXJJRCBkc3QpOworICAgIHZvaWQgY2FsbERvdWJsZUZ1bmN0aW9uKGRvdWJsZSAoKmZ1bmN0aW9u
KShkb3VibGUsIGRvdWJsZSksIEZQUmVnaXN0ZXJJRCBzcmMxLCBGUFJlZ2lzdGVySUQgc3JjMiwg
RlBSZWdpc3RlcklEIGRzdCk7CisgICAgdm9pZCBwYXJzZVVuYXJ5T3BJMzIoSTMyIG9wLCBpbnQg
ZHN0KTsKKyAgICB2b2lkIHBhcnNlVW5hcnlPcEY2NChGNjQgb3AsIGludCBkc3QpOworICAgIHZv
aWQgcGFyc2VCaW5hcnlPcEkzMihJMzIgb3AsIGludCBkc3QpOworICAgIHZvaWQgcGFyc2VCaW5h
cnlPcEY2NChGNjQgb3AsIGludCBkc3QpOworICAgIHZvaWQgcGFyc2VSZWxhdGlvbmFsT3BJMzIo
UmVsYXRpb25hbENvbmRpdGlvbiwgaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZVJlbGF0aW9uYWxP
cEY2NChEb3VibGVDb25kaXRpb24sIGludCBkc3QpOworICAgIHZvaWQgcGFyc2VNaW5NYXhJMzIo
UmVsYXRpb25hbENvbmRpdGlvbiwgaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZU1pbk1heEY2NChE
b3VibGVDb25kaXRpb24sIGludCBkc3QpOworCisgICAgQWRkcmVzcyBzdGFja0FkZHJlc3MoaW50
IGkpIGNvbnN0IC8vIEZJWE1FOiBJcyB0aGlzIGNvcnJlY3Q/CisgICAgeworICAgICAgICByZXR1
cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgLWkgKiA4IC0gOCk7CisgICAg
fQorCisgICAgQWRkcmVzcyB0ZW1wb3JhcnlBZGRyZXNzKGludCBpKSBjb25zdCAvLyBGSVhNRTog
SXMgdGhpcyBjb3JyZWN0PworICAgIHsKKyAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIC0oaSArIG1fY3VycmVudExvY2FsVHlwZXMuc2l6ZSgpKSAqIDgg
LSA4KTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2hDb250aW51ZUxhYmVsTGFiZWwoTGFiZWwqIGxh
YmVsKSB7IG1fY29udGludWVMYWJlbExhYmVscy5hcHBlbmQobGFiZWwpOyB9CisgICAgdm9pZCBw
b3BDb250aW51ZUxhYmVsTGFiZWwoKSB7IG1fY29udGludWVMYWJlbExhYmVscy5yZW1vdmVMYXN0
KCk7IH0KKyAgICBMYWJlbCogY29udGludWVMYWJlbExhYmVsKHNpemVfdCBpKSBjb25zdCB7IHJl
dHVybiBtX2NvbnRpbnVlTGFiZWxMYWJlbHNbaV07IH0KKyAgICB2b2lkIHB1c2hCcmVha0xhYmVs
SnVtcExpc3QoSnVtcExpc3QqIGp1bXBMaXN0KSB7IG1fYnJlYWtMYWJlbEp1bXBMaXN0cy5hcHBl
bmQoanVtcExpc3QpOyB9CisgICAgdm9pZCBwb3BCcmVha0xhYmVsSnVtcExpc3QoKSB7IG1fYnJl
YWtMYWJlbEp1bXBMaXN0cy5yZW1vdmVMYXN0KCk7IH0KKyAgICBKdW1wTGlzdCogYnJlYWtMYWJl
bEp1bXBMaXN0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX2JyZWFrTGFiZWxKdW1wTGlzdHNb
aV07IH0KKworICAgIHZvaWQgcHVzaENvbnRpbnVlSnVtcFNjb3BlKEp1bXBTY29wZSoganVtcFNj
b3BlKSB7IG1fY29udGludWVKdW1wU2NvcGVzLmFwcGVuZChqdW1wU2NvcGUpOyB9CisgICAgdm9p
ZCBwb3BDb250aW51ZUp1bXBTY29wZSgpIHsgbV9jb250aW51ZUp1bXBTY29wZXMucmVtb3ZlTGFz
dCgpOyB9CisgICAgSnVtcFNjb3BlKiB0b3BDb250aW51ZUp1bXBTY29wZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGludWVKdW1wU2NvcGVzLmxhc3QoKTsgfQorCisgICAgdm9pZCBwdXNoQnJlYWtK
dW1wTGlzdChKdW1wTGlzdCoganVtcExpc3QpIHsgbV9icmVha0p1bXBMaXN0cy5hcHBlbmQoanVt
cExpc3QpOyB9CisgICAgdm9pZCBwb3BCcmVha0p1bXBMaXN0KCkgeyBtX2JyZWFrSnVtcExpc3Rz
LnJlbW92ZUxhc3QoKTsgfQorICAgIEp1bXBMaXN0KiB0b3BCcmVha0p1bXBMaXN0KCkgY29uc3Qg
eyByZXR1cm4gbV9icmVha0p1bXBMaXN0cy5sYXN0KCk7IH0KKworICAgIE1vZHVsZSogbV9tb2R1
bGU7CisKKyAgICB1aW50MzJfdCBtX3N0YWNrSGVpZ2h0OyAvLyBGSVhNRTogVGhpcyBjYXVzZWQg
YSAnc2VnbWVudGF0aW9uIGZhdWx0JyBoZWlzZW5idWcgd2hlbiBJIGFkZGVkICJzaXplX3QgbV9z
dGFja0hlaWdodCIuIFNvbWV0aGluZyBtdXN0IGJlIHdyb25nLgorCisgICAgUmV0dXJuVHlwZSBt
X2N1cnJlbnRSZXR1cm5UeXBlOworICAgIFZlY3RvcjxUeXBlPiBtX2N1cnJlbnRMb2NhbFR5cGVz
OworCisgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpMYWJlbCo+IG1fY29udGludWVMYWJlbExh
YmVsczsKKyAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0Kj4gbV9icmVha0xhYmVs
SnVtcExpc3RzOworCisgICAgVmVjdG9yPEp1bXBTY29wZSo+IG1fY29udGludWVKdW1wU2NvcGVz
OworICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QqPiBtX2JyZWFrSnVtcExpc3Rz
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIFdhc21KSVRD
b21waWxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9k
dWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjU1YmFmMmI4ZGMzN2UyNTFhOWNiMmZjZjhjNDIzNmYzMDZiNTVmOTMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNwcApAQCAt
MCwwICsxLDMyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8qCisgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAo
dGhlICJMaWNlbnNlIik7CisgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29t
cGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUg
TGljZW5zZSBhdAorCisgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4w
CisKKyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdy
aXRpbmcsIHNvZnR3YXJlCisgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJp
YnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyBTZWUgdGhlIExp
Y2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5k
CisgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2FzbU1vZHVsZS5oIgorCisjaW5jbHVkZSAiSklUQ29kZS5oIgorI2lu
Y2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5j
bHVkZSAiUmVqZWN0LmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiV2FzbUpJVENvbXBpbGVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdhc20geworCitjb25zdCBDbGFzc0lu
Zm8gTW9kdWxlOjpzX2luZm8gPSB7ICJNb2R1bGUiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKE1vZHVsZSkgfTsKKwordm9pZCBNb2R1bGU6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPGNoYXI+JiBi
dWZmZXIpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworCisgICAgbV9yZWFkZXIg
PSBSZWFkZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVyLmRhdGEoKSkp
OworICAgIGlmIChtX3JlYWRlci5maXhlZFdpZHRoPHVpbnQzMl90PigpICE9IE1hZ2ljTnVtYmVy
KQorICAgICAgICBhYm9ydCgpOworICAgIG1fcmVhZGVyLmZpeGVkV2lkdGg8dWludDMyX3Q+KCk7
IC8vIG91dHB1dCBzaXplIGluIGFzbS5qcyBmb3JtYXQKKworICAgIC8vIFRPRE86IE1ha2UgdGhp
cyBsZXNzIGhhY2t5CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciA9IEFycmF5
QnVmZmVyOjpjcmVhdGUoMTAyNCwgMSk7CisgICAgSlNBcnJheUJ1ZmZlcioganNBcnJheUJ1ZmZl
ciA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5hcnJheUJ1ZmZlclN0
cnVjdHVyZSgpLCBhcnJheUJ1ZmZlci5yZWxlYXNlKCkpOworICAgIG1fYXJyYXlCdWZmZXIuc2V0
KHZtLCB0aGlzLCBqc0FycmF5QnVmZmVyKTsKKworICAgIHBhcnNlQ29uc3RhbnRQb29sU2VjdGlv
bigpOworICAgIHBhcnNlU2lnbmF0dXJlU2VjdGlvbigpOworICAgIHBhcnNlRnVuY3Rpb25JbXBv
cnRTZWN0aW9uKCk7CisgICAgcGFyc2VHbG9iYWxTZWN0aW9uKCk7CisgICAgcGFyc2VGdW5jdGlv
bkRlY2xhcmF0aW9uU2VjdGlvbigpOworICAgIHBhcnNlRnVuY3Rpb25Qb2ludGVyVGFibGVzKCk7
CisgICAgcGFyc2VGdW5jdGlvbkRlZmluaXRpb25TZWN0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwor
ICAgIHBhcnNlRXhwb3J0U2VjdGlvbih2bSk7Cit9CisKK3ZvaWQgTW9kdWxlOjpwYXJzZUNvbnN0
YW50UG9vbFNlY3Rpb24oKQoreworICAgIHVpbnQzMl90IG51bWJlck9mSTMycyA9IG1fcmVhZGVy
LmltbVUzMigpOworICAgIHVpbnQzMl90IG51bWJlck9mRjMycyA9IG1fcmVhZGVyLmltbVUzMigp
OworICAgIHVpbnQzMl90IG51bWJlck9mRjY0cyA9IG1fcmVhZGVyLmltbVUzMigpOworCisgICAg
VmVjdG9yPHVpbnQzMl90PiBjb25zdGFudEkzMnMobnVtYmVyT2ZJMzJzKTsKKyAgICBmb3IgKHVp
bnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZJMzJzOyArK2kpCisgICAgICAgIGNvbnN0YW50STMy
c1tpXSA9IG1fcmVhZGVyLmltbVUzMigpOworCisgICAgVmVjdG9yPGZsb2F0PiBjb25zdGFudEYz
MnMobnVtYmVyT2ZGMzJzKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZG
MzJzOyArK2kpCisgICAgICAgIGNvbnN0YW50RjMyc1tpXSA9IG1fcmVhZGVyLmZpeGVkV2lkdGg8
ZmxvYXQ+KCk7CisKKyAgICBWZWN0b3I8ZG91YmxlPiBjb25zdGFudEY2NHMobnVtYmVyT2ZGNjRz
KTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGNjRzOyArK2kpCisgICAg
ICAgIGNvbnN0YW50RjY0c1tpXSA9IG1fcmVhZGVyLmZpeGVkV2lkdGg8ZG91YmxlPigpOworCisg
ICAgbV9jb25zdGFudEkzMnMgPSBXVEY6Om1vdmUoY29uc3RhbnRJMzJzKTsKKyAgICBtX2NvbnN0
YW50RjMycyA9IFdURjo6bW92ZShjb25zdGFudEYzMnMpOworICAgIG1fY29uc3RhbnRGNjRzID0g
V1RGOjptb3ZlKGNvbnN0YW50RjY0cyk7Cit9CisKK3ZvaWQgTW9kdWxlOjpwYXJzZVNpZ25hdHVy
ZVNlY3Rpb24oKQoreworICAgIHVpbnQzMl90IG51bWJlck9mU2lnbmF0dXJlcyA9IG1fcmVhZGVy
LmltbVUzMigpOworICAgIFZlY3RvcjxTaWduYXR1cmU+IHNpZ25hdHVyZXMobnVtYmVyT2ZTaWdu
YXR1cmVzKTsKKyAgICBmb3IgKHVpbnQzMl90IHNpZ25hdHVyZUluZGV4ID0gMDsgc2lnbmF0dXJl
SW5kZXggPCBudW1iZXJPZlNpZ25hdHVyZXM7ICsrc2lnbmF0dXJlSW5kZXgpIHsKKyAgICAgICAg
UmV0dXJuVHlwZSByZXR1cm5UeXBlID0gbV9yZWFkZXIucmV0dXJuVHlwZSgpOworICAgICAgICB1
aW50MzJfdCBhcmd1bWVudENvdW50ID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgICAgIFNpZ25h
dHVyZSBzaWduYXR1cmUocmV0dXJuVHlwZSwgYXJndW1lbnRDb3VudCk7CisgICAgICAgIGZvciAo
dWludDMyX3QgYXJndW1lbnRJbmRleCA9IDA7IGFyZ3VtZW50SW5kZXggPCBhcmd1bWVudENvdW50
OyArK2FyZ3VtZW50SW5kZXgpCisgICAgICAgICAgICBzaWduYXR1cmUuYXJndW1lbnRzW2FyZ3Vt
ZW50SW5kZXhdID0gbV9yZWFkZXIudHlwZSgpOworICAgICAgICBzaWduYXR1cmVzW3NpZ25hdHVy
ZUluZGV4XSA9IFdURjo6bW92ZShzaWduYXR1cmUpOworICAgIH0KKworICAgIG1fc2lnbmF0dXJl
cyA9IFdURjo6bW92ZShzaWduYXR1cmVzKTsKK30KKwordm9pZCBNb2R1bGU6OnBhcnNlRnVuY3Rp
b25JbXBvcnRTZWN0aW9uKCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZkZ1bmNJbXBvcnRzID0g
bV9yZWFkZXIuaW1tVTMyKCk7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jSW1wb3J0U2lnbmF0
dXJlcyA9IG1fcmVhZGVyLmltbVUzMigpOworCisgICAgbV9mdW5jdGlvbkltcG9ydE5hbWVzLnJl
c2VydmVDYXBhY2l0eShudW1iZXJPZkZ1bmNJbXBvcnRzKTsKKworICAgIFZlY3RvcjxGdW5jSW1w
b3J0U2lnbmF0dXJlPiBmdW5jSW1wb3J0U2lnbmF0dXJlcyhudW1iZXJPZkZ1bmNJbXBvcnRTaWdu
YXR1cmVzKTsKKyAgICBGdW5jSW1wb3J0U2lnbmF0dXJlKiBmdW5jSW1wb3J0U2lnbmF0dXJlID0g
ZnVuY0ltcG9ydFNpZ25hdHVyZXMuZGF0YSgpOworICAgIGZvciAodWludDMyX3QgZnVuY0ltcG9y
dEluZGV4ID0gMDsgZnVuY0ltcG9ydEluZGV4IDwgbnVtYmVyT2ZGdW5jSW1wb3J0czsgKytmdW5j
SW1wb3J0SW5kZXgpIHsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgICAgICB3
aGlsZSAoY2hhciBjID0gbV9yZWFkZXIuc2luZ2xlQ2hhcigpKQorICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmQoYyk7CisgICAgICAgIG1fZnVuY3Rpb25JbXBvcnROYW1lcy5hcHBlbmQoYnVpbGRl
ci50b1N0cmluZygpKTsKKworICAgICAgICB1aW50MzJfdCBudW1iZXJPZlNpZ25hdHVyZXMgPSBt
X3JlYWRlci5pbW1VMzIoKTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJl
ck9mU2lnbmF0dXJlczsgKytpKSB7CisgICAgICAgICAgICBmdW5jSW1wb3J0U2lnbmF0dXJlLT5z
aWduYXR1cmVJbmRleCA9IG1fcmVhZGVyLmltbVUzMigpOworICAgICAgICAgICAgZnVuY0ltcG9y
dFNpZ25hdHVyZS0+ZnVuY0ltcG9ydEluZGV4ID0gZnVuY0ltcG9ydEluZGV4OworICAgICAgICAg
ICAgZnVuY0ltcG9ydFNpZ25hdHVyZSsrOworICAgICAgICB9CisgICAgfQorICAgIGFzc2VydChm
dW5jSW1wb3J0U2lnbmF0dXJlID09IGZ1bmNJbXBvcnRTaWduYXR1cmVzLmRhdGEoKSArIG51bWJl
ck9mRnVuY0ltcG9ydFNpZ25hdHVyZXMpOworCisgICAgbV9mdW5jSW1wb3J0U2lnbmF0dXJlcyA9
IFdURjo6bW92ZShmdW5jSW1wb3J0U2lnbmF0dXJlcyk7Cit9CisKK3ZvaWQgTW9kdWxlOjpwYXJz
ZUdsb2JhbFNlY3Rpb24oKQoreworICAgIHVpbnQzMl90IG51bWJlck9mSTMyWmVybyA9IG1fcmVh
ZGVyLmltbVUzMigpOworICAgIHVpbnQzMl90IG51bWJlck9mRjMyWmVybyA9IG1fcmVhZGVyLmlt
bVUzMigpOworICAgIHVpbnQzMl90IG51bWJlck9mRjY0WmVybyA9IG1fcmVhZGVyLmltbVUzMigp
OworICAgIHVpbnQzMl90IG51bWJlck9mSTMySW1wb3J0ID0gbV9yZWFkZXIuaW1tVTMyKCk7Cisg
ICAgdWludDMyX3QgbnVtYmVyT2ZGMzJJbXBvcnQgPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICB1
aW50MzJfdCBudW1iZXJPZkY2NEltcG9ydCA9IG1fcmVhZGVyLmltbVUzMigpOworICAgIHVpbnQz
Ml90IG51bWJlck9mR2xvYmFsVmFycyA9IG51bWJlck9mSTMyWmVybyArIG51bWJlck9mRjMyWmVy
byArIG51bWJlck9mRjY0WmVybyArIG51bWJlck9mSTMySW1wb3J0ICsgbnVtYmVyT2ZGMzJJbXBv
cnQgKyBudW1iZXJPZkY2NEltcG9ydDsKKworICAgIFZlY3RvcjxUeXBlPiBnbG9iYWxUeXBlcyhu
dW1iZXJPZkdsb2JhbFZhcnMpOworICAgIHNpemVfdCBnbG9iYWxUeXBlSW5kZXggPSAwOworICAg
IGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkkzMlplcm87ICsraSkKKyAgICAgICAg
Z2xvYmFsVHlwZXNbZ2xvYmFsVHlwZUluZGV4KytdID0gVHlwZTo6STMyOworICAgIGZvciAodWlu
dDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkYzMlplcm87ICsraSkKKyAgICAgICAgZ2xvYmFsVHlw
ZXNbZ2xvYmFsVHlwZUluZGV4KytdID0gVHlwZTo6RjMyOworICAgIGZvciAodWludDMyX3QgaSA9
IDA7IGkgPCBudW1iZXJPZkY2NFplcm87ICsraSkKKyAgICAgICAgZ2xvYmFsVHlwZXNbZ2xvYmFs
VHlwZUluZGV4KytdID0gVHlwZTo6RjY0OworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBu
dW1iZXJPZkkzMkltcG9ydDsgKytpKSB7CisgICAgICAgIHdoaWxlIChtX3JlYWRlci5zaW5nbGVD
aGFyKCkpIHsgfQorICAgICAgICBnbG9iYWxUeXBlc1tnbG9iYWxUeXBlSW5kZXgrK10gPSBUeXBl
OjpJMzI7CisgICAgfQorICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkYzMklt
cG9ydDsgKytpKSB7CisgICAgICAgIHdoaWxlIChtX3JlYWRlci5zaW5nbGVDaGFyKCkpIHsgfQor
ICAgICAgICBnbG9iYWxUeXBlc1tnbG9iYWxUeXBlSW5kZXgrK10gPSBUeXBlOjpGMzI7CisgICAg
fQorICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkY2NEltcG9ydDsgKytpKSB7
CisgICAgICAgIHdoaWxlIChtX3JlYWRlci5zaW5nbGVDaGFyKCkpIHsgfQorICAgICAgICBnbG9i
YWxUeXBlc1tnbG9iYWxUeXBlSW5kZXgrK10gPSBUeXBlOjpGNjQ7CisgICAgfQorICAgIG1fZ2xv
YmFsVHlwZXMgPSBXVEY6Om1vdmUoZ2xvYmFsVHlwZXMpOworfQorCit2b2lkIE1vZHVsZTo6cGFy
c2VGdW5jdGlvbkRlY2xhcmF0aW9uU2VjdGlvbigpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZG
dW5jdGlvbnMgPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGZ1bmNT
aWduYXR1cmVzKG51bWJlck9mRnVuY3Rpb25zKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBp
IDwgbnVtYmVyT2ZGdW5jdGlvbnM7ICsraSkKKyAgICAgICAgZnVuY1NpZ25hdHVyZXNbaV0gPSBt
X3JlYWRlci5pbW1VMzIoKTsKKworICAgIG1fZnVuY1NpZ25hdHVyZXMgPSBXVEY6Om1vdmUoZnVu
Y1NpZ25hdHVyZXMpOworfQorCit2b2lkIE1vZHVsZTo6cGFyc2VGdW5jdGlvblBvaW50ZXJUYWJs
ZXMoKQoreworICAgIHVpbnQzMl90IG51bWJlck9mRnVuY1B0clRhYmxlcyA9IG1fcmVhZGVyLmlt
bVUzMigpOworICAgIFZlY3RvcjxGdW5jUHRyVGFibGU+IGZ1bmNQdHJUYWJsZXMobnVtYmVyT2ZG
dW5jUHRyVGFibGVzKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGdW5j
UHRyVGFibGVzOyArK2kpIHsKKyAgICAgICAgZnVuY1B0clRhYmxlc1tpXS5zaWduYXR1cmVJbmRl
eCA9IG1fcmVhZGVyLmltbVUzMigpOworICAgICAgICB1aW50MzJfdCBudW1FbGVtZW50cyA9IG1f
cmVhZGVyLmltbVUzMigpOworICAgICAgICBWZWN0b3I8dWludDMyX3Q+IGVsZW1lbnRzKG51bUVs
ZW1lbnRzKTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBqID0gMDsgaiA8IG51bUVsZW1lbnRzOyAr
K2opCisgICAgICAgICAgICBlbGVtZW50c1tqXSA9IG1fcmVhZGVyLmltbVUzMigpOworICAgICAg
ICBmdW5jUHRyVGFibGVzW2ldLmVsZW1lbnRzID0gV1RGOjptb3ZlKGVsZW1lbnRzKTsKKyAgICB9
CisKKyAgICBtX2Z1bmNQdHJUYWJsZXMgPSBXVEY6Om1vdmUoZnVuY1B0clRhYmxlcyk7Cit9CisK
K3ZvaWQgTW9kdWxlOjpwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvblNlY3Rpb24oVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9mdW5jU2lnbmF0dXJlcy5zaXplKCk7ICsraSkKKyAgICAgICAgcGFyc2VGdW5jdGlvbkRlZmlu
aXRpb24odm0sIGdsb2JhbE9iamVjdCwgaSk7Cit9CisKK3ZvaWQgTW9kdWxlOjpwYXJzZUV4cG9y
dFNlY3Rpb24oVk0mIHZtKQoreworICAgIHN3aXRjaCAobV9yZWFkZXIuZXhwb3J0Rm9ybWF0KCkp
IHsKKyAgICBjYXNlIEV4cG9ydEZvcm1hdDo6RGVmYXVsdDogeworICAgICAgICB1aW50MzJfdCBm
dW5jdGlvbkluZGV4ID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgICAgIElkZW50aWZpZXIgaWRl
bnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZGVmYXVsdCIpOyAvLyBUT0RP
OiBVc2Ugb3RoZXIgbmFtZXMKKyAgICAgICAgcHV0RGlyZWN0KHZtLCBpZGVudGlmaWVyLCBtX2Z1
bmN0aW9uc1tmdW5jdGlvbkluZGV4XS5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIEV4cG9ydEZvcm1hdDo6UmVjb3JkOiB7CisgICAgICAgIHVpbnQzMl90IG51bWJlck9m
RXhwb3J0cyA9IG1fcmVhZGVyLmltbVUzMigpOworICAgICAgICBmb3IgKHVpbnQzMl90IGV4cG9y
dEluZGV4ID0gMDsgZXhwb3J0SW5kZXggPCBudW1iZXJPZkV4cG9ydHM7ICsrZXhwb3J0SW5kZXgp
IHsKKyAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgICAgIHdoaWxl
IChjaGFyIGMgPSBtX3JlYWRlci5zaW5nbGVDaGFyKCkpCisgICAgICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmQoYyk7CisgICAgICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4ID0gbV9yZWFk
ZXIuaW1tVTMyKCk7CisgICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgYnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgICAgIHB1
dERpcmVjdCh2bSwgaWRlbnRpZmllciwgbV9mdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0uZ2V0KCkp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBNb2R1bGU6
OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgc2l6ZV90IGZ1bmN0aW9uSW5kZXgpCit7CisgICAgV2ViQXNzZW1ibHlFeGVjdXRhYmxl
KiBleGVjdXRhYmxlID0gV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpjcmVhdGUodm0sIFNvdXJjZUNv
ZGUoKSk7CisgICAgeworICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgICAg
IFJlZlB0cjxXZWJBc3NlbWJseUNvZGVCbG9jaz4gY29kZUJsb2NrID0gYWRvcHRSZWYobmV3IFdl
YkFzc2VtYmx5Q29kZUJsb2NrKGV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCkpOworICAgICAgICBK
SVRDb21waWxlciBqaXRDb21waWxlcigmdm0sIGNvZGVCbG9jay5nZXQoKSwgdGhpcyk7CisgICAg
ICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZShqaXRDb21waWxlci5jb21waWxlRnVuY3Rpb24odm0s
IGZ1bmN0aW9uSW5kZXgpKTsKKyAgICAgICAgZXhlY3V0YWJsZS0+aW5zdGFsbENvZGUoY29kZUJs
b2NrLmdldCgpKTsKKyAgICB9CisKKyAgICBKU0Z1bmN0aW9uKiBqc0Z1bmN0aW9uID0gSlNGdW5j
dGlvbjo6Y3JlYXRlKHZtLCBleGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpOworICAgIG1fZnVuY3Rp
b25zLmFwcGVuZChXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4odm0sIHRoaXMsIGpzRnVuY3Rpb24p
KTsKK30KKworSlNGdW5jdGlvbiogTW9kdWxlOjpmdW5jdGlvbihzaXplX3QgZnVuY3Rpb25JbmRl
eCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0uZ2V0KCk7
Cit9CisKK2NvbnN0IHZvaWQqIE1vZHVsZTo6YXJyYXlCdWZmZXJEYXRhKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9hcnJheUJ1ZmZlci0+aW1wbCgpLT5kYXRhKCk7Cit9CisKK3ZvaWQgTW9kdWxl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgTW9kdWxlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8TW9kdWxlKj4oY2VsbCk7CisgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgZm9yIChhdXRvIGZ1bmN0
aW9uIDogdGhpc09iamVjdC0+bV9mdW5jdGlvbnMpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZm
dW5jdGlvbik7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYXJyYXlCdWZmZXIp
OworfQorCitib29sIE1vZHVsZTo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
JiBzbG90KQoreworICAgIE1vZHVsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxNb2R1bGUqPihvYmpl
Y3QpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZl
cikgeworICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIERvbnREZWxldGUgfCBSZWFk
T25seSwgdGhpc09iamVjdC0+bV9hcnJheUJ1ZmZlci5nZXQoKSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKwordm9pZCBNb2R1bGU6OnB1dChK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIE1vZHVsZSogdGhp
c09iamVjdCA9IGpzQ2FzdDxNb2R1bGUqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpIHsKKyAgICAgICAgcmVqZWN0KGV4ZWMsIHNs
b3QuaXNTdHJpY3RNb2RlKCksICJBdHRlbXB0aW5nIHRvIHdyaXRlIHRvIGEgcmVhZC1vbmx5IGFy
cmF5IGJ1ZmZlciBwcm9wZXJ0eS4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEJh
c2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30K
KworYm9vbCBNb2R1bGU6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQoreworICAgIE1vZHVsZSogdGhp
c09iamVjdCA9IGpzQ2FzdDxNb2R1bGUqPihvYmplY3QpOworICAgIGlmIChwcm9wZXJ0eU5hbWUg
PT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHJlamVjdChl
eGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHJlYWQtb25seSBhcnJheSBi
dWZmZXIgcHJvcGVydHkuIik7CisKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHko
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7
Cit9CisKK2Jvb2wgTW9kdWxlOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBNb2R1bGUqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8TW9kdWxlKj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSk7Cit9CisKK3ZvaWQgTW9kdWxlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJy
YXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIE1vZHVsZSogdGhpc09iamVjdCA9IGpz
Q2FzdDxNb2R1bGUqPihvYmplY3QpOworICAgIGlmIChtb2RlLmluY2x1ZGVEb250RW51bVByb3Bl
cnRpZXMoKSkKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIp
OworICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0
LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK01vZHVsZSogY29tcGlsZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyKQoreworICAgIHJldHVybiBNb2R1bGU6OmNy
ZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGJ1ZmZlcik7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzE1ODRlMjk0NzlmNzFkMjVlMThjNTkwZDhkOWMzMzM3
ZTUzOWJiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Nb2R1bGUuaApAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8qCisgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNl
LCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgeW91IG1heSBub3QgdXNlIHRoaXMgZmls
ZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIFlvdSBtYXkgb2J0YWlu
IGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vu
c2VzL0xJQ0VOU0UtMi4wCisKKyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3Ig
YWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExp
Y2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyBXSVRIT1VUIFdBUlJB
TlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGll
ZC4KKyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcg
cGVybWlzc2lvbnMgYW5kCisgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworCisj
aWZuZGVmIFdhc21Nb2R1bGVfaAorI2RlZmluZSBXYXNtTW9kdWxlX2gKKworI2luY2x1ZGUgIkpT
T2JqZWN0LmgiCisjaW5jbHVkZSAiV2FzbU9wY29kZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIEpJVENvbXBpbGVyOworCituYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIE1vZHVsZSA6
IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmlu
YWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CisKKyAgICBzdGF0aWMgTW9kdWxlKiBjcmVhdGUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1
ZmZlcikKKyAgICB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY3JlYXRlU3RydWN0
dXJlKHZtLCBnbG9iYWxPYmplY3QpOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8KKyAgICAgICAg
TW9kdWxlKiBtb2R1bGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxNb2R1bGU+KHZtLmhl
YXApKSBNb2R1bGUodm0sIHN0cnVjdHVyZSk7CisgICAgICAgIG1vZHVsZS0+ZmluaXNoQ3JlYXRp
b24odm0sIGdsb2JhbE9iamVjdCwgYnVmZmVyKTsKKyAgICAgICAgcmV0dXJuIG1vZHVsZTsKKyAg
ICB9CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGpzTnVsbCgp
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQor
CisgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24oc2l6ZV90IGZ1bmN0aW9uSW5kZXgpIGNvbnN0Owor
ICAgIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JbXBvcnROYW1lKHNpemVfdCBmdW5jdGlvbkltcG9y
dEluZGV4KSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uSW1wb3J0TmFtZXNbZnVuY3Rpb25JbXBv
cnRJbmRleF07IH0KKyAgICBjb25zdCB2b2lkKiBhcnJheUJ1ZmZlckRhdGEoKSBjb25zdDsKKwor
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQVNUUGFyc2VyOworICAgIGZyaWVuZCBjbGFzcyBK
SVRDb21waWxlcjsKKworICAgIHN0cnVjdCBGdW5jSW1wb3J0U2lnbmF0dXJlIHsKKyAgICAgICAg
dWludDMyX3Qgc2lnbmF0dXJlSW5kZXg7CisgICAgICAgIHVpbnQzMl90IGZ1bmNJbXBvcnRJbmRl
eDsKKyAgICB9OworCisgICAgc3RydWN0IEZ1bmNQdHJUYWJsZSB7CisgICAgICAgIHVpbnQzMl90
IHNpZ25hdHVyZUluZGV4OworICAgICAgICBWZWN0b3I8dWludDMyX3Q+IGVsZW1lbnRzOworICAg
IH07CisKKyAgICBNb2R1bGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAg
OiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyKTsK
KworICAgIHZvaWQgcGFyc2VDb25zdGFudFBvb2xTZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZVNp
Z25hdHVyZVNlY3Rpb24oKTsKKyAgICB2b2lkIHBhcnNlRnVuY3Rpb25JbXBvcnRTZWN0aW9uKCk7
CisgICAgdm9pZCBwYXJzZUdsb2JhbFNlY3Rpb24oKTsKKyAgICB2b2lkIHBhcnNlRnVuY3Rpb25E
ZWNsYXJhdGlvblNlY3Rpb24oKTsKKyAgICB2b2lkIHBhcnNlRnVuY3Rpb25Qb2ludGVyVGFibGVz
KCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvblNlY3Rpb24oVk0mLCBKU0dsb2Jh
bE9iamVjdCopOworICAgIHZvaWQgcGFyc2VFeHBvcnRTZWN0aW9uKFZNJik7CisKKyAgICB2b2lk
IHBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBzaXplX3QgZnVu
Y3Rpb25JbmRleCk7CisKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRp
YyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3Im
LCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0Nl
bGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyB2b2lkIGdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKworICAgIFJlYWRlciBtX3JlYWRlcjsKKworICAgIFZl
Y3RvcjxTaWduYXR1cmU+IG1fc2lnbmF0dXJlczsKKyAgICBWZWN0b3I8dWludDMyX3Q+IG1fY29u
c3RhbnRJMzJzOworICAgIFZlY3RvcjxmbG9hdD4gbV9jb25zdGFudEYzMnM7CisgICAgVmVjdG9y
PGRvdWJsZT4gbV9jb25zdGFudEY2NHM7CisgICAgVmVjdG9yPFN0cmluZz4gbV9mdW5jdGlvbklt
cG9ydE5hbWVzOworICAgIFZlY3RvcjxGdW5jSW1wb3J0U2lnbmF0dXJlPiBtX2Z1bmNJbXBvcnRT
aWduYXR1cmVzOworICAgIFZlY3RvcjxUeXBlPiBtX2dsb2JhbFR5cGVzOworICAgIFZlY3Rvcjx1
aW50MzJfdD4gbV9mdW5jU2lnbmF0dXJlczsKKyAgICBWZWN0b3I8RnVuY1B0clRhYmxlPiBtX2Z1
bmNQdHJUYWJsZXM7CisKKyAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+PiBtX2Z1
bmN0aW9uczsKKyAgICBXcml0ZUJhcnJpZXI8SlNBcnJheUJ1ZmZlcj4gbV9hcnJheUJ1ZmZlcjsK
K307CisKK0pTX0VYUE9SVF9QUklWQVRFIE1vZHVsZSogY29tcGlsZShFeGVjU3RhdGUqLCBjb25z
dCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisK
KyNlbmRpZiAvLyBXYXNtTW9kdWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21PcGNvZGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3Bj
b2Rlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjI2MTg2NzlkNDY1YmJiMzdjYTY2NDFkNjllYzRmMWZjNDM5ZWYy
ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3Bj
b2Rlcy5oCkBAIC0wLDAgKzEsNTk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLyoKKyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZl
cnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4
Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgWW91IG1heSBvYnRhaW4gYSBj
b3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMv
TElDRU5TRS0yLjAKKworIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3Jl
ZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5z
ZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIFdJVEhPVVQgV0FSUkFOVElF
UyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgor
IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJt
aXNzaW9ucyBhbmQKKyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisKKyNpZm5k
ZWYgV2FzbU9wY29kZXNfaAorI2RlZmluZSBXYXNtT3Bjb2Rlc19oCisKKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgV2FzbSB7CisKK3N0YXRp
YyBjb25zdCB1aW50MzJfdCBNYWdpY051bWJlciA9IDB4NmQ3MzYxNzc7CisKK2VudW0gY2xhc3Mg
U3RtdCA6IHVpbnQ4X3QgeworICAgIFNldExvYywKKyAgICBTZXRHbG8sCisgICAgSTMyU3RvcmU4
LAorICAgIEkzMlN0b3JlT2ZmOCwKKyAgICBJMzJTdG9yZTE2LAorICAgIEkzMlN0b3JlT2ZmMTYs
CisgICAgSTMyU3RvcmUzMiwKKyAgICBJMzJTdG9yZU9mZjMyLAorICAgIEYzMlN0b3JlLAorICAg
IEYzMlN0b3JlT2ZmLAorICAgIEY2NFN0b3JlLAorICAgIEY2NFN0b3JlT2ZmLAorICAgIENhbGxJ
bnQsCisgICAgQ2FsbEluZCwKKyAgICBDYWxsSW1wLAorICAgIFJldCwKKyAgICBCbG9jaywKKyAg
ICBJZlRoZW4sCisgICAgSWZFbHNlLAorICAgIFdoaWxlLAorICAgIERvLAorICAgIExhYmVsLAor
ICAgIEJyZWFrLAorICAgIEJyZWFrTGFiZWwsCisgICAgQ29udGludWUsCisgICAgQ29udGludWVM
YWJlbCwKKyAgICBTd2l0Y2gsCisKKyAgICBCYWQKK307CisKK2VudW0gY2xhc3MgU3RtdFdpdGhJ
bW0gOiB1aW50OF90IHsKKyAgICBTZXRMb2MsCisgICAgU2V0R2xvLAorICAgIFJlc2V2ZWQxLAor
ICAgIFJlc2V2ZWQyLAorCisgICAgQmFkCit9OworCitlbnVtIGNsYXNzIFN3aXRjaENhc2UgOiB1
aW50OF90IHsKKyAgICBDYXNlMCwKKyAgICBDYXNlMSwKKyAgICBDYXNlTiwKKyAgICBEZWZhdWx0
MCwKKyAgICBEZWZhdWx0MSwKKyAgICBEZWZhdWx0TgorfTsKKworZW51bSBjbGFzcyBJMzIgOiB1
aW50OF90IHsKKyAgICBMaXRQb29sLAorICAgIExpdEltbSwKKyAgICBHZXRMb2MsCisgICAgR2V0
R2xvLAorICAgIFNldExvYywKKyAgICBTZXRHbG8sCisgICAgU0xvYWQ4LAorICAgIFNMb2FkT2Zm
OCwKKyAgICBVTG9hZDgsCisgICAgVUxvYWRPZmY4LAorICAgIFNMb2FkMTYsCisgICAgU0xvYWRP
ZmYxNiwKKyAgICBVTG9hZDE2LAorICAgIFVMb2FkT2ZmMTYsCisgICAgTG9hZDMyLAorICAgIExv
YWRPZmYzMiwKKyAgICBTdG9yZTgsCisgICAgU3RvcmVPZmY4LAorICAgIFN0b3JlMTYsCisgICAg
U3RvcmVPZmYxNiwKKyAgICBTdG9yZTMyLAorICAgIFN0b3JlT2ZmMzIsCisgICAgQ2FsbEludCwK
KyAgICBDYWxsSW5kLAorICAgIENhbGxJbXAsCisgICAgQ29uZCwKKyAgICBDb21tYSwKKyAgICBG
cm9tRjMyLAorICAgIEZyb21GNjQsCisgICAgTmVnLAorICAgIEFkZCwKKyAgICBTdWIsCisgICAg
TXVsLAorICAgIFNEaXYsCisgICAgVURpdiwKKyAgICBTTW9kLAorICAgIFVNb2QsCisgICAgQml0
Tm90LAorICAgIEJpdE9yLAorICAgIEJpdEFuZCwKKyAgICBCaXRYb3IsCisgICAgTHNoLAorICAg
IEFyaXRoUnNoLAorICAgIExvZ2ljUnNoLAorICAgIENseiwKKyAgICBMb2dpY05vdCwKKyAgICBF
cUkzMiwKKyAgICBFcUYzMiwKKyAgICBFcUY2NCwKKyAgICBORXFJMzIsCisgICAgTkVxRjMyLAor
ICAgIE5FcUY2NCwKKyAgICBTTGVUaEkzMiwKKyAgICBVTGVUaEkzMiwKKyAgICBMZVRoRjMyLAor
ICAgIExlVGhGNjQsCisgICAgU0xlRXFJMzIsCisgICAgVUxlRXFJMzIsCisgICAgTGVFcUYzMiwK
KyAgICBMZUVxRjY0LAorICAgIFNHclRoSTMyLAorICAgIFVHclRoSTMyLAorICAgIEdyVGhGMzIs
CisgICAgR3JUaEY2NCwKKyAgICBTR3JFcUkzMiwKKyAgICBVR3JFcUkzMiwKKyAgICBHckVxRjMy
LAorICAgIEdyRXFGNjQsCisgICAgU01pbiwKKyAgICBVTWluLAorICAgIFNNYXgsCisgICAgVU1h
eCwKKyAgICBBYnMsCisKKyAgICBCYWQKK307CisKK2VudW0gY2xhc3MgSTMyV2l0aEltbSA6IHVp
bnQ4X3QgeworICAgIExpdFBvb2wsCisgICAgTGl0SW1tLAorICAgIEdldExvYywKKyAgICBSZXNl
cnZlZCwKKworICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBGMzIgOiB1aW50OF90IHsKKyAgICBM
aXRQb29sLAorICAgIExpdEltbSwKKyAgICBHZXRMb2MsCisgICAgR2V0R2xvLAorICAgIFNldExv
YywKKyAgICBTZXRHbG8sCisgICAgTG9hZCwKKyAgICBMb2FkT2ZmLAorICAgIFN0b3JlLAorICAg
IFN0b3JlT2ZmLAorICAgIENhbGxJbnQsCisgICAgQ2FsbEluZCwKKyAgICBDb25kLAorICAgIENv
bW1hLAorICAgIEZyb21TMzIsCisgICAgRnJvbVUzMiwKKyAgICBGcm9tRjY0LAorICAgIE5lZywK
KyAgICBBZGQsCisgICAgU3ViLAorICAgIE11bCwKKyAgICBEaXYsCisgICAgQWJzLAorICAgIENl
aWwsCisgICAgRmxvb3IsCisgICAgU3FydCwKKworICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBG
MzJXaXRoSW1tIDogdWludDhfdCB7CisgICAgTGl0UG9vbCwKKyAgICBHZXRMb2MsCisgICAgUmVz
ZXJ2ZWQwLAorICAgIFJlc2VydmVkMSwKKworICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBGNjQg
OiB1aW50OF90IHsKKyAgICBMaXRQb29sLAorICAgIExpdEltbSwKKyAgICBHZXRMb2MsCisgICAg
R2V0R2xvLAorICAgIFNldExvYywKKyAgICBTZXRHbG8sCisgICAgTG9hZCwKKyAgICBMb2FkT2Zm
LAorICAgIFN0b3JlLAorICAgIFN0b3JlT2ZmLAorICAgIENhbGxJbnQsCisgICAgQ2FsbEluZCwK
KyAgICBDYWxsSW1wLAorICAgIENvbmQsCisgICAgQ29tbWEsCisgICAgRnJvbVMzMiwKKyAgICBG
cm9tVTMyLAorICAgIEZyb21GMzIsCisgICAgTmVnLAorICAgIEFkZCwKKyAgICBTdWIsCisgICAg
TXVsLAorICAgIERpdiwKKyAgICBNb2QsCisgICAgTWluLAorICAgIE1heCwKKyAgICBBYnMsCisg
ICAgQ2VpbCwKKyAgICBGbG9vciwKKyAgICBTcXJ0LAorICAgIENvcywKKyAgICBTaW4sCisgICAg
VGFuLAorICAgIEFDb3MsCisgICAgQVNpbiwKKyAgICBBVGFuLAorICAgIEFUYW4yLAorICAgIEV4
cCwKKyAgICBMbiwKKyAgICBQb3csCisKKyAgICBCYWQKK307CisKK2VudW0gY2xhc3MgRjY0V2l0
aEltbSA6IHVpbnQ4X3QgeworICAgIExpdFBvb2wsCisgICAgR2V0TG9jLAorICAgIFJlc2VydmVk
MCwKKyAgICBSZXNlcnZlZDEsCisKKyAgICBCYWQKK307CisKK2VudW0gY2xhc3MgVm9pZCA6IHVp
bnQ4X3QgeworICAgIENhbGxJbnQsCisgICAgQ2FsbEluZCwKKyAgICBDYWxsSW1wLAorCisgICAg
QmFkCit9OworCitlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsKKyAgICBJMzIsCisgICAgRjMy
LAorICAgIEY2NAorfTsKKworZW51bSBjbGFzcyBWYXJUeXBlcyA6IHVpbnQ4X3QgeworICAgIEkz
MiA9IDB4MSwKKyAgICBGMzIgPSAweDIsCisgICAgRjY0ID0gMHg0LAorfTsKKworaW5saW5lIFZh
clR5cGVzIG9wZXJhdG9yfCAoVmFyVHlwZXMgbGhzLCBWYXJUeXBlcyByaHMpIHsgcmV0dXJuIFZh
clR5cGVzKHVpbnQ4X3QobGhzKSB8IHVpbnQ4X3QocmhzKSk7IH0KK2lubGluZSBib29sIG9wZXJh
dG9yJihWYXJUeXBlcyBsaHMsIFZhclR5cGVzIHJocykgeyByZXR1cm4gYm9vbCh1aW50OF90KGxo
cykgJiB1aW50OF90KHJocykpOyB9CisKK2VudW0gY2xhc3MgVmFyVHlwZXNXaXRoSW1tIDogdWlu
dDhfdCB7CisgICAgT25seUkzMiwKKyAgICBSZXNlcnZlZDAsCisgICAgUmVzZXJ2ZWQxLAorICAg
IFJlc2VydmVkMgorfTsKKworZW51bSBjbGFzcyBSZXR1cm5UeXBlIDogdWludDhfdCB7CisgICAg
STMyID0gdWludDhfdChUeXBlOjpJMzIpLAorICAgIEYzMiA9IHVpbnQ4X3QoVHlwZTo6RjMyKSwK
KyAgICBGNjQgPSB1aW50OF90KFR5cGU6OkY2NCksCisgICAgVm9pZAorfTsKKworCisKK2NsYXNz
IEV4cHIgeworcHVibGljOgorICAgIEV4cHIoKQorICAgIDogbV90eXBlKFJldHVyblR5cGUoLTEp
KSwgdSB7IH0KKyAgICB7CisgICAgfQorICAgIEV4cHIoSTMyIGkzMikgOiBtX3R5cGUoUmV0dXJu
VHlwZTo6STMyKSB7IHUuaTMyID0gaTMyOyB9CisgICAgRXhwcihGMzIgZjMyKSA6IG1fdHlwZShS
ZXR1cm5UeXBlOjpGMzIpIHsgdS5mMzIgPSBmMzI7IH0KKyAgICBFeHByKEY2NCBmNjQpIDogbV90
eXBlKFJldHVyblR5cGU6OkY2NCkgeyB1LmY2NCA9IGY2NDsgfQorICAgIEV4cHIoVm9pZCB2KSA6
IG1fdHlwZShSZXR1cm5UeXBlOjpWb2lkKSB7IHUudiA9IHY7IH0KKworICAgIFJldHVyblR5cGUg
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIEkzMiBpMzIoKSBjb25zdCB7IHJl
dHVybiB1LmkzMjsgfQorICAgIEYzMiBmMzIoKSBjb25zdCB7IHJldHVybiB1LmYzMjsgfQorICAg
IEY2NCBmNjQoKSBjb25zdCB7IHJldHVybiB1LmY2NDsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09
KEV4cHIgcmhzKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gcmhzLm1fdHlwZSAmJiB1LnJhdyA9
PSByaHMudS5yYXc7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oRXhwciByaHMpIGNvbnN0IHsgcmV0
dXJuICEoKnRoaXMgPT0gcmhzKTsgfQorCitwcml2YXRlOgorICAgIFJldHVyblR5cGUgbV90eXBl
OworICAgIHVuaW9uIFUgeworICAgICAgICBJMzIgaTMyOworICAgICAgICBGMzIgZjMyOworICAg
ICAgICBGNjQgZjY0OworICAgICAgICBWb2lkIHY7CisgICAgICAgIHVpbnQ4X3QgcmF3OworICAg
IH0gdTsKKworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFUpID09IHNpemVvZih1aW50OF90KSwg
IkV4YWN0IG92ZXJsYXkgb2YgcmF3XyIpOworfTsKKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgSGFz
SW1tRmxhZyA9IDB4ODA7CitzdGF0aWNfYXNzZXJ0KHVpbnQ4X3QoSTMyOjpCYWQpIDw9IEhhc0lt
bUZsYWcsICJNU0IgcmVzZXJ2ZWQgdG8gZGlzdGluZ3Vpc2ggSTMyIGZyb20gSTMyV2l0aEltbSIp
Oworc3RhdGljX2Fzc2VydCh1aW50OF90KEYzMjo6QmFkKSA8PSBIYXNJbW1GbGFnLCAiTVNCIHJl
c2VydmVkIHRvIGRpc3Rpbmd1aXNoIEYzMiBmcm9tIEYzMldpdGhJbW0iKTsKK3N0YXRpY19hc3Nl
cnQodWludDhfdChGNjQ6OkJhZCkgPD0gSGFzSW1tRmxhZywgIk1TQiByZXNlcnZlZCB0byBkaXN0
aW5ndWlzaCBGNjQgZnJvbSBGNjRXaXRoSW1tIik7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBP
cFdpdGhJbW1CaXRzID0gMjsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBPcFdpdGhJbW1MaW1pdCA9
IDEgPDwgT3BXaXRoSW1tQml0czsKK3N0YXRpY19hc3NlcnQodWludDhfdChJMzJXaXRoSW1tOjpC
YWQpIDw9IE9wV2l0aEltbUxpbWl0LCAiSTMyV2l0aEltbSBvcCBmaXRzIik7CitzdGF0aWNfYXNz
ZXJ0KHVpbnQ4X3QoRjMyV2l0aEltbTo6QmFkKSA8PSBPcFdpdGhJbW1MaW1pdCwgIkYzMldpdGhJ
bW0gb3AgZml0cyIpOworc3RhdGljX2Fzc2VydCh1aW50OF90KEY2NFdpdGhJbW06OkJhZCkgPD0g
T3BXaXRoSW1tTGltaXQsICJGNjRXaXRoSW1tIG9wIGZpdHMiKTsKKworc3RhdGljIGNvbnN0IHVu
c2lnbmVkIEltbUJpdHMgPSA1Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IEltbUxpbWl0ID0gMSA8
PCBJbW1CaXRzOworc3RhdGljX2Fzc2VydCgoMSArIE9wV2l0aEltbUJpdHMgKyBJbW1CaXRzKSA9
PSA4LCAiQml0cyBvZiBpbW1lZGlhdGUgb3Agc2hvdWxkIGFkZCB1cCB0byBhIGJ5dGUiKTsKKwor
c3RhdGljIGlubGluZSB1aW50OF90IFBhY2tPcFdpdGhJbW0odWludDhfdCBvcCwgdWludDhfdCBp
bW0pCit7CisgICAgYXNzZXJ0KG9wIDwgT3BXaXRoSW1tTGltaXQpOworICAgIGFzc2VydChpbW0g
PCBJbW1MaW1pdCk7CisgICAgcmV0dXJuIEhhc0ltbUZsYWcgfCAodWludDhfdChvcCkgPDwgSW1t
Qml0cykgfCBpbW07Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUV2l0aEltbT4KK3N0YXRpYyBpbmxp
bmUgdm9pZCBVbnBhY2tPcFdpdGhJbW0odWludDhfdCBieXRlLCBUV2l0aEltbSogb3AsIHVpbnQ4
X3QgKmltbSkKK3sKKyAgICBhc3NlcnQoYnl0ZSAmIEhhc0ltbUZsYWcpOworICAgICpvcCA9IFRX
aXRoSW1tKChieXRlID4+IEltbUJpdHMpICYgKE9wV2l0aEltbUxpbWl0IC0gMSkpOworICAgICpp
bW0gPSBieXRlICYgKEltbUxpbWl0IC0gMSk7Cit9CisKK2NsYXNzIEV4cHJXaXRoSW1tIHsKK3B1
YmxpYzoKKyAgICBFeHByV2l0aEltbSgpCisgICAgICAgIDogbV90eXBlKFR5cGUoLTEpKQorICAg
IHsKKyAgICB9CisgICAgRXhwcldpdGhJbW0oSTMyV2l0aEltbSBpMzIpIDogbV90eXBlKFR5cGU6
OkkzMikgeyB1LmkzMiA9IGkzMjsgfQorICAgIEV4cHJXaXRoSW1tKEYzMldpdGhJbW0gZjMyKSA6
IG1fdHlwZShUeXBlOjpGMzIpIHsgdS5mMzIgPSBmMzI7IH0KKyAgICBFeHByV2l0aEltbShGNjRX
aXRoSW1tIGY2NCkgOiBtX3R5cGUoVHlwZTo6RjY0KSB7IHUuZjY0ID0gZjY0OyB9CisKKyAgICBU
eXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBJMzJXaXRoSW1tIGkzMigp
IGNvbnN0IHsgcmV0dXJuIHUuaTMyOyB9CisgICAgRjMyV2l0aEltbSBmMzIoKSBjb25zdCB7IHJl
dHVybiB1LmYzMjsgfQorICAgIEY2NFdpdGhJbW0gZjY0KCkgY29uc3QgeyByZXR1cm4gdS5mNjQ7
IH0KKworcHJpdmF0ZToKKyAgICBUeXBlIG1fdHlwZTsKKyAgICB1bmlvbiBVIHsKKyAgICAgICAg
STMyV2l0aEltbSBpMzI7CisgICAgICAgIEYzMldpdGhJbW0gZjMyOworICAgICAgICBGNjRXaXRo
SW1tIGY2NDsKKyAgICAgICAgdWludDhfdCByYXc7CisgICAgfSB1OworCisgICAgc3RhdGljX2Fz
c2VydChzaXplb2YoVSkgPT0gc2l6ZW9mKHVpbnQ4X3QpLCAiRXhhY3Qgb3ZlcmxheSBvZiByYXdf
Iik7Cit9OworCitlbnVtIGNsYXNzIEV4cG9ydEZvcm1hdCA6IHVpbnQ4X3QgeworICAgIERlZmF1
bHQsCisgICAgUmVjb3JkCit9OworCitzdHJ1Y3QgU2lnbmF0dXJlIHsKKyAgICBSZXR1cm5UeXBl
IHJldHVyblR5cGU7CisgICAgVmVjdG9yPFR5cGU+IGFyZ3VtZW50czsKKworICAgIFNpZ25hdHVy
ZSgpIHsgfQorICAgIFNpZ25hdHVyZShSZXR1cm5UeXBlIHJldHVyblR5cGUpCisgICAgICAgIDog
cmV0dXJuVHlwZShyZXR1cm5UeXBlKSB7IH0KKyAgICBTaWduYXR1cmUoUmV0dXJuVHlwZSByZXR1
cm5UeXBlLCB1aW50MzJfdCBhcmd1bWVudENvdW50KQorICAgICAgICA6IHJldHVyblR5cGUocmV0
dXJuVHlwZSkKKyAgICAgICAgLCBhcmd1bWVudHMoYXJndW1lbnRDb3VudCkgeyB9CisgICAgU2ln
bmF0dXJlKFJldHVyblR5cGUgcmV0dXJuVHlwZSwgVmVjdG9yPFR5cGU+JiYgYXJndW1lbnRzKQor
ICAgICAgICA6IHJldHVyblR5cGUocmV0dXJuVHlwZSkKKyAgICAgICAgLCBhcmd1bWVudHMoV1RG
Ojptb3ZlKGFyZ3VtZW50cykpIHsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNpZ25h
dHVyZSYgcmhzKSBjb25zdCB7IHJldHVybiByZXR1cm5UeXBlID09IHJocy5yZXR1cm5UeXBlICYm
IGFyZ3VtZW50cyA9PSByaHMuYXJndW1lbnRzOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFNpZ25hdHVyZSYgcmhzKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IHJocyk7IH0KKworICAg
IHN0cnVjdCBIYXNoIHsKKyAgICAgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IFNpZ25hdHVyZSAm
c2lnbmF0dXJlKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNp
emVvZihUeXBlKSA9PSAxICYmIHNpemVvZihSZXR1cm5UeXBlKSA9PSAxLCAiU2hpZnQgbW9yZSIp
OworICAgICAgICAgICAgdWludDMyX3QgaCA9IHVpbnQ4X3Qoc2lnbmF0dXJlLnJldHVyblR5cGUp
OworICAgICAgICAgICAgZm9yIChUeXBlIHQgOiBzaWduYXR1cmUuYXJndW1lbnRzKQorICAgICAg
ICAgICAgICAgIGggPSAoKGggPDwgMikgfCB1aW50OF90KHQpKSBeIChoID4+IDMwKTsKKyAgICAg
ICAgICAgIHJldHVybiBoOworICAgICAgICB9CisgICAgfTsKK307CisKK2NsYXNzIFJlYWRlciB7
CitwdWJsaWM6CisgICAgUmVhZGVyKCkgeyB9CisgICAgUmVhZGVyKGNvbnN0IHVpbnQ4X3QqIGJl
Z2luKQorICAgICAgICA6IG1fY3Vyc29yKGJlZ2luKQorICAgIHsKKyAgICB9CisKKyAgICBjb25z
dCB1aW50OF90KiBjdXJzb3IoKSBjb25zdCB7IHJldHVybiBtX2N1cnNvcjsgfQorICAgIHZvaWQg
c2V0Q3Vyc29yKGNvbnN0IHVpbnQ4X3QqIGN1cnNvcikgeyBtX2N1cnNvciA9IGN1cnNvcjsgfQor
ICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBUIGZpeGVkV2lkdGgoKTsKKyAgICBTdG10IHN0bXQoKSB7
IHJldHVybiB1ODxTdG10PigpOyB9CisgICAgU3dpdGNoQ2FzZSBzd2l0Y2hDYXNlKCkgeyByZXR1
cm4gdTg8U3dpdGNoQ2FzZT4oKTsgfQorICAgIHRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFRXaXRo
SW1tPiBpbmxpbmUgYm9vbCBjb2RlKFQqLCBUV2l0aEltbSosIHVpbnQ4X3QqKTsKKyAgICBWb2lk
IHZvaWRFeHByKCkgeyByZXR1cm4gdTg8Vm9pZD4oKTsgfQorICAgIEV4cG9ydEZvcm1hdCBleHBv
cnRGb3JtYXQoKSB7IHJldHVybiB1ODxFeHBvcnRGb3JtYXQ+KCk7IH0KKyAgICBUeXBlIHR5cGUo
KSB7IHJldHVybiB1ODxUeXBlPigpOyB9CisgICAgUmV0dXJuVHlwZSByZXR1cm5UeXBlKCkgeyBy
ZXR1cm4gdTg8UmV0dXJuVHlwZT4oKTsgfQorICAgIGlubGluZSB1aW50MzJfdCBpbW1VMzIoKTsK
KyAgICBpbmxpbmUgaW50MzJfdCBpbW1TMzIoKTsKKyAgICBjaGFyIHNpbmdsZUNoYXIoKSB7IHJl
dHVybiAqbV9jdXJzb3IrKzsgfQorCisgICAgaW5saW5lIGJvb2wgaWZJMzJMaXQoY29uc3QgVmVj
dG9yPHVpbnQzMl90PiYgaTMycywgdWludDMyX3QqKTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0
ZSA8Y2xhc3MgVD4gVCB1OCgpIHsgcmV0dXJuIFQoKm1fY3Vyc29yKyspOyB9CisKKyAgICBjb25z
dCB1aW50OF90KiBtX2N1cnNvcjsKK307CisKK3RlbXBsYXRlIDw+CitpbmxpbmUgdWludDMyX3Qg
UmVhZGVyOjpmaXhlZFdpZHRoPHVpbnQzMl90PigpCit7CisgICAgdWludDMyX3QgdTMyID0gbV9j
dXJzb3JbMF0gfCBtX2N1cnNvclsxXSA8PCA4IHwgbV9jdXJzb3JbMl0gPDwgMTYgfCBtX2N1cnNv
clszXSA8PCAyNDsKKyAgICBtX2N1cnNvciArPSA0OworICAgIHJldHVybiB1MzI7Cit9CisKK3Rl
bXBsYXRlIDw+CitpbmxpbmUgZmxvYXQgUmVhZGVyOjpmaXhlZFdpZHRoPGZsb2F0PigpCit7Cisg
ICAgdW5pb24geworICAgICAgICB1aW50OF90IGFycls0XTsKKyAgICAgICAgZmxvYXQgZjsKKyAg
ICB9IHUgPSB7IHsgbV9jdXJzb3JbMF0sIG1fY3Vyc29yWzFdLCBtX2N1cnNvclsyXSwgbV9jdXJz
b3JbM10gfSB9OworICAgIG1fY3Vyc29yICs9IDQ7CisgICAgcmV0dXJuIHUuZjsKK30KKwordGVt
cGxhdGUgPD4KK2lubGluZSBkb3VibGUgUmVhZGVyOjpmaXhlZFdpZHRoPGRvdWJsZT4oKQorewor
ICAgIHVuaW9uIHsKKyAgICAgICAgdWludDhfdCBhcnJbOF07CisgICAgICAgIGRvdWJsZSBkOwor
ICAgIH0gdSA9IHsgeyBtX2N1cnNvclswXSwgbV9jdXJzb3JbMV0sIG1fY3Vyc29yWzJdLCBtX2N1
cnNvclszXSwgbV9jdXJzb3JbNF0sIG1fY3Vyc29yWzVdLCBtX2N1cnNvcls2XSwgbV9jdXJzb3Jb
N10gfSB9OworICAgIG1fY3Vyc29yICs9IDg7CisgICAgcmV0dXJuIHUuZDsKK30KKwordGVtcGxh
dGUgPGNsYXNzIFQsIGNsYXNzIFRXaXRoSW1tPgorYm9vbCBSZWFkZXI6OmNvZGUoVCogdCwgVFdp
dGhJbW0qIHRXaXRoSW1tLCB1aW50OF90KiBpbW0pCit7CisgICAgdWludDhfdCBieXRlID0gKm1f
Y3Vyc29yKys7CisgICAgaWYgKCEoYnl0ZSAmIEhhc0ltbUZsYWcpKSB7CisgICAgICAgICp0ID0g
VChieXRlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgVW5wYWNrT3BXaXRo
SW1tKGJ5dGUsIHRXaXRoSW1tLCBpbW0pOworICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5l
IHVpbnQzMl90IFJlYWRlcjo6aW1tVTMyKCkKK3sKKyAgICB1aW50MzJfdCB1MzIgPSAqbV9jdXJz
b3IrKzsKKyAgICBpZiAodTMyIDwgMHg4MCkKKyAgICAgICAgcmV0dXJuIHUzMjsKKworICAgIHUz
MiAmPSAweDdmOworCisgICAgZm9yICh1bnNpZ25lZCBzaGlmdCA9IDc7IHRydWU7IHNoaWZ0ICs9
IDcpIHsKKyAgICAgICAgdWludDMyX3QgYiA9ICptX2N1cnNvcisrOworICAgICAgICBpZiAoYiA8
IDB4ODApCisgICAgICAgICAgICByZXR1cm4gdTMyIHwgKGIgPDwgc2hpZnQpOworICAgICAgICB1
MzIgfD0gKGIgJiAweDdmKSA8PCBzaGlmdDsKKyAgICB9Cit9CisKK2lubGluZSBpbnQzMl90IFJl
YWRlcjo6aW1tUzMyKCkKK3sKKyAgICB1aW50MzJfdCB1MzIgPSAqbV9jdXJzb3IrKzsKKyAgICBp
ZiAodTMyIDwgMHg4MCkKKyAgICAgICAgcmV0dXJuIGludDMyX3QodTMyKSA8PCAoMzItNykgPj4g
KDMyLTcpOworCisgICAgdTMyICY9IDB4N2Y7CisKKyAgICBmb3IgKHVuc2lnbmVkIHNoaWZ0ID0g
NzsgdHJ1ZTsgc2hpZnQgKz0gNykgeworICAgICAgICB1aW50MzJfdCBiID0gKm1fY3Vyc29yKys7
CisgICAgICAgIGlmIChiIDwgMHg4MCkgeworICAgICAgICAgICAgdTMyIHw9IGIgPDwgc2hpZnQ7
CisgICAgICAgICAgICBpbnQgc2lnbkV4dGVuZCA9ICgzMi03KSAtIHNoaWZ0OworICAgICAgICAg
ICAgaWYgKHNpZ25FeHRlbmQgPiAwKQorICAgICAgICAgICAgICAgIHJldHVybiBpbnQzMl90KHUz
MikgPDwgc2lnbkV4dGVuZCA+PiBzaWduRXh0ZW5kOworICAgICAgICAgICAgcmV0dXJuIGludDMy
X3QodTMyKTsKKyAgICAgICAgfQorICAgICAgICB1MzIgfD0gKGIgJiAweDdmKSA8PCBzaGlmdDsK
KyAgICB9Cit9CisKK2lubGluZSBib29sIFJlYWRlcjo6aWZJMzJMaXQoY29uc3QgVmVjdG9yPHVp
bnQzMl90PiYgaTMycywgdWludDMyX3QqIHUzMikKK3sKKyAgICB1aW50OF90IGJ5dGUgPSAqbV9j
dXJzb3I7CisKKyAgICBpZiAoYnl0ZSAmIEhhc0ltbUZsYWcpIHsKKyAgICAgICAgSTMyV2l0aElt
bSBpMzJXaXRoSW1tOworICAgICAgICB1aW50OF90IGltbTsKKyAgICAgICAgVW5wYWNrT3BXaXRo
SW1tKGJ5dGUsICZpMzJXaXRoSW1tLCAmaW1tKTsKKworICAgICAgICBpZiAoaTMyV2l0aEltbSA9
PSBJMzJXaXRoSW1tOjpMaXRJbW0pIHsKKyAgICAgICAgICAgIG1fY3Vyc29yKys7CisgICAgICAg
ICAgICAqdTMyID0gaW1tOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoaTMyV2l0aEltbSA9PSBJMzJXaXRoSW1tOjpMaXRQb29sKSB7CisgICAgICAg
ICAgICBtX2N1cnNvcisrOworICAgICAgICAgICAgKnUzMiA9IGkzMnNbaW1tXTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIGlmIChJMzIoYnl0ZSkgPT0gSTMyOjpMaXRJbW0pIHsKKyAgICAgICAgbV9jdXJz
b3IrKzsKKyAgICAgICAgKnUzMiA9IGltbVUzMigpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBpZiAoSTMyKGJ5dGUpID09IEkzMjo6TGl0UG9vbCkgeworICAgICAgICBtX2N1
cnNvcisrOworICAgICAgICAqdTMyID0gaTMyc1tpbW1VMzIoKV07CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6Oldhc20KKworI2VuZGlmIC8vIFdhc21PcGNvZGVzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdGFja0hlaWdodENhbGN1bGF0b3IuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN0YWNrSGVpZ2h0Q2FsY3VsYXRvci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMjJjOGI0ZDRjZWM0ZWE2ODEwN2E0MGNmZjBkNjEwN2JkODJkNmUzMQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TdGFja0hlaWdodENhbGN1
bGF0b3IuY3BwCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21TdGFj
a0hlaWdodENhbGN1bGF0b3IuaCIKKworI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCisKK25h
bWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgV2FzbSB7CisKK3NpemVfdCBTdGFja0hlaWdodENh
bGN1bGF0b3I6OmNhbGN1bGF0ZVN0YWNrSGVpZ2h0KHNpemVfdCBmdW5jdGlvbkluZGV4KQorewor
ICAgIHBhcnNlU2lnbmF0dXJlKGZ1bmN0aW9uSW5kZXgpOworICAgIHBhcnNlVmFycygpOworICAg
IG1faGVpZ2h0ID0gbV9jdXJyZW50TG9jYWxUeXBlcy5zaXplKCkgKyAxOworICAgIG1fbWF4SGVp
Z2h0ID0gbV9oZWlnaHQ7CisgICAgcGFyc2VTdG10TGlzdCgpOworICAgIHJldHVybiBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgbV9tYXhIZWlnaHQp
OworfQorCit2b2lkIFN0YWNrSGVpZ2h0Q2FsY3VsYXRvcjo6cmVjb3JkSGVpZ2h0KCkKK3sKKyAg
ICBpZiAobV9oZWlnaHQgPiBtX21heEhlaWdodCkKKyAgICAgICAgbV9tYXhIZWlnaHQgPSBtX2hl
aWdodDsKK30KKwordm9pZCBTdGFja0hlaWdodENhbGN1bGF0b3I6OnBhcnNlU3RvcmUoUmV0dXJu
VHlwZSByZXR1cm5UeXBlLCBMaW5lYXJNZW1vcnlUeXBlLCBib29sIGhhc09mZnNldCkKK3sKKyAg
ICBwYXJzZUFycmF5QnVmZmVyT2Zmc2V0KGhhc09mZnNldCk7CisgICAgbV9oZWlnaHQgKz0gMjsK
KyAgICByZWNvcmRIZWlnaHQoKTsKKyAgICBwYXJzZUV4cHIocmV0dXJuVHlwZSk7CisgICAgbV9o
ZWlnaHQgLT0gMjsKK30KKwordm9pZCBTdGFja0hlaWdodENhbGN1bGF0b3I6OnBhcnNlQ2FsbEFy
Z3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4mIGFyZ3VtZW50cykKK3sKKyAgICBzaXplX3QgYXJn
dW1lbnRDb3VudCA9IGFyZ3VtZW50cy5zaXplKCk7CisgICAgc2l6ZV90IG9yaWdpbmFsSGVpZ2h0
ID0gbV9oZWlnaHQ7CisgICAgbV9oZWlnaHQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3Rh
Y2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgbV9oZWlnaHQgKyBhcmd1bWVudENvdW50KTsKKyAgICBy
ZWNvcmRIZWlnaHQoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3Vu
dDsgKytpKSB7CisgICAgICAgIHN3aXRjaCAoYXJndW1lbnRzW2ldKSB7CisgICAgICAgIGNhc2Ug
VHlwZTo6STMyOgorICAgICAgICAgICAgcGFyc2VFeHBySTMyKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBUeXBlOjpGNjQ6CisgICAgICAgICAgICBwYXJzZUV4cHJGNjQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgbV9oZWlnaHQgPSBv
cmlnaW5hbEhlaWdodDsKK30KKwordm9pZCBTdGFja0hlaWdodENhbGN1bGF0b3I6OnBhcnNlQmlu
YXJ5T3BJMzIoSTMyKQoreworICAgIHBhcnNlRXhwckkzMigpOworICAgIG1faGVpZ2h0Kys7Cisg
ICAgcmVjb3JkSGVpZ2h0KCk7CisgICAgcGFyc2VFeHBySTMyKCk7CisgICAgbV9oZWlnaHQtLTsK
K30KKwordm9pZCBTdGFja0hlaWdodENhbGN1bGF0b3I6OnBhcnNlQmluYXJ5T3BGNjQoRjY0KQor
eworICAgIHBhcnNlRXhwckY2NCgpOworICAgIG1faGVpZ2h0Kys7CisgICAgcmVjb3JkSGVpZ2h0
KCk7CisgICAgcGFyc2VFeHByRjY0KCk7CisgICAgbV9oZWlnaHQtLTsKK30KKwordm9pZCBTdGFj
a0hlaWdodENhbGN1bGF0b3I6OnBhcnNlUmVsYXRpb25hbE9wSTMyKE1hY3JvQXNzZW1ibGVyOjpS
ZWxhdGlvbmFsQ29uZGl0aW9uKQoreworICAgIHBhcnNlRXhwckkzMigpOworICAgIG1faGVpZ2h0
Kys7CisgICAgcmVjb3JkSGVpZ2h0KCk7CisgICAgcGFyc2VFeHBySTMyKCk7CisgICAgbV9oZWln
aHQtLTsKK30KKwordm9pZCBTdGFja0hlaWdodENhbGN1bGF0b3I6OnBhcnNlUmVsYXRpb25hbE9w
RjY0KE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24pCit7CisgICAgcGFyc2VFeHByRjY0
KCk7CisgICAgbV9oZWlnaHQrKzsKKyAgICByZWNvcmRIZWlnaHQoKTsKKyAgICBwYXJzZUV4cHJG
NjQoKTsKKyAgICBtX2hlaWdodC0tOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256898</attachid>
            <date>2015-07-16 03:28:47 -0700</date>
            <delta_ts>2015-07-20 05:35:46 -0700</delta_ts>
            <desc>Work in progress. Make a structural change.</desc>
            <filename>bug-146064-20150716032738.patch</filename>
            <type>text/plain</type>
            <size>140333</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg2NTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
OWZhNzg4ZjIxZjdmOTg5ZDI1NDdkMTQwYTMyNDRlY2RmNjcwZGI0Li5hYTQwZDNmZDllMDU0OTU3
NjhhZTIyZjA3Njc0ZTVmY2JkYzE0OTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNzcgQEAKKzIwMTUtMDctMTQgIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0Bn
bWFpbC5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBuYXRpdmVseSBzdXBwb3J0IFdlYkFzc2Vt
Ymx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYw
NjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppbmZlcnJlZE5hbWUp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6Oldl
YkFzc2VtYmx5Q29kZUJsb2NrOjpyZXBsYWNlbWVudCk6CisgICAgICAgIChKU0M6OldlYkFzc2Vt
Ymx5Q29kZUJsb2NrOjpjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCk6CisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29kZVR5cGUpOgorICAg
ICAgICAoSlNDOjpXZWJBc3NlbWJseUNvZGVCbG9jazo6V2ViQXNzZW1ibHlDb2RlQmxvY2spOgor
ICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAg
ICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChmdW5jdGlvbkxv
YWRXZWJBc3NlbWJseSk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAg
ICAgICAoSlNDOjpMTEludDo6c2V0VXBDYWxsKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFi
bGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZSk6Cisg
ICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6Om5ld0NvZGVCbG9ja0Zvcik6CisgICAgICAg
IChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb25JbXBsKToKKyAgICAg
ICAgKEpTQzo6V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpXZWJBc3NlbWJseUV4ZWN1dGFibGUpOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUV4ZWN1dGFibGU6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpkZXN0cm95KToKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpiYXNlbGluZUNvZGVCbG9ja0Zvcik6CisgICAgICAg
IChKU0M6OldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChK
U0M6OldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6c3ltYm9sVGFibGUpOgorICAgICAgICAoSlNDOjpX
ZWJBc3NlbWJseUV4ZWN1dGFibGU6OmNsZWFyQ29kZSk6CisgICAgICAgIChKU0M6OldlYkFzc2Vt
Ymx5RXhlY3V0YWJsZTo6dW5saW5rQ2FsbHMpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJs
ZS5oOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6aXNXZWJBc3NlbWJseUV4ZWN1dGFi
bGUpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlVmlydHVhbCk6Cisg
ICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlv
bjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKEpT
Qzo6SlNGdW5jdGlvbjo6Y3JlYXRlSW1wbCk6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9u
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKToKKyAgICAg
ICAgKEpTQzo6SlNGdW5jdGlvbjo6aXNIb3N0RnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUv
SlNUeXBlLmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpW
TSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAqIHdhc20vV2FzbUpJVENvbXBp
bGVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206Okp1bXBTY29wZTo6SnVtcFNjb3Bl
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SnVtcFNjb3BlOjpqdW1wKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6SnVtcFNjb3BlOjpsaW5rKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6
OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjphbGxv
Y2F0ZVNwYWNlT25TdGFjayk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpkZWFs
bG9jYXRlU3BhY2VPblN0YWNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBh
cnNlQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlVmFy
cyk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZVN0bXQpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VHZXRMb2NhbCk6CisgICAgICAgIChKU0M6
Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZVNldExvY2FsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
Z2V0QXJyYXlCdWZmZXJEYXRhKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBh
cnNlQXJyYXlCdWZmZXJPZmZzZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6
cGFyc2VMb2FkKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlU3RvcmUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VSZXR1cm5TdG10KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlU3RtdExpc3QpOgorICAgICAgICAo
SlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VCbG9ja1N0bXQpOgorICAgICAgICAoSlNDOjpX
YXNtOjpKSVRDb21waWxlcjo6cGFyc2VJZlN0bXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRD
b21waWxlcjo6cGFyc2VJZkVsc2VTdG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGls
ZXI6OnBhcnNlV2hpbGVTdG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBh
cnNlRG9TdG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlTGFiZWxT
dG10KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlQnJlYWtTdG10KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlQnJlYWtMYWJlbFN0bXQpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VDb250aW51ZVN0bXQpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VDb250aW51ZUxhYmVsU3RtdCk6Cisg
ICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwYXJzZVN3aXRjaFN0bXQpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VFeHByKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6SklUQ29tcGlsZXI6OnBhcnNlRXhwckkzMik6CisgICAgICAgIChKU0M6Oldhc206OkpJVENv
bXBpbGVyOjpwYXJzZUV4cHJGNjQpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6
cGFyc2VFeHByVm9pZCk6CisgICAgICAgIChKU0M6Oldhc206OmdldEludGVybmFsRnVuY3Rpb24p
OgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VDYWxsSW50ZXJuYWwpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpnZXRJbXBvcnRlZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlQ2FsbEltcG9ydCk6CisgICAgICAgIChKU0M6Oldhc206
OkpJVENvbXBpbGVyOjpjYWxsRnVuY3Rpb25TbG93Q2FzZSk6CisgICAgICAgIChKU0M6Oldhc206
OkpJVENvbXBpbGVyOjpwYXJzZUNhbGxBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpXYXNtOjpK
SVRDb21waWxlcjo6Y2FsbERvdWJsZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklU
Q29tcGlsZXI6OnBhcnNlVW5hcnlPcCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVy
OjpwYXJzZUJpbmFyeU9wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNl
UmVsYXRpb25hbE9wSTMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNl
UmVsYXRpb25hbE9wRjY0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNl
Q29tbWEpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cGFyc2VDb25kKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBhcnNlTWluTWF4STMyKToKKyAgICAgICAg
KiB3YXNtL1dhc21KSVRDb21waWxlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6SklU
Q29tcGlsZXI6OkpJVENvbXBpbGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6
OnN0YWNrQWRkcmVzcyk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjp0ZW1wb3Jh
cnlBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnB1c2hDb250aW51
ZUxhYmVsTGFiZWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cG9wQ29udGlu
dWVMYWJlbExhYmVsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OmNvbnRpbnVl
TGFiZWxMYWJlbCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpwdXNoQnJlYWtM
YWJlbEp1bXBMaXN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBvcEJyZWFr
TGFiZWxKdW1wTGlzdCk6CisgICAgICAgIChKU0M6Oldhc206OkpJVENvbXBpbGVyOjpicmVha0xh
YmVsSnVtcExpc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6cHVzaENvbnRp
bnVlSnVtcFNjb3BlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBvcENvbnRp
bnVlSnVtcFNjb3BlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnRvcENvbnRp
bnVlSnVtcFNjb3BlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnB1c2hCcmVh
a0p1bXBMaXN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SklUQ29tcGlsZXI6OnBvcEJyZWFrSnVt
cExpc3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpKSVRDb21waWxlcjo6dG9wQnJlYWtKdW1wTGlz
dCk6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
Oldhc206Ok1vZHVsZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1
bGU6OnBhcnNlQ29uc3RhbnRQb29sU2VjdGlvbik6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVs
ZTo6cGFyc2VTaWduYXR1cmVTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpw
YXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlvbik6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6
cGFyc2VHbG9iYWxTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpwYXJzZUZ1
bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpw
YXJzZUZ1bmN0aW9uUG9pbnRlclRhYmxlcyk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6
cGFyc2VGdW5jdGlvbkRlZmluaXRpb25TZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9k
dWxlOjpwYXJzZUV4cG9ydFNlY3Rpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OnBh
cnNlRnVuY3Rpb25EZWZpbml0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpmdW5j
dGlvbik6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6YXJyYXlCdWZmZXJEYXRhKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TW9kdWxlOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpN
b2R1bGU6OnB1dCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6ZGVmaW5lT3duUHJvcGVy
dHkpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpjb21waWxlKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGUuaDog
QWRkZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6TW9kdWxlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpXYXNtOjpN
b2R1bGU6OmZ1bmN0aW9uSW1wb3J0TmFtZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6
TW9kdWxlKToKKyAgICAgICAgKiB3YXNtL1dhc21PcGNvZGVzLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpXYXNtOjpvcGVyYXRvcnwgKToKKyAgICAgICAgKEpTQzo6V2FzbTo6b3BlcmF0b3ImKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6RXhwcjo6RXhwcik6CisgICAgICAgIChKU0M6Oldhc206OkV4
cHI6OnR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpFeHByOjppMzIpOgorICAgICAgICAoSlND
OjpXYXNtOjpFeHByOjpmMzIpOgorICAgICAgICAoSlNDOjpXYXNtOjpFeHByOjpmNjQpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpFeHByOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
RXhwcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6Oldhc206OlBhY2tPcFdpdGhJbW0pOgor
ICAgICAgICAoSlNDOjpXYXNtOjpVbnBhY2tPcFdpdGhJbW0pOgorICAgICAgICAoSlNDOjpXYXNt
OjpFeHByV2l0aEltbTo6RXhwcldpdGhJbW0pOgorICAgICAgICAoSlNDOjpXYXNtOjpFeHByV2l0
aEltbTo6dHlwZSk6CisgICAgICAgIChKU0M6Oldhc206OkV4cHJXaXRoSW1tOjppMzIpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpFeHByV2l0aEltbTo6ZjMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
RXhwcldpdGhJbW06OmY2NCk6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZTo6U2lnbmF0
dXJlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U2lnbmF0dXJlOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6U2lnbmF0dXJlOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6U2lnbmF0dXJlOjpIYXNoOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVh
ZGVyOjpSZWFkZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OnN0bXQpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpSZWFkZXI6OnN3aXRjaENhc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpS
ZWFkZXI6OnZvaWRFeHByKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVhZGVyOjpleHBvcnRGb3Jt
YXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OnR5cGUpOgorICAgICAgICAoSlNDOjpX
YXNtOjpSZWFkZXI6OnJldHVyblR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OnNp
bmdsZUNoYXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OnU4KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6UmVhZGVyOjpmaXhlZFdpZHRoPHVpbnQzMl90Pik6CisgICAgICAgIChKU0M6Oldh
c206OlJlYWRlcjo6Zml4ZWRXaWR0aDxmbG9hdD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFk
ZXI6OmZpeGVkV2lkdGg8ZG91YmxlPik6CisgICAgICAgIChKU0M6Oldhc206OlJlYWRlcjo6Y29k
ZSk6CisgICAgICAgIChKU0M6Oldhc206OlJlYWRlcjo6aW1tVTMyKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6UmVhZGVyOjppbW1TMzIpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OmlmSTMy
TGl0KToKKwogMjAxNS0wNy0wOCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29t
PgogCiAgICAgICAgIEZpeCBncmFtbWFyIGlzc3VlIGluIFR5cGVFcnJvciBhdHRlbXB0aW5nIHRv
IGNoYW5nZSBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCAwNmU5OTcwYzUyY2UwMTJhY2YzODA0MzI0MzdmMmMyNmY1Mjg4YTcwLi5mYWNm
YjllMjU1MThlMGVlYTc5Y2EzMmMwMzMzMzAxNzkxZmU2ZjIyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTAyMCw2ICsxMDIwLDE0IEBACiAJCTcwRUNBNjA3MUFGREJFQTIwMDQ0
OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjAyMUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJl
Z2lzdHJ5LmNwcCAqLzsgfTsKIAkJNzBFQ0E2MDgxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRl
UmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcwRUNBNjAzMUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzBFQ0E2MDkxQUZEQkVB
MjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjA0MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1w
bGF0ZVJlZ2lzdHJ5S2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJN0IxRDhFM0MxQjU3ODE0RTAwNTJFMzg1IC8qIFdhc21Nb2R1bGVQYXJzZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMUQ4RTNC
MUI1NzgxNEIwMDUyRTM4NSAvKiBXYXNtTW9kdWxlUGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0IxRDhFM0QxQjU3ODE1MjAwNTJFMzg1
IC8qIFdhc21Nb2R1bGVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0IxRDhFM0ExQjU3ODE0QjAwNTJFMzg1IC8qIFdhc21Nb2R1bGVQYXJz
ZXIuY3BwICovOyB9OworCQk3QjFEOEUzRjFCNTc5Q0REMDA1MkUzODUgLyogV2FzbVJlYWRlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IxRDhFM0Ux
QjU3OUNENjAwNTJFMzg1IC8qIFdhc21SZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3QkQxMEM0MjFCNEVENDNDMDBCRDU0MUEgLyogV2Fz
bUZ1bmN0aW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdCRDEwQzNEMUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNtRnVuY3Rpb25QYXJzZXIu
Y3BwICovOyB9OworCQk3QkQxMEM0MzFCNEVENDQwMDBCRDU0MUEgLyogV2FzbUZ1bmN0aW9uUGFy
c2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkQx
MEMzRTFCNEVENDM5MDBCRDU0MUEgLyogV2FzbUZ1bmN0aW9uUGFyc2VyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0JEMTBDNDQxQjRFRDQ0NTAw
QkQ1NDFBIC8qIFdhc21Nb2R1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0JEMTBDM0YxQjRFRDQzOTAwQkQ1NDFBIC8qIFdhc21Nb2R1bGUuY3Bw
ICovOyB9OworCQk3QkQxMEM0NTFCNEVENDQ5MDBCRDU0MUEgLyogV2FzbU1vZHVsZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JEMTBDNDAxQjRFRDQz
OTAwQkQ1NDFBIC8qIFdhc21Nb2R1bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk3QkQxMEM0NjFCNEVENDRFMDBCRDU0MUEgLyogV2FzbU9wY29k
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRDEw
QzQxMUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNtT3Bjb2Rlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMDA4Q0RBMTg3MTI0QkIwMDk1NUMyNCAv
KiBKU1Byb21pc2VEZWZlcnJlZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3QzAwOENEODE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJy
ZWQuY3BwICovOyB9OwogCQk3QzAwOENEQjE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVm
ZXJyZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
MDA4Q0Q5MTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMDA4Q0U3MTg3NjMxQjYw
MDk1NUMyNCAvKiBNaWNyb3Rhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdDMDA4Q0U1MTg3NjMxQjYwMDk1NUMyNCAvKiBNaWNyb3Rhc2suaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjc2Miw2ICsy
NzcwLDE0IEBACiAJCTcwRUNBNjAyMUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0
cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MEVDQTYwMzFBRkRCRUEyMDA0
NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUZW1wbGF0ZVJlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcw
RUNBNjA0MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0cnlLZXkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0IxRDhFM0ExQjU3ODE0QjAwNTJFMzg1IC8qIFdhc21Nb2R1
bGVQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbU1v
ZHVsZVBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCMUQ4RTNCMUI1
NzgxNEIwMDUyRTM4NSAvKiBXYXNtTW9kdWxlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdhc21Nb2R1bGVQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJN0IxRDhFM0UxQjU3OUNENjAwNTJFMzg1IC8qIFdhc21SZWFkZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVJlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3QkQxMEMzRDFCNEVENDM5MDBCRDU0MUEgLyogV2FzbUZ1bmN0aW9uUGFyc2Vy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21GdW5jdGlvblBh
cnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCRDEwQzNFMUI0RUQ0Mzkw
MEJENTQxQSAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2FzbUZ1bmN0aW9uUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTdCRDEwQzNGMUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNtTW9kdWxlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21Nb2R1bGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3QkQxMEM0MDFCNEVENDM5MDBCRDU0MUEgLyogV2FzbU1vZHVsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtTW9kdWxlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCRDEwQzQxMUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNtT3Bj
b2Rlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtT3Bjb2Rlcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzAwOENEODE4NzEyNEJCMDA5NTVDMjQgLyog
SlNQcm9taXNlRGVmZXJyZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNQcm9taXNlRGVmZXJyZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QzAwOENEOTE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNQcm9taXNlRGVmZXJyZWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0MwMDhDRTUxODc2MzFCNjAwOTU1QzI0IC8qIE1pY3JvdGFzay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNaWNyb3Rhc2suaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2MTcsNiArMzYzMyw3IEBACiAJCQkJN0VGNkUwQkIwRUI3
QTFFQzAwNzlBRkFGIC8qIHJ1bnRpbWUgKi8sCiAJCQkJMTQxMjExMDAwQTQ4NzcyNjAwNDgwMjU1
IC8qIHRlc3RzICovLAogCQkJCTg2MDNDRUYwMTRDNzUzRUYwMEFFNTlFMyAvKiB0b29scyAqLywK
KwkJCQk3QkQxMEMzQzFCNEVENDFEMDBCRDU0MUEgLyogd2FzbSAqLywKIAkJCQk4NkVBQzQ4QzBG
OTNFOEI5MDA4RUM5NDggLyogeWFyciAqLywKIAkJCSk7CiAJCQluYW1lID0gSmF2YVNjcmlwdENv
cmU7CkBAIC00Mjc5LDYgKzQyOTYsMjEgQEAKIAkJCXBhdGggPSBkaXNhc3NlbWJsZXIvQVJNdjc7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk3QkQxMEMzQzFCNEVENDFEMDBC
RDU0MUEgLyogd2FzbSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAo
CisJCQkJN0JEMTBDM0QxQjRFRDQzOTAwQkQ1NDFBIC8qIFdhc21GdW5jdGlvblBhcnNlci5jcHAg
Ki8sCisJCQkJN0JEMTBDM0UxQjRFRDQzOTAwQkQ1NDFBIC8qIFdhc21GdW5jdGlvblBhcnNlci5o
ICovLAorCQkJCTdCRDEwQzNGMUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNtTW9kdWxlLmNwcCAqLywK
KwkJCQk3QkQxMEM0MDFCNEVENDM5MDBCRDU0MUEgLyogV2FzbU1vZHVsZS5oICovLAorCQkJCTdC
MUQ4RTNBMUI1NzgxNEIwMDUyRTM4NSAvKiBXYXNtTW9kdWxlUGFyc2VyLmNwcCAqLywKKwkJCQk3
QjFEOEUzQjFCNTc4MTRCMDA1MkUzODUgLyogV2FzbU1vZHVsZVBhcnNlci5oICovLAorCQkJCTdC
RDEwQzQxMUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNtT3Bjb2Rlcy5oICovLAorCQkJCTdCMUQ4RTNF
MUI1NzlDRDYwMDUyRTM4NSAvKiBXYXNtUmVhZGVyLmggKi8sCisJCQkpOworCQkJcGF0aCA9IHdh
c207CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk3RTM5RDgxRDBFQzM4RUZB
MDAzQUYxMUEgLyogYnl0ZWNvbXBpbGVyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKQEAgLTU2NTksNiArNTY5MSw3IEBACiAJCQkJQTVFQTcxMDgxOUY2REU3QTAw
OThGNUVDIC8qIGdlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bi5weSBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MTBBMTlGNkRFN0UwMDk4RjVFQyAvKiBnZW5l
cmF0ZV9vYmpjX2ludGVybmFsX2hlYWRlci5weSBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MTBD
MTlGNkRFODIwMDk4RjVFQyAvKiBvYmpjX2dlbmVyYXRvci5weSBpbiBIZWFkZXJzICovLAorCQkJ
CTdCMUQ4RTNGMUI1NzlDREQwMDUyRTM4NSAvKiBXYXNtUmVhZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNUVBNzEwOTE5RjZERTdDMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19oZWFkZXIucHkg
aW4gSGVhZGVycyAqLywKIAkJCQlDNDcwM0NENjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9y
LnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJQzQ3MDNDQzAxOTI4NDQ5NjAwMTNGQkVBIC8qIGdlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSBpbiBIZWFkZXJzICovLApAQCAtNjAx
MSw2ICs2MDQ0LDcgQEAKIAkJCQlCQzE4QzQwNTBFMTZGNUNEMDBCMzQ0NjAgLyogRnVuY3Rpb25Q
cm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQkUyQ0FFMTRFOTg1QUEwMDA1OTNBRCAv
KiBHQ0Fzc2VydGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDMwMTVBOERDRTIwMDhG
MzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCRDEw
QzQ1MUI0RUQ0NDkwMEJENTQxQSAvKiBXYXNtTW9kdWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
MEVDMEVDNzFBQTBEN0RBMDBCNkFBRkEgLyogU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkI2NkFDMTdCNkI1M0YwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVm
Q291bnRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2QUQxN0I2QjU0NTAwQTdBRTNGIC8q
IEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTQ1LDYg
KzYxNzksNyBAQAogCQkJCUJDMThDNDFEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NsYXNzUmVmLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxMzE2N0JBQkQ3MDA2RDc2MEEgLyogSlNDb250ZXh0
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNzE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250
ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCRDEwQzQzMUI0RUQ0NDAwMEJENTQx
QSAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFFMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBKU0NvbnRleHRSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0OENE
MUQ4MTA4Q0Y5MDIwMDgxNjNDNiAvKiBKU0NvbnRleHRSZWZQcml2YXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzIwMjhCODE3OTc2MDFFMDA5ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmgg
aW4gSGVhZGVycyAqLywKQEAgLTYxNTQsNiArNjE4OSw3IEBACiAJCQkJOTc4ODAxNDExNDcxQUQ5
MjAwNDFCMDE2IC8qIEpTRGF0ZU1hdGguaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQTdGNjg4MTYw
NDMyRDQwMEY3NkI5OCAvKiBKU0Rlc3RydWN0aWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZFM0M2MTQxNjdCQUJENzAwNkQ3NjBBIC8qIEpTRXhwb3J0LmggaW4gSGVhZGVycyAqLywK
KwkJCQk3QkQxMEM0NjFCNEVENDRFMDBCRDU0MUEgLyogV2FzbU9wY29kZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3QjRBQ0FGMTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RUYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFy
cmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNG
bG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtNjE2MSw2ICs2MTk3LDcgQEAKIAkJCQlB
NzIwMjhCQTE3OTc2MDNEMDA5ODAyOEMgLyogSlNGdW5jdGlvbklubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkI2NkYxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjIxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTdC
MUQ4RTNDMUI1NzgxNEUwMDUyRTM4NSAvKiBXYXNtTW9kdWxlUGFyc2VyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3RvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkY0MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNUExMjc0MTkyRDlGREYwMDg3NjRBMyAvKiBERkdEb2VzR0MuaCBpbiBIZWFk
ZXJzICovLApAQCAtNzE1Miw2ICs3MTg5LDcgQEAKIAkJCQkwRkE1ODFCQTE1MEU5NTJDMDBCOUEy
RDkgLyogREZHTm9kZUZsYWdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5RENGMTMyOERG
ODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5
Q0ZEMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTdCRDEwQzQyMUI0RUQ0M0MwMEJENTQxQSAvKiBXYXNtRnVu
Y3Rpb25QYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFNTYxNDFEQUYwODAwMTc5
Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzI1MTdENTFG
NTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRTUwNjg2NzFBRTI1RTI4MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1w
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzE4OCw2ICs3MjI2LDcgQEAKIAkJCQkwRkMwOTdBMTE0
NkIyOENBMDBDRjI0NDIgLyogREZHVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTNC
NEE5MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3MDlGQjg2NzFBRTMzNUM2MDAzOUQwNjkgLyogSlNXZWFrU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTdCRDEwQzQ0MUI0RUQ0NDUwMEJENTQxQSAvKiBXYXNtTW9kdWxlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRDhBMzI3MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVj
a0luamVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzI5MTdENTFGNTcw
MENBMkM0MCAvKiBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkIxNzY2MjE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtNzUwNSw2ICs3NTQ0LDcgQEAKIAkJCQkwRjEzOTEyOTE2Nzcx
QzMzMDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRjcyOUFGMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIwMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxl
ckNvbXBpbGF0aW9uS2luZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QjFEOEUzRDFCNTc4MTUy
MDA1MkUzODUgLyogV2FzbU1vZHVsZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3
MjlCMTE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRjcyOUIyMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckRhdGFi
YXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTkwQ0FDMTg5RDgyRjYwMDBBRTVGMCAvKiBQ
cm9maWxlckpldHRpc29uUmVhc29uLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCAxMjQzOWUwOGNhZTEwODY2ZTkz
ZDlhNzQ2ZmMyYzU3YmJmYTgyZDBjLi43NGM5ODgyNDY2ZWRhYjQ2NDhjZGJlODMzMDM3NDU5ZGMz
MTI2NTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cApAQCAtODYsNiArODYsOSBAQCBDU3RyaW5nIENvZGVCbG9jazo6aW5mZXJyZWROYW1lKCkgY29u
c3QKICAgICBjYXNlIEV2YWxDb2RlOgogICAgICAgICByZXR1cm4gIjxldmFsPiI7CiAgICAgY2Fz
ZSBGdW5jdGlvbkNvZGU6CisgICAgICAgIC8vIEZJWE1FOiBoYWNreQorICAgICAgICBpZiAob3du
ZXJFeGVjdXRhYmxlKCktPmlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCkpCisgICAgICAgICAgICBy
ZXR1cm4gIjx3ZWJhc3NlbWJseT4iOwogICAgICAgICByZXR1cm4ganNDYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+aW5mZXJyZWROYW1lKCkudXRmOCgpOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7CkBAIC0yMTgzLDYgKzIxODYsNjggQEAgQ29kZUJs
b2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtl
ZENvZGVCbG9jayogdW5saW4KICAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVk
KHNpemVvZihDb2RlQmxvY2spICsgbV9pbnN0cnVjdGlvbnMuc2l6ZSgpICogc2l6ZW9mKEluc3Ry
dWN0aW9uKSk7CiB9CiAKK0NvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93
bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICA6IG1fZ2xv
YmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+dm0oKSwgb3duZXJFeGVjdXRhYmxlLCBnbG9iYWxPYmpl
Y3QpCisgICAgLCBtX2hlYXAoJm1fZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApCisgICAgLCBtX251
bUNhbGxlZVJlZ2lzdGVycygwKSAvLyBGSVhNRQorICAgICwgbV9udW1WYXJzKDApIC8vIEZJWE1F
CisgICAgLCBtX2lzQ29uc3RydWN0b3IoZmFsc2UpIC8vIEZJWE1FCisgICAgLCBtX3Nob3VsZEFs
d2F5c0JlSW5saW5lZCh0cnVlKQorICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2Up
CisgICAgLCBtX2hhc0JlZW5Db21waWxlZFdpdGhGVEwoZmFsc2UpCisgICAgLy8gLCBtX3VubGlu
a2VkQ29kZShtX2dsb2JhbE9iamVjdC0+dm0oKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENv
ZGVCbG9jaykKKyAgICAsIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQoZmFsc2UpCisgICAgLCBtX3N0
ZXBwaW5nTW9kZShTdGVwcGluZ01vZGVEaXNhYmxlZCkKKyAgICAsIG1fbnVtQnJlYWtwb2ludHMo
MCkKKyAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4
ZWN1dGFibGUsIG93bmVyRXhlY3V0YWJsZSkKKyAgICAsIG1fdm0oJm1fZ2xvYmFsT2JqZWN0LT52
bSgpKSAvLyBGSVhNRQorICAgICwgbV90aGlzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpIC8v
IEZJWE1FCisgICAgLCBtX3Njb3BlUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpIC8vIEZJWE1F
CisgICAgLCBtX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcigpKSAv
LyBGSVhNRQorICAgICwgbV9pc1N0cmljdE1vZGUoZmFsc2UpIC8vIEZJWE1FCisgICAgLCBtX25l
ZWRzQWN0aXZhdGlvbihmYWxzZSkKKyAgICAsIG1fbWF5QmVFeGVjdXRpbmcoZmFsc2UpCisgICAg
LCBtX3NvdXJjZShudWxscHRyKQorICAgICwgbV9zb3VyY2VPZmZzZXQoMCkKKyAgICAsIG1fZmly
c3RMaW5lQ29sdW1uT2Zmc2V0KDApCisgICAgLCBtX2NvZGVUeXBlKEZ1bmN0aW9uQ29kZSkgLy8g
RklYTUUKKyAgICAsIG1fb3NyRXhpdENvdW50ZXIoMCkKKyAgICAsIG1fb3B0aW1pemF0aW9uRGVs
YXlDb3VudGVyKDApCisgICAgLCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKDApCisjaWYg
RU5BQkxFKEpJVCkKKyAgICAsIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUoREZHOjpDYXBhYmlsaXR5
TGV2ZWxOb3RTZXQpCisjZW5kaWYKK3sKKyAgICBtX3Zpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxl
ZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisKKyAgICBBU1NFUlQo
bV9oZWFwLT5pc0RlZmVycmVkKCkpOworCisgICAgLyoKKyAgICBBU1NFUlQobV9zY29wZVJlZ2lz
dGVyLmlzTG9jYWwoKSk7CisKKyAgICBib29sIGRpZENsb25lU3ltYm9sVGFibGUgPSBmYWxzZTsK
KworICAgIGlmIChTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSB1bmxpbmtlZENvZGVCbG9jay0+
c3ltYm9sVGFibGUoKSkgeworICAgICAgICBpZiAobV92bS0+dHlwZVByb2ZpbGVyKCkpIHsKKyAg
ICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2sp
OworICAgICAgICAgICAgc3ltYm9sVGFibGUtPnByZXBhcmVGb3JUeXBlUHJvZmlsaW5nKGxvY2tl
cik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUg
JiYgc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgpKSB7CisgICAgICAgICAgICBtX3N5bWJvbFRhYmxl
LnNldCgqbV92bSwgbV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIHN5bWJvbFRhYmxlLT5jbG9uZVNj
b3BlUGFydCgqbV92bSkpOworICAgICAgICAgICAgZGlkQ2xvbmVTeW1ib2xUYWJsZSA9IHRydWU7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQoKm1fdm0sIG1f
b3duZXJFeGVjdXRhYmxlLmdldCgpLCBzeW1ib2xUYWJsZSk7CisgICAgfQorICAgICovCisKKyAg
ICAvLyBGSVhNRToKKyAgICBzZXROdW1QYXJhbWV0ZXJzKDApOworCisgICAgbV9oZWFwLT5tX2Nv
ZGVCbG9ja3MuYWRkKHRoaXMpOworICAgIG1faGVhcC0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0
ZWQoc2l6ZW9mKENvZGVCbG9jaykpOworfQorCiBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogewog
ICAgIGlmIChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpCkBAIC0zMDU3LDYgKzMxMjIsMTEg
QEAgQ29kZUJsb2NrKiBGdW5jdGlvbkNvZGVCbG9jazo6cmVwbGFjZW1lbnQoKQogICAgIHJldHVy
biBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb2RlQmxv
Y2tGb3IobV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsK
IH0KIAorQ29kZUJsb2NrKiBXZWJBc3NlbWJseUNvZGVCbG9jazo6cmVwbGFjZW1lbnQoKQorewor
ICAgIHJldHVybiBqc0Nhc3Q8V2ViQXNzZW1ibHlFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxl
KCkpLT5jb2RlQmxvY2tGb3IobV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENv
ZGVGb3JDYWxsKTsKK30KKwogREZHOjpDYXBhYmlsaXR5TGV2ZWwgUHJvZ3JhbUNvZGVCbG9jazo6
Y2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKQogewogICAgIHJldHVybiBERkc6OnByb2dyYW1DYXBh
YmlsaXR5TGV2ZWwodGhpcyk7CkBAIC0zMDczLDYgKzMxNDMsMTEgQEAgREZHOjpDYXBhYmlsaXR5
TGV2ZWwgRnVuY3Rpb25Db2RlQmxvY2s6OmNhcGFiaWxpdHlMZXZlbEludGVybmFsKCkKICAgICAg
ICAgcmV0dXJuIERGRzo6ZnVuY3Rpb25Gb3JDb25zdHJ1Y3RDYXBhYmlsaXR5TGV2ZWwodGhpcyk7
CiAgICAgcmV0dXJuIERGRzo6ZnVuY3Rpb25Gb3JDYWxsQ2FwYWJpbGl0eUxldmVsKHRoaXMpOwog
fQorCitERkc6OkNhcGFiaWxpdHlMZXZlbCBXZWJBc3NlbWJseUNvZGVCbG9jazo6Y2FwYWJpbGl0
eUxldmVsSW50ZXJuYWwoKQoreworICAgIHJldHVybiBERkc6OkNhbm5vdENvbXBpbGU7Cit9CiAj
ZW5kaWYKIAogdm9pZCBDb2RlQmxvY2s6OmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvblJlYXNv
biByZWFzb24sIFJlb3B0aW1pemF0aW9uTW9kZSBtb2RlLCBjb25zdCBGaXJlRGV0YWlsKiBkZXRh
aWwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5kZXggNjVk
YWI5NTVlNjhmMTQ3NTdjNWFiMWEyOWUxOTc0MjhkMGNjOGU5OC4uZTZlMjg5ZGZmYmY2MWM1OGJi
ODNiYmUyYmYyNGUwMDg3ZDAyYWQ2NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaApAQCAtOTcsNiArOTcsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIAogICAg
IENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29k
ZUJsb2NrKiwgSlNTY29wZSosIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+LCB1bnNpZ25lZCBz
b3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCk7CiAKKyAgICBDb2Rl
QmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCop
OworCiAgICAgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9iamVjdDsKICAg
ICBIZWFwKiBtX2hlYXA7CiAKQEAgLTM0OCw3ICszNTAsMTQgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbV9uZWVkc0FjdGl2YXRpb247CiAgICAgfQogICAgIAotICAgIENvZGVUeXBlIGNvZGVU
eXBlKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENvZGUtPmNvZGVUeXBlKCk7IH0KKyAgICBD
b2RlVHlwZSBjb2RlVHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICAvLyBGSVhNRTogaGFja3kK
KyAgICAgICAgaWYgKG93bmVyRXhlY3V0YWJsZSgpLT5pc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgp
KQorICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uQ29kZTsKKyAgICAgICAgcmV0dXJuIG1fdW5s
aW5rZWRDb2RlLT5jb2RlVHlwZSgpOworICAgIH0KKwogICAgIFB1dFByb3BlcnR5U2xvdDo6Q29u
dGV4dCBwdXRCeUlkQ29udGV4dCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoY29kZVR5cGUo
KSA9PSBFdmFsQ29kZSkKQEAgLTExNDIsNiArMTE1MSwyNyBAQCBwcm90ZWN0ZWQ6CiAjZW5kaWYK
IH07CiAKK2NsYXNzIFdlYkFzc2VtYmx5Q29kZUJsb2NrIDogcHVibGljIENvZGVCbG9jayB7Citw
dWJsaWM6CisgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBXZWJB
c3NlbWJseUNvZGVCbG9jayYgb3RoZXIpCisgICAgICAgIDogQ29kZUJsb2NrKENvcHlQYXJzZWRC
bG9jaywgb3RoZXIpCisgICAgeworICAgIH0KKworICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKFdl
YkFzc2VtYmx5RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQorICAgICAgICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGdsb2JhbE9i
amVjdCkKKyAgICB7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGZpbmFs
aXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGUgeyB9OworCisjaWYgRU5BQkxFKEpJVCkKKyAg
ICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbEludGVybmFsKCkgb3ZlcnJpZGU7
CisjZW5kaWYKK307CisKIGlubGluZSBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5s
aW5lQ2FsbEZyYW1lKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogewogICAgIFJF
TEVBU0VfQVNTRVJUKGlubGluZUNhbGxGcmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCAzODAxNWQyZDgwNGY5MzU5MjBmOTc1NmE3MWNhMmZk
ZmVhMTc5NTkwLi5iMzliNDg1ZGViZGJjYWNkZDA1N2EzYTQ1MDcyZjljMjBhNjkyYzczIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTc3OCw3ICs3
NzgsOSBAQCBpbmxpbmUgY2hhciogbGlua0ZvcigKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjb2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gMDsKLSAgICBpZiAoZXhlY3V0
YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICBpZiAoZXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJs
eUV4ZWN1dGFibGUoKSkKKyAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRG
b3IoKnZtLCBraW5kLCBBcml0eUNoZWNrTm90UmVxdWlyZWQsIHJlZ2lzdGVycyk7CisgICAgZWxz
ZSBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAgY29kZVB0ciA9IGV4
ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3IoKnZtLCBraW5kLCBNdXN0Q2hlY2tBcml0eSwgcmVnaXN0
ZXJzKTsKICAgICBlbHNlIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4
ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsK
QEAgLTc5NSwxNiArNzk3LDE5IEBAIGlubGluZSBjaGFyKiBsaW5rRm9yKAogICAgICAgICB9CiAg
ICAgICAgIGNvZGVCbG9jayA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQp
OwogICAgICAgICBBcml0eUNoZWNrTW9kZSBhcml0eTsKLSAgICAgICAgaWYgKGV4ZWNDYWxsZWUt
PmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpKSB8fCBjYWxsTGlua0luZm8tPmNhbGxUeXBlKCkgPT0gQ2Fs
bExpbmtJbmZvOjpDYWxsVmFyYXJncyB8fCBjYWxsTGlua0luZm8tPmNhbGxUeXBlKCkgPT0gQ2Fs
bExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzKQorICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCkpIHx8IChjYWxsTGlua0luZm8gJiYgKGNhbGxMaW5rSW5mby0+Y2Fs
bFR5cGUoKSA9PSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzIHx8IGNhbGxMaW5rSW5mby0+Y2Fs
bFR5cGUoKSA9PSBDYWxsTGlua0luZm86OkNvbnN0cnVjdFZhcmFyZ3MpKSkKICAgICAgICAgICAg
IGFyaXR5ID0gTXVzdENoZWNrQXJpdHk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFyaXR5
ID0gQXJpdHlDaGVja05vdFJlcXVpcmVkOwogICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVj
dXRhYmxlLT5lbnRyeXBvaW50Rm9yKCp2bSwga2luZCwgYXJpdHksIHJlZ2lzdGVycyk7CiAgICAg
fQotICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQotICAgICAgICBjYWxsTGlua0lu
Zm8tPnNldFNlZW4oKTsKLSAgICBlbHNlCi0gICAgICAgIGxpbmtGb3IoZXhlY0NhbGxlZSwgKmNh
bGxMaW5rSW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIsIGtpbmQsIHJlZ2lzdGVycyk7
CisgICAgLy8gVE9ETzogc3VwcG9ydCByZXBhdGNoaW5nCisgICAgaWYgKGNhbGxMaW5rSW5mbykg
eworICAgICAgICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKKyAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+c2V0U2VlbigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsaW5rRm9y
KGV4ZWNDYWxsZWUsICpjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY2FsbGVlLCBjb2RlUHRyLCBr
aW5kLCByZWdpc3RlcnMpOworICAgIH0KICAgICAKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5j
cHAKaW5kZXggMzgwZDg5YjVkMzU5Mjc0YTI3NDgyOTE4MzJjZWVkODg4YTYzYzIzNi4uMDUzZjVm
NjAxYTJmMjhiOTg0NzllMzI1MjAwNGE5YzA3NTA5ZTRiMiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAK
QEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCIK
ICNpbmNsdWRlICJUZXN0UnVubmVyVXRpbHMuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cu
aCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlUGFyc2VyLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogI2lu
Y2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC00OTEsNiArNDkyLDcgQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZXR1cm5UeXBlRm9y
KEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25EdW1wQmFzaWNCbG9ja0V4ZWN1dGlvblJhbmdlcyhFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSGFzQmFzaWNCbG9ja0V4ZWN1dGVkKEV4
ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25F
bmFibGVFeGNlcHRpb25GdXp6KEV4ZWNTdGF0ZSopOworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25Mb2FkV2ViQXNzZW1ibHkoRXhlY1N0YXRlKik7CiAKICNpZiBF
TkFCTEUoU0FNUExJTkdfRkxBR1MpCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvblNldFNhbXBsaW5nRmxhZ3MoRXhlY1N0YXRlKik7CkBAIC02NTMsNiArNjU1LDgg
QEAgcHJvdGVjdGVkOgogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImhhc0Jhc2ljQmxvY2tFeGVj
dXRlZCIsIGZ1bmN0aW9uSGFzQmFzaWNCbG9ja0V4ZWN1dGVkLCAyKTsKIAogICAgICAgICBhZGRG
dW5jdGlvbih2bSwgImVuYWJsZUV4Y2VwdGlvbkZ1enoiLCBmdW5jdGlvbkVuYWJsZUV4Y2VwdGlv
bkZ1enosIDApOworCisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAibG9hZFdlYkFzc2VtYmx5Iiwg
ZnVuY3Rpb25Mb2FkV2ViQXNzZW1ibHksIDEpOwogICAgICAgICAKICAgICAgICAgSlNBcnJheSog
YXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbEV4ZWMoKSwgMCk7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgKytpKQpAQCAtMTE4Miw2ICsx
MTg2LDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25FbmFibGVFeGNl
cHRpb25GdXp6KEV4ZWNTdGF0ZSopCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYWRX
ZWJBc3NlbWJseShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgU3RyaW5nIGZpbGVOYW1lID0gZXhl
Yy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIFZlY3Rvcjxj
aGFyPiBidWZmZXI7CisgICAgaWYgKCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVO
YW1lLCBidWZmZXIpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPnZtKCku
dGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDb3Vs
ZCBub3Qgb3BlbiBmaWxlLiIpKSkpOworICAgIFdhc206Ok1vZHVsZSogbW9kdWxlID0gV2FzbTo6
Y29tcGlsZShleGVjLCBidWZmZXIpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobW9kdWxl
KTsKK30KKwogLy8gVXNlIFNFSCBmb3IgUmVsZWFzZSBidWlsZHMgb25seSB0byBnZXQgcmlkIG9m
IHRoZSBjcmFzaCByZXBvcnQgZGlhbG9nCiAvLyAobHVja2lseSB0aGUgc2FtZSB0ZXN0cyBmYWls
IGluIFJlbGVhc2UgYW5kIERlYnVnIGJ1aWxkcyBzbyBmYXIpLiBOZWVkIHRvCiAvLyBiZSBpbiBh
IHNlcGFyYXRlIG1haW4gZnVuY3Rpb24gYmVjYXVzZSB0aGUganNjbWFpbiBmdW5jdGlvbiByZXF1
aXJlcyBvYmplY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCmluZGV4IDljY2MxY2U0OTc4OGQ3MTBmYzY5YTY5MTU0MzQyNzFhOGMwOWQyZTQuLmI0
OWVhYWM1MWFkNjkxOGUwMWNkYTNlODNlZWExZTIzYjkxZDJkYTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcApAQCAtMTExOSw3ICsxMTE5LDkg
QEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlY1N0YXRlKiBleGVjQ2Fs
bGVlLCBJbnN0cnVjdGlvbiogcGMsIENvZGUKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY29kZVB0cjsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDA7Ci0gICAgaWYgKGV4ZWN1
dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCisgICAgaWYgKGV4ZWN1dGFibGUtPmlzV2ViQXNzZW1i
bHlFeGVjdXRhYmxlKCkpCisgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5lbnRyeXBvaW50
Rm9yKHZtLCBraW5kLCBBcml0eUNoZWNrTm90UmVxdWlyZWQsIFJlZ2lzdGVyUHJlc2VydmF0aW9u
Tm90UmVxdWlyZWQpOworICAgIGVsc2UgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkp
CiAgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKHZtLCBraW5kLCBN
dXN0Q2hlY2tBcml0eSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiAgICAgZWxz
ZSB7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3Rh
dGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCmluZGV4IDU1MjQwZmQ5MWY3YmM3ODQy
ZjEzZTU5MjgxZDEwZDIxZDg2YzRmNTAuLmFiZjJkMTU2NTRjNjZlMDZmZjFhZWE3YWMwYmM0OWY1
MjE2ZDNmZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
Y3BwCkBAIC0xNDksNiArMTQ5LDIxIEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENv
ZGUoQ29kZUJsb2NrKiBnZW5lcmljQ29kZUJsb2NrKQogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgCisgICAgaWYgKGlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCkpIHsKKyAgICAgICAgV2ViQXNz
ZW1ibHlFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PFdlYkFzc2VtYmx5RXhlY3V0YWJs
ZSo+KHRoaXMpOworICAgICAgICBXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrID0gc3Rh
dGljX2Nhc3Q8V2ViQXNzZW1ibHlDb2RlQmxvY2sqPihnZW5lcmljQ29kZUJsb2NrKTsKKworICAg
ICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CisKKyAgICAgICAgZXhlY3V0YWJsZS0+
bV9jb2RlQmxvY2tGb3JDYWxsID0gY29kZUJsb2NrOworICAgICAgICAKKyAgICAgICAgLy8gRklY
TUU6IHRoaXMgaXMganVzdCB0byBtYWtlIGlzSG9zdEZ1bmN0aW9uKCkgaGFwcHkuCisgICAgICAg
IC8vIEJ1dCB0aGlzIHdpbGwgbWFrZSBpc0hvc3RGdW5jdGlvbigpIHJldHVybiB0cnVlLgorICAg
ICAgICBtX251bVBhcmFtZXRlcnNGb3JDYWxsID0gMDsKKyAgICAgICAgbV9udW1QYXJhbWV0ZXJz
Rm9yQ29uc3RydWN0ID0gMDsKKyAgICB9IGVsc2UgeworCisgICAgICAgIC8vIEZJWE1FOiBuZWVk
IHRvIGRlYWwgd2l0aCBjb2RlVHlwZSgpCiAgICAgc3dpdGNoIChnZW5lcmljQ29kZUJsb2NrLT5j
b2RlVHlwZSgpKSB7CiAgICAgY2FzZSBHbG9iYWxDb2RlOiB7CiAgICAgICAgIFByb2dyYW1FeGVj
dXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyk7CkBA
IC0xOTIsNiArMjA3LDggQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZShDb2Rl
QmxvY2sqIGdlbmVyaWNDb2RlQmxvY2spCiAgICAgaWYgKG9sZENvZGVCbG9jaykKICAgICAgICAg
b2xkQ29kZUJsb2NrLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7CiAKKyAgICB9CisgICAgCiAgICAg
RGVidWdnZXIqIGRlYnVnZ2VyID0gZ2VuZXJpY0NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRl
YnVnZ2VyKCk7CiAgICAgaWYgKGRlYnVnZ2VyKQogICAgICAgICBkZWJ1Z2dlci0+cmVnaXN0ZXJD
b2RlQmxvY2soZ2VuZXJpY0NvZGVCbG9jayk7CkBAIC0yMjgsNiArMjQ1LDggQEAgUmVmUHRyPENv
ZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJsZTo6bmV3Q29kZUJsb2NrRm9yKAogICAgICAgICAgICAg
ZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXhlY3V0YWJsZS0+c291cmNlKCkuc3Rh
cnRDb2x1bW4oKSkpOwogICAgIH0KICAgICAKKyAgICBBU1NFUlQoIWlzV2ViQXNzZW1ibHlFeGVj
dXRhYmxlKCkpOworICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKGNsYXNzSW5mbygpID09IEZ1bmN0
aW9uRXhlY3V0YWJsZTo6aW5mbygpKTsKICAgICBSRUxFQVNFX0FTU0VSVChmdW5jdGlvbik7CiAg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0
YWJsZSo+KHRoaXMpOwpAQCAtMzIzLDYgKzM0Miw4IEBAIHN0YXRpYyB2b2lkIHNldHVwSklUKFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiBKU09iamVjdCogU2NyaXB0RXhlY3V0YWJsZTo6
cHJlcGFyZUZvckV4ZWN1dGlvbkltcGwoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBKU0Z1bmN0aW9u
KiBmdW5jdGlvbiwgSlNTY29wZSogc2NvcGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkK
IHsKKyAgICBBU1NFUlQoIWlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCkpOworICAgIAogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIApA
QCAtNDI1LDYgKzQ0NiwzNSBAQCB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveShKU0Nl
bGwqIGNlbGwpCiAgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCktPkZ1
bmN0aW9uRXhlY3V0YWJsZTo6fkZ1bmN0aW9uRXhlY3V0YWJsZSgpOwogfQogCitjb25zdCBDbGFz
c0luZm8gV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseUV4ZWN1
dGFibGUiLCAmU2NyaXB0RXhlY3V0YWJsZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KFdlYkFzc2VtYmx5RXhlY3V0YWJsZSkgfTsKKworV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpXZWJB
c3NlbWJseUV4ZWN1dGFibGUoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCisgICAg
OiBTY3JpcHRFeGVjdXRhYmxlKHZtLndlYkFzc2VtYmx5RXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQo
KSwgdm0sIHNvdXJjZSwgLyppc0luU3RyaWN0Q29udGV4dCovIGZhbHNlICkKK3sKKyAgICAvKgor
ICAgIFJFTEVBU0VfQVNTRVJUKCFzb3VyY2UuaXNOdWxsKCkpOworICAgIEFTU0VSVChzb3VyY2Uu
bGVuZ3RoKCkpOworICAgIG1fZmlyc3RMaW5lID0gZmlyc3RMaW5lOworICAgIG1fbGFzdExpbmUg
PSBsYXN0TGluZTsKKyAgICBtX3N0YXJ0Q29sdW1uID0gc3RhcnRDb2x1bW47CisgICAgbV9lbmRD
b2x1bW4gPSBlbmRDb2x1bW47CisgICAgbV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQgPSB1bmxpbmtl
ZEV4ZWN1dGFibGUtPnBhcmFtZXRlcnNTdGFydE9mZnNldCgpOworICAgIG1fdHlwZVByb2ZpbGlu
Z1N0YXJ0T2Zmc2V0ID0gdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZz
ZXQoKTsKKyAgICBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQgPSB1bmxpbmtlZEV4ZWN1dGFibGUt
PnR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKTsKKyAgICAqLworfQorCit2b2lkIFdlYkFzc2VtYmx5
RXhlY3V0YWJsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICBtX3NpbmdsZXRvbkZ1bmN0aW9uLnNldCh2bSwgdGhpcywgSW5mZXJy
ZWRWYWx1ZTo6Y3JlYXRlKHZtKSk7Cit9CisKK3ZvaWQgV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpk
ZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBzdGF0aWNfY2FzdDxXZWJBc3NlbWJseUV4ZWN1
dGFibGUqPihjZWxsKS0+V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjp+V2ViQXNzZW1ibHlFeGVjdXRh
YmxlKCk7Cit9CisKIGlubGluZSBjb25zdCBjaGFyKiBzYW1wbGluZ0Rlc2NyaXB0aW9uKEpJVENv
ZGU6OkpJVFR5cGUgaml0VHlwZSkKIHsKICAgICBzd2l0Y2ggKGppdFR5cGUpIHsKQEAgLTYxOSw2
ICs2NjksNDMgQEAgRnVuY3Rpb25FeGVjdXRhYmxlKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmZyb21H
bG9iYWxDb2RlKAogICAgIHJldHVybiB1bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmsoZXhlYy52bSgp
LCBzb3VyY2UsIG92ZXJyaWRlTGluZU51bWJlcik7CiB9CiAKK1dlYkFzc2VtYmx5Q29kZUJsb2Nr
KiBXZWJBc3NlbWJseUV4ZWN1dGFibGU6OmJhc2VsaW5lQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKK3sKKyAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CisK
KyAgICBXZWJBc3NlbWJseUNvZGVCbG9jayogcmVzdWx0ID0gbV9jb2RlQmxvY2tGb3JDYWxsLmdl
dCgpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8V2ViQXNzZW1ibHlDb2RlQmxvY2sqPihyZXN1bHQtPmJhc2VsaW5lQWx0ZXJuYXRp
dmUoKSk7Cit9CisKK3ZvaWQgV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgV2ViQXNzZW1ibHlFeGVj
dXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5RXhlY3V0YWJsZSo+KGNlbGwp
OworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAg
ICBTY3JpcHRFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwor
ICAgIGlmICh0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja0ZvckNhbGwpCisgICAgICAgIHRoaXNPYmpl
Y3QtPm1fY29kZUJsb2NrRm9yQ2FsbC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgdmlz
aXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc2luZ2xldG9uRnVuY3Rpb24pOworfQorCitTeW1i
b2xUYWJsZSogV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpzeW1ib2xUYWJsZShDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCit7CisgICAgcmV0dXJuIGNvZGVCbG9ja0ZvcihraW5kKS0+c3ltYm9s
VGFibGUoKTsKK30KKwordm9pZCBXZWJBc3NlbWJseUV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCit7
CisgICAgLy8gRklYTUU6IGhhY2t5CisgICAgLy8gbV9jb2RlQmxvY2tGb3JDYWxsID0gbnVsbHB0
cjsKKyAgICAvLyBCYXNlOjpjbGVhckNvZGUoKTsKK30KKwordm9pZCBXZWJBc3NlbWJseUV4ZWN1
dGFibGU6OnVubGlua0NhbGxzKCkKK3sKKyAgICAvLyBGSVhNRTogaGFja3kKK30KKwogdm9pZCBF
eGVjdXRhYmxlQmFzZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIEV4ZWN1
dGFibGVCYXNlKiByZWFsVGhpcyA9IGNvbnN0X2Nhc3Q8RXhlY3V0YWJsZUJhc2UqPih0aGlzKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAppbmRleCAxYzdjODAw
MDNkMmEzMmJkNmEzMTFkYWMwZGU1MzkwMWE4YWQ3ODFmLi5lZDgyMjlhMTllOTI0NmU3NDVmMzYw
ODBmODUwMTgyZDc0NGI0OGJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5oCkBAIC01MCw2ICs1MCw3IEBAIGNsYXNzIEV2YWxDb2RlQmxvY2s7CiBjbGFzcyBG
dW5jdGlvbkNvZGVCbG9jazsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFBy
b2dyYW1Db2RlQmxvY2s7CitjbGFzcyBXZWJBc3NlbWJseUNvZGVCbG9jazsKIGNsYXNzIEpTU2Nv
cGU7CiAgICAgCiBlbnVtIENvbXBpbGF0aW9uS2luZCB7IEZpcnN0Q29tcGlsYXRpb24sIE9wdGlt
aXppbmdDb21waWxhdGlvbiB9OwpAQCAtOTgsNiArOTksMTAgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgcmV0dXJuIHR5cGUoKSA9PSBGdW5jdGlvbkV4ZWN1dGFibGVUeXBlOwogICAgIH0KKyAg
ICBib29sIGlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0
eXBlKCkgPT0gV2ViQXNzZW1ibHlFeGVjdXRhYmxlVHlwZTsKKyAgICB9CiAgICAgYm9vbCBpc1By
b2dyYW1FeGVjdXRhYmxlKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0eXBlKCkgPT0gUHJvZ3Jh
bUV4ZWN1dGFibGVUeXBlOwpAQCAtNjc4LDYgKzY4MywxMjEgQEAgcHJpdmF0ZToKICAgICBXcml0
ZUJhcnJpZXI8SW5mZXJyZWRWYWx1ZT4gbV9zaW5nbGV0b25GdW5jdGlvbjsKIH07CiAKK2NsYXNz
IFdlYkFzc2VtYmx5RXhlY3V0YWJsZSBmaW5hbCA6IHB1YmxpYyBTY3JpcHRFeGVjdXRhYmxlIHsK
KyAgICBmcmllbmQgY2xhc3MgSklUOworICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7CitwdWJsaWM6CisgICAgdHlwZWRlZiBTY3JpcHRFeGVjdXRhYmxlIEJhc2U7CisgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOworCisgICAgc3RhdGljIFdlYkFzc2VtYmx5RXhlY3V0
YWJsZSogY3JlYXRlKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQorICAgIHsKKyAg
ICAgICAgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlFeGVjdXRhYmxlPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlF
eGVjdXRhYmxlKHZtLCBzb3VyY2UpOworICAgICAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlv
bih2bSk7CisgICAgICAgIHJldHVybiBleGVjdXRhYmxlOworICAgIH0KKyAgICAvLyBzdGF0aWMg
V2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBmcm9tR2xvYmFsQ29kZShjb25zdCBJZGVudGlmaWVyJiBu
YW1lLCBFeGVjU3RhdGUmLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNPYmplY3QqJiBleGNlcHRpb24s
IGludCBvdmVycmlkZUxpbmVOdW1iZXIpOworCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKKyAgICAgICAgCisgICAgYm9vbCBpc0dlbmVyYXRlZEZvckNhbGwoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ2FsbDsKKyAgICB9CisKKyAgICBXZWJB
c3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrRm9yQ2FsbCgpCisgICAgeworICAgICAgICByZXR1
cm4gbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpOworICAgIH0KKworICAgIGJvb2wgaXNHZW5lcmF0
ZWRGb3JDb25zdHJ1Y3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2tGb3JDb25zdHJ1Y3QoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgICAgICAKKyAgICBib29s
IGlzR2VuZXJhdGVkRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICB7CisgICAg
ICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQorICAgICAgICAgICAgcmV0dXJuIGlzR2VuZXJh
dGVkRm9yQ2FsbCgpOworICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsK
KyAgICAgICAgcmV0dXJuIGlzR2VuZXJhdGVkRm9yQ29uc3RydWN0KCk7CisgICAgfQorICAgICAg
ICAKKyAgICBXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXph
dGlvbktpbmQga2luZCkKKyAgICB7CisgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQor
ICAgICAgICAgICAgcmV0dXJuIGNvZGVCbG9ja0ZvckNhbGwoKTsKKyAgICAgICAgQVNTRVJUKGtp
bmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CisgICAgICAgIHJldHVybiBjb2RlQmxvY2tGb3JDb25z
dHJ1Y3QoKTsKKyAgICB9CisKKyAgICBXZWJBc3NlbWJseUNvZGVCbG9jayogYmFzZWxpbmVDb2Rl
QmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgICAgIAorICAgIFdlYkFzc2Vt
Ymx5Q29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQpCisgICAgeworICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3Ioa2luZCk7
CisgICAgfQorCisgICAgUmVmUHRyPFR5cGVTZXQ+IHJldHVyblN0YXRlbWVudFR5cGVTZXQoKSAK
KyAgICB7CisgICAgICAgIGlmICghbV9yZXR1cm5TdGF0ZW1lbnRUeXBlU2V0KQorICAgICAgICAg
ICAgbV9yZXR1cm5TdGF0ZW1lbnRUeXBlU2V0ID0gVHlwZVNldDo6Y3JlYXRlKCk7CisKKyAgICAg
ICAgcmV0dXJuIG1fcmV0dXJuU3RhdGVtZW50VHlwZVNldDsKKyAgICB9CisgICAgICAgIAorICAg
IC8vIEZ1bmN0aW9uTW9kZSBmdW5jdGlvbk1vZGUoKSB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0
YWJsZS0+ZnVuY3Rpb25Nb2RlKCk7IH0KKyAgICAvLyBib29sIGlzQnVpbHRpbkZ1bmN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCk7
IH0KKyAgICAvLyBib29sIGlzQ2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmlzQ2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9uKCk7IH0K
KyAgICAvLyBjb25zdCBJZGVudGlmaWVyJiBuYW1lKCkgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1
dGFibGUtPm5hbWUoKTsgfQorICAgIC8vIGNvbnN0IElkZW50aWZpZXImIGluZmVycmVkTmFtZSgp
IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5pbmZlcnJlZE5hbWUoKTsgfQorICAgIC8v
IEpTU3RyaW5nKiBuYW1lVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJs
ZS0+bmFtZVZhbHVlKCk7IH0KKyAgICAvLyBzaXplX3QgcGFyYW1ldGVyQ291bnQoKSBjb25zdCB7
IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+cGFyYW1ldGVyQ291bnQoKTsgfSAvLyBFeGNs
dWRpbmcgJ3RoaXMnIQorICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZShDb2RlU3BlY2lhbGl6
YXRpb25LaW5kKTsKKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvLCBU
eXBlSW5mbyhXZWJBc3NlbWJseUV4ZWN1dGFibGVUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CisgICAgfQorCisgICAgdW5zaWduZWQgcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQ7IH0KKworICAgIC8qCisgICAgdm9pZCBv
dmVycmlkZVBhcmFtZXRlckFuZFR5cGVQcm9maWxpbmdTdGFydEVuZE9mZnNldHModW5zaWduZWQg
cGFyYW1ldGVyc1N0YXJ0T2Zmc2V0LCB1bnNpZ25lZCB0eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQs
IHVuc2lnbmVkIHR5cGVQcm9maWxpbmdFbmRPZmZzZXQpCisgICAgeworICAgICAgICBtX3BhcmFt
ZXRlcnNTdGFydE9mZnNldCA9IHBhcmFtZXRlcnNTdGFydE9mZnNldDsKKyAgICAgICAgbV90eXBl
UHJvZmlsaW5nU3RhcnRPZmZzZXQgPSB0eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQ7CisgICAgICAg
IG1fdHlwZVByb2ZpbGluZ0VuZE9mZnNldCA9IHR5cGVQcm9maWxpbmdFbmRPZmZzZXQ7CisgICAg
fQorICAgICovCisKKyAgICBERUNMQVJFX0lORk87CisgICAgICAgIAorICAgIHZvaWQgdW5saW5r
Q2FsbHMoKTsKKworICAgIHZvaWQgY2xlYXJDb2RlKCk7CisgICAgCisgICAgSW5mZXJyZWRWYWx1
ZSogc2luZ2xldG9uRnVuY3Rpb24oKSB7IHJldHVybiBtX3NpbmdsZXRvbkZ1bmN0aW9uLmdldCgp
OyB9CisKK3ByaXZhdGU6CisgICAgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKFZNJiwgY29uc3QgU291
cmNlQ29kZSYpOworICAgIAorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKworICAgIGZy
aWVuZCBjbGFzcyBTY3JpcHRFeGVjdXRhYmxlOworCisgICAgUmVmUHRyPFdlYkFzc2VtYmx5Q29k
ZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNhbGw7CisgICAgUmVmUHRyPFR5cGVTZXQ+IG1fcmV0dXJu
U3RhdGVtZW50VHlwZVNldDsKKyAgICB1bnNpZ25lZCBtX3BhcmFtZXRlcnNTdGFydE9mZnNldDsK
KyAgICBXcml0ZUJhcnJpZXI8SW5mZXJyZWRWYWx1ZT4gbV9zaW5nbGV0b25GdW5jdGlvbjsKK307
CisKIGlubGluZSB2b2lkIEV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGVWaXJ0dWFsKEV4ZWN1dGFi
bGVCYXNlKiBleGVjdXRhYmxlKQogewogICAgIHN3aXRjaCAoZXhlY3V0YWJsZS0+dHlwZSgpKSB7
CkBAIC02ODcsNiArODA3LDggQEAgaW5saW5lIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29k
ZVZpcnR1YWwoRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUpCiAgICAgICAgIHJldHVybiBqc0Nh
c3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Y2xlYXJDb2RlKCk7CiAgICAgY2Fz
ZSBGdW5jdGlvbkV4ZWN1dGFibGVUeXBlOgogICAgICAgICByZXR1cm4ganNDYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5jbGVhckNvZGUoKTsKKyAgICBjYXNlIFdlYkFzc2Vt
Ymx5RXhlY3V0YWJsZVR5cGU6CisgICAgICAgIHJldHVybiBqc0Nhc3Q8V2ViQXNzZW1ibHlFeGVj
dXRhYmxlKj4oZXhlY3V0YWJsZSktPmNsZWFyQ29kZSgpOwogICAgIGRlZmF1bHQ6CiAgICAgICAg
IHJldHVybiBqc0Nhc3Q8TmF0aXZlRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5jbGVhckNvZGUo
KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1
bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3Bw
CmluZGV4IDFiOGM0MDdlYzNkNDk0OWI2MDZlYzk1YjlhYzliNGUyZGZjNjgxMmYuLjdkYzY3MjNi
NGE2YmZlM2FhODQ0ODJlY2Q1MmY5NDQ5ZWEzZjlhODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCkBAIC02MCwxMCArNjAsMTEgQEAgYm9vbCBKU0Z1
bmN0aW9uOjppc0hvc3RGdW5jdGlvbk5vbklubGluZSgpIGNvbnN0CiAgICAgcmV0dXJuIGlzSG9z
dEZ1bmN0aW9uKCk7CiB9CiAKLUpTRnVuY3Rpb24qIEpTRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0s
IEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUpCitKU0Z1bmN0
aW9uKiBKU0Z1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJs
ZSwgSlNTY29wZSogc2NvcGUpCiB7CiAgICAgSlNGdW5jdGlvbiogcmVzdWx0ID0gY3JlYXRlSW1w
bCh2bSwgZXhlY3V0YWJsZSwgc2NvcGUpOwotICAgIGV4ZWN1dGFibGUtPnNpbmdsZXRvbkZ1bmN0
aW9uKCktPm5vdGlmeVdyaXRlKHZtLCByZXN1bHQsICJBbGxvY2F0aW5nIGEgZnVuY3Rpb24iKTsK
KyAgICBpZiAoZXhlY3V0YWJsZS0+aXNGdW5jdGlvbkV4ZWN1dGFibGUoKSkKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPnNpbmdsZXRvbkZ1bmN0
aW9uKCktPm5vdGlmeVdyaXRlKHZtLCByZXN1bHQsICJBbGxvY2F0aW5nIGEgZnVuY3Rpb24iKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Z1bmN0aW9uLmgKaW5kZXggMGI4N2Q3NWM5MTQ1MGM1YWYxYWFlZDI3YTYxYTc0OGVmODBmMDkz
ZS4uMjNjN2ZiMTc4OWIzOTE3MDY2YTczZDUwNjI3ZGMyZmRjMmM5Y2ZhNiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaApAQCAtNzIsNyArNzIsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZVdpdGhJbnZhbGlkYXRlZFJlYWxsb2Nh
dGlvbldhdGNocG9pbnQoVk0mLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU1Njb3BlKik7CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgaW50IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBOYXRpdmVTdGRGdW5jdGlv
biYmLCBJbnRyaW5zaWMgPSBOb0ludHJpbnNpYywgTmF0aXZlRnVuY3Rpb24gbmF0aXZlQ29uc3Ry
dWN0b3IgPSBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rvcik7CiAKLSAgICBzdGF0aWMgSlNG
dW5jdGlvbiogY3JlYXRlKFZNJiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwgSlNTY29wZSopOworICAg
IHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGUoVk0mLCBFeGVjdXRhYmxlQmFzZSosIEpTU2NvcGUq
KTsKIAogICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVCdWlsdGluRnVuY3Rpb24oVk0mLCBG
dW5jdGlvbkV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCopOwogICAgIHN0YXRpYyBKU0Z1bmN0
aW9uKiBjcmVhdGVCdWlsdGluRnVuY3Rpb24oVk0mLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU0ds
b2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSk7CkBAIC0xNDAsNyArMTQwLDcgQEAgcHVi
bGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNGdW5jdGlvbihWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7Ci0gICAgSlNGdW5jdGlvbihWTSYsIEZ1bmN0
aW9uRXhlY3V0YWJsZSosIEpTU2NvcGUqKTsKKyAgICBKU0Z1bmN0aW9uKFZNJiwgRXhlY3V0YWJs
ZUJhc2UqLCBKU1Njb3BlKik7CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZl
RXhlY3V0YWJsZSosIGludCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgdXNpbmcg
QmFzZTo6ZmluaXNoQ3JlYXRpb247CkBAIC0xNTksNyArMTU5LDcgQEAgcHJvdGVjdGVkOgogICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogcHJp
dmF0ZToKLSAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlSW1wbChWTSYgdm0sIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUpCisgICAgc3RhdGljIEpTRnVu
Y3Rpb24qIGNyZWF0ZUltcGwoVk0mIHZtLCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgSlNT
Y29wZSogc2NvcGUpCiAgICAgewogICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRnVuY3Rpb24+KHZtLmhlYXApKSBKU0Z1bmN0aW9uKHZt
LCBleGVjdXRhYmxlLCBzY29wZSk7CiAgICAgICAgIEFTU0VSVChmdW5jdGlvbi0+c3RydWN0dXJl
KCktPmdsb2JhbE9iamVjdCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uSW5saW5lcy5oCmluZGV4IGY2YzZkNThlYzZlNWMxMTY0Y2IyN2ZhNWU0MTYx
OGI0YjgxNDJmMDIuLmI5MzA2MDc1OTlhN2MyYTFkZDAzMDQ4MGE3MmJlOGFkM2RiZDIwNGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMu
aApAQCAtMzgsNyArMzgsNyBAQCBpbmxpbmUgSlNGdW5jdGlvbiogSlNGdW5jdGlvbjo6Y3JlYXRl
V2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludCgKICAgICByZXR1cm4gY3JlYXRl
SW1wbCh2bSwgZXhlY3V0YWJsZSwgc2NvcGUpOwogfQogCi1pbmxpbmUgSlNGdW5jdGlvbjo6SlNG
dW5jdGlvbihWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSog
c2NvcGUpCitpbmxpbmUgSlNGdW5jdGlvbjo6SlNGdW5jdGlvbihWTSYgdm0sIEV4ZWN1dGFibGVC
YXNlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSkKICAgICA6IEJhc2Uodm0sIHNjb3BlLCBz
Y29wZS0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCkpCiAgICAgLCBtX2V4ZWN1
dGFibGUodm0sIHRoaXMsIGV4ZWN1dGFibGUpCiAgICAgLCBtX3JhcmVEYXRhKCkKQEAgLTU0LDYg
KzU0LDggQEAgaW5saW5lIEZ1bmN0aW9uRXhlY3V0YWJsZSogSlNGdW5jdGlvbjo6anNFeGVjdXRh
YmxlKCkgY29uc3QKIGlubGluZSBib29sIEpTRnVuY3Rpb246OmlzSG9zdEZ1bmN0aW9uKCkgY29u
c3QKIHsKICAgICBBU1NFUlQobV9leGVjdXRhYmxlKTsKKyAgICBpZiAobV9leGVjdXRhYmxlLT5p
c1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpKSAvLyBGSVhNRTogaGFja3kKKyAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgcmV0dXJuIG1fZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAppbmRleCA0MDMyNmNlMGYzMjlmYTdj
N2JiYzk5ZjQ0NjQyOGZlOTZjOTEyNGIzLi43NmVmZTgyMjQyYWFlMTNlMGU2MTU0YWYwNTIyYzZk
ODY3MDMwNjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5
cGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaApAQCAtNzQs
NiArNzQsOCBAQCBlbnVtIEpTVHlwZSA6IHVpbnQ4X3QgewogCiAgICAgTmFtZVNjb3BlT2JqZWN0
VHlwZSwKIAorICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZVR5cGUsIC8vIEZJWE1FOiBNb3ZlIGl0
IGFib3ZlLgorCiAgICAgR2xvYmFsT2JqZWN0VHlwZSwKICAgICBBY3RpdmF0aW9uT2JqZWN0VHlw
ZSwKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IDc2NzQxZGQ4YWVhMzdm
ZjU3Y2NhNGNmNjM2YmZjMzJiYjQyOWNjNDEuLjRkNWY1ZGYzNTY5YWM2MjVmOTIzMGM5NGRiMjc4
ODgzMDhiOWJjYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTIyMCw2
ICsyMjAsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAg
ZXZhbEV4ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBFdmFsRXhlY3V0YWJsZTo6Y3JlYXRl
U3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHByb2dyYW1FeGVjdXRhYmxlU3Ry
dWN0dXJlLnNldCgqdGhpcywgUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhp
cywgMCwganNOdWxsKCkpKTsKICAgICBmdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0
aGlzLCBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxs
KCkpKTsKKyAgICB3ZWJBc3NlbWJseUV4ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWJB
c3NlbWJseUV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
ICAgICByZWdFeHBTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBSZWdFeHA6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKICAgICBzeW1ib2xTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBTeW1i
b2w6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBzeW1ib2xUYWJs
ZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFN5bWJvbFRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMs
IDAsIGpzTnVsbCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCBmNzhmOWVi
OTY0NjBhZTlmZGJmZjkxNjljMjg0YTg1ODQ4MTZjNzM5Li4zNzNkNDBkYzdmOThlNWVjNTg1Njhk
NGJiNWIzNmQ0ZmY5MTFjNmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTI1
OSw2ICsyNTksNyBAQCBwdWJsaWM6CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZXZhbEV4ZWN1dGFi
bGVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvZ3JhbUV4ZWN1dGFibGVTdHJ1
Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJl
OworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5RXhlY3V0YWJsZVN0cnVjdHVyZTsK
ICAgICBTdHJvbmc8U3RydWN0dXJlPiByZWdFeHBTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVj
dHVyZT4gc3ltYm9sU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN5bWJvbFRhYmxl
U3RydWN0dXJlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1
bmN0aW9uUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlv
blBhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzkwMDIzNGE2YTczNzQyYmMxYzM4Y2I3MGM3MmFjNDMx
Zjk1ZDczNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21GdW5jdGlvblBhcnNlci5jcHAKQEAgLTAsMCArMSwxNDczIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldhc21GdW5jdGlvblBhcnNlci5oIgorCisjaW5jbHVkZSAiSklUQ29kZS5oIgorI2luY2x1
ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1
ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXIu
aCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3Bh
Y2UgV2FzbSB7CisKK2NsYXNzIEp1bXBTY29wZSB7CitwdWJsaWM6CisgICAgSnVtcFNjb3BlKE1h
Y3JvQXNzZW1ibGVyKiBtYWNyb0Fzc2VtYmxlcikKKyAgICAgICAgOiBtX21hY3JvQXNzZW1ibGVy
KG1hY3JvQXNzZW1ibGVyKQorICAgICAgICAsIG1fbGlua2VkKGZhbHNlKQorICAgIHsKKyAgICB9
CisKKyAgICBKdW1wU2NvcGUoTWFjcm9Bc3NlbWJsZXIqIG1hY3JvQXNzZW1ibGVyLCBjb25zdCBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwmIGxhYmVsKQorICAgICAgICA6IG1fbWFjcm9Bc3NlbWJsZXIo
bWFjcm9Bc3NlbWJsZXIpCisgICAgICAgICwgbV9saW5rZWQodHJ1ZSkKKyAgICAgICAgLCBtX2xh
YmVsKGxhYmVsKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGp1bXAoKQorICAgIHsKKyAgICAg
ICAgaWYgKG1fbGlua2VkKQorICAgICAgICAgICAgbV9tYWNyb0Fzc2VtYmxlci0+anVtcChtX2xh
YmVsKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9qdW1wTGlzdC5hcHBlbmQobV9tYWNy
b0Fzc2VtYmxlci0+anVtcCgpKTsKKyAgICB9CisKKyAgICB2b2lkIGxpbmsoKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKCFtX2xpbmtlZCk7CisgICAgICAgIG1fanVtcExpc3QubGluayhtX21hY3Jv
QXNzZW1ibGVyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWFjcm9Bc3NlbWJsZXIqIG1fbWFj
cm9Bc3NlbWJsZXI7CisgICAgYm9vbCBtX2xpbmtlZDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbV9sYWJlbDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbV9qdW1wTGlzdDsKK307
CisKK2VudW0gY2xhc3MgTGluZWFyTWVtb3J5VHlwZSA6IHVuc2lnbmVkIHsKKyAgICBJOCwKKyAg
ICBTOCwKKyAgICBVOCwKKyAgICBJMTYsCisgICAgUzE2LAorICAgIFUxNiwKKyAgICBJMzIsCisg
ICAgRjMyLAorICAgIEY2NAorfTsKKworUmVmUHRyPEpJVENvZGU+IEZ1bmN0aW9uUGFyc2VyOjpj
b21waWxlRnVuY3Rpb24oVk0mIHZtLCBzaXplX3QgZnVuY3Rpb25JbmRleCkKK3sKKyAgICBtX3N0
YWNrSGVpZ2h0ID0gMTY7IC8vIEZJWE1FOiBjYWxjdWxhdGUgdGhlIGFjdHVhbCBoZWlnaHQKKwor
ICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CisgICAgZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZy
YW1lSGVhZGVyKG1fY29kZUJsb2NrLCBKU1N0YWNrOjpDb2RlQmxvY2spOworICAgIGFsbG9jYXRl
U3BhY2VPblN0YWNrKCk7CisKKyAgICBwYXJzZVNpZ25hdHVyZShmdW5jdGlvbkluZGV4KTsKKyAg
ICBwYXJzZVZhcnMoKTsKKyAgICBwYXJzZVN0bXRMaXN0KCk7CisKKyAgICAvLyBGSVhNRTogU2tp
cCB0aGVzZSBpZiB0aGUgbGFzdCBzdGF0ZW1lbnQgaXMgYSByZXR1cm4gc3RhdGVtZW50LgorICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUklu
Zm86OnJlZ1QwKTsgLy8gRklYTUU6IFNob3VsZCB3ZSByZXR1cm4gdW5kZWZpbmVkPworICAgIGRl
YWxsb2NhdGVTcGFjZU9uU3RhY2soKTsKKyAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAg
IHJldCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih2bSwgKnRoaXMsIDAsIEpJVENv
bXBpbGF0aW9uTXVzdFN1Y2NlZWQpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3aXRoQXJp
dHlDaGVjazsKKyAgICAvLyBUT0RPOiBJbXBsZW1lbnQgYXJpdHkgY2hlY2sKKyAgICBDb2RlUmVm
IHJlc3VsdCA9IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiQmFzZWxpbmUgSklUIGNvZGUg
Zm9yIFdlYkFzc2VtYmx5IikpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29k
ZShyZXN1bHQsIHdpdGhBcml0eUNoZWNrLCBKSVRDb2RlOjpCYXNlbGluZUpJVCkpOworfQorCit2
b2lkIEZ1bmN0aW9uUGFyc2VyOjphbGxvY2F0ZVNwYWNlT25TdGFjaygpCit7CisgICAgLy8gVE9E
TzogY2hlY2sgZm9yIHN0YWNrIG92ZXJmbG93CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtbV9z
dGFja0hlaWdodCAqIDgpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cit9CisKK3ZvaWQgRnVuY3Rp
b25QYXJzZXI6OmRlYWxsb2NhdGVTcGFjZU9uU3RhY2soKQoreworICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIobV9zdGFja0hlaWdodCAqIDgpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cit9CisKK3Zv
aWQgRnVuY3Rpb25QYXJzZXI6OnBhcnNlU2lnbmF0dXJlKHNpemVfdCBmdW5jdGlvbkluZGV4KQor
eworICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gbV9tb2R1bGUtPm1fc2lnbmF0dXJl
c1ttX21vZHVsZS0+bV9mdW5jU2lnbmF0dXJlc1tmdW5jdGlvbkluZGV4XV07CisgICAgbV9jdXJy
ZW50UmV0dXJuVHlwZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlOworICAgIHNpemVfdCBhcmd1bWVu
dENvdW50ID0gc2lnbmF0dXJlLmFyZ3VtZW50cy5zaXplKCk7CisgICAgZm9yICh1aW50MzJfdCBh
cmdJbmRleCA9IDA7IGFyZ0luZGV4IDwgYXJndW1lbnRDb3VudDsgKythcmdJbmRleCkgeworICAg
ICAgICBUeXBlIHR5cGUgPSBzaWduYXR1cmUuYXJndW1lbnRzW2FyZ0luZGV4XTsKKyAgICAgICAg
bV9jdXJyZW50TG9jYWxUeXBlcy5hcHBlbmQodHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkg
eworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAoYXJnSW5kZXggKyAxICsgQ2FsbEZyYW1lOjp0aGlz
QXJndW1lbnRPZmZzZXQoKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgc3RhY2tBZGRyZXNzKGFyZ0luZGV4
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpGMzI6CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNlIFR5cGU6OkY2
NDoKKyAgICAgICAgICAgIGxvYWQ2NChBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCAoYXJnSW5kZXggKyAxICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSkgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgdW5ib3hEb3VibGVX
aXRob3V0QXNzZXJ0aW9ucyhHUFJJbmZvOjpyZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAg
ICAgICAgICBzdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBzdGFja0FkZHJlc3MoYXJnSW5k
ZXgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCBGdW5jdGlvblBhcnNlcjo6cGFyc2VWYXJzKCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZkkz
MlZhcnMgPSAwOworICAgIHVpbnQzMl90IG51bWJlck9mRjMyVmFycyA9IDA7CisgICAgdWludDMy
X3QgbnVtYmVyT2ZGNjRWYXJzID0gMDsKKworICAgIFZhclR5cGVzIHZhclR5cGVzOworICAgIFZh
clR5cGVzV2l0aEltbSB2YXJUeXBlc1dpdGhJbW07CisgICAgdWludDhfdCBpbW07CisgICAgaWYg
KG1fcmVhZGVyLmNvZGUoJnZhclR5cGVzLCAmdmFyVHlwZXNXaXRoSW1tLCAmaW1tKSkgeworICAg
ICAgICBpZiAodmFyVHlwZXMgJiBWYXJUeXBlczo6STMyKQorICAgICAgICAgICAgbnVtYmVyT2ZJ
MzJWYXJzID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgICAgIGlmICh2YXJUeXBlcyAmIFZhclR5
cGVzOjpGMzIpCisgICAgICAgICAgICBudW1iZXJPZkYzMlZhcnMgPSBtX3JlYWRlci5pbW1VMzIo
KTsKKyAgICAgICAgaWYgKHZhclR5cGVzICYgVmFyVHlwZXM6OkY2NCkKKyAgICAgICAgICAgIG51
bWJlck9mRjY0VmFycyA9IG1fcmVhZGVyLmltbVUzMigpOworICAgIH0gZWxzZQorICAgICAgICBu
dW1iZXJPZkkzMlZhcnMgPSBpbW07CisKKyAgICB1aW50MzJfdCBudW1iZXJPZlZhcnMgPSBudW1i
ZXJPZkkzMlZhcnMgKyBudW1iZXJPZkYzMlZhcnMgKyBudW1iZXJPZkY2NFZhcnM7CisgICAgaWYg
KG51bWJlck9mVmFycyA+IDApIHsKKyAgICAgICAgdWludDMyX3QgbG9jYWxJbmRleCA9IG1fY3Vy
cmVudExvY2FsVHlwZXMuc2l6ZSgpOworICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwg
bnVtYmVyT2ZJMzJWYXJzOyArK2kpIHsKKyAgICAgICAgICAgIG1fY3VycmVudExvY2FsVHlwZXMu
YXBwZW5kKFR5cGU6OkkzMik7CisgICAgICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwg
c3RhY2tBZGRyZXNzKGxvY2FsSW5kZXgrKykpOworICAgICAgICB9CisgICAgICAgIGZvciAodWlu
dDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkYzMlZhcnM7ICsraSkgeworICAgICAgICAgICAgbV9j
dXJyZW50TG9jYWxUeXBlcy5hcHBlbmQoVHlwZTo6RjMyKTsKKyAgICAgICAgICAgIHN0b3JlMzIo
VHJ1c3RlZEltbTMyKDApLCBzdGFja0FkZHJlc3MobG9jYWxJbmRleCsrKSk7CisgICAgICAgIH0K
KyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mRjY0VmFyczsgKytpKSB7
CisgICAgICAgICAgICBtX2N1cnJlbnRMb2NhbFR5cGVzLmFwcGVuZChUeXBlOjpGNjQpOworICAg
ICAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoMCksIHN0YWNrQWRkcmVzcyhsb2NhbEluZGV4
KyspKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBGdW5jdGlvblBhcnNlcjo6cGFyc2VT
dG10KCkKK3sKKyAgICBTdG10IHN0bXQ7CisgICAgU3RtdFdpdGhJbW0gc3RtdFdpdGhJbW07Cisg
ICAgdWludDhfdCBpbW07CisgICAgaWYgKG1fcmVhZGVyLmNvZGUoJnN0bXQsICZzdG10V2l0aElt
bSwgJmltbSkpIHsKKyAgICAgICAgc3dpdGNoIChzdG10KSB7CisgICAgICAgIGNhc2UgU3RtdDo6
U2V0TG9jOgorICAgICAgICAgICAgcGFyc2VTZXRMb2NhbCgwKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFN0bXQ6OlNldEdsbzoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgU3RtdDo6STMyU3RvcmU4OgorICAgICAgICAg
ICAgcGFyc2VTdG9yZShSZXR1cm5UeXBlOjpJMzIsIExpbmVhck1lbW9yeVR5cGU6Okk4LCBmYWxz
ZSwgMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdG10OjpJMzJTdG9yZU9m
Zjg6CisgICAgICAgICAgICBwYXJzZVN0b3JlKFJldHVyblR5cGU6OkkzMiwgTGluZWFyTWVtb3J5
VHlwZTo6STgsIHRydWUsIDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3Rt
dDo6STMyU3RvcmUxNjoKKyAgICAgICAgICAgIHBhcnNlU3RvcmUoUmV0dXJuVHlwZTo6STMyLCBM
aW5lYXJNZW1vcnlUeXBlOjpJMTYsIGZhbHNlLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFN0bXQ6OkkzMlN0b3JlT2ZmMTY6CisgICAgICAgICAgICBwYXJzZVN0b3JlKFJl
dHVyblR5cGU6OkkzMiwgTGluZWFyTWVtb3J5VHlwZTo6STE2LCB0cnVlLCAwKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0bXQ6OkkzMlN0b3JlMzI6CisgICAgICAgICAgICBw
YXJzZVN0b3JlKFJldHVyblR5cGU6OkkzMiwgTGluZWFyTWVtb3J5VHlwZTo6STMyLCBmYWxzZSwg
MCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdG10OjpJMzJTdG9yZU9mZjMy
OgorICAgICAgICAgICAgcGFyc2VTdG9yZShSZXR1cm5UeXBlOjpJMzIsIExpbmVhck1lbW9yeVR5
cGU6OkkzMiwgdHJ1ZSwgMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdG10
OjpGMzJTdG9yZToKKyAgICAgICAgICAgIHBhcnNlU3RvcmUoUmV0dXJuVHlwZTo6RjMyLCBMaW5l
YXJNZW1vcnlUeXBlOjpGMzIsIGZhbHNlLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFN0bXQ6OkYzMlN0b3JlT2ZmOgorICAgICAgICAgICAgcGFyc2VTdG9yZShSZXR1cm5U
eXBlOjpGMzIsIExpbmVhck1lbW9yeVR5cGU6OkYzMiwgdHJ1ZSwgMCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBTdG10OjpGNjRTdG9yZToKKyAgICAgICAgICAgIHBhcnNlU3Rv
cmUoUmV0dXJuVHlwZTo6RjY0LCBMaW5lYXJNZW1vcnlUeXBlOjpGNjQsIGZhbHNlLCAwKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0bXQ6OkY2NFN0b3JlT2ZmOgorICAgICAg
ICAgICAgcGFyc2VTdG9yZShSZXR1cm5UeXBlOjpGNjQsIExpbmVhck1lbW9yeVR5cGU6OkY2NCwg
dHJ1ZSwgMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdG10OjpDYWxsSW50
OgorICAgICAgICAgICAgcGFyc2VDYWxsSW50ZXJuYWwoUmV0dXJuVHlwZTo6Vm9pZCwgMCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdG10OjpDYWxsSW5kOgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBTdG10OjpDYWxs
SW1wOgorICAgICAgICAgICAgcGFyc2VDYWxsSW1wb3J0KFJldHVyblR5cGU6OlZvaWQsIDApOyAv
LyBGSVhNRTogSXMgaXQgcmVhbGx5IFZvaWQ/CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBTdG10OjpSZXQ6CisgICAgICAgICAgICBwYXJzZVJldHVyblN0bXQoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdG10OjpCbG9jazoKKyAgICAgICAgICAgIHBhcnNl
QmxvY2tTdG10KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgU3RtdDo6SWZU
aGVuOgorICAgICAgICAgICAgcGFyc2VJZlN0bXQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgY2FzZSBTdG10OjpJZkVsc2U6CisgICAgICAgICAgICBwYXJzZUlmRWxzZVN0bXQoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdG10OjpXaGlsZToKKyAgICAgICAg
ICAgIHBhcnNlV2hpbGVTdG10KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2Ug
U3RtdDo6RG86CisgICAgICAgICAgICBwYXJzZURvU3RtdCgpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBjYXNlIFN0bXQ6OkxhYmVsOgorICAgICAgICAgICAgcGFyc2VMYWJlbFN0bXQo
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdG10OjpCcmVhazoKKyAgICAg
ICAgICAgIHBhcnNlQnJlYWtTdG10KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNh
c2UgU3RtdDo6QnJlYWtMYWJlbDoKKyAgICAgICAgICAgIHBhcnNlQnJlYWtMYWJlbFN0bXQoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBTdG10OjpDb250aW51ZToKKyAgICAg
ICAgICAgIHBhcnNlQ29udGludWVTdG10KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBTdG10OjpDb250aW51ZUxhYmVsOgorICAgICAgICAgICAgcGFyc2VDb250aW51ZUxhYmVs
U3RtdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFN0bXQ6OlN3aXRjaDoK
KyAgICAgICAgICAgIHBhcnNlU3dpdGNoU3RtdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3dpdGNoIChzdG10V2l0aEltbSkgewor
ICAgICAgICBjYXNlIFN0bXRXaXRoSW1tOjpTZXRMb2M6CisgICAgICAgICAgICBwYXJzZVNldExv
Y2FsKGltbSwgMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdG10V2l0aElt
bTo6U2V0R2xvOgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBGdW5jdGlvblBhcnNl
cjo6cGFyc2VHZXRMb2NhbCh1aW50MzJfdCBpbW0sIGludCBkc3QpCit7CisgICAgc3dpdGNoICht
X2N1cnJlbnRMb2NhbFR5cGVzW2ltbV0pIHsKKyAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICBjYXNl
IFR5cGU6OkYzMjoKKyAgICAgICAgbG9hZDMyKHN0YWNrQWRkcmVzcyhpbW0pLCBHUFJJbmZvOjpy
ZWdUMCk7CisgICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3Mo
ZHN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHlwZTo6RjY0OgorICAgICAgICAvLyBG
SVhNRTogbG9hZERvdWJsZS9zdG9yZURvdWJsZT8KKyAgICAgICAgbG9hZDY0KHN0YWNrQWRkcmVz
cyhpbW0pLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIHN0b3JlNjQoR1BSSW5mbzo6cmVnVDAs
IHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEZ1
bmN0aW9uUGFyc2VyOjpwYXJzZUdldExvY2FsKGludCBkc3QpCit7CisgICAgdWludDMyX3QgaW1t
ID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgcGFyc2VHZXRMb2NhbChpbW0sIGRzdCk7Cit9CisK
K3ZvaWQgRnVuY3Rpb25QYXJzZXI6OnBhcnNlU2V0TG9jYWwodWludDMyX3QgaW1tLCBpbnQgZHN0
KQoreworICAgIFR5cGUgdHlwZSA9IG1fY3VycmVudExvY2FsVHlwZXNbaW1tXTsKKyAgICBwYXJz
ZUV4cHIoUmV0dXJuVHlwZSh0eXBlKSwgZHN0KTsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBj
YXNlIFR5cGU6OkkzMjoKKyAgICBjYXNlIFR5cGU6OkYzMjoKKyAgICAgICAgbG9hZDMyKHRlbXBv
cmFyeUFkZHJlc3MoZHN0KSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBzdG9yZTMyKEdQUklu
Zm86OnJlZ1QwLCBzdGFja0FkZHJlc3MoaW1tKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
VHlwZTo6RjY0OgorICAgICAgICBsb2FkNjQodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgICAgIHN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHN0YWNrQWRkcmVzcyhp
bW0pKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgRnVuY3Rpb25QYXJzZXI6OnBhcnNl
U2V0TG9jYWwoaW50IGRzdCkKK3sKKyAgICB1aW50MzJfdCBpbW0gPSBtX3JlYWRlci5pbW1VMzIo
KTsKKyAgICBwYXJzZVNldExvY2FsKGltbSwgZHN0KTsKK30KKworc3RhdGljIGNvbnN0IHZvaWQq
IEpTQ19IT1NUX0NBTEwgZ2V0QXJyYXlCdWZmZXJEYXRhKE1vZHVsZSogbW9kdWxlKQoreworICAg
IC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgaGF2ZSB0byBkbyB0aGlzPworICAgIHJldHVybiBtb2R1
bGUtPmFycmF5QnVmZmVyRGF0YSgpOworfQorCit2b2lkIEZ1bmN0aW9uUGFyc2VyOjpwYXJzZUFy
cmF5QnVmZmVyT2Zmc2V0KGJvb2wgaGFzT2Zmc2V0LCBpbnQgZHN0KQoreworICAgIC8vIFRPRE86
IENoZWNrIGZvciBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KKyAgICB1aW50MzJfdCBvZmZzZXQgPSBo
YXNPZmZzZXQgPyBtX3JlYWRlci5pbW1VMzIoKSA6IDA7CisgICAgdWludDMyX3QgdTMyOworICAg
IGlmIChtX3JlYWRlci5pZkkzMkxpdChtX21vZHVsZS0+bV9jb25zdGFudEkzMnMsICZ1MzIpKQor
ICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMih1MzIgKyBvZmZzZXQpLCB0ZW1wb3JhcnlBZGRy
ZXNzKGRzdCkpOworICAgIGVsc2UgeworICAgICAgICBwYXJzZUV4cHJJMzIoZHN0KTsKKyAgICAg
ICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoZHN0KSwgR1BSSW5mbzo6cmVnVDApOworICAgICAg
ICBpZiAob2Zmc2V0KQorICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKG9mZnNldCksIEdQ
UkluZm86OnJlZ1QwKTsKKyAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5
QWRkcmVzcyhkc3QpKTsKKyAgICB9CisKKyAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwpCisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLW1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIHNldHVwQXJndW1lbnRzKFRy
dXN0ZWRJbW1QdHIobV9tb2R1bGUpKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYml0d2lzZV9j
YXN0PHZvaWQqPihnZXRBcnJheUJ1ZmZlckRhdGEpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Cisg
ICAgY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JT
bG93UGF0aENhbGwpCisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgc3RvcmVQdHIoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIHRlbXBvcmFyeUFkZHJlc3MoZHN0ICsgMSkpOworfQorICAg
IAordm9pZCBGdW5jdGlvblBhcnNlcjo6cGFyc2VMb2FkKFJldHVyblR5cGUgcmV0dXJuVHlwZSwg
TGluZWFyTWVtb3J5VHlwZSBsaW5lYXJNZW1vcnlUeXBlLCBib29sIGhhc09mZnNldCwgaW50IGRz
dCkKK3sKKyAgICBwYXJzZUFycmF5QnVmZmVyT2Zmc2V0KGhhc09mZnNldCwgZHN0KTsKKyAgICBs
b2FkUHRyKHRlbXBvcmFyeUFkZHJlc3MoZHN0ICsgMSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBs
b2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgQmFzZUlu
ZGV4IGFkZHJlc3MgPSBCYXNlSW5kZXgoR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QxLCBU
aW1lc09uZSk7CisKKyAgICBzd2l0Y2ggKHJldHVyblR5cGUpIHsKKyAgICBjYXNlIFJldHVyblR5
cGU6OkkzMjoKKyAgICAgICAgc3dpdGNoIChsaW5lYXJNZW1vcnlUeXBlKSB7CisgICAgICAgIGNh
c2UgTGluZWFyTWVtb3J5VHlwZTo6Uzg6CisgICAgICAgICAgICBsb2FkOFNpZ25lZEV4dGVuZFRv
MzIoYWRkcmVzcywgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgTGluZWFyTWVtb3J5VHlwZTo6VTg6CisgICAgICAgICAgICBsb2FkOChhZGRyZXNzLCBH
UFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMaW5lYXJN
ZW1vcnlUeXBlOjpTMTY6CisgICAgICAgICAgICBsb2FkMTZTaWduZWRFeHRlbmRUbzMyKGFkZHJl
c3MsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExp
bmVhck1lbW9yeVR5cGU6OlUxNjoKKyAgICAgICAgICAgIGxvYWQxNihhZGRyZXNzLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMaW5lYXJNZW1vcnlU
eXBlOjpJMzI6CisgICAgICAgICAgICBsb2FkMzIoYWRkcmVzcywgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1Qw
LCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJldHVy
blR5cGU6OkYzMjoKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpGNjQ6CisgICAgICAgIGxvYWQ2NChh
ZGRyZXNzLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIHN0b3JlNjQoR1BSSW5mbzo6cmVnVDAs
IHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEZ1
bmN0aW9uUGFyc2VyOjpwYXJzZVN0b3JlKFJldHVyblR5cGUgcmV0dXJuVHlwZSwgTGluZWFyTWVt
b3J5VHlwZSBsaW5lYXJNZW1vcnlUeXBlLCBib29sIGhhc09mZnNldCwgaW50IGRzdCkKK3sKKyAg
ICBwYXJzZUFycmF5QnVmZmVyT2Zmc2V0KGhhc09mZnNldCwgZHN0KTsKKyAgICBwYXJzZUV4cHIo
cmV0dXJuVHlwZSwgZHN0ICsgMik7CisKKyAgICBsb2FkUHRyKHRlbXBvcmFyeUFkZHJlc3MoZHN0
ICsgMSksIEdQUkluZm86OnJlZ1QxKTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhkc3Qp
LCBHUFJJbmZvOjpyZWdUMik7CisgICAgQmFzZUluZGV4IGFkZHJlc3MgPSBCYXNlSW5kZXgoR1BS
SW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyLCBUaW1lc09uZSk7CisKKyAgICBzd2l0Y2ggKHJl
dHVyblR5cGUpIHsKKyAgICBjYXNlIFJldHVyblR5cGU6OkkzMjoKKyAgICAgICAgbG9hZDMyKHRl
bXBvcmFyeUFkZHJlc3MoZHN0ICsgMiksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgc3dpdGNo
IChsaW5lYXJNZW1vcnlUeXBlKSB7CisgICAgICAgIGNhc2UgTGluZWFyTWVtb3J5VHlwZTo6STg6
CisgICAgICAgICAgICBzdG9yZTgoR1BSSW5mbzo6cmVnVDAsIGFkZHJlc3MpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgTGluZWFyTWVtb3J5VHlwZTo6STE2OgorICAgICAgICAg
ICAgc3RvcmUxNihHUFJJbmZvOjpyZWdUMCwgYWRkcmVzcyk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBMaW5lYXJNZW1vcnlUeXBlOjpJMzI6CisgICAgICAgICAgICBzdG9yZTMy
KEdQUkluZm86OnJlZ1QwLCBhZGRyZXNzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAg
ICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpGMzI6CisgICAgICAgIGxvYWQzMih0
ZW1wb3JhcnlBZGRyZXNzKGRzdCArIDIpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIHN0b3Jl
MzIoR1BSSW5mbzo6cmVnVDAsIGFkZHJlc3MpOworICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJl
Z1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJl
dHVyblR5cGU6OkY2NDoKKyAgICAgICAgbG9hZDY0KHRlbXBvcmFyeUFkZHJlc3MoZHN0ICsgMiks
IEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgYWRkcmVz
cyk7CisgICAgICAgIHN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MoZHN0
KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEZ1bmN0aW9uUGFyc2VyOjpwYXJzZVJl
dHVyblN0bXQoKQoreworICAgIHN3aXRjaCAobV9jdXJyZW50UmV0dXJuVHlwZSkgeworICAgIGNh
c2UgUmV0dXJuVHlwZTo6STMyOgorICAgICAgICBwYXJzZUV4cHJJMzIoMCk7CisgICAgICAgIGxv
YWQzMih0ZW1wb3JhcnlBZGRyZXNzKDApLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAg
ICAgIG9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmV0dXJuVHlwZTo6RjMyOgorICAg
ICAgICBwYXJzZUV4cHIoUmV0dXJuVHlwZTo6RjMyLCAwKTsKKyAgICAgICAgbG9hZERvdWJsZSh0
ZW1wb3JhcnlBZGRyZXNzKDApLCBGUFJJbmZvOjpmcFJlZ1QwKTsgLy8gRklYTUU6IFRoaXMgbG9h
ZHMgNjQgYml0cyEKKyAgICAgICAgY29udmVydEZsb2F0VG9Eb3VibGUoRlBSSW5mbzo6ZnBSZWdU
MCwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgIGJveERvdWJsZShGUFJJbmZvOjpmcFJlZ1Qw
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmV0
dXJuVHlwZTo6RjY0OgorICAgICAgICBwYXJzZUV4cHJGNjQoMCk7CisgICAgICAgIGxvYWREb3Vi
bGUodGVtcG9yYXJ5QWRkcmVzcygwKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgIGJveERv
dWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUmV0dXJuVHlwZTo6Vm9pZDoKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgZGVhbGxvY2F0ZVNwYWNlT25TdGFjaygpOworICAgIGVtaXRGdW5jdGlvbkVwaWxv
Z3VlKCk7CisgICAgcmV0KCk7Cit9CisKK3ZvaWQgRnVuY3Rpb25QYXJzZXI6OnBhcnNlU3RtdExp
c3QoKQoreworICAgIHVpbnQzMl90IG51bWJlck9mU3RtdHMgPSBtX3JlYWRlci5pbW1VMzIoKTsK
KyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZTdG10czsgKytpKQorICAgICAg
ICBwYXJzZVN0bXQoKTsKK30KKwordm9pZCBGdW5jdGlvblBhcnNlcjo6cGFyc2VCbG9ja1N0bXQo
KQoreworICAgIHBhcnNlU3RtdExpc3QoKTsKK30KKwordm9pZCBGdW5jdGlvblBhcnNlcjo6cGFy
c2VJZlN0bXQoKQoreworICAgIHBhcnNlRXhwckkzMigwKTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5
QWRkcmVzcygwKSwgR1BSSW5mbzo6cmVnVDApOworICAgIEp1bXAgZW5kID0gYnJhbmNoVGVzdDMy
KFplcm8sIEdQUkluZm86OnJlZ1QwKTsKKyAgICBwYXJzZVN0bXQoKTsKKyAgICBlbmQubGluayh0
aGlzKTsKK30KKwordm9pZCBGdW5jdGlvblBhcnNlcjo6cGFyc2VJZkVsc2VTdG10KCkKK3sKKyAg
ICBwYXJzZUV4cHJJMzIoMCk7CisgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoMCksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICBKdW1wIGVscyA9IGJyYW5jaFRlc3QzMihaZXJvLCBHUFJJbmZvOjpy
ZWdUMCk7CisgICAgcGFyc2VTdG10KCk7CisgICAgSnVtcCBlbmQgPSBqdW1wKCk7CisgICAgZWxz
LmxpbmsodGhpcyk7CisgICAgcGFyc2VTdG10KCk7CisgICAgZW5kLmxpbmsodGhpcyk7Cit9CisK
K3ZvaWQgRnVuY3Rpb25QYXJzZXI6OnBhcnNlV2hpbGVTdG10KCkKK3sKKyAgICBKdW1wU2NvcGUg
Y29udGludWVKdW1wU2NvcGUodGhpcywgbGFiZWwoKSk7CisgICAgcHVzaENvbnRpbnVlSnVtcFNj
b3BlKCZjb250aW51ZUp1bXBTY29wZSk7CisKKyAgICBKdW1wTGlzdCBicmVha0p1bXBMaXN0Owor
ICAgIHB1c2hCcmVha0p1bXBMaXN0KCZicmVha0p1bXBMaXN0KTsKKworICAgIHBhcnNlRXhwckkz
MigwKTsKKyAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcygwKSwgR1BSSW5mbzo6cmVnVDApOwor
ICAgIEp1bXAgZW5kID0gYnJhbmNoVGVzdDMyKFplcm8sIEdQUkluZm86OnJlZ1QwKTsKKyAgICBw
YXJzZVN0bXQoKTsKKyAgICBjb250aW51ZUp1bXBTY29wZS5qdW1wKCk7CisgICAgZW5kLmxpbmso
dGhpcyk7CisgICAgYnJlYWtKdW1wTGlzdC5saW5rKHRoaXMpOworCisgICAgcG9wQnJlYWtKdW1w
TGlzdCgpOworCisgICAgcG9wQ29udGludWVKdW1wU2NvcGUoKTsKK30KKwordm9pZCBGdW5jdGlv
blBhcnNlcjo6cGFyc2VEb1N0bXQoKQoreworICAgIEp1bXBTY29wZSBjb250aW51ZUp1bXBTY29w
ZSh0aGlzKTsKKyAgICBwdXNoQ29udGludWVKdW1wU2NvcGUoJmNvbnRpbnVlSnVtcFNjb3BlKTsK
KworICAgIEp1bXBMaXN0IGJyZWFrSnVtcExpc3Q7CisgICAgcHVzaEJyZWFrSnVtcExpc3QoJmJy
ZWFrSnVtcExpc3QpOworCisgICAgTGFiZWwgc3RhcnQgPSBsYWJlbCgpOworICAgIHBhcnNlU3Rt
dCgpOworICAgIGNvbnRpbnVlSnVtcFNjb3BlLmxpbmsoKTsKKyAgICBwYXJzZUV4cHJJMzIoMCk7
CisgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoMCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBK
dW1wIGp1bXBUb1N0YXJ0ID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIEdQUkluZm86OnJlZ1QwKTsK
KyAgICBqdW1wVG9TdGFydC5saW5rVG8oc3RhcnQsIHRoaXMpOworICAgIGJyZWFrSnVtcExpc3Qu
bGluayh0aGlzKTsKKworICAgIHBvcEJyZWFrSnVtcExpc3QoKTsKKworICAgIHBvcENvbnRpbnVl
SnVtcFNjb3BlKCk7Cit9CisKK3ZvaWQgRnVuY3Rpb25QYXJzZXI6OnBhcnNlTGFiZWxTdG10KCkK
K3sKKyAgICBMYWJlbCBjb250aW51ZUxhYmVsID0gbGFiZWwoKTsKKyAgICBKdW1wTGlzdCBicmVh
a0p1bXBMaXN0OworICAgIHB1c2hDb250aW51ZUxhYmVsTGFiZWwoJmNvbnRpbnVlTGFiZWwpOwor
ICAgIHB1c2hCcmVha0xhYmVsSnVtcExpc3QoJmJyZWFrSnVtcExpc3QpOworICAgIHBhcnNlU3Rt
dCgpOworICAgIGJyZWFrSnVtcExpc3QubGluayh0aGlzKTsKKyAgICBwb3BCcmVha0xhYmVsSnVt
cExpc3QoKTsKKyAgICBwb3BDb250aW51ZUxhYmVsTGFiZWwoKTsKK30KKwordm9pZCBGdW5jdGlv
blBhcnNlcjo6cGFyc2VCcmVha1N0bXQoKQoreworICAgIHRvcEJyZWFrSnVtcExpc3QoKS0+YXBw
ZW5kKGp1bXAoKSk7Cit9CisKK3ZvaWQgRnVuY3Rpb25QYXJzZXI6OnBhcnNlQnJlYWtMYWJlbFN0
bXQoKQoreworICAgIHVpbnQzMl90IGluZGV4ID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgYnJl
YWtMYWJlbEp1bXBMaXN0KGluZGV4KS0+YXBwZW5kKGp1bXAoKSk7Cit9CisKK3ZvaWQgRnVuY3Rp
b25QYXJzZXI6OnBhcnNlQ29udGludWVTdG10KCkKK3sKKyAgICB0b3BDb250aW51ZUp1bXBTY29w
ZSgpLT5qdW1wKCk7Cit9CisKK3ZvaWQgRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ29udGludWVMYWJl
bFN0bXQoKQoreworICAgIHVpbnQzMl90IGluZGV4ID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAg
anVtcCgqY29udGludWVMYWJlbExhYmVsKGluZGV4KSk7Cit9CisKK3ZvaWQgRnVuY3Rpb25QYXJz
ZXI6OnBhcnNlU3dpdGNoU3RtdCgpCit7CisgICAgSnVtcExpc3QgYnJlYWtKdW1wTGlzdDsKKyAg
ICBwdXNoQnJlYWtKdW1wTGlzdCgmYnJlYWtKdW1wTGlzdCk7CisKKyAgICB1aW50MzJfdCBudW1i
ZXJPZkNhc2VzID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgcGFyc2VFeHBySTMyKDApOworICAg
IGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKDApLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICBKdW1w
IHRhYmxlID0ganVtcCgpOworCisgICAgVmVjdG9yPExhYmVsPiBsYWJlbHM7CisgICAgVmVjdG9y
PGludDMyX3Q+IGltbXM7CisgICAgTGFiZWwgZGVmYXVsdExhYmVsOworICAgIGJvb2wgaGFzRGVm
YXVsdCA9IGZhbHNlOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mQ2Fz
ZXM7ICsraSkgeworICAgICAgICBzd2l0Y2ggKG1fcmVhZGVyLnN3aXRjaENhc2UoKSkgeworICAg
ICAgICBjYXNlIFN3aXRjaENhc2U6OkNhc2UwOgorICAgICAgICAgICAgbGFiZWxzLmFwcGVuZChs
YWJlbCgpKTsKKyAgICAgICAgICAgIGltbXMuYXBwZW5kKG1fcmVhZGVyLmltbVMzMigpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN3aXRjaENhc2U6OkNhc2UxOgorICAgICAg
ICAgICAgbGFiZWxzLmFwcGVuZChsYWJlbCgpKTsKKyAgICAgICAgICAgIGltbXMuYXBwZW5kKG1f
cmVhZGVyLmltbVMzMigpKTsKKyAgICAgICAgICAgIHBhcnNlU3RtdCgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgU3dpdGNoQ2FzZTo6Q2FzZU46CisgICAgICAgICAgICBsYWJl
bHMuYXBwZW5kKGxhYmVsKCkpOworICAgICAgICAgICAgaW1tcy5hcHBlbmQobV9yZWFkZXIuaW1t
UzMyKCkpOworICAgICAgICAgICAgcGFyc2VTdG10TGlzdCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgU3dpdGNoQ2FzZTo6RGVmYXVsdDA6CisgICAgICAgICAgICBkZWZhdWx0
TGFiZWwgPSBsYWJlbCgpOworICAgICAgICAgICAgaGFzRGVmYXVsdCA9IHRydWU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTd2l0Y2hDYXNlOjpEZWZhdWx0MToKKyAgICAgICAg
ICAgIGRlZmF1bHRMYWJlbCA9IGxhYmVsKCk7CisgICAgICAgICAgICBoYXNEZWZhdWx0ID0gdHJ1
ZTsKKyAgICAgICAgICAgIHBhcnNlU3RtdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgU3dpdGNoQ2FzZTo6RGVmYXVsdE46CisgICAgICAgICAgICBkZWZhdWx0TGFiZWwgPSBs
YWJlbCgpOworICAgICAgICAgICAgaGFzRGVmYXVsdCA9IHRydWU7CisgICAgICAgICAgICBwYXJz
ZVN0bXRMaXN0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBKdW1wIGVuZCA9IGp1bXAoKTsKKyAgICB0YWJsZS5saW5rKHRoaXMpOworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsYWJlbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgSnVtcCBq
bXAgPSBicmFuY2gzMihFcXVhbCwgR1BSSW5mbzo6cmVnVDAsIFRydXN0ZWRJbW0zMihpbW1zW2ld
KSk7CisgICAgICAgIGptcC5saW5rVG8obGFiZWxzW2ldLCB0aGlzKTsKKyAgICB9CisgICAgaWYg
KGhhc0RlZmF1bHQpCisgICAgICAgIGp1bXAoZGVmYXVsdExhYmVsKTsKKworICAgIGVuZC5saW5r
KHRoaXMpOworCisgICAgYnJlYWtKdW1wTGlzdC5saW5rKHRoaXMpOworICAgIHBvcEJyZWFrSnVt
cExpc3QoKTsKK30KKwordm9pZCBGdW5jdGlvblBhcnNlcjo6cGFyc2VFeHByKFJldHVyblR5cGUg
cmV0dXJuVHlwZSwgaW50IGRzdCkKK3sKKyAgICBzd2l0Y2ggKHJldHVyblR5cGUpIHsKKyAgICBj
YXNlIFJldHVyblR5cGU6OkkzMjoKKyAgICAgICAgcGFyc2VFeHBySTMyKGRzdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUmV0dXJuVHlwZTo6RjY0OgorICAgICAgICBwYXJzZUV4cHJGNjQo
ZHN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpWb2lkOgorICAgICAg
ICBwYXJzZUV4cHJWb2lkKGRzdCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEZ1bmN0
aW9uUGFyc2VyOjpwYXJzZUV4cHJJMzIoaW50IGRzdCkKK3sKKyAgICBJMzIgaTMyOworICAgIEkz
MldpdGhJbW0gaTMyV2l0aEltbTsKKyAgICB1aW50OF90IGltbTsKKworICAgIGlmIChtX3JlYWRl
ci5jb2RlKCZpMzIsICZpMzJXaXRoSW1tLCAmaW1tKSkgeworICAgICAgICBzd2l0Y2ggKGkzMikg
eworICAgICAgICBjYXNlIEkzMjo6TGl0UG9vbDoKKyAgICAgICAgICAgIHBhcnNlTGl0UG9vbChS
ZXR1cm5UeXBlOjpJMzIsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
MzI6OkxpdEltbToKKyAgICAgICAgICAgIHBhcnNlTGl0SW1tKFJldHVyblR5cGU6OkkzMiwgZHN0
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6R2V0TG9jOgorICAgICAg
ICAgICAgcGFyc2VHZXRMb2NhbChkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSTMyOjpHZXRHbG86CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICBjYXNlIEkzMjo6U2V0TG9jOgorICAgICAgICAgICAgcGFyc2VTZXRMb2NhbChk
c3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpTZXRHbG86CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNlIEkzMjo6
U0xvYWQ4OgorICAgICAgICAgICAgcGFyc2VMb2FkKFJldHVyblR5cGU6OkkzMiwgTGluZWFyTWVt
b3J5VHlwZTo6UzgsIGZhbHNlLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSTMyOjpTTG9hZE9mZjg6CisgICAgICAgICAgICBwYXJzZUxvYWQoUmV0dXJuVHlwZTo6STMy
LCBMaW5lYXJNZW1vcnlUeXBlOjpTOCwgdHJ1ZSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEkzMjo6VUxvYWQ4OgorICAgICAgICAgICAgcGFyc2VMb2FkKFJldHVyblR5
cGU6OkkzMiwgTGluZWFyTWVtb3J5VHlwZTo6VTgsIGZhbHNlLCBkc3QpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpVTG9hZE9mZjg6CisgICAgICAgICAgICBwYXJzZUxv
YWQoUmV0dXJuVHlwZTo6STMyLCBMaW5lYXJNZW1vcnlUeXBlOjpVOCwgdHJ1ZSwgZHN0KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6U0xvYWQxNjoKKyAgICAgICAgICAg
IHBhcnNlTG9hZChSZXR1cm5UeXBlOjpJMzIsIExpbmVhck1lbW9yeVR5cGU6OlMxNiwgZmFsc2Us
IGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlNMb2FkT2ZmMTY6
CisgICAgICAgICAgICBwYXJzZUxvYWQoUmV0dXJuVHlwZTo6STMyLCBMaW5lYXJNZW1vcnlUeXBl
OjpTMTYsIHRydWUsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6
OlVMb2FkMTY6CisgICAgICAgICAgICBwYXJzZUxvYWQoUmV0dXJuVHlwZTo6STMyLCBMaW5lYXJN
ZW1vcnlUeXBlOjpVMTYsIGZhbHNlLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgSTMyOjpVTG9hZE9mZjE2OgorICAgICAgICAgICAgcGFyc2VMb2FkKFJldHVyblR5cGU6
OkkzMiwgTGluZWFyTWVtb3J5VHlwZTo6VTE2LCB0cnVlLCBkc3QpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgSTMyOjpMb2FkMzI6CisgICAgICAgICAgICBwYXJzZUxvYWQoUmV0
dXJuVHlwZTo6STMyLCBMaW5lYXJNZW1vcnlUeXBlOjpJMzIsIGZhbHNlLCBkc3QpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpMb2FkT2ZmMzI6CisgICAgICAgICAgICBw
YXJzZUxvYWQoUmV0dXJuVHlwZTo6STMyLCBMaW5lYXJNZW1vcnlUeXBlOjpJMzIsIHRydWUsIGRz
dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlN0b3JlODoKKyAgICAg
ICAgICAgIHBhcnNlU3RvcmUoUmV0dXJuVHlwZTo6STMyLCBMaW5lYXJNZW1vcnlUeXBlOjpJOCwg
ZmFsc2UsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlN0b3Jl
T2ZmODoKKyAgICAgICAgICAgIHBhcnNlU3RvcmUoUmV0dXJuVHlwZTo6STMyLCBMaW5lYXJNZW1v
cnlUeXBlOjpJOCwgdHJ1ZSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEkzMjo6U3RvcmUxNjoKKyAgICAgICAgICAgIHBhcnNlU3RvcmUoUmV0dXJuVHlwZTo6STMyLCBM
aW5lYXJNZW1vcnlUeXBlOjpJMTYsIGZhbHNlLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSTMyOjpTdG9yZU9mZjE2OgorICAgICAgICAgICAgcGFyc2VTdG9yZShSZXR1
cm5UeXBlOjpJMzIsIExpbmVhck1lbW9yeVR5cGU6OkkxNiwgdHJ1ZSwgZHN0KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6U3RvcmUzMjoKKyAgICAgICAgICAgIHBhcnNl
U3RvcmUoUmV0dXJuVHlwZTo6STMyLCBMaW5lYXJNZW1vcnlUeXBlOjpJMzIsIGZhbHNlLCBkc3Qp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpTdG9yZU9mZjMyOgorICAg
ICAgICAgICAgcGFyc2VTdG9yZShSZXR1cm5UeXBlOjpJMzIsIExpbmVhck1lbW9yeVR5cGU6Okkz
MiwgdHJ1ZSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6Q2Fs
bEludDoKKyAgICAgICAgICAgIHBhcnNlQ2FsbEludGVybmFsKFJldHVyblR5cGU6OkkzMiwgZHN0
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6Q2FsbEluZDoKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgSTMyOjpD
YWxsSW1wOgorICAgICAgICAgICAgcGFyc2VDYWxsSW1wb3J0KFJldHVyblR5cGU6OkkzMiwgZHN0
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6Q29uZDoKKyAgICAgICAg
ICAgIHBhcnNlQ29uZChSZXR1cm5UeXBlOjpJMzIsIGRzdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBJMzI6OkNvbW1hOgorICAgICAgICAgICAgcGFyc2VDb21tYShSZXR1cm5U
eXBlOjpJMzIsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkZy
b21GMzI6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICBjYXNlIEkzMjo6RnJvbUY2NDoKKyAgICAgICAgICAgIHBhcnNlRnJvbUY2NEkzMihkc3QpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpOZWc6CisgICAgICAgIGNhc2Ug
STMyOjpCaXROb3Q6CisgICAgICAgIGNhc2UgSTMyOjpDbHo6CisgICAgICAgIGNhc2UgSTMyOjpM
b2dpY05vdDoKKyAgICAgICAgY2FzZSBJMzI6OkFiczoKKyAgICAgICAgICAgIHBhcnNlVW5hcnlP
cEkzMihpMzIsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OkFk
ZDoKKyAgICAgICAgY2FzZSBJMzI6OlN1YjoKKyAgICAgICAgY2FzZSBJMzI6Ok11bDoKKyAgICAg
ICAgY2FzZSBJMzI6OlNEaXY6CisgICAgICAgIGNhc2UgSTMyOjpTTW9kOgorICAgICAgICBjYXNl
IEkzMjo6Qml0T3I6CisgICAgICAgIGNhc2UgSTMyOjpCaXRBbmQ6CisgICAgICAgIGNhc2UgSTMy
OjpCaXRYb3I6CisgICAgICAgIGNhc2UgSTMyOjpMc2g6CisgICAgICAgIGNhc2UgSTMyOjpBcml0
aFJzaDoKKyAgICAgICAgY2FzZSBJMzI6OkxvZ2ljUnNoOgorICAgICAgICAgICAgcGFyc2VCaW5h
cnlPcEkzMihpMzIsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6
OlVEaXY6CisgICAgICAgIGNhc2UgSTMyOjpVTW9kOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBJMzI6OkVxSTMyOgorICAgICAgICAgICAg
cGFyc2VSZWxhdGlvbmFsT3BJMzIoRXF1YWwsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJMzI6OkVxRjMyOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgY2FzZSBJMzI6OkVxRjY0OgorICAgICAgICAgICAgcGFyc2VSZWxh
dGlvbmFsT3BGNjQoRG91YmxlRXF1YWwsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBJMzI6Ok5FcUkzMjoKKyAgICAgICAgICAgIHBhcnNlUmVsYXRpb25hbE9wSTMyKE5v
dEVxdWFsLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpORXFG
MzI6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBj
YXNlIEkzMjo6TkVxRjY0OgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3BGNjQoRG91Ymxl
Tm90RXF1YWwsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlNM
ZVRoSTMyOgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3BJMzIoTGVzc1RoYW4sIGRzdCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlVMZVRoSTMyOgorICAgICAg
ICAgICAgcGFyc2VSZWxhdGlvbmFsT3BJMzIoQmVsb3csIGRzdCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJMzI6OkxlVGhGMzI6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNlIEkzMjo6TGVUaEY2NDoKKyAgICAgICAgICAg
IHBhcnNlUmVsYXRpb25hbE9wRjY0KERvdWJsZUxlc3NUaGFuLCBkc3QpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpTTGVFcUkzMjoKKyAgICAgICAgICAgIHBhcnNlUmVs
YXRpb25hbE9wSTMyKExlc3NUaGFuT3JFcXVhbCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEkzMjo6VUxlRXFJMzI6CisgICAgICAgICAgICBwYXJzZVJlbGF0aW9uYWxP
cEkzMihCZWxvd09yRXF1YWwsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJMzI6OkxlRXFGMzI6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICBjYXNlIEkzMjo6TGVFcUY2NDoKKyAgICAgICAgICAgIHBhcnNlUmVsYXRpb25h
bE9wRjY0KERvdWJsZUxlc3NUaGFuT3JFcXVhbCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEkzMjo6U0dyVGhJMzI6CisgICAgICAgICAgICBwYXJzZVJlbGF0aW9uYWxP
cEkzMihHcmVhdGVyVGhhbiwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEkzMjo6VUdyVGhJMzI6CisgICAgICAgICAgICBwYXJzZVJlbGF0aW9uYWxPcEkzMihBYm92ZSwg
ZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6R3JUaEYzMjoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgSTMy
OjpHclRoRjY0OgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3BGNjQoRG91YmxlR3JlYXRl
clRoYW4sIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJMzI6OlNHckVx
STMyOgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3BJMzIoR3JlYXRlclRoYW5PckVxdWFs
LCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpVR3JFcUkzMjoK
KyAgICAgICAgICAgIHBhcnNlUmVsYXRpb25hbE9wSTMyKEFib3ZlT3JFcXVhbCwgZHN0KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEkzMjo6R3JFcUYzMjoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgSTMyOjpHckVxRjY0
OgorICAgICAgICAgICAgcGFyc2VSZWxhdGlvbmFsT3BGNjQoRG91YmxlR3JlYXRlclRoYW5PckVx
dWFsLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpTTWluOgor
ICAgICAgICAgICAgcGFyc2VNaW5NYXhJMzIoTGVzc1RoYW5PckVxdWFsLCBkc3QpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpVTWluOgorICAgICAgICAgICAgcGFyc2VN
aW5NYXhJMzIoQmVsb3dPckVxdWFsLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgSTMyOjpTTWF4OgorICAgICAgICAgICAgcGFyc2VNaW5NYXhJMzIoR3JlYXRlclRoYW5P
ckVxdWFsLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSTMyOjpVTWF4
OgorICAgICAgICAgICAgcGFyc2VNaW5NYXhJMzIoQWJvdmVPckVxdWFsLCBkc3QpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3dpdGNo
IChpMzJXaXRoSW1tKSB7CisgICAgICAgIGNhc2UgSTMyV2l0aEltbTo6TGl0SW1tOgorICAgICAg
ICAgICAgcGFyc2VMaXRJbW0oUmV0dXJuVHlwZTo6STMyLCBpbW0sIGRzdCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJMzJXaXRoSW1tOjpMaXRQb29sOgorICAgICAgICAgICAg
cGFyc2VMaXRQb29sKFJldHVyblR5cGU6OkkzMiwgaW1tLCBkc3QpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgSTMyV2l0aEltbTo6R2V0TG9jOgorICAgICAgICAgICAgcGFyc2VH
ZXRMb2NhbChpbW0sIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgRnVuY3Rpb25QYXJzZXI6OnBhcnNlRXhwckY2NChpbnQgZHN0KQorewor
ICAgIEY2NCBmNjQ7CisgICAgRjY0V2l0aEltbSBmNjRXaXRoSW1tOworICAgIHVpbnQ4X3QgaW1t
OworCisgICAgaWYgKG1fcmVhZGVyLmNvZGUoJmY2NCwgJmY2NFdpdGhJbW0sICZpbW0pKSB7Cisg
ICAgICAgIHN3aXRjaCAoZjY0KSB7CisgICAgICAgIGNhc2UgRjY0OjpMaXRQb29sOgorICAgICAg
ICAgICAgcGFyc2VMaXRQb29sKFJldHVyblR5cGU6OkY2NCwgZHN0KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEY2NDo6TGl0SW1tOgorICAgICAgICAgICAgcGFyc2VMaXRJbW0o
UmV0dXJuVHlwZTo6RjY0LCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RjY0OjpHZXRMb2M6CisgICAgICAgICAgICBwYXJzZUdldExvY2FsKGRzdCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBGNjQ6OkdldEdsbzoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgRjY0OjpTZXRMb2M6CisgICAgICAg
ICAgICBwYXJzZVNldExvY2FsKGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBGNjQ6OlNldEdsbzoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIGNhc2UgRjY0OjpMb2FkOgorICAgICAgICAgICAgcGFyc2VMb2FkKFJldHVyblR5
cGU6OkY2NCwgTGluZWFyTWVtb3J5VHlwZTo6RjY0LCBmYWxzZSwgZHN0KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEY2NDo6TG9hZE9mZjoKKyAgICAgICAgICAgIHBhcnNlTG9h
ZChSZXR1cm5UeXBlOjpGNjQsIExpbmVhck1lbW9yeVR5cGU6OkY2NCwgdHJ1ZSwgZHN0KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2NDo6U3RvcmU6CisgICAgICAgICAgICBw
YXJzZVN0b3JlKFJldHVyblR5cGU6OkY2NCwgTGluZWFyTWVtb3J5VHlwZTo6RjY0LCBmYWxzZSwg
ZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2NDo6U3RvcmVPZmY6Cisg
ICAgICAgICAgICBwYXJzZVN0b3JlKFJldHVyblR5cGU6OkY2NCwgTGluZWFyTWVtb3J5VHlwZTo6
RjY0LCB0cnVlLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRjY0OjpD
YWxsSW50OgorICAgICAgICAgICAgcGFyc2VDYWxsSW50ZXJuYWwoUmV0dXJuVHlwZTo6RjY0LCBk
c3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRjY0OjpDYWxsSW5kOgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgY2FzZSBGNjQ6
OkNhbGxJbXA6CisgICAgICAgICAgICBwYXJzZUNhbGxJbXBvcnQoUmV0dXJuVHlwZTo6RjY0LCBk
c3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRjY0OjpDb25kOgorICAgICAg
ICAgICAgcGFyc2VDb25kKFJldHVyblR5cGU6OkY2NCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEY2NDo6Q29tbWE6CisgICAgICAgICAgICBwYXJzZUNvbW1hKFJldHVy
blR5cGU6OkY2NCwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEY2NDo6
RnJvbVMzMjoKKyAgICAgICAgICAgIHBhcnNlRnJvbVMzMkY2NChkc3QpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRjY0OjpGcm9tVTMyOgorICAgICAgICBjYXNlIEY2NDo6RnJv
bUYzMjoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IGNhc2UgRjY0OjpOZWc6CisgICAgICAgIGNhc2UgRjY0OjpBYnM6CisgICAgICAgIGNhc2UgRjY0
OjpDZWlsOgorICAgICAgICBjYXNlIEY2NDo6Rmxvb3I6CisgICAgICAgIGNhc2UgRjY0OjpTcXJ0
OgorICAgICAgICBjYXNlIEY2NDo6Q29zOgorICAgICAgICBjYXNlIEY2NDo6U2luOgorICAgICAg
ICBjYXNlIEY2NDo6VGFuOgorICAgICAgICBjYXNlIEY2NDo6QUNvczoKKyAgICAgICAgY2FzZSBG
NjQ6OkFTaW46CisgICAgICAgIGNhc2UgRjY0OjpBVGFuOgorICAgICAgICBjYXNlIEY2NDo6RXhw
OgorICAgICAgICBjYXNlIEY2NDo6TG46CisgICAgICAgICAgICBwYXJzZVVuYXJ5T3BGNjQoZjY0
LCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRjY0OjpBZGQ6CisgICAg
ICAgIGNhc2UgRjY0OjpTdWI6CisgICAgICAgIGNhc2UgRjY0OjpNdWw6CisgICAgICAgIGNhc2Ug
RjY0OjpEaXY6CisgICAgICAgIGNhc2UgRjY0OjpBVGFuMjoKKyAgICAgICAgY2FzZSBGNjQ6OlBv
dzoKKyAgICAgICAgICAgIHBhcnNlQmluYXJ5T3BGNjQoZjY0LCBkc3QpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRjY0OjpNb2Q6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBjYXNlIEY2NDo6TWluOgorICAgICAgICAgICAgcGFy
c2VNaW5NYXhGNjQoRG91YmxlTGVzc1RoYW5PckVxdWFsLCBkc3QpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRjY0OjpNYXg6CisgICAgICAgICAgICBwYXJzZU1pbk1heEY2NChE
b3VibGVHcmVhdGVyVGhhbk9yRXF1YWwsIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBzd2l0Y2ggKGY2NFdpdGhJbW0pIHsKKyAg
ICAgICAgY2FzZSBGNjRXaXRoSW1tOjpMaXRQb29sOgorICAgICAgICAgICAgcGFyc2VMaXRQb29s
KFJldHVyblR5cGU6OkY2NCwgaW1tLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRjY0V2l0aEltbTo6R2V0TG9jOgorICAgICAgICAgICAgcGFyc2VHZXRMb2NhbChpbW0s
IGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgRnVuY3Rpb25QYXJzZXI6OnBhcnNlRXhwclZvaWQoaW50IGRzdCkKK3sKKyAgICBzd2l0Y2gg
KG1fcmVhZGVyLnZvaWRFeHByKCkpIHsKKyAgICBjYXNlIFZvaWQ6OkNhbGxJbnQ6CisgICAgICAg
IHBhcnNlQ2FsbEludGVybmFsKFJldHVyblR5cGU6OlZvaWQsIGRzdCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgVm9pZDo6Q2FsbEluZDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICBjYXNlIFZvaWQ6OkNhbGxJbXA6CisgICAgICAgIHBhcnNlQ2FsbEltcG9y
dChSZXR1cm5UeXBlOjpWb2lkLCBkc3QpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBG
dW5jdGlvblBhcnNlcjo6cGFyc2VMaXRQb29sKFJldHVyblR5cGUgcmV0dXJuVHlwZSwgdWludDMy
X3QgaW5kZXgsIGludCBkc3QpCit7CisgICAgc3dpdGNoIChyZXR1cm5UeXBlKSB7CisgICAgY2Fz
ZSBSZXR1cm5UeXBlOjpJMzI6CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKG1fbW9kdWxl
LT5tX2NvbnN0YW50STMyc1tpbmRleF0pLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFJldHVyblR5cGU6OkY2NDoKKyAgICAgICAgc3RvcmU2NChUcnVz
dGVkSW1tNjQocmVpbnRlcnByZXREb3VibGVUb0ludDY0KG1fbW9kdWxlLT5tX2NvbnN0YW50RjY0
c1tpbmRleF0pKSwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lk
IEZ1bmN0aW9uUGFyc2VyOjpwYXJzZUxpdFBvb2woUmV0dXJuVHlwZSByZXR1cm5UeXBlLCBpbnQg
ZHN0KQoreworICAgIHVpbnQzMl90IGluZGV4ID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgcGFy
c2VMaXRQb29sKHJldHVyblR5cGUsIGluZGV4LCBkc3QpOworfQorCit2b2lkIEZ1bmN0aW9uUGFy
c2VyOjpwYXJzZUxpdEltbShSZXR1cm5UeXBlIHJldHVyblR5cGUsIHVpbnQzMl90IGltbSwgaW50
IGRzdCkKK3sKKyAgICBBU1NFUlQocmV0dXJuVHlwZSA9PSBSZXR1cm5UeXBlOjpJMzIpOworICAg
IHN0b3JlMzIoVHJ1c3RlZEltbTMyKGltbSksIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7Cit9CisK
K3ZvaWQgRnVuY3Rpb25QYXJzZXI6OnBhcnNlTGl0SW1tKFJldHVyblR5cGUgcmV0dXJuVHlwZSwg
aW50IGRzdCkKK3sKKyAgICBzd2l0Y2ggKHJldHVyblR5cGUpIHsKKyAgICBjYXNlIFJldHVyblR5
cGU6OkkzMjoKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobV9yZWFkZXIuaW1tVTMyKCkp
LCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJldHVy
blR5cGU6OkY2NDoKKyAgICAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQocmVpbnRlcnByZXREb3Vi
bGVUb0ludDY0KG1fcmVhZGVyLmZpeGVkV2lkdGg8ZG91YmxlPigpKSksIHRlbXBvcmFyeUFkZHJl
c3MoZHN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZ2V0SW50ZXJuYWxGdW5jdGlvbihFeGVjU3RhdGUqLCBNb2R1bGUqIG1vZHVsZSwgdWlu
dDMyX3QgZnVuY3Rpb25JbmRleCkKK3sKKyAgICAvLyBUT0RPOiBVc2UgdGhlc2UgdHdvIGxpbmVz
PworICAgIC8vIFZNKiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgLy8gTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG1vZHVs
ZS0+ZnVuY3Rpb24oZnVuY3Rpb25JbmRleCkpOworfQorCit2b2lkIEZ1bmN0aW9uUGFyc2VyOjpw
YXJzZUNhbGxJbnRlcm5hbChSZXR1cm5UeXBlIHJldHVyblR5cGUsIGludCBkc3QpCit7CisgICAg
dWludDMyX3QgZnVuY3Rpb25JbmRleCA9IG1fcmVhZGVyLmltbVUzMigpOworICAgIGNvbnN0IFNp
Z25hdHVyZSYgc2lnbmF0dXJlID0gbV9tb2R1bGUtPm1fc2lnbmF0dXJlc1ttX21vZHVsZS0+bV9m
dW5jU2lnbmF0dXJlc1tmdW5jdGlvbkluZGV4XV07CisgICAgY29uc3QgVmVjdG9yPFR5cGU+JiBh
cmd1bWVudHMgPSBzaWduYXR1cmUuYXJndW1lbnRzOworICAgIHNpemVfdCBhcmd1bWVudENvdW50
ID0gYXJndW1lbnRzLnNpemUoKTsKKyAgICAvLyBGSVhNRTogcmV0dXJuVHlwZSBpcyByZWR1bmRh
bnQgd2l0aCBzaWduYXR1cmUucmV0dXJuVHlwZQorCisgICAgcGFyc2VDYWxsQXJndW1lbnRzKGFy
Z3VtZW50cywgZHN0KTsKKworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGFyZ3VtZW50Q291bnQg
KyAxKSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgSlNTdGFjazo6QXJndW1lbnRDb3Vu
dCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0IC0g
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CisKKyAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JT
bG93UGF0aENhbGwpCisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLW1heEZyYW1lRXh0ZW50
Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIHNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKG1fbW9kdWxlKSwgVHJ1c3RlZEltbTMyKGZ1
bmN0aW9uSW5kZXgpKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQq
PihnZXRJbnRlcm5hbEZ1bmN0aW9uKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGNhbGwo
R1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsKQorICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgbW92ZShHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDApOyAvLyByZWdUMCBob2xkcyBjYWxsZWUuCisgICAg
c3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgSlNT
dGFjazo6Q2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSAtIHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSkpOworCisgICAgY2FsbEZ1bmN0aW9uU2xvd0Nhc2UocmV0dXJu
VHlwZSwgZHN0KTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2V0
SW1wb3J0ZWRGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIE1vZHVsZSogbW9kdWxlLCB1aW50MzJf
dCBmdW5jSW1wb3J0SW5kZXgpCit7CisgICAgLy8gVE9ETzogVXNlIHRoZXNlIHR3byBsaW5lcz8K
KyAgICAvLyBWTSogdm0gPSBleGVjLT52bSgpOworICAgIC8vIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgY29uc3QgU3RyaW5nJiBmdW5jdGlvbkltcG9ydE5h
bWUgPSBtb2R1bGUtPmZ1bmN0aW9uSW1wb3J0TmFtZShmdW5jSW1wb3J0SW5kZXgpOworCisgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KTsKKyAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZl
eGVjLT52bSgpLCBmdW5jdGlvbkltcG9ydE5hbWUpOworICAgIFByb3BlcnR5U2xvdCBzbG90KGds
b2JhbE9iamVjdCk7CisKKyAgICBpZiAoIWdsb2JhbE9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGV4
ZWMsIGlkZW50aWZpZXIsIHNsb3QpKSB7CisgICAgICAgIC8vIFRPRE86IERvIHNvbWV0aGluZyEK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCBmaW5kIGEgZnVuY3Rpb24gbmFtZWQgXCIl
c1wiLlxuIiwgZnVuY3Rpb25JbXBvcnROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBhYm9y
dCgpOworICAgIH0KKworICAgIEpTVmFsdWUgdmFsdWUgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGlk
ZW50aWZpZXIpOworICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7CisgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiXCIlc1wiIGlzIG5vdCBhIGZ1bmN0aW9uLlxuIiwgZnVuY3Rpb25JbXBvcnRO
YW1lLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBhYm9ydCgpOworICAgIH0KKworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOworfQorCit2b2lkIEZ1bmN0aW9uUGFyc2VyOjpwYXJz
ZUNhbGxJbXBvcnQoUmV0dXJuVHlwZSByZXR1cm5UeXBlLCBpbnQgZHN0KQoreworICAgIHVpbnQz
Ml90IGZ1bmNJbXBvcnRTaWduYXR1cmVJbmRleCA9IG1fcmVhZGVyLmltbVUzMigpOworICAgIGNv
bnN0IE1vZHVsZTo6RnVuY0ltcG9ydFNpZ25hdHVyZSYgZnVuY0ltcG9ydFNpZ25hdHVyZSA9IG1f
bW9kdWxlLT5tX2Z1bmNJbXBvcnRTaWduYXR1cmVzW2Z1bmNJbXBvcnRTaWduYXR1cmVJbmRleF07
CisgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBtX21vZHVsZS0+bV9zaWduYXR1cmVz
W2Z1bmNJbXBvcnRTaWduYXR1cmUuc2lnbmF0dXJlSW5kZXhdOworICAgIGNvbnN0IFZlY3RvcjxU
eXBlPiYgYXJndW1lbnRzID0gc2lnbmF0dXJlLmFyZ3VtZW50czsKKyAgICBzaXplX3QgYXJndW1l
bnRDb3VudCA9IGFyZ3VtZW50cy5zaXplKCk7CisgICAgLy8gRklYTUU6IHJldHVyblR5cGUgaXMg
cmVkdW5kYW50IHdpdGggc2lnbmF0dXJlLnJldHVyblR5cGUKKworICAgIHBhcnNlQ2FsbEFyZ3Vt
ZW50cyhhcmd1bWVudHMsIGRzdCk7CisKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihhcmd1bWVu
dENvdW50ICsgMSksIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9m
ZnNldCAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOworCisgICAgaWYgKG1heEZyYW1lRXh0
ZW50Rm9yU2xvd1BhdGhDYWxsKQorICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1tYXhGcmFt
ZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBzZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihtX21vZHVsZSksIFRydXN0ZWRJ
bW0zMihmdW5jSW1wb3J0U2lnbmF0dXJlLmZ1bmNJbXBvcnRJbmRleCkpOworICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGdldEltcG9ydGVkRnVuY3Rpb24pKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMCk7CisgICAgY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBp
ZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCisgICAgICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisKKyAgICBtb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7
IC8vIHJlZ1QwIGhvbGRzIGNhbGxlZS4KKyAgICBzdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBZGRy
ZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBKU1N0YWNrOjpDYWxsZWUgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CisKKyAg
ICBjYWxsRnVuY3Rpb25TbG93Q2FzZShyZXR1cm5UeXBlLCBkc3QpOworfQorCit2b2lkIEZ1bmN0
aW9uUGFyc2VyOjpjYWxsRnVuY3Rpb25TbG93Q2FzZShSZXR1cm5UeXBlIHJldHVyblR5cGUsIGlu
dCBkc3QpCit7CisgICAgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yID0gbGlua1RodW5rR2VuZXJh
dG9yRm9yKENvZGVGb3JDYWxsLCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKKwor
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgR1BSSW5mbzo6cmVnVDIpOyAvLyBUT0RP
OiBVc2UgQ2FsbExpbmtJbmZvCisKKyAgICBDb2RlUHRyIHB0ciA9IG1fdm0tPmdldENUSVN0dWIo
Z2VuZXJhdG9yKS5jb2RlKCk7CisKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIocHRyLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKworICAgIGNhbGwoR1BSSW5mbzo6
bm9uQXJnR1BSMCk7CisKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1tX3N0YWNrSGVpZ2h0ICog
OCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7IC8v
IEZJWE1FOiBoYWNreQorCisgICAgLy8gRklYTUU6IENhbiB3ZSByZWFsbHkgdXNlIHJldHVyblZh
bHVlR1BSPworICAgIHN3aXRjaCAocmV0dXJuVHlwZSkgeworICAgIGNhc2UgUmV0dXJuVHlwZTo6
STMyOgorICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCB0ZW1wb3JhcnlB
ZGRyZXNzKGRzdCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJldHVyblR5cGU6OkY2NDoK
KyAgICAgICAgdW5ib3hEb3VibGVXaXRob3V0QXNzZXJ0aW9ucyhHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgIHN0b3JlRG91YmxlKEZQUkluZm86OmZw
UmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UmV0dXJuVHlwZTo6Vm9pZDoKKyAgICAgICAgYnJlYWs7IC8vIFRPRE86IFN1cmU/CisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEZ1
bmN0aW9uUGFyc2VyOjpwYXJzZUNhbGxBcmd1bWVudHMoY29uc3QgVmVjdG9yPFR5cGU+JiBhcmd1
bWVudHMsIGludCBkc3QpCit7CisgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBhcmd1bWVudHMu
c2l6ZSgpOworICAgIHNpemVfdCBvZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3Rh
Y2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgZHN0ICsgYXJndW1lbnRDb3VudCArIG1fY3VycmVudExv
Y2FsVHlwZXMuc2l6ZSgpKSAtIG1fY3VycmVudExvY2FsVHlwZXMuc2l6ZSgpOyAvLyBGSVhNRTog
QmV0dGVyIG5hbWUKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsg
KytpKSB7CisgICAgICAgIHN3aXRjaCAoYXJndW1lbnRzW2ldKSB7CisgICAgICAgIGNhc2UgVHlw
ZTo6STMyOgorICAgICAgICAgICAgcGFyc2VFeHBySTMyKG9mZnNldCk7CisgICAgICAgICAgICBs
b2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhvZmZzZXQpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAg
ICAgICBvcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICAgICAgc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhv
ZmZzZXQgLSBpIC0gMSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6
RjY0OgorICAgICAgICAgICAgcGFyc2VFeHByRjY0KG9mZnNldCk7CisgICAgICAgICAgICBsb2Fk
RG91YmxlKHRlbXBvcmFyeUFkZHJlc3Mob2Zmc2V0KSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAg
ICAgICAgICBib3hEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgR1BSSW5mbzo6cmVnVDApOworICAg
ICAgICAgICAgc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhvZmZzZXQg
LSBpIC0gMSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0b3Jl
NjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHRlbXBvcmFy
eUFkZHJlc3Mob2Zmc2V0KSk7CisKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0ob2Zmc2V0ICsg
bV9jdXJyZW50TG9jYWxUeXBlcy5zaXplKCkgKyAzKSAqIDggLSA4KSwgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsgLy8gRklYTUU6IGhhY2t5Cit9CisK
K3ZvaWQgRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ29uZChSZXR1cm5UeXBlIHJldHVyblR5cGUsIGlu
dCBkc3QpCit7CisgICAgcGFyc2VFeHBySTMyKGRzdCk7CisgICAgbG9hZDMyKHRlbXBvcmFyeUFk
ZHJlc3MoZHN0KSwgR1BSSW5mbzo6cmVnVDApOworICAgIEp1bXAgZWxzID0gYnJhbmNoVGVzdDMy
KFplcm8sIEdQUkluZm86OnJlZ1QwKTsKKyAgICBwYXJzZUV4cHIocmV0dXJuVHlwZSwgZHN0KTsK
KyAgICBKdW1wIGVuZCA9IGp1bXAoKTsKKyAgICBlbHMubGluayh0aGlzKTsKKyAgICBwYXJzZUV4
cHIocmV0dXJuVHlwZSwgZHN0KTsKKyAgICBlbmQubGluayh0aGlzKTsKK30KKwordm9pZCBGdW5j
dGlvblBhcnNlcjo6cGFyc2VDb21tYShSZXR1cm5UeXBlIHJldHVyblR5cGUsIGludCBkc3QpCit7
CisgICAgcGFyc2VFeHByKG1fcmVhZGVyLnJldHVyblR5cGUoKSwgZHN0KTsKKyAgICBwYXJzZUV4
cHIocmV0dXJuVHlwZSwgZHN0KTsKK30KKwordm9pZCBGdW5jdGlvblBhcnNlcjo6cGFyc2VGcm9t
RjY0STMyKGludCBkc3QpCit7CisgICAgcGFyc2VFeHByRjY0KGRzdCk7CisgICAgbG9hZERvdWJs
ZSh0ZW1wb3JhcnlBZGRyZXNzKGRzdCksIEZQUkluZm86OmZwUmVnVDApOworICAgIHRydW5jYXRl
RG91YmxlVG9JbnQzMihGUFJJbmZvOjpmcFJlZ1QwLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgc3Rv
cmUzMihHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKK30KKwordm9pZCBG
dW5jdGlvblBhcnNlcjo6cGFyc2VGcm9tUzMyRjY0KGludCBkc3QpCit7CisgICAgcGFyc2VFeHBy
STMyKGRzdCk7CisgICAgY29udmVydEludDMyVG9Eb3VibGUodGVtcG9yYXJ5QWRkcmVzcyhkc3Qp
LCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICBzdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCB0
ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworfQorCit2b2lkIEZ1bmN0aW9uUGFyc2VyOjpjYWxsRG91
YmxlRnVuY3Rpb24oZG91YmxlICgqZnVuY3Rpb24pKGRvdWJsZSksIEZQUmVnaXN0ZXJJRCBzcmMs
IEZQUmVnaXN0ZXJJRCBkc3QpCit7CisgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsKQorICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1tYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBzZXR1cEFyZ3VtZW50cyhzcmMp
OworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uKSks
IEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7Cisg
ICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQorICAgICAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworCisgICAgLy8gRklYTUU6IG9ubHkgd29ya3Mgb24geDg2CisgICAgbW92ZURvdWJs
ZShGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgZHN0KTsKK30KKwordm9pZCBGdW5jdGlvblBhcnNl
cjo6Y2FsbERvdWJsZUZ1bmN0aW9uKGRvdWJsZSAoKmZ1bmN0aW9uKShkb3VibGUsIGRvdWJsZSks
IEZQUmVnaXN0ZXJJRCBzcmMxLCBGUFJlZ2lzdGVySUQgc3JjMiwgRlBSZWdpc3RlcklEIGRzdCkK
K3sKKyAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCisgICAgICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoLW1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgIHNldHVwQXJndW1lbnRzKHNyYzEsIHNyYzIpOworICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uKSksIEdQUkluZm86Om5v
bkFyZ0dQUjApOworICAgIGNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgaWYgKG1heEZy
YW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQorICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisg
ICAgLy8gRklYTUU6IG9ubHkgd29ya3Mgb24geDg2CisgICAgbW92ZURvdWJsZShGUFJJbmZvOjpy
ZXR1cm5WYWx1ZUZQUiwgZHN0KTsKK30KKwordm9pZCBGdW5jdGlvblBhcnNlcjo6cGFyc2VVbmFy
eU9wSTMyKEkzMiBvcCwgaW50IGRzdCkKK3sKKyAgICBwYXJzZUV4cHIoUmV0dXJuVHlwZTo6STMy
LCBkc3QpOworICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKGRzdCksIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBJMzI6Ok5lZzoKKyAgICAgICAgbmVnMzIo
R1BSSW5mbzo6cmVnVDApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEkzMjo6Qml0Tm90Ogor
ICAgICAgICB4b3IzMihUcnVzdGVkSW1tMzIoLTEpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSTMyOjpDbHo6CisgICAgICAgIGNvdW50TGVhZGluZ1plcm9zMzIo
R1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBJMzI6OkxvZ2ljTm90OiB7CisgICAgICAgIEp1bXAgemVybyA9IGJyYW5jaFRlc3QzMihaZXJv
LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KDApLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgICAgIEp1bXAgZW5kID0ganVtcCgpOworICAgICAgICB6ZXJvLmxpbmso
dGhpcyk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KDEpLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgICAgIGVuZC5saW5rKHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBJ
MzI6OkFiczogeworICAgICAgICBKdW1wIGVuZCA9IGJyYW5jaFRlc3QzMihQb3NpdGl2ZU9yWmVy
bywgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBuZWczMihHUFJJbmZvOjpyZWdUMCk7CisgICAg
ICAgIGVuZC5saW5rKHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHN0b3JlMzIoR1BSSW5m
bzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MoZHN0KSk7Cit9CisKK3ZvaWQgRnVuY3Rpb25QYXJz
ZXI6OnBhcnNlVW5hcnlPcEY2NChGNjQgb3AsIGludCBkc3QpCit7CisgICAgcGFyc2VFeHByKFJl
dHVyblR5cGU6OkY2NCwgZHN0KTsKKyAgICBsb2FkRG91YmxlKHRlbXBvcmFyeUFkZHJlc3MoZHN0
KSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgRjY0OjpO
ZWc6CisgICAgICAgIG5lZ2F0ZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJl
Z1QxKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGNjQ6OkFiczoKKyAgICAgICAgYWJzRG91
YmxlKEZQUkluZm86OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEY2NDo6Q2VpbDoKKyAgICAgICAgY2FsbERvdWJsZUZ1bmN0aW9uKGNlaWwsIEZQ
UkluZm86OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEY2NDo6Rmxvb3I6CisgICAgICAgIGNhbGxEb3VibGVGdW5jdGlvbihmbG9vciwgRlBSSW5m
bzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RjY0OjpTcXJ0OgorICAgICAgICBzcXJ0RG91YmxlKEZQUkluZm86OmZwUmVnVDAsIEZQUkluZm86
OmZwUmVnVDEpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEY2NDo6Q29zOgorICAgICAgICBj
YWxsRG91YmxlRnVuY3Rpb24oY29zLCBGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1Qx
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGNjQ6OlNpbjoKKyAgICAgICAgY2FsbERvdWJs
ZUZ1bmN0aW9uKHNpbiwgRlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRjY0OjpUYW46CisgICAgICAgIGNhbGxEb3VibGVGdW5jdGlv
bih0YW4sIEZQUkluZm86OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEY2NDo6QUNvczoKKyAgICAgICAgY2FsbERvdWJsZUZ1bmN0aW9uKGFjb3Ms
IEZQUkluZm86OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEY2NDo6QVNpbjoKKyAgICAgICAgY2FsbERvdWJsZUZ1bmN0aW9uKGFzaW4sIEZQUklu
Zm86OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEY2NDo6QVRhbjoKKyAgICAgICAgY2FsbERvdWJsZUZ1bmN0aW9uKGF0YW4sIEZQUkluZm86OmZw
UmVnVDAsIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEY2NDo6
RXhwOgorICAgICAgICBjYWxsRG91YmxlRnVuY3Rpb24oZXhwLCBGUFJJbmZvOjpmcFJlZ1QwLCBG
UFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGNjQ6OkxuOgorICAg
ICAgICBjYWxsRG91YmxlRnVuY3Rpb24obG9nLCBGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpm
cFJlZ1QxKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorICAgIHN0b3JlRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIHRl
bXBvcmFyeUFkZHJlc3MoZHN0KSk7Cit9CisKK3ZvaWQgRnVuY3Rpb25QYXJzZXI6OnBhcnNlQmlu
YXJ5T3BJMzIoSTMyIG9wLCBpbnQgZHN0KQoreworICAgIHBhcnNlRXhwcihSZXR1cm5UeXBlOjpJ
MzIsIGRzdCk7CisgICAgcGFyc2VFeHByKFJldHVyblR5cGU6OkkzMiwgZHN0ICsgMSk7CisgICAg
bG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoZHN0KSwgR1BSSW5mbzo6cmVnVDApOworICAgIGxvYWQz
Mih0ZW1wb3JhcnlBZGRyZXNzKGRzdCArIDEpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgc3dpdGNo
IChvcCkgeworICAgIGNhc2UgSTMyOjpBZGQ6CisgICAgICAgIGFkZDMyKEdQUkluZm86OnJlZ1Qx
LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSTMyOjpTdWI6Cisg
ICAgICAgIHN1YjMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgSTMyOjpNdWw6CisgICAgICAgIG11bDMyKEdQUkluZm86OnJlZ1QxLCBH
UFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSTMyOjpTRGl2OgorICAg
ICAgICBtb3ZlKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmNkcSgpOworICAgICAgICBtX2Fzc2VtYmxlci5pZGl2bF9yKEdQUkluZm86OnJlZ1Qy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJMzI6OlNNb2Q6CisgICAgICAgIG1vdmUoR1BS
SW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY2RxKCk7
CisgICAgICAgIG1fYXNzZW1ibGVyLmlkaXZsX3IoR1BSSW5mbzo6cmVnVDIpOworICAgICAgICBt
b3ZlKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgSTMyOjpCaXRPcjoKKyAgICAgICAgb3IzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6
cmVnVDApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEkzMjo6Qml0QW5kOgorICAgICAgICBh
bmQzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEkzMjo6Qml0WG9yOgorICAgICAgICB4b3IzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5m
bzo6cmVnVDApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEkzMjo6THNoOgorICAgICAgICBs
c2hpZnQzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEkzMjo6QXJpdGhSc2g6CisgICAgICAgIHJzaGlmdDMyKEdQUkluZm86OnJlZ1Qx
LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSTMyOjpMb2dpY1Jz
aDoKKyAgICAgICAgdXJzaGlmdDMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KKyAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRz
dCkpOworfQorCit2b2lkIEZ1bmN0aW9uUGFyc2VyOjpwYXJzZUJpbmFyeU9wRjY0KEY2NCBvcCwg
aW50IGRzdCkKK3sKKyAgICBwYXJzZUV4cHIoUmV0dXJuVHlwZTo6RjY0LCBkc3QpOworICAgIHBh
cnNlRXhwcihSZXR1cm5UeXBlOjpGNjQsIGRzdCArIDEpOworICAgIGxvYWREb3VibGUodGVtcG9y
YXJ5QWRkcmVzcyhkc3QpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICBsb2FkRG91YmxlKHRlbXBv
cmFyeUFkZHJlc3MoZHN0ICsgMSksIEZQUkluZm86OmZwUmVnVDEpOworICAgIHN3aXRjaCAob3Ap
IHsKKyAgICBjYXNlIEY2NDo6QWRkOgorICAgICAgICBhZGREb3VibGUoRlBSSW5mbzo6ZnBSZWdU
MSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRjY0OjpTdWI6
CisgICAgICAgIHN1YkRvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGNjQ6Ok11bDoKKyAgICAgICAgbXVsRG91YmxlKEZQ
UkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEY2NDo6RGl2OgorICAgICAgICBkaXZEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5m
bzo6ZnBSZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRjY0OjpBVGFuMjoKKyAgICAg
ICAgY2FsbERvdWJsZUZ1bmN0aW9uKGF0YW4yLCBGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpm
cFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGNjQ6
OlBvdzoKKyAgICAgICAgY2FsbERvdWJsZUZ1bmN0aW9uKHBvdywgRlBSSW5mbzo6ZnBSZWdUMCwg
RlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICBzdG9y
ZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworfQorCit2
b2lkIEZ1bmN0aW9uUGFyc2VyOjpwYXJzZVJlbGF0aW9uYWxPcEkzMihSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmRpdGlvbiwgaW50IGRzdCkKK3sKKyAgICBwYXJzZUV4cHJJMzIoZHN0KTsKKyAgICBw
YXJzZUV4cHJJMzIoZHN0ICsgMSk7CisgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoZHN0KSwg
R1BSSW5mbzo6cmVnVDApOworICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKGRzdCArIDEpLCBH
UFJJbmZvOjpyZWdUMSk7CisgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgR1BSSW5mbzo6cmVnVDAs
IEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgc3RvcmUzMihHUFJJbmZvOjpy
ZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhkc3QpKTsKK30KKwordm9pZCBGdW5jdGlvblBhcnNlcjo6
cGFyc2VSZWxhdGlvbmFsT3BGNjQoRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgaW50IGRzdCkK
K3sKKyAgICBwYXJzZUV4cHJGNjQoZHN0KTsKKyAgICBwYXJzZUV4cHJGNjQoZHN0ICsgMSk7Cisg
ICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKGRzdCksIEZQUkluZm86OmZwUmVnVDApOwor
ICAgIGxvYWREb3VibGUodGVtcG9yYXJ5QWRkcmVzcyhkc3QgKyAxKSwgRlBSSW5mbzo6ZnBSZWdU
MSk7CisgICAgSnVtcCB0cnVlQ2FzZSA9IGJyYW5jaERvdWJsZShjb25kaXRpb24sIEZQUkluZm86
OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDEpOworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDAp
LCB0ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworICAgIEp1bXAgZW5kID0ganVtcCgpOworICAgIHRy
dWVDYXNlLmxpbmsodGhpcyk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMSksIHRlbXBvcmFy
eUFkZHJlc3MoZHN0KSk7CisgICAgZW5kLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgRnVuY3Rpb25Q
YXJzZXI6OnBhcnNlTWluTWF4STMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uLCBpbnQg
ZHN0KQoreworICAgIHVpbnQzMl90IG51bWJlck9mQXJndW1lbnRzID0gbV9yZWFkZXIuaW1tVTMy
KCk7CisgICAgUkVMRUFTRV9BU1NFUlQobnVtYmVyT2ZBcmd1bWVudHMgPj0gMSk7CisgICAgcGFy
c2VFeHBySTMyKGRzdCk7CisgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MoZHN0KSwgR1BSSW5m
bzo6cmVnVDApOworICAgIGZvciAodWludDMyX3QgaSA9IDE7IGkgPCBudW1iZXJPZkFyZ3VtZW50
czsgKytpKSB7CisgICAgICAgIHBhcnNlRXhwckkzMihkc3QpOworICAgICAgICBsb2FkMzIodGVt
cG9yYXJ5QWRkcmVzcyhkc3QpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIEp1bXAgZW5kID0g
YnJhbmNoMzIoY29uZGl0aW9uLCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEpOworICAg
ICAgICBtb3ZlKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGVuZC5s
aW5rKHRoaXMpOworICAgIH0KKyAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlB
ZGRyZXNzKGRzdCkpOworfQorCit2b2lkIEZ1bmN0aW9uUGFyc2VyOjpwYXJzZU1pbk1heEY2NChE
b3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBpbnQgZHN0KQoreworICAgIHVpbnQzMl90IG51bWJl
ck9mQXJndW1lbnRzID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgUkVMRUFTRV9BU1NFUlQobnVt
YmVyT2ZBcmd1bWVudHMgPj0gMSk7CisgICAgcGFyc2VFeHByRjY0KGRzdCk7CisgICAgbG9hZERv
dWJsZSh0ZW1wb3JhcnlBZGRyZXNzKGRzdCksIEZQUkluZm86OmZwUmVnVDApOworICAgIGZvciAo
dWludDMyX3QgaSA9IDE7IGkgPCBudW1iZXJPZkFyZ3VtZW50czsgKytpKSB7CisgICAgICAgIHBh
cnNlRXhwckY2NChkc3QpOworICAgICAgICBsb2FkRG91YmxlKHRlbXBvcmFyeUFkZHJlc3MoZHN0
KSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgIEp1bXAgZW5kID0gYnJhbmNoRG91YmxlKGNv
bmRpdGlvbiwgRlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgIG1v
dmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgIGVu
ZC5saW5rKHRoaXMpOworICAgIH0KKyAgICBzdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCB0
ZW1wb3JhcnlBZGRyZXNzKGRzdCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2Vy
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mMDUzMGE0ZjIyOWE5YjE5OGMyNDE3MzhlYTk5ODRmNjdiY2VmZjk1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2Vy
LmgKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFdhc21GdW5jdGlvblBhcnNlcl9oCisjZGVmaW5lIFdhc21GdW5j
dGlvblBhcnNlcl9oCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJXYXNt
UmVhZGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKSVRDb2RlOworY2xhc3MgVk07
CisKK25hbWVzcGFjZSBXYXNtIHsKKworY2xhc3MgSnVtcFNjb3BlOworY2xhc3MgTW9kdWxlOwor
ZW51bSBjbGFzcyBMaW5lYXJNZW1vcnlUeXBlIDogdW5zaWduZWQ7CisKK2NsYXNzIEZ1bmN0aW9u
UGFyc2VyIDogcHJpdmF0ZSBDQ2FsbEhlbHBlcnMgeworcHVibGljOgorICAgIEZ1bmN0aW9uUGFy
c2VyKFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIE1vZHVsZSogbW9kdWxlLCBjb25zdCB1
aW50OF90KiBjdXJzb3IpCisgICAgICAgIDogQ0NhbGxIZWxwZXJzKHZtLCBjb2RlQmxvY2spCisg
ICAgICAgICwgbV9tb2R1bGUobW9kdWxlKQorICAgICAgICAsIG1fcmVhZGVyKGN1cnNvcikKKyAg
ICB7CisgICAgfQorCisgICAgUmVmUHRyPEpJVENvZGU+IGNvbXBpbGVGdW5jdGlvbihWTSYsIHNp
emVfdCBmdW5jdGlvbkluZGV4KTsKKyAgICBjb25zdCBSZWFkZXImIHJlYWRlcigpIGNvbnN0IHsg
cmV0dXJuIG1fcmVhZGVyOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBhbGxvY2F0ZVNwYWNlT25T
dGFjaygpOworICAgIHZvaWQgZGVhbGxvY2F0ZVNwYWNlT25TdGFjaygpOworCisgICAgdm9pZCBw
YXJzZVNpZ25hdHVyZShzaXplX3QgZnVuY3Rpb25JbmRleCk7CisgICAgdm9pZCBwYXJzZVZhcnMo
KTsKKworICAgIHZvaWQgcGFyc2VTdG10KCk7CisgICAgdm9pZCBwYXJzZUdldExvY2FsKHVpbnQz
Ml90IGltbSwgaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZUdldExvY2FsKGludCBkc3QpOworICAg
IHZvaWQgcGFyc2VTZXRMb2NhbCh1aW50MzJfdCBpbW0sIGludCBkc3QpOworICAgIHZvaWQgcGFy
c2VTZXRMb2NhbChpbnQgZHN0KTsKKyAgICB2b2lkIHBhcnNlQXJyYXlCdWZmZXJPZmZzZXQoYm9v
bCBoYXNPZmZzZXQsIGludCBkc3QpOworICAgIHZvaWQgcGFyc2VMb2FkKFJldHVyblR5cGUsIExp
bmVhck1lbW9yeVR5cGUsIGJvb2wgaGFzT2Zmc2V0LCBpbnQgZHN0KTsKKyAgICB2b2lkIHBhcnNl
U3RvcmUoUmV0dXJuVHlwZSwgTGluZWFyTWVtb3J5VHlwZSwgYm9vbCBoYXNPZmZzZXQsIGludCBk
c3QpOworICAgIHZvaWQgcGFyc2VSZXR1cm5TdG10KCk7CisgICAgdm9pZCBwYXJzZUJsb2NrU3Rt
dCgpOworICAgIHZvaWQgcGFyc2VTdG10TGlzdCgpOworICAgIHZvaWQgcGFyc2VJZlN0bXQoKTsK
KyAgICB2b2lkIHBhcnNlSWZFbHNlU3RtdCgpOworICAgIHZvaWQgcGFyc2VXaGlsZVN0bXQoKTsK
KyAgICB2b2lkIHBhcnNlRG9TdG10KCk7CisgICAgdm9pZCBwYXJzZUxhYmVsU3RtdCgpOworICAg
IHZvaWQgcGFyc2VCcmVha1N0bXQoKTsKKyAgICB2b2lkIHBhcnNlQnJlYWtMYWJlbFN0bXQoKTsK
KyAgICB2b2lkIHBhcnNlQ29udGludWVTdG10KCk7CisgICAgdm9pZCBwYXJzZUNvbnRpbnVlTGFi
ZWxTdG10KCk7CisgICAgdm9pZCBwYXJzZVN3aXRjaFN0bXQoKTsKKworICAgIHZvaWQgcGFyc2VF
eHByKFJldHVyblR5cGUsIGludCBkc3QpOworICAgIHZvaWQgcGFyc2VFeHBySTMyKGludCBkc3Qp
OworICAgIHZvaWQgcGFyc2VFeHByRjY0KGludCBkc3QpOworICAgIHZvaWQgcGFyc2VFeHByVm9p
ZChpbnQgZHN0KTsKKyAgICB2b2lkIHBhcnNlTGl0UG9vbChSZXR1cm5UeXBlLCB1aW50MzJfdCBp
bmRleCwgaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZUxpdFBvb2woUmV0dXJuVHlwZSwgaW50IGRz
dCk7CisgICAgdm9pZCBwYXJzZUxpdEltbShSZXR1cm5UeXBlLCB1aW50MzJfdCBpbW0sIGludCBk
c3QpOworICAgIHZvaWQgcGFyc2VMaXRJbW0oUmV0dXJuVHlwZSwgaW50IGRzdCk7CisgICAgdm9p
ZCBwYXJzZUNhbGxJbnRlcm5hbChSZXR1cm5UeXBlLCBpbnQgZHN0KTsKKyAgICB2b2lkIHBhcnNl
Q2FsbEltcG9ydChSZXR1cm5UeXBlLCBpbnQgZHN0KTsKKyAgICB2b2lkIGNhbGxGdW5jdGlvblNs
b3dDYXNlKFJldHVyblR5cGUsIGludCBkc3QpOworICAgIHZvaWQgcGFyc2VDYWxsQXJndW1lbnRz
KGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJndW1lbnRzLCBpbnQgZHN0KTsKKyAgICB2b2lkIHBhcnNl
Q29uZChSZXR1cm5UeXBlLCBpbnQgZHN0KTsKKyAgICB2b2lkIHBhcnNlQ29tbWEoUmV0dXJuVHlw
ZSwgaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZUZyb21GNjRJMzIoaW50IGRzdCk7CisgICAgdm9p
ZCBwYXJzZUZyb21TMzJGNjQoaW50IGRzdCk7CisgICAgdm9pZCBjYWxsRG91YmxlRnVuY3Rpb24o
ZG91YmxlICgqZnVuY3Rpb24pKGRvdWJsZSksIEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJ
RCBkc3QpOworICAgIHZvaWQgY2FsbERvdWJsZUZ1bmN0aW9uKGRvdWJsZSAoKmZ1bmN0aW9uKShk
b3VibGUsIGRvdWJsZSksIEZQUmVnaXN0ZXJJRCBzcmMxLCBGUFJlZ2lzdGVySUQgc3JjMiwgRlBS
ZWdpc3RlcklEIGRzdCk7CisgICAgdm9pZCBwYXJzZVVuYXJ5T3BJMzIoSTMyIG9wLCBpbnQgZHN0
KTsKKyAgICB2b2lkIHBhcnNlVW5hcnlPcEY2NChGNjQgb3AsIGludCBkc3QpOworICAgIHZvaWQg
cGFyc2VCaW5hcnlPcEkzMihJMzIgb3AsIGludCBkc3QpOworICAgIHZvaWQgcGFyc2VCaW5hcnlP
cEY2NChGNjQgb3AsIGludCBkc3QpOworICAgIHZvaWQgcGFyc2VSZWxhdGlvbmFsT3BJMzIoUmVs
YXRpb25hbENvbmRpdGlvbiwgaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZVJlbGF0aW9uYWxPcEY2
NChEb3VibGVDb25kaXRpb24sIGludCBkc3QpOworICAgIHZvaWQgcGFyc2VNaW5NYXhJMzIoUmVs
YXRpb25hbENvbmRpdGlvbiwgaW50IGRzdCk7CisgICAgdm9pZCBwYXJzZU1pbk1heEY2NChEb3Vi
bGVDb25kaXRpb24sIGludCBkc3QpOworCisgICAgQWRkcmVzcyBzdGFja0FkZHJlc3MoaW50IGkp
IGNvbnN0IC8vIEZJWE1FOiBJcyB0aGlzIGNvcnJlY3Q/CisgICAgeworICAgICAgICByZXR1cm4g
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgLWkgKiA4IC0gOCk7CisgICAgfQor
CisgICAgQWRkcmVzcyB0ZW1wb3JhcnlBZGRyZXNzKGludCBpKSBjb25zdCAvLyBGSVhNRTogSXMg
dGhpcyBjb3JyZWN0PworICAgIHsKKyAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIC0oaSArIG1fY3VycmVudExvY2FsVHlwZXMuc2l6ZSgpKSAqIDggLSA4
KTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2hDb250aW51ZUxhYmVsTGFiZWwoTGFiZWwqIGxhYmVs
KSB7IG1fY29udGludWVMYWJlbExhYmVscy5hcHBlbmQobGFiZWwpOyB9CisgICAgdm9pZCBwb3BD
b250aW51ZUxhYmVsTGFiZWwoKSB7IG1fY29udGludWVMYWJlbExhYmVscy5yZW1vdmVMYXN0KCk7
IH0KKyAgICBMYWJlbCogY29udGludWVMYWJlbExhYmVsKHNpemVfdCBpKSBjb25zdCB7IHJldHVy
biBtX2NvbnRpbnVlTGFiZWxMYWJlbHNbaV07IH0KKyAgICB2b2lkIHB1c2hCcmVha0xhYmVsSnVt
cExpc3QoSnVtcExpc3QqIGp1bXBMaXN0KSB7IG1fYnJlYWtMYWJlbEp1bXBMaXN0cy5hcHBlbmQo
anVtcExpc3QpOyB9CisgICAgdm9pZCBwb3BCcmVha0xhYmVsSnVtcExpc3QoKSB7IG1fYnJlYWtM
YWJlbEp1bXBMaXN0cy5yZW1vdmVMYXN0KCk7IH0KKyAgICBKdW1wTGlzdCogYnJlYWtMYWJlbEp1
bXBMaXN0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX2JyZWFrTGFiZWxKdW1wTGlzdHNbaV07
IH0KKworICAgIHZvaWQgcHVzaENvbnRpbnVlSnVtcFNjb3BlKEp1bXBTY29wZSoganVtcFNjb3Bl
KSB7IG1fY29udGludWVKdW1wU2NvcGVzLmFwcGVuZChqdW1wU2NvcGUpOyB9CisgICAgdm9pZCBw
b3BDb250aW51ZUp1bXBTY29wZSgpIHsgbV9jb250aW51ZUp1bXBTY29wZXMucmVtb3ZlTGFzdCgp
OyB9CisgICAgSnVtcFNjb3BlKiB0b3BDb250aW51ZUp1bXBTY29wZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY29udGludWVKdW1wU2NvcGVzLmxhc3QoKTsgfQorCisgICAgdm9pZCBwdXNoQnJlYWtKdW1w
TGlzdChKdW1wTGlzdCoganVtcExpc3QpIHsgbV9icmVha0p1bXBMaXN0cy5hcHBlbmQoanVtcExp
c3QpOyB9CisgICAgdm9pZCBwb3BCcmVha0p1bXBMaXN0KCkgeyBtX2JyZWFrSnVtcExpc3RzLnJl
bW92ZUxhc3QoKTsgfQorICAgIEp1bXBMaXN0KiB0b3BCcmVha0p1bXBMaXN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9icmVha0p1bXBMaXN0cy5sYXN0KCk7IH0KKworICAgIE1vZHVsZSogbV9tb2R1bGU7
CisgICAgUmVhZGVyIG1fcmVhZGVyOworCisgICAgdWludDMyX3QgbV9zdGFja0hlaWdodDsKKwor
ICAgIFJldHVyblR5cGUgbV9jdXJyZW50UmV0dXJuVHlwZTsKKyAgICBWZWN0b3I8VHlwZT4gbV9j
dXJyZW50TG9jYWxUeXBlczsKKworICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6TGFiZWwqPiBt
X2NvbnRpbnVlTGFiZWxMYWJlbHM7CisgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCo+IG1fYnJlYWtMYWJlbEp1bXBMaXN0czsKKworICAgIFZlY3RvcjxKdW1wU2NvcGUqPiBtX2Nv
bnRpbnVlSnVtcFNjb3BlczsKKyAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0Kj4g
bV9icmVha0p1bXBMaXN0czsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNl
bmRpZiAvLyBXYXNtRnVuY3Rpb25QYXJzZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1vZHVsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YjdhZDQyMTg2Nzc4MzNjYmEzZDUxNjc5ZDRhYzQ4
ZDcyYjlmNTkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1vZHVsZS5jcHAKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Fz
bU1vZHVsZS5oIgorCisjaW5jbHVkZSAiSklUQ29kZS5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZm
ZXIuaCIKKyNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNGdW5jdGlvbi5o
IgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVqZWN0LmgiCisjaW5j
bHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdhc20geworCitjb25zdCBD
bGFzc0luZm8gTW9kdWxlOjpzX2luZm8gPSB7ICJNb2R1bGUiLCAmQmFzZTo6c19pbmZvLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKE1vZHVsZSkgfTsKKwordm9pZCBNb2R1bGU6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPGNo
YXI+JiBidWZmZXIpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworCisgICAgLy8g
VE9ETzogTWFrZSB0aGlzIGxlc3MgaGFja3kKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5
QnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZSgxMDI0LCAxKTsKKyAgICBKU0FycmF5QnVmZmVy
KiBqc0FycmF5QnVmZmVyID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qt
PmFycmF5QnVmZmVyU3RydWN0dXJlKCksIGFycmF5QnVmZmVyLnJlbGVhc2UoKSk7CisgICAgbV9h
cnJheUJ1ZmZlci5zZXQodm0sIHRoaXMsIGpzQXJyYXlCdWZmZXIpOworCisgICAgLy8gRklYTUU6
IHNhdmUgdGhlIGJ1ZmZlcgorICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOworfQorCitKU0Z1bmN0
aW9uKiBNb2R1bGU6OmZ1bmN0aW9uKHNpemVfdCBmdW5jdGlvbkluZGV4KSBjb25zdAoreworICAg
IHJldHVybiBtX2Z1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS5nZXQoKTsKK30KKworY29uc3Qgdm9p
ZCogTW9kdWxlOjphcnJheUJ1ZmZlckRhdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX2FycmF5
QnVmZmVyLT5pbXBsKCktPmRhdGEoKTsKK30KKwordm9pZCBNb2R1bGU6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBNb2R1bGUqIHRoaXNP
YmplY3QgPSBzdGF0aWNfY2FzdDxNb2R1bGUqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICBmb3IgKGF1dG8gZnVuY3Rpb24gOiB0aGlzT2JqZWN0
LT5tX2Z1bmN0aW9ucykKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJmZ1bmN0aW9uKTsKKyAgICB2
aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcnJheUJ1ZmZlcik7Cit9CisKK2Jvb2wgTW9k
dWxlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAg
TW9kdWxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PE1vZHVsZSo+KG9iamVjdCk7CisgICAgaWYgKHBy
b3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKSB7CisgICAgICAgIHNs
b3Quc2V0VmFsdWUodGhpc09iamVjdCwgRG9udERlbGV0ZSB8IFJlYWRPbmx5LCB0aGlzT2JqZWN0
LT5tX2FycmF5QnVmZmVyLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOworfQorCit2b2lkIE1vZHVsZTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgTW9kdWxlKiB0aGlzT2JqZWN0ID0ganNDYXN0
PE1vZHVsZSo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmJ1ZmZlcikgeworICAgICAgICByZWplY3QoZXhlYywgc2xvdC5pc1N0cmljdE1vZGUo
KSwgIkF0dGVtcHRpbmcgdG8gd3JpdGUgdG8gYSByZWFkLW9ubHkgYXJyYXkgYnVmZmVyIHByb3Bl
cnR5LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQmFzZTo6cHV0KHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworfQorCitib29sIE1vZHVsZTo6
ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0
b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgTW9kdWxlKiB0aGlzT2JqZWN0ID0ganNDYXN0
PE1vZHVsZSo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuYnVmZmVyKQorICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93
LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcmVhZC1vbmx5IGFycmF5IGJ1ZmZlciBwcm9wZXJ0eS4i
KTsKKworICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKK30KKworYm9vbCBNb2R1
bGU6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIE1vZHVsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxN
b2R1bGUqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5idWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gQmFz
ZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKK30KKwor
dm9pZCBNb2R1bGU6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25N
b2RlIG1vZGUpCit7CisgICAgTW9kdWxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PE1vZHVsZSo+KG9i
amVjdCk7CisgICAgaWYgKG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKQorICAgICAg
ICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcik7CisgICAgCisgICAgQmFz
ZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIGFycmF5LCBt
b2RlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Nb2R1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NTY0MDVhYTc2NGNiNTQyOTM2ZDY5NTgw
MjFjODkyOGQyNzYyOTg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1vZHVsZS5oCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXYXNtTW9kdWxlX2gKKyNkZWZpbmUg
V2FzbU1vZHVsZV9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIldhc21PcGNv
ZGVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBGdW5jdGlvblBhcnNlcjsKK2NsYXNz
IE1vZHVsZVBhcnNlcjsKKworbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBNb2R1bGUgOiBwdWJs
aWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2Jq
ZWN0IEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90OworCisgICAgc3RhdGljIE1vZHVsZSogY3JlYXRlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIp
CisgICAgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNyZWF0ZVN0cnVjdHVyZSh2
bSwgZ2xvYmFsT2JqZWN0KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/CisgICAgICAgIE1vZHVs
ZSogbW9kdWxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8TW9kdWxlPih2bS5oZWFwKSkg
TW9kdWxlKHZtLCBzdHJ1Y3R1cmUpOworICAgICAgICBtb2R1bGUtPmZpbmlzaENyZWF0aW9uKHZt
LCBnbG9iYWxPYmplY3QsIGJ1ZmZlcik7CisgICAgICAgIHJldHVybiBtb2R1bGU7CisgICAgfQor
CisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBqc051bGwoKSwgVHlw
ZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAg
IEpTRnVuY3Rpb24qIGZ1bmN0aW9uKHNpemVfdCBmdW5jdGlvbkluZGV4KSBjb25zdDsKKyAgICBj
b25zdCBTdHJpbmcmIGZ1bmN0aW9uSW1wb3J0TmFtZShzaXplX3QgZnVuY3Rpb25JbXBvcnRJbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbkltcG9ydE5hbWVzW2Z1bmN0aW9uSW1wb3J0SW5k
ZXhdOyB9CisgICAgY29uc3Qgdm9pZCogYXJyYXlCdWZmZXJEYXRhKCkgY29uc3Q7CisKKyAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKK3ByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIEZ1bmN0aW9uUGFyc2VyOworICAgIGZyaWVuZCBjbGFzcyBN
b2R1bGVQYXJzZXI7CisKKyAgICBzdHJ1Y3QgRnVuY0ltcG9ydFNpZ25hdHVyZSB7CisgICAgICAg
IHVpbnQzMl90IHNpZ25hdHVyZUluZGV4OworICAgICAgICB1aW50MzJfdCBmdW5jSW1wb3J0SW5k
ZXg7CisgICAgfTsKKworICAgIHN0cnVjdCBGdW5jUHRyVGFibGUgeworICAgICAgICB1aW50MzJf
dCBzaWduYXR1cmVJbmRleDsKKyAgICAgICAgVmVjdG9yPHVpbnQzMl90PiBlbGVtZW50czsKKyAg
ICB9OworCisgICAgTW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAg
IDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcik7
CisKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIHB1dChK
U0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xv
dCYpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3Vs
ZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVy
YXRpb25Nb2RlKTsKKworICAgIFZlY3RvcjxTaWduYXR1cmU+IG1fc2lnbmF0dXJlczsKKyAgICBW
ZWN0b3I8dWludDMyX3Q+IG1fY29uc3RhbnRJMzJzOworICAgIFZlY3RvcjxmbG9hdD4gbV9jb25z
dGFudEYzMnM7CisgICAgVmVjdG9yPGRvdWJsZT4gbV9jb25zdGFudEY2NHM7CisgICAgVmVjdG9y
PFN0cmluZz4gbV9mdW5jdGlvbkltcG9ydE5hbWVzOworICAgIFZlY3RvcjxGdW5jSW1wb3J0U2ln
bmF0dXJlPiBtX2Z1bmNJbXBvcnRTaWduYXR1cmVzOworICAgIFZlY3RvcjxUeXBlPiBtX2dsb2Jh
bFR5cGVzOworICAgIFZlY3Rvcjx1aW50MzJfdD4gbV9mdW5jU2lnbmF0dXJlczsKKyAgICBWZWN0
b3I8RnVuY1B0clRhYmxlPiBtX2Z1bmNQdHJUYWJsZXM7CisKKyAgICBWZWN0b3I8V3JpdGVCYXJy
aWVyPEpTRnVuY3Rpb24+PiBtX2Z1bmN0aW9uczsKKyAgICBXcml0ZUJhcnJpZXI8SlNBcnJheUJ1
ZmZlcj4gbV9hcnJheUJ1ZmZlcjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisK
KyNlbmRpZiAvLyBXYXNtTW9kdWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1vZHVsZVBhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTlhZGUxYmFhM2UwODNhYWE1YTI1ODhi
ZjZiMWFiM2YyY2VlNmM4OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCkBAIC0wLDAgKzEsMjU1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyBMaWNlbnNlZCB1bmRlciB0
aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyB5b3UgbWF5
IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2Uu
CisgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyBodHRwOi8vd3d3
LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworIFVubGVzcyByZXF1aXJlZCBieSBh
cHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyBkaXN0cmli
dXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lT
LAorIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIg
ZXhwcmVzcyBvciBpbXBsaWVkLgorIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxh
bmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyBsaW1pdGF0aW9ucyB1bmRlciB0aGUg
TGljZW5zZS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxl
UGFyc2VyLmgiCisKKyNpbmNsdWRlICJKSVRDb2RlLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZl
ci5oIgorI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJXYXNtRnVuY3Rpb25Q
YXJzZXIuaCIKKyNpbmNsdWRlICJXYXNtT3Bjb2Rlcy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXYXNtIHsKKwor
TW9kdWxlKiBNb2R1bGVQYXJzZXI6OnBhcnNlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgbV9tb2R1bGUgPSBN
b2R1bGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBidWZmZXIpOworCisgICAgbV9yZWFkZXIg
PSBSZWFkZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVyLmRhdGEoKSkp
OworICAgIGlmIChtX3JlYWRlci5maXhlZFdpZHRoPHVpbnQzMl90PigpICE9IE1hZ2ljTnVtYmVy
KQorICAgICAgICBhYm9ydCgpOworICAgIG1fcmVhZGVyLmZpeGVkV2lkdGg8dWludDMyX3Q+KCk7
IC8vIG91dHB1dCBzaXplIGluIGFzbS5qcyBmb3JtYXQKKworICAgIHBhcnNlQ29uc3RhbnRQb29s
U2VjdGlvbigpOworICAgIHBhcnNlU2lnbmF0dXJlU2VjdGlvbigpOworICAgIHBhcnNlRnVuY3Rp
b25JbXBvcnRTZWN0aW9uKCk7CisgICAgcGFyc2VHbG9iYWxTZWN0aW9uKCk7CisgICAgcGFyc2VG
dW5jdGlvbkRlY2xhcmF0aW9uU2VjdGlvbigpOworICAgIHBhcnNlRnVuY3Rpb25Qb2ludGVyVGFi
bGVzKCk7CisgICAgcGFyc2VGdW5jdGlvbkRlZmluaXRpb25TZWN0aW9uKHZtLCBnbG9iYWxPYmpl
Y3QpOworICAgIHBhcnNlRXhwb3J0U2VjdGlvbih2bSk7CisgICAgCisgICAgcmV0dXJuIG1fbW9k
dWxlOworfQorCit2b2lkIE1vZHVsZVBhcnNlcjo6cGFyc2VDb25zdGFudFBvb2xTZWN0aW9uKCkK
K3sKKyAgICB1aW50MzJfdCBudW1iZXJPZkkzMnMgPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICB1
aW50MzJfdCBudW1iZXJPZkYzMnMgPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICB1aW50MzJfdCBu
dW1iZXJPZkY2NHMgPSBtX3JlYWRlci5pbW1VMzIoKTsKKworICAgIFZlY3Rvcjx1aW50MzJfdD4g
Y29uc3RhbnRJMzJzKG51bWJlck9mSTMycyk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IG51bWJlck9mSTMyczsgKytpKQorICAgICAgICBjb25zdGFudEkzMnNbaV0gPSBtX3JlYWRlci5p
bW1VMzIoKTsKKworICAgIFZlY3RvcjxmbG9hdD4gY29uc3RhbnRGMzJzKG51bWJlck9mRjMycyk7
CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mRjMyczsgKytpKQorICAgICAg
ICBjb25zdGFudEYzMnNbaV0gPSBtX3JlYWRlci5maXhlZFdpZHRoPGZsb2F0PigpOworCisgICAg
VmVjdG9yPGRvdWJsZT4gY29uc3RhbnRGNjRzKG51bWJlck9mRjY0cyk7CisgICAgZm9yICh1aW50
MzJfdCBpID0gMDsgaSA8IG51bWJlck9mRjY0czsgKytpKQorICAgICAgICBjb25zdGFudEY2NHNb
aV0gPSBtX3JlYWRlci5maXhlZFdpZHRoPGRvdWJsZT4oKTsKKworICAgIG1fbW9kdWxlLT5tX2Nv
bnN0YW50STMycyA9IFdURjo6bW92ZShjb25zdGFudEkzMnMpOworICAgIG1fbW9kdWxlLT5tX2Nv
bnN0YW50RjMycyA9IFdURjo6bW92ZShjb25zdGFudEYzMnMpOworICAgIG1fbW9kdWxlLT5tX2Nv
bnN0YW50RjY0cyA9IFdURjo6bW92ZShjb25zdGFudEY2NHMpOworfQorCit2b2lkIE1vZHVsZVBh
cnNlcjo6cGFyc2VTaWduYXR1cmVTZWN0aW9uKCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZlNp
Z25hdHVyZXMgPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICBWZWN0b3I8U2lnbmF0dXJlPiBzaWdu
YXR1cmVzKG51bWJlck9mU2lnbmF0dXJlcyk7CisgICAgZm9yICh1aW50MzJfdCBzaWduYXR1cmVJ
bmRleCA9IDA7IHNpZ25hdHVyZUluZGV4IDwgbnVtYmVyT2ZTaWduYXR1cmVzOyArK3NpZ25hdHVy
ZUluZGV4KSB7CisgICAgICAgIFJldHVyblR5cGUgcmV0dXJuVHlwZSA9IG1fcmVhZGVyLnJldHVy
blR5cGUoKTsKKyAgICAgICAgdWludDMyX3QgYXJndW1lbnRDb3VudCA9IG1fcmVhZGVyLmltbVUz
MigpOworICAgICAgICBTaWduYXR1cmUgc2lnbmF0dXJlKHJldHVyblR5cGUsIGFyZ3VtZW50Q291
bnQpOworICAgICAgICBmb3IgKHVpbnQzMl90IGFyZ3VtZW50SW5kZXggPSAwOyBhcmd1bWVudElu
ZGV4IDwgYXJndW1lbnRDb3VudDsgKythcmd1bWVudEluZGV4KQorICAgICAgICAgICAgc2lnbmF0
dXJlLmFyZ3VtZW50c1thcmd1bWVudEluZGV4XSA9IG1fcmVhZGVyLnR5cGUoKTsKKyAgICAgICAg
c2lnbmF0dXJlc1tzaWduYXR1cmVJbmRleF0gPSBXVEY6Om1vdmUoc2lnbmF0dXJlKTsKKyAgICB9
CisKKyAgICBtX21vZHVsZS0+bV9zaWduYXR1cmVzID0gV1RGOjptb3ZlKHNpZ25hdHVyZXMpOwor
fQorCit2b2lkIE1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkltcG9ydFNlY3Rpb24oKQorewor
ICAgIHVpbnQzMl90IG51bWJlck9mRnVuY0ltcG9ydHMgPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAg
ICB1aW50MzJfdCBudW1iZXJPZkZ1bmNJbXBvcnRTaWduYXR1cmVzID0gbV9yZWFkZXIuaW1tVTMy
KCk7CisKKyAgICBtX21vZHVsZS0+bV9mdW5jdGlvbkltcG9ydE5hbWVzLnJlc2VydmVDYXBhY2l0
eShudW1iZXJPZkZ1bmNJbXBvcnRzKTsKKworICAgIFZlY3RvcjxNb2R1bGU6OkZ1bmNJbXBvcnRT
aWduYXR1cmU+IGZ1bmNJbXBvcnRTaWduYXR1cmVzKG51bWJlck9mRnVuY0ltcG9ydFNpZ25hdHVy
ZXMpOworICAgIE1vZHVsZTo6RnVuY0ltcG9ydFNpZ25hdHVyZSogZnVuY0ltcG9ydFNpZ25hdHVy
ZSA9IGZ1bmNJbXBvcnRTaWduYXR1cmVzLmRhdGEoKTsKKyAgICBmb3IgKHVpbnQzMl90IGZ1bmNJ
bXBvcnRJbmRleCA9IDA7IGZ1bmNJbXBvcnRJbmRleCA8IG51bWJlck9mRnVuY0ltcG9ydHM7ICsr
ZnVuY0ltcG9ydEluZGV4KSB7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAg
ICAgd2hpbGUgKGNoYXIgYyA9IG1fcmVhZGVyLnNpbmdsZUNoYXIoKSkKKyAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKGMpOworICAgICAgICBtX21vZHVsZS0+bV9mdW5jdGlvbkltcG9ydE5hbWVz
LmFwcGVuZChidWlsZGVyLnRvU3RyaW5nKCkpOworCisgICAgICAgIHVpbnQzMl90IG51bWJlck9m
U2lnbmF0dXJlcyA9IG1fcmVhZGVyLmltbVUzMigpOworICAgICAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgbnVtYmVyT2ZTaWduYXR1cmVzOyArK2kpIHsKKyAgICAgICAgICAgIGZ1bmNJbXBv
cnRTaWduYXR1cmUtPnNpZ25hdHVyZUluZGV4ID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgICAg
ICAgICBmdW5jSW1wb3J0U2lnbmF0dXJlLT5mdW5jSW1wb3J0SW5kZXggPSBmdW5jSW1wb3J0SW5k
ZXg7CisgICAgICAgICAgICBmdW5jSW1wb3J0U2lnbmF0dXJlKys7CisgICAgICAgIH0KKyAgICB9
CisgICAgYXNzZXJ0KGZ1bmNJbXBvcnRTaWduYXR1cmUgPT0gZnVuY0ltcG9ydFNpZ25hdHVyZXMu
ZGF0YSgpICsgbnVtYmVyT2ZGdW5jSW1wb3J0U2lnbmF0dXJlcyk7CisKKyAgICBtX21vZHVsZS0+
bV9mdW5jSW1wb3J0U2lnbmF0dXJlcyA9IFdURjo6bW92ZShmdW5jSW1wb3J0U2lnbmF0dXJlcyk7
Cit9CisKK3ZvaWQgTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbFNlY3Rpb24oKQoreworICAgIHVp
bnQzMl90IG51bWJlck9mSTMyWmVybyA9IG1fcmVhZGVyLmltbVUzMigpOworICAgIHVpbnQzMl90
IG51bWJlck9mRjMyWmVybyA9IG1fcmVhZGVyLmltbVUzMigpOworICAgIHVpbnQzMl90IG51bWJl
ck9mRjY0WmVybyA9IG1fcmVhZGVyLmltbVUzMigpOworICAgIHVpbnQzMl90IG51bWJlck9mSTMy
SW1wb3J0ID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGMzJJbXBv
cnQgPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICB1aW50MzJfdCBudW1iZXJPZkY2NEltcG9ydCA9
IG1fcmVhZGVyLmltbVUzMigpOworICAgIHVpbnQzMl90IG51bWJlck9mR2xvYmFsVmFycyA9IG51
bWJlck9mSTMyWmVybyArIG51bWJlck9mRjMyWmVybyArIG51bWJlck9mRjY0WmVybyArIG51bWJl
ck9mSTMySW1wb3J0ICsgbnVtYmVyT2ZGMzJJbXBvcnQgKyBudW1iZXJPZkY2NEltcG9ydDsKKwor
ICAgIFZlY3RvcjxUeXBlPiBnbG9iYWxUeXBlcyhudW1iZXJPZkdsb2JhbFZhcnMpOworICAgIHNp
emVfdCBnbG9iYWxUeXBlSW5kZXggPSAwOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBu
dW1iZXJPZkkzMlplcm87ICsraSkKKyAgICAgICAgZ2xvYmFsVHlwZXNbZ2xvYmFsVHlwZUluZGV4
KytdID0gVHlwZTo6STMyOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkYz
Mlplcm87ICsraSkKKyAgICAgICAgZ2xvYmFsVHlwZXNbZ2xvYmFsVHlwZUluZGV4KytdID0gVHlw
ZTo6RjMyOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkY2NFplcm87ICsr
aSkKKyAgICAgICAgZ2xvYmFsVHlwZXNbZ2xvYmFsVHlwZUluZGV4KytdID0gVHlwZTo6RjY0Owor
ICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkkzMkltcG9ydDsgKytpKSB7Cisg
ICAgICAgIHdoaWxlIChtX3JlYWRlci5zaW5nbGVDaGFyKCkpIHsgfQorICAgICAgICBnbG9iYWxU
eXBlc1tnbG9iYWxUeXBlSW5kZXgrK10gPSBUeXBlOjpJMzI7CisgICAgfQorICAgIGZvciAodWlu
dDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkYzMkltcG9ydDsgKytpKSB7CisgICAgICAgIHdoaWxl
IChtX3JlYWRlci5zaW5nbGVDaGFyKCkpIHsgfQorICAgICAgICBnbG9iYWxUeXBlc1tnbG9iYWxU
eXBlSW5kZXgrK10gPSBUeXBlOjpGMzI7CisgICAgfQorICAgIGZvciAodWludDMyX3QgaSA9IDA7
IGkgPCBudW1iZXJPZkY2NEltcG9ydDsgKytpKSB7CisgICAgICAgIHdoaWxlIChtX3JlYWRlci5z
aW5nbGVDaGFyKCkpIHsgfQorICAgICAgICBnbG9iYWxUeXBlc1tnbG9iYWxUeXBlSW5kZXgrK10g
PSBUeXBlOjpGNjQ7CisgICAgfQorICAgIG1fbW9kdWxlLT5tX2dsb2JhbFR5cGVzID0gV1RGOjpt
b3ZlKGdsb2JhbFR5cGVzKTsKK30KKwordm9pZCBNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25E
ZWNsYXJhdGlvblNlY3Rpb24oKQoreworICAgIHVpbnQzMl90IG51bWJlck9mRnVuY3Rpb25zID0g
bV9yZWFkZXIuaW1tVTMyKCk7CisgICAgVmVjdG9yPHVpbnQzMl90PiBmdW5jU2lnbmF0dXJlcyhu
dW1iZXJPZkZ1bmN0aW9ucyk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9m
RnVuY3Rpb25zOyArK2kpCisgICAgICAgIGZ1bmNTaWduYXR1cmVzW2ldID0gbV9yZWFkZXIuaW1t
VTMyKCk7CisKKyAgICBtX21vZHVsZS0+bV9mdW5jU2lnbmF0dXJlcyA9IFdURjo6bW92ZShmdW5j
U2lnbmF0dXJlcyk7Cit9CisKK3ZvaWQgTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uUG9pbnRl
clRhYmxlcygpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jUHRyVGFibGVzID0gbV9yZWFk
ZXIuaW1tVTMyKCk7CisgICAgVmVjdG9yPE1vZHVsZTo6RnVuY1B0clRhYmxlPiBmdW5jUHRyVGFi
bGVzKG51bWJlck9mRnVuY1B0clRhYmxlcyk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IG51bWJlck9mRnVuY1B0clRhYmxlczsgKytpKSB7CisgICAgICAgIGZ1bmNQdHJUYWJsZXNbaV0u
c2lnbmF0dXJlSW5kZXggPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICAgICAgdWludDMyX3QgbnVt
RWxlbWVudHMgPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICAgICAgVmVjdG9yPHVpbnQzMl90PiBl
bGVtZW50cyhudW1FbGVtZW50cyk7CisgICAgICAgIGZvciAodWludDMyX3QgaiA9IDA7IGogPCBu
dW1FbGVtZW50czsgKytqKQorICAgICAgICAgICAgZWxlbWVudHNbal0gPSBtX3JlYWRlci5pbW1V
MzIoKTsKKyAgICAgICAgZnVuY1B0clRhYmxlc1tpXS5lbGVtZW50cyA9IFdURjo6bW92ZShlbGVt
ZW50cyk7CisgICAgfQorCisgICAgbV9tb2R1bGUtPm1fZnVuY1B0clRhYmxlcyA9IFdURjo6bW92
ZShmdW5jUHRyVGFibGVzKTsKK30KKwordm9pZCBNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25E
ZWZpbml0aW9uU2VjdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX21vZHVsZS0+bV9mdW5jU2lnbmF0dXJlcy5z
aXplKCk7ICsraSkKKyAgICAgICAgcGFyc2VGdW5jdGlvbkRlZmluaXRpb24odm0sIGdsb2JhbE9i
amVjdCwgaSk7Cit9CisKK3ZvaWQgTW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydFNlY3Rpb24oVk0m
IHZtKQoreworICAgIHN3aXRjaCAobV9yZWFkZXIuZXhwb3J0Rm9ybWF0KCkpIHsKKyAgICBjYXNl
IEV4cG9ydEZvcm1hdDo6RGVmYXVsdDogeworICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4
ID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZGVmYXVsdCIpOyAvLyBUT0RPOiBVc2Ugb3RoZXIg
bmFtZXMKKyAgICAgICAgbV9tb2R1bGUtPnB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwgbV9tb2R1
bGUtPm1fZnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLmdldCgpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgRXhwb3J0Rm9ybWF0OjpSZWNvcmQ6IHsKKyAgICAgICAgdWludDMyX3Qg
bnVtYmVyT2ZFeHBvcnRzID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgICAgIGZvciAodWludDMy
X3QgZXhwb3J0SW5kZXggPSAwOyBleHBvcnRJbmRleCA8IG51bWJlck9mRXhwb3J0czsgKytleHBv
cnRJbmRleCkgeworICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgICAgICAg
ICAgd2hpbGUgKGNoYXIgYyA9IG1fcmVhZGVyLnNpbmdsZUNoYXIoKSkKKyAgICAgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZChjKTsKKyAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgg
PSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBidWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAg
ICAgICAgbV9tb2R1bGUtPnB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwgbV9tb2R1bGUtPm1fZnVu
Y3Rpb25zW2Z1bmN0aW9uSW5kZXhdLmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9Cit9CisKK3ZvaWQgTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVmaW5pdGlv
bihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHNpemVfdCBmdW5jdGlvbklu
ZGV4KQoreworICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IFdlYkFzc2Vt
Ymx5RXhlY3V0YWJsZTo6Y3JlYXRlKHZtLCBTb3VyY2VDb2RlKCkpOworICAgIHsKKyAgICAgICAg
RGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgICAgICBSZWZQdHI8V2ViQXNzZW1ibHlDb2Rl
QmxvY2s+IGNvZGVCbG9jayA9IGFkb3B0UmVmKG5ldyBXZWJBc3NlbWJseUNvZGVCbG9jayhleGVj
dXRhYmxlLCBnbG9iYWxPYmplY3QpKTsKKyAgICAgICAgRnVuY3Rpb25QYXJzZXIgZnVuY3Rpb25Q
YXJzZXIoJnZtLCBjb2RlQmxvY2suZ2V0KCksIG1fbW9kdWxlLCBtX3JlYWRlci5jdXJzb3IoKSk7
CisgICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZShmdW5jdGlvblBhcnNlci5jb21waWxlRnVu
Y3Rpb24odm0sIGZ1bmN0aW9uSW5kZXgpKTsKKyAgICAgICAgZXhlY3V0YWJsZS0+aW5zdGFsbENv
ZGUoY29kZUJsb2NrLmdldCgpKTsKKworICAgICAgICBtX3JlYWRlci5zZXRDdXJzb3IoZnVuY3Rp
b25QYXJzZXIucmVhZGVyKCkuY3Vyc29yKCkpOyAvLyBGSVhNRTogaGFja3kKKyAgICB9CisKKyAg
ICBKU0Z1bmN0aW9uKiBqc0Z1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBleGVjdXRh
YmxlLCBnbG9iYWxPYmplY3QpOworICAgIG1fbW9kdWxlLT5tX2Z1bmN0aW9ucy5hcHBlbmQoV3Jp
dGVCYXJyaWVyPEpTRnVuY3Rpb24+KHZtLCBtX21vZHVsZSwganNGdW5jdGlvbikpOworfQorCitN
b2R1bGUqIGNvbXBpbGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJ1ZmZl
cikKK3sKKyAgICBNb2R1bGVQYXJzZXIgbW9kdWxlUGFyc2VyOworICAgIHJldHVybiBtb2R1bGVQ
YXJzZXIucGFyc2UoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBidWZm
ZXIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZlM2Q3NzQyYTBmYjRh
MmRhYjcxZTAxZTk1OTU1NzAyZTJiYjNjMDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgKQEAgLTAsMCArMSw3NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgTGljZW5zZWQg
dW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cisg
eW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBM
aWNlbnNlLgorIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgaHR0
cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyBVbmxlc3MgcmVxdWly
ZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisg
ZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElT
IiBCQVNJUywKKyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwg
ZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVj
aWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgbGltaXRhdGlvbnMgdW5k
ZXIgdGhlIExpY2Vuc2UuCisqLworCisjaWZuZGVmIFdhc21Nb2R1bGVQYXJzZXJfaAorI2RlZmlu
ZSBXYXNtTW9kdWxlUGFyc2VyX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAi
V2FzbU1vZHVsZS5oIgorI2luY2x1ZGUgIldhc21SZWFkZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK25hbWVzcGFjZSBXYXNtIHsKKworY2xhc3MgTW9kdWxlUGFyc2VyIHsKK3B1YmxpYzoKKyAg
ICBNb2R1bGUqIHBhcnNlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBjb25zdCBWZWN0b3I8Y2hhcj4m
IGJ1ZmZlcik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBwYXJzZUNvbnN0YW50UG9vbFNlY3Rpb24o
KTsKKyAgICB2b2lkIHBhcnNlU2lnbmF0dXJlU2VjdGlvbigpOworICAgIHZvaWQgcGFyc2VGdW5j
dGlvbkltcG9ydFNlY3Rpb24oKTsKKyAgICB2b2lkIHBhcnNlR2xvYmFsU2VjdGlvbigpOworICAg
IHZvaWQgcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uU2VjdGlvbigpOworICAgIHZvaWQgcGFyc2VG
dW5jdGlvblBvaW50ZXJUYWJsZXMoKTsKKyAgICB2b2lkIHBhcnNlRnVuY3Rpb25EZWZpbml0aW9u
U2VjdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBwYXJzZUV4cG9ydFNlY3Rp
b24oVk0mKTsKKworICAgIHZvaWQgcGFyc2VGdW5jdGlvbkRlZmluaXRpb24oVk0mLCBKU0dsb2Jh
bE9iamVjdCosIHNpemVfdCBmdW5jdGlvbkluZGV4KTsKKworICAgIE1vZHVsZSogbV9tb2R1bGU7
IC8vIEZJWE1FOiBzaG91bGRuJ3QgYmUgYSBzdGF0ZQorICAgIFJlYWRlciBtX3JlYWRlcjsKK307
CisKK0pTX0VYUE9SVF9QUklWQVRFIE1vZHVsZSogY29tcGlsZShFeGVjU3RhdGUqLCBjb25zdCBW
ZWN0b3I8Y2hhcj4mIGJ1ZmZlcik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNl
bmRpZiAvLyBXYXNtTW9kdWxlUGFyc2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21PcGNvZGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T3Bjb2Rlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJkMTNiNzEyY2ZjNjVkN2E4NmZkMGI5OTQ3MGRkMWE3NjMw
ZTcxY2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T3Bjb2Rlcy5oCkBAIC0wLDAgKzEsNDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLyoKKyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2Us
IFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxl
IGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgWW91IG1heSBvYnRhaW4g
YSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5z
ZXMvTElDRU5TRS0yLjAKKworIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBh
Z3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGlj
ZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIFdJVEhPVVQgV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk
LgorIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBw
ZXJtaXNzaW9ucyBhbmQKKyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisKKyNp
Zm5kZWYgV2FzbU9wY29kZXNfaAorI2RlZmluZSBXYXNtT3Bjb2Rlc19oCisKKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgV2FzbSB7CisKK3N0
YXRpYyBjb25zdCB1aW50MzJfdCBNYWdpY051bWJlciA9IDB4NmQ3MzYxNzc7CisKK2VudW0gY2xh
c3MgU3RtdCA6IHVpbnQ4X3QgeworICAgIFNldExvYywKKyAgICBTZXRHbG8sCisgICAgSTMyU3Rv
cmU4LAorICAgIEkzMlN0b3JlT2ZmOCwKKyAgICBJMzJTdG9yZTE2LAorICAgIEkzMlN0b3JlT2Zm
MTYsCisgICAgSTMyU3RvcmUzMiwKKyAgICBJMzJTdG9yZU9mZjMyLAorICAgIEYzMlN0b3JlLAor
ICAgIEYzMlN0b3JlT2ZmLAorICAgIEY2NFN0b3JlLAorICAgIEY2NFN0b3JlT2ZmLAorICAgIENh
bGxJbnQsCisgICAgQ2FsbEluZCwKKyAgICBDYWxsSW1wLAorICAgIFJldCwKKyAgICBCbG9jaywK
KyAgICBJZlRoZW4sCisgICAgSWZFbHNlLAorICAgIFdoaWxlLAorICAgIERvLAorICAgIExhYmVs
LAorICAgIEJyZWFrLAorICAgIEJyZWFrTGFiZWwsCisgICAgQ29udGludWUsCisgICAgQ29udGlu
dWVMYWJlbCwKKyAgICBTd2l0Y2gsCisKKyAgICBCYWQKK307CisKK2VudW0gY2xhc3MgU3RtdFdp
dGhJbW0gOiB1aW50OF90IHsKKyAgICBTZXRMb2MsCisgICAgU2V0R2xvLAorICAgIFJlc2V2ZWQx
LAorICAgIFJlc2V2ZWQyLAorCisgICAgQmFkCit9OworCitlbnVtIGNsYXNzIFN3aXRjaENhc2Ug
OiB1aW50OF90IHsKKyAgICBDYXNlMCwKKyAgICBDYXNlMSwKKyAgICBDYXNlTiwKKyAgICBEZWZh
dWx0MCwKKyAgICBEZWZhdWx0MSwKKyAgICBEZWZhdWx0TgorfTsKKworZW51bSBjbGFzcyBJMzIg
OiB1aW50OF90IHsKKyAgICBMaXRQb29sLAorICAgIExpdEltbSwKKyAgICBHZXRMb2MsCisgICAg
R2V0R2xvLAorICAgIFNldExvYywKKyAgICBTZXRHbG8sCisgICAgU0xvYWQ4LAorICAgIFNMb2Fk
T2ZmOCwKKyAgICBVTG9hZDgsCisgICAgVUxvYWRPZmY4LAorICAgIFNMb2FkMTYsCisgICAgU0xv
YWRPZmYxNiwKKyAgICBVTG9hZDE2LAorICAgIFVMb2FkT2ZmMTYsCisgICAgTG9hZDMyLAorICAg
IExvYWRPZmYzMiwKKyAgICBTdG9yZTgsCisgICAgU3RvcmVPZmY4LAorICAgIFN0b3JlMTYsCisg
ICAgU3RvcmVPZmYxNiwKKyAgICBTdG9yZTMyLAorICAgIFN0b3JlT2ZmMzIsCisgICAgQ2FsbElu
dCwKKyAgICBDYWxsSW5kLAorICAgIENhbGxJbXAsCisgICAgQ29uZCwKKyAgICBDb21tYSwKKyAg
ICBGcm9tRjMyLAorICAgIEZyb21GNjQsCisgICAgTmVnLAorICAgIEFkZCwKKyAgICBTdWIsCisg
ICAgTXVsLAorICAgIFNEaXYsCisgICAgVURpdiwKKyAgICBTTW9kLAorICAgIFVNb2QsCisgICAg
Qml0Tm90LAorICAgIEJpdE9yLAorICAgIEJpdEFuZCwKKyAgICBCaXRYb3IsCisgICAgTHNoLAor
ICAgIEFyaXRoUnNoLAorICAgIExvZ2ljUnNoLAorICAgIENseiwKKyAgICBMb2dpY05vdCwKKyAg
ICBFcUkzMiwKKyAgICBFcUYzMiwKKyAgICBFcUY2NCwKKyAgICBORXFJMzIsCisgICAgTkVxRjMy
LAorICAgIE5FcUY2NCwKKyAgICBTTGVUaEkzMiwKKyAgICBVTGVUaEkzMiwKKyAgICBMZVRoRjMy
LAorICAgIExlVGhGNjQsCisgICAgU0xlRXFJMzIsCisgICAgVUxlRXFJMzIsCisgICAgTGVFcUYz
MiwKKyAgICBMZUVxRjY0LAorICAgIFNHclRoSTMyLAorICAgIFVHclRoSTMyLAorICAgIEdyVGhG
MzIsCisgICAgR3JUaEY2NCwKKyAgICBTR3JFcUkzMiwKKyAgICBVR3JFcUkzMiwKKyAgICBHckVx
RjMyLAorICAgIEdyRXFGNjQsCisgICAgU01pbiwKKyAgICBVTWluLAorICAgIFNNYXgsCisgICAg
VU1heCwKKyAgICBBYnMsCisKKyAgICBCYWQKK307CisKK2VudW0gY2xhc3MgSTMyV2l0aEltbSA6
IHVpbnQ4X3QgeworICAgIExpdFBvb2wsCisgICAgTGl0SW1tLAorICAgIEdldExvYywKKyAgICBS
ZXNlcnZlZCwKKworICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBGMzIgOiB1aW50OF90IHsKKyAg
ICBMaXRQb29sLAorICAgIExpdEltbSwKKyAgICBHZXRMb2MsCisgICAgR2V0R2xvLAorICAgIFNl
dExvYywKKyAgICBTZXRHbG8sCisgICAgTG9hZCwKKyAgICBMb2FkT2ZmLAorICAgIFN0b3JlLAor
ICAgIFN0b3JlT2ZmLAorICAgIENhbGxJbnQsCisgICAgQ2FsbEluZCwKKyAgICBDb25kLAorICAg
IENvbW1hLAorICAgIEZyb21TMzIsCisgICAgRnJvbVUzMiwKKyAgICBGcm9tRjY0LAorICAgIE5l
ZywKKyAgICBBZGQsCisgICAgU3ViLAorICAgIE11bCwKKyAgICBEaXYsCisgICAgQWJzLAorICAg
IENlaWwsCisgICAgRmxvb3IsCisgICAgU3FydCwKKworICAgIEJhZAorfTsKKworZW51bSBjbGFz
cyBGMzJXaXRoSW1tIDogdWludDhfdCB7CisgICAgTGl0UG9vbCwKKyAgICBHZXRMb2MsCisgICAg
UmVzZXJ2ZWQwLAorICAgIFJlc2VydmVkMSwKKworICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBG
NjQgOiB1aW50OF90IHsKKyAgICBMaXRQb29sLAorICAgIExpdEltbSwKKyAgICBHZXRMb2MsCisg
ICAgR2V0R2xvLAorICAgIFNldExvYywKKyAgICBTZXRHbG8sCisgICAgTG9hZCwKKyAgICBMb2Fk
T2ZmLAorICAgIFN0b3JlLAorICAgIFN0b3JlT2ZmLAorICAgIENhbGxJbnQsCisgICAgQ2FsbElu
ZCwKKyAgICBDYWxsSW1wLAorICAgIENvbmQsCisgICAgQ29tbWEsCisgICAgRnJvbVMzMiwKKyAg
ICBGcm9tVTMyLAorICAgIEZyb21GMzIsCisgICAgTmVnLAorICAgIEFkZCwKKyAgICBTdWIsCisg
ICAgTXVsLAorICAgIERpdiwKKyAgICBNb2QsCisgICAgTWluLAorICAgIE1heCwKKyAgICBBYnMs
CisgICAgQ2VpbCwKKyAgICBGbG9vciwKKyAgICBTcXJ0LAorICAgIENvcywKKyAgICBTaW4sCisg
ICAgVGFuLAorICAgIEFDb3MsCisgICAgQVNpbiwKKyAgICBBVGFuLAorICAgIEFUYW4yLAorICAg
IEV4cCwKKyAgICBMbiwKKyAgICBQb3csCisKKyAgICBCYWQKK307CisKK2VudW0gY2xhc3MgRjY0
V2l0aEltbSA6IHVpbnQ4X3QgeworICAgIExpdFBvb2wsCisgICAgR2V0TG9jLAorICAgIFJlc2Vy
dmVkMCwKKyAgICBSZXNlcnZlZDEsCisKKyAgICBCYWQKK307CisKK2VudW0gY2xhc3MgVm9pZCA6
IHVpbnQ4X3QgeworICAgIENhbGxJbnQsCisgICAgQ2FsbEluZCwKKyAgICBDYWxsSW1wLAorCisg
ICAgQmFkCit9OworCitlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsKKyAgICBJMzIsCisgICAg
RjMyLAorICAgIEY2NAorfTsKKworZW51bSBjbGFzcyBWYXJUeXBlcyA6IHVpbnQ4X3QgeworICAg
IEkzMiA9IDB4MSwKKyAgICBGMzIgPSAweDIsCisgICAgRjY0ID0gMHg0LAorfTsKKworaW5saW5l
IFZhclR5cGVzIG9wZXJhdG9yfCAoVmFyVHlwZXMgbGhzLCBWYXJUeXBlcyByaHMpIHsgcmV0dXJu
IFZhclR5cGVzKHVpbnQ4X3QobGhzKSB8IHVpbnQ4X3QocmhzKSk7IH0KK2lubGluZSBib29sIG9w
ZXJhdG9yJihWYXJUeXBlcyBsaHMsIFZhclR5cGVzIHJocykgeyByZXR1cm4gYm9vbCh1aW50OF90
KGxocykgJiB1aW50OF90KHJocykpOyB9CisKK2VudW0gY2xhc3MgVmFyVHlwZXNXaXRoSW1tIDog
dWludDhfdCB7CisgICAgT25seUkzMiwKKyAgICBSZXNlcnZlZDAsCisgICAgUmVzZXJ2ZWQxLAor
ICAgIFJlc2VydmVkMgorfTsKKworZW51bSBjbGFzcyBSZXR1cm5UeXBlIDogdWludDhfdCB7Cisg
ICAgSTMyID0gdWludDhfdChUeXBlOjpJMzIpLAorICAgIEYzMiA9IHVpbnQ4X3QoVHlwZTo6RjMy
KSwKKyAgICBGNjQgPSB1aW50OF90KFR5cGU6OkY2NCksCisgICAgVm9pZAorfTsKKworY2xhc3Mg
RXhwciB7CitwdWJsaWM6CisgICAgRXhwcigpCisgICAgOiBtX3R5cGUoUmV0dXJuVHlwZSgtMSkp
LCB1IHsgfQorICAgIHsKKyAgICB9CisgICAgRXhwcihJMzIgaTMyKSA6IG1fdHlwZShSZXR1cm5U
eXBlOjpJMzIpIHsgdS5pMzIgPSBpMzI7IH0KKyAgICBFeHByKEYzMiBmMzIpIDogbV90eXBlKFJl
dHVyblR5cGU6OkYzMikgeyB1LmYzMiA9IGYzMjsgfQorICAgIEV4cHIoRjY0IGY2NCkgOiBtX3R5
cGUoUmV0dXJuVHlwZTo6RjY0KSB7IHUuZjY0ID0gZjY0OyB9CisgICAgRXhwcihWb2lkIHYpIDog
bV90eXBlKFJldHVyblR5cGU6OlZvaWQpIHsgdS52ID0gdjsgfQorCisgICAgUmV0dXJuVHlwZSB0
eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgSTMyIGkzMigpIGNvbnN0IHsgcmV0
dXJuIHUuaTMyOyB9CisgICAgRjMyIGYzMigpIGNvbnN0IHsgcmV0dXJuIHUuZjMyOyB9CisgICAg
RjY0IGY2NCgpIGNvbnN0IHsgcmV0dXJuIHUuZjY0OyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0o
RXhwciByaHMpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSByaHMubV90eXBlICYmIHUucmF3ID09
IHJocy51LnJhdzsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShFeHByIHJocykgY29uc3QgeyByZXR1
cm4gISgqdGhpcyA9PSByaHMpOyB9CisKK3ByaXZhdGU6CisgICAgUmV0dXJuVHlwZSBtX3R5cGU7
CisgICAgdW5pb24gVSB7CisgICAgICAgIEkzMiBpMzI7CisgICAgICAgIEYzMiBmMzI7CisgICAg
ICAgIEY2NCBmNjQ7CisgICAgICAgIFZvaWQgdjsKKyAgICAgICAgdWludDhfdCByYXc7CisgICAg
fSB1OworCisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVSkgPT0gc2l6ZW9mKHVpbnQ4X3QpLCAi
RXhhY3Qgb3ZlcmxheSBvZiByYXdfIik7Cit9OworCitzdGF0aWMgY29uc3QgdWludDhfdCBIYXNJ
bW1GbGFnID0gMHg4MDsKK3N0YXRpY19hc3NlcnQodWludDhfdChJMzI6OkJhZCkgPD0gSGFzSW1t
RmxhZywgIk1TQiByZXNlcnZlZCB0byBkaXN0aW5ndWlzaCBJMzIgZnJvbSBJMzJXaXRoSW1tIik7
CitzdGF0aWNfYXNzZXJ0KHVpbnQ4X3QoRjMyOjpCYWQpIDw9IEhhc0ltbUZsYWcsICJNU0IgcmVz
ZXJ2ZWQgdG8gZGlzdGluZ3Vpc2ggRjMyIGZyb20gRjMyV2l0aEltbSIpOworc3RhdGljX2Fzc2Vy
dCh1aW50OF90KEY2NDo6QmFkKSA8PSBIYXNJbW1GbGFnLCAiTVNCIHJlc2VydmVkIHRvIGRpc3Rp
bmd1aXNoIEY2NCBmcm9tIEY2NFdpdGhJbW0iKTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIE9w
V2l0aEltbUJpdHMgPSAyOworc3RhdGljIGNvbnN0IHVpbnQzMl90IE9wV2l0aEltbUxpbWl0ID0g
MSA8PCBPcFdpdGhJbW1CaXRzOworc3RhdGljX2Fzc2VydCh1aW50OF90KEkzMldpdGhJbW06OkJh
ZCkgPD0gT3BXaXRoSW1tTGltaXQsICJJMzJXaXRoSW1tIG9wIGZpdHMiKTsKK3N0YXRpY19hc3Nl
cnQodWludDhfdChGMzJXaXRoSW1tOjpCYWQpIDw9IE9wV2l0aEltbUxpbWl0LCAiRjMyV2l0aElt
bSBvcCBmaXRzIik7CitzdGF0aWNfYXNzZXJ0KHVpbnQ4X3QoRjY0V2l0aEltbTo6QmFkKSA8PSBP
cFdpdGhJbW1MaW1pdCwgIkY2NFdpdGhJbW0gb3AgZml0cyIpOworCitzdGF0aWMgY29uc3QgdW5z
aWduZWQgSW1tQml0cyA9IDU7CitzdGF0aWMgY29uc3QgdWludDMyX3QgSW1tTGltaXQgPSAxIDw8
IEltbUJpdHM7CitzdGF0aWNfYXNzZXJ0KCgxICsgT3BXaXRoSW1tQml0cyArIEltbUJpdHMpID09
IDgsICJCaXRzIG9mIGltbWVkaWF0ZSBvcCBzaG91bGQgYWRkIHVwIHRvIGEgYnl0ZSIpOworCitz
dGF0aWMgaW5saW5lIHVpbnQ4X3QgUGFja09wV2l0aEltbSh1aW50OF90IG9wLCB1aW50OF90IGlt
bSkKK3sKKyAgICBhc3NlcnQob3AgPCBPcFdpdGhJbW1MaW1pdCk7CisgICAgYXNzZXJ0KGltbSA8
IEltbUxpbWl0KTsKKyAgICByZXR1cm4gSGFzSW1tRmxhZyB8ICh1aW50OF90KG9wKSA8PCBJbW1C
aXRzKSB8IGltbTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFRXaXRoSW1tPgorc3RhdGljIGlubGlu
ZSB2b2lkIFVucGFja09wV2l0aEltbSh1aW50OF90IGJ5dGUsIFRXaXRoSW1tKiBvcCwgdWludDhf
dCAqaW1tKQoreworICAgIGFzc2VydChieXRlICYgSGFzSW1tRmxhZyk7CisgICAgKm9wID0gVFdp
dGhJbW0oKGJ5dGUgPj4gSW1tQml0cykgJiAoT3BXaXRoSW1tTGltaXQgLSAxKSk7CisgICAgKmlt
bSA9IGJ5dGUgJiAoSW1tTGltaXQgLSAxKTsKK30KKworY2xhc3MgRXhwcldpdGhJbW0geworcHVi
bGljOgorICAgIEV4cHJXaXRoSW1tKCkKKyAgICAgICAgOiBtX3R5cGUoVHlwZSgtMSkpCisgICAg
eworICAgIH0KKyAgICBFeHByV2l0aEltbShJMzJXaXRoSW1tIGkzMikgOiBtX3R5cGUoVHlwZTo6
STMyKSB7IHUuaTMyID0gaTMyOyB9CisgICAgRXhwcldpdGhJbW0oRjMyV2l0aEltbSBmMzIpIDog
bV90eXBlKFR5cGU6OkYzMikgeyB1LmYzMiA9IGYzMjsgfQorICAgIEV4cHJXaXRoSW1tKEY2NFdp
dGhJbW0gZjY0KSA6IG1fdHlwZShUeXBlOjpGNjQpIHsgdS5mNjQgPSBmNjQ7IH0KKworICAgIFR5
cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIEkzMldpdGhJbW0gaTMyKCkg
Y29uc3QgeyByZXR1cm4gdS5pMzI7IH0KKyAgICBGMzJXaXRoSW1tIGYzMigpIGNvbnN0IHsgcmV0
dXJuIHUuZjMyOyB9CisgICAgRjY0V2l0aEltbSBmNjQoKSBjb25zdCB7IHJldHVybiB1LmY2NDsg
fQorCitwcml2YXRlOgorICAgIFR5cGUgbV90eXBlOworICAgIHVuaW9uIFUgeworICAgICAgICBJ
MzJXaXRoSW1tIGkzMjsKKyAgICAgICAgRjMyV2l0aEltbSBmMzI7CisgICAgICAgIEY2NFdpdGhJ
bW0gZjY0OworICAgICAgICB1aW50OF90IHJhdzsKKyAgICB9IHU7CisKKyAgICBzdGF0aWNfYXNz
ZXJ0KHNpemVvZihVKSA9PSBzaXplb2YodWludDhfdCksICJFeGFjdCBvdmVybGF5IG9mIHJhd18i
KTsKK307CisKK2VudW0gY2xhc3MgRXhwb3J0Rm9ybWF0IDogdWludDhfdCB7CisgICAgRGVmYXVs
dCwKKyAgICBSZWNvcmQKK307CisKK3N0cnVjdCBTaWduYXR1cmUgeworICAgIFJldHVyblR5cGUg
cmV0dXJuVHlwZTsKKyAgICBWZWN0b3I8VHlwZT4gYXJndW1lbnRzOworCisgICAgU2lnbmF0dXJl
KCkgeyB9CisgICAgU2lnbmF0dXJlKFJldHVyblR5cGUgcmV0dXJuVHlwZSkKKyAgICAgICAgOiBy
ZXR1cm5UeXBlKHJldHVyblR5cGUpIHsgfQorICAgIFNpZ25hdHVyZShSZXR1cm5UeXBlIHJldHVy
blR5cGUsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQpCisgICAgICAgIDogcmV0dXJuVHlwZShyZXR1
cm5UeXBlKQorICAgICAgICAsIGFyZ3VtZW50cyhhcmd1bWVudENvdW50KSB7IH0KKyAgICBTaWdu
YXR1cmUoUmV0dXJuVHlwZSByZXR1cm5UeXBlLCBWZWN0b3I8VHlwZT4mJiBhcmd1bWVudHMpCisg
ICAgICAgIDogcmV0dXJuVHlwZShyZXR1cm5UeXBlKQorICAgICAgICAsIGFyZ3VtZW50cyhXVEY6
Om1vdmUoYXJndW1lbnRzKSkgeyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU2lnbmF0
dXJlJiByaHMpIGNvbnN0IHsgcmV0dXJuIHJldHVyblR5cGUgPT0gcmhzLnJldHVyblR5cGUgJiYg
YXJndW1lbnRzID09IHJocy5hcmd1bWVudHM7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
U2lnbmF0dXJlJiByaHMpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gcmhzKTsgfQorCisgICAg
c3RydWN0IEhhc2ggeworICAgICAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgU2lnbmF0dXJlICZz
aWduYXR1cmUpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6
ZW9mKFR5cGUpID09IDEgJiYgc2l6ZW9mKFJldHVyblR5cGUpID09IDEsICJTaGlmdCBtb3JlIik7
CisgICAgICAgICAgICB1aW50MzJfdCBoID0gdWludDhfdChzaWduYXR1cmUucmV0dXJuVHlwZSk7
CisgICAgICAgICAgICBmb3IgKFR5cGUgdCA6IHNpZ25hdHVyZS5hcmd1bWVudHMpCisgICAgICAg
ICAgICAgICAgaCA9ICgoaCA8PCAyKSB8IHVpbnQ4X3QodCkpIF4gKGggPj4gMzApOworICAgICAg
ICAgICAgcmV0dXJuIGg7CisgICAgICAgIH0KKyAgICB9OworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIFdhc21PcGNvZGVzX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21SZWFkZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21SZWFkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOTVlZWJjZTQ0NGE4ZGM4NWY5M2FmMWNk
MjhjYmMxNDljNGIzODJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVJlYWRlci5oCkBAIC0wLDAgKzEsMjAwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hl
IExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyB5b3UgbWF5IG5vdCB1c2Ug
dGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgWW91IG1h
eSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyBodHRwOi8vd3d3LmFwYWNoZS5v
cmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxl
IGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyBkaXN0cmlidXRlZCB1bmRl
ciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIFdJVEhP
VVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBv
ciBpbXBsaWVkLgorIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdv
dmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4K
KyovCisKKyNpZm5kZWYgV2FzbVJlYWRlcl9oCisjZGVmaW5lIFdhc21SZWFkZXJfaAorCisjaW5j
bHVkZSAiV2FzbU9wY29kZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXYXNt
IHsKKworY2xhc3MgUmVhZGVyIHsKK3B1YmxpYzoKKyAgICBSZWFkZXIoKSB7IH0KKyAgICBSZWFk
ZXIoY29uc3QgdWludDhfdCogYmVnaW4pCisgICAgICAgIDogbV9jdXJzb3IoYmVnaW4pCisgICAg
eworICAgIH0KKworICAgIGNvbnN0IHVpbnQ4X3QqIGN1cnNvcigpIGNvbnN0IHsgcmV0dXJuIG1f
Y3Vyc29yOyB9CisgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgdWludDhfdCogY3Vyc29yKSB7IG1f
Y3Vyc29yID0gY3Vyc29yOyB9CisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IFQgZml4ZWRXaWR0aCgp
OworICAgIFN0bXQgc3RtdCgpIHsgcmV0dXJuIHU4PFN0bXQ+KCk7IH0KKyAgICBTd2l0Y2hDYXNl
IHN3aXRjaENhc2UoKSB7IHJldHVybiB1ODxTd2l0Y2hDYXNlPigpOyB9CisgICAgdGVtcGxhdGU8
Y2xhc3MgVCwgY2xhc3MgVFdpdGhJbW0+IGlubGluZSBib29sIGNvZGUoVCosIFRXaXRoSW1tKiwg
dWludDhfdCopOworICAgIFZvaWQgdm9pZEV4cHIoKSB7IHJldHVybiB1ODxWb2lkPigpOyB9Cisg
ICAgRXhwb3J0Rm9ybWF0IGV4cG9ydEZvcm1hdCgpIHsgcmV0dXJuIHU4PEV4cG9ydEZvcm1hdD4o
KTsgfQorICAgIFR5cGUgdHlwZSgpIHsgcmV0dXJuIHU4PFR5cGU+KCk7IH0KKyAgICBSZXR1cm5U
eXBlIHJldHVyblR5cGUoKSB7IHJldHVybiB1ODxSZXR1cm5UeXBlPigpOyB9CisgICAgaW5saW5l
IHVpbnQzMl90IGltbVUzMigpOworICAgIGlubGluZSBpbnQzMl90IGltbVMzMigpOworICAgIGNo
YXIgc2luZ2xlQ2hhcigpIHsgcmV0dXJuICptX2N1cnNvcisrOyB9CisKKyAgICBpbmxpbmUgYm9v
bCBpZkkzMkxpdChjb25zdCBWZWN0b3I8dWludDMyX3Q+JiBpMzJzLCB1aW50MzJfdCopOworCitw
cml2YXRlOgorICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBUIHU4KCkgeyByZXR1cm4gVCgqbV9jdXJz
b3IrKyk7IH0KKworICAgIGNvbnN0IHVpbnQ4X3QqIG1fY3Vyc29yOworfTsKKwordGVtcGxhdGUg
PD4KK2lubGluZSB1aW50MzJfdCBSZWFkZXI6OmZpeGVkV2lkdGg8dWludDMyX3Q+KCkKK3sKKyAg
ICB1aW50MzJfdCB1MzIgPSBtX2N1cnNvclswXSB8IG1fY3Vyc29yWzFdIDw8IDggfCBtX2N1cnNv
clsyXSA8PCAxNiB8IG1fY3Vyc29yWzNdIDw8IDI0OworICAgIG1fY3Vyc29yICs9IDQ7CisgICAg
cmV0dXJuIHUzMjsKK30KKwordGVtcGxhdGUgPD4KK2lubGluZSBmbG9hdCBSZWFkZXI6OmZpeGVk
V2lkdGg8ZmxvYXQ+KCkKK3sKKyAgICB1bmlvbiB7CisgICAgICAgIHVpbnQ4X3QgYXJyWzRdOwor
ICAgICAgICBmbG9hdCBmOworICAgIH0gdSA9IHsgeyBtX2N1cnNvclswXSwgbV9jdXJzb3JbMV0s
IG1fY3Vyc29yWzJdLCBtX2N1cnNvclszXSB9IH07CisgICAgbV9jdXJzb3IgKz0gNDsKKyAgICBy
ZXR1cm4gdS5mOworfQorCit0ZW1wbGF0ZSA8PgoraW5saW5lIGRvdWJsZSBSZWFkZXI6OmZpeGVk
V2lkdGg8ZG91YmxlPigpCit7CisgICAgdW5pb24geworICAgICAgICB1aW50OF90IGFycls4XTsK
KyAgICAgICAgZG91YmxlIGQ7CisgICAgfSB1ID0geyB7IG1fY3Vyc29yWzBdLCBtX2N1cnNvclsx
XSwgbV9jdXJzb3JbMl0sIG1fY3Vyc29yWzNdLCBtX2N1cnNvcls0XSwgbV9jdXJzb3JbNV0sIG1f
Y3Vyc29yWzZdLCBtX2N1cnNvcls3XSB9IH07CisgICAgbV9jdXJzb3IgKz0gODsKKyAgICByZXR1
cm4gdS5kOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVFdpdGhJbW0+Citib29sIFJl
YWRlcjo6Y29kZShUKiB0LCBUV2l0aEltbSogdFdpdGhJbW0sIHVpbnQ4X3QqIGltbSkKK3sKKyAg
ICB1aW50OF90IGJ5dGUgPSAqbV9jdXJzb3IrKzsKKyAgICBpZiAoIShieXRlICYgSGFzSW1tRmxh
ZykpIHsKKyAgICAgICAgKnQgPSBUKGJ5dGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBVbnBhY2tPcFdpdGhJbW0oYnl0ZSwgdFdpdGhJbW0sIGltbSk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitpbmxpbmUgdWludDMyX3QgUmVhZGVyOjppbW1VMzIoKQoreworICAgIHVp
bnQzMl90IHUzMiA9ICptX2N1cnNvcisrOworICAgIGlmICh1MzIgPCAweDgwKQorICAgICAgICBy
ZXR1cm4gdTMyOworCisgICAgdTMyICY9IDB4N2Y7CisKKyAgICBmb3IgKHVuc2lnbmVkIHNoaWZ0
ID0gNzsgdHJ1ZTsgc2hpZnQgKz0gNykgeworICAgICAgICB1aW50MzJfdCBiID0gKm1fY3Vyc29y
Kys7CisgICAgICAgIGlmIChiIDwgMHg4MCkKKyAgICAgICAgICAgIHJldHVybiB1MzIgfCAoYiA8
PCBzaGlmdCk7CisgICAgICAgIHUzMiB8PSAoYiAmIDB4N2YpIDw8IHNoaWZ0OworICAgIH0KK30K
KworaW5saW5lIGludDMyX3QgUmVhZGVyOjppbW1TMzIoKQoreworICAgIHVpbnQzMl90IHUzMiA9
ICptX2N1cnNvcisrOworICAgIGlmICh1MzIgPCAweDgwKQorICAgICAgICByZXR1cm4gaW50MzJf
dCh1MzIpIDw8ICgzMi03KSA+PiAoMzItNyk7CisKKyAgICB1MzIgJj0gMHg3ZjsKKworICAgIGZv
ciAodW5zaWduZWQgc2hpZnQgPSA3OyB0cnVlOyBzaGlmdCArPSA3KSB7CisgICAgICAgIHVpbnQz
Ml90IGIgPSAqbV9jdXJzb3IrKzsKKyAgICAgICAgaWYgKGIgPCAweDgwKSB7CisgICAgICAgICAg
ICB1MzIgfD0gYiA8PCBzaGlmdDsKKyAgICAgICAgICAgIGludCBzaWduRXh0ZW5kID0gKDMyLTcp
IC0gc2hpZnQ7CisgICAgICAgICAgICBpZiAoc2lnbkV4dGVuZCA+IDApCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGludDMyX3QodTMyKSA8PCBzaWduRXh0ZW5kID4+IHNpZ25FeHRlbmQ7CisgICAg
ICAgICAgICByZXR1cm4gaW50MzJfdCh1MzIpOworICAgICAgICB9CisgICAgICAgIHUzMiB8PSAo
YiAmIDB4N2YpIDw8IHNoaWZ0OworICAgIH0KK30KKworaW5saW5lIGJvb2wgUmVhZGVyOjppZkkz
MkxpdChjb25zdCBWZWN0b3I8dWludDMyX3Q+JiBpMzJzLCB1aW50MzJfdCogdTMyKQoreworICAg
IHVpbnQ4X3QgYnl0ZSA9ICptX2N1cnNvcjsKKworICAgIGlmIChieXRlICYgSGFzSW1tRmxhZykg
eworICAgICAgICBJMzJXaXRoSW1tIGkzMldpdGhJbW07CisgICAgICAgIHVpbnQ4X3QgaW1tOwor
ICAgICAgICBVbnBhY2tPcFdpdGhJbW0oYnl0ZSwgJmkzMldpdGhJbW0sICZpbW0pOworCisgICAg
ICAgIGlmIChpMzJXaXRoSW1tID09IEkzMldpdGhJbW06OkxpdEltbSkgeworICAgICAgICAgICAg
bV9jdXJzb3IrKzsKKyAgICAgICAgICAgICp1MzIgPSBpbW07CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpMzJXaXRoSW1tID09IEkzMldpdGhJbW06
OkxpdFBvb2wpIHsKKyAgICAgICAgICAgIG1fY3Vyc29yKys7CisgICAgICAgICAgICAqdTMyID0g
aTMyc1tpbW1dOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKEkzMihieXRlKSA9PSBJMzI6OkxpdElt
bSkgeworICAgICAgICBtX2N1cnNvcisrOworICAgICAgICAqdTMyID0gaW1tVTMyKCk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChJMzIoYnl0ZSkgPT0gSTMyOjpMaXRQ
b29sKSB7CisgICAgICAgIG1fY3Vyc29yKys7CisgICAgICAgICp1MzIgPSBpMzJzW2ltbVUzMigp
XTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIFdhc21SZWFkZXJfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257089</attachid>
            <date>2015-07-20 05:35:53 -0700</date>
            <delta_ts>2015-07-22 15:50:08 -0700</delta_ts>
            <desc>Work in progress. Refactor the function parser. Remove WebAssemblyExecutable.</desc>
            <filename>bug-146064-20150720053440.patch</filename>
            <type>text/plain</type>
            <size>143741</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg2NTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
OWZhNzg4ZjIxZjdmOTg5ZDI1NDdkMTQwYTMyNDRlY2RmNjcwZGI0Li5jMTE3ZGNkMTMyZjJmZTE5
YWFjZDRiMzNmNDEwMWRjODU2NjQ1Mjg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNzMgQEAKKzIwMTUtMDctMjAgIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0Bn
bWFpbC5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBuYXRpdmVseSBzdXBwb3J0IFdlYkFzc2Vt
Ymx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYw
NjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENv
bmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppbmZlcnJlZE5hbWUpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OnNvdXJjZUNvZGVGb3JUb29scyk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6aGFzaEFzU3RyaW5nSWZQb3NzaWJsZSk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29u
ZGl0aW9uYWxseSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6Y29kZVR5cGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVCbG9j
azo6RnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmF0dGVtcHRUb0lubGluZUNh
bGwpOgorICAgICAgICAqIGppdC9KSVREaXNhc3NlbWJsZXIuY3BwOgorICAgICAgICAoSlNDOjpK
SVREaXNhc3NlbWJsZXI6OmR1bXApOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoK
KyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlv
bik6CisgICAgICAgIChmdW5jdGlvbkxvYWRXZWJBc3NlbWJseSk6CisgICAgICAgICogbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0VXBDYWxsKToKKyAg
ICAgICAgKiBwYXJzZXIvU291cmNlUHJvdmlkZXIuaDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1i
bHlTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlTb3Vy
Y2VQcm92aWRlcjo6cmVhbFNvdXJjZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5U291cmNl
UHJvdmlkZXI6OldlYkFzc2VtYmx5U291cmNlUHJvdmlkZXIpOgorICAgICAgICAqIHJ1bnRpbWUv
RXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjppc1dlYkFzc2Vt
Ymx5RXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6Om5ld0NvZGVC
bG9ja0Zvcik6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVj
dXRpb25JbXBsKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4
ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmZ1bmN0aW9uTW9kZSk6Cisg
ICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6aXNCdWlsdGluRnVuY3Rpb24pOgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmlzQ2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9u
KToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpuYW1lKToKKyAgICAgICAgKEpT
Qzo6RnVuY3Rpb25FeGVjdXRhYmxlOjppbmZlcnJlZE5hbWUpOgorICAgICAgICAoSlNDOjpGdW5j
dGlvbkV4ZWN1dGFibGU6Om5hbWVWYWx1ZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0
YWJsZTo6cGFyYW1ldGVyQ291bnQpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6aXNFdmFsRXhlY3V0YWJsZSk6CisgICAgICAg
IChKU0M6OkV4ZWN1dGFibGVCYXNlOjppc0Z1bmN0aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChK
U0M6OkV4ZWN1dGFibGVCYXNlOjppc1Byb2dyYW1FeGVjdXRhYmxlKToKKyAgICAgICAgKiB3YXNt
L1dhc21Db2RlR2VuZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpnZXRJbnRl
cm5hbEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUdlbmVyYXRvcjo6Q29kZUdl
bmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVHZW5lcmF0b3I6OnN0YXJ0RnVuY3Rp
b24pOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlR2VuZXJhdG9yOjplbmRGdW5jdGlvbik6Cisg
ICAgICAgIChKU0M6Oldhc206OkNvZGVHZW5lcmF0b3I6OnNldExvY2FsVHlwZXMpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpDb2RlR2VuZXJhdG9yOjp1bmJveEFyZ3VtZW50KToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6Q29kZUdlbmVyYXRvcjo6c2V0TG9jYWxaZXJvSTMyKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6Q29kZUdlbmVyYXRvcjo6YWRkSTMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUdl
bmVyYXRvcjo6bXVsSTMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUdlbmVyYXRvcjo6cmVn
STMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUdlbmVyYXRvcjo6cmVnRjY0KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6Q29kZUdlbmVyYXRvcjo6c2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpX
YXNtOjpDb2RlR2VuZXJhdG9yOjpnZXRMb2NhbEkzMik6CisgICAgICAgIChKU0M6Oldhc206OkNv
ZGVHZW5lcmF0b3I6OmNhbGxJbnRlcm5hbCk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVHZW5l
cmF0b3I6OnJldHVybkkzMik6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVHZW5lcmF0b3I6OmVt
aXRKdW1wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUdlbmVyYXRvcjo6YnJhbmNoVGVzdEkz
Mik6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVHZW5lcmF0b3I6OmxpbmtKdW1wKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6Q29kZUdlbmVyYXRvcjo6aml0Q29kZSk6CisgICAgICAgIChKU0M6Oldh
c206OkNvZGVHZW5lcmF0b3I6OmFsbG9jYXRlU3BhY2VPblN0YWNrKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6Q29kZUdlbmVyYXRvcjo6ZGVhbGxvY2F0ZVNwYWNlT25TdGFjayk6CisgICAgICAgIChK
U0M6Oldhc206OkNvZGVHZW5lcmF0b3I6OmxvY2FsQWRkcmVzcyk6CisgICAgICAgIChKU0M6Oldh
c206OkNvZGVHZW5lcmF0b3I6OnRlbXBvcmFyeUFkZHJlc3MpOgorICAgICAgICAoSlNDOjpXYXNt
OjpDb2RlR2VuZXJhdG9yOjplbWl0TmFrZWRDYWxsKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1
bGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpmaW5pc2hDcmVhdGlv
bik6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6ZnVuY3Rpb24pOgorICAgICAgICAoSlND
OjpXYXNtOjpNb2R1bGU6OmFycmF5QnVmZmVyRGF0YSk6CisgICAgICAgIChKU0M6Oldhc206Ok1v
ZHVsZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6Z2V0T3du
UHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpwdXQpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpNb2R1bGU6OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TW9kdWxlOjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVs
ZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1
bGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpX
YXNtOjpNb2R1bGU6OmZ1bmN0aW9uSW1wb3J0TmFtZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1v
ZHVsZTo6TW9kdWxlKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZSk6CisgICAgICAgIChK
U0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VDb25zdGFudFBvb2xTZWN0aW9uKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZVNpZ25hdHVyZVNlY3Rpb24pOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25JbXBvcnRTZWN0aW9u
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbFNlY3Rpb24p
OgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWNsYXJh
dGlvblNlY3Rpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlRnVu
Y3Rpb25Qb2ludGVyVGFibGVzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpw
YXJzZUZ1bmN0aW9uRGVmaW5pdGlvblNlY3Rpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1
bGVQYXJzZXI6OnBhcnNlRXhwb3J0U2VjdGlvbik6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVs
ZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpj
b21waWxlKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuaDogQWRkZWQuCisgICAg
ICAgICogd2FzbS9XYXNtT3Bjb2Rlcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6b3Bl
cmF0b3J8ICk6CisgICAgICAgIChKU0M6Oldhc206Om9wZXJhdG9yJik6CisgICAgICAgIChKU0M6
Oldhc206OnVucGFja09wV2l0aEltbSk6CisgICAgICAgIChKU0M6Oldhc206OlNpZ25hdHVyZTo6
U2lnbmF0dXJlKToKKyAgICAgICAgKiB3YXNtL1dhc21QYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpjaGVja1N5bnRheEFuZENhbGN1bGF0ZVNvdXJjZVJhbmdl
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpnZW5lcmF0ZUNvZGUpOgorICAgICAgICAo
SlNDOjpXYXNtOjpQYXJzZXI6OnBhcnNlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpQ
YXJzZXI6OnBhcnNlU2lnbmF0dXJlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpwYXJz
ZVZhcnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6OnBhcnNlU3RtdCk6CisgICAgICAg
IChKU0M6Oldhc206OlBhcnNlcjo6cGFyc2VTZXRMb2NhbFN0bXQpOgorICAgICAgICAoSlNDOjpX
YXNtOjpQYXJzZXI6OnBhcnNlUmV0dXJuU3RtdCk6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNl
cjo6cGFyc2VTdG10TGlzdCk6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjo6cGFyc2VCbG9j
a1N0bXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6OnBhcnNlSWZTdG10KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpwYXJzZUlmRWxzZVN0bXQpOgorICAgICAgICAoSlNDOjpX
YXNtOjpQYXJzZXI6OnBhcnNlRXhwcik6CisgICAgICAgIChKU0M6Oldhc206OlBhcnNlcjo6cGFy
c2VFeHBySTMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpwYXJzZUxpdEltbSk6Cisg
ICAgICAgIChKU0M6Oldhc206OlBhcnNlcjo6cGFyc2VHZXRMb2NhbCk6CisgICAgICAgIChKU0M6
Oldhc206OlBhcnNlcjo6cGFyc2VDYWxsSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpQ
YXJzZXI6OnBhcnNlQmluYXJ5T3BJMzIpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6Omxv
Z0Vycm9yKToKKyAgICAgICAgKiB3YXNtL1dhc21QYXJzZXIuaDogQWRkZWQuCisgICAgICAgIChK
U0M6Oldhc206OlBhcnNlcjo6UGFyc2VyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpy
ZWFkZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpQYXJzZXI6OnNldEVycm9yTWVzc2FnZSk6Cisg
ICAgICAgIChKU0M6Oldhc206OlBhcnNlcjo6aGFzRXJyb3IpOgorICAgICAgICAqIHdhc20vV2Fz
bVJlYWRlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6UmVhZGVyOjpSZWFkZXIpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OmN1cnNvcik6CisgICAgICAgIChKU0M6Oldhc206
OlJlYWRlcjo6c2V0Q3Vyc29yKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVhZGVyOjpzdG10KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6UmVhZGVyOjpzd2l0Y2hDYXNlKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6UmVhZGVyOjp2b2lkRXhwcik6CisgICAgICAgIChKU0M6Oldhc206OlJlYWRlcjo6ZXhw
b3J0Rm9ybWF0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVhZGVyOjp0eXBlKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6UmVhZGVyOjpyZXR1cm5UeXBlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVh
ZGVyOjpzaW5nbGVDaGFyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVhZGVyOjp1OCk6CisgICAg
ICAgIChKU0M6Oldhc206OlJlYWRlcjo6Zml4ZWRXaWR0aDx1aW50MzJfdD4pOgorICAgICAgICAo
SlNDOjpXYXNtOjpSZWFkZXI6OmZpeGVkV2lkdGg8ZmxvYXQ+KToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6UmVhZGVyOjpmaXhlZFdpZHRoPGRvdWJsZT4pOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFk
ZXI6OmNvZGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OmltbVUzMik6CisgICAgICAg
IChKU0M6Oldhc206OlJlYWRlcjo6aW1tUzMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVhZGVy
OjppZkkzMkxpdCk6CisgICAgICAgICogd2FzbS9XYXNtU3ludGF4Q2hlY2tlci5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6V2FzbTo6U3ludGF4Q2hlY2tlcjo6U3ludGF4Q2hlY2tlcik6CisgICAg
ICAgIChKU0M6Oldhc206OlN5bnRheENoZWNrZXI6OnN0YXJ0RnVuY3Rpb24pOgorICAgICAgICAo
SlNDOjpXYXNtOjpTeW50YXhDaGVja2VyOjplbmRGdW5jdGlvbik6CisgICAgICAgIChKU0M6Oldh
c206OlN5bnRheENoZWNrZXI6OnNldExvY2FsVHlwZXMpOgorICAgICAgICAoSlNDOjpXYXNtOjpT
eW50YXhDaGVja2VyOjp1bmJveEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3ludGF4
Q2hlY2tlcjo6c2V0TG9jYWxaZXJvSTMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3ludGF4Q2hl
Y2tlcjo6YWRkSTMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3ludGF4Q2hlY2tlcjo6bXVsSTMy
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3ludGF4Q2hlY2tlcjo6cmVnSTMyKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6U3ludGF4Q2hlY2tlcjo6cmVnRjY0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
U3ludGF4Q2hlY2tlcjo6c2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpTeW50YXhDaGVj
a2VyOjpnZXRMb2NhbEkzMik6CisgICAgICAgIChKU0M6Oldhc206OlN5bnRheENoZWNrZXI6OmNh
bGxJbnRlcm5hbCk6CisgICAgICAgIChKU0M6Oldhc206OlN5bnRheENoZWNrZXI6OnJldHVybkkz
Mik6CisgICAgICAgIChKU0M6Oldhc206OlN5bnRheENoZWNrZXI6OmVtaXRKdW1wKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6U3ludGF4Q2hlY2tlcjo6YnJhbmNoVGVzdEkzMik6CisgICAgICAgIChK
U0M6Oldhc206OlN5bnRheENoZWNrZXI6OmxpbmtKdW1wKToKKwogMjAxNS0wNy0wOCAgSm9zZXBo
IFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBncmFtbWFyIGlz
c3VlIGluIFR5cGVFcnJvciBhdHRlbXB0aW5nIHRvIGNoYW5nZSBhbiB1bmNvbmZpZ3VyYWJsZSBw
cm9wZXJ0eQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25z
L0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3Vy
YXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCmluZGV4IGZlNTZiYzBiMWJmZDYwYzUxYTA1
N2U5NTU0ZDE5ZWQ0ODc0ZjRmNDIuLjk4OTExNDY1MGRhNDI3NjNiMGVhZmNkODg5M2MzZTRjYjJk
NjE3OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9G
ZWF0dXJlRGVmaW5lcy54Y2NvbmZpZworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ29uZmln
dXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKQEAgLTE5OSw2ICsxOTksNyBAQCBFTkFC
TEVfVklERU9fUFJFU0VOVEFUSU9OX01PREVbc2RrPWlwaG9uZSpdID0gRU5BQkxFX1ZJREVPX1BS
RVNFTlRBVElPTl9NT0RFOwogRU5BQkxFX1ZJREVPX1RSQUNLID0gRU5BQkxFX1ZJREVPX1RSQUNL
OwogRU5BQkxFX0RBVEFDVUVfVkFMVUUgPSBFTkFCTEVfREFUQUNVRV9WQUxVRTsKIEVOQUJMRV9W
SUVXX01PREVfQ1NTX01FRElBID0gOworRU5BQkxFX1dBU00gPSA7CiBFTkFCTEVfV0VCR0wgPSBF
TkFCTEVfV0VCR0w7CiBFTkFCTEVfV0VCR0wyID0gOwogRU5BQkxFX1dFQl9BVURJTyA9IEVOQUJM
RV9XRUJfQVVESU87CkBAIC0yMjgsNCArMjI5LDQgQEAgRU5BQkxFX0ZUTF9KSVRbc2RrPWlwaG9u
ZW9zKl0gPSBFTkFCTEVfRlRMX0pJVDsKIAogRU5BQkxFX1NBVFVSQVRFRF9MQVlPVVRfQVJJVEhN
RVRJQyA9IEVOQUJMRV9TQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUM7CiAKLUZFQVRVUkVfREVG
SU5FUyA9ICQoRU5BQkxFXzNEX1RSQU5TRk9STVMpICQoRU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NB
TlZBUykgJChFTkFCTEVfQUNDRUxFUkFURURfT1ZFUkZMT1dfU0NST0xMSU5HKSAkKEVOQUJMRV9B
VkZfQ0FQVElPTlMpICQoRU5BQkxFX0FUVEFDSE1FTlRfRUxFTUVOVCkgJChFTkFCTEVfQ0FDSEVf
UEFSVElUSU9OSU5HKSAkKEVOQUJMRV9DQU5WQVNfUEFUSCkgJChFTkFCTEVfQ0FOVkFTX1BST1hZ
KSAkKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORykgJChFTkFCTEVfRVM2X0FSUk9XRlVOQ1RJT05f
U1lOVEFYKSAkKEVOQUJMRV9FUzZfQ0xBU1NfU1lOVEFYKSAkKEVOQUJMRV9FUzZfVEVNUExBVEVf
TElURVJBTF9TWU5UQVgpICQoRU5BQkxFX0NPTlRFTlRfRklMVEVSSU5HKSAkKEVOQUJMRV9DU1Bf
TkVYVCkgJChFTkFCTEVfQ1NTX0FOSU1BVElPTlNfTEVWRUxfMikgJChFTkFCTEVfQ1NTX0JPWF9E
RUNPUkFUSU9OX0JSRUFLKSAkKEVOQUJMRV9DU1NfQ09NUE9TSVRJTkcpICQoRU5BQkxFX0NTU19E
RVZJQ0VfQURBUFRBVElPTikgJChFTkFCTEVfQ1NTX0dSSURfTEFZT1VUKSAkKEVOQUJMRV9DU1Nf
SU1BR0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0NTU19JTUFHRV9SRVNPTFVUSU9OKSAkKEVOQUJM
RV9DU1NfUkVHSU9OUykgJChFTkFCTEVfQ1NTX1NFTEVDVE9SU19MRVZFTDQpICQoRU5BQkxFX0NT
U19TSEFQRVMpICQoRU5BQkxFX0NTUzNfVEVYVCkgJChFTkFCTEVfQ1NTM19URVhUX0xJTkVfQlJF
QUspICQoRU5BQkxFX0NVUlNPUl9WSVNJQklMSVRZKSAkKEVOQUJMRV9DVVNUT01fU0NIRU1FX0hB
TkRMRVIpICQoRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUKSAkKEVOQUJMRV9EQVRBTElTVF9FTEVN
RU5UKSAkKEVOQUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TKSAkKEVOQUJMRV9ERVRBSUxTX0VMRU1F
TlQpICQoRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTikgJChFTkFCTEVfRE9NNF9FVkVOVFNfQ09O
U1RSVUNUT1IpICQoRU5BQkxFX0VOQ1JZUFRFRF9NRURJQSkgJChFTkFCTEVfRU5DUllQVEVEX01F
RElBX1YyKSAkKEVOQUJMRV9GSUxURVJTX0xFVkVMXzIpICQoRU5BQkxFX0ZPTlRfTE9BRF9FVkVO
VFMpICQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJKSAkKEVOQUJMRV9HQU1FUEFEKSAkKEVOQUJMRV9H
QU1FUEFEX0RFUFJFQ0FURUQpICQoRU5BQkxFX0dFT0xPQ0FUSU9OKSAkKEVOQUJMRV9ISURERU5f
UEFHRV9ET01fVElNRVJfVEhST1RUTElORykgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJM
RV9TRVJWSUNFX0NPTlRST0xTKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9J
TkRFWEVEX0RBVEFCQVNFX0lOX1dPUktFUlMpICQoRU5BQkxFX0lORElFX1VJKSAkKEVOQUJMRV9J
TlBVVF9UWVBFX0NPTE9SKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0NPTE9SX1BPUE9WRVIpICQoRU5B
QkxFX0lOUFVUX1RZUEVfREFURSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRV9JTkNPTVBM
RVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FTE9DQUwpICQoRU5BQkxFX0lOUFVUX1RZ
UEVfTU9OVEgpICQoRU5BQkxFX0lOUFVUX1RZUEVfVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9X
RUVLKSAkKEVOQUJMRV9XSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICQoRU5BQkxFX0lOVEwpICQo
RU5BQkxFX0lPU19HRVNUVVJFX0VWRU5UUykgJChFTkFCTEVfSU9TX1RFWFRfQVVUT1NJWklORykg
JChFTkFCTEVfSU9TX1RPVUNIX0VWRU5UUykgJChFTkFCTEVfTEVHQUNZX0NTU19WRU5ET1JfUFJF
RklYRVMpICQoRU5BQkxFX0xFR0FDWV9OT1RJRklDQVRJT05TKSAkKEVOQUJMRV9MRUdBQ1lfVkVO
RE9SX1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lfV0VCX0FVRElPKSAkKEVOQUJMRV9MRVRURVJQ
UkVTUykgJChFTkFCTEVfTElOS19QUkVGRVRDSCkgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9N
RURJQV9DT05UUk9MU19TQ1JJUFQpICQoRU5BQkxFX01FRElBX1NFU1NJT04pICQoRU5BQkxFX01F
RElBX1NPVVJDRSkgJChFTkFCTEVfTUVESUFfU1RBVElTVElDUykgJChFTkFCTEVfTUVESUFfU1RS
RUFNKSAkKEVOQUJMRV9NRVRFUl9FTEVNRU5UKSAkKEVOQUJMRV9NSFRNTCkgJChFTkFCTEVfTU9V
U0VfQ1VSU09SX1NDQUxFKSAkKEVOQUJMRV9OQVZJR0FUT1JfQ09OVEVOVF9VVElMUykgJChFTkFC
TEVfTkFWSUdBVE9SX0hXQ09OQ1VSUkVOQ1kpICQoRU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5B
QkxFX1BERktJVF9QTFVHSU4pICQoRU5BQkxFX1BJQ1RVUkVfU0laRVMpICQoRU5BQkxFX1BPSU5U
RVJfTE9DSykgJChFTkFCTEVfUFJPTUlTRVMpICQoRU5BQkxFX1BST1hJTUlUWV9FVkVOVFMpICQo
RU5BQkxFX1BVQkxJQ19TVUZGSVhfTElTVCkgJChFTkFCTEVfUVVPVEEpICQoRU5BQkxFX1JFUVVF
U1RfQU5JTUFUSU9OX0ZSQU1FKSAkKEVOQUJMRV9SRVFVRVNUX0FVVE9DT01QTEVURSkgJChFTkFC
TEVfUkVNT1RFX0lOU1BFQ1RPUikgJChFTkFCTEVfUkVTT0xVVElPTl9NRURJQV9RVUVSWSkgJChF
TkFCTEVfUlVCQkVSX0JBTkRJTkcpICQoRU5BQkxFX0NTU19TQ1JPTExfU05BUCkgJChFTkFCTEVf
U1BFRUNIX1NZTlRIRVNJUykgJChFTkFCTEVfU1RSRUFNU19BUEkpICQoRU5BQkxFX1NVQlRMRV9D
UllQVE8pICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVfU1ZHX09URl9DT05WRVJURVIpICQo
RU5BQkxFX1RFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAkKEVOQUJMRV9URU1QTEFURV9FTEVN
RU5UKSAkKEVOQUJMRV9URVhUX0FVVE9TSVpJTkcpICQoRU5BQkxFX1RPVUNIX0VWRU5UUykgJChF
TkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HKSAkKEVOQUJMRV9DU1NfVFJBSUxJTkdfV09SRCkgJChF
TkFCTEVfVVNFUlNFTEVDVF9BTEwpICQoRU5BQkxFX1ZJREVPKSAkKEVOQUJMRV9WSURFT19UUkFD
SykgJChFTkFCTEVfREFUQUNVRV9WQUxVRSkgJChFTkFCTEVfVklFV19NT0RFX0NTU19NRURJQSkg
JChFTkFCTEVfV0VCR0wpICQoRU5BQkxFX1dFQkdMMikgJChFTkFCTEVfV0VCX0FVRElPKSAkKEVO
QUJMRV9XRUJfUkVQTEFZKSAkKEVOQUJMRV9XRUJfU09DS0VUUykgJChFTkFCTEVfV0VCX1RJTUlO
RykgJChFTkFCTEVfV0VCVlRUX1JFR0lPTlMpICQoRU5BQkxFX1hIUl9USU1FT1VUKSAkKEVOQUJM
RV9YU0xUKSAkKEVOQUJMRV9GVExfSklUKSAkKEVOQUJMRV9KSVQpICQoRU5BQkxFX1NBVFVSQVRF
RF9MQVlPVVRfQVJJVEhNRVRJQykgJChFTkFCTEVfVklERU9fUFJFU0VOVEFUSU9OX01PREUpOwor
RkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfVFJBTlNGT1JNUykgJChFTkFCTEVfQUNDRUxF
UkFURURfMkRfQ0FOVkFTKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF9PVkVSRkxPV19TQ1JPTExJTkcp
ICQoRU5BQkxFX0FWRl9DQVBUSU9OUykgJChFTkFCTEVfQVRUQUNITUVOVF9FTEVNRU5UKSAkKEVO
QUJMRV9DQUNIRV9QQVJUSVRJT05JTkcpICQoRU5BQkxFX0NBTlZBU19QQVRIKSAkKEVOQUJMRV9D
QU5WQVNfUFJPWFkpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9FUzZfQVJS
T1dGVU5DVElPTl9TWU5UQVgpICQoRU5BQkxFX0VTNl9DTEFTU19TWU5UQVgpICQoRU5BQkxFX0VT
Nl9URU1QTEFURV9MSVRFUkFMX1NZTlRBWCkgJChFTkFCTEVfQ09OVEVOVF9GSUxURVJJTkcpICQo
RU5BQkxFX0NTUF9ORVhUKSAkKEVOQUJMRV9DU1NfQU5JTUFUSU9OU19MRVZFTF8yKSAkKEVOQUJM
RV9DU1NfQk9YX0RFQ09SQVRJT05fQlJFQUspICQoRU5BQkxFX0NTU19DT01QT1NJVElORykgJChF
TkFCTEVfQ1NTX0RFVklDRV9BREFQVEFUSU9OKSAkKEVOQUJMRV9DU1NfR1JJRF9MQVlPVVQpICQo
RU5BQkxFX0NTU19JTUFHRV9PUklFTlRBVElPTikgJChFTkFCTEVfQ1NTX0lNQUdFX1JFU09MVVRJ
T04pICQoRU5BQkxFX0NTU19SRUdJT05TKSAkKEVOQUJMRV9DU1NfU0VMRUNUT1JTX0xFVkVMNCkg
JChFTkFCTEVfQ1NTX1NIQVBFUykgJChFTkFCTEVfQ1NTM19URVhUKSAkKEVOQUJMRV9DU1MzX1RF
WFRfTElORV9CUkVBSykgJChFTkFCTEVfQ1VSU09SX1ZJU0lCSUxJVFkpICQoRU5BQkxFX0NVU1RP
TV9TQ0hFTUVfSEFORExFUikgJChFTkFCTEVfREFTSEJPQVJEX1NVUFBPUlQpICQoRU5BQkxFX0RB
VEFMSVNUX0VMRU1FTlQpICQoRU5BQkxFX0RBVEFfVFJBTlNGRVJfSVRFTVMpICQoRU5BQkxFX0RF
VEFJTFNfRUxFTUVOVCkgJChFTkFCTEVfREVWSUNFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9ET000
X0VWRU5UU19DT05TVFJVQ1RPUikgJChFTkFCTEVfRU5DUllQVEVEX01FRElBKSAkKEVOQUJMRV9F
TkNSWVBURURfTUVESUFfVjIpICQoRU5BQkxFX0ZJTFRFUlNfTEVWRUxfMikgJChFTkFCTEVfRk9O
VF9MT0FEX0VWRU5UUykgJChFTkFCTEVfRlVMTFNDUkVFTl9BUEkpICQoRU5BQkxFX0dBTUVQQUQp
ICQoRU5BQkxFX0dBTUVQQURfREVQUkVDQVRFRCkgJChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5B
QkxFX0hJRERFTl9QQUdFX0RPTV9USU1FUl9USFJPVFRMSU5HKSAkKEVOQUJMRV9JQ09OREFUQUJB
U0UpICQoRU5BQkxFX1NFUlZJQ0VfQ09OVFJPTFMpICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0Up
ICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0VfSU5fV09SS0VSUykgJChFTkFCTEVfSU5ESUVfVUkp
ICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IpICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1JfUE9Q
T1ZFUikgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVU
SU1FX0lOQ09NUExFVEUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVMT0NBTCkgJChFTkFC
TEVfSU5QVVRfVFlQRV9NT05USCkgJChFTkFCTEVfSU5QVVRfVFlQRV9USU1FKSAkKEVOQUJMRV9J
TlBVVF9UWVBFX1dFRUspICQoRU5BQkxFX1dJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJChFTkFC
TEVfSU5UTCkgJChFTkFCTEVfSU9TX0dFU1RVUkVfRVZFTlRTKSAkKEVOQUJMRV9JT1NfVEVYVF9B
VVRPU0laSU5HKSAkKEVOQUJMRV9JT1NfVE9VQ0hfRVZFTlRTKSAkKEVOQUJMRV9MRUdBQ1lfQ1NT
X1ZFTkRPUl9QUkVGSVhFUykgJChFTkFCTEVfTEVHQUNZX05PVElGSUNBVElPTlMpICQoRU5BQkxF
X0xFR0FDWV9WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9XRUJfQVVESU8pICQoRU5B
QkxFX0xFVFRFUlBSRVNTKSAkKEVOQUJMRV9MSU5LX1BSRUZFVENIKSAkKEVOQUJMRV9NQVRITUwp
ICQoRU5BQkxFX01FRElBX0NPTlRST0xTX1NDUklQVCkgJChFTkFCTEVfTUVESUFfU0VTU0lPTikg
JChFTkFCTEVfTUVESUFfU09VUkNFKSAkKEVOQUJMRV9NRURJQV9TVEFUSVNUSUNTKSAkKEVOQUJM
RV9NRURJQV9TVFJFQU0pICQoRU5BQkxFX01FVEVSX0VMRU1FTlQpICQoRU5BQkxFX01IVE1MKSAk
KEVOQUJMRV9NT1VTRV9DVVJTT1JfU0NBTEUpICQoRU5BQkxFX05BVklHQVRPUl9DT05URU5UX1VU
SUxTKSAkKEVOQUJMRV9OQVZJR0FUT1JfSFdDT05DVVJSRU5DWSkgJChFTkFCTEVfTk9USUZJQ0FU
SU9OUykgJChFTkFCTEVfUERGS0lUX1BMVUdJTikgJChFTkFCTEVfUElDVFVSRV9TSVpFUykgJChF
TkFCTEVfUE9JTlRFUl9MT0NLKSAkKEVOQUJMRV9QUk9NSVNFUykgJChFTkFCTEVfUFJPWElNSVRZ
X0VWRU5UUykgJChFTkFCTEVfUFVCTElDX1NVRkZJWF9MSVNUKSAkKEVOQUJMRV9RVU9UQSkgJChF
TkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpICQoRU5BQkxFX1JFUVVFU1RfQVVUT0NPTVBM
RVRFKSAkKEVOQUJMRV9SRU1PVEVfSU5TUEVDVE9SKSAkKEVOQUJMRV9SRVNPTFVUSU9OX01FRElB
X1FVRVJZKSAkKEVOQUJMRV9SVUJCRVJfQkFORElORykgJChFTkFCTEVfQ1NTX1NDUk9MTF9TTkFQ
KSAkKEVOQUJMRV9TUEVFQ0hfU1lOVEhFU0lTKSAkKEVOQUJMRV9TVFJFQU1TX0FQSSkgJChFTkFC
TEVfU1VCVExFX0NSWVBUTykgJChFTkFCTEVfU1ZHX0ZPTlRTKSAkKEVOQUJMRV9TVkdfT1RGX0NP
TlZFUlRFUikgJChFTkFCTEVfVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICQoRU5BQkxFX1RF
TVBMQVRFX0VMRU1FTlQpICQoRU5BQkxFX1RFWFRfQVVUT1NJWklORykgJChFTkFCTEVfVE9VQ0hf
RVZFTlRTKSAkKEVOQUJMRV9UT1VDSF9JQ09OX0xPQURJTkcpICQoRU5BQkxFX0NTU19UUkFJTElO
R19XT1JEKSAkKEVOQUJMRV9VU0VSU0VMRUNUX0FMTCkgJChFTkFCTEVfVklERU8pICQoRU5BQkxF
X1ZJREVPX1RSQUNLKSAkKEVOQUJMRV9EQVRBQ1VFX1ZBTFVFKSAkKEVOQUJMRV9WSUVXX01PREVf
Q1NTX01FRElBKSAkKEVOQUJMRV9XQVNNKSAkKEVOQUJMRV9XRUJHTCkgJChFTkFCTEVfV0VCR0wy
KSAkKEVOQUJMRV9XRUJfQVVESU8pICQoRU5BQkxFX1dFQl9SRVBMQVkpICQoRU5BQkxFX1dFQl9T
T0NLRVRTKSAkKEVOQUJMRV9XRUJfVElNSU5HKSAkKEVOQUJMRV9XRUJWVFRfUkVHSU9OUykgJChF
TkFCTEVfWEhSX1RJTUVPVVQpICQoRU5BQkxFX1hTTFQpICQoRU5BQkxFX0ZUTF9KSVQpICQoRU5B
QkxFX0pJVCkgJChFTkFCTEVfU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKSAkKEVOQUJMRV9W
SURFT19QUkVTRU5UQVRJT05fTU9ERSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDA2ZTk5NzBjNTJjZTAxMmFjZjM4MDQzMjQzN2YyYzI2ZjUyODhhNzAuLmJjODU2NGI4MDU5NTgw
YjhlZjgxNjc0NGFhYTZhM2IzOTkzNDVhYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0xMDIwLDYgKzEwMjAsMTYgQEAKIAkJNzBFQ0E2MDcxQUZEQkVBMjAwNDQ5NzM5IC8qIFRl
bXBsYXRlUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzBFQ0E2MDIxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuY3Bw
ICovOyB9OwogCQk3MEVDQTYwODFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MDMx
QUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MEVDQTYwOTFBRkRCRUEyMDA0NDk3Mzkg
LyogVGVtcGxhdGVSZWdpc3RyeUtleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0
cnlLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3QjFEOEUzQzFCNTc4MTRFMDA1MkUzODUgLyogV2FzbU1vZHVsZVBhcnNlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IxRDhFM0IxQjU3ODE0QjAw
NTJFMzg1IC8qIFdhc21Nb2R1bGVQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk3QjFEOEUzRDFCNTc4MTUyMDA1MkUzODUgLyogV2FzbU1v
ZHVsZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3QjFEOEUzQTFCNTc4MTRCMDA1MkUzODUgLyogV2FzbU1vZHVsZVBhcnNlci5jcHAgKi87
IH07CisJCTdCMUQ4RTNGMUI1NzlDREQwMDUyRTM4NSAvKiBXYXNtUmVhZGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjFEOEUzRTFCNTc5Q0Q2MDA1
MkUzODUgLyogV2FzbVJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTdCNjE3QTYyMUI1Q0YyNzQwMEEzODAwNSAvKiBXYXNtU3ludGF4Q2hl
Y2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I2
MTdBNjExQjVDRjI2QzAwQTM4MDA1IC8qIFdhc21TeW50YXhDaGVja2VyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0JEMTBDNDQxQjRFRDQ0NTAw
QkQ1NDFBIC8qIFdhc21Nb2R1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0JEMTBDM0YxQjRFRDQzOTAwQkQ1NDFBIC8qIFdhc21Nb2R1bGUuY3Bw
ICovOyB9OworCQk3QkQxMEM0NTFCNEVENDQ5MDBCRDU0MUEgLyogV2FzbU1vZHVsZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JEMTBDNDAxQjRFRDQz
OTAwQkQ1NDFBIC8qIFdhc21Nb2R1bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk3QkQxMEM0NjFCNEVENDRFMDBCRDU0MUEgLyogV2FzbU9wY29k
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRDEw
QzQxMUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNtT3Bjb2Rlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCRjY2NkU3MUI1OTA0QTEwMDczOTQ4NyAv
KiBXYXNtUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdCRjY2NkU1MUI1OTA0OUQwMDczOTQ4NyAvKiBXYXNtUGFyc2VyLmNwcCAqLzsgfTsK
KwkJN0JGNjY2RTgxQjU5MDRBNjAwNzM5NDg3IC8qIFdhc21QYXJzZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCRjY2NkU2MUI1OTA0OUQwMDczOTQ4
NyAvKiBXYXNtUGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJN0JGNjY2RUMxQjU5NzRDNjAwNzM5NDg3IC8qIFdhc21Db2RlR2VuZXJhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkY2NjZF
QTFCNTk3NEJFMDA3Mzk0ODcgLyogV2FzbUNvZGVHZW5lcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzAwOENEQTE4NzEyNEJCMDA5NTVD
MjQgLyogSlNQcm9taXNlRGVmZXJyZWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0MwMDhDRDgxODcxMjRCQjAwOTU1QzI0IC8qIEpTUHJvbWlzZURl
ZmVycmVkLmNwcCAqLzsgfTsKIAkJN0MwMDhDREIxODcxMjRCQjAwOTU1QzI0IC8qIEpTUHJvbWlz
ZURlZmVycmVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QzAwOENEOTE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzAwOENFNzE4NzYz
MUI2MDA5NTVDMjQgLyogTWljcm90YXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QzAwOENFNTE4NzYzMUI2MDA5NTVDMjQgLyogTWljcm90YXNrLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI3NjIs
NiArMjc3MiwxNiBAQAogCQk3MEVDQTYwMjFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdp
c3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZW1wbGF0ZVJl
Z2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzBFQ0E2MDMxQUZEQkVB
MjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MEVDQTYwNDFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZW1wbGF0ZVJlZ2lzdHJ5S2V5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCMUQ4RTNBMUI1NzgxNEIwMDUyRTM4NSAvKiBXYXNt
TW9kdWxlUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdh
c21Nb2R1bGVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QjFEOEUz
QjFCNTc4MTRCMDA1MkUzODUgLyogV2FzbU1vZHVsZVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXYXNtTW9kdWxlUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTdCMUQ4RTNFMUI1NzlDRDYwMDUyRTM4NSAvKiBXYXNtUmVhZGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21SZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJN0I2MTdBNjExQjVDRjI2QzAwQTM4MDA1IC8qIFdhc21TeW50YXhDaGVj
a2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21TeW50YXhDaGVja2Vy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCRDEwQzNGMUI0RUQ0MzkwMEJENTQx
QSAvKiBXYXNtTW9kdWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdhc21Nb2R1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QkQxMEM0MDFC
NEVENDM5MDBCRDU0MUEgLyogV2FzbU1vZHVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXYXNtTW9kdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCRDEw
QzQxMUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNtT3Bjb2Rlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXYXNtT3Bjb2Rlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3QkY2NjZFNTFCNTkwNDlEMDA3Mzk0ODcgLyogV2FzbVBhcnNlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJN0JGNjY2RTYxQjU5MDQ5RDAwNzM5NDg3IC8qIFdhc21QYXJzZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVBhcnNlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3QkY2NjZFQTFCNTk3NEJFMDA3Mzk0ODcgLyogV2FzbUNvZGVH
ZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUNvZGVHZW5l
cmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MwMDhDRDgxODcxMjRCQjAw
OTU1QzI0IC8qIEpTUHJvbWlzZURlZmVycmVkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTUHJvbWlzZURlZmVycmVkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0MwMDhDRDkxODcxMjRCQjAwOTU1QzI0IC8qIEpTUHJvbWlzZURlZmVycmVkLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUHJvbWlzZURlZmVycmVkLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMDA4Q0U1MTg3NjMxQjYwMDk1NUMyNCAvKiBN
aWNyb3Rhc2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWljcm90YXNrLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNjE3LDYgKzM2MzcsNyBAQAogCQkJCTdF
RjZFMEJCMEVCN0ExRUMwMDc5QUZBRiAvKiBydW50aW1lICovLAogCQkJCTE0MTIxMTAwMEE0ODc3
MjYwMDQ4MDI1NSAvKiB0ZXN0cyAqLywKIAkJCQk4NjAzQ0VGMDE0Qzc1M0VGMDBBRTU5RTMgLyog
dG9vbHMgKi8sCisJCQkJN0JEMTBDM0MxQjRFRDQxRDAwQkQ1NDFBIC8qIHdhc20gKi8sCiAJCQkJ
ODZFQUM0OEMwRjkzRThCOTAwOEVDOTQ4IC8qIHlhcnIgKi8sCiAJCQkpOwogCQkJbmFtZSA9IEph
dmFTY3JpcHRDb3JlOwpAQCAtNDI3OSw2ICs0MzAwLDIzIEBACiAJCQlwYXRoID0gZGlzYXNzZW1i
bGVyL0FSTXY3OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJN0JEMTBDM0Mx
QjRFRDQxRDAwQkQ1NDFBIC8qIHdhc20gKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNo
aWxkcmVuID0gKAorCQkJCTdCNjE3QTYxMUI1Q0YyNkMwMEEzODAwNSAvKiBXYXNtU3ludGF4Q2hl
Y2tlci5oICovLAorCQkJCTdCRjY2NkVBMUI1OTc0QkUwMDczOTQ4NyAvKiBXYXNtQ29kZUdlbmVy
YXRvci5oICovLAorCQkJCTdCRjY2NkU1MUI1OTA0OUQwMDczOTQ4NyAvKiBXYXNtUGFyc2VyLmNw
cCAqLywKKwkJCQk3QkY2NjZFNjFCNTkwNDlEMDA3Mzk0ODcgLyogV2FzbVBhcnNlci5oICovLAor
CQkJCTdCMUQ4RTNBMUI1NzgxNEIwMDUyRTM4NSAvKiBXYXNtTW9kdWxlUGFyc2VyLmNwcCAqLywK
KwkJCQk3QjFEOEUzQjFCNTc4MTRCMDA1MkUzODUgLyogV2FzbU1vZHVsZVBhcnNlci5oICovLAor
CQkJCTdCRDEwQzNGMUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNtTW9kdWxlLmNwcCAqLywKKwkJCQk3
QkQxMEM0MDFCNEVENDM5MDBCRDU0MUEgLyogV2FzbU1vZHVsZS5oICovLAorCQkJCTdCRDEwQzQx
MUI0RUQ0MzkwMEJENTQxQSAvKiBXYXNtT3Bjb2Rlcy5oICovLAorCQkJCTdCMUQ4RTNFMUI1NzlD
RDYwMDUyRTM4NSAvKiBXYXNtUmVhZGVyLmggKi8sCisJCQkpOworCQkJcGF0aCA9IHdhc207CisJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk3RTM5RDgxRDBFQzM4RUZBMDAzQUYx
MUEgLyogYnl0ZWNvbXBpbGVyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKQEAgLTU2NTksNiArNTY5Nyw3IEBACiAJCQkJQTVFQTcxMDgxOUY2REU3QTAwOThGNUVD
IC8qIGdlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBp
biBIZWFkZXJzICovLAogCQkJCUE1RUE3MTBBMTlGNkRFN0UwMDk4RjVFQyAvKiBnZW5lcmF0ZV9v
YmpjX2ludGVybmFsX2hlYWRlci5weSBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MTBDMTlGNkRF
ODIwMDk4RjVFQyAvKiBvYmpjX2dlbmVyYXRvci5weSBpbiBIZWFkZXJzICovLAorCQkJCTdCMUQ4
RTNGMUI1NzlDREQwMDUyRTM4NSAvKiBXYXNtUmVhZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NUVBNzEwOTE5RjZERTdDMDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19oZWFkZXIucHkgaW4gSGVh
ZGVycyAqLywKIAkJCQlDNDcwM0NENjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yLnB5IGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzQ3MDNDQzAxOTI4NDQ5NjAwMTNGQkVBIC8qIGdlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSBpbiBIZWFkZXJzICovLApAQCAtNjAxMSw2ICs2
MDUwLDcgQEAKIAkJCQlCQzE4QzQwNTBFMTZGNUNEMDBCMzQ0NjAgLyogRnVuY3Rpb25Qcm90b3R5
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQkUyQ0FFMTRFOTg1QUEwMDA1OTNBRCAvKiBHQ0Fz
c2VydGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDMwMTVBOERDRTIwMDhGMzYzRSAv
KiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCRDEwQzQ1MUI0
RUQ0NDkwMEJENTQxQSAvKiBXYXNtTW9kdWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEVDMEVD
NzFBQTBEN0RBMDBCNkFBRkEgLyogU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkI2NkFDMTdCNkI1M0YwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRl
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2QUQxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5j
b21pbmdSZWZDb3VudGVkSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTQxLDYgKzYxODEs
NyBAQAogCQkJCTBGRTA1MDFBMUFBOTA5MTEwMEQzM0IzMyAvKiBHZW5lcmljQXJndW1lbnRzSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MkIwRTE2RjVDRDAwQjM0NDYwIC8qIEpT
Q0pTVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjRCMjcyMUE3ODRCQUYwMDZFNEU2NiAv
KiBCaW5hcnlTd2l0Y2guaCBpbiBIZWFkZXJzICovLAorCQkJCTdCRjY2NkVDMUI1OTc0QzYwMDcz
OTQ4NyAvKiBXYXNtQ29kZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY1QTMwRjEx
MzUwMDdFMTAwQ0RCNDlFIC8qIEpTQ0pTVmFsdWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQxRDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDbGFzc1JlZi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODZFM0M2MTMxNjdCQUJENzAwNkQ3NjBBIC8qIEpTQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02MTU0LDYgKzYxOTUsNyBAQAogCQkJCTk3ODgwMTQxMTQ3MUFEOTIwMDQxQjAxNiAv
KiBKU0RhdGVNYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkE3RjY4ODE2MDQzMkQ0MDBGNzZC
OTggLyogSlNEZXN0cnVjdGlibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE0
MTY3QkFCRDcwMDZENzYwQSAvKiBKU0V4cG9ydC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0JEMTBD
NDYxQjRFRDQ0RTAwQkQ1NDFBIC8qIFdhc21PcGNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
N0I0QUNBRjE0ODRDOUNFMDBCMzhBMzYgLyogSlNFeHBvcnRNYWNyb3MuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkI2NkVGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyQjY2RjAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5
LmggaW4gSGVhZGVycyAqLywKQEAgLTYxNjEsOSArNjIwMywxMSBAQAogCQkJCUE3MjAyOEJBMTc5
NzYwM0QwMDk4MDI4QyAvKiBKU0Z1bmN0aW9uSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQjY2RjExN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0IxRDhFM0MxQjU3
ODE0RTAwNTJFMzg1IC8qIFdhc21Nb2R1bGVQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkI2NkYzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVj
dG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjQxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY1QTEyNzQxOTJEOUZERjAwODc2NEEzIC8qIERGR0RvZXNHQy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJN0I2MTdBNjIxQjVDRjI3NDAwQTM4MDA1IC8qIFdhc21TeW50YXhDaGVja2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCNjZGNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkY2MTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDNDIxMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0dsb2JhbE9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzE1LDYgKzYzNTksNyBAQAogCQkJCTBGRkI5MjIwMTZE
MDMzQjcwMDU1QTVEQiAvKiBOb2RlQ29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
MEVDQTYwOTFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0M0YwRTE2RjVDRDAwQjM0NDYwIC8qIE5vZGVzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk3QkY2NjZFODFCNTkwNEE2MDA3Mzk0ODcgLyogV2FzbVBhcnNlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTlFNDVBMjgxOEExQjI1OTAwMjZEODhGIC8qIE5vbmRldGVybWluaXN0
aWNJbnB1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NEMDIxOUFEQTQxMTAwNkFDNzJBIC8q
IERGR05haXZlRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDEwRTE2RjVD
RDAwQjM0NDYwIC8qIE51bWJlckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTcxODgs
NiArNzIzMyw3IEBACiAJCQkJMEZDMDk3QTExNDZCMjhDQTAwQ0YyNDQyIC8qIERGR1RodW5rcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzQjRBOTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJ
ZFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzA5RkI4NjcxQUUzMzVDNjAwMzlEMDY5
IC8qIEpTV2Vha1NldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QkQxMEM0NDFCNEVENDQ1MDBC
RDU0MUEgLyogV2FzbU1vZHVsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMyNzE3RDUx
RjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkQ4QTMyOTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTc2NjIxOTZCOEY5
RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc1MDUsNiAr
NzU1MSw3IEBACiAJCQkJMEYxMzkxMjkxNjc3MUMzMzAwOUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNv
ZGVTZXF1ZW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlBRjE2NkFEMzVDMDAwRjVC
QTMgLyogUHJvZmlsZXJDb21waWxhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlC
MDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbktpbmQuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJN0IxRDhFM0QxQjU3ODE1MjAwNTJFMzg1IC8qIFdhc21Nb2R1bGVQYXJzZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjExNjZBRDM1QzAwMEY1QkEzIC8qIFByb2Zp
bGVyQ29tcGlsZWRCeXRlY29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMjE2NkFE
MzVDMDAwRjVCQTMgLyogUHJvZmlsZXJEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTc2MDEsNiArNzY0OCw3IEBACiAJCQkJMEYyQjlDRUExOUQwQkE3RDAw
QjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzMy
MTU4RUJENTgwMDRDQjlGRiAvKiBVRGlzODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTc2RjI3OTQxNUYxM0M5NjAwNTE3RDY3IC8qIFVubGlua2VkQ29kZUJsb2NrLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTdCRjY2NkU3MUI1OTA0QTEwMDczOTQ4NyAvKiBXYXNtUGFyc2Vy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1OUY4OTM5MTg5MUYyOUYwMEQ1Q0NEQyAvKiBVbmxp
bmtlZEluc3RydWN0aW9uU3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzU3NkQyMThF
MUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjI0RTU1ODE3Rjc0RURCMDBBQkIyMTcgLyogVmFsdWVSZWNvdmVyeS5jcHAg
aW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAKaW5kZXggMTI0MzllMDhjYWUxMDg2NmU5M2Q5YTc0NmZjMmM1N2JiZmE4MmQwYy4uMWY4
NmU5NDM2N2YzMjgyODcxNTI1YTU3MGQwZGQ3OGRhMzYyNjUwMiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTg2LDYgKzg2LDkgQEAgQ1N0cmlu
ZyBDb2RlQmxvY2s6OmluZmVycmVkTmFtZSgpIGNvbnN0CiAgICAgY2FzZSBFdmFsQ29kZToKICAg
ICAgICAgcmV0dXJuICI8ZXZhbD4iOwogICAgIGNhc2UgRnVuY3Rpb25Db2RlOgorICAgICAgICAv
LyBGSVhNRTogaGFja3kKKyAgICAgICAgaWYgKG93bmVyRXhlY3V0YWJsZSgpLT5pc1dlYkFzc2Vt
Ymx5RXhlY3V0YWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuICI8d2ViYXNzZW1ibHk+IjsKICAg
ICAgICAgcmV0dXJuIGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUo
KSktPmluZmVycmVkTmFtZSgpLnV0ZjgoKTsKICAgICBkZWZhdWx0OgogICAgICAgICBDUkFTSCgp
OwpAQCAtMTE5LDYgKzEyMiwxMCBAQCBDU3RyaW5nIENvZGVCbG9jazo6c291cmNlQ29kZUZvclRv
b2xzKCkgY29uc3QKICAgICAKICAgICBTb3VyY2VQcm92aWRlciogcHJvdmlkZXIgPSBzb3VyY2Uo
KTsKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25F
eGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpOworI2lmIEVOQUJMRShXQVNNKQorICAgIGlm
IChleGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5KCkpCisgICAgICAgIHJldHVybiAiZnVuY3Rpb24g
W3dlYmFzc2VtYmx5XSI7CisjZW5kaWYKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSog
dW5saW5rZWQgPSBleGVjdXRhYmxlLT51bmxpbmtlZEV4ZWN1dGFibGUoKTsKICAgICB1bnNpZ25l
ZCB1bmxpbmtlZFN0YXJ0T2Zmc2V0ID0gdW5saW5rZWQtPnN0YXJ0T2Zmc2V0KCk7CiAgICAgdW5z
aWduZWQgbGlua2VkU3RhcnRPZmZzZXQgPSBleGVjdXRhYmxlLT5zb3VyY2UoKS5zdGFydE9mZnNl
dCgpOwpAQCAtMTM3LDYgKzE0NCwxMCBAQCBDU3RyaW5nIENvZGVCbG9jazo6c291cmNlQ29kZU9u
T25lTGluZSgpIGNvbnN0CiAKIENTdHJpbmcgQ29kZUJsb2NrOjpoYXNoQXNTdHJpbmdJZlBvc3Np
YmxlKCkgY29uc3QKIHsKKyNpZiBFTkFCTEUoV0FTTSkKKyAgICBpZiAob3duZXJFeGVjdXRhYmxl
KCktPmlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCkpCisgICAgICAgIHJldHVybiAiPG5vLWhhc2g+
IjsKKyNlbmRpZgogICAgIGlmIChoYXNIYXNoKCkgfHwgaXNTYWZlVG9Db21wdXRlSGFzaCgpKQog
ICAgICAgICByZXR1cm4gdG9DU3RyaW5nKGhhc2goKSk7CiAgICAgcmV0dXJuICI8bm8taGFzaD4i
OwpAQCAtMjE4Myw2ICsyMTk0LDcxIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGluCiAgICAgbV9o
ZWFwLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChzaXplb2YoQ29kZUJsb2NrKSArIG1faW5z
dHJ1Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikpOwogfQogCitDb2RlQmxvY2s6
OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCisgICAgOiBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPnZt
KCksIG93bmVyRXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0KQorICAgICwgbV9oZWFwKCZtX2dsb2Jh
bE9iamVjdC0+dm0oKS5oZWFwKQorICAgICwgbV9udW1DYWxsZWVSZWdpc3RlcnMoMCkgLy8gRklY
TUUKKyAgICAsIG1fbnVtVmFycygwKSAvLyBGSVhNRQorICAgICwgbV9pc0NvbnN0cnVjdG9yKGZh
bHNlKSAvLyBGSVhNRQorICAgICwgbV9zaG91bGRBbHdheXNCZUlubGluZWQodHJ1ZSkKKyAgICAs
IG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQorICAgICwgbV9oYXNCZWVuQ29tcGlsZWRX
aXRoRlRMKGZhbHNlKQorICAgIC8vICwgbV91bmxpbmtlZENvZGUobV9nbG9iYWxPYmplY3QtPnZt
KCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2spCisgICAgLCBtX2hhc0RlYnVn
Z2VyU3RhdGVtZW50KGZhbHNlKQorICAgICwgbV9zdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRGlz
YWJsZWQpCisgICAgLCBtX251bUJyZWFrcG9pbnRzKDApCisgICAgLCBtX293bmVyRXhlY3V0YWJs
ZShtX2dsb2JhbE9iamVjdC0+dm0oKSwgb3duZXJFeGVjdXRhYmxlLCBvd25lckV4ZWN1dGFibGUp
CisgICAgLCBtX3ZtKCZtX2dsb2JhbE9iamVjdC0+dm0oKSkgLy8gRklYTUUKKyAgICAsIG1fdGhp
c1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcigpKSAvLyBGSVhNRQorICAgICwgbV9zY29wZVJlZ2lz
dGVyKFZpcnR1YWxSZWdpc3RlcigpKSAvLyBGSVhNRQorICAgICwgbV9sZXhpY2FsRW52aXJvbm1l
bnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIoKSkgLy8gRklYTUUKKyAgICAsIG1faXNTdHJpY3RN
b2RlKGZhbHNlKSAvLyBGSVhNRQorICAgICwgbV9uZWVkc0FjdGl2YXRpb24oZmFsc2UpCisgICAg
LCBtX21heUJlRXhlY3V0aW5nKGZhbHNlKQorICAgICwgbV9zb3VyY2UobnVsbHB0cikKKyAgICAs
IG1fc291cmNlT2Zmc2V0KDApCisgICAgLCBtX2ZpcnN0TGluZUNvbHVtbk9mZnNldCgwKQorICAg
ICwgbV9jb2RlVHlwZShGdW5jdGlvbkNvZGUpIC8vIEZJWE1FCisgICAgLCBtX29zckV4aXRDb3Vu
dGVyKDApCisgICAgLCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcigwKQorICAgICwgbV9yZW9w
dGltaXphdGlvblJldHJ5Q291bnRlcigwKQorI2lmIEVOQUJMRShKSVQpCisgICAgLCBtX2NhcGFi
aWxpdHlMZXZlbFN0YXRlKERGRzo6Q2FwYWJpbGl0eUxldmVsTm90U2V0KQorI2VuZGlmCit7Cisg
ICAgbV92aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQuc3RvcmUoZmFsc2UsIHN0ZDo6bWVtb3J5
X29yZGVyX3JlbGF4ZWQpOworCisgICAgQVNTRVJUKG1faGVhcC0+aXNEZWZlcnJlZCgpKTsKKwor
ICAgIC8qCisgICAgQVNTRVJUKG1fc2NvcGVSZWdpc3Rlci5pc0xvY2FsKCkpOworCisgICAgYm9v
bCBkaWRDbG9uZVN5bWJvbFRhYmxlID0gZmFsc2U7CisKKyAgICBpZiAoU3ltYm9sVGFibGUqIHN5
bWJvbFRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkpIHsKKyAgICAgICAg
aWYgKG1fdm0tPnR5cGVQcm9maWxlcigpKSB7CisgICAgICAgICAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxl
LT5wcmVwYXJlRm9yVHlwZVByb2ZpbGluZyhsb2NrZXIpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHN5bWJvbFRhYmxlLT5zY29wZVNpemUo
KSkgeworICAgICAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQoKm1fdm0sIG1fb3duZXJFeGVjdXRh
YmxlLmdldCgpLCBzeW1ib2xUYWJsZS0+Y2xvbmVTY29wZVBhcnQoKm1fdm0pKTsKKyAgICAgICAg
ICAgIGRpZENsb25lU3ltYm9sVGFibGUgPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIG1fc3ltYm9sVGFibGUuc2V0KCptX3ZtLCBtX293bmVyRXhlY3V0YWJsZS5nZXQoKSwgc3lt
Ym9sVGFibGUpOworICAgIH0KKyAgICAqLworCisgICAgLy8gRklYTUU6IGhhY2t5CisgICAgc2V0
TnVtUGFyYW1ldGVycygxKTsKKyAgICAKKyAgICBWZWN0b3I8SW5zdHJ1Y3Rpb24sIDAsIFVuc2Fm
ZVZlY3Rvck92ZXJmbG93PiBpbnN0cnVjdGlvbnMoMCk7IC8vIEZJWE1FOiBuZWNlc3Nhcnk/Cisg
ICAgbV9pbnN0cnVjdGlvbnMgPSBXVEY6OlJlZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvbj4oaW5z
dHJ1Y3Rpb25zKTsKKworICAgIG1faGVhcC0+bV9jb2RlQmxvY2tzLmFkZCh0aGlzKTsKKyAgICBt
X2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVvZihDb2RlQmxvY2spKTsKK30K
KwogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKIHsKICAgICBpZiAobV92bS0+bV9wZXJCeXRlY29k
ZVByb2ZpbGVyKQpAQCAtMjUyOCw3ICsyNjA0LDExIEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdFdl
YWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogdm9pZCBDb2RlQmxvY2s6OmZpbmFs
aXplVW5jb25kaXRpb25hbGx5KCkKIHsKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBt
X3ZtLT5pbnRlcnByZXRlcjsKKyNpZiAhRU5BQkxFKFdBU00pCiAgICAgaWYgKEpJVENvZGU6OmNv
dWxkQmVJbnRlcnByZXRlZChqaXRUeXBlKCkpKSB7CisjZWxzZQorICAgIGlmIChKSVRDb2RlOjpj
b3VsZEJlSW50ZXJwcmV0ZWQoaml0VHlwZSgpKSAmJiAhb3duZXJFeGVjdXRhYmxlKCktPmlzV2Vi
QXNzZW1ibHlFeGVjdXRhYmxlKCkpIHsKKyNlbmRpZgogICAgICAgICBjb25zdCBWZWN0b3I8dW5z
aWduZWQ+JiBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucyA9IG1fdW5saW5rZWRDb2RlLT5wcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9ucygpOwogICAgICAgICBmb3IgKHNpemVfdCBzaXplID0gcHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7ICsraSkgewog
ICAgICAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1ckluc3RydWN0aW9uID0gJmluc3RydWN0aW9ucygp
W3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW2ldXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAppbmRleCA2NWRhYjk1NWU2OGYxNDc1N2M1YWIxYTI5ZTE5NzQy
OGQwY2M4ZTk4Li5lYzg1NGU2NGJmNDZjYWQ2OGU5YjY5OGNkOGY0YmUwZDM5YTg4YzliIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC05Nyw2ICs5Nywx
MCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIAogICAgIENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxl
KiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiwgSlNTY29wZSosIFBhc3NSZWZQ
dHI8U291cmNlUHJvdmlkZXI+LCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0
TGluZUNvbHVtbk9mZnNldCk7CiAKKyNpZiBFTkFCTEUoV0FTTSkKKyAgICBDb2RlQmxvY2soU2Ny
aXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCopOworI2VuZGlm
CisKICAgICBXcml0ZUJhcnJpZXI8SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0OwogICAg
IEhlYXAqIG1faGVhcDsKIApAQCAtMzQ4LDcgKzM1MiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX25lZWRzQWN0aXZhdGlvbjsKICAgICB9CiAgICAgCi0gICAgQ29kZVR5cGUgY29kZVR5
cGUoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQ29kZS0+Y29kZVR5cGUoKTsgfQorICAgIENv
ZGVUeXBlIGNvZGVUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBoYWNreQor
ICAgICAgICBpZiAob3duZXJFeGVjdXRhYmxlKCktPmlzV2ViQXNzZW1ibHlFeGVjdXRhYmxlKCkp
CisgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb25Db2RlOworICAgICAgICByZXR1cm4gbV91bmxp
bmtlZENvZGUtPmNvZGVUeXBlKCk7CisgICAgfQorCiAgICAgUHV0UHJvcGVydHlTbG90OjpDb250
ZXh0IHB1dEJ5SWRDb250ZXh0KCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChjb2RlVHlwZSgp
ID09IEV2YWxDb2RlKQpAQCAtMTEzNSw2ICsxMTQ2LDEzIEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogICAgIAorI2lmIEVOQUJMRShXQVNNKQorICAgIEZ1bmN0aW9uQ29kZUJsb2NrKEZ1bmN0aW9u
RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KSAvLyBvd25lciBzaG91bGQgYmUgV2ViQXNzZW1ibHlFeGVjdXRhYmxlCisgICAgICAgIDogQ29k
ZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0KSAvLyBGSVhNRTogaGFja3kKKyAg
ICB7CisgICAgfQorI2VuZGlmCisKICNpZiBFTkFCTEUoSklUKQogcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCAwYzVlZWI0ZDAyNWFh
ZGIwOTQ2NGZjYWNjMzBjMWM2MDFkNmJkOTU2Li42YTg1NDNiMDlkZDZmNTMzYWE5ZThmMDQzNjlm
NWU3OTAzOTE3MzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcApAQCAtMTQ0MCw2ICsxNDQwLDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmF0dGVtcHRUb0lubGluZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVy
YW5kCiAgICAgaWYgKCFpbmxpbmluZ0JhbGFuY2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKKyNpZiBFTkFCTEUoV0FTTSkKKyAgICBpZiAoRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUg
PSBjYWxsZWUuZXhlY3V0YWJsZSgpKSB7CisgICAgICAgIGlmIChleGVjdXRhYmxlLT5pc1dlYkFz
c2VtYmx5RXhlY3V0YWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyNl
bmRpZgorCiAgICAgYm9vbCBkaWRJbnNlcnRDaGVja3MgPSBmYWxzZTsKICAgICBhdXRvIGluc2Vy
dENoZWNrc1dpdGhBY2NvdW50aW5nID0gWyZdICgpIHsKICAgICAgICAgaW5zZXJ0Q2hlY2tzKG51
bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREaXNhc3Nl
bWJsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREaXNhc3NlbWJsZXIuY3Bw
CmluZGV4IDA0ZTFiNGQ0OWU5Nzk3YTM5NDcwODY1ZDIzOTg3OTI2YzNlMzk3YjIuLmVhMTAzNWM2
NmYyZDgwNjNmOTkzNTA1ZWRlMGFjNzkyMGMwNTZkNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5jcHAKQEAgLTUxLDYgKzUxLDE1IEBAIEpJVERpc2Fz
c2VtYmxlcjo6fkpJVERpc2Fzc2VtYmxlcigpCiB2b2lkIEpJVERpc2Fzc2VtYmxlcjo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0LCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQogewogICAgIGR1bXBIZWFk
ZXIob3V0LCBsaW5rQnVmZmVyKTsKKyNpZiBFTkFCTEUoV0FTTSkKKyAgICAvLyBGSVhNRTogaGFj
a3kKKyAgICAvLyBXZSBzaG91bGQgdXNlIG91ciBvd24gZGlzYXNzZW1ibGVyCisgICAgaWYgKG1f
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+aXNXZWJBc3NlbWJseUV4ZWN1dGFibGUoKSkg
eworICAgICAgICBkdW1wRGlzYXNzZW1ibHkob3V0LCBsaW5rQnVmZmVyLCBtX3N0YXJ0T2ZDb2Rl
LCBtX2VuZE9mQ29kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKwogICAgIGR1
bXBEaXNhc3NlbWJseShvdXQsIGxpbmtCdWZmZXIsIG1fc3RhcnRPZkNvZGUsIG1fbGFiZWxGb3JC
eXRlY29kZUluZGV4SW5NYWluUGF0aFswXSk7CiAgICAgCiAgICAgZHVtcEZvckluc3RydWN0aW9u
cyhvdXQsIGxpbmtCdWZmZXIsICIgICAgIiwgbV9sYWJlbEZvckJ5dGVjb2RlSW5kZXhJbk1haW5Q
YXRoLCBmaXJzdFNsb3dMYWJlbCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCmluZGV4IDM4MDE1ZDJkODA0ZjkzNTkyMGY5NzU2YTcxY2EyZmRmZWExNzk1
OTAuLjkxMWVmNmM0MGFkY2I2NjE1YzA2ZDc3ZGRiMTY1YzE4NjBhMjRlMDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtNzgzLDcgKzc4MywxMSBA
QCBpbmxpbmUgY2hhciogbGlua0ZvcigKICAgICBlbHNlIHsKICAgICAgICAgRnVuY3Rpb25FeGVj
dXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFi
bGUqPihleGVjdXRhYmxlKTsKIAorI2lmICFFTkFCTEUoV0FTTSkKICAgICAgICAgaWYgKCFpc0Nh
bGwoa2luZCkgJiYgZnVuY3Rpb25FeGVjdXRhYmxlLT5pc0J1aWx0aW5GdW5jdGlvbigpKSB7Cisj
ZWxzZQorICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAmJiAoZnVuY3Rpb25FeGVjdXRhYmxlLT5p
c0J1aWx0aW5GdW5jdGlvbigpIHx8IGZ1bmN0aW9uRXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJseSgp
KSkgeworI2VuZGlmCiAgICAgICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMs
IGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMsIGNhbGxlZSkpOwogICAgICAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0
aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IDM4MGQ4OWI1ZDM1OTI3NGEyNzQ4
MjkxODMyY2VlZDg4OGE2M2MyMzYuLjVhZjA2MjczYjgxNTkxNmMyNzhiNzQxYjU5N2IwOWExYmEw
YTU3M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAi
U3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVGVzdFJ1bm5lclV0aWxzLmgi
CiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCisjaW5jbHVkZSAiV2FzbU1vZHVsZVBhcnNl
ci5oIgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0
ZGxpYi5oPgpAQCAtNDkxLDYgKzQ5Miw5IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uUmV0dXJuVHlwZUZvcihFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRHVtcEJhc2ljQmxvY2tFeGVjdXRpb25SYW5n
ZXMoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkhhc0Jhc2ljQmxvY2tFeGVjdXRlZChFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRW5hYmxlRXhjZXB0aW9uRnV6eihFeGVjU3RhdGUq
KTsKKyNpZiBFTkFCTEUoV0FTTSkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uTG9hZFdlYkFzc2VtYmx5KEV4ZWNTdGF0ZSopOworI2VuZGlmCiAKICNpZiBFTkFC
TEUoU0FNUExJTkdfRkxBR1MpCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvblNldFNhbXBsaW5nRmxhZ3MoRXhlY1N0YXRlKik7CkBAIC02NTMsNiArNjU3LDEwIEBA
IHByb3RlY3RlZDoKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJoYXNCYXNpY0Jsb2NrRXhlY3V0
ZWQiLCBmdW5jdGlvbkhhc0Jhc2ljQmxvY2tFeGVjdXRlZCwgMik7CiAKICAgICAgICAgYWRkRnVu
Y3Rpb24odm0sICJlbmFibGVFeGNlcHRpb25GdXp6IiwgZnVuY3Rpb25FbmFibGVFeGNlcHRpb25G
dXp6LCAwKTsKKworI2lmIEVOQUJMRShXQVNNKQorICAgICAgICBhZGRGdW5jdGlvbih2bSwgImxv
YWRXZWJBc3NlbWJseSIsIGZ1bmN0aW9uTG9hZFdlYkFzc2VtYmx5LCAxKTsKKyNlbmRpZgogICAg
ICAgICAKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGdsb2Jh
bEV4ZWMoKSwgMCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRzLnNp
emUoKTsgKytpKQpAQCAtMTE4Miw2ICsxMTkwLDIwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25FbmFibGVFeGNlcHRpb25GdXp6KEV4ZWNTdGF0ZSopCiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAorI2lmIEVOQUJMRShXQVNNKQor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYWRXZWJBc3NlbWJseShFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCku
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7Cisg
ICAgaWYgKCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVOYW1lLCBidWZmZXIpKQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24o
ZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDb3VsZCBub3Qgb3BlbiBmaWxl
LiIpKSkpOworICAgIFJlZlB0cjxXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyPiBwcm92aWRlciA9
IFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI6OmNyZWF0ZShidWZmZXIsICIiKTsKKyAgICBTb3Vy
Y2VDb2RlIHNvdXJjZShwcm92aWRlcik7CisgICAgV2FzbTo6TW9kdWxlKiBtb2R1bGUgPSBXYXNt
Ojpjb21waWxlKGV4ZWMsIHNvdXJjZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShtb2R1
bGUpOworfQorI2VuZGlmCisKIC8vIFVzZSBTRUggZm9yIFJlbGVhc2UgYnVpbGRzIG9ubHkgdG8g
Z2V0IHJpZCBvZiB0aGUgY3Jhc2ggcmVwb3J0IGRpYWxvZwogLy8gKGx1Y2tpbHkgdGhlIHNhbWUg
dGVzdHMgZmFpbCBpbiBSZWxlYXNlIGFuZCBEZWJ1ZyBidWlsZHMgc28gZmFyKS4gTmVlZCB0bwog
Ly8gYmUgaW4gYSBzZXBhcmF0ZSBtYWluIGZ1bmN0aW9uIGJlY2F1c2UgdGhlIGpzY21haW4gZnVu
Y3Rpb24gcmVxdWlyZXMgb2JqZWN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50U2xvd1BhdGhzLmNwcAppbmRleCA5Y2NjMWNlNDk3ODhkNzEwZmM2OWE2OTE1NDM0MjcxYThj
MDlkMmU0Li4zNDMyOGI0ZjQzNjY4NzNlMDY1NWU5MzU3NGE4ZjA0MDk2YTlhOWFhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKQEAgLTExMjQs
NyArMTEyNCwxMiBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChFeGVjU3Rh
dGUqIGV4ZWNDYWxsZWUsIEluc3RydWN0aW9uKiBwYywgQ29kZQogICAgIGVsc2UgewogICAgICAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogCisgICAgICAgIC8vIEZJWE1FOiBjaGVj
ayB3aGV0aGVyIGZ1bmN0aW9uRXhlY3V0YWJsZSBpcyBhIFdlYkFzc2VtYmx5RXhlY3V0YWJsZQor
I2lmICFFTkFCTEUoV0FTTSkKICAgICAgICAgaWYgKCFpc0NhbGwoa2luZCkgJiYgZnVuY3Rpb25F
eGVjdXRhYmxlLT5pc0J1aWx0aW5GdW5jdGlvbigpKQorI2Vsc2UKKyAgICAgICAgaWYgKCFpc0Nh
bGwoa2luZCkgJiYgKGZ1bmN0aW9uRXhlY3V0YWJsZS0+aXNCdWlsdGluRnVuY3Rpb24oKSB8fCBm
dW5jdGlvbkV4ZWN1dGFibGUtPmlzV2ViQXNzZW1ibHkoKSkpCisjZW5kaWYKICAgICAgICAgICAg
IExMSU5UX0NBTExfVEhST1coZXhlYywgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZXhlYywg
Y2FsbGVlKSk7CiAKICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxl
LT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWNDYWxsZWUsIGNhbGxlZSwgc2NvcGUsIGtpbmQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oCmluZGV4IGNj
Y2FiZjM2OTY0ZjQxMWE2NGNiYWUyNTkyZDI0ZjQyNGYwMjZiNDcuLmQ5NGM3YmI0YWY1YzJhOTMy
NDYxMzVkMWZkOTgwNjlmMzNiMzFhNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1NvdXJjZVByb3ZpZGVyLmgKQEAgLTkzLDYgKzkzLDM3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIFN0cmluZyBtX3NvdXJjZTsKICAgICB9OworCisjaWYgRU5BQkxFKFdBU00pCisg
ICAgY2xhc3MgV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlciA6IHB1YmxpYyBTb3VyY2VQcm92aWRl
ciB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUmVmPFdlYkFzc2VtYmx5U291cmNlUHJv
dmlkZXI+IGNyZWF0ZShjb25zdCBWZWN0b3I8Y2hhcj4mIHNvdXJjZSwgY29uc3QgU3RyaW5nJiB1
cmwsIGNvbnN0IFRleHRQb3NpdGlvbiYgc3RhcnRQb3NpdGlvbiA9IFRleHRQb3NpdGlvbjo6bWlu
aW11bVBvc2l0aW9uKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXIoc291cmNlLCB1cmwsIHN0YXJ0UG9zaXRpb24p
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiBzb3VyY2UoKSBj
b25zdCBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV90ZXh0U291cmNl
OworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgVmVjdG9yPGNoYXI+JiByZWFsU291cmNlKCkg
Y29uc3QgLy8gRklYTUU6IEJldHRlciBuYW1lLgorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbV9zb3VyY2U7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFdlYkFzc2Vt
Ymx5U291cmNlUHJvdmlkZXIoY29uc3QgVmVjdG9yPGNoYXI+JiBzb3VyY2UsIGNvbnN0IFN0cmlu
ZyYgdXJsLCBjb25zdCBUZXh0UG9zaXRpb24mIHN0YXJ0UG9zaXRpb24pCisgICAgICAgICAgICA6
IFNvdXJjZVByb3ZpZGVyKHVybCwgc3RhcnRQb3NpdGlvbikKKyAgICAgICAgICAgICwgbV9zb3Vy
Y2Uoc291cmNlKQorICAgICAgICAgICAgLCBtX3RleHRTb3VyY2UoIltXZWJBc3NlbWJseV0iKSAv
LyBUT0RPOiBJbXBsZW1lbnQgdGhlIHRleHQgZm9ybWF0LgorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBWZWN0b3I8Y2hhcj4gbV9zb3VyY2U7CisgICAgICAgIFN0cmluZyBtX3RleHRT
b3VyY2U7CisgICAgfTsKKyNlbmRpZgogICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKaW5kZXggNTUyNDBmZDkx
ZjdiYzc4NDJmMTNlNTkyODFkMTBkMjFkODZjNGY1MC4uZjdmOGUyY2FmZGM5OGIxMDAxODAwMTIw
OTQ1YjRkNWI0NWE2NDZkOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5jcHAKQEAgLTM2LDYgKzM2LDggQEAKICNpbmNsdWRlICJQYXJzZXIuaCIKICNpbmNs
dWRlICJQcm9maWxlckRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgiCisjaW5j
bHVkZSAiV2FzbU1vZHVsZS5oIgorI2luY2x1ZGUgIldhc21QYXJzZXIuaCIKICNpbmNsdWRlIDx3
dGYvQ29tbWFQcmludGVyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTYzLDYgKzY1LDEzIEBAIHZvaWQgRXhlY3V0YWJs
ZUJhc2U6OmNsZWFyQ29kZSgpCiAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0ID0gTlVN
X1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVEOwogfQogCisjaWYgRU5BQkxFKFdBU00pCitib29sIEV4
ZWN1dGFibGVCYXNlOjppc1dlYkFzc2VtYmx5RXhlY3V0YWJsZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGlzRnVuY3Rpb25FeGVjdXRhYmxlKCkgJiYganNDYXN0PGNvbnN0IEZ1bmN0aW9uRXhlY3V0
YWJsZSo+KHRoaXMpLT5pc1dlYkFzc2VtYmx5KCk7Cit9CisjZW5kaWYKKwogI2lmIEVOQUJMRShE
RkdfSklUKQogSW50cmluc2ljIEV4ZWN1dGFibGVCYXNlOjppbnRyaW5zaWMoKSBjb25zdAogewpA
QCAtMjMxLDYgKzI0MCwxNiBAQCBSZWZQdHI8Q29kZUJsb2NrPiBTY3JpcHRFeGVjdXRhYmxlOjpu
ZXdDb2RlQmxvY2tGb3IoCiAgICAgUkVMRUFTRV9BU1NFUlQoY2xhc3NJbmZvKCkgPT0gRnVuY3Rp
b25FeGVjdXRhYmxlOjppbmZvKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uKTsKICAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4odGhpcyk7CisKKyNpZiBFTkFCTEUoV0FTTSkKKyAgICBpZiAoZXhlY3V0YWJsZS0+aXNX
ZWJBc3NlbWJseSgpKSB7CisgICAgICAgIFJlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGFk
b3B0UmVmKG5ldyBGdW5jdGlvbkNvZGVCbG9jayhleGVjdXRhYmxlLCBzY29wZS0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKKyAgICAgICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGUgPSBXYXNtOjpQYXJzZXI6
OmdlbmVyYXRlQ29kZSh2bSwgY29kZUJsb2NrLmdldCgpLCBleGVjdXRhYmxlLT5tX21vZHVsZS5n
ZXQoKSwgZXhlY3V0YWJsZS0+bV9mdW5jdGlvbkluZGV4LCBleGVjdXRhYmxlLT5tX29mZnNldElu
U291cmNlKTsKKyAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKGppdENvZGUucmVsZWFzZSgp
KTsKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jazsKKyAgICB9CisjZW5kaWYKKwogICAgIFJFTEVB
U0VfQVNTRVJUKCFleGVjdXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCkpOwogICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgUGFyc2Vy
RXJyb3IgZXJyb3I7CkBAIC0zMzMsMTMgKzM1MiwxOSBAQCBKU09iamVjdCogU2NyaXB0RXhlY3V0
YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGlvbkltcGwoCiAgICAgICAgIHJldHVybiBleGNlcHRpb247
CiAgICAgfQogICAgIAotICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUJ5dGVjb2RlKCkpCi0gICAg
ICAgIGNvZGVCbG9jay0+dmFsaWRhdGUoKTsKKyNpZiBFTkFCTEUoV0FTTSkKKyAgICBpZiAoIWlz
V2ViQXNzZW1ibHlFeGVjdXRhYmxlKCkpIHsKKyNlbmRpZgorICAgICAgICBpZiAoT3B0aW9uczo6
dmFsaWRhdGVCeXRlY29kZSgpKQorICAgICAgICAgICAgY29kZUJsb2NrLT52YWxpZGF0ZSgpOwog
ICAgIAotICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpKQotICAgICAgICBzZXR1cExMSW50KHZt
LCBjb2RlQmxvY2suZ2V0KCkpOwotICAgIGVsc2UKLSAgICAgICAgc2V0dXBKSVQodm0sIGNvZGVC
bG9jay5nZXQoKSk7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpKQorICAgICAgICAg
ICAgc2V0dXBMTEludCh2bSwgY29kZUJsb2NrLmdldCgpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgc2V0dXBKSVQodm0sIGNvZGVCbG9jay5nZXQoKSk7CisjaWYgRU5BQkxFKFdBU00pCisg
ICAgfQorI2VuZGlmCiAgICAgCiAgICAgaW5zdGFsbENvZGUoY29kZUJsb2NrLmdldCgpKTsKICAg
ICByZXR1cm4gMDsKQEAgLTM5NSwxMSArNDIwLDEyIEBAIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6
OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogCiBjb25zdCBDbGFzc0luZm8gRnVuY3Rpb25FeGVjdXRh
YmxlOjpzX2luZm8gPSB7ICJGdW5jdGlvbkV4ZWN1dGFibGUiLCAmU2NyaXB0RXhlY3V0YWJsZTo6
c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEZ1bmN0aW9uRXhlY3V0YWJsZSkgfTsKIAot
RnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUoVk0mIHZtLCBjb25zdCBTb3Vy
Y2VDb2RlJiBzb3VyY2UsIAotICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtl
ZEV4ZWN1dGFibGUsIHVuc2lnbmVkIGZpcnN0TGluZSwgCi0gICAgdW5zaWduZWQgbGFzdExpbmUs
IHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRDb2x1bW4pCitGdW5jdGlvbkV4ZWN1
dGFibGU6OkZ1bmN0aW9uRXhlY3V0YWJsZShWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSwgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUsIHVuc2ln
bmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGFzdExpbmUsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1
bnNpZ25lZCBlbmRDb2x1bW4pCiAgICAgOiBTY3JpcHRFeGVjdXRhYmxlKHZtLmZ1bmN0aW9uRXhl
Y3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwgdm0sIHNvdXJjZSwgdW5saW5rZWRFeGVjdXRhYmxlLT5p
c0luU3RyaWN0Q29udGV4dCgpKQogICAgICwgbV91bmxpbmtlZEV4ZWN1dGFibGUodm0sIHRoaXMs
IHVubGlua2VkRXhlY3V0YWJsZSkKKyNpZiBFTkFCTEUoV0FTTSkKKyAgICAsIG1faXNXZWJBc3Nl
bWJseShmYWxzZSkKKyNlbmRpZgogewogICAgIFJFTEVBU0VfQVNTRVJUKCFzb3VyY2UuaXNOdWxs
KCkpOwogICAgIEFTU0VSVChzb3VyY2UubGVuZ3RoKCkpOwpAQCAtNDE0LDYgKzQ0MCwyMyBAQCBG
dW5jdGlvbkV4ZWN1dGFibGU6OkZ1bmN0aW9uRXhlY3V0YWJsZShWTSYgdm0sIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSwKICAgICBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQgPSB1bmxpbmtlZEV4
ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKTsKIH0KIAorI2lmIEVOQUJMRShXQVNN
KQorRnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUoVk0mIHZtLCBjb25zdCBT
b3VyY2VDb2RlJiBzb3VyY2UsIFdhc206Ok1vZHVsZSogbW9kdWxlLCBzaXplX3QgZnVuY3Rpb25J
bmRleCwgdW5zaWduZWQgb2Zmc2V0SW5Tb3VyY2UpCisgICAgOiBTY3JpcHRFeGVjdXRhYmxlKHZt
LmZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwgdm0sIHNvdXJjZSwgLyogRklYTUU6
IGlzSW5TdHJpY3RDb250ZXh0PyAqLyBmYWxzZSApCisgICAgLCBtX2lzV2ViQXNzZW1ibHkodHJ1
ZSkKKyAgICAsIG1fbW9kdWxlKHZtLCB0aGlzLCBtb2R1bGUpCisgICAgLCBtX2Z1bmN0aW9uSW5k
ZXgoZnVuY3Rpb25JbmRleCkKKyAgICAsIG1fb2Zmc2V0SW5Tb3VyY2Uob2Zmc2V0SW5Tb3VyY2Up
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoIXNvdXJjZS5pc051bGwoKSk7CisgICAgQVNTRVJUKHNv
dXJjZS5sZW5ndGgoKSk7CisgICAgLy8gbV9maXJzdExpbmUgPSBmaXJzdExpbmU7CisgICAgLy8g
bV9sYXN0TGluZSA9IGxhc3RMaW5lOworICAgIG1fc3RhcnRDb2x1bW4gPSAxOyAvLyBGSVhNRToK
KyAgICBtX2VuZENvbHVtbiA9IDE7Cit9CisjZW5kaWYKKwogdm9pZCBGdW5jdGlvbkV4ZWN1dGFi
bGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CkBAIC01NzMsNiArNjE2LDEwIEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgICAgIHRoaXNP
YmplY3QtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsK
ICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV91bmxpbmtlZEV4ZWN1dGFibGUpOwog
ICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3NpbmdsZXRvbkZ1bmN0aW9uKTsKKyNp
ZiBFTkFCTEUoV0FTTSkKKyAgICBpZiAodGhpc09iamVjdC0+bV9pc1dlYkFzc2VtYmx5KQorICAg
ICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9tb2R1bGUpOworI2VuZGlmCiB9CiAK
IFN5bWJvbFRhYmxlKiBGdW5jdGlvbkV4ZWN1dGFibGU6OnN5bWJvbFRhYmxlKENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKQEAgLTY4MSw0ICs3MjgsMjcgQEAgQ29kZUJsb2NrSGFzaCBTY3Jp
cHRFeGVjdXRhYmxlOjpoYXNoRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkgY29uc3QK
ICAgICByZXR1cm4gQ29kZUJsb2NrSGFzaChzb3VyY2UoKSwga2luZCk7CiB9CiAKKy8vIEZJWE1F
OiBJbmxpbmUgdGhlc2UuCitlbnVtIEZ1bmN0aW9uTW9kZSBGdW5jdGlvbkV4ZWN1dGFibGU6OmZ1
bmN0aW9uTW9kZSgpIHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5mdW5jdGlvbk1vZGUo
KTsgfQorYm9vbCBGdW5jdGlvbkV4ZWN1dGFibGU6OmlzQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3QK
K3sKKyNpZiBFTkFCTEUoV0FTTSkKKyAgICBpZiAoaXNXZWJBc3NlbWJseSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmlz
QnVpbHRpbkZ1bmN0aW9uKCk7Cit9Citib29sIEZ1bmN0aW9uRXhlY3V0YWJsZTo6aXNDbGFzc0Nv
bnN0cnVjdG9yRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+
aXNDbGFzc0NvbnN0cnVjdG9yRnVuY3Rpb24oKTsgfQorY29uc3QgSWRlbnRpZmllciYgRnVuY3Rp
b25FeGVjdXRhYmxlOjpuYW1lKCkgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPm5hbWUo
KTsgfQorY29uc3QgSWRlbnRpZmllciYgRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZlcnJlZE5hbWUo
KSB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+aW5mZXJyZWROYW1lKCk7IH0KK0pTU3Ry
aW5nKiBGdW5jdGlvbkV4ZWN1dGFibGU6Om5hbWVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5s
aW5rZWRFeGVjdXRhYmxlLT5uYW1lVmFsdWUoKTsgfQorc2l6ZV90IEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6cGFyYW1ldGVyQ291bnQoKSBjb25zdCAvLyBFeGNsdWRpbmcgJ3RoaXMnIQoreworI2lmIEVO
QUJMRShXQVNNKQorICAgIGlmIChpc1dlYkFzc2VtYmx5KCkpCisgICAgICAgIHJldHVybiAxOyAv
LyBGSVhNRTogV3JvbmchCisjZW5kaWYKKyAgICByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUt
PnBhcmFtZXRlckNvdW50KCk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4ZWN1dGFibGUuaAppbmRleCAxYzdjODAwMDNkMmEzMmJkNmEzMTFkYWMwZGU1MzkwMWE4YWQ3
ODFmLi41OTU1Y2MzOTliYjljZDVmMDM3YzY4YWU1NDU0Y2ZhOTZlNzIwZTQzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCkBAIC01NCw2ICs1NCwxNCBAQCBj
bGFzcyBKU1Njb3BlOwogICAgIAogZW51bSBDb21waWxhdGlvbktpbmQgeyBGaXJzdENvbXBpbGF0
aW9uLCBPcHRpbWl6aW5nQ29tcGlsYXRpb24gfTsKIAorI2lmIEVOQUJMRShXQVNNKQorbmFtZXNw
YWNlIFdhc20geworCitjbGFzcyBNb2R1bGU7CisKK30KKyNlbmRpZgorCiBpbmxpbmUgYm9vbCBp
c0NhbGwoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIGlmIChraW5kID09IENv
ZGVGb3JDYWxsKQpAQCAtOTAsMTUgKzk4LDE1IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgQ29k
ZUJsb2NrSGFzaCBoYXNoRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpIGNvbnN0OwogCi0gICAg
Ym9vbCBpc0V2YWxFeGVjdXRhYmxlKCkKKyAgICBib29sIGlzRXZhbEV4ZWN1dGFibGUoKSBjb25z
dAogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGUoKSA9PSBFdmFsRXhlY3V0YWJsZVR5cGU7CiAg
ICAgfQotICAgIGJvb2wgaXNGdW5jdGlvbkV4ZWN1dGFibGUoKQorICAgIGJvb2wgaXNGdW5jdGlv
bkV4ZWN1dGFibGUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGUoKSA9PSBGdW5j
dGlvbkV4ZWN1dGFibGVUeXBlOwogICAgIH0KLSAgICBib29sIGlzUHJvZ3JhbUV4ZWN1dGFibGUo
KQorICAgIGJvb2wgaXNQcm9ncmFtRXhlY3V0YWJsZSgpIGNvbnN0CiAgICAgewogICAgICAgICBy
ZXR1cm4gdHlwZSgpID09IFByb2dyYW1FeGVjdXRhYmxlVHlwZTsKICAgICB9CkBAIC0xMDksNiAr
MTE3LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwg
PT0gTlVNX1BBUkFNRVRFUlNfSVNfSE9TVDsKICAgICB9CiAKKyNpZiBFTkFCTEUoV0FTTSkKKyAg
ICAvLyBGSVhNRTogSGFja3kuIFNob3VsZCByZW1vdmUgdGhpcy4KKyAgICBib29sIGlzV2ViQXNz
ZW1ibHlFeGVjdXRhYmxlKCkgY29uc3Q7CisjZW5kaWYKKwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOyB9CiAg
ICAgICAgIAogICAgIHZvaWQgY2xlYXJDb2RlKCk7CkBAIC01NTYsNiArNTY5LDE2IEBAIHB1Ymxp
YzoKICAgICAgICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICByZXR1
cm4gZXhlY3V0YWJsZTsKICAgICB9CisKKyNpZiBFTkFCTEUoV0FTTSkKKyAgICBzdGF0aWMgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBjcmVhdGUoVk0mIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IFdhc206Ok1vZHVsZSogbW9kdWxlLCBzaXplX3QgZnVuY3Rpb25JbmRleCwgdW5zaWduZWQgb2Zm
c2V0SW5Tb3VyY2UpCisgICAgeworICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFi
bGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLmhl
YXApKSBGdW5jdGlvbkV4ZWN1dGFibGUodm0sIHNvdXJjZSwgbW9kdWxlLCBmdW5jdGlvbkluZGV4
LCBvZmZzZXRJblNvdXJjZSk7CisgICAgICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CisgICAgfQorI2VuZGlmCisKICAgICBzdGF0
aWMgRnVuY3Rpb25FeGVjdXRhYmxlKiBmcm9tR2xvYmFsQ29kZSgKICAgICAgICAgY29uc3QgSWRl
bnRpZmllciYgbmFtZSwgRXhlY1N0YXRlJiwgY29uc3QgU291cmNlQ29kZSYsIAogICAgICAgICBK
U09iamVjdComIGV4Y2VwdGlvbiwgaW50IG92ZXJyaWRlTGluZU51bWJlcik7CkBAIC02MjcsMTQg
KzY1MCwxNSBAQCBwdWJsaWM6CiAKICAgICAgICAgcmV0dXJuIG1fcmV0dXJuU3RhdGVtZW50VHlw
ZVNldDsKICAgICB9Ci0gICAgICAgIAotICAgIEZ1bmN0aW9uTW9kZSBmdW5jdGlvbk1vZGUoKSB7
IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+ZnVuY3Rpb25Nb2RlKCk7IH0KLSAgICBib29s
IGlzQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUt
PmlzQnVpbHRpbkZ1bmN0aW9uKCk7IH0KLSAgICBib29sIGlzQ2xhc3NDb25zdHJ1Y3RvckZ1bmN0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmlzQ2xhc3NDb25zdHJ1
Y3RvckZ1bmN0aW9uKCk7IH0KLSAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1lKCkgeyByZXR1cm4g
bV91bmxpbmtlZEV4ZWN1dGFibGUtPm5hbWUoKTsgfQotICAgIGNvbnN0IElkZW50aWZpZXImIGlu
ZmVycmVkTmFtZSgpIHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5pbmZlcnJlZE5hbWUo
KTsgfQotICAgIEpTU3RyaW5nKiBuYW1lVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2Vk
RXhlY3V0YWJsZS0+bmFtZVZhbHVlKCk7IH0KLSAgICBzaXplX3QgcGFyYW1ldGVyQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+cGFyYW1ldGVyQ291bnQoKTsgfSAv
LyBFeGNsdWRpbmcgJ3RoaXMnIQorCisgICAgLy8gRklYTUU6IElubGluZSB0aGVzZS4KKyAgICBG
dW5jdGlvbk1vZGUgZnVuY3Rpb25Nb2RlKCkKKyAgICBib29sIGlzQnVpbHRpbkZ1bmN0aW9uKCkg
Y29uc3Q7CisgICAgYm9vbCBpc0NsYXNzQ29uc3RydWN0b3JGdW5jdGlvbigpIGNvbnN0OworICAg
IGNvbnN0IElkZW50aWZpZXImIG5hbWUoKTsKKyAgICBjb25zdCBJZGVudGlmaWVyJiBpbmZlcnJl
ZE5hbWUoKTsKKyAgICBKU1N0cmluZyogbmFtZVZhbHVlKCkgY29uc3Q7CisgICAgc2l6ZV90IHBh
cmFtZXRlckNvdW50KCkgY29uc3Q7IC8vIEV4Y2x1ZGluZyAndGhpcychCiAgICAgU3ltYm9sVGFi
bGUqIHN5bWJvbFRhYmxlKENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogCiAgICAgdm9pZCBjbGVh
clVubGlua2VkQ29kZUZvclJlY29tcGlsYXRpb24oKTsKQEAgLTY2MSwxMSArNjg1LDE5IEBAIHB1
YmxpYzoKICAgICAKICAgICBJbmZlcnJlZFZhbHVlKiBzaW5nbGV0b25GdW5jdGlvbigpIHsgcmV0
dXJuIG1fc2luZ2xldG9uRnVuY3Rpb24uZ2V0KCk7IH0KIAorI2lmIEVOQUJMRShXQVNNKQorICAg
IGJvb2wgaXNXZWJBc3NlbWJseSgpIGNvbnN0IHsgcmV0dXJuIG1faXNXZWJBc3NlbWJseTsgfQor
I2VuZGlmCisKIHByaXZhdGU6CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKAogICAgICAgICBWTSYs
IGNvbnN0IFNvdXJjZUNvZGUmLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSosIHVuc2lnbmVk
IGZpcnN0TGluZSwgCiAgICAgICAgIHVuc2lnbmVkIGxhc3RMaW5lLCB1bnNpZ25lZCBzdGFydENv
bHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uKTsKLSAgICAKKworI2lmIEVOQUJMRShXQVNNKQorICAg
IEZ1bmN0aW9uRXhlY3V0YWJsZShWTSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBXYXNtOjpNb2R1bGUq
LCBzaXplX3QgZnVuY3Rpb25JbmRleCwgdW5zaWduZWQgb2Zmc2V0SW5Tb3VyY2UpOworI2VuZGlm
CisKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAKICAgICBmcmllbmQgY2xhc3MgU2Ny
aXB0RXhlY3V0YWJsZTsKQEAgLTY3Niw2ICs3MDgsMTIgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8
VHlwZVNldD4gbV9yZXR1cm5TdGF0ZW1lbnRUeXBlU2V0OwogICAgIHVuc2lnbmVkIG1fcGFyYW1l
dGVyc1N0YXJ0T2Zmc2V0OwogICAgIFdyaXRlQmFycmllcjxJbmZlcnJlZFZhbHVlPiBtX3Npbmds
ZXRvbkZ1bmN0aW9uOworI2lmIEVOQUJMRShXQVNNKQorICAgIGJvb2wgbV9pc1dlYkFzc2VtYmx5
OworICAgIFdyaXRlQmFycmllcjxXYXNtOjpNb2R1bGU+IG1fbW9kdWxlOworICAgIHNpemVfdCBt
X2Z1bmN0aW9uSW5kZXg7CisgICAgdW5zaWduZWQgbV9vZmZzZXRJblNvdXJjZTsKKyNlbmRpZgog
fTsKIAogaW5saW5lIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZVZpcnR1YWwoRXhlY3V0
YWJsZUJhc2UqIGV4ZWN1dGFibGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQ29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUNvZGVHZW5lcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNDE3MjEyYmMwZThmMDJmZmU1ZDRiNzllNGI0
N2Q2MGYzMjlkNjJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNvZGVHZW5lcmF0b3IuaApAQCAtMCwwICsxLDM0MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2FzbUNvZGVHZW5lcmF0b3Jf
aAorI2RlZmluZSBXYXNtQ29kZUdlbmVyYXRvcl9oCisKKyNpZiBFTkFCTEUoV0FTTSkKKworI2lu
Y2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkpJVC5oIgorI2luY2x1ZGUgIkpJVERp
c2Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAi
TGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgi
CisjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCituYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIE1vZHVsZTsKKyAgICAKK3N0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdldEludGVybmFsRnVuY3Rpb24oRXhl
Y1N0YXRlKiwgTW9kdWxlKiBtb2R1bGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCit7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShtb2R1bGUtPmZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgpKTsK
K30KKworY2xhc3MgQ29kZUdlbmVyYXRvciA6IHByaXZhdGUgQ0NhbGxIZWxwZXJzIHsKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIGludCBFeHByZXNzaW9uOworICAgIHR5cGVkZWYgaW50IFN0YXRlbWVu
dDsKKyAgICB0eXBlZGVmIEp1bXAgSnVtcDsgLy8gRklYTUU6IEJhZCBuYW1lLgorCisgICAgQ29k
ZUdlbmVyYXRvcihWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBNb2R1bGUqIG1vZHVsZSkK
KyAgICAgICAgOiBDQ2FsbEhlbHBlcnModm0sIGNvZGVCbG9jaykKKyAgICAgICAgLCBtX21vZHVs
ZShtb2R1bGUpCisgICAgeworICAgICAgICBtX3N0YWNrSGVpZ2h0ID0gODsgLy8gRklYTUU6IENh
bGN1bGF0ZSB0aGUgYWN0dWFsIGhlaWdodC4KKyAgICAgICAgbV9zcCA9IDA7CisgICAgfQorCisg
ICAgdm9pZCBzdGFydEZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmIChPcHRpb25zOjpzaG93
RGlzYXNzZW1ibHkoKSkKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyID0gc3RkOjptYWtlX3Vu
aXF1ZTxKSVREaXNhc3NlbWJsZXI+KG1fY29kZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGlm
IChtX2Rpc2Fzc2VtYmxlcikKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRTdGFydE9m
Q29kZShsYWJlbCgpKTsKKyAgICAgICAgCisgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7
CisgICAgICAgIGVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywg
SlNTdGFjazo6Q29kZUJsb2NrKTsKKyAgICAgICAgYWxsb2NhdGVTcGFjZU9uU3RhY2soKTsKKyAg
ICB9CisKKyAgICB2b2lkIGVuZEZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9z
cCk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogU2tpcCBpZiBsYXN0IHN0bXQgaXMgYSBy
ZXR1cm4gc3RhdGVtZW50LgorICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7IC8vIEZJWE1FOiBTaG91bGQgd2Ug
cmV0dXJuIHVuZGVmaW5lZD8KKworICAgICAgICBkZWFsbG9jYXRlU3BhY2VPblN0YWNrKCk7Cisg
ICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgICAgIHJldCgpOworCisgICAgICAg
IGlmIChtX2Rpc2Fzc2VtYmxlcikKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRP
ZkNvZGUobGFiZWwoKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRMb2NhbFR5cGVzKGNvbnN0IFZl
Y3RvcjxUeXBlPiYgbG9jYWxUeXBlcykKKyAgICB7CisgICAgICAgIG1fbG9jYWxUeXBlcyA9IGxv
Y2FsVHlwZXM7CisgICAgfQorCisgICAgdm9pZCB1bmJveEFyZ3VtZW50KHNpemVfdCBhcmdJbmRl
eCkKKyAgICB7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCAoYXJnSW5kZXggKyAxICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSkgKiA4
KSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCBsb2Nh
bEFkZHJlc3MoYXJnSW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIHNldExvY2FsWmVyb0kzMihz
aXplX3QgbG9jYWxJbmRleCkKKyAgICB7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDAp
LCBsb2NhbEFkZHJlc3MobG9jYWxJbmRleCkpOworICAgIH0KKworICAgIEV4cHJlc3Npb24gYWRk
STMyKEV4cHJlc3Npb24sIEV4cHJlc3Npb24pCisgICAgeworICAgICAgICBsb2FkMzIodGVtcG9y
YXJ5QWRkcmVzcyhtX3NwIC0gMiksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKHRl
bXBvcmFyeUFkZHJlc3MobV9zcCAtIDEpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGFkZDMy
KEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIHN0b3JlMzIoR1BSSW5m
bzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MobV9zcCAtIDIpKTsKKyAgICAgICAgbV9zcC0tOwor
ICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBFeHByZXNzaW9uIG11bEkzMihFeHByZXNz
aW9uLCBFeHByZXNzaW9uKQorICAgIHsKKyAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3Mo
bV9zcCAtIDIpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRy
ZXNzKG1fc3AgLSAxKSwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBtdWwzMihHUFJJbmZvOjpy
ZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0
ZW1wb3JhcnlBZGRyZXNzKG1fc3AgLSAyKSk7CisgICAgICAgIG1fc3AtLTsKKyAgICAgICAgcmV0
dXJuIDE7CisgICAgfQorCisgICAgRXhwcmVzc2lvbiByZWdJMzIodWludDMyX3QgaW1tKQorICAg
IHsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoaW1tKSwgdGVtcG9yYXJ5QWRkcmVzcyht
X3NwKSk7CisgICAgICAgIG1fc3ArKzsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAg
RXhwcmVzc2lvbiByZWdGNjQoZG91YmxlIGltbSkKKyAgICB7CisgICAgICAgIHN0b3JlNjQoVHJ1
c3RlZEltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NChpbW0pKSwgdGVtcG9yYXJ5QWRkcmVz
cyhtX3NwKSk7CisgICAgICAgIG1fc3ArKzsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisg
ICAgdm9pZCBzZXRMb2NhbChFeHByZXNzaW9uLCB1aW50MzJfdCBsb2NhbEluZGV4KQorICAgIHsK
KyAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MobV9zcCAtIDEpLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIGxvY2FsQWRkcmVzcyhsb2NhbElu
ZGV4KSk7CisgICAgICAgIG1fc3AtLTsKKyAgICB9CisKKyAgICBFeHByZXNzaW9uIGdldExvY2Fs
STMyKHVpbnQzMl90IGxvY2FsSW5kZXgpCisgICAgeworICAgICAgICBsb2FkMzIobG9jYWxBZGRy
ZXNzKGxvY2FsSW5kZXgpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIHN0b3JlMzIoR1BSSW5m
bzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MobV9zcCkpOworICAgICAgICBtX3NwKys7CisgICAg
ICAgIHJldHVybiAxOworICAgIH0KKworICAgIEV4cHJlc3Npb24gY2FsbEludGVybmFsKHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJndW1lbnRzLCBjb25zdCBW
ZWN0b3I8RXhwcmVzc2lvbj4mLCBSZXR1cm5UeXBlIHJldHVyblR5cGUpCisgICAgeworICAgICAg
ICBzaXplX3QgYXJndW1lbnRDb3VudCA9IGFyZ3VtZW50cy5zaXplKCk7CisgICAgICAgIAorICAg
ICAgICBpbnQgbmV3U1AgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRS
ZWdpc3RlcnMoKSwgbV9sb2NhbFR5cGVzLnNpemUoKSArIG1fc3AgKyBhcmd1bWVudENvdW50KSAt
IG1fbG9jYWxUeXBlcy5zaXplKCk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBh
cmd1bWVudENvdW50OyArK2kpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoYXJndW1lbnRzW2ldKSB7
CisgICAgICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgICAgICAgICBsb2FkMzIodGVt
cG9yYXJ5QWRkcmVzcyhtX3NwIC0gYXJndW1lbnRDb3VudCArIGkpLCBHUFJJbmZvOjpyZWdUMCk7
CisgICAgICAgICAgICAgICAgb3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQ
UkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KEdQUkluZm86OnJlZ1QwLCB0
ZW1wb3JhcnlBZGRyZXNzKG5ld1NQIC0gaSAtIDEpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0b3JlNjQo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHRlbXBvcmFyeUFk
ZHJlc3MobmV3U1ApKTsKKyAgICAgICAgCisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLShu
ZXdTUCArIG1fbG9jYWxUeXBlcy5zaXplKCkgKyAzKSAqIDggLSA4KSwgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsgLy8gRklYTUU6IGhhY2t5CisKKyAg
ICAgICAgLy8gLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBt
X2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7CisgICAgICAgIAorICAgICAgICBzdG9yZTMy
KFRydXN0ZWRJbW0zMihhcmd1bWVudENvdW50ICsgMSksIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVn
aXN0ZXIsIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihS
ZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQorICAg
ICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKG1fbW9kdWxlKSwgVHJ1c3RlZEltbTMyKGZ1bmN0aW9uSW5k
ZXgpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oZ2V0
SW50ZXJuYWxGdW5jdGlvbikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgY2FsbChH
UFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKQorICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgCisgICAgICAg
IG1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJlZ1QwKTsgLy8gcmVnVDAg
aG9sZHMgY2FsbGVlLgorICAgICAgICBzdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBZGRyZXNzKHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBKU1N0YWNrOjpDYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CisgICAgICAgIAor
ICAgICAgICBEYXRhTGFiZWxQdHIgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjazsKKyAgICAg
ICAgSnVtcCBzbG93Q2FzZSA9IGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgR1BSSW5mbzo6
cmVnVDAsIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIFRydXN0ZWRJbW1QdHIoMCkpOwor
CisgICAgICAgIC8vIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9w
Y29kZUlEKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgcmVnVDApOworICAgICAgICBp
bmZvLT5zZXRDYWxsZWVHUFIoR1BSSW5mbzo6cmVnVDApOworICAgICAgICBtX2NhbGxDb21waWxh
dGlvbkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7CisgICAgICAgIG1fY2FsbENv
bXBpbGF0aW9uSW5mby5sYXN0KCkuaG90UGF0aEJlZ2luID0gYWRkcmVzc09mTGlua2VkRnVuY3Rp
b25DaGVjazsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmxhc3QoKS5jYWxsTGlua0lu
Zm8gPSBpbmZvOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8ubGFzdCgpLmhvdFBhdGhP
dGhlciA9IG5lYXJDYWxsKCk7CisgICAgICAgIAorICAgICAgICBKdW1wIGVuZCA9IGp1bXAoKTsK
KyAgICAgICAgCisgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tCisgICAgICAgIAorICAgICAgICBz
bG93Q2FzZS5saW5rKHRoaXMpOworICAgICAgICAKKyAgICAgICAgVGh1bmtHZW5lcmF0b3IgZ2Vu
ZXJhdG9yID0gbGlua1RodW5rR2VuZXJhdG9yRm9yKENvZGVGb3JDYWxsLCBSZWdpc3RlclByZXNl
cnZhdGlvbk5vdFJlcXVpcmVkKTsKKyAgICAgICAgCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOworCisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5m
by5sYXN0KCkuY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElT
dHViKGdlbmVyYXRvcikuY29kZSgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIC0tLS0tLS0tLS0t
LS0tCisgICAgICAgIAorICAgICAgICBlbmQubGluayh0aGlzKTsKKyAgICAgICAgCisgICAgICAg
IG1fc3AgLT0gYXJndW1lbnRDb3VudDsKKyAgICAgICAgCisgICAgICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoLW1fc3RhY2tIZWlnaHQgKiA4KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsgLy8gRklYTUU6IGhhY2t5CisgICAgICAgIAorICAgICAgICAv
LyBGSVhNRTogQ2FuIHdlIHJlYWxseSB1c2UgcmV0dXJuVmFsdWVHUFI/CisgICAgICAgIHN3aXRj
aCAocmV0dXJuVHlwZSkgeworICAgICAgICBjYXNlIFJldHVyblR5cGU6OkkzMjoKKyAgICAgICAg
ICAgIHN0b3JlMzIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHRlbXBvcmFyeUFkZHJlc3MobV9z
cCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9zcCsr
OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgdm9pZCByZXR1cm5J
MzIoRXhwcmVzc2lvbikKKyAgICB7CisgICAgICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKG1f
c3AgLSAxKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBvcjY0KEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAg
ICAgIG1fc3AtLTsKKyAgICAgICAgCisgICAgICAgIGRlYWxsb2NhdGVTcGFjZU9uU3RhY2soKTsK
KyAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgcmV0KCk7CisgICAgfQor
ICAgIAorICAgIEp1bXAgZW1pdEp1bXAoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGp1bXAoKTsK
KyAgICB9CisgICAgCisgICAgSnVtcCBicmFuY2hUZXN0STMyKFJlc3VsdENvbmRpdGlvbiBjb25k
aXRpb24sIEV4cHJlc3Npb24pCisgICAgeworICAgICAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVz
cyhtX3NwIC0gMSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgSnVtcCBqID0gYnJhbmNoVGVz
dDMyKGNvbmRpdGlvbiwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBtX3NwLS07CisgICAgICAg
IHJldHVybiBqOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxpbmtKdW1wKEp1bXAgaikKKyAgICB7
CisgICAgICAgIGoubGluayh0aGlzKTsKKyAgICB9CisgICAgCisgICAgUmVmUHRyPEpJVENvZGU+
IGppdENvZGUoKQorICAgIHsKKyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwg
KnRoaXMsIDAsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOworICAgICAgICAKKyAgICAgICAg
Zm9yIChhdXRvIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsg
KytpdGVyKQorICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhpdGVyLT5maXJzdCwgRnVuY3Rp
b25QdHIoaXRlci0+c2Vjb25kKSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICBDYWxsQ29tcGlsYXRpb25JbmZvJiBjb21waWxhdGlvbkluZm8gPSBtX2NhbGxDb21waWxhdGlv
bkluZm9baV07CisgICAgICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25J
bmZvLmNhbGxMaW5rSW5mbzsKKyAgICAgICAgICAgIGluZm8uc2V0Q2FsbExvY2F0aW9ucyhwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY29tcGlsYXRpb25JbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbiksCisgICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZihjb21waWxhdGlv
bkluZm8uaG90UGF0aEJlZ2luKSwKKyAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mTmVhckNhbGwoY29tcGlsYXRpb25JbmZvLmhvdFBhdGhPdGhlcikpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6c2hvd0Rpc2Fzc2VtYmx5KCkpIHsKKyAgICAg
ICAgICAgIG1fZGlzYXNzZW1ibGVyLT5kdW1wKHBhdGNoQnVmZmVyKTsKKyAgICAgICAgICAgIHBh
dGNoQnVmZmVyLmRpZEFscmVhZHlEaXNhc3NlbWJsZSgpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0aEFyaXR5Q2hlY2s7CisgICAgICAgIC8v
IFRPRE86IEltcGxlbWVudCBhcml0eSBjaGVjaworICAgICAgICBDb2RlUmVmIHJlc3VsdCA9IEZJ
TkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiQmFzZWxpbmUgSklUIGNvZGUgZm9yIFdlYkFzc2Vt
Ymx5IikpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUocmVzdWx0
LCB3aXRoQXJpdHlDaGVjaywgSklUQ29kZTo6QmFzZWxpbmVKSVQpKTsKKyAgICB9CisgICAgCitw
cml2YXRlOgorICAgIHZvaWQgYWxsb2NhdGVTcGFjZU9uU3RhY2soKQorICAgIHsKKyAgICAgICAg
Ly8gVE9ETzogQ2hlY2sgZm9yIHN0YWNrIG92ZXJmbG93LgorICAgICAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKC1tX3N0YWNrSGVpZ2h0ICogOCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBkZWFsbG9jYXRlU3BhY2VPblN0YWNrKCkKKyAgICB7CisgICAgICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIobV9zdGFja0hlaWdodCAqIDgpLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgfQorICAgIAorICAgIEFkZHJlc3MgbG9jYWxBZGRyZXNzKGludCBpKSBjb25z
dCAvLyBGSVhNRTogSXMgdGhpcyBjb3JyZWN0PworICAgIHsKKyAgICAgICAgcmV0dXJuIEFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIC1pICogOCAtIDgpOworICAgIH0KKyAgICAK
KyAgICBBZGRyZXNzIHRlbXBvcmFyeUFkZHJlc3MoaW50IGkpIGNvbnN0IC8vIEZJWE1FOiBJcyB0
aGlzIGNvcnJlY3Q/CisgICAgeworICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgLShpICsgbV9sb2NhbFR5cGVzLnNpemUoKSkgKiA4IC0gOCk7CisgICAg
fQorICAgIAorICAgIENhbGwgZW1pdE5ha2VkQ2FsbChDb2RlUHRyIGZ1bmN0aW9uKQorICAgIHsK
KyAgICAgICAgQ2FsbCBuYWtlZENhbGwgPSBuZWFyQ2FsbCgpOworICAgICAgICBtX2NhbGxzLmFw
cGVuZChzdGQ6Om1ha2VfcGFpcihuYWtlZENhbGwsIGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNz
KCkpKTsKKyAgICAgICAgcmV0dXJuIG5ha2VkQ2FsbDsKKyAgICB9CisgICAgCisgICAgTW9kdWxl
KiBtX21vZHVsZTsKKyAgICBpbnQgbV9zdGFja0hlaWdodDsKKyAgICAKKyAgICBpbnQgbV9zcDsg
Ly8gRklYTUU6IFJlbmFtZQorCisgICAgVmVjdG9yPFR5cGU+IG1fbG9jYWxUeXBlczsKKworICAg
IHN0ZDo6dW5pcXVlX3B0cjxKSVREaXNhc3NlbWJsZXI+IG1fZGlzYXNzZW1ibGVyOworICAgIFZl
Y3RvcjxzdGQ6OnBhaXI8Q2FsbCwgdm9pZCo+PiBtX2NhbGxzOworICAgIFZlY3RvcjxDYWxsQ29t
cGlsYXRpb25JbmZvPiBtX2NhbGxDb21waWxhdGlvbkluZm87Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdBU00pCisKKyNlbmRpZiAvLyBXYXNt
Q29kZUdlbmVyYXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTW9kdWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmU4MTA0Nzc1Y2UyZDg1ZGRjYmQxM2M0ZmQxMjdkMWUxZWNiMWY5ODcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmNw
cApAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlLmgiCisK
KyNpZiBFTkFCTEUoV0FTTSkKKworI2luY2x1ZGUgIkpJVENvZGUuaCIKKyNpbmNsdWRlICJKU0Fy
cmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTRnVu
Y3Rpb24uaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIlJlamVjdC5o
IgorI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXYXNtIHsKKwor
Y29uc3QgQ2xhc3NJbmZvIE1vZHVsZTo6c19pbmZvID0geyAiTW9kdWxlIiwgJkJhc2U6OnNfaW5m
bywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShNb2R1bGUpIH07CisKK3ZvaWQgTW9kdWxlOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworCisgICAgLy8gVE9ETzogTWFrZSB0aGlzIGxlc3Mg
aGFja3kKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyID0gQXJyYXlCdWZmZXI6
OmNyZWF0ZSgxMDI0LCAxKTsKKyAgICBKU0FycmF5QnVmZmVyKiBqc0FycmF5QnVmZmVyID0gSlNB
cnJheUJ1ZmZlcjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPmFycmF5QnVmZmVyU3RydWN0dXJl
KCksIGFycmF5QnVmZmVyLnJlbGVhc2UoKSk7CisgICAgbV9hcnJheUJ1ZmZlci5zZXQodm0sIHRo
aXMsIGpzQXJyYXlCdWZmZXIpOworfQorCitKU0Z1bmN0aW9uKiBNb2R1bGU6OmZ1bmN0aW9uKHNp
emVfdCBmdW5jdGlvbkluZGV4KSBjb25zdAoreworICAgIHJldHVybiBtX2Z1bmN0aW9uc1tmdW5j
dGlvbkluZGV4XS5nZXQoKTsKK30KKworY29uc3Qgdm9pZCogTW9kdWxlOjphcnJheUJ1ZmZlckRh
dGEoKSBjb25zdAoreworICAgIHJldHVybiBtX2FycmF5QnVmZmVyLT5pbXBsKCktPmRhdGEoKTsK
K30KKwordm9pZCBNb2R1bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBNb2R1bGUqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxNb2R1
bGUqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAg
ICBmb3IgKGF1dG8gZnVuY3Rpb24gOiB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9ucykKKyAgICAgICAg
dmlzaXRvci5hcHBlbmQoJmZ1bmN0aW9uKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVj
dC0+bV9hcnJheUJ1ZmZlcik7Cit9CisKK2Jvb2wgTW9kdWxlOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgTW9kdWxlKiB0aGlzT2JqZWN0ID0ganND
YXN0PE1vZHVsZSo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuYnVmZmVyKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5LCB0aGlzT2JqZWN0LT5tX2FycmF5QnVmZmVyLmdldCgpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIEJhc2U6OmdldE93blBy
b3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCit2
b2lkIE1vZHVsZTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7
CisgICAgTW9kdWxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PE1vZHVsZSo+KGNlbGwpOworICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikgeworICAgICAg
ICByZWplY3QoZXhlYywgc2xvdC5pc1N0cmljdE1vZGUoKSwgIkF0dGVtcHRpbmcgdG8gd3JpdGUg
dG8gYSByZWFkLW9ubHkgYXJyYXkgYnVmZmVyIHByb3BlcnR5LiIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNsb3QpOworfQorCitib29sIE1vZHVsZTo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBj
b25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7
CisgICAgTW9kdWxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PE1vZHVsZSo+KG9iamVjdCk7CisgICAg
aWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKQorICAgICAg
ICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUg
cmVhZC1vbmx5IGFycmF5IGJ1ZmZlciBwcm9wZXJ0eS4iKTsKKworICAgIHJldHVybiBCYXNlOjpk
ZWZpbmVPd25Qcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0
b3IsIHNob3VsZFRocm93KTsKK30KKworYm9vbCBNb2R1bGU6OmRlbGV0ZVByb3BlcnR5KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorewor
ICAgIE1vZHVsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxNb2R1bGUqPihjZWxsKTsKKyAgICBpZiAo
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKK30KKwordm9pZCBNb2R1bGU6OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgTW9kdWxl
KiB0aGlzT2JqZWN0ID0ganNDYXN0PE1vZHVsZSo+KG9iamVjdCk7CisgICAgaWYgKG1vZGUuaW5j
bHVkZURvbnRFbnVtUHJvcGVydGllcygpKQorICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmJ1ZmZlcik7CisgICAgCisgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXQVNNKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1vZHVsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjYmQ4M2I0NjEzNGFlOGI2ZTYyYTRj
OTkwM2I4NmVlZTI2ODVkMGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTW9kdWxlLmgKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdhc21Nb2R1bGVfaAorI2RlZmlu
ZSBXYXNtTW9kdWxlX2gKKworI2lmIEVOQUJMRShXQVNNKQorCisjaW5jbHVkZSAiSlNPYmplY3Qu
aCIKKyNpbmNsdWRlICJXYXNtT3Bjb2Rlcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNw
YWNlIFdhc20geworCitjbGFzcyBNb2R1bGVQYXJzZXI7CitjbGFzcyBQYXJzZXI7CisKK2NsYXNz
IE1vZHVsZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFt
ZXMgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CisKKyAgICBzdGF0aWMgTW9kdWxlKiBj
cmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UpCisgICAgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNyZWF0
ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0KTsgLy8gRklYTUU6IElzIHRoaXMgcmlnaHQ/Cisg
ICAgICAgIE1vZHVsZSogbW9kdWxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8TW9kdWxl
Pih2bS5oZWFwKSkgTW9kdWxlKHZtLCBzdHJ1Y3R1cmUsIHNvdXJjZSk7CisgICAgICAgIG1vZHVs
ZS0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBtb2R1
bGU7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBq
c051bGwoKSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwor
ICAgIH0KKworICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uKHNpemVfdCBmdW5jdGlvbkluZGV4KSBj
b25zdDsKKyAgICBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uSW1wb3J0TmFtZShzaXplX3QgZnVuY3Rp
b25JbXBvcnRJbmRleCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbkltcG9ydE5hbWVzW2Z1bmN0
aW9uSW1wb3J0SW5kZXhdOyB9CisgICAgY29uc3Qgdm9pZCogYXJyYXlCdWZmZXJEYXRhKCkgY29u
c3Q7CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIE1vZHVsZVBhcnNlcjsKKyAgICBmcmll
bmQgY2xhc3MgUGFyc2VyOworCisgICAgc3RydWN0IEZ1bmNJbXBvcnRTaWduYXR1cmUgeworICAg
ICAgICB1aW50MzJfdCBzaWduYXR1cmVJbmRleDsKKyAgICAgICAgdWludDMyX3QgZnVuY0ltcG9y
dEluZGV4OworICAgIH07CisKKyAgICBzdHJ1Y3QgRnVuY1B0clRhYmxlIHsKKyAgICAgICAgdWlu
dDMyX3Qgc2lnbmF0dXJlSW5kZXg7CisgICAgICAgIFZlY3Rvcjx1aW50MzJfdD4gZWxlbWVudHM7
CisgICAgfTsKKworICAgIE1vZHVsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25z
dCBTb3VyY2VDb2RlJiBzb3VyY2UpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAg
ICAgICAsIG1fc291cmNlKHNvdXJjZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0Kik7CisKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGRlZmlu
ZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBk
ZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAgIHN0
YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKworICAgIFNvdXJjZUNv
ZGUgbV9zb3VyY2U7CisKKyAgICBWZWN0b3I8U2lnbmF0dXJlPiBtX3NpZ25hdHVyZXM7CisgICAg
VmVjdG9yPHVpbnQzMl90PiBtX2NvbnN0YW50STMyczsKKyAgICBWZWN0b3I8ZmxvYXQ+IG1fY29u
c3RhbnRGMzJzOworICAgIFZlY3Rvcjxkb3VibGU+IG1fY29uc3RhbnRGNjRzOworICAgIFZlY3Rv
cjxTdHJpbmc+IG1fZnVuY3Rpb25JbXBvcnROYW1lczsKKyAgICBWZWN0b3I8RnVuY0ltcG9ydFNp
Z25hdHVyZT4gbV9mdW5jSW1wb3J0U2lnbmF0dXJlczsKKyAgICBWZWN0b3I8VHlwZT4gbV9nbG9i
YWxUeXBlczsKKyAgICBWZWN0b3I8dWludDMyX3Q+IG1fZnVuY1NpZ25hdHVyZXM7CisgICAgVmVj
dG9yPEZ1bmNQdHJUYWJsZT4gbV9mdW5jUHRyVGFibGVzOworCisgICAgVmVjdG9yPFdyaXRlQmFy
cmllcjxKU0Z1bmN0aW9uPj4gbV9mdW5jdGlvbnM7CisgICAgV3JpdGVCYXJyaWVyPEpTQXJyYXlC
dWZmZXI+IG1fYXJyYXlCdWZmZXI7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQor
CisjZW5kaWYgLy8gRU5BQkxFKFdBU00pCisKKyNlbmRpZiAvLyBXYXNtTW9kdWxlX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZDQzNWNlZWMzMDU2ZjdlOWVhODYyZmFmODlkZDIzNzA4N2QxZjlkOQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCkBA
IC0wLDAgKzEsMjYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLyoKKyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4w
ICh0aGUgIkxpY2Vuc2UiKTsKKyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBj
b21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRo
ZSBMaWNlbnNlIGF0CisKKyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0y
LjAKKworIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4g
d3JpdGluZywgc29mdHdhcmUKKyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0
cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05E
SVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIFNlZSB0aGUg
TGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBh
bmQKKyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlUGFyc2VyLmgiCisKKyNpZiBFTkFCTEUoV0FTTSkK
KworI2luY2x1ZGUgIkpJVENvZGUuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIldhc21PcGNvZGVzLmgiCisjaW5jbHVkZSAi
V2FzbVBhcnNlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFt
ZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXYXNtIHsKKworTW9kdWxlKiBNb2R1bGVQYXJzZXI6
OnBhcnNlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNl
Q29kZSYgc291cmNlKQoreworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiYgYnVmZmVyID0gc3RhdGlj
X2Nhc3Q8V2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcio+KHNvdXJjZS5wcm92aWRlcigpKS0+cmVh
bFNvdXJjZSgpOworICAgIG1fbW9kdWxlID0gTW9kdWxlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgc291cmNlKTsKKworICAgIG1fcmVhZGVyID0gUmVhZGVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KGJ1ZmZlci5kYXRhKCkpKTsKKyAgICBpZiAobV9yZWFkZXIuZml4ZWRXaWR0
aDx1aW50MzJfdD4oKSAhPSBtYWdpY051bWJlcikKKyAgICAgICAgYWJvcnQoKTsKKyAgICBtX3Jl
YWRlci5maXhlZFdpZHRoPHVpbnQzMl90PigpOyAvLyBvdXRwdXQgc2l6ZSBpbiBhc20uanMgZm9y
bWF0CisKKyAgICBwYXJzZUNvbnN0YW50UG9vbFNlY3Rpb24oKTsKKyAgICBwYXJzZVNpZ25hdHVy
ZVNlY3Rpb24oKTsKKyAgICBwYXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlvbigpOworICAgIHBhcnNl
R2xvYmFsU2VjdGlvbigpOworICAgIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvblNlY3Rpb24oKTsK
KyAgICBwYXJzZUZ1bmN0aW9uUG9pbnRlclRhYmxlcygpOworICAgIHBhcnNlRnVuY3Rpb25EZWZp
bml0aW9uU2VjdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICBwYXJzZUV4cG9ydFNlY3Rpb24o
dm0pOworICAgIAorICAgIHJldHVybiBtX21vZHVsZTsKK30KKwordm9pZCBNb2R1bGVQYXJzZXI6
OnBhcnNlQ29uc3RhbnRQb29sU2VjdGlvbigpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZJMzJz
ID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGMzJzID0gbV9yZWFk
ZXIuaW1tVTMyKCk7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGNjRzID0gbV9yZWFkZXIuaW1tVTMy
KCk7CisKKyAgICBWZWN0b3I8dWludDMyX3Q+IGNvbnN0YW50STMycyhudW1iZXJPZkkzMnMpOwor
ICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkkzMnM7ICsraSkKKyAgICAgICAg
Y29uc3RhbnRJMzJzW2ldID0gbV9yZWFkZXIuaW1tVTMyKCk7CisKKyAgICBWZWN0b3I8ZmxvYXQ+
IGNvbnN0YW50RjMycyhudW1iZXJPZkYzMnMpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkg
PCBudW1iZXJPZkYzMnM7ICsraSkKKyAgICAgICAgY29uc3RhbnRGMzJzW2ldID0gbV9yZWFkZXIu
Zml4ZWRXaWR0aDxmbG9hdD4oKTsKKworICAgIFZlY3Rvcjxkb3VibGU+IGNvbnN0YW50RjY0cyhu
dW1iZXJPZkY2NHMpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkY2NHM7
ICsraSkKKyAgICAgICAgY29uc3RhbnRGNjRzW2ldID0gbV9yZWFkZXIuZml4ZWRXaWR0aDxkb3Vi
bGU+KCk7CisKKyAgICBtX21vZHVsZS0+bV9jb25zdGFudEkzMnMgPSBXVEY6Om1vdmUoY29uc3Rh
bnRJMzJzKTsKKyAgICBtX21vZHVsZS0+bV9jb25zdGFudEYzMnMgPSBXVEY6Om1vdmUoY29uc3Rh
bnRGMzJzKTsKKyAgICBtX21vZHVsZS0+bV9jb25zdGFudEY2NHMgPSBXVEY6Om1vdmUoY29uc3Rh
bnRGNjRzKTsKK30KKwordm9pZCBNb2R1bGVQYXJzZXI6OnBhcnNlU2lnbmF0dXJlU2VjdGlvbigp
Cit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZTaWduYXR1cmVzID0gbV9yZWFkZXIuaW1tVTMyKCk7
CisgICAgVmVjdG9yPFNpZ25hdHVyZT4gc2lnbmF0dXJlcyhudW1iZXJPZlNpZ25hdHVyZXMpOwor
ICAgIGZvciAodWludDMyX3Qgc2lnbmF0dXJlSW5kZXggPSAwOyBzaWduYXR1cmVJbmRleCA8IG51
bWJlck9mU2lnbmF0dXJlczsgKytzaWduYXR1cmVJbmRleCkgeworICAgICAgICBSZXR1cm5UeXBl
IHJldHVyblR5cGUgPSBtX3JlYWRlci5yZXR1cm5UeXBlKCk7CisgICAgICAgIHVpbnQzMl90IGFy
Z3VtZW50Q291bnQgPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICAgICAgU2lnbmF0dXJlIHNpZ25h
dHVyZShyZXR1cm5UeXBlLCBhcmd1bWVudENvdW50KTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBh
cmd1bWVudEluZGV4ID0gMDsgYXJndW1lbnRJbmRleCA8IGFyZ3VtZW50Q291bnQ7ICsrYXJndW1l
bnRJbmRleCkKKyAgICAgICAgICAgIHNpZ25hdHVyZS5hcmd1bWVudHNbYXJndW1lbnRJbmRleF0g
PSBtX3JlYWRlci50eXBlKCk7CisgICAgICAgIHNpZ25hdHVyZXNbc2lnbmF0dXJlSW5kZXhdID0g
V1RGOjptb3ZlKHNpZ25hdHVyZSk7CisgICAgfQorCisgICAgbV9tb2R1bGUtPm1fc2lnbmF0dXJl
cyA9IFdURjo6bW92ZShzaWduYXR1cmVzKTsKK30KKwordm9pZCBNb2R1bGVQYXJzZXI6OnBhcnNl
RnVuY3Rpb25JbXBvcnRTZWN0aW9uKCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZkZ1bmNJbXBv
cnRzID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jSW1wb3J0
U2lnbmF0dXJlcyA9IG1fcmVhZGVyLmltbVUzMigpOworCisgICAgbV9tb2R1bGUtPm1fZnVuY3Rp
b25JbXBvcnROYW1lcy5yZXNlcnZlQ2FwYWNpdHkobnVtYmVyT2ZGdW5jSW1wb3J0cyk7CisKKyAg
ICBWZWN0b3I8TW9kdWxlOjpGdW5jSW1wb3J0U2lnbmF0dXJlPiBmdW5jSW1wb3J0U2lnbmF0dXJl
cyhudW1iZXJPZkZ1bmNJbXBvcnRTaWduYXR1cmVzKTsKKyAgICBNb2R1bGU6OkZ1bmNJbXBvcnRT
aWduYXR1cmUqIGZ1bmNJbXBvcnRTaWduYXR1cmUgPSBmdW5jSW1wb3J0U2lnbmF0dXJlcy5kYXRh
KCk7CisgICAgZm9yICh1aW50MzJfdCBmdW5jSW1wb3J0SW5kZXggPSAwOyBmdW5jSW1wb3J0SW5k
ZXggPCBudW1iZXJPZkZ1bmNJbXBvcnRzOyArK2Z1bmNJbXBvcnRJbmRleCkgeworICAgICAgICBT
dHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgICAgIHdoaWxlIChjaGFyIGMgPSBtX3JlYWRlci5z
aW5nbGVDaGFyKCkpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChjKTsKKyAgICAgICAgbV9t
b2R1bGUtPm1fZnVuY3Rpb25JbXBvcnROYW1lcy5hcHBlbmQoYnVpbGRlci50b1N0cmluZygpKTsK
KworICAgICAgICB1aW50MzJfdCBudW1iZXJPZlNpZ25hdHVyZXMgPSBtX3JlYWRlci5pbW1VMzIo
KTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mU2lnbmF0dXJlczsg
KytpKSB7CisgICAgICAgICAgICBmdW5jSW1wb3J0U2lnbmF0dXJlLT5zaWduYXR1cmVJbmRleCA9
IG1fcmVhZGVyLmltbVUzMigpOworICAgICAgICAgICAgZnVuY0ltcG9ydFNpZ25hdHVyZS0+ZnVu
Y0ltcG9ydEluZGV4ID0gZnVuY0ltcG9ydEluZGV4OworICAgICAgICAgICAgZnVuY0ltcG9ydFNp
Z25hdHVyZSsrOworICAgICAgICB9CisgICAgfQorICAgIGFzc2VydChmdW5jSW1wb3J0U2lnbmF0
dXJlID09IGZ1bmNJbXBvcnRTaWduYXR1cmVzLmRhdGEoKSArIG51bWJlck9mRnVuY0ltcG9ydFNp
Z25hdHVyZXMpOworCisgICAgbV9tb2R1bGUtPm1fZnVuY0ltcG9ydFNpZ25hdHVyZXMgPSBXVEY6
Om1vdmUoZnVuY0ltcG9ydFNpZ25hdHVyZXMpOworfQorCit2b2lkIE1vZHVsZVBhcnNlcjo6cGFy
c2VHbG9iYWxTZWN0aW9uKCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZkkzMlplcm8gPSBtX3Jl
YWRlci5pbW1VMzIoKTsKKyAgICB1aW50MzJfdCBudW1iZXJPZkYzMlplcm8gPSBtX3JlYWRlci5p
bW1VMzIoKTsKKyAgICB1aW50MzJfdCBudW1iZXJPZkY2NFplcm8gPSBtX3JlYWRlci5pbW1VMzIo
KTsKKyAgICB1aW50MzJfdCBudW1iZXJPZkkzMkltcG9ydCA9IG1fcmVhZGVyLmltbVUzMigpOwor
ICAgIHVpbnQzMl90IG51bWJlck9mRjMySW1wb3J0ID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAg
dWludDMyX3QgbnVtYmVyT2ZGNjRJbXBvcnQgPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICB1aW50
MzJfdCBudW1iZXJPZkdsb2JhbFZhcnMgPSBudW1iZXJPZkkzMlplcm8gKyBudW1iZXJPZkYzMlpl
cm8gKyBudW1iZXJPZkY2NFplcm8gKyBudW1iZXJPZkkzMkltcG9ydCArIG51bWJlck9mRjMySW1w
b3J0ICsgbnVtYmVyT2ZGNjRJbXBvcnQ7CisKKyAgICBWZWN0b3I8VHlwZT4gZ2xvYmFsVHlwZXMo
bnVtYmVyT2ZHbG9iYWxWYXJzKTsKKyAgICBzaXplX3QgZ2xvYmFsVHlwZUluZGV4ID0gMDsKKyAg
ICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZJMzJaZXJvOyArK2kpCisgICAgICAg
IGdsb2JhbFR5cGVzW2dsb2JhbFR5cGVJbmRleCsrXSA9IFR5cGU6OkkzMjsKKyAgICBmb3IgKHVp
bnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGMzJaZXJvOyArK2kpCisgICAgICAgIGdsb2JhbFR5
cGVzW2dsb2JhbFR5cGVJbmRleCsrXSA9IFR5cGU6OkYzMjsKKyAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgbnVtYmVyT2ZGNjRaZXJvOyArK2kpCisgICAgICAgIGdsb2JhbFR5cGVzW2dsb2Jh
bFR5cGVJbmRleCsrXSA9IFR5cGU6OkY2NDsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwg
bnVtYmVyT2ZJMzJJbXBvcnQ7ICsraSkgeworICAgICAgICB3aGlsZSAobV9yZWFkZXIuc2luZ2xl
Q2hhcigpKSB7IH0KKyAgICAgICAgZ2xvYmFsVHlwZXNbZ2xvYmFsVHlwZUluZGV4KytdID0gVHlw
ZTo6STMyOworICAgIH0KKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGMzJJ
bXBvcnQ7ICsraSkgeworICAgICAgICB3aGlsZSAobV9yZWFkZXIuc2luZ2xlQ2hhcigpKSB7IH0K
KyAgICAgICAgZ2xvYmFsVHlwZXNbZ2xvYmFsVHlwZUluZGV4KytdID0gVHlwZTo6RjMyOworICAg
IH0KKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGNjRJbXBvcnQ7ICsraSkg
eworICAgICAgICB3aGlsZSAobV9yZWFkZXIuc2luZ2xlQ2hhcigpKSB7IH0KKyAgICAgICAgZ2xv
YmFsVHlwZXNbZ2xvYmFsVHlwZUluZGV4KytdID0gVHlwZTo6RjY0OworICAgIH0KKyAgICBtX21v
ZHVsZS0+bV9nbG9iYWxUeXBlcyA9IFdURjo6bW92ZShnbG9iYWxUeXBlcyk7Cit9CisKK3ZvaWQg
TW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKCkKK3sKKyAgICB1
aW50MzJfdCBudW1iZXJPZkZ1bmN0aW9ucyA9IG1fcmVhZGVyLmltbVUzMigpOworICAgIFZlY3Rv
cjx1aW50MzJfdD4gZnVuY1NpZ25hdHVyZXMobnVtYmVyT2ZGdW5jdGlvbnMpOworICAgIGZvciAo
dWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkZ1bmN0aW9uczsgKytpKQorICAgICAgICBmdW5j
U2lnbmF0dXJlc1tpXSA9IG1fcmVhZGVyLmltbVUzMigpOworCisgICAgbV9tb2R1bGUtPm1fZnVu
Y1NpZ25hdHVyZXMgPSBXVEY6Om1vdmUoZnVuY1NpZ25hdHVyZXMpOworfQorCit2b2lkIE1vZHVs
ZVBhcnNlcjo6cGFyc2VGdW5jdGlvblBvaW50ZXJUYWJsZXMoKQoreworICAgIHVpbnQzMl90IG51
bWJlck9mRnVuY1B0clRhYmxlcyA9IG1fcmVhZGVyLmltbVUzMigpOworICAgIFZlY3RvcjxNb2R1
bGU6OkZ1bmNQdHJUYWJsZT4gZnVuY1B0clRhYmxlcyhudW1iZXJPZkZ1bmNQdHJUYWJsZXMpOwor
ICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkZ1bmNQdHJUYWJsZXM7ICsraSkg
eworICAgICAgICBmdW5jUHRyVGFibGVzW2ldLnNpZ25hdHVyZUluZGV4ID0gbV9yZWFkZXIuaW1t
VTMyKCk7CisgICAgICAgIHVpbnQzMl90IG51bUVsZW1lbnRzID0gbV9yZWFkZXIuaW1tVTMyKCk7
CisgICAgICAgIFZlY3Rvcjx1aW50MzJfdD4gZWxlbWVudHMobnVtRWxlbWVudHMpOworICAgICAg
ICBmb3IgKHVpbnQzMl90IGogPSAwOyBqIDwgbnVtRWxlbWVudHM7ICsraikKKyAgICAgICAgICAg
IGVsZW1lbnRzW2pdID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgICAgIGZ1bmNQdHJUYWJsZXNb
aV0uZWxlbWVudHMgPSBXVEY6Om1vdmUoZWxlbWVudHMpOworICAgIH0KKworICAgIG1fbW9kdWxl
LT5tX2Z1bmNQdHJUYWJsZXMgPSBXVEY6Om1vdmUoZnVuY1B0clRhYmxlcyk7Cit9CisKK3ZvaWQg
TW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvblNlY3Rpb24oVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9tb2R1bGUtPm1fZnVuY1NpZ25hdHVyZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIHBhcnNlRnVu
Y3Rpb25EZWZpbml0aW9uKHZtLCBnbG9iYWxPYmplY3QsIGkpOworfQorCit2b2lkIE1vZHVsZVBh
cnNlcjo6cGFyc2VFeHBvcnRTZWN0aW9uKFZNJiB2bSkKK3sKKyAgICBzd2l0Y2ggKG1fcmVhZGVy
LmV4cG9ydEZvcm1hdCgpKSB7CisgICAgY2FzZSBFeHBvcnRGb3JtYXQ6OkRlZmF1bHQ6IHsKKyAg
ICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleCA9IG1fcmVhZGVyLmltbVUzMigpOworICAgICAg
ICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImRl
ZmF1bHQiKTsgLy8gVE9ETzogVXNlIG90aGVyIG5hbWVzCisgICAgICAgIG1fbW9kdWxlLT5wdXRE
aXJlY3Qodm0sIGlkZW50aWZpZXIsIG1fbW9kdWxlLT5tX2Z1bmN0aW9uc1tmdW5jdGlvbkluZGV4
XS5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEV4cG9ydEZvcm1hdDo6
UmVjb3JkOiB7CisgICAgICAgIHVpbnQzMl90IG51bWJlck9mRXhwb3J0cyA9IG1fcmVhZGVyLmlt
bVUzMigpOworICAgICAgICBmb3IgKHVpbnQzMl90IGV4cG9ydEluZGV4ID0gMDsgZXhwb3J0SW5k
ZXggPCBudW1iZXJPZkV4cG9ydHM7ICsrZXhwb3J0SW5kZXgpIHsKKyAgICAgICAgICAgIFN0cmlu
Z0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgICAgIHdoaWxlIChjaGFyIGMgPSBtX3JlYWRlci5z
aW5nbGVDaGFyKCkpCisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoYyk7CisgICAgICAg
ICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4ID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgICAg
ICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwg
YnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgICAgIG1fbW9kdWxlLT5wdXREaXJlY3Qodm0s
IGlkZW50aWZpZXIsIG1fbW9kdWxlLT5tX2Z1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS5nZXQoKSk7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIE1vZHVsZVBh
cnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBzaXplX3QgZnVuY3Rpb25JbmRleCkKK3sKKyAgICBjb25zdCB1aW50OF90KiBi
dWZmZXIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdGF0aWNfY2FzdDxXZWJB
c3NlbWJseVNvdXJjZVByb3ZpZGVyKj4obV9tb2R1bGUtPm1fc291cmNlLnByb3ZpZGVyKCkpLT5y
ZWFsU291cmNlKCkuZGF0YSgpKTsKKyAgICB1bnNpZ25lZCBzdGFydE9mZnNldEluU291cmNlID0g
bV9yZWFkZXIuY3Vyc29yKCkgLSBidWZmZXI7IC8vIEZJWE1FOgorCisgICAgY29uc3QgdWludDhf
dCogZW5kQ3Vyc29yOworICAgIFdhc206OlBhcnNlcjo6Y2hlY2tTeW50YXhBbmRDYWxjdWxhdGVT
b3VyY2VSYW5nZShtX21vZHVsZSwgZnVuY3Rpb25JbmRleCwgc3RhcnRPZmZzZXRJblNvdXJjZSwg
ZW5kQ3Vyc29yKTsKKyAgICBtX3JlYWRlci5zZXRDdXJzb3IoZW5kQ3Vyc29yKTsgLy8gRklYTUU6
IGhhY2t5CisKKyAgICB1bnNpZ25lZCBlbmRPZmZzZXRJblNvdXJjZSA9IGVuZEN1cnNvciAtIGJ1
ZmZlcjsKKworICAgIC8vIEZJWE1FOiBzb3VyY2UKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUgPSBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSh2bSwgU291cmNlQ29kZShtX21v
ZHVsZS0+bV9zb3VyY2UucHJvdmlkZXIoKSwgc3RhcnRPZmZzZXRJblNvdXJjZSwgZW5kT2Zmc2V0
SW5Tb3VyY2UsIDEsIDEpLCBtX21vZHVsZSwgZnVuY3Rpb25JbmRleCwgc3RhcnRPZmZzZXRJblNv
dXJjZSk7CisKKyAgICBKU0Z1bmN0aW9uKiBqc0Z1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRl
KHZtLCBleGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpOworICAgIG1fbW9kdWxlLT5tX2Z1bmN0aW9u
cy5hcHBlbmQoV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+KHZtLCBtX21vZHVsZSwganNGdW5jdGlv
bikpOworfQorCitNb2R1bGUqIGNvbXBpbGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UpCit7CisgICAgTW9kdWxlUGFyc2VyIG1vZHVsZVBhcnNlcjsKKyAgICByZXR1
cm4gbW9kdWxlUGFyc2VyLnBhcnNlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSwgc291cmNlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlm
IC8vIEVOQUJMRShXQVNNKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1vZHVsZVBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVs
ZVBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiYTNmNTE2MDM3MDI5ZmZjZmE1Nzc2NDk0OWM4MzM4ZmE5
MGNkMjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlUGFyc2VyLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNl
bnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgeW91IG1heSBub3QgdXNlIHRoaXMg
ZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIFlvdSBtYXkgb2J0
YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xp
Y2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcg
b3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgZGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyBXSVRIT1VUIFdB
UlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1w
bGllZC4KKyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5p
bmcgcGVybWlzc2lvbnMgYW5kCisgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLwor
CisjaWZuZGVmIFdhc21Nb2R1bGVQYXJzZXJfaAorI2RlZmluZSBXYXNtTW9kdWxlUGFyc2VyX2gK
KworI2lmIEVOQUJMRShXQVNNKQorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJX
YXNtTW9kdWxlLmgiCisjaW5jbHVkZSAiV2FzbVJlYWRlci5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworbmFtZXNwYWNlIFdhc20geworCitjbGFzcyBNb2R1bGVQYXJzZXIgeworcHVibGljOgorICAg
IE1vZHVsZSogcGFyc2UoVk0mLCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IFNvdXJjZUNvZGUmKTsK
KworcHJpdmF0ZToKKyAgICB2b2lkIHBhcnNlQ29uc3RhbnRQb29sU2VjdGlvbigpOworICAgIHZv
aWQgcGFyc2VTaWduYXR1cmVTZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9uSW1wb3J0
U2VjdGlvbigpOworICAgIHZvaWQgcGFyc2VHbG9iYWxTZWN0aW9uKCk7CisgICAgdm9pZCBwYXJz
ZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9uUG9p
bnRlclRhYmxlcygpOworICAgIHZvaWQgcGFyc2VGdW5jdGlvbkRlZmluaXRpb25TZWN0aW9uKFZN
JiwgSlNHbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIHBhcnNlRXhwb3J0U2VjdGlvbihWTSYpOwor
CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
c2l6ZV90IGZ1bmN0aW9uSW5kZXgpOworCisgICAgTW9kdWxlKiBtX21vZHVsZTsgLy8gRklYTUU6
IHNob3VsZG4ndCBiZSBhIHN0YXRlCisgICAgUmVhZGVyIG1fcmVhZGVyOworfTsKKworSlNfRVhQ
T1JUX1BSSVZBVEUgTW9kdWxlKiBjb21waWxlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUm
KTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXQVNN
KQorCisjZW5kaWYgLy8gV2FzbU1vZHVsZVBhcnNlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtT3Bjb2Rlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU9wY29kZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OTQ0MTAxYzc0ZDM4Y2UwMGE3NDBlZGI3MjNk
MWMzNGM4MGZkZDRkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU9wY29kZXMuaApAQCAtMCwwICsxLDM2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBM
aWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgeW91IG1heSBub3QgdXNlIHRo
aXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIFlvdSBtYXkg
b2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgaHR0cDovL3d3dy5hcGFjaGUub3Jn
L2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBs
YXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgZGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyBXSVRIT1VU
IFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3Ig
aW1wbGllZC4KKyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zl
cm5pbmcgcGVybWlzc2lvbnMgYW5kCisgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisq
LworCisjaWZuZGVmIFdhc21PcGNvZGVzX2gKKyNkZWZpbmUgV2FzbU9wY29kZXNfaAorCisjaWYg
RU5BQkxFKFdBU00pCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCituYW1lc3BhY2UgV2FzbSB7CisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBtYWdpY051bWJl
ciA9IDB4NmQ3MzYxNzc7CisKK2VudW0gY2xhc3MgU3RtdCA6IHVpbnQ4X3QgeworICAgIFNldExv
YywKKyAgICBTZXRHbG8sCisgICAgSTMyU3RvcmU4LAorICAgIEkzMlN0b3JlT2ZmOCwKKyAgICBJ
MzJTdG9yZTE2LAorICAgIEkzMlN0b3JlT2ZmMTYsCisgICAgSTMyU3RvcmUzMiwKKyAgICBJMzJT
dG9yZU9mZjMyLAorICAgIEYzMlN0b3JlLAorICAgIEYzMlN0b3JlT2ZmLAorICAgIEY2NFN0b3Jl
LAorICAgIEY2NFN0b3JlT2ZmLAorICAgIENhbGxJbnQsCisgICAgQ2FsbEluZCwKKyAgICBDYWxs
SW1wLAorICAgIFJldCwKKyAgICBCbG9jaywKKyAgICBJZlRoZW4sCisgICAgSWZFbHNlLAorICAg
IFdoaWxlLAorICAgIERvLAorICAgIExhYmVsLAorICAgIEJyZWFrLAorICAgIEJyZWFrTGFiZWws
CisgICAgQ29udGludWUsCisgICAgQ29udGludWVMYWJlbCwKKyAgICBTd2l0Y2gsCisKKyAgICBC
YWQKK307CisKK2VudW0gY2xhc3MgU3RtdFdpdGhJbW0gOiB1aW50OF90IHsKKyAgICBTZXRMb2Ms
CisgICAgU2V0R2xvLAorICAgIFJlc2V2ZWQxLAorICAgIFJlc2V2ZWQyLAorCisgICAgQmFkCit9
OworCitlbnVtIGNsYXNzIFN3aXRjaENhc2UgOiB1aW50OF90IHsKKyAgICBDYXNlMCwKKyAgICBD
YXNlMSwKKyAgICBDYXNlTiwKKyAgICBEZWZhdWx0MCwKKyAgICBEZWZhdWx0MSwKKyAgICBEZWZh
dWx0TgorfTsKKworZW51bSBjbGFzcyBJMzIgOiB1aW50OF90IHsKKyAgICBMaXRQb29sLAorICAg
IExpdEltbSwKKyAgICBHZXRMb2MsCisgICAgR2V0R2xvLAorICAgIFNldExvYywKKyAgICBTZXRH
bG8sCisgICAgU0xvYWQ4LAorICAgIFNMb2FkT2ZmOCwKKyAgICBVTG9hZDgsCisgICAgVUxvYWRP
ZmY4LAorICAgIFNMb2FkMTYsCisgICAgU0xvYWRPZmYxNiwKKyAgICBVTG9hZDE2LAorICAgIFVM
b2FkT2ZmMTYsCisgICAgTG9hZDMyLAorICAgIExvYWRPZmYzMiwKKyAgICBTdG9yZTgsCisgICAg
U3RvcmVPZmY4LAorICAgIFN0b3JlMTYsCisgICAgU3RvcmVPZmYxNiwKKyAgICBTdG9yZTMyLAor
ICAgIFN0b3JlT2ZmMzIsCisgICAgQ2FsbEludCwKKyAgICBDYWxsSW5kLAorICAgIENhbGxJbXAs
CisgICAgQ29uZCwKKyAgICBDb21tYSwKKyAgICBGcm9tRjMyLAorICAgIEZyb21GNjQsCisgICAg
TmVnLAorICAgIEFkZCwKKyAgICBTdWIsCisgICAgTXVsLAorICAgIFNEaXYsCisgICAgVURpdiwK
KyAgICBTTW9kLAorICAgIFVNb2QsCisgICAgQml0Tm90LAorICAgIEJpdE9yLAorICAgIEJpdEFu
ZCwKKyAgICBCaXRYb3IsCisgICAgTHNoLAorICAgIEFyaXRoUnNoLAorICAgIExvZ2ljUnNoLAor
ICAgIENseiwKKyAgICBMb2dpY05vdCwKKyAgICBFcUkzMiwKKyAgICBFcUYzMiwKKyAgICBFcUY2
NCwKKyAgICBORXFJMzIsCisgICAgTkVxRjMyLAorICAgIE5FcUY2NCwKKyAgICBTTGVUaEkzMiwK
KyAgICBVTGVUaEkzMiwKKyAgICBMZVRoRjMyLAorICAgIExlVGhGNjQsCisgICAgU0xlRXFJMzIs
CisgICAgVUxlRXFJMzIsCisgICAgTGVFcUYzMiwKKyAgICBMZUVxRjY0LAorICAgIFNHclRoSTMy
LAorICAgIFVHclRoSTMyLAorICAgIEdyVGhGMzIsCisgICAgR3JUaEY2NCwKKyAgICBTR3JFcUkz
MiwKKyAgICBVR3JFcUkzMiwKKyAgICBHckVxRjMyLAorICAgIEdyRXFGNjQsCisgICAgU01pbiwK
KyAgICBVTWluLAorICAgIFNNYXgsCisgICAgVU1heCwKKyAgICBBYnMsCisKKyAgICBCYWQKK307
CisKK2VudW0gY2xhc3MgSTMyV2l0aEltbSA6IHVpbnQ4X3QgeworICAgIExpdFBvb2wsCisgICAg
TGl0SW1tLAorICAgIEdldExvYywKKyAgICBSZXNlcnZlZCwKKworICAgIEJhZAorfTsKKworZW51
bSBjbGFzcyBGMzIgOiB1aW50OF90IHsKKyAgICBMaXRQb29sLAorICAgIExpdEltbSwKKyAgICBH
ZXRMb2MsCisgICAgR2V0R2xvLAorICAgIFNldExvYywKKyAgICBTZXRHbG8sCisgICAgTG9hZCwK
KyAgICBMb2FkT2ZmLAorICAgIFN0b3JlLAorICAgIFN0b3JlT2ZmLAorICAgIENhbGxJbnQsCisg
ICAgQ2FsbEluZCwKKyAgICBDb25kLAorICAgIENvbW1hLAorICAgIEZyb21TMzIsCisgICAgRnJv
bVUzMiwKKyAgICBGcm9tRjY0LAorICAgIE5lZywKKyAgICBBZGQsCisgICAgU3ViLAorICAgIE11
bCwKKyAgICBEaXYsCisgICAgQWJzLAorICAgIENlaWwsCisgICAgRmxvb3IsCisgICAgU3FydCwK
KworICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBGMzJXaXRoSW1tIDogdWludDhfdCB7CisgICAg
TGl0UG9vbCwKKyAgICBHZXRMb2MsCisgICAgUmVzZXJ2ZWQwLAorICAgIFJlc2VydmVkMSwKKwor
ICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBGNjQgOiB1aW50OF90IHsKKyAgICBMaXRQb29sLAor
ICAgIExpdEltbSwKKyAgICBHZXRMb2MsCisgICAgR2V0R2xvLAorICAgIFNldExvYywKKyAgICBT
ZXRHbG8sCisgICAgTG9hZCwKKyAgICBMb2FkT2ZmLAorICAgIFN0b3JlLAorICAgIFN0b3JlT2Zm
LAorICAgIENhbGxJbnQsCisgICAgQ2FsbEluZCwKKyAgICBDYWxsSW1wLAorICAgIENvbmQsCisg
ICAgQ29tbWEsCisgICAgRnJvbVMzMiwKKyAgICBGcm9tVTMyLAorICAgIEZyb21GMzIsCisgICAg
TmVnLAorICAgIEFkZCwKKyAgICBTdWIsCisgICAgTXVsLAorICAgIERpdiwKKyAgICBNb2QsCisg
ICAgTWluLAorICAgIE1heCwKKyAgICBBYnMsCisgICAgQ2VpbCwKKyAgICBGbG9vciwKKyAgICBT
cXJ0LAorICAgIENvcywKKyAgICBTaW4sCisgICAgVGFuLAorICAgIEFDb3MsCisgICAgQVNpbiwK
KyAgICBBVGFuLAorICAgIEFUYW4yLAorICAgIEV4cCwKKyAgICBMbiwKKyAgICBQb3csCisKKyAg
ICBCYWQKK307CisKK2VudW0gY2xhc3MgRjY0V2l0aEltbSA6IHVpbnQ4X3QgeworICAgIExpdFBv
b2wsCisgICAgR2V0TG9jLAorICAgIFJlc2VydmVkMCwKKyAgICBSZXNlcnZlZDEsCisKKyAgICBC
YWQKK307CisKK2VudW0gY2xhc3MgVm9pZCA6IHVpbnQ4X3QgeworICAgIENhbGxJbnQsCisgICAg
Q2FsbEluZCwKKyAgICBDYWxsSW1wLAorCisgICAgQmFkCit9OworCitlbnVtIGNsYXNzIFR5cGUg
OiB1aW50OF90IHsKKyAgICBJMzIsCisgICAgRjMyLAorICAgIEY2NAorfTsKKworZW51bSBjbGFz
cyBWYXJUeXBlcyA6IHVpbnQ4X3QgeworICAgIEkzMiA9IDB4MSwKKyAgICBGMzIgPSAweDIsCisg
ICAgRjY0ID0gMHg0LAorfTsKKworaW5saW5lIFZhclR5cGVzIG9wZXJhdG9yfCAoVmFyVHlwZXMg
bGhzLCBWYXJUeXBlcyByaHMpIHsgcmV0dXJuIFZhclR5cGVzKHVpbnQ4X3QobGhzKSB8IHVpbnQ4
X3QocmhzKSk7IH0KK2lubGluZSBib29sIG9wZXJhdG9yJihWYXJUeXBlcyBsaHMsIFZhclR5cGVz
IHJocykgeyByZXR1cm4gYm9vbCh1aW50OF90KGxocykgJiB1aW50OF90KHJocykpOyB9CisKK2Vu
dW0gY2xhc3MgVmFyVHlwZXNXaXRoSW1tIDogdWludDhfdCB7CisgICAgT25seUkzMiwKKyAgICBS
ZXNlcnZlZDAsCisgICAgUmVzZXJ2ZWQxLAorICAgIFJlc2VydmVkMgorfTsKKworZW51bSBjbGFz
cyBSZXR1cm5UeXBlIDogdWludDhfdCB7CisgICAgSTMyID0gdWludDhfdChUeXBlOjpJMzIpLAor
ICAgIEYzMiA9IHVpbnQ4X3QoVHlwZTo6RjMyKSwKKyAgICBGNjQgPSB1aW50OF90KFR5cGU6OkY2
NCksCisgICAgVm9pZAorfTsKKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgaGFzSW1tRmxhZyA9IDB4
ODA7CitzdGF0aWNfYXNzZXJ0KHVpbnQ4X3QoSTMyOjpCYWQpIDw9IGhhc0ltbUZsYWcsICJNU0Ig
cmVzZXJ2ZWQgdG8gZGlzdGluZ3Vpc2ggSTMyIGZyb20gSTMyV2l0aEltbSIpOworc3RhdGljX2Fz
c2VydCh1aW50OF90KEYzMjo6QmFkKSA8PSBoYXNJbW1GbGFnLCAiTVNCIHJlc2VydmVkIHRvIGRp
c3Rpbmd1aXNoIEYzMiBmcm9tIEYzMldpdGhJbW0iKTsKK3N0YXRpY19hc3NlcnQodWludDhfdChG
NjQ6OkJhZCkgPD0gaGFzSW1tRmxhZywgIk1TQiByZXNlcnZlZCB0byBkaXN0aW5ndWlzaCBGNjQg
ZnJvbSBGNjRXaXRoSW1tIik7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBvcFdpdGhJbW1CaXRz
ID0gMjsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBvcFdpdGhJbW1MaW1pdCA9IDEgPDwgb3BXaXRo
SW1tQml0czsKK3N0YXRpY19hc3NlcnQodWludDhfdChJMzJXaXRoSW1tOjpCYWQpIDw9IG9wV2l0
aEltbUxpbWl0LCAiSTMyV2l0aEltbSBvcCBmaXRzIik7CitzdGF0aWNfYXNzZXJ0KHVpbnQ4X3Qo
RjMyV2l0aEltbTo6QmFkKSA8PSBvcFdpdGhJbW1MaW1pdCwgIkYzMldpdGhJbW0gb3AgZml0cyIp
Oworc3RhdGljX2Fzc2VydCh1aW50OF90KEY2NFdpdGhJbW06OkJhZCkgPD0gb3BXaXRoSW1tTGlt
aXQsICJGNjRXaXRoSW1tIG9wIGZpdHMiKTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGltbUJp
dHMgPSA1Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IGltbUxpbWl0ID0gMSA8PCBpbW1CaXRzOwor
c3RhdGljX2Fzc2VydCgoMSArIG9wV2l0aEltbUJpdHMgKyBpbW1CaXRzKSA9PSA4LCAiQml0cyBv
ZiBpbW1lZGlhdGUgb3Agc2hvdWxkIGFkZCB1cCB0byBhIGJ5dGUiKTsKKwordGVtcGxhdGUgPGNs
YXNzIFRXaXRoSW1tPgorc3RhdGljIGlubGluZSB2b2lkIHVucGFja09wV2l0aEltbSh1aW50OF90
IGJ5dGUsIFRXaXRoSW1tKiBvcCwgdWludDhfdCAqaW1tKQoreworICAgIEFTU0VSVChieXRlICYg
aGFzSW1tRmxhZyk7CisgICAgKm9wID0gVFdpdGhJbW0oKGJ5dGUgPj4gaW1tQml0cykgJiAob3BX
aXRoSW1tTGltaXQgLSAxKSk7CisgICAgKmltbSA9IGJ5dGUgJiAoaW1tTGltaXQgLSAxKTsKK30K
KworZW51bSBjbGFzcyBFeHBvcnRGb3JtYXQgOiB1aW50OF90IHsKKyAgICBEZWZhdWx0LAorICAg
IFJlY29yZAorfTsKKworc3RydWN0IFNpZ25hdHVyZSB7CisgICAgUmV0dXJuVHlwZSByZXR1cm5U
eXBlOworICAgIFZlY3RvcjxUeXBlPiBhcmd1bWVudHM7CisKKyAgICBTaWduYXR1cmUoKSB7IH0K
KyAgICBTaWduYXR1cmUoUmV0dXJuVHlwZSByZXR1cm5UeXBlKQorICAgICAgICA6IHJldHVyblR5
cGUocmV0dXJuVHlwZSkgeyB9CisgICAgU2lnbmF0dXJlKFJldHVyblR5cGUgcmV0dXJuVHlwZSwg
dWludDMyX3QgYXJndW1lbnRDb3VudCkKKyAgICAgICAgOiByZXR1cm5UeXBlKHJldHVyblR5cGUp
CisgICAgICAgICwgYXJndW1lbnRzKGFyZ3VtZW50Q291bnQpIHsgfQorICAgIFNpZ25hdHVyZShS
ZXR1cm5UeXBlIHJldHVyblR5cGUsIFZlY3RvcjxUeXBlPiYmIGFyZ3VtZW50cykKKyAgICAgICAg
OiByZXR1cm5UeXBlKHJldHVyblR5cGUpCisgICAgICAgICwgYXJndW1lbnRzKFdURjo6bW92ZShh
cmd1bWVudHMpKSB7IH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0FTTSkKKworI2VuZGlmIC8vIFdhc21PcGNvZGVzX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzM1NGM2NWViZjE1N2My
MGQ5ZmI3ZjNmNjQwN2Y0ZGI5ZTE0NGI3MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuY3BwCkBAIC0wLDAgKzEsMzk2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldhc21QYXJzZXIuaCIKKworI2lmIEVOQUJMRShXQVNNKQorCisjaW5jbHVk
ZSAiV2FzbUNvZGVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlLmgiCisjaW5jbHVk
ZSAiV2FzbVN5bnRheENoZWNrZXIuaCIKKworI2RlZmluZSBwcm9wYWdhdGVFcnJvcigpIGRvIHsg
aWYgKGhhc0Vycm9yKCkpIHJldHVybiAwOyB9IHdoaWxlICgwKQorI2RlZmluZSBpbnRlcm5hbEZh
aWxXaXRoTWVzc2FnZSguLi4pIGRvIHsgXAorICAgIHByb3BhZ2F0ZUVycm9yKCk7IFwKKyAgICBs
b2dFcnJvcihfX1ZBX0FSR1NfXyk7IFwKKyAgICByZXR1cm4gMDsgXAorfSB3aGlsZSAoMCkKKyNk
ZWZpbmUgZmFpbElmRmFsc2UoY29uZCwgLi4uKSBkbyB7IGlmICghKGNvbmQpKSB7IGludGVybmFs
RmFpbFdpdGhNZXNzYWdlKF9fVkFfQVJHU19fKTsgfSB9IHdoaWxlICgwKQorCituYW1lc3BhY2Ug
SlNDIHsKKworbmFtZXNwYWNlIFdhc20geworCit2b2lkIFBhcnNlcjo6Y2hlY2tTeW50YXhBbmRD
YWxjdWxhdGVTb3VyY2VSYW5nZShNb2R1bGUqIG1vZHVsZSwgc2l6ZV90IGZ1bmN0aW9uSW5kZXgs
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0SW5Tb3VyY2UsIGNvbnN0IHVpbnQ4X3QqJiBlbmRDdXJzb3Ip
Cit7CisgICAgUGFyc2VyIHBhcnNlcihtb2R1bGUpOworICAgIFN5bnRheENoZWNrZXIgc3ludGF4
Q2hlY2tlcjsKKyAgICBwYXJzZXIucGFyc2VGdW5jdGlvbihzeW50YXhDaGVja2VyLCBmdW5jdGlv
bkluZGV4LCBzdGFydE9mZnNldEluU291cmNlKTsKKyAgICBlbmRDdXJzb3IgPSBwYXJzZXIubV9y
ZWFkZXIuY3Vyc29yKCk7Cit9CisKK1JlZlB0cjxKSVRDb2RlPiBQYXJzZXI6OmdlbmVyYXRlQ29k
ZShWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBNb2R1bGUqIG1vZHVsZSwgc2l6ZV90IGZ1
bmN0aW9uSW5kZXgsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0SW5Tb3VyY2UpCit7CisgICAgUGFyc2Vy
IHBhcnNlcihtb2R1bGUpOworICAgIENvZGVHZW5lcmF0b3IgY29kZUdlbmVyYXRvcih2bSwgY29k
ZUJsb2NrLCBtb2R1bGUpOworICAgIHBhcnNlci5wYXJzZUZ1bmN0aW9uKGNvZGVHZW5lcmF0b3Is
IGZ1bmN0aW9uSW5kZXgsIHN0YXJ0T2Zmc2V0SW5Tb3VyY2UpOworICAgIAorICAgIHJldHVybiBj
b2RlR2VuZXJhdG9yLmppdENvZGUoKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+Cit2
b2lkIFBhcnNlcjo6cGFyc2VGdW5jdGlvbihDb250ZXh0JiBjb250ZXh0LCBzaXplX3QgZnVuY3Rp
b25JbmRleCwgdW5zaWduZWQgc3RhcnRPZmZzZXRJblNvdXJjZSkKK3sKKyAgICBjb25zdCBWZWN0
b3I8Y2hhcj4mIGJ1ZmZlciA9IHN0YXRpY19jYXN0PFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXIq
PihtX21vZHVsZS0+bV9zb3VyY2UucHJvdmlkZXIoKSktPnJlYWxTb3VyY2UoKTsKKyAgICBtX3Jl
YWRlciA9IFJlYWRlcihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXIuZGF0
YSgpKSArIHN0YXJ0T2Zmc2V0SW5Tb3VyY2UpOworCisgICAgY29udGV4dC5zdGFydEZ1bmN0aW9u
KCk7CisKKyAgICBwYXJzZVNpZ25hdHVyZShjb250ZXh0LCBmdW5jdGlvbkluZGV4KTsKKyAgICBw
YXJzZVZhcnMoY29udGV4dCk7CisgICAgY29udGV4dC5zZXRMb2NhbFR5cGVzKG1fbG9jYWxUeXBl
cyk7CisgICAgcGFyc2VTdG10TGlzdChjb250ZXh0KTsKKyAgICAvLyBUT0RPOiBjaGVjayBmb3Ig
ZXJyb3IgaGVyZQorCisgICAgY29udGV4dC5lbmRGdW5jdGlvbigpOworfQorCit0ZW1wbGF0ZSA8
Y2xhc3MgQ29udGV4dD4KK3ZvaWQgUGFyc2VyOjpwYXJzZVNpZ25hdHVyZShDb250ZXh0JiBjb250
ZXh0LCBzaXplX3QgZnVuY3Rpb25JbmRleCkKK3sKKyAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25h
dHVyZSA9IG1fbW9kdWxlLT5tX3NpZ25hdHVyZXNbbV9tb2R1bGUtPm1fZnVuY1NpZ25hdHVyZXNb
ZnVuY3Rpb25JbmRleF1dOworICAgIG1fcmV0dXJuVHlwZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBl
OworICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gc2lnbmF0dXJlLmFyZ3VtZW50cy5zaXplKCk7
CisgICAgZm9yIChzaXplX3QgYXJnSW5kZXggPSAwOyBhcmdJbmRleCA8IGFyZ3VtZW50Q291bnQ7
ICsrYXJnSW5kZXgpIHsKKyAgICAgICAgVHlwZSB0eXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50c1th
cmdJbmRleF07CisgICAgICAgIG1fbG9jYWxUeXBlcy5hcHBlbmQodHlwZSk7CisgICAgICAgIHN3
aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgICAgIGNvbnRl
eHQudW5ib3hBcmd1bWVudChhcmdJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0Pgordm9pZCBQYXJzZXI6
OnBhcnNlVmFycyhDb250ZXh0JiBjb250ZXh0KQoreworICAgIHVpbnQzMl90IG51bWJlck9mSTMy
VmFycyA9IDA7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGMzJWYXJzID0gMDsKKyAgICB1aW50MzJf
dCBudW1iZXJPZkY2NFZhcnMgPSAwOworCisgICAgVmFyVHlwZXMgdmFyVHlwZXM7CisgICAgVmFy
VHlwZXNXaXRoSW1tIHZhclR5cGVzV2l0aEltbTsKKyAgICB1aW50OF90IGltbTsKKyAgICBpZiAo
bV9yZWFkZXIuY29kZSgmdmFyVHlwZXMsICZ2YXJUeXBlc1dpdGhJbW0sICZpbW0pKSB7CisgICAg
ICAgIGlmICh2YXJUeXBlcyAmIFZhclR5cGVzOjpJMzIpCisgICAgICAgICAgICBudW1iZXJPZkkz
MlZhcnMgPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICAgICAgaWYgKHZhclR5cGVzICYgVmFyVHlw
ZXM6OkYzMikKKyAgICAgICAgICAgIG51bWJlck9mRjMyVmFycyA9IG1fcmVhZGVyLmltbVUzMigp
OworICAgICAgICBpZiAodmFyVHlwZXMgJiBWYXJUeXBlczo6RjY0KQorICAgICAgICAgICAgbnVt
YmVyT2ZGNjRWYXJzID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgfSBlbHNlCisgICAgICAgIG51
bWJlck9mSTMyVmFycyA9IGltbTsKKworICAgIHVpbnQzMl90IG51bWJlck9mVmFycyA9IG51bWJl
ck9mSTMyVmFycyArIG51bWJlck9mRjMyVmFycyArIG51bWJlck9mRjY0VmFyczsKKyAgICBpZiAo
bnVtYmVyT2ZWYXJzID4gMCkgeworICAgICAgICBzaXplX3QgbG9jYWxJbmRleCA9IG1fbG9jYWxU
eXBlcy5zaXplKCk7CisgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkkz
MlZhcnM7ICsraSkgeworICAgICAgICAgICAgbV9sb2NhbFR5cGVzLmFwcGVuZChUeXBlOjpJMzIp
OworICAgICAgICAgICAgY29udGV4dC5zZXRMb2NhbFplcm9JMzIobG9jYWxJbmRleCsrKTsKKyAg
ICAgICAgICAgIC8vIGNvbnRleHQuc3RvcmVJMzIoVHJ1c3RlZEltbTMyKDApLCBzdGFja0FkZHJl
c3MobG9jYWxJbmRleCsrKSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0g
MDsgaSA8IG51bWJlck9mRjMyVmFyczsgKytpKSB7CisgICAgICAgICAgICBtX2xvY2FsVHlwZXMu
YXBwZW5kKFR5cGU6OkYzMik7CisgICAgICAgICAgICAvLyBjb250ZXh0LnN0b3JlRjMyKFRydXN0
ZWRJbW0zMigwKSwgc3RhY2tBZGRyZXNzKGxvY2FsSW5kZXgrKykpOworICAgICAgICB9CisgICAg
ICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkY2NFZhcnM7ICsraSkgeworICAg
ICAgICAgICAgbV9sb2NhbFR5cGVzLmFwcGVuZChUeXBlOjpGNjQpOworICAgICAgICAgICAgLy8g
Y29udGV4dC5zdG9yZUY2NChUcnVzdGVkSW1tNjQoMCksIHN0YWNrQWRkcmVzcyhsb2NhbEluZGV4
KyspKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitD
b250ZXh0U3RhdGVtZW50IFBhcnNlcjo6cGFyc2VTdG10KENvbnRleHQmIGNvbnRleHQpCit7Cisg
ICAgU3RtdCBzdG10OworICAgIFN0bXRXaXRoSW1tIHN0bXRXaXRoSW1tOworICAgIHVpbnQ4X3Qg
aW1tOworICAgIENvbnRleHRTdGF0ZW1lbnQgcmVzdWx0OworICAgIGlmIChtX3JlYWRlci5jb2Rl
KCZzdG10LCAmc3RtdFdpdGhJbW0sICZpbW0pKSB7CisgICAgICAgIHN3aXRjaCAoc3RtdCkgewor
ICAgICAgICBjYXNlIFN0bXQ6OlNldExvYzoKKyAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlU2V0
TG9jYWxTdG10KGNvbnRleHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3Rt
dDo6UmV0OgorICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2VSZXR1cm5TdG10KGNvbnRleHQpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RtdDo6QmxvY2s6CisgICAgICAgICAg
ICByZXN1bHQgPSBwYXJzZUJsb2NrU3RtdChjb250ZXh0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFN0bXQ6OklmVGhlbjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlSWZT
dG10KGNvbnRleHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RtdDo6SWZF
bHNlOgorICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2VJZkVsc2VTdG10KGNvbnRleHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3dp
dGNoIChzdG10V2l0aEltbSkgeworICAgICAgICBjYXNlIFN0bXRXaXRoSW1tOjpTZXRMb2M6Cisg
ICAgICAgICAgICByZXN1bHQgPSBwYXJzZVNldExvY2FsU3RtdChjb250ZXh0LCBpbW0pOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgorQ29udGV4dFN0YXRlbWVudCBQYXJzZXI6
OnBhcnNlU2V0TG9jYWxTdG10KENvbnRleHQmIGNvbnRleHQsIHVpbnQzMl90IGltbSkKK3sKKyAg
ICBUeXBlIHR5cGUgPSBtX2xvY2FsVHlwZXNbaW1tXTsKKyAgICBDb250ZXh0RXhwcmVzc2lvbiBy
ID0gcGFyc2VFeHByKGNvbnRleHQsIFJldHVyblR5cGUodHlwZSkpOworICAgIHN3aXRjaCAodHlw
ZSkgeworICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBjb250ZXh0LnNldExvY2FsKHIsIGlt
bSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJldHVybiAxOworfQorCit0ZW1wbGF0ZSA8Y2xh
c3MgQ29udGV4dD4KK0NvbnRleHRTdGF0ZW1lbnQgUGFyc2VyOjpwYXJzZVNldExvY2FsU3RtdChD
b250ZXh0JiBjb250ZXh0KQoreworICAgIHVpbnQzMl90IGltbSA9IG1fcmVhZGVyLmltbVUzMigp
OworICAgIHBhcnNlU2V0TG9jYWxTdG10KGNvbnRleHQsIGltbSk7CisgICAgcmV0dXJuIDE7Cit9
CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgorQ29udGV4dFN0YXRlbWVudCBQYXJzZXI6OnBh
cnNlUmV0dXJuU3RtdChDb250ZXh0JiBjb250ZXh0KQoreworICAgIHN3aXRjaCAobV9yZXR1cm5U
eXBlKSB7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpJMzI6IHsKKyAgICAgICAgQ29udGV4dEV4cHJl
c3Npb24gciA9IHBhcnNlRXhwckkzMihjb250ZXh0KTsKKyAgICAgICAgY29udGV4dC5yZXR1cm5J
MzIocik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KKwordGVt
cGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0U3RhdGVtZW50IFBhcnNlcjo6cGFyc2VTdG10
TGlzdChDb250ZXh0JiBjb250ZXh0KQoreworICAgIHVpbnQzMl90IG51bWJlck9mU3RtdHMgPSBt
X3JlYWRlci5pbW1VMzIoKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZT
dG10czsgKytpKSB7CisgICAgICAgIENvbnRleHRTdGF0ZW1lbnQgc3RhdGVtZW50ID0gcGFyc2VT
dG10KGNvbnRleHQpOworICAgICAgICBwcm9wYWdhdGVFcnJvcigpOworICAgICAgICBVTlVTRURf
UEFSQU0oc3RhdGVtZW50KTsKKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CisKK3RlbXBsYXRlIDxj
bGFzcyBDb250ZXh0PgorQ29udGV4dFN0YXRlbWVudCBQYXJzZXI6OnBhcnNlQmxvY2tTdG10KENv
bnRleHQmIGNvbnRleHQpCit7CisgICAgcGFyc2VTdG10TGlzdChjb250ZXh0KTsKKyAgICAvLyBG
SVhNRTogY2hlY2sgZm9yIGVycm9yIGhlcmU/CisgICAgcmV0dXJuIDE7Cit9CisKK3RlbXBsYXRl
IDxjbGFzcyBDb250ZXh0PgorQ29udGV4dFN0YXRlbWVudCBQYXJzZXI6OnBhcnNlSWZTdG10KENv
bnRleHQmIGNvbnRleHQpCit7CisgICAgQ29udGV4dEV4cHJlc3Npb24gY29uZGl0aW9uID0gcGFy
c2VFeHBySTMyKGNvbnRleHQpOworICAgIGZhaWxJZkZhbHNlKGNvbmRpdGlvbiwgIkV4cGVjdGVk
IGFuIGV4cHJlc3Npb24gYXMgdGhlIGNvbmRpdGlvbiBmb3IgYW4gaWYgc3RhdGVtZW50Iik7Cisg
ICAgQ29udGV4dEp1bXAgZW5kID0gY29udGV4dC5icmFuY2hUZXN0STMyKE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCBjb25kaXRpb24pOworICAgIENvbnRleHRTdGF0ZW1lbnQgdHJ1ZVN0YXRlbWVudCA9
IHBhcnNlU3RtdChjb250ZXh0KTsKKyAgICBmYWlsSWZGYWxzZSh0cnVlU3RhdGVtZW50LCAiRXhw
ZWN0ZWQgYSBzdGF0ZW1lbnQgYXMgdGhlIGJvZHkgb2YgYW4gaWYgYmxvY2siKTsKKyAgICBjb250
ZXh0LmxpbmtKdW1wKGVuZCk7CisgICAgcmV0dXJuIDE7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBD
b250ZXh0PgorQ29udGV4dFN0YXRlbWVudCBQYXJzZXI6OnBhcnNlSWZFbHNlU3RtdChDb250ZXh0
JiBjb250ZXh0KQoreworICAgIENvbnRleHRFeHByZXNzaW9uIGNvbmRpdGlvbiA9IHBhcnNlRXhw
ckkzMihjb250ZXh0KTsKKyAgICBmYWlsSWZGYWxzZShjb25kaXRpb24sICJFeHBlY3RlZCBhbiBl
eHByZXNzaW9uIGFzIHRoZSBjb25kaXRpb24gZm9yIGFuIGlmIHN0YXRlbWVudCIpOworICAgIENv
bnRleHRKdW1wIGVsc2VKdW1wID0gY29udGV4dC5icmFuY2hUZXN0STMyKE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCBjb25kaXRpb24pOworICAgIENvbnRleHRTdGF0ZW1lbnQgdHJ1ZVN0YXRlbWVudCA9
IHBhcnNlU3RtdChjb250ZXh0KTsKKyAgICBmYWlsSWZGYWxzZSh0cnVlU3RhdGVtZW50LCAiRXhw
ZWN0ZWQgYSBzdGF0ZW1lbnQgYXMgdGhlIGJvZHkgb2YgYW4gaWYgYmxvY2siKTsKKyAgICBDb250
ZXh0SnVtcCBlbmQgPSBjb250ZXh0LmVtaXRKdW1wKCk7CisgICAgY29udGV4dC5saW5rSnVtcChl
bHNlSnVtcCk7CisgICAgQ29udGV4dFN0YXRlbWVudCBmYWxzZVN0YXRlbWVudCA9IHBhcnNlU3Rt
dChjb250ZXh0KTsKKyAgICBmYWlsSWZGYWxzZShmYWxzZVN0YXRlbWVudCwgIkV4cGVjdGVkIGEg
c3RhdGVtZW50IGFzIHRoZSBib2R5IG9mIGFuIGVsc2UgYmxvY2siKTsKKyAgICBjb250ZXh0Lmxp
bmtKdW1wKGVuZCk7CisgICAgcmV0dXJuIDE7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0
PgorQ29udGV4dEV4cHJlc3Npb24gUGFyc2VyOjpwYXJzZUV4cHIoQ29udGV4dCYgY29udGV4dCwg
UmV0dXJuVHlwZSByZXR1cm5UeXBlKQoreworICAgIHN3aXRjaCAocmV0dXJuVHlwZSkgeworICAg
IGNhc2UgUmV0dXJuVHlwZTo6STMyOgorICAgICAgICByZXR1cm4gcGFyc2VFeHBySTMyKGNvbnRl
eHQpOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRleHRFeHByZXNzaW9u
IFBhcnNlcjo6cGFyc2VFeHBySTMyKENvbnRleHQmIGNvbnRleHQpCit7CisgICAgSTMyIGkzMjsK
KyAgICBJMzJXaXRoSW1tIGkzMldpdGhJbW07CisgICAgdWludDhfdCBpbW07CisKKyAgICBpZiAo
bV9yZWFkZXIuY29kZSgmaTMyLCAmaTMyV2l0aEltbSwgJmltbSkpIHsKKyAgICAgICAgc3dpdGNo
IChpMzIpIHsKKyAgICAgICAgY2FzZSBJMzI6OkxpdEltbToKKyAgICAgICAgICAgIHJldHVybiBw
YXJzZUxpdEltbShjb250ZXh0LCBSZXR1cm5UeXBlOjpJMzIpOworICAgICAgICBjYXNlIEkzMjo6
R2V0TG9jOgorICAgICAgICAgICAgcmV0dXJuIHBhcnNlR2V0TG9jYWwoY29udGV4dCk7CisgICAg
ICAgIGNhc2UgSTMyOjpDYWxsSW50OgorICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ2FsbEludGVy
bmFsKGNvbnRleHQsIFJldHVyblR5cGU6OkkzMik7CisgICAgICAgIGNhc2UgSTMyOjpBZGQ6Cisg
ICAgICAgIGNhc2UgSTMyOjpNdWw6CisgICAgICAgICAgICByZXR1cm4gcGFyc2VCaW5hcnlPcEkz
Mihjb250ZXh0LCBpMzIpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHN3
aXRjaCAoaTMyV2l0aEltbSkgeworICAgICAgICBjYXNlIEkzMldpdGhJbW06OkxpdEltbToKKyAg
ICAgICAgICAgIHJldHVybiBwYXJzZUxpdEltbShjb250ZXh0LCBSZXR1cm5UeXBlOjpJMzIsIGlt
bSk7CisgICAgICAgIGNhc2UgSTMyV2l0aEltbTo6R2V0TG9jOgorICAgICAgICAgICAgcmV0dXJu
IHBhcnNlR2V0TG9jYWwoY29udGV4dCwgaW1tKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgorQ29udGV4dEV4cHJlc3Npb24gUGFyc2VyOjpwYXJz
ZUxpdEltbShDb250ZXh0JiBjb250ZXh0LCBSZXR1cm5UeXBlIHJldHVyblR5cGUsIHVpbnQzMl90
IGltbSkKK3sKKyAgICBBU1NFUlQocmV0dXJuVHlwZSA9PSBSZXR1cm5UeXBlOjpJMzIpOworICAg
IHJldHVybiBjb250ZXh0LnJlZ0kzMihpbW0pOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4
dD4KK0NvbnRleHRFeHByZXNzaW9uIFBhcnNlcjo6cGFyc2VMaXRJbW0oQ29udGV4dCYgY29udGV4
dCwgUmV0dXJuVHlwZSByZXR1cm5UeXBlKQoreworICAgIHN3aXRjaCAocmV0dXJuVHlwZSkgewor
ICAgIGNhc2UgUmV0dXJuVHlwZTo6STMyOgorICAgICAgICByZXR1cm4gY29udGV4dC5yZWdJMzIo
bV9yZWFkZXIuaW1tVTMyKCkpOworICAgIGNhc2UgUmV0dXJuVHlwZTo6RjY0OgorICAgICAgICBy
ZXR1cm4gY29udGV4dC5yZWdGNjQobV9yZWFkZXIuZml4ZWRXaWR0aDxkb3VibGU+KCkpOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordGVt
cGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0RXhwcmVzc2lvbiBQYXJzZXI6OnBhcnNlR2V0
TG9jYWwoQ29udGV4dCYgY29udGV4dCwgdWludDMyX3QgaW1tKQoreworICAgIHN3aXRjaCAobV9s
b2NhbFR5cGVzW2ltbV0pIHsKKyAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgcmV0dXJuIGNv
bnRleHQuZ2V0TG9jYWxJMzIoaW1tKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+
CitDb250ZXh0RXhwcmVzc2lvbiBQYXJzZXI6OnBhcnNlR2V0TG9jYWwoQ29udGV4dCYgY29udGV4
dCkKK3sKKyAgICB1aW50MzJfdCBpbW0gPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICByZXR1cm4g
cGFyc2VHZXRMb2NhbChjb250ZXh0LCBpbW0pOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4
dD4KK0NvbnRleHRFeHByZXNzaW9uIFBhcnNlcjo6cGFyc2VDYWxsSW50ZXJuYWwoQ29udGV4dCYg
Y29udGV4dCwgUmV0dXJuVHlwZSByZXR1cm5UeXBlKQoreworICAgIHVpbnQzMl90IGZ1bmN0aW9u
SW5kZXggPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVy
ZSA9IG1fbW9kdWxlLT5tX3NpZ25hdHVyZXNbbV9tb2R1bGUtPm1fZnVuY1NpZ25hdHVyZXNbZnVu
Y3Rpb25JbmRleF1dOworICAgIGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJndW1lbnRzID0gc2lnbmF0
dXJlLmFyZ3VtZW50czsKKyAgICAvLyBGSVhNRTogcmV0dXJuVHlwZSBpcyByZWR1bmRhbnQgd2l0
aCBzaWduYXR1cmUucmV0dXJuVHlwZQorCisgICAgVmVjdG9yPENvbnRleHRFeHByZXNzaW9uPiBh
cmd1bWVudFJlZ2lzdGVyczsKKyAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9IGFyZ3VtZW50cy5z
aXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpIHsK
KyAgICAgICAgc3dpdGNoIChhcmd1bWVudHNbaV0pIHsKKyAgICAgICAgY2FzZSBUeXBlOjpJMzI6
CisgICAgICAgICAgICBhcmd1bWVudFJlZ2lzdGVycy5hcHBlbmQocGFyc2VFeHBySTMyKGNvbnRl
eHQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGNvbnRl
eHQuY2FsbEludGVybmFsKGZ1bmN0aW9uSW5kZXgsIGFyZ3VtZW50cywgYXJndW1lbnRSZWdpc3Rl
cnMsIHJldHVyblR5cGUpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRleHRF
eHByZXNzaW9uIFBhcnNlcjo6cGFyc2VCaW5hcnlPcEkzMihDb250ZXh0JiBjb250ZXh0LCBJMzIg
b3ApCit7CisgICAgQ29udGV4dEV4cHJlc3Npb24gcjEgPSBwYXJzZUV4cHJJMzIoY29udGV4dCk7
CisgICAgQ29udGV4dEV4cHJlc3Npb24gcjIgPSBwYXJzZUV4cHJJMzIoY29udGV4dCk7CisKKyAg
ICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBJMzI6OkFkZDoKKyAgICAgICAgcmV0dXJuIGNvbnRl
eHQuYWRkSTMyKHIxLCByMik7CisgICAgY2FzZSBJMzI6Ok11bDoKKyAgICAgICAgcmV0dXJuIGNv
bnRleHQubXVsSTMyKHIxLCByMik7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQT4KK3ZvaWQgUGFyc2Vy
Ojpsb2dFcnJvcihjb25zdCBBJiB2YWx1ZTEpCit7CisgICAgaWYgKGhhc0Vycm9yKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBTdHJpbmdQcmludFN0cmVhbSBzdHJlYW07CisgICAgc3RyZWFtLnBy
aW50KHZhbHVlMSwgIi4iKTsKKyAgICBzZXRFcnJvck1lc3NhZ2Uoc3RyZWFtLnRvU3RyaW5nKCkp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdB
U00pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDhm
ZDE1YjNhYWRkMzY3ODJmOGY1NDI0NzJkNzRiZjg1MTkxY2I0MgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaApAQCAtMCwwICsxLDEwOCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
V2FzbVBhcnNlcl9oCisjZGVmaW5lIFdhc21QYXJzZXJfaAorCisjaWYgRU5BQkxFKFdBU00pCisK
KyNpbmNsdWRlICJTb3VyY2VDb2RlLmgiCisjaW5jbHVkZSAiV2FzbVJlYWRlci5oIgorCisjZGVm
aW5lIENvbnRleHRFeHByZXNzaW9uIHR5cGVuYW1lIENvbnRleHQ6OkV4cHJlc3Npb24KKyNkZWZp
bmUgQ29udGV4dFN0YXRlbWVudCB0eXBlbmFtZSBDb250ZXh0OjpTdGF0ZW1lbnQKKyNkZWZpbmUg
Q29udGV4dEp1bXAgdHlwZW5hbWUgQ29udGV4dDo6SnVtcAorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgQ29kZUJsb2NrOworY2xhc3MgSklUQ29kZTsKK2NsYXNzIFZNOworCituYW1lc3BhY2Ug
V2FzbSB7CisKK2NsYXNzIE1vZHVsZTsKKworY2xhc3MgUGFyc2VyIHsKK3B1YmxpYzoKKyAgICBQ
YXJzZXIoTW9kdWxlKiBtb2R1bGUpCisgICAgICAgIDogbV9tb2R1bGUobW9kdWxlKQorICAgIHsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gdm9pZCBwYXJzZUZ1bmN0aW9u
KENvbnRleHQmLCBzaXplX3QgZnVuY3Rpb25JbmRleCwgdW5zaWduZWQgc3RhcnRPZmZzZXRJblNv
dXJjZSk7CisgICAgY29uc3QgUmVhZGVyJiByZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX3JlYWRl
cjsgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGNoZWNrU3ludGF4QW5kQ2FsY3VsYXRlU291cmNl
UmFuZ2UoTW9kdWxlKiwgc2l6ZV90IGZ1bmN0aW9uSW5kZXgsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
SW5Tb3VyY2UsIGNvbnN0IHVpbnQ4X3QqJiBlbmRDdXJzb3IpOworICAgIHN0YXRpYyBSZWZQdHI8
SklUQ29kZT4gZ2VuZXJhdGVDb2RlKFZNKiwgQ29kZUJsb2NrKiwgTW9kdWxlKiwgc2l6ZV90IGZ1
bmN0aW9uSW5kZXgsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0SW5Tb3VyY2UpOworCitwcml2YXRlOgor
ICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiB2b2lkIHBhcnNlU2lnbmF0dXJlKENvbnRleHQm
LCBzaXplX3QgZnVuY3Rpb25JbmRleCk7CisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IHZv
aWQgcGFyc2VWYXJzKENvbnRleHQmKTsKKworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBD
b250ZXh0U3RhdGVtZW50IHBhcnNlU3RtdChDb250ZXh0Jik7CisgICAgdGVtcGxhdGUgPGNsYXNz
IENvbnRleHQ+IENvbnRleHRTdGF0ZW1lbnQgcGFyc2VTZXRMb2NhbFN0bXQoQ29udGV4dCYsIHVp
bnQzMl90IGltbSk7CisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRTdGF0ZW1l
bnQgcGFyc2VTZXRMb2NhbFN0bXQoQ29udGV4dCYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250
ZXh0PiBDb250ZXh0U3RhdGVtZW50IHBhcnNlUmV0dXJuU3RtdChDb250ZXh0Jik7CisgICAgdGVt
cGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRTdGF0ZW1lbnQgcGFyc2VTdG10TGlzdChDb250
ZXh0Jik7CisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRTdGF0ZW1lbnQgcGFy
c2VCbG9ja1N0bXQoQ29udGV4dCYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250
ZXh0U3RhdGVtZW50IHBhcnNlSWZTdG10KENvbnRleHQmKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
Q29udGV4dD4gQ29udGV4dFN0YXRlbWVudCBwYXJzZUlmRWxzZVN0bXQoQ29udGV4dCYpOworCisg
ICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlRXhwcihD
b250ZXh0JiwgUmV0dXJuVHlwZSk7CisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRl
eHRFeHByZXNzaW9uIHBhcnNlRXhwckkzMihDb250ZXh0Jik7CisgICAgdGVtcGxhdGUgPGNsYXNz
IENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlTGl0SW1tKENvbnRleHQmLCBSZXR1cm5U
eXBlLCB1aW50MzJfdCBpbW0pOworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0
RXhwcmVzc2lvbiBwYXJzZUxpdEltbShDb250ZXh0JiwgUmV0dXJuVHlwZSk7CisgICAgdGVtcGxh
dGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlR2V0TG9jYWwoQ29udGV4
dCYsIHVpbnQzMl90IGltbSk7CisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRF
eHByZXNzaW9uIHBhcnNlR2V0TG9jYWwoQ29udGV4dCYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBD
b250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUNhbGxJbnRlcm5hbChDb250ZXh0JiwgUmV0
dXJuVHlwZSk7CisgICAgCisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHBy
ZXNzaW9uIHBhcnNlQmluYXJ5T3BJMzIoQ29udGV4dCYsIEkzMiBvcCk7CisgICAgCisgICAgdm9p
ZCBzZXRFcnJvck1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorICAgIHsKKyAgICAgICAg
bV9lcnJvck1lc3NhZ2UgPSBtZXNzYWdlOworICAgIH0KKyAgICAKKyAgICBib29sIGhhc0Vycm9y
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCk7
CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEE+IHZvaWQgbG9nRXJyb3IoY29uc3Qg
QSYpOworCisgICAgTW9kdWxlKiBtX21vZHVsZTsKKyAgICBSZWFkZXIgbV9yZWFkZXI7CisgICAg
U3RyaW5nIG1fZXJyb3JNZXNzYWdlOworCisgICAgUmV0dXJuVHlwZSBtX3JldHVyblR5cGU7Cisg
ICAgVmVjdG9yPFR5cGU+IG1fbG9jYWxUeXBlczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0FTTSkKKworI2VuZGlmIC8vIFdhc21QYXJzZXJf
aApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVJlYWRlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVJlYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVkNTNl
NGY5Y2ZjYjI4ZWI5MzA2MGRmMGIxNWY5Y2I0ZjY0OGU0NzAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUmVhZGVyLmgKQEAgLTAsMCArMSwyMDQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorIExpY2Vu
c2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIp
OworIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0
aGUgTGljZW5zZS4KKyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKwor
IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgVW5sZXNzIHJl
cXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2Fy
ZQorIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJB
UyBJUyIgQkFTSVMsCisgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJ
TkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUg
c3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIGxpbWl0YXRpb25z
IHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKworI2lmbmRlZiBXYXNtUmVhZGVyX2gKKyNkZWZpbmUg
V2FzbVJlYWRlcl9oCisKKyNpZiBFTkFCTEUoV0FTTSkKKworI2luY2x1ZGUgIldhc21PcGNvZGVz
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIFJlYWRl
ciB7CitwdWJsaWM6CisgICAgUmVhZGVyKCkgeyB9CisgICAgUmVhZGVyKGNvbnN0IHVpbnQ4X3Qq
IGJlZ2luKQorICAgICAgICA6IG1fY3Vyc29yKGJlZ2luKQorICAgIHsKKyAgICB9CisKKyAgICBj
b25zdCB1aW50OF90KiBjdXJzb3IoKSBjb25zdCB7IHJldHVybiBtX2N1cnNvcjsgfQorICAgIHZv
aWQgc2V0Q3Vyc29yKGNvbnN0IHVpbnQ4X3QqIGN1cnNvcikgeyBtX2N1cnNvciA9IGN1cnNvcjsg
fQorICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBUIGZpeGVkV2lkdGgoKTsKKyAgICBTdG10IHN0bXQo
KSB7IHJldHVybiB1ODxTdG10PigpOyB9CisgICAgU3dpdGNoQ2FzZSBzd2l0Y2hDYXNlKCkgeyBy
ZXR1cm4gdTg8U3dpdGNoQ2FzZT4oKTsgfQorICAgIHRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFRX
aXRoSW1tPiBpbmxpbmUgYm9vbCBjb2RlKFQqLCBUV2l0aEltbSosIHVpbnQ4X3QqKTsKKyAgICBW
b2lkIHZvaWRFeHByKCkgeyByZXR1cm4gdTg8Vm9pZD4oKTsgfQorICAgIEV4cG9ydEZvcm1hdCBl
eHBvcnRGb3JtYXQoKSB7IHJldHVybiB1ODxFeHBvcnRGb3JtYXQ+KCk7IH0KKyAgICBUeXBlIHR5
cGUoKSB7IHJldHVybiB1ODxUeXBlPigpOyB9CisgICAgUmV0dXJuVHlwZSByZXR1cm5UeXBlKCkg
eyByZXR1cm4gdTg8UmV0dXJuVHlwZT4oKTsgfQorICAgIGlubGluZSB1aW50MzJfdCBpbW1VMzIo
KTsKKyAgICBpbmxpbmUgaW50MzJfdCBpbW1TMzIoKTsKKyAgICBjaGFyIHNpbmdsZUNoYXIoKSB7
IHJldHVybiAqbV9jdXJzb3IrKzsgfQorCisgICAgaW5saW5lIGJvb2wgaWZJMzJMaXQoY29uc3Qg
VmVjdG9yPHVpbnQzMl90PiYgaTMycywgdWludDMyX3QqKTsKKworcHJpdmF0ZToKKyAgICB0ZW1w
bGF0ZSA8Y2xhc3MgVD4gVCB1OCgpIHsgcmV0dXJuIFQoKm1fY3Vyc29yKyspOyB9CisKKyAgICBj
b25zdCB1aW50OF90KiBtX2N1cnNvcjsKK307CisKK3RlbXBsYXRlIDw+CitpbmxpbmUgdWludDMy
X3QgUmVhZGVyOjpmaXhlZFdpZHRoPHVpbnQzMl90PigpCit7CisgICAgdWludDMyX3QgdTMyID0g
bV9jdXJzb3JbMF0gfCBtX2N1cnNvclsxXSA8PCA4IHwgbV9jdXJzb3JbMl0gPDwgMTYgfCBtX2N1
cnNvclszXSA8PCAyNDsKKyAgICBtX2N1cnNvciArPSA0OworICAgIHJldHVybiB1MzI7Cit9CisK
K3RlbXBsYXRlIDw+CitpbmxpbmUgZmxvYXQgUmVhZGVyOjpmaXhlZFdpZHRoPGZsb2F0PigpCit7
CisgICAgdW5pb24geworICAgICAgICB1aW50OF90IGFycls0XTsKKyAgICAgICAgZmxvYXQgZjsK
KyAgICB9IHUgPSB7IHsgbV9jdXJzb3JbMF0sIG1fY3Vyc29yWzFdLCBtX2N1cnNvclsyXSwgbV9j
dXJzb3JbM10gfSB9OworICAgIG1fY3Vyc29yICs9IDQ7CisgICAgcmV0dXJuIHUuZjsKK30KKwor
dGVtcGxhdGUgPD4KK2lubGluZSBkb3VibGUgUmVhZGVyOjpmaXhlZFdpZHRoPGRvdWJsZT4oKQor
eworICAgIHVuaW9uIHsKKyAgICAgICAgdWludDhfdCBhcnJbOF07CisgICAgICAgIGRvdWJsZSBk
OworICAgIH0gdSA9IHsgeyBtX2N1cnNvclswXSwgbV9jdXJzb3JbMV0sIG1fY3Vyc29yWzJdLCBt
X2N1cnNvclszXSwgbV9jdXJzb3JbNF0sIG1fY3Vyc29yWzVdLCBtX2N1cnNvcls2XSwgbV9jdXJz
b3JbN10gfSB9OworICAgIG1fY3Vyc29yICs9IDg7CisgICAgcmV0dXJuIHUuZDsKK30KKwordGVt
cGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRXaXRoSW1tPgorYm9vbCBSZWFkZXI6OmNvZGUoVCogdCwg
VFdpdGhJbW0qIHRXaXRoSW1tLCB1aW50OF90KiBpbW0pCit7CisgICAgdWludDhfdCBieXRlID0g
Km1fY3Vyc29yKys7CisgICAgaWYgKCEoYnl0ZSAmIGhhc0ltbUZsYWcpKSB7CisgICAgICAgICp0
ID0gVChieXRlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdW5wYWNrT3BX
aXRoSW1tKGJ5dGUsIHRXaXRoSW1tLCBpbW0pOworICAgIHJldHVybiBmYWxzZTsKK30KKworaW5s
aW5lIHVpbnQzMl90IFJlYWRlcjo6aW1tVTMyKCkKK3sKKyAgICB1aW50MzJfdCB1MzIgPSAqbV9j
dXJzb3IrKzsKKyAgICBpZiAodTMyIDwgMHg4MCkKKyAgICAgICAgcmV0dXJuIHUzMjsKKworICAg
IHUzMiAmPSAweDdmOworCisgICAgZm9yICh1bnNpZ25lZCBzaGlmdCA9IDc7IHRydWU7IHNoaWZ0
ICs9IDcpIHsKKyAgICAgICAgdWludDMyX3QgYiA9ICptX2N1cnNvcisrOworICAgICAgICBpZiAo
YiA8IDB4ODApCisgICAgICAgICAgICByZXR1cm4gdTMyIHwgKGIgPDwgc2hpZnQpOworICAgICAg
ICB1MzIgfD0gKGIgJiAweDdmKSA8PCBzaGlmdDsKKyAgICB9Cit9CisKK2lubGluZSBpbnQzMl90
IFJlYWRlcjo6aW1tUzMyKCkKK3sKKyAgICB1aW50MzJfdCB1MzIgPSAqbV9jdXJzb3IrKzsKKyAg
ICBpZiAodTMyIDwgMHg4MCkKKyAgICAgICAgcmV0dXJuIGludDMyX3QodTMyKSA8PCAoMzItNykg
Pj4gKDMyLTcpOworCisgICAgdTMyICY9IDB4N2Y7CisKKyAgICBmb3IgKHVuc2lnbmVkIHNoaWZ0
ID0gNzsgdHJ1ZTsgc2hpZnQgKz0gNykgeworICAgICAgICB1aW50MzJfdCBiID0gKm1fY3Vyc29y
Kys7CisgICAgICAgIGlmIChiIDwgMHg4MCkgeworICAgICAgICAgICAgdTMyIHw9IGIgPDwgc2hp
ZnQ7CisgICAgICAgICAgICBpbnQgc2lnbkV4dGVuZCA9ICgzMi03KSAtIHNoaWZ0OworICAgICAg
ICAgICAgaWYgKHNpZ25FeHRlbmQgPiAwKQorICAgICAgICAgICAgICAgIHJldHVybiBpbnQzMl90
KHUzMikgPDwgc2lnbkV4dGVuZCA+PiBzaWduRXh0ZW5kOworICAgICAgICAgICAgcmV0dXJuIGlu
dDMyX3QodTMyKTsKKyAgICAgICAgfQorICAgICAgICB1MzIgfD0gKGIgJiAweDdmKSA8PCBzaGlm
dDsKKyAgICB9Cit9CisKK2lubGluZSBib29sIFJlYWRlcjo6aWZJMzJMaXQoY29uc3QgVmVjdG9y
PHVpbnQzMl90PiYgaTMycywgdWludDMyX3QqIHUzMikKK3sKKyAgICB1aW50OF90IGJ5dGUgPSAq
bV9jdXJzb3I7CisKKyAgICBpZiAoYnl0ZSAmIGhhc0ltbUZsYWcpIHsKKyAgICAgICAgSTMyV2l0
aEltbSBpMzJXaXRoSW1tOworICAgICAgICB1aW50OF90IGltbTsKKyAgICAgICAgdW5wYWNrT3BX
aXRoSW1tKGJ5dGUsICZpMzJXaXRoSW1tLCAmaW1tKTsKKworICAgICAgICBpZiAoaTMyV2l0aElt
bSA9PSBJMzJXaXRoSW1tOjpMaXRJbW0pIHsKKyAgICAgICAgICAgIG1fY3Vyc29yKys7CisgICAg
ICAgICAgICAqdTMyID0gaW1tOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoaTMyV2l0aEltbSA9PSBJMzJXaXRoSW1tOjpMaXRQb29sKSB7CisgICAg
ICAgICAgICBtX2N1cnNvcisrOworICAgICAgICAgICAgKnUzMiA9IGkzMnNbaW1tXTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGlmIChJMzIoYnl0ZSkgPT0gSTMyOjpMaXRJbW0pIHsKKyAgICAgICAgbV9j
dXJzb3IrKzsKKyAgICAgICAgKnUzMiA9IGltbVUzMigpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICBpZiAoSTMyKGJ5dGUpID09IEkzMjo6TGl0UG9vbCkgeworICAgICAgICBt
X2N1cnNvcisrOworICAgICAgICAqdTMyID0gaTMyc1tpbW1VMzIoKV07CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0FTTSkKKworI2VuZGlmIC8vIFdhc21S
ZWFkZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVN5bnRh
eENoZWNrZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TeW50YXhDaGVja2Vy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZTFmMWZmOTljMTMyZTQwZjhiODBlNDQxNWE0Nzc4Y2UyODU0Y2IyZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TeW50YXhD
aGVja2VyLmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdhc21TeW50YXhDaGVja2VyX2gKKyNkZWZpbmUgV2Fz
bVN5bnRheENoZWNrZXJfaAorCisjaWYgRU5BQkxFKFdBU00pCisKKyNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdhc20geworCitjbGFz
cyBTeW50YXhDaGVja2VyIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIGludCBFeHByZXNzaW9uOwor
ICAgIHR5cGVkZWYgaW50IFN0YXRlbWVudDsKKyAgICB0eXBlZGVmIGludCBKdW1wOworCisgICAg
U3ludGF4Q2hlY2tlcigpCisgICAgICAgIDogbV9zcCgwKQorICAgIHsKKyAgICB9CisKKyAgICB2
b2lkIHN0YXJ0RnVuY3Rpb24oKSB7IH0KKyAgICB2b2lkIGVuZEZ1bmN0aW9uKCkgeyBBU1NFUlQo
IW1fc3ApOyB9CisgICAgdm9pZCBzZXRMb2NhbFR5cGVzKGNvbnN0IFZlY3RvcjxUeXBlPiYpIHsg
fQorICAgIHZvaWQgdW5ib3hBcmd1bWVudChzaXplX3QpIHsgfQorICAgIHZvaWQgc2V0TG9jYWxa
ZXJvSTMyKHNpemVfdCkgeyB9CisKKyAgICBpbnQgYWRkSTMyKGludCwgaW50KQorICAgIHsKKyAg
ICAgICAgbV9zcC0tOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBpbnQgbXVsSTMy
KGludCwgaW50KQorICAgIHsKKyAgICAgICAgbV9zcC0tOworICAgICAgICByZXR1cm4gMTsKKyAg
ICB9CisKKyAgICBpbnQgcmVnSTMyKHVpbnQzMl90KQorICAgIHsKKyAgICAgICAgbV9zcCsrOwor
ICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBpbnQgcmVnRjY0KGRvdWJsZSkKKyAgICB7
CisgICAgICAgIG1fc3ArKzsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgdm9pZCBz
ZXRMb2NhbChpbnQsIHVpbnQzMl90KQorICAgIHsKKyAgICAgICAgbV9zcC0tOworICAgIH0KKwor
ICAgIGludCBnZXRMb2NhbEkzMih1aW50MzJfdCkKKyAgICB7CisgICAgICAgIG1fc3ArKzsKKyAg
ICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgaW50IGNhbGxJbnRlcm5hbCh1aW50MzJfdCwg
Y29uc3QgVmVjdG9yPFR5cGU+JiBhcmd1bWVudHMsIGNvbnN0IFZlY3RvcjxpbnQ+JiwgUmV0dXJu
VHlwZSkKKyAgICB7CisgICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gYXJndW1lbnRzLnNp
emUoKTsKKyAgICAgICAgbV9zcCAtPSBhcmd1bWVudENvdW50OworICAgICAgICBtX3NwKys7Cisg
ICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHZvaWQgcmV0dXJuSTMyKGludCkKKyAgICB7
CisgICAgICAgIG1fc3AtLTsKKyAgICB9CisKKyAgICBKdW1wIGVtaXRKdW1wKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVGVzdEkzMihNYWNyb0Fz
c2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uLCBpbnQpCisgICAgeworICAgICAgICBtX3NwLS07Cisg
ICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHZvaWQgbGlua0p1bXAoSnVtcCkgeyB9Cisg
ICAgCitwcml2YXRlOgorICAgIGludCBtX3NwOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXQVNNKQorCisjZW5kaWYgLy8gV2FzbVN5bnRheENo
ZWNrZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVy
ZURlZmluZXMueGNjb25maWcgYi9Tb3VyY2UvV2ViQ29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJl
RGVmaW5lcy54Y2NvbmZpZwppbmRleCBmZTU2YmMwYjFiZmQ2MGM1MWEwNTdlOTU1NGQxOWVkNDg3
NGY0ZjQyLi45ODkxMTQ2NTBkYTQyNzYzYjBlYWZjZDg4OTNjM2U0Y2IyZDYxNzllIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZp
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2Nv
bmZpZwpAQCAtMTk5LDYgKzE5OSw3IEBAIEVOQUJMRV9WSURFT19QUkVTRU5UQVRJT05fTU9ERVtz
ZGs9aXBob25lKl0gPSBFTkFCTEVfVklERU9fUFJFU0VOVEFUSU9OX01PREU7CiBFTkFCTEVfVklE
RU9fVFJBQ0sgPSBFTkFCTEVfVklERU9fVFJBQ0s7CiBFTkFCTEVfREFUQUNVRV9WQUxVRSA9IEVO
QUJMRV9EQVRBQ1VFX1ZBTFVFOwogRU5BQkxFX1ZJRVdfTU9ERV9DU1NfTUVESUEgPSA7CitFTkFC
TEVfV0FTTSA9IDsKIEVOQUJMRV9XRUJHTCA9IEVOQUJMRV9XRUJHTDsKIEVOQUJMRV9XRUJHTDIg
PSA7CiBFTkFCTEVfV0VCX0FVRElPID0gRU5BQkxFX1dFQl9BVURJTzsKQEAgLTIyOCw0ICsyMjks
NCBAQCBFTkFCTEVfRlRMX0pJVFtzZGs9aXBob25lb3MqXSA9IEVOQUJMRV9GVExfSklUOwogCiBF
TkFCTEVfU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDID0gRU5BQkxFX1NBVFVSQVRFRF9MQVlP
VVRfQVJJVEhNRVRJQzsKIAotRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfVFJBTlNGT1JN
UykgJChFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF9P
VkVSRkxPV19TQ1JPTExJTkcpICQoRU5BQkxFX0FWRl9DQVBUSU9OUykgJChFTkFCTEVfQVRUQUNI
TUVOVF9FTEVNRU5UKSAkKEVOQUJMRV9DQUNIRV9QQVJUSVRJT05JTkcpICQoRU5BQkxFX0NBTlZB
U19QQVRIKSAkKEVOQUJMRV9DQU5WQVNfUFJPWFkpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5H
KSAkKEVOQUJMRV9FUzZfQVJST1dGVU5DVElPTl9TWU5UQVgpICQoRU5BQkxFX0VTNl9DTEFTU19T
WU5UQVgpICQoRU5BQkxFX0VTNl9URU1QTEFURV9MSVRFUkFMX1NZTlRBWCkgJChFTkFCTEVfQ09O
VEVOVF9GSUxURVJJTkcpICQoRU5BQkxFX0NTUF9ORVhUKSAkKEVOQUJMRV9DU1NfQU5JTUFUSU9O
U19MRVZFTF8yKSAkKEVOQUJMRV9DU1NfQk9YX0RFQ09SQVRJT05fQlJFQUspICQoRU5BQkxFX0NT
U19DT01QT1NJVElORykgJChFTkFCTEVfQ1NTX0RFVklDRV9BREFQVEFUSU9OKSAkKEVOQUJMRV9D
U1NfR1JJRF9MQVlPVVQpICQoRU5BQkxFX0NTU19JTUFHRV9PUklFTlRBVElPTikgJChFTkFCTEVf
Q1NTX0lNQUdFX1JFU09MVVRJT04pICQoRU5BQkxFX0NTU19SRUdJT05TKSAkKEVOQUJMRV9DU1Nf
U0VMRUNUT1JTX0xFVkVMNCkgJChFTkFCTEVfQ1NTX1NIQVBFUykgJChFTkFCTEVfQ1NTM19URVhU
KSAkKEVOQUJMRV9DU1MzX1RFWFRfTElORV9CUkVBSykgJChFTkFCTEVfQ1VSU09SX1ZJU0lCSUxJ
VFkpICQoRU5BQkxFX0NVU1RPTV9TQ0hFTUVfSEFORExFUikgJChFTkFCTEVfREFTSEJPQVJEX1NV
UFBPUlQpICQoRU5BQkxFX0RBVEFMSVNUX0VMRU1FTlQpICQoRU5BQkxFX0RBVEFfVFJBTlNGRVJf
SVRFTVMpICQoRU5BQkxFX0RFVEFJTFNfRUxFTUVOVCkgJChFTkFCTEVfREVWSUNFX09SSUVOVEFU
SU9OKSAkKEVOQUJMRV9ET000X0VWRU5UU19DT05TVFJVQ1RPUikgJChFTkFCTEVfRU5DUllQVEVE
X01FRElBKSAkKEVOQUJMRV9FTkNSWVBURURfTUVESUFfVjIpICQoRU5BQkxFX0ZJTFRFUlNfTEVW
RUxfMikgJChFTkFCTEVfRk9OVF9MT0FEX0VWRU5UUykgJChFTkFCTEVfRlVMTFNDUkVFTl9BUEkp
ICQoRU5BQkxFX0dBTUVQQUQpICQoRU5BQkxFX0dBTUVQQURfREVQUkVDQVRFRCkgJChFTkFCTEVf
R0VPTE9DQVRJT04pICQoRU5BQkxFX0hJRERFTl9QQUdFX0RPTV9USU1FUl9USFJPVFRMSU5HKSAk
KEVOQUJMRV9JQ09OREFUQUJBU0UpICQoRU5BQkxFX1NFUlZJQ0VfQ09OVFJPTFMpICQoRU5BQkxF
X0lOREVYRURfREFUQUJBU0UpICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0VfSU5fV09SS0VSUykg
JChFTkFCTEVfSU5ESUVfVUkpICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IpICQoRU5BQkxFX0lO
UFVUX1RZUEVfQ09MT1JfUE9QT1ZFUikgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFKSAkKEVOQUJM
RV9JTlBVVF9UWVBFX0RBVEVUSU1FX0lOQ09NUExFVEUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFU
RVRJTUVMT0NBTCkgJChFTkFCTEVfSU5QVVRfVFlQRV9NT05USCkgJChFTkFCTEVfSU5QVVRfVFlQ
RV9USU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1dFRUspICQoRU5BQkxFX1dJUkVMRVNTX1BMQVlC
QUNLX1RBUkdFVCkgJChFTkFCTEVfSU5UTCkgJChFTkFCTEVfSU9TX0dFU1RVUkVfRVZFTlRTKSAk
KEVOQUJMRV9JT1NfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9JT1NfVE9VQ0hfRVZFTlRTKSAk
KEVOQUJMRV9MRUdBQ1lfQ1NTX1ZFTkRPUl9QUkVGSVhFUykgJChFTkFCTEVfTEVHQUNZX05PVElG
SUNBVElPTlMpICQoRU5BQkxFX0xFR0FDWV9WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FD
WV9XRUJfQVVESU8pICQoRU5BQkxFX0xFVFRFUlBSRVNTKSAkKEVOQUJMRV9MSU5LX1BSRUZFVENI
KSAkKEVOQUJMRV9NQVRITUwpICQoRU5BQkxFX01FRElBX0NPTlRST0xTX1NDUklQVCkgJChFTkFC
TEVfTUVESUFfU0VTU0lPTikgJChFTkFCTEVfTUVESUFfU09VUkNFKSAkKEVOQUJMRV9NRURJQV9T
VEFUSVNUSUNTKSAkKEVOQUJMRV9NRURJQV9TVFJFQU0pICQoRU5BQkxFX01FVEVSX0VMRU1FTlQp
ICQoRU5BQkxFX01IVE1MKSAkKEVOQUJMRV9NT1VTRV9DVVJTT1JfU0NBTEUpICQoRU5BQkxFX05B
VklHQVRPUl9DT05URU5UX1VUSUxTKSAkKEVOQUJMRV9OQVZJR0FUT1JfSFdDT05DVVJSRU5DWSkg
JChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfUERGS0lUX1BMVUdJTikgJChFTkFCTEVf
UElDVFVSRV9TSVpFUykgJChFTkFCTEVfUE9JTlRFUl9MT0NLKSAkKEVOQUJMRV9QUk9NSVNFUykg
JChFTkFCTEVfUFJPWElNSVRZX0VWRU5UUykgJChFTkFCTEVfUFVCTElDX1NVRkZJWF9MSVNUKSAk
KEVOQUJMRV9RVU9UQSkgJChFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpICQoRU5BQkxF
X1JFUVVFU1RfQVVUT0NPTVBMRVRFKSAkKEVOQUJMRV9SRU1PVEVfSU5TUEVDVE9SKSAkKEVOQUJM
RV9SRVNPTFVUSU9OX01FRElBX1FVRVJZKSAkKEVOQUJMRV9SVUJCRVJfQkFORElORykgJChFTkFC
TEVfQ1NTX1NDUk9MTF9TTkFQKSAkKEVOQUJMRV9TUEVFQ0hfU1lOVEhFU0lTKSAkKEVOQUJMRV9T
VFJFQU1TX0FQSSkgJChFTkFCTEVfU1VCVExFX0NSWVBUTykgJChFTkFCTEVfU1ZHX0ZPTlRTKSAk
KEVOQUJMRV9TVkdfT1RGX0NPTlZFUlRFUikgJChFTkFCTEVfVEVMRVBIT05FX05VTUJFUl9ERVRF
Q1RJT04pICQoRU5BQkxFX1RFTVBMQVRFX0VMRU1FTlQpICQoRU5BQkxFX1RFWFRfQVVUT1NJWklO
RykgJChFTkFCTEVfVE9VQ0hfRVZFTlRTKSAkKEVOQUJMRV9UT1VDSF9JQ09OX0xPQURJTkcpICQo
RU5BQkxFX0NTU19UUkFJTElOR19XT1JEKSAkKEVOQUJMRV9VU0VSU0VMRUNUX0FMTCkgJChFTkFC
TEVfVklERU8pICQoRU5BQkxFX1ZJREVPX1RSQUNLKSAkKEVOQUJMRV9EQVRBQ1VFX1ZBTFVFKSAk
KEVOQUJMRV9WSUVXX01PREVfQ1NTX01FRElBKSAkKEVOQUJMRV9XRUJHTCkgJChFTkFCTEVfV0VC
R0wyKSAkKEVOQUJMRV9XRUJfQVVESU8pICQoRU5BQkxFX1dFQl9SRVBMQVkpICQoRU5BQkxFX1dF
Ql9TT0NLRVRTKSAkKEVOQUJMRV9XRUJfVElNSU5HKSAkKEVOQUJMRV9XRUJWVFRfUkVHSU9OUykg
JChFTkFCTEVfWEhSX1RJTUVPVVQpICQoRU5BQkxFX1hTTFQpICQoRU5BQkxFX0ZUTF9KSVQpICQo
RU5BQkxFX0pJVCkgJChFTkFCTEVfU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKSAkKEVOQUJM
RV9WSURFT19QUkVTRU5UQVRJT05fTU9ERSk7CitGRUFUVVJFX0RFRklORVMgPSAkKEVOQUJMRV8z
RF9UUkFOU0ZPUk1TKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICQoRU5BQkxFX0FD
Q0VMRVJBVEVEX09WRVJGTE9XX1NDUk9MTElORykgJChFTkFCTEVfQVZGX0NBUFRJT05TKSAkKEVO
QUJMRV9BVFRBQ0hNRU5UX0VMRU1FTlQpICQoRU5BQkxFX0NBQ0hFX1BBUlRJVElPTklORykgJChF
TkFCTEVfQ0FOVkFTX1BBVEgpICQoRU5BQkxFX0NBTlZBU19QUk9YWSkgJChFTkFCTEVfQ0hBTk5F
TF9NRVNTQUdJTkcpICQoRU5BQkxFX0VTNl9BUlJPV0ZVTkNUSU9OX1NZTlRBWCkgJChFTkFCTEVf
RVM2X0NMQVNTX1NZTlRBWCkgJChFTkFCTEVfRVM2X1RFTVBMQVRFX0xJVEVSQUxfU1lOVEFYKSAk
KEVOQUJMRV9DT05URU5UX0ZJTFRFUklORykgJChFTkFCTEVfQ1NQX05FWFQpICQoRU5BQkxFX0NT
U19BTklNQVRJT05TX0xFVkVMXzIpICQoRU5BQkxFX0NTU19CT1hfREVDT1JBVElPTl9CUkVBSykg
JChFTkFCTEVfQ1NTX0NPTVBPU0lUSU5HKSAkKEVOQUJMRV9DU1NfREVWSUNFX0FEQVBUQVRJT04p
ICQoRU5BQkxFX0NTU19HUklEX0xBWU9VVCkgJChFTkFCTEVfQ1NTX0lNQUdFX09SSUVOVEFUSU9O
KSAkKEVOQUJMRV9DU1NfSU1BR0VfUkVTT0xVVElPTikgJChFTkFCTEVfQ1NTX1JFR0lPTlMpICQo
RU5BQkxFX0NTU19TRUxFQ1RPUlNfTEVWRUw0KSAkKEVOQUJMRV9DU1NfU0hBUEVTKSAkKEVOQUJM
RV9DU1MzX1RFWFQpICQoRU5BQkxFX0NTUzNfVEVYVF9MSU5FX0JSRUFLKSAkKEVOQUJMRV9DVVJT
T1JfVklTSUJJTElUWSkgJChFTkFCTEVfQ1VTVE9NX1NDSEVNRV9IQU5ETEVSKSAkKEVOQUJMRV9E
QVNIQk9BUkRfU1VQUE9SVCkgJChFTkFCTEVfREFUQUxJU1RfRUxFTUVOVCkgJChFTkFCTEVfREFU
QV9UUkFOU0ZFUl9JVEVNUykgJChFTkFCTEVfREVUQUlMU19FTEVNRU5UKSAkKEVOQUJMRV9ERVZJ
Q0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0RPTTRfRVZFTlRTX0NPTlNUUlVDVE9SKSAkKEVOQUJM
RV9FTkNSWVBURURfTUVESUEpICQoRU5BQkxFX0VOQ1JZUFRFRF9NRURJQV9WMikgJChFTkFCTEVf
RklMVEVSU19MRVZFTF8yKSAkKEVOQUJMRV9GT05UX0xPQURfRVZFTlRTKSAkKEVOQUJMRV9GVUxM
U0NSRUVOX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkgJChFTkFCTEVfR0FNRVBBRF9ERVBSRUNBVEVE
KSAkKEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVfSElEREVOX1BBR0VfRE9NX1RJTUVSX1RI
Uk9UVExJTkcpICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfU0VSVklDRV9DT05UUk9M
UykgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRV9J
Tl9XT1JLRVJTKSAkKEVOQUJMRV9JTkRJRV9VSSkgJChFTkFCTEVfSU5QVVRfVFlQRV9DT0xPUikg
JChFTkFCTEVfSU5QVVRfVFlQRV9DT0xPUl9QT1BPVkVSKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RB
VEUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVfSU5DT01QTEVURSkgJChFTkFCTEVfSU5Q
VVRfVFlQRV9EQVRFVElNRUxPQ0FMKSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKSAkKEVOQUJM
RV9JTlBVVF9UWVBFX1RJTUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChFTkFCTEVfV0lS
RUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAkKEVOQUJMRV9JTlRMKSAkKEVOQUJMRV9JT1NfR0VTVFVS
RV9FVkVOVFMpICQoRU5BQkxFX0lPU19URVhUX0FVVE9TSVpJTkcpICQoRU5BQkxFX0lPU19UT1VD
SF9FVkVOVFMpICQoRU5BQkxFX0xFR0FDWV9DU1NfVkVORE9SX1BSRUZJWEVTKSAkKEVOQUJMRV9M
RUdBQ1lfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfTEVHQUNZX1ZFTkRPUl9QUkVGSVhFUykgJChF
TkFCTEVfTEVHQUNZX1dFQl9BVURJTykgJChFTkFCTEVfTEVUVEVSUFJFU1MpICQoRU5BQkxFX0xJ
TktfUFJFRkVUQ0gpICQoRU5BQkxFX01BVEhNTCkgJChFTkFCTEVfTUVESUFfQ09OVFJPTFNfU0NS
SVBUKSAkKEVOQUJMRV9NRURJQV9TRVNTSU9OKSAkKEVOQUJMRV9NRURJQV9TT1VSQ0UpICQoRU5B
QkxFX01FRElBX1NUQVRJU1RJQ1MpICQoRU5BQkxFX01FRElBX1NUUkVBTSkgJChFTkFCTEVfTUVU
RVJfRUxFTUVOVCkgJChFTkFCTEVfTUhUTUwpICQoRU5BQkxFX01PVVNFX0NVUlNPUl9TQ0FMRSkg
JChFTkFCTEVfTkFWSUdBVE9SX0NPTlRFTlRfVVRJTFMpICQoRU5BQkxFX05BVklHQVRPUl9IV0NP
TkNVUlJFTkNZKSAkKEVOQUJMRV9OT1RJRklDQVRJT05TKSAkKEVOQUJMRV9QREZLSVRfUExVR0lO
KSAkKEVOQUJMRV9QSUNUVVJFX1NJWkVTKSAkKEVOQUJMRV9QT0lOVEVSX0xPQ0spICQoRU5BQkxF
X1BST01JU0VTKSAkKEVOQUJMRV9QUk9YSU1JVFlfRVZFTlRTKSAkKEVOQUJMRV9QVUJMSUNfU1VG
RklYX0xJU1QpICQoRU5BQkxFX1FVT1RBKSAkKEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFN
RSkgJChFTkFCTEVfUkVRVUVTVF9BVVRPQ09NUExFVEUpICQoRU5BQkxFX1JFTU9URV9JTlNQRUNU
T1IpICQoRU5BQkxFX1JFU09MVVRJT05fTUVESUFfUVVFUlkpICQoRU5BQkxFX1JVQkJFUl9CQU5E
SU5HKSAkKEVOQUJMRV9DU1NfU0NST0xMX1NOQVApICQoRU5BQkxFX1NQRUVDSF9TWU5USEVTSVMp
ICQoRU5BQkxFX1NUUkVBTVNfQVBJKSAkKEVOQUJMRV9TVUJUTEVfQ1JZUFRPKSAkKEVOQUJMRV9T
VkdfRk9OVFMpICQoRU5BQkxFX1NWR19PVEZfQ09OVkVSVEVSKSAkKEVOQUJMRV9URUxFUEhPTkVf
TlVNQkVSX0RFVEVDVElPTikgJChFTkFCTEVfVEVNUExBVEVfRUxFTUVOVCkgJChFTkFCTEVfVEVY
VF9BVVRPU0laSU5HKSAkKEVOQUJMRV9UT1VDSF9FVkVOVFMpICQoRU5BQkxFX1RPVUNIX0lDT05f
TE9BRElORykgJChFTkFCTEVfQ1NTX1RSQUlMSU5HX1dPUkQpICQoRU5BQkxFX1VTRVJTRUxFQ1Rf
QUxMKSAkKEVOQUJMRV9WSURFTykgJChFTkFCTEVfVklERU9fVFJBQ0spICQoRU5BQkxFX0RBVEFD
VUVfVkFMVUUpICQoRU5BQkxFX1ZJRVdfTU9ERV9DU1NfTUVESUEpICQoRU5BQkxFX1dBU00pICQo
RU5BQkxFX1dFQkdMKSAkKEVOQUJMRV9XRUJHTDIpICQoRU5BQkxFX1dFQl9BVURJTykgJChFTkFC
TEVfV0VCX1JFUExBWSkgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dFQl9USU1JTkcp
ICQoRU5BQkxFX1dFQlZUVF9SRUdJT05TKSAkKEVOQUJMRV9YSFJfVElNRU9VVCkgJChFTkFCTEVf
WFNMVCkgJChFTkFCTEVfRlRMX0pJVCkgJChFTkFCTEVfSklUKSAkKEVOQUJMRV9TQVRVUkFURURf
TEFZT1VUX0FSSVRITUVUSUMpICQoRU5BQkxFX1ZJREVPX1BSRVNFTlRBVElPTl9NT0RFKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVz
LnhjY29uZmlnIGIvU291cmNlL1dlYktpdC9tYWMvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmlu
ZXMueGNjb25maWcKaW5kZXggZmU1NmJjMGIxYmZkNjBjNTFhMDU3ZTk1NTRkMTllZDQ4NzRmNGY0
Mi4uOTg5MTE0NjUwZGE0Mjc2M2IwZWFmY2Q4ODkzYzNlNGNiMmQ2MTc5ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9tYWMvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcK
KysrIGIvU291cmNlL1dlYktpdC9tYWMvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNj
b25maWcKQEAgLTE5OSw2ICsxOTksNyBAQCBFTkFCTEVfVklERU9fUFJFU0VOVEFUSU9OX01PREVb
c2RrPWlwaG9uZSpdID0gRU5BQkxFX1ZJREVPX1BSRVNFTlRBVElPTl9NT0RFOwogRU5BQkxFX1ZJ
REVPX1RSQUNLID0gRU5BQkxFX1ZJREVPX1RSQUNLOwogRU5BQkxFX0RBVEFDVUVfVkFMVUUgPSBF
TkFCTEVfREFUQUNVRV9WQUxVRTsKIEVOQUJMRV9WSUVXX01PREVfQ1NTX01FRElBID0gOworRU5B
QkxFX1dBU00gPSA7CiBFTkFCTEVfV0VCR0wgPSBFTkFCTEVfV0VCR0w7CiBFTkFCTEVfV0VCR0wy
ID0gOwogRU5BQkxFX1dFQl9BVURJTyA9IEVOQUJMRV9XRUJfQVVESU87CkBAIC0yMjgsNCArMjI5
LDQgQEAgRU5BQkxFX0ZUTF9KSVRbc2RrPWlwaG9uZW9zKl0gPSBFTkFCTEVfRlRMX0pJVDsKIAog
RU5BQkxFX1NBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQyA9IEVOQUJMRV9TQVRVUkFURURfTEFZ
T1VUX0FSSVRITUVUSUM7CiAKLUZFQVRVUkVfREVGSU5FUyA9ICQoRU5BQkxFXzNEX1RSQU5TRk9S
TVMpICQoRU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJChFTkFCTEVfQUNDRUxFUkFURURf
T1ZFUkZMT1dfU0NST0xMSU5HKSAkKEVOQUJMRV9BVkZfQ0FQVElPTlMpICQoRU5BQkxFX0FUVEFD
SE1FTlRfRUxFTUVOVCkgJChFTkFCTEVfQ0FDSEVfUEFSVElUSU9OSU5HKSAkKEVOQUJMRV9DQU5W
QVNfUEFUSCkgJChFTkFCTEVfQ0FOVkFTX1BST1hZKSAkKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lO
RykgJChFTkFCTEVfRVM2X0FSUk9XRlVOQ1RJT05fU1lOVEFYKSAkKEVOQUJMRV9FUzZfQ0xBU1Nf
U1lOVEFYKSAkKEVOQUJMRV9FUzZfVEVNUExBVEVfTElURVJBTF9TWU5UQVgpICQoRU5BQkxFX0NP
TlRFTlRfRklMVEVSSU5HKSAkKEVOQUJMRV9DU1BfTkVYVCkgJChFTkFCTEVfQ1NTX0FOSU1BVElP
TlNfTEVWRUxfMikgJChFTkFCTEVfQ1NTX0JPWF9ERUNPUkFUSU9OX0JSRUFLKSAkKEVOQUJMRV9D
U1NfQ09NUE9TSVRJTkcpICQoRU5BQkxFX0NTU19ERVZJQ0VfQURBUFRBVElPTikgJChFTkFCTEVf
Q1NTX0dSSURfTEFZT1VUKSAkKEVOQUJMRV9DU1NfSU1BR0VfT1JJRU5UQVRJT04pICQoRU5BQkxF
X0NTU19JTUFHRV9SRVNPTFVUSU9OKSAkKEVOQUJMRV9DU1NfUkVHSU9OUykgJChFTkFCTEVfQ1NT
X1NFTEVDVE9SU19MRVZFTDQpICQoRU5BQkxFX0NTU19TSEFQRVMpICQoRU5BQkxFX0NTUzNfVEVY
VCkgJChFTkFCTEVfQ1NTM19URVhUX0xJTkVfQlJFQUspICQoRU5BQkxFX0NVUlNPUl9WSVNJQklM
SVRZKSAkKEVOQUJMRV9DVVNUT01fU0NIRU1FX0hBTkRMRVIpICQoRU5BQkxFX0RBU0hCT0FSRF9T
VVBQT1JUKSAkKEVOQUJMRV9EQVRBTElTVF9FTEVNRU5UKSAkKEVOQUJMRV9EQVRBX1RSQU5TRkVS
X0lURU1TKSAkKEVOQUJMRV9ERVRBSUxTX0VMRU1FTlQpICQoRU5BQkxFX0RFVklDRV9PUklFTlRB
VElPTikgJChFTkFCTEVfRE9NNF9FVkVOVFNfQ09OU1RSVUNUT1IpICQoRU5BQkxFX0VOQ1JZUFRF
RF9NRURJQSkgJChFTkFCTEVfRU5DUllQVEVEX01FRElBX1YyKSAkKEVOQUJMRV9GSUxURVJTX0xF
VkVMXzIpICQoRU5BQkxFX0ZPTlRfTE9BRF9FVkVOVFMpICQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJ
KSAkKEVOQUJMRV9HQU1FUEFEKSAkKEVOQUJMRV9HQU1FUEFEX0RFUFJFQ0FURUQpICQoRU5BQkxF
X0dFT0xPQ0FUSU9OKSAkKEVOQUJMRV9ISURERU5fUEFHRV9ET01fVElNRVJfVEhST1RUTElORykg
JChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9TRVJWSUNFX0NPTlRST0xTKSAkKEVOQUJM
RV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFX0lOX1dPUktFUlMp
ICQoRU5BQkxFX0lORElFX1VJKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0NPTE9SKSAkKEVOQUJMRV9J
TlBVVF9UWVBFX0NPTE9SX1BPUE9WRVIpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURSkgJChFTkFC
TEVfSU5QVVRfVFlQRV9EQVRFVElNRV9JTkNPTVBMRVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RB
VEVUSU1FTE9DQUwpICQoRU5BQkxFX0lOUFVUX1RZUEVfTU9OVEgpICQoRU5BQkxFX0lOUFVUX1RZ
UEVfVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9XRUVLKSAkKEVOQUJMRV9XSVJFTEVTU19QTEFZ
QkFDS19UQVJHRVQpICQoRU5BQkxFX0lOVEwpICQoRU5BQkxFX0lPU19HRVNUVVJFX0VWRU5UUykg
JChFTkFCTEVfSU9TX1RFWFRfQVVUT1NJWklORykgJChFTkFCTEVfSU9TX1RPVUNIX0VWRU5UUykg
JChFTkFCTEVfTEVHQUNZX0NTU19WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9OT1RJ
RklDQVRJT05TKSAkKEVOQUJMRV9MRUdBQ1lfVkVORE9SX1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdB
Q1lfV0VCX0FVRElPKSAkKEVOQUJMRV9MRVRURVJQUkVTUykgJChFTkFCTEVfTElOS19QUkVGRVRD
SCkgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9NRURJQV9DT05UUk9MU19TQ1JJUFQpICQoRU5B
QkxFX01FRElBX1NFU1NJT04pICQoRU5BQkxFX01FRElBX1NPVVJDRSkgJChFTkFCTEVfTUVESUFf
U1RBVElTVElDUykgJChFTkFCTEVfTUVESUFfU1RSRUFNKSAkKEVOQUJMRV9NRVRFUl9FTEVNRU5U
KSAkKEVOQUJMRV9NSFRNTCkgJChFTkFCTEVfTU9VU0VfQ1VSU09SX1NDQUxFKSAkKEVOQUJMRV9O
QVZJR0FUT1JfQ09OVEVOVF9VVElMUykgJChFTkFCTEVfTkFWSUdBVE9SX0hXQ09OQ1VSUkVOQ1kp
ICQoRU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxFX1BERktJVF9QTFVHSU4pICQoRU5BQkxF
X1BJQ1RVUkVfU0laRVMpICQoRU5BQkxFX1BPSU5URVJfTE9DSykgJChFTkFCTEVfUFJPTUlTRVMp
ICQoRU5BQkxFX1BST1hJTUlUWV9FVkVOVFMpICQoRU5BQkxFX1BVQkxJQ19TVUZGSVhfTElTVCkg
JChFTkFCTEVfUVVPVEEpICQoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAkKEVOQUJM
RV9SRVFVRVNUX0FVVE9DT01QTEVURSkgJChFTkFCTEVfUkVNT1RFX0lOU1BFQ1RPUikgJChFTkFC
TEVfUkVTT0xVVElPTl9NRURJQV9RVUVSWSkgJChFTkFCTEVfUlVCQkVSX0JBTkRJTkcpICQoRU5B
QkxFX0NTU19TQ1JPTExfU05BUCkgJChFTkFCTEVfU1BFRUNIX1NZTlRIRVNJUykgJChFTkFCTEVf
U1RSRUFNU19BUEkpICQoRU5BQkxFX1NVQlRMRV9DUllQVE8pICQoRU5BQkxFX1NWR19GT05UUykg
JChFTkFCTEVfU1ZHX09URl9DT05WRVJURVIpICQoRU5BQkxFX1RFTEVQSE9ORV9OVU1CRVJfREVU
RUNUSU9OKSAkKEVOQUJMRV9URU1QTEFURV9FTEVNRU5UKSAkKEVOQUJMRV9URVhUX0FVVE9TSVpJ
TkcpICQoRU5BQkxFX1RPVUNIX0VWRU5UUykgJChFTkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HKSAk
KEVOQUJMRV9DU1NfVFJBSUxJTkdfV09SRCkgJChFTkFCTEVfVVNFUlNFTEVDVF9BTEwpICQoRU5B
QkxFX1ZJREVPKSAkKEVOQUJMRV9WSURFT19UUkFDSykgJChFTkFCTEVfREFUQUNVRV9WQUxVRSkg
JChFTkFCTEVfVklFV19NT0RFX0NTU19NRURJQSkgJChFTkFCTEVfV0VCR0wpICQoRU5BQkxFX1dF
QkdMMikgJChFTkFCTEVfV0VCX0FVRElPKSAkKEVOQUJMRV9XRUJfUkVQTEFZKSAkKEVOQUJMRV9X
RUJfU09DS0VUUykgJChFTkFCTEVfV0VCX1RJTUlORykgJChFTkFCTEVfV0VCVlRUX1JFR0lPTlMp
ICQoRU5BQkxFX1hIUl9USU1FT1VUKSAkKEVOQUJMRV9YU0xUKSAkKEVOQUJMRV9GVExfSklUKSAk
KEVOQUJMRV9KSVQpICQoRU5BQkxFX1NBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykgJChFTkFC
TEVfVklERU9fUFJFU0VOVEFUSU9OX01PREUpOworRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVf
M0RfVFJBTlNGT1JNUykgJChFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAkKEVOQUJMRV9B
Q0NFTEVSQVRFRF9PVkVSRkxPV19TQ1JPTExJTkcpICQoRU5BQkxFX0FWRl9DQVBUSU9OUykgJChF
TkFCTEVfQVRUQUNITUVOVF9FTEVNRU5UKSAkKEVOQUJMRV9DQUNIRV9QQVJUSVRJT05JTkcpICQo
RU5BQkxFX0NBTlZBU19QQVRIKSAkKEVOQUJMRV9DQU5WQVNfUFJPWFkpICQoRU5BQkxFX0NIQU5O
RUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9FUzZfQVJST1dGVU5DVElPTl9TWU5UQVgpICQoRU5BQkxF
X0VTNl9DTEFTU19TWU5UQVgpICQoRU5BQkxFX0VTNl9URU1QTEFURV9MSVRFUkFMX1NZTlRBWCkg
JChFTkFCTEVfQ09OVEVOVF9GSUxURVJJTkcpICQoRU5BQkxFX0NTUF9ORVhUKSAkKEVOQUJMRV9D
U1NfQU5JTUFUSU9OU19MRVZFTF8yKSAkKEVOQUJMRV9DU1NfQk9YX0RFQ09SQVRJT05fQlJFQUsp
ICQoRU5BQkxFX0NTU19DT01QT1NJVElORykgJChFTkFCTEVfQ1NTX0RFVklDRV9BREFQVEFUSU9O
KSAkKEVOQUJMRV9DU1NfR1JJRF9MQVlPVVQpICQoRU5BQkxFX0NTU19JTUFHRV9PUklFTlRBVElP
TikgJChFTkFCTEVfQ1NTX0lNQUdFX1JFU09MVVRJT04pICQoRU5BQkxFX0NTU19SRUdJT05TKSAk
KEVOQUJMRV9DU1NfU0VMRUNUT1JTX0xFVkVMNCkgJChFTkFCTEVfQ1NTX1NIQVBFUykgJChFTkFC
TEVfQ1NTM19URVhUKSAkKEVOQUJMRV9DU1MzX1RFWFRfTElORV9CUkVBSykgJChFTkFCTEVfQ1VS
U09SX1ZJU0lCSUxJVFkpICQoRU5BQkxFX0NVU1RPTV9TQ0hFTUVfSEFORExFUikgJChFTkFCTEVf
REFTSEJPQVJEX1NVUFBPUlQpICQoRU5BQkxFX0RBVEFMSVNUX0VMRU1FTlQpICQoRU5BQkxFX0RB
VEFfVFJBTlNGRVJfSVRFTVMpICQoRU5BQkxFX0RFVEFJTFNfRUxFTUVOVCkgJChFTkFCTEVfREVW
SUNFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9ET000X0VWRU5UU19DT05TVFJVQ1RPUikgJChFTkFC
TEVfRU5DUllQVEVEX01FRElBKSAkKEVOQUJMRV9FTkNSWVBURURfTUVESUFfVjIpICQoRU5BQkxF
X0ZJTFRFUlNfTEVWRUxfMikgJChFTkFCTEVfRk9OVF9MT0FEX0VWRU5UUykgJChFTkFCTEVfRlVM
TFNDUkVFTl9BUEkpICQoRU5BQkxFX0dBTUVQQUQpICQoRU5BQkxFX0dBTUVQQURfREVQUkVDQVRF
RCkgJChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxFX0hJRERFTl9QQUdFX0RPTV9USU1FUl9U
SFJPVFRMSU5HKSAkKEVOQUJMRV9JQ09OREFUQUJBU0UpICQoRU5BQkxFX1NFUlZJQ0VfQ09OVFJP
TFMpICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0Vf
SU5fV09SS0VSUykgJChFTkFCTEVfSU5ESUVfVUkpICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1Ip
ICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1JfUE9QT1ZFUikgJChFTkFCTEVfSU5QVVRfVFlQRV9E
QVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FX0lOQ09NUExFVEUpICQoRU5BQkxFX0lO
UFVUX1RZUEVfREFURVRJTUVMT0NBTCkgJChFTkFCTEVfSU5QVVRfVFlQRV9NT05USCkgJChFTkFC
TEVfSU5QVVRfVFlQRV9USU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1dFRUspICQoRU5BQkxFX1dJ
UkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJChFTkFCTEVfSU5UTCkgJChFTkFCTEVfSU9TX0dFU1RV
UkVfRVZFTlRTKSAkKEVOQUJMRV9JT1NfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9JT1NfVE9V
Q0hfRVZFTlRTKSAkKEVOQUJMRV9MRUdBQ1lfQ1NTX1ZFTkRPUl9QUkVGSVhFUykgJChFTkFCTEVf
TEVHQUNZX05PVElGSUNBVElPTlMpICQoRU5BQkxFX0xFR0FDWV9WRU5ET1JfUFJFRklYRVMpICQo
RU5BQkxFX0xFR0FDWV9XRUJfQVVESU8pICQoRU5BQkxFX0xFVFRFUlBSRVNTKSAkKEVOQUJMRV9M
SU5LX1BSRUZFVENIKSAkKEVOQUJMRV9NQVRITUwpICQoRU5BQkxFX01FRElBX0NPTlRST0xTX1ND
UklQVCkgJChFTkFCTEVfTUVESUFfU0VTU0lPTikgJChFTkFCTEVfTUVESUFfU09VUkNFKSAkKEVO
QUJMRV9NRURJQV9TVEFUSVNUSUNTKSAkKEVOQUJMRV9NRURJQV9TVFJFQU0pICQoRU5BQkxFX01F
VEVSX0VMRU1FTlQpICQoRU5BQkxFX01IVE1MKSAkKEVOQUJMRV9NT1VTRV9DVVJTT1JfU0NBTEUp
ICQoRU5BQkxFX05BVklHQVRPUl9DT05URU5UX1VUSUxTKSAkKEVOQUJMRV9OQVZJR0FUT1JfSFdD
T05DVVJSRU5DWSkgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfUERGS0lUX1BMVUdJ
TikgJChFTkFCTEVfUElDVFVSRV9TSVpFUykgJChFTkFCTEVfUE9JTlRFUl9MT0NLKSAkKEVOQUJM
RV9QUk9NSVNFUykgJChFTkFCTEVfUFJPWElNSVRZX0VWRU5UUykgJChFTkFCTEVfUFVCTElDX1NV
RkZJWF9MSVNUKSAkKEVOQUJMRV9RVU9UQSkgJChFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJB
TUUpICQoRU5BQkxFX1JFUVVFU1RfQVVUT0NPTVBMRVRFKSAkKEVOQUJMRV9SRU1PVEVfSU5TUEVD
VE9SKSAkKEVOQUJMRV9SRVNPTFVUSU9OX01FRElBX1FVRVJZKSAkKEVOQUJMRV9SVUJCRVJfQkFO
RElORykgJChFTkFCTEVfQ1NTX1NDUk9MTF9TTkFQKSAkKEVOQUJMRV9TUEVFQ0hfU1lOVEhFU0lT
KSAkKEVOQUJMRV9TVFJFQU1TX0FQSSkgJChFTkFCTEVfU1VCVExFX0NSWVBUTykgJChFTkFCTEVf
U1ZHX0ZPTlRTKSAkKEVOQUJMRV9TVkdfT1RGX0NPTlZFUlRFUikgJChFTkFCTEVfVEVMRVBIT05F
X05VTUJFUl9ERVRFQ1RJT04pICQoRU5BQkxFX1RFTVBMQVRFX0VMRU1FTlQpICQoRU5BQkxFX1RF
WFRfQVVUT1NJWklORykgJChFTkFCTEVfVE9VQ0hfRVZFTlRTKSAkKEVOQUJMRV9UT1VDSF9JQ09O
X0xPQURJTkcpICQoRU5BQkxFX0NTU19UUkFJTElOR19XT1JEKSAkKEVOQUJMRV9VU0VSU0VMRUNU
X0FMTCkgJChFTkFCTEVfVklERU8pICQoRU5BQkxFX1ZJREVPX1RSQUNLKSAkKEVOQUJMRV9EQVRB
Q1VFX1ZBTFVFKSAkKEVOQUJMRV9WSUVXX01PREVfQ1NTX01FRElBKSAkKEVOQUJMRV9XQVNNKSAk
KEVOQUJMRV9XRUJHTCkgJChFTkFCTEVfV0VCR0wyKSAkKEVOQUJMRV9XRUJfQVVESU8pICQoRU5B
QkxFX1dFQl9SRVBMQVkpICQoRU5BQkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XRUJfVElNSU5H
KSAkKEVOQUJMRV9XRUJWVFRfUkVHSU9OUykgJChFTkFCTEVfWEhSX1RJTUVPVVQpICQoRU5BQkxF
X1hTTFQpICQoRU5BQkxFX0ZUTF9KSVQpICQoRU5BQkxFX0pJVCkgJChFTkFCTEVfU0FUVVJBVEVE
X0xBWU9VVF9BUklUSE1FVElDKSAkKEVOQUJMRV9WSURFT19QUkVTRU5UQVRJT05fTU9ERSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54
Y2NvbmZpZyBiL1NvdXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhj
Y29uZmlnCmluZGV4IGZlNTZiYzBiMWJmZDYwYzUxYTA1N2U5NTU0ZDE5ZWQ0ODc0ZjRmNDIuLjk4
OTExNDY1MGRhNDI3NjNiMGVhZmNkODg5M2MzZTRjYjJkNjE3OWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCkBAIC0x
OTksNiArMTk5LDcgQEAgRU5BQkxFX1ZJREVPX1BSRVNFTlRBVElPTl9NT0RFW3Nkaz1pcGhvbmUq
XSA9IEVOQUJMRV9WSURFT19QUkVTRU5UQVRJT05fTU9ERTsKIEVOQUJMRV9WSURFT19UUkFDSyA9
IEVOQUJMRV9WSURFT19UUkFDSzsKIEVOQUJMRV9EQVRBQ1VFX1ZBTFVFID0gRU5BQkxFX0RBVEFD
VUVfVkFMVUU7CiBFTkFCTEVfVklFV19NT0RFX0NTU19NRURJQSA9IDsKK0VOQUJMRV9XQVNNID0g
OwogRU5BQkxFX1dFQkdMID0gRU5BQkxFX1dFQkdMOwogRU5BQkxFX1dFQkdMMiA9IDsKIEVOQUJM
RV9XRUJfQVVESU8gPSBFTkFCTEVfV0VCX0FVRElPOwpAQCAtMjI4LDQgKzIyOSw0IEBAIEVOQUJM
RV9GVExfSklUW3Nkaz1pcGhvbmVvcypdID0gRU5BQkxFX0ZUTF9KSVQ7CiAKIEVOQUJMRV9TQVRV
UkFURURfTEFZT1VUX0FSSVRITUVUSUMgPSBFTkFCTEVfU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1F
VElDOwogCi1GRUFUVVJFX0RFRklORVMgPSAkKEVOQUJMRV8zRF9UUkFOU0ZPUk1TKSAkKEVOQUJM
RV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICQoRU5BQkxFX0FDQ0VMRVJBVEVEX09WRVJGTE9XX1ND
Uk9MTElORykgJChFTkFCTEVfQVZGX0NBUFRJT05TKSAkKEVOQUJMRV9BVFRBQ0hNRU5UX0VMRU1F
TlQpICQoRU5BQkxFX0NBQ0hFX1BBUlRJVElPTklORykgJChFTkFCTEVfQ0FOVkFTX1BBVEgpICQo
RU5BQkxFX0NBTlZBU19QUk9YWSkgJChFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcpICQoRU5BQkxF
X0VTNl9BUlJPV0ZVTkNUSU9OX1NZTlRBWCkgJChFTkFCTEVfRVM2X0NMQVNTX1NZTlRBWCkgJChF
TkFCTEVfRVM2X1RFTVBMQVRFX0xJVEVSQUxfU1lOVEFYKSAkKEVOQUJMRV9DT05URU5UX0ZJTFRF
UklORykgJChFTkFCTEVfQ1NQX05FWFQpICQoRU5BQkxFX0NTU19BTklNQVRJT05TX0xFVkVMXzIp
ICQoRU5BQkxFX0NTU19CT1hfREVDT1JBVElPTl9CUkVBSykgJChFTkFCTEVfQ1NTX0NPTVBPU0lU
SU5HKSAkKEVOQUJMRV9DU1NfREVWSUNFX0FEQVBUQVRJT04pICQoRU5BQkxFX0NTU19HUklEX0xB
WU9VVCkgJChFTkFCTEVfQ1NTX0lNQUdFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9DU1NfSU1BR0Vf
UkVTT0xVVElPTikgJChFTkFCTEVfQ1NTX1JFR0lPTlMpICQoRU5BQkxFX0NTU19TRUxFQ1RPUlNf
TEVWRUw0KSAkKEVOQUJMRV9DU1NfU0hBUEVTKSAkKEVOQUJMRV9DU1MzX1RFWFQpICQoRU5BQkxF
X0NTUzNfVEVYVF9MSU5FX0JSRUFLKSAkKEVOQUJMRV9DVVJTT1JfVklTSUJJTElUWSkgJChFTkFC
TEVfQ1VTVE9NX1NDSEVNRV9IQU5ETEVSKSAkKEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVCkgJChF
TkFCTEVfREFUQUxJU1RfRUxFTUVOVCkgJChFTkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUykgJChF
TkFCTEVfREVUQUlMU19FTEVNRU5UKSAkKEVOQUJMRV9ERVZJQ0VfT1JJRU5UQVRJT04pICQoRU5B
QkxFX0RPTTRfRVZFTlRTX0NPTlNUUlVDVE9SKSAkKEVOQUJMRV9FTkNSWVBURURfTUVESUEpICQo
RU5BQkxFX0VOQ1JZUFRFRF9NRURJQV9WMikgJChFTkFCTEVfRklMVEVSU19MRVZFTF8yKSAkKEVO
QUJMRV9GT05UX0xPQURfRVZFTlRTKSAkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVf
R0FNRVBBRCkgJChFTkFCTEVfR0FNRVBBRF9ERVBSRUNBVEVEKSAkKEVOQUJMRV9HRU9MT0NBVElP
TikgJChFTkFCTEVfSElEREVOX1BBR0VfRE9NX1RJTUVSX1RIUk9UVExJTkcpICQoRU5BQkxFX0lD
T05EQVRBQkFTRSkgJChFTkFCTEVfU0VSVklDRV9DT05UUk9MUykgJChFTkFCTEVfSU5ERVhFRF9E
QVRBQkFTRSkgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRV9JTl9XT1JLRVJTKSAkKEVOQUJMRV9J
TkRJRV9VSSkgJChFTkFCTEVfSU5QVVRfVFlQRV9DT0xPUikgJChFTkFCTEVfSU5QVVRfVFlQRV9D
T0xPUl9QT1BPVkVSKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEUpICQoRU5BQkxFX0lOUFVUX1RZ
UEVfREFURVRJTUVfSU5DT01QTEVURSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FM
KSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1RJTUUpICQo
RU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChFTkFCTEVfV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VU
KSAkKEVOQUJMRV9JTlRMKSAkKEVOQUJMRV9JT1NfR0VTVFVSRV9FVkVOVFMpICQoRU5BQkxFX0lP
U19URVhUX0FVVE9TSVpJTkcpICQoRU5BQkxFX0lPU19UT1VDSF9FVkVOVFMpICQoRU5BQkxFX0xF
R0FDWV9DU1NfVkVORE9SX1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lfTk9USUZJQ0FUSU9OUykg
JChFTkFCTEVfTEVHQUNZX1ZFTkRPUl9QUkVGSVhFUykgJChFTkFCTEVfTEVHQUNZX1dFQl9BVURJ
TykgJChFTkFCTEVfTEVUVEVSUFJFU1MpICQoRU5BQkxFX0xJTktfUFJFRkVUQ0gpICQoRU5BQkxF
X01BVEhNTCkgJChFTkFCTEVfTUVESUFfQ09OVFJPTFNfU0NSSVBUKSAkKEVOQUJMRV9NRURJQV9T
RVNTSU9OKSAkKEVOQUJMRV9NRURJQV9TT1VSQ0UpICQoRU5BQkxFX01FRElBX1NUQVRJU1RJQ1Mp
ICQoRU5BQkxFX01FRElBX1NUUkVBTSkgJChFTkFCTEVfTUVURVJfRUxFTUVOVCkgJChFTkFCTEVf
TUhUTUwpICQoRU5BQkxFX01PVVNFX0NVUlNPUl9TQ0FMRSkgJChFTkFCTEVfTkFWSUdBVE9SX0NP
TlRFTlRfVVRJTFMpICQoRU5BQkxFX05BVklHQVRPUl9IV0NPTkNVUlJFTkNZKSAkKEVOQUJMRV9O
T1RJRklDQVRJT05TKSAkKEVOQUJMRV9QREZLSVRfUExVR0lOKSAkKEVOQUJMRV9QSUNUVVJFX1NJ
WkVTKSAkKEVOQUJMRV9QT0lOVEVSX0xPQ0spICQoRU5BQkxFX1BST01JU0VTKSAkKEVOQUJMRV9Q
Uk9YSU1JVFlfRVZFTlRTKSAkKEVOQUJMRV9QVUJMSUNfU1VGRklYX0xJU1QpICQoRU5BQkxFX1FV
T1RBKSAkKEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkgJChFTkFCTEVfUkVRVUVTVF9B
VVRPQ09NUExFVEUpICQoRU5BQkxFX1JFTU9URV9JTlNQRUNUT1IpICQoRU5BQkxFX1JFU09MVVRJ
T05fTUVESUFfUVVFUlkpICQoRU5BQkxFX1JVQkJFUl9CQU5ESU5HKSAkKEVOQUJMRV9DU1NfU0NS
T0xMX1NOQVApICQoRU5BQkxFX1NQRUVDSF9TWU5USEVTSVMpICQoRU5BQkxFX1NUUkVBTVNfQVBJ
KSAkKEVOQUJMRV9TVUJUTEVfQ1JZUFRPKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1NW
R19PVEZfQ09OVkVSVEVSKSAkKEVOQUJMRV9URUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJChF
TkFCTEVfVEVNUExBVEVfRUxFTUVOVCkgJChFTkFCTEVfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJM
RV9UT1VDSF9FVkVOVFMpICQoRU5BQkxFX1RPVUNIX0lDT05fTE9BRElORykgJChFTkFCTEVfQ1NT
X1RSQUlMSU5HX1dPUkQpICQoRU5BQkxFX1VTRVJTRUxFQ1RfQUxMKSAkKEVOQUJMRV9WSURFTykg
JChFTkFCTEVfVklERU9fVFJBQ0spICQoRU5BQkxFX0RBVEFDVUVfVkFMVUUpICQoRU5BQkxFX1ZJ
RVdfTU9ERV9DU1NfTUVESUEpICQoRU5BQkxFX1dFQkdMKSAkKEVOQUJMRV9XRUJHTDIpICQoRU5B
QkxFX1dFQl9BVURJTykgJChFTkFCTEVfV0VCX1JFUExBWSkgJChFTkFCTEVfV0VCX1NPQ0tFVFMp
ICQoRU5BQkxFX1dFQl9USU1JTkcpICQoRU5BQkxFX1dFQlZUVF9SRUdJT05TKSAkKEVOQUJMRV9Y
SFJfVElNRU9VVCkgJChFTkFCTEVfWFNMVCkgJChFTkFCTEVfRlRMX0pJVCkgJChFTkFCTEVfSklU
KSAkKEVOQUJMRV9TQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpICQoRU5BQkxFX1ZJREVPX1BS
RVNFTlRBVElPTl9NT0RFKTsKK0ZFQVRVUkVfREVGSU5FUyA9ICQoRU5BQkxFXzNEX1RSQU5TRk9S
TVMpICQoRU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJChFTkFCTEVfQUNDRUxFUkFURURf
T1ZFUkZMT1dfU0NST0xMSU5HKSAkKEVOQUJMRV9BVkZfQ0FQVElPTlMpICQoRU5BQkxFX0FUVEFD
SE1FTlRfRUxFTUVOVCkgJChFTkFCTEVfQ0FDSEVfUEFSVElUSU9OSU5HKSAkKEVOQUJMRV9DQU5W
QVNfUEFUSCkgJChFTkFCTEVfQ0FOVkFTX1BST1hZKSAkKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lO
RykgJChFTkFCTEVfRVM2X0FSUk9XRlVOQ1RJT05fU1lOVEFYKSAkKEVOQUJMRV9FUzZfQ0xBU1Nf
U1lOVEFYKSAkKEVOQUJMRV9FUzZfVEVNUExBVEVfTElURVJBTF9TWU5UQVgpICQoRU5BQkxFX0NP
TlRFTlRfRklMVEVSSU5HKSAkKEVOQUJMRV9DU1BfTkVYVCkgJChFTkFCTEVfQ1NTX0FOSU1BVElP
TlNfTEVWRUxfMikgJChFTkFCTEVfQ1NTX0JPWF9ERUNPUkFUSU9OX0JSRUFLKSAkKEVOQUJMRV9D
U1NfQ09NUE9TSVRJTkcpICQoRU5BQkxFX0NTU19ERVZJQ0VfQURBUFRBVElPTikgJChFTkFCTEVf
Q1NTX0dSSURfTEFZT1VUKSAkKEVOQUJMRV9DU1NfSU1BR0VfT1JJRU5UQVRJT04pICQoRU5BQkxF
X0NTU19JTUFHRV9SRVNPTFVUSU9OKSAkKEVOQUJMRV9DU1NfUkVHSU9OUykgJChFTkFCTEVfQ1NT
X1NFTEVDVE9SU19MRVZFTDQpICQoRU5BQkxFX0NTU19TSEFQRVMpICQoRU5BQkxFX0NTUzNfVEVY
VCkgJChFTkFCTEVfQ1NTM19URVhUX0xJTkVfQlJFQUspICQoRU5BQkxFX0NVUlNPUl9WSVNJQklM
SVRZKSAkKEVOQUJMRV9DVVNUT01fU0NIRU1FX0hBTkRMRVIpICQoRU5BQkxFX0RBU0hCT0FSRF9T
VVBQT1JUKSAkKEVOQUJMRV9EQVRBTElTVF9FTEVNRU5UKSAkKEVOQUJMRV9EQVRBX1RSQU5TRkVS
X0lURU1TKSAkKEVOQUJMRV9ERVRBSUxTX0VMRU1FTlQpICQoRU5BQkxFX0RFVklDRV9PUklFTlRB
VElPTikgJChFTkFCTEVfRE9NNF9FVkVOVFNfQ09OU1RSVUNUT1IpICQoRU5BQkxFX0VOQ1JZUFRF
RF9NRURJQSkgJChFTkFCTEVfRU5DUllQVEVEX01FRElBX1YyKSAkKEVOQUJMRV9GSUxURVJTX0xF
VkVMXzIpICQoRU5BQkxFX0ZPTlRfTE9BRF9FVkVOVFMpICQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJ
KSAkKEVOQUJMRV9HQU1FUEFEKSAkKEVOQUJMRV9HQU1FUEFEX0RFUFJFQ0FURUQpICQoRU5BQkxF
X0dFT0xPQ0FUSU9OKSAkKEVOQUJMRV9ISURERU5fUEFHRV9ET01fVElNRVJfVEhST1RUTElORykg
JChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9TRVJWSUNFX0NPTlRST0xTKSAkKEVOQUJM
RV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFX0lOX1dPUktFUlMp
ICQoRU5BQkxFX0lORElFX1VJKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0NPTE9SKSAkKEVOQUJMRV9J
TlBVVF9UWVBFX0NPTE9SX1BPUE9WRVIpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURSkgJChFTkFC
TEVfSU5QVVRfVFlQRV9EQVRFVElNRV9JTkNPTVBMRVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RB
VEVUSU1FTE9DQUwpICQoRU5BQkxFX0lOUFVUX1RZUEVfTU9OVEgpICQoRU5BQkxFX0lOUFVUX1RZ
UEVfVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9XRUVLKSAkKEVOQUJMRV9XSVJFTEVTU19QTEFZ
QkFDS19UQVJHRVQpICQoRU5BQkxFX0lOVEwpICQoRU5BQkxFX0lPU19HRVNUVVJFX0VWRU5UUykg
JChFTkFCTEVfSU9TX1RFWFRfQVVUT1NJWklORykgJChFTkFCTEVfSU9TX1RPVUNIX0VWRU5UUykg
JChFTkFCTEVfTEVHQUNZX0NTU19WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9OT1RJ
RklDQVRJT05TKSAkKEVOQUJMRV9MRUdBQ1lfVkVORE9SX1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdB
Q1lfV0VCX0FVRElPKSAkKEVOQUJMRV9MRVRURVJQUkVTUykgJChFTkFCTEVfTElOS19QUkVGRVRD
SCkgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9NRURJQV9DT05UUk9MU19TQ1JJUFQpICQoRU5B
QkxFX01FRElBX1NFU1NJT04pICQoRU5BQkxFX01FRElBX1NPVVJDRSkgJChFTkFCTEVfTUVESUFf
U1RBVElTVElDUykgJChFTkFCTEVfTUVESUFfU1RSRUFNKSAkKEVOQUJMRV9NRVRFUl9FTEVNRU5U
KSAkKEVOQUJMRV9NSFRNTCkgJChFTkFCTEVfTU9VU0VfQ1VSU09SX1NDQUxFKSAkKEVOQUJMRV9O
QVZJR0FUT1JfQ09OVEVOVF9VVElMUykgJChFTkFCTEVfTkFWSUdBVE9SX0hXQ09OQ1VSUkVOQ1kp
ICQoRU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxFX1BERktJVF9QTFVHSU4pICQoRU5BQkxF
X1BJQ1RVUkVfU0laRVMpICQoRU5BQkxFX1BPSU5URVJfTE9DSykgJChFTkFCTEVfUFJPTUlTRVMp
ICQoRU5BQkxFX1BST1hJTUlUWV9FVkVOVFMpICQoRU5BQkxFX1BVQkxJQ19TVUZGSVhfTElTVCkg
JChFTkFCTEVfUVVPVEEpICQoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAkKEVOQUJM
RV9SRVFVRVNUX0FVVE9DT01QTEVURSkgJChFTkFCTEVfUkVNT1RFX0lOU1BFQ1RPUikgJChFTkFC
TEVfUkVTT0xVVElPTl9NRURJQV9RVUVSWSkgJChFTkFCTEVfUlVCQkVSX0JBTkRJTkcpICQoRU5B
QkxFX0NTU19TQ1JPTExfU05BUCkgJChFTkFCTEVfU1BFRUNIX1NZTlRIRVNJUykgJChFTkFCTEVf
U1RSRUFNU19BUEkpICQoRU5BQkxFX1NVQlRMRV9DUllQVE8pICQoRU5BQkxFX1NWR19GT05UUykg
JChFTkFCTEVfU1ZHX09URl9DT05WRVJURVIpICQoRU5BQkxFX1RFTEVQSE9ORV9OVU1CRVJfREVU
RUNUSU9OKSAkKEVOQUJMRV9URU1QTEFURV9FTEVNRU5UKSAkKEVOQUJMRV9URVhUX0FVVE9TSVpJ
TkcpICQoRU5BQkxFX1RPVUNIX0VWRU5UUykgJChFTkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HKSAk
KEVOQUJMRV9DU1NfVFJBSUxJTkdfV09SRCkgJChFTkFCTEVfVVNFUlNFTEVDVF9BTEwpICQoRU5B
QkxFX1ZJREVPKSAkKEVOQUJMRV9WSURFT19UUkFDSykgJChFTkFCTEVfREFUQUNVRV9WQUxVRSkg
JChFTkFCTEVfVklFV19NT0RFX0NTU19NRURJQSkgJChFTkFCTEVfV0FTTSkgJChFTkFCTEVfV0VC
R0wpICQoRU5BQkxFX1dFQkdMMikgJChFTkFCTEVfV0VCX0FVRElPKSAkKEVOQUJMRV9XRUJfUkVQ
TEFZKSAkKEVOQUJMRV9XRUJfU09DS0VUUykgJChFTkFCTEVfV0VCX1RJTUlORykgJChFTkFCTEVf
V0VCVlRUX1JFR0lPTlMpICQoRU5BQkxFX1hIUl9USU1FT1VUKSAkKEVOQUJMRV9YU0xUKSAkKEVO
QUJMRV9GVExfSklUKSAkKEVOQUJMRV9KSVQpICQoRU5BQkxFX1NBVFVSQVRFRF9MQVlPVVRfQVJJ
VEhNRVRJQykgJChFTkFCTEVfVklERU9fUFJFU0VOVEFUSU9OX01PREUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257303</attachid>
            <date>2015-07-22 15:50:13 -0700</date>
            <delta_ts>2015-07-23 04:22:14 -0700</delta_ts>
            <desc>Work in progress. Change a lot of things.</desc>
            <filename>bug-146064-20150722154858.patch</filename>
            <type>text/plain</type>
            <size>145533</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg3MDIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
ZjU1YjcxMzAxYWE4MDk1YWE4M2MwNmRhM2RkZWM1MzNkNDVmZWU1Li5hYWIxMDExMzhhNzI2OTQ3
YzRlZjJlMGNhZDFiYzMzMmYzNTE1MmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNjYgQEAKKzIwMTUtMDctMjIgIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0Bn
bWFpbC5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBuYXRpdmVseSBzdXBwb3J0IFdlYkFzc2Vt
Ymx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYw
NjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQ
SS9KU1NjcmlwdFJlZi5jcHA6CisgICAgICAgICogQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmlu
ZXMueGNjb25maWc6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OnNvdXJjZUNvZGVGb3JUb29scyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6Q29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6
CisgICAgICAgIChKU0M6OmdlbmVyYXRlRnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAoSlND
OjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUp
OgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJl
bik6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAgKiBk
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjphdHRlbXB0VG9JbmxpbmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklURGlzYXNzZW1ibGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6SklURGlzYXNzZW1ibGVyOjpkdW1wKToKKyAgICAgICAgKiBq
aXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKEdsb2Jh
bE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoZnVuY3Rpb25Mb2FkV2ViQXNzZW1i
bHkpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6
TExJbnQ6OnNldFVwQ2FsbCk6CisgICAgICAgICogcGFyc2VyL1NvdXJjZUNvZGUuY3BwOgorICAg
ICAgICAoSlNDOjpTb3VyY2VDb2RlOjp0b1VURjgpOgorICAgICAgICAqIHBhcnNlci9Tb3VyY2VQ
cm92aWRlci5oOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyOjpjcmVh
dGUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyOjpkYXRhKToKKyAg
ICAgICAgKEpTQzo6V2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcjo6V2ViQXNzZW1ibHlTb3VyY2VQ
cm92aWRlcik6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6RXhlY3V0YWJsZUJhc2U6OmlzV2ViQXNzZW1ibHlGdW5jdGlvbik6CisgICAgICAgIChKU0M6
OlNjcmlwdEV4ZWN1dGFibGU6Om5ld0NvZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6OlNjcmlw
dEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb25JbXBsKToKKyAgICAgICAgKiBydW50aW1l
L0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUJhc2U6OmlzRXZhbEV4ZWN1
dGFibGUpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6aXNGdW5jdGlvbkV4ZWN1dGFi
bGUpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6aXNQcm9ncmFtRXhlY3V0YWJsZSk6
CisgICAgICAgICogd2FzbS9XYXNtQ29kZUdlbmVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6V2FzbTo6Z2V0SW50ZXJuYWxGdW5jdGlvbik6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVH
ZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlR2VuZXJh
dG9yOjpzdGFydEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUdlbmVyYXRvcjo6
ZW5kRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlR2VuZXJhdG9yOjpzZXRMb2Nh
bFR5cGVzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUdlbmVyYXRvcjo6dW5ib3hBcmd1bWVu
dCk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVHZW5lcmF0b3I6OnNldExvY2FsWmVyb0kzMik6
CisgICAgICAgIChKU0M6Oldhc206OkNvZGVHZW5lcmF0b3I6OmFkZEkzMik6CisgICAgICAgIChK
U0M6Oldhc206OkNvZGVHZW5lcmF0b3I6Om11bEkzMik6CisgICAgICAgIChKU0M6Oldhc206OkNv
ZGVHZW5lcmF0b3I6OnJlZ0kzMik6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVHZW5lcmF0b3I6
OnJlZ0Y2NCk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVHZW5lcmF0b3I6OnNldExvY2FsKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6Q29kZUdlbmVyYXRvcjo6Z2V0TG9jYWxJMzIpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpDb2RlR2VuZXJhdG9yOjpjYWxsSW50ZXJuYWwpOgorICAgICAgICAoSlND
OjpXYXNtOjpDb2RlR2VuZXJhdG9yOjpyZXR1cm5JMzIpOgorICAgICAgICAoSlNDOjpXYXNtOjpD
b2RlR2VuZXJhdG9yOjplbWl0SnVtcCk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVHZW5lcmF0
b3I6OmJyYW5jaFRlc3RJMzIpOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlR2VuZXJhdG9yOjps
aW5rSnVtcCk6CisgICAgICAgIChKU0M6Oldhc206OkNvZGVHZW5lcmF0b3I6OmppdENvZGUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpDb2RlR2VuZXJhdG9yOjphbGxvY2F0ZVNwYWNlT25TdGFjayk6
CisgICAgICAgIChKU0M6Oldhc206OkNvZGVHZW5lcmF0b3I6OmRlYWxsb2NhdGVTcGFjZU9uU3Rh
Y2spOgorICAgICAgICAoSlNDOjpXYXNtOjpDb2RlR2VuZXJhdG9yOjpsb2NhbEFkZHJlc3MpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpDb2RlR2VuZXJhdG9yOjp0ZW1wb3JhcnlBZGRyZXNzKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6Q29kZUdlbmVyYXRvcjo6ZW1pdE5ha2VkQ2FsbCk6CisgICAgICAg
ICogd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2Fz
bTo6RnVuY3Rpb25QYXJzZXI6OmNoZWNrU3ludGF4QW5kQ2FsY3VsYXRlU291cmNlUmFuZ2UpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjo6Z2VuZXJhdGVDb2RlKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI6OnBhcnNlRnVuY3Rpb24pOgorICAgICAgICAo
SlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjo6cGFyc2VTaWduYXR1cmUpOgorICAgICAgICAoSlND
OjpXYXNtOjpGdW5jdGlvblBhcnNlcjo6cGFyc2VWYXJzKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
RnVuY3Rpb25QYXJzZXI6OnBhcnNlU3RtdCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9u
UGFyc2VyOjpwYXJzZVNldExvY2FsU3RtdCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9u
UGFyc2VyOjpwYXJzZVJldHVyblN0bXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBh
cnNlcjo6cGFyc2VTdG10TGlzdCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2Vy
OjpwYXJzZUJsb2NrU3RtdCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyOjpw
YXJzZUlmU3RtdCk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyOjpwYXJzZUlm
RWxzZVN0bXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjo6cGFyc2VFeHBy
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI6OnBhcnNlRXhwckkzMik6Cisg
ICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyOjpwYXJzZUxpdEltbSk6CisgICAgICAg
IChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyOjpwYXJzZUdldExvY2FsKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI6OnBhcnNlQ2FsbEludGVybmFsKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI6OnBhcnNlQmluYXJ5T3BJMzIpOgorICAgICAgICAoSlND
OjpXYXNtOjpGdW5jdGlvblBhcnNlcjo6bG9nRXJyb3IpOgorICAgICAgICAqIHdhc20vV2FzbUZ1
bmN0aW9uUGFyc2VyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNl
cjo6RnVuY3Rpb25QYXJzZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvblBhcnNlcjo6
cmVhZGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI6OnNldEVycm9yTWVz
c2FnZSk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyOjpoYXNFcnJvcik6Cisg
ICAgICAgICogd2FzbS9XYXNtTW9kdWxlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206
Ok1vZHVsZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OmZ1
bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjphcnJheUJ1ZmZlckRhdGEpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlND
OjpXYXNtOjpNb2R1bGU6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6Oldhc206
Ok1vZHVsZTo6cHV0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpkZWZpbmVPd25Qcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6ZGVsZXRlUHJvcGVydHkpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6Cisg
ICAgICAgICogd2FzbS9XYXNtTW9kdWxlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpN
b2R1bGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZTo6Y3JlYXRlU3RydWN0
dXJlKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlOjpmdW5jdGlvbkltcG9ydE5hbWUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGU6Ok1vZHVsZSk6CisgICAgICAgICogd2FzbS9XYXNt
TW9kdWxlUGFyc2VyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNl
cjo6cGFyc2UpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlQ29uc3Rh
bnRQb29sU2VjdGlvbik6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VT
aWduYXR1cmVTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJz
ZUZ1bmN0aW9uSW1wb3J0U2VjdGlvbik6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNl
cjo6cGFyc2VHbG9iYWxTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2Vy
OjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uUG9pbnRlclRhYmxlcyk6CisgICAgICAgIChKU0M6
Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb25TZWN0aW9uKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydFNlY3Rpb24pOgorICAg
ICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6Y29tcGlsZSk6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxl
UGFyc2VyLmg6IEFkZGVkLgorICAgICAgICAqIHdhc20vV2FzbU9wY29kZXMuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6Oldhc206Om9wZXJhdG9yfCApOgorICAgICAgICAoSlNDOjpXYXNtOjpvcGVy
YXRvciYpOgorICAgICAgICAoSlNDOjpXYXNtOjp1bnBhY2tPcFdpdGhJbW0pOgorICAgICAgICAo
SlNDOjpXYXNtOjpTaWduYXR1cmU6OlNpZ25hdHVyZSk6CisgICAgICAgICogd2FzbS9XYXNtUmVh
ZGVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OlJlYWRlcik6CisgICAg
ICAgIChKU0M6Oldhc206OlJlYWRlcjo6Y3Vyc29yKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVh
ZGVyOjpzZXRDdXJzb3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OnN0bXQpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OnN3aXRjaENhc2UpOgorICAgICAgICAoSlNDOjpXYXNt
OjpSZWFkZXI6OnZvaWRFeHByKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UmVhZGVyOjpleHBvcnRG
b3JtYXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OnR5cGUpOgorICAgICAgICAoSlND
OjpXYXNtOjpSZWFkZXI6OnJldHVyblR5cGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6
OnNpbmdsZUNoYXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6OnU4KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6UmVhZGVyOjpmaXhlZFdpZHRoPHVpbnQzMl90Pik6CisgICAgICAgIChKU0M6
Oldhc206OlJlYWRlcjo6Zml4ZWRXaWR0aDxmbG9hdD4pOgorICAgICAgICAoSlNDOjpXYXNtOjpS
ZWFkZXI6OmZpeGVkV2lkdGg8ZG91YmxlPik6CisgICAgICAgIChKU0M6Oldhc206OlJlYWRlcjo6
Y29kZSk6CisgICAgICAgIChKU0M6Oldhc206OlJlYWRlcjo6aW1tVTMyKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6UmVhZGVyOjppbW1TMzIpOgorICAgICAgICAoSlNDOjpXYXNtOjpSZWFkZXI6Omlm
STMyTGl0KToKKyAgICAgICAgKiB3YXNtL1dhc21TeW50YXhDaGVja2VyLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpXYXNtOjpTeW50YXhDaGVja2VyOjpTeW50YXhDaGVja2VyKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6U3ludGF4Q2hlY2tlcjo6c3RhcnRGdW5jdGlvbik6CisgICAgICAgIChKU0M6
Oldhc206OlN5bnRheENoZWNrZXI6OmVuZEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
U3ludGF4Q2hlY2tlcjo6c2V0TG9jYWxUeXBlcyk6CisgICAgICAgIChKU0M6Oldhc206OlN5bnRh
eENoZWNrZXI6OnVuYm94QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpTeW50YXhDaGVj
a2VyOjpzZXRMb2NhbFplcm9JMzIpOgorICAgICAgICAoSlNDOjpXYXNtOjpTeW50YXhDaGVja2Vy
OjphZGRJMzIpOgorICAgICAgICAoSlNDOjpXYXNtOjpTeW50YXhDaGVja2VyOjptdWxJMzIpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpTeW50YXhDaGVja2VyOjpyZWdJMzIpOgorICAgICAgICAoSlND
OjpXYXNtOjpTeW50YXhDaGVja2VyOjpyZWdGNjQpOgorICAgICAgICAoSlNDOjpXYXNtOjpTeW50
YXhDaGVja2VyOjpzZXRMb2NhbCk6CisgICAgICAgIChKU0M6Oldhc206OlN5bnRheENoZWNrZXI6
OmdldExvY2FsSTMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3ludGF4Q2hlY2tlcjo6Y2FsbElu
dGVybmFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6U3ludGF4Q2hlY2tlcjo6cmV0dXJuSTMyKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6U3ludGF4Q2hlY2tlcjo6ZW1pdEp1bXApOgorICAgICAgICAo
SlNDOjpXYXNtOjpTeW50YXhDaGVja2VyOjpicmFuY2hUZXN0STMyKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6U3ludGF4Q2hlY2tlcjo6bGlua0p1bXApOgorCiAyMDE1LTA3LTIwICBQZXIgQXJuZSBW
b2xsYW4gIDxwZWF2b0BvdXRsb29rLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIGRlYnVnIGJ1
aWxkIGZpeCBhZnRlciByMTg3MDIwLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDg3NjQ1NTM4NDU1YzMwY2RlMTk4
ZTAwMWQyMWM3NmMxOTM5MmIwOWMuLmFlOWI0OTE0NDk4ODE0NjZiZjQ3MWQwNTI1Njg5NWM4OGRh
NzM2NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNS0wNy0yMiAgU3Vrb2xzYWsg
U2Frc2h1d29uZyAgPHN1a29sc2FrQGdtYWlsLmNvbT4KKworICAgICAgICBKU0Mgc2hvdWxkIG5h
dGl2ZWx5IHN1cHBvcnQgV2ViQXNzZW1ibHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0NjA2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogQ29u
ZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWc6CisKIDIwMTUtMDctMjAgIFBlciBB
cm5lIFZvbGxhbiAgPHBlYXZvQG91dGxvb2suY29tPgogCiAgICAgICAgIEphdmFTY3JpcHRDb3Jl
IHBlcmZvcm1hbmNlIGlzIHZlcnkgYmFkIG9uIFdpbmRvd3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCAx
ZmIxNzI1YTNmNGEyNDI2NjhiMGU1MGM0MjgwNzIwM2M5OTRlMjMwLi4wOWM0MjYzZDRlY2YwOTc5
OWJiZWMzNTRkMzVkNWM1MzlhYzZlMTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIg
QEAKKzIwMTUtMDctMjIgIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0BnbWFpbC5jb20+
CisKKyAgICAgICAgSlNDIHNob3VsZCBuYXRpdmVseSBzdXBwb3J0IFdlYkFzc2VtYmx5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYwNjQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENvbmZpZ3VyYXRp
b25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOgorCiAyMDE1LTA3LTE4ICBHeXV5b3VuZyBLaW0g
IDxneXV5b3VuZy5raW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZWR1Y2UgUGFzc1JlZlB0ciBp
biBXZWJLaXQyIC0gMwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDZjNTA2YTA5MzhmZWI0MzI1ZjFmNTg3ZDQ5OWJm
NTY0Y2MwMGMyNWYuLmRjNmZiNzEzZGRjMjhkODU3OTgzMGY3ZGFkNjgzZWVkYjRjZmFjNGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxNS0wNy0yMiAgU3Vrb2xzYWsgU2Frc2h1d29u
ZyAgPHN1a29sc2FrQGdtYWlsLmNvbT4KKworICAgICAgICBKU0Mgc2hvdWxkIG5hdGl2ZWx5IHN1
cHBvcnQgV2ViQXNzZW1ibHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0NjA2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWc6CisKIDIw
MTUtMDctMTkgIE1pY2hhZWwgQ2F0YW56YXJvICA8bWNhdGFuemFyb0BpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIHBsYWNhdGUgLVdtaXNtYXRjaGVkLXRhZ3MgYWZ0ZXIgcjE4NzAx
MQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdFJlZi5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0UmVmLmNwcAppbmRleCBjMjBhZjZk
ZjJmMGY5YzJhYjk0ZTg2YjcxZjEzOTMxMTJkYjgxMTNlLi5iN2NmNzRkMDc4NzIxOGUxODNkODBi
OWIxYzk0ZTkxNjJlNDdkNTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTU2NyaXB0UmVmLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0
UmVmLmNwcApAQCAtNDYsNiArNDYsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gV1RGOjph
ZG9wdFJlZigqbmV3IE9wYXF1ZUpTU2NyaXB0KHZtLCB1cmwsIHN0YXJ0aW5nTGluZU51bWJlciwg
c291cmNlKSk7CiAgICAgfQogCisjaWYgRU5BQkxFKFdBU00pCisgICAgdmlydHVhbCBib29sIGlz
U3RyaW5nU291cmNlKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyNlbmRpZgorCiAgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIHNvdXJjZSgpIGNv
bnN0IG92ZXJyaWRlCiAgICAgewogICAgICAgICByZXR1cm4gbV9zb3VyY2U7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNj
b25maWcgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmlu
ZXMueGNjb25maWcKaW5kZXggZmU1NmJjMGIxYmZkNjBjNTFhMDU3ZTk1NTRkMTllZDQ4NzRmNGY0
Mi4uOTg5MTE0NjUwZGE0Mjc2M2IwZWFmY2Q4ODkzYzNlNGNiMmQ2MTc5ZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29u
ZmlnCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVm
aW5lcy54Y2NvbmZpZwpAQCAtMTk5LDYgKzE5OSw3IEBAIEVOQUJMRV9WSURFT19QUkVTRU5UQVRJ
T05fTU9ERVtzZGs9aXBob25lKl0gPSBFTkFCTEVfVklERU9fUFJFU0VOVEFUSU9OX01PREU7CiBF
TkFCTEVfVklERU9fVFJBQ0sgPSBFTkFCTEVfVklERU9fVFJBQ0s7CiBFTkFCTEVfREFUQUNVRV9W
QUxVRSA9IEVOQUJMRV9EQVRBQ1VFX1ZBTFVFOwogRU5BQkxFX1ZJRVdfTU9ERV9DU1NfTUVESUEg
PSA7CitFTkFCTEVfV0FTTSA9IDsKIEVOQUJMRV9XRUJHTCA9IEVOQUJMRV9XRUJHTDsKIEVOQUJM
RV9XRUJHTDIgPSA7CiBFTkFCTEVfV0VCX0FVRElPID0gRU5BQkxFX1dFQl9BVURJTzsKQEAgLTIy
OCw0ICsyMjksNCBAQCBFTkFCTEVfRlRMX0pJVFtzZGs9aXBob25lb3MqXSA9IEVOQUJMRV9GVExf
SklUOwogCiBFTkFCTEVfU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDID0gRU5BQkxFX1NBVFVS
QVRFRF9MQVlPVVRfQVJJVEhNRVRJQzsKIAotRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0Rf
VFJBTlNGT1JNUykgJChFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAkKEVOQUJMRV9BQ0NF
TEVSQVRFRF9PVkVSRkxPV19TQ1JPTExJTkcpICQoRU5BQkxFX0FWRl9DQVBUSU9OUykgJChFTkFC
TEVfQVRUQUNITUVOVF9FTEVNRU5UKSAkKEVOQUJMRV9DQUNIRV9QQVJUSVRJT05JTkcpICQoRU5B
QkxFX0NBTlZBU19QQVRIKSAkKEVOQUJMRV9DQU5WQVNfUFJPWFkpICQoRU5BQkxFX0NIQU5ORUxf
TUVTU0FHSU5HKSAkKEVOQUJMRV9FUzZfQVJST1dGVU5DVElPTl9TWU5UQVgpICQoRU5BQkxFX0VT
Nl9DTEFTU19TWU5UQVgpICQoRU5BQkxFX0VTNl9URU1QTEFURV9MSVRFUkFMX1NZTlRBWCkgJChF
TkFCTEVfQ09OVEVOVF9GSUxURVJJTkcpICQoRU5BQkxFX0NTUF9ORVhUKSAkKEVOQUJMRV9DU1Nf
QU5JTUFUSU9OU19MRVZFTF8yKSAkKEVOQUJMRV9DU1NfQk9YX0RFQ09SQVRJT05fQlJFQUspICQo
RU5BQkxFX0NTU19DT01QT1NJVElORykgJChFTkFCTEVfQ1NTX0RFVklDRV9BREFQVEFUSU9OKSAk
KEVOQUJMRV9DU1NfR1JJRF9MQVlPVVQpICQoRU5BQkxFX0NTU19JTUFHRV9PUklFTlRBVElPTikg
JChFTkFCTEVfQ1NTX0lNQUdFX1JFU09MVVRJT04pICQoRU5BQkxFX0NTU19SRUdJT05TKSAkKEVO
QUJMRV9DU1NfU0VMRUNUT1JTX0xFVkVMNCkgJChFTkFCTEVfQ1NTX1NIQVBFUykgJChFTkFCTEVf
Q1NTM19URVhUKSAkKEVOQUJMRV9DU1MzX1RFWFRfTElORV9CUkVBSykgJChFTkFCTEVfQ1VSU09S
X1ZJU0lCSUxJVFkpICQoRU5BQkxFX0NVU1RPTV9TQ0hFTUVfSEFORExFUikgJChFTkFCTEVfREFT
SEJPQVJEX1NVUFBPUlQpICQoRU5BQkxFX0RBVEFMSVNUX0VMRU1FTlQpICQoRU5BQkxFX0RBVEFf
VFJBTlNGRVJfSVRFTVMpICQoRU5BQkxFX0RFVEFJTFNfRUxFTUVOVCkgJChFTkFCTEVfREVWSUNF
X09SSUVOVEFUSU9OKSAkKEVOQUJMRV9ET000X0VWRU5UU19DT05TVFJVQ1RPUikgJChFTkFCTEVf
RU5DUllQVEVEX01FRElBKSAkKEVOQUJMRV9FTkNSWVBURURfTUVESUFfVjIpICQoRU5BQkxFX0ZJ
TFRFUlNfTEVWRUxfMikgJChFTkFCTEVfRk9OVF9MT0FEX0VWRU5UUykgJChFTkFCTEVfRlVMTFND
UkVFTl9BUEkpICQoRU5BQkxFX0dBTUVQQUQpICQoRU5BQkxFX0dBTUVQQURfREVQUkVDQVRFRCkg
JChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxFX0hJRERFTl9QQUdFX0RPTV9USU1FUl9USFJP
VFRMSU5HKSAkKEVOQUJMRV9JQ09OREFUQUJBU0UpICQoRU5BQkxFX1NFUlZJQ0VfQ09OVFJPTFMp
ICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0VfSU5f
V09SS0VSUykgJChFTkFCTEVfSU5ESUVfVUkpICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IpICQo
RU5BQkxFX0lOUFVUX1RZUEVfQ09MT1JfUE9QT1ZFUikgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRF
KSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FX0lOQ09NUExFVEUpICQoRU5BQkxFX0lOUFVU
X1RZUEVfREFURVRJTUVMT0NBTCkgJChFTkFCTEVfSU5QVVRfVFlQRV9NT05USCkgJChFTkFCTEVf
SU5QVVRfVFlQRV9USU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1dFRUspICQoRU5BQkxFX1dJUkVM
RVNTX1BMQVlCQUNLX1RBUkdFVCkgJChFTkFCTEVfSU5UTCkgJChFTkFCTEVfSU9TX0dFU1RVUkVf
RVZFTlRTKSAkKEVOQUJMRV9JT1NfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9JT1NfVE9VQ0hf
RVZFTlRTKSAkKEVOQUJMRV9MRUdBQ1lfQ1NTX1ZFTkRPUl9QUkVGSVhFUykgJChFTkFCTEVfTEVH
QUNZX05PVElGSUNBVElPTlMpICQoRU5BQkxFX0xFR0FDWV9WRU5ET1JfUFJFRklYRVMpICQoRU5B
QkxFX0xFR0FDWV9XRUJfQVVESU8pICQoRU5BQkxFX0xFVFRFUlBSRVNTKSAkKEVOQUJMRV9MSU5L
X1BSRUZFVENIKSAkKEVOQUJMRV9NQVRITUwpICQoRU5BQkxFX01FRElBX0NPTlRST0xTX1NDUklQ
VCkgJChFTkFCTEVfTUVESUFfU0VTU0lPTikgJChFTkFCTEVfTUVESUFfU09VUkNFKSAkKEVOQUJM
RV9NRURJQV9TVEFUSVNUSUNTKSAkKEVOQUJMRV9NRURJQV9TVFJFQU0pICQoRU5BQkxFX01FVEVS
X0VMRU1FTlQpICQoRU5BQkxFX01IVE1MKSAkKEVOQUJMRV9NT1VTRV9DVVJTT1JfU0NBTEUpICQo
RU5BQkxFX05BVklHQVRPUl9DT05URU5UX1VUSUxTKSAkKEVOQUJMRV9OQVZJR0FUT1JfSFdDT05D
VVJSRU5DWSkgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfUERGS0lUX1BMVUdJTikg
JChFTkFCTEVfUElDVFVSRV9TSVpFUykgJChFTkFCTEVfUE9JTlRFUl9MT0NLKSAkKEVOQUJMRV9Q
Uk9NSVNFUykgJChFTkFCTEVfUFJPWElNSVRZX0VWRU5UUykgJChFTkFCTEVfUFVCTElDX1NVRkZJ
WF9MSVNUKSAkKEVOQUJMRV9RVU9UQSkgJChFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUp
ICQoRU5BQkxFX1JFUVVFU1RfQVVUT0NPTVBMRVRFKSAkKEVOQUJMRV9SRU1PVEVfSU5TUEVDVE9S
KSAkKEVOQUJMRV9SRVNPTFVUSU9OX01FRElBX1FVRVJZKSAkKEVOQUJMRV9SVUJCRVJfQkFORElO
RykgJChFTkFCTEVfQ1NTX1NDUk9MTF9TTkFQKSAkKEVOQUJMRV9TUEVFQ0hfU1lOVEhFU0lTKSAk
KEVOQUJMRV9TVFJFQU1TX0FQSSkgJChFTkFCTEVfU1VCVExFX0NSWVBUTykgJChFTkFCTEVfU1ZH
X0ZPTlRTKSAkKEVOQUJMRV9TVkdfT1RGX0NPTlZFUlRFUikgJChFTkFCTEVfVEVMRVBIT05FX05V
TUJFUl9ERVRFQ1RJT04pICQoRU5BQkxFX1RFTVBMQVRFX0VMRU1FTlQpICQoRU5BQkxFX1RFWFRf
QVVUT1NJWklORykgJChFTkFCTEVfVE9VQ0hfRVZFTlRTKSAkKEVOQUJMRV9UT1VDSF9JQ09OX0xP
QURJTkcpICQoRU5BQkxFX0NTU19UUkFJTElOR19XT1JEKSAkKEVOQUJMRV9VU0VSU0VMRUNUX0FM
TCkgJChFTkFCTEVfVklERU8pICQoRU5BQkxFX1ZJREVPX1RSQUNLKSAkKEVOQUJMRV9EQVRBQ1VF
X1ZBTFVFKSAkKEVOQUJMRV9WSUVXX01PREVfQ1NTX01FRElBKSAkKEVOQUJMRV9XRUJHTCkgJChF
TkFCTEVfV0VCR0wyKSAkKEVOQUJMRV9XRUJfQVVESU8pICQoRU5BQkxFX1dFQl9SRVBMQVkpICQo
RU5BQkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XRUJfVElNSU5HKSAkKEVOQUJMRV9XRUJWVFRf
UkVHSU9OUykgJChFTkFCTEVfWEhSX1RJTUVPVVQpICQoRU5BQkxFX1hTTFQpICQoRU5BQkxFX0ZU
TF9KSVQpICQoRU5BQkxFX0pJVCkgJChFTkFCTEVfU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElD
KSAkKEVOQUJMRV9WSURFT19QUkVTRU5UQVRJT05fTU9ERSk7CitGRUFUVVJFX0RFRklORVMgPSAk
KEVOQUJMRV8zRF9UUkFOU0ZPUk1TKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICQo
RU5BQkxFX0FDQ0VMRVJBVEVEX09WRVJGTE9XX1NDUk9MTElORykgJChFTkFCTEVfQVZGX0NBUFRJ
T05TKSAkKEVOQUJMRV9BVFRBQ0hNRU5UX0VMRU1FTlQpICQoRU5BQkxFX0NBQ0hFX1BBUlRJVElP
TklORykgJChFTkFCTEVfQ0FOVkFTX1BBVEgpICQoRU5BQkxFX0NBTlZBU19QUk9YWSkgJChFTkFC
TEVfQ0hBTk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0VTNl9BUlJPV0ZVTkNUSU9OX1NZTlRBWCkg
JChFTkFCTEVfRVM2X0NMQVNTX1NZTlRBWCkgJChFTkFCTEVfRVM2X1RFTVBMQVRFX0xJVEVSQUxf
U1lOVEFYKSAkKEVOQUJMRV9DT05URU5UX0ZJTFRFUklORykgJChFTkFCTEVfQ1NQX05FWFQpICQo
RU5BQkxFX0NTU19BTklNQVRJT05TX0xFVkVMXzIpICQoRU5BQkxFX0NTU19CT1hfREVDT1JBVElP
Tl9CUkVBSykgJChFTkFCTEVfQ1NTX0NPTVBPU0lUSU5HKSAkKEVOQUJMRV9DU1NfREVWSUNFX0FE
QVBUQVRJT04pICQoRU5BQkxFX0NTU19HUklEX0xBWU9VVCkgJChFTkFCTEVfQ1NTX0lNQUdFX09S
SUVOVEFUSU9OKSAkKEVOQUJMRV9DU1NfSU1BR0VfUkVTT0xVVElPTikgJChFTkFCTEVfQ1NTX1JF
R0lPTlMpICQoRU5BQkxFX0NTU19TRUxFQ1RPUlNfTEVWRUw0KSAkKEVOQUJMRV9DU1NfU0hBUEVT
KSAkKEVOQUJMRV9DU1MzX1RFWFQpICQoRU5BQkxFX0NTUzNfVEVYVF9MSU5FX0JSRUFLKSAkKEVO
QUJMRV9DVVJTT1JfVklTSUJJTElUWSkgJChFTkFCTEVfQ1VTVE9NX1NDSEVNRV9IQU5ETEVSKSAk
KEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVCkgJChFTkFCTEVfREFUQUxJU1RfRUxFTUVOVCkgJChF
TkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUykgJChFTkFCTEVfREVUQUlMU19FTEVNRU5UKSAkKEVO
QUJMRV9ERVZJQ0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0RPTTRfRVZFTlRTX0NPTlNUUlVDVE9S
KSAkKEVOQUJMRV9FTkNSWVBURURfTUVESUEpICQoRU5BQkxFX0VOQ1JZUFRFRF9NRURJQV9WMikg
JChFTkFCTEVfRklMVEVSU19MRVZFTF8yKSAkKEVOQUJMRV9GT05UX0xPQURfRVZFTlRTKSAkKEVO
QUJMRV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkgJChFTkFCTEVfR0FNRVBBRF9E
RVBSRUNBVEVEKSAkKEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVfSElEREVOX1BBR0VfRE9N
X1RJTUVSX1RIUk9UVExJTkcpICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfU0VSVklD
RV9DT05UUk9MUykgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkgJChFTkFCTEVfSU5ERVhFRF9E
QVRBQkFTRV9JTl9XT1JLRVJTKSAkKEVOQUJMRV9JTkRJRV9VSSkgJChFTkFCTEVfSU5QVVRfVFlQ
RV9DT0xPUikgJChFTkFCTEVfSU5QVVRfVFlQRV9DT0xPUl9QT1BPVkVSKSAkKEVOQUJMRV9JTlBV
VF9UWVBFX0RBVEUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVfSU5DT01QTEVURSkgJChF
TkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FMKSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRI
KSAkKEVOQUJMRV9JTlBVVF9UWVBFX1RJTUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChF
TkFCTEVfV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAkKEVOQUJMRV9JTlRMKSAkKEVOQUJMRV9J
T1NfR0VTVFVSRV9FVkVOVFMpICQoRU5BQkxFX0lPU19URVhUX0FVVE9TSVpJTkcpICQoRU5BQkxF
X0lPU19UT1VDSF9FVkVOVFMpICQoRU5BQkxFX0xFR0FDWV9DU1NfVkVORE9SX1BSRUZJWEVTKSAk
KEVOQUJMRV9MRUdBQ1lfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfTEVHQUNZX1ZFTkRPUl9QUkVG
SVhFUykgJChFTkFCTEVfTEVHQUNZX1dFQl9BVURJTykgJChFTkFCTEVfTEVUVEVSUFJFU1MpICQo
RU5BQkxFX0xJTktfUFJFRkVUQ0gpICQoRU5BQkxFX01BVEhNTCkgJChFTkFCTEVfTUVESUFfQ09O
VFJPTFNfU0NSSVBUKSAkKEVOQUJMRV9NRURJQV9TRVNTSU9OKSAkKEVOQUJMRV9NRURJQV9TT1VS
Q0UpICQoRU5BQkxFX01FRElBX1NUQVRJU1RJQ1MpICQoRU5BQkxFX01FRElBX1NUUkVBTSkgJChF
TkFCTEVfTUVURVJfRUxFTUVOVCkgJChFTkFCTEVfTUhUTUwpICQoRU5BQkxFX01PVVNFX0NVUlNP
Ul9TQ0FMRSkgJChFTkFCTEVfTkFWSUdBVE9SX0NPTlRFTlRfVVRJTFMpICQoRU5BQkxFX05BVklH
QVRPUl9IV0NPTkNVUlJFTkNZKSAkKEVOQUJMRV9OT1RJRklDQVRJT05TKSAkKEVOQUJMRV9QREZL
SVRfUExVR0lOKSAkKEVOQUJMRV9QSUNUVVJFX1NJWkVTKSAkKEVOQUJMRV9QT0lOVEVSX0xPQ0sp
ICQoRU5BQkxFX1BST01JU0VTKSAkKEVOQUJMRV9QUk9YSU1JVFlfRVZFTlRTKSAkKEVOQUJMRV9Q
VUJMSUNfU1VGRklYX0xJU1QpICQoRU5BQkxFX1FVT1RBKSAkKEVOQUJMRV9SRVFVRVNUX0FOSU1B
VElPTl9GUkFNRSkgJChFTkFCTEVfUkVRVUVTVF9BVVRPQ09NUExFVEUpICQoRU5BQkxFX1JFTU9U
RV9JTlNQRUNUT1IpICQoRU5BQkxFX1JFU09MVVRJT05fTUVESUFfUVVFUlkpICQoRU5BQkxFX1JV
QkJFUl9CQU5ESU5HKSAkKEVOQUJMRV9DU1NfU0NST0xMX1NOQVApICQoRU5BQkxFX1NQRUVDSF9T
WU5USEVTSVMpICQoRU5BQkxFX1NUUkVBTVNfQVBJKSAkKEVOQUJMRV9TVUJUTEVfQ1JZUFRPKSAk
KEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1NWR19PVEZfQ09OVkVSVEVSKSAkKEVOQUJMRV9U
RUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJChFTkFCTEVfVEVNUExBVEVfRUxFTUVOVCkgJChF
TkFCTEVfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9UT1VDSF9FVkVOVFMpICQoRU5BQkxFX1RP
VUNIX0lDT05fTE9BRElORykgJChFTkFCTEVfQ1NTX1RSQUlMSU5HX1dPUkQpICQoRU5BQkxFX1VT
RVJTRUxFQ1RfQUxMKSAkKEVOQUJMRV9WSURFTykgJChFTkFCTEVfVklERU9fVFJBQ0spICQoRU5B
QkxFX0RBVEFDVUVfVkFMVUUpICQoRU5BQkxFX1ZJRVdfTU9ERV9DU1NfTUVESUEpICQoRU5BQkxF
X1dBU00pICQoRU5BQkxFX1dFQkdMKSAkKEVOQUJMRV9XRUJHTDIpICQoRU5BQkxFX1dFQl9BVURJ
TykgJChFTkFCTEVfV0VCX1JFUExBWSkgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dF
Ql9USU1JTkcpICQoRU5BQkxFX1dFQlZUVF9SRUdJT05TKSAkKEVOQUJMRV9YSFJfVElNRU9VVCkg
JChFTkFCTEVfWFNMVCkgJChFTkFCTEVfRlRMX0pJVCkgJChFTkFCTEVfSklUKSAkKEVOQUJMRV9T
QVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpICQoRU5BQkxFX1ZJREVPX1BSRVNFTlRBVElPTl9N
T0RFKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMDhmMGQwZjRjN2YyNGE3ZWVl
ZTQ2Y2JiNGE0NTlkZTgwNGUzNmI0MC4uMWVlNDBlOGI4OWU1NzAxY2ZkMDNjYjU4OGZkOWZiMjZm
MTQ4YzM4NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMjUsNiArMTAyNSwx
NiBAQAogCQk3MEVDQTYwOTFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MDQx
QUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUVFMEJGRjFCNEFGQjg1MDAwMzg1
QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OUVFMEJGRDFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVF
bnZpcm9ubWVudC5jcHAgKi87IH07CiAJCTc5RUUwQzAwMUI0QUZCODUwMDAzODVDOSAvKiBWYXJp
YWJsZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OUVFMEJGRTFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCMEU5
NzJFMUI1RDI1NDYwMEEyOTMwMiAvKiBXYXNtQ29kZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IwRTk3MjQxQjVEMjUzRTAwQTI5MzAy
IC8qIFdhc21Db2RlR2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJN0IwRTk3MkYxQjVEMjU0NjAwQTI5MzAyIC8qIFdhc21Nb2R1bGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IwRTk3
MjUxQjVEMjUzRTAwQTI5MzAyIC8qIFdhc21Nb2R1bGUuY3BwICovOyB9OworCQk3QjBFOTczMDFC
NUQyNTQ2MDBBMjkzMDIgLyogV2FzbU1vZHVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0IwRTk3MjYxQjVEMjUzRTAwQTI5MzAyIC8qIFdhc21Nb2R1
bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3
QjBFOTczMTFCNUQyNTQ2MDBBMjkzMDIgLyogV2FzbU1vZHVsZVBhcnNlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjBFOTcyNzFCNUQyNTNFMDBB
MjkzMDIgLyogV2FzbU1vZHVsZVBhcnNlci5jcHAgKi87IH07CisJCTdCMEU5NzMyMUI1RDI1NDYw
MEEyOTMwMiAvKiBXYXNtTW9kdWxlUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QjBFOTcyODFCNUQyNTNFMDBBMjkzMDIgLyogV2FzbU1vZHVs
ZVBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTdCMEU5NzMzMUI1RDI1NDYwMEEyOTMwMiAvKiBXYXNtT3Bjb2Rlcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IwRTk3MjkxQjVEMjUzRTAwQTI5
MzAyIC8qIFdhc21PcGNvZGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJN0IwRTk3MzQxQjVEMjU0NjAwQTI5MzAyIC8qIFdhc21GdW5jdGlvblBh
cnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
QjBFOTcyQTFCNUQyNTNFMDBBMjkzMDIgLyogV2FzbUZ1bmN0aW9uUGFyc2VyLmNwcCAqLzsgfTsK
KwkJN0IwRTk3MzUxQjVEMjU0NjAwQTI5MzAyIC8qIFdhc21GdW5jdGlvblBhcnNlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IwRTk3MkIxQjVEMjUz
RTAwQTI5MzAyIC8qIFdhc21GdW5jdGlvblBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCMEU5NzM2MUI1RDI1NDYwMEEyOTMwMiAvKiBX
YXNtUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QjBFOTcyQzFCNUQyNTNFMDBBMjkzMDIgLyogV2FzbVJlYWRlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCMEU5NzM3MUI1RDI1NDYwMEEy
OTMwMiAvKiBXYXNtU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0IwRTk3MkQxQjVEMjUzRTAwQTI5MzAyIC8qIFdhc21TeW50YXhD
aGVja2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJN0MwMDhDREExODcxMjRCQjAwOTU1QzI0IC8qIEpTUHJvbWlzZURlZmVycmVkLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDA4Q0Q4MTg3MTI0
QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5jcHAgKi87IH07CiAJCTdDMDA4Q0RCMTg3
MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwMDhDRDkxODcxMjRCQjAwOTU1QzI0IC8qIEpT
UHJvbWlzZURlZmVycmVkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJN0MwMDhDRTcxODc2MzFCNjAwOTU1QzI0IC8qIE1pY3JvdGFzay5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwMDhDRTUxODc2MzFC
NjAwOTU1QzI0IC8qIE1pY3JvdGFzay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0yNzcwLDYgKzI3ODAsMTYgQEAKIAkJNzBFQ0E2MDQxQUZEQkVB
MjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeUtleS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3OUVFMEJGRDFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUVudmlyb25t
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlFRTBCRkUxQjRBRkI4NTAw
MDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVmFyaWFibGVFbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3QjBFOTcyNDFCNUQyNTNFMDBBMjkzMDIgLyogV2FzbUNvZGVHZW5lcmF0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2FzbUNvZGVHZW5lcmF0b3IuaDsgcGF0aCA9
IHdhc20vV2FzbUNvZGVHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
N0IwRTk3MjUxQjVEMjUzRTAwQTI5MzAyIC8qIFdhc21Nb2R1bGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2FzbU1vZHVsZS5jcHA7IHBhdGggPSB3YXNtL1dhc21N
b2R1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QjBFOTcyNjFCNUQyNTNF
MDBBMjkzMDIgLyogV2FzbU1vZHVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBXYXNtTW9kdWxlLmg7IHBhdGggPSB3YXNtL1dhc21Nb2R1bGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJN0IwRTk3MjcxQjVEMjUzRTAwQTI5MzAyIC8qIFdhc21Nb2R1bGVQYXJz
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2FzbU1vZHVsZVBh
cnNlci5jcHA7IHBhdGggPSB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3QjBFOTcyODFCNUQyNTNFMDBBMjkzMDIgLyogV2FzbU1vZHVsZVBh
cnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXYXNtTW9kdWxlUGFyc2Vy
Lmg7IHBhdGggPSB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJN0IwRTk3MjkxQjVEMjUzRTAwQTI5MzAyIC8qIFdhc21PcGNvZGVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdhc21PcGNvZGVzLmg7IHBhdGggPSB3YXNtL1dh
c21PcGNvZGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCMEU5NzJBMUI1RDI1
M0UwMEEyOTMwMiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gV2FzbUZ1bmN0aW9uUGFyc2VyLmNwcDsgcGF0aCA9IHdhc20vV2Fz
bUZ1bmN0aW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0IwRTk3
MkIxQjVEMjUzRTAwQTI5MzAyIC8qIFdhc21GdW5jdGlvblBhcnNlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBXYXNtRnVuY3Rpb25QYXJzZXIuaDsgcGF0aCA9IHdhc20vV2Fz
bUZ1bmN0aW9uUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCMEU5NzJD
MUI1RDI1M0UwMEEyOTMwMiAvKiBXYXNtUmVhZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdhc21SZWFkZXIuaDsgcGF0aCA9IHdhc20vV2FzbVJlYWRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3QjBFOTcyRDFCNUQyNTNFMDBBMjkzMDIgLyogV2FzbVN5
bnRheENoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2FzbVN5bnRh
eENoZWNrZXIuaDsgcGF0aCA9IHdhc20vV2FzbVN5bnRheENoZWNrZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0MwMDhDRDgxODcxMjRCQjAwOTU1QzI0IC8qIEpTUHJvbWlzZURl
ZmVycmVkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUHJvbWlz
ZURlZmVycmVkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MwMDhDRDkxODcx
MjRCQjAwOTU1QzI0IC8qIEpTUHJvbWlzZURlZmVycmVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTUHJvbWlzZURlZmVycmVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTdDMDA4Q0U1MTg3NjMxQjYwMDk1NUMyNCAvKiBNaWNyb3Rhc2suaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWljcm90YXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0zNjIxLDYgKzM2NDEsNyBAQAogCQkJCTk5RTQ1QTBDMThBMDFFOTMwMDI2RDg4
RiAvKiByZXBsYXkgKi8sCiAJCQkJOTMyRkMzQzIwODI0QkI3MDAwNUIzQzc1IC8qIFJlc291cmNl
cyAqLywKIAkJCQk3RUY2RTBCQjBFQjdBMUVDMDA3OUFGQUYgLyogcnVudGltZSAqLywKKwkJCQk3
QjBFOTcyMzFCNUQyNTI2MDBBMjkzMDIgLyogd2FzbSAqLywKIAkJCQkxNDEyMTEwMDBBNDg3NzI2
MDA0ODAyNTUgLyogdGVzdHMgKi8sCiAJCQkJODYwM0NFRjAxNEM3NTNFRjAwQUU1OUUzIC8qIHRv
b2xzICovLAogCQkJCTg2RUFDNDhDMEY5M0U4QjkwMDhFQzk0OCAvKiB5YXJyICovLApAQCAtNDI4
NSw2ICs0MzA2LDIzIEBACiAJCQlwYXRoID0gZGlzYXNzZW1ibGVyL0FSTXY3OwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJN0IwRTk3MjMxQjVEMjUyNjAwQTI5MzAyIC8qIHdh
c20gKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTdCMEU5
NzI0MUI1RDI1M0UwMEEyOTMwMiAvKiBXYXNtQ29kZUdlbmVyYXRvci5oICovLAorCQkJCTdCMEU5
NzJBMUI1RDI1M0UwMEEyOTMwMiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuY3BwICovLAorCQkJCTdC
MEU5NzJCMUI1RDI1M0UwMEEyOTMwMiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCAqLywKKwkJCQk3
QjBFOTcyNTFCNUQyNTNFMDBBMjkzMDIgLyogV2FzbU1vZHVsZS5jcHAgKi8sCisJCQkJN0IwRTk3
MjYxQjVEMjUzRTAwQTI5MzAyIC8qIFdhc21Nb2R1bGUuaCAqLywKKwkJCQk3QjBFOTcyNzFCNUQy
NTNFMDBBMjkzMDIgLyogV2FzbU1vZHVsZVBhcnNlci5jcHAgKi8sCisJCQkJN0IwRTk3MjgxQjVE
MjUzRTAwQTI5MzAyIC8qIFdhc21Nb2R1bGVQYXJzZXIuaCAqLywKKwkJCQk3QjBFOTcyOTFCNUQy
NTNFMDBBMjkzMDIgLyogV2FzbU9wY29kZXMuaCAqLywKKwkJCQk3QjBFOTcyQzFCNUQyNTNFMDBB
MjkzMDIgLyogV2FzbVJlYWRlci5oICovLAorCQkJCTdCMEU5NzJEMUI1RDI1M0UwMEEyOTMwMiAv
KiBXYXNtU3ludGF4Q2hlY2tlci5oICovLAorCQkJKTsKKwkJCW5hbWUgPSB3YXNtOworCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJN0UzOUQ4MUQwRUMzOEVGQTAwM0FGMTFBIC8q
IGJ5dGVjb21waWxlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CkBAIC01NjQ1LDYgKzU2ODMsNyBAQAogCQkJCTY1OEQzQTU2MTk2MzgyNjgwMDNDNDVENiAvKiBW
TUVudHJ5UmVjb3JkLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVGOUIxNjFBMUQ0NDAwMDA3MDJF
OTAgLyogZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhlYWRl
cnMgKi8sCiAJCQkJMkFEMkVERkIxOTc5OUUzODAwNEQ2NDc4IC8qIEVudW1lcmF0aW9uTW9kZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJN0IwRTk3MzAxQjVEMjU0NjAwQTI5MzAyIC8qIFdhc21Nb2R1
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUY5QjE4MUExRDQ0MDYwMDcwMkU5MCAvKiBnZW5l
cmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJQTVF
RjlCMTkxQTFENDQwNzAwNzAyRTkwIC8qIGdlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBs
ZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAogCQkJCUM0RjRCNkY2MUEwNUM5ODQwMDVDQUI3
NiAvKiBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLywKQEAgLTU5MzEs
NiArNTk3MCw3IEBACiAJCQkJMEYyQkRDNEIxNTIyODA5RDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxl
RXZlbnRTdHJlYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTYwMTRFRjkwQkQwMEM3MjUz
MiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGQzk3RjQyMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QjBFOTczMjFCNUQyNTQ2MDBBMjkzMDIgLyogV2Fz
bU1vZHVsZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDRTgxNzQ4MzBBMjAwN0Iz
QzFCIC8qIERGR1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0MjczMTE1OEVCRDU0
MDA0Q0I5RkYgLyogRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0NDdFRTE3
QTBCRDcwMDBGNTg5OEUgLyogRHVtcENvbnRleHQuaCBpbiBIZWFkZXJzICovLApAQCAtNjAzNiw2
ICs2MDc2LDcgQEAKIAkJCQkxNDJFMzEzNDEzNEZGMEE2MDBBRkFEQjUgLyogSGFuZGxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDMjgzMTkwMDE2RkU0QjdEMDAxNTdCRkQgLyogSGFuZGxlQmxvY2su
aCBpbiBIZWFkZXJzICovLAogCQkJCUMyODMxOTAyMTZGRTUzM0UwMDE1N0JGRCAvKiBIYW5kbGVC
bG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCMEU5NzM2MUI1RDI1NDYwMEEyOTMw
MiAvKiBXYXNtUmVhZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNBOTE0QkNGNTYyMDA4
ODVCNEYgLyogSGFuZGxlckluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkQ0REVDMTk4MzJE
QzQwMDdENEIxOSAvKiBUeXBlUHJvZmlsZXJMb2cuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkUz
MTM2MTM0RkYwQTYwMEFGQURCNSAvKiBIYW5kbGVTZXQuaCBpbiBIZWFkZXJzICovLApAQCAtNjE3
Niw2ICs2MjE3LDcgQEAKIAkJCQkwRjVBMTI3NDE5MkQ5RkRGMDA4NzY0QTMgLyogREZHRG9lc0dD
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkY2
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCMEU5NzM3MUI1RDI1NDYwMEEyOTMwMiAvKiBXYXNt
U3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjEwRTE2RjVDRDAwQjM0
NDYwIC8qIEpTR2xvYmFsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA4NjE4OUIx
QjdFMDA2MzMyMzEgLyogSlNHbG9iYWxPYmplY3RDb25zb2xlQWdlbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE1OTQ1NTkzMTgyNDc0NDcwMENDMzg0MyAvKiBKU0dsb2JhbE9iamVjdERlYnVnZ2Fi
bGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjIyMyw2ICs2MjY1LDcgQEAKIAkJCQk4NkU4NTUzOTEx
MUI5OTY4MDAxQUY1MUUgLyogSlNTdHJpbmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQky
NjAwQjVBNzE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDI4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZ1JlZi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJN0IwRTk3MzMxQjVEMjU0NjAwQTI5MzAyIC8qIFdhc21PcGNvZGVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQyOTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNTdHJpbmdSZWZD
Ri5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyOEQ0QTgxNzdCNzFDODAwMDdGQTNDIC8qIEpTU3Ry
aW5nUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMEQxNTdFRTBBMjAwNEE0
RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLApAQCAtNjMyNiw2ICs2
MzY5LDcgQEAKIAkJCQk3MEVDQTYwOTFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3Ry
eUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0M0YwRTE2RjVDRDAwQjM0NDYwIC8qIE5v
ZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OUU0NUEyODE4QTFCMjU5MDAyNkQ4OEYgLyogTm9u
ZGV0ZXJtaW5pc3RpY0lucHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQk3QjBFOTczNTFCNUQyNTQ2
MDBBMjkzMDIgLyogV2FzbUZ1bmN0aW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMz
Q0QwMjE5QURBNDExMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQ0MTBFMTZGNUNEMDBCMzQ0NjAgLyogTnVtYmVyQ29uc3RydWN0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNTc4MEEyMThGRTFFOTgwMDFFNzJEOSAvKiBQdXJlTmFOLmgg
aW4gSGVhZGVycyAqLywKQEAgLTYzNzksNiArNjQyMyw3IEBACiAJCQkJMEZGNzI5QzAxNjZBRDM2
MDAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3RhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QjEwNThDMTY3NTQ4MzMwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGQjEwNThFMTY3NTQ4M0EwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3QjBFOTcyRTFCNUQyNTQ2MDBBMjkzMDIgLyogV2FzbUNvZGVH
ZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTM5MTJDMTY3NzFDM0QwMDlDQ0IwNyAv
KiBQcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0ZCNjEw
MDEwNDBDMzhCMDAxN0EyODYgLyogUHJvcGVydHlEZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzk1NDM3RDBFQkE3MEZEMDA3MkI2RDMgLyogUHJvcGVydHlNYXBIYXNoVGFibGUuaCBp
biBIZWFkZXJzICovLApAQCAtNzE5OCw2ICs3MjQzLDcgQEAKIAkJCQkwRkZGQzk1RDE0RUY5MEIz
MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEYyRkNDRkIxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1NhZmVwb2ludC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4NkVDOUREMjEzMjhERjgyMDAyQjJBRDcgLyogREZHU3BlY3VsYXRp
dmVKSVQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0IwRTk3MkYxQjVEMjU0NjAwQTI5MzAyIC8q
IFdhc21Nb2R1bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4ODBGMUYxNDMyOEJCOTAwQjA4
RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4
ODBGNEQxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTdEODlDRkYxN0EwQjhDQzAwNzczQUQ4IC8qIERGR1NTQUNvbnZlcnNpb25Q
aGFzZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc1MzAsNyArNzU3Niw5IEBACiAJCQkJMEY2MjM3
OTcxQUU0NUNBNzAwRDQwMkVBIC8qIERGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjEzOTEyOTE2NzcxQzMzMDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29k
ZVNlcXVlbmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUFGMTY2QUQzNUMwMDBGNUJB
MyAvKiBQcm9maWxlckNvbXBpbGF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdCMEU5NzM0
MUI1RDI1NDYwMEEyOTMwMiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZGNzI5QjAxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5k
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdCMEU5NzMxMUI1RDI1NDYwMEEyOTMwMiAvKiBXYXNt
TW9kdWxlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIxMTY2QUQzNUMwMDBG
NUJBMyAvKiBQcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZGNzI5QjIxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyRGF0YWJhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYxOTBDQUMxODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25S
ZWFzb24uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCmluZGV4IGQxMTI0YTc0ODU2N2JhODJhNmViNmFmYWQ3YzEwMGRlNWNh
MmFmNjUuLjhhZjUxOTdlOGNlMjkxN2QxM2E0YmViZmZhM2M4YzNmNjE4NTRjYWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC0xMTksNiArMTE5
LDEwIEBAIENTdHJpbmcgQ29kZUJsb2NrOjpzb3VyY2VDb2RlRm9yVG9vbHMoKSBjb25zdAogICAg
IAogICAgIFNvdXJjZVByb3ZpZGVyKiBwcm92aWRlciA9IHNvdXJjZSgpOwogICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25l
ckV4ZWN1dGFibGUoKSk7CisjaWYgRU5BQkxFKFdBU00pCisgICAgaWYgKGV4ZWN1dGFibGUtPmlz
V2ViQXNzZW1ibHlGdW5jdGlvbigpKQorICAgICAgICByZXR1cm4gImZ1bmN0aW9uIFt3ZWJhc3Nl
bWJseV0iOworI2VuZGlmCiAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2Vk
ID0gZXhlY3V0YWJsZS0+dW5saW5rZWRFeGVjdXRhYmxlKCk7CiAgICAgdW5zaWduZWQgdW5saW5r
ZWRTdGFydE9mZnNldCA9IHVubGlua2VkLT5zdGFydE9mZnNldCgpOwogICAgIHVuc2lnbmVkIGxp
bmtlZFN0YXJ0T2Zmc2V0ID0gZXhlY3V0YWJsZS0+c291cmNlKCkuc3RhcnRPZmZzZXQoKTsKQEAg
LTE3NDgsMTIgKzE3NTIsMjEgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJs
ZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW4KICAgICBtX3Zpc2l0
QWdncmVnYXRlSGFzQmVlbkNhbGxlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVs
YXhlZCk7CiAKICAgICBBU1NFUlQobV9oZWFwLT5pc0RlZmVycmVkKCkpOworICAgIEFTU0VSVCht
X3NvdXJjZSk7CisgICAgc2V0TnVtUGFyYW1ldGVycyh1bmxpbmtlZENvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpKTsKKworI2lmIEVOQUJMRShXQVNNKQorICAgIGlmIChvd25lckV4ZWN1dGFibGUt
PmlzV2ViQXNzZW1ibHlGdW5jdGlvbigpKSB7CisgICAgICAgIG1fc3ltYm9sVGFibGVDb25zdGFu
dEluZGV4ID0gMDsKKyAgICAgICAgbV9oZWFwLT5tX2NvZGVCbG9ja3MuYWRkKHRoaXMpOworICAg
ICAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVvZihDb2RlQmxvY2sp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCiAgICAgQVNTRVJUKG1fc2NvcGVS
ZWdpc3Rlci5pc0xvY2FsKCkpOwogCiAgICAgYm9vbCBkaWRDbG9uZVN5bWJvbFRhYmxlID0gZmFs
c2U7Ci0gICAgCi0gICAgQVNTRVJUKG1fc291cmNlKTsKLSAgICBzZXROdW1QYXJhbWV0ZXJzKHVu
bGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwogCiAgICAgaWYgKHZtKCktPnR5cGVQ
cm9maWxlcigpIHx8IHZtKCktPmNvbnRyb2xGbG93UHJvZmlsZXIoKSkKICAgICAgICAgdm0oKS0+
ZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKCktPnJlbW92ZVVuZXhlY3V0ZWRSYW5nZShtX293bmVy
RXhlY3V0YWJsZS0+c291cmNlSUQoKSwgbV9vd25lckV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdT
dGFydE9mZnNldCgpLCBtX293bmVyRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ0VuZE9mZnNldCgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2suY3BwCmluZGV4IDBlMWM4ZmI2ODg2ZDU2MWY5YjQxNGQ5YTMwNTU1ZjQ0Y2YzYzIxNTEu
LjgyN2YwOGQxZDBjNWExNDI5NzUxYjY5ZDMxMmE4ZTE3NDIxNTUyNzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcApAQCAt
MzksNiArMzksNyBAQAogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN5bWJvbFRh
YmxlLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5oIgorI2luY2x1ZGUg
Ildhc21Nb2R1bGUuaCIKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogCiBuYW1lc3BhY2UgSlND
IHsKQEAgLTU3LDYgKzU4LDEzIEBAIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBn
ZW5lcmF0ZUZ1bmN0aW9uQ29kZUJsb2NrKAogICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCwgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwK
ICAgICBVbmxpbmtlZEZ1bmN0aW9uS2luZCBmdW5jdGlvbktpbmQsIFBhcnNlckVycm9yJiBlcnJv
cikKIHsKKyNpZiBFTkFCTEUoV0FTTSkKKyAgICBpZiAoZXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJs
eUZ1bmN0aW9uKCkpIHsKKyAgICAgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogcmVzdWx0
ID0gVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlKCZ2bSwgRnVuY3Rpb25Db2RlLCBF
eGVjdXRhYmxlSW5mbyhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGV4ZWN1dGFi
bGUtPmNvbnN0cnVjdG9yS2luZCgpKSk7CisgICAgICAgIHJlc3VsdC0+c2V0TnVtUGFyYW1ldGVy
cygxKTsgLy8gRklYTUU6IEhhY2t5LgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyNl
bmRpZgogICAgIEpTUGFyc2VyQnVpbHRpbk1vZGUgYnVpbHRpbk1vZGUgPSBleGVjdXRhYmxlLT5p
c0J1aWx0aW5GdW5jdGlvbigpID8gSlNQYXJzZXJCdWlsdGluTW9kZTo6QnVpbHRpbiA6IEpTUGFy
c2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW47CiAgICAgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmlj
dE1vZGUgPSBleGVjdXRhYmxlLT5pc0luU3RyaWN0Q29udGV4dCgpID8gSlNQYXJzZXJTdHJpY3RN
b2RlOjpTdHJpY3QgOiBKU1BhcnNlclN0cmljdE1vZGU6Ok5vdFN0cmljdDsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8RnVuY3Rpb25Ob2RlPiBmdW5jdGlvbiA9IHBhcnNlPEZ1bmN0aW9uTm9kZT4oCkBA
IC0xMDMsMTEgKzExMSw0MyBAQCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUoVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdAogICAgICwgbV9pc0J1
aWx0aW5GdW5jdGlvbihraW5kID09IFVubGlua2VkQnVpbHRpbkZ1bmN0aW9uKQogICAgICwgbV9j
b25zdHJ1Y3RvcktpbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG5vZGUtPmNvbnN0cnVjdG9yS2lu
ZCgpKSkKICAgICAsIG1fZnVuY3Rpb25Nb2RlKG5vZGUtPmZ1bmN0aW9uTW9kZSgpKQorI2lmIEVO
QUJMRShXQVNNKQorICAgICwgbV9pc1dlYkFzc2VtYmx5RnVuY3Rpb24oZmFsc2UpCisjZW5kaWYK
IHsKICAgICBBU1NFUlQobV9jb25zdHJ1Y3RvcktpbmQgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KG5vZGUtPmNvbnN0cnVjdG9yS2luZCgpKSk7CiAgICAgbV9wYXJlbnRTY29wZVREWlZhcmlhYmxl
cy5zd2FwKHBhcmVudFNjb3BlVERaVmFyaWFibGVzKTsKIH0KIAorI2lmIEVOQUJMRShXQVNNKQor
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25l
ZCBzb3VyY2VMZW5ndGgsIFdhc206Ok1vZHVsZSogbW9kdWxlLCB1bnNpZ25lZCBmdW5jdGlvbklu
ZGV4KQorICAgIDogQmFzZSgqdm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fbmFtZShJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCAiW3dlYmFzc2VtYmx5XSIpKSAvLyBGSVhNRToKKyAgICAsIG1faW5m
ZXJyZWROYW1lKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJbd2ViYXNzZW1ibHldIikpIC8v
IEZJWE1FOgorICAgICwgbV9maXJzdExpbmVPZmZzZXQoMCkKKyAgICAsIG1fbGluZUNvdW50KDEp
CisgICAgLCBtX3VubGlua2VkRnVuY3Rpb25OYW1lU3RhcnQoMCkKKyAgICAsIG1fdW5saW5rZWRC
b2R5U3RhcnRDb2x1bW4oMCkKKyAgICAsIG1fdW5saW5rZWRCb2R5RW5kQ29sdW1uKDApCisgICAg
LCBtX3N0YXJ0T2Zmc2V0KHN0YXJ0T2Zmc2V0KQorICAgICwgbV9zb3VyY2VMZW5ndGgoc291cmNl
TGVuZ3RoKQorICAgICwgbV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQoMCkKKyAgICAsIG1fdHlwZVBy
b2ZpbGluZ1N0YXJ0T2Zmc2V0KDApCisgICAgLCBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQoMCkK
KyAgICAsIG1fcGFyYW1ldGVyQ291bnQoMSkgLy8gRklYTUU6CisgICAgLCBtX2ZlYXR1cmVzKDAp
CisgICAgLCBtX2lzSW5TdHJpY3RDb250ZXh0KGZhbHNlKSAvLyBGSVhNRToKKyAgICAsIG1faGFz
Q2FwdHVyZWRWYXJpYWJsZXMoZmFsc2UpCisgICAgLCBtX2lzQnVpbHRpbkZ1bmN0aW9uKGZhbHNl
KQorICAgICwgbV9jb25zdHJ1Y3RvcktpbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KENvbnN0cnVj
dG9yS2luZDo6Tm9uZSkpCisgICAgLCBtX2Z1bmN0aW9uTW9kZShGdW5jdGlvbk1vZGU6OkZ1bmN0
aW9uRXhwcmVzc2lvbikKKyAgICAsIG1faXNXZWJBc3NlbWJseUZ1bmN0aW9uKHRydWUpCisgICAg
LCBtX3dlYkFzc2VtYmx5TW9kdWxlKCp2bSwgdGhpcywgbW9kdWxlKQorICAgICwgbV93ZWJBc3Nl
bWJseUZ1bmN0aW9uSW5kZXgoZnVuY3Rpb25JbmRleCkKK3sKK30KKyNlbmRpZgorCiB2b2lkIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKQEAg
LTExOCw2ICsxNTgsMTAgQEAgdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG8KICAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iamVjdC0+bV9uYW1lVmFsdWUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX3N5bWJvbFRhYmxlRm9yQ2FsbCk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPm1fc3ltYm9sVGFibGVGb3JDb25zdHJ1Y3QpOworI2lmIEVOQUJMRShXQVNNKQorICAg
IGlmICh0aGlzT2JqZWN0LT5tX2lzV2ViQXNzZW1ibHlGdW5jdGlvbikKKyAgICAgICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fd2ViQXNzZW1ibHlNb2R1bGUpOworI2VuZGlmCiB9CiAK
IEZ1bmN0aW9uRXhlY3V0YWJsZSogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmxpbmsoVk0m
IHZtLCBjb25zdCBTb3VyY2VDb2RlJiBvd25lclNvdXJjZSwgaW50IG92ZXJyaWRlTGluZU51bWJl
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmgKaW5kZXggNTUwYTAyNGNiN2M0MWY0NjI3NjYzYWJkYzY4N2Q5OTgxYzI5MGM0NS4uODNh
OGY5YzM5ZGZjNDFiNDA3YTUzYmFkNDE0MDE4NDc5OGEwOWQwYiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKQEAgLTk4LDYgKzk4
LDEyIEBAIGVudW0gVW5saW5rZWRGdW5jdGlvbktpbmQgewogICAgIFVubGlua2VkQnVpbHRpbkZ1
bmN0aW9uLAogfTsKIAorI2lmIEVOQUJMRShXQVNNKQorbmFtZXNwYWNlIFdhc20geworY2xhc3Mg
TW9kdWxlOworfQorI2VuZGlmCisKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlIGZp
bmFsIDogcHVibGljIEpTQ2VsbCB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIEJ1aWx0aW5F
eGVjdXRhYmxlczsKQEAgLTExNSw2ICsxMjEsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
aW5zdGFuY2U7CiAgICAgfQogCisjaWYgRU5BQkxFKFdBU00pCisgICAgc3RhdGljIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVhdGUoVk0qIHZtLCB1bnNpZ25lZCBzdGFydE9mZnNldCwg
dW5zaWduZWQgc291cmNlTGVuZ3RoLCBXYXNtOjpNb2R1bGUqIG1vZHVsZSwgdW5zaWduZWQgZnVu
Y3Rpb25JbmRleCkKKyAgICB7CisgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBp
bnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlPih2bS0+aGVhcCkpCisgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKHZt
LCB2bS0+dW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIHN0YXJ0T2Zm
c2V0LCBzb3VyY2VMZW5ndGgsIG1vZHVsZSwgZnVuY3Rpb25JbmRleCk7CisgICAgICAgIGluc3Rh
bmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOworICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAg
fQorI2VuZGlmCisKICAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9uYW1lOyB9CiAgICAgY29uc3QgSWRlbnRpZmllciYgaW5mZXJyZWROYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbmZlcnJlZE5hbWU7IH0KICAgICBKU1N0cmluZyogbmFtZVZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV9uYW1lVmFsdWUuZ2V0KCk7IH0KQEAgLTE3MCw5ICsxODYsMTcgQEAgcHVibGlj
OgogICAgIGJvb2wgaXNCdWlsdGluRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2lzQnVpbHRp
bkZ1bmN0aW9uOyB9CiAgICAgYm9vbCBpc0NsYXNzQ29uc3RydWN0b3JGdW5jdGlvbigpIGNvbnN0
IHsgcmV0dXJuIGNvbnN0cnVjdG9yS2luZCgpICE9IENvbnN0cnVjdG9yS2luZDo6Tm9uZTsgfQog
ICAgIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqIHBhcmVudFNjb3BlVERaVmFyaWFibGVzKCkg
Y29uc3QgeyByZXR1cm4gJm1fcGFyZW50U2NvcGVURFpWYXJpYWJsZXM7IH0KKyNpZiBFTkFCTEUo
V0FTTSkKKyAgICBib29sIGlzV2ViQXNzZW1ibHlGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
aXNXZWJBc3NlbWJseUZ1bmN0aW9uOyB9CisgICAgV2FzbTo6TW9kdWxlKiB3ZWJBc3NlbWJseU1v
ZHVsZSgpIHsgcmV0dXJuIG1fd2ViQXNzZW1ibHlNb2R1bGUuZ2V0KCk7IH0KKyAgICB1bnNpZ25l
ZCB3ZWJBc3NlbWJseUZ1bmN0aW9uSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3dlYkFzc2VtYmx5
RnVuY3Rpb25JbmRleDsgfQorI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUoVk0qLCBTdHJ1Y3R1cmUqLCBjb25zdCBTb3VyY2VDb2RlJiwgUmVmUHRyPFNv
dXJjZVByb3ZpZGVyPiYmIHNvdXJjZU92ZXJyaWRlLCBGdW5jdGlvbkJvZHlOb2RlKiwgVW5saW5r
ZWRGdW5jdGlvbktpbmQsIFZhcmlhYmxlRW52aXJvbm1lbnQmKTsKKyNpZiBFTkFCTEUoV0FTTSkK
KyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZShWTSosIFN0cnVjdHVyZSosIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBzb3VyY2VMZW5ndGgsIFdhc206Ok1vZHVsZSosIHVuc2ln
bmVkIGZ1bmN0aW9uSW5kZXgpOworI2VuZGlmCiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsKICAgICBXcml0ZUJhcnJpZXI8VW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CiAKQEAgLTIw
Myw2ICsyMjcsMTEgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2lzQnVpbHRpbkZ1bmN0aW9u
IDogMTsKICAgICB1bnNpZ25lZCBtX2NvbnN0cnVjdG9yS2luZCA6IDI7CiAgICAgdW5zaWduZWQg
bV9mdW5jdGlvbk1vZGUgOiAxOyAvLyBGdW5jdGlvbk1vZGUKKyNpZiBFTkFCTEUoV0FTTSkKKyAg
ICB1bnNpZ25lZCBtX2lzV2ViQXNzZW1ibHlGdW5jdGlvbiA6IDE7CisgICAgV3JpdGVCYXJyaWVy
PFdhc206Ok1vZHVsZT4gbV93ZWJBc3NlbWJseU1vZHVsZTsKKyAgICB1bnNpZ25lZCBtX3dlYkFz
c2VtYmx5RnVuY3Rpb25JbmRleDsKKyNlbmRpZgogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYgdm0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDk5YTM0YjkxMzY1YmJmNjA5YzY5ODFjOGE2YjBhZDIzNWU4
NzEwNGYuLmQ2NDQ3ZGMzZjEwZjFiMTFiNTAyMzVmZWQzOTE4OGJiNzBjMjQ1NmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0xNDQw
LDYgKzE0NDAsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6YXR0ZW1wdFRvSW5saW5lQ2FsbChO
b2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQKICAgICBpZiAoIWlubGluaW5n
QmFsYW5jZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAorI2lmIEVOQUJMRShXQVNNKQor
ICAgIGlmIChFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxlZS5leGVjdXRhYmxlKCkp
IHsKKyAgICAgICAgaWYgKGV4ZWN1dGFibGUtPmlzV2ViQXNzZW1ibHlGdW5jdGlvbigpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyNlbmRpZgorCiAgICAgYm9vbCBkaWRJbnNl
cnRDaGVja3MgPSBmYWxzZTsKICAgICBhdXRvIGluc2VydENoZWNrc1dpdGhBY2NvdW50aW5nID0g
WyZdICgpIHsKICAgICAgICAgaW5zZXJ0Q2hlY2tzKG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREaXNhc3NlbWJsZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVREaXNhc3NlbWJsZXIuY3BwCmluZGV4IDA0ZTFiNGQ0OWU5Nzk3YTM5
NDcwODY1ZDIzOTg3OTI2YzNlMzk3YjIuLjZmZTQ2YmVkMWRkN2U5ZTM1MzkyYzY4YzMxYmY4MzJl
YmExYjU2Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURGlzYXNz
ZW1ibGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxl
ci5jcHAKQEAgLTUxLDE0ICs1MSwxOCBAQCBKSVREaXNhc3NlbWJsZXI6On5KSVREaXNhc3NlbWJs
ZXIoKQogdm9pZCBKSVREaXNhc3NlbWJsZXI6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikKIHsKICAgICBkdW1wSGVhZGVyKG91dCwgbGlua0J1ZmZlcik7Ci0g
ICAgZHVtcERpc2Fzc2VtYmx5KG91dCwgbGlua0J1ZmZlciwgbV9zdGFydE9mQ29kZSwgbV9sYWJl
bEZvckJ5dGVjb2RlSW5kZXhJbk1haW5QYXRoWzBdKTsKLSAgICAKLSAgICBkdW1wRm9ySW5zdHJ1
Y3Rpb25zKG91dCwgbGlua0J1ZmZlciwgIiAgICAiLCBtX2xhYmVsRm9yQnl0ZWNvZGVJbmRleElu
TWFpblBhdGgsIGZpcnN0U2xvd0xhYmVsKCkpOwotICAgIG91dC5wcmludCgiICAgIChFbmQgT2Yg
TWFpbiBQYXRoKVxuIik7Ci0gICAgZHVtcEZvckluc3RydWN0aW9ucyhvdXQsIGxpbmtCdWZmZXIs
ICIgICAgKFMpICIsIG1fbGFiZWxGb3JCeXRlY29kZUluZGV4SW5TbG93UGF0aCwgbV9lbmRPZlNs
b3dQYXRoKTsKLSAgICBvdXQucHJpbnQoIiAgICAoRW5kIE9mIFNsb3cgUGF0aClcbiIpOwogCi0g
ICAgZHVtcERpc2Fzc2VtYmx5KG91dCwgbGlua0J1ZmZlciwgbV9lbmRPZlNsb3dQYXRoLCBtX2Vu
ZE9mQ29kZSk7CisgICAgaWYgKCFtX2xhYmVsRm9yQnl0ZWNvZGVJbmRleEluTWFpblBhdGguaXNF
bXB0eSgpKSB7CisgICAgICAgIGR1bXBEaXNhc3NlbWJseShvdXQsIGxpbmtCdWZmZXIsIG1fc3Rh
cnRPZkNvZGUsIG1fbGFiZWxGb3JCeXRlY29kZUluZGV4SW5NYWluUGF0aFswXSk7CisKKyAgICAg
ICAgZHVtcEZvckluc3RydWN0aW9ucyhvdXQsIGxpbmtCdWZmZXIsICIgICAgIiwgbV9sYWJlbEZv
ckJ5dGVjb2RlSW5kZXhJbk1haW5QYXRoLCBmaXJzdFNsb3dMYWJlbCgpKTsKKyAgICAgICAgb3V0
LnByaW50KCIgICAgKEVuZCBPZiBNYWluIFBhdGgpXG4iKTsKKyAgICAgICAgZHVtcEZvckluc3Ry
dWN0aW9ucyhvdXQsIGxpbmtCdWZmZXIsICIgICAgKFMpICIsIG1fbGFiZWxGb3JCeXRlY29kZUlu
ZGV4SW5TbG93UGF0aCwgbV9lbmRPZlNsb3dQYXRoKTsKKyAgICAgICAgb3V0LnByaW50KCIgICAg
KEVuZCBPZiBTbG93IFBhdGgpXG4iKTsKKworICAgICAgICBkdW1wRGlzYXNzZW1ibHkob3V0LCBs
aW5rQnVmZmVyLCBtX2VuZE9mU2xvd1BhdGgsIG1fZW5kT2ZDb2RlKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZHVtcERpc2Fzc2VtYmx5KG91dCwgbGlua0J1ZmZlciwgbV9zdGFydE9mQ29kZSwgbV9l
bmRPZkNvZGUpOwogfQogCiB2b2lkIEpJVERpc2Fzc2VtYmxlcjo6ZHVtcChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAK
aW5kZXggZTg0ZTkzNDI5NzFjYmQ1MWZmYjY5NTcyOWU4ZmU5MjJiNjRjMGQyOS4uOWRkMjFhOWI4
ZWQ3ODQ5ZjczM2ZlYWExNzBmOTk5Mjk4MmZmNzAwMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC03ODMsNyArNzgzLDExIEBAIGlubGluZSBjaGFy
KiBsaW5rRm9yKAogICAgIGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0
aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFi
bGUpOwogCisjaWYgIUVOQUJMRShXQVNNKQogICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAmJiBm
dW5jdGlvbkV4ZWN1dGFibGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCkpIHsKKyNlbHNlCisgICAgICAg
IGlmICghaXNDYWxsKGtpbmQpICYmIChmdW5jdGlvbkV4ZWN1dGFibGUtPmlzQnVpbHRpbkZ1bmN0
aW9uKCkgfHwgZnVuY3Rpb25FeGVjdXRhYmxlLT5pc1dlYkFzc2VtYmx5RnVuY3Rpb24oKSkpIHsK
KyNlbmRpZgogICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVh
dGVOb3RBQ29uc3RydWN0b3JFcnJvcihleGVjLCBjYWxsZWUpKTsKICAgICAgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PGNoYXIqPih2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZy
b21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAg
ICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCA1N2FmNmFlOTNhN2YwNmQ3ZDNkMjEzMDdh
Mjk4YzBlOTE5MWYxM2Q5Li5lMWQ3YzQ3ZGIxYjdkNjY1M2ZkYjhjOWZiMjdlZjViMjg3MjZmODNh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgIlN0cnVj
dHVyZVJhcmVEYXRhSW5saW5lcy5oIgogI2luY2x1ZGUgIlRlc3RSdW5uZXJVdGlscy5oIgogI2lu
Y2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgorI2luY2x1ZGUgIldhc21Nb2R1bGVQYXJzZXIuaCIK
ICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIu
aD4KQEAgLTQ5Miw2ICs0OTMsOSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvblJldHVyblR5cGVGb3IoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkR1bXBCYXNpY0Jsb2NrRXhlY3V0aW9uUmFuZ2VzKEV4
ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25I
YXNCYXNpY0Jsb2NrRXhlY3V0ZWQoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkVuYWJsZUV4Y2VwdGlvbkZ1enooRXhlY1N0YXRlKik7Cisj
aWYgRU5BQkxFKFdBU00pCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkxvYWRXZWJBc3NlbWJseShFeGVjU3RhdGUqKTsKKyNlbmRpZgogCiAjaWYgRU5BQkxFKFNB
TVBMSU5HX0ZMQUdTKQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25TZXRTYW1wbGluZ0ZsYWdzKEV4ZWNTdGF0ZSopOwpAQCAtNjU0LDYgKzY1OCwxMCBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiaGFzQmFzaWNCbG9ja0V4ZWN1dGVkIiwg
ZnVuY3Rpb25IYXNCYXNpY0Jsb2NrRXhlY3V0ZWQsIDIpOwogCiAgICAgICAgIGFkZEZ1bmN0aW9u
KHZtLCAiZW5hYmxlRXhjZXB0aW9uRnV6eiIsIGZ1bmN0aW9uRW5hYmxlRXhjZXB0aW9uRnV6eiwg
MCk7CisKKyNpZiBFTkFCTEUoV0FTTSkKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJsb2FkV2Vi
QXNzZW1ibHkiLCBmdW5jdGlvbkxvYWRXZWJBc3NlbWJseSwgMSk7CisjZW5kaWYKICAgICAgICAg
CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShnbG9iYWxFeGVj
KCksIDApOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7
ICsraSkKQEAgLTExODMsNiArMTE5MSwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uRW5hYmxlRXhjZXB0aW9uRnV6eihFeGVjU3RhdGUqKQogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKKyNpZiBFTkFCTEUoV0FTTSkKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2FkV2ViQXNzZW1ibHkoRXhlY1N0YXRl
KiBleGVjKQoreworICAgIFN0cmluZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOworICAgIGlm
ICghZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShmaWxlTmFtZSwgYnVmZmVyKSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMs
IGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQ291bGQgbm90IG9wZW4gZmlsZS4iKSkp
KTsKKyAgICBSZWZQdHI8V2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcj4gcHJvdmlkZXIgPSBXZWJB
c3NlbWJseVNvdXJjZVByb3ZpZGVyOjpjcmVhdGUoYnVmZmVyLCAiIik7CisgICAgU291cmNlQ29k
ZSBzb3VyY2UocHJvdmlkZXIpOworICAgIFdhc206Ok1vZHVsZSogbW9kdWxlID0gV2FzbTo6Y29t
cGlsZShleGVjLCBzb3VyY2UpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobW9kdWxlKTsK
K30KKyNlbmRpZgorCiAvLyBVc2UgU0VIIGZvciBSZWxlYXNlIGJ1aWxkcyBvbmx5IHRvIGdldCBy
aWQgb2YgdGhlIGNyYXNoIHJlcG9ydCBkaWFsb2cKIC8vIChsdWNraWx5IHRoZSBzYW1lIHRlc3Rz
IGZhaWwgaW4gUmVsZWFzZSBhbmQgRGVidWcgYnVpbGRzIHNvIGZhcikuIE5lZWQgdG8KIC8vIGJl
IGluIGEgc2VwYXJhdGUgbWFpbiBmdW5jdGlvbiBiZWNhdXNlIHRoZSBqc2NtYWluIGZ1bmN0aW9u
IHJlcXVpcmVzIG9iamVjdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5jcHAKaW5kZXggMTkzNGU1NzA0MzhlM2NiZWM5YTQ4YTE2ZjczMGQ0NTNlZWZiNjVi
NC4uYTczYmY0OTk2ZGMyOWZjOGJiOTRlOTA5NWE0ZmNjNTM4YWI1NjMwOCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCkBAIC0xMTA0LDcgKzEx
MDQsMTEgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlY1N0YXRlKiBl
eGVjQ2FsbGVlLCBJbnN0cnVjdGlvbiogcGMsIENvZGUKICAgICBlbHNlIHsKICAgICAgICAgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlv
bkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKIAorI2lmICFFTkFCTEUoV0FTTSkKICAgICAgICAg
aWYgKCFpc0NhbGwoa2luZCkgJiYgZnVuY3Rpb25FeGVjdXRhYmxlLT5pc0J1aWx0aW5GdW5jdGlv
bigpKQorI2Vsc2UKKyAgICAgICAgaWYgKCFpc0NhbGwoa2luZCkgJiYgKGZ1bmN0aW9uRXhlY3V0
YWJsZS0+aXNCdWlsdGluRnVuY3Rpb24oKSB8fCBmdW5jdGlvbkV4ZWN1dGFibGUtPmlzV2ViQXNz
ZW1ibHlGdW5jdGlvbigpKSkKKyNlbmRpZgogICAgICAgICAgICAgTExJTlRfQ0FMTF9USFJPVyhl
eGVjLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcihleGVjLCBjYWxsZWUpKTsKIAogICAgICAg
ICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRp
b24oZXhlY0NhbGxlZSwgY2FsbGVlLCBzY29wZSwga2luZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Tb3VyY2VDb2RlLmNwcAppbmRleCA4ZWYxNjhkZWFhOTJjMzVhODFhNDI3ZDg2
NjA4OWMwMTg5NTJjZjIxLi4xODUzNTVmMjMwYWM3YjVkZmVmM2YxOWYyY2E0OTJhYzk1MzI3ZWU3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZS5jcHAKQEAgLTM2
LDYgKzM2LDExIEBAIENTdHJpbmcgU291cmNlQ29kZTo6dG9VVEY4KCkgY29uc3QKICAgICBpZiAo
IW1fcHJvdmlkZXIpCiAgICAgICAgIHJldHVybiBDU3RyaW5nKCIiLCAwKTsKICAgICAKKyNpZiBF
TkFCTEUoV0FTTSkKKyAgICBpZiAoIW1fcHJvdmlkZXItPmlzU3RyaW5nU291cmNlKCkpIC8vIEZJ
WE1FOiBoYWNreQorICAgICAgICByZXR1cm4gQ1N0cmluZygiIiwgMCk7CisjZW5kaWYKKwogICAg
IHJldHVybiBtX3Byb3ZpZGVyLT5zb3VyY2UoKS5pbXBsKCktPnV0ZjhGb3JSYW5nZShtX3N0YXJ0
Q2hhciwgbV9lbmRDaGFyIC0gbV9zdGFydENoYXIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmgKaW5kZXggY2NjYWJmMzY5NjRmNDExYTY0Y2Jh
ZTI1OTJkMjRmNDI0ZjAyNmI0Ny4uODVjYzJiN2YzMmM0YTk3NWFkNjM2N2VjMTEyMGRmYTIxZTU4
NTdlNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92
aWRlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIu
aApAQCAtNDMsNiArNDMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSB2aXJ0dWFsIH5Tb3VyY2VQcm92aWRlcigpOwogCisjaWYgRU5BQkxFKFdBU00pCisg
ICAgICAgIHZpcnR1YWwgYm9vbCBpc1N0cmluZ1NvdXJjZSgpIGNvbnN0ID0gMDsKKyNlbmRpZgog
ICAgICAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgc291cmNlKCkgY29uc3QgPSAwOwogICAgICAg
ICBTdHJpbmcgZ2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAogICAgICAgICB7CkBA
IC03OSw2ICs4MiwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFN0cmluZ1NvdXJjZVByb3ZpZGVyKHNvdXJjZSwgdXJsLCBzdGFydFBvc2l0aW9u
KSk7CiAgICAgICAgIH0KIAorI2lmIEVOQUJMRShXQVNNKQorICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNTdHJpbmdTb3VyY2UoKSBjb25zdCBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorI2VuZGlmCisKICAgICAgICAgdmlydHVhbCBjb25zdCBT
dHJpbmcmIHNvdXJjZSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiBtX3NvdXJjZTsKQEAgLTkzLDYgKzEwMyw0MiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICBTdHJpbmcgbV9zb3VyY2U7CiAgICAgfTsKKworI2lmIEVOQUJMRShXQVNNKQorICAgIGNs
YXNzIFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXIgOiBwdWJsaWMgU291cmNlUHJvdmlkZXIgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFJlZjxXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVy
PiBjcmVhdGUoY29uc3QgVmVjdG9yPGNoYXI+JiBkYXRhLCBjb25zdCBTdHJpbmcmIHVybCwgY29u
c3QgVGV4dFBvc2l0aW9uJiBzdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uOjptaW5pbXVtUG9z
aXRpb24oKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2Vi
QXNzZW1ibHlTb3VyY2VQcm92aWRlcihkYXRhLCB1cmwsIHN0YXJ0UG9zaXRpb24pKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N0cmluZ1NvdXJjZSgpIGNvbnN0IG92ZXJy
aWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiBzb3VyY2UoKSBjb25zdCBvdmVycmlkZQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9zb3VyY2U7CisgICAgICAgIH0KKworICAgICAg
ICBjb25zdCBWZWN0b3I8Y2hhcj4mIGRhdGEoKSBjb25zdCAvLyBGSVhNRTogTWFrZSB0aGlzIHZp
cnR1YWw/IEJ1dCB3aGF0IGFib3V0IFN0cmluZ1NvdXJjZVByb3ZpZGVyPworICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9kYXRhOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAg
ICAgICBXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyKGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSwg
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFRleHRQb3NpdGlvbiYgc3RhcnRQb3NpdGlvbikKKyAg
ICAgICAgICAgIDogU291cmNlUHJvdmlkZXIodXJsLCBzdGFydFBvc2l0aW9uKQorICAgICAgICAg
ICAgLCBtX3NvdXJjZSgiW1dlYkFzc2VtYmx5XSIpIC8vIFRPRE86IEltcGxlbWVudCB0aGUgdGV4
dCBmb3JtYXQ/CisgICAgICAgICAgICAsIG1fZGF0YShkYXRhKQorICAgICAgICB7CisgICAgICAg
IH0KKworICAgICAgICBTdHJpbmcgbV9zb3VyY2U7CisgICAgICAgIFZlY3RvcjxjaGFyPiBtX2Rh
dGE7CisgICAgfTsKKyNlbmRpZgogICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKaW5kZXggZTExN2FiNmUzMTA3
OGJlMTdjYjIwNzgwNTVhYTg0Mjc0OTRiYTNlMS4uOWNhM2RjOTNlNmExOGI1Yjc0M2UyMTUyOGZl
OTZkNjFiOTAwYWM5YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0
YWJsZS5jcHAKQEAgLTM2LDYgKzM2LDggQEAKICNpbmNsdWRlICJQYXJzZXIuaCIKICNpbmNsdWRl
ICJQcm9maWxlckRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgiCisjaW5jbHVk
ZSAiV2FzbUZ1bmN0aW9uUGFyc2VyLmgiCisjaW5jbHVkZSAiV2FzbU1vZHVsZS5oIgogI2luY2x1
ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtNjMsNiArNjUsMTMgQEAgdm9pZCBFeGVj
dXRhYmxlQmFzZTo6Y2xlYXJDb2RlKCkKICAgICBtX251bVBhcmFtZXRlcnNGb3JDb25zdHJ1Y3Qg
PSBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQ7CiB9CiAKKyNpZiBFTkFCTEUoV0FTTSkKK2Jv
b2wgRXhlY3V0YWJsZUJhc2U6OmlzV2ViQXNzZW1ibHlGdW5jdGlvbigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGlzRnVuY3Rpb25FeGVjdXRhYmxlKCkgJiYganNDYXN0PGNvbnN0IEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KHRoaXMpLT5pc1dlYkFzc2VtYmx5RnVuY3Rpb24oKTsKK30KKyNlbmRpZgorCiAj
aWYgRU5BQkxFKERGR19KSVQpCiBJbnRyaW5zaWMgRXhlY3V0YWJsZUJhc2U6OmludHJpbnNpYygp
IGNvbnN0CiB7CkBAIC0yNDcsNiArMjU2LDE5IEBAIFJlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4
ZWN1dGFibGU6Om5ld0NvZGVCbG9ja0ZvcigKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogCisjaWYgRU5BQkxFKFdBU00pCisgICAgaWYgKGV4ZWN1dGFibGUtPmlzV2ViQXNzZW1ibHlG
dW5jdGlvbigpKSB7CisgICAgICAgIFNvdXJjZVByb3ZpZGVyKiBwcm92aWRlciA9IGV4ZWN1dGFi
bGUtPnNvdXJjZSgpLnByb3ZpZGVyKCk7CisgICAgICAgIHVuc2lnbmVkIHNvdXJjZU9mZnNldCA9
IGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCk7CisgICAgICAgIHVuc2lnbmVkIHN0
YXJ0Q29sdW1uID0gZXhlY3V0YWJsZS0+c291cmNlKCkuc3RhcnRDb2x1bW4oKTsKKyAgICAgICAg
CisgICAgICAgIFJlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGFkb3B0UmVmKG5ldyBGdW5j
dGlvbkNvZGVCbG9jayhleGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHByb3Zp
ZGVyLCBzb3VyY2VPZmZzZXQsIHN0YXJ0Q29sdW1uKSk7CisgICAgICAgIFJlZlB0cjxKSVRDb2Rl
PiBqaXRDb2RlID0gV2FzbTo6RnVuY3Rpb25QYXJzZXI6OmdlbmVyYXRlQ29kZSh2bSwgY29kZUJs
b2NrLmdldCgpLCBleGVjdXRhYmxlLT5tX3VubGlua2VkRXhlY3V0YWJsZS0+d2ViQXNzZW1ibHlN
b2R1bGUoKSwgZXhlY3V0YWJsZS0+bV91bmxpbmtlZEV4ZWN1dGFibGUtPndlYkFzc2VtYmx5RnVu
Y3Rpb25JbmRleCgpLCBleGVjdXRhYmxlLT5tX3VubGlua2VkRXhlY3V0YWJsZS0+c3RhcnRPZmZz
ZXQoKSk7CisgICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZShqaXRDb2RlLnJlbGVhc2UoKSk7
CisgICAgICAgIHJldHVybiBjb2RlQmxvY2s7CisgICAgfQorI2VuZGlmCisKICAgICAvLyBQYXJz
aW5nIHJldmVhbHMgd2hldGhlciBvdXIgZnVuY3Rpb24gdXNlcyBmZWF0dXJlcyB0aGF0IHJlcXVp
cmUgYSBzZXBhcmF0ZSBmdW5jdGlvbiBuYW1lIG9iamVjdCBpbiB0aGUgc2NvcGUgY2hhaW4uCiAg
ICAgLy8gQmUgc3VyZSB0byBhZGQgdGhpcyBzY29wZSBiZWZvcmUgbGlua2luZyB0aGUgYnl0ZWNv
ZGUgYmVjYXVzZSB0aGlzIHNjb3BlIHdpbGwgY2hhbmdlIHRoZSByZXNvbHV0aW9uIGRlcHRoIG9m
IG5vbi1sb2NhbCB2YXJpYWJsZXMuCiAgICAgaWYgKGZ1bmN0aW9uTmFtZUlzSW5TY29wZShleGVj
dXRhYmxlLT5uYW1lKCksIGV4ZWN1dGFibGUtPmZ1bmN0aW9uTW9kZSgpKQpAQCAtMzMzLDEzICsz
NTUsMTkgQEAgSlNPYmplY3QqIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb25J
bXBsKAogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwogICAgIH0KICAgICAKLSAgICBpZiAoT3B0
aW9uczo6dmFsaWRhdGVCeXRlY29kZSgpKQotICAgICAgICBjb2RlQmxvY2stPnZhbGlkYXRlKCk7
CisjaWYgRU5BQkxFKFdBU00pCisgICAgaWYgKCFpc1dlYkFzc2VtYmx5RnVuY3Rpb24oKSkgewor
I2VuZGlmCisgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUJ5dGVjb2RlKCkpCisgICAgICAg
ICAgICBjb2RlQmxvY2stPnZhbGlkYXRlKCk7CiAgICAgCi0gICAgaWYgKE9wdGlvbnM6OnVzZUxM
SW50KCkpCi0gICAgICAgIHNldHVwTExJbnQodm0sIGNvZGVCbG9jay5nZXQoKSk7Ci0gICAgZWxz
ZQotICAgICAgICBzZXR1cEpJVCh2bSwgY29kZUJsb2NrLmdldCgpKTsKKyAgICAgICAgaWYgKE9w
dGlvbnM6OnVzZUxMSW50KCkpCisgICAgICAgICAgICBzZXR1cExMSW50KHZtLCBjb2RlQmxvY2su
Z2V0KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXR1cEpJVCh2bSwgY29kZUJsb2Nr
LmdldCgpKTsKKyNpZiBFTkFCTEUoV0FTTSkKKyAgICB9CisjZW5kaWYKICAgICAKICAgICBpbnN0
YWxsQ29kZShjb2RlQmxvY2suZ2V0KCkpOwogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCmluZGV4IDRhMGRiNTY2YjMyY2NhMmMxMjBjZWI2
NDk2YTQ5NTI0MmYyZWE5MGYuLjRlZWJhNTFiZmVjYTVmNjQ4NDRhYzQ0YjFjYWE5NTU3ZWU1NzEz
ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKQEAgLTkw
LDE1ICs5MCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIENvZGVCbG9ja0hhc2ggaGFzaEZv
cihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKSBjb25zdDsKIAotICAgIGJvb2wgaXNFdmFsRXhlY3V0
YWJsZSgpCisgICAgYm9vbCBpc0V2YWxFeGVjdXRhYmxlKCkgY29uc3QKICAgICB7CiAgICAgICAg
IHJldHVybiB0eXBlKCkgPT0gRXZhbEV4ZWN1dGFibGVUeXBlOwogICAgIH0KLSAgICBib29sIGlz
RnVuY3Rpb25FeGVjdXRhYmxlKCkKKyAgICBib29sIGlzRnVuY3Rpb25FeGVjdXRhYmxlKCkgY29u
c3QKICAgICB7CiAgICAgICAgIHJldHVybiB0eXBlKCkgPT0gRnVuY3Rpb25FeGVjdXRhYmxlVHlw
ZTsKICAgICB9Ci0gICAgYm9vbCBpc1Byb2dyYW1FeGVjdXRhYmxlKCkKKyAgICBib29sIGlzUHJv
Z3JhbUV4ZWN1dGFibGUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGUoKSA9PSBQ
cm9ncmFtRXhlY3V0YWJsZVR5cGU7CiAgICAgfQpAQCAtMTA5LDYgKzEwOSwxMCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBtX251bVBhcmFtZXRlcnNGb3JDYWxsID09IE5VTV9QQVJBTUVURVJT
X0lTX0hPU1Q7CiAgICAgfQogCisjaWYgRU5BQkxFKFdBU00pCisgICAgYm9vbCBpc1dlYkFzc2Vt
Ymx5RnVuY3Rpb24oKSBjb25zdDsKKyNlbmRpZgorCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90bykgeyByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG8sIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7IH0KICAgICAg
ICAgCiAgICAgdm9pZCBjbGVhckNvZGUoKTsKQEAgLTU2Miw3ICs1NjYsNyBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgICAgICAKLSAgICBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlKCkKKyAgICBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS5nZXQoKTsKICAgICB9CkBAIC02MzAsNiAr
NjM0LDkgQEAgcHVibGljOgogICAgICAgICAKICAgICBGdW5jdGlvbk1vZGUgZnVuY3Rpb25Nb2Rl
KCkgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmZ1bmN0aW9uTW9kZSgpOyB9CiAgICAg
Ym9vbCBpc0J1aWx0aW5GdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRh
YmxlLT5pc0J1aWx0aW5GdW5jdGlvbigpOyB9CisjaWYgRU5BQkxFKFdBU00pCisgICAgYm9vbCBp
c1dlYkFzc2VtYmx5RnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJs
ZS0+aXNXZWJBc3NlbWJseUZ1bmN0aW9uKCk7IH0KKyNlbmRpZgogICAgIGJvb2wgaXNDbGFzc0Nv
bnN0cnVjdG9yRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+
aXNDbGFzc0NvbnN0cnVjdG9yRnVuY3Rpb24oKTsgfQogICAgIGNvbnN0IElkZW50aWZpZXImIG5h
bWUoKSB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+bmFtZSgpOyB9CiAgICAgY29uc3Qg
SWRlbnRpZmllciYgaW5mZXJyZWROYW1lKCkgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUt
PmluZmVycmVkTmFtZSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQ29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNv
ZGVHZW5lcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNDE3MjEyYmMwZThmMDJmZmU1ZDRiNzllNGI0N2Q2
MGYzMjlkNjJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUNvZGVHZW5lcmF0b3IuaApAQCAtMCwwICsxLDM0MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2FzbUNvZGVHZW5lcmF0b3JfaAor
I2RlZmluZSBXYXNtQ29kZUdlbmVyYXRvcl9oCisKKyNpZiBFTkFCTEUoV0FTTSkKKworI2luY2x1
ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkpJVC5oIgorI2luY2x1ZGUgIkpJVERpc2Fz
c2VtYmxlci5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiTGlu
a0J1ZmZlci5oIgorI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCisj
aW5jbHVkZSAiUmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCituYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIE1vZHVsZTsKKyAgICAKK3N0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdldEludGVybmFsRnVuY3Rpb24oRXhlY1N0
YXRlKiwgTW9kdWxlKiBtb2R1bGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpCit7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShtb2R1bGUtPmZ1bmN0aW9uKGZ1bmN0aW9uSW5kZXgpKTsKK30K
KworY2xhc3MgQ29kZUdlbmVyYXRvciA6IHByaXZhdGUgQ0NhbGxIZWxwZXJzIHsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIGludCBFeHByZXNzaW9uOworICAgIHR5cGVkZWYgaW50IFN0YXRlbWVudDsK
KyAgICB0eXBlZGVmIEp1bXAgSnVtcDsgLy8gRklYTUU6IEJhZCBuYW1lLgorCisgICAgQ29kZUdl
bmVyYXRvcihWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBNb2R1bGUqIG1vZHVsZSkKKyAg
ICAgICAgOiBDQ2FsbEhlbHBlcnModm0sIGNvZGVCbG9jaykKKyAgICAgICAgLCBtX21vZHVsZSht
b2R1bGUpCisgICAgeworICAgICAgICBtX3N0YWNrSGVpZ2h0ID0gODsgLy8gRklYTUU6IENhbGN1
bGF0ZSB0aGUgYWN0dWFsIGhlaWdodC4KKyAgICAgICAgbV9zcCA9IDA7CisgICAgfQorCisgICAg
dm9pZCBzdGFydEZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmIChPcHRpb25zOjpzaG93RGlz
YXNzZW1ibHkoKSkKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyID0gc3RkOjptYWtlX3VuaXF1
ZTxKSVREaXNhc3NlbWJsZXI+KG1fY29kZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGlmICht
X2Rpc2Fzc2VtYmxlcikKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRTdGFydE9mQ29k
ZShsYWJlbCgpKTsKKyAgICAgICAgCisgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKCk7Cisg
ICAgICAgIGVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgSlNT
dGFjazo6Q29kZUJsb2NrKTsKKyAgICAgICAgYWxsb2NhdGVTcGFjZU9uU3RhY2soKTsKKyAgICB9
CisKKyAgICB2b2lkIGVuZEZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9zcCk7
CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogU2tpcCBpZiBsYXN0IHN0bXQgaXMgYSByZXR1
cm4gc3RhdGVtZW50LgorICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7IC8vIEZJWE1FOiBTaG91bGQgd2UgcmV0
dXJuIHVuZGVmaW5lZD8KKworICAgICAgICBkZWFsbG9jYXRlU3BhY2VPblN0YWNrKCk7CisgICAg
ICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgICAgIHJldCgpOworCisgICAgICAgIGlm
IChtX2Rpc2Fzc2VtYmxlcikKKyAgICAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRFbmRPZkNv
ZGUobGFiZWwoKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRMb2NhbFR5cGVzKGNvbnN0IFZlY3Rv
cjxUeXBlPiYgbG9jYWxUeXBlcykKKyAgICB7CisgICAgICAgIG1fbG9jYWxUeXBlcyA9IGxvY2Fs
VHlwZXM7CisgICAgfQorCisgICAgdm9pZCB1bmJveEFyZ3VtZW50KHNpemVfdCBhcmdJbmRleCkK
KyAgICB7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCAoYXJnSW5kZXggKyAxICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSkgKiA4KSwg
R1BSSW5mbzo6cmVnVDApOworICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCBsb2NhbEFk
ZHJlc3MoYXJnSW5kZXgpKTsKKyAgICB9CisKKyAgICB2b2lkIHNldExvY2FsWmVyb0kzMihzaXpl
X3QgbG9jYWxJbmRleCkKKyAgICB7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBs
b2NhbEFkZHJlc3MobG9jYWxJbmRleCkpOworICAgIH0KKworICAgIEV4cHJlc3Npb24gYWRkSTMy
KEV4cHJlc3Npb24sIEV4cHJlc3Npb24pCisgICAgeworICAgICAgICBsb2FkMzIodGVtcG9yYXJ5
QWRkcmVzcyhtX3NwIC0gMiksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKHRlbXBv
cmFyeUFkZHJlc3MobV9zcCAtIDEpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGFkZDMyKEdQ
UkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6
cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MobV9zcCAtIDIpKTsKKyAgICAgICAgbV9zcC0tOworICAg
ICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBFeHByZXNzaW9uIG11bEkzMihFeHByZXNzaW9u
LCBFeHByZXNzaW9uKQorICAgIHsKKyAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MobV9z
cCAtIDIpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNz
KG1fc3AgLSAxKSwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBtdWwzMihHUFJJbmZvOjpyZWdU
MSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1w
b3JhcnlBZGRyZXNzKG1fc3AgLSAyKSk7CisgICAgICAgIG1fc3AtLTsKKyAgICAgICAgcmV0dXJu
IDE7CisgICAgfQorCisgICAgRXhwcmVzc2lvbiByZWdJMzIodWludDMyX3QgaW1tKQorICAgIHsK
KyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoaW1tKSwgdGVtcG9yYXJ5QWRkcmVzcyhtX3Nw
KSk7CisgICAgICAgIG1fc3ArKzsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgRXhw
cmVzc2lvbiByZWdGNjQoZG91YmxlIGltbSkKKyAgICB7CisgICAgICAgIHN0b3JlNjQoVHJ1c3Rl
ZEltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NChpbW0pKSwgdGVtcG9yYXJ5QWRkcmVzcyht
X3NwKSk7CisgICAgICAgIG1fc3ArKzsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAg
dm9pZCBzZXRMb2NhbChFeHByZXNzaW9uLCB1aW50MzJfdCBsb2NhbEluZGV4KQorICAgIHsKKyAg
ICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MobV9zcCAtIDEpLCBHUFJJbmZvOjpyZWdUMCk7
CisgICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIGxvY2FsQWRkcmVzcyhsb2NhbEluZGV4
KSk7CisgICAgICAgIG1fc3AtLTsKKyAgICB9CisKKyAgICBFeHByZXNzaW9uIGdldExvY2FsSTMy
KHVpbnQzMl90IGxvY2FsSW5kZXgpCisgICAgeworICAgICAgICBsb2FkMzIobG9jYWxBZGRyZXNz
KGxvY2FsSW5kZXgpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6
cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MobV9zcCkpOworICAgICAgICBtX3NwKys7CisgICAgICAg
IHJldHVybiAxOworICAgIH0KKworICAgIEV4cHJlc3Npb24gY2FsbEludGVybmFsKHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJndW1lbnRzLCBjb25zdCBWZWN0
b3I8RXhwcmVzc2lvbj4mLCBSZXR1cm5UeXBlIHJldHVyblR5cGUpCisgICAgeworICAgICAgICBz
aXplX3QgYXJndW1lbnRDb3VudCA9IGFyZ3VtZW50cy5zaXplKCk7CisgICAgICAgIAorICAgICAg
ICBpbnQgbmV3U1AgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdp
c3RlcnMoKSwgbV9sb2NhbFR5cGVzLnNpemUoKSArIG1fc3AgKyBhcmd1bWVudENvdW50KSAtIG1f
bG9jYWxUeXBlcy5zaXplKCk7CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1
bWVudENvdW50OyArK2kpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoYXJndW1lbnRzW2ldKSB7Cisg
ICAgICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgICAgICAgICBsb2FkMzIodGVtcG9y
YXJ5QWRkcmVzcyhtX3NwIC0gYXJndW1lbnRDb3VudCArIGkpLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgICAgICAgICAgICAgb3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KEdQUkluZm86OnJlZ1QwLCB0ZW1w
b3JhcnlBZGRyZXNzKG5ld1NQIC0gaSAtIDEpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0b3JlNjQoVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHRlbXBvcmFyeUFkZHJl
c3MobmV3U1ApKTsKKyAgICAgICAgCisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLShuZXdT
UCArIG1fbG9jYWxUeXBlcy5zaXplKCkgKyAzKSAqIDggLSA4KSwgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsgLy8gRklYTUU6IGhhY2t5CisKKyAgICAg
ICAgLy8gLS0tLS0tLS0tLS0tLS0KKworICAgICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2Nv
ZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7CisgICAgICAgIAorICAgICAgICBzdG9yZTMyKFRy
dXN0ZWRJbW0zMihhcmd1bWVudENvdW50ICsgMSksIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0
ZXIsIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdp
c3RlcikpICsgUGF5bG9hZE9mZnNldCAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOworICAg
ICAgICAKKyAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQorICAgICAg
ICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwp
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShUcnVzdGVkSW1tUHRyKG1fbW9kdWxlKSwgVHJ1c3RlZEltbTMyKGZ1bmN0aW9uSW5kZXgp
KTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oZ2V0SW50
ZXJuYWxGdW5jdGlvbikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgY2FsbChHUFJJ
bmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsKQorICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgCisgICAgICAgIG1v
dmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJlZ1QwKTsgLy8gcmVnVDAgaG9s
ZHMgY2FsbGVlLgorICAgICAgICBzdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBZGRyZXNzKHN0YWNr
UG9pbnRlclJlZ2lzdGVyLCBKU1N0YWNrOjpDYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CisgICAgICAgIAorICAg
ICAgICBEYXRhTGFiZWxQdHIgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjazsKKyAgICAgICAg
SnVtcCBzbG93Q2FzZSA9IGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgR1BSSW5mbzo6cmVn
VDAsIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIFRydXN0ZWRJbW1QdHIoMCkpOworCisg
ICAgICAgIC8vIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29k
ZUlEKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgcmVnVDApOworICAgICAgICBpbmZv
LT5zZXRDYWxsZWVHUFIoR1BSSW5mbzo6cmVnVDApOworICAgICAgICBtX2NhbGxDb21waWxhdGlv
bkluZm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7CisgICAgICAgIG1fY2FsbENvbXBp
bGF0aW9uSW5mby5sYXN0KCkuaG90UGF0aEJlZ2luID0gYWRkcmVzc09mTGlua2VkRnVuY3Rpb25D
aGVjazsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmxhc3QoKS5jYWxsTGlua0luZm8g
PSBpbmZvOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8ubGFzdCgpLmhvdFBhdGhPdGhl
ciA9IG5lYXJDYWxsKCk7CisgICAgICAgIAorICAgICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tCisgICAgICAgIAorICAgICAgICBzbG93
Q2FzZS5saW5rKHRoaXMpOworICAgICAgICAKKyAgICAgICAgVGh1bmtHZW5lcmF0b3IgZ2VuZXJh
dG9yID0gbGlua1RodW5rR2VuZXJhdG9yRm9yKENvZGVGb3JDYWxsLCBSZWdpc3RlclByZXNlcnZh
dGlvbk5vdFJlcXVpcmVkKTsKKyAgICAgICAgCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihp
bmZvKSwgR1BSSW5mbzo6cmVnVDIpOworCisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5s
YXN0KCkuY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHVi
KGdlbmVyYXRvcikuY29kZSgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0t
CisgICAgICAgIAorICAgICAgICBlbmQubGluayh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIG1f
c3AgLT0gYXJndW1lbnRDb3VudDsKKyAgICAgICAgCisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoLW1fc3RhY2tIZWlnaHQgKiA4KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsgLy8gRklYTUU6IGhhY2t5CisgICAgICAgIAorICAgICAgICAvLyBG
SVhNRTogQ2FuIHdlIHJlYWxseSB1c2UgcmV0dXJuVmFsdWVHUFI/CisgICAgICAgIHN3aXRjaCAo
cmV0dXJuVHlwZSkgeworICAgICAgICBjYXNlIFJldHVyblR5cGU6OkkzMjoKKyAgICAgICAgICAg
IHN0b3JlMzIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHRlbXBvcmFyeUFkZHJlc3MobV9zcCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9zcCsrOwor
ICAgICAgICAKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgdm9pZCByZXR1cm5JMzIo
RXhwcmVzc2lvbikKKyAgICB7CisgICAgICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKG1fc3Ag
LSAxKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBvcjY0KEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAg
IG1fc3AtLTsKKyAgICAgICAgCisgICAgICAgIGRlYWxsb2NhdGVTcGFjZU9uU3RhY2soKTsKKyAg
ICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgcmV0KCk7CisgICAgfQorICAg
IAorICAgIEp1bXAgZW1pdEp1bXAoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGp1bXAoKTsKKyAg
ICB9CisgICAgCisgICAgSnVtcCBicmFuY2hUZXN0STMyKFJlc3VsdENvbmRpdGlvbiBjb25kaXRp
b24sIEV4cHJlc3Npb24pCisgICAgeworICAgICAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyht
X3NwIC0gMSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgSnVtcCBqID0gYnJhbmNoVGVzdDMy
KGNvbmRpdGlvbiwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBtX3NwLS07CisgICAgICAgIHJl
dHVybiBqOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxpbmtKdW1wKEp1bXAgaikKKyAgICB7Cisg
ICAgICAgIGoubGluayh0aGlzKTsKKyAgICB9CisgICAgCisgICAgUmVmUHRyPEpJVENvZGU+IGpp
dENvZGUoKQorICAgIHsKKyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgKnRo
aXMsIDAsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOworICAgICAgICAKKyAgICAgICAgZm9y
IChhdXRvIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytp
dGVyKQorICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhpdGVyLT5maXJzdCwgRnVuY3Rpb25Q
dHIoaXRlci0+c2Vjb25kKSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBD
YWxsQ29tcGlsYXRpb25JbmZvJiBjb21waWxhdGlvbkluZm8gPSBtX2NhbGxDb21waWxhdGlvbklu
Zm9baV07CisgICAgICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZv
LmNhbGxMaW5rSW5mbzsKKyAgICAgICAgICAgIGluZm8uc2V0Q2FsbExvY2F0aW9ucyhwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY29tcGlsYXRpb25JbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biksCisgICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZihjb21waWxhdGlvbklu
Zm8uaG90UGF0aEJlZ2luKSwKKyAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGwoY29tcGlsYXRpb25JbmZvLmhvdFBhdGhPdGhlcikpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6c2hvd0Rpc2Fzc2VtYmx5KCkpIHsKKyAgICAgICAg
ICAgIG1fZGlzYXNzZW1ibGVyLT5kdW1wKHBhdGNoQnVmZmVyKTsKKyAgICAgICAgICAgIHBhdGNo
QnVmZmVyLmRpZEFscmVhZHlEaXNhc3NlbWJsZSgpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0aEFyaXR5Q2hlY2s7CisgICAgICAgIC8vIFRP
RE86IEltcGxlbWVudCBhcml0eSBjaGVjaworICAgICAgICBDb2RlUmVmIHJlc3VsdCA9IEZJTkFM
SVpFX0NPREUocGF0Y2hCdWZmZXIsICgiQmFzZWxpbmUgSklUIGNvZGUgZm9yIFdlYkFzc2VtYmx5
IikpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3
aXRoQXJpdHlDaGVjaywgSklUQ29kZTo6QmFzZWxpbmVKSVQpKTsKKyAgICB9CisgICAgCitwcml2
YXRlOgorICAgIHZvaWQgYWxsb2NhdGVTcGFjZU9uU3RhY2soKQorICAgIHsKKyAgICAgICAgLy8g
VE9ETzogQ2hlY2sgZm9yIHN0YWNrIG92ZXJmbG93LgorICAgICAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKC1tX3N0YWNrSGVpZ2h0ICogOCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBkZWFsbG9jYXRlU3BhY2VPblN0YWNrKCkKKyAgICB7CisgICAgICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIobV9zdGFja0hlaWdodCAqIDgpLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisgICAgfQorICAgIAorICAgIEFkZHJlc3MgbG9jYWxBZGRyZXNzKGludCBpKSBjb25zdCAv
LyBGSVhNRTogSXMgdGhpcyBjb3JyZWN0PworICAgIHsKKyAgICAgICAgcmV0dXJuIEFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIC1pICogOCAtIDgpOworICAgIH0KKyAgICAKKyAg
ICBBZGRyZXNzIHRlbXBvcmFyeUFkZHJlc3MoaW50IGkpIGNvbnN0IC8vIEZJWE1FOiBJcyB0aGlz
IGNvcnJlY3Q/CisgICAgeworICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgLShpICsgbV9sb2NhbFR5cGVzLnNpemUoKSkgKiA4IC0gOCk7CisgICAgfQor
ICAgIAorICAgIENhbGwgZW1pdE5ha2VkQ2FsbChDb2RlUHRyIGZ1bmN0aW9uKQorICAgIHsKKyAg
ICAgICAgQ2FsbCBuYWtlZENhbGwgPSBuZWFyQ2FsbCgpOworICAgICAgICBtX2NhbGxzLmFwcGVu
ZChzdGQ6Om1ha2VfcGFpcihuYWtlZENhbGwsIGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkp
KTsKKyAgICAgICAgcmV0dXJuIG5ha2VkQ2FsbDsKKyAgICB9CisgICAgCisgICAgTW9kdWxlKiBt
X21vZHVsZTsKKyAgICBpbnQgbV9zdGFja0hlaWdodDsKKyAgICAKKyAgICBpbnQgbV9zcDsgLy8g
RklYTUU6IFJlbmFtZQorCisgICAgVmVjdG9yPFR5cGU+IG1fbG9jYWxUeXBlczsKKworICAgIHN0
ZDo6dW5pcXVlX3B0cjxKSVREaXNhc3NlbWJsZXI+IG1fZGlzYXNzZW1ibGVyOworICAgIFZlY3Rv
cjxzdGQ6OnBhaXI8Q2FsbCwgdm9pZCo+PiBtX2NhbGxzOworICAgIFZlY3RvcjxDYWxsQ29tcGls
YXRpb25JbmZvPiBtX2NhbGxDb21waWxhdGlvbkluZm87Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdBU00pCisKKyNlbmRpZiAvLyBXYXNtQ29k
ZUdlbmVyYXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
RnVuY3Rpb25QYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0
aW9uUGFyc2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNTc0MTJkNjZmN2FmNDlmOWY1MTViMzk0ZDA4YzZl
MDhmZWY0YzJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZ1bmN0aW9uUGFyc2VyLmNwcApAQCAtMCwwICsxLDM5NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXYXNtRnVuY3Rpb25QYXJzZXIuaCIKKworI2lmIEVOQUJMRShXQVNNKQorCisjaW5jbHVk
ZSAiV2FzbUNvZGVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlLmgiCisjaW5jbHVk
ZSAiV2FzbVN5bnRheENoZWNrZXIuaCIKKworI2RlZmluZSBwcm9wYWdhdGVFcnJvcigpIGRvIHsg
aWYgKGhhc0Vycm9yKCkpIHJldHVybiAwOyB9IHdoaWxlICgwKQorI2RlZmluZSBpbnRlcm5hbEZh
aWxXaXRoTWVzc2FnZSguLi4pIGRvIHsgXAorICAgIHByb3BhZ2F0ZUVycm9yKCk7IFwKKyAgICBs
b2dFcnJvcihfX1ZBX0FSR1NfXyk7IFwKKyAgICByZXR1cm4gMDsgXAorfSB3aGlsZSAoMCkKKyNk
ZWZpbmUgZmFpbElmRmFsc2UoY29uZCwgLi4uKSBkbyB7IGlmICghKGNvbmQpKSB7IGludGVybmFs
RmFpbFdpdGhNZXNzYWdlKF9fVkFfQVJHU19fKTsgfSB9IHdoaWxlICgwKQorCituYW1lc3BhY2Ug
SlNDIHsKKworbmFtZXNwYWNlIFdhc20geworCit2b2lkIEZ1bmN0aW9uUGFyc2VyOjpjaGVja1N5
bnRheEFuZENhbGN1bGF0ZVNvdXJjZVJhbmdlKE1vZHVsZSogbW9kdWxlLCBzaXplX3QgZnVuY3Rp
b25JbmRleCwgdW5zaWduZWQgc3RhcnRPZmZzZXRJblNvdXJjZSwgY29uc3QgdWludDhfdComIGVu
ZEN1cnNvcikKK3sKKyAgICBGdW5jdGlvblBhcnNlciBwYXJzZXIobW9kdWxlKTsKKyAgICBTeW50
YXhDaGVja2VyIHN5bnRheENoZWNrZXI7CisgICAgcGFyc2VyLnBhcnNlRnVuY3Rpb24oc3ludGF4
Q2hlY2tlciwgZnVuY3Rpb25JbmRleCwgc3RhcnRPZmZzZXRJblNvdXJjZSk7CisgICAgZW5kQ3Vy
c29yID0gcGFyc2VyLm1fcmVhZGVyLmN1cnNvcigpOworfQorCitSZWZQdHI8SklUQ29kZT4gRnVu
Y3Rpb25QYXJzZXI6OmdlbmVyYXRlQ29kZShWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBN
b2R1bGUqIG1vZHVsZSwgc2l6ZV90IGZ1bmN0aW9uSW5kZXgsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
SW5Tb3VyY2UpCit7CisgICAgRnVuY3Rpb25QYXJzZXIgcGFyc2VyKG1vZHVsZSk7CisgICAgQ29k
ZUdlbmVyYXRvciBjb2RlR2VuZXJhdG9yKHZtLCBjb2RlQmxvY2ssIG1vZHVsZSk7CisgICAgcGFy
c2VyLnBhcnNlRnVuY3Rpb24oY29kZUdlbmVyYXRvciwgZnVuY3Rpb25JbmRleCwgc3RhcnRPZmZz
ZXRJblNvdXJjZSk7CisgICAgCisgICAgcmV0dXJuIGNvZGVHZW5lcmF0b3Iuaml0Q29kZSgpOwor
fQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KK3ZvaWQgRnVuY3Rpb25QYXJzZXI6OnBhcnNl
RnVuY3Rpb24oQ29udGV4dCYgY29udGV4dCwgc2l6ZV90IGZ1bmN0aW9uSW5kZXgsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0SW5Tb3VyY2UpCit7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIg
PSBzdGF0aWNfY2FzdDxXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyKj4obV9tb2R1bGUtPm1fc291
cmNlLnByb3ZpZGVyKCkpLT5kYXRhKCk7CisgICAgbV9yZWFkZXIgPSBSZWFkZXIocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVyLmRhdGEoKSkgKyBzdGFydE9mZnNldEluU291
cmNlKTsKKworICAgIGNvbnRleHQuc3RhcnRGdW5jdGlvbigpOworCisgICAgcGFyc2VTaWduYXR1
cmUoY29udGV4dCwgZnVuY3Rpb25JbmRleCk7CisgICAgcGFyc2VWYXJzKGNvbnRleHQpOworICAg
IGNvbnRleHQuc2V0TG9jYWxUeXBlcyhtX2xvY2FsVHlwZXMpOworICAgIHBhcnNlU3RtdExpc3Qo
Y29udGV4dCk7CisgICAgLy8gVE9ETzogY2hlY2sgZm9yIGVycm9yIGhlcmUKKworICAgIGNvbnRl
eHQuZW5kRnVuY3Rpb24oKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+Cit2b2lkIEZ1
bmN0aW9uUGFyc2VyOjpwYXJzZVNpZ25hdHVyZShDb250ZXh0JiBjb250ZXh0LCBzaXplX3QgZnVu
Y3Rpb25JbmRleCkKK3sKKyAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IG1fbW9kdWxl
LT5tX3NpZ25hdHVyZXNbbV9tb2R1bGUtPm1fZnVuY1NpZ25hdHVyZXNbZnVuY3Rpb25JbmRleF1d
OworICAgIG1fcmV0dXJuVHlwZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlOworICAgIHNpemVfdCBh
cmd1bWVudENvdW50ID0gc2lnbmF0dXJlLmFyZ3VtZW50cy5zaXplKCk7CisgICAgZm9yIChzaXpl
X3QgYXJnSW5kZXggPSAwOyBhcmdJbmRleCA8IGFyZ3VtZW50Q291bnQ7ICsrYXJnSW5kZXgpIHsK
KyAgICAgICAgVHlwZSB0eXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50c1thcmdJbmRleF07CisgICAg
ICAgIG1fbG9jYWxUeXBlcy5hcHBlbmQodHlwZSk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgewor
ICAgICAgICBjYXNlIFR5cGU6OkkzMjoKKyAgICAgICAgICAgIGNvbnRleHQudW5ib3hBcmd1bWVu
dChhcmdJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0Pgordm9pZCBGdW5jdGlvblBhcnNlcjo6cGFyc2VW
YXJzKENvbnRleHQmIGNvbnRleHQpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZJMzJWYXJzID0g
MDsKKyAgICB1aW50MzJfdCBudW1iZXJPZkYzMlZhcnMgPSAwOworICAgIHVpbnQzMl90IG51bWJl
ck9mRjY0VmFycyA9IDA7CisKKyAgICBWYXJUeXBlcyB2YXJUeXBlczsKKyAgICBWYXJUeXBlc1dp
dGhJbW0gdmFyVHlwZXNXaXRoSW1tOworICAgIHVpbnQ4X3QgaW1tOworICAgIGlmIChtX3JlYWRl
ci5jb2RlKCZ2YXJUeXBlcywgJnZhclR5cGVzV2l0aEltbSwgJmltbSkpIHsKKyAgICAgICAgaWYg
KHZhclR5cGVzICYgVmFyVHlwZXM6OkkzMikKKyAgICAgICAgICAgIG51bWJlck9mSTMyVmFycyA9
IG1fcmVhZGVyLmltbVUzMigpOworICAgICAgICBpZiAodmFyVHlwZXMgJiBWYXJUeXBlczo6RjMy
KQorICAgICAgICAgICAgbnVtYmVyT2ZGMzJWYXJzID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAg
ICAgIGlmICh2YXJUeXBlcyAmIFZhclR5cGVzOjpGNjQpCisgICAgICAgICAgICBudW1iZXJPZkY2
NFZhcnMgPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbnVtYmVyT2ZJ
MzJWYXJzID0gaW1tOworCisgICAgdWludDMyX3QgbnVtYmVyT2ZWYXJzID0gbnVtYmVyT2ZJMzJW
YXJzICsgbnVtYmVyT2ZGMzJWYXJzICsgbnVtYmVyT2ZGNjRWYXJzOworICAgIGlmIChudW1iZXJP
ZlZhcnMgPiAwKSB7CisgICAgICAgIHNpemVfdCBsb2NhbEluZGV4ID0gbV9sb2NhbFR5cGVzLnNp
emUoKTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mSTMyVmFyczsg
KytpKSB7CisgICAgICAgICAgICBtX2xvY2FsVHlwZXMuYXBwZW5kKFR5cGU6OkkzMik7CisgICAg
ICAgICAgICBjb250ZXh0LnNldExvY2FsWmVyb0kzMihsb2NhbEluZGV4KyspOworICAgICAgICAg
ICAgLy8gY29udGV4dC5zdG9yZUkzMihUcnVzdGVkSW1tMzIoMCksIHN0YWNrQWRkcmVzcyhsb2Nh
bEluZGV4KyspKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwg
bnVtYmVyT2ZGMzJWYXJzOyArK2kpIHsKKyAgICAgICAgICAgIG1fbG9jYWxUeXBlcy5hcHBlbmQo
VHlwZTo6RjMyKTsKKyAgICAgICAgICAgIC8vIGNvbnRleHQuc3RvcmVGMzIoVHJ1c3RlZEltbTMy
KDApLCBzdGFja0FkZHJlc3MobG9jYWxJbmRleCsrKSk7CisgICAgICAgIH0KKyAgICAgICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mRjY0VmFyczsgKytpKSB7CisgICAgICAgICAg
ICBtX2xvY2FsVHlwZXMuYXBwZW5kKFR5cGU6OkY2NCk7CisgICAgICAgICAgICAvLyBjb250ZXh0
LnN0b3JlRjY0KFRydXN0ZWRJbW02NCgwKSwgc3RhY2tBZGRyZXNzKGxvY2FsSW5kZXgrKykpOwor
ICAgICAgICB9CisgICAgfQorfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRleHRT
dGF0ZW1lbnQgRnVuY3Rpb25QYXJzZXI6OnBhcnNlU3RtdChDb250ZXh0JiBjb250ZXh0KQorewor
ICAgIFN0bXQgc3RtdDsKKyAgICBTdG10V2l0aEltbSBzdG10V2l0aEltbTsKKyAgICB1aW50OF90
IGltbTsKKyAgICBDb250ZXh0U3RhdGVtZW50IHJlc3VsdDsKKyAgICBpZiAobV9yZWFkZXIuY29k
ZSgmc3RtdCwgJnN0bXRXaXRoSW1tLCAmaW1tKSkgeworICAgICAgICBzd2l0Y2ggKHN0bXQpIHsK
KyAgICAgICAgY2FzZSBTdG10OjpTZXRMb2M6CisgICAgICAgICAgICByZXN1bHQgPSBwYXJzZVNl
dExvY2FsU3RtdChjb250ZXh0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0
bXQ6OlJldDoKKyAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlUmV0dXJuU3RtdChjb250ZXh0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0bXQ6OkJsb2NrOgorICAgICAgICAg
ICAgcmVzdWx0ID0gcGFyc2VCbG9ja1N0bXQoY29udGV4dCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBTdG10OjpJZlRoZW46CisgICAgICAgICAgICByZXN1bHQgPSBwYXJzZUlm
U3RtdChjb250ZXh0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0bXQ6Oklm
RWxzZToKKyAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlSWZFbHNlU3RtdChjb250ZXh0KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHN3
aXRjaCAoc3RtdFdpdGhJbW0pIHsKKyAgICAgICAgY2FzZSBTdG10V2l0aEltbTo6U2V0TG9jOgor
ICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2VTZXRMb2NhbFN0bXQoY29udGV4dCwgaW1tKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRleHRTdGF0ZW1lbnQgRnVuY3Rp
b25QYXJzZXI6OnBhcnNlU2V0TG9jYWxTdG10KENvbnRleHQmIGNvbnRleHQsIHVpbnQzMl90IGlt
bSkKK3sKKyAgICBUeXBlIHR5cGUgPSBtX2xvY2FsVHlwZXNbaW1tXTsKKyAgICBDb250ZXh0RXhw
cmVzc2lvbiByID0gcGFyc2VFeHByKGNvbnRleHQsIFJldHVyblR5cGUodHlwZSkpOworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBjb250ZXh0LnNldExv
Y2FsKHIsIGltbSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJldHVybiAxOworfQorCit0ZW1w
bGF0ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRleHRTdGF0ZW1lbnQgRnVuY3Rpb25QYXJzZXI6OnBh
cnNlU2V0TG9jYWxTdG10KENvbnRleHQmIGNvbnRleHQpCit7CisgICAgdWludDMyX3QgaW1tID0g
bV9yZWFkZXIuaW1tVTMyKCk7CisgICAgcGFyc2VTZXRMb2NhbFN0bXQoY29udGV4dCwgaW1tKTsK
KyAgICByZXR1cm4gMTsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0U3Rh
dGVtZW50IEZ1bmN0aW9uUGFyc2VyOjpwYXJzZVJldHVyblN0bXQoQ29udGV4dCYgY29udGV4dCkK
K3sKKyAgICBzd2l0Y2ggKG1fcmV0dXJuVHlwZSkgeworICAgIGNhc2UgUmV0dXJuVHlwZTo6STMy
OiB7CisgICAgICAgIENvbnRleHRFeHByZXNzaW9uIHIgPSBwYXJzZUV4cHJJMzIoY29udGV4dCk7
CisgICAgICAgIGNvbnRleHQucmV0dXJuSTMyKHIpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
CisgICAgcmV0dXJuIDE7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgorQ29udGV4dFN0
YXRlbWVudCBGdW5jdGlvblBhcnNlcjo6cGFyc2VTdG10TGlzdChDb250ZXh0JiBjb250ZXh0KQor
eworICAgIHVpbnQzMl90IG51bWJlck9mU3RtdHMgPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICBm
b3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZTdG10czsgKytpKSB7CisgICAgICAgIENv
bnRleHRTdGF0ZW1lbnQgc3RhdGVtZW50ID0gcGFyc2VTdG10KGNvbnRleHQpOworICAgICAgICBw
cm9wYWdhdGVFcnJvcigpOworICAgICAgICBVTlVTRURfUEFSQU0oc3RhdGVtZW50KTsKKyAgICB9
CisgICAgcmV0dXJuIDE7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgorQ29udGV4dFN0
YXRlbWVudCBGdW5jdGlvblBhcnNlcjo6cGFyc2VCbG9ja1N0bXQoQ29udGV4dCYgY29udGV4dCkK
K3sKKyAgICBwYXJzZVN0bXRMaXN0KGNvbnRleHQpOworICAgIC8vIEZJWE1FOiBjaGVjayBmb3Ig
ZXJyb3IgaGVyZT8KKyAgICByZXR1cm4gMTsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+
CitDb250ZXh0U3RhdGVtZW50IEZ1bmN0aW9uUGFyc2VyOjpwYXJzZUlmU3RtdChDb250ZXh0JiBj
b250ZXh0KQoreworICAgIENvbnRleHRFeHByZXNzaW9uIGNvbmRpdGlvbiA9IHBhcnNlRXhwckkz
Mihjb250ZXh0KTsKKyAgICBmYWlsSWZGYWxzZShjb25kaXRpb24sICJFeHBlY3RlZCBhbiBleHBy
ZXNzaW9uIGFzIHRoZSBjb25kaXRpb24gZm9yIGFuIGlmIHN0YXRlbWVudCIpOworICAgIENvbnRl
eHRKdW1wIGVuZCA9IGNvbnRleHQuYnJhbmNoVGVzdEkzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywg
Y29uZGl0aW9uKTsKKyAgICBDb250ZXh0U3RhdGVtZW50IHRydWVTdGF0ZW1lbnQgPSBwYXJzZVN0
bXQoY29udGV4dCk7CisgICAgZmFpbElmRmFsc2UodHJ1ZVN0YXRlbWVudCwgIkV4cGVjdGVkIGEg
c3RhdGVtZW50IGFzIHRoZSBib2R5IG9mIGFuIGlmIGJsb2NrIik7CisgICAgY29udGV4dC5saW5r
SnVtcChlbmQpOworICAgIHJldHVybiAxOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4K
K0NvbnRleHRTdGF0ZW1lbnQgRnVuY3Rpb25QYXJzZXI6OnBhcnNlSWZFbHNlU3RtdChDb250ZXh0
JiBjb250ZXh0KQoreworICAgIENvbnRleHRFeHByZXNzaW9uIGNvbmRpdGlvbiA9IHBhcnNlRXhw
ckkzMihjb250ZXh0KTsKKyAgICBmYWlsSWZGYWxzZShjb25kaXRpb24sICJFeHBlY3RlZCBhbiBl
eHByZXNzaW9uIGFzIHRoZSBjb25kaXRpb24gZm9yIGFuIGlmIHN0YXRlbWVudCIpOworICAgIENv
bnRleHRKdW1wIGVsc2VKdW1wID0gY29udGV4dC5icmFuY2hUZXN0STMyKE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCBjb25kaXRpb24pOworICAgIENvbnRleHRTdGF0ZW1lbnQgdHJ1ZVN0YXRlbWVudCA9
IHBhcnNlU3RtdChjb250ZXh0KTsKKyAgICBmYWlsSWZGYWxzZSh0cnVlU3RhdGVtZW50LCAiRXhw
ZWN0ZWQgYSBzdGF0ZW1lbnQgYXMgdGhlIGJvZHkgb2YgYW4gaWYgYmxvY2siKTsKKyAgICBDb250
ZXh0SnVtcCBlbmQgPSBjb250ZXh0LmVtaXRKdW1wKCk7CisgICAgY29udGV4dC5saW5rSnVtcChl
bHNlSnVtcCk7CisgICAgQ29udGV4dFN0YXRlbWVudCBmYWxzZVN0YXRlbWVudCA9IHBhcnNlU3Rt
dChjb250ZXh0KTsKKyAgICBmYWlsSWZGYWxzZShmYWxzZVN0YXRlbWVudCwgIkV4cGVjdGVkIGEg
c3RhdGVtZW50IGFzIHRoZSBib2R5IG9mIGFuIGVsc2UgYmxvY2siKTsKKyAgICBjb250ZXh0Lmxp
bmtKdW1wKGVuZCk7CisgICAgcmV0dXJuIDE7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0
PgorQ29udGV4dEV4cHJlc3Npb24gRnVuY3Rpb25QYXJzZXI6OnBhcnNlRXhwcihDb250ZXh0JiBj
b250ZXh0LCBSZXR1cm5UeXBlIHJldHVyblR5cGUpCit7CisgICAgc3dpdGNoIChyZXR1cm5UeXBl
KSB7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpJMzI6CisgICAgICAgIHJldHVybiBwYXJzZUV4cHJJ
MzIoY29udGV4dCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgorQ29udGV4dEV4
cHJlc3Npb24gRnVuY3Rpb25QYXJzZXI6OnBhcnNlRXhwckkzMihDb250ZXh0JiBjb250ZXh0KQor
eworICAgIEkzMiBpMzI7CisgICAgSTMyV2l0aEltbSBpMzJXaXRoSW1tOworICAgIHVpbnQ4X3Qg
aW1tOworCisgICAgaWYgKG1fcmVhZGVyLmNvZGUoJmkzMiwgJmkzMldpdGhJbW0sICZpbW0pKSB7
CisgICAgICAgIHN3aXRjaCAoaTMyKSB7CisgICAgICAgIGNhc2UgSTMyOjpMaXRJbW06CisgICAg
ICAgICAgICByZXR1cm4gcGFyc2VMaXRJbW0oY29udGV4dCwgUmV0dXJuVHlwZTo6STMyKTsKKyAg
ICAgICAgY2FzZSBJMzI6OkdldExvYzoKKyAgICAgICAgICAgIHJldHVybiBwYXJzZUdldExvY2Fs
KGNvbnRleHQpOworICAgICAgICBjYXNlIEkzMjo6Q2FsbEludDoKKyAgICAgICAgICAgIHJldHVy
biBwYXJzZUNhbGxJbnRlcm5hbChjb250ZXh0LCBSZXR1cm5UeXBlOjpJMzIpOworICAgICAgICBj
YXNlIEkzMjo6QWRkOgorICAgICAgICBjYXNlIEkzMjo6TXVsOgorICAgICAgICAgICAgcmV0dXJu
IHBhcnNlQmluYXJ5T3BJMzIoY29udGV4dCwgaTMyKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBzd2l0Y2ggKGkzMldpdGhJbW0pIHsKKyAgICAgICAgY2FzZSBJMzJXaXRo
SW1tOjpMaXRJbW06CisgICAgICAgICAgICByZXR1cm4gcGFyc2VMaXRJbW0oY29udGV4dCwgUmV0
dXJuVHlwZTo6STMyLCBpbW0pOworICAgICAgICBjYXNlIEkzMldpdGhJbW06OkdldExvYzoKKyAg
ICAgICAgICAgIHJldHVybiBwYXJzZUdldExvY2FsKGNvbnRleHQsIGltbSk7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICB9CisgICAgfQorfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRleHRFeHByZXNz
aW9uIEZ1bmN0aW9uUGFyc2VyOjpwYXJzZUxpdEltbShDb250ZXh0JiBjb250ZXh0LCBSZXR1cm5U
eXBlIHJldHVyblR5cGUsIHVpbnQzMl90IGltbSkKK3sKKyAgICBBU1NFUlQocmV0dXJuVHlwZSA9
PSBSZXR1cm5UeXBlOjpJMzIpOworICAgIHJldHVybiBjb250ZXh0LnJlZ0kzMihpbW0pOworfQor
Cit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRleHRFeHByZXNzaW9uIEZ1bmN0aW9uUGFy
c2VyOjpwYXJzZUxpdEltbShDb250ZXh0JiBjb250ZXh0LCBSZXR1cm5UeXBlIHJldHVyblR5cGUp
Cit7CisgICAgc3dpdGNoIChyZXR1cm5UeXBlKSB7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpJMzI6
CisgICAgICAgIHJldHVybiBjb250ZXh0LnJlZ0kzMihtX3JlYWRlci5pbW1VMzIoKSk7CisgICAg
Y2FzZSBSZXR1cm5UeXBlOjpGNjQ6CisgICAgICAgIHJldHVybiBjb250ZXh0LnJlZ0Y2NChtX3Jl
YWRlci5maXhlZFdpZHRoPGRvdWJsZT4oKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KK0Nv
bnRleHRFeHByZXNzaW9uIEZ1bmN0aW9uUGFyc2VyOjpwYXJzZUdldExvY2FsKENvbnRleHQmIGNv
bnRleHQsIHVpbnQzMl90IGltbSkKK3sKKyAgICBzd2l0Y2ggKG1fbG9jYWxUeXBlc1tpbW1dKSB7
CisgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgIHJldHVybiBjb250ZXh0LmdldExvY2FsSTMy
KGltbSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgorQ29udGV4dEV4cHJlc3Np
b24gRnVuY3Rpb25QYXJzZXI6OnBhcnNlR2V0TG9jYWwoQ29udGV4dCYgY29udGV4dCkKK3sKKyAg
ICB1aW50MzJfdCBpbW0gPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICByZXR1cm4gcGFyc2VHZXRM
b2NhbChjb250ZXh0LCBpbW0pOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRl
eHRFeHByZXNzaW9uIEZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNhbGxJbnRlcm5hbChDb250ZXh0JiBj
b250ZXh0LCBSZXR1cm5UeXBlIHJldHVyblR5cGUpCit7CisgICAgdWludDMyX3QgZnVuY3Rpb25J
bmRleCA9IG1fcmVhZGVyLmltbVUzMigpOworICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJl
ID0gbV9tb2R1bGUtPm1fc2lnbmF0dXJlc1ttX21vZHVsZS0+bV9mdW5jU2lnbmF0dXJlc1tmdW5j
dGlvbkluZGV4XV07CisgICAgY29uc3QgVmVjdG9yPFR5cGU+JiBhcmd1bWVudHMgPSBzaWduYXR1
cmUuYXJndW1lbnRzOworICAgIC8vIEZJWE1FOiByZXR1cm5UeXBlIGlzIHJlZHVuZGFudCB3aXRo
IHNpZ25hdHVyZS5yZXR1cm5UeXBlCisKKyAgICBWZWN0b3I8Q29udGV4dEV4cHJlc3Npb24+IGFy
Z3VtZW50UmVnaXN0ZXJzOworICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gYXJndW1lbnRzLnNp
emUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkgewor
ICAgICAgICBzd2l0Y2ggKGFyZ3VtZW50c1tpXSkgeworICAgICAgICBjYXNlIFR5cGU6OkkzMjoK
KyAgICAgICAgICAgIGFyZ3VtZW50UmVnaXN0ZXJzLmFwcGVuZChwYXJzZUV4cHJJMzIoY29udGV4
dCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gY29udGV4
dC5jYWxsSW50ZXJuYWwoZnVuY3Rpb25JbmRleCwgYXJndW1lbnRzLCBhcmd1bWVudFJlZ2lzdGVy
cywgcmV0dXJuVHlwZSk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgorQ29udGV4dEV4
cHJlc3Npb24gRnVuY3Rpb25QYXJzZXI6OnBhcnNlQmluYXJ5T3BJMzIoQ29udGV4dCYgY29udGV4
dCwgSTMyIG9wKQoreworICAgIENvbnRleHRFeHByZXNzaW9uIHIxID0gcGFyc2VFeHBySTMyKGNv
bnRleHQpOworICAgIENvbnRleHRFeHByZXNzaW9uIHIyID0gcGFyc2VFeHBySTMyKGNvbnRleHQp
OworCisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgSTMyOjpBZGQ6CisgICAgICAgIHJldHVy
biBjb250ZXh0LmFkZEkzMihyMSwgcjIpOworICAgIGNhc2UgSTMyOjpNdWw6CisgICAgICAgIHJl
dHVybiBjb250ZXh0Lm11bEkzMihyMSwgcjIpOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEE+Cit2b2lk
IEZ1bmN0aW9uUGFyc2VyOjpsb2dFcnJvcihjb25zdCBBJiB2YWx1ZTEpCit7CisgICAgaWYgKGhh
c0Vycm9yKCkpCisgICAgICAgIHJldHVybjsKKyAgICBTdHJpbmdQcmludFN0cmVhbSBzdHJlYW07
CisgICAgc3RyZWFtLnByaW50KHZhbHVlMSwgIi4iKTsKKyAgICBzZXRFcnJvck1lc3NhZ2Uoc3Ry
ZWFtLnRvU3RyaW5nKCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5k
aWYgLy8gRU5BQkxFKFdBU00pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRnVuY3Rpb25QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
dW5jdGlvblBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAxMDQzN2I1MDI4NDlmNjUxZjQ2YWUyYmU5ZTcw
OTI1NTU0ZGJlMjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRnVuY3Rpb25QYXJzZXIuaApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2FzbUZ1bmN0aW9uUGFyc2Vy
X2gKKyNkZWZpbmUgV2FzbUZ1bmN0aW9uUGFyc2VyX2gKKworI2lmIEVOQUJMRShXQVNNKQorCisj
aW5jbHVkZSAiU291cmNlQ29kZS5oIgorI2luY2x1ZGUgIldhc21SZWFkZXIuaCIKKworI2RlZmlu
ZSBDb250ZXh0RXhwcmVzc2lvbiB0eXBlbmFtZSBDb250ZXh0OjpFeHByZXNzaW9uCisjZGVmaW5l
IENvbnRleHRTdGF0ZW1lbnQgdHlwZW5hbWUgQ29udGV4dDo6U3RhdGVtZW50CisjZGVmaW5lIENv
bnRleHRKdW1wIHR5cGVuYW1lIENvbnRleHQ6Okp1bXAKKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIENvZGVCbG9jazsKK2NsYXNzIEpJVENvZGU7CitjbGFzcyBWTTsKKworbmFtZXNwYWNlIFdh
c20geworCitjbGFzcyBNb2R1bGU7CisKK2NsYXNzIEZ1bmN0aW9uUGFyc2VyIHsKK3B1YmxpYzoK
KyAgICBGdW5jdGlvblBhcnNlcihNb2R1bGUqIG1vZHVsZSkKKyAgICAgICAgOiBtX21vZHVsZSht
b2R1bGUpCisgICAgeworICAgIH0KKworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiB2b2lk
IHBhcnNlRnVuY3Rpb24oQ29udGV4dCYsIHNpemVfdCBmdW5jdGlvbkluZGV4LCB1bnNpZ25lZCBz
dGFydE9mZnNldEluU291cmNlKTsKKyAgICBjb25zdCBSZWFkZXImIHJlYWRlcigpIGNvbnN0IHsg
cmV0dXJuIG1fcmVhZGVyOyB9CisgICAgCisgICAgc3RhdGljIHZvaWQgY2hlY2tTeW50YXhBbmRD
YWxjdWxhdGVTb3VyY2VSYW5nZShNb2R1bGUqLCBzaXplX3QgZnVuY3Rpb25JbmRleCwgdW5zaWdu
ZWQgc3RhcnRPZmZzZXRJblNvdXJjZSwgY29uc3QgdWludDhfdComIGVuZEN1cnNvcik7CisgICAg
c3RhdGljIFJlZlB0cjxKSVRDb2RlPiBnZW5lcmF0ZUNvZGUoVk0qLCBDb2RlQmxvY2sqLCBNb2R1
bGUqLCBzaXplX3QgZnVuY3Rpb25JbmRleCwgdW5zaWduZWQgc3RhcnRPZmZzZXRJblNvdXJjZSk7
CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IHZvaWQgcGFyc2VTaWdu
YXR1cmUoQ29udGV4dCYsIHNpemVfdCBmdW5jdGlvbkluZGV4KTsKKyAgICB0ZW1wbGF0ZSA8Y2xh
c3MgQ29udGV4dD4gdm9pZCBwYXJzZVZhcnMoQ29udGV4dCYpOworCisgICAgdGVtcGxhdGUgPGNs
YXNzIENvbnRleHQ+IENvbnRleHRTdGF0ZW1lbnQgcGFyc2VTdG10KENvbnRleHQmKTsKKyAgICB0
ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dFN0YXRlbWVudCBwYXJzZVNldExvY2FsU3Rt
dChDb250ZXh0JiwgdWludDMyX3QgaW1tKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4g
Q29udGV4dFN0YXRlbWVudCBwYXJzZVNldExvY2FsU3RtdChDb250ZXh0Jik7CisgICAgdGVtcGxh
dGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRTdGF0ZW1lbnQgcGFyc2VSZXR1cm5TdG10KENvbnRl
eHQmKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dFN0YXRlbWVudCBwYXJz
ZVN0bXRMaXN0KENvbnRleHQmKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4
dFN0YXRlbWVudCBwYXJzZUJsb2NrU3RtdChDb250ZXh0Jik7CisgICAgdGVtcGxhdGUgPGNsYXNz
IENvbnRleHQ+IENvbnRleHRTdGF0ZW1lbnQgcGFyc2VJZlN0bXQoQ29udGV4dCYpOworICAgIHRl
bXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0U3RhdGVtZW50IHBhcnNlSWZFbHNlU3RtdChD
b250ZXh0Jik7CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Np
b24gcGFyc2VFeHByKENvbnRleHQmLCBSZXR1cm5UeXBlKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
Q29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VFeHBySTMyKENvbnRleHQmKTsKKyAgICB0
ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VMaXRJbW0oQ29u
dGV4dCYsIFJldHVyblR5cGUsIHVpbnQzMl90IGltbSk7CisgICAgdGVtcGxhdGUgPGNsYXNzIENv
bnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlTGl0SW1tKENvbnRleHQmLCBSZXR1cm5UeXBl
KTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VH
ZXRMb2NhbChDb250ZXh0JiwgdWludDMyX3QgaW1tKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29u
dGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VHZXRMb2NhbChDb250ZXh0Jik7CisgICAgdGVt
cGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlQ2FsbEludGVybmFs
KENvbnRleHQmLCBSZXR1cm5UeXBlKTsKKyAgICAKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4
dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VCaW5hcnlPcEkzMihDb250ZXh0JiwgSTMyIG9wKTsK
KyAgICAKKyAgICB2b2lkIHNldEVycm9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCisg
ICAgeworICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgfQorICAgIAorICAg
IGJvb2wgaGFzRXJyb3IoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX2Vycm9yTWVz
c2FnZS5pc051bGwoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQT4gdm9pZCBs
b2dFcnJvcihjb25zdCBBJik7CisKKyAgICBNb2R1bGUqIG1fbW9kdWxlOworICAgIFJlYWRlciBt
X3JlYWRlcjsKKyAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7CisKKyAgICBSZXR1cm5UeXBlIG1f
cmV0dXJuVHlwZTsKKyAgICBWZWN0b3I8VHlwZT4gbV9sb2NhbFR5cGVzOworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXQVNNKQorCisjZW5kaWYg
Ly8gV2FzbUZ1bmN0aW9uUGFyc2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21Nb2R1bGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZTgxMDQ3NzVjZTJkODVkZGNiZDEzYzRmZDEyN2QxZTFlY2Ix
Zjk4NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
b2R1bGUuY3BwCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldhc21Nb2R1
bGUuaCIKKworI2lmIEVOQUJMRShXQVNNKQorCisjaW5jbHVkZSAiSklUQ29kZS5oIgorI2luY2x1
ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAi
UmVqZWN0LmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdh
c20geworCitjb25zdCBDbGFzc0luZm8gTW9kdWxlOjpzX2luZm8gPSB7ICJNb2R1bGUiLCAmQmFz
ZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKE1vZHVsZSkgfTsKKwordm9pZCBNb2R1
bGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
K3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisKKyAgICAvLyBUT0RPOiBNYWtlIHRo
aXMgbGVzcyBoYWNreQorICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIgPSBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKDEwMjQsIDEpOworICAgIEpTQXJyYXlCdWZmZXIqIGpzQXJyYXlCdWZm
ZXIgPSBKU0FycmF5QnVmZmVyOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+YXJyYXlCdWZmZXJT
dHJ1Y3R1cmUoKSwgYXJyYXlCdWZmZXIucmVsZWFzZSgpKTsKKyAgICBtX2FycmF5QnVmZmVyLnNl
dCh2bSwgdGhpcywganNBcnJheUJ1ZmZlcik7Cit9CisKK0pTRnVuY3Rpb24qIE1vZHVsZTo6ZnVu
Y3Rpb24oc2l6ZV90IGZ1bmN0aW9uSW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZnVuY3Rp
b25zW2Z1bmN0aW9uSW5kZXhdLmdldCgpOworfQorCitjb25zdCB2b2lkKiBNb2R1bGU6OmFycmF5
QnVmZmVyRGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYXJyYXlCdWZmZXItPmltcGwoKS0+
ZGF0YSgpOworfQorCit2b2lkIE1vZHVsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIE1vZHVsZSogdGhpc09iamVjdCA9IHN0YXRpY19j
YXN0PE1vZHVsZSo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOworICAgIGZvciAoYXV0byBmdW5jdGlvbiA6IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25zKQor
ICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZnVuY3Rpb24pOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0
aGlzT2JqZWN0LT5tX2FycmF5QnVmZmVyKTsKK30KKworYm9vbCBNb2R1bGU6OmdldE93blByb3Bl
cnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBNb2R1bGUqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8TW9kdWxlKj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlz
T2JqZWN0LCBEb250RGVsZXRlIHwgUmVhZE9ubHksIHRoaXNPYmplY3QtPm1fYXJyYXlCdWZmZXIu
Z2V0KCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gQmFzZTo6
Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
Cit9CisKK3ZvaWQgTW9kdWxlOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYg
c2xvdCkKK3sKKyAgICBNb2R1bGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8TW9kdWxlKj4oY2VsbCk7
CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKSB7
CisgICAgICAgIHJlamVjdChleGVjLCBzbG90LmlzU3RyaWN0TW9kZSgpLCAiQXR0ZW1wdGluZyB0
byB3cml0ZSB0byBhIHJlYWQtb25seSBhcnJheSBidWZmZXIgcHJvcGVydHkuIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgc2xvdCk7Cit9CisKK2Jvb2wgTW9kdWxlOjpkZWZpbmVPd25Qcm9wZXJ0
eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRU
aHJvdykKK3sKKyAgICBNb2R1bGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8TW9kdWxlKj4ob2JqZWN0
KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIp
CisgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRv
IGRlZmluZSByZWFkLW9ubHkgYXJyYXkgYnVmZmVyIHByb3BlcnR5LiIpOworCisgICAgcmV0dXJu
IEJhc2U6OmRlZmluZU93blByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworfQorCitib29sIE1vZHVsZTo6ZGVsZXRlUHJvcGVy
dHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpCit7CisgICAgTW9kdWxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PE1vZHVsZSo+KGNlbGwpOwor
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0
eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworfQorCit2b2lkIE1vZHVsZTo6Z2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAg
ICBNb2R1bGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8TW9kdWxlKj4ob2JqZWN0KTsKKyAgICBpZiAo
bW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpCisgICAgICAgIGFycmF5LmFkZChleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKTsKKyAgICAKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgYXJyYXksIG1vZGUpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdBU00pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjcyNDRlYjRlZDc2Zjk1
MTNjODhlOTM1NjljNjdjY2NjNDAwMjFiMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGUuaApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2FzbU1vZHVsZV9o
CisjZGVmaW5lIFdhc21Nb2R1bGVfaAorCisjaWYgRU5BQkxFKFdBU00pCisKKyNpbmNsdWRlICJK
U09iamVjdC5oIgorI2luY2x1ZGUgIldhc21PcGNvZGVzLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CituYW1lc3BhY2UgV2FzbSB7CisKK2NsYXNzIEZ1bmN0aW9uUGFyc2VyOworY2xhc3MgTW9kdWxl
UGFyc2VyOworCitjbGFzcyBNb2R1bGUgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJs
aWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlk
ZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90OworCisgICAg
c3RhdGljIE1vZHVsZSogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQorICAgIHsKKyAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCk7IC8vIEZJWE1FOiBJ
cyB0aGlzIHJpZ2h0PworICAgICAgICBNb2R1bGUqIG1vZHVsZSA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPE1vZHVsZT4odm0uaGVhcCkpIE1vZHVsZSh2bSwgc3RydWN0dXJlLCBzb3VyY2Up
OworICAgICAgICBtb2R1bGUtPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAg
ICAgICByZXR1cm4gbW9kdWxlOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwganNOdWxsKCksIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbihzaXplX3Qg
ZnVuY3Rpb25JbmRleCkgY29uc3Q7CisgICAgY29uc3QgU3RyaW5nJiBmdW5jdGlvbkltcG9ydE5h
bWUoc2l6ZV90IGZ1bmN0aW9uSW1wb3J0SW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25J
bXBvcnROYW1lc1tmdW5jdGlvbkltcG9ydEluZGV4XTsgfQorICAgIGNvbnN0IHZvaWQqIGFycmF5
QnVmZmVyRGF0YSgpIGNvbnN0OworCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBGdW5jdGlv
blBhcnNlcjsKKyAgICBmcmllbmQgY2xhc3MgTW9kdWxlUGFyc2VyOworCisgICAgc3RydWN0IEZ1
bmNJbXBvcnRTaWduYXR1cmUgeworICAgICAgICB1aW50MzJfdCBzaWduYXR1cmVJbmRleDsKKyAg
ICAgICAgdWludDMyX3QgZnVuY0ltcG9ydEluZGV4OworICAgIH07CisKKyAgICBzdHJ1Y3QgRnVu
Y1B0clRhYmxlIHsKKyAgICAgICAgdWludDMyX3Qgc2lnbmF0dXJlSW5kZXg7CisgICAgICAgIFZl
Y3Rvcjx1aW50MzJfdD4gZWxlbWVudHM7CisgICAgfTsKKworICAgIE1vZHVsZShWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCisgICAgICAgIDog
QmFzZSh2bSwgc3RydWN0dXJlKQorICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKKyAgICB7Cisg
ICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0Kik7CisK
KyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0Nl
bGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
OworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRo
cm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKTsKKworICAgIFNvdXJjZUNvZGUgbV9zb3VyY2U7CisKKyAgICBWZWN0b3I8U2lnbmF0
dXJlPiBtX3NpZ25hdHVyZXM7CisgICAgVmVjdG9yPHVpbnQzMl90PiBtX2NvbnN0YW50STMyczsK
KyAgICBWZWN0b3I8ZmxvYXQ+IG1fY29uc3RhbnRGMzJzOworICAgIFZlY3Rvcjxkb3VibGU+IG1f
Y29uc3RhbnRGNjRzOworICAgIFZlY3RvcjxTdHJpbmc+IG1fZnVuY3Rpb25JbXBvcnROYW1lczsK
KyAgICBWZWN0b3I8RnVuY0ltcG9ydFNpZ25hdHVyZT4gbV9mdW5jSW1wb3J0U2lnbmF0dXJlczsK
KyAgICBWZWN0b3I8VHlwZT4gbV9nbG9iYWxUeXBlczsKKyAgICBWZWN0b3I8dWludDMyX3Q+IG1f
ZnVuY1NpZ25hdHVyZXM7CisgICAgVmVjdG9yPEZ1bmNQdHJUYWJsZT4gbV9mdW5jUHRyVGFibGVz
OworCisgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPj4gbV9mdW5jdGlvbnM7Cisg
ICAgV3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZmZXI+IG1fYXJyYXlCdWZmZXI7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdBU00pCisKKyNlbmRp
ZiAvLyBXYXNtTW9kdWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZVBhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWVjMmU5NWExODM0NTkzMTIyNDM4ZTBmZDhlNWU0
Yzk5ZTg5MDQ3NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVQYXJzZXIuY3BwCkBAIC0wLDAgKzEsMjYzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyBMaWNlbnNlZCB1bmRlciB0aGUgQXBh
Y2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyB5b3UgbWF5IG5vdCB1
c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgWW91
IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyBodHRwOi8vd3d3LmFwYWNo
ZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNh
YmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyBkaXN0cmlidXRlZCB1
bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIFdJ
VEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVz
cyBvciBpbXBsaWVkLgorIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdl
IGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5z
ZS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlUGFyc2Vy
LmgiCisKKyNpZiBFTkFCTEUoV0FTTSkKKworI2luY2x1ZGUgIkpJVENvZGUuaCIKKyNpbmNsdWRl
ICJKU0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIldh
c21GdW5jdGlvblBhcnNlci5oIgorI2luY2x1ZGUgIldhc21PcGNvZGVzLmgiCisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNl
IFdhc20geworCitNb2R1bGUqIE1vZHVsZVBhcnNlcjo6cGFyc2UoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCit7CisgICAgY29u
c3QgVmVjdG9yPGNoYXI+JiBidWZmZXIgPSBzdGF0aWNfY2FzdDxXZWJBc3NlbWJseVNvdXJjZVBy
b3ZpZGVyKj4oc291cmNlLnByb3ZpZGVyKCkpLT5kYXRhKCk7CisgICAgbV9tb2R1bGUgPSBNb2R1
bGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UpOworCisgICAgbV9yZWFkZXIgPSBS
ZWFkZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVyLmRhdGEoKSkpOwor
ICAgIGlmIChtX3JlYWRlci5maXhlZFdpZHRoPHVpbnQzMl90PigpICE9IG1hZ2ljTnVtYmVyKQor
ICAgICAgICBhYm9ydCgpOworICAgIG1fcmVhZGVyLmZpeGVkV2lkdGg8dWludDMyX3Q+KCk7IC8v
IG91dHB1dCBzaXplIGluIGFzbS5qcyBmb3JtYXQKKworICAgIHBhcnNlQ29uc3RhbnRQb29sU2Vj
dGlvbigpOworICAgIHBhcnNlU2lnbmF0dXJlU2VjdGlvbigpOworICAgIHBhcnNlRnVuY3Rpb25J
bXBvcnRTZWN0aW9uKCk7CisgICAgcGFyc2VHbG9iYWxTZWN0aW9uKCk7CisgICAgcGFyc2VGdW5j
dGlvbkRlY2xhcmF0aW9uU2VjdGlvbigpOworICAgIHBhcnNlRnVuY3Rpb25Qb2ludGVyVGFibGVz
KCk7CisgICAgcGFyc2VGdW5jdGlvbkRlZmluaXRpb25TZWN0aW9uKHZtLCBnbG9iYWxPYmplY3Qp
OworICAgIHBhcnNlRXhwb3J0U2VjdGlvbih2bSk7CisgICAgCisgICAgcmV0dXJuIG1fbW9kdWxl
OworfQorCit2b2lkIE1vZHVsZVBhcnNlcjo6cGFyc2VDb25zdGFudFBvb2xTZWN0aW9uKCkKK3sK
KyAgICB1aW50MzJfdCBudW1iZXJPZkkzMnMgPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICB1aW50
MzJfdCBudW1iZXJPZkYzMnMgPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICB1aW50MzJfdCBudW1i
ZXJPZkY2NHMgPSBtX3JlYWRlci5pbW1VMzIoKTsKKworICAgIFZlY3Rvcjx1aW50MzJfdD4gY29u
c3RhbnRJMzJzKG51bWJlck9mSTMycyk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51
bWJlck9mSTMyczsgKytpKQorICAgICAgICBjb25zdGFudEkzMnNbaV0gPSBtX3JlYWRlci5pbW1V
MzIoKTsKKworICAgIFZlY3RvcjxmbG9hdD4gY29uc3RhbnRGMzJzKG51bWJlck9mRjMycyk7Cisg
ICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mRjMyczsgKytpKQorICAgICAgICBj
b25zdGFudEYzMnNbaV0gPSBtX3JlYWRlci5maXhlZFdpZHRoPGZsb2F0PigpOworCisgICAgVmVj
dG9yPGRvdWJsZT4gY29uc3RhbnRGNjRzKG51bWJlck9mRjY0cyk7CisgICAgZm9yICh1aW50MzJf
dCBpID0gMDsgaSA8IG51bWJlck9mRjY0czsgKytpKQorICAgICAgICBjb25zdGFudEY2NHNbaV0g
PSBtX3JlYWRlci5maXhlZFdpZHRoPGRvdWJsZT4oKTsKKworICAgIG1fbW9kdWxlLT5tX2NvbnN0
YW50STMycyA9IFdURjo6bW92ZShjb25zdGFudEkzMnMpOworICAgIG1fbW9kdWxlLT5tX2NvbnN0
YW50RjMycyA9IFdURjo6bW92ZShjb25zdGFudEYzMnMpOworICAgIG1fbW9kdWxlLT5tX2NvbnN0
YW50RjY0cyA9IFdURjo6bW92ZShjb25zdGFudEY2NHMpOworfQorCit2b2lkIE1vZHVsZVBhcnNl
cjo6cGFyc2VTaWduYXR1cmVTZWN0aW9uKCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZlNpZ25h
dHVyZXMgPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICBWZWN0b3I8U2lnbmF0dXJlPiBzaWduYXR1
cmVzKG51bWJlck9mU2lnbmF0dXJlcyk7CisgICAgZm9yICh1aW50MzJfdCBzaWduYXR1cmVJbmRl
eCA9IDA7IHNpZ25hdHVyZUluZGV4IDwgbnVtYmVyT2ZTaWduYXR1cmVzOyArK3NpZ25hdHVyZUlu
ZGV4KSB7CisgICAgICAgIFJldHVyblR5cGUgcmV0dXJuVHlwZSA9IG1fcmVhZGVyLnJldHVyblR5
cGUoKTsKKyAgICAgICAgdWludDMyX3QgYXJndW1lbnRDb3VudCA9IG1fcmVhZGVyLmltbVUzMigp
OworICAgICAgICBTaWduYXR1cmUgc2lnbmF0dXJlKHJldHVyblR5cGUsIGFyZ3VtZW50Q291bnQp
OworICAgICAgICBmb3IgKHVpbnQzMl90IGFyZ3VtZW50SW5kZXggPSAwOyBhcmd1bWVudEluZGV4
IDwgYXJndW1lbnRDb3VudDsgKythcmd1bWVudEluZGV4KQorICAgICAgICAgICAgc2lnbmF0dXJl
LmFyZ3VtZW50c1thcmd1bWVudEluZGV4XSA9IG1fcmVhZGVyLnR5cGUoKTsKKyAgICAgICAgc2ln
bmF0dXJlc1tzaWduYXR1cmVJbmRleF0gPSBXVEY6Om1vdmUoc2lnbmF0dXJlKTsKKyAgICB9CisK
KyAgICBtX21vZHVsZS0+bV9zaWduYXR1cmVzID0gV1RGOjptb3ZlKHNpZ25hdHVyZXMpOworfQor
Cit2b2lkIE1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkltcG9ydFNlY3Rpb24oKQoreworICAg
IHVpbnQzMl90IG51bWJlck9mRnVuY0ltcG9ydHMgPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICB1
aW50MzJfdCBudW1iZXJPZkZ1bmNJbXBvcnRTaWduYXR1cmVzID0gbV9yZWFkZXIuaW1tVTMyKCk7
CisKKyAgICBtX21vZHVsZS0+bV9mdW5jdGlvbkltcG9ydE5hbWVzLnJlc2VydmVDYXBhY2l0eShu
dW1iZXJPZkZ1bmNJbXBvcnRzKTsKKworICAgIFZlY3RvcjxNb2R1bGU6OkZ1bmNJbXBvcnRTaWdu
YXR1cmU+IGZ1bmNJbXBvcnRTaWduYXR1cmVzKG51bWJlck9mRnVuY0ltcG9ydFNpZ25hdHVyZXMp
OworICAgIE1vZHVsZTo6RnVuY0ltcG9ydFNpZ25hdHVyZSogZnVuY0ltcG9ydFNpZ25hdHVyZSA9
IGZ1bmNJbXBvcnRTaWduYXR1cmVzLmRhdGEoKTsKKyAgICBmb3IgKHVpbnQzMl90IGZ1bmNJbXBv
cnRJbmRleCA9IDA7IGZ1bmNJbXBvcnRJbmRleCA8IG51bWJlck9mRnVuY0ltcG9ydHM7ICsrZnVu
Y0ltcG9ydEluZGV4KSB7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAg
d2hpbGUgKGNoYXIgYyA9IG1fcmVhZGVyLnNpbmdsZUNoYXIoKSkKKyAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKGMpOworICAgICAgICBtX21vZHVsZS0+bV9mdW5jdGlvbkltcG9ydE5hbWVzLmFw
cGVuZChidWlsZGVyLnRvU3RyaW5nKCkpOworCisgICAgICAgIHVpbnQzMl90IG51bWJlck9mU2ln
bmF0dXJlcyA9IG1fcmVhZGVyLmltbVUzMigpOworICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDwgbnVtYmVyT2ZTaWduYXR1cmVzOyArK2kpIHsKKyAgICAgICAgICAgIGZ1bmNJbXBvcnRT
aWduYXR1cmUtPnNpZ25hdHVyZUluZGV4ID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgICAgICAg
ICBmdW5jSW1wb3J0U2lnbmF0dXJlLT5mdW5jSW1wb3J0SW5kZXggPSBmdW5jSW1wb3J0SW5kZXg7
CisgICAgICAgICAgICBmdW5jSW1wb3J0U2lnbmF0dXJlKys7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgYXNzZXJ0KGZ1bmNJbXBvcnRTaWduYXR1cmUgPT0gZnVuY0ltcG9ydFNpZ25hdHVyZXMuZGF0
YSgpICsgbnVtYmVyT2ZGdW5jSW1wb3J0U2lnbmF0dXJlcyk7CisKKyAgICBtX21vZHVsZS0+bV9m
dW5jSW1wb3J0U2lnbmF0dXJlcyA9IFdURjo6bW92ZShmdW5jSW1wb3J0U2lnbmF0dXJlcyk7Cit9
CisKK3ZvaWQgTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbFNlY3Rpb24oKQoreworICAgIHVpbnQz
Ml90IG51bWJlck9mSTMyWmVybyA9IG1fcmVhZGVyLmltbVUzMigpOworICAgIHVpbnQzMl90IG51
bWJlck9mRjMyWmVybyA9IG1fcmVhZGVyLmltbVUzMigpOworICAgIHVpbnQzMl90IG51bWJlck9m
RjY0WmVybyA9IG1fcmVhZGVyLmltbVUzMigpOworICAgIHVpbnQzMl90IG51bWJlck9mSTMySW1w
b3J0ID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGMzJJbXBvcnQg
PSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICB1aW50MzJfdCBudW1iZXJPZkY2NEltcG9ydCA9IG1f
cmVhZGVyLmltbVUzMigpOworICAgIHVpbnQzMl90IG51bWJlck9mR2xvYmFsVmFycyA9IG51bWJl
ck9mSTMyWmVybyArIG51bWJlck9mRjMyWmVybyArIG51bWJlck9mRjY0WmVybyArIG51bWJlck9m
STMySW1wb3J0ICsgbnVtYmVyT2ZGMzJJbXBvcnQgKyBudW1iZXJPZkY2NEltcG9ydDsKKworICAg
IFZlY3RvcjxUeXBlPiBnbG9iYWxUeXBlcyhudW1iZXJPZkdsb2JhbFZhcnMpOworICAgIHNpemVf
dCBnbG9iYWxUeXBlSW5kZXggPSAwOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1i
ZXJPZkkzMlplcm87ICsraSkKKyAgICAgICAgZ2xvYmFsVHlwZXNbZ2xvYmFsVHlwZUluZGV4Kytd
ID0gVHlwZTo6STMyOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkYzMlpl
cm87ICsraSkKKyAgICAgICAgZ2xvYmFsVHlwZXNbZ2xvYmFsVHlwZUluZGV4KytdID0gVHlwZTo6
RjMyOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkY2NFplcm87ICsraSkK
KyAgICAgICAgZ2xvYmFsVHlwZXNbZ2xvYmFsVHlwZUluZGV4KytdID0gVHlwZTo6RjY0OworICAg
IGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkkzMkltcG9ydDsgKytpKSB7CisgICAg
ICAgIHdoaWxlIChtX3JlYWRlci5zaW5nbGVDaGFyKCkpIHsgfQorICAgICAgICBnbG9iYWxUeXBl
c1tnbG9iYWxUeXBlSW5kZXgrK10gPSBUeXBlOjpJMzI7CisgICAgfQorICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBudW1iZXJPZkYzMkltcG9ydDsgKytpKSB7CisgICAgICAgIHdoaWxlICht
X3JlYWRlci5zaW5nbGVDaGFyKCkpIHsgfQorICAgICAgICBnbG9iYWxUeXBlc1tnbG9iYWxUeXBl
SW5kZXgrK10gPSBUeXBlOjpGMzI7CisgICAgfQorICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkg
PCBudW1iZXJPZkY2NEltcG9ydDsgKytpKSB7CisgICAgICAgIHdoaWxlIChtX3JlYWRlci5zaW5n
bGVDaGFyKCkpIHsgfQorICAgICAgICBnbG9iYWxUeXBlc1tnbG9iYWxUeXBlSW5kZXgrK10gPSBU
eXBlOjpGNjQ7CisgICAgfQorICAgIG1fbW9kdWxlLT5tX2dsb2JhbFR5cGVzID0gV1RGOjptb3Zl
KGdsb2JhbFR5cGVzKTsKK30KKwordm9pZCBNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWNs
YXJhdGlvblNlY3Rpb24oKQoreworICAgIHVpbnQzMl90IG51bWJlck9mRnVuY3Rpb25zID0gbV9y
ZWFkZXIuaW1tVTMyKCk7CisgICAgVmVjdG9yPHVpbnQzMl90PiBmdW5jU2lnbmF0dXJlcyhudW1i
ZXJPZkZ1bmN0aW9ucyk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mRnVu
Y3Rpb25zOyArK2kpCisgICAgICAgIGZ1bmNTaWduYXR1cmVzW2ldID0gbV9yZWFkZXIuaW1tVTMy
KCk7CisKKyAgICBtX21vZHVsZS0+bV9mdW5jU2lnbmF0dXJlcyA9IFdURjo6bW92ZShmdW5jU2ln
bmF0dXJlcyk7Cit9CisKK3ZvaWQgTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uUG9pbnRlclRh
YmxlcygpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jUHRyVGFibGVzID0gbV9yZWFkZXIu
aW1tVTMyKCk7CisgICAgVmVjdG9yPE1vZHVsZTo6RnVuY1B0clRhYmxlPiBmdW5jUHRyVGFibGVz
KG51bWJlck9mRnVuY1B0clRhYmxlcyk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51
bWJlck9mRnVuY1B0clRhYmxlczsgKytpKSB7CisgICAgICAgIGZ1bmNQdHJUYWJsZXNbaV0uc2ln
bmF0dXJlSW5kZXggPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICAgICAgdWludDMyX3QgbnVtRWxl
bWVudHMgPSBtX3JlYWRlci5pbW1VMzIoKTsKKyAgICAgICAgVmVjdG9yPHVpbnQzMl90PiBlbGVt
ZW50cyhudW1FbGVtZW50cyk7CisgICAgICAgIGZvciAodWludDMyX3QgaiA9IDA7IGogPCBudW1F
bGVtZW50czsgKytqKQorICAgICAgICAgICAgZWxlbWVudHNbal0gPSBtX3JlYWRlci5pbW1VMzIo
KTsKKyAgICAgICAgZnVuY1B0clRhYmxlc1tpXS5lbGVtZW50cyA9IFdURjo6bW92ZShlbGVtZW50
cyk7CisgICAgfQorCisgICAgbV9tb2R1bGUtPm1fZnVuY1B0clRhYmxlcyA9IFdURjo6bW92ZShm
dW5jUHRyVGFibGVzKTsKK30KKwordm9pZCBNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWZp
bml0aW9uU2VjdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX21vZHVsZS0+bV9mdW5jU2lnbmF0dXJlcy5zaXpl
KCk7ICsraSkKKyAgICAgICAgcGFyc2VGdW5jdGlvbkRlZmluaXRpb24odm0sIGdsb2JhbE9iamVj
dCwgaSk7Cit9CisKK3ZvaWQgTW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydFNlY3Rpb24oVk0mIHZt
KQoreworICAgIHN3aXRjaCAobV9yZWFkZXIuZXhwb3J0Rm9ybWF0KCkpIHsKKyAgICBjYXNlIEV4
cG9ydEZvcm1hdDo6RGVmYXVsdDogeworICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4ID0g
bV9yZWFkZXIuaW1tVTMyKCk7CisgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZGVmYXVsdCIpOyAvLyBUT0RPOiBVc2Ugb3RoZXIgbmFt
ZXMKKyAgICAgICAgbV9tb2R1bGUtPnB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwgbV9tb2R1bGUt
Pm1fZnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhdLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgRXhwb3J0Rm9ybWF0OjpSZWNvcmQ6IHsKKyAgICAgICAgdWludDMyX3QgbnVt
YmVyT2ZFeHBvcnRzID0gbV9yZWFkZXIuaW1tVTMyKCk7CisgICAgICAgIGZvciAodWludDMyX3Qg
ZXhwb3J0SW5kZXggPSAwOyBleHBvcnRJbmRleCA8IG51bWJlck9mRXhwb3J0czsgKytleHBvcnRJ
bmRleCkgeworICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgICAgICAgICAg
d2hpbGUgKGNoYXIgYyA9IG1fcmVhZGVyLnNpbmdsZUNoYXIoKSkKKyAgICAgICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZChjKTsKKyAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSBt
X3JlYWRlci5pbW1VMzIoKTsKKyAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBidWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICAg
ICAgbV9tb2R1bGUtPnB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwgbV9tb2R1bGUtPm1fZnVuY3Rp
b25zW2Z1bmN0aW9uSW5kZXhdLmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9Cit9CisKK3ZvaWQgTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbihW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHNpemVfdCBmdW5jdGlvbkluZGV4
KQoreworICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KHN0YXRpY19jYXN0PFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXIqPihtX21vZHVs
ZS0+bV9zb3VyY2UucHJvdmlkZXIoKSktPmRhdGEoKS5kYXRhKCkpOworICAgIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0SW5Tb3VyY2UgPSBtX3JlYWRlci5jdXJzb3IoKSAtIGJ1ZmZlcjsgLy8gRklYTUU6
IGhhY2t5CisKKyAgICBjb25zdCB1aW50OF90KiBlbmRDdXJzb3I7CisgICAgRnVuY3Rpb25QYXJz
ZXI6OmNoZWNrU3ludGF4QW5kQ2FsY3VsYXRlU291cmNlUmFuZ2UobV9tb2R1bGUsIGZ1bmN0aW9u
SW5kZXgsIHN0YXJ0T2Zmc2V0SW5Tb3VyY2UsIGVuZEN1cnNvcik7CisgICAgbV9yZWFkZXIuc2V0
Q3Vyc29yKGVuZEN1cnNvcik7IC8vIEZJWE1FOiBoYWNreQorCisgICAgdW5zaWduZWQgZW5kT2Zm
c2V0SW5Tb3VyY2UgPSBlbmRDdXJzb3IgLSBidWZmZXI7CisKKyAgICBTb3VyY2VDb2RlIHNvdXJj
ZShtX21vZHVsZS0+bV9zb3VyY2UucHJvdmlkZXIoKSwgc3RhcnRPZmZzZXRJblNvdXJjZSwgZW5k
T2Zmc2V0SW5Tb3VyY2UsIDEsIDEpOworICAgIAorICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSA9IFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlOjpjcmVhdGUoJnZtLCBzdGFydE9mZnNldEluU291cmNlLCBlbmRPZmZzZXRJblNvdXJjZSAt
IHN0YXJ0T2Zmc2V0SW5Tb3VyY2UsIG1fbW9kdWxlLCBmdW5jdGlvbkluZGV4KTsKKyAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlLT5saW5rKHZtLCBtX21vZHVsZS0+bV9zb3VyY2UpOworCisgICAgSlNGdW5jdGlvbiog
anNGdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZnVuY3Rpb25FeGVjdXRhYmxlLCBn
bG9iYWxPYmplY3QpOworICAgIG1fbW9kdWxlLT5tX2Z1bmN0aW9ucy5hcHBlbmQoV3JpdGVCYXJy
aWVyPEpTRnVuY3Rpb24+KHZtLCBtX21vZHVsZSwganNGdW5jdGlvbikpOworfQorCitNb2R1bGUq
IGNvbXBpbGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCit7Cisg
ICAgTW9kdWxlUGFyc2VyIG1vZHVsZVBhcnNlcjsKKyAgICByZXR1cm4gbW9kdWxlUGFyc2VyLnBh
cnNlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc291cmNlKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXQVNNKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjRiYTNmNTE2MDM3MDI5ZmZjZmE1Nzc2NDk0OWM4MzM4ZmE5MGNkMjQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgKQEAg
LTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8qCisgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAo
dGhlICJMaWNlbnNlIik7CisgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29t
cGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUg
TGljZW5zZSBhdAorCisgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4w
CisKKyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdy
aXRpbmcsIHNvZnR3YXJlCisgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJp
YnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyBTZWUgdGhlIExp
Y2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5k
CisgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworCisjaWZuZGVmIFdhc21Nb2R1
bGVQYXJzZXJfaAorI2RlZmluZSBXYXNtTW9kdWxlUGFyc2VyX2gKKworI2lmIEVOQUJMRShXQVNN
KQorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlLmgiCisjaW5j
bHVkZSAiV2FzbVJlYWRlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdhc20g
eworCitjbGFzcyBNb2R1bGVQYXJzZXIgeworcHVibGljOgorICAgIE1vZHVsZSogcGFyc2UoVk0m
LCBKU0dsb2JhbE9iamVjdCosIGNvbnN0IFNvdXJjZUNvZGUmKTsKKworcHJpdmF0ZToKKyAgICB2
b2lkIHBhcnNlQ29uc3RhbnRQb29sU2VjdGlvbigpOworICAgIHZvaWQgcGFyc2VTaWduYXR1cmVT
ZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlvbigpOworICAgIHZv
aWQgcGFyc2VHbG9iYWxTZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRp
b25TZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZUZ1bmN0aW9uUG9pbnRlclRhYmxlcygpOworICAg
IHZvaWQgcGFyc2VGdW5jdGlvbkRlZmluaXRpb25TZWN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3Qq
KTsKKyAgICB2b2lkIHBhcnNlRXhwb3J0U2VjdGlvbihWTSYpOworCisgICAgdm9pZCBwYXJzZUZ1
bmN0aW9uRGVmaW5pdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0Kiwgc2l6ZV90IGZ1bmN0aW9uSW5k
ZXgpOworCisgICAgTW9kdWxlKiBtX21vZHVsZTsgLy8gRklYTUU6IHNob3VsZG4ndCBiZSBhIHN0
YXRlCisgICAgUmVhZGVyIG1fcmVhZGVyOworfTsKKworSlNfRVhQT1JUX1BSSVZBVEUgTW9kdWxl
KiBjb21waWxlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmKTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXQVNNKQorCisjZW5kaWYgLy8gV2Fz
bU1vZHVsZVBhcnNlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtT3Bjb2Rlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wY29kZXMuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44OTQ0MTAxYzc0ZDM4Y2UwMGE3NDBlZGI3MjNkMWMzNGM4MGZkZDRkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wY29kZXMuaApA
QCAtMCwwICsxLDM2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8qCisgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIu
MCAodGhlICJMaWNlbnNlIik7CisgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4g
Y29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0
aGUgTGljZW5zZSBhdAorCisgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0Ut
Mi4wCisKKyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGlu
IHdyaXRpbmcsIHNvZnR3YXJlCisgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlz
dHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09O
RElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyBTZWUgdGhl
IExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMg
YW5kCisgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworCisjaWZuZGVmIFdhc21P
cGNvZGVzX2gKKyNkZWZpbmUgV2FzbU9wY29kZXNfaAorCisjaWYgRU5BQkxFKFdBU00pCisKKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgV2Fz
bSB7CisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBtYWdpY051bWJlciA9IDB4NmQ3MzYxNzc7CisK
K2VudW0gY2xhc3MgU3RtdCA6IHVpbnQ4X3QgeworICAgIFNldExvYywKKyAgICBTZXRHbG8sCisg
ICAgSTMyU3RvcmU4LAorICAgIEkzMlN0b3JlT2ZmOCwKKyAgICBJMzJTdG9yZTE2LAorICAgIEkz
MlN0b3JlT2ZmMTYsCisgICAgSTMyU3RvcmUzMiwKKyAgICBJMzJTdG9yZU9mZjMyLAorICAgIEYz
MlN0b3JlLAorICAgIEYzMlN0b3JlT2ZmLAorICAgIEY2NFN0b3JlLAorICAgIEY2NFN0b3JlT2Zm
LAorICAgIENhbGxJbnQsCisgICAgQ2FsbEluZCwKKyAgICBDYWxsSW1wLAorICAgIFJldCwKKyAg
ICBCbG9jaywKKyAgICBJZlRoZW4sCisgICAgSWZFbHNlLAorICAgIFdoaWxlLAorICAgIERvLAor
ICAgIExhYmVsLAorICAgIEJyZWFrLAorICAgIEJyZWFrTGFiZWwsCisgICAgQ29udGludWUsCisg
ICAgQ29udGludWVMYWJlbCwKKyAgICBTd2l0Y2gsCisKKyAgICBCYWQKK307CisKK2VudW0gY2xh
c3MgU3RtdFdpdGhJbW0gOiB1aW50OF90IHsKKyAgICBTZXRMb2MsCisgICAgU2V0R2xvLAorICAg
IFJlc2V2ZWQxLAorICAgIFJlc2V2ZWQyLAorCisgICAgQmFkCit9OworCitlbnVtIGNsYXNzIFN3
aXRjaENhc2UgOiB1aW50OF90IHsKKyAgICBDYXNlMCwKKyAgICBDYXNlMSwKKyAgICBDYXNlTiwK
KyAgICBEZWZhdWx0MCwKKyAgICBEZWZhdWx0MSwKKyAgICBEZWZhdWx0TgorfTsKKworZW51bSBj
bGFzcyBJMzIgOiB1aW50OF90IHsKKyAgICBMaXRQb29sLAorICAgIExpdEltbSwKKyAgICBHZXRM
b2MsCisgICAgR2V0R2xvLAorICAgIFNldExvYywKKyAgICBTZXRHbG8sCisgICAgU0xvYWQ4LAor
ICAgIFNMb2FkT2ZmOCwKKyAgICBVTG9hZDgsCisgICAgVUxvYWRPZmY4LAorICAgIFNMb2FkMTYs
CisgICAgU0xvYWRPZmYxNiwKKyAgICBVTG9hZDE2LAorICAgIFVMb2FkT2ZmMTYsCisgICAgTG9h
ZDMyLAorICAgIExvYWRPZmYzMiwKKyAgICBTdG9yZTgsCisgICAgU3RvcmVPZmY4LAorICAgIFN0
b3JlMTYsCisgICAgU3RvcmVPZmYxNiwKKyAgICBTdG9yZTMyLAorICAgIFN0b3JlT2ZmMzIsCisg
ICAgQ2FsbEludCwKKyAgICBDYWxsSW5kLAorICAgIENhbGxJbXAsCisgICAgQ29uZCwKKyAgICBD
b21tYSwKKyAgICBGcm9tRjMyLAorICAgIEZyb21GNjQsCisgICAgTmVnLAorICAgIEFkZCwKKyAg
ICBTdWIsCisgICAgTXVsLAorICAgIFNEaXYsCisgICAgVURpdiwKKyAgICBTTW9kLAorICAgIFVN
b2QsCisgICAgQml0Tm90LAorICAgIEJpdE9yLAorICAgIEJpdEFuZCwKKyAgICBCaXRYb3IsCisg
ICAgTHNoLAorICAgIEFyaXRoUnNoLAorICAgIExvZ2ljUnNoLAorICAgIENseiwKKyAgICBMb2dp
Y05vdCwKKyAgICBFcUkzMiwKKyAgICBFcUYzMiwKKyAgICBFcUY2NCwKKyAgICBORXFJMzIsCisg
ICAgTkVxRjMyLAorICAgIE5FcUY2NCwKKyAgICBTTGVUaEkzMiwKKyAgICBVTGVUaEkzMiwKKyAg
ICBMZVRoRjMyLAorICAgIExlVGhGNjQsCisgICAgU0xlRXFJMzIsCisgICAgVUxlRXFJMzIsCisg
ICAgTGVFcUYzMiwKKyAgICBMZUVxRjY0LAorICAgIFNHclRoSTMyLAorICAgIFVHclRoSTMyLAor
ICAgIEdyVGhGMzIsCisgICAgR3JUaEY2NCwKKyAgICBTR3JFcUkzMiwKKyAgICBVR3JFcUkzMiwK
KyAgICBHckVxRjMyLAorICAgIEdyRXFGNjQsCisgICAgU01pbiwKKyAgICBVTWluLAorICAgIFNN
YXgsCisgICAgVU1heCwKKyAgICBBYnMsCisKKyAgICBCYWQKK307CisKK2VudW0gY2xhc3MgSTMy
V2l0aEltbSA6IHVpbnQ4X3QgeworICAgIExpdFBvb2wsCisgICAgTGl0SW1tLAorICAgIEdldExv
YywKKyAgICBSZXNlcnZlZCwKKworICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBGMzIgOiB1aW50
OF90IHsKKyAgICBMaXRQb29sLAorICAgIExpdEltbSwKKyAgICBHZXRMb2MsCisgICAgR2V0R2xv
LAorICAgIFNldExvYywKKyAgICBTZXRHbG8sCisgICAgTG9hZCwKKyAgICBMb2FkT2ZmLAorICAg
IFN0b3JlLAorICAgIFN0b3JlT2ZmLAorICAgIENhbGxJbnQsCisgICAgQ2FsbEluZCwKKyAgICBD
b25kLAorICAgIENvbW1hLAorICAgIEZyb21TMzIsCisgICAgRnJvbVUzMiwKKyAgICBGcm9tRjY0
LAorICAgIE5lZywKKyAgICBBZGQsCisgICAgU3ViLAorICAgIE11bCwKKyAgICBEaXYsCisgICAg
QWJzLAorICAgIENlaWwsCisgICAgRmxvb3IsCisgICAgU3FydCwKKworICAgIEJhZAorfTsKKwor
ZW51bSBjbGFzcyBGMzJXaXRoSW1tIDogdWludDhfdCB7CisgICAgTGl0UG9vbCwKKyAgICBHZXRM
b2MsCisgICAgUmVzZXJ2ZWQwLAorICAgIFJlc2VydmVkMSwKKworICAgIEJhZAorfTsKKworZW51
bSBjbGFzcyBGNjQgOiB1aW50OF90IHsKKyAgICBMaXRQb29sLAorICAgIExpdEltbSwKKyAgICBH
ZXRMb2MsCisgICAgR2V0R2xvLAorICAgIFNldExvYywKKyAgICBTZXRHbG8sCisgICAgTG9hZCwK
KyAgICBMb2FkT2ZmLAorICAgIFN0b3JlLAorICAgIFN0b3JlT2ZmLAorICAgIENhbGxJbnQsCisg
ICAgQ2FsbEluZCwKKyAgICBDYWxsSW1wLAorICAgIENvbmQsCisgICAgQ29tbWEsCisgICAgRnJv
bVMzMiwKKyAgICBGcm9tVTMyLAorICAgIEZyb21GMzIsCisgICAgTmVnLAorICAgIEFkZCwKKyAg
ICBTdWIsCisgICAgTXVsLAorICAgIERpdiwKKyAgICBNb2QsCisgICAgTWluLAorICAgIE1heCwK
KyAgICBBYnMsCisgICAgQ2VpbCwKKyAgICBGbG9vciwKKyAgICBTcXJ0LAorICAgIENvcywKKyAg
ICBTaW4sCisgICAgVGFuLAorICAgIEFDb3MsCisgICAgQVNpbiwKKyAgICBBVGFuLAorICAgIEFU
YW4yLAorICAgIEV4cCwKKyAgICBMbiwKKyAgICBQb3csCisKKyAgICBCYWQKK307CisKK2VudW0g
Y2xhc3MgRjY0V2l0aEltbSA6IHVpbnQ4X3QgeworICAgIExpdFBvb2wsCisgICAgR2V0TG9jLAor
ICAgIFJlc2VydmVkMCwKKyAgICBSZXNlcnZlZDEsCisKKyAgICBCYWQKK307CisKK2VudW0gY2xh
c3MgVm9pZCA6IHVpbnQ4X3QgeworICAgIENhbGxJbnQsCisgICAgQ2FsbEluZCwKKyAgICBDYWxs
SW1wLAorCisgICAgQmFkCit9OworCitlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsKKyAgICBJ
MzIsCisgICAgRjMyLAorICAgIEY2NAorfTsKKworZW51bSBjbGFzcyBWYXJUeXBlcyA6IHVpbnQ4
X3QgeworICAgIEkzMiA9IDB4MSwKKyAgICBGMzIgPSAweDIsCisgICAgRjY0ID0gMHg0LAorfTsK
KworaW5saW5lIFZhclR5cGVzIG9wZXJhdG9yfCAoVmFyVHlwZXMgbGhzLCBWYXJUeXBlcyByaHMp
IHsgcmV0dXJuIFZhclR5cGVzKHVpbnQ4X3QobGhzKSB8IHVpbnQ4X3QocmhzKSk7IH0KK2lubGlu
ZSBib29sIG9wZXJhdG9yJihWYXJUeXBlcyBsaHMsIFZhclR5cGVzIHJocykgeyByZXR1cm4gYm9v
bCh1aW50OF90KGxocykgJiB1aW50OF90KHJocykpOyB9CisKK2VudW0gY2xhc3MgVmFyVHlwZXNX
aXRoSW1tIDogdWludDhfdCB7CisgICAgT25seUkzMiwKKyAgICBSZXNlcnZlZDAsCisgICAgUmVz
ZXJ2ZWQxLAorICAgIFJlc2VydmVkMgorfTsKKworZW51bSBjbGFzcyBSZXR1cm5UeXBlIDogdWlu
dDhfdCB7CisgICAgSTMyID0gdWludDhfdChUeXBlOjpJMzIpLAorICAgIEYzMiA9IHVpbnQ4X3Qo
VHlwZTo6RjMyKSwKKyAgICBGNjQgPSB1aW50OF90KFR5cGU6OkY2NCksCisgICAgVm9pZAorfTsK
Kworc3RhdGljIGNvbnN0IHVpbnQ4X3QgaGFzSW1tRmxhZyA9IDB4ODA7CitzdGF0aWNfYXNzZXJ0
KHVpbnQ4X3QoSTMyOjpCYWQpIDw9IGhhc0ltbUZsYWcsICJNU0IgcmVzZXJ2ZWQgdG8gZGlzdGlu
Z3Vpc2ggSTMyIGZyb20gSTMyV2l0aEltbSIpOworc3RhdGljX2Fzc2VydCh1aW50OF90KEYzMjo6
QmFkKSA8PSBoYXNJbW1GbGFnLCAiTVNCIHJlc2VydmVkIHRvIGRpc3Rpbmd1aXNoIEYzMiBmcm9t
IEYzMldpdGhJbW0iKTsKK3N0YXRpY19hc3NlcnQodWludDhfdChGNjQ6OkJhZCkgPD0gaGFzSW1t
RmxhZywgIk1TQiByZXNlcnZlZCB0byBkaXN0aW5ndWlzaCBGNjQgZnJvbSBGNjRXaXRoSW1tIik7
CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBvcFdpdGhJbW1CaXRzID0gMjsKK3N0YXRpYyBjb25z
dCB1aW50MzJfdCBvcFdpdGhJbW1MaW1pdCA9IDEgPDwgb3BXaXRoSW1tQml0czsKK3N0YXRpY19h
c3NlcnQodWludDhfdChJMzJXaXRoSW1tOjpCYWQpIDw9IG9wV2l0aEltbUxpbWl0LCAiSTMyV2l0
aEltbSBvcCBmaXRzIik7CitzdGF0aWNfYXNzZXJ0KHVpbnQ4X3QoRjMyV2l0aEltbTo6QmFkKSA8
PSBvcFdpdGhJbW1MaW1pdCwgIkYzMldpdGhJbW0gb3AgZml0cyIpOworc3RhdGljX2Fzc2VydCh1
aW50OF90KEY2NFdpdGhJbW06OkJhZCkgPD0gb3BXaXRoSW1tTGltaXQsICJGNjRXaXRoSW1tIG9w
IGZpdHMiKTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGltbUJpdHMgPSA1Oworc3RhdGljIGNv
bnN0IHVpbnQzMl90IGltbUxpbWl0ID0gMSA8PCBpbW1CaXRzOworc3RhdGljX2Fzc2VydCgoMSAr
IG9wV2l0aEltbUJpdHMgKyBpbW1CaXRzKSA9PSA4LCAiQml0cyBvZiBpbW1lZGlhdGUgb3Agc2hv
dWxkIGFkZCB1cCB0byBhIGJ5dGUiKTsKKwordGVtcGxhdGUgPGNsYXNzIFRXaXRoSW1tPgorc3Rh
dGljIGlubGluZSB2b2lkIHVucGFja09wV2l0aEltbSh1aW50OF90IGJ5dGUsIFRXaXRoSW1tKiBv
cCwgdWludDhfdCAqaW1tKQoreworICAgIEFTU0VSVChieXRlICYgaGFzSW1tRmxhZyk7CisgICAg
Km9wID0gVFdpdGhJbW0oKGJ5dGUgPj4gaW1tQml0cykgJiAob3BXaXRoSW1tTGltaXQgLSAxKSk7
CisgICAgKmltbSA9IGJ5dGUgJiAoaW1tTGltaXQgLSAxKTsKK30KKworZW51bSBjbGFzcyBFeHBv
cnRGb3JtYXQgOiB1aW50OF90IHsKKyAgICBEZWZhdWx0LAorICAgIFJlY29yZAorfTsKKworc3Ry
dWN0IFNpZ25hdHVyZSB7CisgICAgUmV0dXJuVHlwZSByZXR1cm5UeXBlOworICAgIFZlY3RvcjxU
eXBlPiBhcmd1bWVudHM7CisKKyAgICBTaWduYXR1cmUoKSB7IH0KKyAgICBTaWduYXR1cmUoUmV0
dXJuVHlwZSByZXR1cm5UeXBlKQorICAgICAgICA6IHJldHVyblR5cGUocmV0dXJuVHlwZSkgeyB9
CisgICAgU2lnbmF0dXJlKFJldHVyblR5cGUgcmV0dXJuVHlwZSwgdWludDMyX3QgYXJndW1lbnRD
b3VudCkKKyAgICAgICAgOiByZXR1cm5UeXBlKHJldHVyblR5cGUpCisgICAgICAgICwgYXJndW1l
bnRzKGFyZ3VtZW50Q291bnQpIHsgfQorICAgIFNpZ25hdHVyZShSZXR1cm5UeXBlIHJldHVyblR5
cGUsIFZlY3RvcjxUeXBlPiYmIGFyZ3VtZW50cykKKyAgICAgICAgOiByZXR1cm5UeXBlKHJldHVy
blR5cGUpCisgICAgICAgICwgYXJndW1lbnRzKFdURjo6bW92ZShhcmd1bWVudHMpKSB7IH0KK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0FTTSkK
KworI2VuZGlmIC8vIFdhc21PcGNvZGVzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21SZWFkZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21S
ZWFkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5lZDUzZTRmOWNmY2IyOGViOTMwNjBkZjBiMTVmOWNiNGY2NDhl
NDcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVJl
YWRlci5oCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLyoKKyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZl
cnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4
Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgWW91IG1heSBvYnRhaW4gYSBj
b3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMv
TElDRU5TRS0yLjAKKworIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3Jl
ZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5z
ZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIFdJVEhPVVQgV0FSUkFOVElF
UyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgor
IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJt
aXNzaW9ucyBhbmQKKyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisKKyNpZm5k
ZWYgV2FzbVJlYWRlcl9oCisjZGVmaW5lIFdhc21SZWFkZXJfaAorCisjaWYgRU5BQkxFKFdBU00p
CisKKyNpbmNsdWRlICJXYXNtT3Bjb2Rlcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNw
YWNlIFdhc20geworCitjbGFzcyBSZWFkZXIgeworcHVibGljOgorICAgIFJlYWRlcigpIHsgfQor
ICAgIFJlYWRlcihjb25zdCB1aW50OF90KiBiZWdpbikKKyAgICAgICAgOiBtX2N1cnNvcihiZWdp
bikKKyAgICB7CisgICAgfQorCisgICAgY29uc3QgdWludDhfdCogY3Vyc29yKCkgY29uc3QgeyBy
ZXR1cm4gbV9jdXJzb3I7IH0KKyAgICB2b2lkIHNldEN1cnNvcihjb25zdCB1aW50OF90KiBjdXJz
b3IpIHsgbV9jdXJzb3IgPSBjdXJzb3I7IH0KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gVCBmaXhl
ZFdpZHRoKCk7CisgICAgU3RtdCBzdG10KCkgeyByZXR1cm4gdTg8U3RtdD4oKTsgfQorICAgIFN3
aXRjaENhc2Ugc3dpdGNoQ2FzZSgpIHsgcmV0dXJuIHU4PFN3aXRjaENhc2U+KCk7IH0KKyAgICB0
ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBUV2l0aEltbT4gaW5saW5lIGJvb2wgY29kZShUKiwgVFdp
dGhJbW0qLCB1aW50OF90Kik7CisgICAgVm9pZCB2b2lkRXhwcigpIHsgcmV0dXJuIHU4PFZvaWQ+
KCk7IH0KKyAgICBFeHBvcnRGb3JtYXQgZXhwb3J0Rm9ybWF0KCkgeyByZXR1cm4gdTg8RXhwb3J0
Rm9ybWF0PigpOyB9CisgICAgVHlwZSB0eXBlKCkgeyByZXR1cm4gdTg8VHlwZT4oKTsgfQorICAg
IFJldHVyblR5cGUgcmV0dXJuVHlwZSgpIHsgcmV0dXJuIHU4PFJldHVyblR5cGU+KCk7IH0KKyAg
ICBpbmxpbmUgdWludDMyX3QgaW1tVTMyKCk7CisgICAgaW5saW5lIGludDMyX3QgaW1tUzMyKCk7
CisgICAgY2hhciBzaW5nbGVDaGFyKCkgeyByZXR1cm4gKm1fY3Vyc29yKys7IH0KKworICAgIGlu
bGluZSBib29sIGlmSTMyTGl0KGNvbnN0IFZlY3Rvcjx1aW50MzJfdD4mIGkzMnMsIHVpbnQzMl90
Kik7CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IFQgdTgoKSB7IHJldHVybiBU
KCptX2N1cnNvcisrKTsgfQorCisgICAgY29uc3QgdWludDhfdCogbV9jdXJzb3I7Cit9OworCit0
ZW1wbGF0ZSA8PgoraW5saW5lIHVpbnQzMl90IFJlYWRlcjo6Zml4ZWRXaWR0aDx1aW50MzJfdD4o
KQoreworICAgIHVpbnQzMl90IHUzMiA9IG1fY3Vyc29yWzBdIHwgbV9jdXJzb3JbMV0gPDwgOCB8
IG1fY3Vyc29yWzJdIDw8IDE2IHwgbV9jdXJzb3JbM10gPDwgMjQ7CisgICAgbV9jdXJzb3IgKz0g
NDsKKyAgICByZXR1cm4gdTMyOworfQorCit0ZW1wbGF0ZSA8PgoraW5saW5lIGZsb2F0IFJlYWRl
cjo6Zml4ZWRXaWR0aDxmbG9hdD4oKQoreworICAgIHVuaW9uIHsKKyAgICAgICAgdWludDhfdCBh
cnJbNF07CisgICAgICAgIGZsb2F0IGY7CisgICAgfSB1ID0geyB7IG1fY3Vyc29yWzBdLCBtX2N1
cnNvclsxXSwgbV9jdXJzb3JbMl0sIG1fY3Vyc29yWzNdIH0gfTsKKyAgICBtX2N1cnNvciArPSA0
OworICAgIHJldHVybiB1LmY7Cit9CisKK3RlbXBsYXRlIDw+CitpbmxpbmUgZG91YmxlIFJlYWRl
cjo6Zml4ZWRXaWR0aDxkb3VibGU+KCkKK3sKKyAgICB1bmlvbiB7CisgICAgICAgIHVpbnQ4X3Qg
YXJyWzhdOworICAgICAgICBkb3VibGUgZDsKKyAgICB9IHUgPSB7IHsgbV9jdXJzb3JbMF0sIG1f
Y3Vyc29yWzFdLCBtX2N1cnNvclsyXSwgbV9jdXJzb3JbM10sIG1fY3Vyc29yWzRdLCBtX2N1cnNv
cls1XSwgbV9jdXJzb3JbNl0sIG1fY3Vyc29yWzddIH0gfTsKKyAgICBtX2N1cnNvciArPSA4Owor
ICAgIHJldHVybiB1LmQ7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUV2l0aEltbT4K
K2Jvb2wgUmVhZGVyOjpjb2RlKFQqIHQsIFRXaXRoSW1tKiB0V2l0aEltbSwgdWludDhfdCogaW1t
KQoreworICAgIHVpbnQ4X3QgYnl0ZSA9ICptX2N1cnNvcisrOworICAgIGlmICghKGJ5dGUgJiBo
YXNJbW1GbGFnKSkgeworICAgICAgICAqdCA9IFQoYnl0ZSk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIHVucGFja09wV2l0aEltbShieXRlLCB0V2l0aEltbSwgaW1tKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSB1aW50MzJfdCBSZWFkZXI6OmltbVUzMigpCit7
CisgICAgdWludDMyX3QgdTMyID0gKm1fY3Vyc29yKys7CisgICAgaWYgKHUzMiA8IDB4ODApCisg
ICAgICAgIHJldHVybiB1MzI7CisKKyAgICB1MzIgJj0gMHg3ZjsKKworICAgIGZvciAodW5zaWdu
ZWQgc2hpZnQgPSA3OyB0cnVlOyBzaGlmdCArPSA3KSB7CisgICAgICAgIHVpbnQzMl90IGIgPSAq
bV9jdXJzb3IrKzsKKyAgICAgICAgaWYgKGIgPCAweDgwKQorICAgICAgICAgICAgcmV0dXJuIHUz
MiB8IChiIDw8IHNoaWZ0KTsKKyAgICAgICAgdTMyIHw9IChiICYgMHg3ZikgPDwgc2hpZnQ7Cisg
ICAgfQorfQorCitpbmxpbmUgaW50MzJfdCBSZWFkZXI6OmltbVMzMigpCit7CisgICAgdWludDMy
X3QgdTMyID0gKm1fY3Vyc29yKys7CisgICAgaWYgKHUzMiA8IDB4ODApCisgICAgICAgIHJldHVy
biBpbnQzMl90KHUzMikgPDwgKDMyLTcpID4+ICgzMi03KTsKKworICAgIHUzMiAmPSAweDdmOwor
CisgICAgZm9yICh1bnNpZ25lZCBzaGlmdCA9IDc7IHRydWU7IHNoaWZ0ICs9IDcpIHsKKyAgICAg
ICAgdWludDMyX3QgYiA9ICptX2N1cnNvcisrOworICAgICAgICBpZiAoYiA8IDB4ODApIHsKKyAg
ICAgICAgICAgIHUzMiB8PSBiIDw8IHNoaWZ0OworICAgICAgICAgICAgaW50IHNpZ25FeHRlbmQg
PSAoMzItNykgLSBzaGlmdDsKKyAgICAgICAgICAgIGlmIChzaWduRXh0ZW5kID4gMCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gaW50MzJfdCh1MzIpIDw8IHNpZ25FeHRlbmQgPj4gc2lnbkV4dGVu
ZDsKKyAgICAgICAgICAgIHJldHVybiBpbnQzMl90KHUzMik7CisgICAgICAgIH0KKyAgICAgICAg
dTMyIHw9IChiICYgMHg3ZikgPDwgc2hpZnQ7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBSZWFk
ZXI6OmlmSTMyTGl0KGNvbnN0IFZlY3Rvcjx1aW50MzJfdD4mIGkzMnMsIHVpbnQzMl90KiB1MzIp
Cit7CisgICAgdWludDhfdCBieXRlID0gKm1fY3Vyc29yOworCisgICAgaWYgKGJ5dGUgJiBoYXNJ
bW1GbGFnKSB7CisgICAgICAgIEkzMldpdGhJbW0gaTMyV2l0aEltbTsKKyAgICAgICAgdWludDhf
dCBpbW07CisgICAgICAgIHVucGFja09wV2l0aEltbShieXRlLCAmaTMyV2l0aEltbSwgJmltbSk7
CisKKyAgICAgICAgaWYgKGkzMldpdGhJbW0gPT0gSTMyV2l0aEltbTo6TGl0SW1tKSB7CisgICAg
ICAgICAgICBtX2N1cnNvcisrOworICAgICAgICAgICAgKnUzMiA9IGltbTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGkzMldpdGhJbW0gPT0gSTMy
V2l0aEltbTo6TGl0UG9vbCkgeworICAgICAgICAgICAgbV9jdXJzb3IrKzsKKyAgICAgICAgICAg
ICp1MzIgPSBpMzJzW2ltbV07CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoSTMyKGJ5dGUpID09IEkz
Mjo6TGl0SW1tKSB7CisgICAgICAgIG1fY3Vyc29yKys7CisgICAgICAgICp1MzIgPSBpbW1VMzIo
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKEkzMihieXRlKSA9PSBJ
MzI6OkxpdFBvb2wpIHsKKyAgICAgICAgbV9jdXJzb3IrKzsKKyAgICAgICAgKnUzMiA9IGkzMnNb
aW1tVTMyKCldOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxF
KFdBU00pCisKKyNlbmRpZiAvLyBXYXNtUmVhZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21TeW50YXhDaGVja2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtU3ludGF4Q2hlY2tlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUxZjFmZjk5YzEzMmU0MGY4
YjgwZTQ0MTVhNDc3OGNlMjg1NGNiMmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtU3ludGF4Q2hlY2tlci5oCkBAIC0wLDAgKzEsMTIzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXYXNtU3lu
dGF4Q2hlY2tlcl9oCisjZGVmaW5lIFdhc21TeW50YXhDaGVja2VyX2gKKworI2lmIEVOQUJMRShX
QVNNKQorCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K25hbWVzcGFjZSBXYXNtIHsKKworY2xhc3MgU3ludGF4Q2hlY2tlciB7CitwdWJsaWM6CisgICAg
dHlwZWRlZiBpbnQgRXhwcmVzc2lvbjsKKyAgICB0eXBlZGVmIGludCBTdGF0ZW1lbnQ7CisgICAg
dHlwZWRlZiBpbnQgSnVtcDsKKworICAgIFN5bnRheENoZWNrZXIoKQorICAgICAgICA6IG1fc3Ao
MCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBzdGFydEZ1bmN0aW9uKCkgeyB9CisgICAgdm9p
ZCBlbmRGdW5jdGlvbigpIHsgQVNTRVJUKCFtX3NwKTsgfQorICAgIHZvaWQgc2V0TG9jYWxUeXBl
cyhjb25zdCBWZWN0b3I8VHlwZT4mKSB7IH0KKyAgICB2b2lkIHVuYm94QXJndW1lbnQoc2l6ZV90
KSB7IH0KKyAgICB2b2lkIHNldExvY2FsWmVyb0kzMihzaXplX3QpIHsgfQorCisgICAgaW50IGFk
ZEkzMihpbnQsIGludCkKKyAgICB7CisgICAgICAgIG1fc3AtLTsKKyAgICAgICAgcmV0dXJuIDE7
CisgICAgfQorCisgICAgaW50IG11bEkzMihpbnQsIGludCkKKyAgICB7CisgICAgICAgIG1fc3At
LTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgaW50IHJlZ0kzMih1aW50MzJfdCkK
KyAgICB7CisgICAgICAgIG1fc3ArKzsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAg
aW50IHJlZ0Y2NChkb3VibGUpCisgICAgeworICAgICAgICBtX3NwKys7CisgICAgICAgIHJldHVy
biAxOworICAgIH0KKworICAgIHZvaWQgc2V0TG9jYWwoaW50LCB1aW50MzJfdCkKKyAgICB7Cisg
ICAgICAgIG1fc3AtLTsKKyAgICB9CisKKyAgICBpbnQgZ2V0TG9jYWxJMzIodWludDMyX3QpCisg
ICAgeworICAgICAgICBtX3NwKys7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGlu
dCBjYWxsSW50ZXJuYWwodWludDMyX3QsIGNvbnN0IFZlY3RvcjxUeXBlPiYgYXJndW1lbnRzLCBj
b25zdCBWZWN0b3I8aW50PiYsIFJldHVyblR5cGUpCisgICAgeworICAgICAgICBzaXplX3QgYXJn
dW1lbnRDb3VudCA9IGFyZ3VtZW50cy5zaXplKCk7CisgICAgICAgIG1fc3AgLT0gYXJndW1lbnRD
b3VudDsKKyAgICAgICAgbV9zcCsrOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICB2
b2lkIHJldHVybkkzMihpbnQpCisgICAgeworICAgICAgICBtX3NwLS07CisgICAgfQorCisgICAg
SnVtcCBlbWl0SnVtcCgpCisgICAgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBK
dW1wIGJyYW5jaFRlc3RJMzIoTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiwgaW50KQor
ICAgIHsKKyAgICAgICAgbV9zcC0tOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICB2
b2lkIGxpbmtKdW1wKEp1bXApIHsgfQorICAgIAorcHJpdmF0ZToKKyAgICBpbnQgbV9zcDsKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCisKKyNlbmRpZiAvLyBFTkFCTEUoV0FTTSkK
KworI2VuZGlmIC8vIFdhc21TeW50YXhDaGVja2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnIGIvU291cmNlL1dlYkNv
cmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKaW5kZXggZmU1NmJjMGIx
YmZkNjBjNTFhMDU3ZTk1NTRkMTllZDQ4NzRmNGY0Mi4uOTg5MTE0NjUwZGE0Mjc2M2IwZWFmY2Q4
ODkzYzNlNGNiMmQ2MTc5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ29uZmlndXJhdGlv
bnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKKysrIGIvU291cmNlL1dlYkNvcmUvQ29uZmlndXJh
dGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKQEAgLTE5OSw2ICsxOTksNyBAQCBFTkFCTEVf
VklERU9fUFJFU0VOVEFUSU9OX01PREVbc2RrPWlwaG9uZSpdID0gRU5BQkxFX1ZJREVPX1BSRVNF
TlRBVElPTl9NT0RFOwogRU5BQkxFX1ZJREVPX1RSQUNLID0gRU5BQkxFX1ZJREVPX1RSQUNLOwog
RU5BQkxFX0RBVEFDVUVfVkFMVUUgPSBFTkFCTEVfREFUQUNVRV9WQUxVRTsKIEVOQUJMRV9WSUVX
X01PREVfQ1NTX01FRElBID0gOworRU5BQkxFX1dBU00gPSA7CiBFTkFCTEVfV0VCR0wgPSBFTkFC
TEVfV0VCR0w7CiBFTkFCTEVfV0VCR0wyID0gOwogRU5BQkxFX1dFQl9BVURJTyA9IEVOQUJMRV9X
RUJfQVVESU87CkBAIC0yMjgsNCArMjI5LDQgQEAgRU5BQkxFX0ZUTF9KSVRbc2RrPWlwaG9uZW9z
Kl0gPSBFTkFCTEVfRlRMX0pJVDsKIAogRU5BQkxFX1NBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJ
QyA9IEVOQUJMRV9TQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUM7CiAKLUZFQVRVUkVfREVGSU5F
UyA9ICQoRU5BQkxFXzNEX1RSQU5TRk9STVMpICQoRU5BQkxFX0FDQ0VMRVJBVEVEXzJEX0NBTlZB
UykgJChFTkFCTEVfQUNDRUxFUkFURURfT1ZFUkZMT1dfU0NST0xMSU5HKSAkKEVOQUJMRV9BVkZf
Q0FQVElPTlMpICQoRU5BQkxFX0FUVEFDSE1FTlRfRUxFTUVOVCkgJChFTkFCTEVfQ0FDSEVfUEFS
VElUSU9OSU5HKSAkKEVOQUJMRV9DQU5WQVNfUEFUSCkgJChFTkFCTEVfQ0FOVkFTX1BST1hZKSAk
KEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORykgJChFTkFCTEVfRVM2X0FSUk9XRlVOQ1RJT05fU1lO
VEFYKSAkKEVOQUJMRV9FUzZfQ0xBU1NfU1lOVEFYKSAkKEVOQUJMRV9FUzZfVEVNUExBVEVfTElU
RVJBTF9TWU5UQVgpICQoRU5BQkxFX0NPTlRFTlRfRklMVEVSSU5HKSAkKEVOQUJMRV9DU1BfTkVY
VCkgJChFTkFCTEVfQ1NTX0FOSU1BVElPTlNfTEVWRUxfMikgJChFTkFCTEVfQ1NTX0JPWF9ERUNP
UkFUSU9OX0JSRUFLKSAkKEVOQUJMRV9DU1NfQ09NUE9TSVRJTkcpICQoRU5BQkxFX0NTU19ERVZJ
Q0VfQURBUFRBVElPTikgJChFTkFCTEVfQ1NTX0dSSURfTEFZT1VUKSAkKEVOQUJMRV9DU1NfSU1B
R0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0NTU19JTUFHRV9SRVNPTFVUSU9OKSAkKEVOQUJMRV9D
U1NfUkVHSU9OUykgJChFTkFCTEVfQ1NTX1NFTEVDVE9SU19MRVZFTDQpICQoRU5BQkxFX0NTU19T
SEFQRVMpICQoRU5BQkxFX0NTUzNfVEVYVCkgJChFTkFCTEVfQ1NTM19URVhUX0xJTkVfQlJFQUsp
ICQoRU5BQkxFX0NVUlNPUl9WSVNJQklMSVRZKSAkKEVOQUJMRV9DVVNUT01fU0NIRU1FX0hBTkRM
RVIpICQoRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUKSAkKEVOQUJMRV9EQVRBTElTVF9FTEVNRU5U
KSAkKEVOQUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TKSAkKEVOQUJMRV9ERVRBSUxTX0VMRU1FTlQp
ICQoRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTikgJChFTkFCTEVfRE9NNF9FVkVOVFNfQ09OU1RS
VUNUT1IpICQoRU5BQkxFX0VOQ1JZUFRFRF9NRURJQSkgJChFTkFCTEVfRU5DUllQVEVEX01FRElB
X1YyKSAkKEVOQUJMRV9GSUxURVJTX0xFVkVMXzIpICQoRU5BQkxFX0ZPTlRfTE9BRF9FVkVOVFMp
ICQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJKSAkKEVOQUJMRV9HQU1FUEFEKSAkKEVOQUJMRV9HQU1F
UEFEX0RFUFJFQ0FURUQpICQoRU5BQkxFX0dFT0xPQ0FUSU9OKSAkKEVOQUJMRV9ISURERU5fUEFH
RV9ET01fVElNRVJfVEhST1RUTElORykgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9T
RVJWSUNFX0NPTlRST0xTKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9JTkRF
WEVEX0RBVEFCQVNFX0lOX1dPUktFUlMpICQoRU5BQkxFX0lORElFX1VJKSAkKEVOQUJMRV9JTlBV
VF9UWVBFX0NPTE9SKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0NPTE9SX1BPUE9WRVIpICQoRU5BQkxF
X0lOUFVUX1RZUEVfREFURSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRV9JTkNPTVBMRVRF
KSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FTE9DQUwpICQoRU5BQkxFX0lOUFVUX1RZUEVf
TU9OVEgpICQoRU5BQkxFX0lOUFVUX1RZUEVfVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9XRUVL
KSAkKEVOQUJMRV9XSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICQoRU5BQkxFX0lOVEwpICQoRU5B
QkxFX0lPU19HRVNUVVJFX0VWRU5UUykgJChFTkFCTEVfSU9TX1RFWFRfQVVUT1NJWklORykgJChF
TkFCTEVfSU9TX1RPVUNIX0VWRU5UUykgJChFTkFCTEVfTEVHQUNZX0NTU19WRU5ET1JfUFJFRklY
RVMpICQoRU5BQkxFX0xFR0FDWV9OT1RJRklDQVRJT05TKSAkKEVOQUJMRV9MRUdBQ1lfVkVORE9S
X1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lfV0VCX0FVRElPKSAkKEVOQUJMRV9MRVRURVJQUkVT
UykgJChFTkFCTEVfTElOS19QUkVGRVRDSCkgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9NRURJ
QV9DT05UUk9MU19TQ1JJUFQpICQoRU5BQkxFX01FRElBX1NFU1NJT04pICQoRU5BQkxFX01FRElB
X1NPVVJDRSkgJChFTkFCTEVfTUVESUFfU1RBVElTVElDUykgJChFTkFCTEVfTUVESUFfU1RSRUFN
KSAkKEVOQUJMRV9NRVRFUl9FTEVNRU5UKSAkKEVOQUJMRV9NSFRNTCkgJChFTkFCTEVfTU9VU0Vf
Q1VSU09SX1NDQUxFKSAkKEVOQUJMRV9OQVZJR0FUT1JfQ09OVEVOVF9VVElMUykgJChFTkFCTEVf
TkFWSUdBVE9SX0hXQ09OQ1VSUkVOQ1kpICQoRU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxF
X1BERktJVF9QTFVHSU4pICQoRU5BQkxFX1BJQ1RVUkVfU0laRVMpICQoRU5BQkxFX1BPSU5URVJf
TE9DSykgJChFTkFCTEVfUFJPTUlTRVMpICQoRU5BQkxFX1BST1hJTUlUWV9FVkVOVFMpICQoRU5B
QkxFX1BVQkxJQ19TVUZGSVhfTElTVCkgJChFTkFCTEVfUVVPVEEpICQoRU5BQkxFX1JFUVVFU1Rf
QU5JTUFUSU9OX0ZSQU1FKSAkKEVOQUJMRV9SRVFVRVNUX0FVVE9DT01QTEVURSkgJChFTkFCTEVf
UkVNT1RFX0lOU1BFQ1RPUikgJChFTkFCTEVfUkVTT0xVVElPTl9NRURJQV9RVUVSWSkgJChFTkFC
TEVfUlVCQkVSX0JBTkRJTkcpICQoRU5BQkxFX0NTU19TQ1JPTExfU05BUCkgJChFTkFCTEVfU1BF
RUNIX1NZTlRIRVNJUykgJChFTkFCTEVfU1RSRUFNU19BUEkpICQoRU5BQkxFX1NVQlRMRV9DUllQ
VE8pICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVfU1ZHX09URl9DT05WRVJURVIpICQoRU5B
QkxFX1RFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAkKEVOQUJMRV9URU1QTEFURV9FTEVNRU5U
KSAkKEVOQUJMRV9URVhUX0FVVE9TSVpJTkcpICQoRU5BQkxFX1RPVUNIX0VWRU5UUykgJChFTkFC
TEVfVE9VQ0hfSUNPTl9MT0FESU5HKSAkKEVOQUJMRV9DU1NfVFJBSUxJTkdfV09SRCkgJChFTkFC
TEVfVVNFUlNFTEVDVF9BTEwpICQoRU5BQkxFX1ZJREVPKSAkKEVOQUJMRV9WSURFT19UUkFDSykg
JChFTkFCTEVfREFUQUNVRV9WQUxVRSkgJChFTkFCTEVfVklFV19NT0RFX0NTU19NRURJQSkgJChF
TkFCTEVfV0VCR0wpICQoRU5BQkxFX1dFQkdMMikgJChFTkFCTEVfV0VCX0FVRElPKSAkKEVOQUJM
RV9XRUJfUkVQTEFZKSAkKEVOQUJMRV9XRUJfU09DS0VUUykgJChFTkFCTEVfV0VCX1RJTUlORykg
JChFTkFCTEVfV0VCVlRUX1JFR0lPTlMpICQoRU5BQkxFX1hIUl9USU1FT1VUKSAkKEVOQUJMRV9Y
U0xUKSAkKEVOQUJMRV9GVExfSklUKSAkKEVOQUJMRV9KSVQpICQoRU5BQkxFX1NBVFVSQVRFRF9M
QVlPVVRfQVJJVEhNRVRJQykgJChFTkFCTEVfVklERU9fUFJFU0VOVEFUSU9OX01PREUpOworRkVB
VFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfVFJBTlNGT1JNUykgJChFTkFCTEVfQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF9PVkVSRkxPV19TQ1JPTExJTkcpICQo
RU5BQkxFX0FWRl9DQVBUSU9OUykgJChFTkFCTEVfQVRUQUNITUVOVF9FTEVNRU5UKSAkKEVOQUJM
RV9DQUNIRV9QQVJUSVRJT05JTkcpICQoRU5BQkxFX0NBTlZBU19QQVRIKSAkKEVOQUJMRV9DQU5W
QVNfUFJPWFkpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9FUzZfQVJST1dG
VU5DVElPTl9TWU5UQVgpICQoRU5BQkxFX0VTNl9DTEFTU19TWU5UQVgpICQoRU5BQkxFX0VTNl9U
RU1QTEFURV9MSVRFUkFMX1NZTlRBWCkgJChFTkFCTEVfQ09OVEVOVF9GSUxURVJJTkcpICQoRU5B
QkxFX0NTUF9ORVhUKSAkKEVOQUJMRV9DU1NfQU5JTUFUSU9OU19MRVZFTF8yKSAkKEVOQUJMRV9D
U1NfQk9YX0RFQ09SQVRJT05fQlJFQUspICQoRU5BQkxFX0NTU19DT01QT1NJVElORykgJChFTkFC
TEVfQ1NTX0RFVklDRV9BREFQVEFUSU9OKSAkKEVOQUJMRV9DU1NfR1JJRF9MQVlPVVQpICQoRU5B
QkxFX0NTU19JTUFHRV9PUklFTlRBVElPTikgJChFTkFCTEVfQ1NTX0lNQUdFX1JFU09MVVRJT04p
ICQoRU5BQkxFX0NTU19SRUdJT05TKSAkKEVOQUJMRV9DU1NfU0VMRUNUT1JTX0xFVkVMNCkgJChF
TkFCTEVfQ1NTX1NIQVBFUykgJChFTkFCTEVfQ1NTM19URVhUKSAkKEVOQUJMRV9DU1MzX1RFWFRf
TElORV9CUkVBSykgJChFTkFCTEVfQ1VSU09SX1ZJU0lCSUxJVFkpICQoRU5BQkxFX0NVU1RPTV9T
Q0hFTUVfSEFORExFUikgJChFTkFCTEVfREFTSEJPQVJEX1NVUFBPUlQpICQoRU5BQkxFX0RBVEFM
SVNUX0VMRU1FTlQpICQoRU5BQkxFX0RBVEFfVFJBTlNGRVJfSVRFTVMpICQoRU5BQkxFX0RFVEFJ
TFNfRUxFTUVOVCkgJChFTkFCTEVfREVWSUNFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9ET000X0VW
RU5UU19DT05TVFJVQ1RPUikgJChFTkFCTEVfRU5DUllQVEVEX01FRElBKSAkKEVOQUJMRV9FTkNS
WVBURURfTUVESUFfVjIpICQoRU5BQkxFX0ZJTFRFUlNfTEVWRUxfMikgJChFTkFCTEVfRk9OVF9M
T0FEX0VWRU5UUykgJChFTkFCTEVfRlVMTFNDUkVFTl9BUEkpICQoRU5BQkxFX0dBTUVQQUQpICQo
RU5BQkxFX0dBTUVQQURfREVQUkVDQVRFRCkgJChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxF
X0hJRERFTl9QQUdFX0RPTV9USU1FUl9USFJPVFRMSU5HKSAkKEVOQUJMRV9JQ09OREFUQUJBU0Up
ICQoRU5BQkxFX1NFUlZJQ0VfQ09OVFJPTFMpICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpICQo
RU5BQkxFX0lOREVYRURfREFUQUJBU0VfSU5fV09SS0VSUykgJChFTkFCTEVfSU5ESUVfVUkpICQo
RU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IpICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1JfUE9QT1ZF
UikgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1F
X0lOQ09NUExFVEUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVMT0NBTCkgJChFTkFCTEVf
SU5QVVRfVFlQRV9NT05USCkgJChFTkFCTEVfSU5QVVRfVFlQRV9USU1FKSAkKEVOQUJMRV9JTlBV
VF9UWVBFX1dFRUspICQoRU5BQkxFX1dJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJChFTkFCTEVf
SU5UTCkgJChFTkFCTEVfSU9TX0dFU1RVUkVfRVZFTlRTKSAkKEVOQUJMRV9JT1NfVEVYVF9BVVRP
U0laSU5HKSAkKEVOQUJMRV9JT1NfVE9VQ0hfRVZFTlRTKSAkKEVOQUJMRV9MRUdBQ1lfQ1NTX1ZF
TkRPUl9QUkVGSVhFUykgJChFTkFCTEVfTEVHQUNZX05PVElGSUNBVElPTlMpICQoRU5BQkxFX0xF
R0FDWV9WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9XRUJfQVVESU8pICQoRU5BQkxF
X0xFVFRFUlBSRVNTKSAkKEVOQUJMRV9MSU5LX1BSRUZFVENIKSAkKEVOQUJMRV9NQVRITUwpICQo
RU5BQkxFX01FRElBX0NPTlRST0xTX1NDUklQVCkgJChFTkFCTEVfTUVESUFfU0VTU0lPTikgJChF
TkFCTEVfTUVESUFfU09VUkNFKSAkKEVOQUJMRV9NRURJQV9TVEFUSVNUSUNTKSAkKEVOQUJMRV9N
RURJQV9TVFJFQU0pICQoRU5BQkxFX01FVEVSX0VMRU1FTlQpICQoRU5BQkxFX01IVE1MKSAkKEVO
QUJMRV9NT1VTRV9DVVJTT1JfU0NBTEUpICQoRU5BQkxFX05BVklHQVRPUl9DT05URU5UX1VUSUxT
KSAkKEVOQUJMRV9OQVZJR0FUT1JfSFdDT05DVVJSRU5DWSkgJChFTkFCTEVfTk9USUZJQ0FUSU9O
UykgJChFTkFCTEVfUERGS0lUX1BMVUdJTikgJChFTkFCTEVfUElDVFVSRV9TSVpFUykgJChFTkFC
TEVfUE9JTlRFUl9MT0NLKSAkKEVOQUJMRV9QUk9NSVNFUykgJChFTkFCTEVfUFJPWElNSVRZX0VW
RU5UUykgJChFTkFCTEVfUFVCTElDX1NVRkZJWF9MSVNUKSAkKEVOQUJMRV9RVU9UQSkgJChFTkFC
TEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpICQoRU5BQkxFX1JFUVVFU1RfQVVUT0NPTVBMRVRF
KSAkKEVOQUJMRV9SRU1PVEVfSU5TUEVDVE9SKSAkKEVOQUJMRV9SRVNPTFVUSU9OX01FRElBX1FV
RVJZKSAkKEVOQUJMRV9SVUJCRVJfQkFORElORykgJChFTkFCTEVfQ1NTX1NDUk9MTF9TTkFQKSAk
KEVOQUJMRV9TUEVFQ0hfU1lOVEhFU0lTKSAkKEVOQUJMRV9TVFJFQU1TX0FQSSkgJChFTkFCTEVf
U1VCVExFX0NSWVBUTykgJChFTkFCTEVfU1ZHX0ZPTlRTKSAkKEVOQUJMRV9TVkdfT1RGX0NPTlZF
UlRFUikgJChFTkFCTEVfVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICQoRU5BQkxFX1RFTVBM
QVRFX0VMRU1FTlQpICQoRU5BQkxFX1RFWFRfQVVUT1NJWklORykgJChFTkFCTEVfVE9VQ0hfRVZF
TlRTKSAkKEVOQUJMRV9UT1VDSF9JQ09OX0xPQURJTkcpICQoRU5BQkxFX0NTU19UUkFJTElOR19X
T1JEKSAkKEVOQUJMRV9VU0VSU0VMRUNUX0FMTCkgJChFTkFCTEVfVklERU8pICQoRU5BQkxFX1ZJ
REVPX1RSQUNLKSAkKEVOQUJMRV9EQVRBQ1VFX1ZBTFVFKSAkKEVOQUJMRV9WSUVXX01PREVfQ1NT
X01FRElBKSAkKEVOQUJMRV9XQVNNKSAkKEVOQUJMRV9XRUJHTCkgJChFTkFCTEVfV0VCR0wyKSAk
KEVOQUJMRV9XRUJfQVVESU8pICQoRU5BQkxFX1dFQl9SRVBMQVkpICQoRU5BQkxFX1dFQl9TT0NL
RVRTKSAkKEVOQUJMRV9XRUJfVElNSU5HKSAkKEVOQUJMRV9XRUJWVFRfUkVHSU9OUykgJChFTkFC
TEVfWEhSX1RJTUVPVVQpICQoRU5BQkxFX1hTTFQpICQoRU5BQkxFX0ZUTF9KSVQpICQoRU5BQkxF
X0pJVCkgJChFTkFCTEVfU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDKSAkKEVOQUJMRV9WSURF
T19QUkVTRU5UQVRJT05fTU9ERSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9Db25m
aWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0Nv
bmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCmluZGV4IGZlNTZiYzBiMWJmZDYw
YzUxYTA1N2U5NTU0ZDE5ZWQ0ODc0ZjRmNDIuLjk4OTExNDY1MGRhNDI3NjNiMGVhZmNkODg5M2Mz
ZTRjYjJkNjE3OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NvbmZpZ3VyYXRpb25z
L0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NvbmZpZ3Vy
YXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCkBAIC0xOTksNiArMTk5LDcgQEAgRU5BQkxF
X1ZJREVPX1BSRVNFTlRBVElPTl9NT0RFW3Nkaz1pcGhvbmUqXSA9IEVOQUJMRV9WSURFT19QUkVT
RU5UQVRJT05fTU9ERTsKIEVOQUJMRV9WSURFT19UUkFDSyA9IEVOQUJMRV9WSURFT19UUkFDSzsK
IEVOQUJMRV9EQVRBQ1VFX1ZBTFVFID0gRU5BQkxFX0RBVEFDVUVfVkFMVUU7CiBFTkFCTEVfVklF
V19NT0RFX0NTU19NRURJQSA9IDsKK0VOQUJMRV9XQVNNID0gOwogRU5BQkxFX1dFQkdMID0gRU5B
QkxFX1dFQkdMOwogRU5BQkxFX1dFQkdMMiA9IDsKIEVOQUJMRV9XRUJfQVVESU8gPSBFTkFCTEVf
V0VCX0FVRElPOwpAQCAtMjI4LDQgKzIyOSw0IEBAIEVOQUJMRV9GVExfSklUW3Nkaz1pcGhvbmVv
cypdID0gRU5BQkxFX0ZUTF9KSVQ7CiAKIEVOQUJMRV9TQVRVUkFURURfTEFZT1VUX0FSSVRITUVU
SUMgPSBFTkFCTEVfU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDOwogCi1GRUFUVVJFX0RFRklO
RVMgPSAkKEVOQUJMRV8zRF9UUkFOU0ZPUk1TKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9DQU5W
QVMpICQoRU5BQkxFX0FDQ0VMRVJBVEVEX09WRVJGTE9XX1NDUk9MTElORykgJChFTkFCTEVfQVZG
X0NBUFRJT05TKSAkKEVOQUJMRV9BVFRBQ0hNRU5UX0VMRU1FTlQpICQoRU5BQkxFX0NBQ0hFX1BB
UlRJVElPTklORykgJChFTkFCTEVfQ0FOVkFTX1BBVEgpICQoRU5BQkxFX0NBTlZBU19QUk9YWSkg
JChFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0VTNl9BUlJPV0ZVTkNUSU9OX1NZ
TlRBWCkgJChFTkFCTEVfRVM2X0NMQVNTX1NZTlRBWCkgJChFTkFCTEVfRVM2X1RFTVBMQVRFX0xJ
VEVSQUxfU1lOVEFYKSAkKEVOQUJMRV9DT05URU5UX0ZJTFRFUklORykgJChFTkFCTEVfQ1NQX05F
WFQpICQoRU5BQkxFX0NTU19BTklNQVRJT05TX0xFVkVMXzIpICQoRU5BQkxFX0NTU19CT1hfREVD
T1JBVElPTl9CUkVBSykgJChFTkFCTEVfQ1NTX0NPTVBPU0lUSU5HKSAkKEVOQUJMRV9DU1NfREVW
SUNFX0FEQVBUQVRJT04pICQoRU5BQkxFX0NTU19HUklEX0xBWU9VVCkgJChFTkFCTEVfQ1NTX0lN
QUdFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9DU1NfSU1BR0VfUkVTT0xVVElPTikgJChFTkFCTEVf
Q1NTX1JFR0lPTlMpICQoRU5BQkxFX0NTU19TRUxFQ1RPUlNfTEVWRUw0KSAkKEVOQUJMRV9DU1Nf
U0hBUEVTKSAkKEVOQUJMRV9DU1MzX1RFWFQpICQoRU5BQkxFX0NTUzNfVEVYVF9MSU5FX0JSRUFL
KSAkKEVOQUJMRV9DVVJTT1JfVklTSUJJTElUWSkgJChFTkFCTEVfQ1VTVE9NX1NDSEVNRV9IQU5E
TEVSKSAkKEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVCkgJChFTkFCTEVfREFUQUxJU1RfRUxFTUVO
VCkgJChFTkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUykgJChFTkFCTEVfREVUQUlMU19FTEVNRU5U
KSAkKEVOQUJMRV9ERVZJQ0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0RPTTRfRVZFTlRTX0NPTlNU
UlVDVE9SKSAkKEVOQUJMRV9FTkNSWVBURURfTUVESUEpICQoRU5BQkxFX0VOQ1JZUFRFRF9NRURJ
QV9WMikgJChFTkFCTEVfRklMVEVSU19MRVZFTF8yKSAkKEVOQUJMRV9GT05UX0xPQURfRVZFTlRT
KSAkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkgJChFTkFCTEVfR0FN
RVBBRF9ERVBSRUNBVEVEKSAkKEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVfSElEREVOX1BB
R0VfRE9NX1RJTUVSX1RIUk9UVExJTkcpICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVf
U0VSVklDRV9DT05UUk9MUykgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkgJChFTkFCTEVfSU5E
RVhFRF9EQVRBQkFTRV9JTl9XT1JLRVJTKSAkKEVOQUJMRV9JTkRJRV9VSSkgJChFTkFCTEVfSU5Q
VVRfVFlQRV9DT0xPUikgJChFTkFCTEVfSU5QVVRfVFlQRV9DT0xPUl9QT1BPVkVSKSAkKEVOQUJM
RV9JTlBVVF9UWVBFX0RBVEUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVfSU5DT01QTEVU
RSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FMKSAkKEVOQUJMRV9JTlBVVF9UWVBF
X01PTlRIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1RJTUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfV0VF
SykgJChFTkFCTEVfV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAkKEVOQUJMRV9JTlRMKSAkKEVO
QUJMRV9JT1NfR0VTVFVSRV9FVkVOVFMpICQoRU5BQkxFX0lPU19URVhUX0FVVE9TSVpJTkcpICQo
RU5BQkxFX0lPU19UT1VDSF9FVkVOVFMpICQoRU5BQkxFX0xFR0FDWV9DU1NfVkVORE9SX1BSRUZJ
WEVTKSAkKEVOQUJMRV9MRUdBQ1lfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfTEVHQUNZX1ZFTkRP
Ul9QUkVGSVhFUykgJChFTkFCTEVfTEVHQUNZX1dFQl9BVURJTykgJChFTkFCTEVfTEVUVEVSUFJF
U1MpICQoRU5BQkxFX0xJTktfUFJFRkVUQ0gpICQoRU5BQkxFX01BVEhNTCkgJChFTkFCTEVfTUVE
SUFfQ09OVFJPTFNfU0NSSVBUKSAkKEVOQUJMRV9NRURJQV9TRVNTSU9OKSAkKEVOQUJMRV9NRURJ
QV9TT1VSQ0UpICQoRU5BQkxFX01FRElBX1NUQVRJU1RJQ1MpICQoRU5BQkxFX01FRElBX1NUUkVB
TSkgJChFTkFCTEVfTUVURVJfRUxFTUVOVCkgJChFTkFCTEVfTUhUTUwpICQoRU5BQkxFX01PVVNF
X0NVUlNPUl9TQ0FMRSkgJChFTkFCTEVfTkFWSUdBVE9SX0NPTlRFTlRfVVRJTFMpICQoRU5BQkxF
X05BVklHQVRPUl9IV0NPTkNVUlJFTkNZKSAkKEVOQUJMRV9OT1RJRklDQVRJT05TKSAkKEVOQUJM
RV9QREZLSVRfUExVR0lOKSAkKEVOQUJMRV9QSUNUVVJFX1NJWkVTKSAkKEVOQUJMRV9QT0lOVEVS
X0xPQ0spICQoRU5BQkxFX1BST01JU0VTKSAkKEVOQUJMRV9QUk9YSU1JVFlfRVZFTlRTKSAkKEVO
QUJMRV9QVUJMSUNfU1VGRklYX0xJU1QpICQoRU5BQkxFX1FVT1RBKSAkKEVOQUJMRV9SRVFVRVNU
X0FOSU1BVElPTl9GUkFNRSkgJChFTkFCTEVfUkVRVUVTVF9BVVRPQ09NUExFVEUpICQoRU5BQkxF
X1JFTU9URV9JTlNQRUNUT1IpICQoRU5BQkxFX1JFU09MVVRJT05fTUVESUFfUVVFUlkpICQoRU5B
QkxFX1JVQkJFUl9CQU5ESU5HKSAkKEVOQUJMRV9DU1NfU0NST0xMX1NOQVApICQoRU5BQkxFX1NQ
RUVDSF9TWU5USEVTSVMpICQoRU5BQkxFX1NUUkVBTVNfQVBJKSAkKEVOQUJMRV9TVUJUTEVfQ1JZ
UFRPKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1NWR19PVEZfQ09OVkVSVEVSKSAkKEVO
QUJMRV9URUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJChFTkFCTEVfVEVNUExBVEVfRUxFTUVO
VCkgJChFTkFCTEVfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9UT1VDSF9FVkVOVFMpICQoRU5B
QkxFX1RPVUNIX0lDT05fTE9BRElORykgJChFTkFCTEVfQ1NTX1RSQUlMSU5HX1dPUkQpICQoRU5B
QkxFX1VTRVJTRUxFQ1RfQUxMKSAkKEVOQUJMRV9WSURFTykgJChFTkFCTEVfVklERU9fVFJBQ0sp
ICQoRU5BQkxFX0RBVEFDVUVfVkFMVUUpICQoRU5BQkxFX1ZJRVdfTU9ERV9DU1NfTUVESUEpICQo
RU5BQkxFX1dFQkdMKSAkKEVOQUJMRV9XRUJHTDIpICQoRU5BQkxFX1dFQl9BVURJTykgJChFTkFC
TEVfV0VCX1JFUExBWSkgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dFQl9USU1JTkcp
ICQoRU5BQkxFX1dFQlZUVF9SRUdJT05TKSAkKEVOQUJMRV9YSFJfVElNRU9VVCkgJChFTkFCTEVf
WFNMVCkgJChFTkFCTEVfRlRMX0pJVCkgJChFTkFCTEVfSklUKSAkKEVOQUJMRV9TQVRVUkFURURf
TEFZT1VUX0FSSVRITUVUSUMpICQoRU5BQkxFX1ZJREVPX1BSRVNFTlRBVElPTl9NT0RFKTsKK0ZF
QVRVUkVfREVGSU5FUyA9ICQoRU5BQkxFXzNEX1RSQU5TRk9STVMpICQoRU5BQkxFX0FDQ0VMRVJB
VEVEXzJEX0NBTlZBUykgJChFTkFCTEVfQUNDRUxFUkFURURfT1ZFUkZMT1dfU0NST0xMSU5HKSAk
KEVOQUJMRV9BVkZfQ0FQVElPTlMpICQoRU5BQkxFX0FUVEFDSE1FTlRfRUxFTUVOVCkgJChFTkFC
TEVfQ0FDSEVfUEFSVElUSU9OSU5HKSAkKEVOQUJMRV9DQU5WQVNfUEFUSCkgJChFTkFCTEVfQ0FO
VkFTX1BST1hZKSAkKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORykgJChFTkFCTEVfRVM2X0FSUk9X
RlVOQ1RJT05fU1lOVEFYKSAkKEVOQUJMRV9FUzZfQ0xBU1NfU1lOVEFYKSAkKEVOQUJMRV9FUzZf
VEVNUExBVEVfTElURVJBTF9TWU5UQVgpICQoRU5BQkxFX0NPTlRFTlRfRklMVEVSSU5HKSAkKEVO
QUJMRV9DU1BfTkVYVCkgJChFTkFCTEVfQ1NTX0FOSU1BVElPTlNfTEVWRUxfMikgJChFTkFCTEVf
Q1NTX0JPWF9ERUNPUkFUSU9OX0JSRUFLKSAkKEVOQUJMRV9DU1NfQ09NUE9TSVRJTkcpICQoRU5B
QkxFX0NTU19ERVZJQ0VfQURBUFRBVElPTikgJChFTkFCTEVfQ1NTX0dSSURfTEFZT1VUKSAkKEVO
QUJMRV9DU1NfSU1BR0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0NTU19JTUFHRV9SRVNPTFVUSU9O
KSAkKEVOQUJMRV9DU1NfUkVHSU9OUykgJChFTkFCTEVfQ1NTX1NFTEVDVE9SU19MRVZFTDQpICQo
RU5BQkxFX0NTU19TSEFQRVMpICQoRU5BQkxFX0NTUzNfVEVYVCkgJChFTkFCTEVfQ1NTM19URVhU
X0xJTkVfQlJFQUspICQoRU5BQkxFX0NVUlNPUl9WSVNJQklMSVRZKSAkKEVOQUJMRV9DVVNUT01f
U0NIRU1FX0hBTkRMRVIpICQoRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUKSAkKEVOQUJMRV9EQVRB
TElTVF9FTEVNRU5UKSAkKEVOQUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TKSAkKEVOQUJMRV9ERVRB
SUxTX0VMRU1FTlQpICQoRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTikgJChFTkFCTEVfRE9NNF9F
VkVOVFNfQ09OU1RSVUNUT1IpICQoRU5BQkxFX0VOQ1JZUFRFRF9NRURJQSkgJChFTkFCTEVfRU5D
UllQVEVEX01FRElBX1YyKSAkKEVOQUJMRV9GSUxURVJTX0xFVkVMXzIpICQoRU5BQkxFX0ZPTlRf
TE9BRF9FVkVOVFMpICQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJKSAkKEVOQUJMRV9HQU1FUEFEKSAk
KEVOQUJMRV9HQU1FUEFEX0RFUFJFQ0FURUQpICQoRU5BQkxFX0dFT0xPQ0FUSU9OKSAkKEVOQUJM
RV9ISURERU5fUEFHRV9ET01fVElNRVJfVEhST1RUTElORykgJChFTkFCTEVfSUNPTkRBVEFCQVNF
KSAkKEVOQUJMRV9TRVJWSUNFX0NPTlRST0xTKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAk
KEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFX0lOX1dPUktFUlMpICQoRU5BQkxFX0lORElFX1VJKSAk
KEVOQUJMRV9JTlBVVF9UWVBFX0NPTE9SKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0NPTE9SX1BPUE9W
RVIpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElN
RV9JTkNPTVBMRVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FTE9DQUwpICQoRU5BQkxF
X0lOUFVUX1RZUEVfTU9OVEgpICQoRU5BQkxFX0lOUFVUX1RZUEVfVElNRSkgJChFTkFCTEVfSU5Q
VVRfVFlQRV9XRUVLKSAkKEVOQUJMRV9XSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICQoRU5BQkxF
X0lOVEwpICQoRU5BQkxFX0lPU19HRVNUVVJFX0VWRU5UUykgJChFTkFCTEVfSU9TX1RFWFRfQVVU
T1NJWklORykgJChFTkFCTEVfSU9TX1RPVUNIX0VWRU5UUykgJChFTkFCTEVfTEVHQUNZX0NTU19W
RU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9OT1RJRklDQVRJT05TKSAkKEVOQUJMRV9M
RUdBQ1lfVkVORE9SX1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lfV0VCX0FVRElPKSAkKEVOQUJM
RV9MRVRURVJQUkVTUykgJChFTkFCTEVfTElOS19QUkVGRVRDSCkgJChFTkFCTEVfTUFUSE1MKSAk
KEVOQUJMRV9NRURJQV9DT05UUk9MU19TQ1JJUFQpICQoRU5BQkxFX01FRElBX1NFU1NJT04pICQo
RU5BQkxFX01FRElBX1NPVVJDRSkgJChFTkFCTEVfTUVESUFfU1RBVElTVElDUykgJChFTkFCTEVf
TUVESUFfU1RSRUFNKSAkKEVOQUJMRV9NRVRFUl9FTEVNRU5UKSAkKEVOQUJMRV9NSFRNTCkgJChF
TkFCTEVfTU9VU0VfQ1VSU09SX1NDQUxFKSAkKEVOQUJMRV9OQVZJR0FUT1JfQ09OVEVOVF9VVElM
UykgJChFTkFCTEVfTkFWSUdBVE9SX0hXQ09OQ1VSUkVOQ1kpICQoRU5BQkxFX05PVElGSUNBVElP
TlMpICQoRU5BQkxFX1BERktJVF9QTFVHSU4pICQoRU5BQkxFX1BJQ1RVUkVfU0laRVMpICQoRU5B
QkxFX1BPSU5URVJfTE9DSykgJChFTkFCTEVfUFJPTUlTRVMpICQoRU5BQkxFX1BST1hJTUlUWV9F
VkVOVFMpICQoRU5BQkxFX1BVQkxJQ19TVUZGSVhfTElTVCkgJChFTkFCTEVfUVVPVEEpICQoRU5B
QkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAkKEVOQUJMRV9SRVFVRVNUX0FVVE9DT01QTEVU
RSkgJChFTkFCTEVfUkVNT1RFX0lOU1BFQ1RPUikgJChFTkFCTEVfUkVTT0xVVElPTl9NRURJQV9R
VUVSWSkgJChFTkFCTEVfUlVCQkVSX0JBTkRJTkcpICQoRU5BQkxFX0NTU19TQ1JPTExfU05BUCkg
JChFTkFCTEVfU1BFRUNIX1NZTlRIRVNJUykgJChFTkFCTEVfU1RSRUFNU19BUEkpICQoRU5BQkxF
X1NVQlRMRV9DUllQVE8pICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVfU1ZHX09URl9DT05W
RVJURVIpICQoRU5BQkxFX1RFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAkKEVOQUJMRV9URU1Q
TEFURV9FTEVNRU5UKSAkKEVOQUJMRV9URVhUX0FVVE9TSVpJTkcpICQoRU5BQkxFX1RPVUNIX0VW
RU5UUykgJChFTkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HKSAkKEVOQUJMRV9DU1NfVFJBSUxJTkdf
V09SRCkgJChFTkFCTEVfVVNFUlNFTEVDVF9BTEwpICQoRU5BQkxFX1ZJREVPKSAkKEVOQUJMRV9W
SURFT19UUkFDSykgJChFTkFCTEVfREFUQUNVRV9WQUxVRSkgJChFTkFCTEVfVklFV19NT0RFX0NT
U19NRURJQSkgJChFTkFCTEVfV0FTTSkgJChFTkFCTEVfV0VCR0wpICQoRU5BQkxFX1dFQkdMMikg
JChFTkFCTEVfV0VCX0FVRElPKSAkKEVOQUJMRV9XRUJfUkVQTEFZKSAkKEVOQUJMRV9XRUJfU09D
S0VUUykgJChFTkFCTEVfV0VCX1RJTUlORykgJChFTkFCTEVfV0VCVlRUX1JFR0lPTlMpICQoRU5B
QkxFX1hIUl9USU1FT1VUKSAkKEVOQUJMRV9YU0xUKSAkKEVOQUJMRV9GVExfSklUKSAkKEVOQUJM
RV9KSVQpICQoRU5BQkxFX1NBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQykgJChFTkFCTEVfVklE
RU9fUFJFU0VOVEFUSU9OX01PREUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ29uZmln
dXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcgYi9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1
cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwppbmRleCBmZTU2YmMwYjFiZmQ2MGM1MWEw
NTdlOTU1NGQxOWVkNDg3NGY0ZjQyLi45ODkxMTQ2NTBkYTQyNzYzYjBlYWZjZDg4OTNjM2U0Y2Iy
ZDYxNzllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJl
RGVmaW5lcy54Y2NvbmZpZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0
dXJlRGVmaW5lcy54Y2NvbmZpZwpAQCAtMTk5LDYgKzE5OSw3IEBAIEVOQUJMRV9WSURFT19QUkVT
RU5UQVRJT05fTU9ERVtzZGs9aXBob25lKl0gPSBFTkFCTEVfVklERU9fUFJFU0VOVEFUSU9OX01P
REU7CiBFTkFCTEVfVklERU9fVFJBQ0sgPSBFTkFCTEVfVklERU9fVFJBQ0s7CiBFTkFCTEVfREFU
QUNVRV9WQUxVRSA9IEVOQUJMRV9EQVRBQ1VFX1ZBTFVFOwogRU5BQkxFX1ZJRVdfTU9ERV9DU1Nf
TUVESUEgPSA7CitFTkFCTEVfV0FTTSA9IDsKIEVOQUJMRV9XRUJHTCA9IEVOQUJMRV9XRUJHTDsK
IEVOQUJMRV9XRUJHTDIgPSA7CiBFTkFCTEVfV0VCX0FVRElPID0gRU5BQkxFX1dFQl9BVURJTzsK
QEAgLTIyOCw0ICsyMjksNCBAQCBFTkFCTEVfRlRMX0pJVFtzZGs9aXBob25lb3MqXSA9IEVOQUJM
RV9GVExfSklUOwogCiBFTkFCTEVfU0FUVVJBVEVEX0xBWU9VVF9BUklUSE1FVElDID0gRU5BQkxF
X1NBVFVSQVRFRF9MQVlPVVRfQVJJVEhNRVRJQzsKIAotRkVBVFVSRV9ERUZJTkVTID0gJChFTkFC
TEVfM0RfVFJBTlNGT1JNUykgJChFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAkKEVOQUJM
RV9BQ0NFTEVSQVRFRF9PVkVSRkxPV19TQ1JPTExJTkcpICQoRU5BQkxFX0FWRl9DQVBUSU9OUykg
JChFTkFCTEVfQVRUQUNITUVOVF9FTEVNRU5UKSAkKEVOQUJMRV9DQUNIRV9QQVJUSVRJT05JTkcp
ICQoRU5BQkxFX0NBTlZBU19QQVRIKSAkKEVOQUJMRV9DQU5WQVNfUFJPWFkpICQoRU5BQkxFX0NI
QU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9FUzZfQVJST1dGVU5DVElPTl9TWU5UQVgpICQoRU5B
QkxFX0VTNl9DTEFTU19TWU5UQVgpICQoRU5BQkxFX0VTNl9URU1QTEFURV9MSVRFUkFMX1NZTlRB
WCkgJChFTkFCTEVfQ09OVEVOVF9GSUxURVJJTkcpICQoRU5BQkxFX0NTUF9ORVhUKSAkKEVOQUJM
RV9DU1NfQU5JTUFUSU9OU19MRVZFTF8yKSAkKEVOQUJMRV9DU1NfQk9YX0RFQ09SQVRJT05fQlJF
QUspICQoRU5BQkxFX0NTU19DT01QT1NJVElORykgJChFTkFCTEVfQ1NTX0RFVklDRV9BREFQVEFU
SU9OKSAkKEVOQUJMRV9DU1NfR1JJRF9MQVlPVVQpICQoRU5BQkxFX0NTU19JTUFHRV9PUklFTlRB
VElPTikgJChFTkFCTEVfQ1NTX0lNQUdFX1JFU09MVVRJT04pICQoRU5BQkxFX0NTU19SRUdJT05T
KSAkKEVOQUJMRV9DU1NfU0VMRUNUT1JTX0xFVkVMNCkgJChFTkFCTEVfQ1NTX1NIQVBFUykgJChF
TkFCTEVfQ1NTM19URVhUKSAkKEVOQUJMRV9DU1MzX1RFWFRfTElORV9CUkVBSykgJChFTkFCTEVf
Q1VSU09SX1ZJU0lCSUxJVFkpICQoRU5BQkxFX0NVU1RPTV9TQ0hFTUVfSEFORExFUikgJChFTkFC
TEVfREFTSEJPQVJEX1NVUFBPUlQpICQoRU5BQkxFX0RBVEFMSVNUX0VMRU1FTlQpICQoRU5BQkxF
X0RBVEFfVFJBTlNGRVJfSVRFTVMpICQoRU5BQkxFX0RFVEFJTFNfRUxFTUVOVCkgJChFTkFCTEVf
REVWSUNFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9ET000X0VWRU5UU19DT05TVFJVQ1RPUikgJChF
TkFCTEVfRU5DUllQVEVEX01FRElBKSAkKEVOQUJMRV9FTkNSWVBURURfTUVESUFfVjIpICQoRU5B
QkxFX0ZJTFRFUlNfTEVWRUxfMikgJChFTkFCTEVfRk9OVF9MT0FEX0VWRU5UUykgJChFTkFCTEVf
RlVMTFNDUkVFTl9BUEkpICQoRU5BQkxFX0dBTUVQQUQpICQoRU5BQkxFX0dBTUVQQURfREVQUkVD
QVRFRCkgJChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxFX0hJRERFTl9QQUdFX0RPTV9USU1F
Ul9USFJPVFRMSU5HKSAkKEVOQUJMRV9JQ09OREFUQUJBU0UpICQoRU5BQkxFX1NFUlZJQ0VfQ09O
VFJPTFMpICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpICQoRU5BQkxFX0lOREVYRURfREFUQUJB
U0VfSU5fV09SS0VSUykgJChFTkFCTEVfSU5ESUVfVUkpICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09M
T1IpICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1JfUE9QT1ZFUikgJChFTkFCTEVfSU5QVVRfVFlQ
RV9EQVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FX0lOQ09NUExFVEUpICQoRU5BQkxF
X0lOUFVUX1RZUEVfREFURVRJTUVMT0NBTCkgJChFTkFCTEVfSU5QVVRfVFlQRV9NT05USCkgJChF
TkFCTEVfSU5QVVRfVFlQRV9USU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1dFRUspICQoRU5BQkxF
X1dJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJChFTkFCTEVfSU5UTCkgJChFTkFCTEVfSU9TX0dF
U1RVUkVfRVZFTlRTKSAkKEVOQUJMRV9JT1NfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9JT1Nf
VE9VQ0hfRVZFTlRTKSAkKEVOQUJMRV9MRUdBQ1lfQ1NTX1ZFTkRPUl9QUkVGSVhFUykgJChFTkFC
TEVfTEVHQUNZX05PVElGSUNBVElPTlMpICQoRU5BQkxFX0xFR0FDWV9WRU5ET1JfUFJFRklYRVMp
ICQoRU5BQkxFX0xFR0FDWV9XRUJfQVVESU8pICQoRU5BQkxFX0xFVFRFUlBSRVNTKSAkKEVOQUJM
RV9MSU5LX1BSRUZFVENIKSAkKEVOQUJMRV9NQVRITUwpICQoRU5BQkxFX01FRElBX0NPTlRST0xT
X1NDUklQVCkgJChFTkFCTEVfTUVESUFfU0VTU0lPTikgJChFTkFCTEVfTUVESUFfU09VUkNFKSAk
KEVOQUJMRV9NRURJQV9TVEFUSVNUSUNTKSAkKEVOQUJMRV9NRURJQV9TVFJFQU0pICQoRU5BQkxF
X01FVEVSX0VMRU1FTlQpICQoRU5BQkxFX01IVE1MKSAkKEVOQUJMRV9NT1VTRV9DVVJTT1JfU0NB
TEUpICQoRU5BQkxFX05BVklHQVRPUl9DT05URU5UX1VUSUxTKSAkKEVOQUJMRV9OQVZJR0FUT1Jf
SFdDT05DVVJSRU5DWSkgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfUERGS0lUX1BM
VUdJTikgJChFTkFCTEVfUElDVFVSRV9TSVpFUykgJChFTkFCTEVfUE9JTlRFUl9MT0NLKSAkKEVO
QUJMRV9QUk9NSVNFUykgJChFTkFCTEVfUFJPWElNSVRZX0VWRU5UUykgJChFTkFCTEVfUFVCTElD
X1NVRkZJWF9MSVNUKSAkKEVOQUJMRV9RVU9UQSkgJChFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05f
RlJBTUUpICQoRU5BQkxFX1JFUVVFU1RfQVVUT0NPTVBMRVRFKSAkKEVOQUJMRV9SRU1PVEVfSU5T
UEVDVE9SKSAkKEVOQUJMRV9SRVNPTFVUSU9OX01FRElBX1FVRVJZKSAkKEVOQUJMRV9SVUJCRVJf
QkFORElORykgJChFTkFCTEVfQ1NTX1NDUk9MTF9TTkFQKSAkKEVOQUJMRV9TUEVFQ0hfU1lOVEhF
U0lTKSAkKEVOQUJMRV9TVFJFQU1TX0FQSSkgJChFTkFCTEVfU1VCVExFX0NSWVBUTykgJChFTkFC
TEVfU1ZHX0ZPTlRTKSAkKEVOQUJMRV9TVkdfT1RGX0NPTlZFUlRFUikgJChFTkFCTEVfVEVMRVBI
T05FX05VTUJFUl9ERVRFQ1RJT04pICQoRU5BQkxFX1RFTVBMQVRFX0VMRU1FTlQpICQoRU5BQkxF
X1RFWFRfQVVUT1NJWklORykgJChFTkFCTEVfVE9VQ0hfRVZFTlRTKSAkKEVOQUJMRV9UT1VDSF9J
Q09OX0xPQURJTkcpICQoRU5BQkxFX0NTU19UUkFJTElOR19XT1JEKSAkKEVOQUJMRV9VU0VSU0VM
RUNUX0FMTCkgJChFTkFCTEVfVklERU8pICQoRU5BQkxFX1ZJREVPX1RSQUNLKSAkKEVOQUJMRV9E
QVRBQ1VFX1ZBTFVFKSAkKEVOQUJMRV9WSUVXX01PREVfQ1NTX01FRElBKSAkKEVOQUJMRV9XRUJH
TCkgJChFTkFCTEVfV0VCR0wyKSAkKEVOQUJMRV9XRUJfQVVESU8pICQoRU5BQkxFX1dFQl9SRVBM
QVkpICQoRU5BQkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XRUJfVElNSU5HKSAkKEVOQUJMRV9X
RUJWVFRfUkVHSU9OUykgJChFTkFCTEVfWEhSX1RJTUVPVVQpICQoRU5BQkxFX1hTTFQpICQoRU5B
QkxFX0ZUTF9KSVQpICQoRU5BQkxFX0pJVCkgJChFTkFCTEVfU0FUVVJBVEVEX0xBWU9VVF9BUklU
SE1FVElDKSAkKEVOQUJMRV9WSURFT19QUkVTRU5UQVRJT05fTU9ERSk7CitGRUFUVVJFX0RFRklO
RVMgPSAkKEVOQUJMRV8zRF9UUkFOU0ZPUk1TKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9DQU5W
QVMpICQoRU5BQkxFX0FDQ0VMRVJBVEVEX09WRVJGTE9XX1NDUk9MTElORykgJChFTkFCTEVfQVZG
X0NBUFRJT05TKSAkKEVOQUJMRV9BVFRBQ0hNRU5UX0VMRU1FTlQpICQoRU5BQkxFX0NBQ0hFX1BB
UlRJVElPTklORykgJChFTkFCTEVfQ0FOVkFTX1BBVEgpICQoRU5BQkxFX0NBTlZBU19QUk9YWSkg
JChFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0VTNl9BUlJPV0ZVTkNUSU9OX1NZ
TlRBWCkgJChFTkFCTEVfRVM2X0NMQVNTX1NZTlRBWCkgJChFTkFCTEVfRVM2X1RFTVBMQVRFX0xJ
VEVSQUxfU1lOVEFYKSAkKEVOQUJMRV9DT05URU5UX0ZJTFRFUklORykgJChFTkFCTEVfQ1NQX05F
WFQpICQoRU5BQkxFX0NTU19BTklNQVRJT05TX0xFVkVMXzIpICQoRU5BQkxFX0NTU19CT1hfREVD
T1JBVElPTl9CUkVBSykgJChFTkFCTEVfQ1NTX0NPTVBPU0lUSU5HKSAkKEVOQUJMRV9DU1NfREVW
SUNFX0FEQVBUQVRJT04pICQoRU5BQkxFX0NTU19HUklEX0xBWU9VVCkgJChFTkFCTEVfQ1NTX0lN
QUdFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9DU1NfSU1BR0VfUkVTT0xVVElPTikgJChFTkFCTEVf
Q1NTX1JFR0lPTlMpICQoRU5BQkxFX0NTU19TRUxFQ1RPUlNfTEVWRUw0KSAkKEVOQUJMRV9DU1Nf
U0hBUEVTKSAkKEVOQUJMRV9DU1MzX1RFWFQpICQoRU5BQkxFX0NTUzNfVEVYVF9MSU5FX0JSRUFL
KSAkKEVOQUJMRV9DVVJTT1JfVklTSUJJTElUWSkgJChFTkFCTEVfQ1VTVE9NX1NDSEVNRV9IQU5E
TEVSKSAkKEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVCkgJChFTkFCTEVfREFUQUxJU1RfRUxFTUVO
VCkgJChFTkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUykgJChFTkFCTEVfREVUQUlMU19FTEVNRU5U
KSAkKEVOQUJMRV9ERVZJQ0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0RPTTRfRVZFTlRTX0NPTlNU
UlVDVE9SKSAkKEVOQUJMRV9FTkNSWVBURURfTUVESUEpICQoRU5BQkxFX0VOQ1JZUFRFRF9NRURJ
QV9WMikgJChFTkFCTEVfRklMVEVSU19MRVZFTF8yKSAkKEVOQUJMRV9GT05UX0xPQURfRVZFTlRT
KSAkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkgJChFTkFCTEVfR0FN
RVBBRF9ERVBSRUNBVEVEKSAkKEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVfSElEREVOX1BB
R0VfRE9NX1RJTUVSX1RIUk9UVExJTkcpICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVf
U0VSVklDRV9DT05UUk9MUykgJChFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkgJChFTkFCTEVfSU5E
RVhFRF9EQVRBQkFTRV9JTl9XT1JLRVJTKSAkKEVOQUJMRV9JTkRJRV9VSSkgJChFTkFCTEVfSU5Q
VVRfVFlQRV9DT0xPUikgJChFTkFCTEVfSU5QVVRfVFlQRV9DT0xPUl9QT1BPVkVSKSAkKEVOQUJM
RV9JTlBVVF9UWVBFX0RBVEUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVfSU5DT01QTEVU
RSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FMKSAkKEVOQUJMRV9JTlBVVF9UWVBF
X01PTlRIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1RJTUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfV0VF
SykgJChFTkFCTEVfV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAkKEVOQUJMRV9JTlRMKSAkKEVO
QUJMRV9JT1NfR0VTVFVSRV9FVkVOVFMpICQoRU5BQkxFX0lPU19URVhUX0FVVE9TSVpJTkcpICQo
RU5BQkxFX0lPU19UT1VDSF9FVkVOVFMpICQoRU5BQkxFX0xFR0FDWV9DU1NfVkVORE9SX1BSRUZJ
WEVTKSAkKEVOQUJMRV9MRUdBQ1lfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfTEVHQUNZX1ZFTkRP
Ul9QUkVGSVhFUykgJChFTkFCTEVfTEVHQUNZX1dFQl9BVURJTykgJChFTkFCTEVfTEVUVEVSUFJF
U1MpICQoRU5BQkxFX0xJTktfUFJFRkVUQ0gpICQoRU5BQkxFX01BVEhNTCkgJChFTkFCTEVfTUVE
SUFfQ09OVFJPTFNfU0NSSVBUKSAkKEVOQUJMRV9NRURJQV9TRVNTSU9OKSAkKEVOQUJMRV9NRURJ
QV9TT1VSQ0UpICQoRU5BQkxFX01FRElBX1NUQVRJU1RJQ1MpICQoRU5BQkxFX01FRElBX1NUUkVB
TSkgJChFTkFCTEVfTUVURVJfRUxFTUVOVCkgJChFTkFCTEVfTUhUTUwpICQoRU5BQkxFX01PVVNF
X0NVUlNPUl9TQ0FMRSkgJChFTkFCTEVfTkFWSUdBVE9SX0NPTlRFTlRfVVRJTFMpICQoRU5BQkxF
X05BVklHQVRPUl9IV0NPTkNVUlJFTkNZKSAkKEVOQUJMRV9OT1RJRklDQVRJT05TKSAkKEVOQUJM
RV9QREZLSVRfUExVR0lOKSAkKEVOQUJMRV9QSUNUVVJFX1NJWkVTKSAkKEVOQUJMRV9QT0lOVEVS
X0xPQ0spICQoRU5BQkxFX1BST01JU0VTKSAkKEVOQUJMRV9QUk9YSU1JVFlfRVZFTlRTKSAkKEVO
QUJMRV9QVUJMSUNfU1VGRklYX0xJU1QpICQoRU5BQkxFX1FVT1RBKSAkKEVOQUJMRV9SRVFVRVNU
X0FOSU1BVElPTl9GUkFNRSkgJChFTkFCTEVfUkVRVUVTVF9BVVRPQ09NUExFVEUpICQoRU5BQkxF
X1JFTU9URV9JTlNQRUNUT1IpICQoRU5BQkxFX1JFU09MVVRJT05fTUVESUFfUVVFUlkpICQoRU5B
QkxFX1JVQkJFUl9CQU5ESU5HKSAkKEVOQUJMRV9DU1NfU0NST0xMX1NOQVApICQoRU5BQkxFX1NQ
RUVDSF9TWU5USEVTSVMpICQoRU5BQkxFX1NUUkVBTVNfQVBJKSAkKEVOQUJMRV9TVUJUTEVfQ1JZ
UFRPKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1NWR19PVEZfQ09OVkVSVEVSKSAkKEVO
QUJMRV9URUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJChFTkFCTEVfVEVNUExBVEVfRUxFTUVO
VCkgJChFTkFCTEVfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9UT1VDSF9FVkVOVFMpICQoRU5B
QkxFX1RPVUNIX0lDT05fTE9BRElORykgJChFTkFCTEVfQ1NTX1RSQUlMSU5HX1dPUkQpICQoRU5B
QkxFX1VTRVJTRUxFQ1RfQUxMKSAkKEVOQUJMRV9WSURFTykgJChFTkFCTEVfVklERU9fVFJBQ0sp
ICQoRU5BQkxFX0RBVEFDVUVfVkFMVUUpICQoRU5BQkxFX1ZJRVdfTU9ERV9DU1NfTUVESUEpICQo
RU5BQkxFX1dBU00pICQoRU5BQkxFX1dFQkdMKSAkKEVOQUJMRV9XRUJHTDIpICQoRU5BQkxFX1dF
Ql9BVURJTykgJChFTkFCTEVfV0VCX1JFUExBWSkgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5B
QkxFX1dFQl9USU1JTkcpICQoRU5BQkxFX1dFQlZUVF9SRUdJT05TKSAkKEVOQUJMRV9YSFJfVElN
RU9VVCkgJChFTkFCTEVfWFNMVCkgJChFTkFCTEVfRlRMX0pJVCkgJChFTkFCTEVfSklUKSAkKEVO
QUJMRV9TQVRVUkFURURfTEFZT1VUX0FSSVRITUVUSUMpICQoRU5BQkxFX1ZJREVPX1BSRVNFTlRB
VElPTl9NT0RFKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257347</attachid>
            <date>2015-07-23 04:22:19 -0700</date>
            <delta_ts>2015-08-05 04:45:04 -0700</delta_ts>
            <desc>Work in progress. Clean up the code.</desc>
            <filename>bug-146064-20150723042104.patch</filename>
            <type>text/plain</type>
            <size>113994</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg3MjE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
NmNhNmQyZGZjNzQ2MDAxNTA2OGIzMDgzOGU0ZThkMDQxMmFhMWRkLi5mNGJjY2ZmY2EwNWVkZWYw
MjA3MzIyZjc4YjYyMDdiOWQ3ZDE5ZWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNjEgQEAKKzIwMTUtMDctMjMgIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0Bn
bWFpbC5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBuYXRpdmVseSBzdXBwb3J0IFdlYkFzc2Vt
Ymx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYw
NjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQ
SS9KU1NjcmlwdFJlZi5jcHA6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnNvdXJjZUNvZGVGb3JUb29scyk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OmdlbmVyYXRlRnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRD
aGlsZHJlbik6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAg
ICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjphdHRlbXB0VG9JbmxpbmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklURGlzYXNz
ZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SklURGlzYXNzZW1ibGVyOjpkdW1wKToKKyAgICAg
ICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6Cisg
ICAgICAgIChmdW5jdGlvbkxvYWRXZWJBc3NlbWJseSk6CisgICAgICAgICogcGFyc2VyL1NvdXJj
ZUNvZGUuY3BwOgorICAgICAgICAoSlNDOjpTb3VyY2VDb2RlOjp0b1VURjgpOgorICAgICAgICAq
IHBhcnNlci9Tb3VyY2VQcm92aWRlci5oOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVNvdXJj
ZVByb3ZpZGVyOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseVNvdXJjZVByb3Zp
ZGVyOjpkYXRhKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcjo6V2Vi
QXNzZW1ibHlTb3VyY2VQcm92aWRlcik6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNw
cDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUJhc2U6OmlzV2ViQXNzZW1ibHlGdW5jdGlvbik6
CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6Om5ld0NvZGVCbG9ja0Zvcik6CisgICAg
ICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb25JbXBsKToKKyAg
ICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUJh
c2U6OmlzRXZhbEV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6aXNG
dW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6aXNQcm9n
cmFtRXhlY3V0YWJsZSk6CisgICAgICAgICogd2FzbS9XQVNNQ29kZUdlbmVyYXRvci5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6V0FTTTo6Z2V0SW50ZXJuYWxGdW5jdGlvbik6CisgICAgICAgIChK
U0M6OldBU006OkNvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpX
QVNNOjpDb2RlR2VuZXJhdG9yOjpzdGFydEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V0FTTTo6
Q29kZUdlbmVyYXRvcjo6ZW5kRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpXQVNNOjpDb2RlR2Vu
ZXJhdG9yOjpzZXRMb2NhbFR5cGVzKToKKyAgICAgICAgKEpTQzo6V0FTTTo6Q29kZUdlbmVyYXRv
cjo6dW5ib3hBcmd1bWVudCk6CisgICAgICAgIChKU0M6OldBU006OkNvZGVHZW5lcmF0b3I6OnNl
dExvY2FsWmVyb0kzMik6CisgICAgICAgIChKU0M6OldBU006OkNvZGVHZW5lcmF0b3I6OmFkZEkz
Mik6CisgICAgICAgIChKU0M6OldBU006OkNvZGVHZW5lcmF0b3I6Om11bEkzMik6CisgICAgICAg
IChKU0M6OldBU006OkNvZGVHZW5lcmF0b3I6OnJlZ0kzMik6CisgICAgICAgIChKU0M6OldBU006
OkNvZGVHZW5lcmF0b3I6OnJlZ0Y2NCk6CisgICAgICAgIChKU0M6OldBU006OkNvZGVHZW5lcmF0
b3I6OnNldExvY2FsKToKKyAgICAgICAgKEpTQzo6V0FTTTo6Q29kZUdlbmVyYXRvcjo6Z2V0TG9j
YWxJMzIpOgorICAgICAgICAoSlNDOjpXQVNNOjpDb2RlR2VuZXJhdG9yOjpjYWxsSW50ZXJuYWwp
OgorICAgICAgICAoSlNDOjpXQVNNOjpDb2RlR2VuZXJhdG9yOjpyZXR1cm5JMzIpOgorICAgICAg
ICAoSlNDOjpXQVNNOjpDb2RlR2VuZXJhdG9yOjplbWl0SnVtcCk6CisgICAgICAgIChKU0M6OldB
U006OkNvZGVHZW5lcmF0b3I6OmJyYW5jaFRlc3RJMzIpOgorICAgICAgICAoSlNDOjpXQVNNOjpD
b2RlR2VuZXJhdG9yOjpsaW5rSnVtcCk6CisgICAgICAgIChKU0M6OldBU006OkNvZGVHZW5lcmF0
b3I6OmppdENvZGUpOgorICAgICAgICAoSlNDOjpXQVNNOjpDb2RlR2VuZXJhdG9yOjphbGxvY2F0
ZVNwYWNlT25TdGFjayk6CisgICAgICAgIChKU0M6OldBU006OkNvZGVHZW5lcmF0b3I6OmRlYWxs
b2NhdGVTcGFjZU9uU3RhY2spOgorICAgICAgICAoSlNDOjpXQVNNOjpDb2RlR2VuZXJhdG9yOjps
b2NhbEFkZHJlc3MpOgorICAgICAgICAoSlNDOjpXQVNNOjpDb2RlR2VuZXJhdG9yOjp0ZW1wb3Jh
cnlBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6V0FTTTo6Q29kZUdlbmVyYXRvcjo6ZW1pdE5ha2Vk
Q2FsbCk6CisgICAgICAgICogd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6V0FTTTo6RnVuY3Rpb25QYXJzZXI6OmNoZWNrU3ludGF4QW5kQ2FsY3VsYXRl
U291cmNlUmFuZ2UpOgorICAgICAgICAoSlNDOjpXQVNNOjpGdW5jdGlvblBhcnNlcjo6Z2VuZXJh
dGVDb2RlKToKKyAgICAgICAgKEpTQzo6V0FTTTo6RnVuY3Rpb25QYXJzZXI6OnBhcnNlRnVuY3Rp
b24pOgorICAgICAgICAoSlNDOjpXQVNNOjpGdW5jdGlvblBhcnNlcjo6cGFyc2VTaWduYXR1cmUp
OgorICAgICAgICAoSlNDOjpXQVNNOjpGdW5jdGlvblBhcnNlcjo6cGFyc2VWYXJzKToKKyAgICAg
ICAgKEpTQzo6V0FTTTo6RnVuY3Rpb25QYXJzZXI6OnBhcnNlU3RhdGVtZW50KToKKyAgICAgICAg
KEpTQzo6V0FTTTo6RnVuY3Rpb25QYXJzZXI6OnBhcnNlU2V0TG9jYWxTdGF0ZW1lbnQpOgorICAg
ICAgICAoSlNDOjpXQVNNOjpGdW5jdGlvblBhcnNlcjo6cGFyc2VSZXR1cm5TdGF0ZW1lbnQpOgor
ICAgICAgICAoSlNDOjpXQVNNOjpGdW5jdGlvblBhcnNlcjo6cGFyc2VTdGF0ZW1lbnRMaXN0KToK
KyAgICAgICAgKEpTQzo6V0FTTTo6RnVuY3Rpb25QYXJzZXI6OnBhcnNlQmxvY2tTdGF0ZW1lbnQp
OgorICAgICAgICAoSlNDOjpXQVNNOjpGdW5jdGlvblBhcnNlcjo6cGFyc2VJZlN0YXRlbWVudCk6
CisgICAgICAgIChKU0M6OldBU006OkZ1bmN0aW9uUGFyc2VyOjpwYXJzZUlmRWxzZVN0YXRlbWVu
dCk6CisgICAgICAgIChKU0M6OldBU006OkZ1bmN0aW9uUGFyc2VyOjpwYXJzZUV4cHJlc3Npb24p
OgorICAgICAgICAoSlNDOjpXQVNNOjpGdW5jdGlvblBhcnNlcjo6cGFyc2VFeHByZXNzaW9uSTMy
KToKKyAgICAgICAgKEpTQzo6V0FTTTo6RnVuY3Rpb25QYXJzZXI6OnBhcnNlTGl0ZXJhbEltbWVk
aWF0ZSk6CisgICAgICAgIChKU0M6OldBU006OkZ1bmN0aW9uUGFyc2VyOjpwYXJzZUdldExvY2Fs
KToKKyAgICAgICAgKEpTQzo6V0FTTTo6RnVuY3Rpb25QYXJzZXI6OnBhcnNlQ2FsbEludGVybmFs
KToKKyAgICAgICAgKEpTQzo6V0FTTTo6RnVuY3Rpb25QYXJzZXI6OnBhcnNlQmluYXJ5T3BJMzIp
OgorICAgICAgICAoSlNDOjpXQVNNOjpGdW5jdGlvblBhcnNlcjo6bG9nRXJyb3IpOgorICAgICAg
ICAqIHdhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpXQVNN
OjpGdW5jdGlvblBhcnNlcjo6RnVuY3Rpb25QYXJzZXIpOgorICAgICAgICAoSlNDOjpXQVNNOjpG
dW5jdGlvblBhcnNlcjo6cmVhZGVyKToKKyAgICAgICAgKEpTQzo6V0FTTTo6RnVuY3Rpb25QYXJz
ZXI6OnNldEVycm9yTWVzc2FnZSk6CisgICAgICAgIChKU0M6OldBU006OkZ1bmN0aW9uUGFyc2Vy
OjpoYXNFcnJvcik6CisgICAgICAgICogd2FzbS9XQVNNTW9kdWxlLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OldBU006Ok1vZHVsZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpX
QVNNOjpNb2R1bGU6OmZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V0FTTTo6TW9kdWxlOjphcnJh
eUJ1ZmZlckRhdGEpOgorICAgICAgICAoSlNDOjpXQVNNOjpNb2R1bGU6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAoSlNDOjpXQVNNOjpNb2R1bGU6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAg
ICAgIChKU0M6OldBU006Ok1vZHVsZTo6cHV0KToKKyAgICAgICAgKEpTQzo6V0FTTTo6TW9kdWxl
OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OldBU006Ok1vZHVsZTo6ZGVsZXRl
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpXQVNNOjpNb2R1bGU6OmdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyk6CisgICAgICAgICogd2FzbS9XQVNNTW9kdWxlLmg6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpXQVNNOjpNb2R1bGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OldBU006Ok1vZHVs
ZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6V0FTTTo6TW9kdWxlOjpmdW5jdGlv
bkltcG9ydE5hbWUpOgorICAgICAgICAoSlNDOjpXQVNNOjpNb2R1bGU6Ok1vZHVsZSk6CisgICAg
ICAgICogd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OldB
U006Ok1vZHVsZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoSlNDOjpXQVNNOjpNb2R1bGVQYXJz
ZXI6OnBhcnNlQ29uc3RhbnRQb29sU2VjdGlvbik6CisgICAgICAgIChKU0M6OldBU006Ok1vZHVs
ZVBhcnNlcjo6cGFyc2VTaWduYXR1cmVTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V0FTTTo6TW9k
dWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlvbik6CisgICAgICAgIChKU0M6OldB
U006Ok1vZHVsZVBhcnNlcjo6cGFyc2VHbG9iYWxTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V0FT
TTo6TW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKToKKyAgICAg
ICAgKEpTQzo6V0FTTTo6TW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uUG9pbnRlclRhYmxlcyk6
CisgICAgICAgIChKU0M6OldBU006Ok1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRp
b25TZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V0FTTTo6TW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9y
dFNlY3Rpb24pOgorICAgICAgICAoSlNDOjpXQVNNOjpNb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rp
b25EZWZpbml0aW9uKToKKyAgICAgICAgKEpTQzo6V0FTTTo6Y29tcGlsZSk6CisgICAgICAgICog
d2FzbS9XQVNNTW9kdWxlUGFyc2VyLmg6IEFkZGVkLgorICAgICAgICAqIHdhc20vV0FTTU9wY29k
ZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OldBU006Om9wZXJhdG9yfCApOgorICAgICAgICAo
SlNDOjpXQVNNOjpvcGVyYXRvciYpOgorICAgICAgICAoSlNDOjpXQVNNOjp1bnBhY2tPcFdpdGhJ
bW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpXQVNNOjpTaWduYXR1cmU6OlNpZ25hdHVyZSk6Cisg
ICAgICAgICogd2FzbS9XQVNNUmVhZGVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpXQVNNOjpS
ZWFkZXI6OlJlYWRlcik6CisgICAgICAgIChKU0M6OldBU006OlJlYWRlcjo6Y3Vyc29yKToKKyAg
ICAgICAgKEpTQzo6V0FTTTo6UmVhZGVyOjpzZXRDdXJzb3IpOgorICAgICAgICAoSlNDOjpXQVNN
OjpSZWFkZXI6OnJlYWRTd2l0Y2hDYXNlKToKKyAgICAgICAgKEpTQzo6V0FTTTo6UmVhZGVyOjpy
ZWFkT3BWb2lkKToKKyAgICAgICAgKEpTQzo6V0FTTTo6UmVhZGVyOjpyZWFkRXhwb3J0Rm9ybWF0
KToKKyAgICAgICAgKEpTQzo6V0FTTTo6UmVhZGVyOjpyZWFkVHlwZSk6CisgICAgICAgIChKU0M6
OldBU006OlJlYWRlcjo6cmVhZFJldHVyblR5cGUpOgorICAgICAgICAoSlNDOjpXQVNNOjpSZWFk
ZXI6OnJlYWRDaGFyKToKKyAgICAgICAgKEpTQzo6V0FTTTo6UmVhZGVyOjpyZWFkQnl0ZSk6Cisg
ICAgICAgIChKU0M6OldBU006OlJlYWRlcjo6cmVhZEZpeGVkV2lkdGhVbnNpZ25lZEludDMyKToK
KyAgICAgICAgKEpTQzo6V0FTTTo6UmVhZGVyOjpyZWFkRmxvYXQpOgorICAgICAgICAoSlNDOjpX
QVNNOjpSZWFkZXI6OnJlYWREb3VibGUpOgorICAgICAgICAoSlNDOjpXQVNNOjpSZWFkZXI6OnJl
YWRDb2RlKToKKyAgICAgICAgKEpTQzo6V0FTTTo6UmVhZGVyOjpyZWFkVW5zaWduZWRJbnQzMik6
CisgICAgICAgIChKU0M6OldBU006OlJlYWRlcjo6cmVhZEludDMyKToKKyAgICAgICAgKEpTQzo6
V0FTTTo6UmVhZGVyOjppZkkzMkxpdGVyYWwpOgorICAgICAgICAqIHdhc20vV0FTTVN5bnRheENo
ZWNrZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OldBU006OlN5bnRheENoZWNrZXI6OlN5bnRh
eENoZWNrZXIpOgorICAgICAgICAoSlNDOjpXQVNNOjpTeW50YXhDaGVja2VyOjpzdGFydEZ1bmN0
aW9uKToKKyAgICAgICAgKEpTQzo6V0FTTTo6U3ludGF4Q2hlY2tlcjo6ZW5kRnVuY3Rpb24pOgor
ICAgICAgICAoSlNDOjpXQVNNOjpTeW50YXhDaGVja2VyOjpzZXRMb2NhbFR5cGVzKToKKyAgICAg
ICAgKEpTQzo6V0FTTTo6U3ludGF4Q2hlY2tlcjo6dW5ib3hBcmd1bWVudCk6CisgICAgICAgIChK
U0M6OldBU006OlN5bnRheENoZWNrZXI6OnNldExvY2FsWmVyb0kzMik6CisgICAgICAgIChKU0M6
OldBU006OlN5bnRheENoZWNrZXI6OmFkZEkzMik6CisgICAgICAgIChKU0M6OldBU006OlN5bnRh
eENoZWNrZXI6Om11bEkzMik6CisgICAgICAgIChKU0M6OldBU006OlN5bnRheENoZWNrZXI6OnJl
Z0kzMik6CisgICAgICAgIChKU0M6OldBU006OlN5bnRheENoZWNrZXI6OnJlZ0Y2NCk6CisgICAg
ICAgIChKU0M6OldBU006OlN5bnRheENoZWNrZXI6OnNldExvY2FsKToKKyAgICAgICAgKEpTQzo6
V0FTTTo6U3ludGF4Q2hlY2tlcjo6Z2V0TG9jYWxJMzIpOgorICAgICAgICAoSlNDOjpXQVNNOjpT
eW50YXhDaGVja2VyOjpjYWxsSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpXQVNNOjpTeW50YXhD
aGVja2VyOjpyZXR1cm5JMzIpOgorICAgICAgICAoSlNDOjpXQVNNOjpTeW50YXhDaGVja2VyOjpl
bWl0SnVtcCk6CisgICAgICAgIChKU0M6OldBU006OlN5bnRheENoZWNrZXI6OmJyYW5jaFRlc3RJ
MzIpOgorICAgICAgICAoSlNDOjpXQVNNOjpTeW50YXhDaGVja2VyOjpsaW5rSnVtcCk6CisKIDIw
MTUtMDctMjIgIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0BnbWFpbC5jb20+CiAKICAg
ICAgICAgQWRkIEVOQUJMRV9XRUJBU1NFTUJMWSBmZWF0dXJlIGZsYWcgZm9yIFdlYkFzc2VtYmx5
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0UmVmLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRSZWYuY3BwCmluZGV4IGMyMGFmNmRm
MmYwZjljMmFiOTRlODZiNzFmMTM5MzExMmRiODExM2UuLjM5YzIzOTkzNDc0ZWVlN2M2ZTkzNjI4
MDk0Y2RhZGY0MmRkNjczNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNTY3JpcHRSZWYuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRS
ZWYuY3BwCkBAIC00Niw2ICs0NiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBXVEY6OmFk
b3B0UmVmKCpuZXcgT3BhcXVlSlNTY3JpcHQodm0sIHVybCwgc3RhcnRpbmdMaW5lTnVtYmVyLCBz
b3VyY2UpKTsKICAgICB9CiAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgdmlydHVhbCBi
b29sIGlzU3RyaW5nU291cmNlKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyNlbmRpZgorCiAgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIHNvdXJj
ZSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewogICAgICAgICByZXR1cm4gbV9zb3VyY2U7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDQ4NjIyZWIzMzI3MzE4ZGVjZWJiMTI0MzYwYzQ2
NzYxM2M1NjE1YjQuLmFkODYyN2I0MDkwOTQ1N2M4NDkzMGU4OGY4ZmFkODdhODljZmFhNWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDIzLDYgKzEwMjMsMTYgQEAKIAkJNzBF
Q0E2MDkxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjA0MUFGREJFQTIwMDQ0
OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlFRTBCRkYxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlh
YmxlRW52aXJvbm1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzlFRTBCRkQxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQu
Y3BwICovOyB9OwogCQk3OUVFMEMwMDFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9u
bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlF
RTBCRkUxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3QjBFOTcyRTFCNUQyNTQ2
MDBBMjkzMDIgLyogV0FTTUNvZGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMEU5NzI0MUI1RDI1M0UwMEEyOTMwMiAvKiBXQVNNQ29k
ZUdlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTdCMEU5NzJGMUI1RDI1NDYwMEEyOTMwMiAvKiBXQVNNTW9kdWxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMEU5NzI1MUI1RDI1M0Uw
MEEyOTMwMiAvKiBXQVNNTW9kdWxlLmNwcCAqLzsgfTsKKwkJN0IwRTk3MzAxQjVEMjU0NjAwQTI5
MzAyIC8qIFdBU01Nb2R1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdCMEU5NzI2MUI1RDI1M0UwMEEyOTMwMiAvKiBXQVNNTW9kdWxlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0IwRTk3MzExQjVE
MjU0NjAwQTI5MzAyIC8qIFdBU01Nb2R1bGVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IwRTk3MjcxQjVEMjUzRTAwQTI5MzAyIC8qIFdB
U01Nb2R1bGVQYXJzZXIuY3BwICovOyB9OworCQk3QjBFOTczMjFCNUQyNTQ2MDBBMjkzMDIgLyog
V0FTTU1vZHVsZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0IwRTk3MjgxQjVEMjUzRTAwQTI5MzAyIC8qIFdBU01Nb2R1bGVQYXJzZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3QjBFOTcz
MzFCNUQyNTQ2MDBBMjkzMDIgLyogV0FTTU9wY29kZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMEU5NzI5MUI1RDI1M0UwMEEyOTMwMiAvKiBXQVNN
T3Bjb2Rlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTdCMEU5NzM0MUI1RDI1NDYwMEEyOTMwMiAvKiBXQVNNRnVuY3Rpb25QYXJzZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IwRTk3MkExQjVE
MjUzRTAwQTI5MzAyIC8qIFdBU01GdW5jdGlvblBhcnNlci5jcHAgKi87IH07CisJCTdCMEU5NzM1
MUI1RDI1NDYwMEEyOTMwMiAvKiBXQVNNRnVuY3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMEU5NzJCMUI1RDI1M0UwMEEyOTMwMiAv
KiBXQVNNRnVuY3Rpb25QYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk3QjBFOTczNjFCNUQyNTQ2MDBBMjkzMDIgLyogV0FTTVJlYWRlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IwRTk3MkMx
QjVEMjUzRTAwQTI5MzAyIC8qIFdBU01SZWFkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3QjBFOTczNzFCNUQyNTQ2MDBBMjkzMDIgLyogV0FT
TVN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdCMEU5NzJEMUI1RDI1M0UwMEEyOTMwMiAvKiBXQVNNU3ludGF4Q2hlY2tlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMDA4Q0RB
MTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzAwOENEODE4NzEyNEJCMDA5NTVDMjQg
LyogSlNQcm9taXNlRGVmZXJyZWQuY3BwICovOyB9OwogCQk3QzAwOENEQjE4NzEyNEJCMDA5NTVD
MjQgLyogSlNQcm9taXNlRGVmZXJyZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDMDA4Q0Q5MTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZl
cnJlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTdDMDA4Q0U3MTg3NjMxQjYwMDk1NUMyNCAvKiBNaWNyb3Rhc2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDA4Q0U1MTg3NjMxQjYwMDk1NUMyNCAv
KiBNaWNyb3Rhc2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMjc2Nyw2ICsyNzc3LDE2IEBACiAJCTcwRUNBNjA0MUFGREJFQTIwMDQ0OTczOSAv
KiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRlbXBsYXRlUmVnaXN0cnlLZXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlF
RTBCRkQxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFyaWFibGVFbnZpcm9ubWVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5RUUwQkZFMUI0QUZCODUwMDAzODVDOSAvKiBW
YXJpYWJsZUVudmlyb25tZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZh
cmlhYmxlRW52aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0IwRTk3
MjQxQjVEMjUzRTAwQTI5MzAyIC8qIFdBU01Db2RlR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFdBU01Db2RlR2VuZXJhdG9yLmg7IHBhdGggPSB3YXNtL1dBU01D
b2RlR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCMEU5NzI1MUI1
RDI1M0UwMEEyOTMwMiAvKiBXQVNNTW9kdWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IFdBU01Nb2R1bGUuY3BwOyBwYXRoID0gd2FzbS9XQVNNTW9kdWxlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0IwRTk3MjYxQjVEMjUzRTAwQTI5MzAyIC8q
IFdBU01Nb2R1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0FTTU1vZHVs
ZS5oOyBwYXRoID0gd2FzbS9XQVNNTW9kdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTdCMEU5NzI3MUI1RDI1M0UwMEEyOTMwMiAvKiBXQVNNTW9kdWxlUGFyc2VyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdBU01Nb2R1bGVQYXJzZXIuY3BwOyBw
YXRoID0gd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJN0IwRTk3MjgxQjVEMjUzRTAwQTI5MzAyIC8qIFdBU01Nb2R1bGVQYXJzZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0FTTU1vZHVsZVBhcnNlci5oOyBwYXRoID0g
d2FzbS9XQVNNTW9kdWxlUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdC
MEU5NzI5MUI1RDI1M0UwMEEyOTMwMiAvKiBXQVNNT3Bjb2Rlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBXQVNNT3Bjb2Rlcy5oOyBwYXRoID0gd2FzbS9XQVNNT3Bjb2Rlcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QjBFOTcyQTFCNUQyNTNFMDBBMjkzMDIg
LyogV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IFdBU01GdW5jdGlvblBhcnNlci5jcHA7IHBhdGggPSB3YXNtL1dBU01GdW5jdGlvblBh
cnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdCMEU5NzJCMUI1RDI1M0Uw
MEEyOTMwMiAvKiBXQVNNRnVuY3Rpb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gV0FTTUZ1bmN0aW9uUGFyc2VyLmg7IHBhdGggPSB3YXNtL1dBU01GdW5jdGlvblBh
cnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QjBFOTcyQzFCNUQyNTNFMDBB
MjkzMDIgLyogV0FTTVJlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBX
QVNNUmVhZGVyLmg7IHBhdGggPSB3YXNtL1dBU01SZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJN0IwRTk3MkQxQjVEMjUzRTAwQTI5MzAyIC8qIFdBU01TeW50YXhDaGVja2Vy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdBU01TeW50YXhDaGVja2VyLmg7
IHBhdGggPSB3YXNtL1dBU01TeW50YXhDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTdDMDA4Q0Q4MTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Byb21pc2VEZWZlcnJlZC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMDA4Q0Q5MTg3MTI0QkIwMDk1NUMy
NCAvKiBKU1Byb21pc2VEZWZlcnJlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1Byb21pc2VEZWZlcnJlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzAw
OENFNTE4NzYzMUI2MDA5NTVDMjQgLyogTWljcm90YXNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE1pY3JvdGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MzYxOSw2ICszNjM5LDcgQEAKIAkJCQk5OUU0NUEwQzE4QTAxRTkzMDAyNkQ4OEYgLyogcmVwbGF5
ICovLAogCQkJCTkzMkZDM0MyMDgyNEJCNzAwMDVCM0M3NSAvKiBSZXNvdXJjZXMgKi8sCiAJCQkJ
N0VGNkUwQkIwRUI3QTFFQzAwNzlBRkFGIC8qIHJ1bnRpbWUgKi8sCisJCQkJN0IwRTk3MjMxQjVE
MjUyNjAwQTI5MzAyIC8qIHdhc20gKi8sCiAJCQkJMTQxMjExMDAwQTQ4NzcyNjAwNDgwMjU1IC8q
IHRlc3RzICovLAogCQkJCTg2MDNDRUYwMTRDNzUzRUYwMEFFNTlFMyAvKiB0b29scyAqLywKIAkJ
CQk4NkVBQzQ4QzBGOTNFOEI5MDA4RUM5NDggLyogeWFyciAqLywKQEAgLTQyODMsNiArNDMwNCwy
MyBAQAogCQkJcGF0aCA9IGRpc2Fzc2VtYmxlci9BUk12NzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CiAJCX07CisJCTdCMEU5NzIzMUI1RDI1MjYwMEEyOTMwMiAvKiB3YXNtICovID0gewor
CQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3QjBFOTcyNDFCNUQyNTNF
MDBBMjkzMDIgLyogV0FTTUNvZGVHZW5lcmF0b3IuaCAqLywKKwkJCQk3QjBFOTcyQTFCNUQyNTNF
MDBBMjkzMDIgLyogV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcCAqLywKKwkJCQk3QjBFOTcyQjFCNUQy
NTNFMDBBMjkzMDIgLyogV0FTTUZ1bmN0aW9uUGFyc2VyLmggKi8sCisJCQkJN0IwRTk3MjUxQjVE
MjUzRTAwQTI5MzAyIC8qIFdBU01Nb2R1bGUuY3BwICovLAorCQkJCTdCMEU5NzI2MUI1RDI1M0Uw
MEEyOTMwMiAvKiBXQVNNTW9kdWxlLmggKi8sCisJCQkJN0IwRTk3MjcxQjVEMjUzRTAwQTI5MzAy
IC8qIFdBU01Nb2R1bGVQYXJzZXIuY3BwICovLAorCQkJCTdCMEU5NzI4MUI1RDI1M0UwMEEyOTMw
MiAvKiBXQVNNTW9kdWxlUGFyc2VyLmggKi8sCisJCQkJN0IwRTk3MjkxQjVEMjUzRTAwQTI5MzAy
IC8qIFdBU01PcGNvZGVzLmggKi8sCisJCQkJN0IwRTk3MkMxQjVEMjUzRTAwQTI5MzAyIC8qIFdB
U01SZWFkZXIuaCAqLywKKwkJCQk3QjBFOTcyRDFCNUQyNTNFMDBBMjkzMDIgLyogV0FTTVN5bnRh
eENoZWNrZXIuaCAqLywKKwkJCSk7CisJCQluYW1lID0gd2FzbTsKKwkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CisJCX07CiAJCTdFMzlEODFEMEVDMzhFRkEwMDNBRjExQSAvKiBieXRlY29tcGls
ZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNTY0Miw2
ICs1NjgwLDcgQEAKIAkJCQk2NThEM0E1NjE5NjM4MjY4MDAzQzQ1RDYgLyogVk1FbnRyeVJlY29y
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFRjlCMTYxQTFENDQwMDAwNzAyRTkwIC8qIGdlbmVy
YXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICovLAogCQkJ
CTJBRDJFREZCMTk3OTlFMzgwMDRENjQ3OCAvKiBFbnVtZXJhdGlvbk1vZGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTdCMEU5NzMwMUI1RDI1NDYwMEEyOTMwMiAvKiBXQVNNTW9kdWxlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNUVGOUIxODFBMUQ0NDA2MDA3MDJFOTAgLyogZ2VuZXJhdGVfY3BwX3By
b3RvY29sX3R5cGVzX2hlYWRlci5weSBpbiBIZWFkZXJzICovLAogCQkJCUE1RUY5QjE5MUExRDQ0
MDcwMDcwMkU5MCAvKiBnZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24u
cHkgaW4gSGVhZGVycyAqLywKIAkJCQlDNEY0QjZGNjFBMDVDOTg0MDA1Q0FCNzYgLyogb2JqY19n
ZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8sCkBAIC01OTI3LDYgKzU5NjYsNyBA
QAogCQkJCTBGMkJEQzRCMTUyMjgwOUQwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFt
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk2MDE0RUY5MEJEMDBDNzI1MzIgLyogREZHVmly
dHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM5N0Y0
MjE4MjAyMTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJN0IwRTk3MzIxQjVEMjU0NjAwQTI5MzAyIC8qIFdBU01Nb2R1bGVQYXJz
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREIyQ0U4MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdX
b3JrbGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3MzExNThFQkQ1NDAwNENCOUZGIC8q
IERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNDQ3RUUxN0EwQkQ3MDAwRjU4
OThFIC8qIER1bXBDb250ZXh0LmggaW4gSGVhZGVycyAqLywKQEAgLTYwMzMsNiArNjA3Myw3IEBA
CiAJCQkJMTQyRTMxMzQxMzRGRjBBNjAwQUZBREI1IC8qIEhhbmRsZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQzI4MzE5MDAxNkZFNEI3RDAwMTU3QkZEIC8qIEhhbmRsZUJsb2NrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlDMjgzMTkwMjE2RkU1MzNFMDAxNTdCRkQgLyogSGFuZGxlQmxvY2tJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKKwkJCQk3QjBFOTczNjFCNUQyNTQ2MDBBMjkzMDIgLyogV0FTTVJl
YWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzQTkxNEJDRjU2MjAwODg1QjRGIC8qIEhh
bmRsZXJJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJENERFQzE5ODMyREM0MDA3RDRCMTkg
LyogVHlwZVByb2ZpbGVyTG9nLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJFMzEzNjEzNEZGMEE2
MDBBRkFEQjUgLyogSGFuZGxlU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTYxNzMsNiArNjIxNCw3
IEBACiAJCQkJMEY1QTEyNzQxOTJEOUZERjAwODc2NEEzIC8qIERGR0RvZXNHQy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQjY2RjUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGNjE3QjZCNUFCMDBB
N0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk3QjBFOTczNzFCNUQyNTQ2MDBBMjkzMDIgLyogV0FTTVN5bnRheENoZWNr
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIxMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0ds
b2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwODYxODlCMUI3RTAwNjMzMjMx
IC8qIEpTR2xvYmFsT2JqZWN0Q29uc29sZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTk0
NTU5MzE4MjQ3NDQ3MDBDQzM4NDMgLyogSlNHbG9iYWxPYmplY3REZWJ1Z2dhYmxlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTYyMjAsNiArNjI2Miw3IEBACiAJCQkJODZFODU1MzkxMTFCOTk2ODAwMUFG
NTFFIC8qIEpTU3RyaW5nQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjYwMEI1QTcxNTJC
QUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzQyODBFMTZGNUNEMDBCMzQ0NjAgLyogSlNTdHJpbmdSZWYuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTdCMEU5NzMzMUI1RDI1NDYwMEEyOTMwMiAvKiBXQVNNT3Bjb2Rlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0MjkwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RyaW5nUmVmQ0YuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBMjhENEE4MTc3QjcxQzgwMDA3RkEzQyAvKiBKU1N0cmluZ1JlZlByaXZh
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTE5RDBEMTU3RUUwQTIwMDRBNEU3RCAvKiBKU1N5
bWJvbFRhYmxlT2JqZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTYzMjMsNiArNjM2Niw3IEBACiAJ
CQkJNzBFQ0E2MDkxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDNDNGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBOb2Rlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTlFNDVBMjgxOEExQjI1OTAwMjZEODhGIC8qIE5vbmRldGVybWluaXN0
aWNJbnB1dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0IwRTk3MzUxQjVEMjU0NjAwQTI5MzAyIC8q
IFdBU01GdW5jdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NEMDIxOUFEQTQx
MTAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0NDEwRTE2RjVDRDAwQjM0NDYwIC8qIE51bWJlckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjU3ODBBMjE4RkUxRTk4MDAxRTcyRDkgLyogUHVyZU5hTi5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02Mzc2LDYgKzY0MjAsNyBAQAogCQkJCTBGRjcyOUMwMTY2QUQzNjAwMDBGNUJBMyAv
KiBQcm9maWxlck9yaWdpblN0YWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxMDU4QzE2NzU0
ODMzMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIx
MDU4RTE2NzU0ODNBMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0U2l0ZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJN0IwRTk3MkUxQjVEMjU0NjAwQTI5MzAyIC8qIFdBU01Db2RlR2VuZXJhdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjEzOTEyQzE2NzcxQzNEMDA5Q0NCMDcgLyogUHJvZmlsZXJQ
cm9maWxlZEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdGQjYxMDAxMDQwQzM4QjAw
MTdBMjg2IC8qIFByb3BlcnR5RGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5NTQz
N0QwRUJBNzBGRDAwNzJCNkQzIC8qIFByb3BlcnR5TWFwSGFzaFRhYmxlLmggaW4gSGVhZGVycyAq
LywKQEAgLTcxOTQsNiArNzIzOSw3IEBACiAJCQkJMEZGRkM5NUQxNEVGOTBCMzAwQzcyNTMyIC8q
IERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MkZDQ0ZCMThBNjAwNzAwMDFBMjdGOCAvKiBERkdTYWZlcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODZFQzlERDIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTdCMEU5NzJGMUI1RDI1NDYwMEEyOTMwMiAvKiBXQVNNTW9kdWxl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgwRjFGMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgwRjREMTQzNTNC
MjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3RDg5Q0ZGMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC03NTI2LDcgKzc1NzIsOSBAQAogCQkJCTBGNjIzNzk3MUFFNDVDQTcw
MEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEYxMzkxMjkxNjc3MUMzMzAwOUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlBRjE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmls
ZXJDb21waWxhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QjBFOTczNDFCNUQyNTQ2MDBB
MjkzMDIgLyogV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcy
OUIwMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uS2luZC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk3QjBFOTczMTFCNUQyNTQ2MDBBMjkzMDIgLyogV0FTTU1vZHVsZVBhcnNl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMTE2NkFEMzVDMDAwRjVCQTMgLyogUHJv
ZmlsZXJDb21waWxlZEJ5dGVjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIyMTY2
QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMTkwQ0FDMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmNwcCBp
biBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAppbmRleCAwNDFmZjA4MzhlMzMxMGY5NzA5ZTUxZDRmYjBkODA1MzIwZDc0NWZmLi4wYzE1
NGYwNmUwYzU5NmJjY2NjOWM4NjM1YTdmNWUyNTQ2YjkxODQ3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtMTE5LDYgKzExOSwxMCBAQCBDU3Ry
aW5nIENvZGVCbG9jazo6c291cmNlQ29kZUZvclRvb2xzKCkgY29uc3QKICAgICAKICAgICBTb3Vy
Y2VQcm92aWRlciogcHJvdmlkZXIgPSBzb3VyY2UoKTsKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxl
KCkpOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBpZiAoZXhlY3V0YWJsZS0+aXNXZWJB
c3NlbWJseUZ1bmN0aW9uKCkpCisgICAgICAgIHJldHVybiAiZnVuY3Rpb24gW3dlYmFzc2VtYmx5
XSI7CisjZW5kaWYKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWQgPSBl
eGVjdXRhYmxlLT51bmxpbmtlZEV4ZWN1dGFibGUoKTsKICAgICB1bnNpZ25lZCB1bmxpbmtlZFN0
YXJ0T2Zmc2V0ID0gdW5saW5rZWQtPnN0YXJ0T2Zmc2V0KCk7CiAgICAgdW5zaWduZWQgbGlua2Vk
U3RhcnRPZmZzZXQgPSBleGVjdXRhYmxlLT5zb3VyY2UoKS5zdGFydE9mZnNldCgpOwpAQCAtMTc0
OCwxMSArMTc1MiwyMCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbgogICAgIG1fdmlzaXRBZ2dy
ZWdhdGVIYXNCZWVuQ2FsbGVkLnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVk
KTsKIAogICAgIEFTU0VSVChtX2hlYXAtPmlzRGVmZXJyZWQoKSk7Ci0gICAgQVNTRVJUKG1fc2Nv
cGVSZWdpc3Rlci5pc0xvY2FsKCkpOwotCiAgICAgQVNTRVJUKG1fc291cmNlKTsKICAgICBzZXRO
dW1QYXJhbWV0ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwogCisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGlmIChvd25lckV4ZWN1dGFibGUtPmlzV2ViQXNzZW1i
bHlGdW5jdGlvbigpKSB7CisgICAgICAgIG1fc3ltYm9sVGFibGVDb25zdGFudEluZGV4ID0gMDsg
Ly8gRklYTUU6CisgICAgICAgIG1faGVhcC0+bV9jb2RlQmxvY2tzLmFkZCh0aGlzKTsKKyAgICAg
ICAgbV9oZWFwLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChzaXplb2YoQ29kZUJsb2NrKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIEFTU0VSVChtX3Njb3BlUmVn
aXN0ZXIuaXNMb2NhbCgpKTsKKwogICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSB8fCB2bSgp
LT5jb250cm9sRmxvd1Byb2ZpbGVyKCkpCiAgICAgICAgIHZtKCktPmZ1bmN0aW9uSGFzRXhlY3V0
ZWRDYWNoZSgpLT5yZW1vdmVVbmV4ZWN1dGVkUmFuZ2UobV9vd25lckV4ZWN1dGFibGUtPnNvdXJj
ZUlEKCksIG1fb3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgbV9v
d25lckV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCmluZGV4
IDY1MjQ5OThjOGNiM2NiZDkwOGUzYzA5NzI5NzVmZGFkNDc0ZWFmYzcuLmI4MDFhNmFlZTBkYzg0
ZjM1MTJhYTQ4YzlkMGVhYTA1NzU5OWVmNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcApAQCAtMzksNiArMzksNyBAQAog
I2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCiAjaW5jbHVk
ZSAiVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5oIgorI2luY2x1ZGUgIldBU01Nb2R1bGUuaCIK
ICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTU3LDYgKzU4
LDEzIEBAIHN0YXRpYyBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiBnZW5lcmF0ZUZ1bmN0aW9u
Q29kZUJsb2NrKAogICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgRGVidWdnZXJNb2Rl
IGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwKICAgICBVbmxpbmtlZEZ1
bmN0aW9uS2luZCBmdW5jdGlvbktpbmQsIFBhcnNlckVycm9yJiBlcnJvcikKIHsKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCisgICAgaWYgKGV4ZWN1dGFibGUtPmlzV2ViQXNzZW1ibHlGdW5jdGlv
bigpKSB7CisgICAgICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHJlc3VsdCA9IFVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZSgmdm0sIEZ1bmN0aW9uQ29kZSwgRXhlY3V0YWJs
ZUluZm8oZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBleGVjdXRhYmxlLT5jb25z
dHJ1Y3RvcktpbmQoKSkpOworICAgICAgICByZXN1bHQtPnNldE51bVBhcmFtZXRlcnMoMSk7IC8v
IEZJWE1FOiBIYWNreS4KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisjZW5kaWYKICAg
ICBKU1BhcnNlckJ1aWx0aW5Nb2RlIGJ1aWx0aW5Nb2RlID0gZXhlY3V0YWJsZS0+aXNCdWlsdGlu
RnVuY3Rpb24oKSA/IEpTUGFyc2VyQnVpbHRpbk1vZGU6OkJ1aWx0aW4gOiBKU1BhcnNlckJ1aWx0
aW5Nb2RlOjpOb3RCdWlsdGluOwogICAgIEpTUGFyc2VyU3RyaWN0TW9kZSBzdHJpY3RNb2RlID0g
ZXhlY3V0YWJsZS0+aXNJblN0cmljdENvbnRleHQoKSA/IEpTUGFyc2VyU3RyaWN0TW9kZTo6U3Ry
aWN0IDogSlNQYXJzZXJTdHJpY3RNb2RlOjpOb3RTdHJpY3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PEZ1bmN0aW9uTm9kZT4gZnVuY3Rpb24gPSBwYXJzZTxGdW5jdGlvbk5vZGU+KApAQCAtMTA0LDEx
ICsxMTIsNDQgQEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3QKICAgICAsIG1fY29uc3RydWN0QWJp
bGl0eShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29uc3RydWN0QWJpbGl0eSkpCiAgICAgLCBtX2Nv
bnN0cnVjdG9yS2luZChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obm9kZS0+Y29uc3RydWN0b3JLaW5k
KCkpKQogICAgICwgbV9mdW5jdGlvbk1vZGUobm9kZS0+ZnVuY3Rpb25Nb2RlKCkpCisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQorICAgICwgbV9pc1dlYkFzc2VtYmx5RnVuY3Rpb24oZmFsc2UpCisj
ZW5kaWYKIHsKICAgICBBU1NFUlQobV9jb25zdHJ1Y3RvcktpbmQgPT0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG5vZGUtPmNvbnN0cnVjdG9yS2luZCgpKSk7CiAgICAgbV9wYXJlbnRTY29wZVREWlZh
cmlhYmxlcy5zd2FwKHBhcmVudFNjb3BlVERaVmFyaWFibGVzKTsKIH0KIAorI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKK1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZShWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBzdGFydE9m
ZnNldCwgdW5zaWduZWQgc291cmNlTGVuZ3RoLCBXQVNNOjpNb2R1bGUqIG1vZHVsZSwgdW5zaWdu
ZWQgZnVuY3Rpb25JbmRleCkKKyAgICA6IEJhc2UoKnZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX25h
bWUoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIlt3ZWJhc3NlbWJseV0iKSkgLy8gRklYTUU6
CisgICAgLCBtX2luZmVycmVkTmFtZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiW3dlYmFz
c2VtYmx5XSIpKSAvLyBGSVhNRToKKyAgICAsIG1fZmlyc3RMaW5lT2Zmc2V0KDApCisgICAgLCBt
X2xpbmVDb3VudCgxKQorICAgICwgbV91bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0KDApCisgICAg
LCBtX3VubGlua2VkQm9keVN0YXJ0Q29sdW1uKDApCisgICAgLCBtX3VubGlua2VkQm9keUVuZENv
bHVtbigwKQorICAgICwgbV9zdGFydE9mZnNldChzdGFydE9mZnNldCkKKyAgICAsIG1fc291cmNl
TGVuZ3RoKHNvdXJjZUxlbmd0aCkKKyAgICAsIG1fcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0KDApCisg
ICAgLCBtX3R5cGVQcm9maWxpbmdTdGFydE9mZnNldCgwKQorICAgICwgbV90eXBlUHJvZmlsaW5n
RW5kT2Zmc2V0KDApCisgICAgLCBtX3BhcmFtZXRlckNvdW50KDEpIC8vIEZJWE1FOgorICAgICwg
bV9mZWF0dXJlcygwKQorICAgICwgbV9pc0luU3RyaWN0Q29udGV4dChmYWxzZSkgLy8gRklYTUU6
CisgICAgLCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzKGZhbHNlKQorICAgICwgbV9pc0J1aWx0aW5G
dW5jdGlvbihmYWxzZSkKKyAgICAsIG1fY29uc3RydWN0QWJpbGl0eShzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oQ29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0KSkKKyAgICAsIG1fY29uc3Ry
dWN0b3JLaW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUpKQor
ICAgICwgbV9mdW5jdGlvbk1vZGUoRnVuY3Rpb25Nb2RlOjpGdW5jdGlvbkV4cHJlc3Npb24pCisg
ICAgLCBtX2lzV2ViQXNzZW1ibHlGdW5jdGlvbih0cnVlKQorICAgICwgbV93ZWJBc3NlbWJseU1v
ZHVsZSgqdm0sIHRoaXMsIG1vZHVsZSkKKyAgICAsIG1fd2ViQXNzZW1ibHlGdW5jdGlvbkluZGV4
KGZ1bmN0aW9uSW5kZXgpCit7Cit9CisjZW5kaWYKKwogdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQogewogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0
PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7CkBAIC0xMTcsNiArMTU4LDEwIEBA
IHZvaWQgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3Qt
Pm1fY29kZUJsb2NrRm9yQ2FsbCk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1f
Y29kZUJsb2NrRm9yQ29uc3RydWN0KTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+
bV9uYW1lVmFsdWUpOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBpZiAodGhpc09iamVj
dC0+bV9pc1dlYkFzc2VtYmx5RnVuY3Rpb24pCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX3dlYkFzc2VtYmx5TW9kdWxlKTsKKyNlbmRpZgogfQogCiBGdW5jdGlvbkV4ZWN1
dGFibGUqIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpsaW5rKFZNJiB2bSwgY29uc3QgU291
cmNlQ29kZSYgb3duZXJTb3VyY2UsIGludCBvdmVycmlkZUxpbmVOdW1iZXIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCmluZGV4IGEy
ODlkMjQ4NWRiMzdlMTFjN2U0NDliMzE0MDJmOGE1MTlmOGQxODkuLjAxNDQ3MGE4NzFjZTk5ZTNm
NWQzMjQxZThkMDcyMmI2YTlmNWU3ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBAIC05OSw2ICs5OSwxMiBAQCBlbnVtIFVu
bGlua2VkRnVuY3Rpb25LaW5kIHsKICAgICBVbmxpbmtlZEJ1aWx0aW5GdW5jdGlvbiwKIH07CiAK
KyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCituYW1lc3BhY2UgV0FTTSB7CitjbGFzcyBNb2R1bGU7
Cit9CisjZW5kaWYKKwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUgZmluYWwgOiBw
dWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgQnVpbHRpbkV4ZWN1dGFi
bGVzOwpAQCAtMTE2LDYgKzEyMiwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpbnN0YW5j
ZTsKICAgICB9CiAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgc3RhdGljIFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVhdGUoVk0qIHZtLCB1bnNpZ25lZCBzdGFydE9mZnNldCwg
dW5zaWduZWQgc291cmNlTGVuZ3RoLCBXQVNNOjpNb2R1bGUqIG1vZHVsZSwgdW5zaWduZWQgZnVu
Y3Rpb25JbmRleCkKKyAgICB7CisgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBp
bnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlPih2bS0+aGVhcCkpCisgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKHZt
LCB2bS0+dW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIHN0YXJ0T2Zm
c2V0LCBzb3VyY2VMZW5ndGgsIG1vZHVsZSwgZnVuY3Rpb25JbmRleCk7CisgICAgICAgIGluc3Rh
bmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOworICAgICAgICByZXR1cm4gaW5zdGFuY2U7CisgICAg
fQorI2VuZGlmCisKICAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9uYW1lOyB9CiAgICAgY29uc3QgSWRlbnRpZmllciYgaW5mZXJyZWROYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbmZlcnJlZE5hbWU7IH0KICAgICBKU1N0cmluZyogbmFtZVZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV9uYW1lVmFsdWUuZ2V0KCk7IH0KQEAgLTE2Niw5ICsxODIsMTcgQEAgcHVibGlj
OgogICAgIENvbnN0cnVjdEFiaWxpdHkgY29uc3RydWN0QWJpbGl0eSgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PENvbnN0cnVjdEFiaWxpdHk+KG1fY29uc3RydWN0QWJpbGl0eSk7IH0KICAg
ICBib29sIGlzQ2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gY29uc3Ry
dWN0b3JLaW5kKCkgIT0gQ29uc3RydWN0b3JLaW5kOjpOb25lOyB9CiAgICAgY29uc3QgVmFyaWFi
bGVFbnZpcm9ubWVudCogcGFyZW50U2NvcGVURFpWYXJpYWJsZXMoKSBjb25zdCB7IHJldHVybiAm
bV9wYXJlbnRTY29wZVREWlZhcmlhYmxlczsgfQorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAg
ICBib29sIGlzV2ViQXNzZW1ibHlGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNXZWJBc3Nl
bWJseUZ1bmN0aW9uOyB9CisgICAgV0FTTTo6TW9kdWxlKiB3ZWJBc3NlbWJseU1vZHVsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fd2ViQXNzZW1ibHlNb2R1bGUuZ2V0KCk7IH0KKyAgICB1bnNpZ25lZCB3
ZWJBc3NlbWJseUZ1bmN0aW9uSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3dlYkFzc2VtYmx5RnVu
Y3Rpb25JbmRleDsgfQorI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUoVk0qLCBTdHJ1Y3R1cmUqLCBjb25zdCBTb3VyY2VDb2RlJiwgUmVmUHRyPFNvdXJj
ZVByb3ZpZGVyPiYmIHNvdXJjZU92ZXJyaWRlLCBGdW5jdGlvbkJvZHlOb2RlKiwgVW5saW5rZWRG
dW5jdGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHksIFZhcmlhYmxlRW52aXJvbm1lbnQmKTsKKyNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoVk0q
LCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgc291cmNlTGVuZ3Ro
LCBXQVNNOjpNb2R1bGUqLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4KTsKKyNlbmRpZgogICAgIFdy
aXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNhbGw7
CiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2Nr
Rm9yQ29uc3RydWN0OwogCkBAIC0xOTgsNiArMjIyLDExIEBAIHByaXZhdGU6CiAgICAgdW5zaWdu
ZWQgbV9jb25zdHJ1Y3RBYmlsaXR5OiAxOwogICAgIHVuc2lnbmVkIG1fY29uc3RydWN0b3JLaW5k
IDogMjsKICAgICB1bnNpZ25lZCBtX2Z1bmN0aW9uTW9kZSA6IDE7IC8vIEZ1bmN0aW9uTW9kZQor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICB1bnNpZ25lZCBtX2lzV2ViQXNzZW1ibHlGdW5j
dGlvbiA6IDE7CisgICAgV3JpdGVCYXJyaWVyPFdBU006Ok1vZHVsZT4gbV93ZWJBc3NlbWJseU1v
ZHVsZTsKKyAgICB1bnNpZ25lZCBtX3dlYkFzc2VtYmx5RnVuY3Rpb25JbmRleDsKKyNlbmRpZgog
CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IGU1ZWQ2MTU0
MTE2ODcyYzYyMDI1OGJhYTdiMTczODQ4NzQ3ZWU1NTYuLmE4Nzg3ZTU3YjcyODcwOTkwMTZiZmQ4
MmE2NDhmYmU5ZDkzMTk4NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0xNDMxLDYgKzE0MzEsMTMgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6YXR0ZW1wdFRvSW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3Vs
dE9wZXJhbmQKICAgICBpZiAoIWlubGluaW5nQmFsYW5jZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBpZiAoRXhlY3V0YWJsZUJhc2Uq
IGV4ZWN1dGFibGUgPSBjYWxsZWUuZXhlY3V0YWJsZSgpKSB7CisgICAgICAgIGlmIChleGVjdXRh
YmxlLT5pc1dlYkFzc2VtYmx5RnVuY3Rpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisjZW5kaWYKKwogICAgIGJvb2wgZGlkSW5zZXJ0Q2hlY2tzID0gZmFsc2U7CiAgICAg
YXV0byBpbnNlcnRDaGVja3NXaXRoQWNjb3VudGluZyA9IFsmXSAoKSB7CiAgICAgICAgIGluc2Vy
dENoZWNrcyhudWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklURGlzYXNzZW1ibGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURGlzYXNz
ZW1ibGVyLmNwcAppbmRleCAwNGUxYjRkNDllOTc5N2EzOTQ3MDg2NWQyMzk4NzkyNmMzZTM5N2Iy
Li42ZmU0NmJlZDFkZDdlOWUzNTM5MmM2OGMzMWJmODMyZWJhMWI1NmNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fzc2VtYmxlci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVREaXNhc3NlbWJsZXIuY3BwCkBAIC01MSwxNCArNTEsMTgg
QEAgSklURGlzYXNzZW1ibGVyOjp+SklURGlzYXNzZW1ibGVyKCkKIHZvaWQgSklURGlzYXNzZW1i
bGVyOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCiB7CiAg
ICAgZHVtcEhlYWRlcihvdXQsIGxpbmtCdWZmZXIpOwotICAgIGR1bXBEaXNhc3NlbWJseShvdXQs
IGxpbmtCdWZmZXIsIG1fc3RhcnRPZkNvZGUsIG1fbGFiZWxGb3JCeXRlY29kZUluZGV4SW5NYWlu
UGF0aFswXSk7Ci0gICAgCi0gICAgZHVtcEZvckluc3RydWN0aW9ucyhvdXQsIGxpbmtCdWZmZXIs
ICIgICAgIiwgbV9sYWJlbEZvckJ5dGVjb2RlSW5kZXhJbk1haW5QYXRoLCBmaXJzdFNsb3dMYWJl
bCgpKTsKLSAgICBvdXQucHJpbnQoIiAgICAoRW5kIE9mIE1haW4gUGF0aClcbiIpOwotICAgIGR1
bXBGb3JJbnN0cnVjdGlvbnMob3V0LCBsaW5rQnVmZmVyLCAiICAgIChTKSAiLCBtX2xhYmVsRm9y
Qnl0ZWNvZGVJbmRleEluU2xvd1BhdGgsIG1fZW5kT2ZTbG93UGF0aCk7Ci0gICAgb3V0LnByaW50
KCIgICAgKEVuZCBPZiBTbG93IFBhdGgpXG4iKTsKIAotICAgIGR1bXBEaXNhc3NlbWJseShvdXQs
IGxpbmtCdWZmZXIsIG1fZW5kT2ZTbG93UGF0aCwgbV9lbmRPZkNvZGUpOworICAgIGlmICghbV9s
YWJlbEZvckJ5dGVjb2RlSW5kZXhJbk1haW5QYXRoLmlzRW1wdHkoKSkgeworICAgICAgICBkdW1w
RGlzYXNzZW1ibHkob3V0LCBsaW5rQnVmZmVyLCBtX3N0YXJ0T2ZDb2RlLCBtX2xhYmVsRm9yQnl0
ZWNvZGVJbmRleEluTWFpblBhdGhbMF0pOworCisgICAgICAgIGR1bXBGb3JJbnN0cnVjdGlvbnMo
b3V0LCBsaW5rQnVmZmVyLCAiICAgICIsIG1fbGFiZWxGb3JCeXRlY29kZUluZGV4SW5NYWluUGF0
aCwgZmlyc3RTbG93TGFiZWwoKSk7CisgICAgICAgIG91dC5wcmludCgiICAgIChFbmQgT2YgTWFp
biBQYXRoKVxuIik7CisgICAgICAgIGR1bXBGb3JJbnN0cnVjdGlvbnMob3V0LCBsaW5rQnVmZmVy
LCAiICAgIChTKSAiLCBtX2xhYmVsRm9yQnl0ZWNvZGVJbmRleEluU2xvd1BhdGgsIG1fZW5kT2ZT
bG93UGF0aCk7CisgICAgICAgIG91dC5wcmludCgiICAgIChFbmQgT2YgU2xvdyBQYXRoKVxuIik7
CisKKyAgICAgICAgZHVtcERpc2Fzc2VtYmx5KG91dCwgbGlua0J1ZmZlciwgbV9lbmRPZlNsb3dQ
YXRoLCBtX2VuZE9mQ29kZSk7CisgICAgfSBlbHNlCisgICAgICAgIGR1bXBEaXNhc3NlbWJseShv
dXQsIGxpbmtCdWZmZXIsIG1fc3RhcnRPZkNvZGUsIG1fZW5kT2ZDb2RlKTsKIH0KIAogdm9pZCBK
SVREaXNhc3NlbWJsZXI6OmR1bXAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAKaW5kZXggOGRiZGM4NWU0NjE1MjI3NjZiN2RmZmRmOTQ0YmY1MTMwMzhhNGUzYy4uZjZi
YjViMTljNTlhZGU4ODZmZjg3ZGNkMDhlZDNkNmJjNzdmZDRjNyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5j
cHAKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlICJTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMu
aCIKICNpbmNsdWRlICJUZXN0UnVubmVyVXRpbHMuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJM
b2cuaCIKKyNpbmNsdWRlICJXQVNNTW9kdWxlUGFyc2VyLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgog
I2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC00OTIsNiArNDkzLDkg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZXR1cm5UeXBl
Rm9yKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25EdW1wQmFzaWNCbG9ja0V4ZWN1dGlvblJhbmdlcyhFeGVjU3RhdGUqKTsKIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSGFzQmFzaWNCbG9ja0V4ZWN1dGVk
KEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25FbmFibGVFeGNlcHRpb25GdXp6KEV4ZWNTdGF0ZSopOworI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZFdlYkFz
c2VtYmx5KEV4ZWNTdGF0ZSopOworI2VuZGlmCiAKICNpZiBFTkFCTEUoU0FNUExJTkdfRkxBR1Mp
CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldFNhbXBsaW5n
RmxhZ3MoRXhlY1N0YXRlKik7CkBAIC02NTQsNiArNjU4LDEwIEBAIHByb3RlY3RlZDoKICAgICAg
ICAgYWRkRnVuY3Rpb24odm0sICJoYXNCYXNpY0Jsb2NrRXhlY3V0ZWQiLCBmdW5jdGlvbkhhc0Jh
c2ljQmxvY2tFeGVjdXRlZCwgMik7CiAKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJlbmFibGVF
eGNlcHRpb25GdXp6IiwgZnVuY3Rpb25FbmFibGVFeGNlcHRpb25GdXp6LCAwKTsKKworI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJsb2FkV2ViQXNzZW1i
bHkiLCBmdW5jdGlvbkxvYWRXZWJBc3NlbWJseSwgMSk7CisjZW5kaWYKICAgICAgICAgCiAgICAg
ICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShnbG9iYWxFeGVjKCksIDAp
OwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7ICsraSkK
QEAgLTExODMsNiArMTE5MSwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uRW5hYmxlRXhjZXB0aW9uRnV6eihFeGVjU3RhdGUqKQogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZFdlYkFzc2VtYmx5KEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICBTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICBp
ZiAoIWZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZU5hbWUsIGJ1ZmZlcikpCisgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVj
LCBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkNvdWxkIG5vdCBvcGVuIGZpbGUuIikp
KSk7CisgICAgUmVmUHRyPFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI+IHByb3ZpZGVyID0gV2Vi
QXNzZW1ibHlTb3VyY2VQcm92aWRlcjo6Y3JlYXRlKGJ1ZmZlciwgIiIpOworICAgIFNvdXJjZUNv
ZGUgc291cmNlKHByb3ZpZGVyKTsKKyAgICBXQVNNOjpNb2R1bGUqIG1vZHVsZSA9IFdBU006OmNv
bXBpbGUoZXhlYywgc291cmNlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG1vZHVsZSk7
Cit9CisjZW5kaWYKKwogLy8gVXNlIFNFSCBmb3IgUmVsZWFzZSBidWlsZHMgb25seSB0byBnZXQg
cmlkIG9mIHRoZSBjcmFzaCByZXBvcnQgZGlhbG9nCiAvLyAobHVja2lseSB0aGUgc2FtZSB0ZXN0
cyBmYWlsIGluIFJlbGVhc2UgYW5kIERlYnVnIGJ1aWxkcyBzbyBmYXIpLiBOZWVkIHRvCiAvLyBi
ZSBpbiBhIHNlcGFyYXRlIG1haW4gZnVuY3Rpb24gYmVjYXVzZSB0aGUganNjbWFpbiBmdW5jdGlv
biByZXF1aXJlcyBvYmplY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvU291cmNlQ29kZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNv
ZGUuY3BwCmluZGV4IDhlZjE2OGRlYWE5MmMzNWE4MWE0MjdkODY2MDg5YzAxODk1MmNmMjEuLjMx
ZTk5NTEwMThmNDE4YmU2N2ZkMjNhYzY3YzJlOTk2OTRmYzE1NjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2RlLmNwcApAQCAtMzYsNiArMzYsMTEgQEAgQ1N0cmlu
ZyBTb3VyY2VDb2RlOjp0b1VURjgoKSBjb25zdAogICAgIGlmICghbV9wcm92aWRlcikKICAgICAg
ICAgcmV0dXJuIENTdHJpbmcoIiIsIDApOwogICAgIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
KyAgICBpZiAoIW1fcHJvdmlkZXItPmlzU3RyaW5nU291cmNlKCkpIC8vIEZJWE1FOiBoYWNreQor
ICAgICAgICByZXR1cm4gQ1N0cmluZygiIiwgMCk7CisjZW5kaWYKKwogICAgIHJldHVybiBtX3By
b3ZpZGVyLT5zb3VyY2UoKS5pbXBsKCktPnV0ZjhGb3JSYW5nZShtX3N0YXJ0Q2hhciwgbV9lbmRD
aGFyIC0gbV9zdGFydENoYXIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1NvdXJjZVByb3ZpZGVyLmgKaW5kZXggY2NjYWJmMzY5NjRmNDExYTY0Y2JhZTI1OTJkMjRmNDI0
ZjAyNmI0Ny4uMzE0NTQ4OWNlNTJiZTk0OTcyYzFlMGM1ZWQxMjRmM2IwZWRhYmYyMyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaApAQCAtNDMsNiAr
NDMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2aXJ0
dWFsIH5Tb3VyY2VQcm92aWRlcigpOwogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNTdHJpbmdTb3VyY2UoKSBjb25zdCA9IDA7CisjZW5kaWYKICAgICAg
ICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIHNvdXJjZSgpIGNvbnN0ID0gMDsKICAgICAgICAgU3Ry
aW5nIGdldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKICAgICAgICAgewpAQCAtNzks
NiArODIsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTdHJpbmdTb3VyY2VQcm92aWRlcihzb3VyY2UsIHVybCwgc3RhcnRQb3NpdGlvbikpOwog
ICAgICAgICB9CiAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgICAgIHZpcnR1YWwgYm9v
bCBpc1N0cmluZ1NvdXJjZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisjZW5kaWYKKwogICAgICAgICB2aXJ0dWFsIGNvbnN0
IFN0cmluZyYgc291cmNlKCkgY29uc3Qgb3ZlcnJpZGUKICAgICAgICAgewogICAgICAgICAgICAg
cmV0dXJuIG1fc291cmNlOwpAQCAtOTMsNiArMTAzLDQyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIFN0cmluZyBtX3NvdXJjZTsKICAgICB9OworCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQorICAgIGNsYXNzIFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXIgOiBwdWJsaWMgU291cmNlUHJv
dmlkZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFJlZjxXZWJBc3NlbWJseVNvdXJj
ZVByb3ZpZGVyPiBjcmVhdGUoY29uc3QgVmVjdG9yPGNoYXI+JiBkYXRhLCBjb25zdCBTdHJpbmcm
IHVybCwgY29uc3QgVGV4dFBvc2l0aW9uJiBzdGFydFBvc2l0aW9uID0gVGV4dFBvc2l0aW9uOjpt
aW5pbXVtUG9zaXRpb24oKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgV2ViQXNzZW1ibHlTb3VyY2VQcm92aWRlcihkYXRhLCB1cmwsIHN0YXJ0UG9zaXRpb24p
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N0cmluZ1NvdXJjZSgpIGNv
bnN0IG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiBzb3VyY2UoKSBjb25zdCBvdmVy
cmlkZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9zb3VyY2U7CisgICAgICAgIH0K
KworICAgICAgICBjb25zdCBWZWN0b3I8Y2hhcj4mIGRhdGEoKSBjb25zdCAvLyBGSVhNRTogTWFr
ZSB0aGlzIHZpcnR1YWw/IEJ1dCB3aGF0IGFib3V0IFN0cmluZ1NvdXJjZVByb3ZpZGVyPworICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9kYXRhOworICAgICAgICB9CisKKyAgICBwcml2
YXRlOgorICAgICAgICBXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyKGNvbnN0IFZlY3RvcjxjaGFy
PiYgZGF0YSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFRleHRQb3NpdGlvbiYgc3RhcnRQb3Np
dGlvbikKKyAgICAgICAgICAgIDogU291cmNlUHJvdmlkZXIodXJsLCBzdGFydFBvc2l0aW9uKQor
ICAgICAgICAgICAgLCBtX3NvdXJjZSgiW1dlYkFzc2VtYmx5XSIpIC8vIFRPRE86IEltcGxlbWVu
dCB0aGUgdGV4dCBmb3JtYXQ/CisgICAgICAgICAgICAsIG1fZGF0YShkYXRhKQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgbV9zb3VyY2U7CisgICAgICAgIFZlY3Rvcjxj
aGFyPiBtX2RhdGE7CisgICAgfTsKKyNlbmRpZgogICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKaW5kZXggN2Fj
NjRiZjRjYmNkZThjYjIxZGE0MzNiZDIxZDQ2MzBlMjk0ODExYy4uZmJkZGE3OTkxNmFlMGNiODRi
YzE4NTJiZTZlYmQxMmEwMWI1ZTAyOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5jcHAKQEAgLTM2LDYgKzM2LDggQEAKICNpbmNsdWRlICJQYXJzZXIuaCIK
ICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgi
CisjaW5jbHVkZSAiV0FTTUZ1bmN0aW9uUGFyc2VyLmgiCisjaW5jbHVkZSAiV0FTTU1vZHVsZS5o
IgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtNjMsNiArNjUsMTMgQEAg
dm9pZCBFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlKCkKICAgICBtX251bVBhcmFtZXRlcnNGb3JD
b25zdHJ1Y3QgPSBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQ7CiB9CiAKKyNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCitib29sIEV4ZWN1dGFibGVCYXNlOjppc1dlYkFzc2VtYmx5RnVuY3Rpb24o
KSBjb25zdAoreworICAgIHJldHVybiBpc0Z1bmN0aW9uRXhlY3V0YWJsZSgpICYmIGpzQ2FzdDxj
b25zdCBGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKS0+aXNXZWJBc3NlbWJseUZ1bmN0aW9uKCk7
Cit9CisjZW5kaWYKKwogI2lmIEVOQUJMRShERkdfSklUKQogSW50cmluc2ljIEV4ZWN1dGFibGVC
YXNlOjppbnRyaW5zaWMoKSBjb25zdAogewpAQCAtMjQ3LDYgKzI1NiwxOSBAQCBSZWZQdHI8Q29k
ZUJsb2NrPiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdDb2RlQmxvY2tGb3IoCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBpZiAoZXhl
Y3V0YWJsZS0+aXNXZWJBc3NlbWJseUZ1bmN0aW9uKCkpIHsKKyAgICAgICAgU291cmNlUHJvdmlk
ZXIqIHByb3ZpZGVyID0gZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKTsKKyAgICAgICAg
dW5zaWduZWQgc291cmNlT2Zmc2V0ID0gZXhlY3V0YWJsZS0+c291cmNlKCkuc3RhcnRPZmZzZXQo
KTsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSBleGVjdXRhYmxlLT5zb3VyY2UoKS5z
dGFydENvbHVtbigpOworCisgICAgICAgIFJlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGFk
b3B0UmVmKG5ldyBGdW5jdGlvbkNvZGVCbG9jayhleGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9j
aywgc2NvcGUsIHByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIHN0YXJ0Q29sdW1uKSk7CisgICAgICAg
IFJlZlB0cjxKSVRDb2RlPiBqaXRDb2RlID0gV0FTTTo6RnVuY3Rpb25QYXJzZXI6OmdlbmVyYXRl
Q29kZSh2bSwgY29kZUJsb2NrLmdldCgpLCBleGVjdXRhYmxlLT5tX3VubGlua2VkRXhlY3V0YWJs
ZS0+d2ViQXNzZW1ibHlNb2R1bGUoKSwgZXhlY3V0YWJsZS0+bV91bmxpbmtlZEV4ZWN1dGFibGUt
PndlYkFzc2VtYmx5RnVuY3Rpb25JbmRleCgpLCBleGVjdXRhYmxlLT5tX3VubGlua2VkRXhlY3V0
YWJsZS0+c3RhcnRPZmZzZXQoKSk7CisgICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZShqaXRD
b2RlLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybiBjb2RlQmxvY2s7CisgICAgfQorI2VuZGlm
CisKICAgICAvLyBQYXJzaW5nIHJldmVhbHMgd2hldGhlciBvdXIgZnVuY3Rpb24gdXNlcyBmZWF0
dXJlcyB0aGF0IHJlcXVpcmUgYSBzZXBhcmF0ZSBmdW5jdGlvbiBuYW1lIG9iamVjdCBpbiB0aGUg
c2NvcGUgY2hhaW4uCiAgICAgLy8gQmUgc3VyZSB0byBhZGQgdGhpcyBzY29wZSBiZWZvcmUgbGlu
a2luZyB0aGUgYnl0ZWNvZGUgYmVjYXVzZSB0aGlzIHNjb3BlIHdpbGwgY2hhbmdlIHRoZSByZXNv
bHV0aW9uIGRlcHRoIG9mIG5vbi1sb2NhbCB2YXJpYWJsZXMuCiAgICAgaWYgKGZ1bmN0aW9uTmFt
ZUlzSW5TY29wZShleGVjdXRhYmxlLT5uYW1lKCksIGV4ZWN1dGFibGUtPmZ1bmN0aW9uTW9kZSgp
KQpAQCAtMzMzLDEzICszNTUsMTkgQEAgSlNPYmplY3QqIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBh
cmVGb3JFeGVjdXRpb25JbXBsKAogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwogICAgIH0KICAg
ICAKLSAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVCeXRlY29kZSgpKQotICAgICAgICBjb2RlQmxv
Y2stPnZhbGlkYXRlKCk7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGlmICghaXNXZWJB
c3NlbWJseUZ1bmN0aW9uKCkpIHsKKyNlbmRpZgorICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRh
dGVCeXRlY29kZSgpKQorICAgICAgICAgICAgY29kZUJsb2NrLT52YWxpZGF0ZSgpOwogICAgIAot
ICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpKQotICAgICAgICBzZXR1cExMSW50KHZtLCBjb2Rl
QmxvY2suZ2V0KCkpOwotICAgIGVsc2UKLSAgICAgICAgc2V0dXBKSVQodm0sIGNvZGVCbG9jay5n
ZXQoKSk7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VMTEludCgpKQorICAgICAgICAgICAgc2V0
dXBMTEludCh2bSwgY29kZUJsb2NrLmdldCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
c2V0dXBKSVQodm0sIGNvZGVCbG9jay5nZXQoKSk7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
ICAgIH0KKyNlbmRpZgogICAgIAogICAgIGluc3RhbGxDb2RlKGNvZGVCbG9jay5nZXQoKSk7CiAg
ICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgK
aW5kZXggNmVjMTEyZGJlZmM3ODMwZmM1YWNlMjBlZDA1NDg5MTM2N2QxYjZiNC4uMTI2YzY4YjMy
ODEzNDRmODcwNGRhMjI5M2ZhZWQyYjBhNzAyZTRiMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuaApAQCAtOTAsMTUgKzkwLDE1IEBAIHB1YmxpYzoKICAgICAg
ICAgCiAgICAgQ29kZUJsb2NrSGFzaCBoYXNoRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpIGNv
bnN0OwogCi0gICAgYm9vbCBpc0V2YWxFeGVjdXRhYmxlKCkKKyAgICBib29sIGlzRXZhbEV4ZWN1
dGFibGUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGUoKSA9PSBFdmFsRXhlY3V0
YWJsZVR5cGU7CiAgICAgfQotICAgIGJvb2wgaXNGdW5jdGlvbkV4ZWN1dGFibGUoKQorICAgIGJv
b2wgaXNGdW5jdGlvbkV4ZWN1dGFibGUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHR5
cGUoKSA9PSBGdW5jdGlvbkV4ZWN1dGFibGVUeXBlOwogICAgIH0KLSAgICBib29sIGlzUHJvZ3Jh
bUV4ZWN1dGFibGUoKQorICAgIGJvb2wgaXNQcm9ncmFtRXhlY3V0YWJsZSgpIGNvbnN0CiAgICAg
ewogICAgICAgICByZXR1cm4gdHlwZSgpID09IFByb2dyYW1FeGVjdXRhYmxlVHlwZTsKICAgICB9
CkBAIC0xMDksNiArMTA5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbnVtUGFyYW1l
dGVyc0ZvckNhbGwgPT0gTlVNX1BBUkFNRVRFUlNfSVNfSE9TVDsKICAgICB9CiAKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCisgICAgYm9vbCBpc1dlYkFzc2VtYmx5RnVuY3Rpb24oKSBjb25zdDsK
KyNlbmRpZgorCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90bykgeyByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKENlbGxUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7IH0KICAgICAgICAgCiAgICAgdm9pZCBjbGVhckNv
ZGUoKTsKQEAgLTU2Miw3ICs1NjYsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQ2VsbCopOwogICAgICAgICAKLSAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSog
dW5saW5rZWRFeGVjdXRhYmxlKCkKKyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5s
aW5rZWRFeGVjdXRhYmxlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3VubGlua2Vk
RXhlY3V0YWJsZS5nZXQoKTsKICAgICB9CkBAIC02MzEsNiArNjM1LDkgQEAgcHVibGljOgogICAg
IEZ1bmN0aW9uTW9kZSBmdW5jdGlvbk1vZGUoKSB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJs
ZS0+ZnVuY3Rpb25Nb2RlKCk7IH0KICAgICBib29sIGlzQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCk7IH0KICAg
ICBDb25zdHJ1Y3RBYmlsaXR5IGNvbnN0cnVjdEFiaWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3Vu
bGlua2VkRXhlY3V0YWJsZS0+Y29uc3RydWN0QWJpbGl0eSgpOyB9CisjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQorICAgIGJvb2wgaXNXZWJBc3NlbWJseUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV91bmxpbmtlZEV4ZWN1dGFibGUtPmlzV2ViQXNzZW1ibHlGdW5jdGlvbigpOyB9CisjZW5kaWYK
ICAgICBib29sIGlzQ2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV91
bmxpbmtlZEV4ZWN1dGFibGUtPmlzQ2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9uKCk7IH0KICAgICBj
b25zdCBJZGVudGlmaWVyJiBuYW1lKCkgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPm5h
bWUoKTsgfQogICAgIGNvbnN0IElkZW50aWZpZXImIGluZmVycmVkTmFtZSgpIHsgcmV0dXJuIG1f
dW5saW5rZWRFeGVjdXRhYmxlLT5pbmZlcnJlZE5hbWUoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUNvZGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dBU01Db2RlR2VuZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjlhYWYyNDMxMmIx
ZTE1ZmE5OGE1Mzk0MmNlNDU4MjgyMDlkYjE4MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dBU01Db2RlR2VuZXJhdG9yLmgKQEAgLTAsMCArMSwzNDIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdB
U01Db2RlR2VuZXJhdG9yX2gKKyNkZWZpbmUgV0FTTUNvZGVHZW5lcmF0b3JfaAorCisjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAi
SklULmgiCisjaW5jbHVkZSAiSklURGlzYXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1
ZUlubGluZXMuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiTWF4RnJhbWVF
eHRlbnRGb3JTbG93UGF0aENhbGwuaCIKKyNpbmNsdWRlICJSZWdpc3Rlci5oIgorI2luY2x1ZGUg
IldBU01Nb2R1bGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXQVNNIHsKKwor
Y2xhc3MgTW9kdWxlOworCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZXRJ
bnRlcm5hbEZ1bmN0aW9uKEV4ZWNTdGF0ZSosIE1vZHVsZSogbW9kdWxlLCB1aW50MzJfdCBmdW5j
dGlvbkluZGV4KQoreworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobW9kdWxlLT5mdW5jdGlv
bihmdW5jdGlvbkluZGV4KSk7Cit9CisKK2NsYXNzIENvZGVHZW5lcmF0b3IgOiBwcml2YXRlIEND
YWxsSGVscGVycyB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBpbnQgRXhwcmVzc2lvbjsKKyAgICB0
eXBlZGVmIGludCBTdGF0ZW1lbnQ7CisgICAgdHlwZWRlZiBKdW1wIEp1bXA7IC8vIEZJWE1FOiBC
YWQgbmFtZS4KKworICAgIENvZGVHZW5lcmF0b3IoVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgTW9kdWxlKiBtb2R1bGUpCisgICAgICAgIDogQ0NhbGxIZWxwZXJzKHZtLCBjb2RlQmxvY2sp
CisgICAgICAgICwgbV9tb2R1bGUobW9kdWxlKQorICAgIHsKKyAgICAgICAgbV9zdGFja0hlaWdo
dCA9IDg7IC8vIEZJWE1FOiBDYWxjdWxhdGUgdGhlIGFjdHVhbCBoZWlnaHQuCisgICAgICAgIG1f
c3AgPSAwOworICAgIH0KKworICAgIHZvaWQgc3RhcnRGdW5jdGlvbigpCisgICAgeworICAgICAg
ICBpZiAoT3B0aW9uczo6c2hvd0Rpc2Fzc2VtYmx5KCkpCisgICAgICAgICAgICBtX2Rpc2Fzc2Vt
YmxlciA9IHN0ZDo6bWFrZV91bmlxdWU8SklURGlzYXNzZW1ibGVyPihtX2NvZGVCbG9jayk7CisK
KyAgICAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQorICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXIt
PnNldFN0YXJ0T2ZDb2RlKGxhYmVsKCkpOworCisgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3Vl
KCk7CisgICAgICAgIGVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9j
aywgSlNTdGFjazo6Q29kZUJsb2NrKTsKKyAgICAgICAgYWxsb2NhdGVTcGFjZU9uU3RhY2soKTsK
KyAgICB9CisKKyAgICB2b2lkIGVuZEZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgh
bV9zcCk7CisKKyAgICAgICAgLy8gRklYTUU6IFNraXAgaWYgbGFzdCBzdG10IGlzIGEgcmV0dXJu
IHN0YXRlbWVudC4KKyAgICAgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpKSwgR1BSSW5mbzo6cmVnVDApOyAvLyBGSVhNRTogU2hvdWxkIHdlIHJldHVy
biB1bmRlZmluZWQ/CisKKyAgICAgICAgZGVhbGxvY2F0ZVNwYWNlT25TdGFjaygpOworICAgICAg
ICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICByZXQoKTsKKworICAgICAgICBpZiAo
bV9kaXNhc3NlbWJsZXIpCisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2Rl
KGxhYmVsKCkpOworICAgIH0KKworICAgIHZvaWQgc2V0TG9jYWxUeXBlcyhjb25zdCBWZWN0b3I8
VHlwZT4mIGxvY2FsVHlwZXMpCisgICAgeworICAgICAgICBtX2xvY2FsVHlwZXMgPSBsb2NhbFR5
cGVzOworICAgIH0KKworICAgIHZvaWQgdW5ib3hBcmd1bWVudChzaXplX3QgYXJnSW5kZXgpCisg
ICAgeworICAgICAgICBsb2FkMzIoQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
KGFyZ0luZGV4ICsgMSArIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpICogOCksIEdQ
UkluZm86OnJlZ1QwKTsKKyAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgbG9jYWxBZGRy
ZXNzKGFyZ0luZGV4KSk7CisgICAgfQorCisgICAgdm9pZCBzZXRMb2NhbFplcm9JMzIoc2l6ZV90
IGxvY2FsSW5kZXgpCisgICAgeworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgbG9j
YWxBZGRyZXNzKGxvY2FsSW5kZXgpKTsKKyAgICB9CisKKyAgICBFeHByZXNzaW9uIGFkZEkzMihF
eHByZXNzaW9uLCBFeHByZXNzaW9uKQorICAgIHsKKyAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFk
ZHJlc3MobV9zcCAtIDIpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGxvYWQzMih0ZW1wb3Jh
cnlBZGRyZXNzKG1fc3AgLSAxKSwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBhZGQzMihHUFJJ
bmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJl
Z1QwLCB0ZW1wb3JhcnlBZGRyZXNzKG1fc3AgLSAyKSk7CisgICAgICAgIG1fc3AtLTsKKyAgICAg
ICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgRXhwcmVzc2lvbiBtdWxJMzIoRXhwcmVzc2lvbiwg
RXhwcmVzc2lvbikKKyAgICB7CisgICAgICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKG1fc3Ag
LSAyKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyht
X3NwIC0gMSksIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgbXVsMzIoR1BSSW5mbzo6cmVnVDEs
IEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgdGVtcG9y
YXJ5QWRkcmVzcyhtX3NwIC0gMikpOworICAgICAgICBtX3NwLS07CisgICAgICAgIHJldHVybiAx
OworICAgIH0KKworICAgIEV4cHJlc3Npb24gcmVnSTMyKHVpbnQzMl90IGltbSkKKyAgICB7Cisg
ICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGltbSksIHRlbXBvcmFyeUFkZHJlc3MobV9zcCkp
OworICAgICAgICBtX3NwKys7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIEV4cHJl
c3Npb24gcmVnRjY0KGRvdWJsZSBpbW0pCisgICAgeworICAgICAgICBzdG9yZTY0KFRydXN0ZWRJ
bW02NChyZWludGVycHJldERvdWJsZVRvSW50NjQoaW1tKSksIHRlbXBvcmFyeUFkZHJlc3MobV9z
cCkpOworICAgICAgICBtX3NwKys7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHZv
aWQgc2V0TG9jYWwoRXhwcmVzc2lvbiwgdWludDMyX3QgbG9jYWxJbmRleCkKKyAgICB7CisgICAg
ICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKG1fc3AgLSAxKSwgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCBsb2NhbEFkZHJlc3MobG9jYWxJbmRleCkp
OworICAgICAgICBtX3NwLS07CisgICAgfQorCisgICAgRXhwcmVzc2lvbiBnZXRMb2NhbEkzMih1
aW50MzJfdCBsb2NhbEluZGV4KQorICAgIHsKKyAgICAgICAgbG9hZDMyKGxvY2FsQWRkcmVzcyhs
b2NhbEluZGV4KSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJl
Z1QwLCB0ZW1wb3JhcnlBZGRyZXNzKG1fc3ApKTsKKyAgICAgICAgbV9zcCsrOworICAgICAgICBy
ZXR1cm4gMTsKKyAgICB9CisKKyAgICBFeHByZXNzaW9uIGNhbGxJbnRlcm5hbCh1aW50MzJfdCBm
dW5jdGlvbkluZGV4LCBjb25zdCBWZWN0b3I8VHlwZT4mIGFyZ3VtZW50cywgY29uc3QgVmVjdG9y
PEV4cHJlc3Npb24+JiwgUmV0dXJuVHlwZSByZXR1cm5UeXBlKQorICAgIHsKKyAgICAgICAgc2l6
ZV90IGFyZ3VtZW50Q291bnQgPSBhcmd1bWVudHMuc2l6ZSgpOworCisgICAgICAgIGludCBuZXdT
UCA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBt
X2xvY2FsVHlwZXMuc2l6ZSgpICsgbV9zcCArIGFyZ3VtZW50Q291bnQpIC0gbV9sb2NhbFR5cGVz
LnNpemUoKTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7
ICsraSkgeworICAgICAgICAgICAgc3dpdGNoIChhcmd1bWVudHNbaV0pIHsKKyAgICAgICAgICAg
IGNhc2UgVHlwZTo6STMyOgorICAgICAgICAgICAgICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNz
KG1fc3AgLSBhcmd1bWVudENvdW50ICsgaSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAg
ICAgICBvcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICAgICAgICAgIHN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJl
c3MobmV3U1AgLSBpIC0gMSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHRlbXBvcmFyeUFkZHJlc3MobmV3U1ApKTsKKworICAg
ICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0obmV3U1AgKyBtX2xvY2FsVHlwZXMuc2l6ZSgpICsg
MykgKiA4IC0gOCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7IC8vIEZJWE1FOiBoYWNreQorCisgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tCisKKyAg
ICAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygp
OworCisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGFyZ3VtZW50Q291bnQgKyAxKSwgQWRk
cmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0IC0gc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpKSk7CisKKyAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsKQorICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtbWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIHNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKG1fbW9kdWxlKSwgVHJ1c3RlZEltbTMy
KGZ1bmN0aW9uSW5kZXgpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2Fz
dDx2b2lkKj4oZ2V0SW50ZXJuYWxGdW5jdGlvbikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAg
ICAgICAgY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgaWYgKG1heEZyYW1lRXh0
ZW50Rm9yU2xvd1BhdGhDYWxsKQorICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhG
cmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAg
ICAgICBtb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7IC8vIHJl
Z1QwIGhvbGRzIGNhbGxlZS4KKyAgICAgICAgc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQWRkcmVz
cyhzdGFja1BvaW50ZXJSZWdpc3RlciwgSlNTdGFjazo6Q2FsbGVlICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOworCisgICAg
ICAgIERhdGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOworICAgICAgICBK
dW1wIHNsb3dDYXNlID0gYnJhbmNoUHRyV2l0aFBhdGNoKE5vdEVxdWFsLCBHUFJJbmZvOjpyZWdU
MCwgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjaywgVHJ1c3RlZEltbVB0cigwKSk7CisKKyAg
ICAgICAgLy8gaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2Rl
SUQpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCByZWdUMCk7CisgICAgICAgIGluZm8t
PnNldENhbGxlZUdQUihHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKKyAgICAgICAgbV9jYWxsQ29tcGls
YXRpb25JbmZvLmxhc3QoKS5ob3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNo
ZWNrOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8ubGFzdCgpLmNhbGxMaW5rSW5mbyA9
IGluZm87CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5sYXN0KCkuaG90UGF0aE90aGVy
ID0gbmVhckNhbGwoKTsKKworICAgICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKKworICAgICAgICAv
LyAtLS0tLS0tLS0tLS0tLQorCisgICAgICAgIHNsb3dDYXNlLmxpbmsodGhpcyk7CisKKyAgICAg
ICAgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yID0gbGlua1RodW5rR2VuZXJhdG9yRm9yKENvZGVG
b3JDYWxsLCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKKworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKKworICAgICAgICBtX2NhbGxD
b21waWxhdGlvbkluZm8ubGFzdCgpLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwo
bV92bS0+Z2V0Q1RJU3R1YihnZW5lcmF0b3IpLmNvZGUoKSk7CisKKyAgICAgICAgLy8gLS0tLS0t
LS0tLS0tLS0KKworICAgICAgICBlbmQubGluayh0aGlzKTsKKworICAgICAgICBtX3NwIC09IGFy
Z3VtZW50Q291bnQ7CisKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtbV9zdGFja0hlaWdo
dCAqIDgpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OyAvLyBGSVhNRTogaGFja3kKKworICAgICAgICAvLyBGSVhNRTogQ2FuIHdlIHJlYWxseSB1c2Ug
cmV0dXJuVmFsdWVHUFI/CisgICAgICAgIHN3aXRjaCAocmV0dXJuVHlwZSkgeworICAgICAgICBj
YXNlIFJldHVyblR5cGU6OkkzMjoKKyAgICAgICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIHRlbXBvcmFyeUFkZHJlc3MobV9zcCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIG1fc3ArKzsKKworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAg
ICB2b2lkIHJldHVybkkzMihFeHByZXNzaW9uKQorICAgIHsKKyAgICAgICAgbG9hZDMyKHRlbXBv
cmFyeUFkZHJlc3MobV9zcCAtIDEpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAg
IG9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CisKKyAgICAgICAgbV9zcC0tOworCisgICAgICAgIGRlYWxsb2NhdGVTcGFjZU9uU3Rh
Y2soKTsKKyAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgcmV0KCk7Cisg
ICAgfQorCisgICAgSnVtcCBlbWl0SnVtcCgpCisgICAgeworICAgICAgICByZXR1cm4ganVtcCgp
OworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVGVzdEkzMihSZXN1bHRDb25kaXRpb24gY29uZGl0
aW9uLCBFeHByZXNzaW9uKQorICAgIHsKKyAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3Mo
bV9zcCAtIDEpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIEp1bXAgaiA9IGJyYW5jaFRlc3Qz
Mihjb25kaXRpb24sIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgbV9zcC0tOworICAgICAgICBy
ZXR1cm4gajsKKyAgICB9CisKKyAgICB2b2lkIGxpbmtKdW1wKEp1bXAgaikKKyAgICB7CisgICAg
ICAgIGoubGluayh0aGlzKTsKKyAgICB9CisKKyAgICBSZWZQdHI8SklUQ29kZT4gaml0Q29kZSgp
CisgICAgeworICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCAqdGhpcywgMCwg
SklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCk7CisKKyAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBt
X2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKQorICAgICAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhpdGVyLT5maXJzdCwgRnVuY3Rpb25QdHIoaXRlci0+c2Vjb25k
KSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2FsbENvbXBpbGF0aW9u
SW5mby5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgQ2FsbENvbXBpbGF0aW9uSW5mbyYgY29t
cGlsYXRpb25JbmZvID0gbV9jYWxsQ29tcGlsYXRpb25JbmZvW2ldOworICAgICAgICAgICAgQ2Fs
bExpbmtJbmZvJiBpbmZvID0gKmNvbXBpbGF0aW9uSW5mby5jYWxsTGlua0luZm87CisgICAgICAg
ICAgICBpbmZvLnNldENhbGxMb2NhdGlvbnMocGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxs
KGNvbXBpbGF0aW9uSW5mby5jYWxsUmV0dXJuTG9jYXRpb24pLAorICAgICAgICAgICAgICAgIHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2YoY29tcGlsYXRpb25JbmZvLmhvdFBhdGhCZWdpbiksCisgICAg
ICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGNvbXBpbGF0aW9uSW5m
by5ob3RQYXRoT3RoZXIpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChPcHRpb25zOjpzaG93
RGlzYXNzZW1ibHkoKSkgeworICAgICAgICAgICAgbV9kaXNhc3NlbWJsZXItPmR1bXAocGF0Y2hC
dWZmZXIpOworICAgICAgICAgICAgcGF0Y2hCdWZmZXIuZGlkQWxyZWFkeURpc2Fzc2VtYmxlKCk7
CisgICAgICAgIH0KKworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0aEFyaXR5Q2hl
Y2s7CisgICAgICAgIC8vIFRPRE86IEltcGxlbWVudCBhcml0eSBjaGVjaworICAgICAgICBDb2Rl
UmVmIHJlc3VsdCA9IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiQmFzZWxpbmUgSklUIGNv
ZGUgZm9yIFdlYkFzc2VtYmx5IikpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERpcmVj
dEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUQ29kZTo6QmFzZWxpbmVKSVQpKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBhbGxvY2F0ZVNwYWNlT25TdGFjaygpCisgICAg
eworICAgICAgICAvLyBUT0RPOiBDaGVjayBmb3Igc3RhY2sgb3ZlcmZsb3cuCisgICAgICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoLW1fc3RhY2tIZWlnaHQgKiA4KSwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgIH0KKworICAgIHZvaWQgZGVhbGxvY2F0ZVNwYWNlT25TdGFjaygpCisgICAgewor
ICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1fc3RhY2tIZWlnaHQgKiA4KSwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgIH0KKworICAgIEFkZHJlc3MgbG9jYWxBZGRyZXNzKGludCBpKSBj
b25zdCAvLyBGSVhNRTogSXMgdGhpcyBjb3JyZWN0PworICAgIHsKKyAgICAgICAgcmV0dXJuIEFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIC1pICogOCAtIDgpOworICAgIH0KKwor
ICAgIEFkZHJlc3MgdGVtcG9yYXJ5QWRkcmVzcyhpbnQgaSkgY29uc3QgLy8gRklYTUU6IElzIHRo
aXMgY29ycmVjdD8KKyAgICB7CisgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCAtKGkgKyBtX2xvY2FsVHlwZXMuc2l6ZSgpKSAqIDggLSA4KTsKKyAgICB9
CisKKyAgICBDYWxsIGVtaXROYWtlZENhbGwoQ29kZVB0ciBmdW5jdGlvbikKKyAgICB7CisgICAg
ICAgIENhbGwgbmFrZWRDYWxsID0gbmVhckNhbGwoKTsKKyAgICAgICAgbV9jYWxscy5hcHBlbmQo
c3RkOjptYWtlX3BhaXIobmFrZWRDYWxsLCBmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSk7
CisgICAgICAgIHJldHVybiBuYWtlZENhbGw7CisgICAgfQorCisgICAgTW9kdWxlKiBtX21vZHVs
ZTsKKyAgICBpbnQgbV9zdGFja0hlaWdodDsKKworICAgIGludCBtX3NwOyAvLyBGSVhNRTogUmVu
YW1lCisKKyAgICBWZWN0b3I8VHlwZT4gbV9sb2NhbFR5cGVzOworCisgICAgc3RkOjp1bmlxdWVf
cHRyPEpJVERpc2Fzc2VtYmxlcj4gbV9kaXNhc3NlbWJsZXI7CisgICAgVmVjdG9yPHN0ZDo6cGFp
cjxDYWxsLCB2b2lkKj4+IG1fY2FsbHM7CisgICAgVmVjdG9yPENhbGxDb21waWxhdGlvbkluZm8+
IG1fY2FsbENvbXBpbGF0aW9uSW5mbzsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXQVNN
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNlbmRpZiAvLyBXQVNNQ29kZUdl
bmVyYXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVu
Y3Rpb25QYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9u
UGFyc2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hY2Q2ZDNlMTJiNWQ3MzFiM2RjZWU5MzllOThkNTQ0NTdl
MDBhNzNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FT
TUZ1bmN0aW9uUGFyc2VyLmNwcApAQCAtMCwwICsxLDM5NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXQVNNRnVuY3Rpb25QYXJzZXIuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2lu
Y2x1ZGUgIldBU01Db2RlR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiV0FTTU1vZHVsZS5oIgorI2lu
Y2x1ZGUgIldBU01TeW50YXhDaGVja2VyLmgiCisKKyNkZWZpbmUgcHJvcGFnYXRlRXJyb3IoKSBk
byB7IGlmIChoYXNFcnJvcigpKSByZXR1cm4gMDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgaW50ZXJu
YWxGYWlsV2l0aE1lc3NhZ2UoLi4uKSBkbyB7IFwKKyAgICBwcm9wYWdhdGVFcnJvcigpOyBcCisg
ICAgbG9nRXJyb3IoX19WQV9BUkdTX18pOyBcCisgICAgcmV0dXJuIDA7IFwKK30gd2hpbGUgKDAp
CisjZGVmaW5lIGZhaWxJZkZhbHNlKGNvbmQsIC4uLikgZG8geyBpZiAoIShjb25kKSkgeyBpbnRl
cm5hbEZhaWxXaXRoTWVzc2FnZShfX1ZBX0FSR1NfXyk7IH0gfSB3aGlsZSAoMCkKKworbmFtZXNw
YWNlIEpTQyB7CisKK25hbWVzcGFjZSBXQVNNIHsKKwordm9pZCBGdW5jdGlvblBhcnNlcjo6Y2hl
Y2tTeW50YXhBbmRDYWxjdWxhdGVTb3VyY2VSYW5nZShNb2R1bGUqIG1vZHVsZSwgc2l6ZV90IGZ1
bmN0aW9uSW5kZXgsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0SW5Tb3VyY2UsIGNvbnN0IHVpbnQ4X3Qq
JiBlbmRDdXJzb3IpCit7CisgICAgRnVuY3Rpb25QYXJzZXIgcGFyc2VyKG1vZHVsZSk7CisgICAg
U3ludGF4Q2hlY2tlciBzeW50YXhDaGVja2VyOworICAgIHBhcnNlci5wYXJzZUZ1bmN0aW9uKHN5
bnRheENoZWNrZXIsIGZ1bmN0aW9uSW5kZXgsIHN0YXJ0T2Zmc2V0SW5Tb3VyY2UpOworICAgIGVu
ZEN1cnNvciA9IHBhcnNlci5tX3JlYWRlci5jdXJzb3IoKTsKK30KKworUmVmUHRyPEpJVENvZGU+
IEZ1bmN0aW9uUGFyc2VyOjpnZW5lcmF0ZUNvZGUoVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgTW9kdWxlKiBtb2R1bGUsIHNpemVfdCBmdW5jdGlvbkluZGV4LCB1bnNpZ25lZCBzdGFydE9m
ZnNldEluU291cmNlKQoreworICAgIEZ1bmN0aW9uUGFyc2VyIHBhcnNlcihtb2R1bGUpOworICAg
IENvZGVHZW5lcmF0b3IgY29kZUdlbmVyYXRvcih2bSwgY29kZUJsb2NrLCBtb2R1bGUpOworICAg
IHBhcnNlci5wYXJzZUZ1bmN0aW9uKGNvZGVHZW5lcmF0b3IsIGZ1bmN0aW9uSW5kZXgsIHN0YXJ0
T2Zmc2V0SW5Tb3VyY2UpOworCisgICAgcmV0dXJuIGNvZGVHZW5lcmF0b3Iuaml0Q29kZSgpOwor
fQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KK3ZvaWQgRnVuY3Rpb25QYXJzZXI6OnBhcnNl
RnVuY3Rpb24oQ29udGV4dCYgY29udGV4dCwgc2l6ZV90IGZ1bmN0aW9uSW5kZXgsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0SW5Tb3VyY2UpCit7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+JiBidWZmZXIg
PSBzdGF0aWNfY2FzdDxXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyKj4obV9tb2R1bGUtPm1fc291
cmNlLnByb3ZpZGVyKCkpLT5kYXRhKCk7CisgICAgbV9yZWFkZXIgPSBSZWFkZXIocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVyLmRhdGEoKSkgKyBzdGFydE9mZnNldEluU291
cmNlKTsKKworICAgIGNvbnRleHQuc3RhcnRGdW5jdGlvbigpOworCisgICAgcGFyc2VTaWduYXR1
cmUoY29udGV4dCwgZnVuY3Rpb25JbmRleCk7CisgICAgcGFyc2VWYXJzKGNvbnRleHQpOworICAg
IGNvbnRleHQuc2V0TG9jYWxUeXBlcyhtX2xvY2FsVHlwZXMpOworICAgIHBhcnNlU3RhdGVtZW50
TGlzdChjb250ZXh0KTsKKyAgICAvLyBUT0RPOiBjaGVjayBmb3IgZXJyb3IgaGVyZQorCisgICAg
Y29udGV4dC5lbmRGdW5jdGlvbigpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KK3Zv
aWQgRnVuY3Rpb25QYXJzZXI6OnBhcnNlU2lnbmF0dXJlKENvbnRleHQmIGNvbnRleHQsIHNpemVf
dCBmdW5jdGlvbkluZGV4KQoreworICAgIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlID0gbV9t
b2R1bGUtPm1fc2lnbmF0dXJlc1ttX21vZHVsZS0+bV9mdW5jU2lnbmF0dXJlc1tmdW5jdGlvbklu
ZGV4XV07CisgICAgbV9yZXR1cm5UeXBlID0gc2lnbmF0dXJlLnJldHVyblR5cGU7CisgICAgc2l6
ZV90IGFyZ3VtZW50Q291bnQgPSBzaWduYXR1cmUuYXJndW1lbnRzLnNpemUoKTsKKyAgICBmb3Ig
KHNpemVfdCBhcmdJbmRleCA9IDA7IGFyZ0luZGV4IDwgYXJndW1lbnRDb3VudDsgKythcmdJbmRl
eCkgeworICAgICAgICBUeXBlIHR5cGUgPSBzaWduYXR1cmUuYXJndW1lbnRzW2FyZ0luZGV4XTsK
KyAgICAgICAgbV9sb2NhbFR5cGVzLmFwcGVuZCh0eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICAgICAgY29udGV4dC51bmJveEFy
Z3VtZW50KGFyZ0luZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAg
IH0KK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+Cit2b2lkIEZ1bmN0aW9uUGFyc2VyOjpw
YXJzZVZhcnMoQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZkkzMlZh
cnMgPSAwOworICAgIHVpbnQzMl90IG51bWJlck9mRjMyVmFycyA9IDA7CisgICAgdWludDMyX3Qg
bnVtYmVyT2ZGNjRWYXJzID0gMDsKKworICAgIFZhclR5cGVzIHZhclR5cGVzOworICAgIFZhclR5
cGVzV2l0aEltbWVkaWF0ZSB2YXJUeXBlc1dpdGhJbW1lZGlhdGU7CisgICAgdWludDhfdCBpbW1l
ZGlhdGU7CisgICAgaWYgKG1fcmVhZGVyLnJlYWRDb2RlKCZ2YXJUeXBlcywgJnZhclR5cGVzV2l0
aEltbWVkaWF0ZSwgJmltbWVkaWF0ZSkpIHsKKyAgICAgICAgaWYgKHZhclR5cGVzICYgVmFyVHlw
ZXM6OkkzMikKKyAgICAgICAgICAgIG51bWJlck9mSTMyVmFycyA9IG1fcmVhZGVyLnJlYWRVbnNp
Z25lZEludDMyKCk7CisgICAgICAgIGlmICh2YXJUeXBlcyAmIFZhclR5cGVzOjpGMzIpCisgICAg
ICAgICAgICBudW1iZXJPZkYzMlZhcnMgPSBtX3JlYWRlci5yZWFkVW5zaWduZWRJbnQzMigpOwor
ICAgICAgICBpZiAodmFyVHlwZXMgJiBWYXJUeXBlczo6RjY0KQorICAgICAgICAgICAgbnVtYmVy
T2ZGNjRWYXJzID0gbV9yZWFkZXIucmVhZFVuc2lnbmVkSW50MzIoKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgbnVtYmVyT2ZJMzJWYXJzID0gaW1tZWRpYXRlOworCisgICAgdWludDMyX3QgbnVtYmVy
T2ZWYXJzID0gbnVtYmVyT2ZJMzJWYXJzICsgbnVtYmVyT2ZGMzJWYXJzICsgbnVtYmVyT2ZGNjRW
YXJzOworICAgIGlmIChudW1iZXJPZlZhcnMgPiAwKSB7CisgICAgICAgIHNpemVfdCBsb2NhbElu
ZGV4ID0gbV9sb2NhbFR5cGVzLnNpemUoKTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsg
aSA8IG51bWJlck9mSTMyVmFyczsgKytpKSB7CisgICAgICAgICAgICBtX2xvY2FsVHlwZXMuYXBw
ZW5kKFR5cGU6OkkzMik7CisgICAgICAgICAgICBjb250ZXh0LnNldExvY2FsWmVyb0kzMihsb2Nh
bEluZGV4KyspOworICAgICAgICB9CisgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBu
dW1iZXJPZkYzMlZhcnM7ICsraSkgeworICAgICAgICAgICAgbV9sb2NhbFR5cGVzLmFwcGVuZChU
eXBlOjpGMzIpOworICAgICAgICAgICAgLy8gY29udGV4dC5zZXRMb2NhbFplcm9GMzIobG9jYWxJ
bmRleCsrKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVt
YmVyT2ZGNjRWYXJzOyArK2kpIHsKKyAgICAgICAgICAgIG1fbG9jYWxUeXBlcy5hcHBlbmQoVHlw
ZTo6RjY0KTsKKyAgICAgICAgICAgIC8vIGNvbnRleHQuc2V0TG9jYWxaZXJvRjY0KGxvY2FsSW5k
ZXgrKyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0Pgor
Q29udGV4dFN0YXRlbWVudCBGdW5jdGlvblBhcnNlcjo6cGFyc2VTdGF0ZW1lbnQoQ29udGV4dCYg
Y29udGV4dCkKK3sKKyAgICBPcFN0YXRlbWVudCBvcFN0YXRlbWVudDsKKyAgICBPcFN0YXRlbWVu
dFdpdGhJbW1lZGlhdGUgb3BTdGF0ZW1lbnRXaXRoSW1tZWRpYXRlOworICAgIHVpbnQ4X3QgaW1t
ZWRpYXRlOworICAgIENvbnRleHRTdGF0ZW1lbnQgcmVzdWx0OworICAgIGlmIChtX3JlYWRlci5y
ZWFkQ29kZSgmb3BTdGF0ZW1lbnQsICZvcFN0YXRlbWVudFdpdGhJbW1lZGlhdGUsICZpbW1lZGlh
dGUpKSB7CisgICAgICAgIHN3aXRjaCAob3BTdGF0ZW1lbnQpIHsKKyAgICAgICAgY2FzZSBPcFN0
YXRlbWVudDo6U2V0TG9jOgorICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2VTZXRMb2NhbFN0YXRl
bWVudChjb250ZXh0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9wU3RhdGVt
ZW50OjpSZXQ6CisgICAgICAgICAgICByZXN1bHQgPSBwYXJzZVJldHVyblN0YXRlbWVudChjb250
ZXh0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9wU3RhdGVtZW50OjpCbG9j
azoKKyAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlQmxvY2tTdGF0ZW1lbnQoY29udGV4dCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPcFN0YXRlbWVudDo6SWZUaGVuOgorICAg
ICAgICAgICAgcmVzdWx0ID0gcGFyc2VJZlN0YXRlbWVudChjb250ZXh0KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIE9wU3RhdGVtZW50OjpJZkVsc2U6CisgICAgICAgICAgICBy
ZXN1bHQgPSBwYXJzZUlmRWxzZVN0YXRlbWVudChjb250ZXh0KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHN3aXRjaCAob3BTdGF0ZW1l
bnRXaXRoSW1tZWRpYXRlKSB7CisgICAgICAgIGNhc2UgT3BTdGF0ZW1lbnRXaXRoSW1tZWRpYXRl
OjpTZXRMb2M6CisgICAgICAgICAgICByZXN1bHQgPSBwYXJzZVNldExvY2FsU3RhdGVtZW50KGNv
bnRleHQsIGltbWVkaWF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitD
b250ZXh0U3RhdGVtZW50IEZ1bmN0aW9uUGFyc2VyOjpwYXJzZVNldExvY2FsU3RhdGVtZW50KENv
bnRleHQmIGNvbnRleHQsIHVpbnQzMl90IGltbWVkaWF0ZSkKK3sKKyAgICBUeXBlIHR5cGUgPSBt
X2xvY2FsVHlwZXNbaW1tZWRpYXRlXTsKKyAgICBDb250ZXh0RXhwcmVzc2lvbiBleHByZXNzaW9u
ID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQsIFJldHVyblR5cGUodHlwZSkpOworICAgIHN3aXRj
aCAodHlwZSkgeworICAgIGNhc2UgVHlwZTo6STMyOgorICAgICAgICBjb250ZXh0LnNldExvY2Fs
KGV4cHJlc3Npb24sIGltbWVkaWF0ZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJldHVybiAx
OworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRleHRTdGF0ZW1lbnQgRnVuY3Rp
b25QYXJzZXI6OnBhcnNlU2V0TG9jYWxTdGF0ZW1lbnQoQ29udGV4dCYgY29udGV4dCkKK3sKKyAg
ICB1aW50MzJfdCBpbW1lZGlhdGUgPSBtX3JlYWRlci5yZWFkVW5zaWduZWRJbnQzMigpOworICAg
IHBhcnNlU2V0TG9jYWxTdGF0ZW1lbnQoY29udGV4dCwgaW1tZWRpYXRlKTsKKyAgICByZXR1cm4g
MTsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0U3RhdGVtZW50IEZ1bmN0
aW9uUGFyc2VyOjpwYXJzZVJldHVyblN0YXRlbWVudChDb250ZXh0JiBjb250ZXh0KQoreworICAg
IHN3aXRjaCAobV9yZXR1cm5UeXBlKSB7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpJMzI6IHsKKyAg
ICAgICAgQ29udGV4dEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbkkzMihj
b250ZXh0KTsKKyAgICAgICAgY29udGV4dC5yZXR1cm5JMzIoZXhwcmVzc2lvbik7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KKwordGVtcGxhdGUgPGNsYXNzIENv
bnRleHQ+CitDb250ZXh0U3RhdGVtZW50IEZ1bmN0aW9uUGFyc2VyOjpwYXJzZVN0YXRlbWVudExp
c3QoQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZlN0YXRlbWVudHMg
PSBtX3JlYWRlci5yZWFkVW5zaWduZWRJbnQzMigpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7
IGkgPCBudW1iZXJPZlN0YXRlbWVudHM7ICsraSkgeworICAgICAgICBDb250ZXh0U3RhdGVtZW50
IHN0YXRlbWVudCA9IHBhcnNlU3RhdGVtZW50KGNvbnRleHQpOworICAgICAgICBwcm9wYWdhdGVF
cnJvcigpOworICAgICAgICBVTlVTRURfUEFSQU0oc3RhdGVtZW50KTsKKyAgICB9CisgICAgcmV0
dXJuIDE7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgorQ29udGV4dFN0YXRlbWVudCBG
dW5jdGlvblBhcnNlcjo6cGFyc2VCbG9ja1N0YXRlbWVudChDb250ZXh0JiBjb250ZXh0KQorewor
ICAgIHBhcnNlU3RhdGVtZW50TGlzdChjb250ZXh0KTsKKyAgICAvLyBGSVhNRTogY2hlY2sgZm9y
IGVycm9yIGhlcmU/CisgICAgcmV0dXJuIDE7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0
PgorQ29udGV4dFN0YXRlbWVudCBGdW5jdGlvblBhcnNlcjo6cGFyc2VJZlN0YXRlbWVudChDb250
ZXh0JiBjb250ZXh0KQoreworICAgIENvbnRleHRFeHByZXNzaW9uIGNvbmRpdGlvbiA9IHBhcnNl
RXhwcmVzc2lvbkkzMihjb250ZXh0KTsKKyAgICBmYWlsSWZGYWxzZShjb25kaXRpb24sICJFeHBl
Y3RlZCBhbiBleHByZXNzaW9uIGFzIHRoZSBjb25kaXRpb24gZm9yIGFuIGlmIHN0YXRlbWVudCIp
OworICAgIENvbnRleHRKdW1wIGVuZCA9IGNvbnRleHQuYnJhbmNoVGVzdEkzMihNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgY29uZGl0aW9uKTsKKyAgICBDb250ZXh0U3RhdGVtZW50IHRydWVTdGF0ZW1l
bnQgPSBwYXJzZVN0YXRlbWVudChjb250ZXh0KTsKKyAgICBmYWlsSWZGYWxzZSh0cnVlU3RhdGVt
ZW50LCAiRXhwZWN0ZWQgYSBzdGF0ZW1lbnQgYXMgdGhlIGJvZHkgb2YgYW4gaWYgYmxvY2siKTsK
KyAgICBjb250ZXh0LmxpbmtKdW1wKGVuZCk7CisgICAgcmV0dXJuIDE7Cit9CisKK3RlbXBsYXRl
IDxjbGFzcyBDb250ZXh0PgorQ29udGV4dFN0YXRlbWVudCBGdW5jdGlvblBhcnNlcjo6cGFyc2VJ
ZkVsc2VTdGF0ZW1lbnQoQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBDb250ZXh0RXhwcmVzc2lv
biBjb25kaXRpb24gPSBwYXJzZUV4cHJlc3Npb25JMzIoY29udGV4dCk7CisgICAgZmFpbElmRmFs
c2UoY29uZGl0aW9uLCAiRXhwZWN0ZWQgYW4gZXhwcmVzc2lvbiBhcyB0aGUgY29uZGl0aW9uIGZv
ciBhbiBpZiBzdGF0ZW1lbnQiKTsKKyAgICBDb250ZXh0SnVtcCBlbHNlSnVtcCA9IGNvbnRleHQu
YnJhbmNoVGVzdEkzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgY29uZGl0aW9uKTsKKyAgICBDb250
ZXh0U3RhdGVtZW50IHRydWVTdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVudChjb250ZXh0KTsKKyAg
ICBmYWlsSWZGYWxzZSh0cnVlU3RhdGVtZW50LCAiRXhwZWN0ZWQgYSBzdGF0ZW1lbnQgYXMgdGhl
IGJvZHkgb2YgYW4gaWYgYmxvY2siKTsKKyAgICBDb250ZXh0SnVtcCBlbmQgPSBjb250ZXh0LmVt
aXRKdW1wKCk7CisgICAgY29udGV4dC5saW5rSnVtcChlbHNlSnVtcCk7CisgICAgQ29udGV4dFN0
YXRlbWVudCBmYWxzZVN0YXRlbWVudCA9IHBhcnNlU3RhdGVtZW50KGNvbnRleHQpOworICAgIGZh
aWxJZkZhbHNlKGZhbHNlU3RhdGVtZW50LCAiRXhwZWN0ZWQgYSBzdGF0ZW1lbnQgYXMgdGhlIGJv
ZHkgb2YgYW4gZWxzZSBibG9jayIpOworICAgIGNvbnRleHQubGlua0p1bXAoZW5kKTsKKyAgICBy
ZXR1cm4gMTsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0RXhwcmVzc2lv
biBGdW5jdGlvblBhcnNlcjo6cGFyc2VFeHByZXNzaW9uKENvbnRleHQmIGNvbnRleHQsIFJldHVy
blR5cGUgcmV0dXJuVHlwZSkKK3sKKyAgICBzd2l0Y2ggKHJldHVyblR5cGUpIHsKKyAgICBjYXNl
IFJldHVyblR5cGU6OkkzMjoKKyAgICAgICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvbkkzMihjb250
ZXh0KTsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0RXhwcmVzc2lv
biBGdW5jdGlvblBhcnNlcjo6cGFyc2VFeHByZXNzaW9uSTMyKENvbnRleHQmIGNvbnRleHQpCit7
CisgICAgT3BJMzIgb3BJMzI7CisgICAgT3BJMzJXaXRoSW1tZWRpYXRlIG9wSTMyV2l0aEltbWVk
aWF0ZTsKKyAgICB1aW50OF90IGltbWVkaWF0ZTsKKworICAgIGlmIChtX3JlYWRlci5yZWFkQ29k
ZSgmb3BJMzIsICZvcEkzMldpdGhJbW1lZGlhdGUsICZpbW1lZGlhdGUpKSB7CisgICAgICAgIHN3
aXRjaCAob3BJMzIpIHsKKyAgICAgICAgY2FzZSBPcEkzMjo6TGl0SW1tOgorICAgICAgICAgICAg
cmV0dXJuIHBhcnNlTGl0ZXJhbEltbWVkaWF0ZShjb250ZXh0LCBSZXR1cm5UeXBlOjpJMzIpOwor
ICAgICAgICBjYXNlIE9wSTMyOjpHZXRMb2M6CisgICAgICAgICAgICByZXR1cm4gcGFyc2VHZXRM
b2NhbChjb250ZXh0KTsKKyAgICAgICAgY2FzZSBPcEkzMjo6Q2FsbEludDoKKyAgICAgICAgICAg
IHJldHVybiBwYXJzZUNhbGxJbnRlcm5hbChjb250ZXh0LCBSZXR1cm5UeXBlOjpJMzIpOworICAg
ICAgICBjYXNlIE9wSTMyOjpBZGQ6CisgICAgICAgIGNhc2UgT3BJMzI6Ok11bDoKKyAgICAgICAg
ICAgIHJldHVybiBwYXJzZUJpbmFyeU9wSTMyKGNvbnRleHQsIG9wSTMyKTsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBzd2l0Y2ggKG9wSTMyV2l0aEltbWVkaWF0ZSkgewor
ICAgICAgICBjYXNlIE9wSTMyV2l0aEltbWVkaWF0ZTo6TGl0SW1tOgorICAgICAgICAgICAgcmV0
dXJuIHBhcnNlTGl0ZXJhbEltbWVkaWF0ZShjb250ZXh0LCBSZXR1cm5UeXBlOjpJMzIsIGltbWVk
aWF0ZSk7CisgICAgICAgIGNhc2UgT3BJMzJXaXRoSW1tZWRpYXRlOjpHZXRMb2M6CisgICAgICAg
ICAgICByZXR1cm4gcGFyc2VHZXRMb2NhbChjb250ZXh0LCBpbW1lZGlhdGUpOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0RXhwcmVz
c2lvbiBGdW5jdGlvblBhcnNlcjo6cGFyc2VMaXRlcmFsSW1tZWRpYXRlKENvbnRleHQmIGNvbnRl
eHQsIFJldHVyblR5cGUgcmV0dXJuVHlwZSwgdWludDMyX3QgaW1tZWRpYXRlKQoreworICAgIEFT
U0VSVChyZXR1cm5UeXBlID09IFJldHVyblR5cGU6OkkzMik7CisgICAgcmV0dXJuIGNvbnRleHQu
cmVnSTMyKGltbWVkaWF0ZSk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgorQ29udGV4
dEV4cHJlc3Npb24gRnVuY3Rpb25QYXJzZXI6OnBhcnNlTGl0ZXJhbEltbWVkaWF0ZShDb250ZXh0
JiBjb250ZXh0LCBSZXR1cm5UeXBlIHJldHVyblR5cGUpCit7CisgICAgc3dpdGNoIChyZXR1cm5U
eXBlKSB7CisgICAgY2FzZSBSZXR1cm5UeXBlOjpJMzI6CisgICAgICAgIHJldHVybiBjb250ZXh0
LnJlZ0kzMihtX3JlYWRlci5yZWFkVW5zaWduZWRJbnQzMigpKTsKKyAgICBjYXNlIFJldHVyblR5
cGU6OkY2NDoKKyAgICAgICAgcmV0dXJuIGNvbnRleHQucmVnRjY0KG1fcmVhZGVyLnJlYWREb3Vi
bGUoKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRleHRFeHByZXNzaW9uIEZ1bmN0
aW9uUGFyc2VyOjpwYXJzZUdldExvY2FsKENvbnRleHQmIGNvbnRleHQsIHVpbnQzMl90IGltbWVk
aWF0ZSkKK3sKKyAgICBzd2l0Y2ggKG1fbG9jYWxUeXBlc1tpbW1lZGlhdGVdKSB7CisgICAgY2Fz
ZSBUeXBlOjpJMzI6CisgICAgICAgIHJldHVybiBjb250ZXh0LmdldExvY2FsSTMyKGltbWVkaWF0
ZSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgorQ29udGV4dEV4cHJlc3Npb24g
RnVuY3Rpb25QYXJzZXI6OnBhcnNlR2V0TG9jYWwoQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICB1
aW50MzJfdCBpbW1lZGlhdGUgPSBtX3JlYWRlci5yZWFkVW5zaWduZWRJbnQzMigpOworICAgIHJl
dHVybiBwYXJzZUdldExvY2FsKGNvbnRleHQsIGltbWVkaWF0ZSk7Cit9CisKK3RlbXBsYXRlIDxj
bGFzcyBDb250ZXh0PgorQ29udGV4dEV4cHJlc3Npb24gRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ2Fs
bEludGVybmFsKENvbnRleHQmIGNvbnRleHQsIFJldHVyblR5cGUgcmV0dXJuVHlwZSkKK3sKKyAg
ICB1aW50MzJfdCBmdW5jdGlvbkluZGV4ID0gbV9yZWFkZXIucmVhZFVuc2lnbmVkSW50MzIoKTsK
KyAgICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IG1fbW9kdWxlLT5tX3NpZ25hdHVyZXNb
bV9tb2R1bGUtPm1fZnVuY1NpZ25hdHVyZXNbZnVuY3Rpb25JbmRleF1dOworICAgIGNvbnN0IFZl
Y3RvcjxUeXBlPiYgYXJndW1lbnRzID0gc2lnbmF0dXJlLmFyZ3VtZW50czsKKyAgICAvLyBGSVhN
RTogcmV0dXJuVHlwZSBpcyByZWR1bmRhbnQgd2l0aCBzaWduYXR1cmUucmV0dXJuVHlwZQorCisg
ICAgVmVjdG9yPENvbnRleHRFeHByZXNzaW9uPiBhcmd1bWVudFJlZ2lzdGVyczsKKyAgICBzaXpl
X3QgYXJndW1lbnRDb3VudCA9IGFyZ3VtZW50cy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpIHsKKyAgICAgICAgc3dpdGNoIChhcmd1bWVudHNb
aV0pIHsKKyAgICAgICAgY2FzZSBUeXBlOjpJMzI6CisgICAgICAgICAgICBhcmd1bWVudFJlZ2lz
dGVycy5hcHBlbmQocGFyc2VFeHByZXNzaW9uSTMyKGNvbnRleHQpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGNvbnRleHQuY2FsbEludGVybmFsKGZ1bmN0
aW9uSW5kZXgsIGFyZ3VtZW50cywgYXJndW1lbnRSZWdpc3RlcnMsIHJldHVyblR5cGUpOworfQor
Cit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRleHRFeHByZXNzaW9uIEZ1bmN0aW9uUGFy
c2VyOjpwYXJzZUJpbmFyeU9wSTMyKENvbnRleHQmIGNvbnRleHQsIE9wSTMyIG9wKQoreworICAg
IENvbnRleHRFeHByZXNzaW9uIGV4cHJlc3Npb24xID0gcGFyc2VFeHByZXNzaW9uSTMyKGNvbnRl
eHQpOworICAgIENvbnRleHRFeHByZXNzaW9uIGV4cHJlc3Npb24yID0gcGFyc2VFeHByZXNzaW9u
STMyKGNvbnRleHQpOworCisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgT3BJMzI6OkFkZDoK
KyAgICAgICAgcmV0dXJuIGNvbnRleHQuYWRkSTMyKGV4cHJlc3Npb24xLCBleHByZXNzaW9uMik7
CisgICAgY2FzZSBPcEkzMjo6TXVsOgorICAgICAgICByZXR1cm4gY29udGV4dC5tdWxJMzIoZXhw
cmVzc2lvbjEsIGV4cHJlc3Npb24yKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBBPgordm9pZCBGdW5j
dGlvblBhcnNlcjo6bG9nRXJyb3IoY29uc3QgQSYgdmFsdWUxKQoreworICAgIGlmIChoYXNFcnJv
cigpKQorICAgICAgICByZXR1cm47CisgICAgU3RyaW5nUHJpbnRTdHJlYW0gc3RyZWFtOworICAg
IHN0cmVhbS5wcmludCh2YWx1ZTEsICIuIik7CisgICAgc2V0RXJyb3JNZXNzYWdlKHN0cmVhbS50
b1N0cmluZygpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OldBU00KKworI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dBU01GdW5jdGlvblBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FT
TUZ1bmN0aW9uUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2MzNWI4ZTNlODRlMjMzYjFlZjM1YTI4ODJj
NDc4MmJiNWRmYWMzNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dBU01GdW5jdGlvblBhcnNlci5oCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXQVNNRnVuY3Rpb25QYXJz
ZXJfaAorI2RlZmluZSBXQVNNRnVuY3Rpb25QYXJzZXJfaAorCisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorCisjaW5jbHVkZSAiU291cmNlQ29kZS5oIgorI2luY2x1ZGUgIldBU01SZWFkZXIuaCIK
KworI2RlZmluZSBDb250ZXh0RXhwcmVzc2lvbiB0eXBlbmFtZSBDb250ZXh0OjpFeHByZXNzaW9u
CisjZGVmaW5lIENvbnRleHRTdGF0ZW1lbnQgdHlwZW5hbWUgQ29udGV4dDo6U3RhdGVtZW50Cisj
ZGVmaW5lIENvbnRleHRKdW1wIHR5cGVuYW1lIENvbnRleHQ6Okp1bXAKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIEpJVENvZGU7CitjbGFzcyBWTTsKKworbmFt
ZXNwYWNlIFdBU00geworCitjbGFzcyBNb2R1bGU7CisKK2NsYXNzIEZ1bmN0aW9uUGFyc2VyIHsK
K3B1YmxpYzoKKyAgICBGdW5jdGlvblBhcnNlcihNb2R1bGUqIG1vZHVsZSkKKyAgICAgICAgOiBt
X21vZHVsZShtb2R1bGUpCisgICAgeworICAgIH0KKworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250
ZXh0PiB2b2lkIHBhcnNlRnVuY3Rpb24oQ29udGV4dCYsIHNpemVfdCBmdW5jdGlvbkluZGV4LCB1
bnNpZ25lZCBzdGFydE9mZnNldEluU291cmNlKTsKKyAgICBjb25zdCBSZWFkZXImIHJlYWRlcigp
IGNvbnN0IHsgcmV0dXJuIG1fcmVhZGVyOyB9CisKKyAgICBzdGF0aWMgdm9pZCBjaGVja1N5bnRh
eEFuZENhbGN1bGF0ZVNvdXJjZVJhbmdlKE1vZHVsZSosIHNpemVfdCBmdW5jdGlvbkluZGV4LCB1
bnNpZ25lZCBzdGFydE9mZnNldEluU291cmNlLCBjb25zdCB1aW50OF90KiYgZW5kQ3Vyc29yKTsK
KyAgICBzdGF0aWMgUmVmUHRyPEpJVENvZGU+IGdlbmVyYXRlQ29kZShWTSosIENvZGVCbG9jayos
IE1vZHVsZSosIHNpemVfdCBmdW5jdGlvbkluZGV4LCB1bnNpZ25lZCBzdGFydE9mZnNldEluU291
cmNlKTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gdm9pZCBwYXJz
ZVNpZ25hdHVyZShDb250ZXh0Jiwgc2l6ZV90IGZ1bmN0aW9uSW5kZXgpOworICAgIHRlbXBsYXRl
IDxjbGFzcyBDb250ZXh0PiB2b2lkIHBhcnNlVmFycyhDb250ZXh0Jik7CisKKyAgICB0ZW1wbGF0
ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dFN0YXRlbWVudCBwYXJzZVN0YXRlbWVudChDb250ZXh0
Jik7CisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRTdGF0ZW1lbnQgcGFyc2VT
ZXRMb2NhbFN0YXRlbWVudChDb250ZXh0JiwgdWludDMyX3QgaW1tZWRpYXRlKTsKKyAgICB0ZW1w
bGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dFN0YXRlbWVudCBwYXJzZVNldExvY2FsU3RhdGVt
ZW50KENvbnRleHQmKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dFN0YXRl
bWVudCBwYXJzZVJldHVyblN0YXRlbWVudChDb250ZXh0Jik7CisgICAgdGVtcGxhdGUgPGNsYXNz
IENvbnRleHQ+IENvbnRleHRTdGF0ZW1lbnQgcGFyc2VTdGF0ZW1lbnRMaXN0KENvbnRleHQmKTsK
KyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dFN0YXRlbWVudCBwYXJzZUJsb2Nr
U3RhdGVtZW50KENvbnRleHQmKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4
dFN0YXRlbWVudCBwYXJzZUlmU3RhdGVtZW50KENvbnRleHQmKTsKKyAgICB0ZW1wbGF0ZSA8Y2xh
c3MgQ29udGV4dD4gQ29udGV4dFN0YXRlbWVudCBwYXJzZUlmRWxzZVN0YXRlbWVudChDb250ZXh0
Jik7CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFy
c2VFeHByZXNzaW9uKENvbnRleHQmLCBSZXR1cm5UeXBlKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
Q29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VFeHByZXNzaW9uSTMyKENvbnRleHQmKTsK
KyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VMaXRl
cmFsSW1tZWRpYXRlKENvbnRleHQmLCBSZXR1cm5UeXBlLCB1aW50MzJfdCBpbW1lZGlhdGUpOwor
ICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUxpdGVy
YWxJbW1lZGlhdGUoQ29udGV4dCYsIFJldHVyblR5cGUpOworICAgIHRlbXBsYXRlIDxjbGFzcyBD
b250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUdldExvY2FsKENvbnRleHQmLCB1aW50MzJf
dCBpbW1lZGlhdGUpOworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVz
c2lvbiBwYXJzZUdldExvY2FsKENvbnRleHQmKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4
dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VDYWxsSW50ZXJuYWwoQ29udGV4dCYsIFJldHVyblR5
cGUpOworCisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBh
cnNlQmluYXJ5T3BJMzIoQ29udGV4dCYsIE9wSTMyKTsKKworICAgIHZvaWQgc2V0RXJyb3JNZXNz
YWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKKyAgICB7CisgICAgICAgIG1fZXJyb3JNZXNzYWdl
ID0gbWVzc2FnZTsKKyAgICB9CisKKyAgICBib29sIGhhc0Vycm9yKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAhbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCk7CisgICAgfQorCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEE+IHZvaWQgbG9nRXJyb3IoY29uc3QgQSYpOworCisgICAgTW9kdWxl
KiBtX21vZHVsZTsKKyAgICBSZWFkZXIgbV9yZWFkZXI7CisgICAgU3RyaW5nIG1fZXJyb3JNZXNz
YWdlOworCisgICAgUmV0dXJuVHlwZSBtX3JldHVyblR5cGU7CisgICAgVmVjdG9yPFR5cGU+IG1f
bG9jYWxUeXBlczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXQVNNCisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNlbmRpZiAvLyBXQVNNRnVuY3Rpb25QYXJzZXJfaApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZGVk
ZmVkMDYyOTEwYmE2MjkyZmVjYzAyODcyYWYzZTJjZDBjNjBmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZS5jcHAKQEAgLTAsMCArMSwxMjUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0FTTU1vZHVsZS5oIgorCisjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQorCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQ2VsbElu
bGluZXMuaCIKKyNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxPYmpl
Y3QuaCIKKyNpbmNsdWRlICJSZWplY3QuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXQVNNIHsKKworY29uc3QgQ2xhc3NJ
bmZvIE1vZHVsZTo6c19pbmZvID0geyAiTW9kdWxlIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShNb2R1bGUpIH07CisKK3ZvaWQgTW9kdWxlOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0pOworCisgICAgLy8gVE9ETzogTWFrZSB0aGlzIGxlc3MgaGFja3kKKyAgICBS
ZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZSgxMDI0
LCAxKTsKKyAgICBKU0FycmF5QnVmZmVyKiBqc0FycmF5QnVmZmVyID0gSlNBcnJheUJ1ZmZlcjo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPmFycmF5QnVmZmVyU3RydWN0dXJlKCksIGFycmF5QnVm
ZmVyLnJlbGVhc2UoKSk7CisgICAgbV9hcnJheUJ1ZmZlci5zZXQodm0sIHRoaXMsIGpzQXJyYXlC
dWZmZXIpOworfQorCitKU0Z1bmN0aW9uKiBNb2R1bGU6OmZ1bmN0aW9uKHNpemVfdCBmdW5jdGlv
bkluZGV4KSBjb25zdAoreworICAgIHJldHVybiBtX2Z1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS5n
ZXQoKTsKK30KKworY29uc3Qgdm9pZCogTW9kdWxlOjphcnJheUJ1ZmZlckRhdGEoKSBjb25zdAor
eworICAgIHJldHVybiBtX2FycmF5QnVmZmVyLT5pbXBsKCktPmRhdGEoKTsKK30KKwordm9pZCBN
b2R1bGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICBNb2R1bGUqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxNb2R1bGUqPihjZWxsKTsK
KyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICBmb3IgKGF1dG8g
ZnVuY3Rpb24gOiB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9ucykKKyAgICAgICAgdmlzaXRvci5hcHBl
bmQoJmZ1bmN0aW9uKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcnJheUJ1
ZmZlcik7Cit9CisKK2Jvb2wgTW9kdWxlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCit7CisgICAgTW9kdWxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PE1vZHVsZSo+
KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
YnVmZmVyKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5LCB0aGlzT2JqZWN0LT5tX2FycmF5QnVmZmVyLmdldCgpKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCit2b2lkIE1vZHVsZTo6
cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgTW9kdWxl
KiB0aGlzT2JqZWN0ID0ganNDYXN0PE1vZHVsZSo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikgeworICAgICAgICByZWplY3QoZXhl
Yywgc2xvdC5pc1N0cmljdE1vZGUoKSwgIkF0dGVtcHRpbmcgdG8gd3JpdGUgdG8gYSByZWFkLW9u
bHkgYXJyYXkgYnVmZmVyIHByb3BlcnR5LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3Qp
OworfQorCitib29sIE1vZHVsZTo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgTW9kdWxl
KiB0aGlzT2JqZWN0ID0ganNDYXN0PE1vZHVsZSo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKQorICAgICAgICByZXR1cm4gcmVq
ZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcmVhZC1vbmx5IGFy
cmF5IGJ1ZmZlciBwcm9wZXJ0eS4iKTsKKworICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9w
ZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHNob3VsZFRo
cm93KTsKK30KKworYm9vbCBNb2R1bGU6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIE1vZHVsZSog
dGhpc09iamVjdCA9IGpzQ2FzdDxNb2R1bGUqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1l
ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUpOworfQorCit2b2lkIE1vZHVsZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFy
cmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBNb2R1bGUqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8TW9kdWxlKj4ob2JqZWN0KTsKKyAgICBpZiAobW9kZS5pbmNsdWRlRG9udEVudW1Qcm9w
ZXJ0aWVzKCkpCisgICAgICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVy
KTsKKworICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBl
eGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpXQVNNCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XQVNNTW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNN
TW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMGU5MTdkMDgxN2M0MDk1MzhiMDg4NTEyMDcxODg4YjlkZTgz
NDdmYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01N
b2R1bGUuaApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgV0FTTU1vZHVsZV9oCisjZGVmaW5lIFdBU01Nb2R1bGVf
aAorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNp
bmNsdWRlICJXQVNNT3Bjb2Rlcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdB
U00geworCitjbGFzcyBGdW5jdGlvblBhcnNlcjsKK2NsYXNzIE1vZHVsZVBhcnNlcjsKKworY2xh
c3MgTW9kdWxlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVk
ZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlO
YW1lcyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKKworICAgIHN0YXRpYyBNb2R1bGUq
IGNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSkKKyAgICB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY3Jl
YXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QpOyAvLyBGSVhNRTogSXMgdGhpcyByaWdodD8K
KyAgICAgICAgTW9kdWxlKiBtb2R1bGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxNb2R1
bGU+KHZtLmhlYXApKSBNb2R1bGUodm0sIHN0cnVjdHVyZSwgc291cmNlKTsKKyAgICAgICAgbW9k
dWxlLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIG1v
ZHVsZTsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IGpzTnVsbCgpLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
CisgICAgfQorCisgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24oc2l6ZV90IGZ1bmN0aW9uSW5kZXgp
IGNvbnN0OworICAgIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JbXBvcnROYW1lKHNpemVfdCBmdW5j
dGlvbkltcG9ydEluZGV4KSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uSW1wb3J0TmFtZXNbZnVu
Y3Rpb25JbXBvcnRJbmRleF07IH0KKyAgICBjb25zdCB2b2lkKiBhcnJheUJ1ZmZlckRhdGEoKSBj
b25zdDsKKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgRnVuY3Rpb25QYXJzZXI7CisgICAg
ZnJpZW5kIGNsYXNzIE1vZHVsZVBhcnNlcjsKKworICAgIHN0cnVjdCBGdW5jSW1wb3J0U2lnbmF0
dXJlIHsKKyAgICAgICAgdWludDMyX3Qgc2lnbmF0dXJlSW5kZXg7CisgICAgICAgIHVpbnQzMl90
IGZ1bmNJbXBvcnRJbmRleDsKKyAgICB9OworCisgICAgc3RydWN0IEZ1bmNQdHJUYWJsZSB7Cisg
ICAgICAgIHVpbnQzMl90IHNpZ25hdHVyZUluZGV4OworICAgICAgICBWZWN0b3I8dWludDMyX3Q+
IGVsZW1lbnRzOworICAgIH07CisKKyAgICBNb2R1bGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVj
dHVyZSkKKyAgICAgICAgLCBtX3NvdXJjZShzb3VyY2UpCisgICAgeworICAgIH0KKworICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCopOworCisgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMg
Ym9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3Rh
dGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
KTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisKKyAg
ICBTb3VyY2VDb2RlIG1fc291cmNlOworCisgICAgVmVjdG9yPFNpZ25hdHVyZT4gbV9zaWduYXR1
cmVzOworICAgIFZlY3Rvcjx1aW50MzJfdD4gbV9jb25zdGFudEkzMnM7CisgICAgVmVjdG9yPGZs
b2F0PiBtX2NvbnN0YW50RjMyczsKKyAgICBWZWN0b3I8ZG91YmxlPiBtX2NvbnN0YW50RjY0czsK
KyAgICBWZWN0b3I8U3RyaW5nPiBtX2Z1bmN0aW9uSW1wb3J0TmFtZXM7CisgICAgVmVjdG9yPEZ1
bmNJbXBvcnRTaWduYXR1cmU+IG1fZnVuY0ltcG9ydFNpZ25hdHVyZXM7CisgICAgVmVjdG9yPFR5
cGU+IG1fZ2xvYmFsVHlwZXM7CisgICAgVmVjdG9yPHVpbnQzMl90PiBtX2Z1bmNTaWduYXR1cmVz
OworICAgIFZlY3RvcjxGdW5jUHRyVGFibGU+IG1fZnVuY1B0clRhYmxlczsKKworICAgIFZlY3Rv
cjxXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4+IG1fZnVuY3Rpb25zOworICAgIFdyaXRlQmFycmll
cjxKU0FycmF5QnVmZmVyPiBtX2FycmF5QnVmZmVyOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OldBU00KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2VuZGlmIC8vIFdB
U01Nb2R1bGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1v
ZHVsZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFy
c2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zMGU3MDBlNjk2OWQ2YjFmOTE5YTllYzA4Y2I3YTUwY2FmMTNi
ZmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1v
ZHVsZVBhcnNlci5jcHAKQEAgLTAsMCArMSwyNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGlj
ZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIHlvdSBtYXkgbm90IHVzZSB0aGlz
IGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyBZb3UgbWF5IG9i
dGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9s
aWNlbnNlcy9MSUNFTlNFLTIuMAorCisgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3
IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIGRpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgV0lUSE9VVCBX
QVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGlt
cGxpZWQuCisgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJu
aW5nIHBlcm1pc3Npb25zIGFuZAorIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldBU01Nb2R1bGVQYXJzZXIuaCIKKwor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkpJVENvZGUuaCIKKyNpbmNsdWRl
ICJKU0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIldB
U01GdW5jdGlvblBhcnNlci5oIgorI2luY2x1ZGUgIldBU01PcGNvZGVzLmgiCisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNl
IFdBU00geworCitNb2R1bGUqIE1vZHVsZVBhcnNlcjo6cGFyc2UoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCit7CisgICAgY29u
c3QgVmVjdG9yPGNoYXI+JiBidWZmZXIgPSBzdGF0aWNfY2FzdDxXZWJBc3NlbWJseVNvdXJjZVBy
b3ZpZGVyKj4oc291cmNlLnByb3ZpZGVyKCkpLT5kYXRhKCk7CisgICAgbV9tb2R1bGUgPSBNb2R1
bGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UpOworCisgICAgbV9yZWFkZXIgPSBS
ZWFkZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVyLmRhdGEoKSkpOwor
ICAgIGlmIChtX3JlYWRlci5yZWFkRml4ZWRXaWR0aFVuc2lnbmVkSW50MzIoKSAhPSBtYWdpY051
bWJlcikKKyAgICAgICAgYWJvcnQoKTsKKyAgICBtX3JlYWRlci5yZWFkRml4ZWRXaWR0aFVuc2ln
bmVkSW50MzIoKTsgLy8gb3V0cHV0IHNpemUgaW4gYXNtLmpzIGZvcm1hdAorCisgICAgcGFyc2VD
b25zdGFudFBvb2xTZWN0aW9uKCk7CisgICAgcGFyc2VTaWduYXR1cmVTZWN0aW9uKCk7CisgICAg
cGFyc2VGdW5jdGlvbkltcG9ydFNlY3Rpb24oKTsKKyAgICBwYXJzZUdsb2JhbFNlY3Rpb24oKTsK
KyAgICBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKCk7CisgICAgcGFyc2VGdW5jdGlv
blBvaW50ZXJUYWJsZXMoKTsKKyAgICBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvblNlY3Rpb24odm0s
IGdsb2JhbE9iamVjdCk7CisgICAgcGFyc2VFeHBvcnRTZWN0aW9uKHZtKTsKKworICAgIHJldHVy
biBtX21vZHVsZTsKK30KKwordm9pZCBNb2R1bGVQYXJzZXI6OnBhcnNlQ29uc3RhbnRQb29sU2Vj
dGlvbigpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZJMzJzID0gbV9yZWFkZXIucmVhZFVuc2ln
bmVkSW50MzIoKTsKKyAgICB1aW50MzJfdCBudW1iZXJPZkYzMnMgPSBtX3JlYWRlci5yZWFkVW5z
aWduZWRJbnQzMigpOworICAgIHVpbnQzMl90IG51bWJlck9mRjY0cyA9IG1fcmVhZGVyLnJlYWRV
bnNpZ25lZEludDMyKCk7CisKKyAgICBWZWN0b3I8dWludDMyX3Q+IGNvbnN0YW50STMycyhudW1i
ZXJPZkkzMnMpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkkzMnM7ICsr
aSkKKyAgICAgICAgY29uc3RhbnRJMzJzW2ldID0gbV9yZWFkZXIucmVhZFVuc2lnbmVkSW50MzIo
KTsKKworICAgIFZlY3RvcjxmbG9hdD4gY29uc3RhbnRGMzJzKG51bWJlck9mRjMycyk7CisgICAg
Zm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mRjMyczsgKytpKQorICAgICAgICBjb25z
dGFudEYzMnNbaV0gPSBtX3JlYWRlci5yZWFkRmxvYXQoKTsKKworICAgIFZlY3Rvcjxkb3VibGU+
IGNvbnN0YW50RjY0cyhudW1iZXJPZkY2NHMpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkg
PCBudW1iZXJPZkY2NHM7ICsraSkKKyAgICAgICAgY29uc3RhbnRGNjRzW2ldID0gbV9yZWFkZXIu
cmVhZERvdWJsZSgpOworCisgICAgbV9tb2R1bGUtPm1fY29uc3RhbnRJMzJzID0gV1RGOjptb3Zl
KGNvbnN0YW50STMycyk7CisgICAgbV9tb2R1bGUtPm1fY29uc3RhbnRGMzJzID0gV1RGOjptb3Zl
KGNvbnN0YW50RjMycyk7CisgICAgbV9tb2R1bGUtPm1fY29uc3RhbnRGNjRzID0gV1RGOjptb3Zl
KGNvbnN0YW50RjY0cyk7Cit9CisKK3ZvaWQgTW9kdWxlUGFyc2VyOjpwYXJzZVNpZ25hdHVyZVNl
Y3Rpb24oKQoreworICAgIHVpbnQzMl90IG51bWJlck9mU2lnbmF0dXJlcyA9IG1fcmVhZGVyLnJl
YWRVbnNpZ25lZEludDMyKCk7CisgICAgVmVjdG9yPFNpZ25hdHVyZT4gc2lnbmF0dXJlcyhudW1i
ZXJPZlNpZ25hdHVyZXMpOworICAgIGZvciAodWludDMyX3Qgc2lnbmF0dXJlSW5kZXggPSAwOyBz
aWduYXR1cmVJbmRleCA8IG51bWJlck9mU2lnbmF0dXJlczsgKytzaWduYXR1cmVJbmRleCkgewor
ICAgICAgICBSZXR1cm5UeXBlIHJldHVyblR5cGUgPSBtX3JlYWRlci5yZWFkUmV0dXJuVHlwZSgp
OworICAgICAgICB1aW50MzJfdCBhcmd1bWVudENvdW50ID0gbV9yZWFkZXIucmVhZFVuc2lnbmVk
SW50MzIoKTsKKyAgICAgICAgU2lnbmF0dXJlIHNpZ25hdHVyZShyZXR1cm5UeXBlLCBhcmd1bWVu
dENvdW50KTsKKyAgICAgICAgZm9yICh1aW50MzJfdCBhcmd1bWVudEluZGV4ID0gMDsgYXJndW1l
bnRJbmRleCA8IGFyZ3VtZW50Q291bnQ7ICsrYXJndW1lbnRJbmRleCkKKyAgICAgICAgICAgIHNp
Z25hdHVyZS5hcmd1bWVudHNbYXJndW1lbnRJbmRleF0gPSBtX3JlYWRlci5yZWFkVHlwZSgpOwor
ICAgICAgICBzaWduYXR1cmVzW3NpZ25hdHVyZUluZGV4XSA9IFdURjo6bW92ZShzaWduYXR1cmUp
OworICAgIH0KKworICAgIG1fbW9kdWxlLT5tX3NpZ25hdHVyZXMgPSBXVEY6Om1vdmUoc2lnbmF0
dXJlcyk7Cit9CisKK3ZvaWQgTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlv
bigpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jSW1wb3J0cyA9IG1fcmVhZGVyLnJlYWRV
bnNpZ25lZEludDMyKCk7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jSW1wb3J0U2lnbmF0dXJl
cyA9IG1fcmVhZGVyLnJlYWRVbnNpZ25lZEludDMyKCk7CisKKyAgICBtX21vZHVsZS0+bV9mdW5j
dGlvbkltcG9ydE5hbWVzLnJlc2VydmVDYXBhY2l0eShudW1iZXJPZkZ1bmNJbXBvcnRzKTsKKwor
ICAgIFZlY3RvcjxNb2R1bGU6OkZ1bmNJbXBvcnRTaWduYXR1cmU+IGZ1bmNJbXBvcnRTaWduYXR1
cmVzKG51bWJlck9mRnVuY0ltcG9ydFNpZ25hdHVyZXMpOworICAgIE1vZHVsZTo6RnVuY0ltcG9y
dFNpZ25hdHVyZSogZnVuY0ltcG9ydFNpZ25hdHVyZSA9IGZ1bmNJbXBvcnRTaWduYXR1cmVzLmRh
dGEoKTsKKyAgICBmb3IgKHVpbnQzMl90IGZ1bmNJbXBvcnRJbmRleCA9IDA7IGZ1bmNJbXBvcnRJ
bmRleCA8IG51bWJlck9mRnVuY0ltcG9ydHM7ICsrZnVuY0ltcG9ydEluZGV4KSB7CisgICAgICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgd2hpbGUgKGNoYXIgYyA9IG1fcmVhZGVy
LnJlYWRDaGFyKCkpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChjKTsKKyAgICAgICAgbV9t
b2R1bGUtPm1fZnVuY3Rpb25JbXBvcnROYW1lcy5hcHBlbmQoYnVpbGRlci50b1N0cmluZygpKTsK
KworICAgICAgICB1aW50MzJfdCBudW1iZXJPZlNpZ25hdHVyZXMgPSBtX3JlYWRlci5yZWFkVW5z
aWduZWRJbnQzMigpOworICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZT
aWduYXR1cmVzOyArK2kpIHsKKyAgICAgICAgICAgIGZ1bmNJbXBvcnRTaWduYXR1cmUtPnNpZ25h
dHVyZUluZGV4ID0gbV9yZWFkZXIucmVhZFVuc2lnbmVkSW50MzIoKTsKKyAgICAgICAgICAgIGZ1
bmNJbXBvcnRTaWduYXR1cmUtPmZ1bmNJbXBvcnRJbmRleCA9IGZ1bmNJbXBvcnRJbmRleDsKKyAg
ICAgICAgICAgIGZ1bmNJbXBvcnRTaWduYXR1cmUrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBh
c3NlcnQoZnVuY0ltcG9ydFNpZ25hdHVyZSA9PSBmdW5jSW1wb3J0U2lnbmF0dXJlcy5kYXRhKCkg
KyBudW1iZXJPZkZ1bmNJbXBvcnRTaWduYXR1cmVzKTsKKworICAgIG1fbW9kdWxlLT5tX2Z1bmNJ
bXBvcnRTaWduYXR1cmVzID0gV1RGOjptb3ZlKGZ1bmNJbXBvcnRTaWduYXR1cmVzKTsKK30KKwor
dm9pZCBNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsU2VjdGlvbigpCit7CisgICAgdWludDMyX3Qg
bnVtYmVyT2ZJMzJaZXJvID0gbV9yZWFkZXIucmVhZFVuc2lnbmVkSW50MzIoKTsKKyAgICB1aW50
MzJfdCBudW1iZXJPZkYzMlplcm8gPSBtX3JlYWRlci5yZWFkVW5zaWduZWRJbnQzMigpOworICAg
IHVpbnQzMl90IG51bWJlck9mRjY0WmVybyA9IG1fcmVhZGVyLnJlYWRVbnNpZ25lZEludDMyKCk7
CisgICAgdWludDMyX3QgbnVtYmVyT2ZJMzJJbXBvcnQgPSBtX3JlYWRlci5yZWFkVW5zaWduZWRJ
bnQzMigpOworICAgIHVpbnQzMl90IG51bWJlck9mRjMySW1wb3J0ID0gbV9yZWFkZXIucmVhZFVu
c2lnbmVkSW50MzIoKTsKKyAgICB1aW50MzJfdCBudW1iZXJPZkY2NEltcG9ydCA9IG1fcmVhZGVy
LnJlYWRVbnNpZ25lZEludDMyKCk7CisgICAgdWludDMyX3QgbnVtYmVyT2ZHbG9iYWxWYXJzID0g
bnVtYmVyT2ZJMzJaZXJvICsgbnVtYmVyT2ZGMzJaZXJvICsgbnVtYmVyT2ZGNjRaZXJvICsgbnVt
YmVyT2ZJMzJJbXBvcnQgKyBudW1iZXJPZkYzMkltcG9ydCArIG51bWJlck9mRjY0SW1wb3J0Owor
CisgICAgVmVjdG9yPFR5cGU+IGdsb2JhbFR5cGVzKG51bWJlck9mR2xvYmFsVmFycyk7CisgICAg
c2l6ZV90IGdsb2JhbFR5cGVJbmRleCA9IDA7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IG51bWJlck9mSTMyWmVybzsgKytpKQorICAgICAgICBnbG9iYWxUeXBlc1tnbG9iYWxUeXBlSW5k
ZXgrK10gPSBUeXBlOjpJMzI7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9m
RjMyWmVybzsgKytpKQorICAgICAgICBnbG9iYWxUeXBlc1tnbG9iYWxUeXBlSW5kZXgrK10gPSBU
eXBlOjpGMzI7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mRjY0WmVybzsg
KytpKQorICAgICAgICBnbG9iYWxUeXBlc1tnbG9iYWxUeXBlSW5kZXgrK10gPSBUeXBlOjpGNjQ7
CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mSTMySW1wb3J0OyArK2kpIHsK
KyAgICAgICAgd2hpbGUgKG1fcmVhZGVyLnJlYWRDaGFyKCkpIHsgfQorICAgICAgICBnbG9iYWxU
eXBlc1tnbG9iYWxUeXBlSW5kZXgrK10gPSBUeXBlOjpJMzI7CisgICAgfQorICAgIGZvciAodWlu
dDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkYzMkltcG9ydDsgKytpKSB7CisgICAgICAgIHdoaWxl
IChtX3JlYWRlci5yZWFkQ2hhcigpKSB7IH0KKyAgICAgICAgZ2xvYmFsVHlwZXNbZ2xvYmFsVHlw
ZUluZGV4KytdID0gVHlwZTo6RjMyOworICAgIH0KKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBp
IDwgbnVtYmVyT2ZGNjRJbXBvcnQ7ICsraSkgeworICAgICAgICB3aGlsZSAobV9yZWFkZXIucmVh
ZENoYXIoKSkgeyB9CisgICAgICAgIGdsb2JhbFR5cGVzW2dsb2JhbFR5cGVJbmRleCsrXSA9IFR5
cGU6OkY2NDsKKyAgICB9CisgICAgbV9tb2R1bGUtPm1fZ2xvYmFsVHlwZXMgPSBXVEY6Om1vdmUo
Z2xvYmFsVHlwZXMpOworfQorCit2b2lkIE1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlY2xh
cmF0aW9uU2VjdGlvbigpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jdGlvbnMgPSBtX3Jl
YWRlci5yZWFkVW5zaWduZWRJbnQzMigpOworICAgIFZlY3Rvcjx1aW50MzJfdD4gZnVuY1NpZ25h
dHVyZXMobnVtYmVyT2ZGdW5jdGlvbnMpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBu
dW1iZXJPZkZ1bmN0aW9uczsgKytpKQorICAgICAgICBmdW5jU2lnbmF0dXJlc1tpXSA9IG1fcmVh
ZGVyLnJlYWRVbnNpZ25lZEludDMyKCk7CisKKyAgICBtX21vZHVsZS0+bV9mdW5jU2lnbmF0dXJl
cyA9IFdURjo6bW92ZShmdW5jU2lnbmF0dXJlcyk7Cit9CisKK3ZvaWQgTW9kdWxlUGFyc2VyOjpw
YXJzZUZ1bmN0aW9uUG9pbnRlclRhYmxlcygpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5j
UHRyVGFibGVzID0gbV9yZWFkZXIucmVhZFVuc2lnbmVkSW50MzIoKTsKKyAgICBWZWN0b3I8TW9k
dWxlOjpGdW5jUHRyVGFibGU+IGZ1bmNQdHJUYWJsZXMobnVtYmVyT2ZGdW5jUHRyVGFibGVzKTsK
KyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGdW5jUHRyVGFibGVzOyArK2kp
IHsKKyAgICAgICAgZnVuY1B0clRhYmxlc1tpXS5zaWduYXR1cmVJbmRleCA9IG1fcmVhZGVyLnJl
YWRVbnNpZ25lZEludDMyKCk7CisgICAgICAgIHVpbnQzMl90IG51bUVsZW1lbnRzID0gbV9yZWFk
ZXIucmVhZFVuc2lnbmVkSW50MzIoKTsKKyAgICAgICAgVmVjdG9yPHVpbnQzMl90PiBlbGVtZW50
cyhudW1FbGVtZW50cyk7CisgICAgICAgIGZvciAodWludDMyX3QgaiA9IDA7IGogPCBudW1FbGVt
ZW50czsgKytqKQorICAgICAgICAgICAgZWxlbWVudHNbal0gPSBtX3JlYWRlci5yZWFkVW5zaWdu
ZWRJbnQzMigpOworICAgICAgICBmdW5jUHRyVGFibGVzW2ldLmVsZW1lbnRzID0gV1RGOjptb3Zl
KGVsZW1lbnRzKTsKKyAgICB9CisKKyAgICBtX21vZHVsZS0+bV9mdW5jUHRyVGFibGVzID0gV1RG
Ojptb3ZlKGZ1bmNQdHJUYWJsZXMpOworfQorCit2b2lkIE1vZHVsZVBhcnNlcjo6cGFyc2VGdW5j
dGlvbkRlZmluaXRpb25TZWN0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbW9kdWxlLT5tX2Z1bmNTaWduYXR1
cmVzLnNpemUoKTsgKytpKQorICAgICAgICBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbih2bSwgZ2xv
YmFsT2JqZWN0LCBpKTsKK30KKwordm9pZCBNb2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0U2VjdGlv
bihWTSYgdm0pCit7CisgICAgc3dpdGNoIChtX3JlYWRlci5yZWFkRXhwb3J0Rm9ybWF0KCkpIHsK
KyAgICBjYXNlIEV4cG9ydEZvcm1hdDo6RGVmYXVsdDogeworICAgICAgICB1aW50MzJfdCBmdW5j
dGlvbkluZGV4ID0gbV9yZWFkZXIucmVhZFVuc2lnbmVkSW50MzIoKTsKKyAgICAgICAgSWRlbnRp
ZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJkZWZhdWx0Iik7
IC8vIFRPRE86IFVzZSBvdGhlciBuYW1lcworICAgICAgICBtX21vZHVsZS0+cHV0RGlyZWN0KHZt
LCBpZGVudGlmaWVyLCBtX21vZHVsZS0+bV9mdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0uZ2V0KCkp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBFeHBvcnRGb3JtYXQ6OlJlY29yZDog
eworICAgICAgICB1aW50MzJfdCBudW1iZXJPZkV4cG9ydHMgPSBtX3JlYWRlci5yZWFkVW5zaWdu
ZWRJbnQzMigpOworICAgICAgICBmb3IgKHVpbnQzMl90IGV4cG9ydEluZGV4ID0gMDsgZXhwb3J0
SW5kZXggPCBudW1iZXJPZkV4cG9ydHM7ICsrZXhwb3J0SW5kZXgpIHsKKyAgICAgICAgICAgIFN0
cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgICAgIHdoaWxlIChjaGFyIGMgPSBtX3JlYWRl
ci5yZWFkQ2hhcigpKQorICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGMpOworICAgICAg
ICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleCA9IG1fcmVhZGVyLnJlYWRVbnNpZ25lZEludDMy
KCk7CisgICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgYnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgICAgIG1fbW9kdWxlLT5w
dXREaXJlY3Qodm0sIGlkZW50aWZpZXIsIG1fbW9kdWxlLT5tX2Z1bmN0aW9uc1tmdW5jdGlvbklu
ZGV4XS5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1
bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2
b2lkIE1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb24oVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBzaXplX3QgZnVuY3Rpb25JbmRleCkKK3sKKyAgICBjb25z
dCB1aW50OF90KiBidWZmZXIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdGF0
aWNfY2FzdDxXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyKj4obV9tb2R1bGUtPm1fc291cmNlLnBy
b3ZpZGVyKCkpLT5kYXRhKCkuZGF0YSgpKTsKKyAgICB1bnNpZ25lZCBzdGFydE9mZnNldEluU291
cmNlID0gbV9yZWFkZXIuY3Vyc29yKCkgLSBidWZmZXI7IC8vIEZJWE1FOiBoYWNreQorCisgICAg
Y29uc3QgdWludDhfdCogZW5kQ3Vyc29yOworICAgIEZ1bmN0aW9uUGFyc2VyOjpjaGVja1N5bnRh
eEFuZENhbGN1bGF0ZVNvdXJjZVJhbmdlKG1fbW9kdWxlLCBmdW5jdGlvbkluZGV4LCBzdGFydE9m
ZnNldEluU291cmNlLCBlbmRDdXJzb3IpOworICAgIG1fcmVhZGVyLnNldEN1cnNvcihlbmRDdXJz
b3IpOyAvLyBGSVhNRTogaGFja3kKKworICAgIHVuc2lnbmVkIGVuZE9mZnNldEluU291cmNlID0g
ZW5kQ3Vyc29yIC0gYnVmZmVyOworCisgICAgU291cmNlQ29kZSBzb3VyY2UobV9tb2R1bGUtPm1f
c291cmNlLnByb3ZpZGVyKCksIHN0YXJ0T2Zmc2V0SW5Tb3VyY2UsIGVuZE9mZnNldEluU291cmNl
LCAxLCAxKTsKKworICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZSA9IFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoJnZtLCBz
dGFydE9mZnNldEluU291cmNlLCBlbmRPZmZzZXRJblNvdXJjZSAtIHN0YXJ0T2Zmc2V0SW5Tb3Vy
Y2UsIG1fbW9kdWxlLCBmdW5jdGlvbkluZGV4KTsKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1
bmN0aW9uRXhlY3V0YWJsZSA9IHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLT5saW5rKHZtLCBt
X21vZHVsZS0+bV9zb3VyY2UpOworCisgICAgSlNGdW5jdGlvbioganNGdW5jdGlvbiA9IEpTRnVu
Y3Rpb246OmNyZWF0ZSh2bSwgZnVuY3Rpb25FeGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpOworICAg
IG1fbW9kdWxlLT5tX2Z1bmN0aW9ucy5hcHBlbmQoV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+KHZt
LCBtX21vZHVsZSwganNGdW5jdGlvbikpOworfQorCitNb2R1bGUqIGNvbXBpbGUoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCit7CisgICAgTW9kdWxlUGFyc2VyIG1v
ZHVsZVBhcnNlcjsKKyAgICByZXR1cm4gbW9kdWxlUGFyc2VyLnBhcnNlKGV4ZWMtPnZtKCksIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc291cmNlKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OldBU00KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYzg1ZjRm
ODgxNDkxOWI4MDNmMmVlMGY0NzQ2MzVjYTljMGQ4NDU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5oCkBAIC0wLDAgKzEsNzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorIExp
Y2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5z
ZSIpOworIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0
aCB0aGUgTGljZW5zZS4KKyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQK
KworIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgVW5sZXNz
IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0
d2FyZQorIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFu
ICJBUyBJUyIgQkFTSVMsCisgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5Z
IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgU2VlIHRoZSBMaWNlbnNlIGZvciB0
aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIGxpbWl0YXRp
b25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKworI2lmbmRlZiBXQVNNTW9kdWxlUGFyc2VyX2gK
KyNkZWZpbmUgV0FTTU1vZHVsZVBhcnNlcl9oCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisK
KyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIldBU01Nb2R1bGUuaCIKKyNpbmNsdWRl
ICJXQVNNUmVhZGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgV0FTTSB7CisK
K2NsYXNzIE1vZHVsZVBhcnNlciB7CitwdWJsaWM6CisgICAgTW9kdWxlKiBwYXJzZShWTSYsIEpT
R2xvYmFsT2JqZWN0KiwgY29uc3QgU291cmNlQ29kZSYpOworCitwcml2YXRlOgorICAgIHZvaWQg
cGFyc2VDb25zdGFudFBvb2xTZWN0aW9uKCk7CisgICAgdm9pZCBwYXJzZVNpZ25hdHVyZVNlY3Rp
b24oKTsKKyAgICB2b2lkIHBhcnNlRnVuY3Rpb25JbXBvcnRTZWN0aW9uKCk7CisgICAgdm9pZCBw
YXJzZUdsb2JhbFNlY3Rpb24oKTsKKyAgICB2b2lkIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvblNl
Y3Rpb24oKTsKKyAgICB2b2lkIHBhcnNlRnVuY3Rpb25Qb2ludGVyVGFibGVzKCk7CisgICAgdm9p
ZCBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvblNlY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCopOwor
ICAgIHZvaWQgcGFyc2VFeHBvcnRTZWN0aW9uKFZNJik7CisKKyAgICB2b2lkIHBhcnNlRnVuY3Rp
b25EZWZpbml0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBzaXplX3QgZnVuY3Rpb25JbmRleCk7
CisKKyAgICBNb2R1bGUqIG1fbW9kdWxlOyAvLyBGSVhNRTogc2hvdWxkbid0IGJlIGEgc3RhdGUK
KyAgICBSZWFkZXIgbV9yZWFkZXI7Cit9OworCitKU19FWFBPUlRfUFJJVkFURSBNb2R1bGUqIGNv
bXBpbGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYpOworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V0FTTQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjZW5kaWYgLy8g
V0FTTU1vZHVsZVBhcnNlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNT3Bjb2Rlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU9wY29kZXMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jNTFhODViYTM3OTYwYTEyMmYxYzAzNzY3ZWExYjg3MDFhNWY0ZDA3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU9wY29kZXMu
aApAQCAtMCwwICsxLDM2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8qCisgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9u
IDIuMCAodGhlICJMaWNlbnNlIik7CisgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQg
aW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIFlvdSBtYXkgb2J0YWluIGEgY29weSBv
ZiB0aGUgTGljZW5zZSBhdAorCisgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VO
U0UtMi4wCisKKyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRv
IGluIHdyaXRpbmcsIHNvZnR3YXJlCisgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMg
ZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyBXSVRIT1VUIFdBUlJBTlRJRVMgT1Ig
Q09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyBTZWUg
dGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lv
bnMgYW5kCisgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworCisjaWZuZGVmIFdB
U01PcGNvZGVzX2gKKyNkZWZpbmUgV0FTTU9wY29kZXNfaAorCisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworbmFt
ZXNwYWNlIFdBU00geworCitzdGF0aWMgY29uc3QgdWludDMyX3QgbWFnaWNOdW1iZXIgPSAweDZk
NzM2MTc3OworCitlbnVtIGNsYXNzIE9wU3RhdGVtZW50IDogdWludDhfdCB7CisgICAgU2V0TG9j
LAorICAgIFNldEdsbywKKyAgICBJMzJTdG9yZTgsCisgICAgSTMyU3RvcmVPZmY4LAorICAgIEkz
MlN0b3JlMTYsCisgICAgSTMyU3RvcmVPZmYxNiwKKyAgICBJMzJTdG9yZTMyLAorICAgIEkzMlN0
b3JlT2ZmMzIsCisgICAgRjMyU3RvcmUsCisgICAgRjMyU3RvcmVPZmYsCisgICAgRjY0U3RvcmUs
CisgICAgRjY0U3RvcmVPZmYsCisgICAgQ2FsbEludCwKKyAgICBDYWxsSW5kLAorICAgIENhbGxJ
bXAsCisgICAgUmV0LAorICAgIEJsb2NrLAorICAgIElmVGhlbiwKKyAgICBJZkVsc2UsCisgICAg
V2hpbGUsCisgICAgRG8sCisgICAgTGFiZWwsCisgICAgQnJlYWssCisgICAgQnJlYWtMYWJlbCwK
KyAgICBDb250aW51ZSwKKyAgICBDb250aW51ZUxhYmVsLAorICAgIFN3aXRjaCwKKworICAgIEJh
ZAorfTsKKworZW51bSBjbGFzcyBPcFN0YXRlbWVudFdpdGhJbW1lZGlhdGUgOiB1aW50OF90IHsK
KyAgICBTZXRMb2MsCisgICAgU2V0R2xvLAorICAgIFJlc2V2ZWQxLAorICAgIFJlc2V2ZWQyLAor
CisgICAgQmFkCit9OworCitlbnVtIGNsYXNzIFN3aXRjaENhc2UgOiB1aW50OF90IHsKKyAgICBD
YXNlMCwKKyAgICBDYXNlMSwKKyAgICBDYXNlTiwKKyAgICBEZWZhdWx0MCwKKyAgICBEZWZhdWx0
MSwKKyAgICBEZWZhdWx0TgorfTsKKworZW51bSBjbGFzcyBPcEkzMiA6IHVpbnQ4X3QgeworICAg
IExpdFBvb2wsCisgICAgTGl0SW1tLAorICAgIEdldExvYywKKyAgICBHZXRHbG8sCisgICAgU2V0
TG9jLAorICAgIFNldEdsbywKKyAgICBTTG9hZDgsCisgICAgU0xvYWRPZmY4LAorICAgIFVMb2Fk
OCwKKyAgICBVTG9hZE9mZjgsCisgICAgU0xvYWQxNiwKKyAgICBTTG9hZE9mZjE2LAorICAgIFVM
b2FkMTYsCisgICAgVUxvYWRPZmYxNiwKKyAgICBMb2FkMzIsCisgICAgTG9hZE9mZjMyLAorICAg
IFN0b3JlOCwKKyAgICBTdG9yZU9mZjgsCisgICAgU3RvcmUxNiwKKyAgICBTdG9yZU9mZjE2LAor
ICAgIFN0b3JlMzIsCisgICAgU3RvcmVPZmYzMiwKKyAgICBDYWxsSW50LAorICAgIENhbGxJbmQs
CisgICAgQ2FsbEltcCwKKyAgICBDb25kLAorICAgIENvbW1hLAorICAgIEZyb21GMzIsCisgICAg
RnJvbUY2NCwKKyAgICBOZWcsCisgICAgQWRkLAorICAgIFN1YiwKKyAgICBNdWwsCisgICAgU0Rp
diwKKyAgICBVRGl2LAorICAgIFNNb2QsCisgICAgVU1vZCwKKyAgICBCaXROb3QsCisgICAgQml0
T3IsCisgICAgQml0QW5kLAorICAgIEJpdFhvciwKKyAgICBMc2gsCisgICAgQXJpdGhSc2gsCisg
ICAgTG9naWNSc2gsCisgICAgQ2x6LAorICAgIExvZ2ljTm90LAorICAgIEVxSTMyLAorICAgIEVx
RjMyLAorICAgIEVxRjY0LAorICAgIE5FcUkzMiwKKyAgICBORXFGMzIsCisgICAgTkVxRjY0LAor
ICAgIFNMZVRoSTMyLAorICAgIFVMZVRoSTMyLAorICAgIExlVGhGMzIsCisgICAgTGVUaEY2NCwK
KyAgICBTTGVFcUkzMiwKKyAgICBVTGVFcUkzMiwKKyAgICBMZUVxRjMyLAorICAgIExlRXFGNjQs
CisgICAgU0dyVGhJMzIsCisgICAgVUdyVGhJMzIsCisgICAgR3JUaEYzMiwKKyAgICBHclRoRjY0
LAorICAgIFNHckVxSTMyLAorICAgIFVHckVxSTMyLAorICAgIEdyRXFGMzIsCisgICAgR3JFcUY2
NCwKKyAgICBTTWluLAorICAgIFVNaW4sCisgICAgU01heCwKKyAgICBVTWF4LAorICAgIEFicywK
KworICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBPcEkzMldpdGhJbW1lZGlhdGUgOiB1aW50OF90
IHsKKyAgICBMaXRQb29sLAorICAgIExpdEltbSwKKyAgICBHZXRMb2MsCisgICAgUmVzZXJ2ZWQs
CisKKyAgICBCYWQKK307CisKK2VudW0gY2xhc3MgT3BGMzIgOiB1aW50OF90IHsKKyAgICBMaXRQ
b29sLAorICAgIExpdEltbSwKKyAgICBHZXRMb2MsCisgICAgR2V0R2xvLAorICAgIFNldExvYywK
KyAgICBTZXRHbG8sCisgICAgTG9hZCwKKyAgICBMb2FkT2ZmLAorICAgIFN0b3JlLAorICAgIFN0
b3JlT2ZmLAorICAgIENhbGxJbnQsCisgICAgQ2FsbEluZCwKKyAgICBDb25kLAorICAgIENvbW1h
LAorICAgIEZyb21TMzIsCisgICAgRnJvbVUzMiwKKyAgICBGcm9tRjY0LAorICAgIE5lZywKKyAg
ICBBZGQsCisgICAgU3ViLAorICAgIE11bCwKKyAgICBEaXYsCisgICAgQWJzLAorICAgIENlaWws
CisgICAgRmxvb3IsCisgICAgU3FydCwKKworICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBPcEYz
MldpdGhJbW1lZGlhdGUgOiB1aW50OF90IHsKKyAgICBMaXRQb29sLAorICAgIEdldExvYywKKyAg
ICBSZXNlcnZlZDAsCisgICAgUmVzZXJ2ZWQxLAorCisgICAgQmFkCit9OworCitlbnVtIGNsYXNz
IE9wRjY0IDogdWludDhfdCB7CisgICAgTGl0UG9vbCwKKyAgICBMaXRJbW0sCisgICAgR2V0TG9j
LAorICAgIEdldEdsbywKKyAgICBTZXRMb2MsCisgICAgU2V0R2xvLAorICAgIExvYWQsCisgICAg
TG9hZE9mZiwKKyAgICBTdG9yZSwKKyAgICBTdG9yZU9mZiwKKyAgICBDYWxsSW50LAorICAgIENh
bGxJbmQsCisgICAgQ2FsbEltcCwKKyAgICBDb25kLAorICAgIENvbW1hLAorICAgIEZyb21TMzIs
CisgICAgRnJvbVUzMiwKKyAgICBGcm9tRjMyLAorICAgIE5lZywKKyAgICBBZGQsCisgICAgU3Vi
LAorICAgIE11bCwKKyAgICBEaXYsCisgICAgTW9kLAorICAgIE1pbiwKKyAgICBNYXgsCisgICAg
QWJzLAorICAgIENlaWwsCisgICAgRmxvb3IsCisgICAgU3FydCwKKyAgICBDb3MsCisgICAgU2lu
LAorICAgIFRhbiwKKyAgICBBQ29zLAorICAgIEFTaW4sCisgICAgQVRhbiwKKyAgICBBVGFuMiwK
KyAgICBFeHAsCisgICAgTG4sCisgICAgUG93LAorCisgICAgQmFkCit9OworCitlbnVtIGNsYXNz
IE9wRjY0V2l0aEltbWVkaWF0ZSA6IHVpbnQ4X3QgeworICAgIExpdFBvb2wsCisgICAgR2V0TG9j
LAorICAgIFJlc2VydmVkMCwKKyAgICBSZXNlcnZlZDEsCisKKyAgICBCYWQKK307CisKK2VudW0g
Y2xhc3MgT3BWb2lkIDogdWludDhfdCB7CisgICAgQ2FsbEludCwKKyAgICBDYWxsSW5kLAorICAg
IENhbGxJbXAsCisKKyAgICBCYWQKK307CisKK2VudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3Qgewor
ICAgIEkzMiwKKyAgICBGMzIsCisgICAgRjY0Cit9OworCitlbnVtIGNsYXNzIFZhclR5cGVzIDog
dWludDhfdCB7CisgICAgSTMyID0gMHgxLAorICAgIEYzMiA9IDB4MiwKKyAgICBGNjQgPSAweDQs
Cit9OworCitpbmxpbmUgVmFyVHlwZXMgb3BlcmF0b3J8IChWYXJUeXBlcyBsaHMsIFZhclR5cGVz
IHJocykgeyByZXR1cm4gVmFyVHlwZXModWludDhfdChsaHMpIHwgdWludDhfdChyaHMpKTsgfQor
aW5saW5lIGJvb2wgb3BlcmF0b3ImKFZhclR5cGVzIGxocywgVmFyVHlwZXMgcmhzKSB7IHJldHVy
biBib29sKHVpbnQ4X3QobGhzKSAmIHVpbnQ4X3QocmhzKSk7IH0KKworZW51bSBjbGFzcyBWYXJU
eXBlc1dpdGhJbW1lZGlhdGUgOiB1aW50OF90IHsKKyAgICBPbmx5STMyLAorICAgIFJlc2VydmVk
MCwKKyAgICBSZXNlcnZlZDEsCisgICAgUmVzZXJ2ZWQyCit9OworCitlbnVtIGNsYXNzIFJldHVy
blR5cGUgOiB1aW50OF90IHsKKyAgICBJMzIgPSB1aW50OF90KFR5cGU6OkkzMiksCisgICAgRjMy
ID0gdWludDhfdChUeXBlOjpGMzIpLAorICAgIEY2NCA9IHVpbnQ4X3QoVHlwZTo6RjY0KSwKKyAg
ICBWb2lkCit9OworCitzdGF0aWMgY29uc3QgdWludDhfdCBoYXNJbW1lZGlhdGVGbGFnID0gMHg4
MDsKK3N0YXRpY19hc3NlcnQodWludDhfdChPcEkzMjo6QmFkKSA8PSBoYXNJbW1lZGlhdGVGbGFn
LCAiTVNCIHJlc2VydmVkIHRvIGRpc3Rpbmd1aXNoIE9wSTMyIGZyb20gT3BJMzJXaXRoSW1tZWRp
YXRlIik7CitzdGF0aWNfYXNzZXJ0KHVpbnQ4X3QoT3BGMzI6OkJhZCkgPD0gaGFzSW1tZWRpYXRl
RmxhZywgIk1TQiByZXNlcnZlZCB0byBkaXN0aW5ndWlzaCBPcEYzMiBmcm9tIE9wRjMyV2l0aElt
bWVkaWF0ZSIpOworc3RhdGljX2Fzc2VydCh1aW50OF90KE9wRjY0OjpCYWQpIDw9IGhhc0ltbWVk
aWF0ZUZsYWcsICJNU0IgcmVzZXJ2ZWQgdG8gZGlzdGluZ3Vpc2ggT3BGNjQgZnJvbSBPcEY2NFdp
dGhJbW1lZGlhdGUiKTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIG9wV2l0aEltbWVkaWF0ZUJp
dHMgPSAyOworc3RhdGljIGNvbnN0IHVpbnQzMl90IG9wV2l0aEltbWVkaWF0ZUxpbWl0ID0gMSA8
PCBvcFdpdGhJbW1lZGlhdGVCaXRzOworc3RhdGljX2Fzc2VydCh1aW50OF90KE9wSTMyV2l0aElt
bWVkaWF0ZTo6QmFkKSA8PSBvcFdpdGhJbW1lZGlhdGVMaW1pdCwgIk9wSTMyV2l0aEltbWVkaWF0
ZSBvcCBmaXRzIik7CitzdGF0aWNfYXNzZXJ0KHVpbnQ4X3QoT3BGMzJXaXRoSW1tZWRpYXRlOjpC
YWQpIDw9IG9wV2l0aEltbWVkaWF0ZUxpbWl0LCAiT3BGMzJXaXRoSW1tZWRpYXRlIG9wIGZpdHMi
KTsKK3N0YXRpY19hc3NlcnQodWludDhfdChPcEY2NFdpdGhJbW1lZGlhdGU6OkJhZCkgPD0gb3BX
aXRoSW1tZWRpYXRlTGltaXQsICJPcEY2NFdpdGhJbW1lZGlhdGUgb3AgZml0cyIpOworCitzdGF0
aWMgY29uc3QgdW5zaWduZWQgaW1tZWRpYXRlQml0cyA9IDU7CitzdGF0aWMgY29uc3QgdWludDMy
X3QgaW1tZWRpYXRlTGltaXQgPSAxIDw8IGltbWVkaWF0ZUJpdHM7CitzdGF0aWNfYXNzZXJ0KCgx
ICsgb3BXaXRoSW1tZWRpYXRlQml0cyArIGltbWVkaWF0ZUJpdHMpID09IDgsICJCaXRzIG9mIGlt
bWVkaWF0ZSBvcCBzaG91bGQgYWRkIHVwIHRvIGEgYnl0ZSIpOworCit0ZW1wbGF0ZSA8Y2xhc3Mg
VFdpdGhJbW1lZGlhdGU+CitzdGF0aWMgaW5saW5lIHZvaWQgdW5wYWNrT3BXaXRoSW1tZWRpYXRl
KHVpbnQ4X3QgYnl0ZSwgVFdpdGhJbW1lZGlhdGUqIG9wLCB1aW50OF90ICppbW1lZGlhdGUpCit7
CisgICAgQVNTRVJUKGJ5dGUgJiBoYXNJbW1lZGlhdGVGbGFnKTsKKyAgICAqb3AgPSBUV2l0aElt
bWVkaWF0ZSgoYnl0ZSA+PiBpbW1lZGlhdGVCaXRzKSAmIChvcFdpdGhJbW1lZGlhdGVMaW1pdCAt
IDEpKTsKKyAgICAqaW1tZWRpYXRlID0gYnl0ZSAmIChpbW1lZGlhdGVMaW1pdCAtIDEpOworfQor
CitlbnVtIGNsYXNzIEV4cG9ydEZvcm1hdCA6IHVpbnQ4X3QgeworICAgIERlZmF1bHQsCisgICAg
UmVjb3JkCit9OworCitzdHJ1Y3QgU2lnbmF0dXJlIHsKKyAgICBSZXR1cm5UeXBlIHJldHVyblR5
cGU7CisgICAgVmVjdG9yPFR5cGU+IGFyZ3VtZW50czsKKworICAgIFNpZ25hdHVyZSgpIHsgfQor
ICAgIFNpZ25hdHVyZShSZXR1cm5UeXBlIHJldHVyblR5cGUpCisgICAgICAgIDogcmV0dXJuVHlw
ZShyZXR1cm5UeXBlKSB7IH0KKyAgICBTaWduYXR1cmUoUmV0dXJuVHlwZSByZXR1cm5UeXBlLCB1
aW50MzJfdCBhcmd1bWVudENvdW50KQorICAgICAgICA6IHJldHVyblR5cGUocmV0dXJuVHlwZSkK
KyAgICAgICAgLCBhcmd1bWVudHMoYXJndW1lbnRDb3VudCkgeyB9CisgICAgU2lnbmF0dXJlKFJl
dHVyblR5cGUgcmV0dXJuVHlwZSwgVmVjdG9yPFR5cGU+JiYgYXJndW1lbnRzKQorICAgICAgICA6
IHJldHVyblR5cGUocmV0dXJuVHlwZSkKKyAgICAgICAgLCBhcmd1bWVudHMoV1RGOjptb3ZlKGFy
Z3VtZW50cykpIHsgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OldBU00KKworI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2VuZGlmIC8vIFdBU01PcGNvZGVzX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01SZWFkZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dBU01SZWFkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMTRiNjU0ZTkxNzgz
YzgyZjhiOWRhNTExZjcwOWVlMThiZTY2YTJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV0FTTVJlYWRlci5oCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyBMaWNlbnNlZCB1bmRl
ciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyB5b3Ug
bWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vu
c2UuCisgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyBodHRwOi8v
d3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworIFVubGVzcyByZXF1aXJlZCBi
eSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyBkaXN0
cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJB
U0lTLAorIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRo
ZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmlj
IGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyBsaW1pdGF0aW9ucyB1bmRlciB0
aGUgTGljZW5zZS4KKyovCisKKyNpZm5kZWYgV0FTTVJlYWRlcl9oCisjZGVmaW5lIFdBU01SZWFk
ZXJfaAorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiV0FTTU9wY29kZXMu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXQVNNIHsKKworY2xhc3MgUmVhZGVy
IHsKK3B1YmxpYzoKKyAgICBSZWFkZXIoKSB7IH0KKyAgICBSZWFkZXIoY29uc3QgdWludDhfdCog
YmVnaW4pCisgICAgICAgIDogbV9jdXJzb3IoYmVnaW4pCisgICAgeworICAgIH0KKworICAgIGNv
bnN0IHVpbnQ4X3QqIGN1cnNvcigpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29yOyB9CisgICAgdm9p
ZCBzZXRDdXJzb3IoY29uc3QgdWludDhfdCogY3Vyc29yKSB7IG1fY3Vyc29yID0gY3Vyc29yOyB9
CisgICAgdWludDMyX3QgcmVhZEZpeGVkV2lkdGhVbnNpZ25lZEludDMyKCk7CisgICAgZmxvYXQg
cmVhZEZsb2F0KCk7CisgICAgZG91YmxlIHJlYWREb3VibGUoKTsKKyAgICBTd2l0Y2hDYXNlIHJl
YWRTd2l0Y2hDYXNlKCkgeyByZXR1cm4gcmVhZEJ5dGU8U3dpdGNoQ2FzZT4oKTsgfQorICAgIHRl
bXBsYXRlPGNsYXNzIFQsIGNsYXNzIFRXaXRoSW1tZWRpYXRlPiBpbmxpbmUgYm9vbCByZWFkQ29k
ZShUKiwgVFdpdGhJbW1lZGlhdGUqLCB1aW50OF90KiBpbW1lZGlhdGUpOworICAgIE9wVm9pZCBy
ZWFkT3BWb2lkKCkgeyByZXR1cm4gcmVhZEJ5dGU8T3BWb2lkPigpOyB9CisgICAgRXhwb3J0Rm9y
bWF0IHJlYWRFeHBvcnRGb3JtYXQoKSB7IHJldHVybiByZWFkQnl0ZTxFeHBvcnRGb3JtYXQ+KCk7
IH0KKyAgICBUeXBlIHJlYWRUeXBlKCkgeyByZXR1cm4gcmVhZEJ5dGU8VHlwZT4oKTsgfQorICAg
IFJldHVyblR5cGUgcmVhZFJldHVyblR5cGUoKSB7IHJldHVybiByZWFkQnl0ZTxSZXR1cm5UeXBl
PigpOyB9CisgICAgaW5saW5lIHVpbnQzMl90IHJlYWRVbnNpZ25lZEludDMyKCk7CisgICAgaW5s
aW5lIGludDMyX3QgcmVhZEludDMyKCk7CisgICAgY2hhciByZWFkQ2hhcigpIHsgcmV0dXJuICpt
X2N1cnNvcisrOyB9CisKKyAgICBpbmxpbmUgYm9vbCBpZkkzMkxpdGVyYWwoY29uc3QgVmVjdG9y
PHVpbnQzMl90PiYgaTMycywgdWludDMyX3QqKTsKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8
Y2xhc3MgVD4gVCByZWFkQnl0ZSgpIHsgcmV0dXJuIFQoKm1fY3Vyc29yKyspOyB9CisKKyAgICBj
b25zdCB1aW50OF90KiBtX2N1cnNvcjsKK307CisKK2lubGluZSB1aW50MzJfdCBSZWFkZXI6OnJl
YWRGaXhlZFdpZHRoVW5zaWduZWRJbnQzMigpCit7CisgICAgdWludDMyX3QgdTMyID0gbV9jdXJz
b3JbMF0gfCBtX2N1cnNvclsxXSA8PCA4IHwgbV9jdXJzb3JbMl0gPDwgMTYgfCBtX2N1cnNvclsz
XSA8PCAyNDsKKyAgICBtX2N1cnNvciArPSA0OworICAgIHJldHVybiB1MzI7Cit9CisKK2lubGlu
ZSBmbG9hdCBSZWFkZXI6OnJlYWRGbG9hdCgpCit7CisgICAgdW5pb24geworICAgICAgICB1aW50
OF90IGJ5dGVzWzRdOworICAgICAgICBmbG9hdCBmOworICAgIH0gdSA9IHsgeyBtX2N1cnNvclsw
XSwgbV9jdXJzb3JbMV0sIG1fY3Vyc29yWzJdLCBtX2N1cnNvclszXSB9IH07CisgICAgbV9jdXJz
b3IgKz0gNDsKKyAgICByZXR1cm4gdS5mOworfQorCitpbmxpbmUgZG91YmxlIFJlYWRlcjo6cmVh
ZERvdWJsZSgpCit7CisgICAgdW5pb24geworICAgICAgICB1aW50OF90IGJ5dGVzWzhdOworICAg
ICAgICBkb3VibGUgZDsKKyAgICB9IHUgPSB7IHsgbV9jdXJzb3JbMF0sIG1fY3Vyc29yWzFdLCBt
X2N1cnNvclsyXSwgbV9jdXJzb3JbM10sIG1fY3Vyc29yWzRdLCBtX2N1cnNvcls1XSwgbV9jdXJz
b3JbNl0sIG1fY3Vyc29yWzddIH0gfTsKKyAgICBtX2N1cnNvciArPSA4OworICAgIHJldHVybiB1
LmQ7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUV2l0aEltbWVkaWF0ZT4KK2Jvb2wg
UmVhZGVyOjpyZWFkQ29kZShUKiB0LCBUV2l0aEltbWVkaWF0ZSogdFdpdGhJbW1lZGlhdGUsIHVp
bnQ4X3QqIGltbWVkaWF0ZSkKK3sKKyAgICB1aW50OF90IGJ5dGUgPSAqbV9jdXJzb3IrKzsKKyAg
ICBpZiAoIShieXRlICYgaGFzSW1tZWRpYXRlRmxhZykpIHsKKyAgICAgICAgKnQgPSBUKGJ5dGUp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB1bnBhY2tPcFdpdGhJbW1lZGlh
dGUoYnl0ZSwgdFdpdGhJbW1lZGlhdGUsIGltbWVkaWF0ZSk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitpbmxpbmUgdWludDMyX3QgUmVhZGVyOjpyZWFkVW5zaWduZWRJbnQzMigpCit7CisgICAg
dWludDMyX3QgdTMyID0gKm1fY3Vyc29yKys7CisgICAgaWYgKHUzMiA8IDB4ODApCisgICAgICAg
IHJldHVybiB1MzI7CisKKyAgICB1MzIgJj0gMHg3ZjsKKworICAgIGZvciAodW5zaWduZWQgc2hp
ZnQgPSA3OyB0cnVlOyBzaGlmdCArPSA3KSB7CisgICAgICAgIHVpbnQzMl90IGIgPSAqbV9jdXJz
b3IrKzsKKyAgICAgICAgaWYgKGIgPCAweDgwKQorICAgICAgICAgICAgcmV0dXJuIHUzMiB8IChi
IDw8IHNoaWZ0KTsKKyAgICAgICAgdTMyIHw9IChiICYgMHg3ZikgPDwgc2hpZnQ7CisgICAgfQor
fQorCitpbmxpbmUgaW50MzJfdCBSZWFkZXI6OnJlYWRJbnQzMigpCit7CisgICAgdWludDMyX3Qg
dTMyID0gKm1fY3Vyc29yKys7CisgICAgaWYgKHUzMiA8IDB4ODApCisgICAgICAgIHJldHVybiBp
bnQzMl90KHUzMikgPDwgKDMyLTcpID4+ICgzMi03KTsKKworICAgIHUzMiAmPSAweDdmOworCisg
ICAgZm9yICh1bnNpZ25lZCBzaGlmdCA9IDc7IHRydWU7IHNoaWZ0ICs9IDcpIHsKKyAgICAgICAg
dWludDMyX3QgYiA9ICptX2N1cnNvcisrOworICAgICAgICBpZiAoYiA8IDB4ODApIHsKKyAgICAg
ICAgICAgIHUzMiB8PSBiIDw8IHNoaWZ0OworICAgICAgICAgICAgaW50IHNpZ25FeHRlbmQgPSAo
MzItNykgLSBzaGlmdDsKKyAgICAgICAgICAgIGlmIChzaWduRXh0ZW5kID4gMCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gaW50MzJfdCh1MzIpIDw8IHNpZ25FeHRlbmQgPj4gc2lnbkV4dGVuZDsK
KyAgICAgICAgICAgIHJldHVybiBpbnQzMl90KHUzMik7CisgICAgICAgIH0KKyAgICAgICAgdTMy
IHw9IChiICYgMHg3ZikgPDwgc2hpZnQ7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBSZWFkZXI6
OmlmSTMyTGl0ZXJhbChjb25zdCBWZWN0b3I8dWludDMyX3Q+JiBpMzJzLCB1aW50MzJfdCogdTMy
KQoreworICAgIHVpbnQ4X3QgYnl0ZSA9ICptX2N1cnNvcjsKKworICAgIGlmIChieXRlICYgaGFz
SW1tZWRpYXRlRmxhZykgeworICAgICAgICBPcEkzMldpdGhJbW1lZGlhdGUgaTMyV2l0aEltbWVk
aWF0ZTsKKyAgICAgICAgdWludDhfdCBpbW1lZGlhdGU7CisgICAgICAgIHVucGFja09wV2l0aElt
bWVkaWF0ZShieXRlLCAmaTMyV2l0aEltbWVkaWF0ZSwgJmltbWVkaWF0ZSk7CisKKyAgICAgICAg
aWYgKGkzMldpdGhJbW1lZGlhdGUgPT0gT3BJMzJXaXRoSW1tZWRpYXRlOjpMaXRJbW0pIHsKKyAg
ICAgICAgICAgIG1fY3Vyc29yKys7CisgICAgICAgICAgICAqdTMyID0gaW1tZWRpYXRlOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaTMyV2l0aElt
bWVkaWF0ZSA9PSBPcEkzMldpdGhJbW1lZGlhdGU6OkxpdFBvb2wpIHsKKyAgICAgICAgICAgIG1f
Y3Vyc29yKys7CisgICAgICAgICAgICAqdTMyID0gaTMyc1tpbW1lZGlhdGVdOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKE9wSTMyKGJ5dGUpID09IE9wSTMyOjpMaXRJbW0pIHsKKyAgICAgICAgbV9j
dXJzb3IrKzsKKyAgICAgICAgKnUzMiA9IHJlYWRVbnNpZ25lZEludDMyKCk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChPcEkzMihieXRlKSA9PSBPcEkzMjo6TGl0UG9v
bCkgeworICAgICAgICBtX2N1cnNvcisrOworICAgICAgICAqdTMyID0gaTMyc1tyZWFkVW5zaWdu
ZWRJbnQzMigpXTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OldBU00KKworI2VuZGlmIC8vIEVOQUJM
RShXRUJBU1NFTUJMWSkKKworI2VuZGlmIC8vIFdBU01SZWFkZXJfaApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVN5bnRheENoZWNrZXIuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dBU01TeW50YXhDaGVja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTRhMWU1OTNj
NjNlODMyNmE3NDFmZGMyOTFjZTRhMGM5NmJlNTE4ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01TeW50YXhDaGVja2VyLmgKQEAgLTAsMCArMSwxMjMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFdBU01TeW50YXhDaGVja2VyX2gKKyNkZWZpbmUgV0FTTVN5bnRheENoZWNrZXJfaAorCisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBXQVNNIHsKKworY2xhc3MgU3ludGF4Q2hlY2tlciB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBpbnQgRXhwcmVzc2lvbjsKKyAgICB0eXBlZGVmIGludCBT
dGF0ZW1lbnQ7CisgICAgdHlwZWRlZiBpbnQgSnVtcDsKKworICAgIFN5bnRheENoZWNrZXIoKQor
ICAgICAgICA6IG1fc3AoMCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBzdGFydEZ1bmN0aW9u
KCkgeyB9CisgICAgdm9pZCBlbmRGdW5jdGlvbigpIHsgQVNTRVJUKCFtX3NwKTsgfQorICAgIHZv
aWQgc2V0TG9jYWxUeXBlcyhjb25zdCBWZWN0b3I8VHlwZT4mKSB7IH0KKyAgICB2b2lkIHVuYm94
QXJndW1lbnQoc2l6ZV90KSB7IH0KKyAgICB2b2lkIHNldExvY2FsWmVyb0kzMihzaXplX3QpIHsg
fQorCisgICAgaW50IGFkZEkzMihpbnQsIGludCkKKyAgICB7CisgICAgICAgIG1fc3AtLTsKKyAg
ICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgaW50IG11bEkzMihpbnQsIGludCkKKyAgICB7
CisgICAgICAgIG1fc3AtLTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgaW50IHJl
Z0kzMih1aW50MzJfdCkKKyAgICB7CisgICAgICAgIG1fc3ArKzsKKyAgICAgICAgcmV0dXJuIDE7
CisgICAgfQorCisgICAgaW50IHJlZ0Y2NChkb3VibGUpCisgICAgeworICAgICAgICBtX3NwKys7
CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHZvaWQgc2V0TG9jYWwoaW50LCB1aW50
MzJfdCkKKyAgICB7CisgICAgICAgIG1fc3AtLTsKKyAgICB9CisKKyAgICBpbnQgZ2V0TG9jYWxJ
MzIodWludDMyX3QpCisgICAgeworICAgICAgICBtX3NwKys7CisgICAgICAgIHJldHVybiAxOwor
ICAgIH0KKworICAgIGludCBjYWxsSW50ZXJuYWwodWludDMyX3QsIGNvbnN0IFZlY3RvcjxUeXBl
PiYgYXJndW1lbnRzLCBjb25zdCBWZWN0b3I8aW50PiYsIFJldHVyblR5cGUpCisgICAgeworICAg
ICAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9IGFyZ3VtZW50cy5zaXplKCk7CisgICAgICAgIG1f
c3AgLT0gYXJndW1lbnRDb3VudDsKKyAgICAgICAgbV9zcCsrOworICAgICAgICByZXR1cm4gMTsK
KyAgICB9CisKKyAgICB2b2lkIHJldHVybkkzMihpbnQpCisgICAgeworICAgICAgICBtX3NwLS07
CisgICAgfQorCisgICAgSnVtcCBlbWl0SnVtcCgpCisgICAgeworICAgICAgICByZXR1cm4gMTsK
KyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3RJMzIoTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENv
bmRpdGlvbiwgaW50KQorICAgIHsKKyAgICAgICAgbV9zcC0tOworICAgICAgICByZXR1cm4gMTsK
KyAgICB9CisKKyAgICB2b2lkIGxpbmtKdW1wKEp1bXApIHsgfQorCitwcml2YXRlOgorICAgIGlu
dCBtX3NwOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OldBU00KKworI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKKworI2VuZGlmIC8vIFdBU01TeW50YXhDaGVja2VyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258273</attachid>
            <date>2015-08-05 04:45:10 -0700</date>
            <delta_ts>2015-09-21 16:08:23 -0700</delta_ts>
            <desc>Work in progress. Implement almost every instruction. Should be able to run any WASM files generated by Emscripten and pack-asmjs.</desc>
            <filename>bug-146064-20150805044501.patch</filename>
            <type>text/plain</type>
            <size>225094</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg3OTM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
MzllNTViYTc1MTg0NTIwNDA5MjVmODQ5N2Y2MDI4MzFhYzhiOGExLi5hNmZjNTI0ZjliZWI0NDFh
YTY2Mjc3YzkyMDAwNjFjOTc4NTdkNmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMjYgQEAKKzIwMTUtMDgtMDUgIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0Bn
bWFpbC5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBuYXRpdmVseSBzdXBwb3J0IFdlYkFzc2Vt
Ymx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYw
NjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFQ
SS9KU1NjcmlwdFJlZi5jcHA6CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3Nl
bWJsZXIvWDg2QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6ZGl2bF9y
KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OnNvdXJjZUNvZGVGb3JUb29scyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29k
ZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6CisgICAg
ICAgIChKU0M6OmdlbmVyYXRlRnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUpOgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbik6Cisg
ICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAgKiBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjph
dHRlbXB0VG9JbmxpbmVDYWxsKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja1Zpc2l0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OnJlYWROb25JbmxpbmVkRnJhbWUpOgor
ICAgICAgICAqIGppdC9KSVREaXNhc3NlbWJsZXIuY3BwOgorICAgICAgICAoSlNDOjpKSVREaXNh
c3NlbWJsZXI6OmR1bXApOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChHbG9iYWxPYmpl
Y3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKGZ1bmN0aW9uTG9hZFdlYkFzc2VtYmx5KToK
KyAgICAgICAgKiBwYXJzZXIvU291cmNlQ29kZS5jcHA6CisgICAgICAgIChKU0M6OlNvdXJjZUNv
ZGU6OnRvVVRGOCk6CisgICAgICAgICogcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmg6CisgICAgICAg
ICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUJhc2U6
OmlzV2ViQXNzZW1ibHlGdW5jdGlvbik6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6
Om5ld0NvZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OnByZXBh
cmVGb3JFeGVjdXRpb25JbXBsKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAg
ICAgICAgKEpTQzo6RXhlY3V0YWJsZUJhc2U6OmlzRXZhbEV4ZWN1dGFibGUpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQmFzZTo6aXNGdW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAoSlND
OjpFeGVjdXRhYmxlQmFzZTo6aXNQcm9ncmFtRXhlY3V0YWJsZSk6CisgICAgICAgICogd2FzbS9K
U1dBU01Nb2R1bGUuY3BwOgorICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6OkpTV0FTTU1vZHVs
ZSk6CisgICAgICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6ZnVuY3Rpb24pOgorICAgICAgICAoSlND
OjpKU1dBU01Nb2R1bGU6OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6OnZp
c2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHdhc20vSlNXQVNNTW9kdWxlLmg6CisgICAgICAgIChK
U0M6OkpTV0FTTU1vZHVsZTo6R2xvYmFsRGF0YTo6R2xvYmFsRGF0YSk6CisgICAgICAgIChKU0M6
OkpTV0FTTU1vZHVsZTo6R2xvYmFsRGF0YTo6fkdsb2JhbERhdGEpOgorICAgICAgICAoSlNDOjpK
U1dBU01Nb2R1bGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6aTMyQ29u
c3RhbnRzKToKKyAgICAgICAgKEpTQzo6SlNXQVNNTW9kdWxlOjpmMzJDb25zdGFudHMpOgorICAg
ICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6OmY2NENvbnN0YW50cyk6CisgICAgICAgIChKU0M6OkpT
V0FTTU1vZHVsZTo6c2lnbmF0dXJlcyk6CisgICAgICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6ZnVu
Y3Rpb25JbXBvcnRzKToKKyAgICAgICAgKEpTQzo6SlNXQVNNTW9kdWxlOjpmdW5jdGlvbkltcG9y
dFNpZ25hdHVyZXMpOgorICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6Omdsb2JhbFZhcmlhYmxl
VHlwZXMpOgorICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6Omdsb2JhbERhdGEpOgorICAgICAg
ICAoSlNDOjpKU1dBU01Nb2R1bGU6Omdsb2JhbFZhcmlhYmxlQWRkcmVzc2VzKToKKyAgICAgICAg
KEpTQzo6SlNXQVNNTW9kdWxlOjpmdW5jdGlvbkRlY2xhcmF0aW9ucyk6CisgICAgICAgIChKU0M6
OkpTV0FTTU1vZHVsZTo6ZnVuY3Rpb25Qb2ludGVyVGFibGVzKToKKyAgICAgICAgKEpTQzo6SlNX
QVNNTW9kdWxlOjpmdW5jdGlvbnMpOgorICAgICAgICAoSlNDOjpKU1dBU01Nb2R1bGU6OmltcG9y
dGVkRnVuY3Rpb25zKToKKyAgICAgICAgKEpTQzo6SlNXQVNNTW9kdWxlOjphcnJheUJ1ZmZlcik6
CisgICAgICAgIChKU0M6OkpTV0FTTU1vZHVsZTo6SlNXQVNNTW9kdWxlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiB3YXNtL1dBU01Db2RlR2VuZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpn
ZXRJbnRlcm5hbEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6Z2V0SW1wb3J0ZWRGdW5jdGlvbik6
CisgICAgICAgIChKU0M6Okp1bXBTY29wZTo6anVtcCk6CisgICAgICAgIChKU0M6Okp1bXBTY29w
ZTo6bGluayk6CisgICAgICAgIChKU0M6OldBU01Db2RlR2VuZXJhdG9yOjpNZW1vcnlBZGRyZXNz
OjpNZW1vcnlBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6V0FTTUNvZGVHZW5lcmF0b3I6OldBU01D
b2RlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V0FTTUNvZGVHZW5lcmF0b3I6OnN0YXJ0RnVu
Y3Rpb24pOgorICAgICAgICAoSlNDOjpXQVNNQ29kZUdlbmVyYXRvcjo6ZW5kRnVuY3Rpb24pOgor
ICAgICAgICAoSlNDOjpXQVNNQ29kZUdlbmVyYXRvcjo6Y3JlYXRlRnJvbUY2NEV4cHJlc3Npb25J
MzIpOgorICAgICAgICAoSlNDOjpXQVNNQ29kZUdlbmVyYXRvcjo6Y3JlYXRlRnJvbUY2NEV4cHJl
c3Npb25GMzIpOgorICAgICAgICAoSlNDOjpXQVNNQ29kZUdlbmVyYXRvcjo6Y3JlYXRlRnJvbVMz
MkV4cHJlc3Npb25GNjQpOgorICAgICAgICAoSlNDOjpXQVNNQ29kZUdlbmVyYXRvcjo6Y3JlYXRl
RnJvbVUzMkV4cHJlc3Npb25GNjQpOgorICAgICAgICAoSlNDOjpXQVNNQ29kZUdlbmVyYXRvcjo6
Y3JlYXRlVW5hcnlFeHByZXNzaW9uSTMyKToKKyAgICAgICAgKEpTQzo6V0FTTUNvZGVHZW5lcmF0
b3I6OmNyZWF0ZVVuYXJ5RXhwcmVzc2lvbkY2NCk6CisgICAgICAgIChKU0M6OldBU01Db2RlR2Vu
ZXJhdG9yOjpjcmVhdGVCaW5hcnlFeHByZXNzaW9uSTMyKToKKyAgICAgICAgKEpTQzo6V0FTTUNv
ZGVHZW5lcmF0b3I6OmNyZWF0ZUJpbmFyeUV4cHJlc3Npb25GNjQpOgorICAgICAgICAoSlNDOjpX
QVNNQ29kZUdlbmVyYXRvcjo6Y3JlYXRlUmVsYXRpb25hbEkzMkV4cHJlc3Npb25JMzIpOgorICAg
ICAgICAoSlNDOjpXQVNNQ29kZUdlbmVyYXRvcjo6Y3JlYXRlUmVsYXRpb25hbEY2NEV4cHJlc3Np
b25JMzIpOgorICAgICAgICAoSlNDOjpXQVNNQ29kZUdlbmVyYXRvcjo6Y3JlYXRlTGl0ZXJhbFBv
b2xFeHByZXNzaW9uSTMyKToKKyAgICAgICAgKEpTQzo6V0FTTUNvZGVHZW5lcmF0b3I6OmNyZWF0
ZUxpdGVyYWxQb29sRXhwcmVzc2lvbkYzMik6CisgICAgICAgIChKU0M6OldBU01Db2RlR2VuZXJh
dG9yOjpjcmVhdGVMaXRlcmFsUG9vbEV4cHJlc3Npb25GNjQpOgorICAgICAgICAoSlNDOjpXQVNN
Q29kZUdlbmVyYXRvcjo6Y3JlYXRlTGl0ZXJhbEltbWVkaWF0ZUV4cHJlc3Npb25JMzIpOgorICAg
ICAgICAoSlNDOjpXQVNNQ29kZUdlbmVyYXRvcjo6Y3JlYXRlTGl0ZXJhbEltbWVkaWF0ZUV4cHJl
c3Npb25GMzIpOgorICAgICAgICAoSlNDOjpXQVNNQ29kZUdlbmVyYXRvcjo6Y3JlYXRlTGl0ZXJh
bEltbWVkaWF0ZUV4cHJlc3Npb25GNjQpOgorICAgICAgICAoSlNDOjpXQVNNQ29kZUdlbmVyYXRv
cjo6Y3JlYXRlR2V0TG9jYWxFeHByZXNzaW9uSTMyKToKKyAgICAgICAgKEpTQzo6V0FTTUNvZGVH
ZW5lcmF0b3I6OmNyZWF0ZUdldExvY2FsRXhwcmVzc2lvbkYzMik6CisgICAgICAgIChKU0M6OldB
U01Db2RlR2VuZXJhdG9yOjpjcmVhdGVHZXRMb2NhbEV4cHJlc3Npb25GNjQpOgorICAgICAgICAo
SlNDOjpXQVNNQ29kZUdlbmVyYXRvcjo6c2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpXQVNNQ29k
ZUdlbmVyYXRvcjo6Y3JlYXRlU2V0TG9jYWxFeHByZXNzaW9uSTMyKToKKyAgICAgICAgKEpTQzo6
V0FTTUNvZGVHZW5lcmF0b3I6OmNyZWF0ZVNldExvY2FsRXhwcmVzc2lvbkYzMik6CisgICAgICAg
IChKU0M6OldBU01Db2RlR2VuZXJhdG9yOjpjcmVhdGVTZXRMb2NhbEV4cHJlc3Npb25GNjQpOgor
ICAgICAgICAoSlNDOjpXQVNNQ29kZUdlbmVyYXRvcjo6Y3JlYXRlR2V0R2xvYmFsRXhwcmVzc2lv
bkkzMik6CisgICAgICAgIChKU0M6OldBU01Db2RlR2VuZXJhdG9yOjpjcmVhdGVHZXRHbG9iYWxF
eHByZXNzaW9uRjMyKToKKyAgICAgICAgKEpTQzo6V0FTTUNvZGVHZW5lcmF0b3I6OmNyZWF0ZUdl
dEdsb2JhbEV4cHJlc3Npb25GNjQpOgorICAgICAgICAoSlNDOjpXQVNNQ29kZUdlbmVyYXRvcjo6
Y3JlYXRlU2V0R2xvYmFsKToKKyAgICAgICAgKEpTQzo6V0FTTUNvZGVHZW5lcmF0b3I6OmJveEFy
Z3VtZW50c0FuZEFkanVzdFN0YWNrUG9pbnRlcik6CisgICAgICAgIChKU0M6OldBU01Db2RlR2Vu
ZXJhdG9yOjpjYWxsQW5kVW5ib3hSZXN1bHQpOgorICAgICAgICAoSlNDOjpXQVNNQ29kZUdlbmVy
YXRvcjo6Y3JlYXRlQ2FsbEludGVybmFsKToKKyAgICAgICAgKEpTQzo6V0FTTUNvZGVHZW5lcmF0
b3I6OmNyZWF0ZUNhbGxJbmRpcmVjdCk6CisgICAgICAgIChKU0M6OldBU01Db2RlR2VuZXJhdG9y
OjpjcmVhdGVDYWxsSW1wb3J0KToKKyAgICAgICAgKEpTQzo6V0FTTUNvZGVHZW5lcmF0b3I6OmNy
ZWF0ZUxvYWQpOgorICAgICAgICAoSlNDOjpXQVNNQ29kZUdlbmVyYXRvcjo6Y3JlYXRlU3RvcmUp
OgorICAgICAgICAoSlNDOjpXQVNNQ29kZUdlbmVyYXRvcjo6cmV0dXJuU3RhdGVtZW50KToKKyAg
ICAgICAgKEpTQzo6V0FTTUNvZGVHZW5lcmF0b3I6OmppdEp1bXApOgorICAgICAgICAoSlNDOjpX
QVNNQ29kZUdlbmVyYXRvcjo6aml0TGFiZWwpOgorICAgICAgICAoSlNDOjpXQVNNQ29kZUdlbmVy
YXRvcjo6aml0QnJhbmNoSWZaZXJvKToKKyAgICAgICAgKEpTQzo6V0FTTUNvZGVHZW5lcmF0b3I6
OmppdEJyYW5jaElmTm9uWmVybyk6CisgICAgICAgIChKU0M6OldBU01Db2RlR2VuZXJhdG9yOjpn
ZW5lcmF0ZVN3aXRjaFRhYmxlKToKKyAgICAgICAgKEpTQzo6V0FTTUNvZGVHZW5lcmF0b3I6Ompp
dExpbmtKdW1wKToKKyAgICAgICAgKEpTQzo6V0FTTUNvZGVHZW5lcmF0b3I6OmppdExpbmtKdW1w
VG9MYWJlbCk6CisgICAgICAgIChKU0M6OldBU01Db2RlR2VuZXJhdG9yOjpwb3ApOgorICAgICAg
ICAoSlNDOjpXQVNNQ29kZUdlbmVyYXRvcjo6c3RhcnRMb29wKToKKyAgICAgICAgKEpTQzo6V0FT
TUNvZGVHZW5lcmF0b3I6OmVuZExvb3ApOgorICAgICAgICAoSlNDOjpXQVNNQ29kZUdlbmVyYXRv
cjo6c3RhcnRTd2l0Y2gpOgorICAgICAgICAoSlNDOjpXQVNNQ29kZUdlbmVyYXRvcjo6ZW5kU3dp
dGNoKToKKyAgICAgICAgKEpTQzo6V0FTTUNvZGVHZW5lcmF0b3I6OmxpbmtCcmVhayk6CisgICAg
ICAgIChKU0M6OldBU01Db2RlR2VuZXJhdG9yOjpsaW5rQ29udGludWUpOgorICAgICAgICAoSlND
OjpXQVNNQ29kZUdlbmVyYXRvcjo6YnJlYWtTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpXQVNN
Q29kZUdlbmVyYXRvcjo6Y29udGludWVTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpXQVNNQ29k
ZUdlbmVyYXRvcjo6c3RhcnRMYWJlbCk6CisgICAgICAgIChKU0M6OldBU01Db2RlR2VuZXJhdG9y
OjplbmRMYWJlbCk6CisgICAgICAgIChKU0M6OldBU01Db2RlR2VuZXJhdG9yOjpicmVha0xhYmVs
U3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6V0FTTUNvZGVHZW5lcmF0b3I6OmNvbnRpbnVlTGFi
ZWxTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpXQVNNQ29kZUdlbmVyYXRvcjo6Y2FsbERvdWJs
ZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V0FTTUNvZGVHZW5lcmF0b3I6OmFsbG9jYXRlU3Bh
Y2VPblN0YWNrKToKKyAgICAgICAgKEpTQzo6V0FTTUNvZGVHZW5lcmF0b3I6OmRlYWxsb2NhdGVT
cGFjZU9uU3RhY2spOgorICAgICAgICAoSlNDOjpXQVNNQ29kZUdlbmVyYXRvcjo6bG9jYWxBZGRy
ZXNzKToKKyAgICAgICAgKEpTQzo6V0FTTUNvZGVHZW5lcmF0b3I6OnRlbXBvcmFyeUFkZHJlc3Mp
OgorICAgICAgICAoSlNDOjpXQVNNQ29kZUdlbmVyYXRvcjo6ZW1pdE5ha2VkQ2FsbCk6CisgICAg
ICAgICogd2FzbS9XQVNNQ29uc3RhbnRzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpvcGVyYXRv
ciYpOgorICAgICAgICAqIHdhc20vV0FTTUZvcm1hdC5oOiBSZW5hbWVkIGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV0FTTU1hZ2ljTnVtYmVyLmguCisgICAgICAgICogd2FzbS9XQVNN
RnVuY3Rpb25QYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFy
c2VyOjpjaGVja1N5bnRheCk6CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6Z2Vu
ZXJhdGVDb2RlKToKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUZ1bmN0
aW9uKToKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjppbml0aWFsaXplTG9jYWxU
eXBlcyk6CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VMb2NhbFZhcmlh
Ymxlcyk6CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VTdGF0ZW1lbnQp
OgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlU2V0TG9jYWxTdGF0ZW1l
bnQpOgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlU2V0R2xvYmFsU3Rh
dGVtZW50KToKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVN0b3JlU3Rh
dGVtZW50KToKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNhbGxJbnRl
cm5hbFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VD
YWxsSW5kaXJlY3RTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6
OnBhcnNlQ2FsbEltcG9ydFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBh
cnNlcjo6cGFyc2VSZXR1cm5TdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25Q
YXJzZXI6OnBhcnNlU3RhdGVtZW50TGlzdCk6CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBh
cnNlcjo6cGFyc2VCbG9ja1N0YXRlbWVudCk6CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBh
cnNlcjo6cGFyc2VJZlN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNl
cjo6cGFyc2VJZkVsc2VTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJz
ZXI6OnBhcnNlV2hpbGVTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJz
ZXI6OnBhcnNlRG9TdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6
OnBhcnNlTGFiZWxTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6
OnBhcnNlQnJlYWtTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6
OnBhcnNlQnJlYWtMYWJlbFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBh
cnNlcjo6cGFyc2VDb250aW51ZVN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OldBU01GdW5jdGlv
blBhcnNlcjo6cGFyc2VDb250aW51ZUxhYmVsU3RhdGVtZW50KToKKyAgICAgICAgKEpTQzo6V0FT
TUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVN3aXRjaFN0YXRlbWVudCk6CisgICAgICAgIChKU0M6OldB
U01GdW5jdGlvblBhcnNlcjo6cGFyc2VFeHByZXNzaW9uKToKKyAgICAgICAgKEpTQzo6V0FTTUZ1
bmN0aW9uUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25JMzIpOgorICAgICAgICAoSlNDOjpXQVNNRnVu
Y3Rpb25QYXJzZXI6OnBhcnNlTGl0ZXJhbFBvb2xFeHByZXNzaW9uSTMyKToKKyAgICAgICAgKEpT
Qzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUxpdGVyYWxJbW1lZGlhdGVFeHByZXNzaW9uSTMy
KToKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUdldExvY2FsRXhwcmVz
c2lvbkkzMik6CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VHZXRHbG9i
YWxFeHByZXNzaW9uSTMyKToKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJz
ZVNldExvY2FsRXhwcmVzc2lvbkkzMik6CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNl
cjo6cGFyc2VTZXRHbG9iYWxFeHByZXNzaW9uSTMyKToKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0
aW9uUGFyc2VyOjpwYXJzZUxvYWRFeHByZXNzaW9uSTMyKToKKyAgICAgICAgKEpTQzo6V0FTTUZ1
bmN0aW9uUGFyc2VyOjpwYXJzZVN0b3JlRXhwcmVzc2lvbkkzMik6CisgICAgICAgIChKU0M6OldB
U01GdW5jdGlvblBhcnNlcjo6cGFyc2VDYWxsSW50ZXJuYWxFeHByZXNzaW9uSTMyKToKKyAgICAg
ICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNhbGxJbmRpcmVjdEV4cHJlc3Npb25J
MzIpOgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ2FsbEltcG9ydEV4
cHJlc3Npb25JMzIpOgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ29u
ZGl0aW9uYWxFeHByZXNzaW9uSTMyKToKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2Vy
OjpwYXJzZUNvbW1hRXhwcmVzc2lvbkkzMik6CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBh
cnNlcjo6cGFyc2VGcm9tRjY0RXhwcmVzc2lvbkkzMik6CisgICAgICAgIChKU0M6OldBU01GdW5j
dGlvblBhcnNlcjo6cGFyc2VVbmFyeUV4cHJlc3Npb25JMzIpOgorICAgICAgICAoSlNDOjpXQVNN
RnVuY3Rpb25QYXJzZXI6OnBhcnNlQmluYXJ5RXhwcmVzc2lvbkkzMik6CisgICAgICAgIChKU0M6
OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VSZWxhdGlvbmFsSTMyRXhwcmVzc2lvbkkzMik6Cisg
ICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VSZWxhdGlvbmFsRjY0RXhwcmVz
c2lvbkkzMik6CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VFeHByZXNz
aW9uRjMyKToKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUxpdGVyYWxQ
b29sRXhwcmVzc2lvbkYzMik6CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFy
c2VMaXRlcmFsSW1tZWRpYXRlRXhwcmVzc2lvbkYzMik6CisgICAgICAgIChKU0M6OldBU01GdW5j
dGlvblBhcnNlcjo6cGFyc2VHZXRMb2NhbEV4cHJlc3Npb25GMzIpOgorICAgICAgICAoSlNDOjpX
QVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlR2V0R2xvYmFsRXhwcmVzc2lvbkYzMik6CisgICAgICAg
IChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VTZXRMb2NhbEV4cHJlc3Npb25GMzIpOgor
ICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlU2V0R2xvYmFsRXhwcmVzc2lv
bkYzMik6CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VMb2FkRXhwcmVz
c2lvbkYzMik6CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VMb2FkV2l0
aE9mZnNldEV4cHJlc3Npb25GMzIpOgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6
OnBhcnNlU3RvcmVFeHByZXNzaW9uRjMyKToKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFy
c2VyOjpwYXJzZVN0b3JlV2l0aE9mZnNldEV4cHJlc3Npb25GMzIpOgorICAgICAgICAoSlNDOjpX
QVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlRnJvbUY2NEV4cHJlc3Npb25GMzIpOgorICAgICAgICAo
SlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlRXhwcmVzc2lvbkY2NCk6CisgICAgICAgIChK
U0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VMaXRlcmFsUG9vbEV4cHJlc3Npb25GNjQpOgor
ICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlTGl0ZXJhbEltbWVkaWF0ZUV4
cHJlc3Npb25GNjQpOgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlR2V0
TG9jYWxFeHByZXNzaW9uRjY0KToKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpw
YXJzZUdldEdsb2JhbEV4cHJlc3Npb25GNjQpOgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25Q
YXJzZXI6OnBhcnNlU2V0TG9jYWxFeHByZXNzaW9uRjY0KToKKyAgICAgICAgKEpTQzo6V0FTTUZ1
bmN0aW9uUGFyc2VyOjpwYXJzZVNldEdsb2JhbEV4cHJlc3Npb25GNjQpOgorICAgICAgICAoSlND
OjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlTG9hZEV4cHJlc3Npb25GNjQpOgorICAgICAgICAo
SlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlTG9hZFdpdGhPZmZzZXRFeHByZXNzaW9uRjY0
KToKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVN0b3JlRXhwcmVzc2lv
bkY2NCk6CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VTdG9yZVdpdGhP
ZmZzZXRFeHByZXNzaW9uRjY0KToKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpw
YXJzZUNhbGxJbnRlcm5hbEV4cHJlc3Npb25GNjQpOgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rp
b25QYXJzZXI6OnBhcnNlQ2FsbEluZGlyZWN0RXhwcmVzc2lvbkY2NCk6CisgICAgICAgIChKU0M6
OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VDYWxsSW1wb3J0RXhwcmVzc2lvbkY2NCk6CisgICAg
ICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb25G
NjQpOgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ29tbWFFeHByZXNz
aW9uRjY0KToKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUZyb21TMzJF
eHByZXNzaW9uRjY0KToKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUZy
b21VMzJFeHByZXNzaW9uRjY0KToKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpw
YXJzZVVuYXJ5RXhwcmVzc2lvbkY2NCk6CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNl
cjo6cGFyc2VCaW5hcnlFeHByZXNzaW9uRjY0KToKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9u
UGFyc2VyOjpwYXJzZUV4cHJlc3Npb25Wb2lkKToKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9u
UGFyc2VyOjpwYXJzZUNhbGxJbnRlcm5hbEV4cHJlc3Npb25Wb2lkKToKKyAgICAgICAgKEpTQzo6
V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNhbGxJbmRpcmVjdEV4cHJlc3Npb25Wb2lkKToKKyAg
ICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNhbGxJbXBvcnRFeHByZXNzaW9u
Vm9pZCk6CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VNZW1vcnlBZGRy
ZXNzKToKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUxvYWQpOgorICAg
ICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlU3RvcmUpOgorICAgICAgICAoSlND
OjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ2FsbEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6
OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VDYWxsSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpX
QVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ2FsbEluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6V0FT
TUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNhbGxJbXBvcnQpOgorICAgICAgICAqIHdhc20vV0FTTUZ1
bmN0aW9uUGFyc2VyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6
OldBU01GdW5jdGlvblBhcnNlcik6CisgICAgICAgICogd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNw
cDoKKyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoSlND
OjpXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZU1vZHVsZSk6CisgICAgICAgIChKU0M6OldBU01Nb2R1
bGVQYXJzZXI6OnBhcnNlQ29uc3RhbnRQb29sU2VjdGlvbik6CisgICAgICAgIChKU0M6OldBU01N
b2R1bGVQYXJzZXI6OnBhcnNlU2lnbmF0dXJlU2VjdGlvbik6CisgICAgICAgIChKU0M6OldBU01N
b2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25JbXBvcnRTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6
V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VHbG9iYWxTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V0FT
TU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uU2VjdGlvbik6CisgICAgICAg
IChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25Qb2ludGVyVGFibGVTZWN0aW9u
KToKKyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRp
b25TZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VFeHBvcnRT
ZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRl
ZmluaXRpb24pOgorICAgICAgICAoSlNDOjpwYXJzZVdlYkFzc2VtYmx5KToKKyAgICAgICAgKEpT
Qzo6V0FTTU1vZHVsZVBhcnNlcjo6V0FTTU1vZHVsZVBhcnNlcik6IERlbGV0ZWQuCisgICAgICAg
ICogd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmg6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJz
ZXI6OldBU01Nb2R1bGVQYXJzZXIpOgorICAgICAgICAqIHdhc20vV0FTTVJlYWRlci5jcHA6Cisg
ICAgICAgIChKU0M6OldBU01SZWFkZXI6OnJlYWRVSW50MzIpOgorICAgICAgICAoSlNDOjpXQVNN
UmVhZGVyOjpyZWFkQ29tcGFjdFVJbnQzMik6CisgICAgICAgIChKU0M6OldBU01SZWFkZXI6OnJl
YWRDb21wYWN0SW50MzIpOgorICAgICAgICAoSlNDOjpXQVNNUmVhZGVyOjpyZWFkU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6V0FTTVJlYWRlcjo6cmVhZFR5cGUpOgorICAgICAgICAoSlNDOjpXQVNN
UmVhZGVyOjpyZWFkRXhwcmVzc2lvblR5cGUpOgorICAgICAgICAoSlNDOjpXQVNNUmVhZGVyOjpy
ZWFkRXhwb3J0Rm9ybWF0KToKKyAgICAgICAgKEpTQzo6V0FTTVJlYWRlcjo6cmVhZFN3aXRjaENh
c2UpOgorICAgICAgICAoSlNDOjpXQVNNUmVhZGVyOjpyZWFkQnl0ZSk6CisgICAgICAgIChKU0M6
OldBU01SZWFkZXI6OnJlYWRVbnNpZ25lZEludDMyKToKKyAgICAgICAgKEpTQzo6V0FTTVJlYWRl
cjo6aWZJMzJMaXRlcmFsKToKKyAgICAgICAgKiB3YXNtL1dBU01SZWFkZXIuaDoKKyAgICAgICAg
KEpTQzo6V0FTTVJlYWRlcjo6aW5kZXgpOgorICAgICAgICAoSlNDOjpXQVNNUmVhZGVyOjpzZXRJ
bmRleCk6CisgICAgICAgIChKU0M6OldBU01SZWFkZXI6OnJlYWRPcEV4cHJlc3Npb25Wb2lkKToK
KyAgICAgICAgKEpTQzo6V0FTTVJlYWRlcjo6cmVhZEJ5dGUpOgorICAgICAgICAoSlNDOjpXQVNN
UmVhZGVyOjpyZWFkQ29kZSk6CisgICAgICAgICogd2FzbS9XQVNNU3ludGF4Q2hlY2tlci5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6V0FTTVN5bnRheENoZWNrZXI6Ok1lbW9yeUFkZHJlc3M6Ok1l
bW9yeUFkZHJlc3MpOgorICAgICAgICAoSlNDOjpXQVNNU3ludGF4Q2hlY2tlcjo6V0FTTVN5bnRh
eENoZWNrZXIpOgorICAgICAgICAoSlNDOjpXQVNNU3ludGF4Q2hlY2tlcjo6c3RhcnRGdW5jdGlv
bik6CisgICAgICAgIChKU0M6OldBU01TeW50YXhDaGVja2VyOjplbmRGdW5jdGlvbik6CisgICAg
ICAgIChKU0M6OldBU01TeW50YXhDaGVja2VyOjpzZXRMb2NhbCk6CisgICAgICAgIChKU0M6OldB
U01TeW50YXhDaGVja2VyOjpyZXR1cm5TdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpXQVNNU3lu
dGF4Q2hlY2tlcjo6Y3JlYXRlTGl0ZXJhbFBvb2xFeHByZXNzaW9uSTMyKToKKyAgICAgICAgKEpT
Qzo6V0FTTVN5bnRheENoZWNrZXI6OmNyZWF0ZUxpdGVyYWxQb29sRXhwcmVzc2lvbkYzMik6Cisg
ICAgICAgIChKU0M6OldBU01TeW50YXhDaGVja2VyOjpjcmVhdGVMaXRlcmFsUG9vbEV4cHJlc3Np
b25GNjQpOgorICAgICAgICAoSlNDOjpXQVNNU3ludGF4Q2hlY2tlcjo6Y3JlYXRlTGl0ZXJhbElt
bWVkaWF0ZUV4cHJlc3Npb25JMzIpOgorICAgICAgICAoSlNDOjpXQVNNU3ludGF4Q2hlY2tlcjo6
Y3JlYXRlTGl0ZXJhbEltbWVkaWF0ZUV4cHJlc3Npb25GMzIpOgorICAgICAgICAoSlNDOjpXQVNN
U3ludGF4Q2hlY2tlcjo6Y3JlYXRlTGl0ZXJhbEltbWVkaWF0ZUV4cHJlc3Npb25GNjQpOgorICAg
ICAgICAoSlNDOjpXQVNNU3ludGF4Q2hlY2tlcjo6Y3JlYXRlR2V0TG9jYWxFeHByZXNzaW9uSTMy
KToKKyAgICAgICAgKEpTQzo6V0FTTVN5bnRheENoZWNrZXI6OmNyZWF0ZUdldExvY2FsRXhwcmVz
c2lvbkYzMik6CisgICAgICAgIChKU0M6OldBU01TeW50YXhDaGVja2VyOjpjcmVhdGVHZXRMb2Nh
bEV4cHJlc3Npb25GNjQpOgorICAgICAgICAoSlNDOjpXQVNNU3ludGF4Q2hlY2tlcjo6Y3JlYXRl
U2V0TG9jYWxFeHByZXNzaW9uSTMyKToKKyAgICAgICAgKEpTQzo6V0FTTVN5bnRheENoZWNrZXI6
OmNyZWF0ZVNldExvY2FsRXhwcmVzc2lvbkYzMik6CisgICAgICAgIChKU0M6OldBU01TeW50YXhD
aGVja2VyOjpjcmVhdGVTZXRMb2NhbEV4cHJlc3Npb25GNjQpOgorICAgICAgICAoSlNDOjpXQVNN
U3ludGF4Q2hlY2tlcjo6Y3JlYXRlR2V0R2xvYmFsRXhwcmVzc2lvbkkzMik6CisgICAgICAgIChK
U0M6OldBU01TeW50YXhDaGVja2VyOjpjcmVhdGVHZXRHbG9iYWxFeHByZXNzaW9uRjMyKToKKyAg
ICAgICAgKEpTQzo6V0FTTVN5bnRheENoZWNrZXI6OmNyZWF0ZUdldEdsb2JhbEV4cHJlc3Npb25G
NjQpOgorICAgICAgICAoSlNDOjpXQVNNU3ludGF4Q2hlY2tlcjo6Y3JlYXRlU2V0R2xvYmFsKToK
KyAgICAgICAgKEpTQzo6V0FTTVN5bnRheENoZWNrZXI6OmNyZWF0ZUxvYWQpOgorICAgICAgICAo
SlNDOjpXQVNNU3ludGF4Q2hlY2tlcjo6Y3JlYXRlU3RvcmUpOgorICAgICAgICAoSlNDOjpXQVNN
U3ludGF4Q2hlY2tlcjo6Y3JlYXRlQ2FsbEludGVybmFsKToKKyAgICAgICAgKEpTQzo6V0FTTVN5
bnRheENoZWNrZXI6OmNyZWF0ZUNhbGxJbmRpcmVjdCk6CisgICAgICAgIChKU0M6OldBU01TeW50
YXhDaGVja2VyOjpjcmVhdGVDYWxsSW1wb3J0KToKKyAgICAgICAgKEpTQzo6V0FTTVN5bnRheENo
ZWNrZXI6OmNyZWF0ZUZyb21GNjRFeHByZXNzaW9uSTMyKToKKyAgICAgICAgKEpTQzo6V0FTTVN5
bnRheENoZWNrZXI6OmNyZWF0ZUZyb21GNjRFeHByZXNzaW9uRjMyKToKKyAgICAgICAgKEpTQzo6
V0FTTVN5bnRheENoZWNrZXI6OmNyZWF0ZUZyb21TMzJFeHByZXNzaW9uRjY0KToKKyAgICAgICAg
KEpTQzo6V0FTTVN5bnRheENoZWNrZXI6OmNyZWF0ZUZyb21VMzJFeHByZXNzaW9uRjY0KToKKyAg
ICAgICAgKEpTQzo6V0FTTVN5bnRheENoZWNrZXI6OmNyZWF0ZVVuYXJ5RXhwcmVzc2lvbkkzMik6
CisgICAgICAgIChKU0M6OldBU01TeW50YXhDaGVja2VyOjpjcmVhdGVVbmFyeUV4cHJlc3Npb25G
NjQpOgorICAgICAgICAoSlNDOjpXQVNNU3ludGF4Q2hlY2tlcjo6Y3JlYXRlQmluYXJ5RXhwcmVz
c2lvbkkzMik6CisgICAgICAgIChKU0M6OldBU01TeW50YXhDaGVja2VyOjpjcmVhdGVSZWxhdGlv
bmFsSTMyRXhwcmVzc2lvbkkzMik6CisgICAgICAgIChKU0M6OldBU01TeW50YXhDaGVja2VyOjpj
cmVhdGVSZWxhdGlvbmFsRjY0RXhwcmVzc2lvbkkzMik6CisgICAgICAgIChKU0M6OldBU01TeW50
YXhDaGVja2VyOjpjcmVhdGVCaW5hcnlFeHByZXNzaW9uRjY0KToKKyAgICAgICAgKEpTQzo6V0FT
TVN5bnRheENoZWNrZXI6OmppdEp1bXApOgorICAgICAgICAoSlNDOjpXQVNNU3ludGF4Q2hlY2tl
cjo6aml0TGlua0p1bXApOgorICAgICAgICAoSlNDOjpXQVNNU3ludGF4Q2hlY2tlcjo6aml0TGlu
a0p1bXBUb0xhYmVsKToKKyAgICAgICAgKEpTQzo6V0FTTVN5bnRheENoZWNrZXI6OmppdExhYmVs
KToKKyAgICAgICAgKEpTQzo6V0FTTVN5bnRheENoZWNrZXI6OmppdEJyYW5jaElmWmVybyk6Cisg
ICAgICAgIChKU0M6OldBU01TeW50YXhDaGVja2VyOjpqaXRCcmFuY2hJZk5vblplcm8pOgorICAg
ICAgICAoSlNDOjpXQVNNU3ludGF4Q2hlY2tlcjo6Z2VuZXJhdGVTd2l0Y2hUYWJsZSk6CisgICAg
ICAgIChKU0M6OldBU01TeW50YXhDaGVja2VyOjpwb3ApOgorICAgICAgICAoSlNDOjpXQVNNU3lu
dGF4Q2hlY2tlcjo6bWF4U3RhY2tUb3ApOgorICAgICAgICAoSlNDOjpXQVNNU3ludGF4Q2hlY2tl
cjo6c3RhcnRMb29wKToKKyAgICAgICAgKEpTQzo6V0FTTVN5bnRheENoZWNrZXI6OmVuZExvb3Ap
OgorICAgICAgICAoSlNDOjpXQVNNU3ludGF4Q2hlY2tlcjo6c3RhcnRTd2l0Y2gpOgorICAgICAg
ICAoSlNDOjpXQVNNU3ludGF4Q2hlY2tlcjo6ZW5kU3dpdGNoKToKKyAgICAgICAgKEpTQzo6V0FT
TVN5bnRheENoZWNrZXI6OmxpbmtCcmVhayk6CisgICAgICAgIChKU0M6OldBU01TeW50YXhDaGVj
a2VyOjpsaW5rQ29udGludWUpOgorICAgICAgICAoSlNDOjpXQVNNU3ludGF4Q2hlY2tlcjo6YnJl
YWtTdGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpXQVNNU3ludGF4Q2hlY2tlcjo6Y29udGludWVT
dGF0ZW1lbnQpOgorICAgICAgICAoSlNDOjpXQVNNU3ludGF4Q2hlY2tlcjo6c3RhcnRMYWJlbCk6
CisgICAgICAgIChKU0M6OldBU01TeW50YXhDaGVja2VyOjplbmRMYWJlbCk6CisgICAgICAgIChK
U0M6OldBU01TeW50YXhDaGVja2VyOjpicmVha0xhYmVsU3RhdGVtZW50KToKKyAgICAgICAgKEpT
Qzo6V0FTTVN5bnRheENoZWNrZXI6OmNvbnRpbnVlTGFiZWxTdGF0ZW1lbnQpOgorICAgICAgICAo
SlNDOjpXQVNNU3ludGF4Q2hlY2tlcjo6cmVjb3JkU3RhY2tUb3ApOgorCiAyMDE1LTA4LTA0ICBC
cmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtXaW5dIFVwZGF0
ZSBBcHBsZSBXaW5kb3dzIGJ1aWxkIGZvciBWUzIwMTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRSZWYuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1NjcmlwdFJlZi5jcHAKaW5kZXggYzIwYWY2ZGYyZjBmOWMyYWI5NGU4NmI3MWYxMzkzMTEy
ZGI4MTEzZS4uMzljMjM5OTM0NzRlZWU3YzZlOTM2MjgwOTRjZGFkZjQyZGQ2NzM1YSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdFJlZi5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdFJlZi5jcHAKQEAgLTQ2LDYgKzQ2LDEzIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFdURjo6YWRvcHRSZWYoKm5ldyBPcGFxdWVKU1Njcmlw
dCh2bSwgdXJsLCBzdGFydGluZ0xpbmVOdW1iZXIsIHNvdXJjZSkpOwogICAgIH0KIAorI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKKyAgICB2aXJ0dWFsIGJvb2wgaXNTdHJpbmdTb3VyY2UoKSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlmCisK
ICAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgc291cmNlKCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7
CiAgICAgICAgIHJldHVybiBtX3NvdXJjZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAppbmRleCA0YWRlMGVkZGQ4ZmM5MjM1YzZhYWRjYzYwOTU4ZTEyYTI2YzU0ODQxLi5kMGU0YWUx
YzZkMjQwOGUwMDI3YThkZjFmMTA1MDUzZjYwODc1ZWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CkBAIC00MTYsNiArNDE2LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJD
RVMKICAgICB0b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmNwcAogCiAgICAgd2FzbS9KU1dBU01N
b2R1bGUuY3BwCisgICAgd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuY3BwCiAgICAgd2FzbS9XQVNN
TW9kdWxlUGFyc2VyLmNwcAogICAgIHdhc20vV0FTTVJlYWRlci5jcHAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBjZjEwN2I2NWI1ZjUyNjI5YWYzMGFmMjYyMDA1ZmQ3YjY5OTkx
MjljLi5jMDk1MGRhODkzMGVlZmU3NmJmYWQ5ZjM5MDQwYTNmM2I3YzJlYjRkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTAzNSw5ICsxMDM1LDE0IEBACiAJCTdCMzlGNzZFMUI2
MkRFMzIwMDM2MEZCNCAvKiBXQVNNTW9kdWxlUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjM5Rjc2QTFCNjJERTIyMDAzNjBGQjQgLyogV0FT
TU1vZHVsZVBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTdCMzlGNzcwMUI2MkRFMzIwMDM2MEZCNCAvKiBXQVNNUmVhZGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjM5Rjc2QzFCNjJERTIy
MDAzNjBGQjQgLyogV0FTTVJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTdCMzlGNzcyMUI2MzU3NEQwMDM2MEZCNCAvKiBXQVNNUmVhZGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMzlG
NzcxMUI2MzU3NEIwMDM2MEZCNCAvKiBXQVNNUmVhZGVyLmNwcCAqLzsgfTsKLQkJN0I3QTVFMjcx
QjY4Mjg4QzAwMjdDQUQwIC8qIFdBU01NYWdpY051bWJlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I3QTVFMjYxQjY4Mjg4NDAwMjdDQUQwIC8qIFdB
U01NYWdpY051bWJlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTdCOThEMTM2MUI2MENENUYwMDIzQjFBNCAvKiBKU1dBU01Nb2R1bGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I5OEQxMzQxQjYw
Q0Q1QTAwMjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5jcHAgKi87IH07CiAJCTdCOThEMTM3MUI2MENE
NjIwMDIzQjFBNCAvKiBKU1dBU01Nb2R1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdCOThEMTM1MUI2MENENUEwMDIzQjFBNCAvKiBKU1dBU01Nb2R1
bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3
QkRFQzgzQzFCNzA3MUUwMDBCQzIxOEMgLyogV0FTTUNvZGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCREVDODM2MUI3MDcxREEwMEJD
MjE4QyAvKiBXQVNNQ29kZUdlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTdCREVDODNEMUI3MDcxRTUwMEJDMjE4QyAvKiBXQVNNQ29u
c3RhbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
QkRFQzgzNzFCNzA3MURBMDBCQzIxOEMgLyogV0FTTUNvbnN0YW50cy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCREVDODNFMUI3MDcxRUEwMEJD
MjE4QyAvKiBXQVNNRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QkRFQzgzODFCNzA3MURBMDBCQzIxOEMgLyogV0FTTUZvcm1hdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdCREVDODNGMUI3
MDcxRjAwMEJDMjE4QyAvKiBXQVNNRnVuY3Rpb25QYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0JERUM4MzkxQjcwNzFEQTAwQkMyMThDIC8q
IFdBU01GdW5jdGlvblBhcnNlci5jcHAgKi87IH07CisJCTdCREVDODQwMUI3MDcxRjMwMEJDMjE4
QyAvKiBXQVNNRnVuY3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdCREVDODNBMUI3MDcxREEwMEJDMjE4QyAvKiBXQVNNRnVuY3Rpb25Q
YXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3QkRFQzg0MTFCNzA3MUY3MDBCQzIxOEMgLyogV0FTTVN5bnRheENoZWNrZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCREVDODNCMUI3MDcxREEw
MEJDMjE4QyAvKiBXQVNNU3ludGF4Q2hlY2tlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMDA4Q0RBMTg3MTI0QkIwMDk1NUMyNCAvKiBKU1By
b21pc2VEZWZlcnJlZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QzAwOENEODE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQuY3Bw
ICovOyB9OwogCQk3QzAwOENEQjE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDA4Q0Q5
MTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMDA4Q0U3MTg3NjMxQjYwMDk1NUMy
NCAvKiBNaWNyb3Rhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdDMDA4Q0U1MTg3NjMxQjYwMDk1NUMyNCAvKiBNaWNyb3Rhc2suaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjgyMCw5ICsyODI1LDE0
IEBACiAJCTdCMzlGNzZBMUI2MkRFMjIwMDM2MEZCNCAvKiBXQVNNTW9kdWxlUGFyc2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01Nb2R1bGVQYXJzZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0IzOUY3NkMxQjYyREUyMjAwMzYwRkI0IC8qIFdBU01S
ZWFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTVJlYWRlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QjM5Rjc3MTFCNjM1NzRCMDAzNjBGQjQgLyog
V0FTTVJlYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQVNN
UmVhZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0I3QTVFMjYxQjY4Mjg4
NDAwMjdDQUQwIC8qIFdBU01NYWdpY051bWJlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXQVNNTWFnaWNOdW1iZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0I5OEQxMzQxQjYwQ0Q1QTAwMjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dBU01Nb2R1bGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3Qjk4RDEzNTFCNjBDRDVBMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV0FTTU1vZHVsZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QkRFQzgzNjFCNzA3MURBMDBCQzIxOEMgLyogV0FT
TUNvZGVHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTUNv
ZGVHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0JERUM4MzcxQjcw
NzFEQTAwQkMyMThDIC8qIFdBU01Db25zdGFudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0FTTUNvbnN0YW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
QkRFQzgzODFCNzA3MURBMDBCQzIxOEMgLyogV0FTTUZvcm1hdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXQVNNRm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTdCREVDODM5MUI3MDcxREEwMEJDMjE4QyAvKiBXQVNNRnVuY3Rpb25QYXJzZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FTTUZ1bmN0aW9uUGFyc2VyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0JERUM4M0ExQjcwNzFEQTAwQkMyMThD
IC8qIFdBU01GdW5jdGlvblBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXQVNNRnVuY3Rpb25QYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0JE
RUM4M0IxQjcwNzFEQTAwQkMyMThDIC8qIFdBU01TeW50YXhDaGVja2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01TeW50YXhDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDMDA4Q0Q4MTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZl
cnJlZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Byb21pc2VE
ZWZlcnJlZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMDA4Q0Q5MTg3MTI0
QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1Byb21pc2VEZWZlcnJlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3QzAwOENFNTE4NzYzMUI2MDA5NTVDMjQgLyogTWljcm90YXNrLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1pY3JvdGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNDM4NSw5ICs0Mzk1LDE0IEBACiAJCTdCOThEMTMzMUI2MENEMUUwMDIzQjFBNCAv
KiB3YXNtICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk3
QkRFQzgzNjFCNzA3MURBMDBCQzIxOEMgLyogV0FTTUNvZGVHZW5lcmF0b3IuaCAqLywKKwkJCQk3
QkRFQzgzNzFCNzA3MURBMDBCQzIxOEMgLyogV0FTTUNvbnN0YW50cy5oICovLAorCQkJCTdCREVD
ODM4MUI3MDcxREEwMEJDMjE4QyAvKiBXQVNNRm9ybWF0LmggKi8sCisJCQkJN0JERUM4MzkxQjcw
NzFEQTAwQkMyMThDIC8qIFdBU01GdW5jdGlvblBhcnNlci5jcHAgKi8sCisJCQkJN0JERUM4M0Ex
QjcwNzFEQTAwQkMyMThDIC8qIFdBU01GdW5jdGlvblBhcnNlci5oICovLAorCQkJCTdCREVDODNC
MUI3MDcxREEwMEJDMjE4QyAvKiBXQVNNU3ludGF4Q2hlY2tlci5oICovLAogCQkJCTdCOThEMTM0
MUI2MENENUEwMDIzQjFBNCAvKiBKU1dBU01Nb2R1bGUuY3BwICovLAogCQkJCTdCOThEMTM1MUI2
MENENUEwMDIzQjFBNCAvKiBKU1dBU01Nb2R1bGUuaCAqLywKLQkJCQk3QjdBNUUyNjFCNjgyODg0
MDAyN0NBRDAgLyogV0FTTU1hZ2ljTnVtYmVyLmggKi8sCiAJCQkJN0IzOUY3NjkxQjYyREUyMjAw
MzYwRkI0IC8qIFdBU01Nb2R1bGVQYXJzZXIuY3BwICovLAogCQkJCTdCMzlGNzZBMUI2MkRFMjIw
MDM2MEZCNCAvKiBXQVNNTW9kdWxlUGFyc2VyLmggKi8sCiAJCQkJN0IzOUY3NzExQjYzNTc0QjAw
MzYwRkI0IC8qIFdBU01SZWFkZXIuY3BwICovLApAQCAtNTc2Myw2ICs1Nzc4LDcgQEAKIAkJCWZp
bGVzID0gKAogCQkJCTBGRkE1NDk4MTZCODgzNTMwMEIzQTk4MiAvKiBBNjRET3Bjb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NjAxNjFFMzBGM0E4M0MxMDBGODQ3MTAgLyogQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0JERUM4M0QxQjcwNzFFNTAwQkMyMThD
IC8qIFdBU01Db25zdGFudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDI5MUFBOTA5NTYw
MEQzM0IzMyAvKiBTY29wZWRBcmd1bWVudHNUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1
NUYwRjUxNEQxMDYzQzAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTJBNDhEMTkxMTc3MjM2NUIwMEM2NUE1RiAvKiBBUElDYWxsYmFja0Z1bmN0aW9uLmggaW4gSGVh
ZGVycyAqLywKQEAgLTU5MzAsNiArNTk0Niw3IEBACiAJCQkJNDEzNTlDRjMwRkREODlBRDAwMjA2
MTgwIC8qIERhdGVDb252ZXJzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzExNjYwMjBFMTk5
N0I0MDA4MDY2REQgLyogRGF0ZUluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY0QjI3
QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCREVD
ODNFMUI3MDcxRUEwMEJDMjE4QyAvKiBXQVNNRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NEExNTYzMjEwOTY2MzY1MDA2RkEyNjAgLyogRGF0ZUluc3RhbmNlQ2FjaGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDRDIwMzRDMEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlUHJvdG90eXBlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQ0QyMDNFODBFMTcxOEY0MDAyQzdFODIgLyogRGF0ZVByb3RvdHlw
ZS5sdXQuaCBpbiBIZWFkZXJzICovLApAQCAtNjIyNiw2ICs2MjQzLDcgQEAKIAkJCQkwRjM5MkM4
QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1ODQwRTI5MTg3Q0E1RTYwMDg0M0IxMCAvKiBpbmxpbmUtYW5kLW1pbmlmeS1zdHlsZXNoZWV0
cy1hbmQtc2NyaXB0cy5weSBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTU2MTdGMEI3MUMwMEFC
QjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTdCREVDODQx
MUI3MDcxRjcwMEJDMjE4QyAvKiBXQVNNU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTlFNDVBMjcxOEExQjI1OTAwMjZEODhGIC8qIElucHV0Q3Vyc29yLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjk1MkFCRDFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUE1OTNDRjdGMTg0MDM2MkMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JB
Z2VudEJhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtNjQ4MCw2ICs2NDk4LDcgQEAKIAkJCQlCQzE4
QzQzQzBFMTZGNUNEMDBCMzQ0NjAgLyogTWF0aE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTAyMTNFM0UxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRpc3RpY3MuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQjU0NjdCMTRGNUM3RTEwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QkRFQzg0MDFCNzA3MUYzMDBCQzIxOEMg
LyogV0FTTUZ1bmN0aW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzAwOENFNzE4NzYz
MUI2MDA5NTVDMjQgLyogTWljcm90YXNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkM1NjhFMjEx
QTIxM0VFMDAwN0Y3RjAgLyogTUlQU0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMw
MkU5MTEwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFk
ZXJzICovLApAQCAtNjU1MCw3ICs2NTY5LDYgQEAKIAkJCQlCQzE4QzQ1NDBFMTZGNUNEMDBCMzQ0
NjAgLyogUHJvcGVydHlOYW1lQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcxNjhDMTVB
M0IyMzUwMDhGNURBQSAvKiBQcm9wZXJ0eU9mZnNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4
NUY2QkMxOEM1NTNGRTAwRjEwNjI2IC8qIFNwaWxsUmVnaXN0ZXJzTW9kZS5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJN0I3QTVFMjcxQjY4Mjg4QzAwMjdDQUQwIC8qIFdBU01NYWdpY051bWJlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTUwRTE2RjVDRDAwQjM0NDYwIC8qIFByb3BlcnR5U2xv
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3Bl
cnR5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2RkM3NTExOTYxMTBBODAwRTFEMDJE
IC8qIENvbXBsZXhHZXRTdGF0dXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjY4Nyw2ICs2NzA1LDcg
QEAKIAkJCQlBN0E4QUY0MDE3QURCNUYzMDA1QUIxNzQgLyogVWludDhDbGFtcGVkQXJyYXkuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNUYwOENGMTQ2Qzc2MzMwMDA0NzJBOSAvKiBVbmNvbmRpdGlv
bmFsRmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0I2MDE4MjE2MzlGRDJBMDAzNzJC
QTMgLyogVW5saW5rZWRDb2RlQmxvY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTdCREVDODNDMUI3
MDcxRTAwMEJDMjE4QyAvKiBXQVNNQ29kZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyRTg5MkMxNkQwMjhBRDAwOUU0RkQyIC8qIFVudXNlZFBvaW50ZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUExNTg3RDZFMUI0REMxNDEwMEQ2OTg0OSAvKiBJbnRsRGF0ZVRpbWVGb3JtYXQuaCBp
biBIZWFkZXJzICovLAogCQkJCTdCMzlGNzcwMUI2MkRFMzIwMDM2MEZCNCAvKiBXQVNNUmVhZGVy
LmggaW4gSGVhZGVycyAqLywKQEAgLTcyMDcsNiArNzIyNiw3IEBACiAJCQkJOUU3Mjk0MDgxOTBG
MDIxRTAwMUE5MUI1IC8qIEluaXRpYWxpemVMTFZNUE9TSVguY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOUU3Mjk0MDcxOTBGMDFBNTAwMUE5MUI1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZGQTU0OTcxNkI4ODM1MDAwQjNBOTgyIC8qIEE2NERPcGNvZGUu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0JERUM4M0YxQjcwNzFGMDAwQkMyMThDIC8qIFdBU01G
dW5jdGlvblBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUwNTAxNTFBQTkwOTExMDBE
MzNCMzMgLyogRGlyZWN0QXJndW1lbnRzT2Zmc2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
NTVGMEY0MTREMTA2MzkwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0N0YzOUJEMTA3RUMzNzYwMDQyN0E0OCAvKiBBcmdMaXN0LmNwcCBpbiBTb3VyY2VzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJs
ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKaW5k
ZXggZGEzMTgxZTU4NTRkZWQyYjYzMjM3Nzg4M2ZiYzRkOGFmMDZiMTMyOC4uMGZiZTJhY2U0ZmIw
ODJjMWI5MTdhZGZhNGFlNDk2Njg3NzdhMTQwYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCkBAIC0zMTEsNiArMzExLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgR1JPVVAzX09QX1RFU1QgPSAwLAogICAgICAgICBHUk9VUDNfT1BfTk9UICA9IDIs
CiAgICAgICAgIEdST1VQM19PUF9ORUcgID0gMywKKyAgICAgICAgR1JPVVAzX09QX0RJViA9IDYs
CiAgICAgICAgIEdST1VQM19PUF9JRElWID0gNywKIAogICAgICAgICBHUk9VUDVfT1BfQ0FMTE4g
PSAyLApAQCAtOTMyLDYgKzkzMywxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLmlt
bWVkaWF0ZTMyKHZhbHVlKTsKICAgICB9CiAKKyAgICB2b2lkIGRpdmxfcihSZWdpc3RlcklEIGRz
dCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDNfRXYsIEdS
T1VQM19PUF9ESVYsIGRzdCk7CisgICAgfQorCiAgICAgdm9pZCBpZGl2bF9yKFJlZ2lzdGVySUQg
ZHN0KQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQM19Fdiwg
R1JPVVAzX09QX0lESVYsIGRzdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCmluZGV4IDlmOTQ4Njg5NzBiZjA1ODAzNjU4YzNjZTg1ZmE4YWFjOWM2OTQ1
MTcuLmI0OWU3MzU4ZDU2YjAyNTYyN2VmYzRiNjI2N2RkMDkwY2EwYWY1ZGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC0xMTksNiArMTE5LDEw
IEBAIENTdHJpbmcgQ29kZUJsb2NrOjpzb3VyY2VDb2RlRm9yVG9vbHMoKSBjb25zdAogICAgIAog
ICAgIFNvdXJjZVByb3ZpZGVyKiBwcm92aWRlciA9IHNvdXJjZSgpOwogICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4
ZWN1dGFibGUoKSk7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGlmIChleGVjdXRhYmxl
LT5pc1dlYkFzc2VtYmx5RnVuY3Rpb24oKSkKKyAgICAgICAgcmV0dXJuICJmdW5jdGlvbiBbd2Vi
YXNzZW1ibHldIjsKKyNlbmRpZgogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxp
bmtlZCA9IGV4ZWN1dGFibGUtPnVubGlua2VkRXhlY3V0YWJsZSgpOwogICAgIHVuc2lnbmVkIHVu
bGlua2VkU3RhcnRPZmZzZXQgPSB1bmxpbmtlZC0+c3RhcnRPZmZzZXQoKTsKICAgICB1bnNpZ25l
ZCBsaW5rZWRTdGFydE9mZnNldCA9IGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCk7
CkBAIC0xNzM2LDExICsxNzQwLDE5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGluCiAgICAgbV92
aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQuc3RvcmUoZmFsc2UsIHN0ZDo6bWVtb3J5X29yZGVy
X3JlbGF4ZWQpOwogCiAgICAgQVNTRVJUKG1faGVhcC0+aXNEZWZlcnJlZCgpKTsKLSAgICBBU1NF
UlQobV9zY29wZVJlZ2lzdGVyLmlzTG9jYWwoKSk7Ci0KICAgICBBU1NFUlQobV9zb3VyY2UpOwog
ICAgIHNldE51bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7
CiAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgaWYgKG93bmVyRXhlY3V0YWJsZS0+aXNX
ZWJBc3NlbWJseUZ1bmN0aW9uKCkpIHsKKyAgICAgICAgbV9oZWFwLT5tX2NvZGVCbG9ja3MuYWRk
KHRoaXMpOworICAgICAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVv
ZihDb2RlQmxvY2spKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAgQVNT
RVJUKG1fc2NvcGVSZWdpc3Rlci5pc0xvY2FsKCkpOworCiAgICAgaWYgKHZtKCktPnR5cGVQcm9m
aWxlcigpIHx8IHZtKCktPmNvbnRyb2xGbG93UHJvZmlsZXIoKSkKICAgICAgICAgdm0oKS0+ZnVu
Y3Rpb25IYXNFeGVjdXRlZENhY2hlKCktPnJlbW92ZVVuZXhlY3V0ZWRSYW5nZShtX293bmVyRXhl
Y3V0YWJsZS0+c291cmNlSUQoKSwgbV9vd25lckV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdTdGFy
dE9mZnNldCgpLCBtX293bmVyRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHAKaW5kZXggNjUyNDk5OGM4Y2IzY2JkOTA4ZTNjMDk3Mjk3NWZkYWQ0NzRlYWZjNy4u
NzBlYzdjMTNjMDZkZjhlYmEzYjM3ZDVlNWQxZTFiMzhjMzJhOWMxYiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCkBAIC0z
NCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRnVuY3Rpb25PdmVycmlkZXMuaCIKICNpbmNsdWRlICJK
U1N0cmluZy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU1dBU01Nb2R1
bGUuaCIKICNpbmNsdWRlICJQYXJzZXIuaCIKICNpbmNsdWRlICJTb3VyY2VQcm92aWRlci5oIgog
I2luY2x1ZGUgIlN0cnVjdHVyZS5oIgpAQCAtNTcsNiArNTgsMTMgQEAgc3RhdGljIFVubGlua2Vk
RnVuY3Rpb25Db2RlQmxvY2sqIGdlbmVyYXRlRnVuY3Rpb25Db2RlQmxvY2soCiAgICAgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxl
ck1vZGUgcHJvZmlsZXJNb2RlLAogICAgIFVubGlua2VkRnVuY3Rpb25LaW5kIGZ1bmN0aW9uS2lu
ZCwgUGFyc2VyRXJyb3ImIGVycm9yKQogeworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBp
ZiAoZXhlY3V0YWJsZS0+aXNXZWJBc3NlbWJseUZ1bmN0aW9uKCkpIHsKKyAgICAgICAgVW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jayogcmVzdWx0ID0gVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6
Y3JlYXRlKCZ2bSwgRnVuY3Rpb25Db2RlLCBFeGVjdXRhYmxlSW5mbyhmYWxzZSwgZmFsc2UsIGZh
bHNlLCBmYWxzZSwgZmFsc2UsIGV4ZWN1dGFibGUtPmNvbnN0cnVjdG9yS2luZCgpKSk7CisgICAg
ICAgIHJlc3VsdC0+c2V0TnVtUGFyYW1ldGVycygxKTsgLy8gRklYTUU6IEhhY2t5LgorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyNlbmRpZgogICAgIEpTUGFyc2VyQnVpbHRpbk1vZGUg
YnVpbHRpbk1vZGUgPSBleGVjdXRhYmxlLT5pc0J1aWx0aW5GdW5jdGlvbigpID8gSlNQYXJzZXJC
dWlsdGluTW9kZTo6QnVpbHRpbiA6IEpTUGFyc2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW47CiAg
ICAgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUgPSBleGVjdXRhYmxlLT5pc0luU3RyaWN0
Q29udGV4dCgpID8gSlNQYXJzZXJTdHJpY3RNb2RlOjpTdHJpY3QgOiBKU1BhcnNlclN0cmljdE1v
ZGU6Ok5vdFN0cmljdDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Ob2RlPiBmdW5jdGlv
biA9IHBhcnNlPEZ1bmN0aW9uTm9kZT4oCkBAIC0xMDQsMTEgKzExMiw0NSBAQCBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUoVk0qIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdAogICAgICwgbV9jb25zdHJ1Y3RBYmlsaXR5KHN0YXRpY19jYXN0PHVuc2ln
bmVkPihjb25zdHJ1Y3RBYmlsaXR5KSkKICAgICAsIG1fY29uc3RydWN0b3JLaW5kKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihub2RlLT5jb25zdHJ1Y3RvcktpbmQoKSkpCiAgICAgLCBtX2Z1bmN0aW9u
TW9kZShub2RlLT5mdW5jdGlvbk1vZGUoKSkKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAg
LCBtX2lzV2ViQXNzZW1ibHlGdW5jdGlvbihmYWxzZSkKKyNlbmRpZgogewogICAgIEFTU0VSVCht
X2NvbnN0cnVjdG9yS2luZCA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obm9kZS0+Y29uc3RydWN0
b3JLaW5kKCkpKTsKICAgICBtX3BhcmVudFNjb3BlVERaVmFyaWFibGVzLnN3YXAocGFyZW50U2Nv
cGVURFpWYXJpYWJsZXMpOwogfQogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKFZNKiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBzb3VyY2VM
ZW5ndGgsIEpTV0FTTU1vZHVsZSogbW9kdWxlLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCB1bnNp
Z25lZCBzdGFja0hlaWdodCkKKyAgICA6IEJhc2UoKnZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX25h
bWUoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIlt3ZWJhc3NlbWJseV0iKSkgLy8gRklYTUU6
CisgICAgLCBtX2luZmVycmVkTmFtZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiW3dlYmFz
c2VtYmx5XSIpKSAvLyBGSVhNRToKKyAgICAsIG1fZmlyc3RMaW5lT2Zmc2V0KDApCisgICAgLCBt
X2xpbmVDb3VudCgxKQorICAgICwgbV91bmxpbmtlZEZ1bmN0aW9uTmFtZVN0YXJ0KDApCisgICAg
LCBtX3VubGlua2VkQm9keVN0YXJ0Q29sdW1uKDApCisgICAgLCBtX3VubGlua2VkQm9keUVuZENv
bHVtbigwKQorICAgICwgbV9zdGFydE9mZnNldChzdGFydE9mZnNldCkKKyAgICAsIG1fc291cmNl
TGVuZ3RoKHNvdXJjZUxlbmd0aCkKKyAgICAsIG1fcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0KDApCisg
ICAgLCBtX3R5cGVQcm9maWxpbmdTdGFydE9mZnNldCgwKQorICAgICwgbV90eXBlUHJvZmlsaW5n
RW5kT2Zmc2V0KDApCisgICAgLCBtX3BhcmFtZXRlckNvdW50KDEpIC8vIEZJWE1FOgorICAgICwg
bV9mZWF0dXJlcygwKQorICAgICwgbV9pc0luU3RyaWN0Q29udGV4dChmYWxzZSkgLy8gRklYTUU6
CisgICAgLCBtX2hhc0NhcHR1cmVkVmFyaWFibGVzKGZhbHNlKQorICAgICwgbV9pc0J1aWx0aW5G
dW5jdGlvbihmYWxzZSkKKyAgICAsIG1fY29uc3RydWN0QWJpbGl0eShzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oQ29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0KSkKKyAgICAsIG1fY29uc3Ry
dWN0b3JLaW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPihDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUpKQor
ICAgICwgbV9mdW5jdGlvbk1vZGUoRnVuY3Rpb25Nb2RlOjpGdW5jdGlvbkV4cHJlc3Npb24pCisg
ICAgLCBtX2lzV2ViQXNzZW1ibHlGdW5jdGlvbih0cnVlKQorICAgICwgbV93ZWJBc3NlbWJseU1v
ZHVsZSgqdm0sIHRoaXMsIG1vZHVsZSkKKyAgICAsIG1fd2ViQXNzZW1ibHlGdW5jdGlvbkluZGV4
KGZ1bmN0aW9uSW5kZXgpCisgICAgLCBtX3dlYkFzc2VtYmx5U3RhY2tIZWlnaHQoc3RhY2tIZWln
aHQpCit7Cit9CisjZW5kaWYKKwogdm9pZCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7CkBAIC0xMTcsNiArMTU5LDEwIEBAIHZvaWQgVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fY29kZUJsb2Nr
Rm9yQ2FsbCk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9y
Q29uc3RydWN0KTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9uYW1lVmFsdWUp
OworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBpZiAodGhpc09iamVjdC0+bV9pc1dlYkFz
c2VtYmx5RnVuY3Rpb24pCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3dl
YkFzc2VtYmx5TW9kdWxlKTsKKyNlbmRpZgogfQogCiBGdW5jdGlvbkV4ZWN1dGFibGUqIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpsaW5rKFZNJiB2bSwgY29uc3QgU291cmNlQ29kZSYgb3du
ZXJTb3VyY2UsIGludCBvdmVycmlkZUxpbmVOdW1iZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCmluZGV4IGFlODQyMmQxMjAzM2Q0
ZWMzN2RlMjRlZjU3NmY3Y2YyYzJhZDRkZTguLjI4MWJjYTVmNDdlMmQyOTBjMDQyOWU3MzlmMjZh
ZjcwM2FkNTY0MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5oCkBAIC01MSw2ICs1MSw5IEBAIGNsYXNzIERlYnVnZ2VyOwogY2xh
c3MgRnVuY3Rpb25Cb2R5Tm9kZTsKIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKIGNsYXNzIEpT
U2NvcGU7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorY2xhc3MgSlNXQVNNTW9kdWxlOworI2Vu
ZGlmCiBjbGFzcyBQYXJzZXJFcnJvcjsKIGNsYXNzIFNjcmlwdEV4ZWN1dGFibGU7CiBjbGFzcyBT
b3VyY2VDb2RlOwpAQCAtMTE2LDYgKzExOSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBp
bnN0YW5jZTsKICAgICB9CiAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgc3RhdGljIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBjcmVhdGUoVk0qIHZtLCB1bnNpZ25lZCBzdGFydE9m
ZnNldCwgdW5zaWduZWQgc291cmNlTGVuZ3RoLCBKU1dBU01Nb2R1bGUqIG1vZHVsZSwgdW5zaWdu
ZWQgZnVuY3Rpb25JbmRleCwgdW5zaWduZWQgc3RhY2tIZWlnaHQpCisgICAgeworICAgICAgICBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4odm0tPmhlYXApKQorICAgICAgICBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSh2bSwgdm0tPnVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlU3RydWN0dXJlLmdldCgpLCBzdGFydE9mZnNldCwgc291cmNlTGVuZ3RoLCBtb2R1bGUsIGZ1
bmN0aW9uSW5kZXgsIHN0YWNrSGVpZ2h0KTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0
aW9uKCp2bSk7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9CisjZW5kaWYKKwogICAg
IGNvbnN0IElkZW50aWZpZXImIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KICAgICBj
b25zdCBJZGVudGlmaWVyJiBpbmZlcnJlZE5hbWUoKSBjb25zdCB7IHJldHVybiBtX2luZmVycmVk
TmFtZTsgfQogICAgIEpTU3RyaW5nKiBuYW1lVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX25hbWVW
YWx1ZS5nZXQoKTsgfQpAQCAtMTY2LDkgKzE3OSwxOCBAQCBwdWJsaWM6CiAgICAgQ29uc3RydWN0
QWJpbGl0eSBjb25zdHJ1Y3RBYmlsaXR5KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29u
c3RydWN0QWJpbGl0eT4obV9jb25zdHJ1Y3RBYmlsaXR5KTsgfQogICAgIGJvb2wgaXNDbGFzc0Nv
bnN0cnVjdG9yRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBjb25zdHJ1Y3RvcktpbmQoKSAhPSBD
b25zdHJ1Y3RvcktpbmQ6Ok5vbmU7IH0KICAgICBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50KiBw
YXJlbnRTY29wZVREWlZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJuICZtX3BhcmVudFNjb3BlVERa
VmFyaWFibGVzOyB9CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGJvb2wgaXNXZWJBc3Nl
bWJseUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc1dlYkFzc2VtYmx5RnVuY3Rpb247IH0K
KyAgICBKU1dBU01Nb2R1bGUqIHdlYkFzc2VtYmx5TW9kdWxlKCkgY29uc3QgeyByZXR1cm4gbV93
ZWJBc3NlbWJseU1vZHVsZS5nZXQoKTsgfQorICAgIHVuc2lnbmVkIHdlYkFzc2VtYmx5RnVuY3Rp
b25JbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fd2ViQXNzZW1ibHlGdW5jdGlvbkluZGV4OyB9Cisg
ICAgdW5zaWduZWQgd2ViQXNzZW1ibHlTdGFja0hlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fd2Vi
QXNzZW1ibHlTdGFja0hlaWdodDsgfQorI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUoVk0qLCBTdHJ1Y3R1cmUqLCBjb25zdCBTb3VyY2VDb2RlJiwgUmVm
UHRyPFNvdXJjZVByb3ZpZGVyPiYmIHNvdXJjZU92ZXJyaWRlLCBGdW5jdGlvbkJvZHlOb2RlKiwg
VW5saW5rZWRGdW5jdGlvbktpbmQsIENvbnN0cnVjdEFiaWxpdHksIFZhcmlhYmxlRW52aXJvbm1l
bnQmKTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUoVk0qLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgc291
cmNlTGVuZ3RoLCBKU1dBU01Nb2R1bGUqLCB1bnNpZ25lZCBmdW5jdGlvbkluZGV4LCB1bnNpZ25l
ZCBzdGFja0hlaWdodCk7CisjZW5kaWYKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDYWxsOwogICAgIFdyaXRlQmFycmllcjxVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsKIApAQCAtMTk4LDYg
KzIyMCwxMiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fY29uc3RydWN0QWJpbGl0eTogMTsK
ICAgICB1bnNpZ25lZCBtX2NvbnN0cnVjdG9yS2luZCA6IDI7CiAgICAgdW5zaWduZWQgbV9mdW5j
dGlvbk1vZGUgOiAxOyAvLyBGdW5jdGlvbk1vZGUKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisg
ICAgdW5zaWduZWQgbV9pc1dlYkFzc2VtYmx5RnVuY3Rpb24gOiAxOworICAgIFdyaXRlQmFycmll
cjxKU1dBU01Nb2R1bGU+IG1fd2ViQXNzZW1ibHlNb2R1bGU7CisgICAgdW5zaWduZWQgbV93ZWJB
c3NlbWJseUZ1bmN0aW9uSW5kZXg7CisgICAgdW5zaWduZWQgbV93ZWJBc3NlbWJseVN0YWNrSGVp
Z2h0OworI2VuZGlmCiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
aW5kZXggNTY0MjJiMThhMjQ2NTA4NmY4MDY5NDI4MGRhMzY3NjAwMmU2YzVlNC4uYTQ1NmU5ZjRh
YWUyNmMyMjlkOTlkYWJlYjU3MjA2YjE4OWJlZmFkNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTE0NjAsNiArMTQ2MCwxMyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjphdHRlbXB0VG9JbmxpbmVDYWxsKE5vZGUqIGNhbGxUYXJnZXRO
b2RlLCBpbnQgcmVzdWx0T3BlcmFuZAogICAgIGlmICghaW5saW5pbmdCYWxhbmNlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGlmIChF
eGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxlZS5leGVjdXRhYmxlKCkpIHsKKyAgICAg
ICAgaWYgKGV4ZWN1dGFibGUtPmlzV2ViQXNzZW1ibHlGdW5jdGlvbigpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyNlbmRpZgorCiAgICAgYm9vbCBkaWRJbnNlcnRDaGVja3Mg
PSBmYWxzZTsKICAgICBhdXRvIGluc2VydENoZWNrc1dpdGhBY2NvdW50aW5nID0gWyZdICgpIHsK
ICAgICAgICAgaW5zZXJ0Q2hlY2tzKG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAppbmRleCA2ZmU3OTJiN2U4NDRlNmM0
MDBhMmYyYTJjNGNlNTM0ODA4NWY4MTEzLi5hMTQ0MWY3NDk1Y2RmZGM3MDU1NTBjNmVjMzlmNWNi
NTVmNzEzMzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
U3RhY2tWaXNpdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
U3RhY2tWaXNpdG9yLmNwcApAQCAtMTI0LDYgKzEyNCw5IEBAIHZvaWQgU3RhY2tWaXNpdG9yOjpy
ZWFkTm9uSW5saW5lZEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlT3JpZ2luKiBjb2Rl
T3JpCiAgICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAg
ICAgbV9mcmFtZS5tX2J5dGVjb2RlT2Zmc2V0ID0gIW1fZnJhbWUuY29kZUJsb2NrKCkgPyAwCiAg
ICAgICAgIDogY29kZU9yaWdpbiA/IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCisgICAgICAgIDogY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+b3duZXJF
eGVjdXRhYmxlKCktPmlzV2ViQXNzZW1ibHlGdW5jdGlvbigpID8gMAorI2VuZGlmCiAgICAgICAg
IDogY2FsbEZyYW1lLT5sb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKTsKICNpZiBFTkFCTEUoREZH
X0pJVCkKICAgICBtX2ZyYW1lLm1faW5saW5lQ2FsbEZyYW1lID0gMDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklURGlzYXNzZW1ibGVyLmNwcAppbmRleCAwNGUxYjRkNDllOTc5N2Ez
OTQ3MDg2NWQyMzk4NzkyNmMzZTM5N2IyLi42ZmU0NmJlZDFkZDdlOWUzNTM5MmM2OGMzMWJmODMy
ZWJhMWI1NmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERpc2Fz
c2VtYmxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREaXNhc3NlbWJs
ZXIuY3BwCkBAIC01MSwxNCArNTEsMTggQEAgSklURGlzYXNzZW1ibGVyOjp+SklURGlzYXNzZW1i
bGVyKCkKIHZvaWQgSklURGlzYXNzZW1ibGVyOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpCiB7CiAgICAgZHVtcEhlYWRlcihvdXQsIGxpbmtCdWZmZXIpOwot
ICAgIGR1bXBEaXNhc3NlbWJseShvdXQsIGxpbmtCdWZmZXIsIG1fc3RhcnRPZkNvZGUsIG1fbGFi
ZWxGb3JCeXRlY29kZUluZGV4SW5NYWluUGF0aFswXSk7Ci0gICAgCi0gICAgZHVtcEZvckluc3Ry
dWN0aW9ucyhvdXQsIGxpbmtCdWZmZXIsICIgICAgIiwgbV9sYWJlbEZvckJ5dGVjb2RlSW5kZXhJ
bk1haW5QYXRoLCBmaXJzdFNsb3dMYWJlbCgpKTsKLSAgICBvdXQucHJpbnQoIiAgICAoRW5kIE9m
IE1haW4gUGF0aClcbiIpOwotICAgIGR1bXBGb3JJbnN0cnVjdGlvbnMob3V0LCBsaW5rQnVmZmVy
LCAiICAgIChTKSAiLCBtX2xhYmVsRm9yQnl0ZWNvZGVJbmRleEluU2xvd1BhdGgsIG1fZW5kT2ZT
bG93UGF0aCk7Ci0gICAgb3V0LnByaW50KCIgICAgKEVuZCBPZiBTbG93IFBhdGgpXG4iKTsKIAot
ICAgIGR1bXBEaXNhc3NlbWJseShvdXQsIGxpbmtCdWZmZXIsIG1fZW5kT2ZTbG93UGF0aCwgbV9l
bmRPZkNvZGUpOworICAgIGlmICghbV9sYWJlbEZvckJ5dGVjb2RlSW5kZXhJbk1haW5QYXRoLmlz
RW1wdHkoKSkgeworICAgICAgICBkdW1wRGlzYXNzZW1ibHkob3V0LCBsaW5rQnVmZmVyLCBtX3N0
YXJ0T2ZDb2RlLCBtX2xhYmVsRm9yQnl0ZWNvZGVJbmRleEluTWFpblBhdGhbMF0pOworCisgICAg
ICAgIGR1bXBGb3JJbnN0cnVjdGlvbnMob3V0LCBsaW5rQnVmZmVyLCAiICAgICIsIG1fbGFiZWxG
b3JCeXRlY29kZUluZGV4SW5NYWluUGF0aCwgZmlyc3RTbG93TGFiZWwoKSk7CisgICAgICAgIG91
dC5wcmludCgiICAgIChFbmQgT2YgTWFpbiBQYXRoKVxuIik7CisgICAgICAgIGR1bXBGb3JJbnN0
cnVjdGlvbnMob3V0LCBsaW5rQnVmZmVyLCAiICAgIChTKSAiLCBtX2xhYmVsRm9yQnl0ZWNvZGVJ
bmRleEluU2xvd1BhdGgsIG1fZW5kT2ZTbG93UGF0aCk7CisgICAgICAgIG91dC5wcmludCgiICAg
IChFbmQgT2YgU2xvdyBQYXRoKVxuIik7CisKKyAgICAgICAgZHVtcERpc2Fzc2VtYmx5KG91dCwg
bGlua0J1ZmZlciwgbV9lbmRPZlNsb3dQYXRoLCBtX2VuZE9mQ29kZSk7CisgICAgfSBlbHNlCisg
ICAgICAgIGR1bXBEaXNhc3NlbWJseShvdXQsIGxpbmtCdWZmZXIsIG1fc3RhcnRPZkNvZGUsIG1f
ZW5kT2ZDb2RlKTsKIH0KIAogdm9pZCBKSVREaXNhc3NlbWJsZXI6OmR1bXAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggMzE4NzE4YTdmYTEwYmIyMzcxNWI0
Nzg4MWJhMDgwNGYyYjA3ZmFhNy4uMjU0YzU4MTI2ZDJhMjcxMGU4MTg2NjAzYzQ2ODU5NWViZjI4
ZjdkMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTY2Miw2ICs2NjIsMTAgQEAgcHJvdGVjdGVk
OgogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImhhc0Jhc2ljQmxvY2tFeGVjdXRlZCIsIGZ1bmN0
aW9uSGFzQmFzaWNCbG9ja0V4ZWN1dGVkLCAyKTsKIAogICAgICAgICBhZGRGdW5jdGlvbih2bSwg
ImVuYWJsZUV4Y2VwdGlvbkZ1enoiLCBmdW5jdGlvbkVuYWJsZUV4Y2VwdGlvbkZ1enosIDApOwor
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICAgICBhZGRGdW5jdGlvbih2bSwgImxvYWRX
ZWJBc3NlbWJseSIsIGZ1bmN0aW9uTG9hZFdlYkFzc2VtYmx5LCAzKTsKKyNlbmRpZgogICAgICAg
ICAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAibG9h
ZFdlYkFzc2VtYmx5IiwgZnVuY3Rpb25Mb2FkV2ViQXNzZW1ibHksIDEpOwpAQCAtMTIwNyw4ICsx
MjExLDE3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2FkV2ViQXNz
ZW1ibHkoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4
ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKCJDb3VsZCBub3Qgb3BlbiBmaWxlLiIpKSkpOwogICAgIFJlZlB0cjxXZWJBc3NlbWJseVNv
dXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciA9IFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXI6
OmNyZWF0ZShyZWludGVycHJldF9jYXN0PFZlY3Rvcjx1aW50OF90PiY+KGJ1ZmZlciksIGZpbGVO
YW1lKTsKICAgICBTb3VyY2VDb2RlIHNvdXJjZShzb3VyY2VQcm92aWRlcik7CisKKyAgICBKU1Zh
bHVlIGVudlZhbHVlID0gZXhlYy0+YXJndW1lbnQoMSk7CisgICAgUkVMRUFTRV9BU1NFUlQoZW52
VmFsdWUuaXNPYmplY3QoKSk7CisgICAgSlNPYmplY3QqIGVudiA9IGVudlZhbHVlLmdldE9iamVj
dCgpOworCisgICAgSlNWYWx1ZSBhcnJheUJ1ZmZlclZhbHVlID0gZXhlYy0+YXJndW1lbnQoMik7
CisgICAgSlNBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIgPSBqc0R5bmFtaWNDYXN0PEpTQXJyYXlC
dWZmZXIqPihhcnJheUJ1ZmZlclZhbHVlKTsKKyAgICBSRUxFQVNFX0FTU0VSVChhcnJheUJ1ZmZl
cik7CisKICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIEpTV0FTTU1vZHVsZSogbW9kdWxl
ID0gcGFyc2VXZWJBc3NlbWJseShleGVjLCBzb3VyY2UsIGVycm9yTWVzc2FnZSk7CisgICAgSlNX
QVNNTW9kdWxlKiBtb2R1bGUgPSBwYXJzZVdlYkFzc2VtYmx5KGV4ZWMsIHNvdXJjZSwgZW52LCBh
cnJheUJ1ZmZlciwgZXJyb3JNZXNzYWdlKTsKICAgICBpZiAoIW1vZHVsZSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0
ZVN5bnRheEVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZSkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKG1vZHVsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1NvdXJjZUNvZGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VDb2Rl
LmNwcAppbmRleCA4ZWYxNjhkZWFhOTJjMzVhODFhNDI3ZDg2NjA4OWMwMTg5NTJjZjIxLi4zMWU5
OTUxMDE4ZjQxOGJlNjdmZDIzYWM2N2MyZTk5Njk0ZmMxNTYyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZS5jcHAKQEAgLTM2LDYgKzM2LDExIEBAIENTdHJpbmcg
U291cmNlQ29kZTo6dG9VVEY4KCkgY29uc3QKICAgICBpZiAoIW1fcHJvdmlkZXIpCiAgICAgICAg
IHJldHVybiBDU3RyaW5nKCIiLCAwKTsKICAgICAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisg
ICAgaWYgKCFtX3Byb3ZpZGVyLT5pc1N0cmluZ1NvdXJjZSgpKSAvLyBGSVhNRTogaGFja3kKKyAg
ICAgICAgcmV0dXJuIENTdHJpbmcoIiIsIDApOworI2VuZGlmCisKICAgICByZXR1cm4gbV9wcm92
aWRlci0+c291cmNlKCkuaW1wbCgpLT51dGY4Rm9yUmFuZ2UobV9zdGFydENoYXIsIG1fZW5kQ2hh
ciAtIG1fc3RhcnRDaGFyKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Tb3VyY2VQcm92aWRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9T
b3VyY2VQcm92aWRlci5oCmluZGV4IGMyNjNhMTM5MDU1NDM2NzkwODI5NjhmMDQ5ZGRiMWFhZmNj
ZjcxMGIuLjgwNWRiOTY5ODJjZmIwZGU4MGI3ZGI1NzcyZjQ5YmNjNmE5YzczMjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmgKQEAgLTQzLDYgKzQz
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVh
bCB+U291cmNlUHJvdmlkZXIoKTsKIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICAgICAg
dmlydHVhbCBib29sIGlzU3RyaW5nU291cmNlKCkgY29uc3QgPSAwOworI2VuZGlmCiAgICAgICAg
IHZpcnR1YWwgY29uc3QgU3RyaW5nJiBzb3VyY2UoKSBjb25zdCA9IDA7CiAgICAgICAgIFN0cmlu
ZyBnZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0CiAgICAgICAgIHsKQEAgLTc5LDYg
KzgyLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU3RyaW5nU291cmNlUHJvdmlkZXIoc291cmNlLCB1cmwsIHN0YXJ0UG9zaXRpb24pKTsKICAg
ICAgICAgfQogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNTdHJpbmdTb3VyY2UoKSBjb25zdCBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorI2VuZGlmCisKICAgICAgICAgdmlydHVhbCBjb25zdCBT
dHJpbmcmIHNvdXJjZSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiBtX3NvdXJjZTsKQEAgLTEwMiw2ICsxMTIsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyKGRh
dGEsIHVybCkpOwogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCBib29sIGlzU3RyaW5nU291
cmNlKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisKICAgICAgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIHNvdXJjZSgpIGNv
bnN0IG92ZXJyaWRlCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX3NvdXJjZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKaW5kZXggN2FjNjRi
ZjRjYmNkZThjYjIxZGE0MzNiZDIxZDQ2MzBlMjk0ODExYy4uODA2MDRmZmY3NjNlODJlNmZjZDRm
OWU4NGQwMjg4YmJhZWZhMDMyMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5jcHAKQEAgLTMyLDEwICszMiwxMiBAQAogI2luY2x1ZGUgIkpJVC5oIgogI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uTmFtZVNjb3BlLmgiCisj
aW5jbHVkZSAiSlNXQVNNTW9kdWxlLmgiCiAjaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50LmgiCiAj
aW5jbHVkZSAiUGFyc2VyLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJEYXRhYmFzZS5oIgogI2luY2x1
ZGUgIlR5cGVQcm9maWxlci5oIgorI2luY2x1ZGUgIldBU01GdW5jdGlvblBhcnNlci5oIgogI2lu
Y2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtNjMsNiArNjUsMTMgQEAgdm9pZCBF
eGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlKCkKICAgICBtX251bVBhcmFtZXRlcnNGb3JDb25zdHJ1
Y3QgPSBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQ7CiB9CiAKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCitib29sIEV4ZWN1dGFibGVCYXNlOjppc1dlYkFzc2VtYmx5RnVuY3Rpb24oKSBjb25z
dAoreworICAgIHJldHVybiBpc0Z1bmN0aW9uRXhlY3V0YWJsZSgpICYmIGpzQ2FzdDxjb25zdCBG
dW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKS0+aXNXZWJBc3NlbWJseUZ1bmN0aW9uKCk7Cit9Cisj
ZW5kaWYKKwogI2lmIEVOQUJMRShERkdfSklUKQogSW50cmluc2ljIEV4ZWN1dGFibGVCYXNlOjpp
bnRyaW5zaWMoKSBjb25zdAogewpAQCAtMjQ3LDYgKzI1NiwxOSBAQCBSZWZQdHI8Q29kZUJsb2Nr
PiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdDb2RlQmxvY2tGb3IoCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBpZiAoZXhlY3V0YWJs
ZS0+aXNXZWJBc3NlbWJseUZ1bmN0aW9uKCkpIHsKKyAgICAgICAgU291cmNlUHJvdmlkZXIqIHBy
b3ZpZGVyID0gZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKTsKKyAgICAgICAgdW5zaWdu
ZWQgc291cmNlT2Zmc2V0ID0gZXhlY3V0YWJsZS0+c291cmNlKCkuc3RhcnRPZmZzZXQoKTsKKyAg
ICAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSBleGVjdXRhYmxlLT5zb3VyY2UoKS5zdGFydENv
bHVtbigpOworCisgICAgICAgIFJlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGFkb3B0UmVm
KG5ldyBGdW5jdGlvbkNvZGVCbG9jayhleGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2Nv
cGUsIHByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIHN0YXJ0Q29sdW1uKSk7CisgICAgICAgIFdBU01G
dW5jdGlvblBhcnNlcjo6Z2VuZXJhdGVDb2RlKHZtLCBjb2RlQmxvY2suZ2V0KCksIGV4ZWN1dGFi
bGUtPm1fdW5saW5rZWRFeGVjdXRhYmxlLT53ZWJBc3NlbWJseU1vZHVsZSgpLCBleGVjdXRhYmxl
LT5zb3VyY2UoKSwgZXhlY3V0YWJsZS0+bV91bmxpbmtlZEV4ZWN1dGFibGUtPndlYkFzc2VtYmx5
RnVuY3Rpb25JbmRleCgpLCBleGVjdXRhYmxlLT5tX3VubGlua2VkRXhlY3V0YWJsZS0+c3RhcnRP
ZmZzZXQoKSwgZXhlY3V0YWJsZS0+bV91bmxpbmtlZEV4ZWN1dGFibGUtPndlYkFzc2VtYmx5U3Rh
Y2tIZWlnaHQoKSk7CisgICAgICAgIGNvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsKCk7CisgICAg
ICAgIHJldHVybiBjb2RlQmxvY2s7CisgICAgfQorI2VuZGlmCisKICAgICAvLyBQYXJzaW5nIHJl
dmVhbHMgd2hldGhlciBvdXIgZnVuY3Rpb24gdXNlcyBmZWF0dXJlcyB0aGF0IHJlcXVpcmUgYSBz
ZXBhcmF0ZSBmdW5jdGlvbiBuYW1lIG9iamVjdCBpbiB0aGUgc2NvcGUgY2hhaW4uCiAgICAgLy8g
QmUgc3VyZSB0byBhZGQgdGhpcyBzY29wZSBiZWZvcmUgbGlua2luZyB0aGUgYnl0ZWNvZGUgYmVj
YXVzZSB0aGlzIHNjb3BlIHdpbGwgY2hhbmdlIHRoZSByZXNvbHV0aW9uIGRlcHRoIG9mIG5vbi1s
b2NhbCB2YXJpYWJsZXMuCiAgICAgaWYgKGZ1bmN0aW9uTmFtZUlzSW5TY29wZShleGVjdXRhYmxl
LT5uYW1lKCksIGV4ZWN1dGFibGUtPmZ1bmN0aW9uTW9kZSgpKQpAQCAtMzMzLDEzICszNTUsMTkg
QEAgSlNPYmplY3QqIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb25JbXBsKAog
ICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwogICAgIH0KICAgICAKLSAgICBpZiAoT3B0aW9uczo6
dmFsaWRhdGVCeXRlY29kZSgpKQotICAgICAgICBjb2RlQmxvY2stPnZhbGlkYXRlKCk7CisjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGlmICghaXNXZWJBc3NlbWJseUZ1bmN0aW9uKCkpIHsK
KyNlbmRpZgorICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVCeXRlY29kZSgpKQorICAgICAg
ICAgICAgY29kZUJsb2NrLT52YWxpZGF0ZSgpOwogICAgIAotICAgIGlmIChPcHRpb25zOjp1c2VM
TEludCgpKQotICAgICAgICBzZXR1cExMSW50KHZtLCBjb2RlQmxvY2suZ2V0KCkpOwotICAgIGVs
c2UKLSAgICAgICAgc2V0dXBKSVQodm0sIGNvZGVCbG9jay5nZXQoKSk7CisgICAgICAgIGlmIChP
cHRpb25zOjp1c2VMTEludCgpKQorICAgICAgICAgICAgc2V0dXBMTEludCh2bSwgY29kZUJsb2Nr
LmdldCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2V0dXBKSVQodm0sIGNvZGVCbG9j
ay5nZXQoKSk7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIH0KKyNlbmRpZgogICAgIAog
ICAgIGluc3RhbGxDb2RlKGNvZGVCbG9jay5nZXQoKSk7CiAgICAgcmV0dXJuIDA7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKaW5kZXggNmVjMTEyZGJlZmM3ODMw
ZmM1YWNlMjBlZDA1NDg5MTM2N2QxYjZiNC4uMTI2YzY4YjMyODEzNDRmODcwNGRhMjI5M2ZhZWQy
YjBhNzAyZTRiMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
aApAQCAtOTAsMTUgKzkwLDE1IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgQ29kZUJsb2NrSGFz
aCBoYXNoRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpIGNvbnN0OwogCi0gICAgYm9vbCBpc0V2
YWxFeGVjdXRhYmxlKCkKKyAgICBib29sIGlzRXZhbEV4ZWN1dGFibGUoKSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuIHR5cGUoKSA9PSBFdmFsRXhlY3V0YWJsZVR5cGU7CiAgICAgfQotICAg
IGJvb2wgaXNGdW5jdGlvbkV4ZWN1dGFibGUoKQorICAgIGJvb2wgaXNGdW5jdGlvbkV4ZWN1dGFi
bGUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGUoKSA9PSBGdW5jdGlvbkV4ZWN1
dGFibGVUeXBlOwogICAgIH0KLSAgICBib29sIGlzUHJvZ3JhbUV4ZWN1dGFibGUoKQorICAgIGJv
b2wgaXNQcm9ncmFtRXhlY3V0YWJsZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gdHlw
ZSgpID09IFByb2dyYW1FeGVjdXRhYmxlVHlwZTsKICAgICB9CkBAIC0xMDksNiArMTA5LDEwIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwgPT0gTlVNX1BB
UkFNRVRFUlNfSVNfSE9TVDsKICAgICB9CiAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAg
Ym9vbCBpc1dlYkFzc2VtYmx5RnVuY3Rpb24oKSBjb25zdDsKKyNlbmRpZgorCiAgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90bykgeyByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG8sIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7IH0KICAgICAgICAgCiAgICAgdm9pZCBjbGVhckNvZGUoKTsKQEAgLTU2Miw3ICs1NjYs
NyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgICAg
ICAKLSAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlKCkK
KyAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlKCkgY29u
c3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS5nZXQoKTsKICAg
ICB9CkBAIC02MzEsNiArNjM1LDkgQEAgcHVibGljOgogICAgIEZ1bmN0aW9uTW9kZSBmdW5jdGlv
bk1vZGUoKSB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+ZnVuY3Rpb25Nb2RlKCk7IH0K
ICAgICBib29sIGlzQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4
ZWN1dGFibGUtPmlzQnVpbHRpbkZ1bmN0aW9uKCk7IH0KICAgICBDb25zdHJ1Y3RBYmlsaXR5IGNv
bnN0cnVjdEFiaWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkRXhlY3V0YWJsZS0+Y29u
c3RydWN0QWJpbGl0eSgpOyB9CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGJvb2wgaXNX
ZWJBc3NlbWJseUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUt
PmlzV2ViQXNzZW1ibHlGdW5jdGlvbigpOyB9CisjZW5kaWYKICAgICBib29sIGlzQ2xhc3NDb25z
dHJ1Y3RvckZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPmlz
Q2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9uKCk7IH0KICAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1l
KCkgeyByZXR1cm4gbV91bmxpbmtlZEV4ZWN1dGFibGUtPm5hbWUoKTsgfQogICAgIGNvbnN0IElk
ZW50aWZpZXImIGluZmVycmVkTmFtZSgpIHsgcmV0dXJuIG1fdW5saW5rZWRFeGVjdXRhYmxlLT5p
bmZlcnJlZE5hbWUoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
SlNXQVNNTW9kdWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV0FTTU1vZHVs
ZS5jcHAKaW5kZXggNGUyYjBjMTcxZmNmZWMyMGMxZGYwMWQyNTE4ZmQ5MDY1NmIzMzE5Yy4uNGNj
MjI0M2E5NWJlNzFlYWNlYWVlNTRkM2RkZmE4Y2E1MGFiZDA2NyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9KU1dBU01Nb2R1bGUuY3BwCkBAIC0yOCwyMCArMjgsNDkgQEAKIAogI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNs
dWRlICJKU0NlbGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1ZGUg
IkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVqZWN0LmgiCiAjaW5jbHVkZSAiU2xvdFZp
c2l0b3JJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNX
QVNNTW9kdWxlOjpzX2luZm8gPSB7ICJXQVNNTW9kdWxlIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JF
QVRFX01FVEhPRF9UQUJMRShKU1dBU01Nb2R1bGUpIH07CiAKLXZvaWQgSlNXQVNNTW9kdWxlOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCitKU1dBU01N
b2R1bGU6OkpTV0FTTU1vZHVsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0FycmF5
QnVmZmVyKiBhcnJheUJ1ZmZlcikKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1f
YXJyYXlCdWZmZXIodm0sIHRoaXMsIGFycmF5QnVmZmVyKQoreworfQorCitKU0Z1bmN0aW9uKiBK
U1dBU01Nb2R1bGU6OmZ1bmN0aW9uKHNpemVfdCBmdW5jdGlvbkluZGV4KSBjb25zdAoreworICAg
IHJldHVybiBtX2Z1bmN0aW9uc1tmdW5jdGlvbkluZGV4XS5nZXQoKTsKK30KKworLy8gY29uc3Qg
dm9pZCogSlNXQVNNTW9kdWxlOjphcnJheUJ1ZmZlckRhdGEoKSBjb25zdAorLy8geworLy8gICAg
IHJldHVybiBtX2FycmF5QnVmZmVyLT5pbXBsKCktPmRhdGEoKTsKKy8vIH0KKwordm9pZCBKU1dB
U01Nb2R1bGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIEpTV0FTTU1vZHVsZSogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1dBU01Nb2R1bGUqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5K
U1dBU01Nb2R1bGU6On5KU1dBU01Nb2R1bGUoKTsKK30KKwordm9pZCBKU1dBU01Nb2R1bGU6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBK
U1dBU01Nb2R1bGUqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1dBU01Nb2R1bGUqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICBmb3IgKGF1
dG8gZnVuY3Rpb24gOiB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9ucykKICAgICAgICAgdmlzaXRvci5h
cHBlbmQoJmZ1bmN0aW9uKTsKKyAgICBmb3IgKGF1dG8gaW1wb3J0ZWRGdW5jdGlvbiA6IHRoaXNP
YmplY3QtPm1faW1wb3J0ZWRGdW5jdGlvbnMpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpbXBv
cnRlZEZ1bmN0aW9uKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcnJheUJ1
ZmZlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vSlNXQVNNTW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9KU1dBU01Nb2R1bGUuaAppbmRleCA4YWQ5ZTNiODkxYWU4NTYzZTY4MDc5M2I4N2E5ZTUxNGQ2
OTEwNzVhLi5mMDI0YmE2OTlmMDQxMzczOTUxMWUzMGNiNDIwYjUwY2EyZDNhNTk5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dBU01Nb2R1bGUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dBU01Nb2R1bGUuaApAQCAtMjksMTYgKzI5LDMwIEBA
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmpl
Y3QuaCIKKyNpbmNsdWRlICJXQVNNRm9ybWF0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBKU1dBU01Nb2R1bGUgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgor
ICAgIHN0cnVjdCBHbG9iYWxEYXRhIHsKKyAgICAgICAgR2xvYmFsRGF0YSgpCisgICAgICAgICAg
ICA6IGRhdGEobnVsbHB0cikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIH5HbG9iYWxE
YXRhKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGRhdGEgIT0gbnVsbHB0cikKKyAgICAg
ICAgICAgICAgICBmYXN0RnJlZShkYXRhKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkKiBkYXRh
OworICAgIH07CisKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAKLSAg
ICBzdGF0aWMgSlNXQVNNTW9kdWxlKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICBzdGF0aWMgSlNXQVNNTW9kdWxlKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIpCiAgICAgewotICAgICAgICBKU1dB
U01Nb2R1bGUqIG1vZHVsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV0FTTU1vZHVs
ZT4odm0uaGVhcCkpIEpTV0FTTU1vZHVsZSh2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgSlNXQVNN
TW9kdWxlKiBtb2R1bGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dBU01Nb2R1bGU+
KHZtLmhlYXApKSBKU1dBU01Nb2R1bGUodm0sIHN0cnVjdHVyZSwgYXJyYXlCdWZmZXIpOwogICAg
ICAgICBtb2R1bGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICAgICAgcmV0dXJuIG1vZHVsZTsK
ICAgICB9CkBAIC01MCwxNSArNjQsNTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwganNOdWxsKCksIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKKyAgICBWZWN0b3I8dWludDMy
X3Q+JiBpMzJDb25zdGFudHMoKSB7IHJldHVybiBtX2kzMkNvbnN0YW50czsgfQorICAgIFZlY3Rv
cjxmbG9hdD4mIGYzMkNvbnN0YW50cygpIHsgcmV0dXJuIG1fZjMyQ29uc3RhbnRzOyB9CisgICAg
VmVjdG9yPGRvdWJsZT4mIGY2NENvbnN0YW50cygpIHsgcmV0dXJuIG1fZjY0Q29uc3RhbnRzOyB9
CisgICAgVmVjdG9yPFdBU01TaWduYXR1cmU+JiBzaWduYXR1cmVzKCkgeyByZXR1cm4gbV9zaWdu
YXR1cmVzOyB9CisgICAgVmVjdG9yPFdBU01GdW5jdGlvbkltcG9ydD4mIGZ1bmN0aW9uSW1wb3J0
cygpIHsgcmV0dXJuIG1fZnVuY3Rpb25JbXBvcnRzOyB9CisgICAgVmVjdG9yPFdBU01GdW5jdGlv
bkltcG9ydFNpZ25hdHVyZT4mIGZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlcygpIHsgcmV0dXJuIG1f
ZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzOyB9CisgICAgVmVjdG9yPFdBU01UeXBlPiYgZ2xvYmFs
VmFyaWFibGVUeXBlcygpIHsgcmV0dXJuIG1fZ2xvYmFsVmFyaWFibGVUeXBlczsgfQorICAgIEds
b2JhbERhdGEmIGdsb2JhbERhdGEoKSB7IHJldHVybiBtX2dsb2JhbERhdGE7IH0KKyAgICBWZWN0
b3I8Y29uc3Qgdm9pZCo+JiBnbG9iYWxWYXJpYWJsZUFkZHJlc3NlcygpIHsgcmV0dXJuIG1fZ2xv
YmFsVmFyaWFibGVBZGRyZXNzZXM7IH0KKyAgICBWZWN0b3I8V0FTTUZ1bmN0aW9uRGVjbGFyYXRp
b24+JiBmdW5jdGlvbkRlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsYXJhdGlv
bnM7IH0KKyAgICBWZWN0b3I8V0FTTUZ1bmN0aW9uUG9pbnRlclRhYmxlPiYgZnVuY3Rpb25Qb2lu
dGVyVGFibGVzKCkgeyByZXR1cm4gbV9mdW5jdGlvblBvaW50ZXJUYWJsZXM7IH0KKworICAgIGNv
bnN0IFZlY3RvcjxXQVNNU2lnbmF0dXJlPiYgc2lnbmF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1f
c2lnbmF0dXJlczsgfQorICAgIGNvbnN0IFZlY3RvcjxXQVNNRnVuY3Rpb25JbXBvcnRTaWduYXR1
cmU+JiBmdW5jdGlvbkltcG9ydFNpZ25hdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9u
SW1wb3J0U2lnbmF0dXJlczsgfQorICAgIGNvbnN0IFZlY3Rvcjx1aW50MzJfdD4mIGkzMkNvbnN0
YW50cygpIGNvbnN0IHsgcmV0dXJuIG1faTMyQ29uc3RhbnRzOyB9CisgICAgY29uc3QgVmVjdG9y
PGZsb2F0PiYgZjMyQ29uc3RhbnRzKCkgY29uc3QgeyByZXR1cm4gbV9mMzJDb25zdGFudHM7IH0K
KyAgICBjb25zdCBWZWN0b3I8ZG91YmxlPiYgZjY0Q29uc3RhbnRzKCkgY29uc3QgeyByZXR1cm4g
bV9mNjRDb25zdGFudHM7IH0KKyAgICBjb25zdCBWZWN0b3I8V0FTTVR5cGU+JiBnbG9iYWxWYXJp
YWJsZVR5cGVzKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxWYXJpYWJsZVR5cGVzOyB9CisgICAg
Y29uc3QgVmVjdG9yPGNvbnN0IHZvaWQqPiYgZ2xvYmFsVmFyaWFibGVBZGRyZXNzZXMoKSBjb25z
dCB7IHJldHVybiBtX2dsb2JhbFZhcmlhYmxlQWRkcmVzc2VzOyB9CisgICAgY29uc3QgVmVjdG9y
PFdBU01GdW5jdGlvbkRlY2xhcmF0aW9uPiYgZnVuY3Rpb25EZWNsYXJhdGlvbnMoKSBjb25zdCB7
IHJldHVybiBtX2Z1bmN0aW9uRGVjbGFyYXRpb25zOyB9CisgICAgY29uc3QgVmVjdG9yPFdBU01G
dW5jdGlvblBvaW50ZXJUYWJsZT4mIGZ1bmN0aW9uUG9pbnRlclRhYmxlcygpIGNvbnN0IHsgcmV0
dXJuIG1fZnVuY3Rpb25Qb2ludGVyVGFibGVzOyB9CisKKyAgICBWZWN0b3I8V3JpdGVCYXJyaWVy
PEpTRnVuY3Rpb24+PiYgZnVuY3Rpb25zKCkgeyByZXR1cm4gbV9mdW5jdGlvbnM7IH0KKyAgICBW
ZWN0b3I8V3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+PiYgaW1wb3J0ZWRGdW5jdGlvbnMoKSB7IHJl
dHVybiBtX2ltcG9ydGVkRnVuY3Rpb25zOyB9CisgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24oc2l6
ZV90IGZ1bmN0aW9uSW5kZXgpIGNvbnN0OworICAgIGNvbnN0IEpTQXJyYXlCdWZmZXIqIGFycmF5
QnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheUJ1ZmZlci5nZXQoKTsgfQorCisgICAgc3Rh
dGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6Ci0gICAgSlNXQVNNTW9kdWxlKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJl
KQotICAgIHsKLSAgICB9CisgICAgSlNXQVNNTW9kdWxlKFZNJiwgU3RydWN0dXJlKiwgSlNBcnJh
eUJ1ZmZlciopOworCisgICAgVmVjdG9yPHVpbnQzMl90PiBtX2kzMkNvbnN0YW50czsKKyAgICBW
ZWN0b3I8ZmxvYXQ+IG1fZjMyQ29uc3RhbnRzOworICAgIFZlY3Rvcjxkb3VibGU+IG1fZjY0Q29u
c3RhbnRzOworICAgIFZlY3RvcjxXQVNNU2lnbmF0dXJlPiBtX3NpZ25hdHVyZXM7CisgICAgVmVj
dG9yPFdBU01GdW5jdGlvbkltcG9ydD4gbV9mdW5jdGlvbkltcG9ydHM7CisgICAgVmVjdG9yPFdB
U01GdW5jdGlvbkltcG9ydFNpZ25hdHVyZT4gbV9mdW5jdGlvbkltcG9ydFNpZ25hdHVyZXM7Cisg
ICAgVmVjdG9yPFdBU01UeXBlPiBtX2dsb2JhbFZhcmlhYmxlVHlwZXM7CisgICAgR2xvYmFsRGF0
YSBtX2dsb2JhbERhdGE7CisgICAgVmVjdG9yPGNvbnN0IHZvaWQqPiBtX2dsb2JhbFZhcmlhYmxl
QWRkcmVzc2VzOworICAgIFZlY3RvcjxXQVNNRnVuY3Rpb25EZWNsYXJhdGlvbj4gbV9mdW5jdGlv
bkRlY2xhcmF0aW9uczsKKyAgICBWZWN0b3I8V0FTTUZ1bmN0aW9uUG9pbnRlclRhYmxlPiBtX2Z1
bmN0aW9uUG9pbnRlclRhYmxlczsKIAogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNGdW5jdGlv
bj4+IG1fZnVuY3Rpb25zOworICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4+IG1f
aW1wb3J0ZWRGdW5jdGlvbnM7CisgICAgV3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZmZXI+IG1fYXJy
YXlCdWZmZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dBU01Db2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XQVNNQ29kZUdlbmVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRmZTk3ODY0ZDA3ZDkw
ZTlhZTY2OTcxZTg5NjEwM2YwYTUxZWFlOGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XQVNNQ29kZUdlbmVyYXRvci5oCkBAIC0wLDAgKzEsMTIyMSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV0FT
TUNvZGVHZW5lcmF0b3JfaAorI2RlZmluZSBXQVNNQ29kZUdlbmVyYXRvcl9oCisKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJK
SVQuaCIKKyNpbmNsdWRlICJKSVREaXNhc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVm
ZmVyLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJKU1dBU01N
b2R1bGUuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiTWF4RnJhbWVFeHRl
bnRGb3JTbG93UGF0aENhbGwuaCIKKyNpbmNsdWRlICJSZWdpc3Rlci5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgSlNXQVNNTW9kdWxlOworCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBnZXRJbnRlcm5hbEZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTV0FTTU1vZHVsZSog
bW9kdWxlLCB1aW50MzJfdCBmdW5jdGlvbkluZGV4KQoreworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUobW9kdWxlLT5mdW5jdGlvbihmdW5jdGlvbkluZGV4KSk7Cit9CisKK3N0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdldEltcG9ydGVkRnVuY3Rpb24oRXhlY1N0YXRlKiwg
SlNXQVNNTW9kdWxlKiBtb2R1bGUsIHVpbnQzMl90IGZ1bmNJbXBvcnRJbmRleCkKK3sKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG1vZHVsZS0+aW1wb3J0ZWRGdW5jdGlvbnMoKVtmdW5jSW1w
b3J0SW5kZXhdLmdldCgpKTsKK30KKworLy8gc3RhdGljIGNvbnN0IHZvaWQqIEpTQ19IT1NUX0NB
TEwgZ2V0QXJyYXlCdWZmZXJEYXRhKEpTV0FTTU1vZHVsZSogbW9kdWxlKQorLy8geworLy8gICAg
IHJldHVybiBtb2R1bGUtPmFycmF5QnVmZmVyRGF0YSgpOworLy8gfQorCisvLyBGSVhNRTogSGFj
a3kuIERvIHRoaXMgcHJvcGVybHkuCisvLyBzdGF0aWMgdm9pZCBKU0NfSE9TVF9DQUxMIHRocm93
T3V0T2ZCb3VuZHNFeGNlcHRpb24oRXhlY1N0YXRlKikgeworLy8gICAgIGZwcmludGYoc3RkZXJy
LCAiT3V0LW9mLWJvdW5kcyBhY2Nlc3MuIik7CisvLyAgICAgZG91YmxlIGYgPSA0Mi4wOworLy8g
ICAgIGlmIChmID09IDQyLjApCisvLyAgICAgICAgIGV4aXQoMSk7CisvLyAgICAgcmV0dXJuOwor
Ly8gfQorCitjbGFzcyBKdW1wU2NvcGUgeworcHVibGljOgorICAgIHZvaWQganVtcChNYWNyb0Fz
c2VtYmxlciogbWFjcm9Bc3NlbWJsZXIpCisgICAgeworICAgICAgICBpZiAobV9sYWJlbC5pc1Nl
dCgpKQorICAgICAgICAgICAgbWFjcm9Bc3NlbWJsZXItPmp1bXAobV9sYWJlbCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1fanVtcExpc3QuYXBwZW5kKG1hY3JvQXNzZW1ibGVyLT5qdW1w
KCkpOworICAgIH0KKworICAgIHZvaWQgbGluayhNYWNyb0Fzc2VtYmxlciogbWFjcm9Bc3NlbWJs
ZXIpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fbGFiZWwuaXNTZXQoKSk7CisgICAgICAgIG1f
bGFiZWwgPSBtYWNyb0Fzc2VtYmxlci0+bGFiZWwoKTsKKyAgICAgICAgbV9qdW1wTGlzdC5saW5r
KG1hY3JvQXNzZW1ibGVyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIG1fbGFiZWw7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1fanVtcExpc3Q7
Cit9OworCitjbGFzcyBXQVNNQ29kZUdlbmVyYXRvciA6IHByaXZhdGUgQ0NhbGxIZWxwZXJzIHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIGludCBFeHByZXNzaW9uOworICAgIHR5cGVkZWYgaW50IFN0
YXRlbWVudDsKKyAgICB0eXBlZGVmIGludCBFeHByZXNzaW9uTGlzdDsKKyAgICB0eXBlZGVmIEp1
bXAgSnVtcDsgLy8gRklYTUU6IEJhZCBuYW1lLgorICAgIHR5cGVkZWYgTGFiZWwgTGFiZWw7Cisg
ICAgc3RydWN0IE1lbW9yeUFkZHJlc3MgeworICAgICAgICBNZW1vcnlBZGRyZXNzKHZvaWQqKSB7
IH0KKyAgICAgICAgTWVtb3J5QWRkcmVzcyhib29sIGhhc0ltbWVkaWF0ZUluZGV4LCB1aW50MzJf
dCBpbW1lZGlhdGVJbmRleCwgRXhwcmVzc2lvbiwgdWludDMyX3Qgb2Zmc2V0KQorICAgICAgICAg
ICAgOiBoYXNJbW1lZGlhdGVJbmRleChoYXNJbW1lZGlhdGVJbmRleCkKKyAgICAgICAgICAgICwg
aW1tZWRpYXRlSW5kZXgoaW1tZWRpYXRlSW5kZXgpCisgICAgICAgICAgICAsIG9mZnNldChvZmZz
ZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICBib29sIGhhc0ltbWVkaWF0ZUluZGV4
OworICAgICAgICB1aW50MzJfdCBpbW1lZGlhdGVJbmRleDsKKyAgICAgICAgdWludDMyX3Qgb2Zm
c2V0OworICAgIH07CisKKyAgICBXQVNNQ29kZUdlbmVyYXRvcihWTSogdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBjb25zdCBKU1dBU01Nb2R1bGUqIG1vZHVsZSwgdW5zaWduZWQgc3RhY2tIZWln
aHQpCisgICAgICAgIDogQ0NhbGxIZWxwZXJzKHZtLCBjb2RlQmxvY2spCisgICAgICAgICwgbV9t
b2R1bGUobW9kdWxlKQorICAgICAgICAsIG1fc3RhY2tIZWlnaHQoc3RhY2tIZWlnaHQpCisgICAg
eworICAgICAgICBtX3NwID0gMDsKKyAgICB9CisKKyAgICB2b2lkIHN0YXJ0RnVuY3Rpb24oY29u
c3QgV0FTTVNpZ25hdHVyZSYgc2lnbmF0dXJlLCB1aW50MzJfdCBudW1iZXJPZkkzMlZhcnMsIHVp
bnQzMl90IG51bWJlck9mRjMyVmFycywgdWludDMyX3QgbnVtYmVyT2ZGNjRWYXJzKQorICAgIHsK
KyAgICAgICAgaWYgKE9wdGlvbnM6OnNob3dEaXNhc3NlbWJseSgpKQorICAgICAgICAgICAgbV9k
aXNhc3NlbWJsZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEpJVERpc2Fzc2VtYmxlcj4obV9jb2RlQmxv
Y2spOworCisgICAgICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKKyAgICAgICAgICAgIG1fZGlzYXNz
ZW1ibGVyLT5zZXRTdGFydE9mQ29kZShsYWJlbCgpKTsKKworICAgICAgICAvL0ZJWE1FCisgICAg
ICAgIG1fc3RhY2tIZWlnaHQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1l
bnRSZWdpc3RlcnMoKSwgbV9zdGFja0hlaWdodCArIHNpZ25hdHVyZS5hcmd1bWVudHMuc2l6ZSgp
ICsgbnVtYmVyT2ZJMzJWYXJzICsgbnVtYmVyT2ZGMzJWYXJzICsgbnVtYmVyT2ZGNjRWYXJzKTsK
KworICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOworICAgICAgICBlbWl0UHV0SW1tZWRp
YXRlVG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIEpTU3RhY2s6OkNvZGVCbG9jayk7CisK
KyAgICAgICAgbV9iZWdpbkxhYmVsID0gbGFiZWwoKTsKKworICAgICAgICBhbGxvY2F0ZVNwYWNl
T25TdGFjaygpOworCisgICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gc2lnbmF0dXJlLmFy
Z3VtZW50cy5zaXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGFyZ0luZGV4ID0gMDsgYXJnSW5k
ZXggPCBhcmd1bWVudENvdW50OyArK2FyZ0luZGV4KSB7CisgICAgICAgICAgICBXQVNNVHlwZSB0
eXBlID0gc2lnbmF0dXJlLmFyZ3VtZW50c1thcmdJbmRleF07CisgICAgICAgICAgICBBZGRyZXNz
IGFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIChhcmdJbmRleCArIDEgKyBDYWxs
RnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKSAqIDgpOworICAgICAgICAgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgICAgICAgICBjYXNlIFdBU01UeXBlOjpJMzI6CisgICAgICAgICAgICAgICAg
bG9hZDMyKGFkZHJlc3MsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBzdG9yZTMy
KEdQUkluZm86OnJlZ1QwLCBsb2NhbEFkZHJlc3MoYXJnSW5kZXgpKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV0FTTVR5cGU6OkY2NDoKKyAgICAgICAgICAgICAg
ICBsb2FkNjQoYWRkcmVzcywgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIHVuYm94
RG91YmxlV2l0aG91dEFzc2VydGlvbnMoR1BSSW5mbzo6cmVnVDAsIEZQUkluZm86OmZwUmVnVDAp
OworICAgICAgICAgICAgICAgIHN0b3JlRG91YmxlKEZQUkluZm86OmZwUmVnVDAsIGxvY2FsQWRk
cmVzcyhhcmdJbmRleCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgc2l6ZV90IGxvY2FsSW5kZXggPSBhcmd1
bWVudENvdW50OworICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZJMzJW
YXJzOyArK2kpCisgICAgICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgbG9jYWxBZGRy
ZXNzKGxvY2FsSW5kZXgrKykpOworICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVt
YmVyT2ZGMzJWYXJzOyArK2kpCisgICAgICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwg
bG9jYWxBZGRyZXNzKGxvY2FsSW5kZXgrKykpOworICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDwgbnVtYmVyT2ZGNjRWYXJzOyArK2kpCisgICAgICAgICAgICBzdG9yZTY0KFRydXN0ZWRJ
bW02NCgwKSwgbG9jYWxBZGRyZXNzKGxvY2FsSW5kZXgrKykpOworCisgICAgICAgIG1fbnVtYmVy
T2ZMb2NhbHMgPSBhcmd1bWVudENvdW50ICsgbnVtYmVyT2ZJMzJWYXJzICsgbnVtYmVyT2ZGMzJW
YXJzICsgbnVtYmVyT2ZGNjRWYXJzOworICAgIH0KKworICAgIHZvaWQgZW5kRnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3NwKTsKKworICAgICAgICAvLyBGSVhNRTogU2tpcCBp
ZiBsYXN0IHN0bXQgaXMgYSByZXR1cm4gc3RhdGVtZW50LiBNYWtlIHN1cmUgdG8gbm90IGZhbGwg
dGhyb3VnaCB0aGUgYXJpdHkgY2hlY2suCisgICAgICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUkluZm86OnJlZ1QwKTsgLy8gRklYTUU6IFNo
b3VsZCB3ZSByZXR1cm4gdW5kZWZpbmVkPworCisgICAgICAgIGRlYWxsb2NhdGVTcGFjZU9uU3Rh
Y2soKTsKKyAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgcmV0KCk7CisK
KyAgICAgICAgLy8gbV9vdXRPZkJvdW5kc0p1bXBMaXN0LmxpbmsodGhpcyk7CisgICAgICAgIC8v
IHNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7CisgICAgICAgIC8vIG1vdmUoVHJ1c3RlZEltbVB0
cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHRocm93T3V0T2ZCb3VuZHNFeGNlcHRpb24pKSwgR1BSSW5m
bzo6bm9uQXJnR1BSMCk7CisgICAgICAgIC8vIGNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisK
KyAgICAgICAgLy8gVE9ETzogSW1wbGVtZW50IGFyaXR5IGNoZWNrCisgICAgICAgIC8vIEZJWE1F
OiBIYWNreSEKKyAgICAgICAgTGFiZWwgYXJpdHlDaGVjayA9IGxhYmVsKCk7CisgICAgICAgIHN0
b3JlOChUcnVzdGVkSW1tMzIoMCksICZtX2NvZGVCbG9jay0+bV9zaG91bGRBbHdheXNCZUlubGlu
ZWQpOworICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOworICAgICAgICBlbWl0UHV0SW1t
ZWRpYXRlVG9DYWxsRnJhbWVIZWFkZXIobV9jb2RlQmxvY2ssIEpTU3RhY2s6OkNvZGVCbG9jayk7
CisgICAgICAgIGp1bXAobV9iZWdpbkxhYmVsKTsKKworICAgICAgICBpZiAobV9kaXNhc3NlbWJs
ZXIpCisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0RW5kT2ZDb2RlKGxhYmVsKCkpOwor
CisgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sICp0aGlzLCAwLCBKSVRDb21w
aWxhdGlvbk11c3RTdWNjZWVkKTsKKworICAgICAgICBmb3IgKGF1dG8gaXRlciA9IG1fY2FsbHMu
YmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpCisgICAgICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKGl0ZXItPmZpcnN0LCBGdW5jdGlvblB0cihpdGVyLT5zZWNvbmQpKTsKKwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYWxsQ29tcGlsYXRpb25JbmZvLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICBDYWxsQ29tcGlsYXRpb25JbmZvJiBjb21waWxhdGlv
bkluZm8gPSBtX2NhbGxDb21waWxhdGlvbkluZm9baV07CisgICAgICAgICAgICBDYWxsTGlua0lu
Zm8mIGluZm8gPSAqY29tcGlsYXRpb25JbmZvLmNhbGxMaW5rSW5mbzsKKyAgICAgICAgICAgIGlu
Zm8uc2V0Q2FsbExvY2F0aW9ucyhwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY29tcGls
YXRpb25JbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiksCisgICAgICAgICAgICAgICAgcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZihjb21waWxhdGlvbkluZm8uaG90UGF0aEJlZ2luKSwKKyAgICAgICAgICAg
ICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY29tcGlsYXRpb25JbmZvLmhvdFBh
dGhPdGhlcikpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKE9wdGlvbnM6OnNob3dEaXNhc3Nl
bWJseSgpKSB7CisgICAgICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+ZHVtcChwYXRjaEJ1ZmZlcik7
CisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5kaWRBbHJlYWR5RGlzYXNzZW1ibGUoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3aXRoQXJpdHlDaGVjayA9IHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2YoYXJpdHlDaGVjayk7CisgICAgICAgIENvZGVSZWYgcmVzdWx0
ID0gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJCYXNlbGluZSBKSVQgY29kZSBmb3IgV2Vi
QXNzZW1ibHkiKSk7CisgICAgICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlKGFkb3B0UmVmKG5l
dyBEaXJlY3RKSVRDb2RlKHJlc3VsdCwgd2l0aEFyaXR5Q2hlY2ssIEpJVENvZGU6OkJhc2VsaW5l
SklUKSkpOworICAgIH0KKworICAgIEV4cHJlc3Npb24gY3JlYXRlRnJvbUY2NEV4cHJlc3Npb25J
MzIoRXhwcmVzc2lvbikKKyAgICB7CisgICAgICAgIGxvYWREb3VibGUodGVtcG9yYXJ5QWRkcmVz
cyhtX3NwIC0gMSksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICB0cnVuY2F0ZURvdWJsZVRv
SW50MzIoRlBSSW5mbzo6ZnBSZWdUMCwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBzdG9yZTMy
KEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKG1fc3AgLSAxKSk7CisgICAgICAgIHJl
dHVybiAxOworICAgIH0KKworICAgIEV4cHJlc3Npb24gY3JlYXRlRnJvbUY2NEV4cHJlc3Npb25G
MzIoRXhwcmVzc2lvbikKKyAgICB7CisgICAgICAgIGxvYWREb3VibGUodGVtcG9yYXJ5QWRkcmVz
cyhtX3NwIC0gMSksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBjb252ZXJ0RG91YmxlVG9G
bG9hdChGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgc3RvcmVE
b3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhtX3NwIC0gMSkpOyAvL0ZJ
WE1FOiB1c2Ugc3RvcmVGbG9hdD8/CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIEV4
cHJlc3Npb24gY3JlYXRlRnJvbVMzMkV4cHJlc3Npb25GNjQoRXhwcmVzc2lvbikKKyAgICB7Cisg
ICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHRlbXBvcmFyeUFkZHJlc3MobV9zcCAtIDEpLCBG
UFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgc3RvcmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwg
dGVtcG9yYXJ5QWRkcmVzcyhtX3NwIC0gMSkpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisK
KyAgICBFeHByZXNzaW9uIGNyZWF0ZUZyb21VMzJFeHByZXNzaW9uRjY0KEV4cHJlc3Npb24pCisg
ICAgeworICAgICAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhtX3NwIC0gMSksIEdQUkluZm86
OnJlZ1QwKTsKKyAgICAgICAgY29udmVydEludDY0VG9Eb3VibGUoR1BSSW5mbzo6cmVnVDAsIEZQ
UkluZm86OmZwUmVnVDApOworICAgICAgICBzdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCB0
ZW1wb3JhcnlBZGRyZXNzKG1fc3AgLSAxKSk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKwor
ICAgIEV4cHJlc3Npb24gY3JlYXRlVW5hcnlFeHByZXNzaW9uSTMyKEV4cHJlc3Npb24sIFdBU01P
cEV4cHJlc3Npb25JMzIgb3ApCisgICAgeworICAgICAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVz
cyhtX3NwIC0gMSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgc3dpdGNoIChvcCkgeworICAg
ICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6Ok5lZzoKKyAgICAgICAgICAgIG5lZzMyKEdQ
UkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdBU01PcEV4
cHJlc3Npb25JMzI6OkJpdE5vdDoKKyAgICAgICAgICAgIHhvcjMyKFRydXN0ZWRJbW0zMigtMSks
IEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdBU01P
cEV4cHJlc3Npb25JMzI6OkNsejoKKyAgICAgICAgICAgIGNvdW50TGVhZGluZ1plcm9zMzIoR1BS
SW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkxvZ2ljTm90OiB7CisgICAgICAgICAgICAvLyBG
SVhNRTogc2VlbXMgdmVyeSBpbmVmZmljaWVudAorICAgICAgICAgICAgSnVtcCB6ZXJvID0gYnJh
bmNoVGVzdDMyKFplcm8sIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKDApLCBHUFJJbmZvOjpyZWdUMCk7IC8vIEZJWE1FOiBVc2UgeG9yMzI/CisgICAgICAg
ICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKKyAgICAgICAgICAgIHplcm8ubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAg
ICAgICBlbmQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6QWJzOiB7CisgICAgICAgICAgICBKdW1wIGVu
ZCA9IGJyYW5jaFRlc3QzMihQb3NpdGl2ZU9yWmVybywgR1BSSW5mbzo6cmVnVDApOworICAgICAg
ICAgICAgbmVnMzIoR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgZW5kLmxpbmsodGhpcyk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgc3RvcmUzMihH
UFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhtX3NwIC0gMSkpOworICAgICAgICByZXR1
cm4gMTsKKyAgICB9CisKKyAgICBFeHByZXNzaW9uIGNyZWF0ZVVuYXJ5RXhwcmVzc2lvbkY2NChF
eHByZXNzaW9uLCBXQVNNT3BFeHByZXNzaW9uRjY0IG9wKQorICAgIHsKKyAgICAgICAgbG9hZERv
dWJsZSh0ZW1wb3JhcnlBZGRyZXNzKG1fc3AgLSAxKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAg
ICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpOZWc6
CisgICAgICAgICAgICBuZWdhdGVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBS
ZWdUMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9u
RjY0OjpBYnM6CisgICAgICAgICAgICBhYnNEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5m
bzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXQVNNT3BFeHBy
ZXNzaW9uRjY0OjpDZWlsOgorICAgICAgICAgICAgY2FsbERvdWJsZUZ1bmN0aW9uKGNlaWwsIEZQ
UkluZm86OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6Rmxvb3I6CisgICAgICAgICAgICBjYWxs
RG91YmxlRnVuY3Rpb24oZmxvb3IsIEZQUkluZm86OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDEp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6
U3FydDoKKyAgICAgICAgICAgIHNxcnREb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6
ZnBSZWdUMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNz
aW9uRjY0OjpDb3M6CisgICAgICAgICAgICBjYWxsRG91YmxlRnVuY3Rpb24oY29zLCBGUFJJbmZv
OjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OlNpbjoKKyAgICAgICAgICAgIGNhbGxEb3VibGVG
dW5jdGlvbihzaW4sIEZQUkluZm86OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDEpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6VGFuOgorICAg
ICAgICAgICAgY2FsbERvdWJsZUZ1bmN0aW9uKHRhbiwgRlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5m
bzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXQVNNT3BFeHBy
ZXNzaW9uRjY0OjpBQ29zOgorICAgICAgICAgICAgY2FsbERvdWJsZUZ1bmN0aW9uKGFjb3MsIEZQ
UkluZm86OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6QVNpbjoKKyAgICAgICAgICAgIGNhbGxE
b3VibGVGdW5jdGlvbihhc2luLCBGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QxKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkFU
YW46CisgICAgICAgICAgICBjYWxsRG91YmxlRnVuY3Rpb24oYXRhbiwgRlBSSW5mbzo6ZnBSZWdU
MCwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBX
QVNNT3BFeHByZXNzaW9uRjY0OjpFeHA6CisgICAgICAgICAgICBjYWxsRG91YmxlRnVuY3Rpb24o
ZXhwLCBGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkxuOgorICAgICAgICAgICAg
Y2FsbERvdWJsZUZ1bmN0aW9uKGxvZywgRlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdU
MSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIHN0b3JlRG91YmxlKEZQUklu
Zm86OmZwUmVnVDEsIHRlbXBvcmFyeUFkZHJlc3MobV9zcCAtIDEpKTsKKyAgICAgICAgcmV0dXJu
IDE7CisgICAgfQorCisgICAgRXhwcmVzc2lvbiBjcmVhdGVCaW5hcnlFeHByZXNzaW9uSTMyKEV4
cHJlc3Npb24sIEV4cHJlc3Npb24sIFdBU01PcEV4cHJlc3Npb25JMzIgb3ApCisgICAgeworICAg
ICAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhtX3NwIC0gMiksIEdQUkluZm86OnJlZ1QwKTsK
KyAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MobV9zcCAtIDEpLCBHUFJJbmZvOjpyZWdU
MSk7CisgICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9u
STMyOjpBZGQ6CisgICAgICAgICAgICBhZGQzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVn
VDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkz
Mjo6U3ViOgorICAgICAgICAgICAgc3ViMzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6
Ok11bDoKKyAgICAgICAgICAgIG11bDMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpT
RGl2OgorI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCisgICAgICAgICAgICAvLyBNYWtlIHN1
cmUgcmVnaXN0ZXJzIGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCisgICAg
ICAgICAgICAvLyBBU1NFUlQocmVnVDAgPT0gWDg2UmVnaXN0ZXJzOjplYXgpOworICAgICAgICAg
ICAgLy8gQVNTRVJUKHJlZ1QxID09IFg4NlJlZ2lzdGVyczo6ZWR4KTsKKyAgICAgICAgICAgIC8v
IEFTU0VSVChyZWdUMiA9PSBYODZSZWdpc3RlcnM6OmVjeCk7CisgICAgICAgICAgICAvLyBBU1NF
UlQocmVnVDMgPT0gWDg2UmVnaXN0ZXJzOjplYngpOworCisgICAgICAgICAgICBtb3ZlKEdQUklu
Zm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jZHEo
KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmlkaXZsX3IoR1BSSW5mbzo6cmVnVDIpOworI2Vs
c2UKKyNlcnJvciAiV2ViQXNzZW1ibHkgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIK
KyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lv
bkkzMjo6VURpdjoKKyNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQorICAgICAgICAgICAgbW92
ZShHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgeG9yMzIoR1BS
SW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRp
dmxfcihHUFJJbmZvOjpyZWdUMik7CisjZWxzZQorI2Vycm9yICJXZWJBc3NlbWJseSBub3Qgc3Vw
cG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgorI2VuZGlmCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpTTW9kOgorI2lmIENQVShYODYpIHx8IENQ
VShYODZfNjQpCisgICAgICAgICAgICBtb3ZlKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdU
Mik7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jZHEoKTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmlkaXZsX3IoR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgbW92ZShHUFJJbmZvOjpy
ZWdUMSwgR1BSSW5mbzo6cmVnVDApOworI2Vsc2UKKyNlcnJvciAiV2ViQXNzZW1ibHkgbm90IHN1
cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIKKyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6VU1vZDoKKyNpZiBDUFUoWDg2KSB8fCBD
UFUoWDg2XzY0KQorICAgICAgICAgICAgbW92ZShHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVn
VDIpOworICAgICAgICAgICAgeG9yMzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QxKTsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmRpdmxfcihHUFJJbmZvOjpyZWdUMik7CisgICAgICAg
ICAgICBtb3ZlKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisjZWxzZQorI2Vycm9y
ICJXZWJBc3NlbWJseSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgorI2VuZGlmCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpCaXRP
cjoKKyAgICAgICAgICAgIG9yMzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkJpdEFu
ZDoKKyAgICAgICAgICAgIGFuZDMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpCaXRY
b3I6CisgICAgICAgICAgICB4b3IzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6TGVm
dFNoaWZ0OgorICAgICAgICAgICAgbHNoaWZ0MzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJl
Z1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25J
MzI6OkFyaXRobWV0aWNSaWdodFNoaWZ0OgorICAgICAgICAgICAgcnNoaWZ0MzIoR1BSSW5mbzo6
cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFdBU01PcEV4cHJlc3Npb25JMzI6OkxvZ2ljYWxSaWdodFNoaWZ0OgorICAgICAgICAgICAgdXJz
aGlmdDMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICB9CisgICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJl
c3MobV9zcCAtIDIpKTsKKyAgICAgICAgbV9zcC0tOworICAgICAgICByZXR1cm4gMTsKKyAgICB9
CisKKyAgICBFeHByZXNzaW9uIGNyZWF0ZUJpbmFyeUV4cHJlc3Npb25GNjQoRXhwcmVzc2lvbiwg
RXhwcmVzc2lvbiwgV0FTTU9wRXhwcmVzc2lvbkY2NCBvcCkKKyAgICB7CisgICAgICAgIGxvYWRE
b3VibGUodGVtcG9yYXJ5QWRkcmVzcyhtX3NwIC0gMiksIEZQUkluZm86OmZwUmVnVDApOworICAg
ICAgICBsb2FkRG91YmxlKHRlbXBvcmFyeUFkZHJlc3MobV9zcCAtIDEpLCBGUFJJbmZvOjpmcFJl
Z1QxKTsKKyAgICAgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Np
b25GNjQ6OkFkZDoKKyAgICAgICAgICAgIGFkZERvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJ
bmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdBU01PcEV4
cHJlc3Npb25GNjQ6OlN1YjoKKyAgICAgICAgICAgIHN1YkRvdWJsZShGUFJJbmZvOjpmcFJlZ1Qx
LCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdB
U01PcEV4cHJlc3Npb25GNjQ6Ok11bDoKKyAgICAgICAgICAgIG11bERvdWJsZShGUFJJbmZvOjpm
cFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkRpdjoKKyAgICAgICAgICAgIGRpdkRvdWJsZShGUFJJ
bmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkFUYW4yOgorICAgICAgICAgICAgY2FsbERv
dWJsZUZ1bmN0aW9uKGF0YW4yLCBGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QxLCBG
UFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdBU01P
cEV4cHJlc3Npb25GNjQ6OlBvdzoKKyAgICAgICAgICAgIGNhbGxEb3VibGVGdW5jdGlvbihwb3cs
IEZQUkluZm86OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVnVDApOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBzdG9yZURvdWJsZShGUFJJbmZvOjpm
cFJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKG1fc3AgLSAyKSk7CisgICAgICAgIG1fc3AtLTsKKyAg
ICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgaW50IGNyZWF0ZVJlbGF0aW9uYWxJMzJFeHBy
ZXNzaW9uSTMyKEV4cHJlc3Npb24sIEV4cHJlc3Npb24sIFdBU01PcEV4cHJlc3Npb25JMzIgb3Ap
CisgICAgeworICAgICAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhtX3NwIC0gMiksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MobV9zcCAtIDEpLCBH
UFJJbmZvOjpyZWdUMSk7CisgICAgICAgIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uOwor
ICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6
RXF1YWxJMzI6CisgICAgICAgICAgICBjb25kaXRpb24gPSBFcXVhbDsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6Ok5vdEVxdWFsSTMyOgorICAg
ICAgICAgICAgY29uZGl0aW9uID0gTm90RXF1YWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpTTGVzc1RoYW5JMzI6CisgICAgICAgICAgICBj
b25kaXRpb24gPSBMZXNzVGhhbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdB
U01PcEV4cHJlc3Npb25JMzI6OlVMZXNzVGhhbkkzMjoKKyAgICAgICAgICAgIGNvbmRpdGlvbiA9
IEJlbG93OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lv
bkkzMjo6U0xlc3NUaGFuT3JFcXVhbEkzMjoKKyAgICAgICAgICAgIGNvbmRpdGlvbiA9IExlc3NU
aGFuT3JFcXVhbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdBU01PcEV4cHJl
c3Npb25JMzI6OlVMZXNzVGhhbk9yRXF1YWxJMzI6CisgICAgICAgICAgICBjb25kaXRpb24gPSBC
ZWxvd09yRXF1YWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXQVNNT3BFeHBy
ZXNzaW9uSTMyOjpTR3JlYXRlclRoYW5JMzI6CisgICAgICAgICAgICBjb25kaXRpb24gPSBHcmVh
dGVyVGhhbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Np
b25JMzI6OlVHcmVhdGVyVGhhbkkzMjoKKyAgICAgICAgICAgIGNvbmRpdGlvbiA9IEFib3ZlOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6U0dy
ZWF0ZXJUaGFuT3JFcXVhbEkzMjoKKyAgICAgICAgICAgIGNvbmRpdGlvbiA9IEdyZWF0ZXJUaGFu
T3JFcXVhbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Np
b25JMzI6OlVHcmVhdGVyVGhhbk9yRXF1YWxJMzI6CisgICAgICAgICAgICBjb25kaXRpb24gPSBB
Ym92ZU9yRXF1YWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGNvbXBhcmUz
Mihjb25kaXRpb24sIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVn
VDApOworICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKG1f
c3AgLSAyKSk7CisgICAgICAgIG1fc3AtLTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisg
ICAgaW50IGNyZWF0ZVJlbGF0aW9uYWxGNjRFeHByZXNzaW9uSTMyKEV4cHJlc3Npb24sIEV4cHJl
c3Npb24sIFdBU01PcEV4cHJlc3Npb25JMzIgb3ApCisgICAgeworICAgICAgICBsb2FkRG91Ymxl
KHRlbXBvcmFyeUFkZHJlc3MobV9zcCAtIDIpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAg
bG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKG1fc3AgLSAxKSwgRlBSSW5mbzo6ZnBSZWdUMSk7
CisgICAgICAgIERvdWJsZUNvbmRpdGlvbiBjb25kaXRpb247CisgICAgICAgIHN3aXRjaCAob3Ap
IHsKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpFcXVhbEY2NDoKKyAgICAgICAg
ICAgIGNvbmRpdGlvbiA9IERvdWJsZUVxdWFsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Tm90RXF1YWxGNjQ6CisgICAgICAgICAgICBjb25k
aXRpb24gPSBEb3VibGVOb3RFcXVhbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFdBU01PcEV4cHJlc3Npb25JMzI6Okxlc3NUaGFuRjY0OgorICAgICAgICAgICAgY29uZGl0aW9u
ID0gRG91YmxlTGVzc1RoYW47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXQVNN
T3BFeHByZXNzaW9uSTMyOjpMZXNzVGhhbk9yRXF1YWxGNjQ6CisgICAgICAgICAgICBjb25kaXRp
b24gPSBEb3VibGVMZXNzVGhhbk9yRXF1YWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpHcmVhdGVyVGhhbkY2NDoKKyAgICAgICAgICAgIGNv
bmRpdGlvbiA9IERvdWJsZUdyZWF0ZXJUaGFuOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6R3JlYXRlclRoYW5PckVxdWFsRjY0OgorICAgICAg
ICAgICAgY29uZGl0aW9uID0gRG91YmxlR3JlYXRlclRoYW5PckVxdWFsOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgfQorICAgICAgICBKdW1wIHRydWVDYXNlID0gYnJhbmNoRG91YmxlKGNvbmRp
dGlvbiwgRlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgIHN0b3Jl
MzIoVHJ1c3RlZEltbTMyKDApLCB0ZW1wb3JhcnlBZGRyZXNzKG1fc3AgLSAyKSk7CisgICAgICAg
IEp1bXAgZW5kID0ganVtcCgpOworICAgICAgICB0cnVlQ2FzZS5saW5rKHRoaXMpOworICAgICAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMigxKSwgdGVtcG9yYXJ5QWRkcmVzcyhtX3NwIC0gMikpOwor
ICAgICAgICBlbmQubGluayh0aGlzKTsKKyAgICAgICAgbV9zcC0tOworICAgICAgICByZXR1cm4g
MTsKKyAgICB9CisKKyAgICBFeHByZXNzaW9uIGNyZWF0ZUxpdGVyYWxQb29sRXhwcmVzc2lvbkkz
Mih1aW50MzJfdCBjb25zdGFudEluZGV4KQorICAgIHsKKyAgICAgICAgc3RvcmUzMihJbW0zMiht
X21vZHVsZS0+aTMyQ29uc3RhbnRzKClbY29uc3RhbnRJbmRleF0pLCB0ZW1wb3JhcnlBZGRyZXNz
KG1fc3ApKTsKKyAgICAgICAgbV9zcCsrOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAg
ICBFeHByZXNzaW9uIGNyZWF0ZUxpdGVyYWxQb29sRXhwcmVzc2lvbkYzMih1aW50MzJfdCBjb25z
dGFudEluZGV4KQorICAgIHsKKyAgICAgICAgc3RvcmUzMihJbW0zMihiaXR3aXNlX2Nhc3Q8aW50
MzJfdD4obV9tb2R1bGUtPmYzMkNvbnN0YW50cygpW2NvbnN0YW50SW5kZXhdKSksIHRlbXBvcmFy
eUFkZHJlc3MobV9zcCkpOworICAgICAgICBtX3NwKys7CisgICAgICAgIHJldHVybiAxOworICAg
IH0KKworICAgIEV4cHJlc3Npb24gY3JlYXRlTGl0ZXJhbFBvb2xFeHByZXNzaW9uRjY0KHVpbnQz
Ml90IGNvbnN0YW50SW5kZXgpCisgICAgeworICAgICAgICBzdG9yZTY0KEltbTY0KGJpdHdpc2Vf
Y2FzdDxpbnQ2NF90PihtX21vZHVsZS0+ZjY0Q29uc3RhbnRzKClbY29uc3RhbnRJbmRleF0pKSwg
dGVtcG9yYXJ5QWRkcmVzcyhtX3NwKSk7CisgICAgICAgIG1fc3ArKzsKKyAgICAgICAgcmV0dXJu
IDE7CisgICAgfQorCisgICAgRXhwcmVzc2lvbiBjcmVhdGVMaXRlcmFsSW1tZWRpYXRlRXhwcmVz
c2lvbkkzMih1aW50MzJfdCBpbW1lZGlhdGUpCisgICAgeworICAgICAgICBzdG9yZTMyKEltbTMy
KGltbWVkaWF0ZSksIHRlbXBvcmFyeUFkZHJlc3MobV9zcCkpOworICAgICAgICBtX3NwKys7Cisg
ICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIEV4cHJlc3Npb24gY3JlYXRlTGl0ZXJhbElt
bWVkaWF0ZUV4cHJlc3Npb25GMzIoZmxvYXQgaW1tZWRpYXRlKQorICAgIHsKKyAgICAgICAgc3Rv
cmUzMihJbW0zMihiaXR3aXNlX2Nhc3Q8aW50MzJfdD4oaW1tZWRpYXRlKSksIHRlbXBvcmFyeUFk
ZHJlc3MobV9zcCkpOworICAgICAgICBtX3NwKys7CisgICAgICAgIHJldHVybiAxOworICAgIH0K
KworICAgIEV4cHJlc3Npb24gY3JlYXRlTGl0ZXJhbEltbWVkaWF0ZUV4cHJlc3Npb25GNjQoZG91
YmxlIGltbWVkaWF0ZSkKKyAgICB7CisgICAgICAgIHN0b3JlNjQoSW1tNjQoYml0d2lzZV9jYXN0
PGludDY0X3Q+KGltbWVkaWF0ZSkpLCB0ZW1wb3JhcnlBZGRyZXNzKG1fc3ApKTsKKyAgICAgICAg
bV9zcCsrOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBFeHByZXNzaW9uIGNyZWF0
ZUdldExvY2FsRXhwcmVzc2lvbkkzMih1aW50MzJfdCBsb2NhbEluZGV4KQorICAgIHsKKyAgICAg
ICAgbG9hZDMyKGxvY2FsQWRkcmVzcyhsb2NhbEluZGV4KSwgR1BSSW5mbzo6cmVnVDApOworICAg
ICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKG1fc3ApKTsKKyAg
ICAgICAgbV9zcCsrOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBFeHByZXNzaW9u
IGNyZWF0ZUdldExvY2FsRXhwcmVzc2lvbkYzMih1aW50MzJfdCBsb2NhbEluZGV4KQorICAgIHsK
KyAgICAgICAgbG9hZDMyKGxvY2FsQWRkcmVzcyhsb2NhbEluZGV4KSwgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKG1fc3Ap
KTsKKyAgICAgICAgbV9zcCsrOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBFeHBy
ZXNzaW9uIGNyZWF0ZUdldExvY2FsRXhwcmVzc2lvbkY2NCh1aW50MzJfdCBsb2NhbEluZGV4KQor
ICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFVzZSBsb2FkRG91YmxlL3N0b3JlRG91YmxlPworICAg
ICAgICBsb2FkNjQobG9jYWxBZGRyZXNzKGxvY2FsSW5kZXgpLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgICAgIHN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MobV9zcCkpOwor
ICAgICAgICBtX3NwKys7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHZvaWQgc2V0
TG9jYWwodWludDMyX3QgbG9jYWxJbmRleCwgRXhwcmVzc2lvbiwgV0FTTVR5cGUgdHlwZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFdBU01UeXBlOjpJMzI6
CisgICAgICAgIGNhc2UgV0FTTVR5cGU6OkYzMjoKKyAgICAgICAgICAgIGxvYWQzMih0ZW1wb3Jh
cnlBZGRyZXNzKG1fc3AgLSAxKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgc3RvcmUz
MihHUFJJbmZvOjpyZWdUMCwgbG9jYWxBZGRyZXNzKGxvY2FsSW5kZXgpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFdBU01UeXBlOjpGNjQ6CisgICAgICAgICAgICBsb2FkNjQo
dGVtcG9yYXJ5QWRkcmVzcyhtX3NwIC0gMSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAg
IHN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIGxvY2FsQWRkcmVzcyhsb2NhbEluZGV4KSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIG1fc3AtLTsKKyAgICB9CisKKyAgICBFeHBy
ZXNzaW9uIGNyZWF0ZVNldExvY2FsRXhwcmVzc2lvbkkzMih1aW50MzJfdCBsb2NhbEluZGV4LCBF
eHByZXNzaW9uKQorICAgIHsKKyAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MobV9zcCAt
IDEpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIGxv
Y2FsQWRkcmVzcyhsb2NhbEluZGV4KSk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAg
IEV4cHJlc3Npb24gY3JlYXRlU2V0TG9jYWxFeHByZXNzaW9uRjMyKHVpbnQzMl90IGxvY2FsSW5k
ZXgsIEV4cHJlc3Npb24pCisgICAgeworICAgICAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyht
X3NwIC0gMSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdU
MCwgbG9jYWxBZGRyZXNzKGxvY2FsSW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQor
CisgICAgRXhwcmVzc2lvbiBjcmVhdGVTZXRMb2NhbEV4cHJlc3Npb25GNjQodWludDMyX3QgbG9j
YWxJbmRleCwgRXhwcmVzc2lvbikKKyAgICB7CisgICAgICAgIGxvYWQ2NCh0ZW1wb3JhcnlBZGRy
ZXNzKG1fc3AgLSAxKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBzdG9yZTY0KEdQUkluZm86
OnJlZ1QwLCBsb2NhbEFkZHJlc3MobG9jYWxJbmRleCkpOworICAgICAgICByZXR1cm4gMTsKKyAg
ICB9CisKKyAgICBFeHByZXNzaW9uIGNyZWF0ZUdldEdsb2JhbEV4cHJlc3Npb25JMzIodWludDMy
X3QgZ2xvYmFsSW5kZXgpCisgICAgeworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9tb2R1
bGUtPmdsb2JhbFZhcmlhYmxlQWRkcmVzc2VzKClbZ2xvYmFsSW5kZXhdKSwgR1BSSW5mbzo6cmVn
VDApOworICAgICAgICBsb2FkMzIoR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhtX3NwKSk7Cisg
ICAgICAgIG1fc3ArKzsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgRXhwcmVzc2lv
biBjcmVhdGVHZXRHbG9iYWxFeHByZXNzaW9uRjMyKHVpbnQzMl90IGdsb2JhbEluZGV4KQorICAg
IHsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fbW9kdWxlLT5nbG9iYWxWYXJpYWJsZUFk
ZHJlc3NlcygpW2dsb2JhbEluZGV4XSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgbG9hZDMy
KEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIHN0b3JlMzIoR1BSSW5m
bzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MobV9zcCkpOworICAgICAgICBtX3NwKys7CisgICAg
ICAgIHJldHVybiAxOworICAgIH0KKworICAgIEV4cHJlc3Npb24gY3JlYXRlR2V0R2xvYmFsRXhw
cmVzc2lvbkY2NCh1aW50MzJfdCBnbG9iYWxJbmRleCkKKyAgICB7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX21vZHVsZS0+Z2xvYmFsVmFyaWFibGVBZGRyZXNzZXMoKVtnbG9iYWxJbmRl
eF0pLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGxvYWQ2NChHUFJJbmZvOjpyZWdUMCwgR1BS
SW5mbzo6cmVnVDApOworICAgICAgICBzdG9yZTY0KEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlB
ZGRyZXNzKG1fc3ApKTsKKyAgICAgICAgbV9zcCsrOworICAgICAgICByZXR1cm4gMTsKKyAgICB9
CisKKyAgICBFeHByZXNzaW9uIGNyZWF0ZVNldEdsb2JhbCh1aW50MzJfdCBnbG9iYWxJbmRleCwg
RXhwcmVzc2lvbiwgV0FTTVR5cGUgdHlwZSwgYm9vbCBpc0V4cHJlc3Npb24pCisgICAgeworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9tb2R1bGUtPmdsb2JhbFZhcmlhYmxlQWRkcmVzc2Vz
KClbZ2xvYmFsSW5kZXhdKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICAgICAgY2FzZSBXQVNNVHlwZTo6STMyOgorICAgICAgICBjYXNlIFdBU01UeXBlOjpG
MzI6CisgICAgICAgICAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhtX3NwIC0gMSksIEdQUklu
Zm86OnJlZ1QxKTsKKyAgICAgICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86
OnJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdBU01UeXBlOjpGNjQ6
CisgICAgICAgICAgICBsb2FkNjQodGVtcG9yYXJ5QWRkcmVzcyhtX3NwIC0gMSksIEdQUkluZm86
OnJlZ1QxKTsKKyAgICAgICAgICAgIHN0b3JlNjQoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJl
Z1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0V4cHJlc3Np
b24pCisgICAgICAgICAgICBtX3NwLS07CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAg
IHZvaWQgYm94QXJndW1lbnRzQW5kQWRqdXN0U3RhY2tQb2ludGVyKGNvbnN0IFZlY3RvcjxXQVNN
VHlwZT4mIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0g
YXJndW1lbnRzLnNpemUoKTsKKworICAgICAgICBpbnQgbmV3U1AgPSBXVEY6OnJvdW5kVXBUb011
bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgbV9udW1iZXJPZkxvY2FscyArIG1f
c3AgKyBhcmd1bWVudENvdW50KSAtIG1fbnVtYmVyT2ZMb2NhbHM7CisKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpIHsKKyAgICAgICAgICAgIHN3aXRj
aCAoYXJndW1lbnRzW2ldKSB7CisgICAgICAgICAgICBjYXNlIFdBU01UeXBlOjpJMzI6CisgICAg
ICAgICAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MobV9zcCAtIGFyZ3VtZW50Q291bnQg
KyBpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIG9yNjQoR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgc3Rv
cmU2NChHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhuZXdTUCAtIGkgLSAxKSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdBU01UeXBlOjpGMzI6Cisg
ICAgICAgICAgICAgICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKG1fc3AgLSBhcmd1bWVu
dENvdW50ICsgaSksIEZQUkluZm86OmZwUmVnVDApOyAvL0ZJWE1FOiB1c2UgbG9hZEZsb2F0Cisg
ICAgICAgICAgICAgICAgY29udmVydEZsb2F0VG9Eb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgRlBS
SW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICAgICAgYm94RG91YmxlKEZQUkluZm86OmZwUmVn
VDAsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KEdQUkluZm86OnJl
Z1QwLCB0ZW1wb3JhcnlBZGRyZXNzKG5ld1NQIC0gaSAtIDEpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgV0FTTVR5cGU6OkY2NDoKKyAgICAgICAgICAgICAgICBs
b2FkRG91YmxlKHRlbXBvcmFyeUFkZHJlc3MobV9zcCAtIGFyZ3VtZW50Q291bnQgKyBpKSwgRlBS
SW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICAgICAgYm94RG91YmxlKEZQUkluZm86OmZwUmVn
VDAsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBzdG9yZTY0KEdQUkluZm86OnJl
Z1QwLCB0ZW1wb3JhcnlBZGRyZXNzKG5ld1NQIC0gaSAtIDEpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzdG9yZTY0KFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCB0ZW1wb3JhcnlBZGRy
ZXNzKG5ld1NQKSk7CisKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtKG5ld1NQICsgbV9u
dW1iZXJPZkxvY2FscyArIDMpICogOCAtIDgpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOyAvLyBGSVhNRTogaGFja3kKKworICAgICAgICBzdG9yZTMy
KFRydXN0ZWRJbW0zMihhcmd1bWVudENvdW50ICsgMSksIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVn
aXN0ZXIsIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihS
ZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwor
ICAgIH0KKworICAgIHZvaWQgY2FsbEFuZFVuYm94UmVzdWx0KGNvbnN0IFZlY3RvcjxXQVNNVHlw
ZT4mIGFyZ3VtZW50cywgV0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCisgICAgeworICAg
ICAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9IGFyZ3VtZW50cy5zaXplKCk7CisKKyAgICAgICAg
bW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDApOyAvLyByZWdUMCBo
b2xkcyBjYWxsZWUuCisgICAgICAgIHN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFkZHJlc3Moc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIEpTU3RhY2s6OkNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSkgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKworICAgICAgICBE
YXRhTGFiZWxQdHIgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjazsKKyAgICAgICAgSnVtcCBz
bG93Q2FzZSA9IGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgR1BSSW5mbzo6cmVnVDAsIGFk
ZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIFRydXN0ZWRJbW1QdHIoMCkpOworCisgICAgICAg
IENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oKTsKKyAg
ICAgICAgLy8gaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bjb2Rl
SUQpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCByZWdUMCk7CisgICAgICAgIGluZm8t
PnNldENhbGxlZUdQUihHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKKyAgICAgICAgbV9jYWxsQ29tcGls
YXRpb25JbmZvLmxhc3QoKS5ob3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNo
ZWNrOworICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8ubGFzdCgpLmNhbGxMaW5rSW5mbyA9
IGluZm87CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5sYXN0KCkuaG90UGF0aE90aGVy
ID0gbmVhckNhbGwoKTsKKworICAgICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKKworICAgICAgICAv
LyAtLS0tLS0tLS0tLS0tLQorCisgICAgICAgIHNsb3dDYXNlLmxpbmsodGhpcyk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICBtX2Nh
bGxDb21waWxhdGlvbkluZm8ubGFzdCgpLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENh
bGwobV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOworCisg
ICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgZW5kLmxpbmsodGhpcyk7CisKKyAg
ICAgICAgbV9zcCAtPSBhcmd1bWVudENvdW50OworCisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoLW1fc3RhY2tIZWlnaHQgKiA4KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsgLy8gRklYTUU6IGhhY2t5CisKKyAgICAgICAgc3dpdGNoIChyZXR1
cm5UeXBlKSB7CisgICAgICAgIGNhc2UgV0FTTUV4cHJlc3Npb25UeXBlOjpJMzI6CisgICAgICAg
ICAgICBzdG9yZTMyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCB0ZW1wb3JhcnlBZGRyZXNzKG1f
c3ApKTsKKyAgICAgICAgICAgIG1fc3ArKzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFdBU01FeHByZXNzaW9uVHlwZTo6RjY0OgorICAgICAgICAgICAgdW5ib3hEb3VibGVXaXRo
b3V0QXNzZXJ0aW9ucyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6ZnBSZWdUMCk7
CisgICAgICAgICAgICBzdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCB0ZW1wb3JhcnlBZGRy
ZXNzKG1fc3ApKTsKKyAgICAgICAgICAgIG1fc3ArKzsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFdBU01FeHByZXNzaW9uVHlwZTo6Vm9pZDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBFeHByZXNzaW9uIGNyZWF0ZUNhbGxJbnRlcm5hbCh1aW50MzJf
dCBmdW5jdGlvbkluZGV4LCBjb25zdCBXQVNNU2lnbmF0dXJlJiBzaWduYXR1cmUsIFdBU01FeHBy
ZXNzaW9uVHlwZSByZXR1cm5UeXBlKQorICAgIHsKKyAgICAgICAgY29uc3QgVmVjdG9yPFdBU01U
eXBlPiYgYXJndW1lbnRzID0gc2lnbmF0dXJlLmFyZ3VtZW50czsKKworICAgICAgICBib3hBcmd1
bWVudHNBbmRBZGp1c3RTdGFja1BvaW50ZXIoYXJndW1lbnRzKTsKKworICAgICAgICBpZiAobWF4
RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCisgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKC1tYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIobV9t
b2R1bGUpLCBUcnVzdGVkSW1tMzIoZnVuY3Rpb25JbmRleCkpOworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihnZXRJbnRlcm5hbEZ1bmN0aW9uKSksIEdQUklu
Zm86Om5vbkFyZ0dQUjApOworICAgICAgICBjYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOworICAg
ICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCisgICAgICAgICAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworCisgICAgICAgIC8vIEZJWE1FOiBOb3Qgd29ya2luZy4KKyAgICAgICAg
Ly8gSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBtX21vZHVsZS0+ZnVuY3Rpb24oZnVuY3Rpb25JbmRl
eCk7CisgICAgICAgIC8vIG1vdmUoVHJ1c3RlZEltbVB0cihmdW5jdGlvbiksIEdQUkluZm86OnJl
Z1QwKTsKKworICAgICAgICBjYWxsQW5kVW5ib3hSZXN1bHQoYXJndW1lbnRzLCByZXR1cm5UeXBl
KTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgRXhwcmVzc2lvbiBjcmVhdGVDYWxs
SW5kaXJlY3QodWludDMyX3QgZnVuY3Rpb25Qb2ludGVyVGFibGVJbmRleCwgRXhwcmVzc2lvbiwg
Y29uc3QgV0FTTVNpZ25hdHVyZSYgc2lnbmF0dXJlLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJu
VHlwZSkKKyAgICB7CisgICAgICAgIGNvbnN0IFZlY3RvcjxXQVNNVHlwZT4mIGFyZ3VtZW50cyA9
IHNpZ25hdHVyZS5hcmd1bWVudHM7CisKKyAgICAgICAgQWRkcmVzcyBvZmZzZXRBZGRyZXNzID0g
dGVtcG9yYXJ5QWRkcmVzcyhtX3NwIC0gYXJndW1lbnRzLnNpemUoKSAtIDEpOworCisgICAgICAg
IGJveEFyZ3VtZW50c0FuZEFkanVzdFN0YWNrUG9pbnRlcihhcmd1bWVudHMpOworCisgICAgICAg
IGNvbnN0IFdBU01GdW5jdGlvblBvaW50ZXJUYWJsZSYgZnVuY3Rpb25Qb2ludGVyVGFibGUgPSBt
X21vZHVsZS0+ZnVuY3Rpb25Qb2ludGVyVGFibGVzKClbZnVuY3Rpb25Qb2ludGVyVGFibGVJbmRl
eF07CisgICAgICAgIGNvbnN0IFZlY3Rvcjx1aW50MzJfdD4mIGVsZW1lbnRzID0gZnVuY3Rpb25Q
b2ludGVyVGFibGUuZWxlbWVudHM7CisgICAgICAgIGNvbnN0IHVpbnQzMl90KiBlbGVtZW50RGF0
YSA9IGVsZW1lbnRzLmRhdGEoKTsKKworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZWxlbWVu
dERhdGEpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGxvYWQzMihvZmZzZXRBZGRyZXNzLCBH
UFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihlbGVtZW50cy5zaXpl
KCkgLSAxKSwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBCYXNlSW5kZXggYWRkcmVzcyA9IEJh
c2VJbmRleChHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIFRpbWVzRm91cik7CisgICAg
ICAgIGxvYWQzMihhZGRyZXNzLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICAgICAgaWYgKG1heEZy
YW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQorICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MigtbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisgICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKG1fbW9k
dWxlKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYml0d2lz
ZV9jYXN0PHZvaWQqPihnZXRJbnRlcm5hbEZ1bmN0aW9uKSksIEdQUkluZm86Om5vbkFyZ0dQUjAp
OworICAgICAgICBjYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICBpZiAobWF4RnJh
bWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCisgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
CisgICAgICAgIG1fc3AtLTsKKworICAgICAgICBjYWxsQW5kVW5ib3hSZXN1bHQoYXJndW1lbnRz
LCByZXR1cm5UeXBlKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgRXhwcmVzc2lv
biBjcmVhdGVDYWxsSW1wb3J0KHVpbnQzMl90IGZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlSW5kZXgs
IGNvbnN0IFdBU01TaWduYXR1cmUmIHNpZ25hdHVyZSwgV0FTTUV4cHJlc3Npb25UeXBlIHJldHVy
blR5cGUpCisgICAgeworICAgICAgICBjb25zdCBWZWN0b3I8V0FTTVR5cGU+JiBhcmd1bWVudHMg
PSBzaWduYXR1cmUuYXJndW1lbnRzOworCisgICAgICAgIGJveEFyZ3VtZW50c0FuZEFkanVzdFN0
YWNrUG9pbnRlcihhcmd1bWVudHMpOworCisgICAgICAgIGNvbnN0IFdBU01GdW5jdGlvbkltcG9y
dFNpZ25hdHVyZSYgZnVuY3Rpb25JbXBvcnRTaWduYXR1cmUgPSBtX21vZHVsZS0+ZnVuY3Rpb25J
bXBvcnRTaWduYXR1cmVzKClbZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVJbmRleF07CisgICAgICAg
IHVpbnQzMl90IGZ1bmN0aW9uSW1wb3J0SW5kZXggPSBmdW5jdGlvbkltcG9ydFNpZ25hdHVyZS5m
dW5jdGlvbkltcG9ydEluZGV4OworCisgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbCkKKyAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLW1heEZyYW1lRXh0ZW50
Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICBzZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihtX21vZHVsZSksIFRydXN0ZWRJbW0z
MihmdW5jdGlvbkltcG9ydEluZGV4KSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihiaXR3
aXNlX2Nhc3Q8dm9pZCo+KGdldEltcG9ydGVkRnVuY3Rpb24pKSwgR1BSSW5mbzo6bm9uQXJnR1BS
MCk7CisgICAgICAgIGNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgIGlmIChtYXhG
cmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKKyAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisKKyAgICAgICAgY2FsbEFuZFVuYm94UmVzdWx0KGFyZ3VtZW50cywgcmV0dXJuVHlwZSk7Cisg
ICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIEV4cHJlc3Npb24gY3JlYXRlTG9hZChjb25z
dCBNZW1vcnlBZGRyZXNzJiBtZW1vcnlBZGRyZXNzLCBXQVNNRXhwcmVzc2lvblR5cGUgZXhwcmVz
c2lvblR5cGUsIFdBU01NZW1vcnlUeXBlIG1lbW9yeVR5cGUsIGJvb2wgc2lnbkV4dGVuZGVkKQor
ICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsKQorICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtbWF4RnJhbWVFeHRlbnRGb3JT
bG93UGF0aENhbGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIHNldHVwQXJndW1l
bnRzKFRydXN0ZWRJbW1QdHIobV9tb2R1bGUpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGJpdHdpc2VfY2FzdDx2b2lkKj4oZ2V0QXJyYXlCdWZmZXJEYXRhKSksIEdQUkluZm86Om5vbkFy
Z0dQUjApOworICAgICAgICBjYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICBpZiAo
bWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCisgICAgICAgICAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgICAgICAqLworCisgICAgICAgIC8vIEZJWE1FOiBTYWZlPworICAgICAgICBjb25z
dCB2b2lkKiBhcnJheUJ1ZmZlckRhdGEgPSBtX21vZHVsZS0+YXJyYXlCdWZmZXIoKS0+aW1wbCgp
LT5kYXRhKCk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhcnJheUJ1ZmZlckRhdGEpLCBH
UFJJbmZvOjpyZWdUMCk7CisKKyAgICAgICAgaWYgKG1lbW9yeUFkZHJlc3MuaGFzSW1tZWRpYXRl
SW5kZXgpCisgICAgICAgICAgICBtb3ZlKEltbTMyKG1lbW9yeUFkZHJlc3MuaW1tZWRpYXRlSW5k
ZXgpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbG9hZDMy
KHRlbXBvcmFyeUFkZHJlc3MobV9zcCAtIDEpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgICAg
ICBtX3NwLS07CisgICAgICAgIH0KKyAgICAgICAgLy8gRklYTUU6IENoZWNrIGZvciBvdXQtb2Yt
Ym91bmRzIGFjY2Vzcy4KKyAgICAgICAgQmFzZUluZGV4IGFkZHJlc3MgPSBCYXNlSW5kZXgoR1BS
SW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QxLCBUaW1lc09uZSwgbWVtb3J5QWRkcmVzcy5vZmZz
ZXQpOworCisgICAgICAgIC8vIEZJWE1FOiBDaGVjayBib3VuZHMuCisgICAgICAgIHN3aXRjaCAo
ZXhwcmVzc2lvblR5cGUpIHsKKyAgICAgICAgY2FzZSBXQVNNRXhwcmVzc2lvblR5cGU6OkkzMjoK
KyAgICAgICAgICAgIHN3aXRjaCAobWVtb3J5VHlwZSkgeworICAgICAgICAgICAgY2FzZSBXQVNN
TWVtb3J5VHlwZTo6STg6CisgICAgICAgICAgICAgICAgaWYgKHNpZ25FeHRlbmRlZCkKKyAgICAg
ICAgICAgICAgICAgICAgbG9hZDhTaWduZWRFeHRlbmRUbzMyKGFkZHJlc3MsIEdQUkluZm86OnJl
Z1QyKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGxvYWQ4KGFk
ZHJlc3MsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgV0FTTU1lbW9yeVR5cGU6OkkxNjoKKyAgICAgICAgICAgICAgICBpZiAoc2lnbkV4
dGVuZGVkKQorICAgICAgICAgICAgICAgICAgICBsb2FkMTZTaWduZWRFeHRlbmRUbzMyKGFkZHJl
c3MsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIGxvYWQxNihhZGRyZXNzLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFdBU01NZW1vcnlUeXBlOjpJMzI6CisgICAgICAgICAg
ICAgICAgbG9hZDMyKGFkZHJlc3MsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJl
Z1QyLCB0ZW1wb3JhcnlBZGRyZXNzKG1fc3ApKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFdBU01FeHByZXNzaW9uVHlwZTo6RjY0OgorICAgICAgICAgICAgQVNTRVJUKG1lbW9y
eVR5cGUgPT0gV0FTTU1lbW9yeVR5cGU6OkY2NCk7CisgICAgICAgICAgICBsb2FkRG91YmxlKGFk
ZHJlc3MsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgc3RvcmVEb3VibGUoRlBSSW5m
bzo6ZnBSZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhtX3NwKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICB9CisgICAgICAgIG1fc3ArKzsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAg
RXhwcmVzc2lvbiBjcmVhdGVTdG9yZShjb25zdCBNZW1vcnlBZGRyZXNzJiBtZW1vcnlBZGRyZXNz
LCBXQVNNRXhwcmVzc2lvblR5cGUgZXhwcmVzc2lvblR5cGUsIFdBU01NZW1vcnlUeXBlIG1lbW9y
eVR5cGUsIEV4cHJlc3Npb24sIGJvb2wgaXNFeHByZXNzaW9uKQorICAgIHsKKyAgICAgICAgLyoK
KyAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQorICAgICAgICAgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMigtbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIHNldHVwQXJndW1lbnRzKFRydXN0ZWRJbW1QdHIo
bV9tb2R1bGUpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lk
Kj4oZ2V0QXJyYXlCdWZmZXJEYXRhKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICBj
YWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JT
bG93UGF0aENhbGwpCisgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0
ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAqLwor
CisgICAgICAgIC8vIEZJWE1FOiBTYWZlPworICAgICAgICBjb25zdCB2b2lkKiBhcnJheUJ1ZmZl
ckRhdGEgPSBtX21vZHVsZS0+YXJyYXlCdWZmZXIoKS0+aW1wbCgpLT5kYXRhKCk7CisgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihhcnJheUJ1ZmZlckRhdGEpLCBHUFJJbmZvOjpyZWdUMCk7CisK
KyAgICAgICAgaWYgKG1lbW9yeUFkZHJlc3MuaGFzSW1tZWRpYXRlSW5kZXgpCisgICAgICAgICAg
ICBtb3ZlKEltbTMyKG1lbW9yeUFkZHJlc3MuaW1tZWRpYXRlSW5kZXgpLCBHUFJJbmZvOjpyZWdU
MSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKG1f
c3AgLSAyKSwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICAvLyBGSVhNRTogQ2hlY2sgZm9yIG91
dC1vZi1ib3VuZHMgYWNjZXNzLgorICAgICAgICBCYXNlSW5kZXggYWRkcmVzcyA9IEJhc2VJbmRl
eChHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIFRpbWVzT25lLCBtZW1vcnlBZGRyZXNz
Lm9mZnNldCk7CisKKyAgICAgICAgLy8gRklYTUU6IENoZWNrIGJvdW5kcy4KKyAgICAgICAgc3dp
dGNoIChleHByZXNzaW9uVHlwZSkgeworICAgICAgICBjYXNlIFdBU01FeHByZXNzaW9uVHlwZTo6
STMyOgorICAgICAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MobV9zcCAtIDEpLCBHUFJJ
bmZvOjpyZWdUMik7CisgICAgICAgICAgICBzd2l0Y2ggKG1lbW9yeVR5cGUpIHsKKyAgICAgICAg
ICAgIGNhc2UgV0FTTU1lbW9yeVR5cGU6Okk4OgorICAgICAgICAgICAgICAgIHN0b3JlOChHUFJJ
bmZvOjpyZWdUMiwgYWRkcmVzcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIFdBU01NZW1vcnlUeXBlOjpJMTY6CisgICAgICAgICAgICAgICAgc3RvcmUxNihHUFJJ
bmZvOjpyZWdUMiwgYWRkcmVzcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIFdBU01NZW1vcnlUeXBlOjpJMzI6CisgICAgICAgICAgICAgICAgc3RvcmUzMihHUFJJ
bmZvOjpyZWdUMiwgYWRkcmVzcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0FTTUV4cHJlc3Npb25U
eXBlOjpGNjQ6CisgICAgICAgICAgICBBU1NFUlQobWVtb3J5VHlwZSA9PSBXQVNNTWVtb3J5VHlw
ZTo6RjY0KTsKKyAgICAgICAgICAgIGxvYWREb3VibGUodGVtcG9yYXJ5QWRkcmVzcyhtX3NwIC0g
MSksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgc3RvcmVEb3VibGUoRlBSSW5mbzo6
ZnBSZWdUMCwgYWRkcmVzcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAg
bV9zcC0tOworICAgICAgICBpZiAoIW1lbW9yeUFkZHJlc3MuaGFzSW1tZWRpYXRlSW5kZXgpCisg
ICAgICAgICAgICBtX3NwLS07CisKKyAgICAgICAgaWYgKGlzRXhwcmVzc2lvbikgeworICAgICAg
ICAgICAgLy8gVE9ETzogSWYgaGFzSW1tZWRpYXRlSW5kZXggaXMgdHJ1ZSwgdGhlbiB0aGUgcmVz
dWx0IGlzIGFscmVhZHkgb24gdGhlIHRvcCBvZiB0aGUgc3RhY2suCisgICAgICAgICAgICBzd2l0
Y2ggKGV4cHJlc3Npb25UeXBlKSB7CisgICAgICAgICAgICBjYXNlIFdBU01FeHByZXNzaW9uVHlw
ZTo6STMyOgorICAgICAgICAgICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDIsIHRlbXBvcmFy
eUFkZHJlc3MobV9zcCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBXQVNNRXhwcmVzc2lvblR5cGU6OkY2NDoKKyAgICAgICAgICAgICAgICBzdG9yZURvdWJsZShG
UFJJbmZvOjpmcFJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKG1fc3ApKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3NwKys7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgdm9pZCByZXR1cm5TdGF0ZW1lbnQo
RXhwcmVzc2lvbiwgV0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKHJldHVyblR5cGUpIHsKKyAgICAgICAgY2FzZSBXQVNNRXhwcmVzc2lvblR5cGU6
OkkzMjoKKyAgICAgICAgICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKG1fc3AgLSAxKSwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgb3I2NChHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIG1f
c3AtLTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdBU01FeHByZXNzaW9uVHlw
ZTo6RjMyOgorICAgICAgICAgICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKG1fc3AgLSAx
KSwgRlBSSW5mbzo6ZnBSZWdUMCk7IC8vIEZJWE1FOiBUaGlzIGxvYWRzIDY0IGJpdHMhCisgICAg
ICAgICAgICBjb252ZXJ0RmxvYXRUb0RvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpm
cFJlZ1QwKTsKKyAgICAgICAgICAgIGJveERvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBtX3NwLS07CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBXQVNNRXhwcmVzc2lvblR5cGU6OkY2NDoKKyAgICAgICAgICAgIGxv
YWREb3VibGUodGVtcG9yYXJ5QWRkcmVzcyhtX3NwIC0gMSksIEZQUkluZm86OmZwUmVnVDApOwor
ICAgICAgICAgICAgYm94RG91YmxlKEZQUkluZm86OmZwUmVnVDAsIEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgICAgIG1fc3AtLTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFdBU01FeHByZXNzaW9uVHlwZTo6Vm9pZDoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IH0KKworICAgICAgICBkZWFsbG9jYXRlU3BhY2VPblN0YWNrKCk7CisgICAgICAgIGVtaXRGdW5j
dGlvbkVwaWxvZ3VlKCk7CisgICAgICAgIHJldCgpOworICAgIH0KKworICAgIC8vRklYTUU6IFJl
bmFtZSB0aGVzZQorICAgIEp1bXAgaml0SnVtcCgpCisgICAgeworICAgICAgICByZXR1cm4ganVt
cCgpOworICAgIH0KKworICAgIHZvaWQgaml0SnVtcChMYWJlbCBsYWJlbCkKKyAgICB7CisgICAg
ICAgIGp1bXAobGFiZWwpOworICAgIH0KKworICAgIExhYmVsIGppdExhYmVsKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBsYWJlbCgpOworICAgIH0KKworICAgIEp1bXAgaml0QnJhbmNoSWZaZXJv
KEV4cHJlc3Npb24pCisgICAgeworICAgICAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhtX3Nw
IC0gMSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgSnVtcCBqdW1wID0gYnJhbmNoVGVzdDMy
KFplcm8sIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgbV9zcC0tOworICAgICAgICByZXR1cm4g
anVtcDsKKyAgICB9CisKKyAgICBKdW1wIGppdEJyYW5jaElmTm9uWmVybyhFeHByZXNzaW9uKQor
ICAgIHsKKyAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MobV9zcCAtIDEpLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgICAgIEp1bXAganVtcCA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgICAgIG1fc3AtLTsKKyAgICAgICAgcmV0dXJuIGp1bXA7CisgICAg
fQorCisgICAgdm9pZCBnZW5lcmF0ZVN3aXRjaFRhYmxlKEV4cHJlc3Npb24sIGNvbnN0IFZlY3Rv
cjxpbnQzMl90PiYgY2FzZXMsIGJvb2wgaGFzRGVmYXVsdCwgY29uc3QgVmVjdG9yPExhYmVsPiYg
bGFiZWxzKQorICAgIHsKKyAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MobV9zcCAtIDEp
LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FzZXMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIEp1bXAgam1wID0gYnJhbmNoMzIoRXF1YWwsIEdQ
UkluZm86OnJlZ1QwLCBJbW0zMihjYXNlc1tpXSkpOworICAgICAgICAgICAgam1wLmxpbmtUbyhs
YWJlbHNbaV0sIHRoaXMpOworICAgICAgICB9CisgICAgICAgIGlmIChoYXNEZWZhdWx0KSB7Cisg
ICAgICAgICAgICBBU1NFUlQobGFiZWxzLnNpemUoKSA9PSBjYXNlcy5zaXplKCkgKyAxKTsKKyAg
ICAgICAgICAgIGp1bXAobGFiZWxzLmxhc3QoKSk7CisgICAgICAgIH0KKyAgICAgICAgbV9zcC0t
OworICAgIH0KKworICAgIHZvaWQgaml0TGlua0p1bXAoSnVtcCBqdW1wKQorICAgIHsKKyAgICAg
ICAganVtcC5saW5rKHRoaXMpOworICAgIH0KKworICAgIHZvaWQgaml0TGlua0p1bXBUb0xhYmVs
KEp1bXAganVtcCwgTGFiZWwgbGFiZWwpCisgICAgeworICAgICAgICBqdW1wLmxpbmtUbyhsYWJl
bCwgdGhpcyk7CisgICAgfQorCisgICAgdm9pZCBwb3AoKSAvLyBGSVhNRTogVGhpcyBzZWVtcyBo
YWNreS4KKyAgICB7CisgICAgICAgIG1fc3AtLTsKKyAgICB9CisKKyAgICB2b2lkIHN0YXJ0TG9v
cCgpCisgICAgeworICAgICAgICBtX2JyZWFrU2NvcGVzLmFwcGVuZChKdW1wU2NvcGUoKSk7Cisg
ICAgICAgIG1fY29udGludWVTY29wZXMuYXBwZW5kKEp1bXBTY29wZSgpKTsKKyAgICB9CisKKyAg
ICB2b2lkIGVuZExvb3AoKQorICAgIHsKKyAgICAgICAgbV9icmVha1Njb3Blcy5yZW1vdmVMYXN0
KCk7CisgICAgICAgIG1fY29udGludWVTY29wZXMucmVtb3ZlTGFzdCgpOworICAgIH0KKworICAg
IHZvaWQgc3RhcnRTd2l0Y2goKQorICAgIHsKKyAgICAgICAgbV9icmVha1Njb3Blcy5hcHBlbmQo
SnVtcFNjb3BlKCkpOworICAgIH0KKworICAgIHZvaWQgZW5kU3dpdGNoKCkKKyAgICB7CisgICAg
ICAgIG1fYnJlYWtTY29wZXMucmVtb3ZlTGFzdCgpOworICAgIH0KKworICAgIHZvaWQgbGlua0Jy
ZWFrKCkKKyAgICB7CisgICAgICAgIG1fYnJlYWtTY29wZXMubGFzdCgpLmxpbmsodGhpcyk7Cisg
ICAgfQorCisgICAgdm9pZCBsaW5rQ29udGludWUoKQorICAgIHsKKyAgICAgICAgbV9jb250aW51
ZVNjb3Blcy5sYXN0KCkubGluayh0aGlzKTsKKyAgICB9CisKKyAgICB2b2lkIGJyZWFrU3RhdGVt
ZW50KCkKKyAgICB7CisgICAgICAgIG1fYnJlYWtTY29wZXMubGFzdCgpLmp1bXAodGhpcyk7Cisg
ICAgfQorCisgICAgdm9pZCBjb250aW51ZVN0YXRlbWVudCgpCisgICAgeworICAgICAgICBtX2Nv
bnRpbnVlU2NvcGVzLmxhc3QoKS5qdW1wKHRoaXMpOworICAgIH0KKworICAgIHZvaWQgc3RhcnRM
YWJlbCgpCisgICAgeworICAgICAgICBtX2JyZWFrTGFiZWxTY29wZXMuYXBwZW5kKEp1bXBTY29w
ZSgpKTsKKyAgICAgICAgbV9jb250aW51ZUxhYmVsU2NvcGVzLmFwcGVuZChKdW1wU2NvcGUoKSk7
CisKKyAgICAgICAgbV9jb250aW51ZUxhYmVsU2NvcGVzLmxhc3QoKS5saW5rKHRoaXMpOworICAg
IH0KKworICAgIHZvaWQgZW5kTGFiZWwoKQorICAgIHsKKyAgICAgICAgbV9icmVha0xhYmVsU2Nv
cGVzLmxhc3QoKS5saW5rKHRoaXMpOworCisgICAgICAgIG1fYnJlYWtMYWJlbFNjb3Blcy5yZW1v
dmVMYXN0KCk7CisgICAgICAgIG1fY29udGludWVMYWJlbFNjb3Blcy5yZW1vdmVMYXN0KCk7Cisg
ICAgfQorCisgICAgdm9pZCBicmVha0xhYmVsU3RhdGVtZW50KHVpbnQzMl90IGxhYmVsSW5kZXgp
CisgICAgeworICAgICAgICBBU1NFUlQobGFiZWxJbmRleCA8IG1fYnJlYWtMYWJlbFNjb3Blcy5z
aXplKCkpOworICAgICAgICBtX2JyZWFrTGFiZWxTY29wZXNbbGFiZWxJbmRleF0uanVtcCh0aGlz
KTsKKyAgICB9CisKKyAgICB2b2lkIGNvbnRpbnVlTGFiZWxTdGF0ZW1lbnQodWludDMyX3QgbGFi
ZWxJbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChsYWJlbEluZGV4IDwgbV9jb250aW51ZUxh
YmVsU2NvcGVzLnNpemUoKSk7CisgICAgICAgIG1fY29udGludWVMYWJlbFNjb3Blc1tsYWJlbElu
ZGV4XS5qdW1wKHRoaXMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGNhbGxEb3VibGVG
dW5jdGlvbihkb3VibGUgKCpmdW5jdGlvbikoZG91YmxlKSwgRlBSZWdpc3RlcklEIHNyYywgRlBS
ZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbCkKKyAgICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLW1heEZyYW1lRXh0ZW50
Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICBzZXR1cEFy
Z3VtZW50cyhzcmMpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZv
aWQqPihmdW5jdGlvbikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgY2FsbChHUFJJ
bmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhD
YWxsKQorICAgICAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgICAgICAvLyBGSVhNRTog
b25seSB3b3JrcyBvbiB4ODYKKyAgICAgICAgbW92ZURvdWJsZShGUFJJbmZvOjpyZXR1cm5WYWx1
ZUZQUiwgZHN0KTsKKyAgICB9CisKKyAgICB2b2lkIGNhbGxEb3VibGVGdW5jdGlvbihkb3VibGUg
KCpmdW5jdGlvbikoZG91YmxlLCBkb3VibGUpLCBGUFJlZ2lzdGVySUQgc3JjMSwgRlBSZWdpc3Rl
cklEIHNyYzIsIEZQUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAgICAgICBpZiAobWF4RnJhbWVF
eHRlbnRGb3JTbG93UGF0aENhbGwpCisgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1t
YXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAg
ICAgICAgc2V0dXBBcmd1bWVudHMoc3JjMSwgc3JjMik7CisgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uKSksIEdQUkluZm86Om5vbkFyZ0dQUjAp
OworICAgICAgICBjYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICBpZiAobWF4RnJh
bWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCisgICAgICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
CisgICAgICAgIC8vIEZJWE1FOiBvbmx5IHdvcmtzIG9uIHg4NgorICAgICAgICBtb3ZlRG91Ymxl
KEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBkc3QpOworICAgIH0KKworICAgIHZvaWQgYWxsb2Nh
dGVTcGFjZU9uU3RhY2soKQorICAgIHsKKyAgICAgICAgLy8gVE9ETzogQ2hlY2sgZm9yIHN0YWNr
IG92ZXJmbG93LgorICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1tX3N0YWNrSGVpZ2h0ICog
OCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICB2b2lkIGRlYWxsb2NhdGVT
cGFjZU9uU3RhY2soKQorICAgIHsKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtX3N0YWNr
SGVpZ2h0ICogOCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBBZGRyZXNz
IGxvY2FsQWRkcmVzcyhpbnQgaSkgY29uc3QgLy8gRklYTUU6IElzIHRoaXMgY29ycmVjdD8KKyAg
ICB7CisgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAt
aSAqIDggLSA4KTsKKyAgICB9CisKKyAgICBBZGRyZXNzIHRlbXBvcmFyeUFkZHJlc3MoaW50IGkp
IGNvbnN0IC8vIEZJWE1FOiBJcyB0aGlzIGNvcnJlY3Q/CisgICAgeworICAgICAgICByZXR1cm4g
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgLShpICsgbV9udW1iZXJPZkxvY2Fs
cykgKiA4IC0gOCk7CisgICAgfQorCisgICAgQ2FsbCBlbWl0TmFrZWRDYWxsKENvZGVQdHIgZnVu
Y3Rpb24pCisgICAgeworICAgICAgICBDYWxsIG5ha2VkQ2FsbCA9IG5lYXJDYWxsKCk7CisgICAg
ICAgIG1fY2FsbHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG5ha2VkQ2FsbCwgZnVuY3Rpb24uZXhl
Y3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICByZXR1cm4gbmFrZWRDYWxsOworICAgIH0KKwor
ICAgIGNvbnN0IEpTV0FTTU1vZHVsZSogbV9tb2R1bGU7CisgICAgaW50IG1fc3RhY2tIZWlnaHQ7
CisKKyAgICBpbnQgbV9zcDsgLy8gRklYTUU6IFJlbmFtZQorCisgICAgdWludDMyX3QgbV9udW1i
ZXJPZkxvY2FsczsgLy8gPz8KKworICAgIExhYmVsIG1fYmVnaW5MYWJlbDsKKyAgICAvLyBKdW1w
TGlzdCBtX291dE9mQm91bmRzSnVtcExpc3Q7CisKKyAgICBWZWN0b3I8SnVtcFNjb3BlPiBtX2Jy
ZWFrU2NvcGVzOworICAgIFZlY3RvcjxKdW1wU2NvcGU+IG1fY29udGludWVTY29wZXM7CisgICAg
VmVjdG9yPEp1bXBTY29wZT4gbV9icmVha0xhYmVsU2NvcGVzOworICAgIFZlY3RvcjxKdW1wU2Nv
cGU+IG1fY29udGludWVMYWJlbFNjb3BlczsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxKSVREaXNh
c3NlbWJsZXI+IG1fZGlzYXNzZW1ibGVyOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q2FsbCwgdm9p
ZCo+PiBtX2NhbGxzOworICAgIFZlY3RvcjxDYWxsQ29tcGlsYXRpb25JbmZvPiBtX2NhbGxDb21w
aWxhdGlvbkluZm87Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJM
RShXRUJBU1NFTUJMWSkKKworI2VuZGlmIC8vIFdBU01Db2RlR2VuZXJhdG9yX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Db25zdGFudHMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dBU01Db25zdGFudHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZjRkZWMwNDgx
NWU0ZjAzMGZjOTJiMWNjY2E0YmNjMWY1ZGU0YzhiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUNvbnN0YW50cy5oCkBAIC0wLDAgKzEsMzIxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyBMaWNlbnNl
ZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsK
KyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhl
IExpY2Vuc2UuCisgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyBo
dHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworIFVubGVzcyByZXF1
aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUK
KyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMg
SVMiIEJBU0lTLAorIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5E
LCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNw
ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyBsaW1pdGF0aW9ucyB1
bmRlciB0aGUgTGljZW5zZS4KKyovCisKKyNpZm5kZWYgV0FTTUNvbnN0YW50c19oCisjZGVmaW5l
IFdBU01Db25zdGFudHNfaAorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90
IHdhc21NYWdpY051bWJlciA9IDB4NmQ3MzYxNzc7CisKK2VudW0gY2xhc3MgV0FTTU9wU3RhdGVt
ZW50IDogdWludDhfdCB7CisgICAgU2V0TG9jYWwsCisgICAgU2V0R2xvYmFsLAorICAgIEkzMlN0
b3JlOCwKKyAgICBJMzJTdG9yZU9mZnNldDgsCisgICAgSTMyU3RvcmUxNiwKKyAgICBJMzJTdG9y
ZU9mZnNldDE2LAorICAgIEkzMlN0b3JlMzIsCisgICAgSTMyU3RvcmVPZmZzZXQzMiwKKyAgICBG
MzJTdG9yZSwKKyAgICBGMzJTdG9yZU9mZnNldCwKKyAgICBGNjRTdG9yZSwKKyAgICBGNjRTdG9y
ZU9mZnNldCwKKyAgICBDYWxsSW50ZXJuYWwsCisgICAgQ2FsbEluZGlyZWN0LAorICAgIENhbGxJ
bXBvcnQsCisgICAgUmV0dXJuLAorICAgIEJsb2NrLAorICAgIElmVGhlbiwKKyAgICBJZkVsc2Us
CisgICAgV2hpbGUsCisgICAgRG8sCisgICAgTGFiZWwsCisgICAgQnJlYWssCisgICAgQnJlYWtM
YWJlbCwKKyAgICBDb250aW51ZSwKKyAgICBDb250aW51ZUxhYmVsLAorICAgIFN3aXRjaCwKKwor
ICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBXQVNNT3BTdGF0ZW1lbnRXaXRoSW1tZWRpYXRlIDog
dWludDhfdCB7CisgICAgU2V0TG9jYWwsCisgICAgU2V0R2xvYmFsLAorCisgICAgQmFkCit9Owor
CitlbnVtIGNsYXNzIFdBU01Td2l0Y2hDYXNlIDogdWludDhfdCB7CisgICAgQ2FzZTAsCisgICAg
Q2FzZTEsCisgICAgQ2FzZU4sCisgICAgRGVmYXVsdDAsCisgICAgRGVmYXVsdDEsCisgICAgRGVm
YXVsdE4sCisgICAgTnVtYmVyT2ZTd2l0Y2hDYXNlcworfTsKKworZW51bSBjbGFzcyBXQVNNT3BF
eHByZXNzaW9uSTMyIDogdWludDhfdCB7CisgICAgTGl0UG9vbCwKKyAgICBMaXRJbW0sCisgICAg
R2V0TG9jYWwsCisgICAgR2V0R2xvYmFsLAorICAgIFNldExvY2FsLAorICAgIFNldEdsb2JhbCwK
KyAgICBTTG9hZDgsCisgICAgU0xvYWRPZmZzZXQ4LAorICAgIFVMb2FkOCwKKyAgICBVTG9hZE9m
ZnNldDgsCisgICAgU0xvYWQxNiwKKyAgICBTTG9hZE9mZnNldDE2LAorICAgIFVMb2FkMTYsCisg
ICAgVUxvYWRPZmZzZXQxNiwKKyAgICBMb2FkMzIsCisgICAgTG9hZE9mZnNldDMyLAorICAgIFN0
b3JlOCwKKyAgICBTdG9yZU9mZnNldDgsCisgICAgU3RvcmUxNiwKKyAgICBTdG9yZU9mZnNldDE2
LAorICAgIFN0b3JlMzIsCisgICAgU3RvcmVPZmZzZXQzMiwKKyAgICBDYWxsSW50ZXJuYWwsCisg
ICAgQ2FsbEluZGlyZWN0LAorICAgIENhbGxJbXBvcnQsCisgICAgQ29uZGl0aW9uYWwsCisgICAg
Q29tbWEsCisgICAgRnJvbUYzMiwKKyAgICBGcm9tRjY0LAorICAgIE5lZywKKyAgICBBZGQsCisg
ICAgU3ViLAorICAgIE11bCwKKyAgICBTRGl2LAorICAgIFVEaXYsCisgICAgU01vZCwKKyAgICBV
TW9kLAorICAgIEJpdE5vdCwKKyAgICBCaXRPciwKKyAgICBCaXRBbmQsCisgICAgQml0WG9yLAor
ICAgIExlZnRTaGlmdCwKKyAgICBBcml0aG1ldGljUmlnaHRTaGlmdCwKKyAgICBMb2dpY2FsUmln
aHRTaGlmdCwKKyAgICBDbHosCisgICAgTG9naWNOb3QsCisgICAgRXF1YWxJMzIsCisgICAgRXF1
YWxGMzIsCisgICAgRXF1YWxGNjQsCisgICAgTm90RXF1YWxJMzIsCisgICAgTm90RXF1YWxGMzIs
CisgICAgTm90RXF1YWxGNjQsCisgICAgU0xlc3NUaGFuSTMyLAorICAgIFVMZXNzVGhhbkkzMiwK
KyAgICBMZXNzVGhhbkYzMiwKKyAgICBMZXNzVGhhbkY2NCwKKyAgICBTTGVzc1RoYW5PckVxdWFs
STMyLAorICAgIFVMZXNzVGhhbk9yRXF1YWxJMzIsCisgICAgTGVzc1RoYW5PckVxdWFsRjMyLAor
ICAgIExlc3NUaGFuT3JFcXVhbEY2NCwKKyAgICBTR3JlYXRlclRoYW5JMzIsCisgICAgVUdyZWF0
ZXJUaGFuSTMyLAorICAgIEdyZWF0ZXJUaGFuRjMyLAorICAgIEdyZWF0ZXJUaGFuRjY0LAorICAg
IFNHcmVhdGVyVGhhbk9yRXF1YWxJMzIsCisgICAgVUdyZWF0ZXJUaGFuT3JFcXVhbEkzMiwKKyAg
ICBHcmVhdGVyVGhhbk9yRXF1YWxGMzIsCisgICAgR3JlYXRlclRoYW5PckVxdWFsRjY0LAorICAg
IFNNaW4sCisgICAgVU1pbiwKKyAgICBTTWF4LAorICAgIFVNYXgsCisgICAgQWJzLAorCisgICAg
QmFkCit9OworCitlbnVtIGNsYXNzIFdBU01PcEV4cHJlc3Npb25JMzJXaXRoSW1tZWRpYXRlIDog
dWludDhfdCB7CisgICAgTGl0UG9vbCwKKyAgICBMaXRJbW0sCisgICAgR2V0TG9jYWwsCisKKyAg
ICBCYWQKK307CisKK2VudW0gY2xhc3MgV0FTTU9wRXhwcmVzc2lvbkYzMiA6IHVpbnQ4X3Qgewor
ICAgIExpdFBvb2wsCisgICAgTGl0SW1tLAorICAgIEdldExvY2FsLAorICAgIEdldEdsb2JhbCwK
KyAgICBTZXRMb2NhbCwKKyAgICBTZXRHbG9iYWwsCisgICAgTG9hZCwKKyAgICBMb2FkT2Zmc2V0
LAorICAgIFN0b3JlLAorICAgIFN0b3JlT2Zmc2V0LAorICAgIENhbGxJbnRlcm5hbCwKKyAgICBD
YWxsSW5kaXJlY3QsCisgICAgQ29uZGl0aW9uYWwsCisgICAgQ29tbWEsCisgICAgRnJvbVMzMiwK
KyAgICBGcm9tVTMyLAorICAgIEZyb21GNjQsCisgICAgTmVnLAorICAgIEFkZCwKKyAgICBTdWIs
CisgICAgTXVsLAorICAgIERpdiwKKyAgICBBYnMsCisgICAgQ2VpbCwKKyAgICBGbG9vciwKKyAg
ICBTcXJ0LAorCisgICAgQmFkCit9OworCitlbnVtIGNsYXNzIFdBU01PcEV4cHJlc3Npb25GMzJX
aXRoSW1tZWRpYXRlIDogdWludDhfdCB7CisgICAgTGl0UG9vbCwKKyAgICBHZXRMb2NhbCwKKwor
ICAgIEJhZAorfTsKKworZW51bSBjbGFzcyBXQVNNT3BFeHByZXNzaW9uRjY0IDogdWludDhfdCB7
CisgICAgTGl0UG9vbCwKKyAgICBMaXRJbW0sCisgICAgR2V0TG9jYWwsCisgICAgR2V0R2xvYmFs
LAorICAgIFNldExvY2FsLAorICAgIFNldEdsb2JhbCwKKyAgICBMb2FkLAorICAgIExvYWRPZmZz
ZXQsCisgICAgU3RvcmUsCisgICAgU3RvcmVPZmZzZXQsCisgICAgQ2FsbEludGVybmFsLAorICAg
IENhbGxJbmRpcmVjdCwKKyAgICBDYWxsSW1wb3J0LAorICAgIENvbmRpdGlvbmFsLAorICAgIENv
bW1hLAorICAgIEZyb21TMzIsCisgICAgRnJvbVUzMiwKKyAgICBGcm9tRjMyLAorICAgIE5lZywK
KyAgICBBZGQsCisgICAgU3ViLAorICAgIE11bCwKKyAgICBEaXYsCisgICAgTW9kLAorICAgIE1p
biwKKyAgICBNYXgsCisgICAgQWJzLAorICAgIENlaWwsCisgICAgRmxvb3IsCisgICAgU3FydCwK
KyAgICBDb3MsCisgICAgU2luLAorICAgIFRhbiwKKyAgICBBQ29zLAorICAgIEFTaW4sCisgICAg
QVRhbiwKKyAgICBBVGFuMiwKKyAgICBFeHAsCisgICAgTG4sCisgICAgUG93LAorCisgICAgQmFk
Cit9OworCitlbnVtIGNsYXNzIFdBU01PcEV4cHJlc3Npb25GNjRXaXRoSW1tZWRpYXRlIDogdWlu
dDhfdCB7CisgICAgTGl0UG9vbCwKKyAgICBHZXRMb2NhbCwKKworICAgIEJhZAorfTsKKworZW51
bSBjbGFzcyBXQVNNT3BFeHByZXNzaW9uVm9pZCA6IHVpbnQ4X3QgeworICAgIENhbGxJbnRlcm5h
bCwKKyAgICBDYWxsSW5kaXJlY3QsCisgICAgQ2FsbEltcG9ydCwKKworICAgIEJhZAorfTsKKwor
ZW51bSBjbGFzcyBXQVNNVmFyVHlwZXMgOiB1aW50OF90IHsKKyAgICBJMzIgPSAweDEsCisgICAg
RjMyID0gMHgyLAorICAgIEY2NCA9IDB4NCwKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yJihX
QVNNVmFyVHlwZXMgbGhzLCBXQVNNVmFyVHlwZXMgcmhzKSB7IHJldHVybiBib29sKHVpbnQ4X3Qo
bGhzKSAmIHVpbnQ4X3QocmhzKSk7IH0KKworZW51bSBjbGFzcyBXQVNNVmFyVHlwZXNXaXRoSW1t
ZWRpYXRlIDogdWludDhfdCB7CisgICAgT25seUkzMgorfTsKKworZW51bSBjbGFzcyBXQVNNRXhw
b3J0Rm9ybWF0IDogdWludDhfdCB7CisgICAgRGVmYXVsdCwKKyAgICBSZWNvcmQsCisgICAgTnVt
YmVyT2ZFeHBvcnRGb3JtYXRzCit9OworCitzdGF0aWMgY29uc3QgdWludDhfdCBoYXNJbW1lZGlh
dGVGbGFnID0gMHg4MDsKK3N0YXRpY19hc3NlcnQodWludDhfdChXQVNNT3BFeHByZXNzaW9uSTMy
OjpCYWQpIDw9IGhhc0ltbWVkaWF0ZUZsYWcsICJNU0IgcmVzZXJ2ZWQgdG8gZGlzdGluZ3Vpc2gg
V0FTTU9wRXhwcmVzc2lvbkkzMiBmcm9tIFdBU01PcEV4cHJlc3Npb25JMzJXaXRoSW1tZWRpYXRl
Iik7CitzdGF0aWNfYXNzZXJ0KHVpbnQ4X3QoV0FTTU9wRXhwcmVzc2lvbkYzMjo6QmFkKSA8PSBo
YXNJbW1lZGlhdGVGbGFnLCAiTVNCIHJlc2VydmVkIHRvIGRpc3Rpbmd1aXNoIFdBU01PcEV4cHJl
c3Npb25GMzIgZnJvbSBXQVNNT3BFeHByZXNzaW9uRjMyV2l0aEltbWVkaWF0ZSIpOworc3RhdGlj
X2Fzc2VydCh1aW50OF90KFdBU01PcEV4cHJlc3Npb25GNjQ6OkJhZCkgPD0gaGFzSW1tZWRpYXRl
RmxhZywgIk1TQiByZXNlcnZlZCB0byBkaXN0aW5ndWlzaCBXQVNNT3BFeHByZXNzaW9uRjY0IGZy
b20gV0FTTU9wRXhwcmVzc2lvbkY2NFdpdGhJbW1lZGlhdGUiKTsKKworc3RhdGljIGNvbnN0IHVu
c2lnbmVkIG9wV2l0aEltbWVkaWF0ZUJpdHMgPSAyOworc3RhdGljIGNvbnN0IHVpbnQzMl90IG9w
V2l0aEltbWVkaWF0ZUxpbWl0ID0gMSA8PCBvcFdpdGhJbW1lZGlhdGVCaXRzOworc3RhdGljX2Fz
c2VydCh1aW50OF90KFdBU01PcEV4cHJlc3Npb25JMzJXaXRoSW1tZWRpYXRlOjpCYWQpIDw9IG9w
V2l0aEltbWVkaWF0ZUxpbWl0LCAiV0FTTU9wRXhwcmVzc2lvbkkzMldpdGhJbW1lZGlhdGUgb3Ag
Zml0cyIpOworc3RhdGljX2Fzc2VydCh1aW50OF90KFdBU01PcEV4cHJlc3Npb25GMzJXaXRoSW1t
ZWRpYXRlOjpCYWQpIDw9IG9wV2l0aEltbWVkaWF0ZUxpbWl0LCAiV0FTTU9wRXhwcmVzc2lvbkYz
MldpdGhJbW1lZGlhdGUgb3AgZml0cyIpOworc3RhdGljX2Fzc2VydCh1aW50OF90KFdBU01PcEV4
cHJlc3Npb25GNjRXaXRoSW1tZWRpYXRlOjpCYWQpIDw9IG9wV2l0aEltbWVkaWF0ZUxpbWl0LCAi
V0FTTU9wRXhwcmVzc2lvbkY2NFdpdGhJbW1lZGlhdGUgb3AgZml0cyIpOworCitzdGF0aWMgY29u
c3QgdW5zaWduZWQgaW1tZWRpYXRlQml0cyA9IDU7CitzdGF0aWMgY29uc3QgdWludDMyX3QgaW1t
ZWRpYXRlTGltaXQgPSAxIDw8IGltbWVkaWF0ZUJpdHM7CitzdGF0aWNfYXNzZXJ0KCgxICsgb3BX
aXRoSW1tZWRpYXRlQml0cyArIGltbWVkaWF0ZUJpdHMpID09IDgsICJCaXRzIG9mIGltbWVkaWF0
ZSBvcCBzaG91bGQgYWRkIHVwIHRvIGEgYnl0ZSIpOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2VuZGlmIC8vIFdBU01Db25zdGFudHNf
aApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZvcm1hdC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZvcm1hdC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU2OTA1
ODNhZjlmNGRmZjZkOTAzOTk5Njc1MjdlNTA5YTIwNDVmNTcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRm9ybWF0LmgKQEAgLTAsMCArMSw4NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV0FT
TUZvcm1hdF9oCisjZGVmaW5lIFdBU01Gb3JtYXRfaAorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBjbGFzcyBXQVNNVHlwZSA6IHVpbnQ4X3Qg
eworICAgIEkzMiwKKyAgICBGMzIsCisgICAgRjY0LAorICAgIE51bWJlck9mVHlwZXMKK307CisK
K2VudW0gY2xhc3MgV0FTTUV4cHJlc3Npb25UeXBlIDogdWludDhfdCB7CisgICAgSTMyLAorICAg
IEYzMiwKKyAgICBGNjQsCisgICAgVm9pZCwKKyAgICBOdW1iZXJPZkV4cHJlc3Npb25UeXBlcwor
fTsKKworZW51bSBjbGFzcyBXQVNNTWVtb3J5VHlwZSA6IHVpbnQ4X3QgeworICAgIEk4LAorICAg
IEkxNiwKKyAgICBJMzIsCisgICAgRjMyLAorICAgIEY2NAorfTsKKworc3RydWN0IFdBU01TaWdu
YXR1cmUgeworICAgIFdBU01FeHByZXNzaW9uVHlwZSByZXR1cm5UeXBlOworICAgIFZlY3RvcjxX
QVNNVHlwZT4gYXJndW1lbnRzOworfTsKKworc3RydWN0IFdBU01GdW5jdGlvbkltcG9ydCB7Cisg
ICAgU3RyaW5nIGZ1bmN0aW9uTmFtZTsKK307CisKK3N0cnVjdCBXQVNNRnVuY3Rpb25JbXBvcnRT
aWduYXR1cmUgeworICAgIHVpbnQzMl90IHNpZ25hdHVyZUluZGV4OworICAgIHVpbnQzMl90IGZ1
bmN0aW9uSW1wb3J0SW5kZXg7Cit9OworCitzdHJ1Y3QgV0FTTUZ1bmN0aW9uRGVjbGFyYXRpb24g
eworICAgIHVpbnQzMl90IHNpZ25hdHVyZUluZGV4OworfTsKKworc3RydWN0IFdBU01GdW5jdGlv
blBvaW50ZXJUYWJsZSB7CisgICAgdWludDMyX3Qgc2lnbmF0dXJlSW5kZXg7CisgICAgVmVjdG9y
PHVpbnQzMl90PiBlbGVtZW50czsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjZW5kaWYgLy8gV0FTTUZvcm1hdF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42YWRhODI5MDZiOTEzNTczMDkzODg3NmFjM2NmNzFkMmM4OTM0MDYzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmNw
cApAQCAtMCwwICsxLDE1NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0FTTUZ1bmN0aW9uUGFy
c2VyLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJKU1dBU01Nb2R1
bGUuaCIKKyNpbmNsdWRlICJXQVNNQ29kZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIldBU01Db25z
dGFudHMuaCIKKyNpbmNsdWRlICJXQVNNU3ludGF4Q2hlY2tlci5oIgorCisjZGVmaW5lIFVOVVNF
RCAxIC8vIEZJWE1FOiBTaG91bGQgZGVwZW5kIG9uIHRoZSBjb250ZXh0IQorCisjZGVmaW5lIFBS
T1BBR0FURV9FUlJPUigpIGRvIHsgaWYgKCFtX2Vycm9yTWVzc2FnZS5pc051bGwoKSkgcmV0dXJu
IDA7IH0gd2hpbGUgKDApCisjZGVmaW5lIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSkg
ZG8geyAgbV9lcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7IHJldHVybiAwOyB9IHdoaWxlICgw
KQorI2RlZmluZSBSRUFEX1VJTlQzMl9PUl9GQUlMKHgsIGVycm9yTWVzc2FnZSkgZG8geyBpZiAo
IW1fcmVhZGVyLnJlYWRVSW50MzIoeCkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7
IH0gd2hpbGUgKDApCisjZGVmaW5lIFJFQURfRkxPQVRfT1JfRkFJTCh4LCBlcnJvck1lc3NhZ2Up
IGRvIHsgaWYgKCFtX3JlYWRlci5yZWFkRmxvYXQoeCkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9y
TWVzc2FnZSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFJFQURfRE9VQkxFX09SX0ZBSUwoeCwgZXJy
b3JNZXNzYWdlKSBkbyB7IGlmICghbV9yZWFkZXIucmVhZERvdWJsZSh4KSkgRkFJTF9XSVRIX01F
U1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUkVBRF9TVFJJTkdfT1Jf
RkFJTCh4LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3JlYWRlci5yZWFkU3RyaW5nKHgpKSBG
QUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQorI2RlZmluZSBSRUFE
X0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwoeCwgZXJyb3JNZXNzYWdlKSBkbyB7IGlmICghbV9yZWFk
ZXIucmVhZENvbXBhY3RVSW50MzIoeCkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7
IH0gd2hpbGUgKDApCisjZGVmaW5lIFJFQURfQ09NUEFDVF9JTlQzMl9PUl9GQUlMKHgsIGVycm9y
TWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRDb21wYWN0SW50MzIoeCkpIEZBSUxfV0lU
SF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFJFQURfRVhQUkVT
U0lPTl9UWVBFX09SX0ZBSUwoeCwgZXJyb3JNZXNzYWdlKSBkbyB7IGlmICghbV9yZWFkZXIucmVh
ZEV4cHJlc3Npb25UeXBlKHgpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdo
aWxlICgwKQorI2RlZmluZSBSRUFEX1NXSVRDSF9DQVNFX09SX0ZBSUwoeCwgZXJyb3JNZXNzYWdl
KSBkbyB7IGlmICghbV9yZWFkZXIucmVhZFN3aXRjaENhc2UoeCkpIEZBSUxfV0lUSF9NRVNTQUdF
KGVycm9yTWVzc2FnZSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIEZBSUxfSUZfRkFMU0UoY29uZGl0
aW9uLCBlcnJvck1lc3NhZ2UpIGRvIHtcCisgICAgaWYgKCEoY29uZGl0aW9uKSlcCisgICAgICAg
IEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7XAorfSB3aGlsZSAoMCkKKworbmFtZXNw
YWNlIEpTQyB7CisKK2Jvb2wgV0FTTUZ1bmN0aW9uUGFyc2VyOjpjaGVja1N5bnRheChjb25zdCBK
U1dBU01Nb2R1bGUqIG1vZHVsZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBzaXplX3QgZnVu
Y3Rpb25JbmRleCwgdW5zaWduZWQgc3RhcnRPZmZzZXRJblNvdXJjZSwgdW5zaWduZWQmIGVuZE9m
ZnNldEluU291cmNlLCB1bnNpZ25lZCYgc3RhY2tIZWlnaHQsIFN0cmluZyYgZXJyb3JNZXNzYWdl
KQoreworICAgIFdBU01GdW5jdGlvblBhcnNlciBwYXJzZXIobW9kdWxlLCBzb3VyY2UpOworICAg
IFdBU01TeW50YXhDaGVja2VyIHN5bnRheENoZWNrZXI7CisgICAgcGFyc2VyLnBhcnNlRnVuY3Rp
b24oc3ludGF4Q2hlY2tlciwgZnVuY3Rpb25JbmRleCwgc3RhcnRPZmZzZXRJblNvdXJjZSk7Cisg
ICAgaWYgKCFwYXJzZXIubV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkpIHsKKyAgICAgICAgZXJyb3JN
ZXNzYWdlID0gcGFyc2VyLm1fZXJyb3JNZXNzYWdlOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIGVuZE9mZnNldEluU291cmNlID0gcGFyc2VyLm1fcmVhZGVyLmluZGV4KCk7Cisg
ICAgc3RhY2tIZWlnaHQgPSBzeW50YXhDaGVja2VyLm1heFN0YWNrVG9wKCk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgV0FTTUZ1bmN0aW9uUGFyc2VyOjpnZW5lcmF0ZUNvZGUoVk0qIHZt
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSlNXQVNNTW9kdWxlKiBtb2R1bGUsIGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSwgc2l6ZV90IGZ1bmN0aW9uSW5kZXgsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0SW5Tb3VyY2UsIHVuc2lnbmVkIHN0YWNrSGVpZ2h0KQoreworICAgIFdBU01GdW5jdGlv
blBhcnNlciBwYXJzZXIobW9kdWxlLCBzb3VyY2UpOworICAgIFdBU01Db2RlR2VuZXJhdG9yIGNv
ZGVHZW5lcmF0b3Iodm0sIGNvZGVCbG9jaywgbW9kdWxlLCBzdGFja0hlaWdodCk7CisgICAgcGFy
c2VyLnBhcnNlRnVuY3Rpb24oY29kZUdlbmVyYXRvciwgZnVuY3Rpb25JbmRleCwgc3RhcnRPZmZz
ZXRJblNvdXJjZSk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgorYm9vbCBXQVNNRnVu
Y3Rpb25QYXJzZXI6OnBhcnNlRnVuY3Rpb24oQ29udGV4dCYgY29udGV4dCwgc2l6ZV90IGZ1bmN0
aW9uSW5kZXgsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0SW5Tb3VyY2UpCit7CisgICAgbV9yZWFkZXIu
c2V0SW5kZXgoc3RhcnRPZmZzZXRJblNvdXJjZSk7CisKKyAgICBjb25zdCBXQVNNU2lnbmF0dXJl
JiBzaWduYXR1cmUgPSBtX21vZHVsZS0+c2lnbmF0dXJlcygpW21fbW9kdWxlLT5mdW5jdGlvbkRl
Y2xhcmF0aW9ucygpW2Z1bmN0aW9uSW5kZXhdLnNpZ25hdHVyZUluZGV4XTsKKworICAgIG1fcmV0
dXJuVHlwZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlOworCisgICAgcGFyc2VMb2NhbFZhcmlhYmxl
cygpOworICAgIFBST1BBR0FURV9FUlJPUigpOworCisgICAgaW5pdGlhbGl6ZUxvY2FsVHlwZXMo
c2lnbmF0dXJlKTsKKyAgICBjb250ZXh0LnN0YXJ0RnVuY3Rpb24oc2lnbmF0dXJlLCBtX251bWJl
ck9mSTMyVmFycywgbV9udW1iZXJPZkYzMlZhcnMsIG1fbnVtYmVyT2ZGNjRWYXJzKTsKKworICAg
IHBhcnNlU3RhdGVtZW50TGlzdChjb250ZXh0KTsKKyAgICBQUk9QQUdBVEVfRVJST1IoKTsKKwor
ICAgIGNvbnRleHQuZW5kRnVuY3Rpb24oKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IFdBU01GdW5jdGlvblBhcnNlcjo6aW5pdGlhbGl6ZUxvY2FsVHlwZXMoY29uc3QgV0FTTVNpZ25h
dHVyZSYgc2lnbmF0dXJlKQoreworICAgIGNvbnN0IFZlY3RvcjxXQVNNVHlwZT4mIGFyZ3VtZW50
cyA9IHNpZ25hdHVyZS5hcmd1bWVudHM7CisgICAgZm9yIChzaXplX3QgYXJnSW5kZXggPSAwOyBh
cmdJbmRleCA8IGFyZ3VtZW50cy5zaXplKCk7ICsrYXJnSW5kZXgpCisgICAgICAgIG1fbG9jYWxU
eXBlcy5hcHBlbmQoYXJndW1lbnRzW2FyZ0luZGV4XSk7CisKKyAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgbV9udW1iZXJPZkkzMlZhcnM7ICsraSkKKyAgICAgICAgbV9sb2NhbFR5cGVzLmFw
cGVuZChXQVNNVHlwZTo6STMyKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbV9udW1i
ZXJPZkYzMlZhcnM7ICsraSkKKyAgICAgICAgbV9sb2NhbFR5cGVzLmFwcGVuZChXQVNNVHlwZTo6
RjMyKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbV9udW1iZXJPZkY2NFZhcnM7ICsr
aSkKKyAgICAgICAgbV9sb2NhbFR5cGVzLmFwcGVuZChXQVNNVHlwZTo6RjY0KTsKK30KKworYm9v
bCBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlTG9jYWxWYXJpYWJsZXMoKQoreworICAgIG1fbnVt
YmVyT2ZJMzJWYXJzID0gMDsKKyAgICBtX251bWJlck9mRjMyVmFycyA9IDA7CisgICAgbV9udW1i
ZXJPZkY2NFZhcnMgPSAwOworCisgICAgV0FTTVZhclR5cGVzIHZhclR5cGVzOworICAgIFdBU01W
YXJUeXBlc1dpdGhJbW1lZGlhdGUgdmFyVHlwZXNXaXRoSW1tZWRpYXRlOworICAgIHVpbnQ4X3Qg
aW1tZWRpYXRlOworICAgIGlmIChtX3JlYWRlci5yZWFkQ29kZSgmdmFyVHlwZXMsICZ2YXJUeXBl
c1dpdGhJbW1lZGlhdGUsICZpbW1lZGlhdGUpKSB7CisgICAgICAgIGlmICh2YXJUeXBlcyAmIFdB
U01WYXJUeXBlczo6STMyKQorICAgICAgICAgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlM
KG1fbnVtYmVyT2ZJMzJWYXJzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBpbnQzMiBsb2Nh
bCB2YXJpYWJsZXMuIik7CisgICAgICAgIGlmICh2YXJUeXBlcyAmIFdBU01WYXJUeXBlczo6RjMy
KQorICAgICAgICAgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG1fbnVtYmVyT2ZGMzJW
YXJzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBmbG9hdDMyIGxvY2FsIHZhcmlhYmxlcy4i
KTsKKyAgICAgICAgaWYgKHZhclR5cGVzICYgV0FTTVZhclR5cGVzOjpGNjQpCisgICAgICAgICAg
ICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobV9udW1iZXJPZkY2NFZhcnMsICJDYW5ub3Qg
cmVhZCB0aGUgbnVtYmVyIG9mIGZsb2F0NjQgbG9jYWwgdmFyaWFibGVzLiIpOworICAgIH0gZWxz
ZQorICAgICAgICBtX251bWJlck9mSTMyVmFycyA9IGltbWVkaWF0ZTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0U3RhdGVtZW50IFdBU01G
dW5jdGlvblBhcnNlcjo6cGFyc2VTdGF0ZW1lbnQoQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBX
QVNNT3BTdGF0ZW1lbnQgb3A7CisgICAgV0FTTU9wU3RhdGVtZW50V2l0aEltbWVkaWF0ZSBvcFdp
dGhJbW1lZGlhdGU7CisgICAgdWludDhfdCBpbW1lZGlhdGU7CisgICAgaWYgKG1fcmVhZGVyLnJl
YWRDb2RlKCZvcCwgJm9wV2l0aEltbWVkaWF0ZSwgJmltbWVkaWF0ZSkpIHsKKyAgICAgICAgc3dp
dGNoIChvcCkgeworICAgICAgICBjYXNlIFdBU01PcFN0YXRlbWVudDo6U2V0TG9jYWw6CisgICAg
ICAgICAgICBwYXJzZVNldExvY2FsU3RhdGVtZW50KGNvbnRleHQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgV0FTTU9wU3RhdGVtZW50OjpTZXRHbG9iYWw6CisgICAgICAgICAg
ICBwYXJzZVNldEdsb2JhbFN0YXRlbWVudChjb250ZXh0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFdBU01PcFN0YXRlbWVudDo6STMyU3RvcmU4OgorICAgICAgICBjYXNlIFdB
U01PcFN0YXRlbWVudDo6STMyU3RvcmVPZmZzZXQ4OgorICAgICAgICBjYXNlIFdBU01PcFN0YXRl
bWVudDo6STMyU3RvcmUxNjoKKyAgICAgICAgY2FzZSBXQVNNT3BTdGF0ZW1lbnQ6OkkzMlN0b3Jl
T2Zmc2V0MTY6CisgICAgICAgIGNhc2UgV0FTTU9wU3RhdGVtZW50OjpJMzJTdG9yZTMyOgorICAg
ICAgICBjYXNlIFdBU01PcFN0YXRlbWVudDo6STMyU3RvcmVPZmZzZXQzMjoKKyAgICAgICAgY2Fz
ZSBXQVNNT3BTdGF0ZW1lbnQ6OkYzMlN0b3JlOgorICAgICAgICBjYXNlIFdBU01PcFN0YXRlbWVu
dDo6RjMyU3RvcmVPZmZzZXQ6CisgICAgICAgIGNhc2UgV0FTTU9wU3RhdGVtZW50OjpGNjRTdG9y
ZToKKyAgICAgICAgY2FzZSBXQVNNT3BTdGF0ZW1lbnQ6OkY2NFN0b3JlT2Zmc2V0OgorICAgICAg
ICAgICAgcGFyc2VTdG9yZVN0YXRlbWVudChjb250ZXh0LCBvcCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBXQVNNT3BTdGF0ZW1lbnQ6OkNhbGxJbnRlcm5hbDoKKyAgICAgICAg
ICAgIHBhcnNlQ2FsbEludGVybmFsU3RhdGVtZW50KGNvbnRleHQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgV0FTTU9wU3RhdGVtZW50OjpDYWxsSW5kaXJlY3Q6CisgICAgICAg
ICAgICBwYXJzZUNhbGxJbmRpcmVjdFN0YXRlbWVudChjb250ZXh0KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFdBU01PcFN0YXRlbWVudDo6Q2FsbEltcG9ydDoKKyAgICAgICAg
ICAgIHBhcnNlQ2FsbEltcG9ydFN0YXRlbWVudChjb250ZXh0KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFdBU01PcFN0YXRlbWVudDo6UmV0dXJuOgorICAgICAgICAgICAgcGFy
c2VSZXR1cm5TdGF0ZW1lbnQoY29udGV4dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBXQVNNT3BTdGF0ZW1lbnQ6OkJsb2NrOgorICAgICAgICAgICAgcGFyc2VCbG9ja1N0YXRl
bWVudChjb250ZXh0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdBU01PcFN0
YXRlbWVudDo6SWZUaGVuOgorICAgICAgICAgICAgcGFyc2VJZlN0YXRlbWVudChjb250ZXh0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdBU01PcFN0YXRlbWVudDo6SWZFbHNl
OgorICAgICAgICAgICAgcGFyc2VJZkVsc2VTdGF0ZW1lbnQoY29udGV4dCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBXQVNNT3BTdGF0ZW1lbnQ6OldoaWxlOgorICAgICAgICAg
ICAgcGFyc2VXaGlsZVN0YXRlbWVudChjb250ZXh0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFdBU01PcFN0YXRlbWVudDo6RG86CisgICAgICAgICAgICBwYXJzZURvU3RhdGVt
ZW50KGNvbnRleHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0FTTU9wU3Rh
dGVtZW50OjpMYWJlbDoKKyAgICAgICAgICAgIHBhcnNlTGFiZWxTdGF0ZW1lbnQoY29udGV4dCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXQVNNT3BTdGF0ZW1lbnQ6OkJyZWFr
OgorICAgICAgICAgICAgcGFyc2VCcmVha1N0YXRlbWVudChjb250ZXh0KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFdBU01PcFN0YXRlbWVudDo6QnJlYWtMYWJlbDoKKyAgICAg
ICAgICAgIHBhcnNlQnJlYWtMYWJlbFN0YXRlbWVudChjb250ZXh0KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFdBU01PcFN0YXRlbWVudDo6Q29udGludWU6CisgICAgICAgICAg
ICBwYXJzZUNvbnRpbnVlU3RhdGVtZW50KGNvbnRleHQpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgV0FTTU9wU3RhdGVtZW50OjpDb250aW51ZUxhYmVsOgorICAgICAgICAgICAg
cGFyc2VDb250aW51ZUxhYmVsU3RhdGVtZW50KGNvbnRleHQpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgV0FTTU9wU3RhdGVtZW50OjpTd2l0Y2g6CisgICAgICAgICAgICBwYXJz
ZVN3aXRjaFN0YXRlbWVudChjb250ZXh0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcHJpbnRmKCJvcCA9ICVkXG4iLCAoaW50KW9wKTsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBzd2l0Y2ggKG9wV2l0aEltbWVkaWF0ZSkgeworICAgICAgICBjYXNlIFdB
U01PcFN0YXRlbWVudFdpdGhJbW1lZGlhdGU6OlNldExvY2FsOgorICAgICAgICAgICAgcGFyc2VT
ZXRMb2NhbFN0YXRlbWVudChjb250ZXh0LCBpbW1lZGlhdGUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgV0FTTU9wU3RhdGVtZW50V2l0aEltbWVkaWF0ZTo6U2V0R2xvYmFsOgor
ICAgICAgICAgICAgcGFyc2VTZXRHbG9iYWxTdGF0ZW1lbnQoY29udGV4dCwgaW1tZWRpYXRlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFVOVVNFRDsKK30K
KwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0U3RhdGVtZW50IFdBU01GdW5jdGlv
blBhcnNlcjo6cGFyc2VTZXRMb2NhbFN0YXRlbWVudChDb250ZXh0JiBjb250ZXh0LCB1aW50MzJf
dCBsb2NhbEluZGV4KQoreworICAgIEZBSUxfSUZfRkFMU0UobG9jYWxJbmRleCA8IG1fbG9jYWxU
eXBlcy5zaXplKCksICJUaGUgbG9jYWwgdmFyaWFibGUgaW5kZXggaXMgaW5jb3JyZWN0LiIpOwor
ICAgIFdBU01UeXBlIHR5cGUgPSBtX2xvY2FsVHlwZXNbbG9jYWxJbmRleF07CisgICAgQ29udGV4
dEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0LCBXQVNNRXhw
cmVzc2lvblR5cGUodHlwZSkpOworICAgIGNvbnRleHQuc2V0TG9jYWwobG9jYWxJbmRleCwgZXhw
cmVzc2lvbiwgdHlwZSk7CisgICAgcmV0dXJuIFVOVVNFRDsKK30KKwordGVtcGxhdGUgPGNsYXNz
IENvbnRleHQ+CitDb250ZXh0U3RhdGVtZW50IFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VTZXRM
b2NhbFN0YXRlbWVudChDb250ZXh0JiBjb250ZXh0KQoreworICAgIHVpbnQzMl90IGxvY2FsSW5k
ZXg7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGxvY2FsSW5kZXgsICJDYW5ub3Qg
cmVhZCB0aGUgbG9jYWwgaW5kZXguIik7CisgICAgcGFyc2VTZXRMb2NhbFN0YXRlbWVudChjb250
ZXh0LCBsb2NhbEluZGV4KTsKKyAgICByZXR1cm4gVU5VU0VEOworfQorCit0ZW1wbGF0ZSA8Y2xh
c3MgQ29udGV4dD4KK0NvbnRleHRTdGF0ZW1lbnQgV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVNl
dEdsb2JhbFN0YXRlbWVudChDb250ZXh0JiBjb250ZXh0LCB1aW50MzJfdCBnbG9iYWxJbmRleCkK
K3sKKyAgICBGQUlMX0lGX0ZBTFNFKGdsb2JhbEluZGV4IDwgbV9tb2R1bGUtPmdsb2JhbFZhcmlh
YmxlVHlwZXMoKS5zaXplKCksICJUaGUgZ2xvYmFsIGluZGV4IGlzIGluY29ycmVjdC4iKTsKKyAg
ICBXQVNNVHlwZSB0eXBlID0gbV9tb2R1bGUtPmdsb2JhbFZhcmlhYmxlVHlwZXMoKVtnbG9iYWxJ
bmRleF07CisgICAgQ29udGV4dEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lv
bihjb250ZXh0LCBXQVNNRXhwcmVzc2lvblR5cGUodHlwZSkpOworICAgIFBST1BBR0FURV9FUlJP
UigpOworICAgIGNvbnRleHQuY3JlYXRlU2V0R2xvYmFsKGdsb2JhbEluZGV4LCBleHByZXNzaW9u
LCB0eXBlLCBmYWxzZSk7CisgICAgcmV0dXJuIFVOVVNFRDsKK30KKwordGVtcGxhdGUgPGNsYXNz
IENvbnRleHQ+CitDb250ZXh0U3RhdGVtZW50IFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VTZXRH
bG9iYWxTdGF0ZW1lbnQoQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICB1aW50MzJfdCBnbG9iYWxJ
bmRleDsKKyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwoZ2xvYmFsSW5kZXgsICJDYW5u
b3QgcmVhZCB0aGUgZ2xvYmFsIGluZGV4LiIpOworICAgIHBhcnNlU2V0R2xvYmFsU3RhdGVtZW50
KGNvbnRleHQsIGdsb2JhbEluZGV4KTsKKyAgICByZXR1cm4gVU5VU0VEOworfQorCit0ZW1wbGF0
ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRleHRTdGF0ZW1lbnQgV0FTTUZ1bmN0aW9uUGFyc2VyOjpw
YXJzZVN0b3JlU3RhdGVtZW50KENvbnRleHQmIGNvbnRleHQsIFdBU01PcFN0YXRlbWVudCBvcCkK
K3sKKyAgICBXQVNNRXhwcmVzc2lvblR5cGUgZXhwcmVzc2lvblR5cGU7CisgICAgV0FTTU1lbW9y
eVR5cGUgbWVtb3J5VHlwZTsKKyAgICBib29sIGhhc09mZnNldDsKKyAgICBzd2l0Y2ggKG9wKSB7
CisgICAgY2FzZSBXQVNNT3BTdGF0ZW1lbnQ6OkkzMlN0b3JlODoKKyAgICAgICAgZXhwcmVzc2lv
blR5cGUgPSBXQVNNRXhwcmVzc2lvblR5cGU6OkkzMjsKKyAgICAgICAgbWVtb3J5VHlwZSA9IFdB
U01NZW1vcnlUeXBlOjpJODsKKyAgICAgICAgaGFzT2Zmc2V0ID0gZmFsc2U7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgV0FTTU9wU3RhdGVtZW50OjpJMzJTdG9yZU9mZnNldDg6CisgICAgICAg
IGV4cHJlc3Npb25UeXBlID0gV0FTTUV4cHJlc3Npb25UeXBlOjpJMzI7CisgICAgICAgIG1lbW9y
eVR5cGUgPSBXQVNNTWVtb3J5VHlwZTo6STg7CisgICAgICAgIGhhc09mZnNldCA9IHRydWU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgV0FTTU9wU3RhdGVtZW50OjpJMzJTdG9yZTE2OgorICAg
ICAgICBleHByZXNzaW9uVHlwZSA9IFdBU01FeHByZXNzaW9uVHlwZTo6STMyOworICAgICAgICBt
ZW1vcnlUeXBlID0gV0FTTU1lbW9yeVR5cGU6OkkxNjsKKyAgICAgICAgaGFzT2Zmc2V0ID0gZmFs
c2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0FTTU9wU3RhdGVtZW50OjpJMzJTdG9yZU9m
ZnNldDE2OgorICAgICAgICBleHByZXNzaW9uVHlwZSA9IFdBU01FeHByZXNzaW9uVHlwZTo6STMy
OworICAgICAgICBtZW1vcnlUeXBlID0gV0FTTU1lbW9yeVR5cGU6OkkxNjsKKyAgICAgICAgaGFz
T2Zmc2V0ID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXQVNNT3BTdGF0ZW1lbnQ6
OkkzMlN0b3JlMzI6CisgICAgICAgIGV4cHJlc3Npb25UeXBlID0gV0FTTUV4cHJlc3Npb25UeXBl
OjpJMzI7CisgICAgICAgIG1lbW9yeVR5cGUgPSBXQVNNTWVtb3J5VHlwZTo6STMyOworICAgICAg
ICBoYXNPZmZzZXQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXQVNNT3BTdGF0
ZW1lbnQ6OkkzMlN0b3JlT2Zmc2V0MzI6CisgICAgICAgIGV4cHJlc3Npb25UeXBlID0gV0FTTUV4
cHJlc3Npb25UeXBlOjpJMzI7CisgICAgICAgIG1lbW9yeVR5cGUgPSBXQVNNTWVtb3J5VHlwZTo6
STMyOworICAgICAgICBoYXNPZmZzZXQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFdBU01PcFN0YXRlbWVudDo6RjMyU3RvcmU6CisgICAgICAgIGV4cHJlc3Npb25UeXBlID0gV0FT
TUV4cHJlc3Npb25UeXBlOjpGMzI7CisgICAgICAgIG1lbW9yeVR5cGUgPSBXQVNNTWVtb3J5VHlw
ZTo6RjMyOworICAgICAgICBoYXNPZmZzZXQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBXQVNNT3BTdGF0ZW1lbnQ6OkYzMlN0b3JlT2Zmc2V0OgorICAgICAgICBleHByZXNzaW9u
VHlwZSA9IFdBU01FeHByZXNzaW9uVHlwZTo6RjMyOworICAgICAgICBtZW1vcnlUeXBlID0gV0FT
TU1lbW9yeVR5cGU6OkYzMjsKKyAgICAgICAgaGFzT2Zmc2V0ID0gdHJ1ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBXQVNNT3BTdGF0ZW1lbnQ6OkY2NFN0b3JlOgorICAgICAgICBleHByZXNz
aW9uVHlwZSA9IFdBU01FeHByZXNzaW9uVHlwZTo6RjY0OworICAgICAgICBtZW1vcnlUeXBlID0g
V0FTTU1lbW9yeVR5cGU6OkY2NDsKKyAgICAgICAgaGFzT2Zmc2V0ID0gZmFsc2U7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgV0FTTU9wU3RhdGVtZW50OjpGNjRTdG9yZU9mZnNldDoKKyAgICAg
ICAgZXhwcmVzc2lvblR5cGUgPSBXQVNNRXhwcmVzc2lvblR5cGU6OkY2NDsKKyAgICAgICAgbWVt
b3J5VHlwZSA9IFdBU01NZW1vcnlUeXBlOjpGNjQ7CisgICAgICAgIGhhc09mZnNldCA9IHRydWU7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KKworICAgIHBhcnNlU3RvcmUoY29udGV4dCwgaGFzT2Zmc2V0LCBleHByZXNz
aW9uVHlwZSwgbWVtb3J5VHlwZSwgZmFsc2UpOworICAgIHJldHVybiBVTlVTRUQ7Cit9CisKK3Rl
bXBsYXRlIDxjbGFzcyBDb250ZXh0PgorQ29udGV4dFN0YXRlbWVudCBXQVNNRnVuY3Rpb25QYXJz
ZXI6OnBhcnNlQ2FsbEludGVybmFsU3RhdGVtZW50KENvbnRleHQmIGNvbnRleHQpCit7CisgICAg
cGFyc2VDYWxsSW50ZXJuYWwoY29udGV4dCwgZmFsc2UsIFdBU01FeHByZXNzaW9uVHlwZTo6Vm9p
ZCk7CisgICAgcmV0dXJuIFVOVVNFRDsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitD
b250ZXh0U3RhdGVtZW50IFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VDYWxsSW5kaXJlY3RTdGF0
ZW1lbnQoQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBwYXJzZUNhbGxJbmRpcmVjdChjb250ZXh0
LCBmYWxzZSwgV0FTTUV4cHJlc3Npb25UeXBlOjpWb2lkKTsKKyAgICByZXR1cm4gVU5VU0VEOwor
fQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRleHRTdGF0ZW1lbnQgV0FTTUZ1bmN0
aW9uUGFyc2VyOjpwYXJzZUNhbGxJbXBvcnRTdGF0ZW1lbnQoQ29udGV4dCYgY29udGV4dCkKK3sK
KyAgICBwYXJzZUNhbGxJbXBvcnQoY29udGV4dCwgZmFsc2UsIFdBU01FeHByZXNzaW9uVHlwZTo6
Vm9pZCk7CisgICAgcmV0dXJuIFVOVVNFRDsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+
CitDb250ZXh0U3RhdGVtZW50IFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VSZXR1cm5TdGF0ZW1l
bnQoQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBDb250ZXh0RXhwcmVzc2lvbiBleHByZXNzaW9u
OworICAgIGlmIChtX3JldHVyblR5cGUgIT0gV0FTTUV4cHJlc3Npb25UeXBlOjpWb2lkKSB7Cisg
ICAgICAgIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCwgbV9yZXR1cm5UeXBl
KTsKKyAgICAgICAgUFJPUEFHQVRFX0VSUk9SKCk7CisgICAgfSBlbHNlCisgICAgICAgIGV4cHJl
c3Npb24gPSAwOworICAgIGNvbnRleHQucmV0dXJuU3RhdGVtZW50KGV4cHJlc3Npb24sIG1fcmV0
dXJuVHlwZSk7CisgICAgcmV0dXJuIFVOVVNFRDsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRl
eHQ+CitDb250ZXh0U3RhdGVtZW50IFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VTdGF0ZW1lbnRM
aXN0KENvbnRleHQmIGNvbnRleHQpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZTdGF0ZW1lbnRz
OworICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZlN0YXRlbWVudHMsICJD
YW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIHN0YXRlbWVudHMuIik7CisgICAgZm9yICh1aW50MzJf
dCBpID0gMDsgaSA8IG51bWJlck9mU3RhdGVtZW50czsgKytpKSB7CisgICAgICAgIHBhcnNlU3Rh
dGVtZW50KGNvbnRleHQpOworICAgICAgICBQUk9QQUdBVEVfRVJST1IoKTsKKyAgICB9CisgICAg
cmV0dXJuIFVOVVNFRDsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0U3Rh
dGVtZW50IFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VCbG9ja1N0YXRlbWVudChDb250ZXh0JiBj
b250ZXh0KQoreworICAgIHBhcnNlU3RhdGVtZW50TGlzdChjb250ZXh0KTsKKyAgICByZXR1cm4g
VU5VU0VEOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRleHRTdGF0ZW1lbnQg
V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUlmU3RhdGVtZW50KENvbnRleHQmIGNvbnRleHQpCit7
CisgICAgQ29udGV4dEV4cHJlc3Npb24gY29uZGl0aW9uID0gcGFyc2VFeHByZXNzaW9uSTMyKGNv
bnRleHQpOworICAgIFBST1BBR0FURV9FUlJPUigpOworICAgIENvbnRleHRKdW1wIGVuZCA9IGNv
bnRleHQuaml0QnJhbmNoSWZaZXJvKGNvbmRpdGlvbik7CisgICAgcGFyc2VTdGF0ZW1lbnQoY29u
dGV4dCk7CisgICAgUFJPUEFHQVRFX0VSUk9SKCk7CisgICAgY29udGV4dC5qaXRMaW5rSnVtcChl
bmQpOworICAgIHJldHVybiBVTlVTRUQ7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0Pgor
Q29udGV4dFN0YXRlbWVudCBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlSWZFbHNlU3RhdGVtZW50
KENvbnRleHQmIGNvbnRleHQpCit7CisgICAgQ29udGV4dEV4cHJlc3Npb24gY29uZGl0aW9uID0g
cGFyc2VFeHByZXNzaW9uSTMyKGNvbnRleHQpOworICAgIFBST1BBR0FURV9FUlJPUigpOworICAg
IENvbnRleHRKdW1wIGVsc2VKdW1wID0gY29udGV4dC5qaXRCcmFuY2hJZlplcm8oY29uZGl0aW9u
KTsKKyAgICBwYXJzZVN0YXRlbWVudChjb250ZXh0KTsKKyAgICBQUk9QQUdBVEVfRVJST1IoKTsK
KyAgICBDb250ZXh0SnVtcCBlbmQgPSBjb250ZXh0LmppdEp1bXAoKTsKKyAgICBjb250ZXh0Lmpp
dExpbmtKdW1wKGVsc2VKdW1wKTsKKyAgICBwYXJzZVN0YXRlbWVudChjb250ZXh0KTsKKyAgICBQ
Uk9QQUdBVEVfRVJST1IoKTsKKyAgICBjb250ZXh0LmppdExpbmtKdW1wKGVuZCk7CisgICAgcmV0
dXJuIFVOVVNFRDsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0U3RhdGVt
ZW50IFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VXaGlsZVN0YXRlbWVudChDb250ZXh0JiBjb250
ZXh0KQoreworICAgIGNvbnRleHQuc3RhcnRMb29wKCk7CisgICAgY29udGV4dC5saW5rQ29udGlu
dWUoKTsKKworICAgIENvbnRleHRMYWJlbCBzdGFydCA9IGNvbnRleHQuaml0TGFiZWwoKTsKKyAg
ICBDb250ZXh0RXhwcmVzc2lvbiBjb25kaXRpb24gPSBwYXJzZUV4cHJlc3Npb25JMzIoY29udGV4
dCk7CisgICAgUFJPUEFHQVRFX0VSUk9SKCk7CisgICAgQ29udGV4dEp1bXAganVtcFRvRW5kID0g
Y29udGV4dC5qaXRCcmFuY2hJZlplcm8oY29uZGl0aW9uKTsKKworICAgIG1fYnJlYWtTY29wZURl
cHRoKys7CisgICAgbV9jb250aW51ZVNjb3BlRGVwdGgrKzsKKyAgICBwYXJzZVN0YXRlbWVudChj
b250ZXh0KTsKKyAgICBQUk9QQUdBVEVfRVJST1IoKTsKKyAgICBtX2NvbnRpbnVlU2NvcGVEZXB0
aC0tOworICAgIG1fYnJlYWtTY29wZURlcHRoLS07CisKKyAgICBjb250ZXh0LmppdEp1bXAoc3Rh
cnQpOworICAgIGNvbnRleHQuaml0TGlua0p1bXAoanVtcFRvRW5kKTsKKworICAgIGNvbnRleHQu
bGlua0JyZWFrKCk7CisgICAgY29udGV4dC5lbmRMb29wKCk7CisgICAgcmV0dXJuIFVOVVNFRDsK
K30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0U3RhdGVtZW50IFdBU01GdW5j
dGlvblBhcnNlcjo6cGFyc2VEb1N0YXRlbWVudChDb250ZXh0JiBjb250ZXh0KQoreworICAgIGNv
bnRleHQuc3RhcnRMb29wKCk7CisKKyAgICBDb250ZXh0TGFiZWwgc3RhcnQgPSBjb250ZXh0Lmpp
dExhYmVsKCk7CisKKyAgICBtX2JyZWFrU2NvcGVEZXB0aCsrOworICAgIG1fY29udGludWVTY29w
ZURlcHRoKys7CisgICAgcGFyc2VTdGF0ZW1lbnQoY29udGV4dCk7CisgICAgUFJPUEFHQVRFX0VS
Uk9SKCk7CisgICAgbV9jb250aW51ZVNjb3BlRGVwdGgtLTsKKyAgICBtX2JyZWFrU2NvcGVEZXB0
aC0tOworCisgICAgY29udGV4dC5saW5rQ29udGludWUoKTsKKworICAgIENvbnRleHRFeHByZXNz
aW9uIGNvbmRpdGlvbiA9IHBhcnNlRXhwcmVzc2lvbkkzMihjb250ZXh0KTsKKyAgICBQUk9QQUdB
VEVfRVJST1IoKTsKKyAgICBDb250ZXh0SnVtcCBqdW1wVG9TdGFydCA9IGNvbnRleHQuaml0QnJh
bmNoSWZOb25aZXJvKGNvbmRpdGlvbik7CisgICAgY29udGV4dC5qaXRMaW5rSnVtcFRvTGFiZWwo
anVtcFRvU3RhcnQsIHN0YXJ0KTsKKworICAgIGNvbnRleHQubGlua0JyZWFrKCk7CisgICAgY29u
dGV4dC5lbmRMb29wKCk7CisgICAgcmV0dXJuIFVOVVNFRDsKK30KKwordGVtcGxhdGUgPGNsYXNz
IENvbnRleHQ+CitDb250ZXh0U3RhdGVtZW50IFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VMYWJl
bFN0YXRlbWVudChDb250ZXh0JiBjb250ZXh0KQoreworICAgIGNvbnRleHQuc3RhcnRMYWJlbCgp
OworICAgIG1fbGFiZWxEZXB0aCsrOworICAgIHBhcnNlU3RhdGVtZW50KGNvbnRleHQpOworICAg
IG1fbGFiZWxEZXB0aC0tOworICAgIGNvbnRleHQuZW5kTGFiZWwoKTsKKyAgICByZXR1cm4gVU5V
U0VEOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRleHRTdGF0ZW1lbnQgV0FT
TUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUJyZWFrU3RhdGVtZW50KENvbnRleHQmIGNvbnRleHQpCit7
CisgICAgRkFJTF9JRl9GQUxTRShtX2JyZWFrU2NvcGVEZXB0aCwgIidicmVhaycgaXMgb25seSB2
YWxpZCBpbnNpZGUgYSBzd2l0Y2ggb3IgbG9vcCBzdGF0ZW1lbnQuIik7CisgICAgY29udGV4dC5i
cmVha1N0YXRlbWVudCgpOworICAgIHJldHVybiBVTlVTRUQ7Cit9CisKK3RlbXBsYXRlIDxjbGFz
cyBDb250ZXh0PgorQ29udGV4dFN0YXRlbWVudCBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQnJl
YWtMYWJlbFN0YXRlbWVudChDb250ZXh0JiBjb250ZXh0KQoreworICAgIHVpbnQzMl90IGxhYmVs
SW5kZXg7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGxhYmVsSW5kZXgsICJDYW5u
b3QgcmVhZCB0aGUgbGFiZWwgaW5kZXguIik7CisgICAgRkFJTF9JRl9GQUxTRShsYWJlbEluZGV4
IDwgbV9sYWJlbERlcHRoLCAiVGhlIGxhYmVsIGluZGV4IGlzIGluY29ycmVjdC4iKTsKKyAgICBj
b250ZXh0LmJyZWFrTGFiZWxTdGF0ZW1lbnQobGFiZWxJbmRleCk7CisgICAgcmV0dXJuIFVOVVNF
RDsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0U3RhdGVtZW50IFdBU01G
dW5jdGlvblBhcnNlcjo6cGFyc2VDb250aW51ZVN0YXRlbWVudChDb250ZXh0JiBjb250ZXh0KQor
eworICAgIEZBSUxfSUZfRkFMU0UobV9jb250aW51ZVNjb3BlRGVwdGgsICInY29udGludWUnIGlz
IG9ubHkgdmFsaWQgaW5zaWRlIGEgbG9vcCBzdGF0ZW1lbnQuIik7CisgICAgY29udGV4dC5jb250
aW51ZVN0YXRlbWVudCgpOworICAgIHJldHVybiBVTlVTRUQ7Cit9CisKK3RlbXBsYXRlIDxjbGFz
cyBDb250ZXh0PgorQ29udGV4dFN0YXRlbWVudCBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ29u
dGludWVMYWJlbFN0YXRlbWVudChDb250ZXh0JiBjb250ZXh0KQoreworICAgIHVpbnQzMl90IGxh
YmVsSW5kZXg7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGxhYmVsSW5kZXgsICJD
YW5ub3QgcmVhZCB0aGUgbGFiZWwgaW5kZXguIik7CisgICAgRkFJTF9JRl9GQUxTRShsYWJlbElu
ZGV4IDwgbV9sYWJlbERlcHRoLCAiVGhlIGxhYmVsIGluZGV4IGlzIGluY29ycmVjdC4iKTsKKyAg
ICBjb250ZXh0LmNvbnRpbnVlTGFiZWxTdGF0ZW1lbnQobGFiZWxJbmRleCk7CisgICAgcmV0dXJu
IFVOVVNFRDsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0U3RhdGVtZW50
IFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VTd2l0Y2hTdGF0ZW1lbnQoQ29udGV4dCYgY29udGV4
dCkKK3sKKyAgICBjb250ZXh0LnN0YXJ0U3dpdGNoKCk7CisKKyAgICB1aW50MzJfdCBudW1iZXJP
ZkNhc2VzOworICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZkNhc2VzLCAi
Q2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBjYXNlcy4iKTsKKyAgICBDb250ZXh0RXhwcmVzc2lv
biB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uSTMyKGNvbnRleHQpOworICAgIFBST1BBR0FURV9FUlJP
UigpOworCisgICAgQ29udGV4dEp1bXAgdGFibGUgPSBjb250ZXh0LmppdEp1bXAoKTsKKworICAg
IFZlY3RvcjxpbnQzMl90PiBjYXNlczsKKyAgICBib29sIGhhc0RlZmF1bHQgPSBmYWxzZTsKKyAg
ICBWZWN0b3I8Q29udGV4dExhYmVsPiBsYWJlbHM7IC8vIFRPRE86IHVzZSBDb250ZXh0TGFiZWxM
aXN0CisgICAgY2FzZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkNhc2VzKTsKKyAg
ICBsYWJlbHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkNhc2VzKTsKKworICAgIG1f
YnJlYWtTY29wZURlcHRoKys7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9m
Q2FzZXM7ICsraSkgeworICAgICAgICBXQVNNU3dpdGNoQ2FzZSBzd2l0Y2hDYXNlOworICAgICAg
ICBSRUFEX1NXSVRDSF9DQVNFX09SX0ZBSUwoc3dpdGNoQ2FzZSwgIkNhbm5vdCByZWFkIHRoZSBz
d2l0Y2ggY2FzZS4iKTsKKyAgICAgICAgc3dpdGNoIChzd2l0Y2hDYXNlKSB7CisgICAgICAgIGNh
c2UgV0FTTVN3aXRjaENhc2U6OkNhc2UwOgorICAgICAgICBjYXNlIFdBU01Td2l0Y2hDYXNlOjpD
YXNlMToKKyAgICAgICAgY2FzZSBXQVNNU3dpdGNoQ2FzZTo6Q2FzZU46IHsKKyAgICAgICAgICAg
IHVpbnQzMl90IHZhbHVlOworICAgICAgICAgICAgUkVBRF9DT01QQUNUX0lOVDMyX09SX0ZBSUwo
dmFsdWUsICJDYW5ub3QgcmVhZCB0aGUgdmFsdWUgb2YgdGhlIHN3aXRjaCBjYXNlLiIpOworICAg
ICAgICAgICAgY2FzZXMuYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgICAgIGxhYmVscy5hcHBlbmQo
Y29udGV4dC5qaXRMYWJlbCgpKTsKKyAgICAgICAgICAgIGlmIChzd2l0Y2hDYXNlID09IFdBU01T
d2l0Y2hDYXNlOjpDYXNlMSkgeworICAgICAgICAgICAgICAgIHBhcnNlU3RhdGVtZW50KGNvbnRl
eHQpOworICAgICAgICAgICAgICAgIFBST1BBR0FURV9FUlJPUigpOworICAgICAgICAgICAgfSBl
bHNlIGlmIChzd2l0Y2hDYXNlID09IFdBU01Td2l0Y2hDYXNlOjpDYXNlTikgeworICAgICAgICAg
ICAgICAgIHBhcnNlU3RhdGVtZW50TGlzdChjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBQUk9Q
QUdBVEVfRVJST1IoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgV0FTTVN3aXRjaENhc2U6OkRlZmF1bHQwOgorICAgICAgICBjYXNl
IFdBU01Td2l0Y2hDYXNlOjpEZWZhdWx0MToKKyAgICAgICAgY2FzZSBXQVNNU3dpdGNoQ2FzZTo6
RGVmYXVsdE46IHsKKyAgICAgICAgICAgIEZBSUxfSUZfRkFMU0UoaSA9PSBudW1iZXJPZkNhc2Vz
IC0gMSwgIlRoZSBkZWZhdWx0IGNhc2UgbXVzdCBiZSB0aGUgbGFzdCBjYXNlLiIpOworICAgICAg
ICAgICAgbGFiZWxzLmFwcGVuZChjb250ZXh0LmppdExhYmVsKCkpOworICAgICAgICAgICAgaGFz
RGVmYXVsdCA9IHRydWU7CisgICAgICAgICAgICBpZiAoc3dpdGNoQ2FzZSA9PSBXQVNNU3dpdGNo
Q2FzZTo6RGVmYXVsdDEpIHsKKyAgICAgICAgICAgICAgICBwYXJzZVN0YXRlbWVudChjb250ZXh0
KTsKKyAgICAgICAgICAgICAgICBQUk9QQUdBVEVfRVJST1IoKTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoc3dpdGNoQ2FzZSA9PSBXQVNNU3dpdGNoQ2FzZTo6RGVmYXVsdE4pIHsKKyAgICAgICAg
ICAgICAgICBwYXJzZVN0YXRlbWVudExpc3QoY29udGV4dCk7CisgICAgICAgICAgICAgICAgUFJP
UEFHQVRFX0VSUk9SKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgbV9icmVha1Njb3BlRGVwdGgtLTsKKworICAgIENvbnRl
eHRKdW1wIGVuZCA9IGNvbnRleHQuaml0SnVtcCgpOworICAgIGNvbnRleHQuaml0TGlua0p1bXAo
dGFibGUpOworCisgICAgY29udGV4dC5nZW5lcmF0ZVN3aXRjaFRhYmxlKHRlc3QsIGNhc2VzLCBo
YXNEZWZhdWx0LCBsYWJlbHMpOworCisgICAgY29udGV4dC5qaXRMaW5rSnVtcChlbmQpOworCisg
ICAgY29udGV4dC5saW5rQnJlYWsoKTsKKyAgICBjb250ZXh0LmVuZFN3aXRjaCgpOworICAgIHJl
dHVybiBVTlVTRUQ7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgorQ29udGV4dEV4cHJl
c3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUV4cHJlc3Npb24oQ29udGV4dCYgY29udGV4
dCwgV0FTTUV4cHJlc3Npb25UeXBlIGV4cHJlc3Npb25UeXBlKQoreworICAgIHN3aXRjaCAoZXhw
cmVzc2lvblR5cGUpIHsKKyAgICBjYXNlIFdBU01FeHByZXNzaW9uVHlwZTo6STMyOgorICAgICAg
ICByZXR1cm4gcGFyc2VFeHByZXNzaW9uSTMyKGNvbnRleHQpOworICAgIGNhc2UgV0FTTUV4cHJl
c3Npb25UeXBlOjpGMzI6CisgICAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25GMzIoY29udGV4
dCk7CisgICAgY2FzZSBXQVNNRXhwcmVzc2lvblR5cGU6OkY2NDoKKyAgICAgICAgcmV0dXJuIHBh
cnNlRXhwcmVzc2lvbkY2NChjb250ZXh0KTsKKyAgICBjYXNlIFdBU01FeHByZXNzaW9uVHlwZTo6
Vm9pZDoKKyAgICAgICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvblZvaWQoY29udGV4dCk7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit0ZW1w
bGF0ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNl
cjo6cGFyc2VFeHByZXNzaW9uSTMyKENvbnRleHQmIGNvbnRleHQpCit7CisgICAgV0FTTU9wRXhw
cmVzc2lvbkkzMiBvcDsKKyAgICBXQVNNT3BFeHByZXNzaW9uSTMyV2l0aEltbWVkaWF0ZSBvcFdp
dGhJbW1lZGlhdGU7CisgICAgdWludDhfdCBpbW1lZGlhdGU7CisKKyAgICBpZiAobV9yZWFkZXIu
cmVhZENvZGUoJm9wLCAmb3BXaXRoSW1tZWRpYXRlLCAmaW1tZWRpYXRlKSkgeworICAgICAgICBz
d2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6TGl0UG9vbDoK
KyAgICAgICAgICAgIHJldHVybiBwYXJzZUxpdGVyYWxQb29sRXhwcmVzc2lvbkkzMihjb250ZXh0
KTsKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpMaXRJbW06CisgICAgICAgICAg
ICByZXR1cm4gcGFyc2VMaXRlcmFsSW1tZWRpYXRlRXhwcmVzc2lvbkkzMihjb250ZXh0KTsKKyAg
ICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpHZXRMb2NhbDoKKyAgICAgICAgICAgIHJl
dHVybiBwYXJzZUdldExvY2FsRXhwcmVzc2lvbkkzMihjb250ZXh0KTsKKyAgICAgICAgY2FzZSBX
QVNNT3BFeHByZXNzaW9uSTMyOjpHZXRHbG9iYWw6CisgICAgICAgICAgICByZXR1cm4gcGFyc2VH
ZXRHbG9iYWxFeHByZXNzaW9uSTMyKGNvbnRleHQpOworICAgICAgICBjYXNlIFdBU01PcEV4cHJl
c3Npb25JMzI6OlNldExvY2FsOgorICAgICAgICAgICAgcmV0dXJuIHBhcnNlU2V0TG9jYWxFeHBy
ZXNzaW9uSTMyKGNvbnRleHQpOworICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlNl
dEdsb2JhbDoKKyAgICAgICAgICAgIHJldHVybiBwYXJzZVNldEdsb2JhbEV4cHJlc3Npb25JMzIo
Y29udGV4dCk7CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6U0xvYWQ4OgorICAg
ICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlNMb2FkT2Zmc2V0ODoKKyAgICAgICAgY2Fz
ZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpVTG9hZDg6CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVz
c2lvbkkzMjo6VUxvYWRPZmZzZXQ4OgorICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6
OlNMb2FkMTY6CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6U0xvYWRPZmZzZXQx
NjoKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpVTG9hZDE2OgorICAgICAgICBj
YXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlVMb2FkT2Zmc2V0MTY6CisgICAgICAgIGNhc2UgV0FT
TU9wRXhwcmVzc2lvbkkzMjo6TG9hZDMyOgorICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25J
MzI6OkxvYWRPZmZzZXQzMjoKKyAgICAgICAgICAgIHJldHVybiBwYXJzZUxvYWRFeHByZXNzaW9u
STMyKGNvbnRleHQsIG9wKTsKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpTdG9y
ZTg6CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6U3RvcmVPZmZzZXQ4OgorICAg
ICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlN0b3JlMTY6CisgICAgICAgIGNhc2UgV0FT
TU9wRXhwcmVzc2lvbkkzMjo6U3RvcmVPZmZzZXQxNjoKKyAgICAgICAgY2FzZSBXQVNNT3BFeHBy
ZXNzaW9uSTMyOjpTdG9yZTMyOgorICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlN0
b3JlT2Zmc2V0MzI6CisgICAgICAgICAgICByZXR1cm4gcGFyc2VTdG9yZUV4cHJlc3Npb25JMzIo
Y29udGV4dCwgb3ApOworICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkNhbGxJbnRl
cm5hbDoKKyAgICAgICAgICAgIHJldHVybiBwYXJzZUNhbGxJbnRlcm5hbEV4cHJlc3Npb25JMzIo
Y29udGV4dCk7CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Q2FsbEluZGlyZWN0
OgorICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ2FsbEluZGlyZWN0RXhwcmVzc2lvbkkzMihjb250
ZXh0KTsKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpDYWxsSW1wb3J0OgorICAg
ICAgICAgICAgcmV0dXJuIHBhcnNlQ2FsbEltcG9ydEV4cHJlc3Npb25JMzIoY29udGV4dCk7Cisg
ICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Q29uZGl0aW9uYWw6CisgICAgICAgICAg
ICByZXR1cm4gcGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb25JMzIoY29udGV4dCk7CisgICAgICAg
IGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Q29tbWE6CisgICAgICAgICAgICByZXR1cm4gcGFy
c2VDb21tYUV4cHJlc3Npb25JMzIoY29udGV4dCk7CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVz
c2lvbkkzMjo6RnJvbUY2NDoKKyAgICAgICAgICAgIHJldHVybiBwYXJzZUZyb21GNjRFeHByZXNz
aW9uSTMyKGNvbnRleHQpOworICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6Ok5lZzoK
KyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpCaXROb3Q6CisgICAgICAgIGNhc2Ug
V0FTTU9wRXhwcmVzc2lvbkkzMjo6Q2x6OgorICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25J
MzI6OkxvZ2ljTm90OgorICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkFiczoKKyAg
ICAgICAgICAgIHJldHVybiBwYXJzZVVuYXJ5RXhwcmVzc2lvbkkzMihjb250ZXh0LCBvcCk7Cisg
ICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6QWRkOgorICAgICAgICBjYXNlIFdBU01P
cEV4cHJlc3Npb25JMzI6OlN1YjoKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpN
dWw6CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6U0RpdjoKKyAgICAgICAgY2Fz
ZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpVRGl2OgorICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Np
b25JMzI6OlNNb2Q6CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6VU1vZDoKKyAg
ICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpCaXRPcjoKKyAgICAgICAgY2FzZSBXQVNN
T3BFeHByZXNzaW9uSTMyOjpCaXRBbmQ6CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkz
Mjo6Qml0WG9yOgorICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkxlZnRTaGlmdDoK
KyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpBcml0aG1ldGljUmlnaHRTaGlmdDoK
KyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpMb2dpY2FsUmlnaHRTaGlmdDoKKyAg
ICAgICAgICAgIHJldHVybiBwYXJzZUJpbmFyeUV4cHJlc3Npb25JMzIoY29udGV4dCwgb3ApOwor
ICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkVxdWFsSTMyOgorICAgICAgICBjYXNl
IFdBU01PcEV4cHJlc3Npb25JMzI6Ok5vdEVxdWFsSTMyOgorICAgICAgICBjYXNlIFdBU01PcEV4
cHJlc3Npb25JMzI6OlNMZXNzVGhhbkkzMjoKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9u
STMyOjpVTGVzc1RoYW5JMzI6CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6U0xl
c3NUaGFuT3JFcXVhbEkzMjoKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpVTGVz
c1RoYW5PckVxdWFsSTMyOgorICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlNHcmVh
dGVyVGhhbkkzMjoKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpVR3JlYXRlclRo
YW5JMzI6CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6U0dyZWF0ZXJUaGFuT3JF
cXVhbEkzMjoKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpVR3JlYXRlclRoYW5P
ckVxdWFsSTMyOgorICAgICAgICAgICAgcmV0dXJuIHBhcnNlUmVsYXRpb25hbEkzMkV4cHJlc3Np
b25JMzIoY29udGV4dCwgb3ApOworICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkVx
dWFsRjY0OgorICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6Ok5vdEVxdWFsRjY0Ogor
ICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6Okxlc3NUaGFuRjY0OgorICAgICAgICBj
YXNlIFdBU01PcEV4cHJlc3Npb25JMzI6Okxlc3NUaGFuT3JFcXVhbEY2NDoKKyAgICAgICAgY2Fz
ZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpHcmVhdGVyVGhhbkY2NDoKKyAgICAgICAgY2FzZSBXQVNN
T3BFeHByZXNzaW9uSTMyOjpHcmVhdGVyVGhhbk9yRXF1YWxGNjQ6CisgICAgICAgICAgICByZXR1
cm4gcGFyc2VSZWxhdGlvbmFsRjY0RXhwcmVzc2lvbkkzMihjb250ZXh0LCBvcCk7CisgICAgICAg
IGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6U01pbjoKKyAgICAgICAgY2FzZSBXQVNNT3BFeHBy
ZXNzaW9uSTMyOjpVTWluOgorICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlNNYXg6
CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6VU1heDoKKyAgICAgICAgICAgIC8v
IHJldHVybiBwYXJzZU1pbk9yTWF4RXhwcmVzc2lvbkkzMihjb250ZXh0LCBvcCk7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBGQUlMX1dJVEhfTUVTU0FHRSgiVW5zdXBwb3J0ZWQgaW5z
dHJ1Y3Rpb24uIik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBzd2l0Y2ggKG9w
V2l0aEltbWVkaWF0ZSkgeworICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzJXaXRoSW1t
ZWRpYXRlOjpMaXRQb29sOgorICAgICAgICAgICAgcmV0dXJuIHBhcnNlTGl0ZXJhbFBvb2xFeHBy
ZXNzaW9uSTMyKGNvbnRleHQsIGltbWVkaWF0ZSk7CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVz
c2lvbkkzMldpdGhJbW1lZGlhdGU6OkxpdEltbToKKyAgICAgICAgICAgIHJldHVybiBwYXJzZUxp
dGVyYWxJbW1lZGlhdGVFeHByZXNzaW9uSTMyKGNvbnRleHQsIGltbWVkaWF0ZSk7CisgICAgICAg
IGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMldpdGhJbW1lZGlhdGU6OkdldExvY2FsOgorICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlR2V0TG9jYWxFeHByZXNzaW9uSTMyKGNvbnRleHQsIGltbWVkaWF0
ZSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBGQUlMX1dJVEhfTUVTU0FHRSgiVW5z
dXBwb3J0ZWQgaW5zdHJ1Y3Rpb24uIik7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3RlbXBsYXRl
IDxjbGFzcyBDb250ZXh0PgorQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpw
YXJzZUxpdGVyYWxQb29sRXhwcmVzc2lvbkkzMihDb250ZXh0JiBjb250ZXh0LCB1aW50MzJfdCBj
b25zdGFudEluZGV4KQoreworICAgIEZBSUxfSUZfRkFMU0UoY29uc3RhbnRJbmRleCA8IG1fbW9k
dWxlLT5pMzJDb25zdGFudHMoKS5zaXplKCksICJUaGUgY29uc3RhbnQgaW5kZXggaXMgaW5jb3Jy
ZWN0LiIpOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUxpdGVyYWxQb29sRXhwcmVzc2lvbkkz
Mihjb25zdGFudEluZGV4KTsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0
RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlTGl0ZXJhbFBvb2xFeHByZXNzaW9u
STMyKENvbnRleHQmIGNvbnRleHQpCit7CisgICAgdWludDMyX3QgY29uc3RhbnRJbmRleDsKKyAg
ICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwoY29uc3RhbnRJbmRleCwgIkNhbm5vdCByZWFk
IHRoZSBjb25zdGFudCBpbmRleC4iKTsKKyAgICByZXR1cm4gcGFyc2VMaXRlcmFsUG9vbEV4cHJl
c3Npb25JMzIoY29udGV4dCwgY29uc3RhbnRJbmRleCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBD
b250ZXh0PgorQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUxpdGVy
YWxJbW1lZGlhdGVFeHByZXNzaW9uSTMyKENvbnRleHQmIGNvbnRleHQsIHVpbnQzMl90IGltbWVk
aWF0ZSkKK3sKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVMaXRlcmFsSW1tZWRpYXRlRXhwcmVz
c2lvbkkzMihpbW1lZGlhdGUpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRl
eHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VMaXRlcmFsSW1tZWRpYXRlRXhw
cmVzc2lvbkkzMihDb250ZXh0JiBjb250ZXh0KQoreworICAgIHVpbnQzMl90IGltbWVkaWF0ZTsK
KyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwoaW1tZWRpYXRlLCAiQ2Fubm90IHJlYWQg
dGhlIGltbWVkaWF0ZS4iKTsKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVMaXRlcmFsSW1tZWRp
YXRlRXhwcmVzc2lvbkkzMihpbW1lZGlhdGUpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4
dD4KK0NvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VHZXRMb2NhbEV4
cHJlc3Npb25JMzIoQ29udGV4dCYgY29udGV4dCwgdWludDMyX3QgbG9jYWxJbmRleCkKK3sKKyAg
ICBGQUlMX0lGX0ZBTFNFKGxvY2FsSW5kZXggPCBtX2xvY2FsVHlwZXMuc2l6ZSgpLCAiVGhlIGxv
Y2FsIHZhcmlhYmxlIGluZGV4IGlzIGluY29ycmVjdC4iKTsKKyAgICBGQUlMX0lGX0ZBTFNFKG1f
bG9jYWxUeXBlc1tsb2NhbEluZGV4XSA9PSBXQVNNVHlwZTo6STMyLCAiRXhwZWN0ZWQgYSBsb2Nh
bCB2YXJpYWJsZSBvZiB0eXBlIGludDMyLiIpOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUdl
dExvY2FsRXhwcmVzc2lvbkkzMihsb2NhbEluZGV4KTsKK30KKwordGVtcGxhdGUgPGNsYXNzIENv
bnRleHQ+CitDb250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlR2V0TG9j
YWxFeHByZXNzaW9uSTMyKENvbnRleHQmIGNvbnRleHQpCit7CisgICAgdWludDMyX3QgbG9jYWxJ
bmRleDsKKyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobG9jYWxJbmRleCwgIkNhbm5v
dCByZWFkIHRoZSBsb2NhbCBpbmRleC4iKTsKKyAgICByZXR1cm4gcGFyc2VHZXRMb2NhbEV4cHJl
c3Npb25JMzIoY29udGV4dCwgbG9jYWxJbmRleCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250
ZXh0PgorQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUdldEdsb2Jh
bEV4cHJlc3Npb25JMzIoQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICB1aW50MzJfdCBnbG9iYWxJ
bmRleDsKKyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwoZ2xvYmFsSW5kZXgsICJDYW5u
b3QgcmVhZCB0aGUgZ2xvYmFsIGluZGV4LiIpOworICAgIEZBSUxfSUZfRkFMU0UoZ2xvYmFsSW5k
ZXggPCBtX21vZHVsZS0+Z2xvYmFsVmFyaWFibGVUeXBlcygpLnNpemUoKSwgIlRoZSBnbG9iYWwg
aW5kZXggaXMgaW5jb3JyZWN0LiIpOworICAgIEZBSUxfSUZfRkFMU0UobV9tb2R1bGUtPmdsb2Jh
bFZhcmlhYmxlVHlwZXMoKVtnbG9iYWxJbmRleF0gPT0gV0FTTVR5cGU6OkkzMiwgIkV4cGVjdGVk
IGEgZ2xvYmFsIHZhcmlhYmxlIG9mIHR5cGUgaW50MzIuIik7CisgICAgcmV0dXJuIGNvbnRleHQu
Y3JlYXRlR2V0R2xvYmFsRXhwcmVzc2lvbkkzMihnbG9iYWxJbmRleCk7Cit9CisKK3RlbXBsYXRl
IDxjbGFzcyBDb250ZXh0PgorQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpw
YXJzZVNldExvY2FsRXhwcmVzc2lvbkkzMihDb250ZXh0JiBjb250ZXh0KQoreworICAgIHVpbnQz
Ml90IGxvY2FsSW5kZXg7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGxvY2FsSW5k
ZXgsICJDYW5ub3QgcmVhZCB0aGUgbG9jYWwgaW5kZXguIik7CisgICAgRkFJTF9JRl9GQUxTRShs
b2NhbEluZGV4IDwgbV9sb2NhbFR5cGVzLnNpemUoKSwgIlRoZSBsb2NhbCB2YXJpYWJsZSBpbmRl
eCBpcyBpbmNvcnJlY3QuIik7CisgICAgRkFJTF9JRl9GQUxTRShtX2xvY2FsVHlwZXNbbG9jYWxJ
bmRleF0gPT0gV0FTTVR5cGU6OkkzMiwgIkV4cGVjdGVkIGEgbG9jYWwgdmFyaWFibGUgb2YgdHlw
ZSBpbnQzMi4iKTsKKyAgICBDb250ZXh0RXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VFeHBy
ZXNzaW9uSTMyKGNvbnRleHQpOworICAgIFBST1BBR0FURV9FUlJPUigpOworICAgIHJldHVybiBj
b250ZXh0LmNyZWF0ZVNldExvY2FsRXhwcmVzc2lvbkkzMihsb2NhbEluZGV4LCBleHByZXNzaW9u
KTsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0RXhwcmVzc2lvbiBXQVNN
RnVuY3Rpb25QYXJzZXI6OnBhcnNlU2V0R2xvYmFsRXhwcmVzc2lvbkkzMihDb250ZXh0JiBjb250
ZXh0KQoreworICAgIHVpbnQzMl90IGdsb2JhbEluZGV4OworICAgIFJFQURfQ09NUEFDVF9VSU5U
MzJfT1JfRkFJTChnbG9iYWxJbmRleCwgIkNhbm5vdCByZWFkIHRoZSBnbG9iYWwgaW5kZXguIik7
CisgICAgRkFJTF9JRl9GQUxTRShnbG9iYWxJbmRleCA8IG1fbW9kdWxlLT5nbG9iYWxWYXJpYWJs
ZVR5cGVzKCkuc2l6ZSgpLCAiVGhlIGdsb2JhbCBpbmRleCBpcyBpbmNvcnJlY3QuIik7CisgICAg
RkFJTF9JRl9GQUxTRShtX21vZHVsZS0+Z2xvYmFsVmFyaWFibGVUeXBlcygpW2dsb2JhbEluZGV4
XSA9PSBXQVNNVHlwZTo6STMyLCAiRXhwZWN0ZWQgYSBnbG9iYWwgdmFyaWFibGUgb2YgdHlwZSBp
bnQzMi4iKTsKKyAgICBDb250ZXh0RXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VFeHByZXNz
aW9uSTMyKGNvbnRleHQpOworICAgIFBST1BBR0FURV9FUlJPUigpOworICAgIHJldHVybiBjb250
ZXh0LmNyZWF0ZVNldEdsb2JhbChnbG9iYWxJbmRleCwgZXhwcmVzc2lvbiwgV0FTTVR5cGU6Okkz
MiwgdHJ1ZSk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgorQ29udGV4dEV4cHJlc3Np
b24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUxvYWRFeHByZXNzaW9uSTMyKENvbnRleHQmIGNv
bnRleHQsIFdBU01PcEV4cHJlc3Npb25JMzIgb3ApCit7CisgICAgV0FTTU1lbW9yeVR5cGUgbWVt
b3J5VHlwZTsKKyAgICBib29sIGhhc09mZnNldDsKKyAgICBib29sIHNpZ25FeHRlbmRlZCA9IGZh
bHNlOworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlNM
b2FkODoKKyAgICAgICAgbWVtb3J5VHlwZSA9IFdBU01NZW1vcnlUeXBlOjpJODsKKyAgICAgICAg
aGFzT2Zmc2V0ID0gZmFsc2U7CisgICAgICAgIHNpZ25FeHRlbmRlZCA9IHRydWU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6U0xvYWRPZmZzZXQ4OgorICAg
ICAgICBtZW1vcnlUeXBlID0gV0FTTU1lbW9yeVR5cGU6Okk4OworICAgICAgICBoYXNPZmZzZXQg
PSB0cnVlOworICAgICAgICBzaWduRXh0ZW5kZWQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlVMb2FkODoKKyAgICAgICAgbWVtb3J5VHlwZSA9
IFdBU01NZW1vcnlUeXBlOjpJODsKKyAgICAgICAgaGFzT2Zmc2V0ID0gZmFsc2U7CisgICAgICAg
IHNpZ25FeHRlbmRlZCA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdBU01PcEV4
cHJlc3Npb25JMzI6OlVMb2FkT2Zmc2V0ODoKKyAgICAgICAgbWVtb3J5VHlwZSA9IFdBU01NZW1v
cnlUeXBlOjpJODsKKyAgICAgICAgaGFzT2Zmc2V0ID0gdHJ1ZTsKKyAgICAgICAgc2lnbkV4dGVu
ZGVkID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkz
Mjo6U0xvYWQxNjoKKyAgICAgICAgbWVtb3J5VHlwZSA9IFdBU01NZW1vcnlUeXBlOjpJMTY7Cisg
ICAgICAgIGhhc09mZnNldCA9IGZhbHNlOworICAgICAgICBzaWduRXh0ZW5kZWQgPSB0cnVlOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlNMb2FkT2Zmc2V0
MTY6CisgICAgICAgIG1lbW9yeVR5cGUgPSBXQVNNTWVtb3J5VHlwZTo6STE2OworICAgICAgICBo
YXNPZmZzZXQgPSB0cnVlOworICAgICAgICBzaWduRXh0ZW5kZWQgPSB0cnVlOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlVMb2FkMTY6CisgICAgICAgIG1l
bW9yeVR5cGUgPSBXQVNNTWVtb3J5VHlwZTo6STE2OworICAgICAgICBoYXNPZmZzZXQgPSBmYWxz
ZTsKKyAgICAgICAgc2lnbkV4dGVuZGVkID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6VUxvYWRPZmZzZXQxNjoKKyAgICAgICAgbWVtb3J5VHlw
ZSA9IFdBU01NZW1vcnlUeXBlOjpJMTY7CisgICAgICAgIGhhc09mZnNldCA9IHRydWU7CisgICAg
ICAgIHNpZ25FeHRlbmRlZCA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdBU01P
cEV4cHJlc3Npb25JMzI6OkxvYWQzMjoKKyAgICAgICAgbWVtb3J5VHlwZSA9IFdBU01NZW1vcnlU
eXBlOjpJMzI7CisgICAgICAgIGhhc09mZnNldCA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkxvYWRPZmZzZXQzMjoKKyAgICAgICAgbWVtb3J5
VHlwZSA9IFdBU01NZW1vcnlUeXBlOjpJMzI7CisgICAgICAgIGhhc09mZnNldCA9IHRydWU7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KKyAgICByZXR1cm4gcGFyc2VMb2FkKGNvbnRleHQsIGhhc09mZnNldCwgV0FTTUV4
cHJlc3Npb25UeXBlOjpJMzIsIG1lbW9yeVR5cGUsIHNpZ25FeHRlbmRlZCk7Cit9CisKK3RlbXBs
YXRlIDxjbGFzcyBDb250ZXh0PgorQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2Vy
OjpwYXJzZVN0b3JlRXhwcmVzc2lvbkkzMihDb250ZXh0JiBjb250ZXh0LCBXQVNNT3BFeHByZXNz
aW9uSTMyIG9wKQoreworICAgIFdBU01NZW1vcnlUeXBlIG1lbW9yeVR5cGU7CisgICAgYm9vbCBo
YXNPZmZzZXQ7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkz
Mjo6U3RvcmU4OgorICAgICAgICBtZW1vcnlUeXBlID0gV0FTTU1lbW9yeVR5cGU6Okk4OworICAg
ICAgICBoYXNPZmZzZXQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXQVNNT3BF
eHByZXNzaW9uSTMyOjpTdG9yZU9mZnNldDg6CisgICAgICAgIG1lbW9yeVR5cGUgPSBXQVNNTWVt
b3J5VHlwZTo6STg7CisgICAgICAgIGhhc09mZnNldCA9IHRydWU7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6U3RvcmUxNjoKKyAgICAgICAgbWVtb3J5VHlw
ZSA9IFdBU01NZW1vcnlUeXBlOjpJMTY7CisgICAgICAgIGhhc09mZnNldCA9IGZhbHNlOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlN0b3JlT2Zmc2V0MTY6
CisgICAgICAgIG1lbW9yeVR5cGUgPSBXQVNNTWVtb3J5VHlwZTo6STE2OworICAgICAgICBoYXNP
ZmZzZXQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25J
MzI6OlN0b3JlMzI6CisgICAgICAgIG1lbW9yeVR5cGUgPSBXQVNNTWVtb3J5VHlwZTo6STMyOwor
ICAgICAgICBoYXNPZmZzZXQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXQVNN
T3BFeHByZXNzaW9uSTMyOjpTdG9yZU9mZnNldDMyOgorICAgICAgICBtZW1vcnlUeXBlID0gV0FT
TU1lbW9yeVR5cGU6OkkzMjsKKyAgICAgICAgaGFzT2Zmc2V0ID0gdHJ1ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
ICAgIHJldHVybiBwYXJzZVN0b3JlKGNvbnRleHQsIGhhc09mZnNldCwgV0FTTUV4cHJlc3Npb25U
eXBlOjpJMzIsIG1lbW9yeVR5cGUsIHRydWUpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4
dD4KK0NvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VDYWxsSW50ZXJu
YWxFeHByZXNzaW9uSTMyKENvbnRleHQmIGNvbnRleHQpCit7CisgICAgcmV0dXJuIHBhcnNlQ2Fs
bEludGVybmFsKGNvbnRleHQsIHRydWUsIFdBU01FeHByZXNzaW9uVHlwZTo6STMyKTsKK30KKwor
dGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25Q
YXJzZXI6OnBhcnNlQ2FsbEluZGlyZWN0RXhwcmVzc2lvbkkzMihDb250ZXh0JiBjb250ZXh0KQor
eworICAgIHJldHVybiBwYXJzZUNhbGxJbmRpcmVjdChjb250ZXh0LCB0cnVlLCBXQVNNRXhwcmVz
c2lvblR5cGU6OkkzMik7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgorQ29udGV4dEV4
cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNhbGxJbXBvcnRFeHByZXNzaW9uSTMy
KENvbnRleHQmIGNvbnRleHQpCit7CisgICAgcmV0dXJuIHBhcnNlQ2FsbEltcG9ydChjb250ZXh0
LCB0cnVlLCBXQVNNRXhwcmVzc2lvblR5cGU6OkkzMik7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBD
b250ZXh0PgorQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNvbmRp
dGlvbmFsRXhwcmVzc2lvbkkzMihDb250ZXh0JiBjb250ZXh0KQoreworICAgIENvbnRleHRFeHBy
ZXNzaW9uIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb25JMzIoY29udGV4dCk7CisgICAgUFJP
UEFHQVRFX0VSUk9SKCk7CisgICAgQ29udGV4dEp1bXAgZWxzID0gY29udGV4dC5qaXRCcmFuY2hJ
Zlplcm8oZXhwcmVzc2lvbik7CisgICAgcGFyc2VFeHByZXNzaW9uSTMyKGNvbnRleHQpOworICAg
IFBST1BBR0FURV9FUlJPUigpOworICAgIENvbnRleHRKdW1wIGVuZCA9IGNvbnRleHQuaml0SnVt
cCgpOworICAgIGNvbnRleHQuaml0TGlua0p1bXAoZWxzKTsKKyAgICBjb250ZXh0LnBvcCgpOwor
ICAgIHBhcnNlRXhwcmVzc2lvbkkzMihjb250ZXh0KTsKKyAgICBQUk9QQUdBVEVfRVJST1IoKTsK
KyAgICBjb250ZXh0LmppdExpbmtKdW1wKGVuZCk7CisgICAgcmV0dXJuIFVOVVNFRDsKK30KKwor
dGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25Q
YXJzZXI6OnBhcnNlQ29tbWFFeHByZXNzaW9uSTMyKENvbnRleHQmIGNvbnRleHQpCit7CisKKyAg
ICBXQVNNRXhwcmVzc2lvblR5cGUgZXhwcmVzc2lvblR5cGU7CisgICAgUkVBRF9FWFBSRVNTSU9O
X1RZUEVfT1JfRkFJTChleHByZXNzaW9uVHlwZSwgIkNhbm5vdCByZWFkIHRoZSBleHByZXNzaW9u
IHR5cGUuIik7CisgICAgcGFyc2VFeHByZXNzaW9uKGNvbnRleHQsIGV4cHJlc3Npb25UeXBlKTsK
KyAgICBQUk9QQUdBVEVfRVJST1IoKTsKKyAgICBpZiAoZXhwcmVzc2lvblR5cGUgIT0gV0FTTUV4
cHJlc3Npb25UeXBlOjpWb2lkKQorICAgICAgICBjb250ZXh0LnBvcCgpOworICAgIHBhcnNlRXhw
cmVzc2lvbkkzMihjb250ZXh0KTsKKyAgICByZXR1cm4gVU5VU0VEOworfQorCit0ZW1wbGF0ZSA8
Y2xhc3MgQ29udGV4dD4KK0NvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFy
c2VGcm9tRjY0RXhwcmVzc2lvbkkzMihDb250ZXh0JiBjb250ZXh0KQoreworICAgIENvbnRleHRF
eHByZXNzaW9uIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb25GNjQoY29udGV4dCk7CisgICAg
UFJPUEFHQVRFX0VSUk9SKCk7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnJvbUY2NEV4cHJl
c3Npb25JMzIoZXhwcmVzc2lvbik7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgorQ29u
dGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVVuYXJ5RXhwcmVzc2lvbkkz
MihDb250ZXh0JiBjb250ZXh0LCBXQVNNT3BFeHByZXNzaW9uSTMyIG9wKQoreworICAgIENvbnRl
eHRFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb25JMzIoY29udGV4dCk7Cisg
ICAgUFJPUEFHQVRFX0VSUk9SKCk7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlVW5hcnlFeHBy
ZXNzaW9uSTMyKGV4cHJlc3Npb24sIG9wKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+
CitDb250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQmluYXJ5RXhwcmVz
c2lvbkkzMihDb250ZXh0JiBjb250ZXh0LCBXQVNNT3BFeHByZXNzaW9uSTMyIG9wKQoreworICAg
IENvbnRleHRFeHByZXNzaW9uIGV4cHJlc3Npb24xID0gcGFyc2VFeHByZXNzaW9uSTMyKGNvbnRl
eHQpOworICAgIFBST1BBR0FURV9FUlJPUigpOworICAgIENvbnRleHRFeHByZXNzaW9uIGV4cHJl
c3Npb24yID0gcGFyc2VFeHByZXNzaW9uSTMyKGNvbnRleHQpOworICAgIFBST1BBR0FURV9FUlJP
UigpOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUJpbmFyeUV4cHJlc3Npb25JMzIoZXhwcmVz
c2lvbjEsIGV4cHJlc3Npb24yLCBvcCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0Pgor
Q29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVJlbGF0aW9uYWxJMzJF
eHByZXNzaW9uSTMyKENvbnRleHQmIGNvbnRleHQsIFdBU01PcEV4cHJlc3Npb25JMzIgb3ApCit7
CisgICAgQ29udGV4dEV4cHJlc3Npb24gZXhwcmVzc2lvbjEgPSBwYXJzZUV4cHJlc3Npb25JMzIo
Y29udGV4dCk7CisgICAgUFJPUEFHQVRFX0VSUk9SKCk7CisgICAgQ29udGV4dEV4cHJlc3Npb24g
ZXhwcmVzc2lvbjIgPSBwYXJzZUV4cHJlc3Npb25JMzIoY29udGV4dCk7CisgICAgUFJPUEFHQVRF
X0VSUk9SKCk7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlUmVsYXRpb25hbEkzMkV4cHJlc3Np
b25JMzIoZXhwcmVzc2lvbjEsIGV4cHJlc3Npb24yLCBvcCk7Cit9CisKK3RlbXBsYXRlIDxjbGFz
cyBDb250ZXh0PgorQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVJl
bGF0aW9uYWxGNjRFeHByZXNzaW9uSTMyKENvbnRleHQmIGNvbnRleHQsIFdBU01PcEV4cHJlc3Np
b25JMzIgb3ApCit7CisgICAgQ29udGV4dEV4cHJlc3Npb24gZXhwcmVzc2lvbjEgPSBwYXJzZUV4
cHJlc3Npb25GNjQoY29udGV4dCk7CisgICAgUFJPUEFHQVRFX0VSUk9SKCk7CisgICAgQ29udGV4
dEV4cHJlc3Npb24gZXhwcmVzc2lvbjIgPSBwYXJzZUV4cHJlc3Npb25GNjQoY29udGV4dCk7Cisg
ICAgUFJPUEFHQVRFX0VSUk9SKCk7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlUmVsYXRpb25h
bEY2NEV4cHJlc3Npb25JMzIoZXhwcmVzc2lvbjEsIGV4cHJlc3Npb24yLCBvcCk7Cit9CisKKy8v
IHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgorLy8gQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0
aW9uUGFyc2VyOjpwYXJzZU1pbk9yTWF4RXhwcmVzc2lvbkkzMihDb250ZXh0JiBjb250ZXh0LCBX
QVNNT3BFeHByZXNzaW9uSTMyIG9wKQorLy8geworLy8gICAgIHVpbnQzMl90IG51bWJlck9mQXJn
dW1lbnRzOworLy8gICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZkFyZ3Vt
ZW50cywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRvIG1pbi9tYXguIik7
CisvLyAgICAgRkFJTF9JRl9GQUxTRShudW1iZXJPZkFyZ3VtZW50cyA+IDAsICJUaGUgbnVtYmVy
IG9mIGFyZ3VtZW50cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLiIpOworLy8gICAgIGZvciAodWlu
dDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkFyZ3VtZW50czsgKytpKSB7CisvLyAgICAgfQorLy8g
ICAgIENvbnRleHRFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb25JMzIoY29u
dGV4dCk7CisvLyAgICAgUFJPUEFHQVRFX0VSUk9SKCk7CisvLyB9CisKK3RlbXBsYXRlIDxjbGFz
cyBDb250ZXh0PgorQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUV4
cHJlc3Npb25GMzIoQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBXQVNNT3BFeHByZXNzaW9uRjMy
IG9wOworICAgIFdBU01PcEV4cHJlc3Npb25GMzJXaXRoSW1tZWRpYXRlIG9wV2l0aEltbWVkaWF0
ZTsKKyAgICB1aW50OF90IGltbWVkaWF0ZTsKKworICAgIGlmIChtX3JlYWRlci5yZWFkQ29kZSgm
b3AsICZvcFdpdGhJbW1lZGlhdGUsICZpbW1lZGlhdGUpKSB7CisgICAgICAgIHN3aXRjaCAob3Ap
IHsKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjMyOjpMaXRQb29sOgorICAgICAgICAg
ICAgcmV0dXJuIHBhcnNlTGl0ZXJhbFBvb2xFeHByZXNzaW9uRjMyKGNvbnRleHQpOworICAgICAg
ICBjYXNlIFdBU01PcEV4cHJlc3Npb25GMzI6OkxpdEltbToKKyAgICAgICAgICAgIHJldHVybiBw
YXJzZUxpdGVyYWxJbW1lZGlhdGVFeHByZXNzaW9uRjMyKGNvbnRleHQpOworICAgICAgICBjYXNl
IFdBU01PcEV4cHJlc3Npb25GMzI6OkdldExvY2FsOgorICAgICAgICAgICAgcmV0dXJuIHBhcnNl
R2V0TG9jYWxFeHByZXNzaW9uRjMyKGNvbnRleHQpOworICAgICAgICBjYXNlIFdBU01PcEV4cHJl
c3Npb25GMzI6OkdldEdsb2JhbDoKKyAgICAgICAgICAgIHJldHVybiBwYXJzZUdldEdsb2JhbEV4
cHJlc3Npb25GMzIoY29udGV4dCk7CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkYzMjo6
U2V0TG9jYWw6CisgICAgICAgICAgICByZXR1cm4gcGFyc2VTZXRMb2NhbEV4cHJlc3Npb25GMzIo
Y29udGV4dCk7CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkYzMjo6U2V0R2xvYmFsOgor
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlU2V0R2xvYmFsRXhwcmVzc2lvbkYzMihjb250ZXh0KTsK
KyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjMyOjpMb2FkOgorICAgICAgICBjYXNlIFdB
U01PcEV4cHJlc3Npb25GMzI6OkxvYWRPZmZzZXQ6CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVz
c2lvbkYzMjo6U3RvcmU6CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkYzMjo6U3RvcmVP
ZmZzZXQ6CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkYzMjo6Q2FsbEludGVybmFsOgor
ICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GMzI6OkNhbGxJbmRpcmVjdDoKKyAgICAgICAg
Y2FzZSBXQVNNT3BFeHByZXNzaW9uRjMyOjpDb25kaXRpb25hbDoKKyAgICAgICAgY2FzZSBXQVNN
T3BFeHByZXNzaW9uRjMyOjpDb21tYToKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjMy
OjpGcm9tUzMyOgorICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GMzI6OkZyb21VMzI6Cisg
ICAgICAgICAgICBwcmludGYoIm9wMiA9ICVkXG4iLCAoaW50KW9wKTsKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lv
bkYzMjo6RnJvbUY2NDoKKyAgICAgICAgICAgIHJldHVybiBwYXJzZUZyb21GNjRFeHByZXNzaW9u
RjMyKGNvbnRleHQpOworICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GMzI6Ok5lZzoKKyAg
ICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjMyOjpBZGQ6CisgICAgICAgIGNhc2UgV0FTTU9w
RXhwcmVzc2lvbkYzMjo6U3ViOgorICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GMzI6Ok11
bDoKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjMyOjpEaXY6CisgICAgICAgIGNhc2Ug
V0FTTU9wRXhwcmVzc2lvbkYzMjo6QWJzOgorICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25G
MzI6OkNlaWw6CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkYzMjo6Rmxvb3I6CisgICAg
ICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkYzMjo6U3FydDoKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHByaW50Zigib3AzID0gJWRcbiIsIChpbnQpb3ApOworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIHN3aXRjaCAob3BXaXRoSW1tZWRpYXRlKSB7CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVz
c2lvbkYzMldpdGhJbW1lZGlhdGU6OkxpdFBvb2w6CisgICAgICAgICAgICByZXR1cm4gcGFyc2VM
aXRlcmFsUG9vbEV4cHJlc3Npb25GMzIoY29udGV4dCwgaW1tZWRpYXRlKTsKKyAgICAgICAgY2Fz
ZSBXQVNNT3BFeHByZXNzaW9uRjMyV2l0aEltbWVkaWF0ZTo6R2V0TG9jYWw6CisgICAgICAgICAg
ICByZXR1cm4gcGFyc2VHZXRMb2NhbEV4cHJlc3Npb25GMzIoY29udGV4dCwgaW1tZWRpYXRlKTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICB9CisgICAgfQorfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRleHRFeHBy
ZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VMaXRlcmFsUG9vbEV4cHJlc3Npb25GMzIo
Q29udGV4dCYgY29udGV4dCwgdWludDMyX3QgY29uc3RhbnRJbmRleCkKK3sKKyAgICBGQUlMX0lG
X0ZBTFNFKGNvbnN0YW50SW5kZXggPCBtX21vZHVsZS0+ZjMyQ29uc3RhbnRzKCkuc2l6ZSgpLCAi
VGhlIGNvbnN0YW50IGluZGV4IGlzIGluY29ycmVjdC4iKTsKKyAgICByZXR1cm4gY29udGV4dC5j
cmVhdGVMaXRlcmFsUG9vbEV4cHJlc3Npb25GMzIoY29uc3RhbnRJbmRleCk7Cit9CisKK3RlbXBs
YXRlIDxjbGFzcyBDb250ZXh0PgorQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2Vy
OjpwYXJzZUxpdGVyYWxQb29sRXhwcmVzc2lvbkYzMihDb250ZXh0JiBjb250ZXh0KQoreworICAg
IHVpbnQzMl90IGNvbnN0YW50SW5kZXg7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlM
KGNvbnN0YW50SW5kZXgsICJDYW5ub3QgcmVhZCB0aGUgY29uc3RhbnQgaW5kZXguIik7CisgICAg
cmV0dXJuIHBhcnNlTGl0ZXJhbFBvb2xFeHByZXNzaW9uRjMyKGNvbnRleHQsIGNvbnN0YW50SW5k
ZXgpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRleHRFeHByZXNzaW9uIFdB
U01GdW5jdGlvblBhcnNlcjo6cGFyc2VMaXRlcmFsSW1tZWRpYXRlRXhwcmVzc2lvbkYzMihDb250
ZXh0JiBjb250ZXh0KQoreworICAgIGZsb2F0IGltbWVkaWF0ZTsKKyAgICBSRUFEX0ZMT0FUX09S
X0ZBSUwoaW1tZWRpYXRlLCAiQ2Fubm90IHJlYWQgdGhlIGltbWVkaWF0ZS4iKTsKKyAgICByZXR1
cm4gY29udGV4dC5jcmVhdGVMaXRlcmFsSW1tZWRpYXRlRXhwcmVzc2lvbkYzMihpbW1lZGlhdGUp
OworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRleHRFeHByZXNzaW9uIFdBU01G
dW5jdGlvblBhcnNlcjo6cGFyc2VHZXRMb2NhbEV4cHJlc3Npb25GMzIoQ29udGV4dCYgY29udGV4
dCwgdWludDMyX3QgbG9jYWxJbmRleCkKK3sKKyAgICBGQUlMX0lGX0ZBTFNFKGxvY2FsSW5kZXgg
PCBtX2xvY2FsVHlwZXMuc2l6ZSgpLCAiVGhlIGxvY2FsIHZhcmlhYmxlIGluZGV4IGlzIGluY29y
cmVjdC4iKTsKKyAgICBGQUlMX0lGX0ZBTFNFKG1fbG9jYWxUeXBlc1tsb2NhbEluZGV4XSA9PSBX
QVNNVHlwZTo6RjMyLCAiRXhwZWN0ZWQgYSBsb2NhbCB2YXJpYWJsZSBvZiB0eXBlIGZsb2F0NjQu
Iik7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlR2V0TG9jYWxFeHByZXNzaW9uRjMyKGxvY2Fs
SW5kZXgpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRleHRFeHByZXNzaW9u
IFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VHZXRMb2NhbEV4cHJlc3Npb25GMzIoQ29udGV4dCYg
Y29udGV4dCkKK3sKKyAgICB1aW50MzJfdCBsb2NhbEluZGV4OworICAgIFJFQURfQ09NUEFDVF9V
SU5UMzJfT1JfRkFJTChsb2NhbEluZGV4LCAiQ2Fubm90IHJlYWQgdGhlIGxvY2FsIGluZGV4LiIp
OworICAgIHJldHVybiBwYXJzZUdldExvY2FsRXhwcmVzc2lvbkYzMihjb250ZXh0LCBsb2NhbElu
ZGV4KTsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0RXhwcmVzc2lvbiBX
QVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlR2V0R2xvYmFsRXhwcmVzc2lvbkYzMihDb250ZXh0JiBj
b250ZXh0KQoreworICAgIHVpbnQzMl90IGdsb2JhbEluZGV4OworICAgIFJFQURfQ09NUEFDVF9V
SU5UMzJfT1JfRkFJTChnbG9iYWxJbmRleCwgIkNhbm5vdCByZWFkIHRoZSBnbG9iYWwgaW5kZXgu
Iik7CisgICAgRkFJTF9JRl9GQUxTRShnbG9iYWxJbmRleCA8IG1fbW9kdWxlLT5nbG9iYWxWYXJp
YWJsZVR5cGVzKCkuc2l6ZSgpLCAiVGhlIGdsb2JhbCBpbmRleCBpcyBpbmNvcnJlY3QuIik7Cisg
ICAgRkFJTF9JRl9GQUxTRShtX21vZHVsZS0+Z2xvYmFsVmFyaWFibGVUeXBlcygpW2dsb2JhbElu
ZGV4XSA9PSBXQVNNVHlwZTo6RjMyLCAiRXhwZWN0ZWQgYSBnbG9iYWwgdmFyaWFibGUgb2YgdHlw
ZSBmbG9hdDMyLiIpOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUdldEdsb2JhbEV4cHJlc3Np
b25GMzIoZ2xvYmFsSW5kZXgpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRl
eHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VTZXRMb2NhbEV4cHJlc3Npb25G
MzIoQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICB1aW50MzJfdCBsb2NhbEluZGV4OworICAgIFJF
QURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChsb2NhbEluZGV4LCAiQ2Fubm90IHJlYWQgdGhlIGxv
Y2FsIGluZGV4LiIpOworICAgIEZBSUxfSUZfRkFMU0UobG9jYWxJbmRleCA8IG1fbG9jYWxUeXBl
cy5zaXplKCksICJUaGUgbG9jYWwgdmFyaWFibGUgaW5kZXggaXMgaW5jb3JyZWN0LiIpOworICAg
IEZBSUxfSUZfRkFMU0UobV9sb2NhbFR5cGVzW2xvY2FsSW5kZXhdID09IFdBU01UeXBlOjpGMzIs
ICJFeHBlY3RlZCBhIGxvY2FsIHZhcmlhYmxlIG9mIHR5cGUgZmxvYXQzMi4iKTsKKyAgICBDb250
ZXh0RXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uRjMyKGNvbnRleHQpOwor
ICAgIFBST1BBR0FURV9FUlJPUigpOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVNldExvY2Fs
RXhwcmVzc2lvbkYzMihsb2NhbEluZGV4LCBleHByZXNzaW9uKTsKK30KKwordGVtcGxhdGUgPGNs
YXNzIENvbnRleHQ+CitDb250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNl
U2V0R2xvYmFsRXhwcmVzc2lvbkYzMihDb250ZXh0JiBjb250ZXh0KQoreworICAgIHVpbnQzMl90
IGdsb2JhbEluZGV4OworICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChnbG9iYWxJbmRl
eCwgIkNhbm5vdCByZWFkIHRoZSBnbG9iYWwgaW5kZXguIik7CisgICAgRkFJTF9JRl9GQUxTRShn
bG9iYWxJbmRleCA8IG1fbW9kdWxlLT5nbG9iYWxWYXJpYWJsZVR5cGVzKCkuc2l6ZSgpLCAiVGhl
IGdsb2JhbCBpbmRleCBpcyBpbmNvcnJlY3QuIik7CisgICAgRkFJTF9JRl9GQUxTRShtX21vZHVs
ZS0+Z2xvYmFsVmFyaWFibGVUeXBlcygpW2dsb2JhbEluZGV4XSA9PSBXQVNNVHlwZTo6RjMyLCAi
RXhwZWN0ZWQgYSBnbG9iYWwgdmFyaWFibGUgb2YgdHlwZSBmbG9hdDMyLiIpOworICAgIENvbnRl
eHRFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb25GMzIoY29udGV4dCk7Cisg
ICAgUFJPUEFHQVRFX0VSUk9SKCk7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlU2V0R2xvYmFs
KGdsb2JhbEluZGV4LCBleHByZXNzaW9uLCBXQVNNVHlwZTo6RjMyLCB0cnVlKTsKK30KKwordGVt
cGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJz
ZXI6OnBhcnNlTG9hZEV4cHJlc3Npb25GMzIoQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICByZXR1
cm4gcGFyc2VMb2FkKGNvbnRleHQsIGZhbHNlLCBXQVNNRXhwcmVzc2lvblR5cGU6OkYzMiwgV0FT
TU1lbW9yeVR5cGU6OkYzMiwgZmFsc2UpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4K
K0NvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VMb2FkV2l0aE9mZnNl
dEV4cHJlc3Npb25GMzIoQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICByZXR1cm4gcGFyc2VMb2Fk
KGNvbnRleHQsIHRydWUsIFdBU01FeHByZXNzaW9uVHlwZTo6RjMyLCBXQVNNTWVtb3J5VHlwZTo6
RjMyLCBmYWxzZSk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgorQ29udGV4dEV4cHJl
c3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVN0b3JlRXhwcmVzc2lvbkYzMihDb250ZXh0
JiBjb250ZXh0KQoreworICAgIHJldHVybiBwYXJzZVN0b3JlKGNvbnRleHQsIGZhbHNlLCBXQVNN
RXhwcmVzc2lvblR5cGU6OkYzMiwgV0FTTU1lbW9yeVR5cGU6OkYzMiwgdHJ1ZSk7Cit9CisKK3Rl
bXBsYXRlIDxjbGFzcyBDb250ZXh0PgorQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFy
c2VyOjpwYXJzZVN0b3JlV2l0aE9mZnNldEV4cHJlc3Npb25GMzIoQ29udGV4dCYgY29udGV4dCkK
K3sKKyAgICByZXR1cm4gcGFyc2VTdG9yZShjb250ZXh0LCB0cnVlLCBXQVNNRXhwcmVzc2lvblR5
cGU6OkYzMiwgV0FTTU1lbW9yeVR5cGU6OkYzMiwgdHJ1ZSk7Cit9CisKK3RlbXBsYXRlIDxjbGFz
cyBDb250ZXh0PgorQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUZy
b21GNjRFeHByZXNzaW9uRjMyKENvbnRleHQmIGNvbnRleHQpCit7CisgICAgQ29udGV4dEV4cHJl
c3Npb24gZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbkY2NChjb250ZXh0KTsKKyAgICBQUk9Q
QUdBVEVfRVJST1IoKTsKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGcm9tRjY0RXhwcmVzc2lv
bkYzMihleHByZXNzaW9uKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0
RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlRXhwcmVzc2lvbkY2NChDb250ZXh0
JiBjb250ZXh0KQoreworICAgIFdBU01PcEV4cHJlc3Npb25GNjQgb3A7CisgICAgV0FTTU9wRXhw
cmVzc2lvbkY2NFdpdGhJbW1lZGlhdGUgb3BXaXRoSW1tZWRpYXRlOworICAgIHVpbnQ4X3QgaW1t
ZWRpYXRlOworCisgICAgaWYgKG1fcmVhZGVyLnJlYWRDb2RlKCZvcCwgJm9wV2l0aEltbWVkaWF0
ZSwgJmltbWVkaWF0ZSkpIHsKKyAgICAgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIFdB
U01PcEV4cHJlc3Npb25GNjQ6OkxpdFBvb2w6CisgICAgICAgICAgICByZXR1cm4gcGFyc2VMaXRl
cmFsUG9vbEV4cHJlc3Npb25GNjQoY29udGV4dCk7CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVz
c2lvbkY2NDo6TGl0SW1tOgorICAgICAgICAgICAgcmV0dXJuIHBhcnNlTGl0ZXJhbEltbWVkaWF0
ZUV4cHJlc3Npb25GNjQoY29udGV4dCk7CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2
NDo6R2V0TG9jYWw6CisgICAgICAgICAgICByZXR1cm4gcGFyc2VHZXRMb2NhbEV4cHJlc3Npb25G
NjQoY29udGV4dCk7CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6R2V0R2xvYmFs
OgorICAgICAgICAgICAgcmV0dXJuIHBhcnNlR2V0R2xvYmFsRXhwcmVzc2lvbkY2NChjb250ZXh0
KTsKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpTZXRMb2NhbDoKKyAgICAgICAg
ICAgIHJldHVybiBwYXJzZVNldExvY2FsRXhwcmVzc2lvbkY2NChjb250ZXh0KTsKKyAgICAgICAg
Y2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpTZXRHbG9iYWw6CisgICAgICAgICAgICByZXR1cm4g
cGFyc2VTZXRHbG9iYWxFeHByZXNzaW9uRjY0KGNvbnRleHQpOworICAgICAgICBjYXNlIFdBU01P
cEV4cHJlc3Npb25GNjQ6OkxvYWQ6CisgICAgICAgICAgICByZXR1cm4gcGFyc2VMb2FkRXhwcmVz
c2lvbkY2NChjb250ZXh0KTsKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpMb2Fk
T2Zmc2V0OgorICAgICAgICAgICAgcmV0dXJuIHBhcnNlTG9hZFdpdGhPZmZzZXRFeHByZXNzaW9u
RjY0KGNvbnRleHQpOworICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OlN0b3JlOgor
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RvcmVFeHByZXNzaW9uRjY0KGNvbnRleHQpOworICAg
ICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OlN0b3JlT2Zmc2V0OgorICAgICAgICAgICAg
cmV0dXJuIHBhcnNlU3RvcmVXaXRoT2Zmc2V0RXhwcmVzc2lvbkY2NChjb250ZXh0KTsKKyAgICAg
ICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpDYWxsSW50ZXJuYWw6CisgICAgICAgICAgICBy
ZXR1cm4gcGFyc2VDYWxsSW50ZXJuYWxFeHByZXNzaW9uRjY0KGNvbnRleHQpOworICAgICAgICBj
YXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkNhbGxJbmRpcmVjdDoKKyAgICAgICAgICAgIHJldHVy
biBwYXJzZUNhbGxJbmRpcmVjdEV4cHJlc3Npb25GNjQoY29udGV4dCk7CisgICAgICAgIGNhc2Ug
V0FTTU9wRXhwcmVzc2lvbkY2NDo6Q2FsbEltcG9ydDoKKyAgICAgICAgICAgIHJldHVybiBwYXJz
ZUNhbGxJbXBvcnRFeHByZXNzaW9uRjY0KGNvbnRleHQpOworICAgICAgICBjYXNlIFdBU01PcEV4
cHJlc3Npb25GNjQ6OkNvbmRpdGlvbmFsOgorICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ29uZGl0
aW9uYWxFeHByZXNzaW9uRjY0KGNvbnRleHQpOworICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Np
b25GNjQ6OkNvbW1hOgorICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ29tbWFFeHByZXNzaW9uRjY0
KGNvbnRleHQpOworICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkZyb21TMzI6Cisg
ICAgICAgICAgICByZXR1cm4gcGFyc2VGcm9tUzMyRXhwcmVzc2lvbkY2NChjb250ZXh0KTsKKyAg
ICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpGcm9tVTMyOgorICAgICAgICAgICAgcmV0
dXJuIHBhcnNlRnJvbVUzMkV4cHJlc3Npb25GNjQoY29udGV4dCk7CisgICAgICAgIGNhc2UgV0FT
TU9wRXhwcmVzc2lvbkY2NDo6TmVnOgorICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6
OkFiczoKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpDZWlsOgorICAgICAgICBj
YXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkZsb29yOgorICAgICAgICBjYXNlIFdBU01PcEV4cHJl
c3Npb25GNjQ6OlNxcnQ6CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6Q29zOgor
ICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OlNpbjoKKyAgICAgICAgY2FzZSBXQVNN
T3BFeHByZXNzaW9uRjY0OjpUYW46CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6
QUNvczoKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpBU2luOgorICAgICAgICBj
YXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkFUYW46CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVz
c2lvbkY2NDo6RXhwOgorICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkxuOgorICAg
ICAgICAgICAgcmV0dXJuIHBhcnNlVW5hcnlFeHByZXNzaW9uRjY0KGNvbnRleHQsIG9wKTsKKyAg
ICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpBZGQ6CisgICAgICAgIGNhc2UgV0FTTU9w
RXhwcmVzc2lvbkY2NDo6U3ViOgorICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6Ok11
bDoKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpEaXY6CisgICAgICAgIGNhc2Ug
V0FTTU9wRXhwcmVzc2lvbkY2NDo6QVRhbjI6CisgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lv
bkY2NDo6UG93OgorICAgICAgICAgICAgcmV0dXJuIHBhcnNlQmluYXJ5RXhwcmVzc2lvbkY2NChj
b250ZXh0LCBvcCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBGQUlMX1dJVEhfTUVT
U0FHRSgiVW5zdXBwb3J0ZWQgaW5zdHJ1Y3Rpb24uIik7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICBzd2l0Y2ggKG9wV2l0aEltbWVkaWF0ZSkgeworICAgICAgICBjYXNlIFdBU01P
cEV4cHJlc3Npb25GNjRXaXRoSW1tZWRpYXRlOjpMaXRQb29sOgorICAgICAgICAgICAgcmV0dXJu
IHBhcnNlTGl0ZXJhbFBvb2xFeHByZXNzaW9uRjY0KGNvbnRleHQsIGltbWVkaWF0ZSk7CisgICAg
ICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NFdpdGhJbW1lZGlhdGU6OkdldExvY2FsOgorICAg
ICAgICAgICAgcmV0dXJuIHBhcnNlR2V0TG9jYWxFeHByZXNzaW9uRjY0KGNvbnRleHQsIGltbWVk
aWF0ZSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBGQUlMX1dJVEhfTUVTU0FHRSgi
VW5zdXBwb3J0ZWQgaW5zdHJ1Y3Rpb24uIik7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3RlbXBs
YXRlIDxjbGFzcyBDb250ZXh0PgorQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2Vy
OjpwYXJzZUxpdGVyYWxQb29sRXhwcmVzc2lvbkY2NChDb250ZXh0JiBjb250ZXh0LCB1aW50MzJf
dCBjb25zdGFudEluZGV4KQoreworICAgIEZBSUxfSUZfRkFMU0UoY29uc3RhbnRJbmRleCA8IG1f
bW9kdWxlLT5mNjRDb25zdGFudHMoKS5zaXplKCksICJUaGUgY29uc3RhbnQgaW5kZXggaXMgaW5j
b3JyZWN0LiIpOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUxpdGVyYWxQb29sRXhwcmVzc2lv
bkY2NChjb25zdGFudEluZGV4KTsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250
ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlTGl0ZXJhbFBvb2xFeHByZXNz
aW9uRjY0KENvbnRleHQmIGNvbnRleHQpCit7CisgICAgdWludDMyX3QgY29uc3RhbnRJbmRleDsK
KyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwoY29uc3RhbnRJbmRleCwgIkNhbm5vdCBy
ZWFkIHRoZSBjb25zdGFudCBpbmRleC4iKTsKKyAgICByZXR1cm4gcGFyc2VMaXRlcmFsUG9vbEV4
cHJlc3Npb25GNjQoY29udGV4dCwgY29uc3RhbnRJbmRleCk7Cit9CisKK3RlbXBsYXRlIDxjbGFz
cyBDb250ZXh0PgorQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUxp
dGVyYWxJbW1lZGlhdGVFeHByZXNzaW9uRjY0KENvbnRleHQmIGNvbnRleHQpCit7CisgICAgZG91
YmxlIGltbWVkaWF0ZTsKKyAgICBSRUFEX0RPVUJMRV9PUl9GQUlMKGltbWVkaWF0ZSwgIkNhbm5v
dCByZWFkIHRoZSBpbW1lZGlhdGUuIik7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlTGl0ZXJh
bEltbWVkaWF0ZUV4cHJlc3Npb25GNjQoaW1tZWRpYXRlKTsKK30KKwordGVtcGxhdGUgPGNsYXNz
IENvbnRleHQ+CitDb250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlR2V0
TG9jYWxFeHByZXNzaW9uRjY0KENvbnRleHQmIGNvbnRleHQsIHVpbnQzMl90IGxvY2FsSW5kZXgp
Cit7CisgICAgRkFJTF9JRl9GQUxTRShsb2NhbEluZGV4IDwgbV9sb2NhbFR5cGVzLnNpemUoKSwg
IlRoZSBsb2NhbCB2YXJpYWJsZSBpbmRleCBpcyBpbmNvcnJlY3QuIik7CisgICAgRkFJTF9JRl9G
QUxTRShtX2xvY2FsVHlwZXNbbG9jYWxJbmRleF0gPT0gV0FTTVR5cGU6OkY2NCwgIkV4cGVjdGVk
IGEgbG9jYWwgdmFyaWFibGUgb2YgdHlwZSBmbG9hdDY0LiIpOworICAgIHJldHVybiBjb250ZXh0
LmNyZWF0ZUdldExvY2FsRXhwcmVzc2lvbkY2NChsb2NhbEluZGV4KTsKK30KKwordGVtcGxhdGUg
PGNsYXNzIENvbnRleHQ+CitDb250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBh
cnNlR2V0TG9jYWxFeHByZXNzaW9uRjY0KENvbnRleHQmIGNvbnRleHQpCit7CisgICAgdWludDMy
X3QgbG9jYWxJbmRleDsKKyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobG9jYWxJbmRl
eCwgIkNhbm5vdCByZWFkIHRoZSBsb2NhbCBpbmRleC4iKTsKKyAgICByZXR1cm4gcGFyc2VHZXRM
b2NhbEV4cHJlc3Npb25GNjQoY29udGV4dCwgbG9jYWxJbmRleCk7Cit9CisKK3RlbXBsYXRlIDxj
bGFzcyBDb250ZXh0PgorQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJz
ZUdldEdsb2JhbEV4cHJlc3Npb25GNjQoQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICB1aW50MzJf
dCBnbG9iYWxJbmRleDsKKyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwoZ2xvYmFsSW5k
ZXgsICJDYW5ub3QgcmVhZCB0aGUgZ2xvYmFsIGluZGV4LiIpOworICAgIEZBSUxfSUZfRkFMU0Uo
Z2xvYmFsSW5kZXggPCBtX21vZHVsZS0+Z2xvYmFsVmFyaWFibGVUeXBlcygpLnNpemUoKSwgIlRo
ZSBnbG9iYWwgaW5kZXggaXMgaW5jb3JyZWN0LiIpOworICAgIEZBSUxfSUZfRkFMU0UobV9tb2R1
bGUtPmdsb2JhbFZhcmlhYmxlVHlwZXMoKVtnbG9iYWxJbmRleF0gPT0gV0FTTVR5cGU6OkY2NCwg
IkV4cGVjdGVkIGEgZ2xvYmFsIHZhcmlhYmxlIG9mIHR5cGUgZmxvYXQ2NC4iKTsKKyAgICByZXR1
cm4gY29udGV4dC5jcmVhdGVHZXRHbG9iYWxFeHByZXNzaW9uRjY0KGdsb2JhbEluZGV4KTsKK30K
KwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rp
b25QYXJzZXI6OnBhcnNlU2V0TG9jYWxFeHByZXNzaW9uRjY0KENvbnRleHQmIGNvbnRleHQpCit7
CisgICAgdWludDMyX3QgbG9jYWxJbmRleDsKKyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZB
SUwobG9jYWxJbmRleCwgIkNhbm5vdCByZWFkIHRoZSBsb2NhbCBpbmRleC4iKTsKKyAgICBGQUlM
X0lGX0ZBTFNFKGxvY2FsSW5kZXggPCBtX2xvY2FsVHlwZXMuc2l6ZSgpLCAiVGhlIGxvY2FsIHZh
cmlhYmxlIGluZGV4IGlzIGluY29ycmVjdC4iKTsKKyAgICBGQUlMX0lGX0ZBTFNFKG1fbG9jYWxU
eXBlc1tsb2NhbEluZGV4XSA9PSBXQVNNVHlwZTo6RjY0LCAiRXhwZWN0ZWQgYSBsb2NhbCB2YXJp
YWJsZSBvZiB0eXBlIGZsb2F0NjQuIik7CisgICAgQ29udGV4dEV4cHJlc3Npb24gZXhwcmVzc2lv
biA9IHBhcnNlRXhwcmVzc2lvbkY2NChjb250ZXh0KTsKKyAgICBQUk9QQUdBVEVfRVJST1IoKTsK
KyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVTZXRMb2NhbEV4cHJlc3Npb25GNjQobG9jYWxJbmRl
eCwgZXhwcmVzc2lvbik7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgorQ29udGV4dEV4
cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVNldEdsb2JhbEV4cHJlc3Npb25GNjQo
Q29udGV4dCYgY29udGV4dCkKK3sKKyAgICB1aW50MzJfdCBnbG9iYWxJbmRleDsKKyAgICBSRUFE
X0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwoZ2xvYmFsSW5kZXgsICJDYW5ub3QgcmVhZCB0aGUgZ2xv
YmFsIGluZGV4LiIpOworICAgIEZBSUxfSUZfRkFMU0UoZ2xvYmFsSW5kZXggPCBtX21vZHVsZS0+
Z2xvYmFsVmFyaWFibGVUeXBlcygpLnNpemUoKSwgIlRoZSBnbG9iYWwgaW5kZXggaXMgaW5jb3Jy
ZWN0LiIpOworICAgIEZBSUxfSUZfRkFMU0UobV9tb2R1bGUtPmdsb2JhbFZhcmlhYmxlVHlwZXMo
KVtnbG9iYWxJbmRleF0gPT0gV0FTTVR5cGU6OkY2NCwgIkV4cGVjdGVkIGEgZ2xvYmFsIHZhcmlh
YmxlIG9mIHR5cGUgZmxvYXQ2NC4iKTsKKyAgICBDb250ZXh0RXhwcmVzc2lvbiBleHByZXNzaW9u
ID0gcGFyc2VFeHByZXNzaW9uRjY0KGNvbnRleHQpOworICAgIFBST1BBR0FURV9FUlJPUigpOwor
ICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVNldEdsb2JhbChnbG9iYWxJbmRleCwgZXhwcmVzc2lv
biwgV0FTTVR5cGU6OkY2NCwgdHJ1ZSk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0Pgor
Q29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUxvYWRFeHByZXNzaW9u
RjY0KENvbnRleHQmIGNvbnRleHQpCit7CisgICAgcmV0dXJuIHBhcnNlTG9hZChjb250ZXh0LCBm
YWxzZSwgV0FTTUV4cHJlc3Npb25UeXBlOjpGNjQsIFdBU01NZW1vcnlUeXBlOjpGNjQsIGZhbHNl
KTsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0RXhwcmVzc2lvbiBXQVNN
RnVuY3Rpb25QYXJzZXI6OnBhcnNlTG9hZFdpdGhPZmZzZXRFeHByZXNzaW9uRjY0KENvbnRleHQm
IGNvbnRleHQpCit7CisgICAgcmV0dXJuIHBhcnNlTG9hZChjb250ZXh0LCB0cnVlLCBXQVNNRXhw
cmVzc2lvblR5cGU6OkY2NCwgV0FTTU1lbW9yeVR5cGU6OkY2NCwgZmFsc2UpOworfQorCit0ZW1w
bGF0ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNl
cjo6cGFyc2VTdG9yZUV4cHJlc3Npb25GNjQoQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICByZXR1
cm4gcGFyc2VTdG9yZShjb250ZXh0LCBmYWxzZSwgV0FTTUV4cHJlc3Npb25UeXBlOjpGNjQsIFdB
U01NZW1vcnlUeXBlOjpGNjQsIHRydWUpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4K
K0NvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VTdG9yZVdpdGhPZmZz
ZXRFeHByZXNzaW9uRjY0KENvbnRleHQmIGNvbnRleHQpCit7CisgICAgcmV0dXJuIHBhcnNlU3Rv
cmUoY29udGV4dCwgdHJ1ZSwgV0FTTUV4cHJlc3Npb25UeXBlOjpGNjQsIFdBU01NZW1vcnlUeXBl
OjpGNjQsIHRydWUpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRleHRFeHBy
ZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VDYWxsSW50ZXJuYWxFeHByZXNzaW9uRjY0
KENvbnRleHQmIGNvbnRleHQpCit7CisgICAgcmV0dXJuIHBhcnNlQ2FsbEludGVybmFsKGNvbnRl
eHQsIHRydWUsIFdBU01FeHByZXNzaW9uVHlwZTo6RjY0KTsKK30KKwordGVtcGxhdGUgPGNsYXNz
IENvbnRleHQ+CitDb250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ2Fs
bEluZGlyZWN0RXhwcmVzc2lvbkY2NChDb250ZXh0JiBjb250ZXh0KQoreworICAgIHJldHVybiBw
YXJzZUNhbGxJbmRpcmVjdChjb250ZXh0LCB0cnVlLCBXQVNNRXhwcmVzc2lvblR5cGU6OkY2NCk7
Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgorQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1
bmN0aW9uUGFyc2VyOjpwYXJzZUNhbGxJbXBvcnRFeHByZXNzaW9uRjY0KENvbnRleHQmIGNvbnRl
eHQpCit7CisgICAgcmV0dXJuIHBhcnNlQ2FsbEltcG9ydChjb250ZXh0LCB0cnVlLCBXQVNNRXhw
cmVzc2lvblR5cGU6OkY2NCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgorQ29udGV4
dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lv
bkY2NChDb250ZXh0JiBjb250ZXh0KQoreworQ29udGV4dEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9
IHBhcnNlRXhwcmVzc2lvbkkzMihjb250ZXh0KTsKKyAgICBQUk9QQUdBVEVfRVJST1IoKTsKKyAg
ICBDb250ZXh0SnVtcCBlbHMgPSBjb250ZXh0LmppdEJyYW5jaElmWmVybyhleHByZXNzaW9uKTsK
KyAgICBwYXJzZUV4cHJlc3Npb25GNjQoY29udGV4dCk7CisgICAgUFJPUEFHQVRFX0VSUk9SKCk7
CisgICAgQ29udGV4dEp1bXAgZW5kID0gY29udGV4dC5qaXRKdW1wKCk7CisgICAgY29udGV4dC5q
aXRMaW5rSnVtcChlbHMpOworICAgIGNvbnRleHQucG9wKCk7CisgICAgcGFyc2VFeHByZXNzaW9u
RjY0KGNvbnRleHQpOworICAgIFBST1BBR0FURV9FUlJPUigpOworICAgIGNvbnRleHQuaml0TGlu
a0p1bXAoZW5kKTsKKyAgICByZXR1cm4gVU5VU0VEOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29u
dGV4dD4KK0NvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VDb21tYUV4
cHJlc3Npb25GNjQoQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBXQVNNRXhwcmVzc2lvblR5cGUg
ZXhwcmVzc2lvblR5cGU7CisgICAgUkVBRF9FWFBSRVNTSU9OX1RZUEVfT1JfRkFJTChleHByZXNz
aW9uVHlwZSwgIkNhbm5vdCByZWFkIHRoZSBleHByZXNzaW9uIHR5cGUuIik7CisgICAgcGFyc2VF
eHByZXNzaW9uKGNvbnRleHQsIGV4cHJlc3Npb25UeXBlKTsKKyAgICBQUk9QQUdBVEVfRVJST1Io
KTsKKyAgICBpZiAoZXhwcmVzc2lvblR5cGUgIT0gV0FTTUV4cHJlc3Npb25UeXBlOjpWb2lkKQor
ICAgICAgICBjb250ZXh0LnBvcCgpOworICAgIHBhcnNlRXhwcmVzc2lvbkY2NChjb250ZXh0KTsK
KyAgICBQUk9QQUdBVEVfRVJST1IoKTsKKyAgICByZXR1cm4gVU5VU0VEOworfQorCit0ZW1wbGF0
ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6
cGFyc2VGcm9tUzMyRXhwcmVzc2lvbkY2NChDb250ZXh0JiBjb250ZXh0KQoreworICAgIENvbnRl
eHRFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb25JMzIoY29udGV4dCk7Cisg
ICAgUFJPUEFHQVRFX0VSUk9SKCk7CisgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlRnJvbVMzMkV4
cHJlc3Npb25GNjQoZXhwcmVzc2lvbik7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0Pgor
Q29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUZyb21VMzJFeHByZXNz
aW9uRjY0KENvbnRleHQmIGNvbnRleHQpCit7CisgICAgQ29udGV4dEV4cHJlc3Npb24gZXhwcmVz
c2lvbiA9IHBhcnNlRXhwcmVzc2lvbkkzMihjb250ZXh0KTsKKyAgICBQUk9QQUdBVEVfRVJST1Io
KTsKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGcm9tVTMyRXhwcmVzc2lvbkY2NChleHByZXNz
aW9uKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0RXhwcmVzc2lvbiBX
QVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlVW5hcnlFeHByZXNzaW9uRjY0KENvbnRleHQmIGNvbnRl
eHQsIFdBU01PcEV4cHJlc3Npb25GNjQgb3ApCit7CisgICAgQ29udGV4dEV4cHJlc3Npb24gZXhw
cmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbkY2NChjb250ZXh0KTsKKyAgICBQUk9QQUdBVEVfRVJS
T1IoKTsKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVVbmFyeUV4cHJlc3Npb25GNjQoZXhwcmVz
c2lvbiwgb3ApOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRleHRFeHByZXNz
aW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VCaW5hcnlFeHByZXNzaW9uRjY0KENvbnRleHQm
IGNvbnRleHQsIFdBU01PcEV4cHJlc3Npb25GNjQgb3ApCit7CisgICAgQ29udGV4dEV4cHJlc3Np
b24gZXhwcmVzc2lvbjEgPSBwYXJzZUV4cHJlc3Npb25GNjQoY29udGV4dCk7CisgICAgUFJPUEFH
QVRFX0VSUk9SKCk7CisgICAgQ29udGV4dEV4cHJlc3Npb24gZXhwcmVzc2lvbjIgPSBwYXJzZUV4
cHJlc3Npb25GNjQoY29udGV4dCk7CisgICAgUFJPUEFHQVRFX0VSUk9SKCk7CisgICAgcmV0dXJu
IGNvbnRleHQuY3JlYXRlQmluYXJ5RXhwcmVzc2lvbkY2NChleHByZXNzaW9uMSwgZXhwcmVzc2lv
bjIsIG9wKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0RXhwcmVzc2lv
biBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlRXhwcmVzc2lvblZvaWQoQ29udGV4dCYgY29udGV4
dCkKK3sKKyAgICBXQVNNT3BFeHByZXNzaW9uVm9pZCBvcDsKKyAgICBvcCA9IG1fcmVhZGVyLnJl
YWRPcEV4cHJlc3Npb25Wb2lkKCk7IC8vIEZJWE1FCisgICAgc3dpdGNoIChvcCkgeworICAgIGNh
c2UgV0FTTU9wRXhwcmVzc2lvblZvaWQ6OkNhbGxJbnRlcm5hbDoKKyAgICAgICAgcmV0dXJuIHBh
cnNlQ2FsbEludGVybmFsRXhwcmVzc2lvblZvaWQoY29udGV4dCk7CisgICAgY2FzZSBXQVNNT3BF
eHByZXNzaW9uVm9pZDo6Q2FsbEluZGlyZWN0OgorICAgICAgICByZXR1cm4gcGFyc2VDYWxsSW5k
aXJlY3RFeHByZXNzaW9uVm9pZChjb250ZXh0KTsKKyAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25W
b2lkOjpDYWxsSW1wb3J0OgorICAgICAgICByZXR1cm4gcGFyc2VDYWxsSW1wb3J0RXhwcmVzc2lv
blZvaWQoY29udGV4dCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgorQ29udGV4
dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNhbGxJbnRlcm5hbEV4cHJlc3Np
b25Wb2lkKENvbnRleHQmIGNvbnRleHQpCit7CisgICAgcmV0dXJuIHBhcnNlQ2FsbEludGVybmFs
KGNvbnRleHQsIHRydWUsIFdBU01FeHByZXNzaW9uVHlwZTo6Vm9pZCk7Cit9CisKK3RlbXBsYXRl
IDxjbGFzcyBDb250ZXh0PgorQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpw
YXJzZUNhbGxJbmRpcmVjdEV4cHJlc3Npb25Wb2lkKENvbnRleHQmIGNvbnRleHQpCit7CisgICAg
cmV0dXJuIHBhcnNlQ2FsbEluZGlyZWN0KGNvbnRleHQsIHRydWUsIFdBU01FeHByZXNzaW9uVHlw
ZTo6Vm9pZCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgorQ29udGV4dEV4cHJlc3Np
b24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNhbGxJbXBvcnRFeHByZXNzaW9uVm9pZChDb250
ZXh0JiBjb250ZXh0KQoreworICAgIHJldHVybiBwYXJzZUNhbGxJbXBvcnQoY29udGV4dCwgdHJ1
ZSwgV0FTTUV4cHJlc3Npb25UeXBlOjpWb2lkKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRl
eHQ+CitDb250ZXh0TWVtb3J5QWRkcmVzcyBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlTWVtb3J5
QWRkcmVzcyhDb250ZXh0JiBjb250ZXh0LCBib29sIGhhc09mZnNldCkKK3sKKyAgICB1aW50MzJf
dCBvZmZzZXQgPSAwOworICAgIGlmIChoYXNPZmZzZXQpCisgICAgICAgIFJFQURfQ09NUEFDVF9V
SU5UMzJfT1JfRkFJTChvZmZzZXQsICJDYW5ub3QgcmVhZCB0aGUgb2Zmc2V0LiIpOworCisgICAg
Ym9vbCBoYXNJbW1lZGlhdGVJbmRleDsKKyAgICB1aW50MzJfdCBpbW1lZGlhdGVJbmRleDsKKyAg
ICBDb250ZXh0RXhwcmVzc2lvbiBpbmRleEV4cHJlc3Npb247CisgICAgaWYgKG1fcmVhZGVyLmlm
STMyTGl0ZXJhbChtX21vZHVsZS0+aTMyQ29uc3RhbnRzKCksICZpbW1lZGlhdGVJbmRleCkpIHsK
KyAgICAgICAgaGFzSW1tZWRpYXRlSW5kZXggPSB0cnVlOworICAgICAgICBpbmRleEV4cHJlc3Np
b24gPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIGhhc0ltbWVkaWF0ZUluZGV4ID0gZmFsc2U7
CisgICAgICAgIGluZGV4RXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbkkzMihjb250ZXh0KTsK
KyAgICAgICAgUFJPUEFHQVRFX0VSUk9SKCk7CisgICAgfQorICAgIHJldHVybiBDb250ZXh0TWVt
b3J5QWRkcmVzcyhoYXNJbW1lZGlhdGVJbmRleCwgaW1tZWRpYXRlSW5kZXgsIGluZGV4RXhwcmVz
c2lvbiwgb2Zmc2V0KTsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0RXhw
cmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlTG9hZChDb250ZXh0JiBjb250ZXh0LCBi
b29sIGhhc09mZnNldCwgV0FTTUV4cHJlc3Npb25UeXBlIGV4cHJlc3Npb25UeXBlLCBXQVNNTWVt
b3J5VHlwZSBtZW1vcnlUeXBlLCBib29sIHNpZ25FeHRlbmRlZCkKK3sKKyAgICBjb25zdCBDb250
ZXh0TWVtb3J5QWRkcmVzcyYgbWVtb3J5QWRkcmVzcyA9IHBhcnNlTWVtb3J5QWRkcmVzcyhjb250
ZXh0LCBoYXNPZmZzZXQpOworICAgIFBST1BBR0FURV9FUlJPUigpOworCisgICAgcmV0dXJuIGNv
bnRleHQuY3JlYXRlTG9hZChtZW1vcnlBZGRyZXNzLCBleHByZXNzaW9uVHlwZSwgbWVtb3J5VHlw
ZSwgc2lnbkV4dGVuZGVkKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0
RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlU3RvcmUoQ29udGV4dCYgY29udGV4
dCwgYm9vbCBoYXNPZmZzZXQsIFdBU01FeHByZXNzaW9uVHlwZSBleHByZXNzaW9uVHlwZSwgV0FT
TU1lbW9yeVR5cGUgbWVtb3J5VHlwZSwgYm9vbCBpc0V4cHJlc3Npb24pCit7CisgICAgY29uc3Qg
Q29udGV4dE1lbW9yeUFkZHJlc3MmIG1lbW9yeUFkZHJlc3MgPSBwYXJzZU1lbW9yeUFkZHJlc3Mo
Y29udGV4dCwgaGFzT2Zmc2V0KTsKKyAgICBQUk9QQUdBVEVfRVJST1IoKTsKKworICAgIENvbnRl
eHRFeHByZXNzaW9uIHZhbHVlID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQsIGV4cHJlc3Npb25U
eXBlKTsKKyAgICBQUk9QQUdBVEVfRVJST1IoKTsKKworICAgIHJldHVybiBjb250ZXh0LmNyZWF0
ZVN0b3JlKG1lbW9yeUFkZHJlc3MsIGV4cHJlc3Npb25UeXBlLCBtZW1vcnlUeXBlLCB2YWx1ZSwg
aXNFeHByZXNzaW9uKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0RXhw
cmVzc2lvbkxpc3QgV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNhbGxBcmd1bWVudHMoQ29udGV4
dCYgY29udGV4dCwgY29uc3QgVmVjdG9yPFdBU01UeXBlPiYgYXJndW1lbnRzKQoreworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHBh
cnNlRXhwcmVzc2lvbihjb250ZXh0LCBXQVNNRXhwcmVzc2lvblR5cGUoYXJndW1lbnRzW2ldKSk7
CisgICAgICAgIFBST1BBR0FURV9FUlJPUigpOworICAgIH0KKyAgICByZXR1cm4gVU5VU0VEOwor
fQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KK0NvbnRleHRFeHByZXNzaW9uIFdBU01GdW5j
dGlvblBhcnNlcjo6cGFyc2VDYWxsSW50ZXJuYWwoQ29udGV4dCYgY29udGV4dCwgYm9vbCBpc0V4
cHJlc3Npb24sIFdBU01FeHByZXNzaW9uVHlwZSByZXR1cm5UeXBlKQoreworICAgIHVpbnQzMl90
IGZ1bmN0aW9uSW5kZXg7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGZ1bmN0aW9u
SW5kZXgsICJDYW5ub3QgcmVhZCB0aGUgZnVuY3Rpb24gaW5kZXguIik7CisgICAgRkFJTF9JRl9G
QUxTRShmdW5jdGlvbkluZGV4IDwgbV9tb2R1bGUtPmZ1bmN0aW9uRGVjbGFyYXRpb25zKCkuc2l6
ZSgpLCAiVGhlIGZ1bmN0aW9uIGluZGV4IGlzIGluY29ycmVjdC4iKTsKKyAgICBjb25zdCBXQVNN
U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBtX21vZHVsZS0+c2lnbmF0dXJlcygpW21fbW9kdWxlLT5m
dW5jdGlvbkRlY2xhcmF0aW9ucygpW2Z1bmN0aW9uSW5kZXhdLnNpZ25hdHVyZUluZGV4XTsKKyAg
ICBpZiAoaXNFeHByZXNzaW9uKQorICAgICAgICBGQUlMX0lGX0ZBTFNFKHNpZ25hdHVyZS5yZXR1
cm5UeXBlID09IHJldHVyblR5cGUsICJXcm9uZyByZXR1cm4gdHlwZS4iKTsKKworICAgIHBhcnNl
Q2FsbEFyZ3VtZW50cyhjb250ZXh0LCBzaWduYXR1cmUuYXJndW1lbnRzKTsKKyAgICBQUk9QQUdB
VEVfRVJST1IoKTsKKyAgICByZXR1cm4gY29udGV4dC5jcmVhdGVDYWxsSW50ZXJuYWwoZnVuY3Rp
b25JbmRleCwgc2lnbmF0dXJlLCByZXR1cm5UeXBlKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIENv
bnRleHQ+CitDb250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ2FsbElu
ZGlyZWN0KENvbnRleHQmIGNvbnRleHQsIGJvb2wgaXNFeHByZXNzaW9uLCBXQVNNRXhwcmVzc2lv
blR5cGUgcmV0dXJuVHlwZSkKK3sKKyAgICB1aW50MzJfdCBmdW5jdGlvblBvaW50ZXJUYWJsZUlu
ZGV4OworICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChmdW5jdGlvblBvaW50ZXJUYWJs
ZUluZGV4LCAiQ2Fubm90IHJlYWQgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGUgaW5kZXguIik7
CisgICAgRkFJTF9JRl9GQUxTRShmdW5jdGlvblBvaW50ZXJUYWJsZUluZGV4IDwgbV9tb2R1bGUt
PmZ1bmN0aW9uUG9pbnRlclRhYmxlcygpLnNpemUoKSwgIlRoZSBmdW5jdGlvbiBwb2ludGVyIHRh
YmxlIGluZGV4IGlzIGluY29ycmVjdC4iKTsKKyAgICBjb25zdCBXQVNNRnVuY3Rpb25Qb2ludGVy
VGFibGUmIGZ1bmN0aW9uUG9pbnRlclRhYmxlID0gbV9tb2R1bGUtPmZ1bmN0aW9uUG9pbnRlclRh
YmxlcygpW2Z1bmN0aW9uUG9pbnRlclRhYmxlSW5kZXhdOworICAgIGNvbnN0IFdBU01TaWduYXR1
cmUmIHNpZ25hdHVyZSA9IG1fbW9kdWxlLT5zaWduYXR1cmVzKClbZnVuY3Rpb25Qb2ludGVyVGFi
bGUuc2lnbmF0dXJlSW5kZXhdOworICAgIGlmIChpc0V4cHJlc3Npb24pCisgICAgICAgIEZBSUxf
SUZfRkFMU0Uoc2lnbmF0dXJlLnJldHVyblR5cGUgPT0gcmV0dXJuVHlwZSwgIldyb25nIHJldHVy
biB0eXBlLiIpOworCisgICAgQ29udGV4dEV4cHJlc3Npb24gZWxlbWVudEluZGV4ID0gcGFyc2VF
eHByZXNzaW9uSTMyKGNvbnRleHQpOworICAgIFBST1BBR0FURV9FUlJPUigpOworCisgICAgcGFy
c2VDYWxsQXJndW1lbnRzKGNvbnRleHQsIHNpZ25hdHVyZS5hcmd1bWVudHMpOworICAgIFBST1BB
R0FURV9FUlJPUigpOworICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZUNhbGxJbmRpcmVjdChmdW5j
dGlvblBvaW50ZXJUYWJsZUluZGV4LCBlbGVtZW50SW5kZXgsIHNpZ25hdHVyZSwgcmV0dXJuVHlw
ZSk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgorQ29udGV4dEV4cHJlc3Npb24gV0FT
TUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNhbGxJbXBvcnQoQ29udGV4dCYgY29udGV4dCwgYm9vbCBp
c0V4cHJlc3Npb24sIFdBU01FeHByZXNzaW9uVHlwZSByZXR1cm5UeXBlKQoreworICAgIHVpbnQz
Ml90IGZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlSW5kZXg7CisgICAgUkVBRF9DT01QQUNUX1VJTlQz
Ml9PUl9GQUlMKGZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlSW5kZXgsICJDYW5ub3QgcmVhZCB0aGUg
ZnVuY3Rpb24gaW1wb3J0IHNpZ25hdHVyZSBpbmRleC4iKTsKKyAgICBGQUlMX0lGX0ZBTFNFKGZ1
bmN0aW9uSW1wb3J0U2lnbmF0dXJlSW5kZXggPCBtX21vZHVsZS0+ZnVuY3Rpb25JbXBvcnRTaWdu
YXR1cmVzKCkuc2l6ZSgpLCAiVGhlIGZ1bmN0aW9uIGltcG9ydCBzaWduYXR1cmUgaW5kZXggaXMg
aW5jb3JyZWN0LiIpOworICAgIGNvbnN0IFdBU01GdW5jdGlvbkltcG9ydFNpZ25hdHVyZSYgZnVu
Y3Rpb25JbXBvcnRTaWduYXR1cmUgPSBtX21vZHVsZS0+ZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVz
KClbZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVJbmRleF07CisgICAgY29uc3QgV0FTTVNpZ25hdHVy
ZSYgc2lnbmF0dXJlID0gbV9tb2R1bGUtPnNpZ25hdHVyZXMoKVtmdW5jdGlvbkltcG9ydFNpZ25h
dHVyZS5zaWduYXR1cmVJbmRleF07CisgICAgaWYgKGlzRXhwcmVzc2lvbikKKyAgICAgICAgRkFJ
TF9JRl9GQUxTRShzaWduYXR1cmUucmV0dXJuVHlwZSA9PSByZXR1cm5UeXBlLCAiV3JvbmcgcmV0
dXJuIHR5cGUuIik7CisKKyAgICBwYXJzZUNhbGxBcmd1bWVudHMoY29udGV4dCwgc2lnbmF0dXJl
LmFyZ3VtZW50cyk7CisgICAgUFJPUEFHQVRFX0VSUk9SKCk7CisgICAgcmV0dXJuIGNvbnRleHQu
Y3JlYXRlQ2FsbEltcG9ydChmdW5jdGlvbkltcG9ydFNpZ25hdHVyZUluZGV4LCBzaWduYXR1cmUs
IHJldHVyblR5cGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJM
RShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dB
U01GdW5jdGlvblBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0
aW9uUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGUxMmY4NzI0ZmQzMTEwMDQwMTE3MGE4YmYxZDcxN2I3
MDI4ODNjMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dB
U01GdW5jdGlvblBhcnNlci5oCkBAIC0wLDAgKzEsMTg2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXQVNNRnVuY3Rpb25QYXJzZXJfaAor
I2RlZmluZSBXQVNNRnVuY3Rpb25QYXJzZXJfaAorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
CisjaW5jbHVkZSAiU291cmNlQ29kZS5oIgorI2luY2x1ZGUgIldBU01SZWFkZXIuaCIKKworI2Rl
ZmluZSBDb250ZXh0RXhwcmVzc2lvbiB0eXBlbmFtZSBDb250ZXh0OjpFeHByZXNzaW9uCisjZGVm
aW5lIENvbnRleHRTdGF0ZW1lbnQgdHlwZW5hbWUgQ29udGV4dDo6U3RhdGVtZW50CisjZGVmaW5l
IENvbnRleHRFeHByZXNzaW9uTGlzdCB0eXBlbmFtZSBDb250ZXh0OjpFeHByZXNzaW9uTGlzdAor
I2RlZmluZSBDb250ZXh0SnVtcCB0eXBlbmFtZSBDb250ZXh0OjpKdW1wCisjZGVmaW5lIENvbnRl
eHRMYWJlbCB0eXBlbmFtZSBDb250ZXh0OjpMYWJlbAorI2RlZmluZSBDb250ZXh0TWVtb3J5QWRk
cmVzcyB0eXBlbmFtZSBDb250ZXh0OjpNZW1vcnlBZGRyZXNzCisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBKU1dBU01Nb2R1bGU7CitjbGFzcyBWTTsKKworY2xh
c3MgV0FTTUZ1bmN0aW9uUGFyc2VyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBjaGVja1N5
bnRheChjb25zdCBKU1dBU01Nb2R1bGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgc2l6ZV90IGZ1bmN0
aW9uSW5kZXgsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0SW5Tb3VyY2UsIHVuc2lnbmVkJiBlbmRPZmZz
ZXRJblNvdXJjZSwgdW5zaWduZWQmIHN0YWNrSGVpZ2h0LCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7
CisgICAgc3RhdGljIHZvaWQgZ2VuZXJhdGVDb2RlKFZNKiwgQ29kZUJsb2NrKiwgY29uc3QgSlNX
QVNNTW9kdWxlKiwgY29uc3QgU291cmNlQ29kZSYsIHNpemVfdCBmdW5jdGlvbkluZGV4LCB1bnNp
Z25lZCBzdGFydE9mZnNldEluU291cmNlLCB1bnNpZ25lZCBzdGFja0hlaWdodCk7CisKK3ByaXZh
dGU6CisgICAgV0FTTUZ1bmN0aW9uUGFyc2VyKGNvbnN0IEpTV0FTTU1vZHVsZSogbW9kdWxlLCBj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCisgICAgICAgIDogbV9tb2R1bGUobW9kdWxlKQorICAg
ICAgICAsIG1fcmVhZGVyKHN0YXRpY19jYXN0PFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXIqPihz
b3VyY2UucHJvdmlkZXIoKSktPmRhdGEoKSkKKyAgICAgICAgLCBtX2JyZWFrU2NvcGVEZXB0aCgw
KQorICAgICAgICAsIG1fY29udGludWVTY29wZURlcHRoKDApCisgICAgICAgICwgbV9sYWJlbERl
cHRoKDApCisgICAgeworICAgIH0KKworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBib29s
IHBhcnNlRnVuY3Rpb24oQ29udGV4dCYsIHNpemVfdCBmdW5jdGlvbkluZGV4LCB1bnNpZ25lZCBz
dGFydE9mZnNldEluU291cmNlKTsKKyAgICB2b2lkIGluaXRpYWxpemVMb2NhbFR5cGVzKGNvbnN0
IFdBU01TaWduYXR1cmUmKTsKKyAgICBib29sIHBhcnNlTG9jYWxWYXJpYWJsZXMoKTsKKworICAg
IHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0U3RhdGVtZW50IHBhcnNlU3RhdGVtZW50
KENvbnRleHQmKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dFN0YXRlbWVu
dCBwYXJzZVNldExvY2FsU3RhdGVtZW50KENvbnRleHQmLCB1aW50MzJfdCBsb2NhbEluZGV4KTsK
KyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dFN0YXRlbWVudCBwYXJzZVNldExv
Y2FsU3RhdGVtZW50KENvbnRleHQmKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29u
dGV4dFN0YXRlbWVudCBwYXJzZVNldEdsb2JhbFN0YXRlbWVudChDb250ZXh0JiwgdWludDMyX3Qg
Z2xvYmFsSW5kZXgpOworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0U3RhdGVt
ZW50IHBhcnNlU2V0R2xvYmFsU3RhdGVtZW50KENvbnRleHQmKTsKKyAgICB0ZW1wbGF0ZSA8Y2xh
c3MgQ29udGV4dD4gQ29udGV4dFN0YXRlbWVudCBwYXJzZVN0b3JlU3RhdGVtZW50KENvbnRleHQm
LCBXQVNNT3BTdGF0ZW1lbnQpOworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0
U3RhdGVtZW50IHBhcnNlQ2FsbEludGVybmFsU3RhdGVtZW50KENvbnRleHQmKTsKKyAgICB0ZW1w
bGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dFN0YXRlbWVudCBwYXJzZUNhbGxJbmRpcmVjdFN0
YXRlbWVudChDb250ZXh0Jik7CisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRT
dGF0ZW1lbnQgcGFyc2VDYWxsSW1wb3J0U3RhdGVtZW50KENvbnRleHQmKTsKKyAgICB0ZW1wbGF0
ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dFN0YXRlbWVudCBwYXJzZVJldHVyblN0YXRlbWVudChD
b250ZXh0Jik7CisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRTdGF0ZW1lbnQg
cGFyc2VTdGF0ZW1lbnRMaXN0KENvbnRleHQmKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4
dD4gQ29udGV4dFN0YXRlbWVudCBwYXJzZUJsb2NrU3RhdGVtZW50KENvbnRleHQmKTsKKyAgICB0
ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dFN0YXRlbWVudCBwYXJzZUlmU3RhdGVtZW50
KENvbnRleHQmKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dFN0YXRlbWVu
dCBwYXJzZUlmRWxzZVN0YXRlbWVudChDb250ZXh0Jik7CisgICAgdGVtcGxhdGUgPGNsYXNzIENv
bnRleHQ+IENvbnRleHRTdGF0ZW1lbnQgcGFyc2VXaGlsZVN0YXRlbWVudChDb250ZXh0Jik7Cisg
ICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRTdGF0ZW1lbnQgcGFyc2VEb1N0YXRl
bWVudChDb250ZXh0Jik7CisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRTdGF0
ZW1lbnQgcGFyc2VMYWJlbFN0YXRlbWVudChDb250ZXh0Jik7CisgICAgdGVtcGxhdGUgPGNsYXNz
IENvbnRleHQ+IENvbnRleHRTdGF0ZW1lbnQgcGFyc2VCcmVha1N0YXRlbWVudChDb250ZXh0Jik7
CisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRTdGF0ZW1lbnQgcGFyc2VCcmVh
a0xhYmVsU3RhdGVtZW50KENvbnRleHQmKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4g
Q29udGV4dFN0YXRlbWVudCBwYXJzZUNvbnRpbnVlU3RhdGVtZW50KENvbnRleHQmKTsKKyAgICB0
ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dFN0YXRlbWVudCBwYXJzZUNvbnRpbnVlTGFi
ZWxTdGF0ZW1lbnQoQ29udGV4dCYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250
ZXh0U3RhdGVtZW50IHBhcnNlU3dpdGNoU3RhdGVtZW50KENvbnRleHQmKTsKKworICAgIHRlbXBs
YXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUV4cHJlc3Npb24oQ29u
dGV4dCYsIFdBU01FeHByZXNzaW9uVHlwZSk7CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4
dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VFeHByZXNzaW9uSTMyKENvbnRleHQmKTsKKyAgICB0
ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VMaXRlcmFsUG9v
bEV4cHJlc3Npb25JMzIoQ29udGV4dCYsIHVpbnQzMl90IGNvbnN0YW50SW5kZXgpOworICAgIHRl
bXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUxpdGVyYWxQb29s
RXhwcmVzc2lvbkkzMihDb250ZXh0Jik7CisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENv
bnRleHRFeHByZXNzaW9uIHBhcnNlTGl0ZXJhbEltbWVkaWF0ZUV4cHJlc3Npb25JMzIoQ29udGV4
dCYsIHVpbnQzMl90IGltbWVkaWF0ZSk7CisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENv
bnRleHRFeHByZXNzaW9uIHBhcnNlTGl0ZXJhbEltbWVkaWF0ZUV4cHJlc3Npb25JMzIoQ29udGV4
dCYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJz
ZUdldExvY2FsRXhwcmVzc2lvbkkzMihDb250ZXh0JiwgdWludDMyX3QgbG9jYWxJbmRleCk7Cisg
ICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlR2V0TG9j
YWxFeHByZXNzaW9uSTMyKENvbnRleHQmKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4g
Q29udGV4dEV4cHJlc3Npb24gcGFyc2VHZXRHbG9iYWxFeHByZXNzaW9uSTMyKENvbnRleHQmKTsK
KyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VTZXRM
b2NhbEV4cHJlc3Npb25JMzIoQ29udGV4dCYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0
PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZVNldEdsb2JhbEV4cHJlc3Npb25JMzIoQ29udGV4dCYp
OworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUxv
YWRFeHByZXNzaW9uSTMyKENvbnRleHQmLCBXQVNNT3BFeHByZXNzaW9uSTMyKTsKKyAgICB0ZW1w
bGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VTdG9yZUV4cHJlc3Np
b25JMzIoQ29udGV4dCYsIFdBU01PcEV4cHJlc3Npb25JMzIpOworICAgIHRlbXBsYXRlIDxjbGFz
cyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUNhbGxJbnRlcm5hbEV4cHJlc3Npb25J
MzIoQ29udGV4dCYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVz
c2lvbiBwYXJzZUNhbGxJbmRpcmVjdEV4cHJlc3Npb25JMzIoQ29udGV4dCYpOworICAgIHRlbXBs
YXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUNhbGxJbXBvcnRFeHBy
ZXNzaW9uSTMyKENvbnRleHQmKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4
dEV4cHJlc3Npb24gcGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb25JMzIoQ29udGV4dCYpOworICAg
IHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUNvbW1hRXhw
cmVzc2lvbkkzMihDb250ZXh0Jik7CisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRl
eHRFeHByZXNzaW9uIHBhcnNlRnJvbUY2NEV4cHJlc3Npb25JMzIoQ29udGV4dCYpOworICAgIHRl
bXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZVVuYXJ5RXhwcmVz
c2lvbkkzMihDb250ZXh0JiwgV0FTTU9wRXhwcmVzc2lvbkkzMik7CisgICAgdGVtcGxhdGUgPGNs
YXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlQmluYXJ5RXhwcmVzc2lvbkkzMihD
b250ZXh0JiwgV0FTTU9wRXhwcmVzc2lvbkkzMik7CisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRl
eHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlUmVsYXRpb25hbEkzMkV4cHJlc3Npb25JMzIoQ29u
dGV4dCYsIFdBU01PcEV4cHJlc3Npb25JMzIpOworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0
PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZVJlbGF0aW9uYWxGNjRFeHByZXNzaW9uSTMyKENvbnRl
eHQmLCBXQVNNT3BFeHByZXNzaW9uSTMyKTsKKyAgICAvLyB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4
dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VNaW5Pck1heEV4cHJlc3Npb25JMzIoQ29udGV4dCYs
IFdBU01PcEV4cHJlc3Npb25JMzIpOworCisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENv
bnRleHRFeHByZXNzaW9uIHBhcnNlRXhwcmVzc2lvbkYzMihDb250ZXh0Jik7CisgICAgdGVtcGxh
dGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlTGl0ZXJhbFBvb2xFeHBy
ZXNzaW9uRjMyKENvbnRleHQmLCB1aW50MzJfdCBjb25zdGFudEluZGV4KTsKKyAgICB0ZW1wbGF0
ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VMaXRlcmFsUG9vbEV4cHJl
c3Npb25GMzIoQ29udGV4dCYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0
RXhwcmVzc2lvbiBwYXJzZUxpdGVyYWxJbW1lZGlhdGVFeHByZXNzaW9uRjMyKENvbnRleHQmKTsK
KyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VHZXRM
b2NhbEV4cHJlc3Npb25GMzIoQ29udGV4dCYsIHVpbnQzMl90IGxvY2FsSW5kZXgpOworICAgIHRl
bXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUdldExvY2FsRXhw
cmVzc2lvbkYzMihDb250ZXh0Jik7CisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRl
eHRFeHByZXNzaW9uIHBhcnNlR2V0R2xvYmFsRXhwcmVzc2lvbkYzMihDb250ZXh0Jik7CisgICAg
dGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlU2V0TG9jYWxF
eHByZXNzaW9uRjMyKENvbnRleHQmKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29u
dGV4dEV4cHJlc3Npb24gcGFyc2VTZXRHbG9iYWxFeHByZXNzaW9uRjMyKENvbnRleHQmKTsKKyAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VMb2FkRXhw
cmVzc2lvbkYzMihDb250ZXh0Jik7CisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRl
eHRFeHByZXNzaW9uIHBhcnNlTG9hZFdpdGhPZmZzZXRFeHByZXNzaW9uRjMyKENvbnRleHQmKTsK
KyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VTdG9y
ZUV4cHJlc3Npb25GMzIoQ29udGV4dCYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBD
b250ZXh0RXhwcmVzc2lvbiBwYXJzZVN0b3JlV2l0aE9mZnNldEV4cHJlc3Npb25GMzIoQ29udGV4
dCYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJz
ZUZyb21GNjRFeHByZXNzaW9uRjMyKENvbnRleHQmKTsKKworICAgIHRlbXBsYXRlIDxjbGFzcyBD
b250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUV4cHJlc3Npb25GNjQoQ29udGV4dCYpOwor
ICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUxpdGVy
YWxQb29sRXhwcmVzc2lvbkY2NChDb250ZXh0JiwgdWludDMyX3QgY29uc3RhbnRJbmRleCk7Cisg
ICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlTGl0ZXJh
bFBvb2xFeHByZXNzaW9uRjY0KENvbnRleHQmKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4
dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VMaXRlcmFsSW1tZWRpYXRlRXhwcmVzc2lvbkY2NChD
b250ZXh0Jik7CisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9u
IHBhcnNlR2V0TG9jYWxFeHByZXNzaW9uRjY0KENvbnRleHQmLCB1aW50MzJfdCBsb2NhbEluZGV4
KTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VH
ZXRMb2NhbEV4cHJlc3Npb25GNjQoQ29udGV4dCYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250
ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUdldEdsb2JhbEV4cHJlc3Npb25GNjQoQ29udGV4
dCYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJz
ZVNldExvY2FsRXhwcmVzc2lvbkY2NChDb250ZXh0Jik7CisgICAgdGVtcGxhdGUgPGNsYXNzIENv
bnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlU2V0R2xvYmFsRXhwcmVzc2lvbkY2NChDb250
ZXh0Jik7CisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBh
cnNlTG9hZEV4cHJlc3Npb25GNjQoQ29udGV4dCYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250
ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUxvYWRXaXRoT2Zmc2V0RXhwcmVzc2lvbkY2NChD
b250ZXh0Jik7CisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9u
IHBhcnNlU3RvcmVFeHByZXNzaW9uRjY0KENvbnRleHQmKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
Q29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VTdG9yZVdpdGhPZmZzZXRFeHByZXNzaW9u
RjY0KENvbnRleHQmKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJl
c3Npb24gcGFyc2VDYWxsSW50ZXJuYWxFeHByZXNzaW9uRjY0KENvbnRleHQmKTsKKyAgICB0ZW1w
bGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VDYWxsSW5kaXJlY3RF
eHByZXNzaW9uRjY0KENvbnRleHQmKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29u
dGV4dEV4cHJlc3Npb24gcGFyc2VDYWxsSW1wb3J0RXhwcmVzc2lvbkY2NChDb250ZXh0Jik7Cisg
ICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlQ29uZGl0
aW9uYWxFeHByZXNzaW9uRjY0KENvbnRleHQmKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4
dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VDb21tYUV4cHJlc3Npb25GNjQoQ29udGV4dCYpOwor
ICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUZyb21T
MzJFeHByZXNzaW9uRjY0KENvbnRleHQmKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4g
Q29udGV4dEV4cHJlc3Npb24gcGFyc2VGcm9tVTMyRXhwcmVzc2lvbkY2NChDb250ZXh0Jik7Cisg
ICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlVW5hcnlF
eHByZXNzaW9uRjY0KENvbnRleHQmLCBXQVNNT3BFeHByZXNzaW9uRjY0KTsKKyAgICB0ZW1wbGF0
ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VCaW5hcnlFeHByZXNzaW9u
RjY0KENvbnRleHQmLCBXQVNNT3BFeHByZXNzaW9uRjY0KTsKKworICAgIHRlbXBsYXRlIDxjbGFz
cyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUV4cHJlc3Npb25Wb2lkKENvbnRleHQm
KTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VD
YWxsSW50ZXJuYWxFeHByZXNzaW9uVm9pZChDb250ZXh0Jik7CisgICAgdGVtcGxhdGUgPGNsYXNz
IENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlQ2FsbEluZGlyZWN0RXhwcmVzc2lvblZv
aWQoQ29udGV4dCYpOworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVz
c2lvbiBwYXJzZUNhbGxJbXBvcnRFeHByZXNzaW9uVm9pZChDb250ZXh0Jik7CisKKyAgICB0ZW1w
bGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dE1lbW9yeUFkZHJlc3MgcGFyc2VNZW1vcnlBZGRy
ZXNzKENvbnRleHQmLCBib29sIGhhc09mZnNldCk7CisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRl
eHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlTG9hZChDb250ZXh0JiwgYm9vbCBoYXNPZmZzZXQs
IFdBU01FeHByZXNzaW9uVHlwZSwgV0FTTU1lbW9yeVR5cGUsIGJvb2wgc2lnbkV4dGVuZGVkKTsK
KyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VTdG9y
ZShDb250ZXh0JiwgYm9vbCBoYXNPZmZzZXQsIFdBU01FeHByZXNzaW9uVHlwZSwgV0FTTU1lbW9y
eVR5cGUsIGJvb2wgaXNFeHByZXNzaW9uKTsKKworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0
PiBDb250ZXh0RXhwcmVzc2lvbkxpc3QgcGFyc2VDYWxsQXJndW1lbnRzKENvbnRleHQmLCBjb25z
dCBWZWN0b3I8V0FTTVR5cGU+JiBhcmd1bWVudHMpOworICAgIHRlbXBsYXRlIDxjbGFzcyBDb250
ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUNhbGxJbnRlcm5hbChDb250ZXh0JiwgYm9vbCBp
c0V4cHJlc3Npb24sIFdBU01FeHByZXNzaW9uVHlwZSByZXR1cm5UeXBlKTsKKyAgICB0ZW1wbGF0
ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VDYWxsSW5kaXJlY3QoQ29u
dGV4dCYsIGJvb2wgaXNFeHByZXNzaW9uLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlwZSk7
CisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlQ2Fs
bEltcG9ydChDb250ZXh0JiwgYm9vbCBpc0V4cHJlc3Npb24sIFdBU01FeHByZXNzaW9uVHlwZSBy
ZXR1cm5UeXBlKTsKKworICAgIGNvbnN0IEpTV0FTTU1vZHVsZSogbV9tb2R1bGU7IC8vIEZJWE1F
OiBuZWVkIHRvIGZpeCB0aGlzIQorICAgIFdBU01SZWFkZXIgbV9yZWFkZXI7CisgICAgU3RyaW5n
IG1fZXJyb3JNZXNzYWdlOworCisgICAgV0FTTUV4cHJlc3Npb25UeXBlIG1fcmV0dXJuVHlwZTsK
KyAgICBWZWN0b3I8V0FTTVR5cGU+IG1fbG9jYWxUeXBlczsKKyAgICB1aW50MzJfdCBtX251bWJl
ck9mSTMyVmFyczsgLy8gRklYTUU6IERvIHdlIHJlYWxseSBoYXZlIHRvIHN0b3JlIHRoZXNlPwor
ICAgIHVpbnQzMl90IG1fbnVtYmVyT2ZGMzJWYXJzOworICAgIHVpbnQzMl90IG1fbnVtYmVyT2ZG
NjRWYXJzOworCisgICAgdW5zaWduZWQgbV9icmVha1Njb3BlRGVwdGg7CisgICAgdW5zaWduZWQg
bV9jb250aW51ZVNjb3BlRGVwdGg7CisgICAgdW5zaWduZWQgbV9sYWJlbERlcHRoOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNl
bmRpZiAvLyBXQVNNRnVuY3Rpb25QYXJzZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV0FTTU1hZ2ljTnVtYmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNTWFnaWNOdW1iZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFkZDJm
YTI3ZjI4YjNmYTBiM2JjYjkyNzZkZDk3NTA5YzZhMDY0NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNN
TWFnaWNOdW1iZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdBU01NYWdpY051bWJl
cl9oCi0jZGVmaW5lIFdBU01NYWdpY051bWJlcl9oCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1zdGF0aWMgY29uc3QgdWludDMyX3Qgd2FzbU1hZ2ljTnVt
YmVyID0gMHg2ZDczNjE3NzsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFC
TEUoV0VCQVNTRU1CTFkpCi0KLSNlbmRpZiAvLyBXQVNNTWFnaWNOdW1iZXJfaApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcAppbmRleCBkOGQzMGY1
MzhjNzRmMDg5ZDRmYTVlNjkzZjFkMzEyOTUzZjE0YmYzLi5jM2UwMjA2Y2JkZWZjNGIwZDNmZWNi
NWExMjg0NTA2M2JmNGM4NmI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNTW9kdWxlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
QVNNTW9kdWxlUGFyc2VyLmNwcApAQCAtMjgsNDkgKzI4LDM3OSBAQAogCiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKLSNpbmNsdWRlICJKU1dBU01Nb2R1bGUuaCIKLSNpbmNsdWRlICJXQVNNTWFnaWNO
dW1iZXIuaCIKKyNpbmNsdWRlICJXQVNNQ29uc3RhbnRzLmgiCisjaW5jbHVkZSAiV0FTTUZvcm1h
dC5oIgorI2luY2x1ZGUgIldBU01GdW5jdGlvblBhcnNlci5oIgorI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CiAKLSNkZWZpbmUgRkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKSBkbyB7
IG1fZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlOyByZXR1cm4gZmFsc2U7IH0gd2hpbGUgKDAp
Ci0jZGVmaW5lIFJFQURfVU5TSUdORURfSU5UMzJfT1JfRkFJTCh4LCBlcnJvck1lc3NhZ2UpIGRv
IHsgaWYgKCFtX3JlYWRlci5yZWFkVW5zaWduZWRJbnQzMih4KSkgRkFJTF9XSVRIX01FU1NBR0Uo
ZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUFJPUEFHQVRFX0VSUk9SKCkgZG8g
eyBpZiAoIW1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpKSByZXR1cm47IH0gd2hpbGUgKDApCisjZGVm
aW5lIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSkgZG8geyAgbV9lcnJvck1lc3NhZ2Ug
PSBlcnJvck1lc3NhZ2U7IHJldHVybjsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUkVBRF9VSU5UMzJf
T1JfRkFJTCh4LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3JlYWRlci5yZWFkVUludDMyKHgp
KSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQogI2RlZmluZSBS
RUFEX0ZMT0FUX09SX0ZBSUwoeCwgZXJyb3JNZXNzYWdlKSBkbyB7IGlmICghbV9yZWFkZXIucmVh
ZEZsb2F0KHgpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQog
I2RlZmluZSBSRUFEX0RPVUJMRV9PUl9GQUlMKHgsIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1f
cmVhZGVyLnJlYWREb3VibGUoeCkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7IH0g
d2hpbGUgKDApCisjZGVmaW5lIFJFQURfU1RSSU5HX09SX0ZBSUwoeCwgZXJyb3JNZXNzYWdlKSBk
byB7IGlmICghbV9yZWFkZXIucmVhZFN0cmluZyh4KSkgRkFJTF9XSVRIX01FU1NBR0UoZXJyb3JN
ZXNzYWdlKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlM
KHgsIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRDb21wYWN0VUludDMyKHgp
KSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQorI2RlZmluZSBS
RUFEX1RZUEVfT1JfRkFJTCh4LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3JlYWRlci5yZWFk
VHlwZSh4KSkgRkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAoMCkKKyNk
ZWZpbmUgUkVBRF9FWFBSRVNTSU9OX1RZUEVfT1JfRkFJTCh4LCBlcnJvck1lc3NhZ2UpIGRvIHsg
aWYgKCFtX3JlYWRlci5yZWFkRXhwcmVzc2lvblR5cGUoeCkpIEZBSUxfV0lUSF9NRVNTQUdFKGVy
cm9yTWVzc2FnZSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFJFQURfRVhQT1JUX0ZPUk1BVF9PUl9G
QUlMKHgsIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRFeHBvcnRGb3JtYXQo
eCkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7IH0gd2hpbGUgKDApCiAjZGVmaW5l
IEZBSUxfSUZfRkFMU0UoY29uZGl0aW9uLCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCEoY29uZGl0
aW9uKSkgRkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAoMCkKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLVdBU01Nb2R1bGVQYXJzZXI6OldBU01Nb2R1bGVQYXJzZXIoY29uc3Qg
U291cmNlQ29kZSYgc291cmNlKQotICAgIDogbV9yZWFkZXIoc3RhdGljX2Nhc3Q8V2ViQXNzZW1i
bHlTb3VyY2VQcm92aWRlcio+KHNvdXJjZS5wcm92aWRlcigpKS0+ZGF0YSgpKQorSlNXQVNNTW9k
dWxlKiBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGVudiwgSlNBcnJheUJ1ZmZlciog
YXJyYXlCdWZmZXIsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQogewotfQotCi1KU1dBU01Nb2R1bGUq
IFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCi17Ci0gICAgSlNXQVNNTW9kdWxlKiBtb2R1bGUg
PSBKU1dBU01Nb2R1bGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT53YXNtTW9kdWxlU3RydWN0
dXJlKCkpOwotICAgIHBhcnNlTW9kdWxlKCk7CisgICAgbV9tb2R1bGUgPSBKU1dBU01Nb2R1bGU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT53YXNtTW9kdWxlU3RydWN0dXJlKCksIGFycmF5QnVm
ZmVyKTsKKyAgICBwYXJzZU1vZHVsZSh2bSwgZ2xvYmFsT2JqZWN0LCBleGVjLCBlbnYpOwogICAg
IGlmICghbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkpIHsKICAgICAgICAgZXJyb3JNZXNzYWdlID0g
bV9lcnJvck1lc3NhZ2U7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICByZXR1
cm4gbW9kdWxlOworICAgIHJldHVybiBtX21vZHVsZTsKIH0KIAotYm9vbCBXQVNNTW9kdWxlUGFy
c2VyOjpwYXJzZU1vZHVsZSgpCit2b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlTW9kdWxlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogZW52KQogewogICAgIHVpbnQzMl90IG1hZ2ljTnVtYmVyOwotICAgIFJFQURfVU5TSUdO
RURfSU5UMzJfT1JfRkFJTChtYWdpY051bWJlciwgIkNhbm5vdCByZWFkIHRoZSBtYWdpYyBudW1i
ZXIuIik7CisgICAgdWludDMyX3Qgb3V0cHV0U2l6ZUluQVNNSlM7CisgICAgUkVBRF9VSU5UMzJf
T1JfRkFJTChtYWdpY051bWJlciwgIkNhbm5vdCByZWFkIHRoZSBtYWdpYyBudW1iZXIuIik7CiAg
ICAgRkFJTF9JRl9GQUxTRShtYWdpY051bWJlciA9PSB3YXNtTWFnaWNOdW1iZXIsICJUaGUgbWFn
aWMgbnVtYmVyIGlzIGluY29ycmVjdC4iKTsKKyAgICBSRUFEX1VJTlQzMl9PUl9GQUlMKG91dHB1
dFNpemVJbkFTTUpTLCAiQ2Fubm90IHJlYWQgdGhlIG91dHB1dCBzaXplIGluIGFzbS5qcyBmb3Jt
YXQuIik7CisKKyAgICBwYXJzZUNvbnN0YW50UG9vbFNlY3Rpb24oKTsKKyAgICBQUk9QQUdBVEVf
RVJST1IoKTsKKyAgICBwYXJzZVNpZ25hdHVyZVNlY3Rpb24oKTsKKyAgICBQUk9QQUdBVEVfRVJS
T1IoKTsKKyAgICBwYXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlvbihleGVjLCBlbnYpOworICAgIFBS
T1BBR0FURV9FUlJPUigpOworICAgIHBhcnNlR2xvYmFsU2VjdGlvbihleGVjLCBlbnYpOworICAg
IFBST1BBR0FURV9FUlJPUigpOworICAgIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvblNlY3Rpb24o
KTsKKyAgICBQUk9QQUdBVEVfRVJST1IoKTsKKyAgICBwYXJzZUZ1bmN0aW9uUG9pbnRlclRhYmxl
U2VjdGlvbigpOworICAgIFBST1BBR0FURV9FUlJPUigpOworICAgIHBhcnNlRnVuY3Rpb25EZWZp
bml0aW9uU2VjdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICBQUk9QQUdBVEVfRVJST1IoKTsK
KyAgICBwYXJzZUV4cG9ydFNlY3Rpb24odm0pOworfQorCit2b2lkIFdBU01Nb2R1bGVQYXJzZXI6
OnBhcnNlQ29uc3RhbnRQb29sU2VjdGlvbigpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZJMzJD
b25zdGFudHM7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGMzJDb25zdGFudHM7CisgICAgdWludDMy
X3QgbnVtYmVyT2ZGNjRDb25zdGFudHM7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlM
KG51bWJlck9mSTMyQ29uc3RhbnRzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBpbnQzMiBj
b25zdGFudHMuIik7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mRjMy
Q29uc3RhbnRzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBmbG9hdDMyIGNvbnN0YW50cy4i
KTsKKyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZGNjRDb25zdGFudHMs
ICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGZsb2F0NjQgY29uc3RhbnRzLiIpOworICAgIG1f
bW9kdWxlLT5pMzJDb25zdGFudHMoKS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bWJlck9mSTMy
Q29uc3RhbnRzKTsKKyAgICBtX21vZHVsZS0+ZjMyQ29uc3RhbnRzKCkucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShudW1iZXJPZkYzMkNvbnN0YW50cyk7CisgICAgbV9tb2R1bGUtPmY2NENvbnN0YW50
cygpLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZGNjRDb25zdGFudHMpOworCisgICAg
Zm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mSTMyQ29uc3RhbnRzOyArK2kpIHsKKyAg
ICAgICAgdWludDMyX3QgY29uc3RhbnQ7CisgICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1Jf
RkFJTChjb25zdGFudCwgIkNhbm5vdCByZWFkIGFuIGludDMyIGNvbnN0YW50LiIpOworICAgICAg
ICBtX21vZHVsZS0+aTMyQ29uc3RhbnRzKCkuYXBwZW5kKGNvbnN0YW50KTsKKyAgICB9CisgICAg
Zm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mRjMyQ29uc3RhbnRzOyArK2kpIHsKKyAg
ICAgICAgZmxvYXQgY29uc3RhbnQ7CisgICAgICAgIFJFQURfRkxPQVRfT1JfRkFJTChjb25zdGFu
dCwgIkNhbm5vdCByZWFkIGEgZmxvYXQzMiBjb25zdGFudC4iKTsKKyAgICAgICAgbV9tb2R1bGUt
PmYzMkNvbnN0YW50cygpLmFwcGVuZChjb25zdGFudCk7CisgICAgfQorICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBudW1iZXJPZkY2NENvbnN0YW50czsgKytpKSB7CisgICAgICAgIGRvdWJs
ZSBjb25zdGFudDsKKyAgICAgICAgUkVBRF9ET1VCTEVfT1JfRkFJTChjb25zdGFudCwgIkNhbm5v
dCByZWFkIGEgZmxvYXQ2NCBjb25zdGFudC4iKTsKKyAgICAgICAgbV9tb2R1bGUtPmY2NENvbnN0
YW50cygpLmFwcGVuZChjb25zdGFudCk7CisgICAgfQorfQorCit2b2lkIFdBU01Nb2R1bGVQYXJz
ZXI6OnBhcnNlU2lnbmF0dXJlU2VjdGlvbigpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZTaWdu
YXR1cmVzOworICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZlNpZ25hdHVy
ZXMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIHNpZ25hdHVyZXMuIik7CisgICAgbV9tb2R1
bGUtPnNpZ25hdHVyZXMoKS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bWJlck9mU2lnbmF0dXJl
cyk7CisgICAgZm9yICh1aW50MzJfdCBzaWduYXR1cmVJbmRleCA9IDA7IHNpZ25hdHVyZUluZGV4
IDwgbnVtYmVyT2ZTaWduYXR1cmVzOyArK3NpZ25hdHVyZUluZGV4KSB7CisgICAgICAgIFdBU01T
aWduYXR1cmUgc2lnbmF0dXJlOworICAgICAgICBSRUFEX0VYUFJFU1NJT05fVFlQRV9PUl9GQUlM
KHNpZ25hdHVyZS5yZXR1cm5UeXBlLCAiQ2Fubm90IHJlYWQgdGhlIHJldHVybiB0eXBlLiIpOwor
ICAgICAgICB1aW50MzJfdCBhcmd1bWVudENvdW50OworICAgICAgICBSRUFEX0NPTVBBQ1RfVUlO
VDMyX09SX0ZBSUwoYXJndW1lbnRDb3VudCwgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgYXJn
dW1lbnRzLiIpOworICAgICAgICBzaWduYXR1cmUuYXJndW1lbnRzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoYXJndW1lbnRDb3VudCk7CisgICAgICAgIGZvciAodWludDMyX3QgYXJndW1lbnRJbmRl
eCA9IDA7IGFyZ3VtZW50SW5kZXggPCBhcmd1bWVudENvdW50OyArK2FyZ3VtZW50SW5kZXgpIHsK
KyAgICAgICAgICAgIFdBU01UeXBlIHR5cGU7CisgICAgICAgICAgICBSRUFEX1RZUEVfT1JfRkFJ
TCh0eXBlLCAiQ2Fubm90IHJlYWQgdGhlIHR5cGUgb2YgYW4gYXJndW1lbnQuIik7CisgICAgICAg
ICAgICBzaWduYXR1cmUuYXJndW1lbnRzLmFwcGVuZCh0eXBlKTsKKyAgICAgICAgfQorICAgICAg
ICBtX21vZHVsZS0+c2lnbmF0dXJlcygpLmFwcGVuZChzaWduYXR1cmUpOworICAgIH0KK30KKwor
dm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBlbnYpCit7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jdGlv
bkltcG9ydHM7CisgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jdGlvbkltcG9ydFNpZ25hdHVyZXM7
CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mRnVuY3Rpb25JbXBvcnRz
LCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBmdW5jdGlvbiBpbXBvcnRzLiIpOworICAgIFJF
QURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZkZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJl
cywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgZnVuY3Rpb24gaW1wb3J0IHNpZ25hdHVyZXMu
Iik7CisgICAgbV9tb2R1bGUtPmZ1bmN0aW9uSW1wb3J0cygpLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkobnVtYmVyT2ZGdW5jdGlvbkltcG9ydHMpOworICAgIG1fbW9kdWxlLT5mdW5jdGlvbkltcG9y
dFNpZ25hdHVyZXMoKS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bWJlck9mRnVuY3Rpb25JbXBv
cnRTaWduYXR1cmVzKTsKKworICAgIG1fbW9kdWxlLT5pbXBvcnRlZEZ1bmN0aW9ucygpLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZGdW5jdGlvbkltcG9ydHMpOworCisgICAgZm9yICh1
aW50MzJfdCBmdW5jdGlvbkltcG9ydEluZGV4ID0gMDsgZnVuY3Rpb25JbXBvcnRJbmRleCA8IG51
bWJlck9mRnVuY3Rpb25JbXBvcnRzOyArK2Z1bmN0aW9uSW1wb3J0SW5kZXgpIHsKKyAgICAgICAg
V0FTTUZ1bmN0aW9uSW1wb3J0IGZ1bmN0aW9uSW1wb3J0OworICAgICAgICBSRUFEX1NUUklOR19P
Ul9GQUlMKGZ1bmN0aW9uSW1wb3J0LmZ1bmN0aW9uTmFtZSwgIkNhbm5vdCByZWFkIHRoZSBmdW5j
dGlvbiBpbXBvcnQgbmFtZS4iKTsKKyAgICAgICAgbV9tb2R1bGUtPmZ1bmN0aW9uSW1wb3J0cygp
LmFwcGVuZChmdW5jdGlvbkltcG9ydCk7CisKKyAgICAgICAgdWludDMyX3QgbnVtYmVyT2ZTaWdu
YXR1cmVzOworICAgICAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZTaWdu
YXR1cmVzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBzaWduYXR1cmVzLiIpOworICAgICAg
ICBGQUlMX0lGX0ZBTFNFKG1fbW9kdWxlLT5mdW5jdGlvbkltcG9ydFNpZ25hdHVyZXMoKS5zaXpl
KCkgKyBudW1iZXJPZlNpZ25hdHVyZXMgPD0gbnVtYmVyT2ZGdW5jdGlvbkltcG9ydFNpZ25hdHVy
ZXMsICJUaGUgbnVtYmVyIG9mIGZ1bmN0aW9uIGltcG9ydCBzaWduYXR1cmVzIGlzIGluY29ycmVj
dC4iKTsKKworICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZTaWduYXR1
cmVzOyArK2kpIHsKKyAgICAgICAgICAgIFdBU01GdW5jdGlvbkltcG9ydFNpZ25hdHVyZSBmdW5j
dGlvbkltcG9ydFNpZ25hdHVyZTsKKyAgICAgICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1Jf
RkFJTChmdW5jdGlvbkltcG9ydFNpZ25hdHVyZS5zaWduYXR1cmVJbmRleCwgIkNhbm5vdCByZWFk
IHRoZSBzaWduYXR1cmUgaW5kZXguIik7CisgICAgICAgICAgICBGQUlMX0lGX0ZBTFNFKGZ1bmN0
aW9uSW1wb3J0U2lnbmF0dXJlLnNpZ25hdHVyZUluZGV4IDwgbV9tb2R1bGUtPnNpZ25hdHVyZXMo
KS5zaXplKCksICJUaGUgc2lnbmF0dXJlIGluZGV4IGlzIGluY29ycmVjdC4iKTsKKyAgICAgICAg
ICAgIGZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlLmZ1bmN0aW9uSW1wb3J0SW5kZXggPSBmdW5jdGlv
bkltcG9ydEluZGV4OworICAgICAgICAgICAgbV9tb2R1bGUtPmZ1bmN0aW9uSW1wb3J0U2lnbmF0
dXJlcygpLmFwcGVuZChmdW5jdGlvbkltcG9ydFNpZ25hdHVyZSk7CisgICAgICAgIH0KKworICAg
ICAgICAvLyAtLS0tLS0tLS0tLQorCisgICAgICAgIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JbXBv
cnROYW1lID0gZnVuY3Rpb25JbXBvcnQuZnVuY3Rpb25OYW1lOworCisgICAgICAgIElkZW50aWZp
ZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMtPnZtKCksIGZ1bmN0
aW9uSW1wb3J0TmFtZSk7CisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KGVudik7CisKKyAgICAg
ICAgaWYgKCFlbnYtPmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudGlmaWVyLCBzbG90KSkgewor
ICAgICAgICAgICAgLy8gRklYTUU6IFByaW50IGEgbW9yZSB1c2VmdWwgbWVzc2FnZS4KKyAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgZmluZCBhIGZ1bmN0aW9uIG5hbWVkIFwiJXNc
Ii5cbiIsIGZ1bmN0aW9uSW1wb3J0TmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIEZB
SUxfV0lUSF9NRVNTQUdFKCJDYW4ndCBmaW5kIGFuIGltcG9ydGVkIGZ1bmN0aW9uLiIpOworICAg
ICAgICB9CisKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRl
bnRpZmllcik7CisgICAgICAgIEZBSUxfSUZfRkFMU0UodmFsdWUuaXNGdW5jdGlvbigpLCAiQW4g
aW1wb3J0ZWQgZnVuY3Rpb24gaXMgbm90IGEgZnVuY3Rpb24uIik7CisKKyAgICAgICAgSlNGdW5j
dGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHZhbHVlLmFzQ2VsbCgpKTsKKyAg
ICAgICAgbV9tb2R1bGUtPmltcG9ydGVkRnVuY3Rpb25zKCkuYXBwZW5kKFdyaXRlQmFycmllcjxK
U0Z1bmN0aW9uPihleGVjLT52bSgpLCBtX21vZHVsZSwgZnVuY3Rpb24pKTsKKyAgICB9CisgICAg
RkFJTF9JRl9GQUxTRShtX21vZHVsZS0+ZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzKCkuc2l6ZSgp
ID09IG51bWJlck9mRnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzLCAiVGhlIG51bWJlciBvZiBmdW5j
dGlvbiBpbXBvcnQgc2lnbmF0dXJlcyBpcyBpbmNvcnJlY3QuIik7Cit9CisKK3ZvaWQgV0FTTU1v
ZHVsZVBhcnNlcjo6cGFyc2VHbG9iYWxTZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IGVudikKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZk5vbkltcG9ydGVkSTMyR2xvYmFsVmFyaWFi
bGVzOworICAgIHVpbnQzMl90IG51bWJlck9mTm9uSW1wb3J0ZWRGMzJHbG9iYWxWYXJpYWJsZXM7
CisgICAgdWludDMyX3QgbnVtYmVyT2ZOb25JbXBvcnRlZEY2NEdsb2JhbFZhcmlhYmxlczsKKyAg
ICB1aW50MzJfdCBudW1iZXJPZkltcG9ydGVkSTMyR2xvYmFsVmFyaWFibGVzOworICAgIHVpbnQz
Ml90IG51bWJlck9mSW1wb3J0ZWRGMzJHbG9iYWxWYXJpYWJsZXM7CisgICAgdWludDMyX3QgbnVt
YmVyT2ZJbXBvcnRlZEY2NEdsb2JhbFZhcmlhYmxlczsKKyAgICBSRUFEX0NPTVBBQ1RfVUlOVDMy
X09SX0ZBSUwobnVtYmVyT2ZOb25JbXBvcnRlZEkzMkdsb2JhbFZhcmlhYmxlcywgIkNhbm5vdCBy
ZWFkIHRoZSBudW1iZXIgb2Ygbm9uLWltcG9ydGVkIGludDMyIGdsb2JhbCB2YXJpYWJsZXMuIik7
CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mTm9uSW1wb3J0ZWRGMzJH
bG9iYWxWYXJpYWJsZXMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIG5vbi1pbXBvcnRlZCBm
bG9hdDMyIGdsb2JhbCB2YXJpYWJsZXMuIik7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9G
QUlMKG51bWJlck9mTm9uSW1wb3J0ZWRGNjRHbG9iYWxWYXJpYWJsZXMsICJDYW5ub3QgcmVhZCB0
aGUgbnVtYmVyIG9mIG5vbi1pbXBvcnRlZCBmbG9hdDY0IGdsb2JhbCB2YXJpYWJsZXMuIik7Cisg
ICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mSW1wb3J0ZWRJMzJHbG9iYWxW
YXJpYWJsZXMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGltcG9ydGVkIGludDMyIGdsb2Jh
bCB2YXJpYWJsZXMuIik7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9m
SW1wb3J0ZWRGMzJHbG9iYWxWYXJpYWJsZXMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGlt
cG9ydGVkIGZsb2F0MzIgZ2xvYmFsIHZhcmlhYmxlcy4iKTsKKyAgICBSRUFEX0NPTVBBQ1RfVUlO
VDMyX09SX0ZBSUwobnVtYmVyT2ZJbXBvcnRlZEY2NEdsb2JhbFZhcmlhYmxlcywgIkNhbm5vdCBy
ZWFkIHRoZSBudW1iZXIgb2YgaW1wb3J0ZWQgZmxvYXQ2NCBnbG9iYWwgdmFyaWFibGVzLiIpOwor
ICAgIHVpbnQzMl90IG51bWJlck9mR2xvYmFsVmFyaWFibGVzID0gbnVtYmVyT2ZOb25JbXBvcnRl
ZEkzMkdsb2JhbFZhcmlhYmxlcyArIG51bWJlck9mTm9uSW1wb3J0ZWRGMzJHbG9iYWxWYXJpYWJs
ZXMgKyBudW1iZXJPZk5vbkltcG9ydGVkRjY0R2xvYmFsVmFyaWFibGVzICsKKyAgICAgICAgbnVt
YmVyT2ZJbXBvcnRlZEkzMkdsb2JhbFZhcmlhYmxlcyArIG51bWJlck9mSW1wb3J0ZWRGMzJHbG9i
YWxWYXJpYWJsZXMgKyBudW1iZXJPZkltcG9ydGVkRjY0R2xvYmFsVmFyaWFibGVzOworCisgICAg
VmVjdG9yPFdBU01UeXBlPiYgZ2xvYmFsVmFyaWFibGVUeXBlcyA9IG1fbW9kdWxlLT5nbG9iYWxW
YXJpYWJsZVR5cGVzKCk7CisgICAgVmVjdG9yPGNvbnN0IHZvaWQqPiYgZ2xvYmFsVmFyaWFibGVB
ZGRyZXNzZXMgPSBtX21vZHVsZS0+Z2xvYmFsVmFyaWFibGVBZGRyZXNzZXMoKTsKKworICAgIGds
b2JhbFZhcmlhYmxlVHlwZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkdsb2JhbFZh
cmlhYmxlcyk7CisgICAgZ2xvYmFsVmFyaWFibGVBZGRyZXNzZXMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShudW1iZXJPZkdsb2JhbFZhcmlhYmxlcyk7CisKKyAgICBzaXplX3QgZ2xvYmFsRGF0YVNp
emUgPSA4ICsKKyAgICAgICAgKG51bWJlck9mTm9uSW1wb3J0ZWRJMzJHbG9iYWxWYXJpYWJsZXMg
KiBzaXplb2YodWludDMyX3QpKSArCisgICAgICAgIChudW1iZXJPZk5vbkltcG9ydGVkRjMyR2xv
YmFsVmFyaWFibGVzICogc2l6ZW9mKGZsb2F0KSkgKworICAgICAgICAobnVtYmVyT2ZOb25JbXBv
cnRlZEY2NEdsb2JhbFZhcmlhYmxlcyAqIHNpemVvZihkb3VibGUpKSArCisgICAgICAgIChudW1i
ZXJPZkltcG9ydGVkSTMyR2xvYmFsVmFyaWFibGVzICogc2l6ZW9mKHVpbnQzMl90KSkgKworICAg
ICAgICAobnVtYmVyT2ZJbXBvcnRlZEYzMkdsb2JhbFZhcmlhYmxlcyAqIHNpemVvZihmbG9hdCkp
ICsKKyAgICAgICAgKG51bWJlck9mSW1wb3J0ZWRGNjRHbG9iYWxWYXJpYWJsZXMgKiBzaXplb2Yo
ZG91YmxlKSk7CisgICAgbV9tb2R1bGUtPmdsb2JhbERhdGEoKS5kYXRhID0gZmFzdE1hbGxvYyhn
bG9iYWxEYXRhU2l6ZSk7CisgICAgdm9pZCogZ2xvYmFsQWRkcmVzcyA9IG1fbW9kdWxlLT5nbG9i
YWxEYXRhKCkuZGF0YTsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZk5v
bkltcG9ydGVkSTMyR2xvYmFsVmFyaWFibGVzOyArK2kpIHsKKyAgICAgICAgZ2xvYmFsVmFyaWFi
bGVUeXBlcy5hcHBlbmQoV0FTTVR5cGU6OkkzMik7CisgICAgICAgICooKHVpbnQzMl90KilnbG9i
YWxBZGRyZXNzKSA9IDA7CisgICAgICAgIGdsb2JhbFZhcmlhYmxlQWRkcmVzc2VzLmFwcGVuZChn
bG9iYWxBZGRyZXNzKTsKKyAgICAgICAgZ2xvYmFsQWRkcmVzcyA9ICh1aW50MzJfdCopZ2xvYmFs
QWRkcmVzcyArIDE7CisgICAgfQorICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJP
Zk5vbkltcG9ydGVkRjMyR2xvYmFsVmFyaWFibGVzOyArK2kpIHsKKyAgICAgICAgZ2xvYmFsVmFy
aWFibGVUeXBlcy5hcHBlbmQoV0FTTVR5cGU6OkYzMik7CisgICAgICAgICooKGZsb2F0KilnbG9i
YWxBZGRyZXNzKSA9IDAuZjsKKyAgICAgICAgZ2xvYmFsVmFyaWFibGVBZGRyZXNzZXMuYXBwZW5k
KGdsb2JhbEFkZHJlc3MpOworICAgICAgICBnbG9iYWxBZGRyZXNzID0gKGZsb2F0KilnbG9iYWxB
ZGRyZXNzICsgMTsKKyAgICB9CisgICAgZ2xvYmFsQWRkcmVzcyA9IGJpdHdpc2VfY2FzdDx2b2lk
Kj4oKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGdsb2JhbEFkZHJlc3MpICsgOCAtIDEpICYgfnN0
YXRpY19jYXN0PHVpbnRwdHJfdD4oOCAtIDEpKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBp
IDwgbnVtYmVyT2ZOb25JbXBvcnRlZEY2NEdsb2JhbFZhcmlhYmxlczsgKytpKSB7CisgICAgICAg
IGdsb2JhbFZhcmlhYmxlVHlwZXMuYXBwZW5kKFdBU01UeXBlOjpGNjQpOworICAgICAgICAqKChk
b3VibGUqKWdsb2JhbEFkZHJlc3MpID0gMC4wOworICAgICAgICBnbG9iYWxWYXJpYWJsZUFkZHJl
c3Nlcy5hcHBlbmQoZ2xvYmFsQWRkcmVzcyk7CisgICAgICAgIGdsb2JhbEFkZHJlc3MgPSAoZG91
YmxlKilnbG9iYWxBZGRyZXNzICsgMTsKKyAgICB9CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsg
aSA8IG51bWJlck9mSW1wb3J0ZWRJMzJHbG9iYWxWYXJpYWJsZXM7ICsraSkgeworICAgICAgICBT
dHJpbmcgaW1wb3J0TmFtZTsKKyAgICAgICAgUkVBRF9TVFJJTkdfT1JfRkFJTChpbXBvcnROYW1l
LCAiQ2Fubm90IHJlYWQgdGhlIGltcG9ydCBuYW1lIG9mIGFuIGludDMyIGdsb2JhbCB2YXJpYWJs
ZS4iKTsKKyAgICAgICAgZ2xvYmFsVmFyaWFibGVUeXBlcy5hcHBlbmQoV0FTTVR5cGU6OkkzMik7
CisKKyAgICAgICAgLy8gRklYTUU6IEQuUi5ZLgorCisgICAgICAgIElkZW50aWZpZXIgaWRlbnRp
ZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMtPnZtKCksIGltcG9ydE5hbWUpOwor
ICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChlbnYpOworCisgICAgICAgIGlmICghZW52LT5nZXRQ
cm9wZXJ0eVNsb3QoZXhlYywgaWRlbnRpZmllciwgc2xvdCkpIHsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBEb24ndCB1c2UgZnByaW50Zi4KKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2Fu
J3QgZmluZCBhIGdsb2JhbCB2YXJpYWJsZSBuYW1lZCBcIiVzXCIuXG4iLCBpbXBvcnROYW1lLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgRkFJTF9XSVRIX01FU1NBR0UoIkNhbid0IGZpbmQg
YSBnbG9iYWwgdmFyaWFibGUuIik7CisgICAgICAgIH0KKworICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudGlmaWVyKTsKKyAgICAgICAgRkFJTF9JRl9GQUxT
RSh2YWx1ZS5pc051bWJlcigpIHx8IHZhbHVlLmlzQm9vbGVhbigpLCAiQW4gaW1wb3J0ZWQgZ2xv
YmFsIHZhcmlhYmxlIGlzIG5vdCBhIG51bWJlci4iKTsKKworICAgICAgICAqKCh1aW50MzJfdCop
Z2xvYmFsQWRkcmVzcykgPSB2YWx1ZS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgZ2xvYmFsVmFy
aWFibGVBZGRyZXNzZXMuYXBwZW5kKGdsb2JhbEFkZHJlc3MpOworICAgICAgICBnbG9iYWxBZGRy
ZXNzID0gKHVpbnQzMl90KilnbG9iYWxBZGRyZXNzICsgMTsKKyAgICB9CisgICAgZm9yICh1aW50
MzJfdCBpID0gMDsgaSA8IG51bWJlck9mSW1wb3J0ZWRGMzJHbG9iYWxWYXJpYWJsZXM7ICsraSkg
eworICAgICAgICBTdHJpbmcgaW1wb3J0TmFtZTsKKyAgICAgICAgUkVBRF9TVFJJTkdfT1JfRkFJ
TChpbXBvcnROYW1lLCAiQ2Fubm90IHJlYWQgdGhlIGltcG9ydCBuYW1lIG9mIGEgZmxvYXQzMiBn
bG9iYWwgdmFyaWFibGUuIik7CisgICAgICAgIGdsb2JhbFZhcmlhYmxlVHlwZXMuYXBwZW5kKFdB
U01UeXBlOjpGMzIpOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUUKKyAgICAgICAgKigoZmxv
YXQqKWdsb2JhbEFkZHJlc3MpID0gMC5mOworICAgICAgICBnbG9iYWxWYXJpYWJsZUFkZHJlc3Nl
cy5hcHBlbmQoZ2xvYmFsQWRkcmVzcyk7CisgICAgICAgIGdsb2JhbEFkZHJlc3MgPSAoZmxvYXQq
KWdsb2JhbEFkZHJlc3MgKyAxOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorICAgIGdsb2JhbEFkZHJlc3MgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KChiaXR3
aXNlX2Nhc3Q8dWludHB0cl90PihnbG9iYWxBZGRyZXNzKSArIDggLSAxKSAmIH5zdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KDggLSAxKSk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJl
ck9mSW1wb3J0ZWRGNjRHbG9iYWxWYXJpYWJsZXM7ICsraSkgeworICAgICAgICBTdHJpbmcgaW1w
b3J0TmFtZTsKKyAgICAgICAgUkVBRF9TVFJJTkdfT1JfRkFJTChpbXBvcnROYW1lLCAiQ2Fubm90
IHJlYWQgdGhlIGltcG9ydCBuYW1lIG9mIGEgZmxvYXQ2NCBnbG9iYWwgdmFyaWFibGUuIik7Cisg
ICAgICAgIGdsb2JhbFZhcmlhYmxlVHlwZXMuYXBwZW5kKFdBU01UeXBlOjpGNjQpOworCisgICAg
ICAgIC8vIEZJWE1FOiBELlIuWS4KKworICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLT52bSgpLCBpbXBvcnROYW1lKTsKKyAgICAgICAg
UHJvcGVydHlTbG90IHNsb3QoZW52KTsKKworICAgICAgICBpZiAoIWVudi0+Z2V0UHJvcGVydHlT
bG90KGV4ZWMsIGlkZW50aWZpZXIsIHNsb3QpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogRG9u
J3QgdXNlIGZwcmludGYuCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbid0IGZpbmQg
YSBnbG9iYWwgdmFyaWFibGUgbmFtZWQgXCIlc1wiLlxuIiwgaW1wb3J0TmFtZS51dGY4KCkuZGF0
YSgpKTsKKyAgICAgICAgICAgIEZBSUxfV0lUSF9NRVNTQUdFKCJDYW4ndCBmaW5kIGEgZ2xvYmFs
IHZhcmlhYmxlLiIpOworICAgICAgICB9CisKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHNsb3Qu
Z2V0VmFsdWUoZXhlYywgaWRlbnRpZmllcik7CisgICAgICAgIEZBSUxfSUZfRkFMU0UodmFsdWUu
aXNOdW1iZXIoKSwgIkFuIGltcG9ydGVkIGdsb2JhbCB2YXJpYWJsZSBpcyBub3QgYSBudW1iZXIu
Iik7CisKKyAgICAgICAgKigoZG91YmxlKilnbG9iYWxBZGRyZXNzKSA9IHZhbHVlLnRvTnVtYmVy
KGV4ZWMpOworICAgICAgICBnbG9iYWxWYXJpYWJsZUFkZHJlc3Nlcy5hcHBlbmQoZ2xvYmFsQWRk
cmVzcyk7CisgICAgICAgIGdsb2JhbEFkZHJlc3MgPSAoZG91YmxlKilnbG9iYWxBZGRyZXNzICsg
MTsKKyAgICB9CisKKyAgICBBU1NFUlQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZ2xvYmFsQWRk
cmVzcykgPD0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9tb2R1bGUtPmdsb2JhbERhdGEoKS5k
YXRhKSArIGdsb2JhbERhdGFTaXplKTsKK30KKwordm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJz
ZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKCkKK3sKKyAgICB1aW50MzJfdCBudW1iZXJPZkZ1
bmN0aW9uRGVjbGFyYXRpb25zOworICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1i
ZXJPZkZ1bmN0aW9uRGVjbGFyYXRpb25zLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBmdW5j
dGlvbiBkZWNsYXJhdGlvbnMuIik7CisgICAgbV9tb2R1bGUtPmZ1bmN0aW9uRGVjbGFyYXRpb25z
KCkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkZ1bmN0aW9uRGVjbGFyYXRpb25zKTsK
KyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGdW5jdGlvbkRlY2xhcmF0aW9u
czsgKytpKSB7CisgICAgICAgIFdBU01GdW5jdGlvbkRlY2xhcmF0aW9uIGZ1bmN0aW9uRGVjbGFy
YXRpb247CisgICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChmdW5jdGlvbkRlY2xh
cmF0aW9uLnNpZ25hdHVyZUluZGV4LCAiQ2Fubm90IHJlYWQgdGhlIHNpZ25hdHVyZSBpbmRleC4i
KTsKKyAgICAgICAgRkFJTF9JRl9GQUxTRShmdW5jdGlvbkRlY2xhcmF0aW9uLnNpZ25hdHVyZUlu
ZGV4IDwgbV9tb2R1bGUtPnNpZ25hdHVyZXMoKS5zaXplKCksICJUaGUgc2lnbmF0dXJlIGluZGV4
IGlzIGluY29ycmVjdC4iKTsKKyAgICAgICAgbV9tb2R1bGUtPmZ1bmN0aW9uRGVjbGFyYXRpb25z
KCkuYXBwZW5kKGZ1bmN0aW9uRGVjbGFyYXRpb24pOworICAgIH0KK30KKwordm9pZCBXQVNNTW9k
dWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uUG9pbnRlclRhYmxlU2VjdGlvbigpCit7CisgICAgdWlu
dDMyX3QgbnVtYmVyT2ZGdW5jdGlvblBvaW50ZXJUYWJsZXM7CisgICAgUkVBRF9DT01QQUNUX1VJ
TlQzMl9PUl9GQUlMKG51bWJlck9mRnVuY3Rpb25Qb2ludGVyVGFibGVzLCAiQ2Fubm90IHJlYWQg
dGhlIG51bWJlciBvZiBmdW5jdGlvbiBwb2ludGVyIHRhYmxlcy4iKTsKKyAgICBtX21vZHVsZS0+
ZnVuY3Rpb25Qb2ludGVyVGFibGVzKCkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkZ1
bmN0aW9uUG9pbnRlclRhYmxlcyk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJl
ck9mRnVuY3Rpb25Qb2ludGVyVGFibGVzOyArK2kpIHsKKyAgICAgICAgV0FTTUZ1bmN0aW9uUG9p
bnRlclRhYmxlIGZ1bmN0aW9uUG9pbnRlclRhYmxlOworICAgICAgICBSRUFEX0NPTVBBQ1RfVUlO
VDMyX09SX0ZBSUwoZnVuY3Rpb25Qb2ludGVyVGFibGUuc2lnbmF0dXJlSW5kZXgsICJDYW5ub3Qg
cmVhZCB0aGUgc2lnbmF0dXJlIGluZGV4LiIpOworICAgICAgICBGQUlMX0lGX0ZBTFNFKGZ1bmN0
aW9uUG9pbnRlclRhYmxlLnNpZ25hdHVyZUluZGV4IDwgbV9tb2R1bGUtPnNpZ25hdHVyZXMoKS5z
aXplKCksICJUaGUgc2lnbmF0dXJlIGluZGV4IGlzIGluY29ycmVjdC4iKTsKKyAgICAgICAgdWlu
dDMyX3QgbnVtYmVyT2ZFbGVtZW50czsKKyAgICAgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9G
QUlMKG51bWJlck9mRWxlbWVudHMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRz
IG9mIGEgZnVuY3Rpb24gcG9pbnRlciB0YWJsZS4iKTsKKyAgICAgICAgRkFJTF9JRl9GQUxTRSho
YXNPbmVCaXRTZXQobnVtYmVyT2ZFbGVtZW50cyksICJUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIG11
c3QgYmUgYSBwb3dlciBvZiB0d28uIik7CisgICAgICAgIGZ1bmN0aW9uUG9pbnRlclRhYmxlLmVs
ZW1lbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZFbGVtZW50cyk7CisgICAgICAg
IGZvciAodWludDMyX3QgaiA9IDA7IGogPCBudW1iZXJPZkVsZW1lbnRzOyArK2opIHsKKyAgICAg
ICAgICAgIHVpbnQzMl90IGVsZW1lbnQ7CisgICAgICAgICAgICBSRUFEX0NPTVBBQ1RfVUlOVDMy
X09SX0ZBSUwoZWxlbWVudCwgIkNhbm5vdCByZWFkIGFuIGVsZW1lbnQgb2YgYSBmdW5jdGlvbiBw
b2ludGVyIHRhYmxlLiIpOworICAgICAgICAgICAgZnVuY3Rpb25Qb2ludGVyVGFibGUuZWxlbWVu
dHMuYXBwZW5kKGVsZW1lbnQpOworICAgICAgICB9CisgICAgICAgIG1fbW9kdWxlLT5mdW5jdGlv
blBvaW50ZXJUYWJsZXMoKS5hcHBlbmQoZnVuY3Rpb25Qb2ludGVyVGFibGUpOworICAgIH0KK30K
Kwordm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvblNlY3Rpb24o
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9tb2R1bGUtPmZ1bmN0aW9uRGVjbGFyYXRpb25zKCkuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgcGFyc2VGdW5jdGlvbkRlZmluaXRpb24odm0sIGdsb2JhbE9iamVjdCwgaSk7
CisgICAgICAgIFBST1BBR0FURV9FUlJPUigpOworICAgIH0KK30KKwordm9pZCBXQVNNTW9kdWxl
UGFyc2VyOjpwYXJzZUV4cG9ydFNlY3Rpb24oVk0mIHZtKQoreworICAgIFdBU01FeHBvcnRGb3Jt
YXQgZXhwb3J0Rm9ybWF0OworICAgIFJFQURfRVhQT1JUX0ZPUk1BVF9PUl9GQUlMKGV4cG9ydEZv
cm1hdCwgIkNhbm5vdCByZWFkIHRoZSBleHBvcnQgZm9ybWF0LiIpOworICAgIHN3aXRjaCAoZXhw
b3J0Rm9ybWF0KSB7CisgICAgY2FzZSBXQVNNRXhwb3J0Rm9ybWF0OjpEZWZhdWx0OiB7CisgICAg
ICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CisgICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJf
T1JfRkFJTChmdW5jdGlvbkluZGV4LCAiQ2Fubm90IHJlYWQgdGhlIGZ1bmN0aW9uIGluZGV4LiIp
OworICAgICAgICBGQUlMX0lGX0ZBTFNFKGZ1bmN0aW9uSW5kZXggPCBtX21vZHVsZS0+ZnVuY3Rp
b25zKCkuc2l6ZSgpLCAiVGhlIGZ1bmN0aW9uIGluZGV4IGlzIGluY29ycmVjdC4iKTsKKyAgICAg
ICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJk
ZWZhdWx0Iik7IC8vIFRPRE86IFVzZSBvdGhlciBuYW1lcworICAgICAgICBtX21vZHVsZS0+cHV0
RGlyZWN0KHZtLCBpZGVudGlmaWVyLCBtX21vZHVsZS0+ZnVuY3Rpb25zKClbZnVuY3Rpb25JbmRl
eF0uZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXQVNNRXhwb3J0Rm9y
bWF0OjpSZWNvcmQ6IHsKKyAgICAgICAgdWludDMyX3QgbnVtYmVyT2ZFeHBvcnRzOworICAgICAg
ICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZFeHBvcnRzLCAiQ2Fubm90IHJl
YWQgdGhlIG51bWJlciBvZiBleHBvcnRzLiIpOworICAgICAgICBmb3IgKHVpbnQzMl90IGV4cG9y
dEluZGV4ID0gMDsgZXhwb3J0SW5kZXggPCBudW1iZXJPZkV4cG9ydHM7ICsrZXhwb3J0SW5kZXgp
IHsKKyAgICAgICAgICAgIFN0cmluZyBleHBvcnROYW1lOworICAgICAgICAgICAgUkVBRF9TVFJJ
TkdfT1JfRkFJTChleHBvcnROYW1lLCAiQ2Fubm90IHJlYWQgdGhlIGZ1bmN0aW9uIGV4cG9ydCBu
YW1lLiIpOworICAgICAgICAgICAgLy8gVE9ETzogQ2hlY2sgaWYgZXhwb3J0TmFtZSBpcyBsZWdh
bC4KKyAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CisgICAgICAgICAgICBSRUFE
X0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwoZnVuY3Rpb25JbmRleCwgIkNhbm5vdCByZWFkIHRoZSBm
dW5jdGlvbiBpbmRleC4iKTsKKyAgICAgICAgICAgIEZBSUxfSUZfRkFMU0UoZnVuY3Rpb25JbmRl
eCA8IG1fbW9kdWxlLT5mdW5jdGlvbnMoKS5zaXplKCksICJUaGUgZnVuY3Rpb24gaW5kZXggaXMg
aW5jb3JyZWN0LiIpOworICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sIGV4cG9ydE5hbWUpOworICAgICAgICAgICAgbV9tb2R1bGUt
PnB1dERpcmVjdCh2bSwgaWRlbnRpZmllciwgbV9tb2R1bGUtPmZ1bmN0aW9ucygpW2Z1bmN0aW9u
SW5kZXhdLmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIFdB
U01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgc2l6ZV90IGZ1bmN0aW9uSW5kZXgpCit7CisgICAgdW5zaWdu
ZWQgc3RhcnRPZmZzZXRJblNvdXJjZSA9IG1fcmVhZGVyLmluZGV4KCk7CisgICAgdW5zaWduZWQg
ZW5kT2Zmc2V0SW5Tb3VyY2U7CisgICAgdW5zaWduZWQgc3RhY2tIZWlnaHQ7CisgICAgU3RyaW5n
IGVycm9yTWVzc2FnZTsKKyAgICBpZiAoIVdBU01GdW5jdGlvblBhcnNlcjo6Y2hlY2tTeW50YXgo
bV9tb2R1bGUsIG1fc291cmNlLCBmdW5jdGlvbkluZGV4LCBzdGFydE9mZnNldEluU291cmNlLCBl
bmRPZmZzZXRJblNvdXJjZSwgc3RhY2tIZWlnaHQsIGVycm9yTWVzc2FnZSkpIHsKKyAgICAgICAg
bV9lcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBTb3VyY2VDb2RlIHNvdXJjZShtX3NvdXJjZS5wcm92aWRlcigpLCBzdGFydE9mZnNldElu
U291cmNlLCBlbmRPZmZzZXRJblNvdXJjZSwgMSwgMSk7CisKKyAgICBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZSogdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUgPSBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZTo6Y3JlYXRlKCZ2bSwgc3RhcnRPZmZzZXRJblNvdXJjZSwgZW5kT2Zmc2V0SW5T
b3VyY2UgLSBzdGFydE9mZnNldEluU291cmNlLCBtX21vZHVsZSwgZnVuY3Rpb25JbmRleCwgc3Rh
Y2tIZWlnaHQpOworICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0g
dW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUtPmxpbmsodm0sIG1fc291cmNlKTsKIAotICAgIC8v
IFRPRE86IHBhcnNlIHRoZSByZXN0CisgICAgSlNGdW5jdGlvbioganNGdW5jdGlvbiA9IEpTRnVu
Y3Rpb246OmNyZWF0ZSh2bSwgZnVuY3Rpb25FeGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpOworICAg
IG1fbW9kdWxlLT5mdW5jdGlvbnMoKS5hcHBlbmQoV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+KHZt
LCBtX21vZHVsZSwganNGdW5jdGlvbikpOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgbV9yZWFk
ZXIuc2V0SW5kZXgoZW5kT2Zmc2V0SW5Tb3VyY2UpOwogfQogCi1KU1dBU01Nb2R1bGUqIHBhcnNl
V2ViQXNzZW1ibHkoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFN0
cmluZyYgZXJyb3JNZXNzYWdlKQorSlNXQVNNTW9kdWxlKiBwYXJzZVdlYkFzc2VtYmx5KEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU09iamVjdCogZW52LCBKU0Fy
cmF5QnVmZmVyKiBhcnJheUJ1ZmZlciwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgV0FT
TU1vZHVsZVBhcnNlciBXQVNNTW9kdWxlUGFyc2VyKHNvdXJjZSk7Ci0gICAgcmV0dXJuIFdBU01N
b2R1bGVQYXJzZXIucGFyc2UoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCBlcnJvck1lc3NhZ2UpOworICAgIFdBU01Nb2R1bGVQYXJzZXIgbW9kdWxlUGFyc2VyKHNvdXJj
ZSk7CisgICAgcmV0dXJuIG1vZHVsZVBhcnNlci5wYXJzZShleGVjLT52bSgpLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMsIGVudiwgYXJyYXlCdWZmZXIsIGVycm9yTWVzc2FnZSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V0FTTU1vZHVsZVBhcnNlci5oCmluZGV4IGY1ZDZhMzE3ODllMTMxMGQ0NzcyZDU4MTI4ZWRhYTRk
NjZkM2M0MjUuLjM0NGE2MTMwZjU0ZjIxMGZiMGIyYzc0YmE5OWU0ZTk0OWRiMTQzNzYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmgKQEAgLTI4LDMw
ICsyOCw0MiBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCisjaW5jbHVkZSAiSlNPYmpl
Y3QuaCIKKyNpbmNsdWRlICJKU1dBU01Nb2R1bGUuaCIKICNpbmNsdWRlICJXQVNNUmVhZGVyLmgi
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1j
bGFzcyBFeGVjU3RhdGU7Ci1jbGFzcyBKU0dsb2JhbE9iamVjdDsKLWNsYXNzIEpTV0FTTU1vZHVs
ZTsKLWNsYXNzIFNvdXJjZUNvZGU7Ci1jbGFzcyBWTTsKLQogY2xhc3MgV0FTTU1vZHVsZVBhcnNl
ciB7CiBwdWJsaWM6Ci0gICAgV0FTTU1vZHVsZVBhcnNlcihjb25zdCBTb3VyY2VDb2RlJik7Ci0g
ICAgSlNXQVNNTW9kdWxlKiBwYXJzZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UpOworICAgIFdBU01Nb2R1bGVQYXJzZXIoY29uc3QgU291cmNlQ29kZSYgc291cmNl
KQorICAgICAgICA6IG1fcmVhZGVyKHN0YXRpY19jYXN0PFdlYkFzc2VtYmx5U291cmNlUHJvdmlk
ZXIqPihzb3VyY2UucHJvdmlkZXIoKSktPmRhdGEoKSkKKyAgICAgICAgLCBtX3NvdXJjZShzb3Vy
Y2UpCisgICAgeworICAgIH0KKworICAgIEpTV0FTTU1vZHVsZSogcGFyc2UoVk0mLCBKU0dsb2Jh
bE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBlbnYsIEpTQXJyYXlCdWZmZXIqLCBTdHJp
bmcmIGVycm9yTWVzc2FnZSk7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBwYXJzZU1vZHVsZSgpOwor
ICAgIHZvaWQgcGFyc2VNb2R1bGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiBlbnYpOworICAgIHZvaWQgcGFyc2VDb25zdGFudFBvb2xTZWN0aW9uKCk7CisgICAg
dm9pZCBwYXJzZVNpZ25hdHVyZVNlY3Rpb24oKTsKKyAgICB2b2lkIHBhcnNlRnVuY3Rpb25JbXBv
cnRTZWN0aW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBlbnYpOworICAgIHZvaWQgcGFyc2VHbG9i
YWxTZWN0aW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBlbnYpOworICAgIHZvaWQgcGFyc2VGdW5j
dGlvbkRlY2xhcmF0aW9uU2VjdGlvbigpOworICAgIHZvaWQgcGFyc2VGdW5jdGlvblBvaW50ZXJU
YWJsZVNlY3Rpb24oKTsKKyAgICB2b2lkIHBhcnNlRnVuY3Rpb25EZWZpbml0aW9uU2VjdGlvbihW
TSYsIEpTR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBwYXJzZUV4cG9ydFNlY3Rpb24oVk0mKTsK
KworICAgIHZvaWQgcGFyc2VGdW5jdGlvbkRlZmluaXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCos
IHNpemVfdCBmdW5jdGlvbkluZGV4KTsKIAorICAgIEpTV0FTTU1vZHVsZSogbV9tb2R1bGU7IC8v
IEZJWE1FOiBzaG91bGRuJ3QgYmUgYSBzdGF0ZQogICAgIFdBU01SZWFkZXIgbV9yZWFkZXI7Cisg
ICAgY29uc3QgU291cmNlQ29kZSYgbV9zb3VyY2U7IC8vIEZJWE1FOgogICAgIFN0cmluZyBtX2Vy
cm9yTWVzc2FnZTsKIH07CiAKLUpTX0VYUE9SVF9QUklWQVRFIEpTV0FTTU1vZHVsZSogcGFyc2VX
ZWJBc3NlbWJseShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgU3RyaW5nJiBlcnJvck1l
c3NhZ2UpOworSlNfRVhQT1JUX1BSSVZBVEUgSlNXQVNNTW9kdWxlKiBwYXJzZVdlYkFzc2VtYmx5
KEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU09iamVjdCogZW52LCBKU0FycmF5QnVm
ZmVyKiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVJlYWRlci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUmVhZGVyLmNwcAppbmRleCAyN2JmOTM5NDJiYWMx
YmQ0OTJiZjc0MzI4MzBiZTcxMTBiZGFhOTc2Li5iZTUxZjc5NjQ0YWY3NzZkMTM2Yjk0ZmQ5MGVi
MGM5M2ZlMGJkNzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNN
UmVhZGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUmVhZGVyLmNw
cApAQCAtMjMsNiArMjMsMjAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorLyoKKyBMaWNlbnNl
ZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsK
KyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhl
IExpY2Vuc2UuCisgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyBo
dHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworIFVubGVzcyByZXF1
aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUK
KyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMg
SVMiIEJBU0lTLAorIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5E
LCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNw
ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyBsaW1pdGF0aW9ucyB1
bmRlciB0aGUgTGljZW5zZS4KKyovCisKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJX
QVNNUmVhZGVyLmgiCiAKQEAgLTMyLDcgKzQ2LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWJv
b2wgV0FTTVJlYWRlcjo6cmVhZFVuc2lnbmVkSW50MzIodWludDMyX3QmIHJlc3VsdCkKK2Jvb2wg
V0FTTVJlYWRlcjo6cmVhZFVJbnQzMih1aW50MzJfdCYgcmVzdWx0KQogewogICAgIENIRUNLX1JF
QUQoNCk7CiAgICAgcmVzdWx0ID0gbV9jdXJzb3JbMF0gfCBtX2N1cnNvclsxXSA8PCA4IHwgbV9j
dXJzb3JbMl0gPDwgMTYgfCBtX2N1cnNvclszXSA8PCAyNDsKQEAgLTc2LDYgKzkwLDE1MCBAQCBi
b29sIFdBU01SZWFkZXI6OnJlYWREb3VibGUoZG91YmxlJiByZXN1bHQpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKK2Jvb2wgV0FTTVJlYWRlcjo6cmVhZENvbXBhY3RVSW50MzIodWludDMyX3QmIHJl
c3VsdCkKK3sKKyAgICB1aW50MzJfdCBzdW0gPSAwOworICAgIHVuc2lnbmVkIHNoaWZ0ID0gMDsK
KyAgICBkbyB7CisgICAgICAgIENIRUNLX1JFQUQoMSk7CisgICAgICAgIHVpbnQ4X3QgYnl0ZSA9
ICptX2N1cnNvcisrOworICAgICAgICBpZiAoYnl0ZSA8IDB4ODApIHsKKyAgICAgICAgICAgIGlm
ICgoc2hpZnQgPT0gMjggJiYgYnl0ZSA+PSAweDEwKSB8fCAoc2hpZnQgJiYgIWJ5dGUpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHN1bSB8IChi
eXRlIDw8IHNoaWZ0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICAgIHN1bSB8PSAoYnl0ZSAmIDB4N2YpIDw8IHNoaWZ0OworICAgICAgICBzaGlmdCArPSA3Owor
ICAgIH0gd2hpbGUgKHNoaWZ0IDwgMzUpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBX
QVNNUmVhZGVyOjpyZWFkQ29tcGFjdEludDMyKHVpbnQzMl90JiByZXN1bHQpCit7CisgICAgdWlu
dDMyX3Qgc3VtID0gMDsKKyAgICB1bnNpZ25lZCBzaGlmdCA9IDA7CisgICAgZG8geworICAgICAg
ICBDSEVDS19SRUFEKDEpOworICAgICAgICB1aW50OF90IGJ5dGUgPSAqbV9jdXJzb3IrKzsKKyAg
ICAgICAgaWYgKGJ5dGUgPCAweDgwKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogQWRkIHNwZWNp
YWwgY2hlY2tzIGlmIHNoaWZ0ID09IDI4LgorICAgICAgICAgICAgc3VtIHw9IGJ5dGUgPDwgc2hp
ZnQ7CisgICAgICAgICAgICBpbnQgc2lnbkV4dGVuZCA9ICgzMiAtIDcpIC0gc2hpZnQ7CisgICAg
ICAgICAgICBpZiAoc2lnbkV4dGVuZCA+IDApCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gaW50
MzJfdChzdW0pIDw8IHNpZ25FeHRlbmQgPj4gc2lnbkV4dGVuZDsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICByZXN1bHQgPSBpbnQzMl90KHN1bSk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBzdW0gfD0gKGJ5dGUgJiAweDdmKSA8PCBzaGlm
dDsKKyAgICAgICAgc2hpZnQgKz0gNzsKKyAgICB9IHdoaWxlIChzaGlmdCA8IDM1KTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgV0FTTVJlYWRlcjo6cmVhZFN0cmluZyhTdHJpbmcmIHJl
c3VsdCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgd2hpbGUgKHRydWUpIHsK
KyAgICAgICAgQ0hFQ0tfUkVBRCgxKTsKKyAgICAgICAgY2hhciBjID0gKm1fY3Vyc29yKys7Cisg
ICAgICAgIGlmICghYykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBidWlsZGVyLmFwcGVu
ZChjKTsKKyAgICB9CisgICAgcmVzdWx0ID0gYnVpbGRlci50b1N0cmluZygpOworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFdBU01SZWFkZXI6OnJlYWRUeXBlKFdBU01UeXBlJiByZXN1bHQp
Cit7CisgICAgcmV0dXJuIHJlYWRCeXRlPFdBU01UeXBlPihyZXN1bHQsICh1aW50OF90KVdBU01U
eXBlOjpOdW1iZXJPZlR5cGVzKTsKK30KKworYm9vbCBXQVNNUmVhZGVyOjpyZWFkRXhwcmVzc2lv
blR5cGUoV0FTTUV4cHJlc3Npb25UeXBlJiByZXN1bHQpCit7CisgICAgcmV0dXJuIHJlYWRCeXRl
PFdBU01FeHByZXNzaW9uVHlwZT4ocmVzdWx0LCAodWludDhfdClXQVNNRXhwcmVzc2lvblR5cGU6
Ok51bWJlck9mRXhwcmVzc2lvblR5cGVzKTsKK30KKworYm9vbCBXQVNNUmVhZGVyOjpyZWFkRXhw
b3J0Rm9ybWF0KFdBU01FeHBvcnRGb3JtYXQmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gcmVhZEJ5
dGU8V0FTTUV4cG9ydEZvcm1hdD4ocmVzdWx0LCAodWludDhfdClXQVNNRXhwb3J0Rm9ybWF0OjpO
dW1iZXJPZkV4cG9ydEZvcm1hdHMpOworfQorCitib29sIFdBU01SZWFkZXI6OnJlYWRTd2l0Y2hD
YXNlKFdBU01Td2l0Y2hDYXNlJiByZXN1bHQpCit7CisgICAgcmV0dXJuIHJlYWRCeXRlPFdBU01T
d2l0Y2hDYXNlPihyZXN1bHQsICh1aW50OF90KVdBU01Td2l0Y2hDYXNlOjpOdW1iZXJPZlN3aXRj
aENhc2VzKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFQ+IGJvb2wgV0FTTVJlYWRlcjo6cmVhZEJ5
dGUoVCYgcmVzdWx0LCB1aW50OF90IG51bWJlck9mVmFsdWVzKQoreworICAgIENIRUNLX1JFQUQo
MSk7CisgICAgdWludDhfdCBieXRlID0gKm1fY3Vyc29yKys7CisgICAgaWYgKGJ5dGUgPj0gbnVt
YmVyT2ZWYWx1ZXMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQgPSBUKGJ5dGUp
OworICAgIHJldHVybiB0cnVlOworfQorCisvLyBGSVhNRTogUmVtb3ZlIHRoaXMuCit1aW50MzJf
dCBXQVNNUmVhZGVyOjpyZWFkVW5zaWduZWRJbnQzMigpCit7CisgICAgdWludDMyX3QgcmVzdWx0
ID0gKm1fY3Vyc29yKys7CisgICAgaWYgKHJlc3VsdCA8IDB4ODApCisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgcmVzdWx0ICY9IDB4N2Y7CisgICAgdW5zaWduZWQgc2hpZnQgPSA3OworICAg
IHdoaWxlICh0cnVlKSB7CisgICAgICAgIHVpbnQzMl90IGJ5dGUgPSAqbV9jdXJzb3IrKzsKKyAg
ICAgICAgaWYgKGJ5dGUgPCAweDgwKSB7CisgICAgICAgICAgICByZXN1bHQgfD0gKGJ5dGUgPDwg
c2hpZnQpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBy
ZXN1bHQgfD0gKGJ5dGUgJiAweDdmKSA8PCBzaGlmdDsKKyAgICAgICAgc2hpZnQgKz0gNzsKKyAg
ICB9Cit9CisKKy8vIEZJWE1FOiBVc2UgQ0hFQ0tfUkVBRCgpLgorYm9vbCBXQVNNUmVhZGVyOjpp
ZkkzMkxpdGVyYWwoY29uc3QgVmVjdG9yPHVpbnQzMl90PiYgaTMyQ29uc3RhbnRzLCB1aW50MzJf
dCogdTMyKQoreworICAgIHVpbnQ4X3QgYnl0ZSA9ICptX2N1cnNvcjsKKworICAgIGlmIChieXRl
ICYgaGFzSW1tZWRpYXRlRmxhZykgeworICAgICAgICBXQVNNT3BFeHByZXNzaW9uSTMyV2l0aElt
bWVkaWF0ZSBvcFdpdGhJbW1lZGlhdGUgPSBXQVNNT3BFeHByZXNzaW9uSTMyV2l0aEltbWVkaWF0
ZSgoYnl0ZSA+PiBpbW1lZGlhdGVCaXRzKSAmIChvcFdpdGhJbW1lZGlhdGVMaW1pdCAtIDEpKTsK
KyAgICAgICAgdWludDhfdCBpbW1lZGlhdGUgPSBieXRlICYgKGltbWVkaWF0ZUxpbWl0IC0gMSk7
CisKKyAgICAgICAgaWYgKG9wV2l0aEltbWVkaWF0ZSA9PSBXQVNNT3BFeHByZXNzaW9uSTMyV2l0
aEltbWVkaWF0ZTo6TGl0SW1tKSB7CisgICAgICAgICAgICBtX2N1cnNvcisrOworICAgICAgICAg
ICAgKnUzMiA9IGltbWVkaWF0ZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKG9wV2l0aEltbWVkaWF0ZSA9PSBXQVNNT3BFeHByZXNzaW9uSTMyV2l0
aEltbWVkaWF0ZTo6TGl0UG9vbCkgeworICAgICAgICAgICAgbV9jdXJzb3IrKzsKKyAgICAgICAg
ICAgICp1MzIgPSBpMzJDb25zdGFudHNbaW1tZWRpYXRlXTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlm
IChXQVNNT3BFeHByZXNzaW9uSTMyKGJ5dGUpID09IFdBU01PcEV4cHJlc3Npb25JMzI6OkxpdElt
bSkgeworICAgICAgICBtX2N1cnNvcisrOworICAgICAgICAqdTMyID0gcmVhZFVuc2lnbmVkSW50
MzIoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKFdBU01PcEV4cHJl
c3Npb25JMzIoYnl0ZSkgPT0gV0FTTU9wRXhwcmVzc2lvbkkzMjo6TGl0UG9vbCkgeworICAgICAg
ICBtX2N1cnNvcisrOworICAgICAgICAqdTMyID0gaTMyQ29uc3RhbnRzW3JlYWRVbnNpZ25lZElu
dDMyKCldOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZ
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVJlYWRlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVJlYWRlci5oCmluZGV4IDdjZGVhMmI5MmQ4
MmRlNmRhYTc4Y2I3ZDhmMzMyYTIzZjNlZmZjZTEuLjZmOWE3ZGRlZjhhYTkwOTBlMTkzYjNmN2Y5
NGJlODNjYzcyZTdkMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dB
U01SZWFkZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNUmVhZGVyLmgK
QEAgLTI4LDcgKzI4LDkgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlICJXQVNNQ29uc3RhbnRzLmgiCisjaW5jbHVkZSAiV0FT
TUZvcm1hdC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CiAKQEAgLTQwLDE1ICs0Miw0OCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAot
ICAgIGJvb2wgcmVhZFVuc2lnbmVkSW50MzIodWludDMyX3QmIHJlc3VsdCk7CisgICAgdW5zaWdu
ZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2N1cnNvciAtIG1fYnVmZmVyLmRhdGEoKTsgfQor
ICAgIHZvaWQgc2V0SW5kZXgodW5zaWduZWQgaW5kZXgpIHsgbV9jdXJzb3IgPSBtX2J1ZmZlci5k
YXRhKCkgKyBpbmRleDsgfQorCisgICAgYm9vbCByZWFkVUludDMyKHVpbnQzMl90JiByZXN1bHQp
OwogICAgIGJvb2wgcmVhZEZsb2F0KGZsb2F0JiByZXN1bHQpOwogICAgIGJvb2wgcmVhZERvdWJs
ZShkb3VibGUmIHJlc3VsdCk7CisgICAgYm9vbCByZWFkQ29tcGFjdFVJbnQzMih1aW50MzJfdCYg
cmVzdWx0KTsKKyAgICBib29sIHJlYWRDb21wYWN0SW50MzIodWludDMyX3QmIHJlc3VsdCk7Cisg
ICAgYm9vbCByZWFkU3RyaW5nKFN0cmluZyYgcmVzdWx0KTsKKyAgICBib29sIHJlYWRUeXBlKFdB
U01UeXBlJiByZXN1bHQpOworICAgIGJvb2wgcmVhZEV4cHJlc3Npb25UeXBlKFdBU01FeHByZXNz
aW9uVHlwZSYgcmVzdWx0KTsKKyAgICBib29sIHJlYWRFeHBvcnRGb3JtYXQoV0FTTUV4cG9ydEZv
cm1hdCYgcmVzdWx0KTsKKyAgICBib29sIHJlYWRTd2l0Y2hDYXNlKFdBU01Td2l0Y2hDYXNlJiBy
ZXN1bHQpOworCisgICAgdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVFdpdGhJbW1lZGlhdGU+IGlu
bGluZSBib29sIHJlYWRDb2RlKFQqLCBUV2l0aEltbWVkaWF0ZSosIHVpbnQ4X3QqIGltbWVkaWF0
ZSk7CisgICAgV0FTTU9wRXhwcmVzc2lvblZvaWQgcmVhZE9wRXhwcmVzc2lvblZvaWQoKSB7IHJl
dHVybiByZWFkQnl0ZTxXQVNNT3BFeHByZXNzaW9uVm9pZD4oKTsgfQorICAgIGJvb2wgaWZJMzJM
aXRlcmFsKGNvbnN0IFZlY3Rvcjx1aW50MzJfdD4mIGkzMnMsIHVpbnQzMl90Kik7CiAKIHByaXZh
dGU6CisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IGJvb2wgcmVhZEJ5dGUoVCYgcmVzdWx0LCB1aW50
OF90IG51bWJlck9mVmFsdWVzKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gVCByZWFkQnl0ZSgp
IHsgcmV0dXJuIFQoKm1fY3Vyc29yKyspOyB9CisgICAgdWludDMyX3QgcmVhZFVuc2lnbmVkSW50
MzIoKTsKKwogICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgbV9idWZmZXI7CiAgICAgY29uc3Qg
dWludDhfdCogbV9jdXJzb3I7CiB9OwogCisvLyBGSVhNRTogVXNlIENIRUNLX1JFQUQoKS4KK3Rl
bXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUV2l0aEltbWVkaWF0ZT4KK2Jvb2wgV0FTTVJlYWRlcjo6
cmVhZENvZGUoVCogdCwgVFdpdGhJbW1lZGlhdGUqIHRXaXRoSW1tZWRpYXRlLCB1aW50OF90KiBp
bW1lZGlhdGUpCit7CisgICAgdWludDhfdCBieXRlID0gKm1fY3Vyc29yKys7CisgICAgaWYgKCEo
Ynl0ZSAmIGhhc0ltbWVkaWF0ZUZsYWcpKSB7CisgICAgICAgICp0ID0gVChieXRlKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgKnRXaXRoSW1tZWRpYXRlID0gVFdpdGhJbW1l
ZGlhdGUoKGJ5dGUgPj4gaW1tZWRpYXRlQml0cykgJiAob3BXaXRoSW1tZWRpYXRlTGltaXQgLSAx
KSk7CisgICAgKmltbWVkaWF0ZSA9IGJ5dGUgJiAoaW1tZWRpYXRlTGltaXQgLSAxKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxF
KFdFQkFTU0VNQkxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FT
TVN5bnRheENoZWNrZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01TeW50YXhD
aGVja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNGZiZmVjZTcwZDg5NTg0NDU1MjlhODBlNzQyNjg0MTExNDBi
MGRjZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01T
eW50YXhDaGVja2VyLmgKQEAgLTAsMCArMSwzNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdBU01TeW50YXhDaGVja2VyX2gKKyNkZWZp
bmUgV0FTTVN5bnRheENoZWNrZXJfaAorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5j
bHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKworI2RlZmluZSBVTlVTRUQgMQorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgV0FTTVN5bnRheENoZWNrZXIgeworcHVibGljOgorICAgIHR5cGVkZWYg
aW50IEV4cHJlc3Npb247CisgICAgdHlwZWRlZiBpbnQgU3RhdGVtZW50OworICAgIHR5cGVkZWYg
aW50IEV4cHJlc3Npb25MaXN0OworICAgIHR5cGVkZWYgaW50IEp1bXA7CisgICAgdHlwZWRlZiBp
bnQgTGFiZWw7CisgICAgc3RydWN0IE1lbW9yeUFkZHJlc3MgeworICAgICAgICBNZW1vcnlBZGRy
ZXNzKHZvaWQqKSB7IH0KKyAgICAgICAgTWVtb3J5QWRkcmVzcyhib29sIGhhc0ltbWVkaWF0ZUlu
ZGV4LCB1aW50MzJfdCwgRXhwcmVzc2lvbiwgdWludDMyX3QpCisgICAgICAgICAgICA6IGhhc0lt
bWVkaWF0ZUluZGV4KGhhc0ltbWVkaWF0ZUluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKyAg
ICAgICAgYm9vbCBoYXNJbW1lZGlhdGVJbmRleDsKKyAgICB9OworCisgICAgV0FTTVN5bnRheENo
ZWNrZXIoKQorICAgICAgICA6IG1fc3RhY2tUb3AoMCkKKyAgICAgICAgLCBtX21heFN0YWNrVG9w
KDApCisgICAgeworICAgIH0KKworICAgIHZvaWQgc3RhcnRGdW5jdGlvbihjb25zdCBXQVNNU2ln
bmF0dXJlJiwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50MzJfdCkgeyB9CisgICAgdm9pZCBlbmRG
dW5jdGlvbigpIHsgQVNTRVJUKCFtX3N0YWNrVG9wKTsgfQorCisgICAgdm9pZCBzZXRMb2NhbCh1
aW50MzJfdCwgaW50LCBXQVNNVHlwZSkKKyAgICB7CisgICAgICAgIG1fc3RhY2tUb3AtLTsKKyAg
ICB9CisKKyAgICB2b2lkIHJldHVyblN0YXRlbWVudChpbnQsIFdBU01FeHByZXNzaW9uVHlwZSBy
ZXR1cm5UeXBlKQorICAgIHsKKyAgICAgICAgaWYgKHJldHVyblR5cGUgIT0gV0FTTUV4cHJlc3Np
b25UeXBlOjpWb2lkKQorICAgICAgICAgICAgbV9zdGFja1RvcC0tOworICAgIH0KKworICAgIGlu
dCBjcmVhdGVMaXRlcmFsUG9vbEV4cHJlc3Npb25JMzIodWludDMyX3QpCisgICAgeworICAgICAg
ICBtX3N0YWNrVG9wKys7CisgICAgICAgIHJlY29yZFN0YWNrVG9wKCk7CisgICAgICAgIHJldHVy
biBVTlVTRUQ7CisgICAgfQorCisgICAgaW50IGNyZWF0ZUxpdGVyYWxQb29sRXhwcmVzc2lvbkYz
Mih1aW50MzJfdCkKKyAgICB7CisgICAgICAgIG1fc3RhY2tUb3ArKzsKKyAgICAgICAgcmVjb3Jk
U3RhY2tUb3AoKTsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAgICBpbnQgY3Jl
YXRlTGl0ZXJhbFBvb2xFeHByZXNzaW9uRjY0KHVpbnQzMl90KQorICAgIHsKKyAgICAgICAgbV9z
dGFja1RvcCsrOworICAgICAgICByZWNvcmRTdGFja1RvcCgpOworICAgICAgICByZXR1cm4gVU5V
U0VEOworICAgIH0KKworICAgIGludCBjcmVhdGVMaXRlcmFsSW1tZWRpYXRlRXhwcmVzc2lvbkkz
Mih1aW50MzJfdCkKKyAgICB7CisgICAgICAgIG1fc3RhY2tUb3ArKzsKKyAgICAgICAgcmVjb3Jk
U3RhY2tUb3AoKTsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAgICBpbnQgY3Jl
YXRlTGl0ZXJhbEltbWVkaWF0ZUV4cHJlc3Npb25GMzIoZmxvYXQpCisgICAgeworICAgICAgICBt
X3N0YWNrVG9wKys7CisgICAgICAgIHJlY29yZFN0YWNrVG9wKCk7CisgICAgICAgIHJldHVybiBV
TlVTRUQ7CisgICAgfQorCisgICAgaW50IGNyZWF0ZUxpdGVyYWxJbW1lZGlhdGVFeHByZXNzaW9u
RjY0KGRvdWJsZSkKKyAgICB7CisgICAgICAgIG1fc3RhY2tUb3ArKzsKKyAgICAgICAgcmVjb3Jk
U3RhY2tUb3AoKTsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAgICBpbnQgY3Jl
YXRlR2V0TG9jYWxFeHByZXNzaW9uSTMyKHVpbnQzMl90KQorICAgIHsKKyAgICAgICAgbV9zdGFj
a1RvcCsrOworICAgICAgICByZWNvcmRTdGFja1RvcCgpOworICAgICAgICByZXR1cm4gVU5VU0VE
OworICAgIH0KKworICAgIGludCBjcmVhdGVHZXRMb2NhbEV4cHJlc3Npb25GMzIodWludDMyX3Qp
CisgICAgeworICAgICAgICBtX3N0YWNrVG9wKys7CisgICAgICAgIHJlY29yZFN0YWNrVG9wKCk7
CisgICAgICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQorCisgICAgaW50IGNyZWF0ZUdldExvY2Fs
RXhwcmVzc2lvbkY2NCh1aW50MzJfdCkKKyAgICB7CisgICAgICAgIG1fc3RhY2tUb3ArKzsKKyAg
ICAgICAgcmVjb3JkU3RhY2tUb3AoKTsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisK
KyAgICBpbnQgY3JlYXRlU2V0TG9jYWxFeHByZXNzaW9uSTMyKHVpbnQzMl90LCBpbnQpCisgICAg
eworICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKworICAgIGludCBjcmVhdGVTZXRMb2Nh
bEV4cHJlc3Npb25GMzIodWludDMyX3QsIGludCkKKyAgICB7CisgICAgICAgIHJldHVybiBVTlVT
RUQ7CisgICAgfQorCisgICAgaW50IGNyZWF0ZVNldExvY2FsRXhwcmVzc2lvbkY2NCh1aW50MzJf
dCwgaW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAgICBpbnQg
Y3JlYXRlR2V0R2xvYmFsRXhwcmVzc2lvbkkzMih1aW50MzJfdCkKKyAgICB7CisgICAgICAgIG1f
c3RhY2tUb3ArKzsKKyAgICAgICAgcmVjb3JkU3RhY2tUb3AoKTsKKyAgICAgICAgcmV0dXJuIFVO
VVNFRDsKKyAgICB9CisKKyAgICBpbnQgY3JlYXRlR2V0R2xvYmFsRXhwcmVzc2lvbkYzMih1aW50
MzJfdCkKKyAgICB7CisgICAgICAgIG1fc3RhY2tUb3ArKzsKKyAgICAgICAgcmVjb3JkU3RhY2tU
b3AoKTsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAgICBpbnQgY3JlYXRlR2V0
R2xvYmFsRXhwcmVzc2lvbkY2NCh1aW50MzJfdCkKKyAgICB7CisgICAgICAgIG1fc3RhY2tUb3Ar
KzsKKyAgICAgICAgcmVjb3JkU3RhY2tUb3AoKTsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAg
ICB9CisKKyAgICBpbnQgY3JlYXRlU2V0R2xvYmFsKHVpbnQzMl90LCBFeHByZXNzaW9uLCBXQVNN
VHlwZSwgYm9vbCBpc0V4cHJlc3Npb24pCisgICAgeworICAgICAgICBpZiAoIWlzRXhwcmVzc2lv
bikKKyAgICAgICAgICAgIG1fc3RhY2tUb3AtLTsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAg
ICB9CisKKyAgICBpbnQgY3JlYXRlTG9hZChjb25zdCBNZW1vcnlBZGRyZXNzJiBtZW1vcnlBZGRy
ZXNzLCBXQVNNRXhwcmVzc2lvblR5cGUsIFdBU01NZW1vcnlUeXBlLCBib29sKQorICAgIHsKKyAg
ICAgICAgaWYgKCFtZW1vcnlBZGRyZXNzLmhhc0ltbWVkaWF0ZUluZGV4KQorICAgICAgICAgICAg
bV9zdGFja1RvcC0tOworICAgICAgICBtX3N0YWNrVG9wKys7CisgICAgICAgIHJlY29yZFN0YWNr
VG9wKCk7CisgICAgICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQorCisgICAgaW50IGNyZWF0ZVN0
b3JlKGNvbnN0IE1lbW9yeUFkZHJlc3MmIG1lbW9yeUFkZHJlc3MsIFdBU01FeHByZXNzaW9uVHlw
ZSwgV0FTTU1lbW9yeVR5cGUsIEV4cHJlc3Npb24sIGJvb2wgaXNFeHByZXNzaW9uKQorICAgIHsK
KyAgICAgICAgbV9zdGFja1RvcC0tOworICAgICAgICBpZiAoIW1lbW9yeUFkZHJlc3MuaGFzSW1t
ZWRpYXRlSW5kZXgpCisgICAgICAgICAgICBtX3N0YWNrVG9wLS07CisgICAgICAgIGlmIChpc0V4
cHJlc3Npb24pCisgICAgICAgICAgICBtX3N0YWNrVG9wKys7CisgICAgICAgIHJldHVybiBVTlVT
RUQ7CisgICAgfQorCisgICAgaW50IGNyZWF0ZUNhbGxJbnRlcm5hbCh1aW50MzJfdCwgY29uc3Qg
V0FTTVNpZ25hdHVyZSYgc2lnbmF0dXJlLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlwZSkK
KyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBhbGlnbm1lbnQ/CisgICAgICAgIG1fc3RhY2tUb3Ag
LT0gc2lnbmF0dXJlLmFyZ3VtZW50cy5zaXplKCk7CisgICAgICAgIGlmIChyZXR1cm5UeXBlICE9
IFdBU01FeHByZXNzaW9uVHlwZTo6Vm9pZCkgeworICAgICAgICAgICAgbV9zdGFja1RvcCsrOwor
ICAgICAgICAgICAgcmVjb3JkU3RhY2tUb3AoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
VU5VU0VEOworICAgIH0KKworICAgIGludCBjcmVhdGVDYWxsSW5kaXJlY3QodWludDMyX3QsIGlu
dCwgY29uc3QgV0FTTVNpZ25hdHVyZSYgc2lnbmF0dXJlLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0
dXJuVHlwZSkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBhbGlnbm1lbnQ/CisgICAgICAgIG1f
c3RhY2tUb3AgLT0gc2lnbmF0dXJlLmFyZ3VtZW50cy5zaXplKCkgKyAxOworICAgICAgICBpZiAo
cmV0dXJuVHlwZSAhPSBXQVNNRXhwcmVzc2lvblR5cGU6OlZvaWQpIHsKKyAgICAgICAgICAgIG1f
c3RhY2tUb3ArKzsKKyAgICAgICAgICAgIHJlY29yZFN0YWNrVG9wKCk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAgICBpbnQgY3JlYXRlQ2FsbEltcG9ydCh1
aW50MzJfdCwgY29uc3QgV0FTTVNpZ25hdHVyZSYgc2lnbmF0dXJlLCBXQVNNRXhwcmVzc2lvblR5
cGUgcmV0dXJuVHlwZSkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBhbGlnbm1lbnQ/CisgICAg
ICAgIG1fc3RhY2tUb3AgLT0gc2lnbmF0dXJlLmFyZ3VtZW50cy5zaXplKCk7CisgICAgICAgIGlm
IChyZXR1cm5UeXBlICE9IFdBU01FeHByZXNzaW9uVHlwZTo6Vm9pZCkgeworICAgICAgICAgICAg
bV9zdGFja1RvcCsrOworICAgICAgICAgICAgcmVjb3JkU3RhY2tUb3AoKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKworICAgIGludCBjcmVhdGVGcm9tRjY0RXhw
cmVzc2lvbkkzMihpbnQpCisgICAgeworICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKwor
ICAgIGludCBjcmVhdGVGcm9tRjY0RXhwcmVzc2lvbkYzMihpbnQpCisgICAgeworICAgICAgICBy
ZXR1cm4gVU5VU0VEOworICAgIH0KKworICAgIGludCBjcmVhdGVGcm9tUzMyRXhwcmVzc2lvbkY2
NChpbnQpCisgICAgeworICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKworICAgIGludCBj
cmVhdGVGcm9tVTMyRXhwcmVzc2lvbkY2NChpbnQpCisgICAgeworICAgICAgICByZXR1cm4gVU5V
U0VEOworICAgIH0KKworICAgIGludCBjcmVhdGVVbmFyeUV4cHJlc3Npb25JMzIoaW50LCBXQVNN
T3BFeHByZXNzaW9uSTMyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisK
KyAgICBpbnQgY3JlYXRlVW5hcnlFeHByZXNzaW9uRjY0KGludCwgV0FTTU9wRXhwcmVzc2lvbkY2
NCkKKyAgICB7CisgICAgICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQorCisgICAgaW50IGNyZWF0
ZUJpbmFyeUV4cHJlc3Npb25JMzIoaW50LCBpbnQsIFdBU01PcEV4cHJlc3Npb25JMzIpCisgICAg
eworICAgICAgICBtX3N0YWNrVG9wLS07CisgICAgICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQor
CisgICAgaW50IGNyZWF0ZVJlbGF0aW9uYWxJMzJFeHByZXNzaW9uSTMyKGludCwgaW50LCBXQVNN
T3BFeHByZXNzaW9uSTMyKQorICAgIHsKKyAgICAgICAgbV9zdGFja1RvcC0tOworICAgICAgICBy
ZXR1cm4gVU5VU0VEOworICAgIH0KKworICAgIGludCBjcmVhdGVSZWxhdGlvbmFsRjY0RXhwcmVz
c2lvbkkzMihpbnQsIGludCwgV0FTTU9wRXhwcmVzc2lvbkkzMikKKyAgICB7CisgICAgICAgIG1f
c3RhY2tUb3AtLTsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAgICBpbnQgY3Jl
YXRlQmluYXJ5RXhwcmVzc2lvbkY2NChpbnQsIGludCwgV0FTTU9wRXhwcmVzc2lvbkY2NCkKKyAg
ICB7CisgICAgICAgIG1fc3RhY2tUb3AtLTsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9
CisKKyAgICBKdW1wIGppdEp1bXAoKSB7IHJldHVybiBVTlVTRUQ7IH0KKyAgICB2b2lkIGppdEp1
bXAoTGFiZWwpIHsgfQorICAgIHZvaWQgaml0TGlua0p1bXAoSnVtcCkgeyB9CisgICAgdm9pZCBq
aXRMaW5rSnVtcFRvTGFiZWwoSnVtcCwgTGFiZWwpIHsgfQorICAgIExhYmVsIGppdExhYmVsKCkg
eyByZXR1cm4gVU5VU0VEOyB9CisKKyAgICBKdW1wIGppdEJyYW5jaElmWmVybyhpbnQpCisgICAg
eworICAgICAgICBtX3N0YWNrVG9wLS07CisgICAgICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQor
CisgICAgSnVtcCBqaXRCcmFuY2hJZk5vblplcm8oaW50KQorICAgIHsKKyAgICAgICAgbV9zdGFj
a1RvcC0tOworICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKworICAgIHZvaWQgZ2VuZXJh
dGVTd2l0Y2hUYWJsZShFeHByZXNzaW9uLCBjb25zdCBWZWN0b3I8aW50MzJfdD4mLCBib29sLCBj
b25zdCBWZWN0b3I8TGFiZWw+JikKKyAgICB7CisgICAgICAgIG1fc3RhY2tUb3AtLTsKKyAgICB9
CisKKyAgICB2b2lkIHBvcCgpIC8vIEZJWE1FOiBUaGlzIHNlZW1zIGhhY2t5LgorICAgIHsKKyAg
ICAgICAgbV9zdGFja1RvcC0tOworICAgIH0KKworICAgIHVuc2lnbmVkIG1heFN0YWNrVG9wKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXhTdGFja1RvcDsgfQorCisgICAgdm9pZCBzdGFydExvb3AoKSB7
IH0KKyAgICB2b2lkIGVuZExvb3AoKSB7IH0KKyAgICB2b2lkIHN0YXJ0U3dpdGNoKCkgeyB9Cisg
ICAgdm9pZCBlbmRTd2l0Y2goKSB7IH0KKyAgICB2b2lkIGxpbmtCcmVhaygpIHsgfQorICAgIHZv
aWQgbGlua0NvbnRpbnVlKCkgeyB9CisgICAgdm9pZCBicmVha1N0YXRlbWVudCgpIHsgfQorICAg
IHZvaWQgY29udGludWVTdGF0ZW1lbnQoKSB7IH0KKyAgICB2b2lkIHN0YXJ0TGFiZWwoKSB7IH0K
KyAgICB2b2lkIGVuZExhYmVsKCkgeyB9CisgICAgdm9pZCBicmVha0xhYmVsU3RhdGVtZW50KHVp
bnQzMl90KSB7IH0KKyAgICB2b2lkIGNvbnRpbnVlTGFiZWxTdGF0ZW1lbnQodWludDMyX3QpIHsg
fQorCitwcml2YXRlOgorICAgIHZvaWQgcmVjb3JkU3RhY2tUb3AoKQorICAgIHsKKyAgICAgICAg
aWYgKG1fc3RhY2tUb3AgPiBtX21heFN0YWNrVG9wKQorICAgICAgICAgICAgbV9tYXhTdGFja1Rv
cCA9IG1fc3RhY2tUb3A7CisgICAgfQorCisgICAgdW5zaWduZWQgbV9zdGFja1RvcDsKKyAgICB1
bnNpZ25lZCBtX21heFN0YWNrVG9wOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNlbmRpZiAvLyBXQVNNU3ludGF4Q2hlY2tlcl9o
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>